@sumaris-net/ngx-components 4.0.0-rc9 → 18.0.0

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 (555) hide show
  1. package/README.md +5 -3
  2. package/doc/changelog.md +522 -280
  3. package/esm2022/public_api.mjs +38 -19
  4. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  5. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  6. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  7. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  8. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  9. package/esm2022/src/app/admin/users/users.mjs +22 -19
  10. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  11. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  12. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  13. package/esm2022/src/app/core/account/account.module.mjs +28 -18
  14. package/esm2022/src/app/core/account/account.page.mjs +19 -5
  15. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  16. package/esm2022/src/app/core/account/new-token.modal.mjs +27 -86
  17. package/esm2022/src/app/core/account/password/change-password.form.mjs +60 -0
  18. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  19. package/esm2022/src/app/core/account/password/change-password.page.mjs +144 -0
  20. package/esm2022/src/app/core/account/token.table.mjs +47 -35
  21. package/esm2022/src/app/core/auth/auth.form.mjs +47 -28
  22. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  23. package/esm2022/src/app/core/auth/auth.module.mjs +22 -13
  24. package/esm2022/src/app/core/auth/reset-password.modal.mjs +77 -0
  25. package/esm2022/src/app/core/core.module.mjs +28 -61
  26. package/esm2022/src/app/core/core.testing.module.mjs +34 -20
  27. package/esm2022/src/app/core/form/array/form-array.mjs +325 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  29. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +24 -25
  31. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  32. package/esm2022/src/app/core/form/entity/editor.class.mjs +64 -517
  33. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +26 -42
  34. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +42 -41
  35. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  36. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  37. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +194 -0
  38. package/esm2022/src/app/core/form/form-container.class.mjs +327 -0
  39. package/esm2022/src/app/core/form/form.class.mjs +39 -56
  40. package/esm2022/src/app/core/form/form.module.mjs +14 -10
  41. package/esm2022/src/app/core/form/form.utils.mjs +23 -306
  42. package/esm2022/src/app/core/form/list/list.form.mjs +16 -14
  43. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  44. package/esm2022/src/app/core/form/properties/properties.form.mjs +139 -57
  45. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  46. package/esm2022/src/app/core/form/properties/properties.table.mjs +27 -28
  47. package/esm2022/src/app/core/form/properties/properties.utils.mjs +60 -0
  48. package/esm2022/src/app/core/form/properties/property.validator.mjs +23 -9
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  50. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +15 -15
  52. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  53. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +7 -7
  54. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  55. package/esm2022/src/app/core/form/username/username.form.mjs +52 -0
  56. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  57. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -16
  58. package/esm2022/src/app/core/graphql/graphql.service.mjs +101 -109
  59. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  60. package/esm2022/src/app/core/home/home.mjs +81 -52
  61. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  62. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  63. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  64. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  65. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  66. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  67. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  68. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  69. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  70. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  71. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
  72. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +43 -8
  73. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  75. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  76. package/esm2022/src/app/core/peer/select-peer.modal.mjs +31 -21
  77. package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -23
  78. package/esm2022/src/app/core/register/register-confirm.page.mjs +18 -16
  79. package/esm2022/src/app/core/register/register.form.mjs +7 -7
  80. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  81. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  82. package/esm2022/src/app/core/services/account.service.mjs +272 -170
  83. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  84. package/esm2022/src/app/core/services/base-entity-service.class.mjs +55 -64
  85. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  86. package/esm2022/src/app/core/services/base58.mjs +8 -4
  87. package/esm2022/src/app/core/services/config/core.config.mjs +88 -37
  88. package/esm2022/src/app/core/services/config.service.mjs +81 -62
  89. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  90. package/esm2022/src/app/core/services/errors.mjs +6 -5
  91. package/esm2022/src/app/core/services/local-settings.service.mjs +58 -44
  92. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  93. package/esm2022/src/app/core/services/model/config.model.mjs +7 -7
  94. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  95. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  96. package/esm2022/src/app/core/services/model/entity.model.mjs +27 -31
  97. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  98. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  99. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +19 -9
  101. package/esm2022/src/app/core/services/model/person.model.mjs +26 -22
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +36 -23
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
  104. package/esm2022/src/app/core/services/model/token.model.mjs +7 -3
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +3 -7
  106. package/esm2022/src/app/core/services/network.service.mjs +99 -76
  107. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  108. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +9 -9
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  115. package/esm2022/src/app/core/services/platform.service.mjs +102 -69
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +5 -5
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +34 -20
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  125. package/esm2022/src/app/core/settings/settings.module.mjs +9 -21
  126. package/esm2022/src/app/core/settings/settings.page.mjs +76 -63
  127. package/esm2022/src/app/core/table/async-table.class.mjs +219 -201
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +127 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +31 -33
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +36 -36
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +5 -5
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  135. package/esm2022/src/app/core/table/table.class.mjs +193 -152
  136. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  137. package/esm2022/src/app/core/table/table.module.mjs +35 -24
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +9 -5
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +116 -78
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +68 -45
  145. package/esm2022/src/app/shared/alerts.mjs +49 -45
  146. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  151. package/esm2022/src/app/shared/constants.mjs +9 -4
  152. package/esm2022/src/app/shared/dates.mjs +18 -16
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -15
  157. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +4 -4
  158. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  159. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  160. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  161. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  162. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  163. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  164. package/esm2022/src/app/shared/events.mjs +6 -8
  165. package/esm2022/src/app/shared/file/csv.utils.mjs +38 -18
  166. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  167. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  168. package/esm2022/src/app/shared/file/images.utils.mjs +29 -4
  169. package/esm2022/src/app/shared/file/json.utils.mjs +11 -4
  170. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/focusable.mjs +1 -1
  172. package/esm2022/src/app/shared/form/field.component.mjs +69 -43
  173. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  174. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  175. package/esm2022/src/app/shared/forms.mjs +116 -43
  176. package/esm2022/src/app/shared/functions.mjs +139 -71
  177. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  178. package/esm2022/src/app/shared/gesture/gesture-config.mjs +10 -10
  179. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  180. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  181. package/esm2022/src/app/shared/graph/graph-colors.mjs +23 -29
  182. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  183. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  184. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  185. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +44 -17
  186. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  187. package/esm2022/src/app/shared/http/http.utils.mjs +15 -11
  188. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +27 -27
  189. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  190. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  191. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  192. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  194. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  195. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  196. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  197. package/esm2022/src/app/shared/inputs.mjs +52 -20
  198. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  199. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  200. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  201. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  202. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  203. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  204. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +348 -238
  205. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +13 -16
  206. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +5 -4
  207. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +51 -37
  208. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +99 -57
  209. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  210. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  211. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +19 -20
  212. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +209 -104
  213. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +15 -8
  214. package/esm2022/src/app/shared/material/chips/chips.module.mjs +12 -13
  215. package/esm2022/src/app/shared/material/chips/material.chips.mjs +228 -168
  216. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +20 -21
  217. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +12 -27
  218. package/esm2022/src/app/shared/material/datetime/material.date.mjs +167 -92
  219. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +128 -77
  220. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +297 -165
  221. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +34 -30
  222. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +31 -27
  223. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +26 -23
  224. package/esm2022/src/app/shared/material/duration/duration.module.mjs +11 -16
  225. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  226. package/esm2022/src/app/shared/material/duration/material.duration.mjs +35 -34
  227. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +23 -22
  228. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +217 -170
  229. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +182 -241
  230. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +10 -15
  231. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +19 -14
  232. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  233. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  234. package/esm2022/src/app/shared/material/material.module.mjs +16 -16
  235. package/esm2022/src/app/shared/material/material.testing.module.mjs +50 -37
  236. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +12 -9
  237. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  238. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +26 -19
  239. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  240. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  241. package/esm2022/src/app/shared/material/testing/common.test.mjs +30 -24
  242. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +30 -19
  243. package/esm2022/src/app/shared/material/text/text-form.component.mjs +128 -21
  244. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  245. package/esm2022/src/app/shared/modules.mjs +1 -1
  246. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +118 -37
  247. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  248. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  249. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +8 -8
  250. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  251. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  252. package/esm2022/src/app/shared/observables.mjs +14 -18
  253. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +53 -38
  254. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  255. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +8 -6
  256. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  257. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +15 -15
  258. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  259. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  260. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  261. package/esm2022/src/app/shared/pipes/form.pipes.mjs +72 -47
  262. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +15 -15
  263. package/esm2022/src/app/shared/pipes/html.pipes.mjs +52 -0
  264. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  265. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  266. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +37 -88
  267. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  268. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  269. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  270. package/esm2022/src/app/shared/pipes/pipes.module.mjs +117 -137
  271. package/esm2022/src/app/shared/pipes/property.pipes.mjs +86 -47
  272. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  273. package/esm2022/src/app/shared/pipes/string.pipes.mjs +50 -49
  274. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  275. package/esm2022/src/app/shared/pipes/types.pipes.mjs +33 -17
  276. package/esm2022/src/app/shared/platforms.mjs +7 -5
  277. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  278. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  279. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  280. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +43 -41
  281. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  282. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  283. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  284. package/esm2022/src/app/shared/services/translate-context.service.mjs +18 -15
  285. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  286. package/esm2022/src/app/shared/services.mjs +12 -12
  287. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  288. package/esm2022/src/app/shared/shared.module.mjs +29 -28
  289. package/esm2022/src/app/shared/shared.testing.module.mjs +18 -10
  290. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +39 -46
  291. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  292. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  293. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  294. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  295. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  296. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  297. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  298. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  299. package/esm2022/src/app/shared/toast/toast.testing.mjs +11 -11
  300. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  301. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  302. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +10 -8
  303. package/esm2022/src/app/shared/toolbar/toolbar.mjs +31 -32
  304. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  305. package/esm2022/src/app/shared/types.mjs +1 -1
  306. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +12 -12
  307. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  308. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  309. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +21 -19
  310. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  311. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +64 -56
  312. package/esm2022/src/app/shared/validator/validators.mjs +60 -39
  313. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  314. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  315. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  316. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +49 -46
  317. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +10 -13
  318. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  319. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +39 -21
  320. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +6 -11
  321. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +11 -30
  322. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  323. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  324. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  325. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  326. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  327. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  328. package/esm2022/src/app/social/social.errors.mjs +2 -2
  329. package/esm2022/src/app/social/social.module.mjs +7 -32
  330. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  331. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +27 -23
  332. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  333. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  334. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  335. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  336. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  337. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  338. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  339. package/esm2022/src/app/social/user-event/user-event.service.mjs +61 -64
  340. package/esm2022/src/environments/environment.class.mjs +9 -1
  341. package/esm2022/src/environments/environment.loader.mjs +5 -11
  342. package/esm2022/src/environments/environment.mjs +19 -11
  343. package/fesm2022/sumaris-net.ngx-components.mjs +16117 -14592
  344. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  345. package/package.json +33 -18
  346. package/public_api.d.ts +30 -22
  347. package/src/app/admin/services/filter/person.filter.d.ts +1 -1
  348. package/src/app/admin/users/users.d.ts +5 -6
  349. package/src/app/core/account/account.module.d.ts +10 -8
  350. package/src/app/core/account/account.page.d.ts +25 -15
  351. package/src/app/core/account/new-token.form.d.ts +29 -0
  352. package/src/app/core/account/new-token.modal.d.ts +9 -21
  353. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  354. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  355. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  356. package/src/app/core/account/token.table.d.ts +7 -5
  357. package/src/app/core/auth/auth.form.d.ts +11 -9
  358. package/src/app/core/auth/auth.module.d.ts +6 -4
  359. package/src/app/core/auth/reset-password.modal.d.ts +26 -0
  360. package/src/app/core/core.module.d.ts +21 -24
  361. package/src/app/core/core.testing.module.d.ts +2 -1
  362. package/src/app/core/form/array/form-array.d.ts +136 -0
  363. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  364. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  365. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -3
  366. package/src/app/core/form/entity/editor.class.d.ts +19 -179
  367. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +10 -13
  368. package/src/app/core/form/entity/entity-editor.class.d.ts +12 -17
  369. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  370. package/src/app/core/form/entity/tab-editor.class.d.ts +70 -0
  371. package/src/app/core/form/form-container.class.d.ts +126 -0
  372. package/src/app/core/form/form.class.d.ts +13 -26
  373. package/src/app/core/form/form.module.d.ts +2 -1
  374. package/src/app/core/form/form.utils.d.ts +60 -145
  375. package/src/app/core/form/list/list.form.d.ts +2 -2
  376. package/src/app/core/form/properties/properties.form.d.ts +34 -12
  377. package/src/app/core/form/properties/properties.table.d.ts +2 -2
  378. package/src/app/core/form/properties/properties.utils.d.ts +27 -0
  379. package/src/app/core/form/properties/property.validator.d.ts +9 -3
  380. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +3 -1
  381. package/src/app/core/form/username/username.form.d.ts +19 -0
  382. package/src/app/core/form/username/username.module.d.ts +9 -0
  383. package/src/app/core/graphql/graphql.module.d.ts +1 -2
  384. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  385. package/src/app/core/home/home.d.ts +26 -6
  386. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  387. package/src/app/core/menu/testing/menu.testing.d.ts +11 -3
  388. package/src/app/core/peer/select-peer.modal.d.ts +13 -7
  389. package/src/app/core/peer/select-peer.module.d.ts +3 -4
  390. package/src/app/core/services/account.service.d.ts +9 -0
  391. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  392. package/src/app/core/services/config/core.config.d.ts +12 -1
  393. package/src/app/core/services/config.service.d.ts +4 -3
  394. package/src/app/core/services/errors.d.ts +11 -0
  395. package/src/app/core/services/local-settings.service.d.ts +8 -4
  396. package/src/app/core/services/model/entity.model.d.ts +6 -5
  397. package/src/app/core/services/model/filter.model.d.ts +1 -1
  398. package/src/app/core/services/model/peer.model.d.ts +1 -0
  399. package/src/app/core/services/model/person.model.d.ts +6 -2
  400. package/src/app/core/services/model/referential.model.d.ts +8 -3
  401. package/src/app/core/services/model/settings.model.d.ts +4 -2
  402. package/src/app/core/services/model/token.model.d.ts +1 -0
  403. package/src/app/core/services/model/tree-item-entity.model.d.ts +1 -1
  404. package/src/app/core/services/network.service.d.ts +11 -7
  405. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  406. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +3 -1
  407. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  408. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  409. package/src/app/core/services/platform.service.d.ts +8 -3
  410. package/src/app/core/services/testing/referential-filter.model.d.ts +1 -1
  411. package/src/app/core/services/validator/local-settings.validator.d.ts +6 -2
  412. package/src/app/core/settings/settings.module.d.ts +2 -1
  413. package/src/app/core/settings/settings.page.d.ts +34 -21
  414. package/src/app/core/table/async-table.class.d.ts +22 -17
  415. package/src/app/core/table/column/actions-column.component.d.ts +59 -0
  416. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  417. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  418. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
  419. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  420. package/src/app/core/table/table.class.d.ts +14 -11
  421. package/src/app/core/table/table.module.d.ts +8 -4
  422. package/src/app/core/table/table.pipes.d.ts +28 -0
  423. package/src/app/core/table/testing/table.testing.d.ts +12 -13
  424. package/src/app/core/table/testing/table2.testing.d.ts +13 -10
  425. package/src/app/shared/alerts.d.ts +4 -2
  426. package/src/app/shared/constants.d.ts +5 -0
  427. package/src/app/shared/dates.d.ts +12 -5
  428. package/src/app/shared/directives/autofocus.directive.d.ts +0 -1
  429. package/src/app/shared/events.d.ts +1 -1
  430. package/src/app/shared/file/csv.utils.d.ts +5 -0
  431. package/src/app/shared/file/images.utils.d.ts +17 -0
  432. package/src/app/shared/file/json.utils.d.ts +3 -0
  433. package/src/app/shared/form/field.component.d.ts +6 -3
  434. package/src/app/shared/forms.d.ts +32 -0
  435. package/src/app/shared/functions.d.ts +27 -8
  436. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  437. package/src/app/shared/guard/component-dirty.guard.d.ts +1 -6
  438. package/src/app/shared/hotkeys/hotkeys.service.d.ts +17 -3
  439. package/src/app/shared/http/http.utils.d.ts +1 -0
  440. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  441. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  442. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  443. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  444. package/src/app/shared/inputs.d.ts +7 -5
  445. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +20 -1
  446. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +56 -16
  447. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +1 -1
  448. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +2 -1
  449. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
  450. package/src/app/shared/material/badge/badge.directive.d.ts +10 -4
  451. package/src/app/shared/material/boolean/boolean.module.d.ts +15 -14
  452. package/src/app/shared/material/boolean/material.boolean.d.ts +51 -25
  453. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +1 -0
  454. package/src/app/shared/material/chips/chips.module.d.ts +2 -1
  455. package/src/app/shared/material/chips/material.chips.d.ts +46 -21
  456. package/src/app/shared/material/chips/testing/chips.test.d.ts +1 -0
  457. package/src/app/shared/material/datetime/datetime.module.d.ts +1 -1
  458. package/src/app/shared/material/datetime/material.date.d.ts +33 -18
  459. package/src/app/shared/material/datetime/material.dateshort.d.ts +29 -16
  460. package/src/app/shared/material/datetime/material.datetime.d.ts +41 -28
  461. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +3 -3
  462. package/src/app/shared/material/duration/duration.module.d.ts +1 -1
  463. package/src/app/shared/material/duration/material.duration.d.ts +1 -1
  464. package/src/app/shared/material/latlong/latlong.utils.d.ts +9 -1
  465. package/src/app/shared/material/latlong/material.latlong.d.ts +29 -32
  466. package/src/app/shared/material/latlong/material.latlong.module.d.ts +1 -1
  467. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +5 -1
  468. package/src/app/shared/material/material.config.d.ts +3 -0
  469. package/src/app/shared/material/material.module.d.ts +5 -6
  470. package/src/app/shared/material/material.testing.module.d.ts +8 -7
  471. package/src/app/shared/material/swipe/material.swipe.d.ts +4 -3
  472. package/src/app/shared/material/text/testing/text-form.testing.d.ts +10 -4
  473. package/src/app/shared/material/text/text-form.component.d.ts +42 -8
  474. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +30 -14
  475. package/src/app/shared/named-filter/named-filter.service.d.ts +12 -6
  476. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  477. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  478. package/src/app/shared/pipes/arrays.pipe.d.ts +5 -0
  479. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  480. package/src/app/shared/pipes/date-format.pipe.d.ts +3 -2
  481. package/src/app/shared/pipes/form.pipes.d.ts +18 -8
  482. package/src/app/shared/pipes/html.pipes.d.ts +15 -0
  483. package/src/app/shared/pipes/maps.pipe.d.ts +4 -4
  484. package/src/app/shared/pipes/maskito.pipe.d.ts +7 -9
  485. package/src/app/shared/pipes/pipes.module.d.ts +7 -4
  486. package/src/app/shared/pipes/property.pipes.d.ts +24 -3
  487. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  488. package/src/app/shared/pipes/string.pipes.d.ts +6 -6
  489. package/src/app/shared/pipes/types.pipes.d.ts +6 -1
  490. package/src/app/shared/services/entity-service.class.d.ts +0 -2
  491. package/src/app/shared/services/memory-entity-service.class.d.ts +6 -3
  492. package/src/app/shared/services.d.ts +1 -0
  493. package/src/app/shared/shared.testing.module.d.ts +2 -1
  494. package/src/app/shared/storage/storage-explorer.component.d.ts +4 -3
  495. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  496. package/src/app/shared/toolbar/toolbar.d.ts +7 -2
  497. package/src/app/shared/types.d.ts +5 -0
  498. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -0
  499. package/src/app/shared/validator/form-error-adapter.class.d.ts +17 -11
  500. package/src/app/shared/validator/validators.d.ts +20 -9
  501. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -5
  502. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  503. package/src/app/social/job/progression/job-progression.service.d.ts +3 -4
  504. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -1
  505. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -11
  506. package/src/app/social/message/message.modal.d.ts +2 -2
  507. package/src/app/social/message/message.model.d.ts +1 -1
  508. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
  509. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  510. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +2 -3
  511. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  512. package/src/assets/i18n/en-US.json +48 -19
  513. package/src/assets/i18n/en.json +48 -20
  514. package/src/assets/i18n/fr.json +50 -20
  515. package/src/assets/manifest.json +1 -1
  516. package/src/environments/environment.class.d.ts +10 -0
  517. package/src/environments/environment.d.ts +0 -1
  518. package/src/environments/environment.loader.d.ts +0 -2
  519. package/src/theme/_functions.scss +15 -0
  520. package/src/theme/_icons.scss +1 -1
  521. package/src/theme/_ionic.globals.scss +8 -2
  522. package/src/theme/_ionic.scss +10 -10
  523. package/src/theme/_material.globals.scss +16 -43
  524. package/src/theme/_material.scss +45 -32
  525. package/src/theme/_mixins.scss +99 -18
  526. package/src/theme/_ngx-components.forms.scss +354 -0
  527. package/src/theme/_ngx-components.globals.scss +20 -10
  528. package/src/theme/_ngx-components.scss +194 -400
  529. package/src/theme/_ngx-components.table.scss +200 -207
  530. package/src/theme/_ngx-components.tabs.scss +54 -0
  531. package/src/theme/_responsive.scss +0 -31
  532. package/src/theme/_theme.scss +2 -0
  533. package/src/theme/_theme.variables.scss +172 -0
  534. package/esm2022/src/app/core/table/actions-column.component.mjs +0 -115
  535. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
  536. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  537. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  538. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  539. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  540. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  541. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  542. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  543. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  544. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  545. package/src/app/core/table/actions-column.component.d.ts +0 -48
  546. package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
  547. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  548. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  549. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  550. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  551. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  552. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  553. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  554. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  555. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -1,21 +1,65 @@
