@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
@@ -13,13 +13,13 @@ export class TableCollapseAllComponent {
13
13
  isAllExpanded(collapseState) {
14
14
  return TableCollapseHelpers.isAllExpanded(collapseState);
15
15
  }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableCollapseAllComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableCollapseAllComponent, selector: "riv-table-collapse-all", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button type=\"button\" rivButton (click)=\"toggleAllCollapsed()\">\n {{ isAllExpanded(s.collapseState) ? 'Collapse all' : 'Expand all' }}\n </button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16
18
  }
17
- TableCollapseAllComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableCollapseAllComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
- TableCollapseAllComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TableCollapseAllComponent, selector: "riv-table-collapse-all", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button type=\"button\" rivButton (click)=\"toggleAllCollapsed()\">\n {{ isAllExpanded(s.collapseState) ? 'Collapse all' : 'Expand all' }}\n </button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TableCollapseAllComponent, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableCollapseAllComponent, decorators: [{
20
20
  type: Component,
21
21
  args: [{ selector: 'riv-table-collapse-all', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button type=\"button\" rivButton (click)=\"toggleAllCollapsed()\">\n {{ isAllExpanded(s.collapseState) ? 'Collapse all' : 'Expand all' }}\n </button>\n</ng-container>\n" }]
