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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (555) hide show
  1. package/README.md +5 -3
  2. package/doc/changelog.md +522 -280
  3. package/esm2022/public_api.mjs +38 -19
  4. package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
  5. package/esm2022/src/app/admin/admin.module.mjs +7 -9
  6. package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
  7. package/esm2022/src/app/admin/services/person.service.mjs +31 -31
  8. package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
  9. package/esm2022/src/app/admin/users/users.mjs +22 -19
  10. package/esm2022/src/app/admin/users/users.module.mjs +8 -10
  11. package/esm2022/src/app/core/about/about.modal.mjs +7 -7
  12. package/esm2022/src/app/core/about/about.module.mjs +8 -21
  13. package/esm2022/src/app/core/account/account.module.mjs +28 -18
  14. package/esm2022/src/app/core/account/account.page.mjs +19 -5
  15. package/esm2022/src/app/core/account/new-token.form.mjs +106 -0
  16. package/esm2022/src/app/core/account/new-token.modal.mjs +27 -86
  17. package/esm2022/src/app/core/account/password/change-password.form.mjs +60 -0
  18. package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
  19. package/esm2022/src/app/core/account/password/change-password.page.mjs +144 -0
  20. package/esm2022/src/app/core/account/token.table.mjs +47 -35
  21. package/esm2022/src/app/core/auth/auth.form.mjs +47 -28
  22. package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
  23. package/esm2022/src/app/core/auth/auth.module.mjs +22 -13
  24. package/esm2022/src/app/core/auth/reset-password.modal.mjs +77 -0
  25. package/esm2022/src/app/core/core.module.mjs +28 -61
  26. package/esm2022/src/app/core/core.testing.module.mjs +34 -20
  27. package/esm2022/src/app/core/form/array/form-array.mjs +325 -0
  28. package/esm2022/src/app/core/form/array/testing/form-array-test.module.mjs +23 -0
  29. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +94 -0
  30. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +24 -25
  31. package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
  32. package/esm2022/src/app/core/form/entity/editor.class.mjs +64 -517
  33. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +26 -42
  34. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +42 -41
  35. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
  36. package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
  37. package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +194 -0
  38. package/esm2022/src/app/core/form/form-container.class.mjs +327 -0
  39. package/esm2022/src/app/core/form/form.class.mjs +39 -56
  40. package/esm2022/src/app/core/form/form.module.mjs +14 -10
  41. package/esm2022/src/app/core/form/form.utils.mjs +23 -306
  42. package/esm2022/src/app/core/form/list/list.form.mjs +16 -14
  43. package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
  44. package/esm2022/src/app/core/form/properties/properties.form.mjs +139 -57
  45. package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
  46. package/esm2022/src/app/core/form/properties/properties.table.mjs +27 -28
  47. package/esm2022/src/app/core/form/properties/properties.utils.mjs +60 -0
  48. package/esm2022/src/app/core/form/properties/property.validator.mjs +23 -9
  49. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
  50. package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
  51. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +15 -15
  52. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
  53. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +7 -7
  54. package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
  55. package/esm2022/src/app/core/form/username/username.form.mjs +52 -0
  56. package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
  57. package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -16
  58. package/esm2022/src/app/core/graphql/graphql.service.mjs +101 -109
  59. package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
  60. package/esm2022/src/app/core/home/home.mjs +81 -52
  61. package/esm2022/src/app/core/home/home.module.mjs +10 -19
  62. package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
  63. package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
  64. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
  65. package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
  66. package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
  67. package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
  68. package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
  69. package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
  70. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
  71. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +7 -6
  72. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +43 -8
  73. package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
  74. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
  75. package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
  76. package/esm2022/src/app/core/peer/select-peer.modal.mjs +31 -21
  77. package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -23
  78. package/esm2022/src/app/core/register/register-confirm.page.mjs +18 -16
  79. package/esm2022/src/app/core/register/register.form.mjs +7 -7
  80. package/esm2022/src/app/core/register/register.modal.mjs +6 -6
  81. package/esm2022/src/app/core/register/register.module.mjs +8 -29
  82. package/esm2022/src/app/core/services/account.service.mjs +272 -170
  83. package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
  84. package/esm2022/src/app/core/services/base-entity-service.class.mjs +55 -64
  85. package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
  86. package/esm2022/src/app/core/services/base58.mjs +8 -4
  87. package/esm2022/src/app/core/services/config/core.config.mjs +88 -37
  88. package/esm2022/src/app/core/services/config.service.mjs +81 -62
  89. package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
  90. package/esm2022/src/app/core/services/errors.mjs +6 -5
  91. package/esm2022/src/app/core/services/local-settings.service.mjs +58 -44
  92. package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
  93. package/esm2022/src/app/core/services/model/config.model.mjs +7 -7
  94. package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
  95. package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
  96. package/esm2022/src/app/core/services/model/entity.model.mjs +27 -31
  97. package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
  98. package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
  99. package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
  100. package/esm2022/src/app/core/services/model/peer.model.mjs +19 -9
  101. package/esm2022/src/app/core/services/model/person.model.mjs +26 -22
  102. package/esm2022/src/app/core/services/model/referential.model.mjs +36 -23
  103. package/esm2022/src/app/core/services/model/settings.model.mjs +2 -1
  104. package/esm2022/src/app/core/services/model/token.model.mjs +7 -3
  105. package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +3 -7
  106. package/esm2022/src/app/core/services/network.service.mjs +99 -76
  107. package/esm2022/src/app/core/services/network.types.mjs +1 -1
  108. package/esm2022/src/app/core/services/network.utils.mjs +3 -3
  109. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
  110. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
  111. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +9 -9
  112. package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
  113. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
  114. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
  115. package/esm2022/src/app/core/services/platform.service.mjs +102 -69
  116. package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
  117. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
  118. package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
  119. package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
  120. package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
  121. package/esm2022/src/app/core/services/validator/base.validator.class.mjs +5 -5
  122. package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +34 -20
  123. package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
  124. package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
  125. package/esm2022/src/app/core/settings/settings.module.mjs +9 -21
  126. package/esm2022/src/app/core/settings/settings.page.mjs +76 -63
  127. package/esm2022/src/app/core/table/async-table.class.mjs +219 -201
  128. package/esm2022/src/app/core/table/column/actions-column.component.mjs +127 -0
  129. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +117 -0
  130. package/esm2022/src/app/core/table/column/row-field.component.mjs +116 -0
  131. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +31 -33
  132. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +36 -36
  133. package/esm2022/src/app/core/table/memory-table.class.mjs +5 -5
  134. package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
  135. package/esm2022/src/app/core/table/table.class.mjs +193 -152
  136. package/esm2022/src/app/core/table/table.model.mjs +1 -1
  137. package/esm2022/src/app/core/table/table.module.mjs +35 -24
  138. package/esm2022/src/app/core/table/table.pipes.mjs +77 -0
  139. package/esm2022/src/app/core/table/table.utils.mjs +2 -4
  140. package/esm2022/src/app/core/table/testing/table-validator.service.mjs +9 -5
  141. package/esm2022/src/app/core/table/testing/table.testing.mjs +116 -78
  142. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
  143. package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
  144. package/esm2022/src/app/core/table/testing/table2.testing.mjs +68 -45
  145. package/esm2022/src/app/shared/alerts.mjs +49 -45
  146. package/esm2022/src/app/shared/audio/audio.mjs +25 -27
  147. package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
  148. package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
  149. package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
  150. package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
  151. package/esm2022/src/app/shared/constants.mjs +9 -4
  152. package/esm2022/src/app/shared/dates.mjs +18 -16
  153. package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
  154. package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
  155. package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
  156. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -15
  157. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +4 -4
  158. package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
  159. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
  160. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
  161. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +4 -4
  162. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
  163. package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
  164. package/esm2022/src/app/shared/events.mjs +6 -8
  165. package/esm2022/src/app/shared/file/csv.utils.mjs +38 -18
  166. package/esm2022/src/app/shared/file/file.service.mjs +11 -15
  167. package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
  168. package/esm2022/src/app/shared/file/images.utils.mjs +29 -4
  169. package/esm2022/src/app/shared/file/json.utils.mjs +11 -4
  170. package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
  171. package/esm2022/src/app/shared/focusable.mjs +1 -1
  172. package/esm2022/src/app/shared/form/field.component.mjs +69 -43
  173. package/esm2022/src/app/shared/form/field.model.mjs +4 -4
  174. package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
  175. package/esm2022/src/app/shared/forms.mjs +116 -43
  176. package/esm2022/src/app/shared/functions.mjs +139 -71
  177. package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
  178. package/esm2022/src/app/shared/gesture/gesture-config.mjs +10 -10
  179. package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
  180. package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
  181. package/esm2022/src/app/shared/graph/graph-colors.mjs +23 -29
  182. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
  183. package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
  184. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
  185. package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +44 -17
  186. package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
  187. package/esm2022/src/app/shared/http/http.utils.mjs +15 -11
  188. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +27 -27
  189. package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
  190. package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
  191. package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
  192. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
  193. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
  194. package/esm2022/src/app/shared/image/image.model.mjs +1 -1
  195. package/esm2022/src/app/shared/image/image.module.mjs +8 -13
  196. package/esm2022/src/app/shared/image/image.service.mjs +14 -12
  197. package/esm2022/src/app/shared/inputs.mjs +52 -20
  198. package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
  199. package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
  200. package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
  201. package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
  202. package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
  203. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
  204. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +348 -238
  205. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +13 -16
  206. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +5 -4
  207. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +51 -37
  208. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +99 -57
  209. package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
  210. package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
  211. package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +19 -20
  212. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +209 -104
  213. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +15 -8
  214. package/esm2022/src/app/shared/material/chips/chips.module.mjs +12 -13
  215. package/esm2022/src/app/shared/material/chips/material.chips.mjs +228 -168
  216. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +20 -21
  217. package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +12 -27
  218. package/esm2022/src/app/shared/material/datetime/material.date.mjs +167 -92
  219. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +128 -77
  220. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +297 -165
  221. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +34 -30
  222. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +31 -27
  223. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +26 -23
  224. package/esm2022/src/app/shared/material/duration/duration.module.mjs +11 -16
  225. package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
  226. package/esm2022/src/app/shared/material/duration/material.duration.mjs +35 -34
  227. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +23 -22
  228. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +217 -170
  229. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +182 -241
  230. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +10 -15
  231. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +19 -14
  232. package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
  233. package/esm2022/src/app/shared/material/material.config.mjs +3 -0
  234. package/esm2022/src/app/shared/material/material.module.mjs +16 -16
  235. package/esm2022/src/app/shared/material/material.testing.module.mjs +50 -37
  236. package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +12 -9
  237. package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
  238. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +26 -19
  239. package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
  240. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
  241. package/esm2022/src/app/shared/material/testing/common.test.mjs +30 -24
  242. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +30 -19
  243. package/esm2022/src/app/shared/material/text/text-form.component.mjs +128 -21
  244. package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
  245. package/esm2022/src/app/shared/modules.mjs +1 -1
  246. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +118 -37
  247. package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
  248. package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
  249. package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +8 -8
  250. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +74 -0
  251. package/esm2022/src/app/shared/named-filter/testing/named-filter.testing.module.mjs +28 -0
  252. package/esm2022/src/app/shared/observables.mjs +14 -18
  253. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +53 -38
  254. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +24 -0
  255. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +8 -6
  256. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
  257. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +15 -15
  258. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
  259. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
  260. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
  261. package/esm2022/src/app/shared/pipes/form.pipes.mjs +72 -47
  262. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +15 -15
  263. package/esm2022/src/app/shared/pipes/html.pipes.mjs +52 -0
  264. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
  265. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
  266. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +37 -88
  267. package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
  268. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
  269. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
  270. package/esm2022/src/app/shared/pipes/pipes.module.mjs +117 -137
  271. package/esm2022/src/app/shared/pipes/property.pipes.mjs +86 -47
  272. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +179 -0
  273. package/esm2022/src/app/shared/pipes/string.pipes.mjs +50 -49
  274. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
  275. package/esm2022/src/app/shared/pipes/types.pipes.mjs +33 -17
  276. package/esm2022/src/app/shared/platforms.mjs +7 -5
  277. package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
  278. package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
  279. package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
  280. package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +43 -41
  281. package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
  282. package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
  283. package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
  284. package/esm2022/src/app/shared/services/translate-context.service.mjs +18 -15
  285. package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
  286. package/esm2022/src/app/shared/services.mjs +12 -12
  287. package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
  288. package/esm2022/src/app/shared/shared.module.mjs +29 -28
  289. package/esm2022/src/app/shared/shared.testing.module.mjs +18 -10
  290. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +39 -46
  291. package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
  292. package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
  293. package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
  294. package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
  295. package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
  296. package/esm2022/src/app/shared/testing/maskito.test.mjs +41 -0
  297. package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
  298. package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
  299. package/esm2022/src/app/shared/toast/toast.testing.mjs +11 -11
  300. package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
  301. package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
  302. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +10 -8
  303. package/esm2022/src/app/shared/toolbar/toolbar.mjs +31 -32
  304. package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
  305. package/esm2022/src/app/shared/types.mjs +1 -1
  306. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +12 -12
  307. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
  308. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
  309. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +21 -19
  310. package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
  311. package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +64 -56
  312. package/esm2022/src/app/shared/validator/validators.mjs +60 -39
  313. package/esm2022/src/app/shared/version/versions.mjs +2 -2
  314. package/esm2022/src/app/social/job/job.module.mjs +8 -27
  315. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
  316. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +49 -46
  317. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +10 -13
  318. package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
  319. package/esm2022/src/app/social/job/progression/job-progression.service.mjs +39 -21
  320. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +6 -11
  321. package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +11 -30
  322. package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
  323. package/esm2022/src/app/social/message/message.form.mjs +5 -5
  324. package/esm2022/src/app/social/message/message.modal.mjs +8 -8
  325. package/esm2022/src/app/social/message/message.model.mjs +8 -8
  326. package/esm2022/src/app/social/message/message.module.mjs +4 -4
  327. package/esm2022/src/app/social/message/message.service.mjs +7 -7
  328. package/esm2022/src/app/social/social.errors.mjs +2 -2
  329. package/esm2022/src/app/social/social.module.mjs +7 -32
  330. package/esm2022/src/app/social/social.testing.module.mjs +9 -20
  331. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +27 -23
  332. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
  333. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
  334. package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
  335. package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
  336. package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
  337. package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
  338. package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
  339. package/esm2022/src/app/social/user-event/user-event.service.mjs +61 -64
  340. package/esm2022/src/environments/environment.class.mjs +9 -1
  341. package/esm2022/src/environments/environment.loader.mjs +5 -11
  342. package/esm2022/src/environments/environment.mjs +19 -11
  343. package/fesm2022/sumaris-net.ngx-components.mjs +16117 -14592
  344. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  345. package/package.json +33 -18
  346. package/public_api.d.ts +30 -22
  347. package/src/app/admin/services/filter/person.filter.d.ts +1 -1
  348. package/src/app/admin/users/users.d.ts +5 -6
  349. package/src/app/core/account/account.module.d.ts +10 -8
  350. package/src/app/core/account/account.page.d.ts +25 -15
  351. package/src/app/core/account/new-token.form.d.ts +29 -0
  352. package/src/app/core/account/new-token.modal.d.ts +9 -21
  353. package/src/app/core/account/password/change-password.form.d.ts +19 -0
  354. package/src/app/core/account/password/change-password.module.d.ts +11 -0
  355. package/src/app/core/account/password/change-password.page.d.ts +36 -0
  356. package/src/app/core/account/token.table.d.ts +7 -5
  357. package/src/app/core/auth/auth.form.d.ts +11 -9
  358. package/src/app/core/auth/auth.module.d.ts +6 -4
  359. package/src/app/core/auth/reset-password.modal.d.ts +26 -0
  360. package/src/app/core/core.module.d.ts +21 -24
  361. package/src/app/core/core.testing.module.d.ts +2 -1
  362. package/src/app/core/form/array/form-array.d.ts +136 -0
  363. package/src/app/core/form/array/testing/form-array-test.module.d.ts +12 -0
  364. package/src/app/core/form/array/testing/form-array.test.d.ts +26 -0
  365. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -3
  366. package/src/app/core/form/entity/editor.class.d.ts +19 -179
  367. package/src/app/core/form/entity/entity-editor-modal.class.d.ts +10 -13
  368. package/src/app/core/form/entity/entity-editor.class.d.ts +12 -17
  369. package/src/app/core/form/entity/entity-metadata.component.d.ts +1 -1
  370. package/src/app/core/form/entity/tab-editor.class.d.ts +70 -0
  371. package/src/app/core/form/form-container.class.d.ts +126 -0
  372. package/src/app/core/form/form.class.d.ts +13 -26
  373. package/src/app/core/form/form.module.d.ts +2 -1
  374. package/src/app/core/form/form.utils.d.ts +60 -145
  375. package/src/app/core/form/list/list.form.d.ts +2 -2
  376. package/src/app/core/form/properties/properties.form.d.ts +34 -12
  377. package/src/app/core/form/properties/properties.table.d.ts +2 -2
  378. package/src/app/core/form/properties/properties.utils.d.ts +27 -0
  379. package/src/app/core/form/properties/property.validator.d.ts +9 -3
  380. package/src/app/core/form/text-popover/testing/text-popover.testing.d.ts +3 -1
  381. package/src/app/core/form/username/username.form.d.ts +19 -0
  382. package/src/app/core/form/username/username.module.d.ts +9 -0
  383. package/src/app/core/graphql/graphql.module.d.ts +1 -2
  384. package/src/app/core/graphql/graphql.service.d.ts +2 -4
  385. package/src/app/core/home/home.d.ts +26 -6
  386. package/src/app/core/menu/testing/menu-other.testing.d.ts +1 -1
  387. package/src/app/core/menu/testing/menu.testing.d.ts +11 -3
  388. package/src/app/core/peer/select-peer.modal.d.ts +13 -7
  389. package/src/app/core/peer/select-peer.module.d.ts +3 -4
  390. package/src/app/core/services/account.service.d.ts +9 -0
  391. package/src/app/core/services/base-entity-service.class.d.ts +1 -1
  392. package/src/app/core/services/config/core.config.d.ts +12 -1
  393. package/src/app/core/services/config.service.d.ts +4 -3
  394. package/src/app/core/services/errors.d.ts +11 -0
  395. package/src/app/core/services/local-settings.service.d.ts +8 -4
  396. package/src/app/core/services/model/entity.model.d.ts +6 -5
  397. package/src/app/core/services/model/filter.model.d.ts +1 -1
  398. package/src/app/core/services/model/peer.model.d.ts +1 -0
  399. package/src/app/core/services/model/person.model.d.ts +6 -2
  400. package/src/app/core/services/model/referential.model.d.ts +8 -3
  401. package/src/app/core/services/model/settings.model.d.ts +4 -2
  402. package/src/app/core/services/model/token.model.d.ts +1 -0
  403. package/src/app/core/services/model/tree-item-entity.model.d.ts +1 -1
  404. package/src/app/core/services/network.service.d.ts +11 -7
  405. package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
  406. package/src/app/core/services/pipes/person-to-string.pipe.d.ts +3 -1
  407. package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
  408. package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +13 -0
  409. package/src/app/core/services/platform.service.d.ts +8 -3
  410. package/src/app/core/services/testing/referential-filter.model.d.ts +1 -1
  411. package/src/app/core/services/validator/local-settings.validator.d.ts +6 -2
  412. package/src/app/core/settings/settings.module.d.ts +2 -1
  413. package/src/app/core/settings/settings.page.d.ts +34 -21
  414. package/src/app/core/table/async-table.class.d.ts +22 -17
  415. package/src/app/core/table/column/actions-column.component.d.ts +59 -0
  416. package/src/app/core/table/column/nav-actions-column.component.d.ts +46 -0
  417. package/src/app/core/table/column/row-field.component.d.ts +40 -0
  418. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
  419. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  420. package/src/app/core/table/table.class.d.ts +14 -11
  421. package/src/app/core/table/table.module.d.ts +8 -4
  422. package/src/app/core/table/table.pipes.d.ts +28 -0
  423. package/src/app/core/table/testing/table.testing.d.ts +12 -13
  424. package/src/app/core/table/testing/table2.testing.d.ts +13 -10
  425. package/src/app/shared/alerts.d.ts +4 -2
  426. package/src/app/shared/constants.d.ts +5 -0
  427. package/src/app/shared/dates.d.ts +12 -5
  428. package/src/app/shared/directives/autofocus.directive.d.ts +0 -1
  429. package/src/app/shared/events.d.ts +1 -1
  430. package/src/app/shared/file/csv.utils.d.ts +5 -0
  431. package/src/app/shared/file/images.utils.d.ts +17 -0
  432. package/src/app/shared/file/json.utils.d.ts +3 -0
  433. package/src/app/shared/form/field.component.d.ts +6 -3
  434. package/src/app/shared/forms.d.ts +32 -0
  435. package/src/app/shared/functions.d.ts +27 -8
  436. package/src/app/shared/graph/graph-colors.d.ts +1 -1
  437. package/src/app/shared/guard/component-dirty.guard.d.ts +1 -6
  438. package/src/app/shared/hotkeys/hotkeys.service.d.ts +17 -3
  439. package/src/app/shared/http/http.utils.d.ts +1 -0
  440. package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
  441. package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
  442. package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
  443. package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
  444. package/src/app/shared/inputs.d.ts +8 -6
  445. package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +20 -1
  446. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +56 -16
  447. package/src/app/shared/material/autocomplete/material.autocomplete.module.d.ts +1 -1
  448. package/src/app/shared/material/autocomplete/material.autocomplete.utils.d.ts +2 -1
  449. package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +3 -2
  450. package/src/app/shared/material/badge/badge.directive.d.ts +10 -4
  451. package/src/app/shared/material/boolean/boolean.module.d.ts +15 -14
  452. package/src/app/shared/material/boolean/material.boolean.d.ts +51 -25
  453. package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +1 -0
  454. package/src/app/shared/material/chips/chips.module.d.ts +2 -1
  455. package/src/app/shared/material/chips/material.chips.d.ts +46 -21
  456. package/src/app/shared/material/chips/testing/chips.test.d.ts +1 -0
  457. package/src/app/shared/material/datetime/datetime.module.d.ts +1 -1
  458. package/src/app/shared/material/datetime/material.date.d.ts +33 -18
  459. package/src/app/shared/material/datetime/material.dateshort.d.ts +29 -16
  460. package/src/app/shared/material/datetime/material.datetime.d.ts +41 -28
  461. package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +3 -3
  462. package/src/app/shared/material/duration/duration.module.d.ts +1 -1
  463. package/src/app/shared/material/duration/material.duration.d.ts +1 -1
  464. package/src/app/shared/material/latlong/latlong.utils.d.ts +9 -1
  465. package/src/app/shared/material/latlong/material.latlong.d.ts +29 -32
  466. package/src/app/shared/material/latlong/material.latlong.module.d.ts +1 -1
  467. package/src/app/shared/material/latlong/testing/latlong.test.d.ts +5 -1
  468. package/src/app/shared/material/material.config.d.ts +3 -0
  469. package/src/app/shared/material/material.module.d.ts +5 -6
  470. package/src/app/shared/material/material.testing.module.d.ts +8 -7
  471. package/src/app/shared/material/swipe/material.swipe.d.ts +4 -3
  472. package/src/app/shared/material/text/testing/text-form.testing.d.ts +10 -4
  473. package/src/app/shared/material/text/text-form.component.d.ts +42 -8
  474. package/src/app/shared/named-filter/named-filter-selector.component.d.ts +30 -14
  475. package/src/app/shared/named-filter/named-filter.service.d.ts +12 -6
  476. package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +34 -0
  477. package/src/app/shared/named-filter/testing/named-filter.testing.module.d.ts +10 -0
  478. package/src/app/shared/pipes/arrays.pipe.d.ts +5 -0
  479. package/src/app/shared/pipes/badge.pipes.d.ts +7 -0
  480. package/src/app/shared/pipes/date-format.pipe.d.ts +3 -2
  481. package/src/app/shared/pipes/form.pipes.d.ts +18 -8
  482. package/src/app/shared/pipes/html.pipes.d.ts +15 -0
  483. package/src/app/shared/pipes/maps.pipe.d.ts +4 -4
  484. package/src/app/shared/pipes/maskito.pipe.d.ts +7 -9
  485. package/src/app/shared/pipes/pipes.module.d.ts +7 -4
  486. package/src/app/shared/pipes/property.pipes.d.ts +24 -3
  487. package/src/app/shared/pipes/selection.pipes.d.ts +62 -0
  488. package/src/app/shared/pipes/string.pipes.d.ts +6 -6
  489. package/src/app/shared/pipes/types.pipes.d.ts +6 -1
  490. package/src/app/shared/services/entity-service.class.d.ts +0 -2
  491. package/src/app/shared/services/memory-entity-service.class.d.ts +6 -3
  492. package/src/app/shared/services.d.ts +1 -0
  493. package/src/app/shared/shared.testing.module.d.ts +2 -1
  494. package/src/app/shared/storage/storage-explorer.component.d.ts +4 -3
  495. package/src/app/shared/testing/maskito.test.d.ts +10 -0
  496. package/src/app/shared/toolbar/toolbar.d.ts +7 -2
  497. package/src/app/shared/types.d.ts +5 -0
  498. package/src/app/shared/upload-file/upload-file.component.d.ts +1 -0
  499. package/src/app/shared/validator/form-error-adapter.class.d.ts +17 -11
  500. package/src/app/shared/validator/validators.d.ts +20 -9
  501. package/src/app/social/job/progression/job-progression.icon.d.ts +4 -5
  502. package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
  503. package/src/app/social/job/progression/job-progression.service.d.ts +3 -4
  504. package/src/app/social/job/testing/job-progression.testing.d.ts +0 -1
  505. package/src/app/social/job/testing/job-progression.testing.service.d.ts +3 -11
  506. package/src/app/social/message/message.modal.d.ts +2 -2
  507. package/src/app/social/message/message.model.d.ts +1 -1
  508. package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +4 -4
  509. package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
  510. package/src/app/social/user-event/testing/user-event.testing.model.d.ts +2 -3
  511. package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
  512. package/src/assets/i18n/en-US.json +48 -19
  513. package/src/assets/i18n/en.json +48 -20
  514. package/src/assets/i18n/fr.json +50 -20
  515. package/src/assets/manifest.json +1 -1
  516. package/src/environments/environment.class.d.ts +10 -0
  517. package/src/environments/environment.d.ts +0 -1
  518. package/src/environments/environment.loader.d.ts +0 -2
  519. package/src/theme/_functions.scss +15 -0
  520. package/src/theme/_icons.scss +1 -1
  521. package/src/theme/_ionic.globals.scss +8 -2
  522. package/src/theme/_ionic.scss +10 -10
  523. package/src/theme/_material.globals.scss +16 -43
  524. package/src/theme/_material.scss +45 -32
  525. package/src/theme/_mixins.scss +99 -18
  526. package/src/theme/_ngx-components.forms.scss +354 -0
  527. package/src/theme/_ngx-components.globals.scss +20 -10
  528. package/src/theme/_ngx-components.scss +194 -400
  529. package/src/theme/_ngx-components.table.scss +200 -207
  530. package/src/theme/_ngx-components.tabs.scss +54 -0
  531. package/src/theme/_responsive.scss +0 -31
  532. package/src/theme/_theme.scss +2 -0
  533. package/src/theme/_theme.variables.scss +172 -0
  534. package/esm2022/src/app/core/table/actions-column.component.mjs +0 -115
  535. package/esm2022/src/app/shared/material/boolean/material-boolean2.mjs +0 -266
  536. package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
  537. package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
  538. package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
  539. package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
  540. package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
  541. package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
  542. package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
  543. package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
  544. package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
  545. package/src/app/core/table/actions-column.component.d.ts +0 -48
  546. package/src/app/shared/material/boolean/material-boolean2.d.ts +0 -66
  547. package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
  548. package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
  549. package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
  550. package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
  551. package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
  552. package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
  553. package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
  554. package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
  555. package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
