@sumaris-net/ngx-components 2.7.2-rc9 → 2.7.3-rc2

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 (378) hide show
  1. package/doc/changelog.md +36 -0
  2. package/esm2022/public_api.mjs +11 -9
  3. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  4. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  5. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  6. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  7. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  8. package/esm2022/src/app/admin/users/users.mjs +14 -7
  9. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  10. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  11. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  12. package/esm2022/src/app/core/account/account.module.mjs +9 -15
  13. package/esm2022/src/app/core/account/account.page.mjs +5 -5
  14. package/esm2022/src/app/core/account/new-token.modal.mjs +9 -8
  15. package/esm2022/src/app/core/account/token.table.mjs +5 -5
  16. package/esm2022/src/app/core/auth/auth.form.mjs +9 -9
  17. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  18. package/esm2022/src/app/core/auth/auth.module.mjs +9 -9
  19. package/esm2022/src/app/core/core.module.mjs +17 -46
  20. package/esm2022/src/app/core/core.testing.module.mjs +15 -15
  21. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +16 -15
  22. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  23. package/esm2022/src/app/core/form/entity/editor.class.mjs +87 -89
  24. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +12 -17
  25. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +31 -32
  26. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  27. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  28. package/esm2022/src/app/core/form/form.class.mjs +12 -12
  29. package/esm2022/src/app/core/form/form.module.mjs +8 -8
  30. package/esm2022/src/app/core/form/form.utils.mjs +25 -23
  31. package/esm2022/src/app/core/form/list/list.form.mjs +13 -12
  32. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  33. package/esm2022/src/app/core/form/properties/properties.form.mjs +12 -15
  34. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  35. package/esm2022/src/app/core/form/properties/properties.table.mjs +24 -26
  36. package/esm2022/src/app/core/form/properties/property.validator.mjs +6 -6
  37. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  38. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  39. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +9 -8
  40. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  41. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +6 -6
  42. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  43. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -13
  44. package/esm2022/src/app/core/graphql/graphql.service.mjs +71 -95
  45. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  46. package/esm2022/src/app/core/home/home.mjs +26 -27
  47. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  48. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  49. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  50. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  51. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  52. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  53. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  54. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  55. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  56. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  57. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
  58. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +5 -5
  59. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  60. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  61. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  62. package/esm2022/src/app/core/peer/select-peer.modal.mjs +8 -9
  63. package/esm2022/src/app/core/peer/select-peer.module.mjs +10 -19
  64. package/esm2022/src/app/core/register/register-confirm.page.mjs +12 -12
  65. package/esm2022/src/app/core/register/register.form.mjs +5 -5
  66. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  67. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  68. package/esm2022/src/app/core/services/account.service.mjs +172 -160
  69. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  70. package/esm2022/src/app/core/services/base-entity-service.class.mjs +51 -60
  71. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  72. package/esm2022/src/app/core/services/base58.mjs +8 -4
  73. package/esm2022/src/app/core/services/config/core.config.mjs +37 -37
  74. package/esm2022/src/app/core/services/config.service.mjs +51 -49
  75. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  76. package/esm2022/src/app/core/services/errors.mjs +3 -3
  77. package/esm2022/src/app/core/services/local-settings.service.mjs +36 -37
  78. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  79. package/esm2022/src/app/core/services/model/config.model.mjs +5 -5
  80. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  81. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  82. package/esm2022/src/app/core/services/model/entity.model.mjs +25 -25
  83. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  84. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  85. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  86. package/esm2022/src/app/core/services/model/peer.model.mjs +9 -8
  87. package/esm2022/src/app/core/services/model/person.model.mjs +18 -17
  88. package/esm2022/src/app/core/services/model/referential.model.mjs +13 -13
  89. package/esm2022/src/app/core/services/model/settings.model.mjs +1 -1
  90. package/esm2022/src/app/core/services/model/token.model.mjs +2 -3
  91. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +2 -6
  92. package/esm2022/src/app/core/services/network.service.mjs +42 -43
  93. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  94. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  95. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  96. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  97. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +6 -6
  98. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  99. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  100. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  101. package/esm2022/src/app/core/services/platform.service.mjs +45 -49
  102. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  103. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  104. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  105. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  106. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  107. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +4 -4
  108. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +13 -13
  109. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  110. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  111. package/esm2022/src/app/core/settings/settings.module.mjs +8 -21
  112. package/esm2022/src/app/core/settings/settings.page.mjs +12 -17
  113. package/esm2022/src/app/core/table/actions-column.component.mjs +13 -5
  114. package/esm2022/src/app/core/table/async-table.class.mjs +106 -112
  115. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +21 -26
  116. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +26 -29
  117. package/esm2022/src/app/core/table/memory-table.class.mjs +4 -4
  118. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  119. package/esm2022/src/app/core/table/table.class.mjs +107 -110
  120. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  121. package/esm2022/src/app/core/table/table.module.mjs +8 -12
  122. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  123. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
  124. package/esm2022/src/app/core/table/testing/table.testing.mjs +9 -9
  125. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  126. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  127. package/esm2022/src/app/core/table/testing/table2.testing.mjs +28 -26
  128. package/esm2022/src/app/shared/alerts.mjs +37 -35
  129. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  130. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  131. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  132. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  133. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  134. package/esm2022/src/app/shared/constants.mjs +2 -3
  135. package/esm2022/src/app/shared/dates.mjs +5 -8
  136. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  137. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  138. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  139. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -12
  140. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
  141. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  142. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  143. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  144. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
  145. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  146. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  147. package/esm2022/src/app/shared/events.mjs +6 -8
  148. package/esm2022/src/app/shared/file/csv.utils.mjs +22 -18
  149. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  150. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  151. package/esm2022/src/app/shared/file/images.utils.mjs +4 -4
  152. package/esm2022/src/app/shared/file/json.utils.mjs +3 -4
  153. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  154. package/esm2022/src/app/shared/focusable.mjs +1 -1
  155. package/esm2022/src/app/shared/form/field.component.mjs +33 -30
  156. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  157. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  158. package/esm2022/src/app/shared/forms.mjs +30 -33
  159. package/esm2022/src/app/shared/functions.mjs +70 -65
  160. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  161. package/esm2022/src/app/shared/gesture/gesture-config.mjs +9 -9
  162. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  163. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  164. package/esm2022/src/app/shared/graph/graph-colors.mjs +16 -22
  165. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  166. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  167. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  168. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +10 -11
  169. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  170. package/esm2022/src/app/shared/http/http.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +28 -27
  172. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  173. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  174. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  175. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  176. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  177. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  178. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  179. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  180. package/esm2022/src/app/shared/inputs.mjs +19 -20
  181. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  182. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  183. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  184. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  185. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  186. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  187. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +87 -96
  188. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +9 -15
  189. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +2 -2
  190. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +27 -26
  191. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +45 -19
  192. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  193. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  194. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +9 -13
  195. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +262 -0
  196. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +6 -6
  197. package/esm2022/src/app/shared/material/chips/chips.module.mjs +7 -11
  198. package/esm2022/src/app/shared/material/chips/material.chips.mjs +69 -70
  199. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +17 -17
  200. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +5 -5
  201. package/esm2022/src/app/shared/material/datetime/material.date.mjs +37 -36
  202. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +26 -33
  203. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +42 -38
  204. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +20 -17
  205. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +22 -20
  206. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +18 -17
  207. package/esm2022/src/app/shared/material/duration/duration.module.mjs +5 -5
  208. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  209. package/esm2022/src/app/shared/material/duration/material.duration.mjs +23 -24
  210. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +17 -15
  211. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +22 -24
  212. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +46 -41
  213. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
  214. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +5 -5
  215. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  216. package/esm2022/src/app/shared/material/material.module.mjs +11 -11
  217. package/esm2022/src/app/shared/material/material.testing.module.mjs +26 -27
  218. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +8 -14
  219. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  220. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +15 -11
  221. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  222. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  223. package/esm2022/src/app/shared/material/testing/common.test.mjs +17 -15
  224. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +6 -6
  225. package/esm2022/src/app/shared/material/text/text-form.component.mjs +17 -16
  226. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  227. package/esm2022/src/app/shared/modules.mjs +1 -1
  228. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +6 -7
  229. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  230. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  231. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +6 -6
  232. package/esm2022/src/app/shared/observables.mjs +14 -18
  233. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +38 -38
  234. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +5 -5
  235. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  236. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +14 -14
  237. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  238. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  239. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  240. package/esm2022/src/app/shared/pipes/form.pipes.mjs +25 -25
  241. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +14 -14
  242. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  243. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  244. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +11 -14
  245. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  246. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  247. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  248. package/esm2022/src/app/shared/pipes/pipes.module.mjs +14 -22
  249. package/esm2022/src/app/shared/pipes/property.pipes.mjs +23 -25
  250. package/esm2022/src/app/shared/pipes/string.pipes.mjs +47 -48
  251. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  252. package/esm2022/src/app/shared/pipes/types.pipes.mjs +17 -17
  253. package/esm2022/src/app/shared/platforms.mjs +7 -5
  254. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  255. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  256. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  257. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +37 -35
  258. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  259. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  260. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  261. package/esm2022/src/app/shared/services/translate-context.service.mjs +17 -14
  262. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  263. package/esm2022/src/app/shared/services.mjs +10 -10
  264. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  265. package/esm2022/src/app/shared/shared.module.mjs +30 -27
  266. package/esm2022/src/app/shared/shared.testing.module.mjs +6 -6
  267. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +26 -28
  268. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  269. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  270. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  271. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  272. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  273. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  274. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  275. package/esm2022/src/app/shared/toast/toast.testing.mjs +10 -10
  276. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  277. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  278. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +9 -7
  279. package/esm2022/src/app/shared/toolbar/toolbar.mjs +10 -15
  280. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  281. package/esm2022/src/app/shared/types.mjs +1 -1
  282. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +8 -9
  283. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  284. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  285. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +17 -18
  286. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  287. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +52 -50
  288. package/esm2022/src/app/shared/validator/validators.mjs +30 -30
  289. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  290. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  291. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  292. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +27 -24
  293. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +5 -7
  294. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  295. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +21 -17
  296. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +5 -5
  297. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +7 -7
  298. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  299. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  300. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  301. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  302. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  303. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  304. package/esm2022/src/app/social/social.errors.mjs +2 -2
  305. package/esm2022/src/app/social/social.module.mjs +7 -32
  306. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  307. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +17 -14
  308. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  309. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  310. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  311. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  312. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  313. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  314. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  315. package/esm2022/src/app/social/user-event/user-event.service.mjs +56 -61
  316. package/esm2022/src/environments/environment.class.mjs +2 -1
  317. package/esm2022/src/environments/environment.loader.mjs +4 -4
  318. package/esm2022/src/environments/environment.mjs +2 -2
  319. package/fesm2022/sumaris-net.ngx-components.mjs +6263 -7492
  320. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  321. package/package.json +12 -7
  322. package/public_api.d.ts +3 -8
  323. package/src/app/admin/users/users.d.ts +3 -2
  324. package/src/app/core/core.module.d.ts +21 -24
  325. package/src/app/core/form/form.utils.d.ts +1 -1
  326. package/src/app/core/services/config/core.config.d.ts +1 -1
  327. package/src/app/core/services/config.service.d.ts +3 -3
  328. package/src/app/core/services/local-settings.service.d.ts +2 -3
  329. package/src/app/core/services/model/entity.model.d.ts +3 -2
  330. package/src/app/core/services/model/settings.model.d.ts +2 -2
  331. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  332. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  333. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +12 -0
  334. package/src/app/core/table/actions-column.component.d.ts +3 -1
  335. package/src/app/shared/events.d.ts +1 -1
  336. package/src/app/shared/functions.d.ts +6 -5
  337. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  338. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  339. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  340. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  341. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  342. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  343. package/src/app/shared/material/boolean/boolean.module.d.ts +1 -1
  344. package/src/app/shared/material/boolean/{material-boolean.d.ts → material.boolean.d.ts} +2 -2
  345. package/src/app/shared/material/material.module.d.ts +5 -6
  346. package/src/app/shared/material/material.testing.module.d.ts +14 -15
  347. package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
  348. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  349. package/src/app/shared/pipes/string.pipes.d.ts +4 -5
  350. package/src/app/shared/validator/validators.d.ts +13 -4
  351. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  352. package/src/app/social/message/message.modal.d.ts +2 -2
  353. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  354. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  355. package/src/assets/manifest.json +1 -1
  356. package/src/environments/environment.class.d.ts +1 -0
  357. package/src/theme/_ngx-components.scss +1 -25
  358. package/src/theme/_ngx-components.tabs.scss +361 -0
  359. package/src/theme/_theme.scss +1 -0
  360. package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +0 -262
  361. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  362. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  363. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  364. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  365. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  366. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  367. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  368. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  369. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  370. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  371. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  372. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  373. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  374. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  375. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  376. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  377. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  378. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -1,262 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Optional, Output, ViewChild, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { isNil, isNotNil, toNumber } from '../../functions';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/forms";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@ionic/angular";
