@openmrs/ngx-formentry 3.0.1-pre.100

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 (351) hide show
  1. package/abstract-controls-extension/afe-control-type.d.ts +6 -0
  2. package/abstract-controls-extension/afe-form-array.d.ts +43 -0
  3. package/abstract-controls-extension/afe-form-control.d.ts +46 -0
  4. package/abstract-controls-extension/afe-form-group.d.ts +38 -0
  5. package/abstract-controls-extension/control-extensions.d.ts +4 -0
  6. package/abstract-controls-extension/index.d.ts +4 -0
  7. package/abstract-controls-extension/value-change.listener.d.ts +4 -0
  8. package/bundles/openmrs-ngx-formentry.umd.js +16098 -0
  9. package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
  10. package/change-tracking/control-relation.d.ts +12 -0
  11. package/change-tracking/control-relations.d.ts +12 -0
  12. package/components/afe-ng-select.component.d.ts +28 -0
  13. package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
  14. package/components/check-box/checkbox.component.d.ts +19 -0
  15. package/components/check-box/checkbox.module.d.ts +9 -0
  16. package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
  17. package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
  18. package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
  19. package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
  20. package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
  21. package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
  22. package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
  23. package/components/date-time-picker/index.d.ts +8 -0
  24. package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
  25. package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
  26. package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
  27. package/components/file-upload/file-upload.component.d.ts +29 -0
  28. package/components/file-upload/file-upload.module.d.ts +12 -0
  29. package/components/file-upload/secure.pipe.d.ts +26 -0
  30. package/components/input/input.directive.d.ts +31 -0
  31. package/components/input/input.module.d.ts +11 -0
  32. package/components/input/label.component.d.ts +90 -0
  33. package/components/input/text-area.directive.d.ts +24 -0
  34. package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
  35. package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -0
  36. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
  37. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
  38. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
  39. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
  40. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
  41. package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -0
  42. package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
  43. package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +108 -0
  44. package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
  45. package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +137 -0
  46. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
  47. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
  48. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -0
  49. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
  50. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +20 -0
  51. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
  52. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +156 -0
  53. package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
  54. package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
  55. package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
  56. package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
  57. package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +128 -0
  58. package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
  59. package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +58 -0
  60. package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
  61. package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +11 -0
  62. package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -0
  63. package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
  64. package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
  65. package/components/ngx-remote-select/ngx-remote-select.component.d.ts +40 -0
  66. package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
  67. package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
  68. package/components/ngx-tabset/components/tab.component.d.ts +13 -0
  69. package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
  70. package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
  71. package/components/number-input/number-input.component.d.ts +151 -0
  72. package/components/number-input/number-input.module.d.ts +9 -0
  73. package/components/radio-button/radio.component.d.ts +22 -0
  74. package/components/radio-button/radio.module.d.ts +9 -0
  75. package/components/select/optgroup.directive.d.ts +6 -0
  76. package/components/select/option.directive.d.ts +6 -0
  77. package/components/select/select.component.d.ts +115 -0
  78. package/components/select/select.module.d.ts +11 -0
  79. package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
  80. package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
  81. package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
  82. package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
  83. package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
  84. package/esm2015/abstract-controls-extension/index.js +5 -0
  85. package/esm2015/abstract-controls-extension/value-change.listener.js +2 -0
  86. package/esm2015/change-tracking/control-relation.js +44 -0
  87. package/esm2015/change-tracking/control-relations.js +32 -0
  88. package/esm2015/components/afe-ng-select.component.js +101 -0
  89. package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
  90. package/esm2015/components/check-box/checkbox.component.js +90 -0
  91. package/esm2015/components/check-box/checkbox.module.js +19 -0
  92. package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
  93. package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
  94. package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
  95. package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
  96. package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
  97. package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
  98. package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
  99. package/esm2015/components/date-time-picker/index.js +9 -0
  100. package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
  101. package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
  102. package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
  103. package/esm2015/components/file-upload/file-upload.component.js +122 -0
  104. package/esm2015/components/file-upload/file-upload.module.js +39 -0
  105. package/esm2015/components/file-upload/secure.pipe.js +101 -0
  106. package/esm2015/components/input/input.directive.js +78 -0
  107. package/esm2015/components/input/input.module.js +23 -0
  108. package/esm2015/components/input/label.component.js +263 -0
  109. package/esm2015/components/input/text-area.directive.js +54 -0
  110. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
  111. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -0
  112. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
  113. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
  114. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +347 -0
  115. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
  116. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +39 -0
  117. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
  118. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +445 -0
  119. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
  120. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
  121. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
  122. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
  123. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
  124. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
  125. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
  126. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -0
  127. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
  128. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +528 -0
  129. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
  130. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
  131. package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
  132. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
  133. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -0
  134. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
  135. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +247 -0
  136. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
  137. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +27 -0
  138. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -0
  139. package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
  140. package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
  141. package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +135 -0
  142. package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
  143. package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
  144. package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
  145. package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
  146. package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
  147. package/esm2015/components/number-input/number-input.component.js +233 -0
  148. package/esm2015/components/number-input/number-input.module.js +20 -0
  149. package/esm2015/components/radio-button/radio.component.js +87 -0
  150. package/esm2015/components/radio-button/radio.module.js +19 -0
  151. package/esm2015/components/select/optgroup.directive.js +19 -0
  152. package/esm2015/components/select/option.directive.js +19 -0
  153. package/esm2015/components/select/select.component.js +187 -0
  154. package/esm2015/components/select/select.module.js +23 -0
  155. package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
  156. package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
  157. package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
  158. package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
  159. package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
  160. package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +32 -0
  161. package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
  162. package/esm2015/form-entry/data-sources/data-sources.js +30 -0
  163. package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
  164. package/esm2015/form-entry/directives/collapse-animations.js +11 -0
  165. package/esm2015/form-entry/directives/collapse.directive.js +172 -0
  166. package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
  167. package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
  168. package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
  169. package/esm2015/form-entry/form-entry.module.js +187 -0
  170. package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
  171. package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
  172. package/esm2015/form-entry/form-factory/form-node.js +96 -0
  173. package/esm2015/form-entry/form-factory/form.factory.js +141 -0
  174. package/esm2015/form-entry/form-factory/form.js +189 -0
  175. package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
  176. package/esm2015/form-entry/form-factory/question.factory.js +942 -0
  177. package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
  178. package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
  179. package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
  180. package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
  181. package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
  182. package/esm2015/form-entry/helpers/js-expression-helper.js +269 -0
  183. package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -0
  184. package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -0
  185. package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
  186. package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
  187. package/esm2015/form-entry/question-models/custom-control-question.model.js +10 -0
  188. package/esm2015/form-entry/question-models/date-question.js +12 -0
  189. package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
  190. package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
  191. package/esm2015/form-entry/question-models/group-question.js +12 -0
  192. package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -0
  193. package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
  194. package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
  195. package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
  196. package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
  197. package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
  198. package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
  199. package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
  200. package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +2 -0
  201. package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
  202. package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
  203. package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
  204. package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
  205. package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
  206. package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
  207. package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
  208. package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
  209. package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
  210. package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
  211. package/esm2015/form-entry/question-models/models.js +13 -0
  212. package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
  213. package/esm2015/form-entry/question-models/pair.model.js +7 -0
  214. package/esm2015/form-entry/question-models/question-base.js +26 -0
  215. package/esm2015/form-entry/question-models/radio-button.model.js +12 -0
  216. package/esm2015/form-entry/question-models/rendering-type.js +9 -0
  217. package/esm2015/form-entry/question-models/repeating-question.js +11 -0
  218. package/esm2015/form-entry/question-models/select-option.js +7 -0
  219. package/esm2015/form-entry/question-models/select-question.js +12 -0
  220. package/esm2015/form-entry/question-models/test-order-question.js +15 -0
  221. package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
  222. package/esm2015/form-entry/question-models/text-input-question.js +10 -0
  223. package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
  224. package/esm2015/form-entry/question-models/validation.model.js +7 -0
  225. package/esm2015/form-entry/services/debug-mode.service.js +24 -0
  226. package/esm2015/form-entry/services/form-errors.service.js +21 -0
  227. package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
  228. package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -0
  229. package/esm2015/form-entry/utils/messages.js +12 -0
  230. package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
  231. package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
  232. package/esm2015/form-entry/validators/date.validator.js +18 -0
  233. package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
  234. package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
  235. package/esm2015/form-entry/validators/max-date.validator.js +23 -0
  236. package/esm2015/form-entry/validators/max.validator.js +17 -0
  237. package/esm2015/form-entry/validators/min-date.validator.js +23 -0
  238. package/esm2015/form-entry/validators/min.validator.js +17 -0
  239. package/esm2015/form-entry/validators/required.validator.js +11 -0
  240. package/esm2015/form-entry/validators/validations.js +5 -0
  241. package/esm2015/form-entry/value-adapters/encounter.adapter.js +171 -0
  242. package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -0
  243. package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
  244. package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
  245. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +88 -0
  246. package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
  247. package/esm2015/lib/index.js +58 -0
  248. package/esm2015/openmrs-ngx-formentry.js +5 -0
  249. package/esm2015/public_api.js +2 -0
  250. package/esm2015/shared.module.js +21 -0
  251. package/fesm2015/openmrs-ngx-formentry.js +14317 -0
  252. package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
  253. package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
  254. package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
  255. package/form-entry/control-calculators/can-calculate.d.ts +5 -0
  256. package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
  257. package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
  258. package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
  259. package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
  260. package/form-entry/data-sources/data-sources.d.ts +10 -0
  261. package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
  262. package/form-entry/directives/collapse-animations.d.ts +4 -0
  263. package/form-entry/directives/collapse.directive.d.ts +45 -0
  264. package/form-entry/directives/historical-value.directive.d.ts +16 -0
  265. package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
  266. package/form-entry/expression-runner/expression-runner.d.ts +18 -0
  267. package/form-entry/form-entry.module.d.ts +30 -0
  268. package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
  269. package/form-entry/form-factory/form-control.service.d.ts +25 -0
  270. package/form-entry/form-factory/form-node.d.ts +52 -0
  271. package/form-entry/form-factory/form.d.ts +28 -0
  272. package/form-entry/form-factory/form.factory.d.ts +27 -0
  273. package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
  274. package/form-entry/form-factory/question.factory.d.ts +62 -0
  275. package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
  276. package/form-entry/form-factory/validation.factory.d.ts +25 -0
  277. package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
  278. package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
  279. package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
  280. package/form-entry/helpers/js-expression-helper.d.ts +29 -0
  281. package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
  282. package/form-entry/pipes/time-ago.pipe.d.ts +14 -0
  283. package/form-entry/question-models/checkbox.model.d.ts +9 -0
  284. package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
  285. package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
  286. package/form-entry/question-models/date-question.d.ts +7 -0
  287. package/form-entry/question-models/date-validation.model.d.ts +5 -0
  288. package/form-entry/question-models/file-upload-question.d.ts +8 -0
  289. package/form-entry/question-models/group-question.d.ts +8 -0
  290. package/form-entry/question-models/interfaces/base-options.d.ts +30 -0
  291. package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
  292. package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
  293. package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
  294. package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
  295. package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
  296. package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
  297. package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
  298. package/form-entry/question-models/interfaces/radio-button-options.d.ts +8 -0
  299. package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -0
  300. package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
  301. package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
  302. package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
  303. package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
  304. package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
  305. package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
  306. package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
  307. package/form-entry/question-models/max-validation.model.d.ts +5 -0
  308. package/form-entry/question-models/min-validation.model.d.ts +5 -0
  309. package/form-entry/question-models/models.d.ts +16 -0
  310. package/form-entry/question-models/multi-select-question.d.ts +9 -0
  311. package/form-entry/question-models/pair.model.d.ts +5 -0
  312. package/form-entry/question-models/question-base.d.ts +45 -0
  313. package/form-entry/question-models/radio-button.model.d.ts +7 -0
  314. package/form-entry/question-models/rendering-type.d.ts +7 -0
  315. package/form-entry/question-models/repeating-question.d.ts +7 -0
  316. package/form-entry/question-models/select-option.d.ts +6 -0
  317. package/form-entry/question-models/select-question.d.ts +10 -0
  318. package/form-entry/question-models/test-order-question.d.ts +13 -0
  319. package/form-entry/question-models/text-area-input-question.d.ts +7 -0
  320. package/form-entry/question-models/text-input-question.d.ts +6 -0
  321. package/form-entry/question-models/ui-select-question.d.ts +11 -0
  322. package/form-entry/question-models/validation.model.d.ts +5 -0
  323. package/form-entry/services/debug-mode.service.d.ts +8 -0
  324. package/form-entry/services/form-errors.service.d.ts +13 -0
  325. package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
  326. package/form-entry/services/historical-encounter-data.service.d.ts +15 -0
  327. package/form-entry/utils/messages.d.ts +11 -0
  328. package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
  329. package/form-entry/validators/conditional-required.validator.d.ts +8 -0
  330. package/form-entry/validators/date.validator.d.ts +7 -0
  331. package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
  332. package/form-entry/validators/js-expression.validator.d.ts +8 -0
  333. package/form-entry/validators/max-date.validator.d.ts +6 -0
  334. package/form-entry/validators/max.validator.d.ts +6 -0
  335. package/form-entry/validators/min-date.validator.d.ts +6 -0
  336. package/form-entry/validators/min.validator.d.ts +6 -0
  337. package/form-entry/validators/required.validator.d.ts +6 -0
  338. package/form-entry/validators/validations.d.ts +4 -0
  339. package/form-entry/value-adapters/encounter.adapter.d.ts +26 -0
  340. package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
  341. package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
  342. package/form-entry/value-adapters/order.adapter.d.ts +20 -0
  343. package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
  344. package/form-entry/value-adapters/value.adapter.d.ts +5 -0
  345. package/lib/index.d.ts +58 -0
  346. package/openmrs-ngx-formentry.d.ts +5 -0
  347. package/package.json +34 -0
  348. package/public_api.d.ts +1 -0
  349. package/shared.module.d.ts +9 -0
  350. package/styles/ngx-formentry.css +374 -0
  351. package/styles/picker.min.css +770 -0
