@rivet-health/design-system 40.44.0 → 40.44.2

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 (321) hide show
  1. package/{esm2020 → esm2022}/lib/accessibility/sr-only/sr-only.component.mjs +4 -4
  2. package/esm2022/lib/download/download.service.mjs +47 -0
  3. package/{esm2020 → esm2022}/lib/format/pipes/common.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/format/pipes/date.pipe.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/format/pipes/days.pipe.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/format/pipes/dollars.pipe.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/format/pipes/number.pipe.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/format/pipes/percentage.pipe.mjs +4 -4
  9. package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +61 -0
  10. package/esm2022/lib/format/pipes/small-currency.pipe.mjs +24 -0
  11. package/esm2022/lib/format/pipes/small-number.pipe.mjs +29 -0
  12. package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +62 -0
  13. package/esm2022/lib/format/truncate/truncate.component.mjs +51 -0
  14. package/esm2022/lib/icon/dom-cache.mjs +32 -0
  15. package/esm2022/lib/icon/icon.component.mjs +86 -0
  16. package/{esm2020 → esm2022}/lib/icon/icons.mjs +1 -1
  17. package/{esm2020 → esm2022}/lib/input/alphabetic-field/alphabetic-field.component.mjs +4 -4
  18. package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +48 -0
  19. package/esm2022/lib/input/button/button.component.mjs +139 -0
  20. package/esm2022/lib/input/button-group/button-group.component.mjs +39 -0
  21. package/{esm2020 → esm2022}/lib/input/calendar/calendar.component.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/input/card-checkbox/card-checkbox.component.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/input/checkbox/checkbox.component.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/input/currency-field/currency-field.component.mjs +4 -4
  25. package/esm2022/lib/input/date/date.component.mjs +279 -0
  26. package/esm2022/lib/input/date-range/date-range.component.mjs +477 -0
  27. package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +47 -0
  28. package/{esm2020 → esm2022}/lib/input/filter-dropdown/filter-dropdown.component.mjs +5 -5
  29. package/{esm2020 → esm2022}/lib/input/input-label/input-label.component.mjs +4 -4
  30. package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +745 -0
  31. package/esm2022/lib/input/number-field/number-field.component.mjs +125 -0
  32. package/{esm2020 → esm2022}/lib/input/percentage-field/percentage-field.component.mjs +4 -4
  33. package/esm2022/lib/input/phone-field/phone-field.component.mjs +74 -0
  34. package/{esm2020 → esm2022}/lib/input/radio/radio.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/input/search/search.component.mjs +4 -4
  36. package/esm2022/lib/input/search-select/search-select.component.mjs +189 -0
  37. package/esm2022/lib/input/select/select/select.component.mjs +178 -0
  38. package/{esm2020 → esm2022}/lib/input/select/select-node/select-node.component.mjs +4 -4
  39. package/esm2022/lib/input/select/state.mjs +882 -0
  40. package/{esm2020 → esm2022}/lib/input/simple-select/option-group.pipe.mjs +4 -4
  41. package/esm2022/lib/input/simple-select/simple-select.component.mjs +178 -0
  42. package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +33 -0
  43. package/esm2022/lib/input/text-field/text-field.component.mjs +115 -0
  44. package/{esm2020 → esm2022}/lib/input/textarea-field/textarea-field.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/input/validation-message/validation-message.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/layout/card/card-actions.component.mjs +4 -4
  47. package/esm2022/lib/layout/card/card-content.component.mjs +64 -0
  48. package/esm2022/lib/layout/card/card-header.component.mjs +201 -0
  49. package/{esm2020 → esm2022}/lib/layout/card/card-link.component.mjs +5 -5
  50. package/{esm2020 → esm2022}/lib/layout/card/card-media.component.mjs +4 -4
  51. package/esm2022/lib/layout/card/card.component.mjs +291 -0
  52. package/{esm2020 → esm2022}/lib/layout/setting-row/setting-row.component.mjs +4 -4
  53. package/esm2022/lib/load/loading/loading.component.mjs +43 -0
  54. package/{esm2020 → esm2022}/lib/load/loading-cover/loading-cover.component.mjs +4 -4
  55. package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +243 -0
  56. package/{esm2020 → esm2022}/lib/navigation/link/link.component.mjs +6 -6
  57. package/{esm2020 → esm2022}/lib/navigation/page-header/page-header.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/navigation/tabs/tab/tab.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/lib/navigation/tabs/tabs/tabs.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/navigation/views/edit-view/edit-view.component.mjs +9 -9
  64. package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +151 -0
  65. package/esm2022/lib/navigation/views/state.mjs +456 -0
  66. package/{esm2020 → esm2022}/lib/navigation/views/view-menu/view-menu.component.mjs +5 -5
  67. package/esm2022/lib/navigation/views/views/views.component.mjs +90 -0
  68. package/{esm2020 → esm2022}/lib/notification/badge/badge.component.mjs +4 -4
  69. package/esm2022/lib/notification/banner/banner-action.component.mjs +48 -0
  70. package/esm2022/lib/notification/banner/banner.component.mjs +61 -0
  71. package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +50 -0
  72. package/esm2022/lib/notification/map-indicator/map-indicators.mjs +15 -0
  73. package/{esm2020 → esm2022}/lib/notification/notification-badge/notification-badge.component.mjs +4 -4
  74. package/esm2022/lib/overlay/callout/callout.component.mjs +130 -0
  75. package/esm2022/lib/overlay/callout/callout.helpers.mjs +113 -0
  76. package/{esm2020 → esm2022}/lib/overlay/callout/help/help.component.mjs +4 -4
  77. package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +69 -0
  78. package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +5 -5
  79. package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu.component.mjs +4 -4
  80. package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +30 -0
  81. package/{esm2020 → esm2022}/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -4
  82. package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +138 -0
  83. package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +47 -0
  84. package/{esm2020 → esm2022}/lib/overlay/modal/dialog-stack.service.mjs +4 -4
  85. package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +146 -0
  86. package/esm2022/lib/overlay/modal/modal.component.mjs +31 -0
  87. package/{esm2020 → esm2022}/lib/overlay/modal/side-sheet/side-sheet.component.mjs +4 -4
  88. package/esm2022/lib/overlay/overlay-outlet.component.mjs +98 -0
  89. package/{esm2020 → esm2022}/lib/overlay/overlay.directive.mjs +5 -5
  90. package/{esm2020 → esm2022}/lib/overlay/overlay.service.mjs +5 -5
  91. package/{esm2020 → esm2022}/lib/overlay/toast/toast-action.component.mjs +4 -4
  92. package/esm2022/lib/overlay/toast/toast.component.mjs +41 -0
  93. package/{esm2020 → esm2022}/lib/riv.module.mjs +227 -227
  94. package/esm2022/lib/size/size.directive.mjs +33 -0
  95. package/esm2022/lib/table/simple-table/coordinate-helper.mjs +61 -0
  96. package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +36 -0
  97. package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +37 -0
  98. package/{esm2020 → esm2022}/lib/table/simple-table/simple-table-row.component.mjs +4 -4
  99. package/esm2022/lib/table/simple-table/simple-table.component.mjs +104 -0
  100. package/esm2022/lib/table/table/clipboard.mjs +182 -0
  101. package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +116 -0
  102. package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +383 -0
  103. package/{esm2020 → esm2022}/lib/table/table/state-helpers/display-helpers.mjs +1 -1
  104. package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +123 -0
  105. package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +164 -0
  106. package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +139 -0
  107. package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +70 -0
  108. package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +72 -0
  109. package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +180 -0
  110. package/esm2022/lib/table/table/state.mjs +1035 -0
  111. package/esm2022/lib/table/table/table/table.component.mjs +367 -0
  112. package/{esm2020 → esm2022}/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +5 -5
  113. package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +227 -0
  114. package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +134 -0
  115. package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +35 -0
  116. package/{esm2020 → esm2022}/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +6 -6
  117. package/esm2022/lib/table/table/table-search/table-search.component.mjs +71 -0
  118. package/{esm2020 → esm2022}/lib/table/table/table-search-columns/table-search-columns.component.mjs +4 -4
  119. package/esm2022/lib/visibility/visibility.directive.mjs +34 -0
  120. package/esm2022/lib/visualization/chart/chart-scaling.mjs +380 -0
  121. package/esm2022/lib/visualization/chart/chart.component.mjs +626 -0
  122. package/esm2022/lib/visualization/chart/chart.mjs +3768 -0
  123. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-cell.component.mjs +5 -5
  124. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-header-cell.component.mjs +4 -4
  125. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-row.component.mjs +4 -4
  126. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table.component.mjs +4 -4
  127. package/{esm2020 → esm2022}/lib/visualization/donut/donut.component.mjs +4 -4
  128. package/{esm2020 → esm2022}/lib/visualization/funnel-chart/funnel-chart.component.mjs +5 -5
  129. package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +33 -0
  130. package/{esm2020 → esm2022}/lib/visualization/highlight/highlight.component.mjs +4 -4
  131. package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +20 -0
  132. package/esm2022/lib/visualization/intervals.mjs +63 -0
  133. package/{esm2020 → esm2022}/lib/visualization/issue/issue.component.mjs +4 -4
  134. package/{esm2020 → esm2022}/lib/visualization/legend-item/legend-item.component.mjs +4 -4
  135. package/{esm2020 → esm2022}/lib/visualization/metric/metric.component.mjs +4 -4
  136. package/{esm2020 → esm2022}/lib/visualization/mini-pie/mini-pie.component.mjs +4 -4
  137. package/{esm2020 → esm2022}/lib/visualization/progress/progress.component.mjs +5 -5
  138. package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +377 -0
  139. package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +18 -0
  140. package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +270 -0
  141. package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +74 -0
  142. package/esm2022/lib/visualization/time-series/time-series.component.mjs +374 -0
  143. package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +15 -0
  144. package/esm2022/lib/visualization/trend/trend.component.mjs +51 -0
  145. package/{esm2020 → esm2022}/lib/visualization/zero-state/zero-state.component.mjs +4 -4
  146. package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs +670 -670
  147. package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs.map +1 -1
  148. package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +1 -1
  149. package/lib/format/truncate/truncate.component.d.ts +1 -1
  150. package/lib/icon/icon.component.d.ts +1 -1
  151. package/lib/input/auto-focus/auto-focus.directive.d.ts +1 -1
  152. package/lib/input/button/button.component.d.ts +1 -1
  153. package/lib/input/calendar/calendar.component.d.ts +1 -1
  154. package/lib/input/checkbox/checkbox.component.d.ts +1 -1
  155. package/lib/input/currency-field/currency-field.component.d.ts +1 -1
  156. package/lib/input/date/date.component.d.ts +1 -1
  157. package/lib/input/date-range/date-range.component.d.ts +1 -1
  158. package/lib/input/filter-chip/filter-chip.component.d.ts +1 -1
  159. package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +1 -1
  160. package/lib/input/input-label/input-label.component.d.ts +1 -1
  161. package/lib/input/mentions-input/mentions-input.component.d.ts +1 -1
  162. package/lib/input/number-field/number-field.component.d.ts +1 -1
  163. package/lib/input/percentage-field/percentage-field.component.d.ts +1 -1
  164. package/lib/input/phone-field/phone-field.component.d.ts +1 -1
  165. package/lib/input/radio/radio.component.d.ts +1 -1
  166. package/lib/input/search/search.component.d.ts +1 -1
  167. package/lib/input/search-select/search-select.component.d.ts +1 -1
  168. package/lib/input/select/select/select.component.d.ts +1 -1
  169. package/lib/input/select/select-node/select-node.component.d.ts +1 -1
  170. package/lib/input/simple-select/simple-select.component.d.ts +1 -1
  171. package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +1 -1
  172. package/lib/input/text-field/text-field.component.d.ts +1 -1
  173. package/lib/input/textarea-field/textarea-field.component.d.ts +1 -1
  174. package/lib/input/validation-message/validation-message.component.d.ts +1 -1
  175. package/lib/layout/card/card-actions.component.d.ts +1 -1
  176. package/lib/layout/card/card-content.component.d.ts +1 -1
  177. package/lib/layout/card/card-header.component.d.ts +1 -1
  178. package/lib/layout/card/card-link.component.d.ts +1 -1
  179. package/lib/layout/card/card-media.component.d.ts +1 -1
  180. package/lib/layout/card/card.component.d.ts +1 -1
  181. package/lib/layout/setting-row/setting-row.component.d.ts +1 -1
  182. package/lib/load/loading/loading.component.d.ts +1 -1
  183. package/lib/load/loading-cover/loading-cover.component.d.ts +1 -1
  184. package/lib/navigation/editable-heading/editable-heading.component.d.ts +1 -1
  185. package/lib/navigation/link/link.component.d.ts +1 -1
  186. package/lib/navigation/page-header/page-header.component.d.ts +1 -1
  187. package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +1 -1
  188. package/lib/navigation/tabs/tab/tab.component.d.ts +1 -1
  189. package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +1 -1
  190. package/lib/navigation/views/edit-view/edit-view.component.d.ts +1 -1
  191. package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +3 -3
  192. package/lib/navigation/views/view-menu/view-menu.component.d.ts +1 -1
  193. package/lib/navigation/views/views/views.component.d.ts +1 -1
  194. package/lib/notification/badge/badge.component.d.ts +1 -1
  195. package/lib/notification/banner/banner-action.component.d.ts +1 -1
  196. package/lib/notification/banner/banner.component.d.ts +1 -1
  197. package/lib/notification/map-indicator/map-indicator.component.d.ts +1 -1
  198. package/lib/notification/notification-badge/notification-badge.component.d.ts +1 -1
  199. package/lib/overlay/callout/callout.component.d.ts +1 -1
  200. package/lib/overlay/callout/help/help.component.d.ts +1 -1
  201. package/lib/overlay/callout/lock-scroll.directive.d.ts +1 -1
  202. package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +1 -1
  203. package/lib/overlay/callout/menu/menu.component.d.ts +1 -1
  204. package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +1 -1
  205. package/lib/overlay/callout/tooltip/tooltip.component.d.ts +1 -1
  206. package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +1 -1
  207. package/lib/overlay/modal/dialog/dialog.component.d.ts +1 -1
  208. package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +1 -1
  209. package/lib/overlay/modal/modal.component.d.ts +1 -1
  210. package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +1 -1
  211. package/lib/overlay/toast/toast.component.d.ts +1 -1
  212. package/lib/table/simple-table/simple-table-header-cell.component.d.ts +1 -1
  213. package/lib/table/simple-table/simple-table-row.component.d.ts +1 -1
  214. package/lib/table/table/table/table.component.d.ts +1 -1
  215. package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +1 -1
  216. package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +1 -1
  217. package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +1 -1
  218. package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +1 -1
  219. package/lib/table/table/table-search/table-search.component.d.ts +1 -1
  220. package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +1 -1
  221. package/lib/visualization/chart/chart.component.d.ts +1 -1
  222. package/lib/visualization/data-table/data-table-row.component.d.ts +1 -1
  223. package/lib/visualization/donut/donut.component.d.ts +1 -1
  224. package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +1 -1
  225. package/lib/visualization/highlight/highlight.component.d.ts +1 -1
  226. package/lib/visualization/issue/issue.component.d.ts +1 -1
  227. package/lib/visualization/legend-item/legend-item.component.d.ts +1 -1
  228. package/lib/visualization/metric/metric.component.d.ts +1 -1
  229. package/lib/visualization/mini-pie/mini-pie.component.d.ts +1 -1
  230. package/lib/visualization/progress/progress.component.d.ts +1 -1
  231. package/lib/visualization/stacked-column/stacked-column.component.d.ts +3 -3
  232. package/lib/visualization/stacked-row/stacked-row.component.d.ts +1 -1
  233. package/lib/visualization/time-series/time-series.component.d.ts +3 -3
  234. package/lib/visualization/trend/trend.component.d.ts +1 -1
  235. package/lib/visualization/zero-state/zero-state.component.d.ts +1 -1
  236. package/package.json +5 -11
  237. package/esm2020/lib/download/download.service.mjs +0 -47
  238. package/esm2020/lib/format/pipes/sentence-case.pipe.mjs +0 -61
  239. package/esm2020/lib/format/pipes/small-currency.pipe.mjs +0 -24
  240. package/esm2020/lib/format/pipes/small-number.pipe.mjs +0 -29
  241. package/esm2020/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
  242. package/esm2020/lib/format/truncate/truncate.component.mjs +0 -51
  243. package/esm2020/lib/icon/dom-cache.mjs +0 -32
  244. package/esm2020/lib/icon/icon.component.mjs +0 -86
  245. package/esm2020/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
  246. package/esm2020/lib/input/button/button.component.mjs +0 -139
  247. package/esm2020/lib/input/button-group/button-group.component.mjs +0 -39
  248. package/esm2020/lib/input/date/date.component.mjs +0 -279
  249. package/esm2020/lib/input/date-range/date-range.component.mjs +0 -477
  250. package/esm2020/lib/input/filter-chip/filter-chip.component.mjs +0 -47
  251. package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +0 -745
  252. package/esm2020/lib/input/number-field/number-field.component.mjs +0 -125
  253. package/esm2020/lib/input/phone-field/phone-field.component.mjs +0 -74
  254. package/esm2020/lib/input/search-select/search-select.component.mjs +0 -189
  255. package/esm2020/lib/input/select/select/select.component.mjs +0 -178
  256. package/esm2020/lib/input/select/state.mjs +0 -882
  257. package/esm2020/lib/input/simple-select/simple-select.component.mjs +0 -178
  258. package/esm2020/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
  259. package/esm2020/lib/input/text-field/text-field.component.mjs +0 -115
  260. package/esm2020/lib/layout/card/card-content.component.mjs +0 -64
  261. package/esm2020/lib/layout/card/card-header.component.mjs +0 -201
  262. package/esm2020/lib/layout/card/card.component.mjs +0 -291
  263. package/esm2020/lib/load/loading/loading.component.mjs +0 -43
  264. package/esm2020/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
  265. package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
  266. package/esm2020/lib/navigation/views/state.mjs +0 -456
  267. package/esm2020/lib/navigation/views/views/views.component.mjs +0 -90
  268. package/esm2020/lib/notification/banner/banner-action.component.mjs +0 -48
  269. package/esm2020/lib/notification/banner/banner.component.mjs +0 -61
  270. package/esm2020/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
  271. package/esm2020/lib/notification/map-indicator/map-indicators.mjs +0 -15
  272. package/esm2020/lib/overlay/callout/callout.component.mjs +0 -130
  273. package/esm2020/lib/overlay/callout/callout.helpers.mjs +0 -113
  274. package/esm2020/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
  275. package/esm2020/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
  276. package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
  277. package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
  278. package/esm2020/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
  279. package/esm2020/lib/overlay/modal/modal.component.mjs +0 -31
  280. package/esm2020/lib/overlay/overlay-outlet.component.mjs +0 -98
  281. package/esm2020/lib/overlay/toast/toast.component.mjs +0 -41
  282. package/esm2020/lib/size/size.directive.mjs +0 -33
  283. package/esm2020/lib/table/simple-table/coordinate-helper.mjs +0 -61
  284. package/esm2020/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
  285. package/esm2020/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
  286. package/esm2020/lib/table/simple-table/simple-table.component.mjs +0 -104
  287. package/esm2020/lib/table/table/clipboard.mjs +0 -182
  288. package/esm2020/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
  289. package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +0 -383
  290. package/esm2020/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
  291. package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +0 -164
  292. package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
  293. package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +0 -70
  294. package/esm2020/lib/table/table/state-helpers/search-helpers.mjs +0 -72
  295. package/esm2020/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
  296. package/esm2020/lib/table/table/state.mjs +0 -1035
  297. package/esm2020/lib/table/table/table/table.component.mjs +0 -367
  298. package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
  299. package/esm2020/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
  300. package/esm2020/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
  301. package/esm2020/lib/table/table/table-search/table-search.component.mjs +0 -71
  302. package/esm2020/lib/visibility/visibility.directive.mjs +0 -34
  303. package/esm2020/lib/visualization/chart/chart-scaling.mjs +0 -380
  304. package/esm2020/lib/visualization/chart/chart.component.mjs +0 -626
  305. package/esm2020/lib/visualization/chart/chart.mjs +0 -3768
  306. package/esm2020/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
  307. package/esm2020/lib/visualization/highlight/highlight.helpers.mjs +0 -20
  308. package/esm2020/lib/visualization/intervals.mjs +0 -63
  309. package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
  310. package/esm2020/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
  311. package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
  312. package/esm2020/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
  313. package/esm2020/lib/visualization/time-series/time-series.component.mjs +0 -374
  314. package/esm2020/lib/visualization/time-series/time-series.helpers.mjs +0 -15
  315. package/esm2020/lib/visualization/trend/trend.component.mjs +0 -51
  316. package/fesm2015/rivet-health-design-system.mjs +0 -18370
  317. package/fesm2015/rivet-health-design-system.mjs.map +0 -1
  318. /package/{esm2020 → esm2022}/lib/overlay/callout/select-callout-defaults.mjs +0 -0
  319. /package/{esm2020 → esm2022}/lib/util/local-storage.mjs +0 -0
  320. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  321. /package/{esm2020 → esm2022}/rivet-health-design-system.mjs +0 -0
@@ -1,477 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, Input, Output, ViewChild, } from '@angular/core';
2
- import { timeDay, timeMonth, timeSunday, timeWeek, timeYear } from 'd3-time';
3
- import { BehaviorSubject, Subject, combineLatest, distinctUntilChanged, filter, map, merge, scan, shareReplay, skipUntil, startWith, } from 'rxjs';
4
- import { DatePipe } from '../../format/pipes/date.pipe';
5
- import { LocalStorage } from '../../util/local-storage';
6
- import { CalendarComponent } from '../calendar/calendar.component';
7
- import { InputLabelComponent } from '../input-label/input-label.component';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "../button/button.component";
11
- import * as i3 from "../calendar/calendar.component";
12
- import * as i4 from "../../overlay/callout/callout.component";
13
- import * as i5 from "../../visualization/highlight/highlight.component";
14
- import * as i6 from "../../icon/icon.component";
15
- import * as i7 from "../input-label/input-label.component";
16
- import * as i8 from "../../overlay/overlay.directive";
17
- import * as i9 from "../simple-select/simple-select.component";
18
- import * as i10 from "../../overlay/callout/tooltip/tooltip.directive";
19
- import * as i11 from "../simple-select/option-group.pipe";
20
- const timeQuarter = timeMonth.every(3);
21
- // TODO: once we upgrade to Angular 16, this component can be cleaned up with
22
- // signals instead of RxJS.
23
- // https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08
24
- export class DateRangeComponent extends InputLabelComponent {
25
- constructor() {
26
- super(...arguments);
27
- this.TODAY = new Date();
28
- this.STORAGE_KEY = 'date-range.default';
29
- this.showPresets$ = new BehaviorSubject(true);
30
- this.min$ = new BehaviorSubject(CalendarComponent.defaultMin);
31
- this.max$ = new BehaviorSubject(CalendarComponent.defaultMax);
32
- this.value$ = new BehaviorSubject(undefined);
33
- this.distinctValue$ = this.value$.pipe(distinctUntilChanged((previous, current) => previous?.[0].valueOf() === current?.[0].valueOf() &&
34
- previous?.[1].valueOf() === current?.[1].valueOf()), shareReplay({ refCount: true, bufferSize: 1 }));
35
- this.placeholder$ = new BehaviorSubject('Select date range');
36
- this.disabled$ = new BehaviorSubject(false);
37
- this.alternativePresetList$ = new BehaviorSubject([]);
38
- this.open$ = new BehaviorSubject(false);
39
- this.userSelectedPreset$ = new Subject();
40
- this.userSelectedDate$ = new Subject();
41
- this.selectedValue$ = merge(this.distinctValue$, this.userSelectedDate$.pipe(scan((previous, date) => {
42
- if (previous instanceof Date && date instanceof Date) {
43
- if (date.valueOf() >= previous.valueOf()) {
44
- const pair = [previous, date];
45
- return pair;
46
- }
47
- }
48
- return date;
49
- })), this.userSelectedPreset$.pipe(filter((preset) => preset !== null), map(preset => preset.dates))).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
50
- this.filteredPresetOptions$ = combineLatest([
51
- this.min$,
52
- this.max$,
53
- this.alternativePresetList$,
54
- ]).pipe(map(([min, max, alternativePresetList]) => {
55
- const optionsFilteredOnMinMax = DateRangeComponent.Presets.filter(p => p.dates[0].valueOf() >= min.valueOf() &&
56
- p.dates[1].valueOf() <= max.valueOf());
57
- if (alternativePresetList.length == 0) {
58
- return optionsFilteredOnMinMax;
59
- }
60
- else {
61
- const optionsFilteredOnAlternativePresetList = optionsFilteredOnMinMax.filter(p => alternativePresetList.includes(p.id));
62
- return optionsFilteredOnAlternativePresetList;
63
- }
64
- }), shareReplay({ refCount: true, bufferSize: 1 }));
65
- this.selectedPreset$ = combineLatest([
66
- this.selectedValue$,
67
- this.userSelectedPreset$.pipe(startWith(null)),
68
- ]).pipe(map(([selectedValue, userSelectedPreset]) => {
69
- if (selectedValue instanceof Array) {
70
- const options = DateRangeComponent.Presets.filter(preset => preset.dates[0].valueOf() === selectedValue[0].valueOf() &&
71
- preset.dates[1].valueOf() === selectedValue[1].valueOf());
72
- if (options.length) {
73
- // Some date ranges match multiple presets, e.g. on Jan 19th, a
74
- // selected date range of Jan 1-19 would correspond to "this month
75
- // so far," "this quarter so far," and "this year so far." We'll
76
- // use the user's most recent manual selection as a tie breaker
77
- // where possible.
78
- const mostRecent = options.find(option => option.id === userSelectedPreset?.id);
79
- if (mostRecent)
80
- return mostRecent;
81
- return options[0];
82
- }
83
- }
84
- return null;
85
- }));
86
- this.favoritePresetIds$ = new LocalStorage(this.STORAGE_KEY, []);
87
- this.favoritePresets$ = combineLatest([
88
- this.favoritePresetIds$,
89
- this.filteredPresetOptions$,
90
- this.alternativePresetList$,
91
- ]).pipe(map(([ids, presets, alternativePresetList]) => {
92
- const favoritePresets = ids
93
- .map(id => presets.find(preset => preset.id === id))
94
- .filter((p) => p !== undefined);
95
- if (alternativePresetList.length == 0) {
96
- return favoritePresets;
97
- }
98
- else {
99
- const favoritesFilteredOnAlternativePresetList = favoritePresets.filter(p => alternativePresetList.includes(p.id));
100
- return favoritesFilteredOnAlternativePresetList;
101
- }
102
- }), shareReplay({ refCount: true, bufferSize: 1 }));
103
- this.userLeftActiveYearMonth$ = new Subject();
104
- this.userRightActiveYearMonth$ = new Subject();
105
- this.leftMin$ = this.min$.pipe(shareReplay({ refCount: true, bufferSize: 1 }));
106
- this.leftMax$ = this.max$.pipe(map(max => timeDay.offset(timeMonth.floor(max), -1)), shareReplay({ refCount: true, bufferSize: 1 }));
107
- this.rightMax$ = this.max$.pipe(shareReplay({ refCount: true, bufferSize: 1 }));
108
- this.leftActiveYearMonth$ = combineLatest([
109
- this.leftMax$,
110
- merge(this.userLeftActiveYearMonth$.pipe(startWith(timeMonth.floor(this.TODAY))), this.userSelectedPreset$.pipe(filter((preset) => preset !== null), map(preset => timeMonth.floor(preset.dates[0]))), this.distinctValue$.pipe(filter((v) => v !== undefined), map(v => timeMonth.floor(v[0])))),
111
- ]).pipe(map(([leftMax, left]) => {
112
- if (left.valueOf() >= leftMax.valueOf())
113
- return timeMonth.floor(leftMax);
114
- else
115
- return left;
116
- }), shareReplay({ refCount: true, bufferSize: 1 }));
117
- this.rightActiveYearMonth$ = combineLatest([
118
- this.leftActiveYearMonth$,
119
- merge(this.userRightActiveYearMonth$.pipe(startWith(timeMonth.ceil(this.TODAY))), this.userSelectedPreset$.pipe(filter((preset) => preset !== null), map(preset => timeMonth.floor(preset.dates[1]))), this.distinctValue$.pipe(filter((v) => v !== undefined), map(v => timeMonth.floor(v[1])))),
120
- this.rightMax$,
121
- ]).pipe(map(([left, userRight, rightMax$]) => {
122
- if (left.valueOf() >= userRight.valueOf())
123
- return timeMonth.floor(timeMonth.offset(left, 1));
124
- else if (userRight.valueOf() >= rightMax$.valueOf())
125
- return timeMonth.floor(rightMax$);
126
- else
127
- return userRight;
128
- }), shareReplay({ refCount: true, bufferSize: 1 }));
129
- this.rightMin$ = this.leftActiveYearMonth$.pipe(map(left => timeMonth.floor(timeMonth.offset(left, 1))), shareReplay({ refCount: true, bufferSize: 1 }));
130
- this.leftOmitRange$ = this.rightActiveYearMonth$.pipe(map(rightActiveYearMonth => {
131
- const first = timeMonth.floor(rightActiveYearMonth);
132
- const last = timeDay.offset(timeMonth.floor(timeMonth.offset(rightActiveYearMonth, 1)), -1);
133
- return [first, last];
134
- }), shareReplay({ refCount: true, bufferSize: 1 }));
135
- this.userInteracted$ = merge(this.userSelectedDate$, this.userSelectedPreset$);
136
- this.valueChange = this.selectedValue$.pipe(skipUntil(merge(this.userInteracted$, this.selectedValue$.pipe(filter(v => v !== undefined)))), filter((v) => !(v instanceof Date)), distinctUntilChanged((previous, current) => previous?.[0].valueOf() === current?.[0].valueOf() &&
137
- previous?.[1].valueOf() === current?.[1].valueOf()), shareReplay({ refCount: true, bufferSize: 1 }));
138
- this.displayValue$ = this.valueChange.pipe(map(v => {
139
- if (v) {
140
- return v.map(date => new DatePipe().transform(date)).join(' — ');
141
- }
142
- return undefined;
143
- }), shareReplay({ refCount: true, bufferSize: 1 }));
144
- }
145
- set showPresets(v) {
146
- this.showPresets$.next(v);
147
- }
148
- get showPresets() {
149
- return this.showPresets$.getValue();
150
- }
151
- set min(v) {
152
- this.min$.next(v);
153
- }
154
- get min() {
155
- return this.min$.getValue();
156
- }
157
- set max(v) {
158
- this.max$.next(v);
159
- }
160
- get max() {
161
- return this.max$.getValue();
162
- }
163
- set value(v) {
164
- this.value$.next(v);
165
- }
166
- get value() {
167
- return this.value$.getValue();
168
- }
169
- set placeholder(v) {
170
- this.placeholder$.next(v);
171
- }
172
- get placeholder() {
173
- return this.placeholder$.getValue();
174
- }
175
- set disabled(v) {
176
- this.disabled$.next(v);
177
- }
178
- get disabled() {
179
- return this.disabled$.getValue();
180
- }
181
- getTrigger() {
182
- return (this.customTriggerButton?.nativeElement ??
183
- this.standardTriggerButton?.nativeElement);
184
- }
185
- set alternativePresetList(v) {
186
- this.alternativePresetList$.next(v);
187
- }
188
- get alternativePresetList() {
189
- return this.alternativePresetList$.getValue();
190
- }
191
- setFavorite(preset, favorite) {
192
- const ids = new Set(this.favoritePresetIds$.getValue());
193
- if (favorite) {
194
- ids.add(preset.id);
195
- }
196
- else {
197
- ids.delete(preset.id);
198
- }
199
- this.favoritePresetIds$.next([...ids]);
200
- }
201
- }
202
- DateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
203
- DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateRangeComponent, selector: "riv-date-range", inputs: { showPresets: "showPresets", min: "min", max: "max", value: "value", placeholder: "placeholder", disabled: "disabled", alternativePresetList: "alternativePresetList" }, outputs: { valueChange: "valueChange" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true, read: ElementRef }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i3.CalendarComponent, selector: "riv-calendar", inputs: ["activeYearMonth", "displayMin", "displayMax", "selectableMin", "selectableMax", "omitRange", "selectedValue"], outputs: ["activeYearMonthChange", "dateSelect"] }, { kind: "component", type: i4.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i5.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i6.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i7.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText", "errorMessage", "state"], outputs: ["labelAction"] }, { kind: "directive", type: i8.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i9.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers", "sortSelectedToTop", "grow", "preferredCalloutPosition", "allowedCalloutPositions"], outputs: ["selectedOptionChange"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipAnchor", "rivTooltipCloseDelay", "rivTooltipOpenDelay", "rivTooltipGracePeriod"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateRangeComponent, decorators: [{
205
- type: Component,
206
- args: [{ selector: 'riv-date-range', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small);flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-low-contrast)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.trigger.warning{border-color:var(--surface-dark-caution)}.trigger.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.content{display:inline-grid;grid-template-rows:1fr auto}.content.include-preset{grid-template-columns:calc(var(--base-grid-size) * 50) 1fr 1fr}.presets{grid-area:1 / 1 / 3 / 2;background-color:var(--surface-light-1);padding:var(--size-xlarge) var(--size-large);border-right:var(--border-width) solid var(--border-light);display:flex;flex-direction:column;gap:var(--size-medium)}.preset{display:flex;transition:background-color var(--short-transition)}.preset:hover{background-color:var(--surface-light-2)}.preset button{color:transparent;transition:color var(--short-transition);padding:var(--size-medium) var(--size-large) var(--size-medium) var(--size-small);cursor:pointer}.preset:hover button{color:var(--type-light-low-contrast)}.preset button:hover{color:var(--type-light-high-contrast)}.preset.favorite button{color:var(--type-light-link)}.preset .description{flex-grow:1;padding:var(--size-medium) var(--size-small) var(--size-medium) var(--size-medium)}.preset .title{display:block;font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-1)}.preset .subtitle{display:block;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-1);color:var(--type-light-low-contrast)}.shortcuts{display:flex;flex-direction:column;gap:var(--size-xsmall);overflow-y:auto}.shortcut{display:flex;align-items:center;padding:var(--size-small) var(--size-small) var(--size-small) var(--size-medium);gap:var(--size-small);border-radius:var(--border-radius-small);transition:background-color var(--short-transition);cursor:pointer}.shortcut:hover{background-color:var(--black-20)}.shortcut.active{background-color:var(--baloo-05)}.shortcut .title{flex-grow:1;text-align:left;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.shortcut button{color:transparent;transition:color var(--short-transition);cursor:pointer}.shortcut:hover button{color:var(--type-light-link)}.calendars{grid-column:2 / 4;display:grid;grid-template-columns:subgrid;grid-template-rows:subgrid;padding:var(--size-large)}.left{grid-area:1 / 1 / 2 / 2;padding-right:var(--size-large);border-right:var(--border-width) solid var(--border-light)}.right{padding-left:var(--size-large);grid-area:1 / 2 / 2 / 3}.buttons{grid-area:2 / 2 / 3 / 4;padding:var(--size-small);display:flex;justify-content:space-between}\n"] }]
207
- }], propDecorators: { showPresets: [{
208
- type: Input
209
- }], min: [{
210
- type: Input
211
- }], max: [{
212
- type: Input
213
- }], value: [{
214
- type: Input
215
- }], placeholder: [{
216
- type: Input
217
- }], disabled: [{
218
- type: Input
219
- }], triggerTemplate: [{
220
- type: ContentChild,
221
- args: ['trigger']
222
- }], customTriggerButton: [{
223
- type: ViewChild,
224
- args: ['customTriggerButton', { read: ElementRef }]
225
- }], standardTriggerButton: [{
226
- type: ViewChild,
227
- args: ['standardTriggerButton', { read: ElementRef }]
228
- }], alternativePresetList: [{
229
- type: Input
230
- }], valueChange: [{
231
- type: Output
232
- }] } });
233
- (function (DateRangeComponent) {
234
- const today = new Date();
235
- let PresetType;
236
- (function (PresetType) {
237
- PresetType["TODAY"] = "today";
238
- PresetType["YESTERDAY"] = "yesterday";
239
- PresetType["TOMORROW"] = "tomorrow";
240
- PresetType["THIS_WEEK"] = "this_week";
241
- PresetType["THIS_WEEK_SO_FAR"] = "this_week_so_far";
242
- PresetType["LAST_WEEK"] = "last_week";
243
- PresetType["NEXT_WEEK"] = "next_week";
244
- PresetType["THIS_MONTH"] = "this_month";
245
- PresetType["THIS_MONTH_SO_FAR"] = "this_month_so_far";
246
- PresetType["LAST_MONTH"] = "last_month";
247
- PresetType["NEXT_MONTH"] = "next_month";
248
- PresetType["THIS_QUARTER"] = "this_quarter";
249
- PresetType["THIS_QUARTER_SO_FAR"] = "this_quarter_so_far";
250
- PresetType["LAST_QUARTER"] = "last_quarter";
251
- PresetType["NEXT_QUARTER"] = "next_quarter";
252
- PresetType["THIS_YEAR"] = "this_year";
253
- PresetType["THIS_YEAR_SO_FAR"] = "this_year_so_far";
254
- PresetType["LAST_YEAR"] = "last_year";
255
- PresetType["NEXT_YEAR"] = "next_year";
256
- PresetType["LAST_7_DAYS"] = "last_7_days";
257
- PresetType["LAST_14_DAYS"] = "last_14_days";
258
- PresetType["LAST_30_DAYS"] = "last_30_days";
259
- PresetType["LAST_60_DAYS"] = "last_60_days";
260
- PresetType["LAST_90_DAYS"] = "last_90_days";
261
- PresetType["LAST_180_DAYS"] = "last_180_days";
262
- PresetType["LAST_365_DAYS"] = "last_365_days";
263
- })(PresetType = DateRangeComponent.PresetType || (DateRangeComponent.PresetType = {}));
264
- DateRangeComponent.Presets = [
265
- {
266
- id: PresetType.TODAY,
267
- title: 'Today',
268
- subtitle: 'Today from midnight until the current time',
269
- dates: [timeDay(), timeDay()],
270
- },
271
- {
272
- id: PresetType.YESTERDAY,
273
- title: 'Yesterday',
274
- subtitle: 'The previous 24 hour day',
275
- dates: [timeDay.offset(timeDay(), -1), timeDay.offset(timeDay(), -1)],
276
- },
277
- {
278
- id: PresetType.TOMORROW,
279
- title: 'Tomorrow',
280
- subtitle: 'The next 24 hour day',
281
- dates: [timeDay.offset(timeDay(), 1), timeDay.offset(timeDay(), 1)],
282
- },
283
- {
284
- id: PresetType.THIS_WEEK,
285
- title: 'This week',
286
- subtitle: 'The current calendar week',
287
- dates: [
288
- timeSunday.floor(today),
289
- timeDay.offset(timeSunday.ceil(today), -1),
290
- ],
291
- },
292
- {
293
- id: PresetType.THIS_WEEK_SO_FAR,
294
- title: 'This week so far',
295
- subtitle: 'The current calendar week up to now',
296
- dates: [timeSunday.floor(today), timeDay.floor(today)],
297
- },
298
- {
299
- id: PresetType.LAST_WEEK,
300
- title: 'Last week',
301
- subtitle: 'The previous calendar week',
302
- dates: [
303
- timeSunday.offset(timeWeek.floor(today), -1),
304
- timeDay.offset(timeSunday.offset(timeWeek.ceil(today), -1), -1),
305
- ],
306
- },
307
- {
308
- id: PresetType.NEXT_WEEK,
309
- title: 'Next week',
310
- subtitle: 'The next calendar week',
311
- dates: [
312
- timeSunday.offset(timeWeek.floor(today), 1),
313
- timeDay.offset(timeSunday.offset(timeWeek.ceil(today), 1), -1),
314
- ],
315
- },
316
- {
317
- id: PresetType.THIS_MONTH,
318
- title: 'This month',
319
- subtitle: 'The current calendar month',
320
- dates: [
321
- timeMonth.floor(today),
322
- timeDay.offset(timeMonth.ceil(today), -1),
323
- ],
324
- },
325
- {
326
- id: PresetType.THIS_MONTH_SO_FAR,
327
- title: 'This month so far',
328
- subtitle: 'The current calendar month up to now',
329
- dates: [timeMonth.floor(today), timeDay.floor(today)],
330
- },
331
- {
332
- id: PresetType.LAST_MONTH,
333
- title: 'Last month',
334
- subtitle: 'The previous calendar month',
335
- dates: [
336
- timeMonth.offset(timeMonth.floor(today), -1),
337
- timeDay.offset(timeMonth.offset(timeMonth.ceil(today), -1), -1),
338
- ],
339
- },
340
- {
341
- id: PresetType.NEXT_MONTH,
342
- title: 'Next month',
343
- subtitle: 'The next calendar month',
344
- dates: [
345
- timeMonth.offset(timeMonth.floor(today), 1),
346
- timeDay.offset(timeMonth.offset(timeMonth.ceil(today), 1), -1),
347
- ],
348
- },
349
- {
350
- id: PresetType.THIS_QUARTER,
351
- title: 'This quarter',
352
- subtitle: 'The current quarter',
353
- dates: [
354
- timeQuarter.floor(today),
355
- timeDay.offset(timeQuarter.ceil(today), -1),
356
- ],
357
- },
358
- {
359
- id: PresetType.THIS_QUARTER_SO_FAR,
360
- title: 'This quarter so far',
361
- subtitle: 'The current quarter up to now',
362
- dates: [timeQuarter.floor(today), timeDay.floor(today)],
363
- },
364
- {
365
- id: PresetType.LAST_QUARTER,
366
- title: 'Last quarter',
367
- subtitle: 'The previous full quarter',
368
- dates: [
369
- timeQuarter.offset(timeQuarter.floor(today), -1),
370
- timeDay.offset(timeQuarter.offset(timeQuarter.ceil(today), -1), -1),
371
- ],
372
- },
373
- {
374
- id: PresetType.NEXT_QUARTER,
375
- title: 'Next quarter',
376
- subtitle: 'The next full quarter',
377
- dates: [
378
- timeQuarter.offset(timeQuarter.floor(today), 1),
379
- timeDay.offset(timeQuarter.offset(timeQuarter.ceil(today), 1), -1),
380
- ],
381
- },
382
- {
383
- id: PresetType.THIS_YEAR,
384
- title: 'This year',
385
- subtitle: 'The current calendar year',
386
- dates: [timeYear.floor(today), timeDay.offset(timeYear.ceil(today), -1)],
387
- },
388
- {
389
- id: PresetType.THIS_YEAR_SO_FAR,
390
- title: 'This year so far',
391
- subtitle: 'The current calendar year up to now',
392
- dates: [timeYear.floor(today), timeDay.floor(today)],
393
- },
394
- {
395
- id: PresetType.LAST_YEAR,
396
- title: 'Last year',
397
- subtitle: 'The previous calendar year',
398
- dates: [
399
- timeYear.offset(timeYear.floor(today), -1),
400
- timeDay.offset(timeYear.offset(timeYear.ceil(today), -1), -1),
401
- ],
402
- },
403
- {
404
- id: PresetType.NEXT_YEAR,
405
- title: 'Next year',
406
- subtitle: 'The next calendar year',
407
- dates: [
408
- timeYear.offset(timeYear.floor(today), 1),
409
- timeDay.offset(timeYear.offset(timeYear.ceil(today), 1), -1),
410
- ],
411
- },
412
- {
413
- id: PresetType.LAST_7_DAYS,
414
- title: 'Last 7 days',
415
- subtitle: 'The previous 7 days before today',
416
- dates: [
417
- timeDay.floor(timeDay.offset(today, -8)),
418
- timeDay.floor(timeDay.offset(today, -1)),
419
- ],
420
- },
421
- {
422
- id: PresetType.LAST_14_DAYS,
423
- title: 'Last 14 days',
424
- subtitle: 'The previous 14 days before today',
425
- dates: [
426
- timeDay.floor(timeDay.offset(today, -15)),
427
- timeDay.floor(timeDay.offset(today, -1)),
428
- ],
429
- },
430
- {
431
- id: PresetType.LAST_30_DAYS,
432
- title: 'Last 30 days',
433
- subtitle: 'The previous 30 days before today',
434
- dates: [
435
- timeDay.floor(timeDay.offset(today, -31)),
436
- timeDay.floor(timeDay.offset(today, -1)),
437
- ],
438
- },
439
- {
440
- id: PresetType.LAST_60_DAYS,
441
- title: 'Last 60 days',
442
- subtitle: 'The previous 60 days before today',
443
- dates: [
444
- timeDay.floor(timeDay.offset(today, -61)),
445
- timeDay.floor(timeDay.offset(today, -1)),
446
- ],
447
- },
448
- {
449
- id: PresetType.LAST_90_DAYS,
450
- title: 'Last 90 days',
451
- subtitle: 'The previous 90 days before today',
452
- dates: [
453
- timeDay.floor(timeDay.offset(today, -91)),
454
- timeDay.floor(timeDay.offset(today, -1)),
455
- ],
456
- },
457
- {
458
- id: PresetType.LAST_180_DAYS,
459
- title: 'Last 180 days',
460
- subtitle: 'The previous 180 days before today',
461
- dates: [
462
- timeDay.floor(timeDay.offset(today, -181)),
463
- timeDay.floor(timeDay.offset(today, -1)),
464
- ],
465
- },
466
- {
467
- id: PresetType.LAST_365_DAYS,
468
- title: 'Last 365 days',
469
- subtitle: 'The previous 365 days before today',
470
- dates: [
471
- timeDay.floor(timeDay.offset(today, -366)),
472
- timeDay.floor(timeDay.offset(today, -1)),
473
- ],
474
- },
475
- ];
476
- })(DateRangeComponent || (DateRangeComponent = {}));
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9kYXRlLXJhbmdlL2RhdGUtcmFuZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0UsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBQ1AsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILEtBQUssRUFDTCxJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7O0FBQzNFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLENBQUM7QUFFeEMsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQixtR0FBbUc7QUFPbkcsTUFBTSxPQUFPLGtCQUFtQixTQUFR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QUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QztTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsVUFBVSxDQUFDLGFBQWE7WUFDNUIsS0FBSyxFQUFFLGVBQWU7WUFDdEIsUUFBUSxFQUFFLG9DQUFvQztZQUM5QyxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekM7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQzVCLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFFBQVEsRUFBRSxvQ0FBb0M7WUFDOUMsS0FBSyxFQUFFO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQyxFQTNQZ0Isa0JBQWtCLEtBQWxCLGtCQUFrQixRQTJQbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGltZURheSwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lV2VlaywgdGltZVllYXIgfSBmcm9tICdkMy10aW1lJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBtZXJnZSxcbiAgc2NhbixcbiAgc2hhcmVSZXBsYXksXG4gIHNraXBVbnRpbCxcbiAgc3RhcnRXaXRoLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi8uLi91dGlsL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLmNvbXBvbmVudCc7XG5jb25zdCB0aW1lUXVhcnRlciA9IHRpbWVNb250aC5ldmVyeSgzKSE7XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbi8vIGh0dHBzOi8vd3d3Lm5vdGlvbi5zby9yaXZldC9SZXNvbHZlLVRPRE9zLWFmdGVyLUFuZ3VsYXItdXBncmFkZS0xZjI2NjdlYjJhMzE4MGI3OWY2YWQ5MmE3ZTU3NmYwOFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWRhdGUtcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IFRPREFZID0gbmV3IERhdGUoKTtcbiAgcmVhZG9ubHkgU1RPUkFHRV9LRVkgPSAnZGF0ZS1yYW5nZS5kZWZhdWx0JztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dQcmVzZXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIEBJbnB1dCgpXG4gIHNldCBzaG93UHJlc2V0cyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5zaG93UHJlc2V0cyQubmV4dCh2KTtcbiAgfVxuICBnZXQgc2hvd1ByZXNldHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1ByZXNldHMkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBtaW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWluKTtcbiAgQElucHV0KClcbiAgc2V0IG1pbih2OiBEYXRlKSB7XG4gICAgdGhpcy5taW4kLm5leHQodik7XG4gIH1cbiAgZ2V0IG1pbigpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5taW4kLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBtYXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihDYWxlbmRhckNvbXBvbmVudC5kZWZhdWx0TWF4KTtcbiAgQElucHV0KClcbiAgc2V0IG1heCh2OiBEYXRlKSB7XG4gICAgdGhpcy5tYXgkLm5leHQodik7XG4gIH1cbiAgZ2V0IG1heCgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5tYXgkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSB2YWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudmFsdWUkLm5leHQodik7XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBkaXN0aW5jdFZhbHVlJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+XG4gICAgICAgIHByZXZpb3VzPy5bMF0udmFsdWVPZigpID09PSBjdXJyZW50Py5bMF0udmFsdWVPZigpICYmXG4gICAgICAgIHByZXZpb3VzPy5bMV0udmFsdWVPZigpID09PSBjdXJyZW50Py5bMV0udmFsdWVPZigpLFxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBwbGFjZWhvbGRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ1NlbGVjdCBkYXRlIHJhbmdlJyk7XG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnBsYWNlaG9sZGVyJC5uZXh0KHYpO1xuICB9XG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCQubmV4dCh2KTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAQ29udGVudENoaWxkKCd0cmlnZ2VyJylcbiAgdHJpZ2dlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBvcGVuOiBib29sZWFuIH0+O1xuXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVRyaWdnZXJCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgY3VzdG9tVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnc3RhbmRhcmRUcmlnZ2VyQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHN0YW5kYXJkVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgZ2V0VHJpZ2dlcigpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudCA/P1xuICAgICAgdGhpcy5zdGFuZGFyZFRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgcmVhZG9ubHkgYWx0ZXJuYXRpdmVQcmVzZXRMaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgRGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldFR5cGVbXVxuICA+KFtdKTtcbiAgQElucHV0KClcbiAgc2V0IGFsdGVybmF0aXZlUHJlc2V0TGlzdCh2OiBEYXRlUmFuZ2VDb21wb25lbnQuUHJlc2V0VHlwZVtdKSB7XG4gICAgdGhpcy5hbHRlcm5hdGl2ZVByZXNldExpc3QkLm5leHQodik7XG4gIH1cbiAgZ2V0IGFsdGVybmF0aXZlUHJlc2V0TGlzdCgpOiBEYXRlUmFuZ2VDb21wb25lbnQuUHJlc2V0VHlwZVtdIHtcbiAgICByZXR1cm4gdGhpcy5hbHRlcm5hdGl2ZVByZXNldExpc3QkLmdldFZhbHVlKCk7XG4gIH1cblxuICByZWFkb25seSBvcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHVzZXJTZWxlY3RlZFByZXNldCQgPVxuICAgIG5ldyBTdWJqZWN0PERhdGVSYW5nZUNvbXBvbmVudC5QcmVzZXQgfCBudWxsPigpO1xuXG4gIHJlYWRvbmx5IHVzZXJTZWxlY3RlZERhdGUkID0gbmV3IFN1YmplY3Q8RGF0ZSB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRWYWx1ZSQ6IE9ic2VydmFibGU8RGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZD4gPSBtZXJnZShcbiAgICB0aGlzLmRpc3RpbmN0VmFsdWUkLFxuICAgIHRoaXMudXNlclNlbGVjdGVkRGF0ZSQucGlwZShcbiAgICAgIHNjYW4oXG4gICAgICAgIChwcmV2aW91czogRGF0ZSB8IFtEYXRlLCBEYXRlXSB8IHVuZGVmaW5lZCwgZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGlmIChwcmV2aW91cyBpbnN0YW5jZW9mIERhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGlmIChkYXRlLnZhbHVlT2YoKSA+PSBwcmV2aW91cy52YWx1ZU9mKCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFpcjogW0RhdGUsIERhdGVdID0gW3ByZXZpb3VzLCBkYXRlXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHBhaXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApLFxuICAgIHRoaXMudXNlclNlbGVjdGVkUHJlc2V0JC5waXBlKFxuICAgICAgZmlsdGVyKChwcmVzZXQpOiBwcmVzZXQgaXMgRGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldCA9PiBwcmVzZXQgIT09IG51bGwpLFxuICAgICAgbWFwKHByZXNldCA9PiBwcmVzZXQuZGF0ZXMpLFxuICAgICksXG4gICkucGlwZShzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pKTtcblxuICByZWFkb25seSBmaWx0ZXJlZFByZXNldE9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5taW4kLFxuICAgIHRoaXMubWF4JCxcbiAgICB0aGlzLmFsdGVybmF0aXZlUHJlc2V0TGlzdCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbWluLCBtYXgsIGFsdGVybmF0aXZlUHJlc2V0TGlzdF0pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXJlZE9uTWluTWF4ID0gRGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldHMuZmlsdGVyKFxuICAgICAgICBwID0+XG4gICAgICAgICAgcC5kYXRlc1swXS52YWx1ZU9mKCkgPj0gbWluLnZhbHVlT2YoKSAmJlxuICAgICAgICAgIHAuZGF0ZXNbMV0udmFsdWVPZigpIDw9IG1heC52YWx1ZU9mKCksXG4gICAgICApO1xuICAgICAgaWYgKGFsdGVybmF0aXZlUHJlc2V0TGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICByZXR1cm4gb3B0aW9uc0ZpbHRlcmVkT25NaW5NYXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvcHRpb25zRmlsdGVyZWRPbkFsdGVybmF0aXZlUHJlc2V0TGlzdCA9XG4gICAgICAgICAgb3B0aW9uc0ZpbHRlcmVkT25NaW5NYXguZmlsdGVyKHAgPT5cbiAgICAgICAgICAgIGFsdGVybmF0aXZlUHJlc2V0TGlzdC5pbmNsdWRlcyhwLmlkKSxcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3B0aW9uc0ZpbHRlcmVkT25BbHRlcm5hdGl2ZVByZXNldExpc3Q7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZFByZXNldCQ6IE9ic2VydmFibGU8RGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldCB8IG51bGw+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSQsXG4gICAgICB0aGlzLnVzZXJTZWxlY3RlZFByZXNldCQucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtzZWxlY3RlZFZhbHVlLCB1c2VyU2VsZWN0ZWRQcmVzZXRdKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gRGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldHMuZmlsdGVyKFxuICAgICAgICAgICAgcHJlc2V0ID0+XG4gICAgICAgICAgICAgIHByZXNldC5kYXRlc1swXS52YWx1ZU9mKCkgPT09IHNlbGVjdGVkVmFsdWVbMF0udmFsdWVPZigpICYmXG4gICAgICAgICAgICAgIHByZXNldC5kYXRlc1sxXS52YWx1ZU9mKCkgPT09IHNlbGVjdGVkVmFsdWVbMV0udmFsdWVPZigpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBTb21lIGRhdGUgcmFuZ2VzIG1hdGNoIG11bHRpcGxlIHByZXNldHMsIGUuZy4gb24gSmFuIDE5dGgsIGFcbiAgICAgICAgICAgIC8vIHNlbGVjdGVkIGRhdGUgcmFuZ2Ugb2YgSmFuIDEtMTkgd291bGQgY29ycmVzcG9uZCB0byBcInRoaXMgbW9udGhcbiAgICAgICAgICAgIC8vIHNvIGZhcixcIiBcInRoaXMgcXVhcnRlciBzbyBmYXIsXCIgYW5kIFwidGhpcyB5ZWFyIHNvIGZhci5cIiBXZSdsbFxuICAgICAgICAgICAgLy8gdXNlIHRoZSB1c2VyJ3MgbW9zdCByZWNlbnQgbWFudWFsIHNlbGVjdGlvbiBhcyBhIHRpZSBicmVha2VyXG4gICAgICAgICAgICAvLyB3aGVyZSBwb3NzaWJsZS5cbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBvcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIG9wdGlvbiA9PiBvcHRpb24uaWQgPT09IHVzZXJTZWxlY3RlZFByZXNldD8uaWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1vc3RSZWNlbnQpIHJldHVybiBtb3N0UmVjZW50O1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSksXG4gICAgKTtcblxuICByZWFkb25seSBmYXZvcml0ZVByZXNldElkcyQgPSBuZXcgTG9jYWxTdG9yYWdlPHN0cmluZ1tdPihcbiAgICB0aGlzLlNUT1JBR0VfS0VZLFxuICAgIFtdLFxuICApO1xuXG4gIHNldEZhdm9yaXRlKHByZXNldDogRGF0ZVJhbmdlQ29tcG9uZW50LlByZXNldCwgZmF2b3JpdGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBpZHMgPSBuZXcgU2V0KHRoaXMuZmF2b3JpdGVQcmVzZXRJZHMkLmdldFZhbHVlKCkpO1xuICAgIGlmIChmYXZvcml0ZSkge1xuICAgICAgaWRzLmFkZChwcmVzZXQuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHMuZGVsZXRlKHByZXNldC5pZCk7XG4gICAgfVxuICAgIHRoaXMuZmF2b3JpdGVQcmVzZXRJZHMkLm5leHQoWy4uLmlkc10pO1xuICB9XG5cbiAgcmVhZG9ubHkgZmF2b3JpdGVQcmVzZXRzJDogT2JzZXJ2YWJsZTxEYXRlUmFuZ2VDb21wb25lbnQuUHJlc2V0W10+ID1cbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmF2b3JpdGVQcmVzZXRJZHMkLFxuICAgICAgdGhpcy5maWx0ZXJlZFByZXNldE9wdGlvbnMkLFxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZVByZXNldExpc3QkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtpZHMsIHByZXNldHMsIGFsdGVybmF0aXZlUHJlc2V0TGlzdF0pID0+IHtcbiAgICAgICAgY29uc3QgZmF2b3JpdGVQcmVzZXRzID0gaWRzXG4gICAgICAgICAgLm1hcChpZCA9PiBwcmVzZXRzLmZpbmQocHJlc2V0ID0+IHByZXNldC5pZCA9PT0gaWQpKVxuICAgICAgICAgIC5maWx0ZXIoKHApOiBwIGlzIERhdGVSYW5nZUNvbXBvbmVudC5QcmVzZXQgPT4gcCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBpZiAoYWx0ZXJuYXRpdmVQcmVzZXRMaXN0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhdm9yaXRlUHJlc2V0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmYXZvcml0ZXNGaWx0ZXJlZE9uQWx0ZXJuYXRpdmVQcmVzZXRMaXN0ID1cbiAgICAgICAgICAgIGZhdm9yaXRlUHJlc2V0cy5maWx0ZXIocCA9PlxuICAgICAgICAgICAgICBhbHRlcm5hdGl2ZVByZXNldExpc3QuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgPERhdGVSYW5nZUNvbXBvbmVudC5QcmVzZXRUeXBlPnAuaWQsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYXZvcml0ZXNGaWx0ZXJlZE9uQWx0ZXJuYXRpdmVQcmVzZXRMaXN0O1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSB1c2VyTGVmdEFjdGl2ZVllYXJNb250aCQgPSBuZXcgU3ViamVjdDxEYXRlPigpO1xuICByZWFkb25seSB1c2VyUmlnaHRBY3RpdmVZZWFyTW9udGgkID0gbmV3IFN1YmplY3Q8RGF0ZT4oKTtcblxuICByZWFkb25seSBsZWZ0TWluJCA9IHRoaXMubWluJC5waXBlKFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG4gIHJlYWRvbmx5IGxlZnRNYXgkID0gdGhpcy5tYXgkLnBpcGUoXG4gICAgbWFwKG1heCA9PiB0aW1lRGF5Lm9mZnNldCh0aW1lTW9udGguZmxvb3IobWF4KSwgLTEpKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuICByZWFkb25seSByaWdodE1heCQgPSB0aGlzLm1heCQucGlwZShcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGxlZnRBY3RpdmVZZWFyTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5sZWZ0TWF4JCxcbiAgICBtZXJnZShcbiAgICAgIHRoaXMudXNlckxlZnRBY3RpdmVZZWFyTW9udGgkLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aW1lTW9udGguZmxvb3IodGhpcy5UT0RBWSkpLFxuICAgICAgKSxcbiAgICAgIHRoaXMudXNlclNlbGVjdGVkUHJlc2V0JC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKHByZXNldCk6IHByZXNldCBpcyBEYXRlUmFuZ2VDb21wb25lbnQuUHJlc2V0ID0+IHByZXNldCAhPT0gbnVsbCxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHByZXNldCA9PiB0aW1lTW9udGguZmxvb3IocHJlc2V0LmRhdGVzWzBdKSksXG4gICAgICApLFxuICAgICAgdGhpcy5kaXN0aW5jdFZhbHVlJC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHYpOiB2IGlzIFtEYXRlLCBEYXRlXSA9PiB2ICE9PSB1bmRlZmluZWQpLFxuICAgICAgICBtYXAodiA9PiB0aW1lTW9udGguZmxvb3IodlswXSkpLFxuICAgICAgKSxcbiAgICApLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2xlZnRNYXgsIGxlZnRdKSA9PiB7XG4gICAgICBpZiAobGVmdC52YWx1ZU9mKCkgPj0gbGVmdE1heC52YWx1ZU9mKCkpIHJldHVybiB0aW1lTW9udGguZmxvb3IobGVmdE1heCk7XG4gICAgICBlbHNlIHJldHVybiBsZWZ0O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgcmlnaHRBY3RpdmVZZWFyTW9udGgkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5sZWZ0QWN0aXZlWWVhck1vbnRoJCxcbiAgICBtZXJnZShcbiAgICAgIHRoaXMudXNlclJpZ2h0QWN0aXZlWWVhck1vbnRoJC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGltZU1vbnRoLmNlaWwodGhpcy5UT0RBWSkpLFxuICAgICAgKSxcbiAgICAgIHRoaXMudXNlclNlbGVjdGVkUHJlc2V0JC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKHByZXNldCk6IHByZXNldCBpcyBEYXRlUmFuZ2VDb21wb25lbnQuUHJlc2V0ID0+IHByZXNldCAhPT0gbnVsbCxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHByZXNldCA9PiB0aW1lTW9udGguZmxvb3IocHJlc2V0LmRhdGVzWzFdKSksXG4gICAgICApLFxuICAgICAgdGhpcy5kaXN0aW5jdFZhbHVlJC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHYpOiB2IGlzIFtEYXRlLCBEYXRlXSA9PiB2ICE9PSB1bmRlZmluZWQpLFxuICAgICAgICBtYXAodiA9PiB0aW1lTW9udGguZmxvb3IodlsxXSkpLFxuICAgICAgKSxcbiAgICApLFxuICAgIHRoaXMucmlnaHRNYXgkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2xlZnQsIHVzZXJSaWdodCwgcmlnaHRNYXgkXSkgPT4ge1xuICAgICAgaWYgKGxlZnQudmFsdWVPZigpID49IHVzZXJSaWdodC52YWx1ZU9mKCkpXG4gICAgICAgIHJldHVybiB0aW1lTW9udGguZmxvb3IodGltZU1vbnRoLm9mZnNldChsZWZ0LCAxKSk7XG4gICAgICBlbHNlIGlmICh1c2VyUmlnaHQudmFsdWVPZigpID49IHJpZ2h0TWF4JC52YWx1ZU9mKCkpXG4gICAgICAgIHJldHVybiB0aW1lTW9udGguZmxvb3IocmlnaHRNYXgkKTtcbiAgICAgIGVsc2UgcmV0dXJuIHVzZXJSaWdodDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IHJpZ2h0TWluJCA9IHRoaXMubGVmdEFjdGl2ZVllYXJNb250aCQucGlwZShcbiAgICBtYXAobGVmdCA9PiB0aW1lTW9udGguZmxvb3IodGltZU1vbnRoLm9mZnNldChsZWZ0LCAxKSkpLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgbGVmdE9taXRSYW5nZSQ6IE9ic2VydmFibGU8W0RhdGUsIERhdGVdPiA9XG4gICAgdGhpcy5yaWdodEFjdGl2ZVllYXJNb250aCQucGlwZShcbiAgICAgIG1hcDxEYXRlLCBbRGF0ZSwgRGF0ZV0+KHJpZ2h0QWN0aXZlWWVhck1vbnRoID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aW1lTW9udGguZmxvb3IocmlnaHRBY3RpdmVZZWFyTW9udGgpO1xuICAgICAgICBjb25zdCBsYXN0ID0gdGltZURheS5vZmZzZXQoXG4gICAgICAgICAgdGltZU1vbnRoLmZsb29yKHRpbWVNb250aC5vZmZzZXQocmlnaHRBY3RpdmVZZWFyTW9udGgsIDEpKSxcbiAgICAgICAgICAtMSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtmaXJzdCwgbGFzdF07XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSB1c2VySW50ZXJhY3RlZCQgPSBtZXJnZShcbiAgICB0aGlzLnVzZXJTZWxlY3RlZERhdGUkLFxuICAgIHRoaXMudXNlclNlbGVjdGVkUHJlc2V0JCxcbiAgKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2U6IE9ic2VydmFibGU8W0RhdGUsIERhdGVdIHwgdW5kZWZpbmVkPiA9XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlJC5waXBlKFxuICAgICAgc2tpcFVudGlsKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB0aGlzLnVzZXJJbnRlcmFjdGVkJCxcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUkLnBpcGUoZmlsdGVyKHYgPT4gdiAhPT0gdW5kZWZpbmVkKSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgZmlsdGVyKCh2KTogdiBpcyBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQgPT4gISh2IGluc3RhbmNlb2YgRGF0ZSkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT5cbiAgICAgICAgICBwcmV2aW91cz8uWzBdLnZhbHVlT2YoKSA9PT0gY3VycmVudD8uWzBdLnZhbHVlT2YoKSAmJlxuICAgICAgICAgIHByZXZpb3VzPy5bMV0udmFsdWVPZigpID09PSBjdXJyZW50Py5bMV0udmFsdWVPZigpLFxuICAgICAgKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICAgKTtcblxuICByZWFkb25seSBkaXNwbGF5VmFsdWUkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4gPVxuICAgIHRoaXMudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgIG1hcCh2ID0+IHtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICByZXR1cm4gdi5tYXAoZGF0ZSA9PiBuZXcgRGF0ZVBpcGUoKS50cmFuc2Zvcm0oZGF0ZSkpLmpvaW4oJyDigJQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgICApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIERhdGVSYW5nZUNvbXBvbmVudCB7XG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICBleHBvcnQgZW51bSBQcmVzZXRUeXBlIHtcbiAgICBUT0RBWSA9ICd0b2RheScsXG4gICAgWUVTVEVSREFZID0gJ3llc3RlcmRheScsXG4gICAgVE9NT1JST1cgPSAndG9tb3Jyb3cnLFxuICAgIFRISVNfV0VFSyA9ICd0aGlzX3dlZWsnLFxuICAgIFRISVNfV0VFS19TT19GQVIgPSAndGhpc193ZWVrX3NvX2ZhcicsXG4gICAgTEFTVF9XRUVLID0gJ2xhc3Rfd2VlaycsXG4gICAgTkVYVF9XRUVLID0gJ25leHRfd2VlaycsXG4gICAgVEhJU19NT05USCA9ICd0aGlzX21vbnRoJyxcbiAgICBUSElTX01PTlRIX1NPX0ZBUiA9ICd0aGlzX21vbnRoX3NvX2ZhcicsXG4gICAgTEFTVF9NT05USCA9ICdsYXN0X21vbnRoJyxcbiAgICBORVhUX01PTlRIID0gJ25leHRfbW9udGgnLFxuICAgIFRISVNfUVVBUlRFUiA9ICd0aGlzX3F1YXJ0ZXInLFxuICAgIFRISVNfUVVBUlRFUl9TT19GQVIgPSAndGhpc19xdWFydGVyX3NvX2ZhcicsXG4gICAgTEFTVF9RVUFSVEVSID0gJ2xhc3RfcXVhcnRlcicsXG4gICAgTkVYVF9RVUFSVEVSID0gJ25leHRfcXVhcnRlcicsXG4gICAgVEhJU19ZRUFSID0gJ3RoaXNfeWVhcicsXG4gICAgVEhJU19ZRUFSX1NPX0ZBUiA9ICd0aGlzX3llYXJfc29fZmFyJyxcbiAgICBMQVNUX1lFQVIgPSAnbGFzdF95ZWFyJyxcbiAgICBORVhUX1lFQVIgPSAnbmV4dF95ZWFyJyxcbiAgICBMQVNUXzdfREFZUyA9ICdsYXN0XzdfZGF5cycsXG4gICAgTEFTVF8xNF9EQVlTID0gJ2xhc3RfMTRfZGF5cycsXG4gICAgTEFTVF8zMF9EQVlTID0gJ2xhc3RfMzBfZGF5cycsXG4gICAgTEFTVF82MF9EQVlTID0gJ2xhc3RfNjBfZGF5cycsXG4gICAgTEFTVF85MF9EQVlTID0gJ2xhc3RfOTBfZGF5cycsXG4gICAgTEFTVF8xODBfREFZUyA9ICdsYXN0XzE4MF9kYXlzJyxcbiAgICBMQVNUXzM2NV9EQVlTID0gJ2xhc3RfMzY1X2RheXMnLFxuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHJlc2V0ID0ge1xuICAgIGlkOiBQcmVzZXRUeXBlO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU6IHN0cmluZztcbiAgICBkYXRlczogW0RhdGUsIERhdGVdO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBQcmVzZXRzOiBQcmVzZXRbXSA9IFtcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5UT0RBWSxcbiAgICAgIHRpdGxlOiAnVG9kYXknLFxuICAgICAgc3VidGl0bGU6ICdUb2RheSBmcm9tIG1pZG5pZ2h0IHVudGlsIHRoZSBjdXJyZW50IHRpbWUnLFxuICAgICAgZGF0ZXM6IFt0aW1lRGF5KCksIHRpbWVEYXkoKV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5ZRVNURVJEQVksXG4gICAgICB0aXRsZTogJ1llc3RlcmRheScsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBwcmV2aW91cyAyNCBob3VyIGRheScsXG4gICAgICBkYXRlczogW3RpbWVEYXkub2Zmc2V0KHRpbWVEYXkoKSwgLTEpLCB0aW1lRGF5Lm9mZnNldCh0aW1lRGF5KCksIC0xKV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5UT01PUlJPVyxcbiAgICAgIHRpdGxlOiAnVG9tb3Jyb3cnLFxuICAgICAgc3VidGl0bGU6ICdUaGUgbmV4dCAyNCBob3VyIGRheScsXG4gICAgICBkYXRlczogW3RpbWVEYXkub2Zmc2V0KHRpbWVEYXkoKSwgMSksIHRpbWVEYXkub2Zmc2V0KHRpbWVEYXkoKSwgMSldLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuVEhJU19XRUVLLFxuICAgICAgdGl0bGU6ICdUaGlzIHdlZWsnLFxuICAgICAgc3VidGl0bGU6ICdUaGUgY3VycmVudCBjYWxlbmRhciB3ZWVrJyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVTdW5kYXkuZmxvb3IodG9kYXkpLFxuICAgICAgICB0aW1lRGF5Lm9mZnNldCh0aW1lU3VuZGF5LmNlaWwodG9kYXkpLCAtMSksXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuVEhJU19XRUVLX1NPX0ZBUixcbiAgICAgIHRpdGxlOiAnVGhpcyB3ZWVrIHNvIGZhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBjdXJyZW50IGNhbGVuZGFyIHdlZWsgdXAgdG8gbm93JyxcbiAgICAgIGRhdGVzOiBbdGltZVN1bmRheS5mbG9vcih0b2RheSksIHRpbWVEYXkuZmxvb3IodG9kYXkpXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfV0VFSyxcbiAgICAgIHRpdGxlOiAnTGFzdCB3ZWVrJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIGNhbGVuZGFyIHdlZWsnLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZVN1bmRheS5vZmZzZXQodGltZVdlZWsuZmxvb3IodG9kYXkpLCAtMSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVTdW5kYXkub2Zmc2V0KHRpbWVXZWVrLmNlaWwodG9kYXkpLCAtMSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5ORVhUX1dFRUssXG4gICAgICB0aXRsZTogJ05leHQgd2VlaycsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBuZXh0IGNhbGVuZGFyIHdlZWsnLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZVN1bmRheS5vZmZzZXQodGltZVdlZWsuZmxvb3IodG9kYXkpLCAxKSxcbiAgICAgICAgdGltZURheS5vZmZzZXQodGltZVN1bmRheS5vZmZzZXQodGltZVdlZWsuY2VpbCh0b2RheSksIDEpLCAtMSksXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuVEhJU19NT05USCxcbiAgICAgIHRpdGxlOiAnVGhpcyBtb250aCcsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBjdXJyZW50IGNhbGVuZGFyIG1vbnRoJyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVNb250aC5mbG9vcih0b2RheSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVNb250aC5jZWlsKHRvZGF5KSwgLTEpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLlRISVNfTU9OVEhfU09fRkFSLFxuICAgICAgdGl0bGU6ICdUaGlzIG1vbnRoIHNvIGZhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBjdXJyZW50IGNhbGVuZGFyIG1vbnRoIHVwIHRvIG5vdycsXG4gICAgICBkYXRlczogW3RpbWVNb250aC5mbG9vcih0b2RheSksIHRpbWVEYXkuZmxvb3IodG9kYXkpXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfTU9OVEgsXG4gICAgICB0aXRsZTogJ0xhc3QgbW9udGgnLFxuICAgICAgc3VidGl0bGU6ICdUaGUgcHJldmlvdXMgY2FsZW5kYXIgbW9udGgnLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZU1vbnRoLm9mZnNldCh0aW1lTW9udGguZmxvb3IodG9kYXkpLCAtMSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVNb250aC5vZmZzZXQodGltZU1vbnRoLmNlaWwodG9kYXkpLCAtMSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5ORVhUX01PTlRILFxuICAgICAgdGl0bGU6ICdOZXh0IG1vbnRoJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIG5leHQgY2FsZW5kYXIgbW9udGgnLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZU1vbnRoLm9mZnNldCh0aW1lTW9udGguZmxvb3IodG9kYXkpLCAxKSxcbiAgICAgICAgdGltZURheS5vZmZzZXQodGltZU1vbnRoLm9mZnNldCh0aW1lTW9udGguY2VpbCh0b2RheSksIDEpLCAtMSksXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuVEhJU19RVUFSVEVSLFxuICAgICAgdGl0bGU6ICdUaGlzIHF1YXJ0ZXInLFxuICAgICAgc3VidGl0bGU6ICdUaGUgY3VycmVudCBxdWFydGVyJyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVRdWFydGVyLmZsb29yKHRvZGF5KSxcbiAgICAgICAgdGltZURheS5vZmZzZXQodGltZVF1YXJ0ZXIuY2VpbCh0b2RheSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5USElTX1FVQVJURVJfU09fRkFSLFxuICAgICAgdGl0bGU6ICdUaGlzIHF1YXJ0ZXIgc28gZmFyJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIGN1cnJlbnQgcXVhcnRlciB1cCB0byBub3cnLFxuICAgICAgZGF0ZXM6IFt0aW1lUXVhcnRlci5mbG9vcih0b2RheSksIHRpbWVEYXkuZmxvb3IodG9kYXkpXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfUVVBUlRFUixcbiAgICAgIHRpdGxlOiAnTGFzdCBxdWFydGVyJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIGZ1bGwgcXVhcnRlcicsXG4gICAgICBkYXRlczogW1xuICAgICAgICB0aW1lUXVhcnRlci5vZmZzZXQodGltZVF1YXJ0ZXIuZmxvb3IodG9kYXkpLCAtMSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVRdWFydGVyLm9mZnNldCh0aW1lUXVhcnRlci5jZWlsKHRvZGF5KSwgLTEpLCAtMSksXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuTkVYVF9RVUFSVEVSLFxuICAgICAgdGl0bGU6ICdOZXh0IHF1YXJ0ZXInLFxuICAgICAgc3VidGl0bGU6ICdUaGUgbmV4dCBmdWxsIHF1YXJ0ZXInLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZVF1YXJ0ZXIub2Zmc2V0KHRpbWVRdWFydGVyLmZsb29yKHRvZGF5KSwgMSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVRdWFydGVyLm9mZnNldCh0aW1lUXVhcnRlci5jZWlsKHRvZGF5KSwgMSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5USElTX1lFQVIsXG4gICAgICB0aXRsZTogJ1RoaXMgeWVhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBjdXJyZW50IGNhbGVuZGFyIHllYXInLFxuICAgICAgZGF0ZXM6IFt0aW1lWWVhci5mbG9vcih0b2RheSksIHRpbWVEYXkub2Zmc2V0KHRpbWVZZWFyLmNlaWwodG9kYXkpLCAtMSldLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IFByZXNldFR5cGUuVEhJU19ZRUFSX1NPX0ZBUixcbiAgICAgIHRpdGxlOiAnVGhpcyB5ZWFyIHNvIGZhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBjdXJyZW50IGNhbGVuZGFyIHllYXIgdXAgdG8gbm93JyxcbiAgICAgIGRhdGVzOiBbdGltZVllYXIuZmxvb3IodG9kYXkpLCB0aW1lRGF5LmZsb29yKHRvZGF5KV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5MQVNUX1lFQVIsXG4gICAgICB0aXRsZTogJ0xhc3QgeWVhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBwcmV2aW91cyBjYWxlbmRhciB5ZWFyJyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVZZWFyLm9mZnNldCh0aW1lWWVhci5mbG9vcih0b2RheSksIC0xKSxcbiAgICAgICAgdGltZURheS5vZmZzZXQodGltZVllYXIub2Zmc2V0KHRpbWVZZWFyLmNlaWwodG9kYXkpLCAtMSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5ORVhUX1lFQVIsXG4gICAgICB0aXRsZTogJ05leHQgeWVhcicsXG4gICAgICBzdWJ0aXRsZTogJ1RoZSBuZXh0IGNhbGVuZGFyIHllYXInLFxuICAgICAgZGF0ZXM6IFtcbiAgICAgICAgdGltZVllYXIub2Zmc2V0KHRpbWVZZWFyLmZsb29yKHRvZGF5KSwgMSksXG4gICAgICAgIHRpbWVEYXkub2Zmc2V0KHRpbWVZZWFyLm9mZnNldCh0aW1lWWVhci5jZWlsKHRvZGF5KSwgMSksIC0xKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5MQVNUXzdfREFZUyxcbiAgICAgIHRpdGxlOiAnTGFzdCA3IGRheXMnLFxuICAgICAgc3VidGl0bGU6ICdUaGUgcHJldmlvdXMgNyBkYXlzIGJlZm9yZSB0b2RheScsXG4gICAgICBkYXRlczogW1xuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtOCkpLFxuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMSkpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfMTRfREFZUyxcbiAgICAgIHRpdGxlOiAnTGFzdCAxNCBkYXlzJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIDE0IGRheXMgYmVmb3JlIHRvZGF5JyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC0xNSkpLFxuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMSkpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfMzBfREFZUyxcbiAgICAgIHRpdGxlOiAnTGFzdCAzMCBkYXlzJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIDMwIGRheXMgYmVmb3JlIHRvZGF5JyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC0zMSkpLFxuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMSkpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfNjBfREFZUyxcbiAgICAgIHRpdGxlOiAnTGFzdCA2MCBkYXlzJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIDYwIGRheXMgYmVmb3JlIHRvZGF5JyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC02MSkpLFxuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMSkpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfOTBfREFZUyxcbiAgICAgIHRpdGxlOiAnTGFzdCA5MCBkYXlzJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIDkwIGRheXMgYmVmb3JlIHRvZGF5JyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC05MSkpLFxuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMSkpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiBQcmVzZXRUeXBlLkxBU1RfMTgwX0RBWVMsXG4gICAgICB0aXRsZTogJ0xhc3QgMTgwIGRheXMnLFxuICAgICAgc3VidGl0bGU6ICdUaGUgcHJldmlvdXMgMTgwIGRheXMgYmVmb3JlIHRvZGF5JyxcbiAgICAgIGRhdGVzOiBbXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC0xODEpKSxcbiAgICAgICAgdGltZURheS5mbG9vcih0aW1lRGF5Lm9mZnNldCh0b2RheSwgLTEpKSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogUHJlc2V0VHlwZS5MQVNUXzM2NV9EQVlTLFxuICAgICAgdGl0bGU6ICdMYXN0IDM2NSBkYXlzJyxcbiAgICAgIHN1YnRpdGxlOiAnVGhlIHByZXZpb3VzIDM2NSBkYXlzIGJlZm9yZSB0b2RheScsXG4gICAgICBkYXRlczogW1xuICAgICAgICB0aW1lRGF5LmZsb29yKHRpbWVEYXkub2Zmc2V0KHRvZGF5LCAtMzY2KSksXG4gICAgICAgIHRpbWVEYXkuZmxvb3IodGltZURheS5vZmZzZXQodG9kYXksIC0xKSksXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVHJpZ2dlclwiPlxuICA8YnV0dG9uXG4gICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAoY2xpY2spPVwib3BlbiQubmV4dCh0cnVlKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkJCB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIihkaXNhYmxlZCQgfCBhc3luYykgPyAndHJ1ZScgOiBudWxsXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcGVuOiBvcGVuJCB8IGFzeW5jIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRUcmlnZ2VyPlxuICA8cml2LWlucHV0LWxhYmVsXG4gICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICBbaGVscF09XCJoZWxwXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgW2Vycm9yTWVzc2FnZV09XCJlcnJvck1lc3NhZ2VcIlxuICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAobGFiZWxBY3Rpb24pPVwibGFiZWxBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgICNzdGFuZGFyZFRyaWdnZXJCdXR0b25cbiAgICAgIGNsYXNzPVwidHJpZ2dlclwiXG4gICAgICBbY2xhc3Mud2FybmluZ109XCJzdGF0ZSA9PT0gJ3dhcm5pbmcnXCJcbiAgICAgIFtjbGFzcy5lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAoY2xpY2spPVwib3BlbiQubmV4dCh0cnVlKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQkIHwgYXN5bmNcIlxuICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCIoZGlzYWJsZWQkIHwgYXN5bmMpID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jOyBlbHNlIHBsYWNlaG9sZGVyVmFsdWU7IGxldCBkaXNwbGF5XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IGRpc3BsYXkgfX08L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXJWYWx1ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZSBwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyJCB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvblwiPlxuICAgICAgICA8cml2LWljb24gW25hbWVdPVwiJ0NhbGVuZGFyJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9yaXYtaW5wdXQtbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlbGZcbiAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZlwiXG4gIGxldC1pbnB1dFZhbHVlXG4gIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogKGRpc3RpbmN0VmFsdWUkIHwgYXN5bmMpIH1cIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib3BlbiQgfCBhc3luY1wiPlxuICAgIDxyaXYtY2FsbG91dFxuICAgICAgKnJpdi1vdmVybGF5XG4gICAgICBbYW5jaG9yXT1cImdldFRyaWdnZXIoKVwiXG4gICAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgIFthbGxvd2VkUG9zaXRpb25zXT1cIltcbiAgICAgICAgJ3RvcC1sZWZ0JyxcbiAgICAgICAgJ3RvcC1yaWdodCcsXG4gICAgICAgICdib3R0b20tcmlnaHQnLFxuICAgICAgICAnYm90dG9tLWxlZnQnXG4gICAgICBdXCJcbiAgICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLXJpZ2h0J1wiXG4gICAgICAoY2xvc2UpPVwib3BlbiQubmV4dChmYWxzZSk7IHVzZXJTZWxlY3RlZERhdGUkLm5leHQoaW5wdXRWYWx1ZSlcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgW2NsYXNzLmluY2x1ZGUtcHJlc2V0XT1cInNob3dQcmVzZXRzXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UHJlc2V0c1wiIGNsYXNzPVwicHJlc2V0c1wiPlxuICAgICAgICAgIDxyaXYtc2ltcGxlLXNlbGVjdFxuICAgICAgICAgICAgW2xhYmVsXT1cIidEYXRlIHByZXNldHMnXCJcbiAgICAgICAgICAgIFtmaWx0ZXJhYmlsaXR5T3B0aW9uc109XCJ7IGVuYWJsZWQ6IHRydWUsIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyB9XCJcbiAgICAgICAgICAgIFtvcmRlckJ5XT1cIidzb3VyY2UnXCJcbiAgICAgICAgICAgIFtvcHRpb25Hcm91cHNdPVwiXG4gICAgICAgICAgICAgIChmaWx0ZXJlZFByZXNldE9wdGlvbnMkIHwgYXN5bmMpID8/IFtdIHwgcml2T3B0aW9uR3JvdXBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRPcHRpb25dPVwic2VsZWN0ZWRQcmVzZXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgKHNlbGVjdGVkT3B0aW9uQ2hhbmdlKT1cInVzZXJTZWxlY3RlZFByZXNldCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvbiBsZXQtbm9kZT1cIm5vZGVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgI3NlbGZcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxmXCJcbiAgICAgICAgICAgICAgICBsZXQtaXNGYXZvcml0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IChmYXZvcml0ZVByZXNldElkcyQgfCBhc3luYyk/LmluY2x1ZGVzKG5vZGUuaWQpXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlc2V0XCIgW2NsYXNzLmZhdm9yaXRlXT1cImlzRmF2b3JpdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIm5vZGUudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpbmRpY2VzXT1cIm5vZGUudGl0bGVIaWdobGlnaHRJbmRpY2VzIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcml2LWhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJub2RlLnN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5kaWNlc109XCJub2RlLnN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgID48L3Jpdi1oaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNldEZhdm9yaXRlKG5vZGUsICFpc0Zhdm9yaXRlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJpc0Zhdm9yaXRlID8gJ0hlYXJ0QWN0aXZlJyA6ICdIZWFydCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICBbcml2VG9vbHRpcF09XCInTWFyayBhcyBmYXZvcml0ZSdcIlxuICAgICAgICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3Jpdi1zaW1wbGUtc2VsZWN0PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgI3NlbGZcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGZcIlxuICAgICAgICAgICAgbGV0LWZhdm9yaXRlc1xuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmYXZvcml0ZVByZXNldHMkIHwgYXN5bmMgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJpdi1pbnB1dC1sYWJlbCAqbmdJZj1cImZhdm9yaXRlcy5sZW5ndGhcIiBbbGFiZWxdPVwiJ0Zhdm9yaXRlcydcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNob3J0Y3V0c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmYXZvcml0ZSBvZiBmYXZvcml0ZXNcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG9ydGN1dFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIihzZWxlY3RlZFByZXNldCQgfCBhc3luYyk/LmlkID09PSBmYXZvcml0ZS5pZFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlclNlbGVjdGVkUHJlc2V0JC5uZXh0KGZhdm9yaXRlKVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3sgZmF2b3JpdGUudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRGYXZvcml0ZShmYXZvcml0ZSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwiJ1JlbW92ZSBmYXZvcml0ZSdcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHJpdi1pY29uIFtuYW1lXT1cIidIZWFydEFjdGl2ZSdcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3Jpdi1pbnB1dC1sYWJlbD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXJzXCI+XG4gICAgICAgICAgPHJpdi1jYWxlbmRhclxuICAgICAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgICAgIFthY3RpdmVZZWFyTW9udGhdPVwiKGxlZnRBY3RpdmVZZWFyTW9udGgkIHwgYXN5bmMpIHx8IFRPREFZXCJcbiAgICAgICAgICAgIChhY3RpdmVZZWFyTW9udGhDaGFuZ2UpPVwidXNlckxlZnRBY3RpdmVZZWFyTW9udGgkLm5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheU1pbl09XCIobWluJCB8IGFzeW5jKSB8fCBUT0RBWVwiXG4gICAgICAgICAgICBbZGlzcGxheU1heF09XCIobWF4JCB8IGFzeW5jKSB8fCBUT0RBWVwiXG4gICAgICAgICAgICBbc2VsZWN0YWJsZU1pbl09XCIobGVmdE1pbiQgfCBhc3luYykgfHwgVE9EQVlcIlxuICAgICAgICAgICAgW3NlbGVjdGFibGVNYXhdPVwiKGxlZnRNYXgkIHwgYXN5bmMpIHx8IFRPREFZXCJcbiAgICAgICAgICAgIFtvbWl0UmFuZ2VdPVwiKGxlZnRPbWl0UmFuZ2UkIHwgYXN5bmMpIHx8IFtUT0RBWSwgVE9EQVldXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cIihzZWxlY3RlZFZhbHVlJCB8IGFzeW5jKSB8fCBUT0RBWVwiXG4gICAgICAgICAgICAoZGF0ZVNlbGVjdCk9XCJ1c2VyU2VsZWN0ZWREYXRlJC5uZXh0KCRldmVudClcIlxuICAgICAgICAgID48L3Jpdi1jYWxlbmRhcj5cbiAgICAgICAgICA8cml2LWNhbGVuZGFyXG4gICAgICAgICAgICBjbGFzcz1cInJpZ2h0XCJcbiAgICAgICAgICAgIFthY3RpdmVZZWFyTW9udGhdPVwiKHJpZ2h0QWN0aXZlWWVhck1vbnRoJCB8IGFzeW5jKSB8fCBUT0RBWVwiXG4gICAgICAgICAgICAoYWN0aXZlWWVhck1vbnRoQ2hhbmdlKT1cInVzZXJSaWdodEFjdGl2ZVllYXJNb250aCQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkaXNwbGF5TWluXT1cIihtaW4kIHwgYXN5bmMpIHx8IFRPREFZXCJcbiAgICAgICAgICAgIFtkaXNwbGF5TWF4XT1cIihtYXgkIHwgYXN5bmMpIHx8IFRPREFZXCJcbiAgICAgICAgICAgIFtzZWxlY3RhYmxlTWluXT1cIihyaWdodE1pbiQgfCBhc3luYykgfHwgVE9EQVlcIlxuICAgICAgICAgICAgW3NlbGVjdGFibGVNYXhdPVwiKHJpZ2h0TWF4JCB8IGFzeW5jKSB8fCBUT0RBWVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCIoc2VsZWN0ZWRWYWx1ZSQgfCBhc3luYykgfHwgVE9EQVlcIlxuICAgICAgICAgICAgKGRhdGVTZWxlY3QpPVwidXNlclNlbGVjdGVkRGF0ZSQubmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9yaXYtY2FsZW5kYXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmb290ZXIgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJTZWxlY3RlZERhdGUkLm5leHQodW5kZWZpbmVkKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICBbdmFyaWFudF09XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW4kLm5leHQoZmFsc2UpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIERvbmVcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1jYWxsb3V0PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=