8
- import * as i4 from "@angular/material/form-field";
9
- import * as i5 from "@angular/material/input";
10
- import * as i6 from "@angular/material/radio";
11
- import * as i7 from "@angular/material/checkbox";
12
- import * as i8 from "@ngx-translate/core";
13
- import * as i9 from "../../pipes/types.pipes";
14
- const DEFAULT_VALUE_ACCESSOR = {
15
- provide: NG_VALUE_ACCESSOR,
16
- useExisting: forwardRef(() => MatBooleanField),
17
- multi: true,
18
- };
19
- const noop = () => { };
20
- export class MatBooleanField {
21
- cd;
22
- formGroupDir;
23
- yesButton;
24
- noButton;
25
- checkboxButton;
26
- fakeInput;
27
- disabled = false;
28
- formControl;
29
- formControlName;
30
- placeholder;
31
- floatLabel = 'auto';
32
- appearance;
33
- readonly = false;
34
- required = false;
35
- compact = false;
36
- style;
37
- buttonsColCount;
38
- // eslint-disable-next-line @angular-eslint/no-input-rename
39
- classList;
40
- yesLabel = 'COMMON.YES';
41
- noLabel = 'COMMON.NO';
42
- showButtonIcons = true;
43
- yesIcon = 'checkmark';
44
- noIcon = 'close';
45
- // eslint-disable-next-line @angular-eslint/no-output-on-prefix,@angular-eslint/no-output-rename
46
- onPressEnter = new EventEmitter();
47
- // eslint-disable-next-line @angular-eslint/no-output-on-prefix
48
- onBlur = new EventEmitter();
49
- showRadio = false;
50
- _value;
51
- _tabindex;
52
- _onChangeCallback = noop;
53
- _onTouchedCallback = noop;
54
- _writing = false;
55
- constructor(cd, formGroupDir) {
56
- this.cd = cd;
57
- this.formGroupDir = formGroupDir;
58
- }
59
- get tabindex() {
60
- return this._tabindex;
61
- }
62
- set tabindex(value) {
63
- if (this._tabindex !== value) {
64
- this._tabindex = value;
65
- setTimeout(() => this.updateTabIndex());
66
- }
67
- }
68
- get value() {
69
- return this._value;
70
- }
71
- set value(v) {
72
- if (v !== this._value) {
73
- this._value = v;
74
- this._onChangeCallback(v);
75
- }
76
- }
77
- ngOnInit() {
78
- this.formControl =
79
- this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
80
- if (!this.formControl)
81
- throw new Error('Missing mandatory attribute \'formControl\' or \'formControlName\' in <mat-boolean-field>.');
82
- this.style = this.style || (this.compact ? 'checkbox' : 'radio');
83
- if (this.style === 'button') {
84
- this.buttonsColCount = toNumber(this.buttonsColCount, 2);
85
- }
86
- // Force show radio if label always on top
87
- this.showRadio = this.showRadio || this.floatLabel === 'always' || this.style === 'checkbox';
88
- this.updateTabIndex();
89
- }
90
- writeValue(value, event) {
91
- if (this._writing)
92
- return;
93
- this._writing = true;
94
- if (value !== this._value) {
95
- this._value = value;
96
- this.showRadio = this.floatLabel === 'always' || this.style === 'checkbox' || isNotNil(this._value);
97
- if (isNotNil(this.tabindex)) {
98
- setTimeout(() => this.updateTabIndex());
99
- }
100
- }
101
- this._writing = false;
102
- if (this.style === 'button') {
103
- if (value !== this.formControl.value) {
104
- this.formControl.patchValue(value, { emitEvent: false });
105
- this._onChangeCallback(value);
106
- }
107
- if (event)
108
- this.onPressEnter.emit(event);
109
- }
110
- this.markForCheck();
111
- }
112
- registerOnChange(fn) {
113
- this._onChangeCallback = fn;
114
- }
115
- registerOnTouched(fn) {
116
- this._onTouchedCallback = fn;
117
- }
118
- setDisabledState(isDisabled) {
119
- this.disabled = isDisabled;
120
- }
121
- onFocusFakeInput(event) {
122
- event.preventDefault();
123
- // Hide the fake input
124
- if (this.fakeInput) {
125
- this.fakeInput.nativeElement.classList.add('hidden');
126
- this.fakeInput.nativeElement.tabIndex = -1;
127
- }
128
- // Focus on first button
129
- this.focus();
130
- }
131
- focus() {
132
- this.showRadio = true;
133
- setTimeout(() => {
134
- if (this.yesButton) {
135
- this.yesButton.focus();
136
- }
137
- else if (this.checkboxButton) {
138
- this.checkboxButton.focus();
139
- }
140
- this.updateTabIndex();
141
- });
142
- this.markForCheck();
143
- }
144
- onRadioValueChanged(event) {
145
- if (this._writing)
146
- return; // Skip if call by self
147
- this._writing = true;
148
- this._value = event.value;
149
- this.checkIfTouched();
150
- this._onChangeCallback(event.value);
151
- this._writing = false;
152
- }
153
- onCheckboxValueChanged(event) {
154
- if (this._writing)
155
- return; // Skip if call by self
156
- this._writing = true;
157
- this._value = event.checked;
158
- this.checkIfTouched();
159
- this._onChangeCallback(event.checked);
160
- this._writing = false;
161
- }
162
- /* -- private method -- */
163
- checkIfTouched() {
164
- if (this.formControl.touched) {
165
- this.markForCheck();
166
- this._onTouchedCallback();
167
- }
168
- }
169
- /**
170
- * This is a special case, because, this component has a temporary component displayed before the first focus event
171
- */
172
- updateTabIndex() {
173
- if (isNil(this._tabindex) || this._tabindex === -1)
174
- return;
175
- if (this.fakeInput) {
176
- if (this.showRadio) {
177
- this.fakeInput.nativeElement.classList.add('hidden');
178
- this.fakeInput.nativeElement.tabIndex = -1;
179
- }
180
- else {
181
- this.fakeInput.nativeElement.classList.remove('hidden');
182
- this.fakeInput.nativeElement.tabIndex = this._tabindex;
183
- }
184
- }
185
- if (this.yesButton) {
186
- this.yesButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;
187
- this.noButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex + 1 : -1;
188
- }
189
- else if (this.checkboxButton) {
190
- this.checkboxButton._inputElement.nativeElement.tabIndex = this.showRadio ? this._tabindex : -1;
191
- }
192
- this.markForCheck();
193
- }
194
- markForCheck() {
195
- this.cd.markForCheck();
196
- }
197
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatBooleanField, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
198
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: MatBooleanField, selector: "mat-boolean-field", inputs: { disabled: "disabled", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", readonly: "readonly", required: "required", compact: "compact", style: "style", buttonsColCount: "buttonsColCount", classList: ["class", "classList"], yesLabel: "yesLabel", noLabel: "noLabel", showButtonIcons: "showButtonIcons", yesIcon: "yesIcon", noIcon: "noIcon", tabindex: "tabindex", value: "value" }, outputs: { onPressEnter: "keyup.enter", onBlur: "onBlur" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "yesButton", first: true, predicate: ["yesButton"], descendants: true }, { propertyName: "noButton", first: true, predicate: ["noButton"], descendants: true }, { propertyName: "checkboxButton", first: true, predicate: ["checkboxButton"], descendants: true }, { propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }], ngImport: i0, template: "<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n class=\"mat-form-field-disabled {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [placeholder]=\"placeholder\" [formControl]=\"formControl\" />\n <ion-text>{{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n <!-- Radio -->\n <mat-form-field\n *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n <span [hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\" [formControl]=\"formControl\" (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n &nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field\n *ngSwitchCase=\"'checkbox'\"\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #matInput\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value === null || value === undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\"\n ></mat-checkbox>\n\n <mat-label *ngIf=\"placeholder; else noPlaceHolder\">\n {{ placeholder }}\n </mat-label>\n <ng-template #noPlaceHolder>\n <mat-label>&nbsp;</mat-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field\n *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n type=\"text\"\n hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <div\n class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\"\n >\n <!-- yes -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? _tabindex + 1 : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ noLabel | translate }}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ng-container>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis: calc(100% / var(--buttons-col-count, 2) - 4px);flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex", "id", "name", "aria-label", "aria-labelledby", "aria-describedby", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatBooleanField, decorators: [{
201
- type: Component,
202
- args: [{ selector: 'mat-boolean-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n class=\"mat-form-field-disabled {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [placeholder]=\"placeholder\" [formControl]=\"formControl\" />\n <ion-text>{{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n <!-- Radio -->\n <mat-form-field\n *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\">\n {{ placeholder }}\n <span [hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\" [formControl]=\"formControl\" (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n &nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field\n *ngSwitchCase=\"'checkbox'\"\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #matInput\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value === null || value === undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\"\n ></mat-checkbox>\n\n <mat-label *ngIf=\"placeholder; else noPlaceHolder\">\n {{ placeholder }}\n </mat-label>\n <ng-template #noPlaceHolder>\n <mat-label>&nbsp;</mat-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field\n *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n type=\"text\"\n hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n />\n <div\n class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\"\n >\n <!-- yes -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? _tabindex + 1 : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{ noLabel | translate }}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ng-container>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--flex-basis: calc(100% / var(--buttons-col-count, 2) - 4px);flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:40px}\n"] }]
203
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
204
- type: Optional
205
- }] }], propDecorators: { yesButton: [{
206
- type: ViewChild,
207
- args: ['yesButton']
208
- }], noButton: [{
209
- type: ViewChild,
210
- args: ['noButton']
211
- }], checkboxButton: [{
212
- type: ViewChild,
213
- args: ['checkboxButton']
214
- }], fakeInput: [{
215
- type: ViewChild,
216
- args: ['fakeInput']
217
- }], disabled: [{
218
- type: Input
219
- }], formControl: [{
220
- type: Input
221
- }], formControlName: [{
222
- type: Input
223
- }], placeholder: [{
224
- type: Input
225
- }], floatLabel: [{
226
- type: Input
227
- }], appearance: [{
228
- type: Input
229
- }], readonly: [{
230
- type: Input
231
- }], required: [{
232
- type: Input
233
- }], compact: [{
234
- type: Input
235
- }], style: [{
236
- type: Input
237
- }], buttonsColCount: [{
238
- type: Input
239
- }], classList: [{
240
- type: Input,
241
- args: ['class']
242
- }], yesLabel: [{
243
- type: Input
244
- }], noLabel: [{
245
- type: Input
246
- }], showButtonIcons: [{
247
- type: Input
248
- }], yesIcon: [{
249
- type: Input
250
- }], noIcon: [{
251
- type: Input
252
- }], onPressEnter: [{
253
- type: Output,
254
- args: ['keyup.enter']
255
- }], onBlur: [{
256
- type: Output
257
- }], tabindex: [{
258
- type: Input
259
- }], value: [{
260
- type: Input
261
- }] } });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwtYm9vbGVhbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwtYm9vbGVhbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQVksU0FBUyxHQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpMLE9BQU8sRUFBMkMsaUJBQWlCLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFJL0csT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBRzFELE1BQU0sc0JBQXNCLEdBQWE7SUFDdkMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUM5QyxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFTdEIsTUFBTSxPQUFPLGVBQWU7SUF1Q2hCO0lBQ1k7SUF2Q0UsU0FBUyxDQUFpQjtJQUMzQixRQUFRLENBQWlCO0lBQ25CLGNBQWMsQ0FBYztJQUNqQyxTQUFTLENBQWE7SUFFckMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixXQUFXLENBQXFCO0lBQ2hDLGVBQWUsQ0FBUztJQUN4QixXQUFXLENBQVM7SUFDcEIsVUFBVSxHQUFzQixNQUFNLENBQUM7SUFDdkMsVUFBVSxDQUF5QjtJQUNuQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pC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U0FBUzt1QkFBQyxVQUFVO2dCQUNRLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNILFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFFYixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVVLFNBQVM7c0JBQXhCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR2lCLFlBQVk7c0JBQWxDLE1BQU07dUJBQUMsYUFBYTtnQkFFWCxNQUFNO3NCQUFmLE1BQU07Z0JBbUJNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBWUYsS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBQcm92aWRlciwgVmlld0NoaWxkLH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEZvcm1GaWVsZEFwcGVhcmFuY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01hdFJhZGlvQnV0dG9uLCBNYXRSYWRpb0NoYW5nZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHtNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hDaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7SW5wdXRFbGVtZW50fSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtBcHBGbG9hdExhYmVsVHlwZX0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0Qm9vbGVhbkZpZWxkKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1ib29sZWFuLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLWJvb2xlYW4uaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLWJvb2xlYW4uc2NzcyddLFxuICBwcm92aWRlcnM6IFtERUZBVUxUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEJvb2xlYW5GaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIElucHV0RWxlbWVudCB7XG4gIEBWaWV3Q2hpbGQoJ3llc0J1dHRvbicpIHllc0J1dHRvbjogTWF0UmFkaW9CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ25vQnV0dG9uJykgbm9CdXR0b246IE1hdFJhZGlvQnV0dG9uO1xuICBAVmlld0NoaWxkKCdjaGVja2JveEJ1dHRvbicpIGNoZWNrYm94QnV0dG9uOiBNYXRDaGVja2JveDtcbiAgQFZpZXdDaGlsZCgnZmFrZUlucHV0JykgZmFrZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHlsZTogJ3JhZGlvJyB8ICdjaGVja2JveCcgfCAnYnV0dG9uJztcbiAgQElucHV0KCkgYnV0dG9uc0NvbENvdW50OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgeWVzTGFiZWwgPSAnQ09NTU9OLllFUyc7XG4gIEBJbnB1dCgpIG5vTGFiZWwgPSAnQ09NTU9OLk5PJztcbiAgQElucHV0KCkgc2hvd0J1dHRvbkljb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgeWVzSWNvbiA9ICdjaGVja21hcmsnO1xuICBASW5wdXQoKSBub0ljb24gPSAnY2xvc2UnO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCxAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpIG9uUHJlc3NFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBzaG93UmFkaW8gPSBmYWxzZTtcbiAgX3ZhbHVlOiBib29sZWFuO1xuICBfdGFiaW5kZXg6IG51bWJlcjtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtYm9vbGVhbi1maWVsZD4uJyk7XG5cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5zdHlsZSB8fCAodGhpcy5jb21wYWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNDb2xDb3VudCA9IHRvTnVtYmVyKHRoaXMuYnV0dG9uc0NvbENvdW50LCAyKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBzaG93IHJhZGlvIGlmIGxhYmVsIGFsd2F5cyBvbiB0b3BcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRoaXMuc2hvd1JhZGlvIHx8IHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cycgfHwgdGhpcy5zdHlsZSA9PT0gJ2NoZWNrYm94JztcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zaG93UmFkaW8gPSB0aGlzLmZsb2F0TGFiZWwgPT09ICdhbHdheXMnIHx8IHRoaXMuc3R5bGUgPT09ICdjaGVja2JveCcgfHwgaXNOb3ROaWwodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHRoaXMudGFiaW5kZXgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50KSB0aGlzLm9uUHJlc3NFbnRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG9uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gSGlkZSB0aGUgZmFrZSBpbnB1dFxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgICAgdGhpcy55ZXNCdXR0b24uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja2JveEJ1dHRvbikge1xuICAgICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUmFkaW9WYWx1ZUNoYW5nZWQoZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkNoZWNrYm94VmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy5zaG93UmFkaW8pIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuX3RhYmluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgIHRoaXMueWVzQnV0dG9uLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1JhZGlvID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICAgIHRoaXMubm9CdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCArIDEgOiAtMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tib3hCdXR0b24pIHtcbiAgICAgIHRoaXMuY2hlY2tib3hCdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCA6IC0xO1xuICAgIH1cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkXG4gICpuZ0lmPVwicmVhZG9ubHk7IGVsc2Ugd3JpdGFibGVcIlxuICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge3sgY2xhc3NMaXN0IH19XCJcbj5cbiAgPGRpdiBtYXRQcmVmaXg+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgLz5cbiAgPGlvbi10ZXh0Pnt7ICh2YWx1ZSA9PT0gbnVsbCA/ICdDT01NT04uRU1QVFlfT1BUSU9OJyA6IHZhbHVlID09PSB0cnVlID8geWVzTGFiZWwgOiBub0xhYmVsKSB8IHRyYW5zbGF0ZSB9fTwvaW9uLXRleHQ+XG4gIDxkaXYgbWF0U3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjxuZy10ZW1wbGF0ZSAjd3JpdGFibGU+XG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gICAgPCEtLSBSYWRpbyAtLT5cbiAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cInNob3dSYWRpbyAmJiAoIWZsb2F0TGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ2F1dG8nKSA/ICdhbHdheXMnIDogKGZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlKVwiXG4gICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgIGNsYXNzPVwibWF0LWJvb2xlYW4tZmllbGQgbWF0LWJvb2xlYW4tZmllbGQtcmFkaW8ge3sgY2xhc3NMaXN0IH19XCJcbiAgICA+XG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXIgJiYgZmxvYXRMYWJlbCAhPT0gJ25ldmVyJ1wiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInNob3dSYWRpb1wiPih7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fS97eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19KTwvc3Bhbj5cbiAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzRmFrZUlucHV0KCRldmVudClcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJzaG93UmFkaW9cIlxuICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSByYWRpbyBidXR0b24gLS0+XG4gICAgICA8bWF0LXJhZGlvLWdyb3VwIFtoaWRkZW5dPVwiIXNob3dSYWRpb1wiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIChjaGFuZ2UpPVwib25SYWRpb1ZhbHVlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICN5ZXNCdXR0b24gW3ZhbHVlXT1cInRydWVcIj5cbiAgICAgICAgICA8c3Bhbj57eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAmbmJzcDtcbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gI25vQnV0dG9uIFt2YWx1ZV09XCJmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuPnt7IG5vTGFiZWwgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuXG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cblxuICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiXG4gICAgICBmbG9hdExhYmVsPVwiYWx3YXlzXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1jaGVja2JveCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgID5cbiAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgICNtYXRJbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1c0Zha2VJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwic2hvd1JhZGlvXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gY2hlY2tib3gsIHdoZW4gY29tcGFjdCAtLT5cbiAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgI2NoZWNrYm94QnV0dG9uXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgIFtoaWRkZW5dPVwiIXNob3dSYWRpb1wiXG4gICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICA+PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJwbGFjZWhvbGRlcjsgZWxzZSBub1BsYWNlSG9sZGVyXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QbGFjZUhvbGRlcj5cbiAgICAgICAgPG1hdC1sYWJlbD4mbmJzcDs8L21hdC1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuXG4gICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPCEtLSBCdXR0b25zIC0tPlxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCJcbiAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1idXR0b24ge3sgY2xhc3NMaXN0IH19XCJcbiAgICA+XG4gICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGhpZGRlblxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25zXCJcbiAgICAgICAgW3N0eWxlLi0tYnV0dG9ucy1jb2wtY291bnRdPVwiYnV0dG9uc0NvbENvdW50XCJcbiAgICAgICAgKm5nSWY9XCIhZm9ybUNvbnRyb2wuZGlzYWJsZWQ7IGVsc2UgZGlzYWJsZWRMYWJlbFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0geWVzIC0tPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwiX3RhYmluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwid3JpdGVWYWx1ZSh0cnVlLCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZSh0cnVlLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY29sb3JdPVwiX3ZhbHVlID09PSBudWxsID8gJ3RlcnRpYXJ5JyA6IF92YWx1ZSA9PT0gdHJ1ZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJzaG93QnV0dG9uSWNvbnMgJiYgeWVzSWNvbjsgbGV0IGljb25cIiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgPCEtLSBObyBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25cIlxuICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXggIT09IHVuZGVmaW5lZCA/IF90YWJpbmRleCArIDEgOiB1bmRlZmluZWRcIlxuICAgICAgICAgIChjbGljayk9XCJ3cml0ZVZhbHVlKGZhbHNlLCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NvbG9yXT1cIl92YWx1ZSA9PT0gbnVsbCA/ICd0ZXJ0aWFyeScgOiBfdmFsdWUgPT09IGZhbHNlID8gJ2FjY2VudCcgOiAnbGlnaHQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cInNob3dCdXR0b25JY29ucyAmJiBub0ljb247IGxldCBpY29uXCIgc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwiaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAge3sgbm9MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRMYWJlbD5cbiAgICAgICAgPGlvbi1sYWJlbD48aSB0cmFuc2xhdGU+Q09NTU9OLkVNUFRZX09QVElPTjwvaT48L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,104 +0,0 @@
1
- import { Directive, HostListener, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class AppendToInputDirective {
4
- renderer;
5
- inputElement;
6
- _directionY;
7
- _directionX;
8
- _inputCords;
9
- element;
10
- constructor(elementRef, renderer) {
11
- this.renderer = renderer;
12
- this.element = elementRef.nativeElement;
13
- }
14
- get inputCords() {
15
- return this.inputElement.getBoundingClientRect();
16
- }
17
- get directionY() {
18
- const height = this.element.offsetHeight;
19
- const { bottom, top } = this._inputCords;
20
- const isElementFit = (window && window.innerHeight) - bottom < height;
21
- const isTop = isElementFit && top > height;
22
- const isCenter = isElementFit && top < height;
23
- if (isTop) {
24
- return 'top';
25
- }
26
- else if (isCenter) {
27
- return 'center';
28
- }
29
- return 'bottom';
30
- }
31
- get directionX() {
32
- const width = this.element.offsetWidth;
33
- const { left, right } = this._inputCords;
34
- const isElementFit = (window && window.innerWidth) - left < width;
35
- const isEnd = isElementFit && right > width;
36
- const isCenter = isElementFit && right < width;
37
- if (isEnd) {
38
- return 'end';
39
- }
40
- else if (isCenter) {
41
- return 'center';
42
- }
43
- return 'start';
44
- }
45
- ngAfterViewInit() {
46
- this._inputCords = this.inputCords;
47
- this._directionY = this.directionY;
48
- this._directionX = this.directionX;
49
- this.append();
50
- }
51
- changePosition() {
52
- const { left, right, bottom, top } = this.inputCords;
53
- const x = this.defineElementYByDirection(left, right);
54
- const y = this.defineElementYByDirection(top, bottom);
55
- this.setStyle('left', `${x}px`);
56
- this.setStyle('top', `${y}px`);
57
- }
58
- append() {
59
- const { left, right, bottom, top } = this._inputCords;
60
- const x = this.defineElementXByDirection(left, right);
61
- const y = this.defineElementYByDirection(top, bottom);
62
- this.setStyle('position', 'fixed');
63
- this.setStyle('left', `${x}px`);
64
- this.setStyle('top', `${y}px`);
65
- }
66
- setStyle(style, value) {
67
- this.renderer.setStyle(this.element, style, value);
68
- }
69
- defineElementYByDirection(inputTop, inputBottom) {
70
- if (this._directionY === 'top') {
71
- return inputTop - this.element.offsetHeight;
72
- }
73
- else if (this._directionY === 'center') {
74
- return inputTop - (this.element.offsetHeight / 2);
75
- }
76
- return inputBottom;
77
- }
78
- defineElementXByDirection(inputLeft, inputRight) {
79
- // DEBUG
80
- //console.log("defineElementXByDirection ", inputLeft, inputRight);
81
- if (this._directionX === 'end') {
82
- return inputRight - this.element.offsetWidth;
83
- }
84
- else if (this._directionX === 'center') {
85
- return inputRight - (this.element.offsetWidth / 2);
86
- }
87
- return inputLeft;
88
- }
89
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AppendToInputDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
90
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.1", type: AppendToInputDirective, selector: "[appendNumpadToInput]", inputs: { inputElement: ["appendNumpadToInput", "inputElement"] }, host: { listeners: { "window:scroll": "changePosition()" } }, ngImport: i0 });
91
- }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AppendToInputDirective, decorators: [{
93
- type: Directive,
94
- args: [{
95
- selector: '[appendNumpadToInput]'
96
- }]
97
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { inputElement: [{
98
- type: Input,
99
- args: ['appendNumpadToInput']
100
- }], changePosition: [{
101
- type: HostListener,
102
- args: ['window:scroll']
103
- }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtcGFkLmFwcGVuZC10by1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmFwcGVuZC10by1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQzs7QUFRbkcsTUFBTSxPQUFPLHNCQUFzQjtJQVVYO0lBUlUsWUFBWSxDQUFNO0lBRXhDLFdBQVcsQ0FBdUI7SUFDbEMsV0FBVyxDQUF1QjtJQUNsQyxXQUFXLENBQWE7SUFDZixPQUFPLENBQWM7SUFFdEMsWUFBWSxVQUFtQyxFQUMzQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFZLFVBQVU7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDekMsTUFBTSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLFlBQVksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLFlBQVksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBRTlDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixPQUFP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LENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxTQUFpQixFQUFFLFVBQWtCO1FBQ3JFLFFBQVE7UUFDUixtRUFBbUU7UUFFbkUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9CLE9BQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQy9DLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsT0FBTyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzt1R0FuR1Esc0JBQXNCOzJGQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtpQkFDcEM7dUdBR2lDLFlBQVk7c0JBQXpDLEtBQUs7dUJBQUMscUJBQXFCO2dCQXVENUIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBUaW1lcGlja2VyRGlyZWN0aW9uWSA9ICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJztcbnR5cGUgVGltZXBpY2tlckRpcmVjdGlvblggPSAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYXBwZW5kTnVtcGFkVG9JbnB1dF0nXG59KVxuZXhwb3J0IGNsYXNzIEFwcGVuZFRvSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICAgIEBJbnB1dCgnYXBwZW5kTnVtcGFkVG9JbnB1dCcpIGlucHV0RWxlbWVudDogYW55O1xuXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uWTogVGltZXBpY2tlckRpcmVjdGlvblk7XG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uWDogVGltZXBpY2tlckRpcmVjdGlvblg7XG4gICAgcHJpdmF0ZSBfaW5wdXRDb3JkczogQ2xpZW50UmVjdDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpbnB1dENvcmRzKCk6IENsaWVudFJlY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZGlyZWN0aW9uWSgpOiBUaW1lcGlja2VyRGlyZWN0aW9uWSB7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHtib3R0b20sIHRvcH0gPSB0aGlzLl9pbnB1dENvcmRzO1xuICAgICAgICBjb25zdCBpc0VsZW1lbnRGaXQgPSAod2luZG93ICYmIHdpbmRvdy5pbm5lckhlaWdodCkgLSBib3R0b20gPCBoZWlnaHQ7XG4gICAgICAgIGNvbnN0IGlzVG9wID0gaXNFbGVtZW50Rml0ICYmIHRvcCA+IGhlaWdodDtcbiAgICAgICAgY29uc3QgaXNDZW50ZXIgPSBpc0VsZW1lbnRGaXQgJiYgdG9wIDwgaGVpZ2h0O1xuXG4gICAgICAgIGlmIChpc1RvcCkge1xuICAgICAgICAgICAgcmV0dXJuICd0b3AnO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQ2VudGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgIH1cblxuICBwcml2YXRlIGdldCBkaXJlY3Rpb25YKCk6IFRpbWVwaWNrZXJEaXJlY3Rpb25YIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCB7bGVmdCwgcmlnaHR9ID0gdGhpcy5faW5wdXRDb3JkcztcbiAgICBjb25zdCBpc0VsZW1lbnRGaXQgPSAod2luZG93ICYmIHdpbmRvdy5pbm5lcldpZHRoKSAtIGxlZnQgPCB3aWR0aDtcbiAgICBjb25zdCBpc0VuZCA9IGlzRWxlbWVudEZpdCAmJiByaWdodCA+IHdpZHRoO1xuICAgIGNvbnN0IGlzQ2VudGVyID0gaXNFbGVtZW50Rml0ICYmIHJpZ2h0IDwgd2lkdGg7XG5cbiAgICBpZiAoaXNFbmQpIHtcbiAgICAgIHJldHVybiAnZW5kJztcbiAgICB9IGVsc2UgaWYgKGlzQ2VudGVyKSB7XG4gICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfVxuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0Q29yZHMgPSB0aGlzLmlucHV0Q29yZHM7XG4gICAgICAgIHRoaXMuX2RpcmVjdGlvblkgPSB0aGlzLmRpcmVjdGlvblk7XG4gICAgICAgIHRoaXMuX2RpcmVjdGlvblggPSB0aGlzLmRpcmVjdGlvblg7XG5cbiAgICAgICAgdGhpcy5hcHBlbmQoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBjaGFuZ2VQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHtsZWZ0LCByaWdodCwgYm90dG9tLCB0b3B9ID0gdGhpcy5pbnB1dENvcmRzO1xuICAgICAgY29uc3QgeCA9IHRoaXMuZGVmaW5lRWxlbWVudFlCeURpcmVjdGlvbihsZWZ0LCByaWdodCk7XG4gICAgICBjb25zdCB5ID0gdGhpcy5kZWZpbmVFbGVtZW50WUJ5RGlyZWN0aW9uKHRvcCwgYm90dG9tKTtcbiAgICAgIHRoaXMuc2V0U3R5bGUoJ2xlZnQnLCBgJHt4fXB4YCk7XG4gICAgICB0aGlzLnNldFN0eWxlKCd0b3AnLCBgJHt5fXB4YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtsZWZ0LCByaWdodCwgYm90dG9tLCB0b3B9ID0gdGhpcy5faW5wdXRDb3JkcztcblxuICAgICAgICBjb25zdCB4ID0gdGhpcy5kZWZpbmVFbGVtZW50WEJ5RGlyZWN0aW9uKGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuZGVmaW5lRWxlbWVudFlCeURpcmVjdGlvbih0b3AsIGJvdHRvbSk7XG5cbiAgICAgICAgdGhpcy5zZXRTdHlsZSgncG9zaXRpb24nLCAnZml4ZWQnKTtcbiAgICAgICAgdGhpcy5zZXRTdHlsZSgnbGVmdCcsIGAke3h9cHhgKTtcbiAgICAgICAgdGhpcy5zZXRTdHlsZSgndG9wJywgYCR7eX1weGApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3R5bGUoc3R5bGU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudCwgc3R5bGUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZmluZUVsZW1lbnRZQnlEaXJlY3Rpb24oaW5wdXRUb3A6IG51bWJlciwgaW5wdXRCb3R0b206IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl9kaXJlY3Rpb25ZID09PSAndG9wJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0VG9wIC0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaXJlY3Rpb25ZID09PSAnY2VudGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0VG9wIC0gKHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXRCb3R0b207XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZpbmVFbGVtZW50WEJ5RGlyZWN0aW9uKGlucHV0TGVmdDogbnVtYmVyLCBpbnB1dFJpZ2h0OiBudW1iZXIpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUubG9nKFwiZGVmaW5lRWxlbWVudFhCeURpcmVjdGlvbiBcIiwgaW5wdXRMZWZ0LCBpbnB1dFJpZ2h0KTtcblxuICAgICAgaWYgKHRoaXMuX2RpcmVjdGlvblggPT09ICdlbmQnKSB7XG4gICAgICAgIHJldHVybiBpbnB1dFJpZ2h0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9kaXJlY3Rpb25YID09PSAnY2VudGVyJykge1xuICAgICAgICByZXR1cm4gaW5wdXRSaWdodCAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnB1dExlZnQ7XG4gICAgfVxufVxuIl19
@@ -1,83 +0,0 @@
1
- import { DEFAULT_KEYMAP } from './numpad.model';
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { MatNumpadContainerComponent } from './numpad.container';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./numpad.dom-service";
6
- export class MatNumpadComponent {
7
- domService;
8
- _inputRef;
9
- _opened = false;
10
- keymap = DEFAULT_KEYMAP;
11
- decimal = true;
12
- appendToInput;
13
- disableAnimation = false;
14
- noBackdrop = false;
15
- position = 'bottom';
16
- keypress = new EventEmitter();
17
- closed = new EventEmitter();
18
- get opened() {
19
- return this._opened;
20
- }
21
- get inputElement() {
22
- return this._inputRef && this._inputRef.element;
23
- }
24
- constructor(domService) {
25
- this.domService = domService;
26
- }
27
- registerInput(input) {
28
- if (this._inputRef) {
29
- throw new Error('A Numpad can only be registered to one input.');
30
- }
31
- this._inputRef = input;
32
- }
33
- open() {
34
- // Already open. Skip.
35
- if (this._opened)
36
- return;
37
- console.debug('[numpad] Opening numpad...');
38
- this.domService.appendNumpadToBody(MatNumpadContainerComponent, {
39
- numpadRef: this,
40
- decimal: this.decimal,
41
- keymap: this.keymap,
42
- inputElement: this.inputElement,
43
- appendToInput: this.appendToInput,
44
- disableAnimation: this.disableAnimation,
45
- noBackdrop: this.noBackdrop,
46
- position: this.position
47
- });
48
- this._opened = true;
49
- }
50
- close() {
51
- console.debug('[numpad] Closing numpad...');
52
- this.domService.destroyNumpad();
53
- this._opened = false;
54
- // Emit close event
55
- this.closed.next();
56
- }
57
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatNumpadComponent, deps: [{ token: i1.MatNumpadDomService }], target: i0.ɵɵFactoryTarget.Component });
58
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: MatNumpadComponent, selector: "mat-numpad", inputs: { keymap: "keymap", decimal: "decimal", appendToInput: "appendToInput", disableAnimation: "disableAnimation", noBackdrop: "noBackdrop", position: "position" }, outputs: { keypress: "keypress", closed: "closed" }, ngImport: i0, template: '', isInline: true });
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: MatNumpadComponent, decorators: [{
61
- type: Component,
62
- args: [{
63
- selector: 'mat-numpad',
64
- template: '',
65
- }]
66
- }], ctorParameters: () => [{ type: i1.MatNumpadDomService }], propDecorators: { keymap: [{
67
- type: Input
68
- }], decimal: [{
69
- type: Input
70
- }], appendToInput: [{
71
- type: Input
72
- }], disableAnimation: [{
73
- type: Input
74
- }], noBackdrop: [{
75
- type: Input
76
- }], position: [{
77
- type: Input
78
- }], keypress: [{
79
- type: Output
80
- }], closed: [{
81
- type: Output
82
- }] } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtcGFkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC9udW1wYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQWdELE1BQU0sZ0JBQWdCLENBQUM7QUFDN0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBTy9ELE1BQU0sT0FBTyxrQkFBa0I7SUEwQm5CO0lBeEJGLFNBQVMsQ0FBa0I7SUFDM0IsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVmLE1BQU0sR0FBb0IsY0FBYyxDQUFDO0lBRXpDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFZixhQUFhLENBQVU7SUFDdkIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUVuQixRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDN0MsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFNUMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7SUFDbEQsQ0FBQztJQUVELFlBQ1UsVUFBK0I7UUFBL0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7SUFFekMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFzQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJO1FBQ0Ysc0JBQXNCO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLDJCQUEyQixFQUFFO1lBQzlELFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXJCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBaEVVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLCtRQUZuQixFQUFFOzsyRkFFRCxrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRSxFQUFFO2lCQUNiO3dGQU1VLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtERUZBVUxUX0tFWU1BUCwgTWF0TnVtcGFkRXZlbnQsIE1hdE51bXBhZEtleW1hcCwgTWF0TnVtcGFkUmVmfSBmcm9tICcuL251bXBhZC5tb2RlbCc7XG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TnVtcGFkRGlyZWN0aXZlfSBmcm9tICcuL251bXBhZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNYXROdW1wYWRDb250YWluZXJDb21wb25lbnR9IGZyb20gJy4vbnVtcGFkLmNvbnRhaW5lcic7XG5pbXBvcnQge01hdE51bXBhZERvbVNlcnZpY2V9IGZyb20gJy4vbnVtcGFkLmRvbS1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LW51bXBhZCcsXG4gIHRlbXBsYXRlOiAnJyxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TnVtcGFkQ29tcG9uZW50IGltcGxlbWVudHMgTWF0TnVtcGFkUmVmIHtcblxuICBwcml2YXRlIF9pbnB1dFJlZjogTnVtcGFkRGlyZWN0aXZlO1xuICBwcml2YXRlIF9vcGVuZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBrZXltYXA6IE1hdE51bXBhZEtleW1hcCA9IERFRkFVTFRfS0VZTUFQO1xuXG4gIEBJbnB1dCgpIGRlY2ltYWwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGFwcGVuZFRvSW5wdXQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpc2FibGVBbmltYXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgbm9CYWNrZHJvcCA9IGZhbHNlO1xuICBASW5wdXQoKSBwb3NpdGlvbiA9ICdib3R0b20nO1xuXG4gIEBPdXRwdXQoKSBrZXlwcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gIH1cblxuICBnZXQgaW5wdXRFbGVtZW50KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0UmVmICYmIHRoaXMuX2lucHV0UmVmLmVsZW1lbnQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IE1hdE51bXBhZERvbVNlcnZpY2VcbiAgKSB7XG4gIH1cblxuICByZWdpc3RlcklucHV0KGlucHV0OiBOdW1wYWREaXJlY3RpdmUpIHtcbiAgICBpZiAodGhpcy5faW5wdXRSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBOdW1wYWQgY2FuIG9ubHkgYmUgcmVnaXN0ZXJlZCB0byBvbmUgaW5wdXQuJyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0UmVmID0gaW5wdXQ7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIC8vIEFscmVhZHkgb3Blbi4gU2tpcC5cbiAgICBpZiAodGhpcy5fb3BlbmVkKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbbnVtcGFkXSBPcGVuaW5nIG51bXBhZC4uLicpO1xuXG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZE51bXBhZFRvQm9keShNYXROdW1wYWRDb250YWluZXJDb21wb25lbnQsIHtcbiAgICAgIG51bXBhZFJlZjogdGhpcyxcbiAgICAgIGRlY2ltYWw6IHRoaXMuZGVjaW1hbCxcbiAgICAgIGtleW1hcDogdGhpcy5rZXltYXAsXG4gICAgICBpbnB1dEVsZW1lbnQ6IHRoaXMuaW5wdXRFbGVtZW50LFxuICAgICAgYXBwZW5kVG9JbnB1dDogdGhpcy5hcHBlbmRUb0lucHV0LFxuICAgICAgZGlzYWJsZUFuaW1hdGlvbjogdGhpcy5kaXNhYmxlQW5pbWF0aW9uLFxuICAgICAgbm9CYWNrZHJvcDogdGhpcy5ub0JhY2tkcm9wLFxuICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb25cbiAgICB9KTtcblxuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbnVtcGFkXSBDbG9zaW5nIG51bXBhZC4uLicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5kZXN0cm95TnVtcGFkKCk7XG4gICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IGNsb3NlIGV2ZW50XG4gICAgdGhpcy5jbG9zZWQubmV4dCgpO1xuICB9XG5cblxufVxuIl19