@@ -0,0 +1,347 @@
1
+ /**
2
+ * native-date-time-adapter.class
3
+ */
4
+ import { Inject, Injectable, Optional } from '@angular/core';
5
+ import { Platform } from '@angular/cdk/platform';
6
+ import { DateTimeAdapter, OWL_DATE_TIME_LOCALE } from './date-time-adapter.class';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/cdk/platform";
9
+ /** The default month names to use if Intl API is not available. */
10
+ const DEFAULT_MONTH_NAMES = {
11
+ long: [
12
+ 'January',
13
+ 'February',
14
+ 'March',
15
+ 'April',
16
+ 'May',
17
+ 'June',
18
+ 'July',
19
+ 'August',
20
+ 'September',
21
+ 'October',
22
+ 'November',
23
+ 'December'
24
+ ],
25
+ short: [
26
+ 'Jan',
27
+ 'Feb',
28
+ 'Mar',
29
+ 'Apr',
30
+ 'May',
31
+ 'Jun',
32
+ 'Jul',
33
+ 'Aug',
34
+ 'Sep',
35
+ 'Oct',
36
+ 'Nov',
37
+ 'Dec'
38
+ ],
39
+ narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D']
40
+ };
41
+ /** The default day of the week names to use if Intl API is not available. */
42
+ const DEFAULT_DAY_OF_WEEK_NAMES = {
43
+ long: [
44
+ 'Sunday',
45
+ 'Monday',
46
+ 'Tuesday',
47
+ 'Wednesday',
48
+ 'Thursday',
49
+ 'Friday',
50
+ 'Saturday'
51
+ ],
52
+ short: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
53
+ narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S']
54
+ };
55
+ /** The default date names to use if Intl API is not available. */
56
+ const DEFAULT_DATE_NAMES = range(31, (i) => String(i + 1));
57
+ /** Whether the browser supports the Intl API. */
58
+ const SUPPORTS_INTL_API = typeof Intl !== 'undefined';
59
+ /**
60
+ * Matches strings that have the form of a valid RFC 3339 string
61
+ * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date
62
+ * because the regex will match strings an with out of bounds month, date, etc.
63
+ */
64
+ const ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;
65
+ /** Creates an array and fills it with values. */
66
+ function range(length, valueFunction) {
67
+ const valuesArray = Array(length);
68
+ for (let i = 0; i < length; i++) {
69
+ valuesArray[i] = valueFunction(i);
70
+ }
71
+ return valuesArray;
72
+ }
73
+ export class NativeDateTimeAdapter extends DateTimeAdapter {
74
+ constructor(owlDateTimeLocale, platform) {
75
+ super();
76
+ this.owlDateTimeLocale = owlDateTimeLocale;
77
+ super.setLocale(owlDateTimeLocale);
78
+ // IE does its own time zone correction, so we disable this on IE.
79
+ this.useUtcForDisplay = !platform.TRIDENT;
80
+ this._clampDate = platform.TRIDENT || platform.EDGE;
81
+ }
82
+ getYear(date) {
83
+ return date.getFullYear();
84
+ }
85
+ getMonth(date) {
86
+ return date.getMonth();
87
+ }
88
+ getDay(date) {
89
+ return date.getDay();
90
+ }
91
+ getDate(date) {
92
+ return date.getDate();
93
+ }
94
+ getHours(date) {
95
+ return date.getHours();
96
+ }
97
+ getMinutes(date) {
98
+ return date.getMinutes();
99
+ }
100
+ getSeconds(date) {
101
+ return date.getSeconds();
102
+ }
103
+ getTime(date) {
104
+ return date.getTime();
105
+ }
106
+ getNumDaysInMonth(date) {
107
+ const lastDateOfMonth = this.createDateWithOverflow(this.getYear(date), this.getMonth(date) + 1, 0);
108
+ return this.getDate(lastDateOfMonth);
109
+ }
110
+ differenceInCalendarDays(dateLeft, dateRight) {
111
+ if (this.isValid(dateLeft) && this.isValid(dateRight)) {
112
+ const dateLeftStartOfDay = this.createDate(this.getYear(dateLeft), this.getMonth(dateLeft), this.getDate(dateLeft));
113
+ const dateRightStartOfDay = this.createDate(this.getYear(dateRight), this.getMonth(dateRight), this.getDate(dateRight));
114
+ const timeStampLeft = this.getTime(dateLeftStartOfDay) -
115
+ dateLeftStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
116
+ const timeStampRight = this.getTime(dateRightStartOfDay) -
117
+ dateRightStartOfDay.getTimezoneOffset() * this.milliseondsInMinute;
118
+ return Math.round((timeStampLeft - timeStampRight) / this.millisecondsInDay);
119
+ }
120
+ else {
121
+ return null;
122
+ }
123
+ }
124
+ getYearName(date) {
125
+ if (SUPPORTS_INTL_API) {
126
+ const dtf = new Intl.DateTimeFormat(this.locale, {
127
+ year: 'numeric',
128
+ timeZone: 'utc'
129
+ });
130
+ return this.stripDirectionalityCharacters(this._format(dtf, date));
131
+ }
132
+ return String(this.getYear(date));
133
+ }
134
+ getMonthNames(style) {
135
+ if (SUPPORTS_INTL_API) {
136
+ const dtf = new Intl.DateTimeFormat(this.locale, {
137
+ month: style,
138
+ timeZone: 'utc'
139
+ });
140
+ return range(12, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, i, 1))));
141
+ }
142
+ return DEFAULT_MONTH_NAMES[style];
143
+ }
144
+ getDayOfWeekNames(style) {
145
+ if (SUPPORTS_INTL_API) {
146
+ const dtf = new Intl.DateTimeFormat(this.locale, {
147
+ weekday: style,
148
+ timeZone: 'utc'
149
+ });
150
+ return range(7, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));
151
+ }
152
+ return DEFAULT_DAY_OF_WEEK_NAMES[style];
153
+ }
154
+ getDateNames() {
155
+ if (SUPPORTS_INTL_API) {
156
+ const dtf = new Intl.DateTimeFormat(this.locale, {
157
+ day: 'numeric',
158
+ timeZone: 'utc'
159
+ });
160
+ return range(31, (i) => this.stripDirectionalityCharacters(this._format(dtf, new Date(2017, 0, i + 1))));
161
+ }
162
+ return DEFAULT_DATE_NAMES;
163
+ }
164
+ toIso8601(date) {
165
+ return date.toISOString();
166
+ }
167
+ isEqual(dateLeft, dateRight) {
168
+ if (this.isValid(dateLeft) && this.isValid(dateRight)) {
169
+ return dateLeft.getTime() === dateRight.getTime();
170
+ }
171
+ else {
172
+ return false;
173
+ }
174
+ }
175
+ isSameDay(dateLeft, dateRight) {
176
+ if (this.isValid(dateLeft) && this.isValid(dateRight)) {
177
+ const dateLeftStartOfDay = this.clone(dateLeft);
178
+ const dateRightStartOfDay = this.clone(dateRight);
179
+ dateLeftStartOfDay.setHours(0, 0, 0, 0);
180
+ dateRightStartOfDay.setHours(0, 0, 0, 0);
181
+ return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();
182
+ }
183
+ else {
184
+ return false;
185
+ }
186
+ }
187
+ isValid(date) {
188
+ return date && !isNaN(date.getTime());
189
+ }
190
+ invalid() {
191
+ return new Date(NaN);
192
+ }
193
+ isDateInstance(obj) {
194
+ return obj instanceof Date;
195
+ }
196
+ addCalendarYears(date, amount) {
197
+ return this.addCalendarMonths(date, amount * 12);
198
+ }
199
+ addCalendarMonths(date, amount) {
200
+ const result = this.clone(date);
201
+ amount = Number(amount);
202
+ const desiredMonth = result.getMonth() + amount;
203
+ const dateWithDesiredMonth = new Date(0);
204
+ dateWithDesiredMonth.setFullYear(result.getFullYear(), desiredMonth, 1);
205
+ dateWithDesiredMonth.setHours(0, 0, 0, 0);
206
+ const daysInMonth = this.getNumDaysInMonth(dateWithDesiredMonth);
207
+ // Set the last day of the new month
208
+ // if the original date was the last day of the longer month
209
+ result.setMonth(desiredMonth, Math.min(daysInMonth, result.getDate()));
210
+ return result;
211
+ }
212
+ addCalendarDays(date, amount) {
213
+ const result = this.clone(date);
214
+ amount = Number(amount);
215
+ result.setDate(result.getDate() + amount);
216
+ return result;
217
+ }
218
+ setHours(date, amount) {
219
+ const result = this.clone(date);
220
+ result.setHours(amount);
221
+ return result;
222
+ }
223
+ setMinutes(date, amount) {
224
+ const result = this.clone(date);
225
+ result.setMinutes(amount);
226
+ return result;
227
+ }
228
+ setSeconds(date, amount) {
229
+ const result = this.clone(date);
230
+ result.setSeconds(amount);
231
+ return result;
232
+ }
233
+ createDate(year, month, date, hours = 0, minutes = 0, seconds = 0) {
234
+ if (month < 0 || month > 11) {
235
+ throw Error(`Invalid month index "${month}". Month index has to be between 0 and 11.`);
236
+ }
237
+ if (date < 1) {
238
+ throw Error(`Invalid date "${date}". Date has to be greater than 0.`);
239
+ }
240
+ if (hours < 0 || hours > 23) {
241
+ throw Error(`Invalid hours "${hours}". Hours has to be between 0 and 23.`);
242
+ }
243
+ if (minutes < 0 || minutes > 59) {
244
+ throw Error(`Invalid minutes "${minutes}". Minutes has to between 0 and 59.`);
245
+ }
246
+ if (seconds < 0 || seconds > 59) {
247
+ throw Error(`Invalid seconds "${seconds}". Seconds has to be between 0 and 59.`);
248
+ }
249
+ const result = this.createDateWithOverflow(year, month, date, hours, minutes, seconds);
250
+ // Check that the date wasn't above the upper bound for the month, causing the month to overflow
251
+ // For example, createDate(2017, 1, 31) would try to create a date 2017/02/31 which is invalid
252
+ if (result.getMonth() !== month) {
253
+ throw Error(`Invalid date "${date}" for month with index "${month}".`);
254
+ }
255
+ return result;
256
+ }
257
+ clone(date) {
258
+ return this.createDate(this.getYear(date), this.getMonth(date), this.getDate(date), this.getHours(date), this.getMinutes(date), this.getSeconds(date));
259
+ }
260
+ now() {
261
+ return new Date();
262
+ }
263
+ format(date, displayFormat) {
264
+ if (!this.isValid(date)) {
265
+ throw Error('JSNativeDate: Cannot format invalid date.');
266
+ }
267
+ if (SUPPORTS_INTL_API) {
268
+ if (this._clampDate &&
269
+ (date.getFullYear() < 1 || date.getFullYear() > 9999)) {
270
+ date = this.clone(date);
271
+ date.setFullYear(Math.max(1, Math.min(9999, date.getFullYear())));
272
+ }
273
+ displayFormat = Object.assign(Object.assign({}, displayFormat), { timeZone: 'utc' });
274
+ const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
275
+ return this.stripDirectionalityCharacters(this._format(dtf, date));
276
+ }
277
+ return this.stripDirectionalityCharacters(date.toDateString());
278
+ }
279
+ parse(value, parseFormat) {
280
+ // There is no way using the native JS Date to set the parse format or locale
281
+ if (typeof value === 'number') {
282
+ return new Date(value);
283
+ }
284
+ return value ? new Date(Date.parse(value)) : null;
285
+ }
286
+ /**
287
+ * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
288
+ * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
289
+ * invalid date for all other values.
290
+ */
291
+ deserialize(value) {
292
+ if (typeof value === 'string') {
293
+ if (!value) {
294
+ return null;
295
+ }
296
+ // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the
297
+ // string is the right format first.
298
+ if (ISO_8601_REGEX.test(value)) {
299
+ const date = new Date(value);
300
+ if (this.isValid(date)) {
301
+ return date;
302
+ }
303
+ }
304
+ }
305
+ return super.deserialize(value);
306
+ }
307
+ /**
308
+ * Creates a date but allows the month and date to overflow.
309
+ */
310
+ createDateWithOverflow(year, month, date, hours = 0, minutes = 0, seconds = 0) {
311
+ const result = new Date(year, month, date, hours, minutes, seconds);
312
+ if (year >= 0 && year < 100) {
313
+ result.setFullYear(this.getYear(result) - 1900);
314
+ }
315
+ return result;
316
+ }
317
+ /**
318
+ * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
319
+ * other browsers do not. We remove them to make output consistent and because they interfere with
320
+ * date parsing.
321
+ */
322
+ stripDirectionalityCharacters(str) {
323
+ return str.replace(/[\u200e\u200f]/g, '');
324
+ }
325
+ /**
326
+ * When converting Date object to string, javascript built-in functions may return wrong
327
+ * results because it applies its internal DST rules. The DST rules around the world change
328
+ * very frequently, and the current valid rule is not always valid in previous years though.
329
+ * We work around this problem building a new Date object which has its internal UTC
330
+ * representation with the local date and time.
331
+ */
332
+ _format(dtf, date) {
333
+ const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
334
+ return dtf.format(d);
335
+ }
336
+ }
337
+ NativeDateTimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter, deps: [{ token: OWL_DATE_TIME_LOCALE, optional: true }, { token: i1.Platform }], target: i0.ɵɵFactoryTarget.Injectable });
338
+ NativeDateTimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter });
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeAdapter, decorators: [{
340
+ type: Injectable
341
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
342
+ type: Optional
343
+ }, {
344
+ type: Inject,
345
+ args: [OWL_DATE_TIME_LOCALE]
346
+ }] }, { type: i1.Platform }]; } });
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcGljay1kYXRldGltZS9saWIvZGF0ZS10aW1lL2FkYXB0ZXIvbmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNyQixNQUFNLDJCQUEyQixDQUFDOzs7QUFFbkMsbUVBQW1FO0FBQ25FLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsSUFBSSxFQUFFO1FBQ0osU0FBUztRQUNULFVBQVU7UUFDVixPQUFPO1FBQ1AsT0FBTztRQUNQLEtBQUs7UUFDTCxNQUFNO1FBQ04sTUFBTTtRQUNOLFFBQVE7UUFDUixXQUFXO1FBQ1gsU0FBUztRQUNULFVBQVU7UUFDVixVQUFVO0tBQ1g7SUFDRCxLQUFLLEVBQUU7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7S0FDTjtJQUNELE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0NBQ3JFLENBQUM7QUFFRiw2RUFBNkU7QUFD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QUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7bUhBbFpVLHFCQUFxQixrQkFjdEIsb0JBQW9CO3VIQWRuQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBY04sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG5hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci5jbGFzc1xuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIERhdGVUaW1lQWRhcHRlcixcbiAgT1dMX0RBVEVfVElNRV9MT0NBTEVcbn0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5cbi8qKiBUaGUgZGVmYXVsdCBtb250aCBuYW1lcyB0byB1c2UgaWYgSW50bCBBUEkgaXMgbm90IGF2YWlsYWJsZS4gKi9cbmNvbnN0IERFRkFVTFRfTU9OVEhfTkFNRVMgPSB7XG4gIGxvbmc6IFtcbiAgICAnSmFudWFyeScsXG4gICAgJ0ZlYnJ1YXJ5JyxcbiAgICAnTWFyY2gnLFxuICAgICdBcHJpbCcsXG4gICAgJ01heScsXG4gICAgJ0p1bmUnLFxuICAgICdKdWx5JyxcbiAgICAnQXVndXN0JyxcbiAgICAnU2VwdGVtYmVyJyxcbiAgICAnT2N0b2JlcicsXG4gICAgJ05vdmVtYmVyJyxcbiAgICAnRGVjZW1iZXInXG4gIF0sXG4gIHNob3J0OiBbXG4gICAgJ0phbicsXG4gICAgJ0ZlYicsXG4gICAgJ01hcicsXG4gICAgJ0FwcicsXG4gICAgJ01heScsXG4gICAgJ0p1bicsXG4gICAgJ0p1bCcsXG4gICAgJ0F1ZycsXG4gICAgJ1NlcCcsXG4gICAgJ09jdCcsXG4gICAgJ05vdicsXG4gICAgJ0RlYydcbiAgXSxcbiAgbmFycm93OiBbJ0onLCAnRicsICdNJywgJ0EnLCAnTScsICdKJywgJ0onLCAnQScsICdTJywgJ08nLCAnTicsICdEJ11cbn07XG5cbi8qKiBUaGUgZGVmYXVsdCBkYXkgb2YgdGhlIHdlZWsgbmFtZXMgdG8gdXNlIGlmIEludGwgQVBJIGlzIG5vdCBhdmFpbGFibGUuICovXG5jb25zdCBERUZBVUxUX0RBWV9PRl9XRUVLX05BTUVTID0ge1xuICBsb25nOiBbXG4gICAgJ1N1bmRheScsXG4gICAgJ01vbmRheScsXG4gICAgJ1R1ZXNkYXknLFxuICAgICdXZWRuZXNkYXknLFxuICAgICdUaHVyc2RheScsXG4gICAgJ0ZyaWRheScsXG4gICAgJ1NhdHVyZGF5J1xuICBdLFxuICBzaG9ydDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnXSxcbiAgbmFycm93OiBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVxufTtcblxuLyoqIFRoZSBkZWZhdWx0IGRhdGUgbmFtZXMgdG8gdXNlIGlmIEludGwgQVBJIGlzIG5vdCBhdmFpbGFibGUuICovXG5jb25zdCBERUZBVUxUX0RBVEVfTkFNRVMgPSByYW5nZSgzMSwgKGkpID0+IFN0cmluZyhpICsgMSkpO1xuXG4vKiogV2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgSW50bCBBUEkuICovXG5jb25zdCBTVVBQT1JUU19JTlRMX0FQSSA9IHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBNYXRjaGVzIHN0cmluZ3MgdGhhdCBoYXZlIHRoZSBmb3JtIG9mIGEgdmFsaWQgUkZDIDMzMzkgc3RyaW5nXG4gKiAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpLiBOb3RlIHRoYXQgdGhlIHN0cmluZyBtYXkgbm90IGFjdHVhbGx5IGJlIGEgdmFsaWQgZGF0ZVxuICogYmVjYXVzZSB0aGUgcmVnZXggd2lsbCBtYXRjaCBzdHJpbmdzIGFuIHdpdGggb3V0IG9mIGJvdW5kcyBtb250aCwgZGF0ZSwgZXRjLlxuICovXG5jb25zdCBJU09fODYwMV9SRUdFWCA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpUXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT8oPzpafCg/Oig/OlxcK3wtKVxcZHsyfTpcXGR7Mn0pKT8pPyQvO1xuXG4vKiogQ3JlYXRlcyBhbiBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMuICovXG5mdW5jdGlvbiByYW5nZTxUPihsZW5ndGg6IG51bWJlciwgdmFsdWVGdW5jdGlvbjogKGluZGV4OiBudW1iZXIpID0+IFQpOiBUW10ge1xuICBjb25zdCB2YWx1ZXNBcnJheSA9IEFycmF5KGxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YWx1ZXNBcnJheVtpXSA9IHZhbHVlRnVuY3Rpb24oaSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyIGV4dGVuZHMgRGF0ZVRpbWVBZGFwdGVyPERhdGU+IHtcbiAgLyoqIFdoZXRoZXIgdG8gY2xhbXAgdGhlIGRhdGUgYmV0d2VlbiAxIGFuZCA5OTk5IHRvIGF2b2lkIElFIGFuZCBFZGdlIGVycm9ycy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhbXBEYXRlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBgdGltZVpvbmU6ICd1dGMnYCB3aXRoIGBJbnRsLkRhdGVUaW1lRm9ybWF0YCB3aGVuIGZvcm1hdHRpbmcgZGF0ZXMuXG4gICAqIFdpdGhvdXQgdGhpcyBgSW50bC5EYXRlVGltZUZvcm1hdGAgc29tZXRpbWVzIGNob29zZXMgdGhlIHdyb25nIHRpbWVab25lLCB3aGljaCBjYW4gdGhyb3cgb2ZmXG4gICAqIHRoZSByZXN1bHQuIChlLmcuIGluIHRoZSBlbi1VUyBsb2NhbGUgYG5ldyBEYXRlKDE4MDAsIDcsIDE0KS50b0xvY2FsZURhdGVTdHJpbmcoKWBcbiAgICogd2lsbCBwcm9kdWNlIGAnOC8xMy8xODAwJ2AuXG4gICAqL1xuICB1c2VVdGNGb3JEaXNwbGF5OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChPV0xfREFURV9USU1FX0xPQ0FMRSlcbiAgICBwcml2YXRlIG93bERhdGVUaW1lTG9jYWxlOiBzdHJpbmcsXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgc3VwZXIuc2V0TG9jYWxlKG93bERhdGVUaW1lTG9jYWxlKTtcblxuICAgIC8vIElFIGRvZXMgaXRzIG93biB0aW1lIHpvbmUgY29ycmVjdGlvbiwgc28gd2UgZGlzYWJsZSB0aGlzIG9uIElFLlxuICAgIHRoaXMudXNlVXRjRm9yRGlzcGxheSA9ICFwbGF0Zm9ybS5UUklERU5UO1xuICAgIHRoaXMuX2NsYW1wRGF0ZSA9IHBsYXRmb3JtLlRSSURFTlQgfHwgcGxhdGZvcm0uRURHRTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXkoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0ZShkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SG91cnMoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW51dGVzKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWNvbmRzKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUaW1lKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldFRpbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROdW1EYXlzSW5Nb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICBjb25zdCBsYXN0RGF0ZU9mTW9udGggPSB0aGlzLmNyZWF0ZURhdGVXaXRoT3ZlcmZsb3coXG4gICAgICB0aGlzLmdldFllYXIoZGF0ZSksXG4gICAgICB0aGlzLmdldE1vbnRoKGRhdGUpICsgMSxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0ZShsYXN0RGF0ZU9mTW9udGgpO1xuICB9XG5cbiAgcHVibGljIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlTGVmdDogRGF0ZSwgZGF0ZVJpZ2h0OiBEYXRlKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKGRhdGVMZWZ0KSAmJiB0aGlzLmlzVmFsaWQoZGF0ZVJpZ2h0KSkge1xuICAgICAgY29uc3QgZGF0ZUxlZnRTdGFydE9mRGF5ID0gdGhpcy5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLmdldFllYXIoZGF0ZUxlZnQpLFxuICAgICAgICB0aGlzLmdldE1vbnRoKGRhdGVMZWZ0KSxcbiAgICAgICAgdGhpcy5nZXREYXRlKGRhdGVMZWZ0KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGVSaWdodFN0YXJ0T2ZEYXkgPSB0aGlzLmNyZWF0ZURhdGUoXG4gICAgICAgIHRoaXMuZ2V0WWVhcihkYXRlUmlnaHQpLFxuICAgICAgICB0aGlzLmdldE1vbnRoKGRhdGVSaWdodCksXG4gICAgICAgIHRoaXMuZ2V0RGF0ZShkYXRlUmlnaHQpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0aW1lU3RhbXBMZWZ0ID1cbiAgICAgICAgdGhpcy5nZXRUaW1lKGRhdGVMZWZ0U3RhcnRPZkRheSkgLVxuICAgICAgICBkYXRlTGVmdFN0YXJ0T2ZEYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIHRoaXMubWlsbGlzZW9uZHNJbk1pbnV0ZTtcbiAgICAgIGNvbnN0IHRpbWVTdGFtcFJpZ2h0ID1cbiAgICAgICAgdGhpcy5nZXRUaW1lKGRhdGVSaWdodFN0YXJ0T2ZEYXkpIC1cbiAgICAgICAgZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lem9uZU9mZnNldCgpICogdGhpcy5taWxsaXNlb25kc0luTWludXRlO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoXG4gICAgICAgICh0aW1lU3RhbXBMZWZ0IC0gdGltZVN0YW1wUmlnaHQpIC8gdGhpcy5taWxsaXNlY29uZHNJbkRheVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFllYXJOYW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgY29uc3QgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICB0aW1lWm9uZTogJ3V0YydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGR0ZiwgZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZ2V0WWVhcihkYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9udGhOYW1lcyhzdHlsZTogJ2xvbmcnIHwgJ3Nob3J0JyB8ICduYXJyb3cnKTogc3RyaW5nW10ge1xuICAgIGlmIChTVVBQT1JUU19JTlRMX0FQSSkge1xuICAgICAgY29uc3QgZHRmID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgbW9udGg6IHN0eWxlLFxuICAgICAgICB0aW1lWm9uZTogJ3V0YydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJhbmdlKDEyLCAoaSkgPT5cbiAgICAgICAgdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhcbiAgICAgICAgICB0aGlzLl9mb3JtYXQoZHRmLCBuZXcgRGF0ZSgyMDE3LCBpLCAxKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERFRkFVTFRfTU9OVEhfTkFNRVNbc3R5bGVdO1xuICB9XG5cbiAgcHVibGljIGdldERheU9mV2Vla05hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XG4gICAgaWYgKFNVUFBPUlRTX0lOVExfQVBJKSB7XG4gICAgICBjb25zdCBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICB3ZWVrZGF5OiBzdHlsZSxcbiAgICAgICAgdGltZVpvbmU6ICd1dGMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByYW5nZSg3LCAoaSkgPT5cbiAgICAgICAgdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhcbiAgICAgICAgICB0aGlzLl9mb3JtYXQoZHRmLCBuZXcgRGF0ZSgyMDE3LCAwLCBpICsgMSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIERFRkFVTFRfREFZX09GX1dFRUtfTkFNRVNbc3R5bGVdO1xuICB9XG5cbiAgcHVibGljIGdldERhdGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKFNVUFBPUlRTX0lOVExfQVBJKSB7XG4gICAgICBjb25zdCBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgICBkYXk6ICdudW1lcmljJyxcbiAgICAgICAgdGltZVpvbmU6ICd1dGMnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByYW5nZSgzMSwgKGkpID0+XG4gICAgICAgIHRoaXMuc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoXG4gICAgICAgICAgdGhpcy5fZm9ybWF0KGR0ZiwgbmV3IERhdGUoMjAxNywgMCwgaSArIDEpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gREVGQVVMVF9EQVRFX05BTUVTO1xuICB9XG5cbiAgcHVibGljIHRvSXNvODYwMShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIGlzRXF1YWwoZGF0ZUxlZnQ6IERhdGUsIGRhdGVSaWdodDogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZUxlZnQpICYmIHRoaXMuaXNWYWxpZChkYXRlUmlnaHQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUxlZnQuZ2V0VGltZSgpID09PSBkYXRlUmlnaHQuZ2V0VGltZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2FtZURheShkYXRlTGVmdDogRGF0ZSwgZGF0ZVJpZ2h0OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZChkYXRlTGVmdCkgJiYgdGhpcy5pc1ZhbGlkKGRhdGVSaWdodCkpIHtcbiAgICAgIGNvbnN0IGRhdGVMZWZ0U3RhcnRPZkRheSA9IHRoaXMuY2xvbmUoZGF0ZUxlZnQpO1xuICAgICAgY29uc3QgZGF0ZVJpZ2h0U3RhcnRPZkRheSA9IHRoaXMuY2xvbmUoZGF0ZVJpZ2h0KTtcbiAgICAgIGRhdGVMZWZ0U3RhcnRPZkRheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIGRhdGVSaWdodFN0YXJ0T2ZEYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZUxlZnRTdGFydE9mRGF5LmdldFRpbWUoKSA9PT0gZGF0ZVJpZ2h0U3RhcnRPZkRheS5nZXRUaW1lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNWYWxpZChkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnZhbGlkKCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICB9XG5cbiAgcHVibGljIGlzRGF0ZUluc3RhbmNlKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGU7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2FsZW5kYXJZZWFycyhkYXRlOiBEYXRlLCBhbW91bnQ6IG51bWJlcik6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDYWxlbmRhck1vbnRocyhkYXRlOiBEYXRlLCBhbW91bnQ6IG51bWJlcik6IERhdGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgYW1vdW50ID0gTnVtYmVyKGFtb3VudCk7XG5cbiAgICBjb25zdCBkZXNpcmVkTW9udGggPSByZXN1bHQuZ2V0TW9udGgoKSArIGFtb3VudDtcbiAgICBjb25zdCBkYXRlV2l0aERlc2lyZWRNb250aCA9IG5ldyBEYXRlKDApO1xuICAgIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEZ1bGxZZWFyKHJlc3VsdC5nZXRGdWxsWWVhcigpLCBkZXNpcmVkTW9udGgsIDEpO1xuICAgIGRhdGVXaXRoRGVzaXJlZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmdldE51bURheXNJbk1vbnRoKGRhdGVXaXRoRGVzaXJlZE1vbnRoKTtcbiAgICAvLyBTZXQgdGhlIGxhc3QgZGF5IG9mIHRoZSBuZXcgbW9udGhcbiAgICAvLyBpZiB0aGUgb3JpZ2luYWwgZGF0ZSB3YXMgdGhlIGxhc3QgZGF5IG9mIHRoZSBsb25nZXIgbW9udGhcbiAgICByZXN1bHQuc2V0TW9udGgoZGVzaXJlZE1vbnRoLCBNYXRoLm1pbihkYXlzSW5Nb250aCwgcmVzdWx0LmdldERhdGUoKSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2FsZW5kYXJEYXlzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICBhbW91bnQgPSBOdW1iZXIoYW1vdW50KTtcbiAgICByZXN1bHQuc2V0RGF0ZShyZXN1bHQuZ2V0RGF0ZSgpICsgYW1vdW50KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldEhvdXJzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICByZXN1bHQuc2V0SG91cnMoYW1vdW50KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldE1pbnV0ZXMoZGF0ZTogRGF0ZSwgYW1vdW50OiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNsb25lKGRhdGUpO1xuICAgIHJlc3VsdC5zZXRNaW51dGVzKGFtb3VudCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWNvbmRzKGRhdGU6IERhdGUsIGFtb3VudDogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICByZXN1bHQuc2V0U2Vjb25kcyhhbW91bnQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRGF0ZShcbiAgICB5ZWFyOiBudW1iZXIsXG4gICAgbW9udGg6IG51bWJlcixcbiAgICBkYXRlOiBudW1iZXIsXG4gICAgaG91cnM6IG51bWJlciA9IDAsXG4gICAgbWludXRlczogbnVtYmVyID0gMCxcbiAgICBzZWNvbmRzOiBudW1iZXIgPSAwXG4gICk6IERhdGUge1xuICAgIGlmIChtb250aCA8IDAgfHwgbW9udGggPiAxMSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIG1vbnRoIGluZGV4IFwiJHttb250aH1cIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLmApO1xuICAgIH1cblxuICAgIGlmIChob3VycyA8IDAgfHwgaG91cnMgPiAyMykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGhvdXJzIFwiJHtob3Vyc31cIi4gSG91cnMgaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMjMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgbWludXRlcyBcIiR7bWludXRlc31cIi4gTWludXRlcyBoYXMgdG8gYmV0d2VlbiAwIGFuZCA1OS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID4gNTkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzZWNvbmRzIFwiJHtzZWNvbmRzfVwiLiBTZWNvbmRzIGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDU5LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jcmVhdGVEYXRlV2l0aE92ZXJmbG93KFxuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF0ZSxcbiAgICAgIGhvdXJzLFxuICAgICAgbWludXRlcyxcbiAgICAgIHNlY29uZHNcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZGF0ZSB3YXNuJ3QgYWJvdmUgdGhlIHVwcGVyIGJvdW5kIGZvciB0aGUgbW9udGgsIGNhdXNpbmcgdGhlIG1vbnRoIHRvIG92ZXJmbG93XG4gICAgLy8gRm9yIGV4YW1wbGUsIGNyZWF0ZURhdGUoMjAxNywgMSwgMzEpIHdvdWxkIHRyeSB0byBjcmVhdGUgYSBkYXRlIDIwMTcvMDIvMzEgd2hpY2ggaXMgaW52YWxpZFxuICAgIGlmIChyZXN1bHQuZ2V0TW9udGgoKSAhPT0gbW9udGgpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIgZm9yIG1vbnRoIHdpdGggaW5kZXggXCIke21vbnRofVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgY2xvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLmdldFllYXIoZGF0ZSksXG4gICAgICB0aGlzLmdldE1vbnRoKGRhdGUpLFxuICAgICAgdGhpcy5nZXREYXRlKGRhdGUpLFxuICAgICAgdGhpcy5nZXRIb3VycyhkYXRlKSxcbiAgICAgIHRoaXMuZ2V0TWludXRlcyhkYXRlKSxcbiAgICAgIHRoaXMuZ2V0U2Vjb25kcyhkYXRlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbm93KCk6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignSlNOYXRpdmVEYXRlOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcbiAgICB9XG5cbiAgICBpZiAoU1VQUE9SVFNfSU5UTF9BUEkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fY2xhbXBEYXRlICYmXG4gICAgICAgIChkYXRlLmdldEZ1bGxZZWFyKCkgPCAxIHx8IGRhdGUuZ2V0RnVsbFllYXIoKSA+IDk5OTkpXG4gICAgICApIHtcbiAgICAgICAgZGF0ZSA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5tYXgoMSwgTWF0aC5taW4oOTk5OSwgZGF0ZS5nZXRGdWxsWWVhcigpKSkpO1xuICAgICAgfVxuXG4gICAgICBkaXNwbGF5Rm9ybWF0ID0geyAuLi5kaXNwbGF5Rm9ybWF0LCB0aW1lWm9uZTogJ3V0YycgfTtcbiAgICAgIGNvbnN0IGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChkdGYsIGRhdGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhkYXRlLnRvRGF0ZVN0cmluZygpKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZSh2YWx1ZTogYW55LCBwYXJzZUZvcm1hdDogYW55KTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFRoZXJlIGlzIG5vIHdheSB1c2luZyB0aGUgbmF0aXZlIEpTIERhdGUgdG8gc2V0IHRoZSBwYXJzZSBmb3JtYXQgb3IgbG9jYWxlXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUpKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgaWYgZ2l2ZW4gYSB2YWxpZCBEYXRlIG9yIG51bGwuIERlc2VyaWFsaXplcyB2YWxpZCBJU08gODYwMSBzdHJpbmdzXG4gICAqIChodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzMzOS50eHQpIGludG8gdmFsaWQgRGF0ZXMgYW5kIGVtcHR5IHN0cmluZyBpbnRvIG51bGwuIFJldHVybnMgYW5cbiAgICogaW52YWxpZCBkYXRlIGZvciBhbGwgb3RoZXIgdmFsdWVzLlxuICAgKi9cbiAgcHVibGljIGRlc2VyaWFsaXplKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBUaGUgYERhdGVgIGNvbnN0cnVjdG9yIGFjY2VwdHMgZm9ybWF0cyBvdGhlciB0aGFuIElTTyA4NjAxLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIHN0cmluZyBpcyB0aGUgcmlnaHQgZm9ybWF0IGZpcnN0LlxuICAgICAgaWYgKElTT184NjAxX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkYXRlIGJ1dCBhbGxvd3MgdGhlIG1vbnRoIGFuZCBkYXRlIHRvIG92ZXJmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVEYXRlV2l0aE92ZXJmbG93KFxuICAgIHllYXI6IG51bWJlcixcbiAgICBtb250aDogbnVtYmVyLFxuICAgIGRhdGU6IG51bWJlcixcbiAgICBob3VyczogbnVtYmVyID0gMCxcbiAgICBtaW51dGVzOiBudW1iZXIgPSAwLFxuICAgIHNlY29uZHM6IG51bWJlciA9IDBcbiAgKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcblxuICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8IDEwMCkge1xuICAgICAgcmVzdWx0LnNldEZ1bGxZZWFyKHRoaXMuZ2V0WWVhcihyZXN1bHQpIC0gMTkwMCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU3RyaXAgb3V0IHVuaWNvZGUgTFRSIGFuZCBSVEwgY2hhcmFjdGVycy4gRWRnZSBhbmQgSUUgaW5zZXJ0IHRoZXNlIGludG8gZm9ybWF0dGVkIGRhdGVzIHdoaWxlXG4gICAqIG90aGVyIGJyb3dzZXJzIGRvIG5vdC4gV2UgcmVtb3ZlIHRoZW0gdG8gbWFrZSBvdXRwdXQgY29uc2lzdGVudCBhbmQgYmVjYXVzZSB0aGV5IGludGVyZmVyZSB3aXRoXG4gICAqIGRhdGUgcGFyc2luZy5cbiAgICovXG4gIHByaXZhdGUgc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXHUyMDBlXFx1MjAwZl0vZywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gY29udmVydGluZyBEYXRlIG9iamVjdCB0byBzdHJpbmcsIGphdmFzY3JpcHQgYnVpbHQtaW4gZnVuY3Rpb25zIG1heSByZXR1cm4gd3JvbmdcbiAgICogcmVzdWx0cyBiZWNhdXNlIGl0IGFwcGxpZXMgaXRzIGludGVybmFsIERTVCBydWxlcy4gVGhlIERTVCBydWxlcyBhcm91bmQgdGhlIHdvcmxkIGNoYW5nZVxuICAgKiB2ZXJ5IGZyZXF1ZW50bHksIGFuZCB0aGUgY3VycmVudCB2YWxpZCBydWxlIGlzIG5vdCBhbHdheXMgdmFsaWQgaW4gcHJldmlvdXMgeWVhcnMgdGhvdWdoLlxuICAgKiBXZSB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0gYnVpbGRpbmcgYSBuZXcgRGF0ZSBvYmplY3Qgd2hpY2ggaGFzIGl0cyBpbnRlcm5hbCBVVENcbiAgICogcmVwcmVzZW50YXRpb24gd2l0aCB0aGUgbG9jYWwgZGF0ZSBhbmQgdGltZS5cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1hdChkdGY6IEludGwuRGF0ZVRpbWVGb3JtYXQsIGRhdGU6IERhdGUpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoXG4gICAgICBEYXRlLlVUQyhcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGR0Zi5mb3JtYXQoZCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export const OWL_NATIVE_DATE_TIME_FORMATS = {
2
+ parseInput: null,
3
+ fullPickerInput: {
4
+ year: 'numeric',
5
+ month: 'numeric',
6
+ day: 'numeric',
7
+ hour: 'numeric',
8
+ minute: 'numeric'
9
+ },
10
+ datePickerInput: { year: 'numeric', month: 'numeric', day: 'numeric' },
11
+ timePickerInput: { hour: 'numeric', minute: 'numeric' },
12
+ monthYearLabel: { year: 'numeric', month: 'short' },
13
+ dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },
14
+ monthYearA11yLabel: { year: 'numeric', month: 'long' }
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9uYXRpdmUtZGF0ZS10aW1lLWZvcm1hdC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBdUI7SUFDOUQsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixLQUFLLEVBQUUsU0FBUztRQUNoQixHQUFHLEVBQUUsU0FBUztRQUNkLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLFNBQVM7S0FDbEI7SUFDRCxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRTtJQUN0RSxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ25ELGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO0lBQ2pFLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG5hdGl2ZS1kYXRlLXRpbWUtZm9ybWF0LmNsYXNzXG4gKi9cbmltcG9ydCB7IE93bERhdGVUaW1lRm9ybWF0cyB9IGZyb20gJy4vZGF0ZS10aW1lLWZvcm1hdC5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBPV0xfTkFUSVZFX0RBVEVfVElNRV9GT1JNQVRTOiBPd2xEYXRlVGltZUZvcm1hdHMgPSB7XG4gIHBhcnNlSW5wdXQ6IG51bGwsXG4gIGZ1bGxQaWNrZXJJbnB1dDoge1xuICAgIHllYXI6ICdudW1lcmljJyxcbiAgICBtb250aDogJ251bWVyaWMnLFxuICAgIGRheTogJ251bWVyaWMnLFxuICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICBtaW51dGU6ICdudW1lcmljJ1xuICB9LFxuICBkYXRlUGlja2VySW5wdXQ6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ251bWVyaWMnLCBkYXk6ICdudW1lcmljJyB9LFxuICB0aW1lUGlja2VySW5wdXQ6IHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJyB9LFxuICBtb250aFllYXJMYWJlbDogeyB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnc2hvcnQnIH0sXG4gIGRhdGVBMTF5TGFiZWw6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ2xvbmcnLCBkYXk6ICdudW1lcmljJyB9LFxuICBtb250aFllYXJBMTF5TGFiZWw6IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ2xvbmcnIH1cbn07XG4iXX0=
@@ -0,0 +1,39 @@
1
+ /**
2
+ * native-date-time.module
3
+ */
4
+ import { NgModule } from '@angular/core';
5
+ import { PlatformModule } from '@angular/cdk/platform';
6
+ import { DateTimeAdapter } from './date-time-adapter.class';
7
+ import { NativeDateTimeAdapter } from './native-date-time-adapter.class';
8
+ import { OWL_DATE_TIME_FORMATS } from './date-time-format.class';
9
+ import { OWL_NATIVE_DATE_TIME_FORMATS } from './native-date-time-format.class';
10
+ import * as i0 from "@angular/core";
11
+ export class NativeDateTimeModule {
12
+ }
13
+ NativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ NativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, imports: [PlatformModule] });
15
+ NativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, providers: [{ provide: DateTimeAdapter, useClass: NativeDateTimeAdapter }], imports: [[PlatformModule]] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: NativeDateTimeModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ imports: [PlatformModule],
20
+ providers: [{ provide: DateTimeAdapter, useClass: NativeDateTimeAdapter }]
21
+ }]
22
+ }] });
23
+ export class OwlNativeDateTimeModule {
24
+ }
25
+ OwlNativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
26
+ OwlNativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, imports: [NativeDateTimeModule] });
27
+ OwlNativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, providers: [
28
+ { provide: OWL_DATE_TIME_FORMATS, useValue: OWL_NATIVE_DATE_TIME_FORMATS }
29
+ ], imports: [[NativeDateTimeModule]] });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlNativeDateTimeModule, decorators: [{
31
+ type: NgModule,
32
+ args: [{
33
+ imports: [NativeDateTimeModule],
34
+ providers: [
35
+ { provide: OWL_DATE_TIME_FORMATS, useValue: OWL_NATIVE_DATE_TIME_FORMATS }
36
+ ]
37
+ }]
38
+ }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvYWRhcHRlci9uYXRpdmUtZGF0ZS10aW1lLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFNL0UsTUFBTSxPQUFPLG9CQUFvQjs7a0hBQXBCLG9CQUFvQjttSEFBcEIsb0JBQW9CLFlBSHJCLGNBQWM7bUhBR2Isb0JBQW9CLGFBRnBCLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLFlBRGpFLENBQUMsY0FBYyxDQUFDOzRGQUdkLG9CQUFvQjtrQkFKaEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQ3pCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztpQkFDM0U7O0FBU0QsTUFBTSxPQUFPLHVCQUF1Qjs7cUhBQXZCLHVCQUF1QjtzSEFBdkIsdUJBQXVCLFlBUnZCLG9CQUFvQjtzSEFRcEIsdUJBQXVCLGFBSnZCO1FBQ1QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFO0tBQzNFLFlBSFEsQ0FBQyxvQkFBb0IsQ0FBQzs0RkFLcEIsdUJBQXVCO2tCQU5uQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUMvQixTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFO3FCQUMzRTtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbmF0aXZlLWRhdGUtdGltZS5tb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm1Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgRGF0ZVRpbWVBZGFwdGVyIH0gZnJvbSAnLi9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPV0xfREFURV9USU1FX0ZPUk1BVFMgfSBmcm9tICcuL2RhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuaW1wb3J0IHsgT1dMX05BVElWRV9EQVRFX1RJTUVfRk9STUFUUyB9IGZyb20gJy4vbmF0aXZlLWRhdGUtdGltZS1mb3JtYXQuY2xhc3MnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUGxhdGZvcm1Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IERhdGVUaW1lQWRhcHRlciwgdXNlQ2xhc3M6IE5hdGl2ZURhdGVUaW1lQWRhcHRlciB9XVxufSlcbmV4cG9ydCBjbGFzcyBOYXRpdmVEYXRlVGltZU1vZHVsZSB7fVxuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTmF0aXZlRGF0ZVRpbWVNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IE9XTF9EQVRFX1RJTUVfRk9STUFUUywgdXNlVmFsdWU6IE9XTF9OQVRJVkVfREFURV9USU1FX0ZPUk1BVFMgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE93bE5hdGl2ZURhdGVUaW1lTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,149 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output } from '@angular/core';
2
+ import { take } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class CalendarCell {
6
+ constructor(value, displayValue, ariaLabel, enabled, out = false, cellClass = '') {
7
+ this.value = value;
8
+ this.displayValue = displayValue;
9
+ this.ariaLabel = ariaLabel;
10
+ this.enabled = enabled;
11
+ this.out = out;
12
+ this.cellClass = cellClass;
13
+ }
14
+ }
15
+ export class OwlCalendarBodyComponent {
16
+ constructor(elmRef, ngZone) {
17
+ this.elmRef = elmRef;
18
+ this.ngZone = ngZone;
19
+ this.owlDTCalendarBodyClass = true;
20
+ /**
21
+ * The cell number of the active cell in the table.
22
+ */
23
+ this.activeCell = 0;
24
+ /**
25
+ * The number of columns in the table.
26
+ * */
27
+ this.numCols = 7;
28
+ /**
29
+ * The ratio (width / height) to use for the cells in the table.
30
+ */
31
+ this.cellRatio = 1;
32
+ /**
33
+ * Emit when a calendar cell is selected
34
+ * */
35
+ this.cellSelected = new EventEmitter();
36
+ }
37
+ get isInSingleMode() {
38
+ return this.selectMode === 'single';
39
+ }
40
+ get isInRangeMode() {
41
+ return (this.selectMode === 'range' ||
42
+ this.selectMode === 'rangeFrom' ||
43
+ this.selectMode === 'rangeTo');
44
+ }
45
+ selectCell(cell) {
46
+ this.cellSelected.emit(cell);
47
+ }
48
+ isActiveCell(rowIndex, colIndex) {
49
+ const cellNumber = rowIndex * this.numCols + colIndex;
50
+ return cellNumber === this.activeCell;
51
+ }
52
+ /**
53
+ * Check if the cell is selected
54
+ */
55
+ isSelected(value) {
56
+ if (!this.selectedValues || this.selectedValues.length === 0) {
57
+ return false;
58
+ }
59
+ if (this.isInSingleMode) {
60
+ return value === this.selectedValues[0];
61
+ }
62
+ if (this.isInRangeMode) {
63
+ const fromValue = this.selectedValues[0];
64
+ const toValue = this.selectedValues[1];
65
+ return value === fromValue || value === toValue;
66
+ }
67
+ }
68
+ /**
69
+ * Check if the cell in the range
70
+ * */
71
+ isInRange(value) {
72
+ if (this.isInRangeMode) {
73
+ const fromValue = this.selectedValues[0];
74
+ const toValue = this.selectedValues[1];
75
+ if (fromValue !== null && toValue !== null) {
76
+ return value >= fromValue && value <= toValue;
77
+ }
78
+ else {
79
+ return value === fromValue || value === toValue;
80
+ }
81
+ }
82
+ }
83
+ /**
84
+ * Check if the cell is the range from
85
+ * */
86
+ isRangeFrom(value) {
87
+ if (this.isInRangeMode) {
88
+ const fromValue = this.selectedValues[0];
89
+ return fromValue !== null && value === fromValue;
90
+ }
91
+ }
92
+ /**
93
+ * Check if the cell is the range to
94
+ * */
95
+ isRangeTo(value) {
96
+ if (this.isInRangeMode) {
97
+ const toValue = this.selectedValues[1];
98
+ return toValue !== null && value === toValue;
99
+ }
100
+ }
101
+ /**
102
+ * Focus to a active cell
103
+ * */
104
+ focusActiveCell() {
105
+ this.ngZone.runOutsideAngular(() => {
106
+ this.ngZone.onStable
107
+ .asObservable()
108
+ .pipe(take(1))
109
+ .subscribe(() => {
110
+ this.elmRef.nativeElement
111
+ .querySelector('.owl-dt-calendar-cell-active')
112
+ .focus();
113
+ });
114
+ });
115
+ }
116
+ }
117
+ OwlCalendarBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlCalendarBodyComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
118
+ OwlCalendarBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: OwlCalendarBodyComponent, selector: "[ofe-owl-date-time-calendar-body]", inputs: { activeCell: "activeCell", rows: "rows", numCols: "numCols", cellRatio: "cellRatio", todayValue: "todayValue", selectedValues: "selectedValues", selectMode: "selectMode" }, outputs: { cellSelected: "cellSelected" }, host: { properties: { "class.owl-dt-calendar-body": "this.owlDTCalendarBodyClass" } }, exportAs: ["owlDateTimeCalendarBody"], ngImport: i0, template: "<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\n <td\n *ngFor=\"let item of row; let colIndex = index\"\n class=\"owl-dt-calendar-cell {{ item.cellClass }}\"\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.owl-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\n [class.owl-dt-calendar-cell-disabled]=\"!item.enabled\"\n [class.owl-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\n [class.owl-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\n [class.owl-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [style.width.%]=\"100 / numCols\"\n [style.paddingTop.%]=\"(50 * cellRatio) / numCols\"\n [style.paddingBottom.%]=\"(50 * cellRatio) / numCols\"\n (click)=\"selectCell(item)\"\n >\n <span\n class=\"owl-dt-calendar-cell-content\"\n [ngClass]=\"{\n 'owl-dt-calendar-cell-out': item.out,\n 'owl-dt-calendar-cell-today': item.value === todayValue,\n 'owl-dt-calendar-cell-selected': isSelected(item.value)\n }\"\n >\n {{ item.displayValue }}\n </span>\n </td>\n</tr>\n", styles: [""], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: OwlCalendarBodyComponent, decorators: [{
120
+ type: Component,
121
+ args: [{
122
+ /* eslint-disable-next-line @angular-eslint/component-selector */
123
+ selector: '[ofe-owl-date-time-calendar-body]',
124
+ exportAs: 'owlDateTimeCalendarBody',
125
+ templateUrl: './calendar-body.component.html',
126
+ styleUrls: ['./calendar-body.component.scss'],
127
+ changeDetection: ChangeDetectionStrategy.OnPush
128
+ }]
129
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { owlDTCalendarBodyClass: [{
130
+ type: HostBinding,
131
+ args: ['class.owl-dt-calendar-body']
132
+ }], activeCell: [{
133
+ type: Input
134
+ }], rows: [{
135
+ type: Input
136
+ }], numCols: [{
137
+ type: Input
138
+ }], cellRatio: [{
139
+ type: Input
140
+ }], todayValue: [{
141
+ type: Input
142
+ }], selectedValues: [{
143
+ type: Input
144
+ }], selectMode: [{
145
+ type: Input
146
+ }], cellSelected: [{
147
+ type: Output
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybWVudHJ5L3NyYy9jb21wb25lbnRzL25neC1waWNrLWRhdGV0aW1lL2xpYi9kYXRlLXRpbWUvY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUd0QyxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNTLEtBQWEsRUFDYixZQUFvQixFQUNwQixTQUFpQixFQUNqQixPQUFnQixFQUNoQixNQUFNLEtBQUssRUFDWCxZQUFvQixFQUFFO1FBTHRCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWE7SUFDNUIsQ0FBQztDQUNMO0FBVUQsTUFBTSxPQUFPLHdCQUF3QjtJQStEbkMsWUFBb0IsTUFBa0IsRUFBVSxNQUFjO1FBQTFDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBOURuQiwyQkFBc0IsR0FBRyxJQUFJ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SUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUNqQixZQUFZLEVBQUU7aUJBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYTtxQkFDdEIsYUFBYSxDQUFDLDhCQUE4QixDQUFDO3FCQUM3QyxLQUFLLEVBQUUsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztzSEFoSlUsd0JBQXdCOzBHQUF4Qix3QkFBd0Isd2FDaENyQyx1c0NBNkJBOzRGREdhLHdCQUF3QjtrQkFScEMsU0FBUzttQkFBQztvQkFDVCxpRUFBaUU7b0JBQ2pFLFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLFNBQVMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO29CQUM3QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7c0hBRTRDLHNCQUFzQjtzQkFBaEUsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBTXpDLFVBQVU7c0JBRFQsS0FBSztnQkFPTixJQUFJO3NCQURILEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPVSxZQUFZO3NCQUQzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNlbGVjdE1vZGUgfSBmcm9tICcuL2RhdGUtdGltZS5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNlbGwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmFsdWU6IG51bWJlcixcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmcsXG4gICAgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgIHB1YmxpYyBlbmFibGVkOiBib29sZWFuLFxuICAgIHB1YmxpYyBvdXQgPSBmYWxzZSxcbiAgICBwdWJsaWMgY2VsbENsYXNzOiBzdHJpbmcgPSAnJ1xuICApIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuICBzZWxlY3RvcjogJ1tvZmUtb3dsLWRhdGUtdGltZS1jYWxlbmRhci1ib2R5XScsXG4gIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVDYWxlbmRhckJvZHknLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItYm9keS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWJvZHkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT3dsQ2FsZW5kYXJCb2R5Q29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY2FsZW5kYXItYm9keScpIG93bERUQ2FsZW5kYXJCb2R5Q2xhc3MgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCBudW1iZXIgb2YgdGhlIGFjdGl2ZSBjZWxsIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUNlbGwgPSAwO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VsbHMgdG8gZGlzcGxheSBpbiB0aGUgdGFibGUuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIHJvd3M6IENhbGVuZGFyQ2VsbFtdW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIG51bUNvbHMgPSA3O1xuXG4gIC8qKlxuICAgKiBUaGUgcmF0aW8gKHdpZHRoIC8gaGVpZ2h0KSB0byB1c2UgZm9yIHRoZSBjZWxscyBpbiB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBjZWxsUmF0aW8gPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgaW4gdGhlIHRhYmxlIHRoYXQgY29ycmVzcG9uZHMgdG8gdG9kYXkuXG4gICAqICovXG4gIEBJbnB1dCgpXG4gIHRvZGF5VmFsdWU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhbHVlIGluIHRoZSB0YWJsZSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC5cbiAgICogKi9cbiAgQElucHV0KClcbiAgc2VsZWN0ZWRWYWx1ZXM6IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHBpY2tlciBzZWxlY3QgbW9kZVxuICAgKi9cbiAgQElucHV0KClcbiAgc2VsZWN0TW9kZTogU2VsZWN0TW9kZTtcblxuICAvKipcbiAgICogRW1pdCB3aGVuIGEgY2FsZW5kYXIgY2VsbCBpcyBzZWxlY3RlZFxuICAgKiAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGNlbGxTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJDZWxsPigpO1xuXG4gIGdldCBpc0luU2luZ2xlTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlID09PSAnc2luZ2xlJztcbiAgfVxuXG4gIGdldCBpc0luUmFuZ2VNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgfHxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlRnJvbScgfHxcbiAgICAgIHRoaXMuc2VsZWN0TW9kZSA9PT0gJ3JhbmdlVG8nXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxtUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIHB1YmxpYyBzZWxlY3RDZWxsKGNlbGw6IENhbGVuZGFyQ2VsbCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbFNlbGVjdGVkLmVtaXQoY2VsbCk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3RpdmVDZWxsKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjZWxsTnVtYmVyID0gcm93SW5kZXggKiB0aGlzLm51bUNvbHMgKyBjb2xJbmRleDtcbiAgICByZXR1cm4gY2VsbE51bWJlciA9PT0gdGhpcy5hY3RpdmVDZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBjZWxsIGlzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgaXNTZWxlY3RlZCh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmFsdWVzIHx8IHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0luUmFuZ2VNb2RlKSB7XG4gICAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzBdO1xuICAgICAgY29uc3QgdG9WYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXNbMV07XG5cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gZnJvbVZhbHVlIHx8IHZhbHVlID09PSB0b1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY2VsbCBpbiB0aGUgcmFuZ2VcbiAgICogKi9cbiAgcHVibGljIGlzSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICAgIGNvbnN0IHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuXG4gICAgICBpZiAoZnJvbVZhbHVlICE9PSBudWxsICYmIHRvVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID49IGZyb21WYWx1ZSAmJiB2YWx1ZSA8PSB0b1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmcm9tVmFsdWUgfHwgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBjZWxsIGlzIHRoZSByYW5nZSBmcm9tXG4gICAqICovXG4gIHB1YmxpYyBpc1JhbmdlRnJvbSh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNJblJhbmdlTW9kZSkge1xuICAgICAgY29uc3QgZnJvbVZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlc1swXTtcbiAgICAgIHJldHVybiBmcm9tVmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPT09IGZyb21WYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGNlbGwgaXMgdGhlIHJhbmdlIHRvXG4gICAqICovXG4gIHB1YmxpYyBpc1JhbmdlVG8odmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzSW5SYW5nZU1vZGUpIHtcbiAgICAgIGNvbnN0IHRvVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzWzFdO1xuICAgICAgcmV0dXJuIHRvVmFsdWUgIT09IG51bGwgJiYgdmFsdWUgPT09IHRvVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRvIGEgYWN0aXZlIGNlbGxcbiAgICogKi9cbiAgcHVibGljIGZvY3VzQWN0aXZlQ2VsbCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5vd2wtZHQtY2FsZW5kYXItY2VsbC1hY3RpdmUnKVxuICAgICAgICAgICAgLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiIHJvbGU9XCJyb3dcIj5cbiAgPHRkXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93OyBsZXQgY29sSW5kZXggPSBpbmRleFwiXG4gICAgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItY2VsbCB7eyBpdGVtLmNlbGxDbGFzcyB9fVwiXG4gICAgW3RhYmluZGV4XT1cImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpID8gMCA6IC0xXCJcbiAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtYWN0aXZlXT1cImlzQWN0aXZlQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpXCJcbiAgICBbY2xhc3Mub3dsLWR0LWNhbGVuZGFyLWNlbGwtZGlzYWJsZWRdPVwiIWl0ZW0uZW5hYmxlZFwiXG4gICAgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLWluLXJhbmdlXT1cImlzSW5SYW5nZShpdGVtLnZhbHVlKVwiXG4gICAgW2NsYXNzLm93bC1kdC1jYWxlbmRhci1jZWxsLXJhbmdlLWZyb21dPVwiaXNSYW5nZUZyb20oaXRlbS52YWx1ZSlcIlxuICAgIFtjbGFzcy5vd2wtZHQtY2FsZW5kYXItY2VsbC1yYW5nZS10b109XCJpc1JhbmdlVG8oaXRlbS52YWx1ZSlcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiIWl0ZW0uZW5hYmxlZCB8fCBudWxsXCJcbiAgICBbc3R5bGUud2lkdGguJV09XCIxMDAgLyBudW1Db2xzXCJcbiAgICBbc3R5bGUucGFkZGluZ1RvcC4lXT1cIig1MCAqIGNlbGxSYXRpbykgLyBudW1Db2xzXCJcbiAgICBbc3R5bGUucGFkZGluZ0JvdHRvbS4lXT1cIig1MCAqIGNlbGxSYXRpbykgLyBudW1Db2xzXCJcbiAgICAoY2xpY2spPVwic2VsZWN0Q2VsbChpdGVtKVwiXG4gID5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJvd2wtZHQtY2FsZW5kYXItY2VsbC1jb250ZW50XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ293bC1kdC1jYWxlbmRhci1jZWxsLW91dCc6IGl0ZW0ub3V0LFxuICAgICAgICAnb3dsLWR0LWNhbGVuZGFyLWNlbGwtdG9kYXknOiBpdGVtLnZhbHVlID09PSB0b2RheVZhbHVlLFxuICAgICAgICAnb3dsLWR0LWNhbGVuZGFyLWNlbGwtc2VsZWN0ZWQnOiBpc1NlbGVjdGVkKGl0ZW0udmFsdWUpXG4gICAgICB9XCJcbiAgICA+XG4gICAgICB7eyBpdGVtLmRpc3BsYXlWYWx1ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC90ZD5cbjwvdHI+XG4iXX0=