@elderbyte/ngx-starter 18.15.2 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (576) hide show
  1. package/fesm2022/elderbyte-ngx-starter.mjs +1097 -1125
  2. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  3. package/lib/common/forms/elder-form-field-control-base.directive.d.ts +1 -1
  4. package/lib/common/forms/elder-from-field-base.d.ts +1 -1
  5. package/lib/common/forms/elder-from-field-customizable-base.d.ts +1 -1
  6. package/lib/common/forms/elder-from-field-entity-base.d.ts +1 -1
  7. package/lib/common/forms/elder-from-field-multi-entity-base.d.ts +1 -1
  8. package/lib/common/forms/form-field-base.component.d.ts +1 -1
  9. package/lib/common/forms/multi-model-base.component.d.ts +1 -1
  10. package/lib/common/forms/template-composite-control.d.ts +1 -1
  11. package/lib/common/forms/value-accessor-base.d.ts +1 -1
  12. package/lib/common/reactive-map.d.ts +1 -1
  13. package/lib/components/data-view/base/elder-data-view-base.d.ts +1 -1
  14. package/lib/components/forms/directives/base/elder-class-hostbinding-base.d.ts +1 -1
  15. package/lib/components/iframes/typed-event-message.d.ts +1 -1
  16. package/lib/components/panels/elder-panel.module.d.ts +5 -7
  17. package/lib/components/select/elder-select-base.d.ts +1 -1
  18. package/lib/components/select/multi/elder-multi-select-base.d.ts +1 -1
  19. package/lib/components/select/multi/elder-multi-select-form-field.d.ts +1 -1
  20. package/lib/components/select/single/elder-select-form-field.d.ts +1 -1
  21. package/package.json +6 -8
  22. package/src/lib/components/errors/exception-detail/elder-exception-detail.component.scss +2 -3
  23. package/src/lib/components/shell/header/elder-app-header/elder-app-header.component.scss +3 -0
  24. package/esm2022/elderbyte-ngx-starter.mjs +0 -5
  25. package/esm2022/lib/common/arrays.mjs +0 -29
  26. package/esm2022/lib/common/async/public_api.mjs +0 -2
  27. package/esm2022/lib/common/async/refreshing-entity.mjs +0 -88
  28. package/esm2022/lib/common/csv/csv-serializer.mjs +0 -55
  29. package/esm2022/lib/common/csv/csv-spec.mjs +0 -99
  30. package/esm2022/lib/common/csv/public_api.mjs +0 -3
  31. package/esm2022/lib/common/data/continuable-listing.mjs +0 -10
  32. package/esm2022/lib/common/data/data-context/data-context-active-page.mjs +0 -131
  33. package/esm2022/lib/common/data/data-context/data-context-auto-starter.mjs +0 -78
  34. package/esm2022/lib/common/data/data-context/data-context-base.mjs +0 -339
  35. package/esm2022/lib/common/data/data-context/data-context-builder.mjs +0 -245
  36. package/esm2022/lib/common/data/data-context/data-context-continuable-base.mjs +0 -67
  37. package/esm2022/lib/common/data/data-context/data-context-continuable-paged.mjs +0 -142
  38. package/esm2022/lib/common/data/data-context/data-context-continuable-token.mjs +0 -146
  39. package/esm2022/lib/common/data/data-context/data-context-life-cycle-binding.mjs +0 -32
  40. package/esm2022/lib/common/data/data-context/data-context-simple.mjs +0 -61
  41. package/esm2022/lib/common/data/data-context/data-context-source-event-binding.mjs +0 -63
  42. package/esm2022/lib/common/data/data-context/data-context-status.mjs +0 -46
  43. package/esm2022/lib/common/data/data-context/data-context.mjs +0 -30
  44. package/esm2022/lib/common/data/data-context/indexed-entities.mjs +0 -153
  45. package/esm2022/lib/common/data/data-context/mat-table-data-context-binding.mjs +0 -145
  46. package/esm2022/lib/common/data/data-context/public_api.mjs +0 -15
  47. package/esm2022/lib/common/data/datasource/data-source-adapter.mjs +0 -59
  48. package/esm2022/lib/common/data/datasource/data-source-base.mjs +0 -38
  49. package/esm2022/lib/common/data/datasource/data-source-change-event.mjs +0 -34
  50. package/esm2022/lib/common/data/datasource/data-source-processor.mjs +0 -198
  51. package/esm2022/lib/common/data/datasource/data-source.mjs +0 -23
  52. package/esm2022/lib/common/data/datasource/entity-id-util.mjs +0 -11
  53. package/esm2022/lib/common/data/datasource/fetcher/delegate-data-source.mjs +0 -127
  54. package/esm2022/lib/common/data/datasource/local/local-list-data-source.mjs +0 -153
  55. package/esm2022/lib/common/data/datasource/local/local-paged-data-source.mjs +0 -75
  56. package/esm2022/lib/common/data/datasource/patch/deep-partial-patcher.mjs +0 -58
  57. package/esm2022/lib/common/data/datasource/public_api.mjs +0 -10
  58. package/esm2022/lib/common/data/datasource/rest/public_api.mjs +0 -2
  59. package/esm2022/lib/common/data/datasource/rest/rest-client.mjs +0 -290
  60. package/esm2022/lib/common/data/entity-set-patch.mjs +0 -161
  61. package/esm2022/lib/common/data/field-comparator.mjs +0 -108
  62. package/esm2022/lib/common/data/filters/filter-commons.mjs +0 -12
  63. package/esm2022/lib/common/data/filters/filter-context.mjs +0 -135
  64. package/esm2022/lib/common/data/filters/filter-value.mjs +0 -2
  65. package/esm2022/lib/common/data/filters/filter.mjs +0 -104
  66. package/esm2022/lib/common/data/http-params-builder.mjs +0 -116
  67. package/esm2022/lib/common/data/page.mjs +0 -58
  68. package/esm2022/lib/common/data/public_api.mjs +0 -12
  69. package/esm2022/lib/common/data/required-filter-evaluator.mjs +0 -71
  70. package/esm2022/lib/common/data/sort-context.mjs +0 -73
  71. package/esm2022/lib/common/data/sort.mjs +0 -11
  72. package/esm2022/lib/common/data/token-chunk-request.mjs +0 -8
  73. package/esm2022/lib/common/enums/elder-enum-translation.service.mjs +0 -84
  74. package/esm2022/lib/common/enums/public_api.mjs +0 -2
  75. package/esm2022/lib/common/errors/exception-detail.mjs +0 -2
  76. package/esm2022/lib/common/errors/public_api.mjs +0 -3
  77. package/esm2022/lib/common/errors/standard-error-detail.mjs +0 -2
  78. package/esm2022/lib/common/exceptions/public_api.mjs +0 -2
  79. package/esm2022/lib/common/exceptions/unreachable-case-error.mjs +0 -8
  80. package/esm2022/lib/common/format/bytes-format.mjs +0 -15
  81. package/esm2022/lib/common/format/bytes-per-second-format.mjs +0 -41
  82. package/esm2022/lib/common/format/curency-format-util.mjs +0 -43
  83. package/esm2022/lib/common/format/duration-format-util.mjs +0 -44
  84. package/esm2022/lib/common/format/iso-interval-format-util.mjs +0 -111
  85. package/esm2022/lib/common/format/public_api.mjs +0 -6
  86. package/esm2022/lib/common/forms/elder-entity-value-accessor.mjs +0 -22
  87. package/esm2022/lib/common/forms/elder-form-field-control-base.directive.mjs +0 -188
  88. package/esm2022/lib/common/forms/elder-from-field-base.mjs +0 -94
  89. package/esm2022/lib/common/forms/elder-from-field-customizable-base.mjs +0 -52
  90. package/esm2022/lib/common/forms/elder-from-field-entity-base.mjs +0 -39
  91. package/esm2022/lib/common/forms/elder-from-field-multi-entity-base.mjs +0 -47
  92. package/esm2022/lib/common/forms/elder-multi-entity-value-accessor.mjs +0 -22
  93. package/esm2022/lib/common/forms/form-field-base.component.mjs +0 -111
  94. package/esm2022/lib/common/forms/multi-model-base.component.mjs +0 -32
  95. package/esm2022/lib/common/forms/public_api.mjs +0 -12
  96. package/esm2022/lib/common/forms/template-composite-control.mjs +0 -136
  97. package/esm2022/lib/common/forms/value-accessor-base.mjs +0 -146
  98. package/esm2022/lib/common/forms/view-providers.mjs +0 -30
  99. package/esm2022/lib/common/http/http-client-builder.service.mjs +0 -14
  100. package/esm2022/lib/common/http/http-client-pristine.mjs +0 -21
  101. package/esm2022/lib/common/http/public_api.mjs +0 -5
  102. package/esm2022/lib/common/http/transfer/data-transfer-base.mjs +0 -77
  103. package/esm2022/lib/common/http/transfer/data-transfer-factory.mjs +0 -106
  104. package/esm2022/lib/common/http/transfer/data-transfer-progress-aggregate.mjs +0 -60
  105. package/esm2022/lib/common/http/transfer/data-transfer-progress.mjs +0 -17
  106. package/esm2022/lib/common/http/transfer/data-transfer-state.mjs +0 -82
  107. package/esm2022/lib/common/http/transfer/data-transfer-status.mjs +0 -24
  108. package/esm2022/lib/common/http/transfer/data-transfer.mjs +0 -2
  109. package/esm2022/lib/common/http/transfer/http-data-transfer.mjs +0 -132
  110. package/esm2022/lib/common/http/transfer/public_api.mjs +0 -7
  111. package/esm2022/lib/common/http/upload/file-upload-client.mjs +0 -42
  112. package/esm2022/lib/common/i18n/entity/elder-multi-translate-loader.mjs +0 -53
  113. package/esm2022/lib/common/i18n/entity/impl/i18n-base.mjs +0 -6
  114. package/esm2022/lib/common/i18n/entity/impl/i18n-text.mjs +0 -16
  115. package/esm2022/lib/common/i18n/entity/impl/translated.mjs +0 -15
  116. package/esm2022/lib/common/i18n/entity/language-tag.mjs +0 -12
  117. package/esm2022/lib/common/i18n/entity/locale.mjs +0 -12
  118. package/esm2022/lib/common/i18n/entity/localisation-picker.mjs +0 -30
  119. package/esm2022/lib/common/i18n/entity/localized.mjs +0 -2
  120. package/esm2022/lib/common/i18n/entity/public_api.mjs +0 -10
  121. package/esm2022/lib/common/i18n/entity/translated-converter.mjs +0 -18
  122. package/esm2022/lib/common/i18n/entity/translated.mjs +0 -2
  123. package/esm2022/lib/common/i18n/public_api.mjs +0 -2
  124. package/esm2022/lib/common/json-map.mjs +0 -17
  125. package/esm2022/lib/common/objects.mjs +0 -43
  126. package/esm2022/lib/common/public_api.mjs +0 -23
  127. package/esm2022/lib/common/reactive-map.mjs +0 -69
  128. package/esm2022/lib/common/rxjs/operators/lazy-sample.mjs +0 -34
  129. package/esm2022/lib/common/rxjs/public_api.mjs +0 -2
  130. package/esm2022/lib/common/selection/public_api.mjs +0 -2
  131. package/esm2022/lib/common/selection/selection-model.mjs +0 -213
  132. package/esm2022/lib/common/sets.mjs +0 -45
  133. package/esm2022/lib/common/suggestion-provider.mjs +0 -12
  134. package/esm2022/lib/common/templates/template-slot-manager.mjs +0 -135
  135. package/esm2022/lib/common/theme-sizes.mjs +0 -2
  136. package/esm2022/lib/common/time/date-util.mjs +0 -91
  137. package/esm2022/lib/common/time/interval-coerce.mjs +0 -30
  138. package/esm2022/lib/common/time/interval.mjs +0 -442
  139. package/esm2022/lib/common/time/period-duration.mjs +0 -133
  140. package/esm2022/lib/common/time/public_api.mjs +0 -8
  141. package/esm2022/lib/common/time/temporal-plain-date-interval.mjs +0 -34
  142. package/esm2022/lib/common/time/temporal-util.mjs +0 -205
  143. package/esm2022/lib/common/time/time-util.mjs +0 -38
  144. package/esm2022/lib/common/url/elder-router.service.mjs +0 -54
  145. package/esm2022/lib/common/url/elder-url-fragment-params.service.mjs +0 -117
  146. package/esm2022/lib/common/url/public_api.mjs +0 -4
  147. package/esm2022/lib/common/url/url-query-params.mjs +0 -133
  148. package/esm2022/lib/common/utils/batcher.mjs +0 -35
  149. package/esm2022/lib/common/utils/collection-util.mjs +0 -111
  150. package/esm2022/lib/common/utils/filter-util.mjs +0 -133
  151. package/esm2022/lib/common/utils/focus-util.mjs +0 -23
  152. package/esm2022/lib/common/utils/input-utils.mjs +0 -6
  153. package/esm2022/lib/common/utils/next-number-util.mjs +0 -89
  154. package/esm2022/lib/common/utils/ng-zone-utils.mjs +0 -16
  155. package/esm2022/lib/common/utils/parse-util.mjs +0 -17
  156. package/esm2022/lib/common/utils/property-path-util.mjs +0 -28
  157. package/esm2022/lib/common/utils/public_api.mjs +0 -14
  158. package/esm2022/lib/common/utils/query-list-binding.mjs +0 -68
  159. package/esm2022/lib/common/utils/signal-input.mjs +0 -3
  160. package/esm2022/lib/common/utils/sort-util.mjs +0 -42
  161. package/esm2022/lib/common/utils/url-builder.mjs +0 -275
  162. package/esm2022/lib/common/utils/uuid-util.mjs +0 -28
  163. package/esm2022/lib/common/utils/value-wrapper.mjs +0 -19
  164. package/esm2022/lib/components/access-denied/elder-access-denied.component.mjs +0 -15
  165. package/esm2022/lib/components/access-denied/elder-access-denied.module.mjs +0 -20
  166. package/esm2022/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +0 -50
  167. package/esm2022/lib/components/auditing/elder-audit.module.mjs +0 -40
  168. package/esm2022/lib/components/auditing/i-audited-entity.mjs +0 -3
  169. package/esm2022/lib/components/badge/elder-badge/elder-badge.component.mjs +0 -162
  170. package/esm2022/lib/components/badge/elder-badge.directive.mjs +0 -124
  171. package/esm2022/lib/components/badge/elder-badge.module.mjs +0 -58
  172. package/esm2022/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +0 -13
  173. package/esm2022/lib/components/button-group/elder-button-group.module.mjs +0 -21
  174. package/esm2022/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +0 -118
  175. package/esm2022/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +0 -18
  176. package/esm2022/lib/components/card-organizer/card-organizer-data.mjs +0 -93
  177. package/esm2022/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +0 -220
  178. package/esm2022/lib/components/card-organizer/card-stack.mjs +0 -176
  179. package/esm2022/lib/components/card-organizer/elder-card-organizer.module.mjs +0 -62
  180. package/esm2022/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +0 -17
  181. package/esm2022/lib/components/cards/elder-card/elder-card.component.mjs +0 -167
  182. package/esm2022/lib/components/cards/elder-card/elder-card.module.mjs +0 -71
  183. package/esm2022/lib/components/chips/elder-chip-label.directive.mjs +0 -171
  184. package/esm2022/lib/components/chips/elder-chips.module.mjs +0 -45
  185. package/esm2022/lib/components/connectivity/elder-connectivity.module.mjs +0 -57
  186. package/esm2022/lib/components/connectivity/elder-connectivity.service.mjs +0 -61
  187. package/esm2022/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +0 -46
  188. package/esm2022/lib/components/connectivity/public_api.mjs +0 -3
  189. package/esm2022/lib/components/containers/elder-containers.module.mjs +0 -18
  190. package/esm2022/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +0 -24
  191. package/esm2022/lib/components/containers/public_api.mjs +0 -2
  192. package/esm2022/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +0 -77
  193. package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.mjs +0 -38
  194. package/esm2022/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +0 -38
  195. package/esm2022/lib/components/csv/elder-csv-stream-exporter.mjs +0 -114
  196. package/esm2022/lib/components/csv/elder-csv.module.mjs +0 -24
  197. package/esm2022/lib/components/currency/elder-currency.module.mjs +0 -18
  198. package/esm2022/lib/components/currency/elder-currency.pipe.mjs +0 -37
  199. package/esm2022/lib/components/currency/model/currency-code.mjs +0 -38
  200. package/esm2022/lib/components/currency/model/currency-unit-registry.mjs +0 -30
  201. package/esm2022/lib/components/currency/model/currency-unit.mjs +0 -10
  202. package/esm2022/lib/components/currency/model/currency.mjs +0 -15
  203. package/esm2022/lib/components/currency/public_api.mjs +0 -7
  204. package/esm2022/lib/components/data-transfer/elder-data-transfer.module.mjs +0 -91
  205. package/esm2022/lib/components/data-transfer/elder-data-transfer.service.mjs +0 -93
  206. package/esm2022/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +0 -102
  207. package/esm2022/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +0 -34
  208. package/esm2022/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +0 -57
  209. package/esm2022/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +0 -34
  210. package/esm2022/lib/components/data-view/base/data-view-options-provider-binding.mjs +0 -69
  211. package/esm2022/lib/components/data-view/base/elder-data-view-base.mjs +0 -265
  212. package/esm2022/lib/components/data-view/base/elder-data-view-options-provider.mjs +0 -44
  213. package/esm2022/lib/components/data-view/base/elder-data-view-options.mjs +0 -45
  214. package/esm2022/lib/components/data-view/base/elder-data-view.mjs +0 -3
  215. package/esm2022/lib/components/data-view/base/public_api.mjs +0 -6
  216. package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-context.mjs +0 -30
  217. package/esm2022/lib/components/data-view/common/composite-sort/composite-sort-dc.directive.mjs +0 -55
  218. package/esm2022/lib/components/data-view/common/composite-sort/composite-sort.mjs +0 -68
  219. package/esm2022/lib/components/data-view/common/composite-sort/elder-composite-sort/elder-composite-sort.component.mjs +0 -101
  220. package/esm2022/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +0 -45
  221. package/esm2022/lib/components/data-view/common/elder-data-common.module.mjs +0 -125
  222. package/esm2022/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +0 -140
  223. package/esm2022/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +0 -100
  224. package/esm2022/lib/components/data-view/common/selection/data-context-selection.directive.mjs +0 -103
  225. package/esm2022/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +0 -36
  226. package/esm2022/lib/components/data-view/common/selection/master-selection-state.mjs +0 -10
  227. package/esm2022/lib/components/data-view/elder-data-view-interaction-mode.mjs +0 -2
  228. package/esm2022/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +0 -345
  229. package/esm2022/lib/components/data-view/grid/elder-grid.module.mjs +0 -91
  230. package/esm2022/lib/components/data-view/master-detail/elder-detail-dialog/elder-detail-dialog.component.mjs +0 -75
  231. package/esm2022/lib/components/data-view/master-detail/elder-detail.directive.mjs +0 -50
  232. package/esm2022/lib/components/data-view/master-detail/elder-master-activation.directive.mjs +0 -79
  233. package/esm2022/lib/components/data-view/master-detail/elder-master-detail-mode.mjs +0 -2
  234. package/esm2022/lib/components/data-view/master-detail/elder-master-detail-provider.mjs +0 -20
  235. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.component.mjs +0 -119
  236. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.module.mjs +0 -116
  237. package/esm2022/lib/components/data-view/master-detail/elder-master-detail.service.mjs +0 -89
  238. package/esm2022/lib/components/data-view/master-detail/elder-master.directive.mjs +0 -23
  239. package/esm2022/lib/components/data-view/master-detail/master-detail-activation-event.mjs +0 -12
  240. package/esm2022/lib/components/data-view/public_api.mjs +0 -7
  241. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +0 -18
  242. package/esm2022/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +0 -104
  243. package/esm2022/lib/components/data-view/table/activation/activation-event-source.mjs +0 -7
  244. package/esm2022/lib/components/data-view/table/activation/elder-activation-context.mjs +0 -2
  245. package/esm2022/lib/components/data-view/table/activation/elder-delete-active.directive.mjs +0 -114
  246. package/esm2022/lib/components/data-view/table/activation/elder-table-activation-options.mjs +0 -2
  247. package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +0 -315
  248. package/esm2022/lib/components/data-view/table/activation/item-activation-event.mjs +0 -8
  249. package/esm2022/lib/components/data-view/table/activation/item-activation-options.mjs +0 -7
  250. package/esm2022/lib/components/data-view/table/activation/public_api.mjs +0 -8
  251. package/esm2022/lib/components/data-view/table/elder-center-cell.directive.mjs +0 -23
  252. package/esm2022/lib/components/data-view/table/elder-number-cell.directive.mjs +0 -30
  253. package/esm2022/lib/components/data-view/table/elder-paginator-intl.mjs +0 -73
  254. package/esm2022/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +0 -21
  255. package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +0 -338
  256. package/esm2022/lib/components/data-view/table/elder-table-column.directive.mjs +0 -18
  257. package/esm2022/lib/components/data-view/table/elder-table-extension.directive.mjs +0 -92
  258. package/esm2022/lib/components/data-view/table/elder-table-root.directive.mjs +0 -26
  259. package/esm2022/lib/components/data-view/table/elder-table-row.directive.mjs +0 -156
  260. package/esm2022/lib/components/data-view/table/elder-table-sort.directive.mjs +0 -23
  261. package/esm2022/lib/components/data-view/table/elder-table.module.mjs +0 -184
  262. package/esm2022/lib/components/data-view/table/model/elder-column-layout.mjs +0 -110
  263. package/esm2022/lib/components/data-view/table/model/elder-table-model-cdk-table-binding.mjs +0 -85
  264. package/esm2022/lib/components/data-view/table/model/elder-table-model-provider.mjs +0 -40
  265. package/esm2022/lib/components/data-view/table/model/elder-table-model-query-group.mjs +0 -89
  266. package/esm2022/lib/components/data-view/table/model/elder-table-model.mjs +0 -167
  267. package/esm2022/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +0 -37
  268. package/esm2022/lib/components/dialogs/elder-dialog-config.mjs +0 -3
  269. package/esm2022/lib/components/dialogs/elder-dialog.module.mjs +0 -87
  270. package/esm2022/lib/components/dialogs/elder-dialog.service.mjs +0 -199
  271. package/esm2022/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +0 -57
  272. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +0 -43
  273. package/esm2022/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +0 -47
  274. package/esm2022/lib/components/errors/elder-error.module.mjs +0 -39
  275. package/esm2022/lib/components/errors/error-util.mjs +0 -94
  276. package/esm2022/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +0 -77
  277. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +0 -55
  278. package/esm2022/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +0 -35
  279. package/esm2022/lib/components/files/blob-url.mjs +0 -10
  280. package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +0 -224
  281. package/esm2022/lib/components/files/drag-n-drop/elder-drop-zone/elder-drop-zone.component.mjs +0 -44
  282. package/esm2022/lib/components/files/drag-n-drop/global-drag-drop.service.mjs +0 -84
  283. package/esm2022/lib/components/files/elder-file-drop-zone.directive.mjs +0 -145
  284. package/esm2022/lib/components/files/elder-file-select-input.mjs +0 -119
  285. package/esm2022/lib/components/files/elder-file-select.directive.mjs +0 -167
  286. package/esm2022/lib/components/files/elder-file.module.mjs +0 -85
  287. package/esm2022/lib/components/files/file-select/file-select.component.mjs +0 -54
  288. package/esm2022/lib/components/files/file-system-api.mjs +0 -100
  289. package/esm2022/lib/components/files/file-upload/file-upload.component.mjs +0 -80
  290. package/esm2022/lib/components/files/listing/file-entry.mjs +0 -92
  291. package/esm2022/lib/components/files/listing/file-listing-rx.mjs +0 -64
  292. package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +0 -35
  293. package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +0 -76
  294. package/esm2022/lib/components/forms/clipboard/elder-clipboard.service.mjs +0 -51
  295. package/esm2022/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +0 -34
  296. package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox-controller.mjs +0 -97
  297. package/esm2022/lib/components/forms/directives/checkbox/elder-single-state-checkbox.directive.mjs +0 -50
  298. package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox-controller.mjs +0 -102
  299. package/esm2022/lib/components/forms/directives/checkbox/elder-triple-state-checkbox.directive.mjs +0 -50
  300. package/esm2022/lib/components/forms/directives/elder-clipboard-put.directive.mjs +0 -38
  301. package/esm2022/lib/components/forms/directives/elder-delayed-focus.directive.mjs +0 -43
  302. package/esm2022/lib/components/forms/directives/elder-form-field-dense.directive.mjs +0 -83
  303. package/esm2022/lib/components/forms/directives/elder-form-field-label.directive.mjs +0 -84
  304. package/esm2022/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +0 -42
  305. package/esm2022/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +0 -35
  306. package/esm2022/lib/components/forms/directives/elder-forms-directives.module.mjs +0 -142
  307. package/esm2022/lib/components/forms/directives/elder-initial-value.directive.mjs +0 -67
  308. package/esm2022/lib/components/forms/directives/elder-input-pattern.directive.mjs +0 -78
  309. package/esm2022/lib/components/forms/directives/elder-key-event.directive.mjs +0 -112
  310. package/esm2022/lib/components/forms/directives/elder-next-focusable.directive.mjs +0 -102
  311. package/esm2022/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +0 -37
  312. package/esm2022/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +0 -30
  313. package/esm2022/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +0 -161
  314. package/esm2022/lib/components/forms/directives/elder-touched.directive.mjs +0 -28
  315. package/esm2022/lib/components/forms/directives/validation/elder-validation-error.directive.mjs +0 -88
  316. package/esm2022/lib/components/forms/directives/validation/strategies/common-validation-message-strategy.mjs +0 -47
  317. package/esm2022/lib/components/forms/directives/validation/strategies/dynamic-validation-message-strategy.mjs +0 -48
  318. package/esm2022/lib/components/forms/directives/validation/strategies/fallback-validation-message-strategy.mjs +0 -6
  319. package/esm2022/lib/components/forms/directives/validation/validation-message-renderer.service.mjs +0 -53
  320. package/esm2022/lib/components/forms/directives/validation/validation-message-strategy.mjs +0 -2
  321. package/esm2022/lib/components/forms/directives/validation/validators/elder-max.validator.mjs +0 -36
  322. package/esm2022/lib/components/forms/directives/validation/validators/elder-min.validator.mjs +0 -36
  323. package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +0 -112
  324. package/esm2022/lib/components/forms/directives/validation/validators/elder-required-ignore-zero.validator.mjs +0 -69
  325. package/esm2022/lib/components/forms/elder-forms.module.mjs +0 -22
  326. package/esm2022/lib/components/forms/public_api.mjs +0 -6
  327. package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +0 -73
  328. package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +0 -42
  329. package/esm2022/lib/components/forms/search/domain/input/input-value.mjs +0 -2
  330. package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +0 -88
  331. package/esm2022/lib/components/forms/search/domain/input/search-input.mjs +0 -2
  332. package/esm2022/lib/components/forms/search/domain/input/simple-search-input.mjs +0 -50
  333. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +0 -92
  334. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +0 -166
  335. package/esm2022/lib/components/forms/search/domain/url/search-query-params-parser.mjs +0 -81
  336. package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +0 -256
  337. package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +0 -258
  338. package/esm2022/lib/components/forms/search/elder-search.module.mjs +0 -115
  339. package/esm2022/lib/components/forms/search/filter/default-input-filter-converter.mjs +0 -45
  340. package/esm2022/lib/components/forms/search/filter/input-filter-converter.mjs +0 -2
  341. package/esm2022/lib/components/forms/search/search-box/elder-search-box.component.mjs +0 -131
  342. package/esm2022/lib/components/forms/search/search-box/elder-search-panel.component.mjs +0 -24
  343. package/esm2022/lib/components/global-search/elder-global-search.component.mjs +0 -136
  344. package/esm2022/lib/components/global-search/elder-global-search.module.mjs +0 -47
  345. package/esm2022/lib/components/global-search/elder-global-search.service.mjs +0 -95
  346. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +0 -90
  347. package/esm2022/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +0 -19
  348. package/esm2022/lib/components/graph/elder-progress-bar/sub-bar.mjs +0 -7
  349. package/esm2022/lib/components/graph/public_api.mjs +0 -2
  350. package/esm2022/lib/components/headers/elder-header/elder-header.component.mjs +0 -29
  351. package/esm2022/lib/components/headers/elder-header.module.mjs +0 -42
  352. package/esm2022/lib/components/http-support/elder-http-client.service.mjs +0 -63
  353. package/esm2022/lib/components/http-support/public_api.mjs +0 -2
  354. package/esm2022/lib/components/i18n/entities/elder-i18n-entities.module.mjs +0 -125
  355. package/esm2022/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +0 -157
  356. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +0 -39
  357. package/esm2022/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +0 -30
  358. package/esm2022/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +0 -177
  359. package/esm2022/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +0 -31
  360. package/esm2022/lib/components/i18n/entities/elder-localized-texts.directive.mjs +0 -56
  361. package/esm2022/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +0 -40
  362. package/esm2022/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +0 -31
  363. package/esm2022/lib/components/i18n/entities/picker/localisation-picker.service.mjs +0 -74
  364. package/esm2022/lib/components/i18n/language/elder-language-config.mjs +0 -3
  365. package/esm2022/lib/components/i18n/language/elder-language-interceptor.mjs +0 -70
  366. package/esm2022/lib/components/i18n/language/elder-language.module.mjs +0 -73
  367. package/esm2022/lib/components/i18n/language/elder-language.service.mjs +0 -120
  368. package/esm2022/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +0 -79
  369. package/esm2022/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +0 -53
  370. package/esm2022/lib/components/i18n/public_api.mjs +0 -4
  371. package/esm2022/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +0 -129
  372. package/esm2022/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +0 -141
  373. package/esm2022/lib/components/iframes/elder-iframe.module.mjs +0 -106
  374. package/esm2022/lib/components/iframes/iframe-close.directive.mjs +0 -41
  375. package/esm2022/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +0 -51
  376. package/esm2022/lib/components/iframes/iframe-host/iframe-host.component.mjs +0 -144
  377. package/esm2022/lib/components/iframes/iframe-messages.mjs +0 -5
  378. package/esm2022/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +0 -80
  379. package/esm2022/lib/components/iframes/iframe.service.mjs +0 -54
  380. package/esm2022/lib/components/iframes/typed-event-message.mjs +0 -42
  381. package/esm2022/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +0 -65
  382. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +0 -166
  383. package/esm2022/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +0 -20
  384. package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +0 -9
  385. package/esm2022/lib/components/input/autocomplete/elder-autocomplete/elder-suggestion-panel.component.mjs +0 -233
  386. package/esm2022/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +0 -202
  387. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +0 -120
  388. package/esm2022/lib/components/input/autocomplete/elder-autocomplete.module.mjs +0 -61
  389. package/esm2022/lib/components/input/autocomplete/many/word-position-finder.mjs +0 -58
  390. package/esm2022/lib/components/input/public_api.mjs +0 -2
  391. package/esm2022/lib/components/labels/elder-labels.module.mjs +0 -50
  392. package/esm2022/lib/components/labels/labels-input/labels-input.component.mjs +0 -239
  393. package/esm2022/lib/components/measures/dimensions/dimensions-input/elder-dimensions-input.component.mjs +0 -268
  394. package/esm2022/lib/components/measures/dimensions/validation/elder-required-dimensions.validator.mjs +0 -92
  395. package/esm2022/lib/components/measures/directives/elder-unit-select.directive.mjs +0 -65
  396. package/esm2022/lib/components/measures/elder-measures.module.mjs +0 -130
  397. package/esm2022/lib/components/measures/elder-quantity-transform.pipe.mjs +0 -31
  398. package/esm2022/lib/components/measures/elder-quantity.pipe.mjs +0 -43
  399. package/esm2022/lib/components/measures/elder-unit.service.mjs +0 -113
  400. package/esm2022/lib/components/measures/model/dimensions.mjs +0 -17
  401. package/esm2022/lib/components/measures/model/quantity.mjs +0 -12
  402. package/esm2022/lib/components/measures/model/unit-dimension.mjs +0 -14
  403. package/esm2022/lib/components/measures/model/unit-registry.mjs +0 -81
  404. package/esm2022/lib/components/measures/model/unit.mjs +0 -143
  405. package/esm2022/lib/components/measures/public_api.mjs +0 -8
  406. package/esm2022/lib/components/measures/quantity-input/quantity-form-field/elder-quantity-form-field.component.mjs +0 -44
  407. package/esm2022/lib/components/measures/quantity-input/quantity-input-control/elder-quantity-input-control.component.mjs +0 -173
  408. package/esm2022/lib/components/measures/quantity-input/validation/elder-quantity-range.validator.mjs +0 -84
  409. package/esm2022/lib/components/measures/quantity-input/validation/elder-required-quantity.validator.mjs +0 -73
  410. package/esm2022/lib/components/measures/util/elder-quantity.service.mjs +0 -341
  411. package/esm2022/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +0 -184
  412. package/esm2022/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +0 -59
  413. package/esm2022/lib/components/navigation/bread-crumbs/path/path.mjs +0 -37
  414. package/esm2022/lib/components/navigation/nav/elder-nav.module.mjs +0 -60
  415. package/esm2022/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +0 -121
  416. package/esm2022/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +0 -174
  417. package/esm2022/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +0 -68
  418. package/esm2022/lib/components/navigation/public_api.mjs +0 -4
  419. package/esm2022/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +0 -48
  420. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.module.mjs +0 -83
  421. package/esm2022/lib/components/navigation/toolbar/elder-toolbar.service.mjs +0 -68
  422. package/esm2022/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +0 -71
  423. package/esm2022/lib/components/navigation/toolbar/toolbar-column-position.mjs +0 -2
  424. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +0 -39
  425. package/esm2022/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +0 -86
  426. package/esm2022/lib/components/overlays/elder-overlay-origin.directive.mjs +0 -44
  427. package/esm2022/lib/components/overlays/elder-overlay-ref.mjs +0 -41
  428. package/esm2022/lib/components/overlays/elder-overlay-trigger.directive.mjs +0 -73
  429. package/esm2022/lib/components/overlays/elder-overlay.component.mjs +0 -232
  430. package/esm2022/lib/components/overlays/elder-overlay.module.mjs +0 -35
  431. package/esm2022/lib/components/page/exit-guard/page-exit-guard.module.mjs +0 -20
  432. package/esm2022/lib/components/page/exit-guard/page-exit-guard.service.mjs +0 -129
  433. package/esm2022/lib/components/page/exit-guard/page-exit-lock/page-exit-lock.component.mjs +0 -25
  434. package/esm2022/lib/components/page/exit-guard/page-exit-lock-indicator/page-exit-lock-indicator.component.mjs +0 -29
  435. package/esm2022/lib/components/page/exit-guard/page-exit-lock-overview/page-exit-lock-overview.component.mjs +0 -26
  436. package/esm2022/lib/components/page/public_api.mjs +0 -2
  437. package/esm2022/lib/components/panels/card-panel/elder-card-panel.component.mjs +0 -12
  438. package/esm2022/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +0 -12
  439. package/esm2022/lib/components/panels/elder-panel.module.mjs +0 -60
  440. package/esm2022/lib/components/panels/flat/elder-panel.component.mjs +0 -26
  441. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel-trigger.directive.mjs +0 -70
  442. package/esm2022/lib/components/panels/toggle-panel/elder-toggle-panel.component.mjs +0 -74
  443. package/esm2022/lib/components/public_api.mjs +0 -43
  444. package/esm2022/lib/components/scrollbar/elder-scrollbar.directive.mjs +0 -63
  445. package/esm2022/lib/components/scrollbar/elder-scrollbar.module.mjs +0 -17
  446. package/esm2022/lib/components/select/auto/elder-auto-select-first.directive.mjs +0 -95
  447. package/esm2022/lib/components/select/auto/elder-auto-select-first.service.mjs +0 -38
  448. package/esm2022/lib/components/select/auto/elder-auto-select-suggest-first.directive.mjs +0 -64
  449. package/esm2022/lib/components/select/auto/elder-select-first-util.mjs +0 -55
  450. package/esm2022/lib/components/select/elder-select-base.mjs +0 -333
  451. package/esm2022/lib/components/select/elder-select-chip.directive.mjs +0 -48
  452. package/esm2022/lib/components/select/elder-select-on-tab.directive.mjs +0 -139
  453. package/esm2022/lib/components/select/elder-select-value.directive.mjs +0 -18
  454. package/esm2022/lib/components/select/elder-select.module.mjs +0 -229
  455. package/esm2022/lib/components/select/filter/elder-chip-filter-style-resolver.mjs +0 -74
  456. package/esm2022/lib/components/select/filter/elder-chips-include-exclude.directive.mjs +0 -148
  457. package/esm2022/lib/components/select/filter/elder-filter-chip-template/elder-filter-chip-template.component.mjs +0 -51
  458. package/esm2022/lib/components/select/filter/include-exclude-model-filter-adapter.mjs +0 -61
  459. package/esm2022/lib/components/select/filter/include-exclude-selection-model.mjs +0 -160
  460. package/esm2022/lib/components/select/multi/elder-chip-select-option/elder-select-option.component.mjs +0 -16
  461. package/esm2022/lib/components/select/multi/elder-multi-select-base.mjs +0 -386
  462. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/chip-options-provider.mjs +0 -87
  463. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/elder-multi-select-chip-options.component.mjs +0 -263
  464. package/esm2022/lib/components/select/multi/elder-multi-select-chip-options/select-option-chip-spec.mjs +0 -15
  465. package/esm2022/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +0 -274
  466. package/esm2022/lib/components/select/multi/elder-multi-select-chips/select-chip-spec.mjs +0 -15
  467. package/esm2022/lib/components/select/multi/elder-multi-select-form-field.mjs +0 -86
  468. package/esm2022/lib/components/select/multi/elder-mutli-select-all-directive.mjs +0 -34
  469. package/esm2022/lib/components/select/multi/elder-search-include-exclude.directive.mjs +0 -146
  470. package/esm2022/lib/components/select/multi/public_api.mjs +0 -5
  471. package/esm2022/lib/components/select/popup/selection-model-popup-trigger-adapter.directive.mjs +0 -89
  472. package/esm2022/lib/components/select/popup/selection-model-popup.directive.mjs +0 -126
  473. package/esm2022/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +0 -58
  474. package/esm2022/lib/components/select/public_api.mjs +0 -5
  475. package/esm2022/lib/components/select/single/elder-clear-select.directive.mjs +0 -60
  476. package/esm2022/lib/components/select/single/elder-select/elder-select.component.mjs +0 -444
  477. package/esm2022/lib/components/select/single/elder-select-form-field.mjs +0 -45
  478. package/esm2022/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +0 -148
  479. package/esm2022/lib/components/select-chip-list/elder-chip-list-select.module.mjs +0 -46
  480. package/esm2022/lib/components/shell/drawers/drawer-outlet-binding.mjs +0 -64
  481. package/esm2022/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +0 -119
  482. package/esm2022/lib/components/shell/drawers/elder-router-outlet.service.mjs +0 -128
  483. package/esm2022/lib/components/shell/elder-shell-slot.directive.mjs +0 -47
  484. package/esm2022/lib/components/shell/elder-shell.module.mjs +0 -101
  485. package/esm2022/lib/components/shell/elder-shell.service.mjs +0 -142
  486. package/esm2022/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +0 -75
  487. package/esm2022/lib/components/shell/shell/elder-shell.component.mjs +0 -238
  488. package/esm2022/lib/components/shell/shell-content-slot.mjs +0 -2
  489. package/esm2022/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +0 -137
  490. package/esm2022/lib/components/tabs/elder-tab/elder-tab.directive.mjs +0 -26
  491. package/esm2022/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +0 -257
  492. package/esm2022/lib/components/tabs/elder-tab.module.mjs +0 -21
  493. package/esm2022/lib/components/theme/elder-theme-applier.directive.mjs +0 -62
  494. package/esm2022/lib/components/theme/elder-theme-preference.service.mjs +0 -73
  495. package/esm2022/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +0 -74
  496. package/esm2022/lib/components/theme/elder-theme.directive.mjs +0 -64
  497. package/esm2022/lib/components/theme/elder-theme.module.mjs +0 -68
  498. package/esm2022/lib/components/theme/elder-theme.service.mjs +0 -121
  499. package/esm2022/lib/components/theme/known-elder-themes.mjs +0 -6
  500. package/esm2022/lib/components/theme/public_api.mjs +0 -2
  501. package/esm2022/lib/components/theme/theme-spec.mjs +0 -11
  502. package/esm2022/lib/components/time/date-adapters/custom-date-adapter.mjs +0 -43
  503. package/esm2022/lib/components/time/date-formats/locale-date-formats.mjs +0 -28
  504. package/esm2022/lib/components/time/duration/duration-bucket.mjs +0 -68
  505. package/esm2022/lib/components/time/duration/duration-format.mjs +0 -271
  506. package/esm2022/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +0 -110
  507. package/esm2022/lib/components/time/duration/iso-duration-str.mjs +0 -2
  508. package/esm2022/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +0 -96
  509. package/esm2022/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +0 -98
  510. package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +0 -217
  511. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-anchor-controller.mjs +0 -21
  512. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-calendar-controller.mjs +0 -24
  513. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-controller.mjs +0 -43
  514. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-form-controller.mjs +0 -69
  515. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-select-controller.mjs +0 -117
  516. package/esm2022/lib/components/time/elder-interval-picker/controller/interval-shift-controller.mjs +0 -44
  517. package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +0 -198
  518. package/esm2022/lib/components/time/elder-interval-picker/interval-picker-binding/elder-interval-picker-binding.directive.mjs +0 -41
  519. package/esm2022/lib/components/time/elder-interval-picker/interval-picker-toggle/elder-interval-picker-toggle.component.mjs +0 -144
  520. package/esm2022/lib/components/time/elder-interval-picker/manager/interval-picker-state-manager.mjs +0 -93
  521. package/esm2022/lib/components/time/elder-interval-picker/model/anchor-state.mjs +0 -54
  522. package/esm2022/lib/components/time/elder-interval-picker/model/interval-state.mjs +0 -37
  523. package/esm2022/lib/components/time/elder-interval-picker/model/smart-shift-state.mjs +0 -10
  524. package/esm2022/lib/components/time/elder-interval-picker/presenter/interval-picker-presenter.mjs +0 -96
  525. package/esm2022/lib/components/time/elder-interval-picker/util/interval-picker-util.mjs +0 -194
  526. package/esm2022/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +0 -268
  527. package/esm2022/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +0 -85
  528. package/esm2022/lib/components/time/elder-time.module.mjs +0 -154
  529. package/esm2022/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +0 -118
  530. package/esm2022/lib/components/time/period/period-bucket.mjs +0 -31
  531. package/esm2022/lib/components/time/period/period-format.mjs +0 -89
  532. package/esm2022/lib/components/time/pipes/to-iso-date-string.pipe.mjs +0 -39
  533. package/esm2022/lib/components/time/public_api.mjs +0 -8
  534. package/esm2022/lib/components/toasts/elder-toast.module.mjs +0 -36
  535. package/esm2022/lib/components/toasts/elder-toast.service.mjs +0 -170
  536. package/esm2022/lib/components/toasts/standard-toast/standard-toast.component.mjs +0 -80
  537. package/esm2022/lib/components/toasts/toast-type.mjs +0 -7
  538. package/esm2022/lib/components/toasts/toast.mjs +0 -2
  539. package/esm2022/lib/components/url-fragment/elder-url-fragment.mjs +0 -9
  540. package/esm2022/lib/components/url-fragment/elder-url-fragment.module.mjs +0 -52
  541. package/esm2022/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +0 -95
  542. package/esm2022/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +0 -64
  543. package/esm2022/lib/components/viewers/elder-viewers.module.mjs +0 -18
  544. package/esm2022/lib/features/event-source/fetch/public_api.mjs +0 -3
  545. package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.mjs +0 -219
  546. package/esm2022/lib/features/event-source/fetch/reactive-fetch-event-source.service.mjs +0 -53
  547. package/esm2022/lib/features/event-source/public_api.mjs +0 -3
  548. package/esm2022/lib/features/event-source/standard/elder-event-source.service.mjs +0 -56
  549. package/esm2022/lib/features/event-source/standard/public_api.mjs +0 -3
  550. package/esm2022/lib/features/event-source/standard/reactive-event-source.mjs +0 -199
  551. package/esm2022/lib/features/kafent/access-token-provider.mjs +0 -20
  552. package/esm2022/lib/features/kafent/kafent-config.mjs +0 -24
  553. package/esm2022/lib/features/kafent/kafent-event-stream.mjs +0 -25
  554. package/esm2022/lib/features/kafent/kafent-event.mjs +0 -3
  555. package/esm2022/lib/features/kafent/kafent-event.service.mjs +0 -115
  556. package/esm2022/lib/features/kafent/kafent-live-event-request.mjs +0 -2
  557. package/esm2022/lib/features/kafent/kafent.module.mjs +0 -58
  558. package/esm2022/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +0 -131
  559. package/esm2022/lib/features/kafent/sse/kafent-topic-sse.mjs +0 -97
  560. package/esm2022/lib/features/public_api.mjs +0 -3
  561. package/esm2022/lib/pipes/bytes.pipe.mjs +0 -27
  562. package/esm2022/lib/pipes/elder-pipes.module.mjs +0 -114
  563. package/esm2022/lib/pipes/elder-repeat.pipe.mjs +0 -24
  564. package/esm2022/lib/pipes/elder-round.pipe.mjs +0 -36
  565. package/esm2022/lib/pipes/elder-safe-url.pipe.mjs +0 -21
  566. package/esm2022/lib/pipes/elder-truncate.pipe.mjs +0 -41
  567. package/esm2022/lib/pipes/iso-duration.pipe.mjs +0 -41
  568. package/esm2022/lib/pipes/iso-interval-parse.pipe.mjs +0 -49
  569. package/esm2022/lib/pipes/iso-interval.pipe.mjs +0 -62
  570. package/esm2022/lib/pipes/public_api.mjs +0 -2
  571. package/esm2022/lib/pipes/time-ago.pipe.mjs +0 -110
  572. package/esm2022/lib/pipes/time-duration.pipe.mjs +0 -101
  573. package/esm2022/lib/pipes/weight.pipe.mjs +0 -60
  574. package/esm2022/public_api.mjs +0 -8
  575. package/lib/components/panels/flat/elder-panel.component.d.ts +0 -15
  576. package/src/lib/components/panels/flat/elder-panel.component.scss +0 -3
