@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1120 → 1.5.1217

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 (427) hide show
  1. package/assets/images/placeholders/credential.svg +69 -69
  2. package/assets/images/placeholders/user-icon-test.svg +9 -9
  3. package/assets/styles/main.min.css +1 -1
  4. package/assets/styles/main.min.css.map +1 -1
  5. package/esm2022/lib/components/bmb-academic-progress/bmb-academic-progress.component.mjs +87 -0
  6. package/esm2022/lib/components/bmb-accordion/bmb-accordion.component.mjs +159 -0
  7. package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +172 -0
  8. package/esm2022/lib/components/bmb-action-icon/bmb-action-icon.component.mjs +49 -0
  9. package/esm2022/lib/components/bmb-action-menu/bmb-action-menu.component.mjs +31 -0
  10. package/esm2022/lib/components/bmb-advertisement-card/bmb-advertisement-card.component.mjs +35 -0
  11. package/esm2022/lib/components/bmb-advertisement-card/types.mjs +2 -0
  12. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-ads/bmb-alert-center-ads.component.mjs +40 -0
  13. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-empty/bmb-alert-center-empty.component.mjs +18 -0
  14. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-form/bmb-alert-center-form.component.mjs +148 -0
  15. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-list/bmb-alert-center-list.component.mjs +52 -0
  16. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center.component.mjs +203 -0
  17. package/esm2022/lib/components/bmb-alert-center/bmb-alert-center.service.mjs +62 -0
  18. package/esm2022/lib/components/bmb-alert-center/types.mjs +2 -0
  19. package/esm2022/lib/components/bmb-badge/bmb-badge.component.mjs +26 -0
  20. package/esm2022/lib/components/bmb-balance-overview/bmb-balance-overview.component.mjs +26 -0
  21. package/esm2022/lib/components/bmb-bookmark/bmb-bookmark.component.mjs +27 -0
  22. package/esm2022/lib/components/bmb-bottom-navigation-bar/bmb-bottom-navigation-bar.component.mjs +42 -0
  23. package/esm2022/lib/components/bmb-breadcrumb/bmb-breadcrumb.component.mjs +55 -0
  24. package/esm2022/lib/components/bmb-button-icon/bmb-button-icon.component.mjs +30 -0
  25. package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +285 -0
  26. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-header/bmb-calendar-header.component.mjs +95 -0
  27. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-hour-view/bmb-calendar-hour-view.component.mjs +40 -0
  28. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-schedule-cards/bmb-calendar-schedule-cards.component.mjs +68 -0
  29. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-day/bmb-calendar-template-day.component.mjs +41 -0
  30. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +95 -0
  31. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-month/bmb-calendar-template-month.component.mjs +45 -0
  32. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-week/bmb-calendar-template-week.component.mjs +54 -0
  33. package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-time-indicator/bmb-calendar-time-indicator.component.mjs +24 -0
  34. package/esm2022/lib/components/bmb-calendar/types.mjs +2 -0
  35. package/esm2022/lib/components/bmb-calendar/utils.mjs +96 -0
  36. package/esm2022/lib/components/bmb-card/bmb-card.component.mjs +159 -0
  37. package/esm2022/lib/components/bmb-card-button/bmb-card-button.component.mjs +76 -0
  38. package/esm2022/lib/components/bmb-carousel/bmb-carousel.component.mjs +80 -0
  39. package/esm2022/lib/components/bmb-chat-bar/bmb-chat-bar.component.mjs +199 -0
  40. package/esm2022/lib/components/bmb-chat-bar/bot_list.mjs +57 -0
  41. package/esm2022/lib/components/bmb-chat-bar/types.mjs +2 -0
  42. package/esm2022/lib/components/bmb-chat-bubbles/bmb-chat-bubbles.component.mjs +56 -0
  43. package/esm2022/lib/components/bmb-chat-bubbles/types.mjs +2 -0
  44. package/esm2022/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.mjs +46 -0
  45. package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +80 -0
  46. package/esm2022/lib/components/bmb-chevron-title-selector/bmb-chevron-title-selector.component.mjs +36 -0
  47. package/esm2022/lib/components/bmb-container/bmb-container.component.mjs +27 -0
  48. package/esm2022/lib/components/bmb-container-button/bmb-container-button.component.mjs +96 -0
  49. package/esm2022/lib/components/bmb-date-range/bmb-date-range.component.mjs +69 -0
  50. package/esm2022/lib/components/bmb-datepicker/bmb-datepicker-modal/bmb-datepicker-modal.component.mjs +206 -0
  51. package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +144 -0
  52. package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +54 -0
  53. package/esm2022/lib/components/bmb-divider/bmb-divider.component.mjs +25 -0
  54. package/esm2022/lib/components/bmb-dot-paginator/bmb-dot-paginator.component.mjs +34 -0
  55. package/esm2022/lib/components/bmb-drawer-overlay/bmb-drawer-overlay.component.mjs +65 -0
  56. package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +177 -0
  57. package/esm2022/lib/components/bmb-dropdown-menu/bmb-dropdown-menu.component.mjs +31 -0
  58. package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +175 -0
  59. package/esm2022/lib/components/bmb-evaluation-rubric/bmb-evaluation-rubric.component.mjs +76 -0
  60. package/esm2022/lib/components/bmb-external-link/bmb-external-link.component.mjs +80 -0
  61. package/esm2022/lib/components/bmb-fab/bmb-fab-.interface.mjs +9 -0
  62. package/esm2022/lib/components/bmb-fab/bmb-fab.component.mjs +37 -0
  63. package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +166 -0
  64. package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.interface.mjs +2 -0
  65. package/esm2022/lib/components/bmb-focus-element/bmb-focus-element.component.mjs +36 -0
  66. package/esm2022/lib/components/bmb-form-validator/bmb-form-validator.component.mjs +159 -0
  67. package/esm2022/lib/components/bmb-frequent-apps-selector/bmb-frequent-apps-selector.component.mjs +29 -0
  68. package/esm2022/lib/components/bmb-grade-value/bmb-grade-value.component.mjs +22 -0
  69. package/esm2022/lib/components/bmb-grades/bmb-grades.component.mjs +178 -0
  70. package/esm2022/lib/components/bmb-grades/types.mjs +2 -0
  71. package/esm2022/lib/components/bmb-header-mitec/bmb-header-mitec.component.mjs +55 -0
  72. package/esm2022/lib/components/bmb-header-mobile/bmb-header-mobile.component.mjs +49 -0
  73. package/esm2022/lib/components/bmb-hito-card/bmb-hito-card.component.mjs +86 -0
  74. package/esm2022/lib/components/bmb-hito-list/bmb-hito-list.component.mjs +59 -0
  75. package/esm2022/lib/components/bmb-home-card/bmb-home-card-header/bmb-home-card-header.component.mjs +76 -0
  76. package/esm2022/lib/components/bmb-home-card/bmb-home-card.component.mjs +41 -0
  77. package/esm2022/lib/components/bmb-home-card-chat/bmb-home-card-chat.component.mjs +39 -0
  78. package/esm2022/lib/components/bmb-home-section/bmb-home-section.component.mjs +20 -0
  79. package/esm2022/lib/components/bmb-icon/bmb-icon.component.mjs +50 -0
  80. package/esm2022/lib/components/bmb-icon/types.mjs +2 -0
  81. package/esm2022/lib/components/bmb-icon-item/bmb-icon-item.component.mjs +23 -0
  82. package/esm2022/lib/components/bmb-icon-status/bmb-icon-status.component.mjs +24 -0
  83. package/esm2022/lib/components/bmb-iframe/bmb-iframe.component.mjs +19 -0
  84. package/esm2022/lib/components/bmb-iframe/bmb-iframe.pipe.mjs +21 -0
  85. package/esm2022/lib/components/bmb-image/bmb-image.component.mjs +33 -0
  86. package/esm2022/lib/components/bmb-inner-header/bmb-inner-header.component.mjs +77 -0
  87. package/esm2022/lib/components/bmb-input/bmb-input-content/bmb-input-content.component.mjs +146 -0
  88. package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +178 -0
  89. package/esm2022/lib/components/bmb-input/bmb-input.component.mjs +85 -0
  90. package/esm2022/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.mjs +219 -0
  91. package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +191 -0
  92. package/esm2022/lib/components/bmb-interactive-icon/bmb-interactive-icon.component.mjs +54 -0
  93. package/esm2022/lib/components/bmb-invoice/bmb-invoice.component.mjs +34 -0
  94. package/esm2022/lib/components/bmb-item/bmb-item.component.mjs +28 -0
  95. package/esm2022/lib/components/bmb-legend/bmb-legend.component.mjs +23 -0
  96. package/esm2022/lib/components/bmb-list-group/bmb-list-group-item/bmb-list-group-item.component.mjs +83 -0
  97. package/esm2022/lib/components/bmb-list-group/bmb-list-group.component.mjs +60 -0
  98. package/esm2022/lib/components/bmb-list-group/bmb-list-group.service.mjs +55 -0
  99. package/esm2022/lib/components/bmb-list-group/types.mjs +2 -0
  100. package/esm2022/lib/components/bmb-list-items/bmb-list-items.component.mjs +83 -0
  101. package/esm2022/lib/components/bmb-loader/bmb-loader.component.mjs +77 -0
  102. package/esm2022/lib/components/bmb-login/bmb-login-content/bmb-login-content.component.mjs +55 -0
  103. package/esm2022/lib/components/bmb-login/bmb-login.component.mjs +66 -0
  104. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logged/bmb-login-onboarding-logged.component.mjs +40 -0
  105. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-login/bmb-login-onboarding-login.component.mjs +20 -0
  106. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logout/bmb-login-onboarding-logout.component.mjs +33 -0
  107. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-four.component.mjs +91 -0
  108. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-one.component.mjs +88 -0
  109. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-three.component.mjs +57 -0
  110. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-two.component.mjs +99 -0
  111. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step.component.mjs +39 -0
  112. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper.component.mjs +44 -0
  113. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding.component.mjs +52 -0
  114. package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding.service.mjs +70 -0
  115. package/esm2022/lib/components/bmb-login-onboarding/types.mjs +2 -0
  116. package/esm2022/lib/components/bmb-logo/bmb-logo.component.mjs +43 -0
  117. package/esm2022/lib/components/bmb-media-card/bmb-media-card.component.mjs +64 -0
  118. package/esm2022/lib/components/bmb-mitec-logo-animation/bmb-mitec-logo-animation.component.mjs +14 -0
  119. package/esm2022/lib/components/bmb-mobile-templates/bmb-mobile-templates.component.mjs +88 -0
  120. package/esm2022/lib/components/bmb-modal/bmb-modal.component.mjs +139 -0
  121. package/esm2022/lib/components/bmb-modal/bmb-modal.interface.mjs +2 -0
  122. package/esm2022/lib/components/bmb-modal/bmb-native-modal.component.mjs +121 -0
  123. package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator-item/bmb-multi-dot-paginator-item.component.mjs +15 -0
  124. package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator.component.mjs +59 -0
  125. package/esm2022/lib/components/bmb-navigation-bar/bmb-navigation-bar.component.mjs +30 -0
  126. package/esm2022/lib/components/bmb-notice-card/bmb-notice-card.component.mjs +43 -0
  127. package/esm2022/lib/components/bmb-notification-card/bmb-notification-card.component.mjs +86 -0
  128. package/esm2022/lib/components/bmb-notification-counter/bmb-notification-counter.component.mjs +23 -0
  129. package/esm2022/lib/components/bmb-overlay/bmb-overlay.component.mjs +22 -0
  130. package/esm2022/lib/components/bmb-paginator/bmb-paginator.component.mjs +52 -0
  131. package/esm2022/lib/components/bmb-portal/bmb-portal.component.mjs +58 -0
  132. package/esm2022/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.mjs +120 -0
  133. package/esm2022/lib/components/bmb-profile/bmb-profile.component.mjs +153 -0
  134. package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +39 -0
  135. package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.component.mjs +196 -0
  136. package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.interface.mjs +2 -0
  137. package/esm2022/lib/components/bmb-pull-wedge/bmb-pull-wedge.component.mjs +88 -0
  138. package/esm2022/lib/components/bmb-push-notification/bmb-push-notification-item/bmb-push-notification-item.component.mjs +75 -0
  139. package/esm2022/lib/components/bmb-push-notification/bmb-push-notification.component.mjs +24 -0
  140. package/esm2022/lib/components/bmb-push-notification/types.mjs +2 -0
  141. package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +78 -0
  142. package/esm2022/lib/components/bmb-search-input/bmb-search-input.component.mjs +122 -0
  143. package/esm2022/lib/components/bmb-server-table/bmb-server-table.component.mjs +82 -0
  144. package/esm2022/lib/components/bmb-sidebar/bmb-sidebar.component.mjs +97 -0
  145. package/esm2022/lib/components/bmb-sidebar/bmb-sidebar.interface.mjs +2 -0
  146. package/esm2022/lib/components/bmb-simple-header/bmb-simple-header.component.mjs +64 -0
  147. package/esm2022/lib/components/bmb-skeleton/bmb-skeleton.component.mjs +16 -0
  148. package/esm2022/lib/components/bmb-sounds-card/bmb-sounds-card.component.mjs +64 -0
  149. package/esm2022/lib/components/bmb-stat-counter/bmb-stat-counter.component.mjs +32 -0
  150. package/esm2022/lib/components/bmb-step-progress-bar/bmb-step-progress-bar.component.mjs +55 -0
  151. package/esm2022/lib/components/bmb-student-activity-card/bmb-student-activity-card.component.mjs +53 -0
  152. package/esm2022/lib/components/bmb-student-activity-selector/bmb-student-activity-tab/bmb-student-activity-tab.component.mjs +27 -0
  153. package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +88 -0
  154. package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +541 -0
  155. package/esm2022/lib/components/bmb-tables/bmb-tables.interface.mjs +2 -0
  156. package/esm2022/lib/components/bmb-tabs/bmb-tabs.component.mjs +132 -0
  157. package/esm2022/lib/components/bmb-tags/bmb-tags.component.mjs +65 -0
  158. package/esm2022/lib/components/bmb-text-editor/bmb-text-editor.component.mjs +135 -0
  159. package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +43 -0
  160. package/esm2022/lib/components/bmb-theme/bmb-theme.component.mjs +65 -0
  161. package/esm2022/lib/components/bmb-three-cols/bmb-three-cols.component.mjs +30 -0
  162. package/esm2022/lib/components/bmb-timestream/bmb-timestream-detail/bmb-timestream-detail.component.mjs +74 -0
  163. package/esm2022/lib/components/bmb-timestream/bmb-timestream-error/bmb-timestream-error.component.mjs +13 -0
  164. package/esm2022/lib/components/bmb-timestream/bmb-timestream.component.mjs +236 -0
  165. package/esm2022/lib/components/bmb-timestream/types.mjs +2 -0
  166. package/esm2022/lib/components/bmb-timestream-card/bmb-timestream-card.component.mjs +139 -0
  167. package/esm2022/lib/components/bmb-title-content/bmb-title-content.component.mjs +61 -0
  168. package/esm2022/lib/components/bmb-toast/bmb-toast.component.mjs +47 -0
  169. package/esm2022/lib/components/bmb-tooltip/bmb-tooltip.component.mjs +26 -0
  170. package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-item/bmb-top-bar-item.component.mjs +31 -0
  171. package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-user-section/bmb-top-bar-user-section.component.mjs +94 -0
  172. package/esm2022/lib/components/bmb-top-bar/bmb-top-bar.component.mjs +86 -0
  173. package/esm2022/lib/components/bmb-top-bar/types.mjs +2 -0
  174. package/esm2022/lib/components/bmb-totp/bmb-totp.component.mjs +139 -0
  175. package/esm2022/lib/components/bmb-user-image/bmb-user-image.component.mjs +44 -0
  176. package/esm2022/lib/components/bmb-user-profile/bmb-user-profile-content/bmb-user-profile-content.component.mjs +19 -0
  177. package/esm2022/lib/components/bmb-user-profile/bmb-user-profile.component.mjs +71 -0
  178. package/esm2022/lib/components/bmb-user-summary/bmb-user-summary-content/bmb-user-summary-content.component.mjs +61 -0
  179. package/esm2022/lib/components/bmb-user-summary/bmb-user-summary.component.mjs +28 -0
  180. package/esm2022/lib/components/bmb-value-counter/bmb-value-counter.component.mjs +23 -0
  181. package/esm2022/lib/components/bmb-web-templates/bmb-web-templates.component.mjs +85 -0
  182. package/esm2022/lib/components/bmb-wheel-menu/bmb-wheel-menu.component.mjs +128 -0
  183. package/esm2022/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.mjs +51 -0
  184. package/esm2022/lib/directives/bmb-accordion/bmb-accordion-control.directive.mjs +88 -0
  185. package/esm2022/lib/directives/bmb-button/button.directive.mjs +84 -0
  186. package/esm2022/lib/directives/bmb-button-group/bmb-button-group.directive.mjs +29 -0
  187. package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +51 -0
  188. package/esm2022/lib/directives/bmb-layout/bmb-layout.directive.mjs +36 -0
  189. package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +34 -0
  190. package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout.directive.mjs +37 -0
  191. package/esm2022/lib/directives/bmb-layout-grid/bmb-layout-grid.directive.mjs +89 -0
  192. package/esm2022/lib/directives/utils/clickoutside.directive.mjs +41 -0
  193. package/esm2022/lib/ds-ng.component.mjs +11 -0
  194. package/esm2022/lib/ds-ng.service.mjs +14 -0
  195. package/esm2022/lib/services/calendar.service.mjs +51 -0
  196. package/esm2022/lib/services/index.mjs +3 -0
  197. package/esm2022/lib/services/native-modal.service.mjs +60 -0
  198. package/esm2022/lib/services/notification.service.mjs +84 -0
  199. package/esm2022/lib/services/projection.service.mjs +49 -0
  200. package/esm2022/lib/services/tabs.service.mjs +30 -0
  201. package/esm2022/lib/services/theme.service.mjs +30 -0
  202. package/esm2022/lib/services/toast.service.mjs +24 -0
  203. package/esm2022/lib/services/user/profile.service.mjs +26 -0
  204. package/esm2022/lib/types/colors.mjs +2 -0
  205. package/esm2022/lib/types/index.mjs +11 -0
  206. package/esm2022/lib/utils/countryCodes.mjs +1089 -0
  207. package/esm2022/lib/utils/currencyFormat.mjs +7 -0
  208. package/esm2022/lib/utils/dropdown.mjs +85 -0
  209. package/esm2022/lib/utils/formControl.mjs +25 -0
  210. package/esm2022/lib/utils/timestreamFilters.mjs +32 -0
  211. package/esm2022/lib/utils/utils.mjs +71 -0
  212. package/esm2022/public-api.mjs +152 -0
  213. package/esm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +5 -0
  214. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +2714 -2377
  215. package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
  216. package/index.d.ts +5 -3744
  217. package/lib/components/bmb-academic-progress/bmb-academic-progress.component.d.ts +21 -0
  218. package/lib/components/bmb-accordion/bmb-accordion.component.d.ts +37 -0
  219. package/lib/components/bmb-account-statement/bmb-account-statement.component.d.ts +56 -0
  220. package/lib/components/bmb-action-icon/bmb-action-icon.component.d.ts +23 -0
  221. package/lib/components/bmb-action-menu/bmb-action-menu.component.d.ts +17 -0
  222. package/lib/components/bmb-advertisement-card/bmb-advertisement-card.component.d.ts +13 -0
  223. package/lib/components/bmb-advertisement-card/types.d.ts +21 -0
  224. package/lib/components/bmb-alert-center/bmb-alert-center-ads/bmb-alert-center-ads.component.d.ts +10 -0
  225. package/lib/components/bmb-alert-center/bmb-alert-center-empty/bmb-alert-center-empty.component.d.ts +7 -0
  226. package/lib/components/bmb-alert-center/bmb-alert-center-form/bmb-alert-center-form.component.d.ts +31 -0
  227. package/lib/components/bmb-alert-center/bmb-alert-center-list/bmb-alert-center-list.component.d.ts +20 -0
  228. package/lib/components/bmb-alert-center/bmb-alert-center.component.d.ts +46 -0
  229. package/lib/components/bmb-alert-center/bmb-alert-center.service.d.ts +20 -0
  230. package/lib/components/bmb-alert-center/types.d.ts +64 -0
  231. package/lib/components/bmb-badge/bmb-badge.component.d.ts +11 -0
  232. package/lib/components/bmb-balance-overview/bmb-balance-overview.component.d.ts +15 -0
  233. package/lib/components/bmb-bookmark/bmb-bookmark.component.d.ts +8 -0
  234. package/lib/components/bmb-bottom-navigation-bar/bmb-bottom-navigation-bar.component.d.ts +25 -0
  235. package/lib/components/bmb-breadcrumb/bmb-breadcrumb.component.d.ts +27 -0
  236. package/lib/components/bmb-button-icon/bmb-button-icon.component.d.ts +16 -0
  237. package/lib/components/bmb-calendar/bmb-calendar.component.d.ts +67 -0
  238. package/lib/components/bmb-calendar/common/bmb-calendar-header/bmb-calendar-header.component.d.ts +20 -0
  239. package/lib/components/bmb-calendar/common/bmb-calendar-hour-view/bmb-calendar-hour-view.component.d.ts +13 -0
  240. package/lib/components/bmb-calendar/common/bmb-calendar-schedule-cards/bmb-calendar-schedule-cards.component.d.ts +16 -0
  241. package/lib/components/bmb-calendar/common/bmb-calendar-template-day/bmb-calendar-template-day.component.d.ts +18 -0
  242. package/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.d.ts +31 -0
  243. package/lib/components/bmb-calendar/common/bmb-calendar-template-month/bmb-calendar-template-month.component.d.ts +18 -0
  244. package/lib/components/bmb-calendar/common/bmb-calendar-template-week/bmb-calendar-template-week.component.d.ts +23 -0
  245. package/lib/components/bmb-calendar/common/bmb-calendar-time-indicator/bmb-calendar-time-indicator.component.d.ts +9 -0
  246. package/lib/components/bmb-calendar/types.d.ts +43 -0
  247. package/lib/components/bmb-calendar/utils.d.ts +12 -0
  248. package/lib/components/bmb-card/bmb-card.component.d.ts +43 -0
  249. package/lib/components/bmb-card-button/bmb-card-button.component.d.ts +50 -0
  250. package/lib/components/bmb-carousel/bmb-carousel.component.d.ts +20 -0
  251. package/lib/components/bmb-chat-bar/bmb-chat-bar.component.d.ts +63 -0
  252. package/lib/components/bmb-chat-bar/bot_list.d.ts +6 -0
  253. package/lib/components/bmb-chat-bar/types.d.ts +9 -0
  254. package/lib/components/bmb-chat-bubbles/bmb-chat-bubbles.component.d.ts +23 -0
  255. package/lib/components/bmb-chat-bubbles/types.d.ts +23 -0
  256. package/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.d.ts +21 -0
  257. package/lib/components/bmb-checkbox/bmb-checkbox.component.d.ts +33 -0
  258. package/lib/components/bmb-chevron-title-selector/bmb-chevron-title-selector.component.d.ts +17 -0
  259. package/lib/components/bmb-container/bmb-container.component.d.ts +9 -0
  260. package/lib/components/bmb-container-button/bmb-container-button.component.d.ts +39 -0
  261. package/lib/components/bmb-date-range/bmb-date-range.component.d.ts +35 -0
  262. package/lib/components/bmb-datepicker/bmb-datepicker-modal/bmb-datepicker-modal.component.d.ts +39 -0
  263. package/lib/components/bmb-datepicker/bmb-datepicker.component.d.ts +52 -0
  264. package/lib/components/bmb-digital-id/bmb-digital-id.component.d.ts +26 -0
  265. package/lib/components/bmb-divider/bmb-divider.component.d.ts +8 -0
  266. package/lib/components/bmb-dot-paginator/bmb-dot-paginator.component.d.ts +17 -0
  267. package/lib/components/bmb-drawer-overlay/bmb-drawer-overlay.component.d.ts +26 -0
  268. package/lib/components/bmb-dropdown/bmb-dropdown.component.d.ts +62 -0
  269. package/lib/components/bmb-dropdown-menu/bmb-dropdown-menu.component.d.ts +13 -0
  270. package/lib/components/bmb-dropzone/bmb-dropzone.component.d.ts +49 -0
  271. package/lib/components/bmb-evaluation-rubric/bmb-evaluation-rubric.component.d.ts +45 -0
  272. package/lib/components/bmb-external-link/bmb-external-link.component.d.ts +25 -0
  273. package/lib/components/bmb-fab/bmb-fab-.interface.d.ts +10 -0
  274. package/lib/components/bmb-fab/bmb-fab.component.d.ts +15 -0
  275. package/lib/components/bmb-filter-card/bmb-filter-card.component.d.ts +34 -0
  276. package/lib/components/bmb-filter-card/bmb-filter-card.interface.d.ts +12 -0
  277. package/lib/components/bmb-focus-element/bmb-focus-element.component.d.ts +14 -0
  278. package/lib/components/bmb-form-validator/bmb-form-validator.component.d.ts +34 -0
  279. package/lib/components/bmb-frequent-apps-selector/bmb-frequent-apps-selector.component.d.ts +13 -0
  280. package/lib/components/bmb-grade-value/bmb-grade-value.component.d.ts +11 -0
  281. package/lib/components/bmb-grades/bmb-grades.component.d.ts +43 -0
  282. package/lib/components/bmb-grades/types.d.ts +25 -0
  283. package/lib/components/bmb-header-mitec/bmb-header-mitec.component.d.ts +17 -0
  284. package/lib/components/bmb-header-mobile/bmb-header-mobile.component.d.ts +23 -0
  285. package/lib/components/bmb-hito-card/bmb-hito-card.component.d.ts +30 -0
  286. package/lib/components/bmb-hito-list/bmb-hito-list.component.d.ts +24 -0
  287. package/lib/components/bmb-home-card/bmb-home-card-header/bmb-home-card-header.component.d.ts +28 -0
  288. package/lib/components/bmb-home-card/bmb-home-card.component.d.ts +27 -0
  289. package/lib/components/bmb-home-card-chat/bmb-home-card-chat.component.d.ts +25 -0
  290. package/lib/components/bmb-home-section/bmb-home-section.component.d.ts +9 -0
  291. package/lib/components/bmb-icon/bmb-icon.component.d.ts +23 -0
  292. package/lib/components/bmb-icon/types.d.ts +1 -0
  293. package/lib/components/bmb-icon-item/bmb-icon-item.component.d.ts +13 -0
  294. package/lib/components/bmb-icon-status/bmb-icon-status.component.d.ts +10 -0
  295. package/lib/components/bmb-iframe/bmb-iframe.component.d.ts +11 -0
  296. package/lib/components/bmb-iframe/bmb-iframe.pipe.d.ts +10 -0
  297. package/lib/components/bmb-image/bmb-image.component.d.ts +19 -0
  298. package/lib/components/bmb-inner-header/bmb-inner-header.component.d.ts +29 -0
  299. package/lib/components/bmb-input/bmb-input-content/bmb-input-content.component.d.ts +52 -0
  300. package/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.d.ts +45 -0
  301. package/lib/components/bmb-input/bmb-input.component.d.ts +68 -0
  302. package/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.d.ts +52 -0
  303. package/lib/components/bmb-input-tags/bmb-input-tags.component.d.ts +55 -0
  304. package/lib/components/bmb-interactive-icon/bmb-interactive-icon.component.d.ts +23 -0
  305. package/lib/components/bmb-invoice/bmb-invoice.component.d.ts +31 -0
  306. package/lib/components/bmb-item/bmb-item.component.d.ts +16 -0
  307. package/lib/components/bmb-legend/bmb-legend.component.d.ts +9 -0
  308. package/lib/components/bmb-list-group/bmb-list-group-item/bmb-list-group-item.component.d.ts +33 -0
  309. package/lib/components/bmb-list-group/bmb-list-group.component.d.ts +27 -0
  310. package/lib/components/bmb-list-group/bmb-list-group.service.d.ts +18 -0
  311. package/lib/components/bmb-list-group/types.d.ts +1 -0
  312. package/lib/components/bmb-list-items/bmb-list-items.component.d.ts +33 -0
  313. package/lib/components/bmb-loader/bmb-loader.component.d.ts +31 -0
  314. package/lib/components/bmb-login/bmb-login-content/bmb-login-content.component.d.ts +27 -0
  315. package/lib/components/bmb-login/bmb-login.component.d.ts +33 -0
  316. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-logged/bmb-login-onboarding-logged.component.d.ts +14 -0
  317. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-login/bmb-login-onboarding-login.component.d.ts +8 -0
  318. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-logout/bmb-login-onboarding-logout.component.d.ts +12 -0
  319. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-four.component.d.ts +19 -0
  320. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-one.component.d.ts +17 -0
  321. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-three.component.d.ts +11 -0
  322. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-two.component.d.ts +19 -0
  323. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step.component.d.ts +19 -0
  324. package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper.component.d.ts +15 -0
  325. package/lib/components/bmb-login-onboarding/bmb-login-onboarding.component.d.ts +20 -0
  326. package/lib/components/bmb-login-onboarding/bmb-login-onboarding.service.d.ts +25 -0
  327. package/lib/components/bmb-login-onboarding/types.d.ts +15 -0
  328. package/lib/components/bmb-logo/bmb-logo.component.d.ts +19 -0
  329. package/lib/components/bmb-media-card/bmb-media-card.component.d.ts +34 -0
  330. package/lib/components/bmb-mitec-logo-animation/bmb-mitec-logo-animation.component.d.ts +6 -0
  331. package/lib/components/bmb-mobile-templates/bmb-mobile-templates.component.d.ts +47 -0
  332. package/lib/components/bmb-modal/bmb-modal.component.d.ts +31 -0
  333. package/lib/components/bmb-modal/bmb-modal.interface.d.ts +44 -0
  334. package/lib/components/bmb-modal/bmb-native-modal.component.d.ts +45 -0
  335. package/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator-item/bmb-multi-dot-paginator-item.component.d.ts +7 -0
  336. package/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator.component.d.ts +15 -0
  337. package/lib/components/bmb-navigation-bar/bmb-navigation-bar.component.d.ts +13 -0
  338. package/lib/components/bmb-notice-card/bmb-notice-card.component.d.ts +21 -0
  339. package/lib/components/bmb-notification-card/bmb-notification-card.component.d.ts +27 -0
  340. package/lib/components/bmb-notification-counter/bmb-notification-counter.component.d.ts +9 -0
  341. package/lib/components/bmb-overlay/bmb-overlay.component.d.ts +9 -0
  342. package/lib/components/bmb-paginator/bmb-paginator.component.d.ts +14 -0
  343. package/lib/components/bmb-portal/bmb-portal.component.d.ts +23 -0
  344. package/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.d.ts +34 -0
  345. package/lib/components/bmb-profile/bmb-profile.component.d.ts +34 -0
  346. package/lib/components/bmb-progress-bar/bmb-progress-bar.component.d.ts +19 -0
  347. package/lib/components/bmb-progress-cirlce/bmb-progress-circle.component.d.ts +51 -0
  348. package/lib/components/bmb-progress-cirlce/bmb-progress-circle.interface.d.ts +12 -0
  349. package/lib/components/bmb-pull-wedge/bmb-pull-wedge.component.d.ts +23 -0
  350. package/lib/components/bmb-push-notification/bmb-push-notification-item/bmb-push-notification-item.component.d.ts +18 -0
  351. package/lib/components/bmb-push-notification/bmb-push-notification.component.d.ts +11 -0
  352. package/lib/components/bmb-push-notification/types.d.ts +46 -0
  353. package/lib/components/bmb-radial/bmb-radial.component.d.ts +33 -0
  354. package/lib/components/bmb-search-input/bmb-search-input.component.d.ts +33 -0
  355. package/lib/components/bmb-server-table/bmb-server-table.component.d.ts +26 -0
  356. package/lib/components/bmb-sidebar/bmb-sidebar.component.d.ts +27 -0
  357. package/lib/components/bmb-sidebar/bmb-sidebar.interface.d.ts +10 -0
  358. package/lib/components/bmb-simple-header/bmb-simple-header.component.d.ts +10 -0
  359. package/lib/components/bmb-skeleton/bmb-skeleton.component.d.ts +7 -0
  360. package/lib/components/bmb-sounds-card/bmb-sounds-card.component.d.ts +24 -0
  361. package/lib/components/bmb-stat-counter/bmb-stat-counter.component.d.ts +11 -0
  362. package/lib/components/bmb-step-progress-bar/bmb-step-progress-bar.component.d.ts +30 -0
  363. package/lib/components/bmb-student-activity-card/bmb-student-activity-card.component.d.ts +23 -0
  364. package/lib/components/bmb-student-activity-selector/bmb-student-activity-tab/bmb-student-activity-tab.component.d.ts +10 -0
  365. package/lib/components/bmb-switch/bmb-switch.component.d.ts +25 -0
  366. package/lib/components/bmb-tables/bmb-tables.component.d.ts +104 -0
  367. package/lib/components/bmb-tables/bmb-tables.interface.d.ts +21 -0
  368. package/lib/components/bmb-tabs/bmb-tabs.component.d.ts +41 -0
  369. package/lib/components/bmb-tags/bmb-tags.component.d.ts +25 -0
  370. package/lib/components/bmb-text-editor/bmb-text-editor.component.d.ts +34 -0
  371. package/lib/components/bmb-text-link/bmb-text-link.component.d.ts +17 -0
  372. package/lib/components/bmb-theme/bmb-theme.component.d.ts +19 -0
  373. package/lib/components/bmb-three-cols/bmb-three-cols.component.d.ts +15 -0
  374. package/lib/components/bmb-timestream/bmb-timestream-detail/bmb-timestream-detail.component.d.ts +25 -0
  375. package/lib/components/bmb-timestream/bmb-timestream-error/bmb-timestream-error.component.d.ts +5 -0
  376. package/lib/components/bmb-timestream/bmb-timestream.component.d.ts +67 -0
  377. package/lib/components/bmb-timestream/types.d.ts +54 -0
  378. package/lib/components/bmb-timestream-card/bmb-timestream-card.component.d.ts +29 -0
  379. package/lib/components/bmb-title-content/bmb-title-content.component.d.ts +26 -0
  380. package/lib/components/bmb-toast/bmb-toast.component.d.ts +16 -0
  381. package/lib/components/bmb-tooltip/bmb-tooltip.component.d.ts +15 -0
  382. package/lib/components/bmb-top-bar/bmb-top-bar-item/bmb-top-bar-item.component.d.ts +7 -0
  383. package/lib/components/bmb-top-bar/bmb-top-bar-user-section/bmb-top-bar-user-section.component.d.ts +32 -0
  384. package/lib/components/bmb-top-bar/bmb-top-bar.component.d.ts +47 -0
  385. package/lib/components/bmb-top-bar/types.d.ts +6 -0
  386. package/lib/components/bmb-totp/bmb-totp.component.d.ts +31 -0
  387. package/lib/components/bmb-user-image/bmb-user-image.component.d.ts +19 -0
  388. package/lib/components/bmb-user-profile/bmb-user-profile-content/bmb-user-profile-content.component.d.ts +10 -0
  389. package/lib/components/bmb-user-profile/bmb-user-profile.component.d.ts +19 -0
  390. package/lib/components/bmb-user-summary/bmb-user-summary-content/bmb-user-summary-content.component.d.ts +26 -0
  391. package/lib/components/bmb-user-summary/bmb-user-summary.component.d.ts +14 -0
  392. package/lib/components/bmb-value-counter/bmb-value-counter.component.d.ts +8 -0
  393. package/lib/components/bmb-web-templates/bmb-web-templates.component.d.ts +42 -0
  394. package/lib/components/bmb-wheel-menu/bmb-wheel-menu.component.d.ts +40 -0
  395. package/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.d.ts +16 -0
  396. package/lib/directives/bmb-accordion/bmb-accordion-control.directive.d.ts +22 -0
  397. package/lib/directives/bmb-button/button.directive.d.ts +29 -0
  398. package/lib/directives/bmb-button-group/bmb-button-group.directive.d.ts +10 -0
  399. package/lib/directives/bmb-layout/bmb-layout-item.directive.d.ts +20 -0
  400. package/lib/directives/bmb-layout/bmb-layout.directive.d.ts +15 -0
  401. package/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.d.ts +9 -0
  402. package/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout.directive.d.ts +14 -0
  403. package/lib/directives/bmb-layout-grid/bmb-layout-grid.directive.d.ts +29 -0
  404. package/lib/directives/utils/clickoutside.directive.d.ts +15 -0
  405. package/lib/ds-ng.component.d.ts +5 -0
  406. package/lib/ds-ng.service.d.ts +6 -0
  407. package/lib/services/calendar.service.d.ts +15 -0
  408. package/lib/services/index.d.ts +2 -0
  409. package/lib/services/native-modal.service.d.ts +18 -0
  410. package/lib/services/notification.service.d.ts +20 -0
  411. package/lib/services/projection.service.d.ts +31 -0
  412. package/lib/services/tabs.service.d.ts +13 -0
  413. package/lib/services/theme.service.d.ts +11 -0
  414. package/lib/services/toast.service.d.ts +9 -0
  415. package/lib/services/user/profile.service.d.ts +9 -0
  416. package/lib/types/colors.d.ts +2 -0
  417. package/lib/types/index.d.ts +128 -0
  418. package/lib/utils/countryCodes.d.ts +7 -0
  419. package/lib/utils/currencyFormat.d.ts +1 -0
  420. package/lib/utils/dropdown.d.ts +6 -0
  421. package/lib/utils/formControl.d.ts +7 -0
  422. package/lib/utils/timestreamFilters.d.ts +2 -0
  423. package/lib/utils/utils.d.ts +13 -0
  424. package/package.json +6 -4
  425. package/public-api.d.ts +143 -0
  426. package/assets/svg/info_fill.svg +0 -1
  427. package/assets/svg/info_fill_primary.svg +0 -1