@@ -0,0 +1,127 @@
1
+ import { booleanAttribute, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { MatColumnDef } from '@angular/material/table';
3
+ import { MatMenuTrigger } from '@angular/material/menu';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/material/table";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@ionic/angular";
8
+ import * as i4 from "@angular/material/icon";
9
+ import * as i5 from "@angular/material/button";
10
+ import * as i6 from "@ngx-translate/core";
11
+ export class ActionsColumnComponent {
12
+ table;
13
+ cd;
14
+ columnDef;
15
+ matMenuTrigger;
16
+ matColumnDef = 'actions';
17
+ style = 'table';
18
+ stickyEnd = false;
19
+ canCancel;
20
+ canConfirm;
21
+ canDelete;
22
+ canBackward;
23
+ canForward;
24
+ canConfirmAndAdd;
25
+ dirtyIcon;
26
+ optionsTitle = 'COMMON.BTN_OPTIONS';
27
+ // eslint-disable-next-line @angular-eslint/no-input-rename
28
+ classList;
29
+ cellTemplate;
30
+ optionsClick = new EventEmitter();
31
+ cancelOrDeleteClick = new EventEmitter();
32
+ confirmEditCreateClick = new EventEmitter();
33
+ confirmAndAddClick = new EventEmitter();
34
+ backward = new EventEmitter();
35
+ forward = new EventEmitter();
36
+ constructor(table, cd) {
37
+ this.table = table;
38
+ this.cd = cd;
39
+ // TODO auto configure using AppTable ? (need a forwardRef() in the table component
40
+ //@Optional() private appTable: AppTable<any>
41
+ if (!table)
42
+ throw new Error(`[actions-column] this column component must be inside a MatTable component`);
43
+ }
44
+ ngOnInit() {
45
+ this.cd.detectChanges();
46
+ this.table.addColumnDef(this.columnDef);
47
+ this.canCancel = this.canCancel ?? this.cancelOrDeleteClick.observed;
48
+ this.canConfirm = this.canConfirm ?? this.confirmEditCreateClick.observed;
49
+ this.canDelete = this.canDelete ?? this.cancelOrDeleteClick.observed;
50
+ this.canConfirmAndAdd = this.canConfirmAndAdd ?? this.confirmAndAddClick.observed;
51
+ this.canBackward = this.canBackward ?? this.backward.observed;
52
+ this.canForward = this.canForward ?? this.forward.observed;
53
+ this.dirtyIcon = this.dirtyIcon === true ? 'star' : this.dirtyIcon === false ? null : this.dirtyIcon ?? 'star';
54
+ }
55
+ ngOnDestroy() {
56
+ this.table.removeColumnDef(this.columnDef);
57
+ this.optionsClick.complete();
58
+ this.optionsClick.unsubscribe();
59
+ this.cancelOrDeleteClick.complete();
60
+ this.cancelOrDeleteClick.unsubscribe();
61
+ this.confirmAndAddClick.complete();
62
+ this.confirmAndAddClick.unsubscribe();
63
+ this.backward.complete();
64
+ this.backward.unsubscribe();
65
+ this.forward.complete();
66
+ this.forward.unsubscribe();
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ActionsColumnComponent, deps: [{ token: i1.MatTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\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.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: ActionsColumnComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'app-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"] }]
74
+ }], ctorParameters: () => [{ type: i1.MatTable }, { type: i0.ChangeDetectorRef }], propDecorators: { columnDef: [{
75
+ type: ViewChild,
76
+ args: [MatColumnDef]
77
+ }], matMenuTrigger: [{
78
+ type: ViewChild,
79
+ args: [MatMenuTrigger]
80
+ }], matColumnDef: [{
81
+ type: Input
82
+ }], style: [{
83
+ type: Input
84
+ }], stickyEnd: [{
85
+ type: Input,
86
+ args: [{ transform: booleanAttribute }]
87
+ }], canCancel: [{
88
+ type: Input,
89
+ args: [{ transform: booleanAttribute }]
90
+ }], canConfirm: [{
91
+ type: Input,
92
+ args: [{ transform: booleanAttribute }]
93
+ }], canDelete: [{
94
+ type: Input,
95
+ args: [{ transform: booleanAttribute }]
96
+ }], canBackward: [{
97
+ type: Input,
98
+ args: [{ transform: booleanAttribute }]
99
+ }], canForward: [{
100
+ type: Input,
101
+ args: [{ transform: booleanAttribute }]
102
+ }], canConfirmAndAdd: [{
103
+ type: Input,
104
+ args: [{ transform: booleanAttribute }]
105
+ }], dirtyIcon: [{
106
+ type: Input
107
+ }], optionsTitle: [{
108
+ type: Input
109
+ }], classList: [{
110
+ type: Input,
111
+ args: ['class']
112
+ }], cellTemplate: [{
113
+ type: Input
114
+ }], optionsClick: [{
115
+ type: Output
116
+ }], cancelOrDeleteClick: [{
117
+ type: Output
118
+ }], confirmEditCreateClick: [{
119
+ type: Output
120
+ }], confirmAndAddClick: [{
121
+ type: Output
122
+ }], backward: [{
123
+ type: Output
124
+ }], forward: [{
125
+ type: Output
126
+ }] } });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sc0JBQXNCO0lBMkJ2QjtJQUNBO0lBM0JlLFNBQVMsQ0FBZTtJQUN0QixjQUFjLENBQWlCO0lBRWpELFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsS0FBSyxHQUEwQixPQUFPLENBQUM7SUFDUixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsU0FBUyxDQUFVO0lBQ25CLFdBQVcsQ0FBVTtJQUNyQixVQUFVLENBQVU7SUFDcEIsZ0JBQWdCLENBQVU7SUFDekQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixZQUFZLENBQWdDO0lBRTNDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQ3pDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ25FLHNCQUFzQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ3RFLGtCQUFrQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ2xFLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztJQUN4RCxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFFakUsWUFDVSxLQUFvQixFQUNwQixFQUFxQjtRQURyQixVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQ3BCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRTdCLG1GQUFtRjtRQUNuRiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUNyRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztRQUMxRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztRQUNyRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO0lBQ2pILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO3VHQTNEVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixnSUFNYixnQkFBZ0IseUNBQ2hCLGdCQUFnQiw0Q0FDaEIsZ0JBQWdCLHlDQUNoQixnQkFBZ0IsK0NBQ2hCLGdCQUFnQiw0Q0FDaEIsZ0JBQWdCLDhEQUNoQixnQkFBZ0IsNFpBWHpCLFlBQVksaUZBQ1osY0FBYyxnREN2QjNCLDQvT0EwTkE7OzJGRHJNYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9COzZHQUtMLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBRWhCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNrQyxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFVSxTQUFTO3NCQUF4QixLQUFLO3VCQUFDLE9BQU87Z0JBQ0wsWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXN5bmNUYWJsZUVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFjdGlvbnMtY29sdW1uJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NvbHVtbkNvbXBvbmVudDxUIGV4dGVuZHMgVGFibGVFbGVtZW50PGFueT4gfCBBc3luY1RhYmxlRWxlbWVudDxhbnk+ID0gVGFibGVFbGVtZW50PGFueT4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKE1hdENvbHVtbkRlZikgY29sdW1uRGVmOiBNYXRDb2x1bW5EZWY7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICBASW5wdXQoKSBtYXRDb2x1bW5EZWYgPSAnYWN0aW9ucyc7XG4gIEBJbnB1dCgpIHN0eWxlOiAndGFibGUnIHwgJ21hdC10YWJsZScgPSAndGFibGUnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RpY2t5RW5kID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5DYW5jZWw6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Db25maXJtOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQmFja3dhcmQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5Gb3J3YXJkOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ29uZmlybUFuZEFkZDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlydHlJY29uOiBib29sZWFuIHwgc3RyaW5nO1xuICBASW5wdXQoKSBvcHRpb25zVGl0bGUgPSAnQ09NTU9OLkJUTl9PUFRJT05TJztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuICBASW5wdXQoKSBjZWxsVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuXG4gIEBPdXRwdXQoKSBvcHRpb25zQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsT3JEZWxldGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUVkaXRDcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUFuZEFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBiYWNrd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgZm9yd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFibGU6IE1hdFRhYmxlPGFueT4sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETyBhdXRvIGNvbmZpZ3VyZSB1c2luZyBBcHBUYWJsZSA/IChuZWVkIGEgZm9yd2FyZFJlZigpIGluIHRoZSB0YWJsZSBjb21wb25lbnRcbiAgICAvL0BPcHRpb25hbCgpIHByaXZhdGUgYXBwVGFibGU6IEFwcFRhYmxlPGFueT5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFthY3Rpb25zLWNvbHVtbl0gdGhpcyBjb2x1bW4gY29tcG9uZW50IG11c3QgYmUgaW5zaWRlIGEgTWF0VGFibGUgY29tcG9uZW50YCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5jYW5DYW5jZWwgPSB0aGlzLmNhbkNhbmNlbCA/PyB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5Db25maXJtID0gdGhpcy5jYW5Db25maXJtID8/IHRoaXMuY29uZmlybUVkaXRDcmVhdGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IHRoaXMuY2FuRGVsZXRlID8/IHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPSB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPz8gdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5CYWNrd2FyZCA9IHRoaXMuY2FuQmFja3dhcmQgPz8gdGhpcy5iYWNrd2FyZC5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkZvcndhcmQgPSB0aGlzLmNhbkZvcndhcmQgPz8gdGhpcy5mb3J3YXJkLm9ic2VydmVkO1xuICAgIHRoaXMuZGlydHlJY29uID0gdGhpcy5kaXJ0eUljb24gPT09IHRydWUgPyAnc3RhcicgOiB0aGlzLmRpcnR5SWNvbiA9PT0gZmFsc2UgPyBudWxsIDogdGhpcy5kaXJ0eUljb24gPz8gJ3N0YXInO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICAgIHRoaXMub3B0aW9uc0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNvbmZpcm1BbmRBZGRDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY29uZmlybUFuZEFkZENsaWNrLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5iYWNrd2FyZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYmFja3dhcmQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcndhcmQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvcndhcmQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm1hdENvbHVtbkRlZlwiIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBDb25maXJtIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICpuZ0lmPVwiY2FuQ29uZmlybSAmJiByb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FQUExZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5jaGVja21hcms8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgIEBpZiAocm93LmlkID09PSAtMSkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWNhbkZvcndhcmQgJiYgY2FuQ29uZmlybUFuZEFkZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQUREJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIG5leHQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgQGlmIChjYW5Gb3J3YXJkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiZm9yd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gZXhpc3Rpbmcgcm93IC0tPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8IS0tIGNhbmNlbCBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQ2FuY2VsICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJkaXJ0eUljb25cIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwiZGlydHktaWNvblwiIHRhYmluZGV4PVwiLTFcIj48L2lvbi1pY29uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgQGlmIChjYW5CYWNrd2FyZCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiYmFja3dhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC90ZD5cblxuICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWF0LXRhYmxlJ1wiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzXT1cImNsYXNzTGlzdFwiIFtjbGFzcy5tYXQtY29sdW1uLXN0aWNreV09XCJzdGlja3lFbmRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICpuZ0lmPVwib3B0aW9uc0NsaWNrLm9ic2VydmVkXCJcbiAgICAgICAgW3RpdGxlXT1cIm9wdGlvbnNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJvcHRpb25zQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBDb25maXJtIGJ1dHRvbiAtLT5cbiAgICAgICAgQGlmIChjYW5Db25maXJtICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5ICYmIHJvdy52YWxpZGF0b3IudmFsaWQpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FQUExZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUVkaXRDcmVhdGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVja21hcms8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBuZXcgcm93IC0tPlxuICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuRGVsZXRlICYmIHJvdy52YWxpZGF0b3I/LmludmFsaWRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBhZGQgYnV0dG9uIC0tPlxuICAgICAgICAgIEBpZiAoIWNhbkZvcndhcmQgJiYgY2FuQ29uZmlybUFuZEFkZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BREQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1BbmRBZGRDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBleGlzdGluZyByb3cgLS0+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICBAaWYgKGNhbkNhbmNlbCAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJkaXJ0eUljb25cIiBjb2xvcj1cImFjY2VudFwiIGNsYXNzPVwiZGlydHktaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICBAaWYgKGNhbkJhY2t3YXJkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJiYWNrd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jZWxsPlxuXG4gICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,117 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, ViewChild, } from '@angular/core';
2
+ import { MatColumnDef } from '@angular/material/table';
3
+ import { MatMenuTrigger } from '@angular/material/menu';
4
+ import { Subject, Subscription } from 'rxjs';
5
+ import { throttleTime } from 'rxjs/operators';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/material/table";
8
+ import * as i2 from "../table.class";
9
+ import * as i3 from "../async-table.class";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@ionic/angular";
12
+ import * as i6 from "@angular/material/icon";
13
+ import * as i7 from "@angular/material/button";
14
+ import * as i8 from "@ngx-translate/core";
15
+ export class NavActionsColumnComponent {
16
+ matTable;
17
+ cd;
18
+ _subscription = new Subscription();
19
+ _forwardEventSubject = new Subject();
20
+ _backwardEventSubject = new Subject();
21
+ columnDef;
22
+ matMenuTrigger;
23
+ appTable;
24
+ matColumnDef = 'actions';
25
+ style = 'table';
26
+ stickyEnd = false;
27
+ showPending;
28
+ dirtyIcon;
29
+ optionsTitle = 'COMMON.BTN_OPTIONS';
30
+ // eslint-disable-next-line @angular-eslint/no-input-rename
31
+ classList;
32
+ cellTemplate;
33
+ throttleTime = 250;
34
+ optionsClick = new EventEmitter();
35
+ constructor(matTable, cd, appTable, appAsyncTable) {
36
+ this.matTable = matTable;
37
+ this.cd = cd;
38
+ if (!matTable)
39
+ throw new Error(`[actions-column] this column component must be inside a MatTable component`);
40
+ this.appTable = appTable ?? appAsyncTable;
41
+ this._subscription = new Subscription();
42
+ }
43
+ ngOnInit() {
44
+ // Default values
45
+ this.showPending = this.showPending ?? true;
46
+ this.dirtyIcon = this.dirtyIcon === true ? 'star' : this.dirtyIcon === false ? null : this.dirtyIcon ?? 'star';
47
+ this.cd.detectChanges();
48
+ this.matTable.addColumnDef(this.columnDef);
49
+ if (!this.appTable)
50
+ throw new Error(`[nav-actions-column] No AppTable or AppAsyncTable found. Please define a provider or set input '[appTable]'`);
51
+ this._subscription.add(this._forwardEventSubject
52
+ .pipe(throttleTime(this.throttleTime) // Avoid too many event, when leaving Tab key pressed
53
+ )
54
+ .subscribe(({ event, row }) => this.appTable.confirmAndForward(event, row)));
55
+ this._subscription.add(this._backwardEventSubject
56
+ .pipe(throttleTime(this.throttleTime) // Avoid too many event, when leaving Back-Tab key pressed
57
+ )
58
+ .subscribe(({ event, row }) => this.appTable.confirmAndBackward(event, row)));
59
+ }
60
+ ngOnDestroy() {
61
+ this.matTable.removeColumnDef(this.columnDef);
62
+ this.optionsClick.complete();
63
+ this.optionsClick.unsubscribe();
64
+ this._subscription.unsubscribe();
65
+ }
66
+ cancelOrDelete(event, row) {
67
+ this.appTable.cancelOrDelete(event, row);
68
+ }
69
+ confirmAndForward(event, row) {
70
+ this._forwardEventSubject.next({ event, row });
71
+ }
72
+ confirmAndBackward(event, row) {
73
+ this._backwardEventSubject.next({ event, row });
74
+ }
75
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: NavActionsColumnComponent, deps: [{ token: i1.MatTable }, { token: i0.ChangeDetectorRef }, { token: i2.AppTable, optional: true }, { token: i3.AppAsyncTable, optional: true }], target: i0.ɵɵFactoryTarget.Component });
76
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: NavActionsColumnComponent, selector: "app-nav-actions-column", inputs: { appTable: "appTable", matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], showPending: ["showPending", "showPending", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplate: "cellTemplate", throttleTime: "throttleTime" }, outputs: { optionsClick: "optionsClick" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- valid row or invalid existing row -->\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"confirmAndForward($event, row)\"></button>\n }\n\n <!-- NOT editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"confirmAndForward($event, row)\"></button>\n }\n\n <!-- not editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: NavActionsColumnComponent, decorators: [{
79
+ type: Component,
80
+ args: [{ selector: 'app-nav-actions-column', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\" [ngSwitch]=\"style\">\n <ng-container *ngSwitchCase=\"'table'\">\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- valid row or invalid existing row -->\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"confirmAndForward($event, row)\"></button>\n }\n\n <!-- NOT editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mat-table'\">\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner [class.cdk-visually-hidden]=\"!showPending\" name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- invalid new row -->\n @if (row.id === -1 && row.validator?.invalid) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDelete($event, row)\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n } @else {\n <!-- forward button (invisible - focusable only) -->\n <button class=\"mat-row-action-button-navigation\" (focus)=\"confirmAndForward($event, row)\"></button>\n }\n\n <!-- not editing row -->\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"confirmAndBackward($event, row)\"\n ></button>\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplate; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n </ng-container>\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"] }]
81
+ }], ctorParameters: () => [{ type: i1.MatTable }, { type: i0.ChangeDetectorRef }, { type: i2.AppTable, decorators: [{
82
+ type: Optional
83
+ }] }, { type: i3.AppAsyncTable, decorators: [{
84
+ type: Optional
85
+ }] }], propDecorators: { columnDef: [{
86
+ type: ViewChild,
87
+ args: [MatColumnDef]
88
+ }], matMenuTrigger: [{
89
+ type: ViewChild,
90
+ args: [MatMenuTrigger]
91
+ }], appTable: [{
92
+ type: Input
93
+ }], matColumnDef: [{
94
+ type: Input
95
+ }], style: [{
96
+ type: Input
97
+ }], stickyEnd: [{
98
+ type: Input,
99
+ args: [{ transform: booleanAttribute }]
100
+ }], showPending: [{
101
+ type: Input,
102
+ args: [{ transform: booleanAttribute }]
103
+ }], dirtyIcon: [{
104
+ type: Input
105
+ }], optionsTitle: [{
106
+ type: Input
107
+ }], classList: [{
108
+ type: Input,
109
+ args: ['class']
110
+ }], cellTemplate: [{
111
+ type: Input
112
+ }], throttleTime: [{
113
+ type: Input
114
+ }], optionsClick: [{
115
+ type: Output
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBUTlDLE1BQU0sT0FBTyx5QkFBeUI7SUF1QjFCO0lBQ0E7SUF2QlYsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkMsb0JBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQTRCLENBQUM7SUFDL0QscUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQTRCLENBQUM7SUFFdkMsU0FBUyxDQUFlO0lBQ3RCLGNBQWMsQ0FBaUI7SUFFakQsUUFBUSxDQUFxQztJQUM3QyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ3pCLEtBQUssR0FBMEIsT0FBTyxDQUFDO0lBQ1IsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixXQUFXLENBQVU7SUFDcEQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixZQUFZLENBQWdDO0lBQzVDLFlBQVksR0FBRyxHQUFHLENBQUM7SUFFbEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFbkQsWUFDVSxRQUF1QixFQUN2QixFQUFxQixFQUNqQixRQUF1QixFQUN2QixhQUFpQztRQUhyQyxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBSTdCLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFFBQVE7UUFDTixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO1FBRS9HLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDZHQUE2RyxDQUFDLENBQUM7UUFFakksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsSUFBSSxDQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMscURBQXFEO1NBQ3RGO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQ3JGLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLHFCQUFxQjthQUN2QixJQUFJLENBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQywwREFBMEQ7U0FDM0Y7YUFDQSxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FDdEYsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFUyxjQUFjLENBQUMsS0FBWSxFQUFFLEdBQU07UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsR0FBTTtRQUM5QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQVksRUFBRSxHQUFNO1FBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO3VHQTlFVSx5QkFBeUI7MkZBQXpCLHlCQUF5QiwwSkFXaEIsZ0JBQWdCLCtDQUNoQixnQkFBZ0Isd1FBUHpCLFlBQVksaUZBQ1osY0FBYyxnRENsQzNCLCt3SUF1SEE7OzJGRDNGYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEyQjVDLFFBQVE7OzBCQUNSLFFBQVE7eUNBckJjLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBRWhCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2tDLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDN0IsU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVVLFNBQVM7c0JBQXhCLEtBQUs7dUJBQUMsT0FBTztnQkFDTCxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1RhYmxlRWxlbWVudCwgVGFibGVFbGVtZW50IH0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7IE1hdENvbHVtbkRlZiwgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQXBwVGFibGUgfSBmcm9tICcuLi90YWJsZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBBc3luY1RhYmxlIH0gZnJvbSAnLi4vYXN5bmMtdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uYXYtYWN0aW9ucy1jb2x1bW4nLFxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LWFjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkFjdGlvbnNDb2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIFRhYmxlRWxlbWVudDxhbnk+IHwgQXN5bmNUYWJsZUVsZW1lbnQ8YW55PiA9IFRhYmxlRWxlbWVudDxhbnk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgX2ZvcndhcmRFdmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIF9iYWNrd2FyZEV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZXZlbnQ6IEV2ZW50OyByb3c6IFQgfT4oKTtcblxuICBAVmlld0NoaWxkKE1hdENvbHVtbkRlZikgY29sdW1uRGVmOiBNYXRDb2x1bW5EZWY7XG4gIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpIG1hdE1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICBASW5wdXQoKSBhcHBUYWJsZTogQXBwVGFibGU8YW55PiB8IEFwcEFzeW5jVGFibGU8YW55PjtcbiAgQElucHV0KCkgbWF0Q29sdW1uRGVmID0gJ2FjdGlvbnMnO1xuICBASW5wdXQoKSBzdHlsZTogJ3RhYmxlJyB8ICdtYXQtdGFibGUnID0gJ3RhYmxlJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreUVuZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1BlbmRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpcnR5SWNvbjogYm9vbGVhbiB8IHN0cmluZztcbiAgQElucHV0KCkgb3B0aW9uc1RpdGxlID0gJ0NPTU1PTi5CVE5fT1BUSU9OUyc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgY2VsbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogVCB9PjtcbiAgQElucHV0KCkgdGhyb3R0bGVUaW1lID0gMjUwO1xuXG4gIEBPdXRwdXQoKSBvcHRpb25zQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWF0VGFibGU6IE1hdFRhYmxlPGFueT4sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgYXBwVGFibGU6IEFwcFRhYmxlPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgYXBwQXN5bmNUYWJsZTogQXBwQXN5bmNUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghbWF0VGFibGUpIHRocm93IG5ldyBFcnJvcihgW2FjdGlvbnMtY29sdW1uXSB0aGlzIGNvbHVtbiBjb21wb25lbnQgbXVzdCBiZSBpbnNpZGUgYSBNYXRUYWJsZSBjb21wb25lbnRgKTtcbiAgICB0aGlzLmFwcFRhYmxlID0gYXBwVGFibGUgPz8gYXBwQXN5bmNUYWJsZTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMuc2hvd1BlbmRpbmcgPSB0aGlzLnNob3dQZW5kaW5nID8/IHRydWU7XG4gICAgdGhpcy5kaXJ0eUljb24gPSB0aGlzLmRpcnR5SWNvbiA9PT0gdHJ1ZSA/ICdzdGFyJyA6IHRoaXMuZGlydHlJY29uID09PSBmYWxzZSA/IG51bGwgOiB0aGlzLmRpcnR5SWNvbiA/PyAnc3Rhcic7XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLm1hdFRhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG5cbiAgICBpZiAoIXRoaXMuYXBwVGFibGUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtuYXYtYWN0aW9ucy1jb2x1bW5dIE5vIEFwcFRhYmxlIG9yIEFwcEFzeW5jVGFibGUgZm91bmQuIFBsZWFzZSBkZWZpbmUgYSBwcm92aWRlciBvciBzZXQgaW5wdXQgJ1thcHBUYWJsZV0nYCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5fZm9yd2FyZEV2ZW50U3ViamVjdFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUodGhpcy50aHJvdHRsZVRpbWUpIC8vIEF2b2lkIHRvbyBtYW55IGV2ZW50LCB3aGVuIGxlYXZpbmcgVGFiIGtleSBwcmVzc2VkXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyBldmVudCwgcm93IH0pID0+IHRoaXMuYXBwVGFibGUuY29uZmlybUFuZEZvcndhcmQoZXZlbnQsIHJvdyBhcyBhbnkpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5fYmFja3dhcmRFdmVudFN1YmplY3RcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMudGhyb3R0bGVUaW1lKSAvLyBBdm9pZCB0b28gbWFueSBldmVudCwgd2hlbiBsZWF2aW5nIEJhY2stVGFiIGtleSBwcmVzc2VkXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyBldmVudCwgcm93IH0pID0+IHRoaXMuYXBwVGFibGUuY29uZmlybUFuZEJhY2t3YXJkKGV2ZW50LCByb3cgYXMgYW55KSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tYXRUYWJsZS5yZW1vdmVDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICAgIHRoaXMub3B0aW9uc0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVCkge1xuICAgIHRoaXMuYXBwVGFibGUuY2FuY2VsT3JEZWxldGUoZXZlbnQsIHJvdyBhcyBhbnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpcm1BbmRGb3J3YXJkKGV2ZW50OiBFdmVudCwgcm93OiBUKSB7XG4gICAgdGhpcy5fZm9yd2FyZEV2ZW50U3ViamVjdC5uZXh0KHsgZXZlbnQsIHJvdyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maXJtQW5kQmFja3dhcmQoZXZlbnQ6IEV2ZW50LCByb3c6IFQpIHtcbiAgICB0aGlzLl9iYWNrd2FyZEV2ZW50U3ViamVjdC5uZXh0KHsgZXZlbnQsIHJvdyB9KTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm1hdENvbHVtbkRlZlwiIFtzdGlja3lFbmRdPVwic3RpY2t5RW5kXCIgW25nU3dpdGNoXT1cInN0eWxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWJsZSdcIj5cbiAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L3RoPlxuICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cbiAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgPGlvbi1zcGlubmVyIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFzaG93UGVuZGluZ1wiIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBpbnZhbGlkIG5ldyByb3cgLS0+XG4gICAgICAgIEBpZiAocm93LmlkID09PSAtMSAmJiByb3cudmFsaWRhdG9yPy5pbnZhbGlkKSB7XG4gICAgICAgICAgPCEtLSBkZWxldGUgYnV0dG9uIC0tPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSB2YWxpZCByb3cgb3IgaW52YWxpZCBleGlzdGluZyByb3cgLS0+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZm9yd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIiAoZm9jdXMpPVwiY29uZmlybUFuZEZvcndhcmQoJGV2ZW50LCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIE5PVCBlZGl0aW5nIHJvdyAtLT5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIGRpcnR5IGljb24gLS0+XG4gICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLWljb24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgKGZvY3VzKT1cImNvbmZpcm1BbmRCYWNrd2FyZCgkZXZlbnQsIHJvdylcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICB9XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdGQ+XG5cbiAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hdC10YWJsZSdcIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAoY2xpY2spPVwib3B0aW9uc0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgICAgQGlmIChyb3cuZWRpdGluZykge1xuICAgICAgICA8IS0tIHBlbmRpbmcgLS0+XG4gICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgIDxpb24tc3Bpbm5lciBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1BlbmRpbmdcIiBuYW1lPVwiZG90c1wiIGNsYXNzPVwiY2VudGVyXCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gaW52YWxpZCBuZXcgcm93IC0tPlxuICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZCkge1xuICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBmb3J3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiIChmb2N1cyk9XCJjb25maXJtQW5kRm9yd2FyZCgkZXZlbnQsIHJvdylcIj48L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gbm90IGVkaXRpbmcgcm93IC0tPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gZGlydHkgaWNvbiAtLT5cbiAgICAgICAgQGlmIChkaXJ0eUljb24gJiYgcm93LnZhbGlkYXRvcj8uZGlydHkpIHtcbiAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZGlydHlJY29uXCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cImRpcnR5LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgIChmb2N1cyk9XCJjb25maXJtQW5kQmFja3dhcmQoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jZWxsPlxuXG4gICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,116 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
2
+ import { MatColumnDef } from '@angular/material/table';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/table";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@ionic/angular";
7
+ import * as i4 from "@angular/forms";
8
+ import * as i5 from "@angular/cdk/drag-drop";
9
+ import * as i6 from "@angular/material/sort";
10
+ import * as i7 from "../../../shared/directives/autofocus.directive";
11
+ import * as i8 from "../../../shared/directives/autotitle.directive";
12
+ import * as i9 from "../../../shared/form/field.component";
13
+ import * as i10 from "../../../shared/directives/resizable/resizable.component";
14
+ import * as i11 from "../../../shared/directives/resizable/resizable.directive";
15
+ import * as i12 from "@ngx-translate/core";
16
+ import * as i13 from "../../../shared/pipes/property.pipes";
17
+ import * as i14 from "../../../shared/pipes/form.pipes";
18
+ export class AppRowField {
19
+ cd;
20
+ matTable;
21
+ columnDef;
22
+ name;
23
+ definition;
24
+ definitionFn;
25
+ headerI18n;
26
+ sortable = false;
27
+ resizable = false;
28
+ required;
29
+ readonly = false;
30
+ sticky = false;
31
+ draggable = false;
32
+ disabled;
33
+ placeholder;
34
+ compact = false;
35
+ floatLabel = 'auto';
36
+ appearance;
37
+ tabindex;
38
+ autofocus;
39
+ clearable;
40
+ chipColor = null;
41
+ // eslint-disable-next-line @angular-eslint/no-input-rename
42
+ classList;
43
+ debug = false;
44
+ logPrefix = '[row-field]';
45
+ constructor(
46
+ // protected translate: TranslateService,
47
+ cd,
48
+ // protected injector: Injector,
49
+ matTable) {
50
+ this.cd = cd;
51
+ this.matTable = matTable;
52
+ if (!matTable) {
53
+ throw new Error(`${this.logPrefix} this column component must be inside a MatTable`);
54
+ }
55
+ }
56
+ ngOnInit() {
57
+ this.cd.detectChanges();
58
+ this.matTable.addColumnDef(this.columnDef);
59
+ }
60
+ ngOnDestroy() {
61
+ this.matTable.removeColumnDef(this.columnDef);
62
+ }
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AppRowField, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatTable }], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: AppRowField, selector: "app-row-field", inputs: { name: "name", definition: "definition", definitionFn: "definitionFn", headerI18n: "headerI18n", sortable: "sortable", resizable: "resizable", required: "required", readonly: "readonly", sticky: "sticky", draggable: "draggable", disabled: "disabled", placeholder: "placeholder", compact: "compact", floatLabel: "floatLabel", appearance: "appearance", tabindex: "tabindex", autofocus: "autofocus", clearable: "clearable", chipColor: "chipColor", classList: ["class", "classList"], debug: "debug" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"name\" [sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [cdkDragDisabled]=\"sticky || !draggable\" [resizable]=\"resizable\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n @if (sortable) {\n <span mat-sort-header>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </span>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n <ng-template #headerTemplate>\n <ion-label appAutoTitle>{{ headerI18n | translate }}</ion-label>\n @if (required) {\n <ion-label color=\"danger\" [innerHTML]=\"'&nbsp;*'\"></ion-label>\n }\n </ng-template>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n @if (!readonly && row.editing) {\n <app-form-field\n [definition]=\"definition || definitionFn(row)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [formControl]=\"row.validator | formGetControl: name\"\n [placeholder]=\"placeholder\"\n [compact]=\"compact\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [tabindex]=\"tabindex\"\n [autofocus]=\"autofocus\"\n [clearable]=\"clearable\"\n [chipColor]=\"chipColor\"\n [class]=\"classList\"\n [debug]=\"debug\"\n ></app-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.currentData | propertyGet: name | valueFormat: definition || definitionFn(row) }}\n </ion-label>\n }\n </td>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i7.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "directive", type: i8.AutoTitleDirective, selector: "[appAutoTitle]" }, { kind: "component", type: i9.AppFormField, selector: "app-form-field", inputs: ["definition", "required", "readonly", "disabled", "formControl", "formControlName", "placeholder", "compact", "floatLabel", "appearance", "subscriptSizing", "tabindex", "autofocus", "clearable", "chipColor", "class", "debug"], outputs: ["keyup.enter"] }, { kind: "component", type: i10.ResizableComponent, selector: "th[resizable]", inputs: ["resizable"], outputs: ["sizeChanged"] }, { kind: "directive", type: i11.ResizableDirective, selector: "[resizable]", outputs: ["resizable", "fit"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.PropertyGetPipe, name: "propertyGet" }, { kind: "pipe", type: i13.ValueFormatPipe, name: "valueFormat" }, { kind: "pipe", type: i14.FormGetControlPipe, name: "formGetControl" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: AppRowField, decorators: [{
67
+ type: Component,
68
+ args: [{ selector: 'app-row-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container [matColumnDef]=\"name\" [sticky]=\"sticky\">\n <th mat-header-cell *matHeaderCellDef cdkDrag [cdkDragDisabled]=\"sticky || !draggable\" [resizable]=\"resizable\">\n <!-- if sortable, wrap the header with a mat-sort-header -->\n @if (sortable) {\n <span mat-sort-header>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </span>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n <ng-template #headerTemplate>\n <ion-label appAutoTitle>{{ headerI18n | translate }}</ion-label>\n @if (required) {\n <ion-label color=\"danger\" [innerHTML]=\"'&nbsp;*'\"></ion-label>\n }\n </ng-template>\n </th>\n <td mat-cell *matCellDef=\"let row\">\n @if (!readonly && row.editing) {\n <app-form-field\n [definition]=\"definition || definitionFn(row)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [formControl]=\"row.validator | formGetControl: name\"\n [placeholder]=\"placeholder\"\n [compact]=\"compact\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [tabindex]=\"tabindex\"\n [autofocus]=\"autofocus\"\n [clearable]=\"clearable\"\n [chipColor]=\"chipColor\"\n [class]=\"classList\"\n [debug]=\"debug\"\n ></app-form-field>\n } @else {\n <ion-label appAutoTitle>\n {{ row.currentData | propertyGet: name | valueFormat: definition || definitionFn(row) }}\n </ion-label>\n }\n </td>\n</ng-container>\n" }]
69
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.MatTable }], propDecorators: { columnDef: [{
70
+ type: ViewChild,
71
+ args: [MatColumnDef]
72
+ }], name: [{
73
+ type: Input
74
+ }], definition: [{
75
+ type: Input
76
+ }], definitionFn: [{
77
+ type: Input
78
+ }], headerI18n: [{
79
+ type: Input
80
+ }], sortable: [{
81
+ type: Input
82
+ }], resizable: [{
83
+ type: Input
84
+ }], required: [{
85
+ type: Input
86
+ }], readonly: [{
87
+ type: Input
88
+ }], sticky: [{
89
+ type: Input
90
+ }], draggable: [{
91
+ type: Input
92
+ }], disabled: [{
93
+ type: Input
94
+ }], placeholder: [{
95
+ type: Input
96
+ }], compact: [{
97
+ type: Input
98
+ }], floatLabel: [{
99
+ type: Input
100
+ }], appearance: [{
101
+ type: Input
102
+ }], tabindex: [{
103
+ type: Input
104
+ }], autofocus: [{
105
+ type: Input
106
+ }], clearable: [{
107
+ type: Input
108
+ }], chipColor: [{
109
+ type: Input
110
+ }], classList: [{
111
+ type: Input,
112
+ args: ['class']
113
+ }], debug: [{
114
+ type: Input
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vcm93LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9jb2x1bW4vcm93LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNILE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVNqRSxNQUFNLE9BQU8sV0FBVztJQStCVjtJQUVIO0lBaENnQixTQUFTLENBQWU7SUFFeEMsSUFBSSxDQUFVO0lBQ2QsVUFBVSxDQUFzQjtJQUNoQyxZQUFZLENBQTJFO0lBQ3ZGLFVBQVUsQ0FBUztJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFVO0lBQ2xCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsUUFBUSxDQUFVO0lBQ2xCLFdBQVcsQ0FBUztJQUNwQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFVBQVUsR0FBc0IsTUFBTSxDQUFDO0lBQ3ZDLFVBQVUsQ0FBeUI7SUFDbkMsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBVTtJQUVuQixTQUFTLENBQVU7SUFDbkIsU0FBUyxHQUFvQyxJQUFJLENBQUM7SUFDM0QsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWIsU0FBUyxHQUFHLGFBQWEsQ0FBQztJQUVwQztJQUNFLHlDQUF5QztJQUMvQixFQUFxQjtJQUMvQixnQ0FBZ0M7SUFDekIsUUFBdUI7UUFGcEIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFFeEIsYUFBUSxHQUFSLFFBQVEsQ0FBZTtRQUU5QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsa0RBQWtELENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO3VHQS9DVSxXQUFXOzJGQUFYLFdBQVcsMmxCQUNYLFlBQVksZ0RDZnpCLGtsREEyQ0E7OzJGRDdCYSxXQUFXO2tCQU52QixTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTs2R0FHdEIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUVkLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNMLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBQcmVkZWZpbmVkQ29sb3JzIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQXBwRmxvYXRMYWJlbFR5cGUsIEZvcm1GaWVsZERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQXN5bmNUYWJsZUVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yb3ctZmllbGQnLFxuICBzdHlsZVVybHM6IFsnLi9yb3ctZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvdy1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBSb3dGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZjogTWF0Q29sdW1uRGVmO1xuXG4gIEBJbnB1dCgpIG5hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb247XG4gIEBJbnB1dCgpIGRlZmluaXRpb25GbjogKHJvdzogVGFibGVFbGVtZW50PGFueT4gfCBBc3luY1RhYmxlRWxlbWVudDxhbnk+KSA9PiBGb3JtRmllbGREZWZpbml0aW9uO1xuICBASW5wdXQoKSBoZWFkZXJJMThuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlc2l6YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgc3RpY2t5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRyYWdnYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgdGFiaW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIGNsZWFyYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgY2hpcENvbG9yOiBUaGVtZVBhbGV0dGUgfCBQcmVkZWZpbmVkQ29sb3JzID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdjbGFzcycpIGNsYXNzTGlzdDogc3RyaW5nO1xuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBsb2dQcmVmaXggPSAnW3Jvdy1maWVsZF0nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAvLyBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHB1YmxpYyBtYXRUYWJsZTogTWF0VGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIW1hdFRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IHRoaXMgY29sdW1uIGNvbXBvbmVudCBtdXN0IGJlIGluc2lkZSBhIE1hdFRhYmxlYCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5tYXRUYWJsZS5hZGRDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tYXRUYWJsZS5yZW1vdmVDb2x1bW5EZWYodGhpcy5jb2x1bW5EZWYpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwibmFtZVwiIFtzdGlja3ldPVwic3RpY2t5XCI+XG4gIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2RrRHJhZyBbY2RrRHJhZ0Rpc2FibGVkXT1cInN0aWNreSB8fCAhZHJhZ2dhYmxlXCIgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIj5cbiAgICA8IS0tIGlmIHNvcnRhYmxlLCB3cmFwIHRoZSBoZWFkZXIgd2l0aCBhIG1hdC1zb3J0LWhlYWRlciAtLT5cbiAgICBAaWYgKHNvcnRhYmxlKSB7XG4gICAgICA8c3BhbiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9zcGFuPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gICAgICA8aW9uLWxhYmVsIGFwcEF1dG9UaXRsZT57eyBoZWFkZXJJMThuIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYW5nZXJcIiBbaW5uZXJIVE1MXT1cIicmbmJzcDsqJ1wiPjwvaW9uLWxhYmVsPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdGg+XG4gIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICBAaWYgKCFyZWFkb25seSAmJiByb3cuZWRpdGluZykge1xuICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgIFtkZWZpbml0aW9uXT1cImRlZmluaXRpb24gfHwgZGVmaW5pdGlvbkZuKHJvdylcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwicm93LnZhbGlkYXRvciB8IGZvcm1HZXRDb250cm9sOiBuYW1lXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2NvbXBhY3RdPVwiY29tcGFjdFwiXG4gICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgICAgIFtjaGlwQ29sb3JdPVwiY2hpcENvbG9yXCJcbiAgICAgICAgW2NsYXNzXT1cImNsYXNzTGlzdFwiXG4gICAgICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgICA+PC9hcHAtZm9ybS1maWVsZD5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxpb24tbGFiZWwgYXBwQXV0b1RpdGxlPlxuICAgICAgICB7eyByb3cuY3VycmVudERhdGEgfCBwcm9wZXJ0eUdldDogbmFtZSB8IHZhbHVlRm9ybWF0OiBkZWZpbml0aW9uIHx8IGRlZmluaXRpb25Gbihyb3cpIH19XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICB9XG4gIDwvdGQ+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==