1
- import { ANIMATION_MODULE_TYPE, Directive, HostBinding, Inject, Input, Optional } from '@angular/core';
1
+ import { ANIMATION_MODULE_TYPE, Directive, HostBinding, Inject, Input, Optional, } from '@angular/core';
2
2
  import { MatBadge } from '@angular/material/badge';
3
3
  import { isNotNilOrBlank } from '../../functions';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/cdk/a11y";
6
+ const EMPTY_CHAR = 0x00a0;
7
+ const SIZE_TO_PX = {
8
+ large: 28,
9
+ medium: 22,
10
+ small: 16,
11
+ };
6
12
  export class BadgeDirective extends MatBadge {
7
13
  el;
8
14
  true;
9
- get isOverlapHost() { return this.overlap; }
10
- get isAboveHost() { return this.isAbove(); }
11
- get isBelowHost() { return !this.isAbove(); }
12
- get isBeforeHost() { return !this.isAfter(); }
13
- get isAfterHost() { return this.isAfter(); }
14
- get isSmallHost() { return this.size === 'small'; }
15
- get isMediumHost() { return this.size === 'medium'; }
16
- get isLargeHost() { return this.size === 'large'; }
17
- get isHiddenHost() { return this.hidden || !this.content; }
18
- get isDisabledHost() { return this.disabled; }
15
+ get isOverlapHost() {
16
+ return this.overlap;
17
+ }
18
+ get isAboveHost() {
19
+ return this.isAbove();
20
+ }
21
+ get isBelowHost() {
22
+ return !this.isAbove();
23
+ }
24
+ get isBeforeHost() {
25
+ return !this.isAfter();
26
+ }
27
+ get isAfterHost() {
28
+ return this.isAfter();
29
+ }
30
+ get isSmallHost() {
31
+ return this.size === 'small';
32
+ }
33
+ get isMediumHost() {
34
+ return this.size === 'medium';
35
+ }
36
+ get isLargeHost() {
37
+ return this.size === 'large';
38
+ }
39
+ get isHiddenHost() {
40
+ return this.hidden || !this.content;
41
+ }
42
+ get isDisabledHost() {
43
+ return this.disabled;
44
+ }
45
+ set appBadge(value) {
46
+ this.content = isNotNilOrBlank(value) ? value : EMPTY_CHAR;
47
+ }
48
+ get appBadge() {
49
+ return this.content;
50
+ }
51
+ set appBadgeDisabled(value) {
52
+ this.disabled = value;
53
+ }
54
+ get appBadgeDisabled() {
55
+ return this.disabled;
56
+ }
57
+ set appBadgeSize(value) {
58
+ this.size = value;
59
+ }
60
+ get appBadgeSize() {
61
+ return this.size;
62
+ }
19
63
  appBadgeColor;
20
64
  appBadgeFill;
21
65
  appBadgeMatIcon;
@@ -27,7 +71,7 @@ export class BadgeDirective extends MatBadge {
27
71
  constructor(_ngZone, el, _ariaDescriber, _renderer, _animationMode) {
28
72
  super(_ngZone, el, _ariaDescriber, _renderer, _animationMode);
29
73
  this.el = el;
30
- this.content = 0x00A0; // Will be invisible
74
+ this.content = EMPTY_CHAR; // Will be invisible
31
75
  }
32
76
  ngOnInit() {
33
77
  super.ngOnInit();
@@ -36,7 +80,16 @@ export class BadgeDirective extends MatBadge {
36
80
  this.updateView();
37
81
  }
38
82
  ngOnChanges(changes) {
39
- if (changes.appBadgeColor || changes.appBadgeFill || changes.appBadgeMatIcon || changes.appBadgeIcon || changes.appBadgeHidden || changes.appBadgeOverlap || changes.appBadgePosition) {
83
+ if (changes.appBadgeColor ||
84
+ changes.appBadgeFill ||
85
+ changes.appBadgeMatIcon ||
86
+ changes.appBadgeIcon ||
87
+ changes.appBadgeHidden ||
88
+ changes.appBadgeOverlap ||
89
+ changes.appBadgePosition ||
90
+ changes.appBadge ||
91
+ changes.appBadgeSize ||
92
+ changes.appBadgeDisabled) {
40
93
  this.updateView();
41
94
  }
42
95
  }
@@ -52,35 +105,27 @@ export class BadgeDirective extends MatBadge {
52
105
  this.appBadgeColor = 'primary';
53
106
  if (this.appBadgeColor === 'warn')
54
107
  this.appBadgeColor = 'warning';
55
- let size;
56
- switch (this.size) {
57
- case 'large':
58
- size = 24;
59
- break;
60
- case 'medium':
61
- size = 22;
62
- break;
63
- case 'small':
64
- size = 16;
65
- break;
66
- }
108
+ const size = SIZE_TO_PX[this.size];
109
+ const fontSize = `var(--mat-badge-legacy-${this.size}-size-container-size,${size}px)`;
67
110
  let hidden = this.appBadgeHidden;
68
- let html = '';
69
- if (this.appBadgeMatIcon) {
70
- html = `<i class="material-icons" style="font-size: ${size}px;">${this.appBadgeMatIcon}</i>`;
71
- }
72
- else if (this.appBadgeIcon) {
73
- html = `<ion-icon style="font-size: ${size}px; pointer-events: none;" name="${this.appBadgeIcon}"></ion-icon>`;
74
- }
75
- else if (isNotNilOrBlank(this.content)) {
76
- html = '' + this.content;
77
- }
78
- else {
79
- hidden = true;
80
- }
81
- if (!hidden && this._html !== html) {
82
- this._html = html;
83
- badge.innerHTML = html;
111
+ if (!hidden) {
112
+ let html = '';
113
+ if (this.appBadgeMatIcon) {
114
+ html = `<i class="material-icons" style="font-size: ${fontSize};">${this.appBadgeMatIcon}</i>`;
115
+ }
116
+ else if (this.appBadgeIcon) {
117
+ html = `<ion-icon style="font-size: ${fontSize}; pointer-events: none;" name="${this.appBadgeIcon}"></ion-icon>`;
118
+ }
119
+ else if (isNotNilOrBlank(this.content) && this.content !== EMPTY_CHAR) {
120
+ html = '' + this.content;
121
+ }
122
+ else {
123
+ hidden = true;
124
+ }
125
+ if (!hidden && this._html !== html) {
126
+ this._html = html;
127
+ badge.innerHTML = html;
128
+ }
84
129
  }
85
130
  // Update style
86
131
  // fill: 'clear'
@@ -93,15 +138,16 @@ export class BadgeDirective extends MatBadge {
93
138
  badge.style.background = `var(--ion-color-${this.appBadgeColor})`;
94
139
  badge.style.color = `var(--ion-color-${this.appBadgeColor}-contrast)`;
95
140
  }
96
- if (hidden)
141
+ if (hidden) {
97
142
  badge.style.display = 'none';
143
+ }
98
144
  else {
99
145
  if (badge.style.display !== 'inline-block')
100
146
  badge.style.display = 'inline-block';
101
147
  if (badge.style.position !== 'absolute')
102
148
  badge.style.position = 'absolute';
103
149
  /*
104
- // WOARKROUND to force position of the badge, when inside a <mat-button> (e.g. on a <mat-label>)
150
+ // WORKAROUND to force position of the badge, when inside a <mat-button> (e.g. on a <mat-label>)
105
151
  const overlap = this.overlap;
106
152
 
107
153
  // Right/left position
@@ -135,23 +181,13 @@ export class BadgeDirective extends MatBadge {
135
181
  }*/
136
182
  }
137
183
  }
138
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: BadgeDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.AriaDescriber }, { token: i0.Renderer2 }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
139
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.6", type: BadgeDirective, selector: "[appBadge], [appBadgeIcon], [appBadgeMatIcon]", inputs: { content: ["appBadge", "content"], disabled: ["appBadgeDisabled", "disabled"], color: ["appBadgeColor", "color"], size: ["appBadgeSize", "size"], fill: ["appBadgeFill", "fill"], hidden: ["appBadgeHidden", "hidden"], overlap: ["appBadgeOverlap", "overlap"], position: ["appBadgePosition", "position"], appBadgeColor: "appBadgeColor", appBadgeFill: "appBadgeFill", appBadgeMatIcon: "appBadgeMatIcon", appBadgeIcon: "appBadgeIcon", appBadgeHidden: "appBadgeHidden", appBadgeOverlap: "appBadgeOverlap", appBadgePosition: "appBadgePosition" }, host: { properties: { "class.mat-badge": "this.true", "class.mat-badge-overlap": "this.isOverlapHost", "class.mat-badge-above": "this.isAboveHost", "class.mat-badge-below": "this.isBelowHost", "class.mat-badge-before": "this.isBeforeHost", "class.mat-badge-after": "this.isAfterHost", "class.mat-badge-small": "this.isSmallHost", "class.mat-badge-medium": "this.isMediumHost", "class.mat-badge-large": "this.isLargeHost", "class.mat-badge-hidden": "this.isHiddenHost", "class.mat-badge-disabled": "this.isDisabledHost" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BadgeDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.AriaDescriber }, { token: i0.Renderer2 }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
185
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.8", type: BadgeDirective, selector: "[appBadge], [appBadgeIcon], [appBadgeMatIcon]", inputs: { appBadge: "appBadge", appBadgeDisabled: "appBadgeDisabled", appBadgeSize: "appBadgeSize", appBadgeColor: "appBadgeColor", appBadgeFill: "appBadgeFill", appBadgeMatIcon: "appBadgeMatIcon", appBadgeIcon: "appBadgeIcon", appBadgeHidden: "appBadgeHidden", appBadgeOverlap: "appBadgeOverlap", appBadgePosition: "appBadgePosition" }, host: { properties: { "class.mat-badge": "this.true", "class.mat-badge-overlap": "this.isOverlapHost", "class.mat-badge-above": "this.isAboveHost", "class.mat-badge-below": "this.isBelowHost", "class.mat-badge-before": "this.isBeforeHost", "class.mat-badge-after": "this.isAfterHost", "class.mat-badge-small": "this.isSmallHost", "class.mat-badge-medium": "this.isMediumHost", "class.mat-badge-large": "this.isLargeHost", "class.mat-badge-hidden": "this.isHiddenHost", "class.mat-badge-disabled": "this.isDisabledHost" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
140
186
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: BadgeDirective, decorators: [{
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BadgeDirective, decorators: [{
142
188
  type: Directive,
143
189
  args: [{
144
190
  selector: '[appBadge], [appBadgeIcon], [appBadgeMatIcon]',
145
- inputs: [
146
- 'content: appBadge',
147
- 'disabled: appBadgeDisabled',
148
- 'color: appBadgeColor',
149
- 'size: appBadgeSize',
150
- 'fill: appBadgeFill',
151
- 'hidden: appBadgeHidden',
152
- 'overlap: appBadgeOverlap',
153
- 'position: appBadgePosition'
154
- ]
155
191
  }]
156
192
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.AriaDescriber }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
157
193
  type: Optional
@@ -191,6 +227,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
191
227
  }], isDisabledHost: [{
192
228
  type: HostBinding,
193
229
  args: ['class.mat-badge-disabled']
230
+ }], appBadge: [{
231
+ type: Input
232
+ }], appBadgeDisabled: [{
233
+ type: Input
234
+ }], appBadgeSize: [{
235
+ type: Input
194
236
  }], appBadgeColor: [{
195
237
  type: Input
196
238
  }], appBadgeFill: [{
@@ -206,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
206
248
  }], appBadgePosition: [{
207
249
  type: Input
208
250
  }] } });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFnQyxRQUFRLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBQ3hMLE9BQU8sRUFBQyxRQUFRLEVBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFJbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFpQmxELE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBUTtJQXlCcEI7SUF2QlUsSUFBSSxDQUFDO0lBQ3JDLElBQTRDLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLElBQTBDLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBMEMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLElBQTJDLFlBQVksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRixJQUEwQyxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQTBDLFdBQVcsS0FBSyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RixJQUEyQyxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUYsSUFBMEMsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxP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QUN4QiwwQkFBMEI7d0JBQzFCLDRCQUE0QjtxQkFDN0I7aUJBQ0Y7OzBCQTZCYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQjt5Q0ExQnJCLElBQUk7c0JBQW5DLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUNjLGFBQWE7c0JBQXhELFdBQVc7dUJBQUMseUJBQXlCO2dCQUNJLFdBQVc7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNNLFdBQVc7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNPLFlBQVk7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNLLFdBQVc7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNNLFdBQVc7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNPLFlBQVk7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNLLFdBQVc7c0JBQXBELFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNPLFlBQVk7c0JBQXRELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNRLGNBQWM7c0JBQTFELFdBQVc7dUJBQUMsMEJBQTBCO2dCQUU5QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIEFOSU1BVElPTl9NT0RVTEVfVFlQRSwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEJhZGdlLCBNYXRCYWRnZVBvc2l0aW9ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQge0FwcENvbG9yc30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtBcmlhRGVzY3JpYmVyfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgTWF0QmFkZ2VGaWxsID0gJ2NsZWFyJyB8ICdzb2xpZCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBCYWRnZV0sIFthcHBCYWRnZUljb25dLCBbYXBwQmFkZ2VNYXRJY29uXScsXG4gIGlucHV0czogW1xuICAgICdjb250ZW50OiBhcHBCYWRnZScsXG4gICAgJ2Rpc2FibGVkOiBhcHBCYWRnZURpc2FibGVkJyxcbiAgICAnY29sb3I6IGFwcEJhZGdlQ29sb3InLFxuICAgICdzaXplOiBhcHBCYWRnZVNpemUnLFxuICAgICdmaWxsOiBhcHBCYWRnZUZpbGwnLFxuICAgICdoaWRkZW46IGFwcEJhZGdlSGlkZGVuJyxcbiAgICAnb3ZlcmxhcDogYXBwQmFkZ2VPdmVybGFwJyxcbiAgICAncG9zaXRpb246IGFwcEJhZGdlUG9zaXRpb24nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQmFkZ2VEaXJlY3RpdmUgZXh0ZW5kcyBNYXRCYWRnZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZScpIHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF0LWJhZGdlLW92ZXJsYXAnKSBnZXQgaXNPdmVybGFwSG9zdCgpIHsgcmV0dXJuIHRoaXMub3ZlcmxhcDsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1hYm92ZScpIGdldCBpc0Fib3ZlSG9zdCgpIHsgcmV0dXJuIHRoaXMuaXNBYm92ZSgpOyB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF0LWJhZGdlLWJlbG93JykgZ2V0IGlzQmVsb3dIb3N0KCkgeyByZXR1cm4gIXRoaXMuaXNBYm92ZSgpOyB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF0LWJhZGdlLWJlZm9yZScpIGdldCBpc0JlZm9yZUhvc3QoKSB7IHJldHVybiAhdGhpcy5pc0FmdGVyKCk7IH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UtYWZ0ZXInKSBnZXQgaXNBZnRlckhvc3QoKSB7IHJldHVybiB0aGlzLmlzQWZ0ZXIoKTsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1zbWFsbCcpIGdldCBpc1NtYWxsSG9zdCgpIHsgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJzsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1tZWRpdW0nKSBnZXQgaXNNZWRpdW1Ib3N0KCkgeyByZXR1cm4gdGhpcy5zaXplID09PSAnbWVkaXVtJzsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1sYXJnZScpIGdldCBpc0xhcmdlSG9zdCgpIHsgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gJ2xhcmdlJzsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1oaWRkZW4nKSBnZXQgaXNIaWRkZW5Ib3N0KCkgeyByZXR1cm4gdGhpcy5oaWRkZW4gfHwgIXRoaXMuY29udGVudDsgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1kaXNhYmxlZCcpIGdldCBpc0Rpc2FibGVkSG9zdCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7IH1cblxuICBASW5wdXQoKSBhcHBCYWRnZUNvbG9yOiBBcHBDb2xvcnM7XG4gIEBJbnB1dCgpIGFwcEJhZGdlRmlsbDogTWF0QmFkZ2VGaWxsO1xuICBASW5wdXQoKSBhcHBCYWRnZU1hdEljb246IHN0cmluZztcbiAgQElucHV0KCkgYXBwQmFkZ2VJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcEJhZGdlSGlkZGVuOiBCb29sZWFuSW5wdXQ7XG4gIEBJbnB1dCgpIGFwcEJhZGdlT3ZlcmxhcDogQm9vbGVhbklucHV0O1xuICBASW5wdXQoKSBhcHBCYWRnZVBvc2l0aW9uOiBNYXRCYWRnZVBvc2l0aW9uO1xuXG4gIHByaXZhdGUgX2h0bWw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIF9hcmlhRGVzY3JpYmVyOiBBcmlhRGVzY3JpYmVyLFxuICAgICAgICAgICAgICBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBTklNQVRJT05fTU9EVUxFX1RZUEUpIF9hbmltYXRpb25Nb2RlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKF9uZ1pvbmUsIGVsLCBfYXJpYURlc2NyaWJlciwgX3JlbmRlcmVyLCBfYW5pbWF0aW9uTW9kZSk7XG4gICAgdGhpcy5jb250ZW50ID0gMHgwMEEwOyAvLyBXaWxsIGJlIGludmlzaWJsZVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5hcHBCYWRnZUNvbG9yIHx8IGNoYW5nZXMuYXBwQmFkZ2VGaWxsIHx8IGNoYW5nZXMuYXBwQmFkZ2VNYXRJY29uIHx8IGNoYW5nZXMuYXBwQmFkZ2VJY29uIHx8IGNoYW5nZXMuYXBwQmFkZ2VIaWRkZW4gfHwgY2hhbmdlcy5hcHBCYWRnZU92ZXJsYXAgfHwgY2hhbmdlcy5hcHBCYWRnZVBvc2l0aW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaWV3KCkge1xuICAgIGNvbnN0IGJhZGdlID0gdGhpcy5nZXRCYWRnZUVsZW1lbnQoKTtcbiAgICBpZiAoIWJhZGdlKSByZXR1cm47XG5cbiAgICAvLyBGaXggY29sb3JcbiAgICBpZiAoIXRoaXMuYXBwQmFkZ2VDb2xvcikgdGhpcy5hcHBCYWRnZUNvbG9yID0gJ3ByaW1hcnknO1xuICAgIGlmICh0aGlzLmFwcEJhZGdlQ29sb3IgPT09ICd3YXJuJykgdGhpcy5hcHBCYWRnZUNvbG9yID0gJ3dhcm5pbmcnO1xuXG4gICAgbGV0IHNpemU6IG51bWJlcjtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICBzaXplID0gMjQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgc2l6ZSA9IDIyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgc2l6ZSA9IDE2O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgbGV0IGhpZGRlbiA9IHRoaXMuYXBwQmFkZ2VIaWRkZW47XG4gICAgbGV0IGh0bWwgPSAnJztcbiAgICBpZiAodGhpcy5hcHBCYWRnZU1hdEljb24pIHtcbiAgICAgIGh0bWwgPSBgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIHN0eWxlPVwiZm9udC1zaXplOiAke3NpemV9cHg7XCI+JHt0aGlzLmFwcEJhZGdlTWF0SWNvbn08L2k+YDtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5hcHBCYWRnZUljb24pIHtcbiAgICAgIGh0bWwgPSBgPGlvbi1pY29uIHN0eWxlPVwiZm9udC1zaXplOiAke3NpemV9cHg7IHBvaW50ZXItZXZlbnRzOiBub25lO1wiIG5hbWU9XCIke3RoaXMuYXBwQmFkZ2VJY29ufVwiPjwvaW9uLWljb24+YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuY29udGVudCkpIHtcbiAgICAgIGh0bWwgPSAnJyArIHRoaXMuY29udGVudDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBoaWRkZW4gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWhpZGRlbiAmJiB0aGlzLl9odG1sICE9PSBodG1sKSB7XG4gICAgICB0aGlzLl9odG1sID0gaHRtbDtcbiAgICAgIGJhZGdlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHN0eWxlXG4gICAgLy8gZmlsbDogJ2NsZWFyJ1xuICAgIGlmICh0aGlzLmFwcEJhZGdlRmlsbCA9PT0gJ2NsZWFyJykge1xuICAgICAgYmFkZ2Uuc3R5bGUuY29sb3IgPSBgdmFyKC0taW9uLWNvbG9yLSR7dGhpcy5hcHBCYWRnZUNvbG9yfSlgO1xuICAgICAgYmFkZ2Uuc3R5bGUuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgfVxuICAgIC8vIGZpbGw6ICdzb2xpZCcgKGRlZmF1bHQgdmFsdWUpXG4gICAgZWxzZSB7XG4gICAgICBiYWRnZS5zdHlsZS5iYWNrZ3JvdW5kID0gYHZhcigtLWlvbi1jb2xvci0ke3RoaXMuYXBwQmFkZ2VDb2xvcn0pYDtcbiAgICAgIGJhZGdlLnN0eWxlLmNvbG9yID0gYHZhcigtLWlvbi1jb2xvci0ke3RoaXMuYXBwQmFkZ2VDb2xvcn0tY29udHJhc3QpYDtcbiAgICB9XG5cbiAgICBpZiAoaGlkZGVuKSBiYWRnZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKGJhZGdlLnN0eWxlLmRpc3BsYXkgIT09ICdpbmxpbmUtYmxvY2snKSBiYWRnZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICBpZiAoYmFkZ2Uuc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScpIGJhZGdlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuXG5cblxuICAgICAgLypcbiAgICAgIC8vIFdPQVJLUk9VTkQgdG8gZm9yY2UgcG9zaXRpb24gb2YgdGhlIGJhZGdlLCB3aGVuIGluc2lkZSBhIDxtYXQtYnV0dG9uPiAoZS5nLiBvbiBhIDxtYXQtbGFiZWw+KVxuICAgICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMub3ZlcmxhcDtcblxuICAgICAgLy8gUmlnaHQvbGVmdCBwb3NpdGlvblxuICAgICAgaWYgKHRoaXMuaXNBZnRlcigpICkge1xuICAgICAgICBjb25zdCBwYXJlbnRXaWR0aCA9IGJhZGdlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGlmIChwYXJlbnRXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gYCR7cGFyZW50V2lkdGggLSAob3ZlcmxhcCA/IHNpemUgLyAyIDogMCl9cHhgO1xuICAgICAgICAgIGlmIChiYWRnZS5zdHlsZS5sZWZ0ICE9PSBsZWZ0KSBiYWRnZS5zdHlsZS5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUucmlnaHQgIT09ICcnKSBiYWRnZS5zdHlsZS5yaWdodCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gYCR7LTEgKiAob3ZlcmxhcCA/IHNpemUgLyAyIDogc2l6ZSl9cHhgO1xuICAgICAgICAgIGlmIChiYWRnZS5zdHlsZS5yaWdodCAhPT0gcmlnaHQpIGJhZGdlLnN0eWxlLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLmxlZnQgIT09ICcnKSBiYWRnZS5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG9wL2JvdHRvbSBwb3NpdGlvblxuICAgICAgaWYgKHRoaXMuaXNBYm92ZSgpKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IGJhZGdlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGAke3BhcmVudEhlaWdodCAtIChvdmVybGFwID8gKHNpemUgLyAyKSA6IHNpemUpfXB4YDtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUuYm90dG9tICE9PSBib3R0b20pIGJhZGdlLnN0eWxlLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUudG9wICE9PSAnJykgYmFkZ2Uuc3R5bGUudG9wID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgdG9wID0gYCR7LTEgKiAob3ZlcmxhcCA/IChzaXplIC8gMikgOiBzaXplKX1weGA7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLnRvcCAhPT0gdG9wKSBiYWRnZS5zdHlsZS50b3AgPSB0b3A7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLmJvdHRvbSAhPT0gJycpIGJhZGdlLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9Ki9cbiAgICB9XG4gIH1cbn1cbiJdfQ==
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxxQkFBcUIsRUFDckIsU0FBUyxFQUVULFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUtMLFFBQVEsR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBSW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBR2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUMxQixNQUFNLFVBQVUsR0FBRztJQUNqQixLQUFLLEVBQUUsRUFBRTtJQUNULE1BQU0sRUFBRSxFQUFFO0lBQ1YsS0FBSyxFQUFFLEVBQUU7Q0FDVixDQUFDO0FBSUYsTUFBTSxPQUFPLGNBQWUsU0FBUSxRQUFRO0lBaUU5QjtJQWhFb0IsSUFBSSxDQUFDO0lBQ3JDLElBQTRDLGFBQWE7UUFDdkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUEwQyxXQUFXO1FBQ25ELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUEwQyxXQUFXO1FBQ25ELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELElBQTJDLFlBQVk7UUFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBMEMsV0FBVztRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBMEMsV0FBVztRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFD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QUF1QjtnQkFHTSxXQUFXO3NCQUFwRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFHTyxZQUFZO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFHSyxXQUFXO3NCQUFwRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFHTyxZQUFZO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFHUSxjQUFjO3NCQUExRCxXQUFXO3VCQUFDLDBCQUEwQjtnQkFJMUIsUUFBUTtzQkFBcEIsS0FBSztnQkFPTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBTU8sWUFBWTtzQkFBeEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBBTklNQVRJT05fTU9EVUxFX1RZUEUsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRCYWRnZSwgTWF0QmFkZ2VQb3NpdGlvbiwgTWF0QmFkZ2VTaXplIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgQXBwQ29sb3JzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQXJpYURlc2NyaWJlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIE1hdEJhZGdlRmlsbCA9ICdjbGVhcicgfCAnc29saWQnO1xuY29uc3QgRU1QVFlfQ0hBUiA9IDB4MDBhMDtcbmNvbnN0IFNJWkVfVE9fUFggPSB7XG4gIGxhcmdlOiAyOCxcbiAgbWVkaXVtOiAyMixcbiAgc21hbGw6IDE2LFxufTtcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBCYWRnZV0sIFthcHBCYWRnZUljb25dLCBbYXBwQmFkZ2VNYXRJY29uXScsXG59KVxuZXhwb3J0IGNsYXNzIEJhZGdlRGlyZWN0aXZlIGV4dGVuZHMgTWF0QmFkZ2UgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UnKSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1vdmVybGFwJykgZ2V0IGlzT3ZlcmxhcEhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxhcDtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1hYm92ZScpIGdldCBpc0Fib3ZlSG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0Fib3ZlKCk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UtYmVsb3cnKSBnZXQgaXNCZWxvd0hvc3QoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzQWJvdmUoKTtcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1iZWZvcmUnKSBnZXQgaXNCZWZvcmVIb3N0KCkge1xuICAgIHJldHVybiAhdGhpcy5pc0FmdGVyKCk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UtYWZ0ZXInKSBnZXQgaXNBZnRlckhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNBZnRlcigpO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF0LWJhZGdlLXNtYWxsJykgZ2V0IGlzU21hbGxIb3N0KCkge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdzbWFsbCc7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UtbWVkaXVtJykgZ2V0IGlzTWVkaXVtSG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnbWVkaXVtJztcbiAgfVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdC1iYWRnZS1sYXJnZScpIGdldCBpc0xhcmdlSG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnbGFyZ2UnO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MubWF0LWJhZGdlLWhpZGRlbicpIGdldCBpc0hpZGRlbkhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZGVuIHx8ICF0aGlzLmNvbnRlbnQ7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtYmFkZ2UtZGlzYWJsZWQnKSBnZXQgaXNEaXNhYmxlZEhvc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgYXBwQmFkZ2UodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHRoaXMuY29udGVudCA9IGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgPyB2YWx1ZSA6IEVNUFRZX0NIQVI7XG4gIH1cbiAgZ2V0IGFwcEJhZGdlKCk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBhcHBCYWRnZURpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIGdldCBhcHBCYWRnZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICB9XG4gIEBJbnB1dCgpIHNldCBhcHBCYWRnZVNpemUodmFsdWU6IE1hdEJhZGdlU2l6ZSkge1xuICAgIHRoaXMuc2l6ZSA9IHZhbHVlO1xuICB9XG4gIGdldCBhcHBCYWRnZVNpemUoKTogTWF0QmFkZ2VTaXplIHtcbiAgICByZXR1cm4gdGhpcy5zaXplO1xuICB9XG5cbiAgQElucHV0KCkgYXBwQmFkZ2VDb2xvcjogQXBwQ29sb3JzO1xuICBASW5wdXQoKSBhcHBCYWRnZUZpbGw6IE1hdEJhZGdlRmlsbDtcbiAgQElucHV0KCkgYXBwQmFkZ2VNYXRJY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcEJhZGdlSWNvbjogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBCYWRnZUhpZGRlbjogQm9vbGVhbklucHV0O1xuICBASW5wdXQoKSBhcHBCYWRnZU92ZXJsYXA6IEJvb2xlYW5JbnB1dDtcbiAgQElucHV0KCkgYXBwQmFkZ2VQb3NpdGlvbjogTWF0QmFkZ2VQb3NpdGlvbjtcblxuICBwcml2YXRlIF9odG1sOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX25nWm9uZTogTmdab25lLFxuICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgX2FyaWFEZXNjcmliZXI6IEFyaWFEZXNjcmliZXIsXG4gICAgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBTklNQVRJT05fTU9EVUxFX1RZUEUpIF9hbmltYXRpb25Nb2RlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICkge1xuICAgIHN1cGVyKF9uZ1pvbmUsIGVsLCBfYXJpYURlc2NyaWJlciwgX3JlbmRlcmVyLCBfYW5pbWF0aW9uTW9kZSk7XG4gICAgdGhpcy5jb250ZW50ID0gRU1QVFlfQ0hBUjsgLy8gV2lsbCBiZSBpbnZpc2libGVcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5hcHBCYWRnZUNvbG9yIHx8XG4gICAgICBjaGFuZ2VzLmFwcEJhZGdlRmlsbCB8fFxuICAgICAgY2hhbmdlcy5hcHBCYWRnZU1hdEljb24gfHxcbiAgICAgIGNoYW5nZXMuYXBwQmFkZ2VJY29uIHx8XG4gICAgICBjaGFuZ2VzLmFwcEJhZGdlSGlkZGVuIHx8XG4gICAgICBjaGFuZ2VzLmFwcEJhZGdlT3ZlcmxhcCB8fFxuICAgICAgY2hhbmdlcy5hcHBCYWRnZVBvc2l0aW9uIHx8XG4gICAgICBjaGFuZ2VzLmFwcEJhZGdlIHx8XG4gICAgICBjaGFuZ2VzLmFwcEJhZGdlU2l6ZSB8fFxuICAgICAgY2hhbmdlcy5hcHBCYWRnZURpc2FibGVkXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaWV3KCkge1xuICAgIGNvbnN0IGJhZGdlID0gdGhpcy5nZXRCYWRnZUVsZW1lbnQoKTtcbiAgICBpZiAoIWJhZGdlKSByZXR1cm47XG5cbiAgICAvLyBGaXggY29sb3JcbiAgICBpZiAoIXRoaXMuYXBwQmFkZ2VDb2xvcikgdGhpcy5hcHBCYWRnZUNvbG9yID0gJ3ByaW1hcnknO1xuICAgIGlmICh0aGlzLmFwcEJhZGdlQ29sb3IgPT09ICd3YXJuJykgdGhpcy5hcHBCYWRnZUNvbG9yID0gJ3dhcm5pbmcnO1xuXG4gICAgY29uc3Qgc2l6ZSA9IFNJWkVfVE9fUFhbdGhpcy5zaXplXTtcbiAgICBjb25zdCBmb250U2l6ZSA9IGB2YXIoLS1tYXQtYmFkZ2UtbGVnYWN5LSR7dGhpcy5zaXplfS1zaXplLWNvbnRhaW5lci1zaXplLCR7c2l6ZX1weClgO1xuICAgIGxldCBoaWRkZW4gPSB0aGlzLmFwcEJhZGdlSGlkZGVuO1xuICAgIGlmICghaGlkZGVuKSB7XG4gICAgICBsZXQgaHRtbCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXBwQmFkZ2VNYXRJY29uKSB7XG4gICAgICAgIGh0bWwgPSBgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIHN0eWxlPVwiZm9udC1zaXplOiAke2ZvbnRTaXplfTtcIj4ke3RoaXMuYXBwQmFkZ2VNYXRJY29ufTwvaT5gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcEJhZGdlSWNvbikge1xuICAgICAgICBodG1sID0gYDxpb24taWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogJHtmb250U2l6ZX07IHBvaW50ZXItZXZlbnRzOiBub25lO1wiIG5hbWU9XCIke3RoaXMuYXBwQmFkZ2VJY29ufVwiPjwvaW9uLWljb24+YDtcbiAgICAgIH0gZWxzZSBpZiAoaXNOb3ROaWxPckJsYW5rKHRoaXMuY29udGVudCkgJiYgdGhpcy5jb250ZW50ICE9PSBFTVBUWV9DSEFSKSB7XG4gICAgICAgIGh0bWwgPSAnJyArIHRoaXMuY29udGVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZGRlbiA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIWhpZGRlbiAmJiB0aGlzLl9odG1sICE9PSBodG1sKSB7XG4gICAgICAgIHRoaXMuX2h0bWwgPSBodG1sO1xuICAgICAgICBiYWRnZS5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzdHlsZVxuICAgIC8vIGZpbGw6ICdjbGVhcidcbiAgICBpZiAodGhpcy5hcHBCYWRnZUZpbGwgPT09ICdjbGVhcicpIHtcbiAgICAgIGJhZGdlLnN0eWxlLmNvbG9yID0gYHZhcigtLWlvbi1jb2xvci0ke3RoaXMuYXBwQmFkZ2VDb2xvcn0pYDtcbiAgICAgIGJhZGdlLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgIH1cbiAgICAvLyBmaWxsOiAnc29saWQnIChkZWZhdWx0IHZhbHVlKVxuICAgIGVsc2Uge1xuICAgICAgYmFkZ2Uuc3R5bGUuYmFja2dyb3VuZCA9IGB2YXIoLS1pb24tY29sb3ItJHt0aGlzLmFwcEJhZGdlQ29sb3J9KWA7XG4gICAgICBiYWRnZS5zdHlsZS5jb2xvciA9IGB2YXIoLS1pb24tY29sb3ItJHt0aGlzLmFwcEJhZGdlQ29sb3J9LWNvbnRyYXN0KWA7XG4gICAgfVxuXG4gICAgaWYgKGhpZGRlbikge1xuICAgICAgYmFkZ2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGJhZGdlLnN0eWxlLmRpc3BsYXkgIT09ICdpbmxpbmUtYmxvY2snKSBiYWRnZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgICBpZiAoYmFkZ2Uuc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScpIGJhZGdlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuICAgICAgLypcbiAgICAgIC8vIFdPUktBUk9VTkQgdG8gZm9yY2UgcG9zaXRpb24gb2YgdGhlIGJhZGdlLCB3aGVuIGluc2lkZSBhIDxtYXQtYnV0dG9uPiAoZS5nLiBvbiBhIDxtYXQtbGFiZWw+KVxuICAgICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMub3ZlcmxhcDtcblxuICAgICAgLy8gUmlnaHQvbGVmdCBwb3NpdGlvblxuICAgICAgaWYgKHRoaXMuaXNBZnRlcigpICkge1xuICAgICAgICBjb25zdCBwYXJlbnRXaWR0aCA9IGJhZGdlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGlmIChwYXJlbnRXaWR0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gYCR7cGFyZW50V2lkdGggLSAob3ZlcmxhcCA/IHNpemUgLyAyIDogMCl9cHhgO1xuICAgICAgICAgIGlmIChiYWRnZS5zdHlsZS5sZWZ0ICE9PSBsZWZ0KSBiYWRnZS5zdHlsZS5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUucmlnaHQgIT09ICcnKSBiYWRnZS5zdHlsZS5yaWdodCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gYCR7LTEgKiAob3ZlcmxhcCA/IHNpemUgLyAyIDogc2l6ZSl9cHhgO1xuICAgICAgICAgIGlmIChiYWRnZS5zdHlsZS5yaWdodCAhPT0gcmlnaHQpIGJhZGdlLnN0eWxlLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLmxlZnQgIT09ICcnKSBiYWRnZS5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG9wL2JvdHRvbSBwb3NpdGlvblxuICAgICAgaWYgKHRoaXMuaXNBYm92ZSgpKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IGJhZGdlLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICBpZiAocGFyZW50SGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGAke3BhcmVudEhlaWdodCAtIChvdmVybGFwID8gKHNpemUgLyAyKSA6IHNpemUpfXB4YDtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUuYm90dG9tICE9PSBib3R0b20pIGJhZGdlLnN0eWxlLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgICBpZiAoYmFkZ2Uuc3R5bGUudG9wICE9PSAnJykgYmFkZ2Uuc3R5bGUudG9wID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgdG9wID0gYCR7LTEgKiAob3ZlcmxhcCA/IChzaXplIC8gMikgOiBzaXplKX1weGA7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLnRvcCAhPT0gdG9wKSBiYWRnZS5zdHlsZS50b3AgPSB0b3A7XG4gICAgICAgICAgaWYgKGJhZGdlLnN0eWxlLmJvdHRvbSAhPT0gJycpIGJhZGdlLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9Ki9cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -5,28 +5,16 @@ import { BadgeDirective } from './badge.directive';
5
5
  import { MatBadgeModule } from '@angular/material/badge';
6
6
  import * as i0 from "@angular/core";
7
7
  export class SharedBadgeModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SharedBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.6", ngImport: i0, type: SharedBadgeModule, declarations: [BadgeDirective], imports: [CommonModule,
10
- IonicModule,
11
- MatBadgeModule], exports: [BadgeDirective] });
12
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SharedBadgeModule, imports: [CommonModule,
13
- IonicModule,
14
- MatBadgeModule] });
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedBadgeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SharedBadgeModule, declarations: [BadgeDirective], imports: [CommonModule, IonicModule, MatBadgeModule], exports: [BadgeDirective] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedBadgeModule, imports: [CommonModule, IonicModule, MatBadgeModule] });
15
11
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: SharedBadgeModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SharedBadgeModule, decorators: [{
17
13
  type: NgModule,
18
14
  args: [{
19
- imports: [
20
- CommonModule,
21
- IonicModule,
22
- MatBadgeModule,
23
- ],
24
- exports: [
25
- BadgeDirective
26
- ],
27
- declarations: [
28
- BadgeDirective
29
- ]
15
+ imports: [CommonModule, IonicModule, MatBadgeModule],
16
+ exports: [BadgeDirective],
17
+ declarations: [BadgeDirective],
30
18
  }]
31
19
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDOztBQWV2RCxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixpQkFIMUIsY0FBYyxhQVJkLFlBQVk7WUFDWixXQUFXO1lBQ1gsY0FBYyxhQUdkLGNBQWM7d0dBTUwsaUJBQWlCLFlBWDFCLFlBQVk7WUFDWixXQUFXO1lBQ1gsY0FBYzs7MkZBU0wsaUJBQWlCO2tCQWI3QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsY0FBYztxQkFDZjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osY0FBYztxQkFDZjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0lvbmljTW9kdWxlfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0JhZGdlRGlyZWN0aXZlfSBmcm9tICcuL2JhZGdlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01hdEJhZGdlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSW9uaWNNb2R1bGUsXG4gICAgTWF0QmFkZ2VNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBCYWRnZURpcmVjdGl2ZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBCYWRnZURpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZEJhZGdlTW9kdWxlIHtcbn1cblxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU96RCxNQUFNLE9BQU8saUJBQWlCO3VHQUFqQixpQkFBaUI7d0dBQWpCLGlCQUFpQixpQkFGYixjQUFjLGFBRm5CLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxhQUN6QyxjQUFjO3dHQUdiLGlCQUFpQixZQUpsQixZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWM7OzJGQUl4QyxpQkFBaUI7a0JBTDdCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDekIsWUFBWSxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBCYWRnZURpcmVjdGl2ZSB9IGZyb20gJy4vYmFkZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1hdEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25pY01vZHVsZSwgTWF0QmFkZ2VNb2R1bGVdLFxuICBleHBvcnRzOiBbQmFkZ2VEaXJlY3RpdmVdLFxuICBkZWNsYXJhdGlvbnM6IFtCYWRnZURpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNoYXJlZEJhZGdlTW9kdWxlIHt9XG4iXX0=
@@ -32,11 +32,11 @@ export class MatBadgeTestPage {
32
32
  this.matBadgeContent = event.target.value;
33
33
  this.cd.markForCheck();
34
34
  }
35
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MatBadgeTestPage, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
36
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: MatBadgeTestPage, selector: "mat-badge-test", ngImport: i0, template: "\n<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"small\"\n appBadgeColor=\"accent\"\n appBadgeOverlap=\"false\">Small badge\n <span class=\"mat-badge-content\"></span>\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text appBadge appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeOverlap=\"false\"\n >Medium badge</ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\"\n appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success'|matColor\"\n appBadgeOverlap=\"false\">Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge\n appBadgeIcon=\"checkmark\"\n [appBadgeColor]=\"'success'|matColor\"\n appBadgeOverlap=\"false\">Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\">Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\">{{userText}}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\">\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\">\n <ion-icon slot=\"icon-only\"\n [color]=\"'secondary'\"\n name=\"navigate\"\n ></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\"\n (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\"\n (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\"\n (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\"\n (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\"\n (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button mat-raised-button color=\"primary\"\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button mat-button color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\">\n <ion-icon slot=\"icon-only\"\n [color]=\"'secondary'\"\n name=\"navigate\"\n ></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button mat-raised-button color=\"primary\" [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\">\n {{userText}}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\">\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button mat-button color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n", dependencies: [{ kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonBackButton, selector: "ion-back-button" }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "aria-describedby", "panelClass", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i8.BadgeDirective, selector: "[appBadge], [appBadgeIcon], [appBadgeMatIcon]", inputs: ["appBadge", "appBadgeDisabled", "appBadgeColor", "appBadgeSize", "appBadgeFill", "appBadgeHidden", "appBadgeOverlap", "appBadgePosition", "appBadgeMatIcon", "appBadgeIcon"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
35
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MatBadgeTestPage, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
36
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: MatBadgeTestPage, selector: "mat-badge-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge appBadgeMatIcon=\"check\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge\n </span>\n </ion-text>\n </p>\n\n <!-- small badge with text -->\n <p>\n <ion-text color=\"tertiary\">\n <span [appBadge]=\"0\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge with text 0\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text\n appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeOverlap=\"false\"\n >\n Medium badge\n </ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\" appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge appBadgeIcon=\"checkmark\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n {{ userText }}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\" (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\" (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\" (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\" (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\" (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n", dependencies: [{ kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonBackButton, selector: "ion-back-button" }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i8.BadgeDirective, selector: "[appBadge], [appBadgeIcon], [appBadgeMatIcon]", inputs: ["appBadge", "appBadgeDisabled", "appBadgeSize", "appBadgeColor", "appBadgeFill", "appBadgeMatIcon", "appBadgeIcon", "appBadgeHidden", "appBadgeOverlap", "appBadgePosition"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: MatBadgeTestPage, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: MatBadgeTestPage, decorators: [{
39
39
  type: Component,
40
- args: [{ selector: 'mat-badge-test', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"small\"\n appBadgeColor=\"accent\"\n appBadgeOverlap=\"false\">Small badge\n <span class=\"mat-badge-content\"></span>\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text appBadge appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeOverlap=\"false\"\n >Medium badge</ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\"\n appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success'|matColor\"\n appBadgeOverlap=\"false\">Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge\n appBadgeIcon=\"checkmark\"\n [appBadgeColor]=\"'success'|matColor\"\n appBadgeOverlap=\"false\">Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\">Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary'|matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\">{{userText}}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\">\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\">\n <ion-icon slot=\"icon-only\"\n [color]=\"'secondary'\"\n name=\"navigate\"\n ></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\"\n (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\"\n (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\"\n (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\"\n (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\"\n (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button mat-raised-button color=\"primary\"\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button mat-button color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon|async\"\n [appBadgeColor]=\"$color|async|matColor\"\n [appBadgeHidden]=\"$hidden|async\"\n [appBadgeFill]=\"$fill|async\"\n [appBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\">\n <ion-icon slot=\"icon-only\"\n [color]=\"'secondary'\"\n name=\"navigate\"\n ></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button mat-raised-button color=\"primary\" [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\">\n {{userText}}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\">\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button mat-button color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color|async|matColor\"\n [matBadgeHidden]=\"$hidden|async\"\n [matBadgeSize]=\"$size|async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\">\n {{userText}}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n" }]
40
+ args: [{ selector: 'mat-badge-test', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge appBadgeMatIcon=\"check\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge\n </span>\n </ion-text>\n </p>\n\n <!-- small badge with text -->\n <p>\n <ion-text color=\"tertiary\">\n <span [appBadge]=\"0\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge with text 0\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text\n appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeOverlap=\"false\"\n >\n Medium badge\n </ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\" appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge appBadgeIcon=\"checkmark\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n {{ userText }}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\" (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\" (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\" (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\" (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\" (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n" }]
41
41
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS50ZXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBVXJDLE1BQU0sT0FBTyxnQkFBZ0I7SUFZUDtJQVZwQixRQUFRLEdBQUcsaUJBQWlCLENBQUM7SUFDN0IsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUV0QixLQUFLLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7SUFDN0MsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFlLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVksUUFBUSxDQUFDLENBQUM7SUFDbEQsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyxZQUFvQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO3VHQXZCVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixzRENYN0IsbXFRQXFRQTs7MkZEMVBhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNYXRCYWRnZUZpbGx9IGZyb20gJy4vYmFkZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0QmFkZ2VTaXplfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQge0FwcENvbG9yc30gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtYmFkZ2UtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYWRnZS50ZXN0Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRCYWRnZVRlc3RQYWdlIHtcblxuICB1c2VyVGV4dCA9ICdBIGN1c3RvbSBzdHJpbmcnO1xuICBtYXRCYWRnZUNvbnRlbnQgPSAnISc7XG5cbiAgJGljb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2FsZXJ0Jyk7XG4gICRzaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXRCYWRnZVNpemU+KCdzbWFsbCcpO1xuICAkZmlsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0QmFkZ2VGaWxsPignc29saWQnKTtcbiAgJGNvbG9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcHBDb2xvcnM+KCdkYW5nZXInKTtcbiAgJGhpZGRlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAkb3ZlcmxhcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gIH1cblxuICBvbklucHV0Q2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy51c2VyVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25NYXRCYWRnZUNvbnRlbnRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1hdEJhZGdlQ29udGVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCJcbjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJhY2stYnV0dG9uPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPm1hdEJhZGdlSWNvbiBkaXJlY3RpdmU8L2lvbi10aXRsZT5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cblxuICA8IS0tIHNtYWxsIGJhZGdlIC0tPlxuICA8cD5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgICAgPHNwYW4gYXBwQmFkZ2VcbiAgICAgICAgICAgIGFwcEJhZGdlTWF0SWNvbj1cImNoZWNrXCJcbiAgICAgICAgICAgIGFwcEJhZGdlU2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGFwcEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIj5TbWFsbCBiYWRnZVxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1iYWRnZS1jb250ZW50XCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvcD5cblxuICA8IS0tIG1lZGl1bSBiYWRnZSAtLT5cbiAgPHA+XG4gICAgPGlvbi10ZXh0IGFwcEJhZGdlIGFwcEJhZGdlTWF0SWNvbj1cImNoZWNrXCJcbiAgICAgICAgICAgICAgYXBwQmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJ3RlcnRpYXJ5J3xtYXRDb2xvclwiXG4gICAgICAgICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCJcbiAgICA+TWVkaXVtIGJhZGdlPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tbGFiZWwgYXBwQmFkZ2UgYXBwQmFkZ2VNYXRJY29uPVwiY2xvc2VcIiBhcHBCYWRnZVNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIj5MYXJnZSBiYWRnZTwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBkZWZhdWx0IHNpemUgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tbGFiZWwgYXBwQmFkZ2UgYXBwQmFkZ2VNYXRJY29uPVwiY2hlY2tcIiBbYXBwQmFkZ2VDb2xvcl09XCInc3VjY2Vzcyd8bWF0Q29sb3JcIlxuICAgICAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIj5CYWRnZSAobm8gc2l6ZSwgbm8gY29sb3IpXG4gICAgPC9pb24tbGFiZWw+XG4gIDwvcD5cblxuICA8IS0tIGlvbiBpY29uIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsIGFwcEJhZGdlXG4gICAgICAgICAgICAgICBhcHBCYWRnZUljb249XCJjaGVja21hcmtcIlxuICAgICAgICAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJ3N1Y2Nlc3MnfG1hdENvbG9yXCJcbiAgICAgICAgICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+QmFkZ2Ugd2l0aCBpb24taWNvblxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBpb24gaWNvbiBjbGVhciAtLT5cbiAgPHA+XG4gICAgPGlvbi1sYWJlbCBhcHBCYWRnZVxuICAgICAgICAgICAgICAgYXBwQmFkZ2VJY29uPVwiY2hlY2ttYXJrLWNpcmNsZVwiXG4gICAgICAgICAgICAgICBbYXBwQmFkZ2VDb2xvcl09XCIndGVydGlhcnknfG1hdENvbG9yXCJcbiAgICAgICAgICAgICAgIGFwcEJhZGdlRmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+QmFkZ2Ugd2l0aCBjbGVhciBpY29uXG4gICAgPC9pb24tbGFiZWw+XG4gIDwvcD5cblxuICA8IS0tIGNoYW5naW5nIHRleHQtLT5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW9uLWxhYmVsIGFwcEJhZGdlXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBCYWRnZUljb249XCJjaGVja21hcmstY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIid0ZXJ0aWFyeSd8bWF0Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIj57e3VzZXJUZXh0fX1cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJ1c2VyVGV4dFwiIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+Q29uZmlndXJhYmxlIGV4YW1wbGUgOjwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgICAgICAgICAgYXBwQmFkZ2VcbiAgICAgICAgICAgICAgICBbYXBwQmFkZ2VJY29uXT1cIiRpY29ufGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbYXBwQmFkZ2VDb2xvcl09XCIkY29sb3J8YXN5bmN8bWF0Q29sb3JcIlxuICAgICAgICAgICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbYXBwQmFkZ2VGaWxsXT1cIiRmaWxsfGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbYXBwQmFkZ2VTaXplXT1cIiRzaXplfGFzeW5jXCJcbiAgICAgICAgICAgICAgICBhcHBCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhcHBCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYmVmb3JlXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibmF2aWdhdGVcIlxuICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgIDwvbWF0LWljb24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VDb2xvcjwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGNvbG9yLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLiRjb2xvci5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3ByaW1hcnknXCI+cHJpbWFyeTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NlY29uZGFyeSdcIj5zZWNvbmRhcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIid0ZXJ0aWFyeSdcIj50ZXJ0aWFyeTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2RhbmdlcidcIj5kYW5nZXI8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VJY29uPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkaWNvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kaWNvbi5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2NoZWNrbWFyay1jaXJjbGUnXCI+Y2hlY2ttYXJrLWNpcmNsZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2FsZXJ0LWNpcmNsZSdcIj5hbGVydC1jaXJjbGU8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidhbGVydCdcIj5hbGVydDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2ZsYWcnXCI+ZmxhZzwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2lvbi1jb2w+XG5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD5hcHBCYWRnZVNpemU8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cIiRzaXplLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLiRzaXplLm5leHQoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInbGFyZ2UnXCI+bGFyZ2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidtZWRpdW0nXCI+bWVkaXVtPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInc21hbGwnXCI+c21hbGw8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VGaWxsPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkZmlsbC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kZmlsbC5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2NsZWFyJ1wiPmNsZWFyPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInc29saWQnXCI+c29saWQ8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VIaWRkZW48L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cIiRoaWRkZW4udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGhpZGRlbi5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LXJhaXNlZC1idXR0b246PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgW2FwcEJhZGdlSWNvbl09XCIkaWNvbnxhc3luY1wiXG4gICAgICAgICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIiRjb2xvcnxhc3luY3xtYXRDb2xvclwiXG4gICAgICAgICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgW2FwcEJhZGdlRmlsbF09XCIkZmlsbHxhc3luY1wiXG4gICAgICAgICAgICAgIFthcHBCYWRnZVNpemVdPVwiJHNpemV8YXN5bmNcIlxuICAgICAgICAgICAgICBhcHBCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXBwQmFkZ2VQb3NpdGlvbj1cImJlbG93IGFmdGVyXCI+XG4gICAgICAgIHt7dXNlclRleHR9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxwPm1hdC1idXR0b24gd2l0aCBtYXQtbGFiZWw6PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgW2FwcEJhZGdlSWNvbl09XCIkaWNvbnxhc3luY1wiXG4gICAgICAgICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIiRjb2xvcnxhc3luY3xtYXRDb2xvclwiXG4gICAgICAgICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgW2FwcEJhZGdlRmlsbF09XCIkZmlsbHxhc3luY1wiXG4gICAgICAgICAgICAgIFthcHBCYWRnZVNpemVdPVwiJHNpemV8YXN5bmNcIlxuICAgICAgICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCI+XG4gICAgICAgIHt7dXNlclRleHR9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGg0PkFuZ3VsYXIgTWF0ZXJpYWwgQmFkZ2UgKHN0YW5kYXJkIHdheSk8L2g0PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtaWNvbjo8L3A+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1pY29uIFtzdHlsZS5jb2xvcl09XCIndmFyKC0taW9uLWNvbG9yLXNlY29uZGFyeSknXCJcbiAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiJyEnXCJcbiAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3J8YXN5bmN8bWF0Q29sb3JcIlxuICAgICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIiRzaXplfGFzeW5jXCJcbiAgICAgICAgICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJ0cnVlXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibmF2aWdhdGVcIlxuICAgICAgICA+PC9pb24taWNvbj5cbiAgICAgIDwvbWF0LWljb24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxwPm1hdC1idXR0b246PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgW21hdEJhZGdlXT1cIm1hdEJhZGdlQ29udGVudFwiXG4gICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIiRjb2xvcnxhc3luY3xtYXRDb2xvclwiXG4gICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIkc2l6ZXxhc3luY1wiXG4gICAgICAgICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIj5cbiAgICAgICAge3t1c2VyVGV4dH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFt2YWx1ZV09XCJtYXRCYWRnZUNvbnRlbnRcIiAoaW5wdXQpPVwib25NYXRCYWRnZUNvbnRlbnRDaGFuZ2VkKCRldmVudClcIj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWJ1dHRvbjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgW21hdEJhZGdlXT1cIm1hdEJhZGdlQ29udGVudFwiXG4gICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIiRjb2xvcnxhc3luY3xtYXRDb2xvclwiXG4gICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIkaGlkZGVufGFzeW5jXCJcbiAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIkc2l6ZXxhc3luY1wiXG4gICAgICAgICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgICAgICAgICAgIHt7dXNlclRleHR9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1jb250ZW50PlxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS50ZXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBVXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFXUDtJQVZwQixRQUFRLEdBQUcsaUJBQWlCLENBQUM7SUFDN0IsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUV0QixLQUFLLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7SUFDN0MsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFlLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVksUUFBUSxDQUFDLENBQUM7SUFDbEQsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyxZQUFvQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtJQUFHLENBQUM7SUFFN0MsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO3VHQXJCVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixzRENYN0IsNCtQQW1SQTs7MkZEeFFhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdEJhZGdlRmlsbCB9IGZyb20gJy4vYmFkZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1hdEJhZGdlU2l6ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IEFwcENvbG9ycyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWJhZGdlLXRlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFkZ2UudGVzdC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEJhZGdlVGVzdFBhZ2Uge1xuICB1c2VyVGV4dCA9ICdBIGN1c3RvbSBzdHJpbmcnO1xuICBtYXRCYWRnZUNvbnRlbnQgPSAnISc7XG5cbiAgJGljb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2FsZXJ0Jyk7XG4gICRzaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXRCYWRnZVNpemU+KCdzbWFsbCcpO1xuICAkZmlsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0QmFkZ2VGaWxsPignc29saWQnKTtcbiAgJGNvbG9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcHBDb2xvcnM+KCdkYW5nZXInKTtcbiAgJGhpZGRlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAkb3ZlcmxhcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG9uSW5wdXRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbk1hdEJhZGdlQ29udGVudENoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0QmFkZ2VDb250ZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5tYXRCYWRnZUljb24gZGlyZWN0aXZlPC9pb24tdGl0bGU+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgICA8c3BhbiBhcHBCYWRnZSBhcHBCYWRnZU1hdEljb249XCJjaGVja1wiIGFwcEJhZGdlU2l6ZT1cInNtYWxsXCIgYXBwQmFkZ2VDb2xvcj1cImFjY2VudFwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICAgIFNtYWxsIGJhZGdlXG4gICAgICA8L3NwYW4+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2Ugd2l0aCB0ZXh0IC0tPlxuICA8cD5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgICAgPHNwYW4gW2FwcEJhZGdlXT1cIjBcIiBhcHBCYWRnZVNpemU9XCJzbWFsbFwiIGFwcEJhZGdlQ29sb3I9XCJhY2NlbnRcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgICBTbWFsbCBiYWRnZSB3aXRoIHRleHQgMFxuICAgICAgPC9zcGFuPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvcD5cblxuICA8IS0tIG1lZGl1bSBiYWRnZSAtLT5cbiAgPHA+XG4gICAgPGlvbi10ZXh0XG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VNYXRJY29uPVwiY2hlY2tcIlxuICAgICAgYXBwQmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgIFthcHBCYWRnZUNvbG9yXT1cIid0ZXJ0aWFyeScgfCBtYXRDb2xvclwiXG4gICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgTWVkaXVtIGJhZGdlXG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tbGFiZWwgYXBwQmFkZ2UgYXBwQmFkZ2VNYXRJY29uPVwiY2xvc2VcIiBhcHBCYWRnZVNpemU9XCJsYXJnZVwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+TGFyZ2UgYmFkZ2U8L2lvbi1sYWJlbD5cbiAgPC9wPlxuXG4gIDwhLS0gZGVmYXVsdCBzaXplIGJhZGdlIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsIGFwcEJhZGdlIGFwcEJhZGdlTWF0SWNvbj1cImNoZWNrXCIgW2FwcEJhZGdlQ29sb3JdPVwiJ3N1Y2Nlc3MnIHwgbWF0Q29sb3JcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgQmFkZ2UgKG5vIHNpemUsIG5vIGNvbG9yKVxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBpb24gaWNvbiAtLT5cbiAgPHA+XG4gICAgPGlvbi1sYWJlbCBhcHBCYWRnZSBhcHBCYWRnZUljb249XCJjaGVja21hcmtcIiBbYXBwQmFkZ2VDb2xvcl09XCInc3VjY2VzcycgfCBtYXRDb2xvclwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICBCYWRnZSB3aXRoIGlvbi1pY29uXG4gICAgPC9pb24tbGFiZWw+XG4gIDwvcD5cblxuICA8IS0tIGlvbiBpY29uIGNsZWFyIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsXG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VJY29uPVwiY2hlY2ttYXJrLWNpcmNsZVwiXG4gICAgICBbYXBwQmFkZ2VDb2xvcl09XCIndGVydGlhcnknIHwgbWF0Q29sb3JcIlxuICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIEJhZGdlIHdpdGggY2xlYXIgaWNvblxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBjaGFuZ2luZyB0ZXh0LS0+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi1sYWJlbFxuICAgICAgICBhcHBCYWRnZVxuICAgICAgICBhcHBCYWRnZUljb249XCJjaGVja21hcmstY2lyY2xlXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJ3RlcnRpYXJ5JyB8IG1hdENvbG9yXCJcbiAgICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwidXNlclRleHRcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZWQoJGV2ZW50KVwiIC8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+Q29uZmlndXJhYmxlIGV4YW1wbGUgOjwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIGFwcEJhZGdlXG4gICAgICAgIFthcHBCYWRnZUljb25dPVwiJGljb24gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbYXBwQmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlRmlsbF09XCIkZmlsbCB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIGFwcEJhZGdlUG9zaXRpb249XCJhYm92ZSBiZWZvcmVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlQ29sb3I8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cIiRjb2xvci52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kY29sb3IubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidwcmltYXJ5J1wiPnByaW1hcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidzZWNvbmRhcnknXCI+c2Vjb25kYXJ5PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIndGVydGlhcnknXCI+dGVydGlhcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidkYW5nZXInXCI+ZGFuZ2VyPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSWNvbjwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGljb24udmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGljb24ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjaGVja21hcmstY2lyY2xlJ1wiPmNoZWNrbWFyay1jaXJjbGU8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidhbGVydC1jaXJjbGUnXCI+YWxlcnQtY2lyY2xlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInYWxlcnQnXCI+YWxlcnQ8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidmbGFnJ1wiPmZsYWc8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VTaXplPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkc2l6ZS52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kc2l6ZS5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2xhcmdlJ1wiPmxhcmdlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInbWVkaXVtJ1wiPm1lZGl1bTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NtYWxsJ1wiPnNtYWxsPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlRmlsbDwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGZpbGwudmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGZpbGwubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjbGVhcidcIj5jbGVhcjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NvbGlkJ1wiPnNvbGlkPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSGlkZGVuPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkaGlkZGVuLnZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLiRoaWRkZW4ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtcmFpc2VkLWJ1dHRvbjo8L3A+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbYXBwQmFkZ2VJY29uXT1cIiRpY29uIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW2FwcEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUZpbGxdPVwiJGZpbGwgfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBhcHBCYWRnZVBvc2l0aW9uPVwiYmVsb3cgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxwPm1hdC1idXR0b24gd2l0aCBtYXQtbGFiZWw6PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgW2FwcEJhZGdlSWNvbl09XCIkaWNvbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJGNvbG9yIHwgYXN5bmMgfCBtYXRDb2xvclwiXG4gICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVuIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VGaWxsXT1cIiRmaWxsIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VTaXplXT1cIiRzaXplIHwgYXN5bmNcIlxuICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgICAgID5cbiAgICAgICAge3sgdXNlclRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxoND5Bbmd1bGFyIE1hdGVyaWFsIEJhZGdlIChzdGFuZGFyZCB3YXkpPC9oND5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWljb246PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIFttYXRCYWRnZV09XCInISdcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtYnV0dG9uOjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJtYXRCYWRnZUNvbnRlbnRcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwibWF0QmFkZ2VDb250ZW50XCIgKGlucHV0KT1cIm9uTWF0QmFkZ2VDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWJ1dHRvbjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW21hdEJhZGdlXT1cIm1hdEJhZGdlQ29udGVudFwiXG4gICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgbWF0QmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJhZnRlclwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=