@@ -0,0 +1,177 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, input, output, model, computed, ViewChild, } from '@angular/core';
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
+ import { BmbIconComponent } from '../bmb-icon/bmb-icon.component';
5
+ import { convertListToSelectList, getSelectedValues, getValidInitialValues, } from '../../utils/dropdown';
6
+ import { BmbDropdownContentComponent } from '../utils/bmb-dropdown-content/bmb-dropdown-content.component';
7
+ import { BmbInputContentComponent } from '../bmb-input/bmb-input-content/bmb-input-content.component';
8
+ import { startWith } from 'rxjs';
9
+ import { getUUID } from '../../utils/utils';
10
+ import { assignNewFormControl, handleValidity, newFormControlByType, showError, } from '../../utils/formControl';
11
+ import { BmbInputValidatorComponent } from '../bmb-input/bmb-input-validator/bmb-input-validator.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../services/projection.service";
14
+ import * as i2 from "@angular/forms";
15
+ export class BmbDropdownComponent {
16
+ constructor(projectionService) {
17
+ this.projectionService = projectionService;
18
+ this.required = input(false);
19
+ this.showIcon = input(false);
20
+ this.placeholder = input('');
21
+ this.icon = input('');
22
+ this.options = input([]);
23
+ this.helperText = input('');
24
+ this.errorMessage = input('');
25
+ this.label = input('');
26
+ this.name = input(getUUID());
27
+ this.preferredOptions = input([]);
28
+ this.isMultiSelect = input(false);
29
+ this.tooltip = input('');
30
+ this.tooltipPosition = input({
31
+ align: 'above',
32
+ justify: 'before',
33
+ });
34
+ this.disabled = input(false);
35
+ this.value = input('');
36
+ this.isFilterable = input(false);
37
+ this.inputId = input(this.name());
38
+ this.customValidation = input();
39
+ this.control = model(newFormControlByType());
40
+ this.onValueChange = output();
41
+ this.onFocus = output();
42
+ this.uuid = getUUID();
43
+ this.isModalOpen = model(false);
44
+ this.selectionControl = new FormControl(new FormControl());
45
+ this.selectedIcon = '';
46
+ this.isKeyboardEvent = false;
47
+ this.isControlNull = false;
48
+ this.parsedOptions = computed(() => this.initOptions(this.options()));
49
+ this.selectedItem = null;
50
+ }
51
+ ngOnInit() {
52
+ if (!this.control()) {
53
+ this.control.set(assignNewFormControl(this.name(), this.control()));
54
+ this.isControlNull = true;
55
+ }
56
+ if (!this.isMultiSelect() && Array.isArray(this.control()?.value)) {
57
+ this.control().setValue('');
58
+ }
59
+ this.control()
60
+ ?.valueChanges.pipe(startWith(this.getValidInitialValues()))
61
+ .subscribe((value) => {
62
+ this.setSelectionControl(value);
63
+ });
64
+ }
65
+ ngOnChanges(changes) {
66
+ if (this.control() !== null) {
67
+ if (changes['options']) {
68
+ this.control().setValue(this.getValidInitialValues());
69
+ }
70
+ }
71
+ }
72
+ initOptions(list) {
73
+ const newItems = convertListToSelectList(list, this.icon(), this.showIcon());
74
+ let parsedItems = newItems.map((element) => {
75
+ return {
76
+ ...element,
77
+ icon: !this.isMultiSelect() && this.showIcon() ? element.icon : '',
78
+ action: () => {
79
+ this.setSelectedValue(element);
80
+ this.projectionService.closeContent();
81
+ },
82
+ };
83
+ });
84
+ if (!!this.preferredOptions().length) {
85
+ const preferredItems = parsedItems.filter((element) => this.preferredOptions().includes(element.value));
86
+ parsedItems = [...new Set([...preferredItems, ...parsedItems])];
87
+ }
88
+ return parsedItems;
89
+ }
90
+ handleFocus(value) {
91
+ this.onFocus.emit(value);
92
+ }
93
+ getUUID(name) {
94
+ return `${name}_${this.name()}_${this.uuid}`;
95
+ }
96
+ getIcon() {
97
+ if (!this.isMultiSelect() && this.showIcon())
98
+ return this.selectedIcon || this.icon();
99
+ return '';
100
+ }
101
+ getValidInitialValues() {
102
+ return getValidInitialValues(this.control().value, this.value(), this.options(), this.isMultiSelect());
103
+ }
104
+ setSelectionControl(controlValue) {
105
+ if (!!controlValue) {
106
+ if (this.isMultiSelect()) {
107
+ const selectedItems = this.parsedOptions().filter(({ value }) => controlValue.includes(value));
108
+ this.selectionControl.setValue(selectedItems.map((element) => ` ${element.selectedText}`));
109
+ return;
110
+ }
111
+ const item = this.parsedOptions().find(({ value }) => value === controlValue);
112
+ if (!!item) {
113
+ this.selectionControl.setValue(item?.selectedText);
114
+ if (this.showIcon())
115
+ this.selectedIcon = item.icon;
116
+ this.selectedItem = item;
117
+ }
118
+ return;
119
+ }
120
+ this.selectionControl.setValue('');
121
+ if (this.showIcon())
122
+ this.selectedIcon = this.icon();
123
+ }
124
+ setSelectedValue(element) {
125
+ if (this.isMultiSelect()) {
126
+ this.control().setValue(getSelectedValues(this.control().value, element.value));
127
+ }
128
+ else
129
+ this.control().setValue(element.value);
130
+ this.onValueChange.emit(this.control().value);
131
+ }
132
+ openList() {
133
+ const data = {
134
+ content: BmbDropdownContentComponent,
135
+ targetRef: this.contentRef?.nativeElement,
136
+ fixSizeToRef: true,
137
+ showBackdrop: false,
138
+ inputContext: {
139
+ selectedOption: this.control().value,
140
+ items: this.parsedOptions(),
141
+ isKeyboardEvent: this.isKeyboardEvent,
142
+ enableFilter: this.isFilterable(),
143
+ },
144
+ focusOnOpen: true,
145
+ };
146
+ this.projectionService.openContent(data);
147
+ }
148
+ // Keyboards events
149
+ onKeyDown(event) {
150
+ const keyboards = [' ', 'ArrowDown', 'Down'];
151
+ if (keyboards.includes(event.key)) {
152
+ this.openList();
153
+ }
154
+ }
155
+ handleValidity() {
156
+ handleValidity(this.control());
157
+ }
158
+ get shouldShowError() {
159
+ return showError(this.control());
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropdownComponent, deps: [{ token: i1.BmbProjectionContentService }], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: BmbDropdownComponent, isStandalone: true, selector: "bmb-dropdown", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, helperText: { classPropertyName: "helperText", publicName: "helperText", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, preferredOptions: { classPropertyName: "preferredOptions", publicName: "preferredOptions", isSignal: true, isRequired: false, transformFunction: null }, isMultiSelect: { classPropertyName: "isMultiSelect", publicName: "isMultiSelect", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, isFilterable: { classPropertyName: "isFilterable", publicName: "isFilterable", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, customValidation: { classPropertyName: "customValidation", publicName: "customValidation", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, isModalOpen: { classPropertyName: "isModalOpen", publicName: "isModalOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { control: "controlChange", onValueChange: "onValueChange", onFocus: "onFocus", isModalOpen: "isModalOpenChange" }, viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentDiv"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<bmb-input-validator\n class=\"bmb_dropdown\"\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"getValidInitialValues()\"\n [label]=\"label()!\"\n [errorMessage]=\"errorMessage()\"\n [helperMessage]=\"helperText()\"\n [isRequired]=\"required()\"\n [isDisabled]=\"disabled()\"\n [control]=\"control()\"\n [showError]=\"shouldShowError\"\n [tooltip]=\"tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [customValidation]=\"customValidation()\"\n>\n <div #contentDiv>\n <bmb-input-content\n class=\"bmb_dropdown-field\"\n type=\"text\"\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [icon]=\"getIcon()\"\n [control]=\"selectionControl\"\n [isReadOnly]=\"true\"\n [placeholder]=\"placeholder()\"\n [isError]=\"shouldShowError\"\n (click)=\"openList()\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"handleValidity()\"\n (onFocus)=\"handleFocus($event)\"\n >\n <ng-template #customContent>\n <label [htmlFor]=\"inputId()\">\n <bmb-icon\n class=\"bmb_field-actions\"\n icon=\"keyboard_arrow_down\"\n (click)=\"openList()\"\n [size]=\"24\"\n />\n </label>\n </ng-template>\n </bmb-input-content>\n </div>\n <input\n hidden\n type=\"text\"\n [id]=\"getUUID('id')\"\n [name]=\"name()\"\n [formControl]=\"control()\"\n />\n</bmb-input-validator>\n", styles: [".bmb_dropdown{display:inline-block;position:relative;width:100%}.bmb_dropdown-field .bmb_field-input{padding-right:2.25rem}.bmb_dropdown-field .bmb_field-input-normal,.bmb_dropdown-field .bmb_field-actions{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: BmbInputValidatorComponent, selector: "bmb-input-validator", inputs: ["inputId", "type", "appearance", "label", "labelPosition", "name", "value", "checked", "isRequired", "isDisabled", "max", "min", "maxLength", "minLength", "pattern", "jsonFormat", "tooltip", "rows", "tooltipPosition", "showMaxTextLength", "helperMessage", "errorMessage", "customValidation", "showError", "control"], outputs: ["showErrorChange", "controlChange"] }, { kind: "component", type: BmbInputContentComponent, selector: "bmb-input-content", inputs: ["type", "placeholder", "icon", "appearance", "isRequired", "name", "spellcheck", "heightTextArea", "maxLength", "minLength", "pattern", "max", "min", "inputId", "autoComplete", "rows", "isReadOnly", "additionalAction", "isClearable", "isError", "isHidden", "showStates", "control"], outputs: ["controlChange", "onFocus", "onBlur", "onChange", "onKeyDown", "onKeyUp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropdownComponent, decorators: [{
165
+ type: Component,
166
+ args: [{ selector: 'bmb-dropdown', standalone: true, imports: [
167
+ CommonModule,
168
+ BmbIconComponent,
169
+ ReactiveFormsModule,
170
+ BmbInputValidatorComponent,
171
+ BmbInputContentComponent,
172
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<bmb-input-validator\n class=\"bmb_dropdown\"\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"getValidInitialValues()\"\n [label]=\"label()!\"\n [errorMessage]=\"errorMessage()\"\n [helperMessage]=\"helperText()\"\n [isRequired]=\"required()\"\n [isDisabled]=\"disabled()\"\n [control]=\"control()\"\n [showError]=\"shouldShowError\"\n [tooltip]=\"tooltip()\"\n [tooltipPosition]=\"tooltipPosition()\"\n [customValidation]=\"customValidation()\"\n>\n <div #contentDiv>\n <bmb-input-content\n class=\"bmb_dropdown-field\"\n type=\"text\"\n [inputId]=\"inputId()\"\n [name]=\"name()\"\n [icon]=\"getIcon()\"\n [control]=\"selectionControl\"\n [isReadOnly]=\"true\"\n [placeholder]=\"placeholder()\"\n [isError]=\"shouldShowError\"\n (click)=\"openList()\"\n (onKeyDown)=\"onKeyDown($event)\"\n (onBlur)=\"handleValidity()\"\n (onFocus)=\"handleFocus($event)\"\n >\n <ng-template #customContent>\n <label [htmlFor]=\"inputId()\">\n <bmb-icon\n class=\"bmb_field-actions\"\n icon=\"keyboard_arrow_down\"\n (click)=\"openList()\"\n [size]=\"24\"\n />\n </label>\n </ng-template>\n </bmb-input-content>\n </div>\n <input\n hidden\n type=\"text\"\n [id]=\"getUUID('id')\"\n [name]=\"name()\"\n [formControl]=\"control()\"\n />\n</bmb-input-validator>\n", styles: [".bmb_dropdown{display:inline-block;position:relative;width:100%}.bmb_dropdown-field .bmb_field-input{padding-right:2.25rem}.bmb_dropdown-field .bmb_field-input-normal,.bmb_dropdown-field .bmb_field-actions{cursor:pointer}\n"] }]
173
+ }], ctorParameters: () => [{ type: i1.BmbProjectionContentService }], propDecorators: { contentRef: [{
174
+ type: ViewChild,
175
+ args: ['contentDiv', { static: true }]
176
+ }] } });
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItZHJvcGRvd24vYm1iLWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItZHJvcGRvd24vYm1iLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIscUJBQXFCLEdBQ3RCLE1BQU0sc0JBQXNCLENBQUM7QUFLOUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFFM0csT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLFNBQVMsR0FDVixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxN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LGc4RkMvRGpDLDA2Q0FvREEsd1JEQUksWUFBWSwrQkFDWixnQkFBZ0IsNkpBQ2hCLG1CQUFtQiwwa0JBQ25CLDBCQUEwQixxYkFDMUIsd0JBQXdCOzs0RkFPZixvQkFBb0I7a0JBZmhDLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQiwwQkFBMEI7d0JBQzFCLHdCQUF3QjtxQkFDekIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7Z0dBdUNNLFVBQVU7c0JBQXBELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBtb2RlbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25DaGFuZ2VzLFxuICBjb21wdXRlZCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgY29udmVydExpc3RUb1NlbGVjdExpc3QsXG4gIGdldFNlbGVjdGVkVmFsdWVzLFxuICBnZXRWYWxpZEluaXRpYWxWYWx1ZXMsXG59IGZyb20gJy4uLy4uL3V0aWxzL2Ryb3Bkb3duJztcbmltcG9ydCB7XG4gIElCbWJJbnB1dEVycm9yLFxuICBJQm1iSW5wdXRUb29sdGlwUG9zaXRpb24sXG59IGZyb20gJy4uL2JtYi1pbnB1dC9ibWItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJtYkRyb3Bkb3duQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL2JtYi1kcm9wZG93bi1jb250ZW50L2JtYi1kcm9wZG93bi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJRHJvcGRvd25JdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQm1iSW5wdXRDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWlucHV0L2JtYi1pbnB1dC1jb250ZW50L2JtYi1pbnB1dC1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldFVVSUQgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5pbXBvcnQge1xuICBhc3NpZ25OZXdGb3JtQ29udHJvbCxcbiAgaGFuZGxlVmFsaWRpdHksXG4gIG5ld0Zvcm1Db250cm9sQnlUeXBlLFxuICBzaG93RXJyb3IsXG59IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1Db250cm9sJztcbmltcG9ydCB7IEJtYklucHV0VmFsaWRhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWlucHV0L2JtYi1pbnB1dC12YWxpZGF0b3IvYm1iLWlucHV0LXZhbGlkYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iUHJvamVjdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvamVjdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJQm1iRHJvcGRvd25JdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBzZWxlY3RlZFRleHQ/OiBzdHJpbmc7IC8vaW50ZXJuYWxcbiAgaWNvbj86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JtYi1kcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQm1iSWNvbkNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEJtYklucHV0VmFsaWRhdG9yQ29tcG9uZW50LFxuICAgIEJtYklucHV0Q29udGVudENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2JtYi1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQm1iRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHJlcXVpcmVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzaG93SWNvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgaWNvbiA9IGlucHV0PHN0cmluZz4oJycpO1xuICBvcHRpb25zID0gaW5wdXQ8c3RyaW5nW10gfCBJQm1iRHJvcGRvd25JdGVtW10+KFtdKTtcbiAgaGVscGVyVGV4dCA9IGlucHV0PHN0cmluZz4oJycpO1xuICBlcnJvck1lc3NhZ2UgPSBpbnB1dDxzdHJpbmcgfCBJQm1iSW5wdXRFcnJvcj4oJycpO1xuICBsYWJlbCA9IGlucHV0PHN0cmluZz4oJycpO1xuICBuYW1lID0gaW5wdXQ8c3RyaW5nPihnZXRVVUlEKCkpO1xuICBwcmVmZXJyZWRPcHRpb25zID0gaW5wdXQ8c3RyaW5nW10+KFtdKTtcbiAgaXNNdWx0aVNlbGVjdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdG9vbHRpcCA9IGlucHV0PHN0cmluZz4oJycpO1xuICB0b29sdGlwUG9zaXRpb24gPSBpbnB1dDxJQm1iSW5wdXRUb29sdGlwUG9zaXRpb24+KHtcbiAgICBhbGlnbjogJ2Fib3ZlJyxcbiAgICBqdXN0aWZ5OiAnYmVmb3JlJyxcbiAgfSk7XG4gIGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICB2YWx1ZSA9IGlucHV0PHN0cmluZyB8IHN0cmluZ1tdPignJyk7XG4gIGlzRmlsdGVyYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5wdXRJZCA9IGlucHV0PHN0cmluZz4odGhpcy5uYW1lKCkpO1xuICBjdXN0b21WYWxpZGF0aW9uID0gaW5wdXQ8VmFsaWRhdG9yRm4+KCk7XG5cbiAgY29udHJvbCA9IG1vZGVsPEZvcm1Db250cm9sPihuZXdGb3JtQ29udHJvbEJ5VHlwZSgpKTtcblxuICBvblZhbHVlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgb25Gb2N1cyA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIHV1aWQ6IHN0cmluZyA9IGdldFVVSUQoKTtcbiAgaXNNb2RhbE9wZW4gPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gIHNlbGVjdGlvbkNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgc2VsZWN0ZWRJY29uOiBzdHJpbmcgPSAnJztcbiAgaXNLZXlib2FyZEV2ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ29udHJvbE51bGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyc2VkT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5pdE9wdGlvbnModGhpcy5vcHRpb25zKCkpKTtcbiAgc2VsZWN0ZWRJdGVtOiBJRHJvcGRvd25JdGVtIHwgbnVsbCA9IG51bGw7XG5cbiAgQFZpZXdDaGlsZCgnY29udGVudERpdicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSZWYhOiBFbGVtZW50UmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcm9qZWN0aW9uU2VydmljZTogQm1iUHJvamVjdGlvbkNvbnRlbnRTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5jb250cm9sKCkpIHtcbiAgICAgIHRoaXMuY29udHJvbC5zZXQoYXNzaWduTmV3Rm9ybUNvbnRyb2wodGhpcy5uYW1lKCksIHRoaXMuY29udHJvbCgpKSEpO1xuICAgICAgdGhpcy5pc0NvbnRyb2xOdWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNNdWx0aVNlbGVjdCgpICYmIEFycmF5LmlzQXJyYXkodGhpcy5jb250cm9sKCk/LnZhbHVlKSkge1xuICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoJycpO1xuICAgIH1cblxuICAgIHRoaXMuY29udHJvbCgpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmdldFZhbGlkSW5pdGlhbFZhbHVlcygpKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQ29udHJvbCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb250cm9sKCkgIT09IG51bGwpIHtcbiAgICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcbiAgICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUodGhpcy5nZXRWYWxpZEluaXRpYWxWYWx1ZXMoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW5pdE9wdGlvbnMobGlzdDogc3RyaW5nW10gfCBJQm1iRHJvcGRvd25JdGVtW10pOiBJRHJvcGRvd25JdGVtW10ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gY29udmVydExpc3RUb1NlbGVjdExpc3QoXG4gICAgICBsaXN0LFxuICAgICAgdGhpcy5pY29uKCksXG4gICAgICB0aGlzLnNob3dJY29uKCksXG4gICAgKTtcblxuICAgIGxldCBwYXJzZWRJdGVtcyA9IG5ld0l0ZW1zLm1hcCgoZWxlbWVudDogSURyb3Bkb3duSXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgaWNvbjogIXRoaXMuaXNNdWx0aVNlbGVjdCgpICYmIHRoaXMuc2hvd0ljb24oKSA/IGVsZW1lbnQuaWNvbiEgOiAnJyxcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlKGVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMucHJvamVjdGlvblNlcnZpY2UuY2xvc2VDb250ZW50KCk7XG4gICAgICAgIH0sXG4gICAgICB9IGFzIElEcm9wZG93bkl0ZW07XG4gICAgfSk7XG5cbiAgICBpZiAoISF0aGlzLnByZWZlcnJlZE9wdGlvbnMoKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByZWZlcnJlZEl0ZW1zOiBJRHJvcGRvd25JdGVtW10gPSBwYXJzZWRJdGVtcy5maWx0ZXIoKGVsZW1lbnQpID0+XG4gICAgICAgIHRoaXMucHJlZmVycmVkT3B0aW9ucygpLmluY2x1ZGVzKGVsZW1lbnQudmFsdWUhKSxcbiAgICAgICk7XG5cbiAgICAgIHBhcnNlZEl0ZW1zID0gWy4uLm5ldyBTZXQoWy4uLnByZWZlcnJlZEl0ZW1zLCAuLi5wYXJzZWRJdGVtc10pXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkSXRlbXM7XG4gIH1cblxuICBoYW5kbGVGb2N1cyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGdldFVVSUQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmFtZX1fJHt0aGlzLm5hbWUoKX1fJHt0aGlzLnV1aWR9YDtcbiAgfVxuXG4gIGdldEljb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aVNlbGVjdCgpICYmIHRoaXMuc2hvd0ljb24oKSlcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSWNvbiB8fCB0aGlzLmljb24oKTtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRWYWxpZEluaXRpYWxWYWx1ZXMoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIHJldHVybiBnZXRWYWxpZEluaXRpYWxWYWx1ZXMoXG4gICAgICB0aGlzLmNvbnRyb2woKS52YWx1ZSxcbiAgICAgIHRoaXMudmFsdWUoKSxcbiAgICAgIHRoaXMub3B0aW9ucygpLFxuICAgICAgdGhpcy5pc011bHRpU2VsZWN0KCksXG4gICAgKTtcbiAgfVxuXG4gIHNldFNlbGVjdGlvbkNvbnRyb2woY29udHJvbFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICghIWNvbnRyb2xWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaXNNdWx0aVNlbGVjdCgpKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLnBhcnNlZE9wdGlvbnMoKS5maWx0ZXIoKHsgdmFsdWUgfSkgPT5cbiAgICAgICAgICBjb250cm9sVmFsdWUuaW5jbHVkZXModmFsdWUhKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2wuc2V0VmFsdWUoXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcy5tYXAoKGVsZW1lbnQpID0+IGAgJHtlbGVtZW50LnNlbGVjdGVkVGV4dH1gKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5wYXJzZWRPcHRpb25zKCkuZmluZChcbiAgICAgICAgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IGNvbnRyb2xWYWx1ZSxcbiAgICAgICk7XG4gICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbC5zZXRWYWx1ZShpdGVtPy5zZWxlY3RlZFRleHQpO1xuICAgICAgICBpZiAodGhpcy5zaG93SWNvbigpKSB0aGlzLnNlbGVjdGVkSWNvbiA9IGl0ZW0uaWNvbjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgaWYgKHRoaXMuc2hvd0ljb24oKSkgdGhpcy5zZWxlY3RlZEljb24gPSB0aGlzLmljb24oKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkVmFsdWUoZWxlbWVudDogSURyb3Bkb3duSXRlbSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3QoKSkge1xuICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoXG4gICAgICAgIGdldFNlbGVjdGVkVmFsdWVzKHRoaXMuY29udHJvbCgpLnZhbHVlLCBlbGVtZW50LnZhbHVlISksXG4gICAgICApO1xuICAgIH0gZWxzZSB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZShlbGVtZW50LnZhbHVlISk7XG5cbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmNvbnRyb2woKS52YWx1ZSk7XG4gIH1cblxuICBvcGVuTGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgY29udGVudDogQm1iRHJvcGRvd25Db250ZW50Q29tcG9uZW50LFxuICAgICAgdGFyZ2V0UmVmOiB0aGlzLmNvbnRlbnRSZWY/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBmaXhTaXplVG9SZWY6IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgICAgaW5wdXRDb250ZXh0OiB7XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uOiB0aGlzLmNvbnRyb2woKS52YWx1ZSxcbiAgICAgICAgaXRlbXM6IHRoaXMucGFyc2VkT3B0aW9ucygpLFxuICAgICAgICBpc0tleWJvYXJkRXZlbnQ6IHRoaXMuaXNLZXlib2FyZEV2ZW50LFxuICAgICAgICBlbmFibGVGaWx0ZXI6IHRoaXMuaXNGaWx0ZXJhYmxlKCksXG4gICAgICB9LFxuICAgICAgZm9jdXNPbk9wZW46IHRydWUsXG4gICAgfTtcbiAgICB0aGlzLnByb2plY3Rpb25TZXJ2aWNlLm9wZW5Db250ZW50KGRhdGEpO1xuICB9XG5cbiAgLy8gS2V5Ym9hcmRzIGV2ZW50c1xuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXlib2FyZHMgPSBbJyAnLCAnQXJyb3dEb3duJywgJ0Rvd24nXTtcblxuICAgIGlmIChrZXlib2FyZHMuaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgdGhpcy5vcGVuTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVZhbGlkaXR5KCk6IHZvaWQge1xuICAgIGhhbmRsZVZhbGlkaXR5KHRoaXMuY29udHJvbCgpKTtcbiAgfVxuXG4gIGdldCBzaG91bGRTaG93RXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNob3dFcnJvcih0aGlzLmNvbnRyb2woKSk7XG4gIH1cbn1cbiIsIjxibWItaW5wdXQtdmFsaWRhdG9yXG4gIGNsYXNzPVwiYm1iX2Ryb3Bkb3duXCJcbiAgW2lucHV0SWRdPVwiaW5wdXRJZCgpXCJcbiAgW25hbWVdPVwibmFtZSgpXCJcbiAgW3ZhbHVlXT1cImdldFZhbGlkSW5pdGlhbFZhbHVlcygpXCJcbiAgW2xhYmVsXT1cImxhYmVsKCkhXCJcbiAgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2UoKVwiXG4gIFtoZWxwZXJNZXNzYWdlXT1cImhlbHBlclRleHQoKVwiXG4gIFtpc1JlcXVpcmVkXT1cInJlcXVpcmVkKClcIlxuICBbaXNEaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgW2NvbnRyb2xdPVwiY29udHJvbCgpXCJcbiAgW3Nob3dFcnJvcl09XCJzaG91bGRTaG93RXJyb3JcIlxuICBbdG9vbHRpcF09XCJ0b29sdGlwKClcIlxuICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCJcbiAgW2N1c3RvbVZhbGlkYXRpb25dPVwiY3VzdG9tVmFsaWRhdGlvbigpXCJcbj5cbiAgPGRpdiAjY29udGVudERpdj5cbiAgICA8Ym1iLWlucHV0LWNvbnRlbnRcbiAgICAgIGNsYXNzPVwiYm1iX2Ryb3Bkb3duLWZpZWxkXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFtpbnB1dElkXT1cImlucHV0SWQoKVwiXG4gICAgICBbbmFtZV09XCJuYW1lKClcIlxuICAgICAgW2ljb25dPVwiZ2V0SWNvbigpXCJcbiAgICAgIFtjb250cm9sXT1cInNlbGVjdGlvbkNvbnRyb2xcIlxuICAgICAgW2lzUmVhZE9ubHldPVwidHJ1ZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXG4gICAgICBbaXNFcnJvcl09XCJzaG91bGRTaG93RXJyb3JcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5MaXN0KClcIlxuICAgICAgKG9uS2V5RG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAob25CbHVyKT1cImhhbmRsZVZhbGlkaXR5KClcIlxuICAgICAgKG9uRm9jdXMpPVwiaGFuZGxlRm9jdXMoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21Db250ZW50PlxuICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwiaW5wdXRJZCgpXCI+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBjbGFzcz1cImJtYl9maWVsZC1hY3Rpb25zXCJcbiAgICAgICAgICAgIGljb249XCJrZXlib2FyZF9hcnJvd19kb3duXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuTGlzdCgpXCJcbiAgICAgICAgICAgIFtzaXplXT1cIjI0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2JtYi1pbnB1dC1jb250ZW50PlxuICA8L2Rpdj5cbiAgPGlucHV0XG4gICAgaGlkZGVuXG4gICAgdHlwZT1cInRleHRcIlxuICAgIFtpZF09XCJnZXRVVUlEKCdpZCcpXCJcbiAgICBbbmFtZV09XCJuYW1lKClcIlxuICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sKClcIlxuICAvPlxuPC9ibWItaW5wdXQtdmFsaWRhdG9yPlxuIl19
@@ -0,0 +1,31 @@
1
+ import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, } from '@angular/core';
2
+ import { BmbDropdownContentComponent } from '../utils/bmb-dropdown-content/bmb-dropdown-content.component';
3
+ import { BmbActionIconComponent } from '../bmb-action-icon/bmb-action-icon.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/projection.service";
6
+ export class BmbDropdownMenuComponent {
7
+ constructor(projectionService) {
8
+ this.projectionService = projectionService;
9
+ this.items = input([]);
10
+ }
11
+ openDropdown() {
12
+ const data = {
13
+ content: BmbDropdownContentComponent,
14
+ targetRef: this.contentRef?.nativeElement,
15
+ inputContext: { items: this.items() },
16
+ focusOnOpen: true,
17
+ showBackdrop: false,
18
+ };
19
+ this.projectionService.openContent(data);
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropdownMenuComponent, deps: [{ token: i1.BmbProjectionContentService }], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: BmbDropdownMenuComponent, isStandalone: true, selector: "bmb-dropdown-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentDiv"], descendants: true, static: true }], ngImport: i0, template: "<section class=\"bmb_dropdown_menu\" #contentDiv>\n <bmb-action-icon\n class=\"bmb_dropdown_menu-button\"\n icon=\"more_vert\"\n [iconSize]=\"24\"\n (buttonClick)=\"openDropdown()\"\n />\n</section>\n", styles: [".bmb_dropdown_menu{position:relative;color:currentColor}.bmb_dropdown_menu-list .bmb_dropdown-content-modal{left:var(--bmb-spacing-m);max-width:15.625rem}\n"], dependencies: [{ kind: "component", type: BmbActionIconComponent, selector: "bmb-action-icon", inputs: ["idElement", "icon", "alt", "iconSize", "isFill", "toggleIconActive", "isToggleActive", "isAccentColor", "dotNotification", "target", "link", "disabled"], outputs: ["isToggleActiveChange", "isAccentColorChange", "buttonPress", "buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropdownMenuComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'bmb-dropdown-menu', standalone: true, imports: [BmbActionIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<section class=\"bmb_dropdown_menu\" #contentDiv>\n <bmb-action-icon\n class=\"bmb_dropdown_menu-button\"\n icon=\"more_vert\"\n [iconSize]=\"24\"\n (buttonClick)=\"openDropdown()\"\n />\n</section>\n", styles: [".bmb_dropdown_menu{position:relative;color:currentColor}.bmb_dropdown_menu-list .bmb_dropdown-content-modal{left:var(--bmb-spacing-m);max-width:15.625rem}\n"] }]
27
+ }], ctorParameters: () => [{ type: i1.BmbProjectionContentService }], propDecorators: { contentRef: [{
28
+ type: ViewChild,
29
+ args: ['contentDiv', { static: true }]
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLWRyb3Bkb3duLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtbmcvc3JjL2xpYi9jb21wb25lbnRzL2JtYi1kcm9wZG93bi1tZW51L2JtYi1kcm9wZG93bi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItZHJvcGRvd24tbWVudS9ibWItZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBYXRGLE1BQU0sT0FBTyx3QkFBd0I7SUFLbkMsWUFBb0IsaUJBQThDO1FBQTlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBNkI7UUFKbEUsVUFBSyxHQUFHLEtBQUssQ0FBa0IsRUFBRSxDQUFDLENBQUM7SUFJa0MsQ0FBQztJQUV0RSxZQUFZO1FBQ1YsTUFBTSxJQUFJLEdBQUc7WUFDWCxPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWE7WUFDekMsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDOytHQWhCVSx3QkFBd0I7bUdBQXhCLHdCQUF3Qix5VUN2QnJDLHdOQVFBLHNORFdZLHNCQUFzQjs7NEZBSXJCLHdCQUF3QjtrQkFUcEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUdQLENBQUMsc0JBQXNCLENBQUMsbUJBQ2hCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7Z0dBS00sVUFBVTtzQkFBcEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbWJEcm9wZG93bkNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9ibWItZHJvcGRvd24tY29udGVudC9ibWItZHJvcGRvd24tY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQWN0aW9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1hY3Rpb24taWNvbi9ibWItYWN0aW9uLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElEcm9wZG93bkl0ZW0gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCbWJQcm9qZWN0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9qZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItZHJvcGRvd24tbWVudScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9ibWItZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9ibWItZHJvcGRvd24tbWVudS5jb21wb25lbnQuc2NzcycsXG4gIGltcG9ydHM6IFtCbWJBY3Rpb25JY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEJtYkRyb3Bkb3duTWVudUNvbXBvbmVudCB7XG4gIGl0ZW1zID0gaW5wdXQ8SURyb3Bkb3duSXRlbVtdPihbXSk7XG5cbiAgQFZpZXdDaGlsZCgnY29udGVudERpdicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSZWYhOiBFbGVtZW50UmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcm9qZWN0aW9uU2VydmljZTogQm1iUHJvamVjdGlvbkNvbnRlbnRTZXJ2aWNlKSB7fVxuXG4gIG9wZW5Ecm9wZG93bigpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgY29udGVudDogQm1iRHJvcGRvd25Db250ZW50Q29tcG9uZW50LFxuICAgICAgdGFyZ2V0UmVmOiB0aGlzLmNvbnRlbnRSZWY/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBpbnB1dENvbnRleHQ6IHsgaXRlbXM6IHRoaXMuaXRlbXMoKSB9LFxuICAgICAgZm9jdXNPbk9wZW46IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5wcm9qZWN0aW9uU2VydmljZS5vcGVuQ29udGVudChkYXRhKTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJibWJfZHJvcGRvd25fbWVudVwiICNjb250ZW50RGl2PlxuICA8Ym1iLWFjdGlvbi1pY29uXG4gICAgY2xhc3M9XCJibWJfZHJvcGRvd25fbWVudS1idXR0b25cIlxuICAgIGljb249XCJtb3JlX3ZlcnRcIlxuICAgIFtpY29uU2l6ZV09XCIyNFwiXG4gICAgKGJ1dHRvbkNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCJcbiAgLz5cbjwvc2VjdGlvbj5cbiJdfQ==
@@ -0,0 +1,175 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation, } from '@angular/core';
3
+ import { BmbIconComponent } from '../bmb-icon/bmb-icon.component';
4
+ import { BmbTextLinkComponent } from '../bmb-text-link/bmb-text-link.component';
5
+ import { BmbCardComponent, BmbCardContentComponent, } from '../bmb-card/bmb-card.component';
6
+ import { BmbProgressBarComponent } from '../bmb-progress-bar/bmb-progress-bar.component';
7
+ import { getUUID } from '../../utils/utils';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ export class BmbDropzoneComponent {
11
+ constructor(cdr) {
12
+ this.cdr = cdr;
13
+ this.appearanceContrast = input('default');
14
+ this.acceptedExtensions = input.required();
15
+ this.dropInstruction = input('Arrastra tus archivos aquí o');
16
+ this.dropLabel = input('selecciona tus archivos');
17
+ this.errorMessage = input('Archivo no compatible');
18
+ this.errorMessageFormat = input('Formato no soportado');
19
+ this.errorMessageSize = input('El archivo supera el tamaño permitido');
20
+ this.fileDataList = [];
21
+ this.fileSize = input(2);
22
+ this.formatFilesLabel = input('Especificación de formatos y peso');
23
+ this.linkFilesSupported = input('');
24
+ this.linkLabel = input('Ver más información de formatos de archivo aceptados.');
25
+ this.mainIcon = input('image');
26
+ this.multiple = input(false);
27
+ this.name = input(getUUID());
28
+ this.progress = input({});
29
+ this.newFile = output();
30
+ this.fileRemoved = output();
31
+ this.validFile = true;
32
+ }
33
+ ngOnChanges(changes) {
34
+ if (changes['progress'] ||
35
+ changes['acceptedExtensions'] ||
36
+ changes['fileSize']) {
37
+ this.cdr.detectChanges();
38
+ }
39
+ }
40
+ onFileSelected(event) {
41
+ this.input = event.target;
42
+ if (this.input.files?.[0]) {
43
+ const files = this.input.files;
44
+ if (files && files.length > 0) {
45
+ this.getFileAndValidate(this.multiple() ? Array.from(files) : files[0]);
46
+ }
47
+ }
48
+ }
49
+ getFileAndValidate(file) {
50
+ const filesArray = Array.isArray(file) ? file : [file];
51
+ const validFiles = [];
52
+ if (!this.multiple()) {
53
+ this.fileDataList = [];
54
+ }
55
+ for (const singleFile of filesArray) {
56
+ const fileExtension = singleFile.name.split('.').at(-1);
57
+ const isValidFileType = this.acceptedExtensions().includes(fileExtension ?? '');
58
+ const fileSizeInMB = singleFile.size / 1048576;
59
+ const isValidSize = fileSizeInMB <= this.fileSize();
60
+ const alreadyExists = this.fileDataList.some((existing) => existing.name === singleFile.name);
61
+ if (alreadyExists) {
62
+ continue;
63
+ }
64
+ if (isValidFileType && isValidSize) {
65
+ const fileData = {
66
+ name: singleFile.name,
67
+ size: fileSizeInMB,
68
+ error: false,
69
+ errorType: null,
70
+ };
71
+ this.fileDataList.push(fileData);
72
+ validFiles.push(singleFile);
73
+ }
74
+ else {
75
+ this.fileDataList.push({
76
+ name: singleFile.name,
77
+ size: fileSizeInMB,
78
+ error: true,
79
+ errorType: !isValidFileType ? 'format' : 'size',
80
+ });
81
+ }
82
+ }
83
+ this.validFile = validFiles.length > 0;
84
+ if (this.validFile) {
85
+ this.newFile.emit(this.multiple() ? validFiles : validFiles[0]);
86
+ }
87
+ else {
88
+ this.onErrorFile();
89
+ }
90
+ }
91
+ removeFile(fileName) {
92
+ this.fileDataList = this.fileDataList.filter((file) => file.name !== fileName);
93
+ const hasFormatErrorsOnly = this.fileDataList.some((file) => file.error && file.errorType === 'format');
94
+ this.validFile = this.fileDataList.length > 0 && !hasFormatErrorsOnly;
95
+ if (this.fileDataList.length === 0 && this.input) {
96
+ this.input.value = '';
97
+ }
98
+ this.fileRemoved.emit(fileName);
99
+ }
100
+ onErrorFile() {
101
+ this.input && (this.input.value = '');
102
+ this.validFile = false;
103
+ }
104
+ onDragOver(event) {
105
+ this.validFile = true;
106
+ event.preventDefault();
107
+ event.stopPropagation();
108
+ const dropzoneElement = event.currentTarget;
109
+ dropzoneElement.classList.add('bmb-drop-zone-drag-over');
110
+ }
111
+ onDragLeave(event) {
112
+ event.preventDefault();
113
+ event.stopPropagation();
114
+ const dropzoneElement = event.currentTarget;
115
+ dropzoneElement.classList.remove('bmb-drop-zone-drag-over');
116
+ }
117
+ onDrop(event) {
118
+ event.preventDefault();
119
+ event.stopPropagation();
120
+ const dropzoneElement = event.currentTarget;
121
+ dropzoneElement.classList.add('bmb-drop-zone');
122
+ dropzoneElement.classList.remove('bmb-drop-zone-drag-over');
123
+ const files = event.dataTransfer?.files;
124
+ if (files && files.length > 0) {
125
+ this.getFileAndValidate(this.multiple() ? Array.from(files) : files[0]);
126
+ }
127
+ }
128
+ getProgress(fileName) {
129
+ const progress = this.progress();
130
+ if (typeof progress === 'number')
131
+ return progress;
132
+ return progress?.[fileName] ?? 0;
133
+ }
134
+ isInvalidFileOnly() {
135
+ return this.fileDataList.some((file) => file.error && file.errorType === 'format');
136
+ }
137
+ reset() {
138
+ this.fileDataList = [];
139
+ this.validFile = true;
140
+ if (this.input) {
141
+ this.input.value = '';
142
+ }
143
+ this.cdr.detectChanges();
144
+ }
145
+ getDropZoneClass() {
146
+ const classList = [];
147
+ if (this.isInvalidFileOnly()) {
148
+ classList.push('bmb-drop-zone-error');
149
+ }
150
+ if (this.fileDataList.length > 0 && !!this.fileDataList[0].name) {
151
+ classList.push('bmb-drop-zone-drag-over');
152
+ }
153
+ if (this.appearanceContrast() === 'primary') {
154
+ classList.push('bmb-drop-zone-container-primary');
155
+ }
156
+ if (this.appearanceContrast() === 'alternative') {
157
+ classList.push('bmb-drop-zone-container-alternative');
158
+ }
159
+ return classList;
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropzoneComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BmbDropzoneComponent, isStandalone: true, selector: "bmb-dropzone", inputs: { appearanceContrast: { classPropertyName: "appearanceContrast", publicName: "appearanceContrast", isSignal: true, isRequired: false, transformFunction: null }, acceptedExtensions: { classPropertyName: "acceptedExtensions", publicName: "acceptedExtensions", isSignal: true, isRequired: true, transformFunction: null }, dropInstruction: { classPropertyName: "dropInstruction", publicName: "dropInstruction", isSignal: true, isRequired: false, transformFunction: null }, dropLabel: { classPropertyName: "dropLabel", publicName: "dropLabel", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, errorMessageFormat: { classPropertyName: "errorMessageFormat", publicName: "errorMessageFormat", isSignal: true, isRequired: false, transformFunction: null }, errorMessageSize: { classPropertyName: "errorMessageSize", publicName: "errorMessageSize", isSignal: true, isRequired: false, transformFunction: null }, fileSize: { classPropertyName: "fileSize", publicName: "fileSize", isSignal: true, isRequired: false, transformFunction: null }, formatFilesLabel: { classPropertyName: "formatFilesLabel", publicName: "formatFilesLabel", isSignal: true, isRequired: false, transformFunction: null }, linkFilesSupported: { classPropertyName: "linkFilesSupported", publicName: "linkFilesSupported", isSignal: true, isRequired: false, transformFunction: null }, linkLabel: { classPropertyName: "linkLabel", publicName: "linkLabel", isSignal: true, isRequired: false, transformFunction: null }, mainIcon: { classPropertyName: "mainIcon", publicName: "mainIcon", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { newFile: "newFile", fileRemoved: "fileRemoved" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"bmb-drop-zone\">\n <section\n class=\"bmb-drop-zone-container\"\n [ngClass]=\"getDropZoneClass()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <div\n class=\"bmb-drop-zone-icon\"\n [ngClass]=\"{\n 'bmb-drop-zone-icon-valid':\n validFile && fileDataList.length > 0 && !!fileDataList[0].name,\n 'bmb-drop-zone-icon-error': isInvalidFileOnly()\n }\"\n >\n <bmb-icon [icon]=\"mainIcon()\" [size]=\"48\" alt=\"Drop zone icon\" />\n </div>\n <p class=\"bmb-drop-zone-label-format\">{{ formatFilesLabel() }}</p>\n <p class=\"bmb-drop-zone-label-format-instruction\">\n {{ dropInstruction() }}\n <label class=\"bmb-drop-zone-link\" [htmlFor]=\"name()\">\n {{ dropLabel() }}\n </label>\n </p>\n @if (isInvalidFileOnly()) {\n <p class=\"bmb-drop-zone-label-format-error bmb-drop-zone-label-format\">\n {{ errorMessage() }}\n </p>\n @if (linkFilesSupported()) {\n <bmb-text-link\n textLinkStyle=\"underlined\"\n [link]=\"linkFilesSupported()\"\n [textLink]=\"linkLabel()\"\n />\n }\n }\n <input\n type=\"file\"\n [id]=\"name()\"\n [name]=\"name()\"\n [accept]=\"acceptedExtensions().toString()\"\n (change)=\"onFileSelected($event)\"\n [multiple]=\"multiple()\"\n style=\"display: none\"\n />\n </section>\n @if (fileDataList.length > 0) {\n @for (file of fileDataList; track file.name) {\n <bmb-card margin=\"none\" type=\"transparent\">\n <bmb-card-content>\n <div\n class=\"bmb-drop-zone-list-files\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-files-loading':\n !file.error && getProgress(file.name) < 100,\n 'bmb-drop-zone-list-files-error': file.error,\n 'bmb-drop-zone-list-files-valid': getProgress(file.name) === 100\n }\"\n >\n <span\n class=\"bmb-drop-zone-list-files-icon\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-files-icon-spin':\n !file.error && getProgress(file.name) < 100\n }\"\n >\n @if (!validFile) {\n <bmb-icon icon=\"upload_file\" [size]=\"24\" />\n } @else if (getProgress(file.name) < 100) {\n <bmb-icon icon=\"progress_activity\" [size]=\"24\" class=\"spin\" />\n } @else if (validFile) {\n <bmb-icon icon=\"task\" [size]=\"24\" />\n }\n </span>\n\n <div class=\"bmb-drop-zone-list-name\">\n <span>{{ file.name }}</span>\n\n <div\n class=\"bmb-drop-zone-list-status\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-status-success':\n getProgress(file.name) === 100\n }\"\n >\n @if (validFile && getProgress(file.name) < 100) {\n <span>{{ getProgress(file.name) }}% / 100%</span>\n }\n\n @if (getProgress(file.name) === 100) {\n {{ file.size.toFixed(2) }} MB\n <bmb-icon\n icon=\"check_circle\"\n [size]=\"24\"\n class=\"success-icon\"\n />\n <ng-container\n *ngTemplateOutlet=\"\n removeButton;\n context: { fileName: file.name }\n \"\n ></ng-container>\n }\n\n @if (file.error) {\n <span>\n @if (file.errorType === 'format') {\n {{ errorMessageFormat() }}\n } @else if (file.errorType === 'size') {\n {{ errorMessageSize() }} ({{ file.size.toFixed(2) }} MB)\n }\n </span>\n <ng-container\n *ngTemplateOutlet=\"\n removeButton;\n context: { fileName: file.name }\n \"\n ></ng-container>\n }\n </div>\n\n <ng-template #removeButton let-fileName=\"fileName\">\n <button\n class=\"bmb-drop-zone-list-remove\"\n (click)=\"removeFile(fileName)\"\n type=\"button\"\n >\n <bmb-icon icon=\"delete\" [size]=\"24\" class=\"delete-icon\" />\n </button>\n </ng-template>\n </div>\n\n @if (validFile && getProgress(file.name) < 100) {\n <span class=\"bmb-drop-zone-list-upload\">\n <bmb-progress-bar\n type=\"simple\"\n [counter]=\"getProgress(file.name)\"\n [totalCount]=\"100\"\n />\n </span>\n }\n </div>\n </bmb-card-content>\n </bmb-card>\n }\n }\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb-drop-zone{color:RGBA(var(--color-charade-500));display:flex;flex-direction:column;gap:var(--bmb-spacing-m);font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb-drop-zone-container{align-items:center;border:.125rem dashed var(--general_contrasts-container-outline);border-radius:var(--bmb-radius-s);box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bmb-spacing-m);justify-content:center;padding:var(--bmb-spacing-m) var(--bmb-spacing-l)}.bmb-drop-zone-container-primary{background-color:var(--containers-background)}.bmb-drop-zone-container-alternative{background-color:var(--containers-main)}.bmb-drop-zone-drag-over{background-color:var(--menu_select-on-surface-hovered-w-checkbox);border-color:var(--general_contrasts-main-selection)}.bmb-drop-zone-error{border-color:var(--red-primary);background-color:transparent}.bmb-drop-zone-label-format{margin:0;color:var(--general_contrasts-50)}.bmb-drop-zone-label-format-instruction{color:var(--general_contrasts-100)}.bmb-drop-zone-link{font-family:Poppins-Medium,sans-serif;font-size:.875rem;color:var(--general_contrasts-main-selection);cursor:pointer;text-decoration-line:underline}.bmb-drop-zone-label-format-error{color:var(--red-primary)}.bmb-drop-zone-icon-valid{color:var(--general_contrasts-main-selection)}.bmb-drop-zone-icon-error{color:var(--red-primary)}.bmb-drop-zone-list-files{align-items:center;display:grid;gap:.5rem;grid-template-areas:\"icon name\" \"icon progress\";grid-template-columns:1.5rem 1fr;margin:0}.bmb-drop-zone-list-files-error{color:var(--red-primary);grid-template-areas:\"icon name\"}.bmb-drop-zone-list-files-loading .bmb-drop-zone-list-files-icon{color:var(--general_contrasts-main-selection)}.bmb-drop-zone-list-files-valid{grid-template-areas:\"icon name\"}.bmb-drop-zone-list-files-icon{grid-area:icon;height:1.5rem;width:1.5rem}.bmb-drop-zone-list-files-icon-spin{animation:spin 1s linear infinite}.bmb-drop-zone-list-upload{flex:1;grid-area:progress}.bmb-drop-zone-list-name{align-items:center;display:flex;grid-area:name;justify-content:space-between}.bmb-drop-zone-list-status{align-items:center;display:flex;gap:.5rem}.bmb-drop-zone-list-status-success .success-icon{color:var(--red-primary)}.bmb-drop-zone-list-status .delete-icon{color:var(--general_contrasts-50)}.bmb-drop-zone-list-remove{padding:0;margin:0;height:1.5rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }, { kind: "component", type: BmbTextLinkComponent, selector: "bmb-text-link", inputs: ["textLink", "textLinkStyle", "target", "icon", "iconPosition", "link", "disabled"] }, { kind: "component", type: BmbCardComponent, selector: "bmb-card", inputs: ["borderRadius", "margin", "type", "state", "boxShadowStyle", "borderColor", "alternative"] }, { kind: "component", type: BmbCardContentComponent, selector: "bmb-card-content", inputs: ["padding", "colorBackground", "setBorderRadius"] }, { kind: "component", type: BmbProgressBarComponent, selector: "bmb-progress-bar", inputs: ["type", "totalCount", "counter", "title", "appearance", "textLink", "href", "target", "textFormat"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
163
+ }
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BmbDropzoneComponent, decorators: [{
165
+ type: Component,
166
+ args: [{ selector: 'bmb-dropzone', standalone: true, imports: [
167
+ CommonModule,
168
+ BmbIconComponent,
169
+ BmbTextLinkComponent,
170
+ BmbCardComponent,
171
+ BmbCardContentComponent,
172
+ BmbProgressBarComponent,
173
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"bmb-drop-zone\">\n <section\n class=\"bmb-drop-zone-container\"\n [ngClass]=\"getDropZoneClass()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <div\n class=\"bmb-drop-zone-icon\"\n [ngClass]=\"{\n 'bmb-drop-zone-icon-valid':\n validFile && fileDataList.length > 0 && !!fileDataList[0].name,\n 'bmb-drop-zone-icon-error': isInvalidFileOnly()\n }\"\n >\n <bmb-icon [icon]=\"mainIcon()\" [size]=\"48\" alt=\"Drop zone icon\" />\n </div>\n <p class=\"bmb-drop-zone-label-format\">{{ formatFilesLabel() }}</p>\n <p class=\"bmb-drop-zone-label-format-instruction\">\n {{ dropInstruction() }}\n <label class=\"bmb-drop-zone-link\" [htmlFor]=\"name()\">\n {{ dropLabel() }}\n </label>\n </p>\n @if (isInvalidFileOnly()) {\n <p class=\"bmb-drop-zone-label-format-error bmb-drop-zone-label-format\">\n {{ errorMessage() }}\n </p>\n @if (linkFilesSupported()) {\n <bmb-text-link\n textLinkStyle=\"underlined\"\n [link]=\"linkFilesSupported()\"\n [textLink]=\"linkLabel()\"\n />\n }\n }\n <input\n type=\"file\"\n [id]=\"name()\"\n [name]=\"name()\"\n [accept]=\"acceptedExtensions().toString()\"\n (change)=\"onFileSelected($event)\"\n [multiple]=\"multiple()\"\n style=\"display: none\"\n />\n </section>\n @if (fileDataList.length > 0) {\n @for (file of fileDataList; track file.name) {\n <bmb-card margin=\"none\" type=\"transparent\">\n <bmb-card-content>\n <div\n class=\"bmb-drop-zone-list-files\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-files-loading':\n !file.error && getProgress(file.name) < 100,\n 'bmb-drop-zone-list-files-error': file.error,\n 'bmb-drop-zone-list-files-valid': getProgress(file.name) === 100\n }\"\n >\n <span\n class=\"bmb-drop-zone-list-files-icon\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-files-icon-spin':\n !file.error && getProgress(file.name) < 100\n }\"\n >\n @if (!validFile) {\n <bmb-icon icon=\"upload_file\" [size]=\"24\" />\n } @else if (getProgress(file.name) < 100) {\n <bmb-icon icon=\"progress_activity\" [size]=\"24\" class=\"spin\" />\n } @else if (validFile) {\n <bmb-icon icon=\"task\" [size]=\"24\" />\n }\n </span>\n\n <div class=\"bmb-drop-zone-list-name\">\n <span>{{ file.name }}</span>\n\n <div\n class=\"bmb-drop-zone-list-status\"\n [ngClass]=\"{\n 'bmb-drop-zone-list-status-success':\n getProgress(file.name) === 100\n }\"\n >\n @if (validFile && getProgress(file.name) < 100) {\n <span>{{ getProgress(file.name) }}% / 100%</span>\n }\n\n @if (getProgress(file.name) === 100) {\n {{ file.size.toFixed(2) }} MB\n <bmb-icon\n icon=\"check_circle\"\n [size]=\"24\"\n class=\"success-icon\"\n />\n <ng-container\n *ngTemplateOutlet=\"\n removeButton;\n context: { fileName: file.name }\n \"\n ></ng-container>\n }\n\n @if (file.error) {\n <span>\n @if (file.errorType === 'format') {\n {{ errorMessageFormat() }}\n } @else if (file.errorType === 'size') {\n {{ errorMessageSize() }} ({{ file.size.toFixed(2) }} MB)\n }\n </span>\n <ng-container\n *ngTemplateOutlet=\"\n removeButton;\n context: { fileName: file.name }\n \"\n ></ng-container>\n }\n </div>\n\n <ng-template #removeButton let-fileName=\"fileName\">\n <button\n class=\"bmb-drop-zone-list-remove\"\n (click)=\"removeFile(fileName)\"\n type=\"button\"\n >\n <bmb-icon icon=\"delete\" [size]=\"24\" class=\"delete-icon\" />\n </button>\n </ng-template>\n </div>\n\n @if (validFile && getProgress(file.name) < 100) {\n <span class=\"bmb-drop-zone-list-upload\">\n <bmb-progress-bar\n type=\"simple\"\n [counter]=\"getProgress(file.name)\"\n [totalCount]=\"100\"\n />\n </span>\n }\n </div>\n </bmb-card-content>\n </bmb-card>\n }\n }\n</div>\n", styles: ["@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb-drop-zone{color:RGBA(var(--color-charade-500));display:flex;flex-direction:column;gap:var(--bmb-spacing-m);font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb-drop-zone-container{align-items:center;border:.125rem dashed var(--general_contrasts-container-outline);border-radius:var(--bmb-radius-s);box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bmb-spacing-m);justify-content:center;padding:var(--bmb-spacing-m) var(--bmb-spacing-l)}.bmb-drop-zone-container-primary{background-color:var(--containers-background)}.bmb-drop-zone-container-alternative{background-color:var(--containers-main)}.bmb-drop-zone-drag-over{background-color:var(--menu_select-on-surface-hovered-w-checkbox);border-color:var(--general_contrasts-main-selection)}.bmb-drop-zone-error{border-color:var(--red-primary);background-color:transparent}.bmb-drop-zone-label-format{margin:0;color:var(--general_contrasts-50)}.bmb-drop-zone-label-format-instruction{color:var(--general_contrasts-100)}.bmb-drop-zone-link{font-family:Poppins-Medium,sans-serif;font-size:.875rem;color:var(--general_contrasts-main-selection);cursor:pointer;text-decoration-line:underline}.bmb-drop-zone-label-format-error{color:var(--red-primary)}.bmb-drop-zone-icon-valid{color:var(--general_contrasts-main-selection)}.bmb-drop-zone-icon-error{color:var(--red-primary)}.bmb-drop-zone-list-files{align-items:center;display:grid;gap:.5rem;grid-template-areas:\"icon name\" \"icon progress\";grid-template-columns:1.5rem 1fr;margin:0}.bmb-drop-zone-list-files-error{color:var(--red-primary);grid-template-areas:\"icon name\"}.bmb-drop-zone-list-files-loading .bmb-drop-zone-list-files-icon{color:var(--general_contrasts-main-selection)}.bmb-drop-zone-list-files-valid{grid-template-areas:\"icon name\"}.bmb-drop-zone-list-files-icon{grid-area:icon;height:1.5rem;width:1.5rem}.bmb-drop-zone-list-files-icon-spin{animation:spin 1s linear infinite}.bmb-drop-zone-list-upload{flex:1;grid-area:progress}.bmb-drop-zone-list-name{align-items:center;display:flex;grid-area:name;justify-content:space-between}.bmb-drop-zone-list-status{align-items:center;display:flex;gap:.5rem}.bmb-drop-zone-list-status-success .success-icon{color:var(--red-primary)}.bmb-drop-zone-list-status .delete-icon{color:var(--general_contrasts-50)}.bmb-drop-zone-list-remove{padding:0;margin:0;height:1.5rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}\n"] }]
174
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLWRyb3B6b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItZHJvcHpvbmUvYm1iLWRyb3B6b25lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItZHJvcHpvbmUvYm1iLWRyb3B6b25lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixHQUN4QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBMEI1QyxNQUFNLE9BQU8sb0JBQW9CO0lBMEIvQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpCMUMsdUJBQWtCLEdBQUcsS0FBSyxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELHVCQUFrQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVksQ0FBQztRQUNoRCxvQkFBZSxHQUFHLEtBQUssQ0FBUyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hFLGNBQVMsR0FBRyxLQUFLLENBQVMseUJBQXlCLENBQUMsQ0FBQztRQUNyRCxpQkFBWSxHQUFHLEtBQUssQ0FBUyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RELHVCQUFrQixHQUFHLEtBQUssQ0FBUyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNELHFCQUFnQixHQUFHLEtBQUssQ0FBUyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzFFLGlCQUFZLEdBQWUsRUFBRSxDQUFDO1FBQzlCLGFBQVEsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUIscUJBQWdCLEdBQUcsS0FBSyxDQUFTLG1DQUFtQyxDQUFDLENBQUM7UUFDdEUsdUJBQWtCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxLQUFLLENBQ2YsdURBQXVELENBQ3hELENBQUM7UUFDRixhQUFRLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsU0FBSSxHQUFHLEtBQUssQ0FBUyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxLQUFLLENBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBRXRELFlBQU8sR0FBRyxNQUFNLEVBQWlCLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUUvQixjQUFTLEdBQVksSUFBSSxDQUFDO0lBR21CLENBQUM7SUFFOUMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQ0UsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNuQixPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDN0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUNuQjtZQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQVk7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBbUI7UUFDNUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxVQUFVLEVBQUU7WUFDbkMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUN4RCxhQUFhLElBQUksRUFBRSxDQUNwQixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFDL0MsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDMUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FDaEQsQ0FBQztZQUVGLElBQUksYUFBYSxFQUFFO2dCQUNqQixTQUFTO2FBQ1Y7WUFFRCxJQUFJLGVBQWUsSUFBSSxXQUFXLEVBQUU7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFhO29CQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQ3JCLElBQUksRUFBRSxZQUFZO29CQUNsQixLQUFLLEVBQUUsS0FBSztvQkFDWixTQUFTLEVBQUUsSUFBSTtpQkFDaEIsQ0FBQztnQkFFRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO29CQUNyQixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07aUJBQ2hELENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakU7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFTSxVQUFVLENBQUMsUUFBZ0I7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUNqQyxDQUFDO1FBRUYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDaEQsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQ3BELENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBRXRFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUMzRCxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUMzRCxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUMzRCxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDO1FBQ3hDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDbEQsT0FBTyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDL0QsU0FBUyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDM0MsU0FBUyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxhQUFhLEVBQUU7WUFDL0MsU0FBUyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzsrR0FqTVUsb0JBQW9CO21HQUFwQixvQkFBb0IsdXZFQzNDakMsbWtLQW9KQSxpeFFEckhJLFlBQVksb1NBQ1osZ0JBQWdCLDhKQUNoQixvQkFBb0IsdUpBQ3BCLGdCQUFnQiwwSkFDaEIsdUJBQXVCLHdIQUN2Qix1QkFBdUI7OzRGQU9kLG9CQUFvQjtrQkFoQmhDLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsdUJBQXVCO3FCQUN4QixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm1iSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1pY29uL2JtYi1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJUZXh0TGlua0NvbXBvbmVudCB9IGZyb20gJy4uL2JtYi10ZXh0LWxpbmsvYm1iLXRleHQtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQm1iQ2FyZENvbXBvbmVudCxcbiAgQm1iQ2FyZENvbnRlbnRDb21wb25lbnQsXG59IGZyb20gJy4uL2JtYi1jYXJkL2JtYi1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1wcm9ncmVzcy1iYXIvYm1iLXByb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0VVVJRCB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IElCbWJDb250cmFzdCB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbG9ycyc7XG5pbnRlcmZhY2UgRmlsZURhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHNpemU6IG51bWJlcjtcbiAgYmFzZTY0Pzogc3RyaW5nO1xuICBlcnJvcj86IGJvb2xlYW47XG4gIGVycm9yVHlwZT86ICdmb3JtYXQnIHwgJ3NpemUnIHwgbnVsbDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYm1iLWRyb3B6b25lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBCbWJJY29uQ29tcG9uZW50LFxuICAgIEJtYlRleHRMaW5rQ29tcG9uZW50LFxuICAgIEJtYkNhcmRDb21wb25lbnQsXG4gICAgQm1iQ2FyZENvbnRlbnRDb21wb25lbnQsXG4gICAgQm1iUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ibWItZHJvcHpvbmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYm1iLWRyb3B6b25lLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEJtYkRyb3B6b25lQ29tcG9uZW50IHtcbiAgYXBwZWFyYW5jZUNvbnRyYXN0ID0gaW5wdXQ8SUJtYkNvbnRyYXN0PignZGVmYXVsdCcpO1xuICBhY2NlcHRlZEV4dGVuc2lvbnMgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmdbXT4oKTtcbiAgZHJvcEluc3RydWN0aW9uID0gaW5wdXQ8c3RyaW5nPignQXJyYXN0cmEgdHVzIGFyY2hpdm9zIGFxdcOtIG8nKTtcbiAgZHJvcExhYmVsID0gaW5wdXQ8c3RyaW5nPignc2VsZWNjaW9uYSB0dXMgYXJjaGl2b3MnKTtcbiAgZXJyb3JNZXNzYWdlID0gaW5wdXQ8c3RyaW5nPignQXJjaGl2byBubyBjb21wYXRpYmxlJyk7XG4gIGVycm9yTWVzc2FnZUZvcm1hdCA9IGlucHV0PHN0cmluZz4oJ0Zvcm1hdG8gbm8gc29wb3J0YWRvJyk7XG4gIGVycm9yTWVzc2FnZVNpemUgPSBpbnB1dDxzdHJpbmc+KCdFbCBhcmNoaXZvIHN1cGVyYSBlbCB0YW1hw7FvIHBlcm1pdGlkbycpO1xuICBmaWxlRGF0YUxpc3Q6IEZpbGVEYXRhW10gPSBbXTtcbiAgZmlsZVNpemUgPSBpbnB1dDxudW1iZXI+KDIpO1xuICBmb3JtYXRGaWxlc0xhYmVsID0gaW5wdXQ8c3RyaW5nPignRXNwZWNpZmljYWNpw7NuIGRlIGZvcm1hdG9zIHkgcGVzbycpO1xuICBsaW5rRmlsZXNTdXBwb3J0ZWQgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgbGlua0xhYmVsID0gaW5wdXQ8c3RyaW5nPihcbiAgICAnVmVyIG3DoXMgaW5mb3JtYWNpw7NuIGRlIGZvcm1hdG9zIGRlIGFyY2hpdm8gYWNlcHRhZG9zLicsXG4gICk7XG4gIG1haW5JY29uID0gaW5wdXQ8c3RyaW5nPignaW1hZ2UnKTtcbiAgbXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KGdldFVVSUQoKSk7XG4gIHByb2dyZXNzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bWJlcj4oe30pO1xuXG4gIG5ld0ZpbGUgPSBvdXRwdXQ8RmlsZSB8IEZpbGVbXT4oKTtcbiAgZmlsZVJlbW92ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHZhbGlkRmlsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlucHV0PzogSFRNTElucHV0RWxlbWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbJ3Byb2dyZXNzJ10gfHxcbiAgICAgIGNoYW5nZXNbJ2FjY2VwdGVkRXh0ZW5zaW9ucyddIHx8XG4gICAgICBjaGFuZ2VzWydmaWxlU2l6ZSddXG4gICAgKSB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAodGhpcy5pbnB1dC5maWxlcz8uWzBdKSB7XG4gICAgICBjb25zdCBmaWxlcyA9IHRoaXMuaW5wdXQuZmlsZXM7XG4gICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldEZpbGVBbmRWYWxpZGF0ZSh0aGlzLm11bHRpcGxlKCkgPyBBcnJheS5mcm9tKGZpbGVzKSA6IGZpbGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVBbmRWYWxpZGF0ZShmaWxlOiBGaWxlIHwgRmlsZVtdKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZXNBcnJheSA9IEFycmF5LmlzQXJyYXkoZmlsZSkgPyBmaWxlIDogW2ZpbGVdO1xuICAgIGNvbnN0IHZhbGlkRmlsZXM6IEZpbGVbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgIHRoaXMuZmlsZURhdGFMaXN0ID0gW107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzaW5nbGVGaWxlIG9mIGZpbGVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBzaW5nbGVGaWxlLm5hbWUuc3BsaXQoJy4nKS5hdCgtMSk7XG4gICAgICBjb25zdCBpc1ZhbGlkRmlsZVR5cGUgPSB0aGlzLmFjY2VwdGVkRXh0ZW5zaW9ucygpLmluY2x1ZGVzKFxuICAgICAgICBmaWxlRXh0ZW5zaW9uID8/ICcnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZpbGVTaXplSW5NQiA9IHNpbmdsZUZpbGUuc2l6ZSAvIDEwNDg1NzY7XG4gICAgICBjb25zdCBpc1ZhbGlkU2l6ZSA9IGZpbGVTaXplSW5NQiA8PSB0aGlzLmZpbGVTaXplKCk7XG5cbiAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSB0aGlzLmZpbGVEYXRhTGlzdC5zb21lKFxuICAgICAgICAoZXhpc3RpbmcpID0+IGV4aXN0aW5nLm5hbWUgPT09IHNpbmdsZUZpbGUubmFtZSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChhbHJlYWR5RXhpc3RzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNWYWxpZEZpbGVUeXBlICYmIGlzVmFsaWRTaXplKSB7XG4gICAgICAgIGNvbnN0IGZpbGVEYXRhOiBGaWxlRGF0YSA9IHtcbiAgICAgICAgICBuYW1lOiBzaW5nbGVGaWxlLm5hbWUsXG4gICAgICAgICAgc2l6ZTogZmlsZVNpemVJbk1CLFxuICAgICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgICBlcnJvclR5cGU6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5maWxlRGF0YUxpc3QucHVzaChmaWxlRGF0YSk7XG4gICAgICAgIHZhbGlkRmlsZXMucHVzaChzaW5nbGVGaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsZURhdGFMaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWU6IHNpbmdsZUZpbGUubmFtZSxcbiAgICAgICAgICBzaXplOiBmaWxlU2l6ZUluTUIsXG4gICAgICAgICAgZXJyb3I6IHRydWUsXG4gICAgICAgICAgZXJyb3JUeXBlOiAhaXNWYWxpZEZpbGVUeXBlID8gJ2Zvcm1hdCcgOiAnc2l6ZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsaWRGaWxlID0gdmFsaWRGaWxlcy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHRoaXMudmFsaWRGaWxlKSB7XG4gICAgICB0aGlzLm5ld0ZpbGUuZW1pdCh0aGlzLm11bHRpcGxlKCkgPyB2YWxpZEZpbGVzIDogdmFsaWRGaWxlc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25FcnJvckZpbGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZShmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWxlRGF0YUxpc3QgPSB0aGlzLmZpbGVEYXRhTGlzdC5maWx0ZXIoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5uYW1lICE9PSBmaWxlTmFtZSxcbiAgICApO1xuXG4gICAgY29uc3QgaGFzRm9ybWF0RXJyb3JzT25seSA9IHRoaXMuZmlsZURhdGFMaXN0LnNvbWUoXG4gICAgICAoZmlsZSkgPT4gZmlsZS5lcnJvciAmJiBmaWxlLmVycm9yVHlwZSA9PT0gJ2Zvcm1hdCcsXG4gICAgKTtcblxuICAgIHRoaXMudmFsaWRGaWxlID0gdGhpcy5maWxlRGF0YUxpc3QubGVuZ3RoID4gMCAmJiAhaGFzRm9ybWF0RXJyb3JzT25seTtcblxuICAgIGlmICh0aGlzLmZpbGVEYXRhTGlzdC5sZW5ndGggPT09IDAgJiYgdGhpcy5pbnB1dCkge1xuICAgICAgdGhpcy5pbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChmaWxlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIG9uRXJyb3JGaWxlKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXQgJiYgKHRoaXMuaW5wdXQudmFsdWUgPSAnJyk7XG4gICAgdGhpcy52YWxpZEZpbGUgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIHRoaXMudmFsaWRGaWxlID0gdHJ1ZTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGRyb3B6b25lRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZHJvcHpvbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JtYi1kcm9wLXpvbmUtZHJhZy1vdmVyJyk7XG4gIH1cblxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBkcm9wem9uZUVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGRyb3B6b25lRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdibWItZHJvcC16b25lLWRyYWctb3ZlcicpO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGRyb3B6b25lRWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZHJvcHpvbmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2JtYi1kcm9wLXpvbmUnKTtcbiAgICBkcm9wem9uZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYm1iLWRyb3Atem9uZS1kcmFnLW92ZXInKTtcblxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRGaWxlQW5kVmFsaWRhdGUodGhpcy5tdWx0aXBsZSgpID8gQXJyYXkuZnJvbShmaWxlcykgOiBmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvZ3Jlc3MoZmlsZU5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzKCk7XG4gICAgaWYgKHR5cGVvZiBwcm9ncmVzcyA9PT0gJ251bWJlcicpIHJldHVybiBwcm9ncmVzcztcbiAgICByZXR1cm4gcHJvZ3Jlc3M/LltmaWxlTmFtZV0gPz8gMDtcbiAgfVxuXG4gIGlzSW52YWxpZEZpbGVPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbGVEYXRhTGlzdC5zb21lKFxuICAgICAgKGZpbGUpID0+IGZpbGUuZXJyb3IgJiYgZmlsZS5lcnJvclR5cGUgPT09ICdmb3JtYXQnLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWxlRGF0YUxpc3QgPSBbXTtcbiAgICB0aGlzLnZhbGlkRmlsZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgIHRoaXMuaW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0RHJvcFpvbmVDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gW107XG5cbiAgICBpZiAodGhpcy5pc0ludmFsaWRGaWxlT25seSgpKSB7XG4gICAgICBjbGFzc0xpc3QucHVzaCgnYm1iLWRyb3Atem9uZS1lcnJvcicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbGVEYXRhTGlzdC5sZW5ndGggPiAwICYmICEhdGhpcy5maWxlRGF0YUxpc3RbMF0ubmFtZSkge1xuICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYi1kcm9wLXpvbmUtZHJhZy1vdmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwZWFyYW5jZUNvbnRyYXN0KCkgPT09ICdwcmltYXJ5Jykge1xuICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYi1kcm9wLXpvbmUtY29udGFpbmVyLXByaW1hcnknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlQ29udHJhc3QoKSA9PT0gJ2FsdGVybmF0aXZlJykge1xuICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYi1kcm9wLXpvbmUtY29udGFpbmVyLWFsdGVybmF0aXZlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTGlzdDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJtYi1kcm9wLXpvbmVcIj5cbiAgPHNlY3Rpb25cbiAgICBjbGFzcz1cImJtYi1kcm9wLXpvbmUtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJnZXREcm9wWm9uZUNsYXNzKClcIlxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJibWItZHJvcC16b25lLWljb25cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnYm1iLWRyb3Atem9uZS1pY29uLXZhbGlkJzpcbiAgICAgICAgICB2YWxpZEZpbGUgJiYgZmlsZURhdGFMaXN0Lmxlbmd0aCA+IDAgJiYgISFmaWxlRGF0YUxpc3RbMF0ubmFtZSxcbiAgICAgICAgJ2JtYi1kcm9wLXpvbmUtaWNvbi1lcnJvcic6IGlzSW52YWxpZEZpbGVPbmx5KClcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxibWItaWNvbiBbaWNvbl09XCJtYWluSWNvbigpXCIgW3NpemVdPVwiNDhcIiBhbHQ9XCJEcm9wIHpvbmUgaWNvblwiIC8+XG4gICAgPC9kaXY+XG4gICAgPHAgY2xhc3M9XCJibWItZHJvcC16b25lLWxhYmVsLWZvcm1hdFwiPnt7IGZvcm1hdEZpbGVzTGFiZWwoKSB9fTwvcD5cbiAgICA8cCBjbGFzcz1cImJtYi1kcm9wLXpvbmUtbGFiZWwtZm9ybWF0LWluc3RydWN0aW9uXCI+XG4gICAgICB7eyBkcm9wSW5zdHJ1Y3Rpb24oKSB9fVxuICAgICAgPGxhYmVsIGNsYXNzPVwiYm1iLWRyb3Atem9uZS1saW5rXCIgW2h0bWxGb3JdPVwibmFtZSgpXCI+XG4gICAgICAgIHt7IGRyb3BMYWJlbCgpIH19XG4gICAgICA8L2xhYmVsPlxuICAgIDwvcD5cbiAgICBAaWYgKGlzSW52YWxpZEZpbGVPbmx5KCkpIHtcbiAgICAgIDxwIGNsYXNzPVwiYm1iLWRyb3Atem9uZS1sYWJlbC1mb3JtYXQtZXJyb3IgYm1iLWRyb3Atem9uZS1sYWJlbC1mb3JtYXRcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlKCkgfX1cbiAgICAgIDwvcD5cbiAgICAgIEBpZiAobGlua0ZpbGVzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgPGJtYi10ZXh0LWxpbmtcbiAgICAgICAgICB0ZXh0TGlua1N0eWxlPVwidW5kZXJsaW5lZFwiXG4gICAgICAgICAgW2xpbmtdPVwibGlua0ZpbGVzU3VwcG9ydGVkKClcIlxuICAgICAgICAgIFt0ZXh0TGlua109XCJsaW5rTGFiZWwoKVwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgfVxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgW2lkXT1cIm5hbWUoKVwiXG4gICAgICBbbmFtZV09XCJuYW1lKClcIlxuICAgICAgW2FjY2VwdF09XCJhY2NlcHRlZEV4dGVuc2lvbnMoKS50b1N0cmluZygpXCJcbiAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiXG4gICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbiAgQGlmIChmaWxlRGF0YUxpc3QubGVuZ3RoID4gMCkge1xuICAgIEBmb3IgKGZpbGUgb2YgZmlsZURhdGFMaXN0OyB0cmFjayBmaWxlLm5hbWUpIHtcbiAgICAgIDxibWItY2FyZCBtYXJnaW49XCJub25lXCIgdHlwZT1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIDxibWItY2FyZC1jb250ZW50PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iLWRyb3Atem9uZS1saXN0LWZpbGVzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2JtYi1kcm9wLXpvbmUtbGlzdC1maWxlcy1sb2FkaW5nJzpcbiAgICAgICAgICAgICAgICAhZmlsZS5lcnJvciAmJiBnZXRQcm9ncmVzcyhmaWxlLm5hbWUpIDwgMTAwLFxuICAgICAgICAgICAgICAnYm1iLWRyb3Atem9uZS1saXN0LWZpbGVzLWVycm9yJzogZmlsZS5lcnJvcixcbiAgICAgICAgICAgICAgJ2JtYi1kcm9wLXpvbmUtbGlzdC1maWxlcy12YWxpZCc6IGdldFByb2dyZXNzKGZpbGUubmFtZSkgPT09IDEwMFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJibWItZHJvcC16b25lLWxpc3QtZmlsZXMtaWNvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnYm1iLWRyb3Atem9uZS1saXN0LWZpbGVzLWljb24tc3Bpbic6XG4gICAgICAgICAgICAgICAgICAhZmlsZS5lcnJvciAmJiBnZXRQcm9ncmVzcyhmaWxlLm5hbWUpIDwgMTAwXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKCF2YWxpZEZpbGUpIHtcbiAgICAgICAgICAgICAgICA8Ym1iLWljb24gaWNvbj1cInVwbG9hZF9maWxlXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIGlmIChnZXRQcm9ncmVzcyhmaWxlLm5hbWUpIDwgMTAwKSB7XG4gICAgICAgICAgICAgICAgPGJtYi1pY29uIGljb249XCJwcm9ncmVzc19hY3Rpdml0eVwiIFtzaXplXT1cIjI0XCIgY2xhc3M9XCJzcGluXCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodmFsaWRGaWxlKSB7XG4gICAgICAgICAgICAgICAgPGJtYi1pY29uIGljb249XCJ0YXNrXCIgW3NpemVdPVwiMjRcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibWItZHJvcC16b25lLWxpc3QtbmFtZVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBmaWxlLm5hbWUgfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm1iLWRyb3Atem9uZS1saXN0LXN0YXR1c1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ2JtYi1kcm9wLXpvbmUtbGlzdC1zdGF0dXMtc3VjY2Vzcyc6XG4gICAgICAgICAgICAgICAgICAgIGdldFByb2dyZXNzKGZpbGUubmFtZSkgPT09IDEwMFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICh2YWxpZEZpbGUgJiYgZ2V0UHJvZ3Jlc3MoZmlsZS5uYW1lKSA8IDEwMCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0UHJvZ3Jlc3MoZmlsZS5uYW1lKSB9fSUgLyAxMDAlPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAoZ2V0UHJvZ3Jlc3MoZmlsZS5uYW1lKSA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICB7eyBmaWxlLnNpemUudG9GaXhlZCgyKSB9fSBNQlxuICAgICAgICAgICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGVja19jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VjY2Vzcy1pY29uXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQnV0dG9uO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZmlsZU5hbWU6IGZpbGUubmFtZSB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmIChmaWxlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWxlLmVycm9yVHlwZSA9PT0gJ2Zvcm1hdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBlcnJvck1lc3NhZ2VGb3JtYXQoKSB9fVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChmaWxlLmVycm9yVHlwZSA9PT0gJ3NpemUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAge3sgZXJyb3JNZXNzYWdlU2l6ZSgpIH19ICh7eyBmaWxlLnNpemUudG9GaXhlZCgyKSB9fSBNQilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJ1dHRvbjtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZpbGVOYW1lOiBmaWxlLm5hbWUgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZW1vdmVCdXR0b24gbGV0LWZpbGVOYW1lPVwiZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJtYi1kcm9wLXpvbmUtbGlzdC1yZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbGUoZmlsZU5hbWUpXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxibWItaWNvbiBpY29uPVwiZGVsZXRlXCIgW3NpemVdPVwiMjRcIiBjbGFzcz1cImRlbGV0ZS1pY29uXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKHZhbGlkRmlsZSAmJiBnZXRQcm9ncmVzcyhmaWxlLm5hbWUpIDwgMTAwKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm1iLWRyb3Atem9uZS1saXN0LXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgIDxibWItcHJvZ3Jlc3MtYmFyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwic2ltcGxlXCJcbiAgICAgICAgICAgICAgICAgIFtjb3VudGVyXT1cImdldFByb2dyZXNzKGZpbGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW3RvdGFsQ291bnRdPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYm1iLWNhcmQtY29udGVudD5cbiAgICAgIDwvYm1iLWNhcmQ+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==