22
- }], ctorParameters: function () { return []; }, propDecorators: { manager: [{
22
+ }], ctorParameters: () => [], propDecorators: { manager: [{
23
23
  type: Input
24
24
  }] } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sbGFwc2UtYWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbGxhcHNlLWFsbC90YWJsZS1jb2xsYXBzZS1hbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sbGFwc2UtYWxsL3RhYmxlLWNvbGxhcHNlLWFsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7OztBQU96RSxNQUFNLE9BQU8seUJBQXlCO0lBU3BDLGdCQUFlLENBQUM7SUFFaEIsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsb0JBQW9CO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsYUFBd0M7UUFDcEQsT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7dUhBbkJVLHlCQUF5QjsyR0FBekIseUJBQXlCLDhGQ1R0Qyx5T0FLQTs0RkRJYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUVqQix1QkFBdUIsQ0FBQyxNQUFNOzBFQVMvQyxPQUFPO3NCQUROLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBUYWJsZUNvbGxhcHNlSGVscGVycyB9IGZyb20gJy4uL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10YWJsZS1jb2xsYXBzZS1hbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sbGFwc2UtYWxsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sbGFwc2VBbGxDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRiwgRz47XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHRvZ2dsZUFsbENvbGxhcHNlZCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAndG9nZ2xlQWxsQ29sbGFwc2VkJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlzQWxsRXhwYW5kZWQoY29sbGFwc2VTdGF0ZTogUml2VGFibGUuQ29sbGFwc2VTdGF0ZTxSPikge1xuICAgIHJldHVybiBUYWJsZUNvbGxhcHNlSGVscGVycy5pc0FsbEV4cGFuZGVkKGNvbGxhcHNlU3RhdGUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibWFuYWdlcj8uc3RhdGUgfCBhc3luYzsgbGV0IHNcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcml2QnV0dG9uIChjbGljayk9XCJ0b2dnbGVBbGxDb2xsYXBzZWQoKVwiPlxuICAgIHt7IGlzQWxsRXhwYW5kZWQocy5jb2xsYXBzZVN0YXRlKSA/ICdDb2xsYXBzZSBhbGwnIDogJ0V4cGFuZCBhbGwnIH19XG4gIDwvYnV0dG9uPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sbGFwc2UtYWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbGxhcHNlLWFsbC90YWJsZS1jb2xsYXBzZS1hbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sbGFwc2UtYWxsL3RhYmxlLWNvbGxhcHNlLWFsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7OztBQU96RSxNQUFNLE9BQU8seUJBQXlCO0lBU3BDLGdCQUFlLENBQUM7SUFFaEIsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsb0JBQW9CO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsYUFBd0M7UUFDcEQsT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzsrR0FuQlUseUJBQXlCO21HQUF6Qix5QkFBeUIsOEZDVHRDLHlPQUtBOzs0RkRJYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUVqQix1QkFBdUIsQ0FBQyxNQUFNO3dEQVMvQyxPQUFPO3NCQUROLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUml2VGFibGUgfSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQgeyBUYWJsZUNvbGxhcHNlSGVscGVycyB9IGZyb20gJy4uL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi10YWJsZS1jb2xsYXBzZS1hbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sbGFwc2UtYWxsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sbGFwc2VBbGxDb21wb25lbnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlRhYmxlLk1hbmFnZXI8UiwgQywgRiwgRz47XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHRvZ2dsZUFsbENvbGxhcHNlZCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAndG9nZ2xlQWxsQ29sbGFwc2VkJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlzQWxsRXhwYW5kZWQoY29sbGFwc2VTdGF0ZTogUml2VGFibGUuQ29sbGFwc2VTdGF0ZTxSPikge1xuICAgIHJldHVybiBUYWJsZUNvbGxhcHNlSGVscGVycy5pc0FsbEV4cGFuZGVkKGNvbGxhcHNlU3RhdGUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibWFuYWdlcj8uc3RhdGUgfCBhc3luYzsgbGV0IHNcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcml2QnV0dG9uIChjbGljayk9XCJ0b2dnbGVBbGxDb2xsYXBzZWQoKVwiPlxuICAgIHt7IGlzQWxsRXhwYW5kZWQocy5jb2xsYXBzZVN0YXRlKSA/ICdDb2xsYXBzZSBhbGwnIDogJ0V4cGFuZCBhbGwnIH19XG4gIDwvYnV0dG9uPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -0,0 +1,227 @@
1
+ import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, } from '@angular/core';
2
+ import Fuse from 'fuse.js';
3
+ import { BehaviorSubject, combineLatest, map } from 'rxjs';
4
+ import { RivSelect } from '../../../input/select/state';
5
+ import { RivTable } from '../state';
6
+ import { TableColumnHelpers } from '../state-helpers/column-helpers';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "../../../notification/banner/banner.component";
10
+ import * as i3 from "../../../input/button/button.component";
11
+ import * as i4 from "../../../visualization/highlight/highlight.component";
12
+ import * as i5 from "../../../icon/icon.component";
13
+ import * as i6 from "../../../overlay/callout/menu/menu.component";
14
+ import * as i7 from "../../../overlay/callout/menu/menu-item/menu-item.component";
15
+ import * as i8 from "../../../input/search/search.component";
16
+ import * as i9 from "../../../overlay/modal/side-sheet/side-sheet.component";
17
+ import * as i10 from "../../../overlay/callout/tooltip/tooltip.directive";
18
+ export class TableColumnSettingsSideSheetComponent {
19
+ constructor() {
20
+ this.open = new BehaviorSubject(false);
21
+ this.filterQuery = new BehaviorSubject('');
22
+ this.searching = this.filterQuery.pipe(map(query => !!query));
23
+ this.maxEnabledColumns = RivTable.ColumnsMaxShown;
24
+ // We only care about when we have entered a drop zone for applying our visual
25
+ // treatment. However, in order to trigger the drop event, you must call preventDefault
26
+ // on the dragover. We are handling this natively on the document, outside of angular
27
+ // as a performance optimization. If we have a draggedOverColumnIdx and we drag over an
28
+ // element with class drop-zone, we will assume you want to the drop element enabled
29
+ // and we will preventDefault.
30
+ this.handleDragOver = (event) => {
31
+ const target = event.target;
32
+ if (this.draggedOverColumnIdx != null && target.closest('.drop-zone')) {
33
+ event.preventDefault();
34
+ }
35
+ };
36
+ this.draggedColumnIdx = null;
37
+ this.draggedColumnKey = null;
38
+ this.draggedOverColumnIdx = null;
39
+ this.unavailableFolderCollapsed = false;
40
+ }
41
+ ngOnInit() {
42
+ this.columnList = combineLatest([
43
+ this.manager.state.pipe(map(s => {
44
+ const allColumns = TableColumnHelpers.getColumnSettingsColumnList(s);
45
+ const fuse = new Fuse(allColumns, {
46
+ keys: ['resolvedName'],
47
+ ignoreLocation: true,
48
+ threshold: 0,
49
+ includeMatches: true,
50
+ });
51
+ const unavailableColumns = TableColumnHelpers.createUnavailableColumns(s.display.unavailableColumnKeys);
52
+ const unavailableFolderTitle = s.display.unavailableFolderTitle;
53
+ return {
54
+ fuse,
55
+ allColumns,
56
+ unavailableColumns,
57
+ unavailableFolderTitle,
58
+ };
59
+ })),
60
+ this.filterQuery,
61
+ ]).pipe(map(([{ fuse, allColumns, unavailableColumns, unavailableFolderTitle }, filterQuery,]) => {
62
+ if (filterQuery) {
63
+ const matches = fuse.search(filterQuery).map(match => {
64
+ const firstmatch = match.matches?.find(result => result.key === 'resolvedName');
65
+ return {
66
+ ...match.item,
67
+ highlightIndices: [
68
+ ...(firstmatch?.indices || []).filter(RivSelect.isFuseMatchExact(firstmatch, filterQuery)),
69
+ ],
70
+ };
71
+ });
72
+ const enabledColumns = matches.filter(column => column.enabled);
73
+ const disabledColumns = matches.filter(column => !column.enabled);
74
+ return {
75
+ enabledColumns,
76
+ disabledColumns,
77
+ unavailableColumns: unavailableColumns,
78
+ unavailableFolderTitle: unavailableFolderTitle,
79
+ };
80
+ }
81
+ const allVisibleColumns = allColumns.map(column => ({
82
+ ...column,
83
+ highlightIndices: [],
84
+ }));
85
+ const enabledColumns = allVisibleColumns.filter(column => column.enabled);
86
+ const disabledColumns = allVisibleColumns.filter(column => !column.enabled);
87
+ return {
88
+ enabledColumns: enabledColumns,
89
+ disabledColumns: disabledColumns,
90
+ unavailableColumns: unavailableColumns,
91
+ unavailableFolderTitle: unavailableFolderTitle,
92
+ };
93
+ }));
94
+ document.addEventListener('dragover', this.handleDragOver);
95
+ }
96
+ ngOnDestroy() {
97
+ document.removeEventListener('dragover', this.handleDragOver);
98
+ }
99
+ columnEnabledChange(column, enabled, source) {
100
+ this.manager?.actions.next({
101
+ type: 'columnEnabledChange',
102
+ column: column.key,
103
+ enabled,
104
+ source,
105
+ });
106
+ }
107
+ columnPinChange(column, pinned) {
108
+ this.manager?.actions.next({
109
+ type: 'columnPinChange',
110
+ column: column.key,
111
+ pinned,
112
+ });
113
+ }
114
+ resetToDefault() {
115
+ this.manager?.actions.next({
116
+ type: 'resetToDefaultColumns',
117
+ });
118
+ }
119
+ columnMoveTo(column, position) {
120
+ this.manager?.actions.next({
121
+ type: 'columnMoveToChange',
122
+ position,
123
+ column: column.key,
124
+ });
125
+ }
126
+ columnFreezeUpTo(freeze, index, source, column) {
127
+ this.manager?.actions.next({
128
+ type: 'columnsFreezeUpToChange',
129
+ freeze,
130
+ index,
131
+ source,
132
+ column,
133
+ });
134
+ }
135
+ allColumnsDisabled(columns) {
136
+ return (columns.disabledColumns.length == 0 && columns.enabledColumns.length > 0);
137
+ }
138
+ allColumnsEnabled(columns) {
139
+ return (columns.enabledColumns.length == 0 && columns.disabledColumns.length > 0);
140
+ }
141
+ showAllColumnsVisible(columns) {
142
+ return (columns.enabledColumns.length + columns.disabledColumns.length <=
143
+ this.maxEnabledColumns);
144
+ }
145
+ disableEnablingColumn(column, columns) {
146
+ return !column.enabled && this.disableEnablingColumns(columns);
147
+ }
148
+ disableEnablingColumns(columns) {
149
+ return columns.enabledColumns.length >= this.maxEnabledColumns;
150
+ }
151
+ iconLimitTooltip() {
152
+ return `Our tables support ${this.maxEnabledColumns} visible columns. Consider hiding some of your current columns to add anything new.`;
153
+ }
154
+ limitTooltip() {
155
+ return `You’ve reached the ${this.maxEnabledColumns}-column limit. Hide a visible column to show this one.`;
156
+ }
157
+ enableAllColumns(enabled) {
158
+ this.manager?.actions.next({
159
+ type: 'enableAllColumnsChange',
160
+ enabled,
161
+ });
162
+ }
163
+ dragStart(idx, key) {
164
+ this.draggedColumnIdx = idx;
165
+ this.draggedColumnKey = key;
166
+ }
167
+ dragOver(ontoIdx) {
168
+ this.draggedOverColumnIdx = ontoIdx;
169
+ }
170
+ drop(ontoIdx, stateIndex, enabled, enabledColumnCount) {
171
+ if (this.draggedColumnIdx !== null) {
172
+ this.manager?.actions.next({
173
+ type: 'columnOrderChange',
174
+ previousIndex: this.draggedColumnIdx,
175
+ newIndex: stateIndex,
176
+ source: 'menuDrag',
177
+ column: this.draggedColumnKey || undefined,
178
+ });
179
+ this.dropEnabledState(enabled, enabledColumnCount);
180
+ this.draggedOverColumnIdx = null;
181
+ this.draggedColumnKey = null;
182
+ }
183
+ }
184
+ dropEnabledState(enabled, enabledColumnCount) {
185
+ if (this.draggedColumnKey !== null && this.draggedColumnIdx !== null) {
186
+ const isEnabled = enabledColumnCount > this.draggedColumnIdx;
187
+ const shouldFire = enabled ? !isEnabled : isEnabled;
188
+ if (shouldFire) {
189
+ this.manager?.actions.next({
190
+ type: 'columnEnabledChange',
191
+ column: this.draggedColumnKey,
192
+ enabled: enabled,
193
+ source: 'dragDrop',
194
+ });
195
+ }
196
+ this.draggedOverColumnIdx = null;
197
+ this.draggedColumnKey = null;
198
+ }
199
+ }
200
+ disabledColumnsWithOffset(index) {
201
+ return index;
202
+ }
203
+ hasDisabledColumnsSection(columns) {
204
+ return columns.disabledColumns.length > 0;
205
+ }
206
+ hasEnabledColumnsSection(columns) {
207
+ return columns.enabledColumns.length > 0;
208
+ }
209
+ hasNoColumnsShownSection(columns, searching) {
210
+ return columns.enabledColumns.length === 0 && searching === false;
211
+ }
212
+ hasUnavailableColumnsSection(columns, searching) {
213
+ return columns.unavailableColumns.length > 0 && searching === false;
214
+ }
215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableColumnSettingsSideSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
216
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableColumnSettingsSideSheetComponent, selector: "riv-table-column-settings-side-sheet", inputs: { manager: "manager" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["trigger"], descendants: true, read: ElementRef }], ngImport: i0, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet\n [label]=\"'Columns'\"\n (close)=\"open.next(false); filterQuery.next('')\"\n >\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"hasEnabledColumnsSection(columns)\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"\n (searching | async) === false && !column.alwaysPinned\n \"\n [attr.droppable]=\"\n (searching | async) === false && !column.alwaysPinned\n \"\n [class.drop-zone]=\"!column.alwaysPinned\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i &&\n !column.alwaysPinned\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i &&\n !column.alwaysPinned\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"\n !column.alwaysPinned\n ? 'Un-freeze columns'\n : 'The above columns cannot be unfrozen'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled || column.alwaysPinned\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n hasNoColumnsShownSection(columns, (searching | async) ?? false)\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n hasDisabledColumnsSection(columns) &&\n (hasEnabledColumnsSection(columns) ||\n hasNoColumnsShownSection(columns, (searching | async) ?? false))\n \"\n ></div>\n <div\n *ngIf=\"hasDisabledColumnsSection(columns)\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns) &&\n !column.alwaysPinned\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns) &&\n !column.alwaysPinned\n \"\n [class.drop-zone]=\"\n !disableEnablingColumns(columns) && !column.alwaysPinned\n \"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n hasUnavailableColumnsSection(\n columns,\n (searching | async) ?? false\n ) &&\n (hasDisabledColumnsSection(columns) ||\n hasEnabledColumnsSection(columns) ||\n hasNoColumnsShownSection(columns, (searching | async) ?? false))\n \"\n ></div>\n <div\n *ngIf=\"\n hasUnavailableColumnsSection(\n columns,\n (searching | async) ?? false\n )\n \"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">\n {{ columns.unavailableFolderTitle }}\n </span>\n\n <button\n type=\"button\"\n rivButton\n class=\"chevron\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"\n unavailableFolderCollapsed ? 'ChevronDown' : 'ChevronUp'\n \"\n (click)=\"\n unavailableFolderCollapsed = !unavailableFolderCollapsed\n \"\n ></button>\n </div>\n\n <div *ngIf=\"!unavailableFolderCollapsed\" class=\"options\">\n <div\n *ngFor=\"let column of columns.unavailableColumns; let i = index\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\" [class.unavailable]=\"column.isUnavailable\">\n <ng-container\n *ngTemplateOutlet=\"reorderIcon; context: { column, columns }\"\n ></ng-container>\n\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"\n (column.enabled || !disableEnablingColumns(columns)) &&\n !column.alwaysPinned &&\n !column.isUnavailable\n \"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n\n <ng-container\n *ngTemplateOutlet=\"enableIcon; context: { column, columns }\"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reorderIcon let-column=\"column\" let-columns=\"columns\">\n <ng-container *ngIf=\"(searching | async) === false\">\n <span\n *ngIf=\"!column.alwaysPinned && !column.isUnavailable\"\n class=\"reorder\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n [rivTooltip]=\"column.tooltipForReorderIcon\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n\n <span\n *ngIf=\"column.alwaysPinned || column.isUnavailable\"\n class=\"reorder-locked\"\n [class.disabled]=\"true\"\n [rivTooltip]=\"column.tooltipForReorderIcon\"\n >\n <riv-icon [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </ng-container>\n</ng-template>\n\n<ng-template #enableIcon let-column=\"column\" let-columns=\"columns\">\n <button\n *ngIf=\"\n !column.alwaysVisible && !column.alwaysPinned && !column.isUnavailable\n \"\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n\n <button\n *ngIf=\"column.alwaysVisible || column.alwaysPinned || column.isUnavailable\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"column.tooltipForHideIcon\"\n [disabled]=\"true\"\n [class.disabled]=\"true\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'Lock'\"\n ></button>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled,.column.unavailable{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.reorder-locked{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}.chevron{cursor:pointer}\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.BannerComponent, selector: "riv-banner", inputs: ["variant", "icon", "iconTooltip", "heading", "dismissable"], outputs: ["dismiss"] }, { kind: "component", type: i3.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition", "current"] }, { kind: "component", type: i4.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i5.IconComponent, selector: "riv-icon", inputs: ["name", "fillColor", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i6.MenuComponent, selector: "riv-menu", inputs: ["preferredPosition", "disabled"] }, { kind: "component", type: i7.MenuItemComponent, selector: "[riv-menu-item]", inputs: ["locked", "disabled", "variant"] }, { kind: "component", type: i8.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i9.SideSheetComponent, selector: "riv-side-sheet", inputs: ["topOffset", "width", "obscure", "label"], outputs: ["close"] }, { kind: "directive", type: i10.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipAnchor", "rivTooltipCloseDelay", "rivTooltipOpenDelay", "rivTooltipGracePeriod"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
217
+ }
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableColumnSettingsSideSheetComponent, decorators: [{
219
+ type: Component,
220
+ args: [{ selector: 'riv-table-column-settings-side-sheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button type=\"button\" #trigger rivButton (click)=\"open.next(true)\">\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-side-sheet\n [label]=\"'Columns'\"\n (close)=\"open.next(false); filterQuery.next('')\"\n >\n <div class=\"content\">\n <div class=\"title\">\n <span>Columns</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"open.next(false); filterQuery.next('')\"\n ></button>\n </div>\n <riv-search\n [name]=\"'column-search'\"\n [value]=\"(filterQuery | async) || ''\"\n (valueChange)=\"filterQuery.next($event)\"\n ></riv-search>\n <riv-banner\n *ngIf=\"\n columns.disabledColumns.length > 0 &&\n disableEnablingColumns(columns)\n \"\n [iconTooltip]=\"iconLimitTooltip()\"\n >\n Column limit reached\n </riv-banner>\n <div class=\"columns\">\n <div *ngIf=\"hasEnabledColumnsSection(columns)\">\n <div\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span class=\"column-header-label\">Shown in table</span>\n <button\n type=\"button\"\n *ngIf=\"(searching | async) === false\"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(false)\"\n >\n Hide all\n </button>\n </div>\n\n <div class=\"options\">\n <ng-container\n *ngFor=\"let column of columns.enabledColumns; let i = index\"\n >\n <div\n class=\"option\"\n [attr.draggable]=\"\n (searching | async) === false && !column.alwaysPinned\n \"\n [attr.droppable]=\"\n (searching | async) === false && !column.alwaysPinned\n \"\n [class.drop-zone]=\"!column.alwaysPinned\"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"\n drop(\n i,\n column.stateIndex,\n true,\n columns.enabledColumns.length\n )\n \"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i &&\n !column.alwaysPinned\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i &&\n !column.alwaysPinned\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n <div\n *ngIf=\"\n column.isLastPinnedColumn && (searching | async) === false\n \"\n class=\"column scroll-padding\"\n >\n <div class=\"frozen\">\n <span class=\"pinned\">\n <riv-icon [name]=\"'PinInactive'\" [size]=\"20\"></riv-icon>\n </span>\n <span>Frozen through here</span>\n </div>\n\n <button\n type=\"button\"\n class=\"hidden\"\n rivButton\n [rivTooltip]=\"\n !column.alwaysPinned\n ? 'Un-freeze columns'\n : 'The above columns cannot be unfrozen'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled || column.alwaysPinned\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'X'\"\n (click)=\"\n columnFreezeUpTo(\n false,\n column.stateIndex,\n 'freezeDivider'\n )\n \"\n ></button>\n </div>\n </ng-container>\n </div>\n </div>\n <div\n *ngIf=\"\n hasNoColumnsShownSection(columns, (searching | async) ?? false)\n \"\n class=\"column-header drop-zone\"\n (drop)=\"dropEnabledState(true, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <span>No columns shown</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"resetToDefault()\"\n >\n Reset to default\n </button>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n hasDisabledColumnsSection(columns) &&\n (hasEnabledColumnsSection(columns) ||\n hasNoColumnsShownSection(columns, (searching | async) ?? false))\n \"\n ></div>\n <div\n *ngIf=\"hasDisabledColumnsSection(columns)\"\n (drop)=\"dropEnabledState(false, columns.enabledColumns.length)\"\n (dragenter)=\"$event.preventDefault(); dragOver(-1)\"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">Hidden from table</span>\n\n <button\n type=\"button\"\n *ngIf=\"\n (searching | async) === false &&\n showAllColumnsVisible(columns)\n \"\n rivButton\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"enableAllColumns(true)\"\n >\n Show all\n </button>\n </div>\n\n <div class=\"options\">\n <div\n *ngFor=\"let column of columns.disabledColumns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns) &&\n !column.alwaysPinned\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumns(columns) &&\n !column.alwaysPinned\n \"\n [class.drop-zone]=\"\n !disableEnablingColumns(columns) && !column.alwaysPinned\n \"\n (dragstart)=\"dragStart(column.stateIndex, column.key)\"\n (dragenter)=\"\n $event.preventDefault();\n dragOver(i + columns.enabledColumns.length)\n \"\n (drop)=\"\n drop(\n i + columns.enabledColumns.length,\n column.stateIndex,\n false,\n columns.enabledColumns.length\n )\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n <div\n class=\"divider\"\n *ngIf=\"\n hasUnavailableColumnsSection(\n columns,\n (searching | async) ?? false\n ) &&\n (hasDisabledColumnsSection(columns) ||\n hasEnabledColumnsSection(columns) ||\n hasNoColumnsShownSection(columns, (searching | async) ?? false))\n \"\n ></div>\n <div\n *ngIf=\"\n hasUnavailableColumnsSection(\n columns,\n (searching | async) ?? false\n )\n \"\n >\n <div class=\"column-header\">\n <span class=\"column-header-label\">\n {{ columns.unavailableFolderTitle }}\n </span>\n\n <button\n type=\"button\"\n rivButton\n class=\"chevron\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"\n unavailableFolderCollapsed ? 'ChevronDown' : 'ChevronUp'\n \"\n (click)=\"\n unavailableFolderCollapsed = !unavailableFolderCollapsed\n \"\n ></button>\n </div>\n\n <div *ngIf=\"!unavailableFolderCollapsed\" class=\"options\">\n <div\n *ngFor=\"let column of columns.unavailableColumns; let i = index\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: { column, columns }\n \"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </riv-side-sheet>\n </ng-container>\n</ng-container>\n\n<ng-template #columnTemplate let-column=\"column\" let-columns=\"columns\">\n <div\n class=\"column scroll-padding\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <div class=\"column\" [class.unavailable]=\"column.isUnavailable\">\n <ng-container\n *ngTemplateOutlet=\"reorderIcon; context: { column, columns }\"\n ></ng-container>\n\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </div>\n <div>\n <riv-menu\n class=\"hidden\"\n *ngIf=\"\n (column.enabled || !disableEnablingColumns(columns)) &&\n !column.alwaysPinned &&\n !column.isUnavailable\n \"\n >\n <button\n type=\"button\"\n *ngIf=\"column.enabled && !column.pinned\"\n riv-menu-item\n (click)=\"\n columnFreezeUpTo(true, column.stateIndex, 'optionsMenu', column.key)\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.enabled && column.pinned\"\n riv-menu-item\n (click)=\"columnFreezeUpTo(false, 0, 'optionsMenu', column.key)\"\n >\n Un-freeze columns\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'start')\"\n >\n Move to start\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"columnMoveTo(column, 'end')\"\n >\n Move to end\n </button>\n <button\n *ngIf=\"!column.alwaysVisible\"\n type=\"button\"\n riv-menu-item\n (click)=\"columnEnabledChange(column, !column.enabled, 'optionsMenu')\"\n >\n {{ column.enabled ? 'Hide column' : 'Show column' }}\n </button>\n </riv-menu>\n\n <ng-container\n *ngTemplateOutlet=\"enableIcon; context: { column, columns }\"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #reorderIcon let-column=\"column\" let-columns=\"columns\">\n <ng-container *ngIf=\"(searching | async) === false\">\n <span\n *ngIf=\"!column.alwaysPinned && !column.isUnavailable\"\n class=\"reorder\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n [rivTooltip]=\"column.tooltipForReorderIcon\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n </span>\n\n <span\n *ngIf=\"column.alwaysPinned || column.isUnavailable\"\n class=\"reorder-locked\"\n [class.disabled]=\"true\"\n [rivTooltip]=\"column.tooltipForReorderIcon\"\n >\n <riv-icon [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </ng-container>\n</ng-template>\n\n<ng-template #enableIcon let-column=\"column\" let-columns=\"columns\">\n <button\n *ngIf=\"\n !column.alwaysVisible && !column.alwaysPinned && !column.isUnavailable\n \"\n type=\"button\"\n rivButton\n [rivTooltip]=\"\n column.enabled\n ? 'Hide column'\n : disableEnablingColumns(columns)\n ? limitTooltip()\n : 'Show column'\n \"\n class=\"disable-override\"\n [class.disabled]=\"!column.enabled\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"column.enabled ? 'Eye' : 'EyeOff'\"\n (click)=\"columnEnabledChange(column, !column.enabled, 'eyeIcon')\"\n ></button>\n\n <button\n *ngIf=\"column.alwaysVisible || column.alwaysPinned || column.isUnavailable\"\n type=\"button\"\n rivButton\n [rivTooltip]=\"column.tooltipForHideIcon\"\n [disabled]=\"true\"\n [class.disabled]=\"true\"\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"'Lock'\"\n ></button>\n</ng-template>\n", styles: [".content{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-medium);height:100%}.title{font:var(--title-02);display:flex;justify-content:space-between;align-items:center}.column-header{color:var(--type-light-low-contrast);display:flex;justify-content:space-between;align-items:center;font:var(--input-medium)}.column-header-label{padding:var(--size-small) 0}.column{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium)}.column:hover{background-color:var(--surface-light-1)}.column:hover .hidden{opacity:1}.column.disabled,.column.unavailable{color:var(--type-light-low-contrast)}.reorder{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:grab}.reorder.disabled{cursor:not-allowed}.reorder-locked{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch;color:var(--type-light-low-contrast);cursor:not-allowed}.pinned{padding-right:var(--size-medium);display:flex;justify-content:center;align-items:center;align-self:stretch}.frozen{display:flex;align-items:center;justify-content:space-between;position:relative;font:var(--input-medium);color:var(--type-light-low-contrast)}.disable-override.disabled:hover{cursor:pointer}.hidden{opacity:0}.columns{flex-grow:1;overflow-y:auto}.options{display:flex;flex-direction:column}.option{position:relative}.option.dragged-over-top:before,.option.dragged-over-bottom:before{content:\"\";position:absolute;left:0;right:0;height:var(--size-xxsmall);background-color:var(--brand);box-shadow:0 0 var(--size-xxsmall) var(--brand)}.option.dragged-over-top:before{top:0}.option.dragged-over-bottom:before{bottom:0}.scroll-padding{padding-right:var(--base-grid-size)}.divider{border-top:var(--border-width) solid var(--border-light);margin-top:var(--size-medium);margin-bottom:var(--size-medium)}.chevron{cursor:pointer}\n"] }]
221
+ }], propDecorators: { manager: [{
222
+ type: Input
223
+ }], anchor: [{
224
+ type: ViewChild,
225
+ args: ['trigger', { read: ElementRef }]
226
+ }] } });
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUvdGFibGUtY29sdW1uLXNldHRpbmdzL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy1zaWRlLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3RhYmxlL3RhYmxlL3RhYmxlLWNvbHVtbi1zZXR0aW5ncy90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7QUFlckUsTUFBTSxPQUFPLHFDQUFxQztJQU5sRDtRQWtCVyxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FB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QztJQUVELHlCQUF5QixDQUFDLEtBQWE7UUFDckMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsT0FBd0I7UUFDaEQsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQXdCO1FBQy9DLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUF3QixFQUFFLFNBQWtCO1FBQ25FLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxLQUFLLENBQUM7SUFDcEUsQ0FBQztJQUVELDRCQUE0QixDQUFDLE9BQXdCLEVBQUUsU0FBa0I7UUFDdkUsT0FBTyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLEtBQUssS0FBSyxDQUFDO0lBQ3RFLENBQUM7K0dBalNVLHFDQUFxQzttR0FBckMscUNBQXFDLDBMQVNsQixVQUFVLDZCQ3JDMUMsb3diQThaQTs7NEZEbFlhLHFDQUFxQztrQkFOakQsU0FBUzsrQkFDRSxzQ0FBc0MsbUJBRy9CLHVCQUF1QixDQUFDLE1BQU07OEJBUy9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3NlbGVjdC9zdGF0ZSc7XG5pbXBvcnQgeyBSaXZUYWJsZSB9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uSGVscGVycyB9IGZyb20gJy4uL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuXG50eXBlIENvbHVtbkdyb3VwczxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPiA9IHtcbiAgZW5hYmxlZENvbHVtbnM6IFRhYmxlQ29sdW1uSGVscGVycy5Db2x1bW5MaXN0PEM+O1xuICBkaXNhYmxlZENvbHVtbnM6IFRhYmxlQ29sdW1uSGVscGVycy5Db2x1bW5MaXN0PEM+O1xuICB1bmF2YWlsYWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uSGVscGVycy5Db2x1bW5MaXN0PEM+O1xuICB1bmF2YWlsYWJsZUZvbGRlclRpdGxlOiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sdW1uLXNldHRpbmdzLXNpZGUtc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jb2x1bW4tc2V0dGluZ3Mtc2lkZS1zaGVldC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbHVtblNldHRpbmdzU2lkZVNoZWV0Q29tcG9uZW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2VGFibGUuTWFuYWdlcjxSLCBDLCBGPjtcblxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGFuY2hvcj86IEVsZW1lbnRSZWY7XG5cbiAgcmVhZG9ubHkgb3BlbiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGZpbHRlclF1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgcmVhZG9ubHkgc2VhcmNoaW5nID0gdGhpcy5maWx0ZXJRdWVyeS5waXBlKG1hcChxdWVyeSA9PiAhIXF1ZXJ5KSk7XG5cbiAgY29sdW1uTGlzdD86IE9ic2VydmFibGU8Q29sdW1uR3JvdXBzPEM+PjtcblxuICBtYXhFbmFibGVkQ29sdW1uczogbnVtYmVyID0gUml2VGFibGUuQ29sdW1uc01heFNob3duO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29sdW1uTGlzdCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5hZ2VyIS5zdGF0ZS5waXBlKFxuICAgICAgICBtYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLkNvbHVtbkxpc3Q8Qz4gPVxuICAgICAgICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmdldENvbHVtblNldHRpbmdzQ29sdW1uTGlzdChzKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhbGxDb2x1bW5zLCB7XG4gICAgICAgICAgICBrZXlzOiBbJ3Jlc29sdmVkTmFtZSddLFxuICAgICAgICAgICAgaWdub3JlTG9jYXRpb246IHRydWUsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHVuYXZhaWxhYmxlQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLkNvbHVtbkxpc3Q8Qz4gPVxuICAgICAgICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZVVuYXZhaWxhYmxlQ29sdW1ucyhcbiAgICAgICAgICAgICAgcy5kaXNwbGF5LnVuYXZhaWxhYmxlQ29sdW1uS2V5cyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdW5hdmFpbGFibGVGb2xkZXJUaXRsZTogc3RyaW5nID1cbiAgICAgICAgICAgIHMuZGlzcGxheS51bmF2YWlsYWJsZUZvbGRlclRpdGxlO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZ1c2UsXG4gICAgICAgICAgICBhbGxDb2x1bW5zLFxuICAgICAgICAgICAgdW5hdmFpbGFibGVDb2x1bW5zLFxuICAgICAgICAgICAgdW5hdmFpbGFibGVGb2xkZXJUaXRsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB0aGlzLmZpbHRlclF1ZXJ5LFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbXG4gICAgICAgICAgeyBmdXNlLCBhbGxDb2x1bW5zLCB1bmF2YWlsYWJsZUNvbHVtbnMsIHVuYXZhaWxhYmxlRm9sZGVyVGl0bGUgfSxcbiAgICAgICAgICBmaWx0ZXJRdWVyeSxcbiAgICAgICAgXSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKGZpbHRlclF1ZXJ5KS5tYXAobWF0Y2ggPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdG1hdGNoID0gbWF0Y2gubWF0Y2hlcz8uZmluZChcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3Jlc29sdmVkTmFtZScsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubWF0Y2guaXRlbSxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZmlyc3RtYXRjaD8uaW5kaWNlcyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBSaXZTZWxlY3QuaXNGdXNlTWF0Y2hFeGFjdChmaXJzdG1hdGNoISwgZmlsdGVyUXVlcnkpLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IG1hdGNoZXMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZW5hYmxlZCk7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZENvbHVtbnMgPSBtYXRjaGVzLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5lbmFibGVkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZW5hYmxlZENvbHVtbnMsXG4gICAgICAgICAgICAgIGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgdW5hdmFpbGFibGVDb2x1bW5zOiB1bmF2YWlsYWJsZUNvbHVtbnMsXG4gICAgICAgICAgICAgIHVuYXZhaWxhYmxlRm9sZGVyVGl0bGU6IHVuYXZhaWxhYmxlRm9sZGVyVGl0bGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFsbFZpc2libGVDb2x1bW5zID0gYWxsQ29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICBoaWdobGlnaHRJbmRpY2VzOiBbXSxcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkQ29sdW1ucyA9IGFsbFZpc2libGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIGNvbHVtbiA9PiBjb2x1bW4uZW5hYmxlZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRpc2FibGVkQ29sdW1ucyA9IGFsbFZpc2libGVDb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIGNvbHVtbiA9PiAhY29sdW1uLmVuYWJsZWQsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbmFibGVkQ29sdW1uczogZW5hYmxlZENvbHVtbnMsXG4gICAgICAgICAgICBkaXNhYmxlZENvbHVtbnM6IGRpc2FibGVkQ29sdW1ucyxcbiAgICAgICAgICAgIHVuYXZhaWxhYmxlQ29sdW1uczogdW5hdmFpbGFibGVDb2x1bW5zLFxuICAgICAgICAgICAgdW5hdmFpbGFibGVGb2xkZXJUaXRsZTogdW5hdmFpbGFibGVGb2xkZXJUaXRsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCB0aGlzLmhhbmRsZURyYWdPdmVyKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5oYW5kbGVEcmFnT3Zlcik7XG4gIH1cblxuICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgd2hlbiB3ZSBoYXZlIGVudGVyZWQgYSBkcm9wIHpvbmUgZm9yIGFwcGx5aW5nIG91ciB2aXN1YWxcbiAgLy8gdHJlYXRtZW50LiBIb3dldmVyLCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoZSBkcm9wIGV2ZW50LCB5b3UgbXVzdCBjYWxsIHByZXZlbnREZWZhdWx0XG4gIC8vIG9uIHRoZSBkcmFnb3Zlci4gV2UgYXJlIGhhbmRsaW5nIHRoaXMgbmF0aXZlbHkgb24gdGhlIGRvY3VtZW50LCBvdXRzaWRlIG9mIGFuZ3VsYXJcbiAgLy8gYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIElmIHdlIGhhdmUgYSBkcmFnZ2VkT3ZlckNvbHVtbklkeCBhbmQgd2UgZHJhZyBvdmVyIGFuXG4gIC8vIGVsZW1lbnQgd2l0aCBjbGFzcyBkcm9wLXpvbmUsIHdlIHdpbGwgYXNzdW1lIHlvdSB3YW50IHRvIHRoZSBkcm9wIGVsZW1lbnQgZW5hYmxlZFxuICAvLyBhbmQgd2Ugd2lsbCBwcmV2ZW50RGVmYXVsdC5cbiAgaGFuZGxlRHJhZ092ZXIgPSAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCAhPSBudWxsICYmIHRhcmdldC5jbG9zZXN0KCcuZHJvcC16b25lJykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbHVtbkVuYWJsZWRDaGFuZ2UoXG4gICAgY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICBlbmFibGVkOiBib29sZWFuLFxuICAgIHNvdXJjZTogJ29wdGlvbnNNZW51JyB8ICdleWVJY29uJyxcbiAgKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnLFxuICAgICAgY29sdW1uOiBjb2x1bW4ua2V5LFxuICAgICAgZW5hYmxlZCxcbiAgICAgIHNvdXJjZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtblBpbkNoYW5nZShjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwaW5uZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJyxcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICAgIHBpbm5lZCxcbiAgICB9KTtcbiAgfVxuICByZXNldFRvRGVmYXVsdCgpIHtcbiAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbk1vdmVUbyhjb2x1bW46IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LCBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZScsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGNvbHVtbjogY29sdW1uLmtleSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbHVtbkZyZWV6ZVVwVG8oXG4gICAgZnJlZXplOiBib29sZWFuLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc291cmNlOiAnZnJlZXplRGl2aWRlcicgfCAnb3B0aW9uc01lbnUnLFxuICAgIGNvbHVtbj86IEMsXG4gICkge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZScsXG4gICAgICBmcmVlemUsXG4gICAgICBpbmRleCxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGNvbHVtbixcbiAgICB9KTtcbiAgfVxuXG4gIGFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID09IDAgJiYgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCA9PSAwICYmIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICApO1xuICB9XG5cbiAgc2hvd0FsbENvbHVtbnNWaXNpYmxlKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCArIGNvbHVtbnMuZGlzYWJsZWRDb2x1bW5zLmxlbmd0aCA8PVxuICAgICAgdGhpcy5tYXhFbmFibGVkQ29sdW1uc1xuICAgICk7XG4gIH1cblxuICBkaXNhYmxlRW5hYmxpbmdDb2x1bW4oXG4gICAgY29sdW1uOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICBjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4sXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhY29sdW1uLmVuYWJsZWQgJiYgdGhpcy5kaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpO1xuICB9XG5cbiAgZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPj0gdGhpcy5tYXhFbmFibGVkQ29sdW1ucztcbiAgfVxuXG4gIGljb25MaW1pdFRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYE91ciB0YWJsZXMgc3VwcG9ydCAke3RoaXMubWF4RW5hYmxlZENvbHVtbnN9IHZpc2libGUgY29sdW1ucy4gQ29uc2lkZXIgaGlkaW5nIHNvbWUgb2YgeW91ciBjdXJyZW50IGNvbHVtbnMgdG8gYWRkIGFueXRoaW5nIG5ldy5gO1xuICB9XG5cbiAgbGltaXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBZb3XigJl2ZSByZWFjaGVkIHRoZSAke3RoaXMubWF4RW5hYmxlZENvbHVtbnN9LWNvbHVtbiBsaW1pdC4gSGlkZSBhIHZpc2libGUgY29sdW1uIHRvIHNob3cgdGhpcyBvbmUuYDtcbiAgfVxuXG4gIGVuYWJsZUFsbENvbHVtbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJyxcbiAgICAgIGVuYWJsZWQsXG4gICAgfSk7XG4gIH1cblxuICBkcmFnZ2VkQ29sdW1uSWR4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgZHJhZ2dlZENvbHVtbktleTogQyB8IG51bGwgPSBudWxsO1xuICBkcmFnZ2VkT3ZlckNvbHVtbklkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ1N0YXJ0KGlkeDogbnVtYmVyLCBrZXk6IEMpIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5JZHggPSBpZHg7XG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0ga2V5O1xuICB9XG5cbiAgZHJhZ092ZXIob250b0lkeDogbnVtYmVyKSB7XG4gICAgdGhpcy5kcmFnZ2VkT3ZlckNvbHVtbklkeCA9IG9udG9JZHg7XG4gIH1cblxuICBkcm9wKFxuICAgIG9udG9JZHg6IG51bWJlcixcbiAgICBzdGF0ZUluZGV4OiBudW1iZXIsXG4gICAgZW5hYmxlZDogYm9vbGVhbixcbiAgICBlbmFibGVkQ29sdW1uQ291bnQ6IG51bWJlcixcbiAgKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnLFxuICAgICAgICBwcmV2aW91c0luZGV4OiB0aGlzLmRyYWdnZWRDb2x1bW5JZHgsXG4gICAgICAgIG5ld0luZGV4OiBzdGF0ZUluZGV4LFxuICAgICAgICBzb3VyY2U6ICdtZW51RHJhZycsXG4gICAgICAgIGNvbHVtbjogdGhpcy5kcmFnZ2VkQ29sdW1uS2V5IHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kcm9wRW5hYmxlZFN0YXRlKGVuYWJsZWQsIGVuYWJsZWRDb2x1bW5Db3VudCk7XG5cbiAgICAgIHRoaXMuZHJhZ2dlZE92ZXJDb2x1bW5JZHggPSBudWxsO1xuICAgICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBkcm9wRW5hYmxlZFN0YXRlKGVuYWJsZWQ6IGJvb2xlYW4sIGVuYWJsZWRDb2x1bW5Db3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZENvbHVtbktleSAhPT0gbnVsbCAmJiB0aGlzLmRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGVuYWJsZWRDb2x1bW5Db3VudCA+IHRoaXMuZHJhZ2dlZENvbHVtbklkeDtcbiAgICAgIGNvbnN0IHNob3VsZEZpcmUgPSBlbmFibGVkID8gIWlzRW5hYmxlZCA6IGlzRW5hYmxlZDtcbiAgICAgIGlmIChzaG91bGRGaXJlKSB7XG4gICAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgICB0eXBlOiAnY29sdW1uRW5hYmxlZENoYW5nZScsXG4gICAgICAgICAgY29sdW1uOiB0aGlzLmRyYWdnZWRDb2x1bW5LZXksXG4gICAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgICBzb3VyY2U6ICdkcmFnRHJvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRyYWdnZWRPdmVyQ29sdW1uSWR4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbktleSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZWRDb2x1bW5zV2l0aE9mZnNldChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgaGFzRGlzYWJsZWRDb2x1bW5zU2VjdGlvbihjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pIHtcbiAgICByZXR1cm4gY29sdW1ucy5kaXNhYmxlZENvbHVtbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhc0VuYWJsZWRDb2x1bW5zU2VjdGlvbihjb2x1bW5zOiBDb2x1bW5Hcm91cHM8Qz4pIHtcbiAgICByZXR1cm4gY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaGFzTm9Db2x1bW5zU2hvd25TZWN0aW9uKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPiwgc2VhcmNoaW5nOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoID09PSAwICYmIHNlYXJjaGluZyA9PT0gZmFsc2U7XG4gIH1cblxuICBoYXNVbmF2YWlsYWJsZUNvbHVtbnNTZWN0aW9uKGNvbHVtbnM6IENvbHVtbkdyb3VwczxDPiwgc2VhcmNoaW5nOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMudW5hdmFpbGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgc2VhcmNoaW5nID09PSBmYWxzZTtcbiAgfVxuXG4gIHVuYXZhaWxhYmxlRm9sZGVyQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG59XG4iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjdHJpZ2dlciByaXZCdXR0b24gKGNsaWNrKT1cIm9wZW4ubmV4dCh0cnVlKVwiPlxuICBDb2x1bW5zXG48L2J1dHRvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkxpc3QgfCBhc3luYzsgbGV0IGNvbHVtbnNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wZW4gfCBhc3luY1wiPlxuICAgIDxyaXYtc2lkZS1zaGVldFxuICAgICAgW2xhYmVsXT1cIidDb2x1bW5zJ1wiXG4gICAgICAoY2xvc2UpPVwib3Blbi5uZXh0KGZhbHNlKTsgZmlsdGVyUXVlcnkubmV4dCgnJylcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgIDxzcGFuPkNvbHVtbnM8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgW2ljb25dPVwiJ1gnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuLm5leHQoZmFsc2UpOyBmaWx0ZXJRdWVyeS5uZXh0KCcnKVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICBbbmFtZV09XCInY29sdW1uLXNlYXJjaCdcIlxuICAgICAgICAgIFt2YWx1ZV09XCIoZmlsdGVyUXVlcnkgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmaWx0ZXJRdWVyeS5uZXh0KCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8cml2LWJhbm5lclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmRpc2FibGVkQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaWNvblRvb2x0aXBdPVwiaWNvbkxpbWl0VG9vbHRpcCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIENvbHVtbiBsaW1pdCByZWFjaGVkXG4gICAgICAgIDwvcml2LWJhbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzRW5hYmxlZENvbHVtbnNTZWN0aW9uKGNvbHVtbnMpXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLWhlYWRlciBkcm9wLXpvbmVcIlxuICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wRW5hYmxlZFN0YXRlKHRydWUsIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVwiXG4gICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPlNob3duIGluIHRhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbENvbHVtbnNFbmFibGVkKGNvbHVtbnMpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlQWxsQ29sdW1ucyhmYWxzZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgSGlkZSBhbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucy5lbmFibGVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kcmFnZ2FibGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlICYmICFjb2x1bW4uYWx3YXlzUGlubmVkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZHJvcHBhYmxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZSAmJiAhY29sdW1uLmFsd2F5c1Bpbm5lZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5kcm9wLXpvbmVdPVwiIWNvbHVtbi5hbHdheXNQaW5uZWRcIlxuICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKGkpXCJcbiAgICAgICAgICAgICAgICAgIChkcm9wKT1cIlxuICAgICAgICAgICAgICAgICAgICBkcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnN0YXRlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRyYWdnZWQtb3Zlci10b3BdPVwiXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ29sdW1uSWR4ID09PSBpICYmXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnZWRDb2x1bW5JZHggIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCA+IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5hbHdheXNQaW5uZWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dlZC1vdmVyLWJvdHRvbV09XCJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZE92ZXJDb2x1bW5JZHggPT09IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dlZENvbHVtbklkeCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkQ29sdW1uSWR4IDwgaSAmJlxuICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmFsd2F5c1Bpbm5lZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pc0xhc3RQaW5uZWRDb2x1bW4gJiYgKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZyb3plblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUGluSW5hY3RpdmUnXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkZyb3plbiB0aHJvdWdoIGhlcmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICByaXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgW3JpdlRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5hbHdheXNQaW5uZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1VuLWZyZWV6ZSBjb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnVGhlIGFib3ZlIGNvbHVtbnMgY2Fubm90IGJlIHVuZnJvemVuJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRpc2FibGUtb3ZlcnJpZGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWNvbHVtbi5lbmFibGVkIHx8IGNvbHVtbi5hbHdheXNQaW5uZWRcIlxuICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidYJ1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5GcmVlemVVcFRvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc3RhdGVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmcmVlemVEaXZpZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBoYXNOb0NvbHVtbnNTaG93blNlY3Rpb24oY29sdW1ucywgKHNlYXJjaGluZyB8IGFzeW5jKSA/PyBmYWxzZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1oZWFkZXIgZHJvcC16b25lXCJcbiAgICAgICAgICAgIChkcm9wKT1cImRyb3BFbmFibGVkU3RhdGUodHJ1ZSwgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgpXCJcbiAgICAgICAgICAgIChkcmFnZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGRyYWdPdmVyKC0xKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+Tm8gY29sdW1ucyBzaG93bjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICBbdmFyaWFudF09XCInZ2hvc3QnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0VG9EZWZhdWx0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBSZXNldCB0byBkZWZhdWx0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRpdmlkZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgaGFzRGlzYWJsZWRDb2x1bW5zU2VjdGlvbihjb2x1bW5zKSAmJlxuICAgICAgICAgICAgICAoaGFzRW5hYmxlZENvbHVtbnNTZWN0aW9uKGNvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgaGFzTm9Db2x1bW5zU2hvd25TZWN0aW9uKGNvbHVtbnMsIChzZWFyY2hpbmcgfCBhc3luYykgPz8gZmFsc2UpKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJoYXNEaXNhYmxlZENvbHVtbnNTZWN0aW9uKGNvbHVtbnMpXCJcbiAgICAgICAgICAgIChkcm9wKT1cImRyb3BFbmFibGVkU3RhdGUoZmFsc2UsIGNvbHVtbnMuZW5hYmxlZENvbHVtbnMubGVuZ3RoKVwiXG4gICAgICAgICAgICAoZHJhZ2VudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBkcmFnT3ZlcigtMSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPkhpZGRlbiBmcm9tIHRhYmxlPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgKHNlYXJjaGluZyB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgIHNob3dBbGxDb2x1bW5zVmlzaWJsZShjb2x1bW5zKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcml2QnV0dG9uXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbENvbHVtbnNEaXNhYmxlZChjb2x1bW5zKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuYWJsZUFsbENvbHVtbnModHJ1ZSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2hvdyBhbGxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1ucy5kaXNhYmxlZENvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyYWdnYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKSAmJlxuICAgICAgICAgICAgICAgICAgIWNvbHVtbi5hbHdheXNQaW5uZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRyb3BwYWJsZV09XCJcbiAgICAgICAgICAgICAgICAgIChzZWFyY2hpbmcgfCBhc3luYykgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgICAhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKSAmJlxuICAgICAgICAgICAgICAgICAgIWNvbHVtbi5hbHdheXNQaW5uZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kcm9wLXpvbmVdPVwiXG4gICAgICAgICAgICAgICAgICAhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKSAmJiAhY29sdW1uLmFsd2F5c1Bpbm5lZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJkcmFnU3RhcnQoY29sdW1uLnN0YXRlSW5kZXgsIGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2VudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBkcmFnT3ZlcihpICsgY29sdW1ucy5lbmFibGVkQ29sdW1ucy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJcbiAgICAgICAgICAgICAgICAgIGRyb3AoXG4gICAgICAgICAgICAgICAgICAgIGkgKyBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnN0YXRlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmVuYWJsZWRDb2x1bW5zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkaXZpZGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGhhc1VuYXZhaWxhYmxlQ29sdW1uc1NlY3Rpb24oXG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICAoc2VhcmNoaW5nIHwgYXN5bmMpID8/IGZhbHNlXG4gICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgKGhhc0Rpc2FibGVkQ29sdW1uc1NlY3Rpb24oY29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICBoYXNFbmFibGVkQ29sdW1uc1NlY3Rpb24oY29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICBoYXNOb0NvbHVtbnNTaG93blNlY3Rpb24oY29sdW1ucywgKHNlYXJjaGluZyB8IGFzeW5jKSA/PyBmYWxzZSkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBoYXNVbmF2YWlsYWJsZUNvbHVtbnNTZWN0aW9uKFxuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgKHNlYXJjaGluZyB8IGFzeW5jKSA/PyBmYWxzZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uLWhlYWRlci1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbHVtbnMudW5hdmFpbGFibGVGb2xkZXJUaXRsZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHJpdkJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hldnJvblwiXG4gICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgICB1bmF2YWlsYWJsZUZvbGRlckNvbGxhcHNlZCA/ICdDaGV2cm9uRG93bicgOiAnQ2hldnJvblVwJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgdW5hdmFpbGFibGVGb2xkZXJDb2xsYXBzZWQgPSAhdW5hdmFpbGFibGVGb2xkZXJDb2xsYXBzZWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF1bmF2YWlsYWJsZUZvbGRlckNvbGxhcHNlZFwiIGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zLnVuYXZhaWxhYmxlQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9yaXYtc2lkZS1zaGVldD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5UZW1wbGF0ZSBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbiBzY3JvbGwtcGFkZGluZ1wiXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVFbmFibGluZ0NvbHVtbihjb2x1bW4sIGNvbHVtbnMpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiBbY2xhc3MudW5hdmFpbGFibGVdPVwiY29sdW1uLmlzVW5hdmFpbGFibGVcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW9yZGVySWNvbjsgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgIFt0ZXh0XT1cImNvbHVtbi5yZXNvbHZlZE5hbWVcIlxuICAgICAgICBbaW5kaWNlc109XCJjb2x1bW4uaGlnaGxpZ2h0SW5kaWNlc1wiXG4gICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8cml2LW1lbnVcbiAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIChjb2x1bW4uZW5hYmxlZCB8fCAhZGlzYWJsZUVuYWJsaW5nQ29sdW1ucyhjb2x1bW5zKSkgJiZcbiAgICAgICAgICAhY29sdW1uLmFsd2F5c1Bpbm5lZCAmJlxuICAgICAgICAgICFjb2x1bW4uaXNVbmF2YWlsYWJsZVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZW5hYmxlZCAmJiAhY29sdW1uLnBpbm5lZFwiXG4gICAgICAgICAgcml2LW1lbnUtaXRlbVxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIGNvbHVtbkZyZWV6ZVVwVG8odHJ1ZSwgY29sdW1uLnN0YXRlSW5kZXgsICdvcHRpb25zTWVudScsIGNvbHVtbi5rZXkpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIEZyZWV6ZSB1cCB0byBjb2x1bW5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtbi5lbmFibGVkICYmIGNvbHVtbi5waW5uZWRcIlxuICAgICAgICAgIHJpdi1tZW51LWl0ZW1cbiAgICAgICAgICAoY2xpY2spPVwiY29sdW1uRnJlZXplVXBUbyhmYWxzZSwgMCwgJ29wdGlvbnNNZW51JywgY29sdW1uLmtleSlcIlxuICAgICAgICA+XG4gICAgICAgICAgVW4tZnJlZXplIGNvbHVtbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbk1vdmVUbyhjb2x1bW4sICdzdGFydCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIE1vdmUgdG8gc3RhcnRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbk1vdmVUbyhjb2x1bW4sICdlbmQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBNb3ZlIHRvIGVuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5hbHdheXNWaXNpYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByaXYtbWVudS1pdGVtXG4gICAgICAgICAgKGNsaWNrKT1cImNvbHVtbkVuYWJsZWRDaGFuZ2UoY29sdW1uLCAhY29sdW1uLmVuYWJsZWQsICdvcHRpb25zTWVudScpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbHVtbi5lbmFibGVkID8gJ0hpZGUgY29sdW1uJyA6ICdTaG93IGNvbHVtbicgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1tZW51PlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW5hYmxlSWNvbjsgY29udGV4dDogeyBjb2x1bW4sIGNvbHVtbnMgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZW9yZGVySWNvbiBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIoc2VhcmNoaW5nIHwgYXN5bmMpID09PSBmYWxzZVwiPlxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cIiFjb2x1bW4uYWx3YXlzUGlubmVkICYmICFjb2x1bW4uaXNVbmF2YWlsYWJsZVwiXG4gICAgICBjbGFzcz1cInJlb3JkZXJcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVFbmFibGluZ0NvbHVtbihjb2x1bW4sIGNvbHVtbnMpXCJcbiAgICAgIFtyaXZUb29sdGlwXT1cImNvbHVtbi50b29sdGlwRm9yUmVvcmRlckljb25cIlxuICAgID5cbiAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInUmVvcmRlcidcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW5cbiAgICAgICpuZ0lmPVwiY29sdW1uLmFsd2F5c1Bpbm5lZCB8fCBjb2x1bW4uaXNVbmF2YWlsYWJsZVwiXG4gICAgICBjbGFzcz1cInJlb3JkZXItbG9ja2VkXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgIFtyaXZUb29sdGlwXT1cImNvbHVtbi50b29sdGlwRm9yUmVvcmRlckljb25cIlxuICAgID5cbiAgICAgIDxyaXYtaWNvbiBbbmFtZV09XCInTG9jaydcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgPC9zcGFuPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW5hYmxlSWNvbiBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cIlxuICAgICAgIWNvbHVtbi5hbHdheXNWaXNpYmxlICYmICFjb2x1bW4uYWx3YXlzUGlubmVkICYmICFjb2x1bW4uaXNVbmF2YWlsYWJsZVxuICAgIFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcml2QnV0dG9uXG4gICAgW3JpdlRvb2x0aXBdPVwiXG4gICAgICBjb2x1bW4uZW5hYmxlZFxuICAgICAgICA/ICdIaWRlIGNvbHVtbidcbiAgICAgICAgOiBkaXNhYmxlRW5hYmxpbmdDb2x1bW5zKGNvbHVtbnMpXG4gICAgICAgID8gbGltaXRUb29sdGlwKClcbiAgICAgICAgOiAnU2hvdyBjb2x1bW4nXG4gICAgXCJcbiAgICBjbGFzcz1cImRpc2FibGUtb3ZlcnJpZGVcIlxuICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhY29sdW1uLmVuYWJsZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRW5hYmxpbmdDb2x1bW4oY29sdW1uLCBjb2x1bW5zKVwiXG4gICAgW3ZhcmlhbnRdPVwiJ2dob3N0J1wiXG4gICAgW3NpemVdPVwiJ3NtYWxsJ1wiXG4gICAgW2ljb25dPVwiY29sdW1uLmVuYWJsZWQgPyAnRXllJyA6ICdFeWVPZmYnXCJcbiAgICAoY2xpY2spPVwiY29sdW1uRW5hYmxlZENoYW5nZShjb2x1bW4sICFjb2x1bW4uZW5hYmxlZCwgJ2V5ZUljb24nKVwiXG4gID48L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJjb2x1bW4uYWx3YXlzVmlzaWJsZSB8fCBjb2x1bW4uYWx3YXlzUGlubmVkIHx8IGNvbHVtbi5pc1VuYXZhaWxhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICByaXZCdXR0b25cbiAgICBbcml2VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcEZvckhpZGVJY29uXCJcbiAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cInRydWVcIlxuICAgIFt2YXJpYW50XT1cIidnaG9zdCdcIlxuICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgIFtpY29uXT1cIidMb2NrJ1wiXG4gID48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=