@@ -1,84 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import { LoggerFactory } from '@elderbyte/ts-logger';
3
- import { NG_VALIDATORS } from '@angular/forms';
4
- import { coerceNumberProperty } from '@angular/cdk/coercion';
5
- import * as i0 from "@angular/core";
6
- // eslint-disable-next-line @angular-eslint/directive-class-suffix
7
- export class ElderQuantityRangeValidator {
8
- constructor() {
9
- /***************************************************************************
10
- * *
11
- * Fields *
12
- * *
13
- **************************************************************************/
14
- this.log = LoggerFactory.getLogger(this.constructor.name);
15
- }
16
- /***************************************************************************
17
- * *
18
- * Properties *
19
- * *
20
- **************************************************************************/
21
- // TODO Maybe support minQuantity / maxQuantity
22
- /**
23
- * Minimum number allowed.
24
- */
25
- set min(value) {
26
- this._min = coerceNumberProperty(value);
27
- }
28
- get min() {
29
- return this._min;
30
- }
31
- /**
32
- * Maximum number allowed.
33
- */
34
- set max(value) {
35
- this._max = coerceNumberProperty(value);
36
- }
37
- get max() {
38
- return this._max;
39
- }
40
- /***************************************************************************
41
- * *
42
- * Public API *
43
- * *
44
- **************************************************************************/
45
- validate(c) {
46
- let result = {};
47
- const qty = c.value;
48
- if (this._min != null && !this.isAtLeast(qty, this._min)) {
49
- result = Object.assign(result, { min: { min: this._min, actual: qty?.value } });
50
- }
51
- if (this._max != null && !this.isAtMost(qty, this._max)) {
52
- result = Object.assign(result, { max: { max: this._max, actual: qty?.value } });
53
- }
54
- return result;
55
- }
56
- /***************************************************************************
57
- * *
58
- * Private Methods *
59
- * *
60
- **************************************************************************/
61
- isAtLeast(quantity, minValue) {
62
- return quantity?.value >= minValue;
63
- }
64
- isAtMost(quantity, maxValue) {
65
- return quantity?.value <= maxValue;
66
- }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityRangeValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
68
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElderQuantityRangeValidator, isStandalone: true, selector: "elder-quantity-input[min][formControl],elder-quantity-input[min][formControlName],elder-quantity-input[min][ngModel],elder-quantity-input[max][formControl],elder-quantity-input[max][formControlName],elder-quantity-input[max][ngModel]", inputs: { min: "min", max: "max" }, providers: [{ provide: NG_VALIDATORS, useExisting: ElderQuantityRangeValidator, multi: true }], ngImport: i0 }); }
69
- }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityRangeValidator, decorators: [{
71
- type: Directive,
72
- args: [{
73
- // eslint-disable-next-line @angular-eslint/directive-selector
74
- selector: 'elder-quantity-input[min][formControl],elder-quantity-input[min][formControlName],elder-quantity-input[min][ngModel],' +
75
- 'elder-quantity-input[max][formControl],elder-quantity-input[max][formControlName],elder-quantity-input[max][ngModel]',
76
- providers: [{ provide: NG_VALIDATORS, useExisting: ElderQuantityRangeValidator, multi: true }],
77
- standalone: true,
78
- }]
79
- }], propDecorators: { min: [{
80
- type: Input
81
- }], max: [{
82
- type: Input
83
- }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcXVhbnRpdHktcmFuZ2UudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9tZWFzdXJlcy9xdWFudGl0eS1pbnB1dC92YWxpZGF0aW9uL2VsZGVyLXF1YW50aXR5LXJhbmdlLnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFtQixhQUFhLEVBQStCLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFlLE1BQU0sdUJBQXVCLENBQUE7O0FBVXpFLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sMkJBQTJCO0lBVHhDO1FBVUU7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7S0FzRXRFO0lBakVDOzs7O2dGQUk0RTtJQUU1RSwrQ0FBK0M7SUFFL0M7O09BRUc7SUFDSCxJQUNXLEdBQUcsQ0FBQyxLQUFrQjtRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDVyxHQUFHLENBQUMsS0FBa0I7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQsSUFBVyxHQUFHO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLENBQWtCO1FBQ2hDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFpQixDQUFBO1FBRS9CLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNqRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDcEQsT0FBTyxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQTtJQUNwQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWtCLEVBQUUsUUFBZ0I7UUFDbkQsT0FBTyxRQUFRLEVBQUUsS0FBSyxJQUFJLFFBQVEsQ0FBQTtJQUNwQyxDQUFDOytHQTVFVSwyQkFBMkI7bUdBQTNCLDJCQUEyQiw0VEFKM0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs7NEZBSW5GLDJCQUEyQjtrQkFUdkMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFDTix1SEFBdUg7d0JBQ3ZILHNIQUFzSDtvQkFDeEgsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUM5RixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBMEJZLEdBQUc7c0JBRGIsS0FBSztnQkFhSyxHQUFHO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMSURBVE9SUywgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBRdWFudGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL3F1YW50aXR5J1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6XG4gICAgJ2VsZGVyLXF1YW50aXR5LWlucHV0W21pbl1bZm9ybUNvbnRyb2xdLGVsZGVyLXF1YW50aXR5LWlucHV0W21pbl1bZm9ybUNvbnRyb2xOYW1lXSxlbGRlci1xdWFudGl0eS1pbnB1dFttaW5dW25nTW9kZWxdLCcgK1xuICAgICdlbGRlci1xdWFudGl0eS1pbnB1dFttYXhdW2Zvcm1Db250cm9sXSxlbGRlci1xdWFudGl0eS1pbnB1dFttYXhdW2Zvcm1Db250cm9sTmFtZV0sZWxkZXItcXVhbnRpdHktaW5wdXRbbWF4XVtuZ01vZGVsXScsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IEVsZGVyUXVhbnRpdHlSYW5nZVZhbGlkYXRvciwgbXVsdGk6IHRydWUgfV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgRWxkZXJRdWFudGl0eVJhbmdlVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXJcbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXJcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvLyBUT0RPIE1heWJlIHN1cHBvcnQgbWluUXVhbnRpdHkgLyBtYXhRdWFudGl0eVxuXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBhbGxvd2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWluID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW5cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBhbGxvd2VkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXgodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5fbWF4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgYW55IHtcbiAgICBsZXQgcmVzdWx0ID0ge31cbiAgICBjb25zdCBxdHkgPSBjLnZhbHVlIGFzIFF1YW50aXR5XG5cbiAgICBpZiAodGhpcy5fbWluICE9IG51bGwgJiYgIXRoaXMuaXNBdExlYXN0KHF0eSwgdGhpcy5fbWluKSkge1xuICAgICAgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgbWluOiB7IG1pbjogdGhpcy5fbWluLCBhY3R1YWw6IHF0eT8udmFsdWUgfSB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5fbWF4ICE9IG51bGwgJiYgIXRoaXMuaXNBdE1vc3QocXR5LCB0aGlzLl9tYXgpKSB7XG4gICAgICByZXN1bHQgPSBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBtYXg6IHsgbWF4OiB0aGlzLl9tYXgsIGFjdHVhbDogcXR5Py52YWx1ZSB9IH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBpc0F0TGVhc3QocXVhbnRpdHk6IFF1YW50aXR5LCBtaW5WYWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHF1YW50aXR5Py52YWx1ZSA+PSBtaW5WYWx1ZVxuICB9XG5cbiAgcHJpdmF0ZSBpc0F0TW9zdChxdWFudGl0eTogUXVhbnRpdHksIG1heFZhbHVlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcXVhbnRpdHk/LnZhbHVlIDw9IG1heFZhbHVlXG4gIH1cbn1cbiJdfQ==
@@ -1,73 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import { NG_VALIDATORS } from '@angular/forms';
3
- import { LoggerFactory } from '@elderbyte/ts-logger';
4
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
5
- import * as i0 from "@angular/core";
6
- export class ElderRequiredQuantityValidator {
7
- constructor() {
8
- /***************************************************************************
9
- * *
10
- * Fields *
11
- * *
12
- **************************************************************************/
13
- this.log = LoggerFactory.getLogger(this.constructor.name);
14
- this._requiredIgnoreZero = false;
15
- }
16
- /***************************************************************************
17
- * *
18
- * Properties *
19
- * *
20
- **************************************************************************/
21
- set requiredIgnoreZero(value) {
22
- this._requiredIgnoreZero = coerceBooleanProperty(value);
23
- }
24
- get requiredIgnoreZero() {
25
- return this._requiredIgnoreZero;
26
- }
27
- set required(value) {
28
- this._required = coerceBooleanProperty(value);
29
- }
30
- get required() {
31
- return this._required;
32
- }
33
- /***************************************************************************
34
- * *
35
- * Public API *
36
- * *
37
- **************************************************************************/
38
- validate(c) {
39
- let result = {};
40
- if (this.required && !this.isQuantityDefined(c.value)) {
41
- result = Object.assign(result, { required: { valid: false } });
42
- }
43
- // this.log.info('"' + c.value + '" --> validate result: ' + JSON.stringify(result), c);
44
- return result;
45
- }
46
- /***************************************************************************
47
- * *
48
- * Private Methods *
49
- * *
50
- **************************************************************************/
51
- isQuantityDefined(qty) {
52
- if (qty?.value != null && qty?.unit != null) {
53
- return !(this._requiredIgnoreZero && qty.value === 0);
54
- }
55
- return false;
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderRequiredQuantityValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
58
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ElderRequiredQuantityValidator, isStandalone: true, selector: "elder-quantity-input[required][formControl],elder-quantity-input[required][formControlName],elder-quantity-input[required][ngModel]", inputs: { requiredIgnoreZero: "requiredIgnoreZero", required: "required" }, providers: [{ provide: NG_VALIDATORS, useExisting: ElderRequiredQuantityValidator, multi: true }], ngImport: i0 }); }
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderRequiredQuantityValidator, decorators: [{
61
- type: Directive,
62
- args: [{
63
- // eslint-disable-next-line @angular-eslint/directive-selector
64
- selector: 'elder-quantity-input[required][formControl],elder-quantity-input[required][formControlName],elder-quantity-input[required][ngModel]',
65
- providers: [{ provide: NG_VALIDATORS, useExisting: ElderRequiredQuantityValidator, multi: true }],
66
- standalone: true,
67
- }]
68
- }], propDecorators: { requiredIgnoreZero: [{
69
- type: Input
70
- }], required: [{
71
- type: Input
72
- }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcmVxdWlyZWQtcXVhbnRpdHkudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9tZWFzdXJlcy9xdWFudGl0eS1pbnB1dC92YWxpZGF0aW9uL2VsZGVyLXJlcXVpcmVkLXF1YW50aXR5LnZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNoRCxPQUFPLEVBQW1CLGFBQWEsRUFBK0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBOztBQVUzRSxNQUFNLE9BQU8sOEJBQThCO0lBUDNDO1FBUUU7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFHN0Qsd0JBQW1CLEdBQVksS0FBSyxDQUFBO0tBc0Q3QztJQXBEQzs7OztnRkFJNEU7SUFFNUUsSUFDVyxrQkFBa0IsQ0FBQyxLQUFtQjtRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUNXLFFBQVEsQ0FBQyxLQUFtQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLENBQWtCO1FBQ2hDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUVmLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2hFLENBQUM7UUFDRCx3RkFBd0Y7UUFDeEYsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXBFLGlCQUFpQixDQUFDLEdBQWE7UUFDckMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7K0dBL0RVLDhCQUE4QjttR0FBOUIsOEJBQThCLDhQQUg5QixDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOzs0RkFHdEYsOEJBQThCO2tCQVAxQyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUNOLHFJQUFxSTtvQkFDdkksU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUNqRyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBb0JZLGtCQUFrQjtzQkFENUIsS0FBSztnQkFVSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBRdWFudGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL3F1YW50aXR5J1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6XG4gICAgJ2VsZGVyLXF1YW50aXR5LWlucHV0W3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sZWxkZXItcXVhbnRpdHktaW5wdXRbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sZWxkZXItcXVhbnRpdHktaW5wdXRbcmVxdWlyZWRdW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRWxkZXJSZXF1aXJlZFF1YW50aXR5VmFsaWRhdG9yLCBtdWx0aTogdHJ1ZSB9XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJSZXF1aXJlZFF1YW50aXR5VmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW5cbiAgcHJpdmF0ZSBfcmVxdWlyZWRJZ25vcmVaZXJvOiBib29sZWFuID0gZmFsc2VcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWdub3JlWmVybyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWRJZ25vcmVaZXJvID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKVxuICB9XG5cbiAgcHVibGljIGdldCByZXF1aXJlZElnbm9yZVplcm8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkSWdub3JlWmVyb1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBhbnkge1xuICAgIGxldCByZXN1bHQgPSB7fVxuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuaXNRdWFudGl0eURlZmluZWQoYy52YWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IHJlcXVpcmVkOiB7IHZhbGlkOiBmYWxzZSB9IH0pXG4gICAgfVxuICAgIC8vIHRoaXMubG9nLmluZm8oJ1wiJyArIGMudmFsdWUgKyAnXCIgLS0+IHZhbGlkYXRlIHJlc3VsdDogJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCksIGMpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgaXNRdWFudGl0eURlZmluZWQocXR5OiBRdWFudGl0eSk6IGJvb2xlYW4ge1xuICAgIGlmIChxdHk/LnZhbHVlICE9IG51bGwgJiYgcXR5Py51bml0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiAhKHRoaXMuX3JlcXVpcmVkSWdub3JlWmVybyAmJiBxdHkudmFsdWUgPT09IDApXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
@@ -1,341 +0,0 @@
1
- import { Quantity } from '../model/quantity';
2
- import { Injectable } from '@angular/core';
3
- import { Dimensions } from '../model/dimensions';
4
- import { LoggerFactory } from '@elderbyte/ts-logger';
5
- import { formatNumber } from '@angular/common';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../elder-unit.service";
8
- export class ElderQuantityService {
9
- static { this.EMPTY_STRING = ''; }
10
- static { this.SPACE_STRING = ' '; }
11
- static { this.DEFAULT_DIGITS = '1.0-1'; }
12
- /***************************************************************************
13
- * *
14
- * Builder support *
15
- * *
16
- **************************************************************************/
17
- createArea(length, width) {
18
- return this.createDimensions(length, width, Quantity.zero(length.unit));
19
- }
20
- createDimensions(length, width, height) {
21
- return Dimensions.from(length.unit, length.value, this.convertToUnit(width, length.unit).value, this.convertToUnit(height, length.unit).value);
22
- }
23
- /**
24
- * Returns a copy of the maximum (longest) edge of the dimensions.
25
- *
26
- * @param dimensions
27
- */
28
- getMaxEdge(dimensions) {
29
- if (!dimensions) {
30
- return null;
31
- }
32
- else {
33
- return Quantity.from(dimensions.unit, Math.max(dimensions.width, dimensions.length, dimensions.height));
34
- }
35
- }
36
- /***************************************************************************
37
- * *
38
- * Constructor *
39
- * *
40
- **************************************************************************/
41
- constructor(unitService) {
42
- this.unitService = unitService;
43
- /***************************************************************************
44
- * *
45
- * Fields *
46
- * *
47
- **************************************************************************/
48
- this.logger = LoggerFactory.getLogger(this.constructor.name);
49
- this.QUANTITY_CACHE_SIZE = 500;
50
- this.QUANTITY_CACHE = new Map();
51
- }
52
- /***************************************************************************
53
- * *
54
- * Public API *
55
- * *
56
- **************************************************************************/
57
- withUnit(quantity, unit) {
58
- return Quantity.from(unit, quantity.value);
59
- }
60
- withValue(quantity, value) {
61
- return Quantity.from(quantity.unit, value);
62
- }
63
- cacheLookup(lookup) {
64
- return this.QUANTITY_CACHE.get(this.getQuantityIdentifier(lookup));
65
- }
66
- cacheUpdate(key, value) {
67
- if (this.QUANTITY_CACHE.size >= this.QUANTITY_CACHE_SIZE) {
68
- this.QUANTITY_CACHE.clear();
69
- }
70
- this.QUANTITY_CACHE.set(this.getQuantityIdentifier(key), value);
71
- }
72
- /**
73
- * Multiplies a quantity with a multiplier and returns a quantity.
74
- *
75
- * Example:
76
- * Quantity(10,'kg') * 3 = Quantity(30000,'g')
77
- *
78
- * @param quantity
79
- * @param multiplier
80
- */
81
- multiply(quantity, multiplier) {
82
- if (!quantity || !multiplier) {
83
- return null;
84
- }
85
- return Quantity.from(quantity.unit, quantity.value * multiplier);
86
- }
87
- /**
88
- * Divides a quantity by another quantity and returns a scalar.
89
- *
90
- * Examples:
91
- * Quantity(10,'kg') / Quantity(5,'kg') = 2
92
- * Quantity(10,'kg') / Quantity(5,'g') = 2000
93
- *
94
- * @param dividend
95
- * @param divisor
96
- */
97
- divideByQuantity(dividend, divisor) {
98
- if (!dividend || !divisor) {
99
- return null;
100
- }
101
- const dividendNormal = this.toBaseUnitValue(dividend);
102
- const divisorNormal = this.toBaseUnitValue(divisor);
103
- return dividendNormal / divisorNormal;
104
- }
105
- /**
106
- * Sums up Quantities and returns a Quantity.
107
- *
108
- * Example:
109
- * Quantity(10,'kg') + Quantity(5,'kg') + Quantity(5,'g') = Quantity(15005, 'g')
110
- *
111
- * @param quantities
112
- */
113
- sum(quantities) {
114
- if (!quantities || quantities.length === 0) {
115
- return null;
116
- }
117
- const targetUnit = quantities[0].unit;
118
- return Quantity.from(targetUnit, quantities.reduce((total, add) => {
119
- return total + this.convertToUnit(add, targetUnit).value;
120
- }, 0));
121
- }
122
- /**
123
- * Subtracts a quantity from another quantity and returns a quantity.
124
- *
125
- * Example:
126
- * Quantity(10,'kg') - Quantity(5,'g') = Quantity(9995, 'g')
127
- *
128
- * @param minuend
129
- * @param subtrahend
130
- */
131
- subtract(minuend, subtrahend) {
132
- if (!minuend || !subtrahend) {
133
- return null;
134
- }
135
- return Quantity.from(minuend.unit, minuend.value - this.convertToUnit(subtrahend, minuend.unit).value);
136
- }
137
- /**
138
- * Subtracts a quantity from another quantity and returns a quantity.
139
- *
140
- * Example:
141
- * Quantity(10,'kg') + Quantity(500,'g') = Quantity(10.5, 'kg')
142
- *
143
- * @param left
144
- * @param right
145
- */
146
- add(left, right) {
147
- if (!left || !right) {
148
- return null;
149
- }
150
- return Quantity.from(left.unit, left.value - this.convertToUnit(right, left.unit).value);
151
- }
152
- /**
153
- * Returns the max quantity of an array of quantities.
154
- *
155
- * Example:
156
- * Quantity(10, 'm'), Quantity(2500, 'cm'), Quantity(0.003, 'km') = Quantity(2500, 'cm')
157
- *
158
- * @param quantities
159
- */
160
- max(quantities) {
161
- if (!quantities || quantities.length == 0) {
162
- return null;
163
- }
164
- const helpers = quantities.map((quantity) => ({
165
- original: quantity,
166
- baseValue: this.toBaseUnitValue(quantity),
167
- }));
168
- helpers.sort((a, b) => b.baseValue - a.baseValue);
169
- return helpers[0].original;
170
- }
171
- /**
172
- * Transforms a quantity to another quantity of the same dimension by target-SI
173
- *
174
- * @param quantity
175
- * @param targetUnit
176
- */
177
- convertToUnit(quantity, targetUnit) {
178
- if (!quantity || !targetUnit) {
179
- return null;
180
- }
181
- if (quantity.unit === targetUnit) {
182
- return Quantity.from(quantity.unit, quantity.value);
183
- }
184
- const targetBaseFactor = this.unitService.getToBaseFactor(targetUnit);
185
- if (targetBaseFactor > 0) {
186
- return Quantity.from(targetUnit, this.toBaseUnitValue(quantity) / targetBaseFactor);
187
- }
188
- else {
189
- this.logger.warn('Failed to convert quantity to target unit:' + targetUnit + '. Quantity: ', quantity);
190
- return quantity;
191
- }
192
- }
193
- toBaseUnitValue(quantity) {
194
- const targetBaseFactor = this.unitService.getToBaseFactor(quantity.unit);
195
- return quantity.value * targetBaseFactor;
196
- }
197
- /**
198
- * Returns a quantity in a normalized form.
199
- * A cache is used to reduce calculations.
200
- *
201
- * 8500 kg -> 8.5 t
202
- * 9000000 mm -> 9 km
203
- * 1215 m -> 1.2 km
204
- *
205
- * @param quantity
206
- */
207
- normalize(quantity) {
208
- // Check cache
209
- const cachedItem = this.cacheLookup(quantity);
210
- // Value is in cache
211
- if (cachedItem) {
212
- return cachedItem;
213
- }
214
- else {
215
- const targetQuantity = this.normalizeInternal(quantity);
216
- // Update cache
217
- this.cacheUpdate(quantity, targetQuantity);
218
- return targetQuantity;
219
- }
220
- }
221
- transformQuantity(quantity, normalize = true, targetUnit) {
222
- if (!quantity) {
223
- return null;
224
- }
225
- if (normalize) {
226
- return this.normalize(quantity);
227
- }
228
- else if (targetUnit) {
229
- return this.convertToUnit(quantity, targetUnit);
230
- }
231
- else {
232
- return quantity;
233
- }
234
- }
235
- formatQuantity(quantity, locale, normalize, targetUnit, digitsInfo) {
236
- digitsInfo ||= ElderQuantityService.DEFAULT_DIGITS;
237
- if (!quantity) {
238
- return ElderQuantityService.EMPTY_STRING;
239
- }
240
- const userOptions = ElderQuantityService.determineUserOptions(normalize, targetUnit, digitsInfo);
241
- const quantityToDisplay = this.transformQuantity(quantity, userOptions.normalize, userOptions.targetUnit);
242
- const number = this.strToNumber(quantityToDisplay.value);
243
- const suffix = this.determineSuffix(userOptions, quantityToDisplay);
244
- return formatNumber(number, locale, userOptions.digitsInfo) + suffix;
245
- }
246
- /***************************************************************************
247
- * *
248
- * Private Methods *
249
- * *
250
- **************************************************************************/
251
- normalizeInternal(quantity) {
252
- // Given quantity value in base unit
253
- const dimension = this.unitService.getUnitDimension(quantity.unit);
254
- if (!dimension) {
255
- return quantity;
256
- }
257
- const baseValue = this.toBaseUnitValue(quantity);
258
- let suitableUnit;
259
- const dimensionUnits = this.unitService.getUnitInfosByDimension(dimension);
260
- if (dimensionUnits) {
261
- const factorSortedUnits = dimensionUnits.sort((a, b) => b.toBaseFactor - a.toBaseFactor);
262
- for (const unitInfo of factorSortedUnits) {
263
- const signedBaseValue = baseValue < 0 ? baseValue * -1 : baseValue;
264
- if (unitInfo.toBaseFactor <= signedBaseValue) {
265
- suitableUnit = unitInfo;
266
- break;
267
- }
268
- }
269
- }
270
- else {
271
- this.logger.debug('Could not find Dimension info for ' +
272
- dimension +
273
- '. (' +
274
- quantity.unit +
275
- ' --> ' +
276
- dimension +
277
- ')');
278
- }
279
- if (!suitableUnit) {
280
- return quantity;
281
- }
282
- const currentToBase = this.unitService.getToBaseFactor(quantity.unit);
283
- // Ensure we prefer the initial unit if the actual value is not affected.
284
- // This helps to be consistent and display the actual unit in rare cases when multiple unit alternatives exist (same factor)
285
- if (suitableUnit.toBaseFactor === currentToBase) {
286
- return quantity;
287
- }
288
- else {
289
- return this.convertToUnit(quantity, suitableUnit.unit);
290
- }
291
- }
292
- getQuantityIdentifier(quantity) {
293
- return quantity.value + '-' + quantity.unit;
294
- }
295
- /**
296
- * Adapted from @angular/common number_pipe.ts
297
- */
298
- strToNumber(value) {
299
- // Convert strings to numbers
300
- if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
301
- return Number(value);
302
- }
303
- if (typeof value !== 'number') {
304
- throw new Error(`${value} is not a number`);
305
- }
306
- return value;
307
- }
308
- static determineUserOptions(normalize, targetUnit, digitsInfo) {
309
- const userOptions = normalize === undefined || typeof normalize === 'boolean'
310
- ? {
311
- normalize: normalize,
312
- targetUnit: targetUnit,
313
- digitsInfo: digitsInfo,
314
- }
315
- : normalize;
316
- if (userOptions.normalize === undefined && !userOptions.targetUnit) {
317
- userOptions.normalize = true;
318
- }
319
- if (userOptions.digitsInfo === undefined) {
320
- userOptions.digitsInfo = ElderQuantityService.DEFAULT_DIGITS;
321
- }
322
- return userOptions;
323
- }
324
- determineSuffix(userOptions, quantityToDisplay) {
325
- if (!userOptions.hideUnit) {
326
- return (ElderQuantityService.SPACE_STRING + this.unitService.getUnitSymbol(quantityToDisplay.unit));
327
- }
328
- else {
329
- return '';
330
- }
331
- }
332
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, deps: [{ token: i1.ElderUnitService }], target: i0.ɵɵFactoryTarget.Injectable }); }
333
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, providedIn: 'root' }); }
334
- }
335
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElderQuantityService, decorators: [{
336
- type: Injectable,
337
- args: [{
338
- providedIn: 'root',
339
- }]
340
- }], ctorParameters: () => [{ type: i1.ElderUnitService }] });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItcXVhbnRpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvbWVhc3VyZXMvdXRpbC9lbGRlci1xdWFudGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBOzs7QUFXOUMsTUFBTSxPQUFPLG9CQUFvQjthQVNQLGlCQUFZLEdBQVcsRUFBRSxBQUFiLENBQWE7YUFDekIsaUJBQVksR0FBVyxHQUFHLEFBQWQsQ0FBYzthQUUxQixtQkFBYyxHQUFXLE9BQU8sQUFBbEIsQ0FBa0I7SUFLeEQ7Ozs7Z0ZBSTRFO0lBRXJFLFVBQVUsQ0FBQyxNQUFnQixFQUFFLEtBQWU7UUFDakQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFnQixFQUFFLEtBQWUsRUFBRSxNQUFnQjtRQUN6RSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLEtBQUssRUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUM1QyxJQUFJLENB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QUM7UUFDRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQWdDLEVBQUUsaUJBQTJCO1FBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUNMLG9CQUFvQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FDM0YsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO0lBQ0gsQ0FBQzsrR0FoYVUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVuaXQgfSBmcm9tICcuLi9tb2RlbC91bml0J1xuaW1wb3J0IHsgUXVhbnRpdHkgfSBmcm9tICcuLi9tb2RlbC9xdWFudGl0eSdcbmltcG9ydCB7IFVuaXRJbmZvIH0gZnJvbSAnLi4vbW9kZWwvdW5pdC1yZWdpc3RyeSdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRWxkZXJVbml0U2VydmljZSB9IGZyb20gJy4uL2VsZGVyLXVuaXQuc2VydmljZSdcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICcuLi9tb2RlbC9kaW1lbnNpb25zJ1xuaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgUXVhbnRpdHlQaXBlT3B0aW9ucyB9IGZyb20gJy4uL2VsZGVyLXF1YW50aXR5LnBpcGUnXG5cbmludGVyZmFjZSBRdWFudGl0eVdpdGhCYXNlVmFsdWUge1xuICBvcmlnaW5hbDogUXVhbnRpdHlcbiAgYmFzZVZhbHVlOiBudW1iZXJcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyUXVhbnRpdHlTZXJ2aWNlIHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfU1RSSU5HOiBzdHJpbmcgPSAnJ1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTUEFDRV9TVFJJTkc6IHN0cmluZyA9ICcgJ1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfRElHSVRTOiBzdHJpbmcgPSAnMS4wLTEnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBRVUFOVElUWV9DQUNIRV9TSVpFID0gNTAwXG4gIHByaXZhdGUgcmVhZG9ubHkgUVVBTlRJVFlfQ0FDSEUgPSBuZXcgTWFwPHN0cmluZywgUXVhbnRpdHk+KClcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQnVpbGRlciBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgY3JlYXRlQXJlYShsZW5ndGg6IFF1YW50aXR5LCB3aWR0aDogUXVhbnRpdHkpOiBEaW1lbnNpb25zIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEaW1lbnNpb25zKGxlbmd0aCwgd2lkdGgsIFF1YW50aXR5Lnplcm8obGVuZ3RoLnVuaXQpKVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZURpbWVuc2lvbnMobGVuZ3RoOiBRdWFudGl0eSwgd2lkdGg6IFF1YW50aXR5LCBoZWlnaHQ6IFF1YW50aXR5KTogRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIERpbWVuc2lvbnMuZnJvbShcbiAgICAgIGxlbmd0aC51bml0LFxuICAgICAgbGVuZ3RoLnZhbHVlLFxuICAgICAgdGhpcy5jb252ZXJ0VG9Vbml0KHdpZHRoLCBsZW5ndGgudW5pdCkudmFsdWUsXG4gICAgICB0aGlzLmNvbnZlcnRUb1VuaXQoaGVpZ2h0LCBsZW5ndGgudW5pdCkudmFsdWVcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1heGltdW0gKGxvbmdlc3QpIGVkZ2Ugb2YgdGhlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0TWF4RWRnZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKTogUXVhbnRpdHkge1xuICAgIGlmICghZGltZW5zaW9ucykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFF1YW50aXR5LmZyb20oXG4gICAgICAgIGRpbWVuc2lvbnMudW5pdCxcbiAgICAgICAgTWF0aC5tYXgoZGltZW5zaW9ucy53aWR0aCwgZGltZW5zaW9ucy5sZW5ndGgsIGRpbWVuc2lvbnMuaGVpZ2h0KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdW5pdFNlcnZpY2U6IEVsZGVyVW5pdFNlcnZpY2UpIHt9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHdpdGhVbml0KHF1YW50aXR5OiBRdWFudGl0eSwgdW5pdDogVW5pdCkge1xuICAgIHJldHVybiBRdWFudGl0eS5mcm9tKHVuaXQsIHF1YW50aXR5LnZhbHVlKVxuICB9XG5cbiAgcHVibGljIHdpdGhWYWx1ZShxdWFudGl0eTogUXVhbnRpdHksIHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCB2YWx1ZSlcbiAgfVxuXG4gIHB1YmxpYyBjYWNoZUxvb2t1cChsb29rdXA6IFF1YW50aXR5KTogUXVhbnRpdHkge1xuICAgIHJldHVybiB0aGlzLlFVQU5USVRZX0NBQ0hFLmdldCh0aGlzLmdldFF1YW50aXR5SWRlbnRpZmllcihsb29rdXApKVxuICB9XG5cbiAgcHVibGljIGNhY2hlVXBkYXRlKGtleTogUXVhbnRpdHksIHZhbHVlOiBRdWFudGl0eSkge1xuICAgIGlmICh0aGlzLlFVQU5USVRZX0NBQ0hFLnNpemUgPj0gdGhpcy5RVUFOVElUWV9DQUNIRV9TSVpFKSB7XG4gICAgICB0aGlzLlFVQU5USVRZX0NBQ0hFLmNsZWFyKClcbiAgICB9XG4gICAgdGhpcy5RVUFOVElUWV9DQUNIRS5zZXQodGhpcy5nZXRRdWFudGl0eUlkZW50aWZpZXIoa2V5KSwgdmFsdWUpXG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbGllcyBhIHF1YW50aXR5IHdpdGggYSBtdWx0aXBsaWVyIGFuZCByZXR1cm5zIGEgcXVhbnRpdHkuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFF1YW50aXR5KDEwLCdrZycpICogMyA9IFF1YW50aXR5KDMwMDAwLCdnJylcbiAgICpcbiAgICogQHBhcmFtIHF1YW50aXR5XG4gICAqIEBwYXJhbSBtdWx0aXBsaWVyXG4gICAqL1xuXG4gIHB1YmxpYyBtdWx0aXBseShxdWFudGl0eTogUXVhbnRpdHksIG11bHRpcGxpZXI6IG51bWJlcik6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXR5IHx8ICFtdWx0aXBsaWVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCBxdWFudGl0eS52YWx1ZSAqIG11bHRpcGxpZXIpXG4gIH1cblxuICAvKipcbiAgICogRGl2aWRlcyBhIHF1YW50aXR5IGJ5IGFub3RoZXIgcXVhbnRpdHkgYW5kIHJldHVybnMgYSBzY2FsYXIuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSAvIFF1YW50aXR5KDUsJ2tnJykgPSAyXG4gICAqIFF1YW50aXR5KDEwLCdrZycpIC8gUXVhbnRpdHkoNSwnZycpID0gMjAwMFxuICAgKlxuICAgKiBAcGFyYW0gZGl2aWRlbmRcbiAgICogQHBhcmFtIGRpdmlzb3JcbiAgICovXG4gIHB1YmxpYyBkaXZpZGVCeVF1YW50aXR5KGRpdmlkZW5kOiBRdWFudGl0eSwgZGl2aXNvcjogUXVhbnRpdHkpOiBudW1iZXIge1xuICAgIGlmICghZGl2aWRlbmQgfHwgIWRpdmlzb3IpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIGNvbnN0IGRpdmlkZW5kTm9ybWFsID0gdGhpcy50b0Jhc2VVbml0VmFsdWUoZGl2aWRlbmQpXG4gICAgY29uc3QgZGl2aXNvck5vcm1hbCA9IHRoaXMudG9CYXNlVW5pdFZhbHVlKGRpdmlzb3IpXG4gICAgcmV0dXJuIGRpdmlkZW5kTm9ybWFsIC8gZGl2aXNvck5vcm1hbFxuICB9XG5cbiAgLyoqXG4gICAqIFN1bXMgdXAgUXVhbnRpdGllcyBhbmQgcmV0dXJucyBhIFF1YW50aXR5LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSArIFF1YW50aXR5KDUsJ2tnJykgKyBRdWFudGl0eSg1LCdnJykgPSBRdWFudGl0eSgxNTAwNSwgJ2cnKVxuICAgKlxuICAgKiBAcGFyYW0gcXVhbnRpdGllc1xuICAgKi9cbiAgcHVibGljIHN1bShxdWFudGl0aWVzOiBRdWFudGl0eVtdKTogUXVhbnRpdHkge1xuICAgIGlmICghcXVhbnRpdGllcyB8fCBxdWFudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRVbml0ID0gcXVhbnRpdGllc1swXS51bml0XG5cbiAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShcbiAgICAgIHRhcmdldFVuaXQsXG4gICAgICBxdWFudGl0aWVzLnJlZHVjZSgodG90YWwsIGFkZCkgPT4ge1xuICAgICAgICByZXR1cm4gdG90YWwgKyB0aGlzLmNvbnZlcnRUb1VuaXQoYWRkLCB0YXJnZXRVbml0KS52YWx1ZVxuICAgICAgfSwgMClcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogU3VidHJhY3RzIGEgcXVhbnRpdHkgZnJvbSBhbm90aGVyIHF1YW50aXR5IGFuZCByZXR1cm5zIGEgcXVhbnRpdHkuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIFF1YW50aXR5KDEwLCdrZycpIC0gUXVhbnRpdHkoNSwnZycpID0gUXVhbnRpdHkoOTk5NSwgJ2cnKVxuICAgKlxuICAgKiBAcGFyYW0gbWludWVuZFxuICAgKiBAcGFyYW0gc3VidHJhaGVuZFxuICAgKi9cbiAgcHVibGljIHN1YnRyYWN0KG1pbnVlbmQ6IFF1YW50aXR5LCBzdWJ0cmFoZW5kOiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICBpZiAoIW1pbnVlbmQgfHwgIXN1YnRyYWhlbmQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBRdWFudGl0eS5mcm9tKFxuICAgICAgbWludWVuZC51bml0LFxuICAgICAgbWludWVuZC52YWx1ZSAtIHRoaXMuY29udmVydFRvVW5pdChzdWJ0cmFoZW5kLCBtaW51ZW5kLnVuaXQpLnZhbHVlXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnRyYWN0cyBhIHF1YW50aXR5IGZyb20gYW5vdGhlciBxdWFudGl0eSBhbmQgcmV0dXJucyBhIHF1YW50aXR5LlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwna2cnKSArIFF1YW50aXR5KDUwMCwnZycpID0gUXVhbnRpdHkoMTAuNSwgJ2tnJylcbiAgICpcbiAgICogQHBhcmFtIGxlZnRcbiAgICogQHBhcmFtIHJpZ2h0XG4gICAqL1xuICBwdWJsaWMgYWRkKGxlZnQ6IFF1YW50aXR5LCByaWdodDogUXVhbnRpdHkpOiBRdWFudGl0eSB7XG4gICAgaWYgKCFsZWZ0IHx8ICFyaWdodCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFF1YW50aXR5LmZyb20obGVmdC51bml0LCBsZWZ0LnZhbHVlIC0gdGhpcy5jb252ZXJ0VG9Vbml0KHJpZ2h0LCBsZWZ0LnVuaXQpLnZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1heCBxdWFudGl0eSBvZiBhbiBhcnJheSBvZiBxdWFudGl0aWVzLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBRdWFudGl0eSgxMCwgJ20nKSwgUXVhbnRpdHkoMjUwMCwgJ2NtJyksIFF1YW50aXR5KDAuMDAzLCAna20nKSA9IFF1YW50aXR5KDI1MDAsICdjbScpXG4gICAqXG4gICAqIEBwYXJhbSBxdWFudGl0aWVzXG4gICAqL1xuXG4gIHB1YmxpYyBtYXgocXVhbnRpdGllczogUXVhbnRpdHlbXSk6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXRpZXMgfHwgcXVhbnRpdGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBoZWxwZXJzID0gcXVhbnRpdGllcy5tYXAoXG4gICAgICAocXVhbnRpdHkpID0+XG4gICAgICAgIDxRdWFudGl0eVdpdGhCYXNlVmFsdWU+e1xuICAgICAgICAgIG9yaWdpbmFsOiBxdWFudGl0eSxcbiAgICAgICAgICBiYXNlVmFsdWU6IHRoaXMudG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5KSxcbiAgICAgICAgfVxuICAgIClcblxuICAgIGhlbHBlcnMuc29ydCgoYSwgYikgPT4gYi5iYXNlVmFsdWUgLSBhLmJhc2VWYWx1ZSlcblxuICAgIHJldHVybiBoZWxwZXJzWzBdLm9yaWdpbmFsXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyBhIHF1YW50aXR5IHRvIGFub3RoZXIgcXVhbnRpdHkgb2YgdGhlIHNhbWUgZGltZW5zaW9uIGJ5IHRhcmdldC1TSVxuICAgKlxuICAgKiBAcGFyYW0gcXVhbnRpdHlcbiAgICogQHBhcmFtIHRhcmdldFVuaXRcbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0VG9Vbml0KHF1YW50aXR5OiBRdWFudGl0eSwgdGFyZ2V0VW5pdDogVW5pdCk6IFF1YW50aXR5IHtcbiAgICBpZiAoIXF1YW50aXR5IHx8ICF0YXJnZXRVbml0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChxdWFudGl0eS51bml0ID09PSB0YXJnZXRVbml0KSB7XG4gICAgICByZXR1cm4gUXVhbnRpdHkuZnJvbShxdWFudGl0eS51bml0LCBxdWFudGl0eS52YWx1ZSlcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRCYXNlRmFjdG9yID0gdGhpcy51bml0U2VydmljZS5nZXRUb0Jhc2VGYWN0b3IodGFyZ2V0VW5pdClcblxuICAgIGlmICh0YXJnZXRCYXNlRmFjdG9yID4gMCkge1xuICAgICAgcmV0dXJuIFF1YW50aXR5LmZyb20odGFyZ2V0VW5pdCwgdGhpcy50b0Jhc2VVbml0VmFsdWUocXVhbnRpdHkpIC8gdGFyZ2V0QmFzZUZhY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjb252ZXJ0IHF1YW50aXR5IHRvIHRhcmdldCB1bml0OicgKyB0YXJnZXRVbml0ICsgJy4gUXVhbnRpdHk6ICcsXG4gICAgICAgIHF1YW50aXR5XG4gICAgICApXG4gICAgICByZXR1cm4gcXVhbnRpdHlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5OiBRdWFudGl0eSk6IG51bWJlciB7XG4gICAgY29uc3QgdGFyZ2V0QmFzZUZhY3RvciA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VG9CYXNlRmFjdG9yKHF1YW50aXR5LnVuaXQpXG4gICAgcmV0dXJuIHF1YW50aXR5LnZhbHVlICogdGFyZ2V0QmFzZUZhY3RvclxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBxdWFudGl0eSBpbiBhIG5vcm1hbGl6ZWQgZm9ybS5cbiAgICogQSBjYWNoZSBpcyB1c2VkIHRvIHJlZHVjZSBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIDg1MDAga2cgLT4gOC41IHRcbiAgICogOTAwMDAwMCBtbSAtPiA5IGttXG4gICAqIDEyMTUgbSAtPiAxLjIga21cbiAgICpcbiAgICogQHBhcmFtIHF1YW50aXR5XG4gICAqL1xuICBwdWJsaWMgbm9ybWFsaXplKHF1YW50aXR5OiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICAvLyBDaGVjayBjYWNoZVxuICAgIGNvbnN0IGNhY2hlZEl0ZW0gPSB0aGlzLmNhY2hlTG9va3VwKHF1YW50aXR5KVxuXG4gICAgLy8gVmFsdWUgaXMgaW4gY2FjaGVcbiAgICBpZiAoY2FjaGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEl0ZW1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0UXVhbnRpdHkgPSB0aGlzLm5vcm1hbGl6ZUludGVybmFsKHF1YW50aXR5KVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMuY2FjaGVVcGRhdGUocXVhbnRpdHksIHRhcmdldFF1YW50aXR5KVxuXG4gICAgICByZXR1cm4gdGFyZ2V0UXVhbnRpdHlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtUXVhbnRpdHkoXG4gICAgcXVhbnRpdHk6IFF1YW50aXR5LFxuICAgIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUsXG4gICAgdGFyZ2V0VW5pdD86IFVuaXQgfCBzdHJpbmdcbiAgKTogUXVhbnRpdHkge1xuICAgIGlmICghcXVhbnRpdHkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplKHF1YW50aXR5KVxuICAgIH0gZWxzZSBpZiAodGFyZ2V0VW5pdCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvVW5pdChxdWFudGl0eSwgPFVuaXQ+dGFyZ2V0VW5pdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1YW50aXR5XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFF1YW50aXR5KFxuICAgIHF1YW50aXR5OiBRdWFudGl0eSB8IHVuZGVmaW5lZCxcbiAgICBsb2NhbGU6IHN0cmluZyxcbiAgICBub3JtYWxpemU/OiBib29sZWFuIHwgUXVhbnRpdHlQaXBlT3B0aW9ucyxcbiAgICB0YXJnZXRVbml0PzogVW5pdCB8IHN0cmluZyxcbiAgICBkaWdpdHNJbmZvPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgZGlnaXRzSW5mbyB8fD0gRWxkZXJRdWFudGl0eVNlcnZpY2UuREVGQVVMVF9ESUdJVFNcblxuICAgIGlmICghcXVhbnRpdHkpIHtcbiAgICAgIHJldHVybiBFbGRlclF1YW50aXR5U2VydmljZS5FTVBUWV9TVFJJTkdcbiAgICB9XG4gICAgY29uc3QgdXNlck9wdGlvbnMgPSBFbGRlclF1YW50aXR5U2VydmljZS5kZXRlcm1pbmVVc2VyT3B0aW9ucyhub3JtYWxpemUsIHRhcmdldFVuaXQsIGRpZ2l0c0luZm8pXG5cbiAgICBjb25zdCBxdWFudGl0eVRvRGlzcGxheTogUXVhbnRpdHkgPSB0aGlzLnRyYW5zZm9ybVF1YW50aXR5KFxuICAgICAgcXVhbnRpdHksXG4gICAgICB1c2VyT3B0aW9ucy5ub3JtYWxpemUsXG4gICAgICB1c2VyT3B0aW9ucy50YXJnZXRVbml0XG4gICAgKVxuICAgIGNvbnN0IG51bWJlciA9IHRoaXMuc3RyVG9OdW1iZXIocXVhbnRpdHlUb0Rpc3BsYXkudmFsdWUpXG4gICAgY29uc3Qgc3VmZml4ID0gdGhpcy5kZXRlcm1pbmVTdWZmaXgodXNlck9wdGlvbnMsIHF1YW50aXR5VG9EaXNwbGF5KVxuICAgIHJldHVybiBmb3JtYXROdW1iZXIobnVtYmVyLCBsb2NhbGUsIHVzZXJPcHRpb25zLmRpZ2l0c0luZm8pICsgc3VmZml4XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBNZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIG5vcm1hbGl6ZUludGVybmFsKHF1YW50aXR5OiBRdWFudGl0eSk6IFF1YW50aXR5IHtcbiAgICAvLyBHaXZlbiBxdWFudGl0eSB2YWx1ZSBpbiBiYXNlIHVuaXRcblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VW5pdERpbWVuc2lvbihxdWFudGl0eS51bml0KVxuXG4gICAgaWYgKCFkaW1lbnNpb24pIHtcbiAgICAgIHJldHVybiBxdWFudGl0eVxuICAgIH1cblxuICAgIGNvbnN0IGJhc2VWYWx1ZSA9IHRoaXMudG9CYXNlVW5pdFZhbHVlKHF1YW50aXR5KVxuXG4gICAgbGV0IHN1aXRhYmxlVW5pdDogVW5pdEluZm9cblxuICAgIGNvbnN0IGRpbWVuc2lvblVuaXRzID0gdGhpcy51bml0U2VydmljZS5nZXRVbml0SW5mb3NCeURpbWVuc2lvbihkaW1lbnNpb24pXG5cbiAgICBpZiAoZGltZW5zaW9uVW5pdHMpIHtcbiAgICAgIGNvbnN0IGZhY3RvclNvcnRlZFVuaXRzID0gZGltZW5zaW9uVW5pdHMuc29ydCgoYSwgYikgPT4gYi50b0Jhc2VGYWN0b3IgLSBhLnRvQmFzZUZhY3RvcilcblxuICAgICAgZm9yIChjb25zdCB1bml0SW5mbyBvZiBmYWN0b3JTb3J0ZWRVbml0cykge1xuICAgICAgICBjb25zdCBzaWduZWRCYXNlVmFsdWUgPSBiYXNlVmFsdWUgPCAwID8gYmFzZVZhbHVlICogLTEgOiBiYXNlVmFsdWVcbiAgICAgICAgaWYgKHVuaXRJbmZvLnRvQmFzZUZhY3RvciA8PSBzaWduZWRCYXNlVmFsdWUpIHtcbiAgICAgICAgICBzdWl0YWJsZVVuaXQgPSB1bml0SW5mb1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCBEaW1lbnNpb24gaW5mbyBmb3IgJyArXG4gICAgICAgICAgZGltZW5zaW9uICtcbiAgICAgICAgICAnLiAoJyArXG4gICAgICAgICAgcXVhbnRpdHkudW5pdCArXG4gICAgICAgICAgJyAtLT4gJyArXG4gICAgICAgICAgZGltZW5zaW9uICtcbiAgICAgICAgICAnKSdcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoIXN1aXRhYmxlVW5pdCkge1xuICAgICAgcmV0dXJuIHF1YW50aXR5XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRvQmFzZSA9IHRoaXMudW5pdFNlcnZpY2UuZ2V0VG9CYXNlRmFjdG9yKHF1YW50aXR5LnVuaXQpXG5cbiAgICAvLyBFbnN1cmUgd2UgcHJlZmVyIHRoZSBpbml0aWFsIHVuaXQgaWYgdGhlIGFjdHVhbCB2YWx1ZSBpcyBub3QgYWZmZWN0ZWQuXG4gICAgLy8gVGhpcyBoZWxwcyB0byBiZSBjb25zaXN0ZW50IGFuZCBkaXNwbGF5IHRoZSBhY3R1YWwgdW5pdCBpbiByYXJlIGNhc2VzIHdoZW4gbXVsdGlwbGUgdW5pdCBhbHRlcm5hdGl2ZXMgZXhpc3QgKHNhbWUgZmFjdG9yKVxuICAgIGlmIChzdWl0YWJsZVVuaXQudG9CYXNlRmFjdG9yID09PSBjdXJyZW50VG9CYXNlKSB7XG4gICAgICByZXR1cm4gcXVhbnRpdHlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydFRvVW5pdChxdWFudGl0eSwgc3VpdGFibGVVbml0LnVuaXQpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWFudGl0eUlkZW50aWZpZXIocXVhbnRpdHk6IFF1YW50aXR5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVhbnRpdHkudmFsdWUgKyAnLScgKyBxdWFudGl0eS51bml0XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlZCBmcm9tIEBhbmd1bGFyL2NvbW1vbiBudW1iZXJfcGlwZS50c1xuICAgKi9cbiAgcHJpdmF0ZSBzdHJUb051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBDb252ZXJ0IHN0cmluZ3MgdG8gbnVtYmVyc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihOdW1iZXIodmFsdWUpIC0gcGFyc2VGbG9hdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBudW1iZXJgKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGRldGVybWluZVVzZXJPcHRpb25zKFxuICAgIG5vcm1hbGl6ZTogYm9vbGVhbiB8IFF1YW50aXR5UGlwZU9wdGlvbnMsXG4gICAgdGFyZ2V0VW5pdDogVW5pdCB8IHN0cmluZyxcbiAgICBkaWdpdHNJbmZvOiBzdHJpbmdcbiAgKTogUXVhbnRpdHlQaXBlT3B0aW9ucyB7XG4gICAgY29uc3QgdXNlck9wdGlvbnMgPVxuICAgICAgbm9ybWFsaXplID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG5vcm1hbGl6ZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gPFF1YW50aXR5UGlwZU9wdGlvbnM+e1xuICAgICAgICAgICAgbm9ybWFsaXplOiBub3JtYWxpemUsXG4gICAgICAgICAgICB0YXJnZXRVbml0OiB0YXJnZXRVbml0LFxuICAgICAgICAgICAgZGlnaXRzSW5mbzogZGlnaXRzSW5mbyxcbiAgICAgICAgICB9XG4gICAgICAgIDogbm9ybWFsaXplXG5cbiAgICBpZiAodXNlck9wdGlvbnMubm9ybWFsaXplID09PSB1bmRlZmluZWQgJiYgIXVzZXJPcHRpb25zLnRhcmdldFVuaXQpIHtcbiAgICAgIHVzZXJPcHRpb25zLm5vcm1hbGl6ZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAodXNlck9wdGlvbnMuZGlnaXRzSW5mbyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VyT3B0aW9ucy5kaWdpdHNJbmZvID0gRWxkZXJRdWFudGl0eVNlcnZpY2UuREVGQVVMVF9ESUdJVFNcbiAgICB9XG4gICAgcmV0dXJuIHVzZXJPcHRpb25zXG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVN1ZmZpeCh1c2VyT3B0aW9uczogUXVhbnRpdHlQaXBlT3B0aW9ucywgcXVhbnRpdHlUb0Rpc3BsYXk6IFF1YW50aXR5KSB7XG4gICAgaWYgKCF1c2VyT3B0aW9ucy5oaWRlVW5pdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgRWxkZXJRdWFudGl0eVNlcnZpY2UuU1BBQ0VfU1RSSU5HICsgdGhpcy51bml0U2VydmljZS5nZXRVbml0U3ltYm9sKHF1YW50aXR5VG9EaXNwbGF5LnVuaXQpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxufVxuIl19