@rivet-health/design-system 40.44.0 → 40.44.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/{esm2020 → esm2022}/lib/accessibility/sr-only/sr-only.component.mjs +4 -4
  2. package/esm2022/lib/download/download.service.mjs +47 -0
  3. package/{esm2020 → esm2022}/lib/format/pipes/common.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/format/pipes/date.pipe.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/format/pipes/days.pipe.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/format/pipes/dollars.pipe.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/format/pipes/number.pipe.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/format/pipes/percentage.pipe.mjs +4 -4
  9. package/esm2022/lib/format/pipes/sentence-case.pipe.mjs +61 -0
  10. package/esm2022/lib/format/pipes/small-currency.pipe.mjs +24 -0
  11. package/esm2022/lib/format/pipes/small-number.pipe.mjs +29 -0
  12. package/esm2022/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +62 -0
  13. package/esm2022/lib/format/truncate/truncate.component.mjs +51 -0
  14. package/esm2022/lib/icon/dom-cache.mjs +32 -0
  15. package/esm2022/lib/icon/icon.component.mjs +86 -0
  16. package/{esm2020 → esm2022}/lib/icon/icons.mjs +1 -1
  17. package/{esm2020 → esm2022}/lib/input/alphabetic-field/alphabetic-field.component.mjs +4 -4
  18. package/esm2022/lib/input/auto-focus/auto-focus.directive.mjs +48 -0
  19. package/esm2022/lib/input/button/button.component.mjs +139 -0
  20. package/esm2022/lib/input/button-group/button-group.component.mjs +39 -0
  21. package/{esm2020 → esm2022}/lib/input/calendar/calendar.component.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/input/card-checkbox/card-checkbox.component.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/input/checkbox/checkbox.component.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/input/currency-field/currency-field.component.mjs +4 -4
  25. package/esm2022/lib/input/date/date.component.mjs +279 -0
  26. package/esm2022/lib/input/date-range/date-range.component.mjs +477 -0
  27. package/esm2022/lib/input/filter-chip/filter-chip.component.mjs +47 -0
  28. package/{esm2020 → esm2022}/lib/input/filter-dropdown/filter-dropdown.component.mjs +5 -5
  29. package/{esm2020 → esm2022}/lib/input/input-label/input-label.component.mjs +4 -4
  30. package/esm2022/lib/input/mentions-input/mentions-input.component.mjs +745 -0
  31. package/esm2022/lib/input/number-field/number-field.component.mjs +125 -0
  32. package/{esm2020 → esm2022}/lib/input/percentage-field/percentage-field.component.mjs +4 -4
  33. package/esm2022/lib/input/phone-field/phone-field.component.mjs +74 -0
  34. package/{esm2020 → esm2022}/lib/input/radio/radio.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/input/search/search.component.mjs +4 -4
  36. package/esm2022/lib/input/search-select/search-select.component.mjs +189 -0
  37. package/esm2022/lib/input/select/select/select.component.mjs +178 -0
  38. package/{esm2020 → esm2022}/lib/input/select/select-node/select-node.component.mjs +4 -4
  39. package/esm2022/lib/input/select/state.mjs +882 -0
  40. package/{esm2020 → esm2022}/lib/input/simple-select/option-group.pipe.mjs +4 -4
  41. package/esm2022/lib/input/simple-select/simple-select.component.mjs +178 -0
  42. package/esm2022/lib/input/switch-checkbox/switch-checkbox.component.mjs +33 -0
  43. package/esm2022/lib/input/text-field/text-field.component.mjs +115 -0
  44. package/{esm2020 → esm2022}/lib/input/textarea-field/textarea-field.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/lib/input/validation-message/validation-message.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/layout/card/card-actions.component.mjs +4 -4
  47. package/esm2022/lib/layout/card/card-content.component.mjs +64 -0
  48. package/esm2022/lib/layout/card/card-header.component.mjs +201 -0
  49. package/{esm2020 → esm2022}/lib/layout/card/card-link.component.mjs +5 -5
  50. package/{esm2020 → esm2022}/lib/layout/card/card-media.component.mjs +4 -4
  51. package/esm2022/lib/layout/card/card.component.mjs +291 -0
  52. package/{esm2020 → esm2022}/lib/layout/setting-row/setting-row.component.mjs +4 -4
  53. package/esm2022/lib/load/loading/loading.component.mjs +43 -0
  54. package/{esm2020 → esm2022}/lib/load/loading-cover/loading-cover.component.mjs +4 -4
  55. package/esm2022/lib/navigation/editable-heading/editable-heading.component.mjs +243 -0
  56. package/{esm2020 → esm2022}/lib/navigation/link/link.component.mjs +6 -6
  57. package/{esm2020 → esm2022}/lib/navigation/page-header/page-header.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tab/simple-tab.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/navigation/tabs/tab/tab.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/lib/navigation/tabs/tabs/tabs.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/navigation/views/edit-view/edit-view.component.mjs +9 -9
  64. package/esm2022/lib/navigation/views/permission-picker/permission-picker.component.mjs +151 -0
  65. package/esm2022/lib/navigation/views/state.mjs +456 -0
  66. package/{esm2020 → esm2022}/lib/navigation/views/view-menu/view-menu.component.mjs +5 -5
  67. package/esm2022/lib/navigation/views/views/views.component.mjs +90 -0
  68. package/{esm2020 → esm2022}/lib/notification/badge/badge.component.mjs +4 -4
  69. package/esm2022/lib/notification/banner/banner-action.component.mjs +48 -0
  70. package/esm2022/lib/notification/banner/banner.component.mjs +61 -0
  71. package/esm2022/lib/notification/map-indicator/map-indicator.component.mjs +50 -0
  72. package/esm2022/lib/notification/map-indicator/map-indicators.mjs +15 -0
  73. package/{esm2020 → esm2022}/lib/notification/notification-badge/notification-badge.component.mjs +4 -4
  74. package/esm2022/lib/overlay/callout/callout.component.mjs +130 -0
  75. package/esm2022/lib/overlay/callout/callout.helpers.mjs +113 -0
  76. package/{esm2020 → esm2022}/lib/overlay/callout/help/help.component.mjs +4 -4
  77. package/esm2022/lib/overlay/callout/lock-scroll.directive.mjs +69 -0
  78. package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +5 -5
  79. package/{esm2020 → esm2022}/lib/overlay/callout/menu/menu.component.mjs +4 -4
  80. package/esm2022/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +30 -0
  81. package/{esm2020 → esm2022}/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -4
  82. package/esm2022/lib/overlay/callout/tooltip/tooltip.directive.mjs +138 -0
  83. package/esm2022/lib/overlay/modal/dialog/dialog.component.mjs +47 -0
  84. package/{esm2020 → esm2022}/lib/overlay/modal/dialog-stack.service.mjs +4 -4
  85. package/esm2022/lib/overlay/modal/form-dialog/form-dialog.component.mjs +146 -0
  86. package/esm2022/lib/overlay/modal/modal.component.mjs +31 -0
  87. package/{esm2020 → esm2022}/lib/overlay/modal/side-sheet/side-sheet.component.mjs +4 -4
  88. package/esm2022/lib/overlay/overlay-outlet.component.mjs +98 -0
  89. package/{esm2020 → esm2022}/lib/overlay/overlay.directive.mjs +5 -5
  90. package/{esm2020 → esm2022}/lib/overlay/overlay.service.mjs +5 -5
  91. package/{esm2020 → esm2022}/lib/overlay/toast/toast-action.component.mjs +4 -4
  92. package/esm2022/lib/overlay/toast/toast.component.mjs +41 -0
  93. package/{esm2020 → esm2022}/lib/riv.module.mjs +227 -227
  94. package/esm2022/lib/size/size.directive.mjs +33 -0
  95. package/esm2022/lib/table/simple-table/coordinate-helper.mjs +61 -0
  96. package/esm2022/lib/table/simple-table/simple-table-cell.component.mjs +36 -0
  97. package/esm2022/lib/table/simple-table/simple-table-header-cell.component.mjs +37 -0
  98. package/{esm2020 → esm2022}/lib/table/simple-table/simple-table-row.component.mjs +4 -4
  99. package/esm2022/lib/table/simple-table/simple-table.component.mjs +104 -0
  100. package/esm2022/lib/table/table/clipboard.mjs +182 -0
  101. package/esm2022/lib/table/table/state-helpers/collapse-helpers.mjs +116 -0
  102. package/esm2022/lib/table/table/state-helpers/column-helpers.mjs +383 -0
  103. package/{esm2020 → esm2022}/lib/table/table/state-helpers/display-helpers.mjs +1 -1
  104. package/esm2022/lib/table/table/state-helpers/nesting-helpers.mjs +123 -0
  105. package/esm2022/lib/table/table/state-helpers/order-helpers.mjs +164 -0
  106. package/esm2022/lib/table/table/state-helpers/pagination-helpers.mjs +139 -0
  107. package/esm2022/lib/table/table/state-helpers/result-helpers.mjs +70 -0
  108. package/esm2022/lib/table/table/state-helpers/search-helpers.mjs +72 -0
  109. package/esm2022/lib/table/table/state-helpers/selection-helpers.mjs +180 -0
  110. package/esm2022/lib/table/table/state.mjs +1035 -0
  111. package/esm2022/lib/table/table/table/table.component.mjs +367 -0
  112. package/{esm2020 → esm2022}/lib/table/table/table-collapse-all/table-collapse-all.component.mjs +5 -5
  113. package/esm2022/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +227 -0
  114. package/esm2022/lib/table/table/table-column-settings/table-column-settings.component.mjs +134 -0
  115. package/esm2022/lib/table/table/table-csv-export/table-csv-export.component.mjs +35 -0
  116. package/{esm2020 → esm2022}/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +6 -6
  117. package/esm2022/lib/table/table/table-search/table-search.component.mjs +71 -0
  118. package/{esm2020 → esm2022}/lib/table/table/table-search-columns/table-search-columns.component.mjs +4 -4
  119. package/esm2022/lib/visibility/visibility.directive.mjs +34 -0
  120. package/esm2022/lib/visualization/chart/chart-scaling.mjs +380 -0
  121. package/esm2022/lib/visualization/chart/chart.component.mjs +626 -0
  122. package/esm2022/lib/visualization/chart/chart.mjs +3768 -0
  123. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-cell.component.mjs +5 -5
  124. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-header-cell.component.mjs +4 -4
  125. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table-row.component.mjs +4 -4
  126. package/{esm2020 → esm2022}/lib/visualization/data-table/data-table.component.mjs +4 -4
  127. package/{esm2020 → esm2022}/lib/visualization/donut/donut.component.mjs +4 -4
  128. package/{esm2020 → esm2022}/lib/visualization/funnel-chart/funnel-chart.component.mjs +5 -5
  129. package/esm2022/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +33 -0
  130. package/{esm2020 → esm2022}/lib/visualization/highlight/highlight.component.mjs +4 -4
  131. package/esm2022/lib/visualization/highlight/highlight.helpers.mjs +20 -0
  132. package/esm2022/lib/visualization/intervals.mjs +63 -0
  133. package/{esm2020 → esm2022}/lib/visualization/issue/issue.component.mjs +4 -4
  134. package/{esm2020 → esm2022}/lib/visualization/legend-item/legend-item.component.mjs +4 -4
  135. package/{esm2020 → esm2022}/lib/visualization/metric/metric.component.mjs +4 -4
  136. package/{esm2020 → esm2022}/lib/visualization/mini-pie/mini-pie.component.mjs +4 -4
  137. package/{esm2020 → esm2022}/lib/visualization/progress/progress.component.mjs +5 -5
  138. package/esm2022/lib/visualization/stacked-column/stacked-column.component.mjs +377 -0
  139. package/esm2022/lib/visualization/stacked-column/stacked-column.helpers.mjs +18 -0
  140. package/esm2022/lib/visualization/stacked-row/stacked-row.component.mjs +270 -0
  141. package/esm2022/lib/visualization/stacked-row/stacked-row.helpers.mjs +74 -0
  142. package/esm2022/lib/visualization/time-series/time-series.component.mjs +374 -0
  143. package/esm2022/lib/visualization/time-series/time-series.helpers.mjs +15 -0
  144. package/esm2022/lib/visualization/trend/trend.component.mjs +51 -0
  145. package/{esm2020 → esm2022}/lib/visualization/zero-state/zero-state.component.mjs +4 -4
  146. package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs +670 -670
  147. package/{fesm2020 → fesm2022}/rivet-health-design-system.mjs.map +1 -1
  148. package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +1 -1
  149. package/lib/format/truncate/truncate.component.d.ts +1 -1
  150. package/lib/icon/icon.component.d.ts +1 -1
  151. package/lib/input/auto-focus/auto-focus.directive.d.ts +1 -1
  152. package/lib/input/button/button.component.d.ts +1 -1
  153. package/lib/input/calendar/calendar.component.d.ts +1 -1
  154. package/lib/input/checkbox/checkbox.component.d.ts +1 -1
  155. package/lib/input/currency-field/currency-field.component.d.ts +1 -1
  156. package/lib/input/date/date.component.d.ts +1 -1
  157. package/lib/input/date-range/date-range.component.d.ts +1 -1
  158. package/lib/input/filter-chip/filter-chip.component.d.ts +1 -1
  159. package/lib/input/filter-dropdown/filter-dropdown.component.d.ts +1 -1
  160. package/lib/input/input-label/input-label.component.d.ts +1 -1
  161. package/lib/input/mentions-input/mentions-input.component.d.ts +1 -1
  162. package/lib/input/number-field/number-field.component.d.ts +1 -1
  163. package/lib/input/percentage-field/percentage-field.component.d.ts +1 -1
  164. package/lib/input/phone-field/phone-field.component.d.ts +1 -1
  165. package/lib/input/radio/radio.component.d.ts +1 -1
  166. package/lib/input/search/search.component.d.ts +1 -1
  167. package/lib/input/search-select/search-select.component.d.ts +1 -1
  168. package/lib/input/select/select/select.component.d.ts +1 -1
  169. package/lib/input/select/select-node/select-node.component.d.ts +1 -1
  170. package/lib/input/simple-select/simple-select.component.d.ts +1 -1
  171. package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +1 -1
  172. package/lib/input/text-field/text-field.component.d.ts +1 -1
  173. package/lib/input/textarea-field/textarea-field.component.d.ts +1 -1
  174. package/lib/input/validation-message/validation-message.component.d.ts +1 -1
  175. package/lib/layout/card/card-actions.component.d.ts +1 -1
  176. package/lib/layout/card/card-content.component.d.ts +1 -1
  177. package/lib/layout/card/card-header.component.d.ts +1 -1
  178. package/lib/layout/card/card-link.component.d.ts +1 -1
  179. package/lib/layout/card/card-media.component.d.ts +1 -1
  180. package/lib/layout/card/card.component.d.ts +1 -1
  181. package/lib/layout/setting-row/setting-row.component.d.ts +1 -1
  182. package/lib/load/loading/loading.component.d.ts +1 -1
  183. package/lib/load/loading-cover/loading-cover.component.d.ts +1 -1
  184. package/lib/navigation/editable-heading/editable-heading.component.d.ts +1 -1
  185. package/lib/navigation/link/link.component.d.ts +1 -1
  186. package/lib/navigation/page-header/page-header.component.d.ts +1 -1
  187. package/lib/navigation/simple-tabs/simple-tab/simple-tab.component.d.ts +1 -1
  188. package/lib/navigation/tabs/tab/tab.component.d.ts +1 -1
  189. package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +1 -1
  190. package/lib/navigation/views/edit-view/edit-view.component.d.ts +1 -1
  191. package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +3 -3
  192. package/lib/navigation/views/view-menu/view-menu.component.d.ts +1 -1
  193. package/lib/navigation/views/views/views.component.d.ts +1 -1
  194. package/lib/notification/badge/badge.component.d.ts +1 -1
  195. package/lib/notification/banner/banner-action.component.d.ts +1 -1
  196. package/lib/notification/banner/banner.component.d.ts +1 -1
  197. package/lib/notification/map-indicator/map-indicator.component.d.ts +1 -1
  198. package/lib/notification/notification-badge/notification-badge.component.d.ts +1 -1
  199. package/lib/overlay/callout/callout.component.d.ts +1 -1
  200. package/lib/overlay/callout/help/help.component.d.ts +1 -1
  201. package/lib/overlay/callout/lock-scroll.directive.d.ts +1 -1
  202. package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +1 -1
  203. package/lib/overlay/callout/menu/menu.component.d.ts +1 -1
  204. package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +1 -1
  205. package/lib/overlay/callout/tooltip/tooltip.component.d.ts +1 -1
  206. package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +1 -1
  207. package/lib/overlay/modal/dialog/dialog.component.d.ts +1 -1
  208. package/lib/overlay/modal/form-dialog/form-dialog.component.d.ts +1 -1
  209. package/lib/overlay/modal/modal.component.d.ts +1 -1
  210. package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +1 -1
  211. package/lib/overlay/toast/toast.component.d.ts +1 -1
  212. package/lib/table/simple-table/simple-table-header-cell.component.d.ts +1 -1
  213. package/lib/table/simple-table/simple-table-row.component.d.ts +1 -1
  214. package/lib/table/table/table/table.component.d.ts +1 -1
  215. package/lib/table/table/table-collapse-all/table-collapse-all.component.d.ts +1 -1
  216. package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +1 -1
  217. package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +1 -1
  218. package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +1 -1
  219. package/lib/table/table/table-search/table-search.component.d.ts +1 -1
  220. package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +1 -1
  221. package/lib/visualization/chart/chart.component.d.ts +1 -1
  222. package/lib/visualization/data-table/data-table-row.component.d.ts +1 -1
  223. package/lib/visualization/donut/donut.component.d.ts +1 -1
  224. package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +1 -1
  225. package/lib/visualization/highlight/highlight.component.d.ts +1 -1
  226. package/lib/visualization/issue/issue.component.d.ts +1 -1
  227. package/lib/visualization/legend-item/legend-item.component.d.ts +1 -1
  228. package/lib/visualization/metric/metric.component.d.ts +1 -1
  229. package/lib/visualization/mini-pie/mini-pie.component.d.ts +1 -1
  230. package/lib/visualization/progress/progress.component.d.ts +1 -1
  231. package/lib/visualization/stacked-column/stacked-column.component.d.ts +3 -3
  232. package/lib/visualization/stacked-row/stacked-row.component.d.ts +1 -1
  233. package/lib/visualization/time-series/time-series.component.d.ts +3 -3
  234. package/lib/visualization/trend/trend.component.d.ts +1 -1
  235. package/lib/visualization/zero-state/zero-state.component.d.ts +1 -1
  236. package/package.json +5 -11
  237. package/esm2020/lib/download/download.service.mjs +0 -47
  238. package/esm2020/lib/format/pipes/sentence-case.pipe.mjs +0 -61
  239. package/esm2020/lib/format/pipes/small-currency.pipe.mjs +0 -24
  240. package/esm2020/lib/format/pipes/small-number.pipe.mjs +0 -29
  241. package/esm2020/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +0 -62
  242. package/esm2020/lib/format/truncate/truncate.component.mjs +0 -51
  243. package/esm2020/lib/icon/dom-cache.mjs +0 -32
  244. package/esm2020/lib/icon/icon.component.mjs +0 -86
  245. package/esm2020/lib/input/auto-focus/auto-focus.directive.mjs +0 -48
  246. package/esm2020/lib/input/button/button.component.mjs +0 -139
  247. package/esm2020/lib/input/button-group/button-group.component.mjs +0 -39
  248. package/esm2020/lib/input/date/date.component.mjs +0 -279
  249. package/esm2020/lib/input/date-range/date-range.component.mjs +0 -477
  250. package/esm2020/lib/input/filter-chip/filter-chip.component.mjs +0 -47
  251. package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +0 -745
  252. package/esm2020/lib/input/number-field/number-field.component.mjs +0 -125
  253. package/esm2020/lib/input/phone-field/phone-field.component.mjs +0 -74
  254. package/esm2020/lib/input/search-select/search-select.component.mjs +0 -189
  255. package/esm2020/lib/input/select/select/select.component.mjs +0 -178
  256. package/esm2020/lib/input/select/state.mjs +0 -882
  257. package/esm2020/lib/input/simple-select/simple-select.component.mjs +0 -178
  258. package/esm2020/lib/input/switch-checkbox/switch-checkbox.component.mjs +0 -33
  259. package/esm2020/lib/input/text-field/text-field.component.mjs +0 -115
  260. package/esm2020/lib/layout/card/card-content.component.mjs +0 -64
  261. package/esm2020/lib/layout/card/card-header.component.mjs +0 -201
  262. package/esm2020/lib/layout/card/card.component.mjs +0 -291
  263. package/esm2020/lib/load/loading/loading.component.mjs +0 -43
  264. package/esm2020/lib/navigation/editable-heading/editable-heading.component.mjs +0 -243
  265. package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +0 -151
  266. package/esm2020/lib/navigation/views/state.mjs +0 -456
  267. package/esm2020/lib/navigation/views/views/views.component.mjs +0 -90
  268. package/esm2020/lib/notification/banner/banner-action.component.mjs +0 -48
  269. package/esm2020/lib/notification/banner/banner.component.mjs +0 -61
  270. package/esm2020/lib/notification/map-indicator/map-indicator.component.mjs +0 -50
  271. package/esm2020/lib/notification/map-indicator/map-indicators.mjs +0 -15
  272. package/esm2020/lib/overlay/callout/callout.component.mjs +0 -130
  273. package/esm2020/lib/overlay/callout/callout.helpers.mjs +0 -113
  274. package/esm2020/lib/overlay/callout/lock-scroll.directive.mjs +0 -69
  275. package/esm2020/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +0 -30
  276. package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +0 -138
  277. package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +0 -47
  278. package/esm2020/lib/overlay/modal/form-dialog/form-dialog.component.mjs +0 -146
  279. package/esm2020/lib/overlay/modal/modal.component.mjs +0 -31
  280. package/esm2020/lib/overlay/overlay-outlet.component.mjs +0 -98
  281. package/esm2020/lib/overlay/toast/toast.component.mjs +0 -41
  282. package/esm2020/lib/size/size.directive.mjs +0 -33
  283. package/esm2020/lib/table/simple-table/coordinate-helper.mjs +0 -61
  284. package/esm2020/lib/table/simple-table/simple-table-cell.component.mjs +0 -36
  285. package/esm2020/lib/table/simple-table/simple-table-header-cell.component.mjs +0 -37
  286. package/esm2020/lib/table/simple-table/simple-table.component.mjs +0 -104
  287. package/esm2020/lib/table/table/clipboard.mjs +0 -182
  288. package/esm2020/lib/table/table/state-helpers/collapse-helpers.mjs +0 -116
  289. package/esm2020/lib/table/table/state-helpers/column-helpers.mjs +0 -383
  290. package/esm2020/lib/table/table/state-helpers/nesting-helpers.mjs +0 -123
  291. package/esm2020/lib/table/table/state-helpers/order-helpers.mjs +0 -164
  292. package/esm2020/lib/table/table/state-helpers/pagination-helpers.mjs +0 -139
  293. package/esm2020/lib/table/table/state-helpers/result-helpers.mjs +0 -70
  294. package/esm2020/lib/table/table/state-helpers/search-helpers.mjs +0 -72
  295. package/esm2020/lib/table/table/state-helpers/selection-helpers.mjs +0 -180
  296. package/esm2020/lib/table/table/state.mjs +0 -1035
  297. package/esm2020/lib/table/table/table/table.component.mjs +0 -367
  298. package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +0 -227
  299. package/esm2020/lib/table/table/table-column-settings/table-column-settings.component.mjs +0 -134
  300. package/esm2020/lib/table/table/table-csv-export/table-csv-export.component.mjs +0 -35
  301. package/esm2020/lib/table/table/table-search/table-search.component.mjs +0 -71
  302. package/esm2020/lib/visibility/visibility.directive.mjs +0 -34
  303. package/esm2020/lib/visualization/chart/chart-scaling.mjs +0 -380
  304. package/esm2020/lib/visualization/chart/chart.component.mjs +0 -626
  305. package/esm2020/lib/visualization/chart/chart.mjs +0 -3768
  306. package/esm2020/lib/visualization/funnel-chart/funnel-chart.helpers.mjs +0 -33
  307. package/esm2020/lib/visualization/highlight/highlight.helpers.mjs +0 -20
  308. package/esm2020/lib/visualization/intervals.mjs +0 -63
  309. package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +0 -377
  310. package/esm2020/lib/visualization/stacked-column/stacked-column.helpers.mjs +0 -18
  311. package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +0 -270
  312. package/esm2020/lib/visualization/stacked-row/stacked-row.helpers.mjs +0 -74
  313. package/esm2020/lib/visualization/time-series/time-series.component.mjs +0 -374
  314. package/esm2020/lib/visualization/time-series/time-series.helpers.mjs +0 -15
  315. package/esm2020/lib/visualization/trend/trend.component.mjs +0 -51
  316. package/fesm2015/rivet-health-design-system.mjs +0 -18370
  317. package/fesm2015/rivet-health-design-system.mjs.map +0 -1
  318. /package/{esm2020 → esm2022}/lib/overlay/callout/select-callout-defaults.mjs +0 -0
  319. /package/{esm2020 → esm2022}/lib/util/local-storage.mjs +0 -0
  320. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  321. /package/{esm2020 → esm2022}/rivet-health-design-system.mjs +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"rivet-health-design-system.mjs","sources":["../../../projects/riv/src/lib/accessibility/sr-only/sr-only.component.ts","../../../projects/riv/src/lib/accessibility/sr-only/sr-only.component.html","../../../projects/riv/src/lib/download/download.service.ts","../../../projects/riv/src/lib/format/pipes/common.ts","../../../projects/riv/src/lib/format/pipes/date.pipe.ts","../../../projects/riv/src/lib/format/pipes/days.pipe.ts","../../../projects/riv/src/lib/format/pipes/dollars.pipe.ts","../../../projects/riv/src/lib/format/pipes/number.pipe.ts","../../../projects/riv/src/lib/format/pipes/percentage.pipe.ts","../../../projects/riv/src/lib/format/pipes/sentence-case.pipe.ts","../../../projects/riv/src/lib/format/pipes/small-currency.pipe.ts","../../../projects/riv/src/lib/format/pipes/small-number.pipe.ts","../../../projects/riv/src/lib/overlay/callout/callout.helpers.ts","../../../projects/riv/src/lib/overlay/callout/lock-scroll.directive.ts","../../../projects/riv/src/lib/size/size.directive.ts","../../../projects/riv/src/lib/overlay/callout/callout.component.ts","../../../projects/riv/src/lib/overlay/callout/callout.component.html","../../../projects/riv/src/lib/overlay/overlay.service.ts","../../../projects/riv/src/lib/overlay/overlay.directive.ts","../../../projects/riv/src/lib/overlay/callout/tooltip/tooltip.component.ts","../../../projects/riv/src/lib/overlay/callout/tooltip/tooltip.component.html","../../../projects/riv/src/lib/overlay/callout/tooltip/tooltip.directive.ts","../../../projects/riv/src/lib/format/svg-text-truncate/svg-text-truncate.directive.ts","../../../projects/riv/src/lib/format/truncate/truncate.component.ts","../../../projects/riv/src/lib/format/truncate/truncate.component.html","../../../projects/riv/src/lib/icon/dom-cache.ts","../../../projects/riv/src/lib/icon/icons.ts","../../../projects/riv/src/lib/icon/icon.component.ts","../../../projects/riv/src/lib/icon/icon.component.html","../../../projects/riv/src/lib/overlay/callout/help/help.component.ts","../../../projects/riv/src/lib/overlay/callout/help/help.component.html","../../../projects/riv/src/lib/navigation/link/link.component.ts","../../../projects/riv/src/lib/navigation/link/link.component.html","../../../projects/riv/src/lib/input/validation-message/validation-message.component.ts","../../../projects/riv/src/lib/input/validation-message/validation-message.component.html","../../../projects/riv/src/lib/input/input-label/input-label.component.ts","../../../projects/riv/src/lib/input/input-label/input-label.component.html","../../../projects/riv/src/lib/input/auto-focus/auto-focus.directive.ts","../../../projects/riv/src/lib/input/text-field/text-field.component.ts","../../../projects/riv/src/lib/input/text-field/text-field.component.html","../../../projects/riv/src/lib/input/alphabetic-field/alphabetic-field.component.ts","../../../projects/riv/src/lib/input/button-group/button-group.component.ts","../../../projects/riv/src/lib/input/button-group/button-group.component.html","../../../projects/riv/src/lib/load/loading/loading.component.ts","../../../projects/riv/src/lib/load/loading/loading.component.html","../../../projects/riv/src/lib/input/button/button.component.ts","../../../projects/riv/src/lib/input/button/button.component.html","../../../projects/riv/src/lib/input/checkbox/checkbox.component.ts","../../../projects/riv/src/lib/input/checkbox/checkbox.component.html","../../../projects/riv/src/lib/input/card-checkbox/card-checkbox.component.ts","../../../projects/riv/src/lib/input/card-checkbox/card-checkbox.component.html","../../../projects/riv/src/lib/input/number-field/number-field.component.ts","../../../projects/riv/src/lib/input/number-field/number-field.component.html","../../../projects/riv/src/lib/input/currency-field/currency-field.component.ts","../../../projects/riv/src/lib/input/currency-field/currency-field.component.html","../../../projects/riv/src/lib/util/local-storage.ts","../../../projects/riv/src/lib/overlay/callout/select-callout-defaults.ts","../../../projects/riv/src/lib/input/select/state.ts","../../../projects/riv/src/lib/load/loading-cover/loading-cover.component.ts","../../../projects/riv/src/lib/load/loading-cover/loading-cover.component.html","../../../projects/riv/src/lib/input/search/search.component.ts","../../../projects/riv/src/lib/input/search/search.component.html","../../../projects/riv/src/lib/visualization/highlight/highlight.helpers.ts","../../../projects/riv/src/lib/visualization/highlight/highlight.component.ts","../../../projects/riv/src/lib/visualization/highlight/highlight.component.html","../../../projects/riv/src/lib/input/select/select-node/select-node.component.ts","../../../projects/riv/src/lib/input/select/select-node/select-node.component.html","../../../projects/riv/src/lib/visualization/zero-state/zero-state.component.ts","../../../projects/riv/src/lib/visualization/zero-state/zero-state.component.html","../../../projects/riv/src/lib/input/select/select/select.component.ts","../../../projects/riv/src/lib/input/select/select/select.component.html","../../../projects/riv/src/lib/input/simple-select/simple-select.component.ts","../../../projects/riv/src/lib/input/simple-select/simple-select.component.html","../../../projects/riv/src/lib/input/simple-select/option-group.pipe.ts","../../../projects/riv/src/lib/input/calendar/calendar.component.ts","../../../projects/riv/src/lib/input/calendar/calendar.component.html","../../../projects/riv/src/lib/input/date-range/date-range.component.ts","../../../projects/riv/src/lib/input/date-range/date-range.component.html","../../../projects/riv/src/lib/input/date/date.component.ts","../../../projects/riv/src/lib/input/date/date.component.html","../../../projects/riv/src/lib/input/filter-chip/filter-chip.component.ts","../../../projects/riv/src/lib/input/filter-chip/filter-chip.component.html","../../../projects/riv/src/lib/notification/badge/badge.component.ts","../../../projects/riv/src/lib/notification/badge/badge.component.html","../../../projects/riv/src/lib/input/filter-dropdown/filter-dropdown.component.ts","../../../projects/riv/src/lib/input/filter-dropdown/filter-dropdown.component.html","../../../projects/riv/src/lib/input/mentions-input/mentions-input.component.ts","../../../projects/riv/src/lib/input/mentions-input/mentions-input.component.html","../../../projects/riv/src/lib/input/percentage-field/percentage-field.component.ts","../../../projects/riv/src/lib/input/percentage-field/percentage-field.component.html","../../../projects/riv/src/lib/input/phone-field/phone-field.component.ts","../../../projects/riv/src/lib/input/radio/radio.component.ts","../../../projects/riv/src/lib/input/radio/radio.component.html","../../../projects/riv/src/lib/input/search-select/search-select.component.ts","../../../projects/riv/src/lib/input/search-select/search-select.component.html","../../../projects/riv/src/lib/input/switch-checkbox/switch-checkbox.component.ts","../../../projects/riv/src/lib/input/switch-checkbox/switch-checkbox.component.html","../../../projects/riv/src/lib/input/textarea-field/textarea-field.component.ts","../../../projects/riv/src/lib/input/textarea-field/textarea-field.component.html","../../../projects/riv/src/lib/layout/card/card-actions.component.ts","../../../projects/riv/src/lib/layout/card/card-actions.component.html","../../../projects/riv/src/lib/layout/card/card.component.ts","../../../projects/riv/src/lib/layout/card/card.component.html","../../../projects/riv/src/lib/layout/card/card-content.component.ts","../../../projects/riv/src/lib/layout/card/card-content.component.html","../../../projects/riv/src/lib/layout/card/card-header.component.ts","../../../projects/riv/src/lib/layout/card/card-header.component.html","../../../projects/riv/src/lib/layout/card/card-link.component.ts","../../../projects/riv/src/lib/layout/card/card-link.component.html","../../../projects/riv/src/lib/layout/card/card-media.component.ts","../../../projects/riv/src/lib/layout/card/card-media.component.html","../../../projects/riv/src/lib/layout/setting-row/setting-row.component.ts","../../../projects/riv/src/lib/layout/setting-row/setting-row.component.html","../../../projects/riv/src/lib/navigation/editable-heading/editable-heading.component.ts","../../../projects/riv/src/lib/navigation/editable-heading/editable-heading.component.html","../../../projects/riv/src/lib/navigation/page-header/page-header.component.ts","../../../projects/riv/src/lib/navigation/page-header/page-header.component.html","../../../projects/riv/src/lib/navigation/simple-tabs/simple-tab/simple-tab.component.ts","../../../projects/riv/src/lib/navigation/simple-tabs/simple-tab/simple-tab.component.html","../../../projects/riv/src/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.ts","../../../projects/riv/src/lib/navigation/simple-tabs/simple-tabs/simple-tabs.component.html","../../../projects/riv/src/lib/navigation/tabs/tab/tab.component.ts","../../../projects/riv/src/lib/navigation/tabs/tab/tab.component.html","../../../projects/riv/src/lib/navigation/tabs/tabs/tabs.component.ts","../../../projects/riv/src/lib/navigation/tabs/tabs/tabs.component.html","../../../projects/riv/src/lib/navigation/views/state.ts","../../../projects/riv/src/lib/overlay/overlay-outlet.component.ts","../../../projects/riv/src/lib/overlay/overlay-outlet.component.html","../../../projects/riv/src/lib/overlay/modal/modal.component.ts","../../../projects/riv/src/lib/overlay/modal/modal.component.html","../../../projects/riv/src/lib/overlay/modal/side-sheet/side-sheet.component.ts","../../../projects/riv/src/lib/overlay/modal/side-sheet/side-sheet.component.html","../../../projects/riv/src/lib/overlay/modal/dialog-stack.service.ts","../../../projects/riv/src/lib/overlay/modal/dialog/dialog.component.ts","../../../projects/riv/src/lib/overlay/modal/dialog/dialog.component.html","../../../projects/riv/src/lib/navigation/views/permission-picker/permission-picker.component.ts","../../../projects/riv/src/lib/navigation/views/permission-picker/permission-picker.component.html","../../../projects/riv/src/lib/navigation/views/edit-view/edit-view.component.ts","../../../projects/riv/src/lib/navigation/views/edit-view/edit-view.component.html","../../../projects/riv/src/lib/overlay/callout/menu/menu.component.ts","../../../projects/riv/src/lib/overlay/callout/menu/menu.component.html","../../../projects/riv/src/lib/overlay/callout/menu/menu-item/menu-item.component.ts","../../../projects/riv/src/lib/overlay/callout/menu/menu-item/menu-item.component.html","../../../projects/riv/src/lib/navigation/views/view-menu/view-menu.component.ts","../../../projects/riv/src/lib/navigation/views/view-menu/view-menu.component.html","../../../projects/riv/src/lib/navigation/views/all-views-modal/all-views-modal.component.ts","../../../projects/riv/src/lib/navigation/views/all-views-modal/all-views-modal.component.html","../../../projects/riv/src/lib/overlay/toast/toast.component.ts","../../../projects/riv/src/lib/overlay/toast/toast.component.html","../../../projects/riv/src/lib/navigation/views/views/views.component.ts","../../../projects/riv/src/lib/navigation/views/views/views.component.html","../../../projects/riv/src/lib/notification/banner/banner-action.component.ts","../../../projects/riv/src/lib/notification/banner/banner-action.component.html","../../../projects/riv/src/lib/notification/banner/banner.component.ts","../../../projects/riv/src/lib/notification/banner/banner.component.html","../../../projects/riv/src/lib/notification/map-indicator/map-indicators.ts","../../../projects/riv/src/lib/notification/map-indicator/map-indicator.component.ts","../../../projects/riv/src/lib/notification/map-indicator/map-indicator.component.html","../../../projects/riv/src/lib/notification/notification-badge/notification-badge.component.ts","../../../projects/riv/src/lib/overlay/callout/tooltip/locked-tooltip.directive.ts","../../../projects/riv/src/lib/overlay/modal/form-dialog/form-dialog.component.ts","../../../projects/riv/src/lib/overlay/modal/form-dialog/form-dialog.component.html","../../../projects/riv/src/lib/overlay/toast/toast-action.component.ts","../../../projects/riv/src/lib/overlay/toast/toast-action.component.html","../../../projects/riv/src/lib/table/simple-table/simple-table-cell.component.ts","../../../projects/riv/src/lib/table/simple-table/simple-table-cell.component.html","../../../projects/riv/src/lib/table/simple-table/simple-table-header-cell.component.ts","../../../projects/riv/src/lib/table/simple-table/simple-table-header-cell.component.html","../../../projects/riv/src/lib/table/simple-table/simple-table-row.component.ts","../../../projects/riv/src/lib/table/simple-table/simple-table-row.component.html","../../../projects/riv/src/lib/table/table/state-helpers/collapse-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/column-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/result-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/search-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/display-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/nesting-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/order-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/pagination-helpers.ts","../../../projects/riv/src/lib/table/table/state-helpers/selection-helpers.ts","../../../projects/riv/src/lib/table/table/state.ts","../../../projects/riv/src/lib/table/simple-table/coordinate-helper.ts","../../../projects/riv/src/lib/table/simple-table/simple-table.component.ts","../../../projects/riv/src/lib/table/simple-table/simple-table.component.html","../../../projects/riv/src/lib/table/table/table-collapse-all/table-collapse-all.component.ts","../../../projects/riv/src/lib/table/table/table-collapse-all/table-collapse-all.component.html","../../../projects/riv/src/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.ts","../../../projects/riv/src/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.html","../../../projects/riv/src/lib/table/table/table-column-settings/table-column-settings.component.ts","../../../projects/riv/src/lib/table/table/table-column-settings/table-column-settings.component.html","../../../projects/riv/src/lib/table/table/table-csv-export/table-csv-export.component.ts","../../../projects/riv/src/lib/table/table/table-csv-export/table-csv-export.component.html","../../../projects/riv/src/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.ts","../../../projects/riv/src/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.html","../../../projects/riv/src/lib/table/table/table-search-columns/table-search-columns.component.ts","../../../projects/riv/src/lib/table/table/table-search-columns/table-search-columns.component.html","../../../projects/riv/src/lib/table/table/table-search/table-search.component.ts","../../../projects/riv/src/lib/table/table/table-search/table-search.component.html","../../../projects/riv/src/lib/table/table/clipboard.ts","../../../projects/riv/src/lib/table/table/table/table.component.ts","../../../projects/riv/src/lib/table/table/table/table.component.html","../../../projects/riv/src/lib/visibility/visibility.directive.ts","../../../projects/riv/src/lib/visualization/chart/chart-scaling.ts","../../../projects/riv/src/lib/visualization/chart/chart.ts","../../../projects/riv/src/lib/visualization/issue/issue.component.ts","../../../projects/riv/src/lib/visualization/issue/issue.component.html","../../../projects/riv/src/lib/visualization/legend-item/legend-item.component.ts","../../../projects/riv/src/lib/visualization/legend-item/legend-item.component.html","../../../projects/riv/src/lib/visualization/chart/chart.component.ts","../../../projects/riv/src/lib/visualization/chart/chart.component.html","../../../projects/riv/src/lib/visualization/data-table/data-table-row.component.ts","../../../projects/riv/src/lib/visualization/data-table/data-table-cell.component.ts","../../../projects/riv/src/lib/visualization/data-table/data-table-header-cell.component.ts","../../../projects/riv/src/lib/visualization/data-table/data-table.component.ts","../../../projects/riv/src/lib/visualization/donut/donut.component.ts","../../../projects/riv/src/lib/visualization/donut/donut.component.html","../../../projects/riv/src/lib/visualization/funnel-chart/funnel-chart.helpers.ts","../../../projects/riv/src/lib/visualization/metric/metric.component.ts","../../../projects/riv/src/lib/visualization/metric/metric.component.html","../../../projects/riv/src/lib/visualization/trend/trend.component.ts","../../../projects/riv/src/lib/visualization/trend/trend.component.html","../../../projects/riv/src/lib/visualization/funnel-chart/funnel-chart.component.ts","../../../projects/riv/src/lib/visualization/funnel-chart/funnel-chart.component.html","../../../projects/riv/src/lib/visualization/mini-pie/mini-pie.component.ts","../../../projects/riv/src/lib/visualization/mini-pie/mini-pie.component.html","../../../projects/riv/src/lib/visualization/progress/progress.component.ts","../../../projects/riv/src/lib/visualization/progress/progress.component.html","../../../projects/riv/src/lib/visualization/intervals.ts","../../../projects/riv/src/lib/visualization/stacked-column/stacked-column.helpers.ts","../../../projects/riv/src/lib/visualization/stacked-column/stacked-column.component.ts","../../../projects/riv/src/lib/visualization/stacked-column/stacked-column.component.html","../../../projects/riv/src/lib/visualization/stacked-row/stacked-row.helpers.ts","../../../projects/riv/src/lib/visualization/stacked-row/stacked-row.component.ts","../../../projects/riv/src/lib/visualization/stacked-row/stacked-row.component.html","../../../projects/riv/src/lib/visualization/time-series/time-series.helpers.ts","../../../projects/riv/src/lib/visualization/time-series/time-series.component.ts","../../../projects/riv/src/lib/visualization/time-series/time-series.component.html","../../../projects/riv/src/lib/riv.module.ts","../../../projects/riv/src/rivet-health-design-system.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n/**\n * A utility component that visually hides content while keeping it accessible\n * to screen readers. Use this component to provide context to assistive\n * technology users that is not needed visually. The content is hidden using\n * CSS positioning techniques that keep it in the DOM and accessible to screen\n * readers, but that remove it from the visual flow.\n */\n@Component({\n selector: 'riv-sr-only',\n templateUrl: './sr-only.component.html',\n styleUrls: ['./sr-only.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SrOnlyComponent {}\n","<ng-content></ng-content>\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class DownloadService {\n constructor(@Inject(DOCUMENT) private readonly documentRef: Document) {}\n\n async downloadUrl(url: string, filename?: string, target?: string) {\n const a = this.documentRef.createElement('a');\n if (filename) {\n a.download = filename;\n }\n if (target) {\n a.target = target;\n }\n a.href = url;\n document.body.appendChild(a);\n a.click();\n await new Promise<void>(resolve =>\n setTimeout(() => {\n a.remove();\n URL.revokeObjectURL(a.href);\n resolve();\n }, 0),\n );\n }\n\n async downloadBlob(blob: Blob, filename: string) {\n const a = this.documentRef.createElement('a');\n a.download = filename;\n a.href = URL.createObjectURL(blob);\n document.body.appendChild(a);\n a.click();\n await new Promise<void>(resolve =>\n setTimeout(() => {\n a.remove();\n URL.revokeObjectURL(a.href);\n resolve();\n }, 0),\n );\n }\n}\n","export const NO_DATA_FALLBACK = '-';\n\nconst MAGNITUDES = [\n { divisor: 1_000_000_000, suffix: 'B' },\n { divisor: 1_000_000, suffix: 'M' },\n { divisor: 1_000, suffix: 'K' },\n { divisor: 1, suffix: '' },\n] as const;\n\nexport function getMagnitudeTransformInfo(num: number): {\n divisor: number;\n digitInfoDefault: string;\n suffix: string;\n} {\n const abs = Math.abs(num);\n const index = MAGNITUDES.findIndex(({ divisor }) => abs >= divisor);\n const naturalIndex = index === -1 ? MAGNITUDES.length - 1 : index;\n // Promote to the next magnitude when rounding would otherwise display\n // 1,000 of the current one (e.g. 999,999 → \"1M\" rather than \"1,000K\").\n const { divisor, suffix } =\n naturalIndex > 0 &&\n Math.round(abs / MAGNITUDES[naturalIndex].divisor) >= 1_000\n ? MAGNITUDES[naturalIndex - 1]\n : MAGNITUDES[naturalIndex];\n return {\n divisor,\n digitInfoDefault: abs / divisor >= 100 ? '1.0-0' : '1.0-2',\n suffix,\n };\n}\n","import { DatePipe as AngularDatePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivDate' })\nexport class DatePipe implements PipeTransform {\n private readonly inner = new AngularDatePipe('en-US');\n transform(\n value?: string | number | Date | null,\n format?: string,\n timezone?: string,\n ) {\n return (\n this.inner.transform(value, format ?? 'shortDate', timezone) ??\n NO_DATA_FALLBACK\n );\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivDays' })\nexport class DaysPipe implements PipeTransform {\n private readonly inner = new DecimalPipe('en-us');\n transform(value?: string | number | null, digitsInfo?: string) {\n const ret = this.inner.transform(value, digitsInfo ?? '1.0-2');\n return ret ? ret + (value === 1 ? ' day' : ' days') : NO_DATA_FALLBACK;\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivDollars' })\nexport class DollarsPipe implements PipeTransform {\n readonly inner = new CurrencyPipe('en-us');\n public transform(value?: number | string | null, digitsInfo?: string) {\n return (\n this.inner.transform(\n value,\n undefined,\n undefined,\n digitsInfo ?? '1.2-2',\n ) ?? NO_DATA_FALLBACK\n );\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivNumber' })\nexport class NumberPipe implements PipeTransform {\n private readonly inner = new DecimalPipe('en-us');\n transform(value?: string | number | null, digitsInfo?: string) {\n return (\n this.inner.transform(value, digitsInfo ?? '1.0-0') ?? NO_DATA_FALLBACK\n );\n }\n}\n","import { PercentPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivPercentage' })\nexport class PercentagePipe implements PipeTransform {\n private readonly inner = new PercentPipe('en-us');\n transform(value?: string | number | null, digitsInfo?: string) {\n return (\n this.inner.transform(value, digitsInfo ?? '1.1-1') ?? NO_DATA_FALLBACK\n );\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nconst ACRONYMS = new Set([\n 'API',\n 'AWS',\n 'CBSA',\n 'COB',\n 'CPT',\n 'CSV',\n 'DOS',\n 'DRG',\n 'EHR',\n 'EIN',\n 'FTP',\n 'HTML',\n 'HTTP',\n 'HTTPS',\n 'ID',\n 'JSON',\n 'MS',\n 'NPI',\n 'NPPES',\n 'OOP',\n 'PDF',\n 'SQL',\n 'SSN',\n 'URL',\n 'XML',\n]) as ReadonlySet<string>;\n\nexport function toSentenceCase(value?: string | null | unknown): string {\n if (value == null || value === '') return '';\n\n const stringValue = String(value);\n const trimmed = stringValue.trim();\n if (trimmed.length === 0) return '';\n\n const words = trimmed.split(/\\s+/);\n const transformedWords = words.map((word, index) => {\n const upperWord = word.toUpperCase();\n if (ACRONYMS.has(upperWord)) {\n return upperWord;\n }\n if (index === 0) {\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n }\n return word.toLowerCase();\n });\n\n return transformedWords.join(' ');\n}\n\n@Pipe({ name: 'rivSentenceCase' })\nexport class SentenceCasePipe implements PipeTransform {\n transform(value?: string | null | unknown): string {\n return toSentenceCase(value);\n }\n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { getMagnitudeTransformInfo, NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivSmallCurrency' })\nexport class SmallCurrencyPipe implements PipeTransform {\n private readonly inner = new CurrencyPipe('en-us');\n public transform(value?: number | string | null, digitsInfo?: string) {\n if (value === null || value === undefined) {\n return NO_DATA_FALLBACK;\n }\n\n const num: number =\n typeof value == 'string' ? Number.parseFloat(value) : value;\n const magTransformInfo = getMagnitudeTransformInfo(num);\n return (\n (this.inner.transform(\n num / magTransformInfo.divisor,\n undefined,\n undefined,\n digitsInfo ?? magTransformInfo.digitInfoDefault,\n ) ?? NO_DATA_FALLBACK) + magTransformInfo.suffix\n );\n }\n}\n","import { DecimalPipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { getMagnitudeTransformInfo, NO_DATA_FALLBACK } from './common';\n\n@Pipe({ name: 'rivSmallNumber' })\nexport class SmallNumberPipe implements PipeTransform {\n private readonly inner = new DecimalPipe('en-us');\n public transform(value?: number | string | null, digitsInfo?: string) {\n if (value === null || value === undefined) {\n return NO_DATA_FALLBACK;\n }\n\n const num: number =\n typeof value == 'string' ? Number.parseFloat(value) : value;\n const magTransformInfo = getMagnitudeTransformInfo(num);\n return (\n (this.inner.transform(\n num / magTransformInfo.divisor,\n // Never show fractions of a whole unit (e.g. 12.3 → \"12\")\n digitsInfo ??\n (magTransformInfo.divisor === 1\n ? '1.0-0'\n : magTransformInfo.digitInfoDefault),\n ) ?? NO_DATA_FALLBACK) + magTransformInfo.suffix\n );\n }\n}\n","import { CalloutComponent } from './callout.component';\n\ntype Dimensions = {\n width: number;\n height: number;\n};\n\ntype Point = {\n x: number;\n y: number;\n};\n\nexport type Box = Point & Dimensions;\n\nexport type Anchor = Point & { position: CalloutComponent.AnchoredPosition };\n\nexport function getOrigin(\n anchor: Box,\n client: Dimensions,\n viewportSize: Dimensions,\n preferredPosition: CalloutComponent.AnchoredPosition,\n allowedPositions: CalloutComponent.AnchoredPosition[] | null = null,\n fallbackDirection: CalloutComponent.Direction,\n additionalOffset: number,\n): Anchor {\n let position = preferredPosition;\n const allowed =\n !allowedPositions || allowedPositions.length === 0\n ? CalloutComponent.AnchoredPositions\n : allowedPositions;\n let index = allowed.indexOf(position);\n let leastClippedIndex = index;\n let origin = originAtPosition(anchor, client, position, additionalOffset);\n let currentClippedX;\n let currentClippedY;\n let leastClipped = Infinity;\n let foundUnclipped = false;\n // Iterate through allowed positions. The first one we find that doesn't clip out of view, we use.\n // If all of the positions clip, use the one which clipped the least.\n for (\n let checkCount = 0;\n checkCount <= allowed.length && !foundUnclipped;\n checkCount++,\n index =\n fallbackDirection === 'clockwise'\n ? (index + 1) % allowed.length\n : (index - 1 + allowed.length) % allowed.length\n ) {\n position = allowed[index];\n origin = originAtPosition(anchor, client, position, additionalOffset);\n currentClippedX =\n -1 *\n Math.min(origin.x, viewportSize.width - (origin.x + client.width), 0);\n currentClippedY =\n -1 *\n Math.min(origin.y, viewportSize.height - (origin.y + client.height), 0);\n if (currentClippedX > 0 || currentClippedY > 0) {\n const clippedArea =\n currentClippedX * currentClippedY +\n currentClippedX * (client.height - currentClippedY) +\n currentClippedY * (client.width - currentClippedX);\n if (leastClipped > clippedArea) {\n leastClipped = clippedArea;\n leastClippedIndex = index;\n }\n } else {\n foundUnclipped = true;\n }\n }\n if (!foundUnclipped) {\n position = allowed[leastClippedIndex];\n origin = originAtPosition(anchor, client, position, additionalOffset);\n origin.y = origin.y < 0 ? 4 : origin.y;\n }\n return { ...origin, position };\n}\n\nexport function originAtPosition(\n anchor: Box,\n client: Dimensions,\n position: CalloutComponent.AnchoredPosition,\n offset: number,\n): Point {\n switch (position) {\n case 'top-left':\n return {\n x: anchor.x + anchor.width - client.width,\n y: anchor.y - client.height - offset,\n };\n case 'top-center':\n return {\n x: anchor.x + anchor.width / 2 - client.width / 2,\n y: anchor.y - client.height - offset,\n };\n case 'top-right':\n return {\n x: anchor.x,\n y: anchor.y - client.height - offset,\n };\n case 'right-top':\n return {\n x: anchor.x + anchor.width + offset,\n y: anchor.y,\n };\n case 'center-right':\n return {\n x: anchor.x + anchor.width + offset,\n y: anchor.y + anchor.height / 2 - client.height / 2,\n };\n case 'right-bottom':\n return {\n x: anchor.x + anchor.width + offset,\n y: anchor.y + anchor.height - client.height,\n };\n case 'bottom-right':\n return {\n x: anchor.x,\n y: anchor.y + anchor.height + offset,\n };\n case 'bottom-center':\n return {\n x: anchor.x + anchor.width / 2 - client.width / 2,\n y: anchor.y + anchor.height + offset,\n };\n case 'bottom-left':\n return {\n x: anchor.x + anchor.width - client.width,\n y: anchor.y + anchor.height + offset,\n };\n case 'left-bottom':\n return {\n x: anchor.x - client.width - offset,\n y: anchor.y + anchor.height - client.height,\n };\n case 'center-left':\n return {\n x: anchor.x - client.width - offset,\n y: anchor.y + anchor.height / 2 - client.height / 2,\n };\n case 'left-top':\n return {\n x: anchor.x - client.width - offset,\n y: anchor.y,\n };\n }\n}\n","import { Directive, Injectable, Input, OnDestroy, OnInit } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LockScrollContextService {\n private stack = 0;\n\n getContext() {\n return this.stack;\n }\n\n pushContext() {\n return ++this.stack;\n }\n\n popContext() {\n return --this.stack;\n }\n\n public scrollPosition: number = 0;\n}\n\n@Directive({ selector: '[rivLockScroll]' })\nexport class LockScrollDirective implements OnInit, OnDestroy {\n constructor(private readonly context: LockScrollContextService) {}\n\n @Input('rivLockScroll')\n lock: boolean = false;\n\n ngOnInit() {\n if (this.lock) {\n const oldContext = this.context.getContext();\n const newContext = this.context.pushContext();\n if (oldContext === 0 && newContext === 1) {\n this.lockScroll();\n }\n }\n }\n\n ngOnDestroy() {\n if (this.lock) {\n const oldContext = this.context.getContext();\n const newContext = this.context.popContext();\n if (oldContext === 1 && newContext === 0) {\n this.unlockScroll();\n }\n }\n }\n\n private lockScroll() {\n this.context.scrollPosition = document.documentElement.scrollTop;\n document.body.style.position = 'fixed';\n document.body.style.overflow = 'hidden';\n document.body.style.width = '100%';\n document.body.style.height = '100%';\n document.body.style.top = `${this.context.scrollPosition * -1}px`;\n }\n\n private unlockScroll() {\n document.body.removeAttribute('style');\n document.documentElement.scrollTop = this.context.scrollPosition;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\n@Directive({\n selector: '[rivClientSize]',\n})\nexport class SizeDirective implements OnInit, OnDestroy {\n private resizeObserver: ResizeObserver;\n\n @Output()\n rivClientSize = new EventEmitter<DOMRect>();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n zone: NgZone,\n ) {\n this.resizeObserver = new ResizeObserver(entries => {\n zone.run(() => {\n for (const entry of entries) {\n this.rivClientSize.emit(entry.target.getBoundingClientRect());\n }\n });\n });\n }\n\n ngOnInit() {\n this.rivClientSize.emit(\n this.elementRef.nativeElement.getBoundingClientRect(),\n );\n this.resizeObserver.observe(this.elementRef.nativeElement);\n }\n\n ngOnDestroy() {\n this.resizeObserver.unobserve(this.elementRef.nativeElement);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { getOrigin } from './callout.helpers';\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of lifecycle hooks.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-callout',\n templateUrl: './callout.component.html',\n styleUrls: ['./callout.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalloutComponent implements AfterViewInit, OnChanges {\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n @Input()\n anchor: Element | DOMRect | null = null;\n\n @Input()\n isModal: boolean = true;\n\n @Input()\n preferredPosition: CalloutComponent.AnchoredPosition = 'bottom-right';\n\n @Input()\n allowedPositions: CalloutComponent.AnchoredPosition[] = [\n ...CalloutComponent.AnchoredPositions,\n ];\n\n @Input()\n fallbackDirection: CalloutComponent.Direction = 'counter-clockwise';\n\n @Input()\n showCaret: boolean = true;\n\n @Input()\n theme: CalloutComponent.Theme = 'dark';\n\n @ViewChild('content')\n content: ElementRef<HTMLDivElement> | null = null;\n\n @ViewChild('scrim', { static: false })\n scrim: ElementRef<HTMLElement> | null = null;\n\n private mouseDownInsideContent: boolean = false;\n\n scrimMouseDown(evt: MouseEvent) {\n this.mouseDownInsideContent =\n this.content?.nativeElement.contains(evt.target as Node) ?? false;\n }\n\n scrimClick(evt: MouseEvent) {\n // A click always starts with a mousedown. If a user mouse downs inside the\n // content and then drags to the scrim, this will trigger a click on the scrim.\n // This can happen if the user selects text and drags too far, leading to a\n // bad experience. To prevent that, we track if the mousedown started inside\n // the content. If it did, we ignore the click on the scrim. If it didn't,\n // we allow the click to close the callout.\n if (evt.target === evt.currentTarget && !this.mouseDownInsideContent) {\n this.close.emit();\n }\n // always reset the flag after a click\n this.mouseDownInsideContent = false;\n }\n\n left: number = 0;\n top: number = 0;\n resolvedPosition: CalloutComponent.AnchoredPosition = this.preferredPosition;\n\n ngAfterViewInit() {\n this.setPosition();\n }\n ngOnChanges() {\n this.setPosition();\n }\n onContentSizeChanges() {\n this.setPosition();\n }\n\n setPosition() {\n const windowSize = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n if (this.anchor === null || this.content === null || this.scrim === null)\n return;\n\n const scrimRect = this.scrim.nativeElement.getBoundingClientRect();\n\n const anchorRect =\n this.anchor instanceof Element\n ? this.anchor.getBoundingClientRect()\n : this.anchor;\n\n const anchorBounds = {\n x: anchorRect.left - scrimRect.left, // In most cases, the scrim will be positioned at (0,0), but if it's not, this will make sure the callout is positioned correctly regardless.\n y: anchorRect.top - scrimRect.top,\n width: anchorRect.right - anchorRect.left,\n height: anchorRect.bottom - anchorRect.top,\n };\n\n const calloutSize = {\n width: this.content.nativeElement.clientWidth,\n height: this.content.nativeElement.clientHeight,\n };\n\n const calloutOrigin = getOrigin(\n anchorBounds,\n calloutSize,\n windowSize,\n this.preferredPosition,\n this.allowedPositions,\n this.fallbackDirection,\n this.showCaret ? 8 : 0,\n );\n\n this.left = calloutOrigin.x;\n this.top = calloutOrigin.y;\n this.resolvedPosition = calloutOrigin.position;\n this.cdr.detectChanges();\n }\n\n @Output()\n readonly close = new EventEmitter<void>();\n}\n\nexport namespace CalloutComponent {\n export const Themes = ['light', 'dark'] as const;\n export type Theme = (typeof Themes)[number];\n\n export const AnchoredPositions = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'right-top',\n 'center-right',\n 'right-bottom',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left',\n 'left-bottom',\n 'center-left',\n 'left-top',\n ] as const;\n export type AnchoredPosition = (typeof AnchoredPositions)[number];\n\n export const Directions = ['clockwise', 'counter-clockwise'] as const;\n export type Direction = (typeof Directions)[number];\n}\n","<div\n #scrim\n class=\"scrim\"\n [class.full]=\"isModal\"\n (click)=\"scrimClick($event)\"\n (mousedown)=\"scrimMouseDown($event)\"\n>\n <div\n class=\"callout\"\n (rivClientSize)=\"onContentSizeChanges()\"\n [ngClass]=\"[theme, resolvedPosition]\"\n [class.caret]=\"showCaret\"\n [style.left.px]=\"left\"\n [style.top.px]=\"top\"\n [rivLockScroll]=\"isModal\"\n #content\n >\n <ng-content></ng-content>\n </div>\n</div>\n","import { Injectable, NgZone, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport type Overlays = Map<Symbol, TemplateRef<void>>;\n\n@Injectable({ providedIn: 'root' })\nexport class OverlayService {\n constructor(private readonly zone: NgZone) {}\n\n public overlays = new BehaviorSubject<Overlays>(new Map());\n\n public add(overlay: TemplateRef<void>): Symbol {\n const key = Symbol();\n this.update(overlays => overlays.set(key, overlay));\n return key;\n }\n\n public remove(key: Symbol): void {\n this.update(overlays => overlays.delete(key));\n }\n\n // Deferred because the template misses the change when the triggering event\n // comes from a template being removed by it; run in the zone so it renders.\n // TODO: remove the deferral after an Angular upgrade.\n // https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n private update(change: (overlays: Overlays) => void): void {\n queueMicrotask(() =>\n this.zone.run(() => {\n const overlays = new Map(this.overlays.getValue());\n change(overlays);\n this.overlays.next(overlays);\n }),\n );\n }\n}\n","import { Directive, OnDestroy, OnInit, TemplateRef } from '@angular/core';\nimport { OverlayService } from './overlay.service';\n\n@Directive({\n selector: '[riv-overlay]',\n})\nexport class OverlayDirective implements OnInit, OnDestroy {\n constructor(\n private readonly template: TemplateRef<void>,\n private readonly overlayService: OverlayService,\n ) {}\n\n private key?: Symbol;\n\n ngOnInit() {\n this.key = this.overlayService.add(this.template);\n }\n\n ngOnDestroy() {\n if (this.key) this.overlayService.remove(this.key);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { CalloutComponent } from '../callout.component';\n\nfunction isTemplate(v: string | TemplateRef<void>): v is TemplateRef<void> {\n return typeof v !== 'string';\n}\n\n@Component({\n selector: 'riv-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TooltipComponent {\n @Input()\n anchor: Element | DOMRect | null = null;\n\n @Input()\n content?: string | TemplateRef<void>;\n\n @Input()\n theme: CalloutComponent.Theme = 'dark';\n\n @Input()\n maxWidth: string = TooltipComponent.DefaultMaxWidth;\n\n @Input()\n preferredPosition: TooltipComponent.AnchoredPosition = 'top-center';\n\n @Output()\n onMouseEnter = new EventEmitter<MouseEvent>();\n\n @Output()\n onMouseLeave = new EventEmitter<MouseEvent>();\n\n _onMouseLeave(evt: MouseEvent) {\n this.onMouseLeave.emit(evt);\n }\n\n _onMouseEnter(evt: MouseEvent) {\n this.onMouseEnter.emit(evt);\n }\n\n readonly isTemplate = isTemplate;\n readonly allowedPositions = [...TooltipComponent.AnchoredPositions];\n}\n\nexport namespace TooltipComponent {\n /** 344px, which fits about 50 characters per line. */\n export const DefaultMaxWidth = 'calc(var(--base-grid-size) * 86)';\n export const AnchoredPositions = [\n 'top-center',\n 'center-right',\n 'bottom-center',\n 'center-left',\n ] as const;\n export type AnchoredPosition = Extract<\n (typeof AnchoredPositions)[number],\n CalloutComponent.AnchoredPosition\n >;\n}\n","<riv-callout\n *riv-overlay\n [anchor]=\"anchor\"\n [preferredPosition]=\"preferredPosition\"\n [allowedPositions]=\"allowedPositions\"\n [isModal]=\"false\"\n [theme]=\"theme\"\n (mouseenter)=\"_onMouseEnter($event)\"\n (mouseleave)=\"_onMouseLeave($event)\"\n>\n <ng-container *ngIf=\"content && isTemplate(content); else stringContent\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </ng-container>\n <ng-template #stringContent>\n <div class=\"string-content\" [style.max-width]=\"maxWidth\">\n {{ content }}\n </div>\n </ng-template>\n</riv-callout>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipComponent } from './tooltip.component';\n\n@Directive({\n selector: '[rivTooltip]',\n})\nexport class TooltipDirective implements OnDestroy {\n constructor(\n protected readonly el: ElementRef,\n protected readonly applicationRef: ApplicationRef,\n ) {}\n\n private _rivTooltip?: string | TemplateRef<void>;\n\n @Input()\n set rivTooltip(value: string | TemplateRef<void> | undefined) {\n this._rivTooltip = value;\n if (!value) {\n this.cancelOpen();\n this.discardOpenProgress();\n this.closeImmediately();\n }\n }\n\n get rivTooltip(): string | TemplateRef<void> | undefined {\n return this._rivTooltip;\n }\n\n @Input()\n rivTooltipTheme: 'dark' | 'light' = 'dark';\n\n @Input()\n rivTooltipMaxWidth = TooltipComponent.DefaultMaxWidth;\n\n @Input()\n rivTooltipPreferredPosition: TooltipComponent.AnchoredPosition = 'top-center';\n\n /** Element to position the tooltip against. Defaults to the host element. */\n @Input()\n rivTooltipAnchor?: Element;\n\n @Input()\n rivTooltipCloseDelay: number = 100;\n\n @Input()\n rivTooltipOpenDelay: number = 500;\n\n /**\n * Window after the pointer leaves in which the time already spent hovering is\n * kept. Coming back within it resumes the open countdown rather than starting\n * it over, so brushing off a small target — a 16px `riv-help` icon, say — and\n * returning does not cost another full `rivTooltipOpenDelay`.\n */\n @Input()\n rivTooltipGracePeriod: number = 300;\n\n private tooltipRef?: ComponentRef<TooltipComponent>;\n private closeTimeout?: number;\n private openTimeout?: number;\n private graceTimeout?: number;\n /** Hover time already served toward `rivTooltipOpenDelay`. */\n private servedDelay = 0;\n /** When the pending open countdown started. */\n private openStartedAt = 0;\n\n @HostListener('mouseenter') onMouseEnter() {\n if (!this.rivTooltip) return;\n if (this.tooltipRef) {\n this.cancelClose();\n } else if (!this.openTimeout) {\n window.clearTimeout(this.graceTimeout);\n this.openStartedAt = Date.now();\n this.openTimeout = window.setTimeout(() => {\n const tooltip = this.applicationRef.components[0].injector\n .get(ViewContainerRef)\n .createComponent(TooltipComponent);\n tooltip.instance.anchor =\n this.rivTooltipAnchor ?? this.el.nativeElement;\n tooltip.instance.content = this.rivTooltip;\n tooltip.instance.theme = this.rivTooltipTheme;\n tooltip.instance.maxWidth = this.rivTooltipMaxWidth;\n tooltip.instance.preferredPosition = this.rivTooltipPreferredPosition;\n tooltip.instance.onMouseEnter.subscribe(this.cancelClose.bind(this));\n tooltip.instance.onMouseLeave.subscribe(this.initiateClose.bind(this));\n this.tooltipRef = tooltip;\n this.openTimeout = undefined;\n this.servedDelay = 0;\n }, Math.max(0, this.rivTooltipOpenDelay - this.servedDelay));\n }\n }\n\n @HostListener('mouseleave') onMouseLeave() {\n this.holdOpenProgress();\n this.cancelOpen();\n if (this.tooltipRef) {\n this.initiateClose();\n }\n }\n\n ngOnDestroy(): void {\n this.cancelOpen();\n this.discardOpenProgress();\n this.initiateClose();\n }\n\n private initiateClose() {\n this.closeTimeout = window.setTimeout(() => {\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n }, this.rivTooltipCloseDelay);\n }\n\n private cancelClose() {\n window.clearTimeout(this.closeTimeout);\n }\n\n private cancelOpen() {\n window.clearTimeout(this.openTimeout);\n this.openTimeout = undefined;\n }\n\n /**\n * Banks the hover time served so far and starts the grace period, after which\n * the countdown starts from zero again.\n */\n private holdOpenProgress() {\n if (!this.openTimeout) return;\n this.servedDelay += Date.now() - this.openStartedAt;\n this.graceTimeout = window.setTimeout(\n () => (this.servedDelay = 0),\n this.rivTooltipGracePeriod,\n );\n }\n\n private discardOpenProgress() {\n window.clearTimeout(this.graceTimeout);\n this.servedDelay = 0;\n }\n\n private closeImmediately() {\n window.clearTimeout(this.closeTimeout);\n this.tooltipRef?.destroy();\n this.tooltipRef = undefined;\n }\n}\n","import {\n AfterViewInit,\n ApplicationRef,\n Directive,\n ElementRef,\n Input,\n} from '@angular/core';\nimport { TooltipDirective } from '../../overlay/callout/tooltip/tooltip.directive';\n\n// Credit to boneskull on Github, whose work I used as a reference\n@Directive({\n selector: 'svg text[rivSVGTextTruncate]',\n})\nexport class SVGTextTruncateDirective\n extends TooltipDirective\n implements AfterViewInit\n{\n @Input()\n text: string = '';\n\n @Input()\n width: number = 50;\n\n constructor(\n protected override readonly el: ElementRef,\n protected override readonly applicationRef: ApplicationRef,\n ) {\n super(el, applicationRef);\n }\n\n ngAfterViewInit(): void {\n this.svgTruncate(this.el.nativeElement);\n }\n\n // Truncate through setting strings as the text-content and testing their width\n svgTruncate(element: SVGTextContentElement) {\n element.textContent = this.text;\n let currentLength: number = element.textContent.length;\n\n // If the text can fit in the given width, no truncation needed.\n if (currentLength > 0 && element.getComputedTextLength() <= this.width) {\n element.textContent = this.text;\n this.rivTooltip = '';\n } else {\n /*\n Test the length of each \"substring + ...\" combo until we find one that fits.\n Start by making room for the elipses by subtracting 3 from the length.\n */\n currentLength = currentLength - 3;\n let currentTextFitsInWidth: boolean = false;\n while (currentLength > 0 && !currentTextFitsInWidth) {\n const currentTextToTry: string =\n this.text.slice(0, currentLength) + '...';\n\n element.textContent = currentTextToTry;\n\n if (\n element.getSubStringLength(0, currentTextToTry.length) <= this.width\n ) {\n currentTextFitsInWidth = true;\n } else {\n currentLength--;\n }\n }\n\n // If we end up not finding a width of text that works, display just the ellipses.\n if (!currentTextFitsInWidth) {\n element.textContent = '...';\n }\n this.rivTooltip = this.text;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n Input,\n Self,\n} from '@angular/core';\nimport { TooltipComponent } from '../../overlay/callout/tooltip/tooltip.component';\nimport { TooltipDirective } from '../../overlay/callout/tooltip/tooltip.directive';\n\nfunction scrolled(element: HTMLElement): boolean {\n return element.offsetWidth < element.scrollWidth;\n}\n\n/**\n * Truncate the text to one line. When truncated, display the full text in a tooltip.\n */\n@Component({\n selector: '[rivTruncate]',\n styleUrls: ['./truncate.component.css'],\n templateUrl: './truncate.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [TooltipDirective],\n})\nexport class TruncateComponent {\n constructor(\n private readonly element: ElementRef,\n // For performance reasons, take more control\n @Self() private readonly tooltip: TooltipDirective,\n ) {}\n\n @Input()\n maxTooltipWidth: string = TooltipComponent.DefaultMaxWidth;\n\n @HostListener('mouseenter')\n enter() {\n if (scrolled(this.element.nativeElement)) {\n this.tooltip.rivTooltip = this.element.nativeElement.textContent;\n this.tooltip.rivTooltipMaxWidth = this.maxTooltipWidth;\n this.tooltip.onMouseEnter();\n }\n }\n\n @HostListener('mouseleave')\n leave() {\n this.tooltip.onMouseLeave();\n }\n\n // For the auto-complete textbox.\n scrollIntoView() {\n this.element.nativeElement.scrollIntoView(false);\n }\n}\n","<ng-content></ng-content>\n","export interface CacheResult<V> {\n value: V;\n cleanup: () => void;\n}\n\n/**\n * DOM cache that clones existing elements if available.\n */\nexport class DomCache<T, V extends Node = Node> {\n private readonly nodes = new Map<T, Set<V>>();\n\n constructor(private readonly create: (key: T) => V) {}\n\n get(key: T): CacheResult<V> {\n let set = this.nodes.get(key);\n let result: V;\n if (set) {\n result = <V>set.values().next().value.cloneNode(true);\n } else {\n result = this.create(key);\n set = new Set();\n this.nodes.set(key, set);\n }\n\n set.add(result);\n\n return {\n value: result,\n cleanup: () => {\n set!.delete(result);\n if (!set!.size) {\n this.nodes.delete(key);\n }\n },\n };\n }\n}\n","const AlertCircle = `<svg data-icon=\"AlertCircle\" aria-label=\"alert circle icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"></circle><line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line><line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line></svg>`;\nconst AlertTriangle = `<svg data-icon=\"AlertTriangle\" aria-label=\"alert triangle icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path><line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line></svg>`;\nconst AlignLeft = `<svg data-icon=\"AlignLeft\" aria-label=\"align left icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25H12\" /></svg>`;\nconst Archive = `<svg data-icon=\"Archive\" aria-label=\"archive icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m20.25 7.5-.625 10.632a2.25 2.25 0 0 1-2.247 2.118H6.622a2.25 2.25 0 0 1-2.247-2.118L3.75 7.5M10 11.25h4M3.375 7.5h17.25c.621 0 1.125-.504 1.125-1.125v-1.5c0-.621-.504-1.125-1.125-1.125H3.375c-.621 0-1.125.504-1.125 1.125v1.5c0 .621.504 1.125 1.125 1.125Z\" /></svg>`;\nconst ArrowDown = `<svg data-icon=\"ArrowDown\" aria-label=\"arrow down icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 13.5 12 21m0 0-7.5-7.5M12 21V3\" /></svg>`;\nconst ArrowDownLeft = `<svg data-icon=\"ArrowDownLeft\" aria-label=\"arrow down left icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 4.5-15 15m0 0h11.25m-11.25 0V8.25\" /></svg>`;\nconst ArrowLeft = `<svg data-icon=\"ArrowLeft\" aria-label=\"arrow left icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.5 19.5 3 12m0 0 7.5-7.5M3 12h18\" /></svg>`;\nconst ArrowLeftCircle = `<svg data-icon=\"ArrowLeftCircle\" aria-label=\"arrow left circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m11.25 9-3 3m0 0 3 3m-3-3h7.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst ArrowRight = `<svg data-icon=\"ArrowRight\" aria-label=\"arrow right icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3\" /></svg>`;\nconst ArrowUp = `<svg data-icon=\"ArrowUp\" aria-label=\"arrow up icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 10.5 12 3m0 0 7.5 7.5M12 3v18\" /></svg>`;\nconst ArrowUpRight = `<svg data-icon=\"ArrowUpRight\" aria-label=\"arrow up right icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m4.5 19.5 15-15m0 0H8.25m11.25 0v11.25\" /></svg>`;\nconst AtSign = `<svg data-icon=\"AtSign\" aria-label=\"at sign icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 12a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0Zm0 0c0 1.657 1.007 3 2.25 3S21 13.657 21 12a9 9 0 1 0-2.636 6.364M16.5 12V8.25\" /></svg>`;\nconst BarChart2 = `<svg data-icon=\"BarChart2\" aria-label=\"bar chart icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875v-6.75ZM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V8.625ZM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125V4.125Z\" /></svg>`;\nconst Beaker = `<svg data-icon=\"Beaker\" aria-label=\"beaker icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104c.251.023.501.05.75.082M19.8 15.3l-1.57.393A9.065 9.065 0 0 1 12 15a9.065 9.065 0 0 0-6.23-.693L5 14.5m14.8.8l1.402 1.402c1.232 1.232.65 3.318-1.067 3.611A48.309 48.309 0 0 1 12 21c-2.773 0-5.491-.235-8.135-.687-1.718-.293-2.3-2.379-1.067-3.61L5 14.5\" /></svg>`;\nconst Bell = `<svg data-icon=\"Bell\" aria-label=\"bell icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0\" /></svg>`;\nconst BellAlert = `<svg data-icon=\"BellAlert\" aria-label=\"bell alert icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0M3.124 7.5A8.969 8.969 0 0 1 5.292 3m13.416 0a8.969 8.969 0 0 1 2.168 4.5\" /></svg>`;\nconst BookOpen = `<svg data-icon=\"BookOpen\" aria-label=\"book open icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25\" /></svg>`;\nconst Briefcase = `<svg data-icon=\"Briefcase\" aria-label=\"briefcase icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M20.25 14.15v4.25c0 1.094-.787 2.036-1.872 2.18-2.087.277-4.216.42-6.378.42s-4.291-.143-6.378-.42c-1.085-.144-1.872-1.086-1.872-2.18v-4.25m16.5 0a2.18 2.18 0 0 0 .75-1.661V8.706c0-1.081-.768-2.015-1.837-2.175a48.114 48.114 0 0 0-3.413-.387m4.5 8.006c-.194.165-.42.295-.673.38A23.978 23.978 0 0 1 12 15.75c-2.648 0-5.195-.429-7.577-1.22a2.016 2.016 0 0 1-.673-.38m0 0A2.18 2.18 0 0 1 3 12.489V8.706c0-1.081.768-2.015 1.837-2.175a48.111 48.111 0 0 1 3.413-.387m7.5 0V5.25A2.25 2.25 0 0 0 13.5 3h-3a2.25 2.25 0 0 0-2.25 2.25v.894m7.5 0a48.667 48.667 0 0 0-7.5 0M12 12.75h.008v.008H12v-.008Z\" /></svg>`;\nconst BuildingLibrary = `<svg data-icon=\"BuildingLibrary\" aria-label=\"building library icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 21v-8.25M15.75 21v-8.25M8.25 21v-8.25M3 9l9-6 9 6m-1.5 12V10.332A48.36 48.36 0 0 0 12 9.75c-2.551 0-5.056.2-7.5.582V21M3 21h18M12 6.75h.008v.008H12V6.75Z\" /></svg>`;\nconst Calendar = `<svg data-icon=\"Calendar\" aria-label=\"calendar icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5\" /></svg>`;\nconst Chart = `<svg data-icon=\"Chart\" aria-label=\"chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.75 3V14.25C3.75 15.4926 4.75736 16.5 6 16.5H8.25M3.75 3H2.25M3.75 3H20.25M8.25 16.5H15.75M8.25 16.5L7.25 19.5M20.25 3H21.75M20.25 3V14.25C20.25 15.4926 19.2426 16.5 18 16.5H15.75M15.75 16.5L16.75 19.5M7.25 19.5H16.75M7.25 19.5L6.75 21M16.75 19.5L17.25 21M7.5 12L10.5 9L12.6476 11.1476C13.6542 9.70301 14.9704 8.49023 16.5 7.60539\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Check = `<svg data-icon=\"Check\" aria-label=\"check icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m4.5 12.75 6 6 9-13.5\" /></svg>`;\nconst CheckCircle = `<svg data-icon=\"CheckCircle\" aria-label=\"check circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst ChevronDown = `<svg data-icon=\"ChevronDown\" aria-label=\"chevron down icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m19.5 8.25-7.5 7.5-7.5-7.5\" /></svg>`;\nconst ChevronLeft = `<svg data-icon=\"ChevronLeft\" aria-label=\"chevron left icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" /></svg>`;\nconst ChevronRight = `<svg data-icon=\"ChevronRight\" aria-label=\"chevron right icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" /></svg>`;\nconst ChevronsLeft = `<svg data-icon=\"ChevronsLeft\" aria-label=\"chevrons left icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5\" /></svg>`;\nconst ChevronsRight = `<svg data-icon=\"ChevronsRight\" aria-label=\"chevrons right icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5\" /></svg>`;\nconst ChevronUp = `<svg data-icon=\"ChevronUp\" aria-label=\"chevron up icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m4.5 15.75 7.5-7.5 7.5 7.5\" /></svg>`;\nconst Clipboard = `<svg data-icon=\"Clipboard\" aria-label=\"clipboard icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\" /></svg>`;\nconst ClipboardList = `<svg data-icon=\"ClipboardList\" aria-label=\"clipboard list icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12h3.75M9 15h3.75M9 18h3.75m3 .75H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08m-5.801 0c-.065.21-.1.433-.1.664 0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75 2.25 2.25 0 0 0-.1-.664m-5.8 0A2.251 2.251 0 0 1 13.5 2.25H15c1.012 0 1.867.668 2.15 1.586m-5.8 0c-.376.023-.75.05-1.124.08C9.095 4.01 8.25 4.973 8.25 6.108V8.25m0 0H4.875c-.621 0-1.125.504-1.125 1.125v11.25c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V9.375c0-.621-.504-1.125-1.125-1.125H8.25ZM6.75 12h.008v.008H6.75V12Zm0 3h.008v.008H6.75V15Zm0 3h.008v.008H6.75V18Z\" /></svg>`;\nconst Clock = `<svg data-icon=\"Clock\" aria-label=\"clock icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst Collections = `<svg data-icon=\"Collections\" aria-label=\"collections icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.343 8.64291L13.1166 4.47139M13.1166 4.47139L8.94512 3.69779M13.1166 4.47139L5.69896 9.56826\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 17.498V20.998H21V8.99805H16.5V11.998H11.5V14.998H6.5V17.498H2Z\" stroke=\"currentColor\" stroke-linejoin=\"round\"/></svg>`;\nconst ColumnChart = `<svg data-icon=\"ColumnChart\" aria-label=\"column chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M8.5 17.375V11.75\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M13 17.375V8.375\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M17.5 17.375V5.375\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst Copy = `<svg data-icon=\"Copy\" aria-label=\"copy icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 0 0-2.25-2.25H6A2.25 2.25 0 0 0 3.75 6v8.25A2.25 2.25 0 0 0 6 16.5h2.25m8.25-8.25H18a2.25 2.25 0 0 1 2.25 2.25V18A2.25 2.25 0 0 1 18 20.25h-7.5A2.25 2.25 0 0 1 8.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 0 0-2.25 2.25v6\" /></svg>`;\nconst CornerLeftUp = `<svg data-icon=\"CornerLeftUp\" aria-label=\"corner left up icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.99 7.5 8.24 3.75m0 0L4.49 7.5m3.75-3.75v16.499h11.25\" /></svg>`;\nconst CreditCard = `<svg data-icon=\"CreditCard\" aria-label=\"credit card icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 0 0 2.25-2.25V6.75A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25v10.5A2.25 2.25 0 0 0 4.5 19.5Z\" /></svg>`;\nconst Dashboard = `<svg data-icon=\"Dashboard\" aria-label=\"dashboard icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.75 6C3.75 4.75736 4.75736 3.75 6 3.75H8.25C9.49264 3.75 10.5 4.75736 10.5 6V8.25C10.5 9.49264 9.49264 10.5 8.25 10.5H6C4.75736 10.5 3.75 9.49264 3.75 8.25V6Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.75 15.75C3.75 14.5074 4.75736 13.5 6 13.5H8.25C9.49264 13.5 10.5 14.5074 10.5 15.75V18C10.5 19.2426 9.49264 20.25 8.25 20.25H6C4.75736 20.25 3.75 19.2426 3.75 18V15.75Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M13.5 6C13.5 4.75736 14.5074 3.75 15.75 3.75H18C19.2426 3.75 20.25 4.75736 20.25 6V8.25C20.25 9.49264 19.2426 10.5 18 10.5H15.75C14.5074 10.5 13.5 9.49264 13.5 8.25V6Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M13.5 15.75C13.5 14.5074 14.5074 13.5 15.75 13.5H18C19.2426 13.5 20.25 14.5074 20.25 15.75V18C20.25 19.2426 19.2426 20.25 18 20.25H15.75C14.5074 20.25 13.5 19.2426 13.5 18V15.75Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst DocumentCurrencyDollar = `<svg data-icon=\"DocumentCurrencyDollar\" aria-label=\"document currency dollar icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v7.5m2.25-6.466a9.016 9.016 0 0 0-3.461-.203c-.536.072-.974.478-1.021 1.017a4.559 4.559 0 0 0-.018.402c0 .464.336.844.775.994l2.95 1.012c.44.15.775.53.775.994 0 .136-.006.27-.018.402-.047.539-.485.945-1.021 1.017a9.077 9.077 0 0 1-3.461-.203M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" /></svg>`;\nconst Documents = `<svg data-icon=\"Documents\" aria-label=\"documents icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75\" /></svg>`;\nconst DollarSign = `<svg data-icon=\"DollarSign\" aria-label=\"dollar sign icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6v12m-3-2.818.879.659c1.171.879 3.07.879 4.242 0 1.172-.879 1.172-2.303 0-3.182C13.536 12.219 12.768 12 12 12c-.725 0-1.45-.22-2.003-.659-1.106-.879-1.106-2.303 0-3.182s2.9-.879 4.006 0l.415.33M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst DollarSign2 = `<svg data-icon=\"DollarSign2\" aria-label=\"dollar sign icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 3V21\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M16.1667 6H9.91667C9.14312 6 8.40125 6.31607 7.85427 6.87868C7.30729 7.44129 7 8.20435 7 9C7 9.79565 7.30729 10.5587 7.85427 11.1213C8.40125 11.6839 9.14312 12 9.91667 12H14.0833C14.8569 12 15.5987 12.3161 16.1457 12.8787C16.6927 13.4413 17 14.2044 17 15C17 15.7956 16.6927 16.5587 16.1457 17.1213C15.5987 17.6839 14.8569 18 14.0833 18H7\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Download = `<svg data-icon=\"Download\" aria-label=\"download icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5M16.5 12 12 16.5m0 0L7.5 12m4.5 4.5V3\" /></svg>`;\nconst DownloadCloud = `<svg data-icon=\"DownloadCloud\" aria-label=\"download cloud icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9.75v6.75m0 0-3-3m3 3 3-3m-8.25 6a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\" /></svg>`;\nconst DownloadLeft = `<svg data-icon=\"DownloadLeft\" aria-label=\"download left icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 18.75V5.25M12 7.5L7.5 12M7.5 12L12 16.5M7.5 12H21\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst DownloadRight = `<svg data-icon=\"DownloadRight\" aria-label=\"download right icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M21 18.75V5.25M12 7.5L16.5 12M16.5 12L12 16.5M16.5 12H3\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Edit = `<svg data-icon=\"Edit\" aria-label=\"edit icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10\" /></svg>`;\nconst Edit2 = `<svg data-icon=\"Edit2\" aria-label=\"edit icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125\" /></svg>`;\nconst ExternalLink = `<svg data-icon=\"ExternalLink\" aria-label=\"external link icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\" /></svg>`;\nconst Eye = `<svg data-icon=\"Eye\" aria-label=\"eye icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" /></svg>`;\nconst EyeOff = `<svg data-icon=\"EyeOff\" aria-label=\"eye off icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88\" /></svg>`;\nconst File = `<svg data-icon=\"File\" aria-label=\"file icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" /></svg>`;\nconst FilePlus = `<svg data-icon=\"FilePlus\" aria-label=\"file plus icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m3.75 9v6m3-3H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" /></svg>`;\nconst FileText = `<svg data-icon=\"FileText\" aria-label=\"file text icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z\" /></svg>`;\nconst Filter = `<svg data-icon=\"Filter\" aria-label=\"filter icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z\" /></svg>`;\nconst Filter2 = `<svg data-icon=\"Filter2\" aria-label=\"filter icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path d=\"M4 7C10.4437 7 14.0563 7 20.5 7M6.6875 12.25H17.8125M8.6875 17.5H15.8125\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Flow = `<svg data-icon=\"Flow\" aria-label=\"flow icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16.25 21L19.25 18M19.25 18L16.25 15M19.25 18H16.25C14.25 18 13.55 17.6 12.75 16C11.75 14 11.75 12 9.25 12\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M16.25 3L19.25 6M19.25 6L16.25 9M19.25 6L16.25 6C14.25 6 13.55 6.4 12.75 8C11.75 10 11.75 12 9.25 12L4.75 12\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Folder = `<svg data-icon=\"Folder\" aria-label=\"folder icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z\" /></svg>`;\nconst HandThumbDown = `<svg data-icon=\"HandThumbDown\" aria-label=\"hand thumb down icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M7.498 15.25H4.372c-1.026 0-1.945-.694-2.054-1.715a12.137 12.137 0 0 1-.068-1.285c0-2.848.992-5.464 2.649-7.521C5.287 4.247 5.886 4 6.504 4h4.016a4.5 4.5 0 0 1 1.423.23l3.114 1.04a4.5 4.5 0 0 0 1.423.23h1.294M7.498 15.25c.618 0 .991.724.725 1.282A7.471 7.471 0 0 0 7.5 19.75 2.25 2.25 0 0 0 9.75 22a.75.75 0 0 0 .75-.75v-.633c0-.573.11-1.14.322-1.672.304-.76.93-1.33 1.653-1.715a9.04 9.04 0 0 0 2.86-2.4c.498-.634 1.226-1.08 2.032-1.08h.384m-10.253 1.5H9.7m8.075-9.75c.01.05.027.1.05.148.593 1.2.925 2.55.925 3.977 0 1.487-.36 2.89-.999 4.125m.023-8.25c-.076-.365.183-.75.575-.75h.908c.889 0 1.713.518 1.972 1.368.339 1.11.521 2.287.521 3.507 0 1.553-.295 3.036-.831 4.398-.306.774-1.086 1.227-1.918 1.227h-1.053c-.472 0-.745-.556-.5-.96a8.95 8.95 0 0 0 .303-.54\" /></svg>`;\nconst HandThumbUp = `<svg data-icon=\"HandThumbUp\" aria-label=\"hand thumb up icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.633 10.25c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 0 1 2.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 0 0 .322-1.672V2.75a.75.75 0 0 1 .75-.75 2.25 2.25 0 0 1 2.25 2.25c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282m0 0h3.126c1.026 0 1.945.694 2.054 1.715.045.422.068.85.068 1.285a11.95 11.95 0 0 1-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 0 0-1.423-.23H5.904m10.598-9.75H14.25M5.904 18.5c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 0 1-.521-3.507c0-1.553.295-3.036.831-4.398C3.387 9.953 4.167 9.5 5 9.5h1.053c.472 0 .745.556.5.96a8.958 8.958 0 0 0-1.302 4.665c0 1.194.232 2.333.654 3.375Z\" /></svg>`;\nconst Hashtag = `<svg data-icon=\"Hashtag\" aria-label=\"hashtag icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.25 8.25H20.25M3.75 15.75H18.75M16.95 2.25L13.05 21.75M10.9503 2.25L7.05029 21.75\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Heart = `<svg data-icon=\"Heart\" aria-label=\"heart icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z\" /></svg>`;\nconst HeartActive = `<svg data-icon=\"HeartActive\" aria-label=\"heart active icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M21 8.25C21 5.765 18.901 3.75 16.312 3.75C14.377 3.75 12.715 4.876 12 6.483C11.285 4.876 9.623 3.75 7.687 3.75C5.1 3.75 3 5.765 3 8.25C3 15.47 12 20.25 12 20.25C12 20.25 21 15.47 21 8.25Z\" fill=\"currentColor\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst HelpCircle = `<svg data-icon=\"HelpCircle\" aria-label=\"help circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9 5.25h.008v.008H12v-.008Z\" /></svg>`;\nconst HorizontalBarChart = `<svg data-icon=\"HorizontalBarChart\" aria-label=\"horizontal bar chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M7.75 16.5H13.375\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M7.75 12H16.75\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M7.75 7.5L19.75 7.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst Inbox = `<svg data-icon=\"Inbox\" aria-label=\"inbox icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 13.5h3.86a2.25 2.25 0 0 1 2.012 1.244l.256.512a2.25 2.25 0 0 0 2.013 1.244h3.218a2.25 2.25 0 0 0 2.013-1.244l.256-.512a2.25 2.25 0 0 1 2.013-1.244h3.859m-19.5.338V18a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18v-4.162c0-.224-.034-.447-.1-.661L19.24 5.338a2.25 2.25 0 0 0-2.15-1.588H6.911a2.25 2.25 0 0 0-2.15 1.588L2.35 13.177a2.25 2.25 0 0 0-.1.661Z\" /></svg>`;\nconst Info = `<svg data-icon=\"Info\" aria-label=\"info icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z\" /></svg>`;\nconst Key = `<svg data-icon=\"Key\" aria-label=\"key icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25Z\" /></svg>`;\nconst Layers = `<svg data-icon=\"Layers\" aria-label=\"layers icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.429 9.75 2.25 12l4.179 2.25m0-4.5 5.571 3 5.571-3m-11.142 0L2.25 7.5 12 2.25l9.75 5.25-4.179 2.25m0 0L21.75 12l-4.179 2.25m0 0 4.179 2.25L12 21.75 2.25 16.5l4.179-2.25m11.142 0-5.571 3-5.571-3\" /></svg>`;\nconst LineChart = `<svg data-icon=\"LineChart\" aria-label=\"line chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M6 15L10.2162 10.5789L13.3784 13.8947L19 8\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst Link2 = `<svg data-icon=\"Link2\" aria-label=\"link icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244\" /></svg>`;\nconst List = `<svg data-icon=\"List\" aria-label=\"list icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0ZM3.75 12h.007v.008H3.75V12Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm-.375 5.25h.007v.008H3.75v-.008Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z\" /></svg>`;\nconst Lock = `<svg data-icon=\"Lock\" aria-label=\"lock icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z\" /></svg>`;\nconst Mail = `<svg data-icon=\"Mail\" aria-label=\"mail icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75\" /></svg>`;\nconst MapPin = `<svg data-icon=\"MapPin\" aria-label=\"map pin icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 10.5a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1 1 15 0Z\" /></svg>`;\nconst Maximize2 = `<svg data-icon=\"Maximize2\" aria-label=\"maximize icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15\" /></svg>`;\nconst Menu = `<svg data-icon=\"Menu\" aria-label=\"menu icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" /></svg>`;\nconst MessageCircle = `<svg data-icon=\"MessageCircle\" aria-label=\"message circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 20.25c4.97 0 9-3.694 9-8.25s-4.03-8.25-9-8.25S3 7.444 3 12c0 2.104.859 4.023 2.273 5.48.432.447.74 1.04.586 1.641a4.483 4.483 0 0 1-.923 1.785A5.969 5.969 0 0 0 6 21c1.282 0 2.47-.402 3.445-1.087.81.22 1.668.337 2.555.337Z\" /></svg>`;\nconst MessageCircleActive = `<svg data-icon=\"MessageCircleActive\" aria-label=\"message circle active icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path fill=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 20.25c4.97 0 9-3.694 9-8.25s-4.03-8.25-9-8.25S3 7.444 3 12c0 2.104.859 4.023 2.273 5.48.432.447.74 1.04.586 1.641a4.483 4.483 0 0 1-.923 1.785A5.969 5.969 0 0 0 6 21c1.282 0 2.47-.402 3.445-1.087.81.22 1.668.337 2.555.337Z\" /></svg>`;\nconst MessageCircleEllipsis = `<svg data-icon=\"MessageCircleEllipsis\" aria-label=\"message circle ellipsis icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8.625 12a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0H8.25m4.125 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0H12m4.125 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm0 0h-.375M21 12c0 4.556-4.03 8.25-9 8.25a9.764 9.764 0 0 1-2.555-.337A5.972 5.972 0 0 1 5.41 20.97a5.969 5.969 0 0 1-.474-.065 4.48 4.48 0 0 0 .978-2.025c.09-.457-.133-.901-.467-1.226C3.93 16.178 3 14.189 3 12c0-4.556 4.03-8.25 9-8.25s9 3.694 9 8.25Z\" /></svg>`;\nconst MessageCircleEllipsisActive = `<svg data-icon=\"MessageCircleEllipsisActive\" aria-label=\"message circle ellipsis active icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" d=\"M4.804 21.644A6.707 6.707 0 0 0 6 21.75a6.721 6.721 0 0 0 3.583-1.029c.774.182 1.584.279 2.417.279 5.322 0 9.75-3.97 9.75-9 0-5.03-4.428-9-9.75-9s-9.75 3.97-9.75 9c0 2.409 1.025 4.587 2.674 6.192.232.226.277.428.254.543a3.73 3.73 0 0 1-.814 1.686.75.75 0 0 0 .44 1.223ZM8.25 10.875a1.125 1.125 0 1 0 0 2.25 1.125 1.125 0 0 0 0-2.25ZM10.875 12a1.125 1.125 0 1 1 2.25 0 1.125 1.125 0 0 1-2.25 0Zm4.875-1.125a1.125 1.125 0 1 0 0 2.25 1.125 1.125 0 0 0 0-2.25Z\" clip-rule=\"evenodd\" /></svg>`;\nconst MessageCirclePlus = `<svg data-icon=\"MessageCirclePlus\" aria-label=\"message circle plus icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 20.25c4.97 0 9-3.694 9-8.25s-4.03-8.25-9-8.25S3 7.444 3 12c0 2.104.859 4.023 2.273 5.48.432.447.74 1.04.586 1.641a4.483 4.483 0 0 1-.923 1.785A5.969 5.969 0 0 0 6 21c1.282 0 2.47-.402 3.445-1.087.81.22 1.668.337 2.555.337ZM12 8v8m4-4H8\" /></svg>`;\nconst Minimize2 = `<svg data-icon=\"Minimize2\" aria-label=\"minimize icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25\" /></svg>`;\nconst Minus = `<svg data-icon=\"Minus\" aria-label=\"minus icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5 12h14\" /></svg>`;\nconst MinusCircle = `<svg data-icon=\"MinusCircle\" aria-label=\"minus circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst MoreHorizontal = `<svg data-icon=\"MoreHorizontal\" aria-label=\"more horizontal icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM12.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM18.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z\" /></svg>`;\nconst MoreVertical = `<svg data-icon=\"MoreVertical\" aria-label=\"more vertical icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z\" /></svg>`;\nconst Paperclip = `<svg data-icon=\"Paperclip\" aria-label=\"paperclip icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m18.375 12.739-7.693 7.693a4.5 4.5 0 0 1-6.364-6.364l10.94-10.94A3 3 0 1 1 19.5 7.372L8.552 18.32m.009-.01-.01.01m5.699-9.941-7.81 7.81a1.5 1.5 0 0 0 2.112 2.13\" /></svg>`;\nconst Percent = `<svg data-icon=\"Percent\" aria-label=\"percent icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18 6L6 18\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 9C8.10457 9 9 8.10457 9 7C9 5.89543 8.10457 5 7 5C5.89543 5 5 5.89543 5 7C5 8.10457 5.89543 9 7 9Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M17 19C18.1046 19 19 18.1046 19 17C19 15.8954 18.1046 15 17 15C15.8954 15 15 15.8954 15 17C15 18.1046 15.8954 19 17 19Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Phone = `<svg data-icon=\"Phone\" aria-label=\"phone icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z\" /></svg>`;\nconst PieChart = `<svg data-icon=\"PieChart\" aria-label=\"pie chart icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.5 6a7.5 7.5 0 1 0 7.5 7.5h-7.5V6Z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 10.5H21A7.5 7.5 0 0 0 13.5 3v7.5Z\" /></svg>`;\nconst PinActive = `<svg data-icon=\"PinActive\" aria-label=\"pin active icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 15V21\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 3H17C17 3 15 4.5 15 6.5C15 8.5 15 11 16 12.5C17 14 18.5 15 18.5 15H5.5C5.5 15 7 14 8 12.5C9 11 9 8.5 9 6.5C9 4.5 7 3 7 3Z\" fill=\"currentColor\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst PinInactive = `<svg data-icon=\"PinInactive\" aria-label=\"pin inactive icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 15V21\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 3H17C17 3 15 4.5 15 6.5C15 8.5 15 11 16 12.5C17 14 18.5 15 18.5 15H5.5C5.5 15 7 14 8 12.5C9 11 9 8.5 9 6.5C9 4.5 7 3 7 3Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Plus = `<svg data-icon=\"Plus\" aria-label=\"plus icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" /></svg>`;\nconst Printer = `<svg data-icon=\"Printer\" aria-label=\"printer icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.72 13.829c-.24.03-.48.062-.72.096m.72-.096a42.415 42.415 0 0 1 10.56 0m-10.56 0L6.34 18m10.94-4.171c.24.03.48.062.72.096m-.72-.096L17.66 18m0 0 .229 2.523a1.125 1.125 0 0 1-1.12 1.227H7.231c-.662 0-1.18-.568-1.12-1.227L6.34 18m11.318 0h1.091A2.25 2.25 0 0 0 21 15.75V9.456c0-1.081-.768-2.015-1.837-2.175a48.055 48.055 0 0 0-1.913-.247M6.34 18H5.25A2.25 2.25 0 0 1 3 15.75V9.456c0-1.081.768-2.015 1.837-2.175a48.041 48.041 0 0 1 1.913-.247m10.5 0a48.536 48.536 0 0 0-10.5 0m10.5 0V3.375c0-.621-.504-1.125-1.125-1.125h-8.25c-.621 0-1.125.504-1.125 1.125v3.659M18 10.5h.008v.008H18V10.5Zm-3 0h.008v.008H15V10.5Z\" /></svg>`;\nconst Productivity = `<svg data-icon=\"Productivity\" aria-label=\"productivity icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M15.0423 21.6718L13.6835 16.6007M13.6835 16.6007L11.1741 18.826L11.7425 9.35623L16.9697 17.2731L13.6835 16.6007ZM12 2.25V4.5M17.8336 4.66637L16.2426 6.25736M20.25 10.5H18M7.75736 14.7426L6.16637 16.3336M6 10.5H3.75M7.75736 6.25736L6.16637 4.66637\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst QueueList = `<svg data-icon=\"QueueList\" aria-label=\"queue list icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 12h16.5m-16.5 3.75h16.5M3.75 19.5h16.5M5.625 4.5h12.75a1.875 1.875 0 0 1 0 3.75H5.625a1.875 1.875 0 0 1 0-3.75Z\" /></svg>`;\nconst RefreshCw = `<svg data-icon=\"RefreshCw\" aria-label=\"refresh cw icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99\" /></svg>`;\nconst Reorder = `<svg data-icon=\"Reorder\" aria-label=\"reorder icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M8 6.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-1ZM8 12.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-1ZM8 18.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-1ZM13 6.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1ZM13 12.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1ZM13 18.5a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1h-1a1 1 0 0 1-1-1v-1Z\"/></svg>`;\nconst Reply = `<svg data-icon=\"Reply\" aria-label=\"reply icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 15 3 9m0 0 6-6M3 9h12a6 6 0 0 1 0 12h-3\" /></svg>`;\nconst ReplyAll = `<svg data-icon=\"ReplyAll\" aria-label=\"reply all icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 15L3 9M3 9L9 3M3 9H7M12 21H15C16.5913 21 18.1174 20.3679 19.2426 19.2426C20.3679 18.1174 21 16.5913 21 15C21 13.4087 20.3679 11.8826 19.2426 10.7574C18.1174 9.63214 16.5913 9 15 9H7M13 3L7 9M7 9L13 15\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst RotateCw = `<svg data-icon=\"RotateCw\" aria-label=\"rotate cw icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m15 15 6-6m0 0-6-6m6 6H9a6 6 0 0 0 0 12h3\" /></svg>`;\nconst Search = `<svg data-icon=\"Search\" aria-label=\"search icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" /></svg>`;\nconst Send = `<svg data-icon=\"Send\" aria-label=\"send icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 12 3.269 3.125A59.769 59.769 0 0 1 21.485 12 59.768 59.768 0 0 1 3.27 20.875L5.999 12Zm0 0h7.5\" /></svg>`;\nconst Settings = `<svg data-icon=\"Settings\" aria-label=\"settings icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 0 1 1.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.559.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.894.149c-.424.07-.764.383-.929.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 0 1-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.398.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 0 1-.12-1.45l.527-.737c.25-.35.272-.806.108-1.204-.165-.397-.506-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.108-1.204l-.526-.738a1.125 1.125 0 0 1 .12-1.45l.773-.773a1.125 1.125 0 0 1 1.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894Z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\" /></svg>`;\nconst Shield = `<svg data-icon=\"Shield\" aria-label=\"shield icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z\" /></svg>`;\nconst Sidebar = `<svg data-icon=\"Sidebar\" aria-label=\"sidebar icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 19.591V4.40901M6 20.25H18C18.5967 20.25 19.169 20.0129 19.591 19.591C20.0129 19.169 20.25 18.5967 20.25 18V6C20.25 5.40326 20.0129 4.83097 19.591 4.40901C19.169 3.98705 18.5967 3.75 18 3.75H6C5.40326 3.75 4.83097 3.98705 4.40901 4.40901C3.98705 4.83097 3.75 5.40326 3.75 6V18C3.75 18.5967 3.98705 19.169 4.40901 19.591C4.83097 20.0129 5.40326 20.25 6 20.25Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Slash = `<svg data-icon=\"Slash\" aria-label=\"slash icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636\" /></svg>`;\nconst Sliders = `<svg data-icon=\"Sliders\" aria-label=\"sliders icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 13.5V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 0 1 0 3m0-3a1.5 1.5 0 0 0 0 3m0 9.75V10.5\" /></svg>`;\nconst Sparkles = `<svg data-icon=\"Sparkles\" aria-label=\"sparkles icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.813 15.904 9 18.75l-.813-2.846a4.5 4.5 0 0 0-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 0 0 3.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 0 0 3.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 0 0-3.09 3.09ZM18.259 8.715 18 9.75l-.259-1.035a3.375 3.375 0 0 0-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 0 0 2.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 0 0 2.456 2.456L21.75 6l-1.035.259a3.375 3.375 0 0 0-2.456 2.456ZM16.894 20.567 16.5 21.75l-.394-1.183a2.25 2.25 0 0 0-1.423-1.423L13.5 18.75l1.183-.394a2.25 2.25 0 0 0 1.423-1.423l.394-1.183.394 1.183a2.25 2.25 0 0 0 1.423 1.423l1.183.394-1.183.394a2.25 2.25 0 0 0-1.423 1.423Z\" /></svg>`;\nconst StackedColumnChart = `<svg data-icon=\"StackedColumnChart\" aria-label=\"stacked column chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M8 12.5V10.625\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M8 17.5V14.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M12.5 14.5V17.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M12.5 7.25V12.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M17 9.5V5\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M17 17.5V11.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst StackedHorizontalBarChart = `<svg data-icon=\"StackedHorizontalBarChart\" aria-label=\"stacked horizontal bar chart icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M12 16H13.875\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M7 16H10\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M10 11.5H7\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M17.25 11.5H12\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M15 7H19.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M7 7H13\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst StackedLineChart = `<svg data-icon=\"StackedLineChart\" aria-label=\"stacked line chart\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3V19.5C3 20.3284 3.67157 21 4.5 21H21\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M6.25 11.875L10.75 7.375L14.125 10.75L20.125 4.75\" stroke=\"currentColor\" stroke-linecap=\"round\"/><path d=\"M6.25 16.875L10.75 12.375L14.125 15.75L20.125 9.75\" stroke=\"currentColor\" stroke-linecap=\"round\"/></svg>`;\nconst Star = `<svg data-icon=\"Star\" aria-label=\"star icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.563.563 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.562.562 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.562.562 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.563.563 0 0 0 .475-.345L11.48 3.5Z\" /></svg>`;\nconst Stop = `<svg data-icon=\"Stop\" aria-label=\"stop icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.25 7.5A2.25 2.25 0 0 1 7.5 5.25h9a2.25 2.25 0 0 1 2.25 2.25v9a2.25 2.25 0 0 1-2.25 2.25h-9a2.25 2.25 0 0 1-2.25-2.25v-9Z\" /></svg>`;\nconst SupportChat = `<svg data-icon=\"SupportChat\" aria-label=\"support chat icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 0 1-.825-.242m9.345-8.334a2.126 2.126 0 0 0-.476-.095 48.64 48.64 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155\" /></svg>`;\nconst Table = `<svg data-icon=\"Table\" aria-label=\"table icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.375 19.5H20.625M3.375 19.5C2.75368 19.5 2.25 18.9963 2.25 18.375M3.375 19.5H10.875C11.4963 19.5 12 18.9963 12 18.375M20.625 19.5C21.2463 19.5 21.75 18.9963 21.75 18.375M20.625 19.5H13.125C12.5037 19.5 12 18.9963 12 18.375M2.25 18.375V5.625M2.25 18.375V16.875C2.25 16.2537 2.75368 15.75 3.375 15.75M12 18.375V16.875M2.25 5.625C2.25 5.00368 2.75368 4.5 3.375 4.5H20.625C21.2463 4.5 21.75 5.00368 21.75 5.625M2.25 5.625V7.125C2.25 7.74632 2.75368 8.25 3.375 8.25M3.375 15.75C2.75368 15.75 2.25 15.2463 2.25 14.625V13.125C2.25 12.5037 2.75368 12 3.375 12M3.375 15.75H10.875M21.75 18.375V5.625M21.75 18.375V16.875C21.75 16.2537 21.2463 15.75 20.625 15.75M21.75 5.625V7.125C21.75 7.74632 21.2463 8.25 20.625 8.25M20.625 15.75C21.2463 15.75 21.75 15.2463 21.75 14.625V13.125C21.75 12.5037 21.2463 12 20.625 12M20.625 15.75H13.125M20.625 8.25H3.375M20.625 8.25H13.125C12.5037 8.25 12 8.75368 12 9.375M20.625 8.25C21.2463 8.25 21.75 8.75368 21.75 9.375V10.875C21.75 11.4963 21.2463 12 20.625 12M3.375 8.25H10.875C11.4963 8.25 12 8.75368 12 9.375M3.375 8.25C2.75368 8.25 2.25 8.75368 2.25 9.375V10.875C2.25 11.4963 2.75368 12 3.375 12M12 9.375V10.875M3.375 12H10.875M20.625 12H13.125M10.875 12C11.4963 12 12 11.4963 12 10.875M10.875 12C11.4963 12 12 12.5037 12 13.125M12 10.875C12 11.4963 12.5037 12 13.125 12M13.125 12C12.5037 12 12 12.5037 12 13.125M12 13.125V14.625M10.875 15.75C11.4963 15.75 12 15.2463 12 14.625M10.875 15.75C11.4963 15.75 12 16.2537 12 16.875M12 14.625C12 15.2463 12.5037 15.75 13.125 15.75M13.125 15.75C12.5037 15.75 12 16.2537 12 16.875\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Tag = `<svg data-icon=\"Tag\" aria-label=\"tag icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z\" /><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 6h.008v.008H6V6Z\" /></svg>`;\nconst Target = `<svg data-icon=\"Target\" aria-label=\"target icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\"><path stroke=\"currentColor\" d=\"M21 12c0 4.9706-4.0294 9-9 9s-9-4.0294-9-9 4.0294-9 9-9 9 4.0294 9 9Z\"/><path stroke=\"currentColor\" d=\"M17.5 12c0 3.0376-2.4624 5.5-5.5 5.5S6.5 15.0376 6.5 12 8.9624 6.5 12 6.5s5.5 2.4624 5.5 5.5Z\"/><path stroke=\"currentColor\" d=\"M14 12c0 1.1046-.8954 2-2 2s-2-.8954-2-2 .8954-2 2-2 2 .8954 2 2Z\"/></svg>`;\nconst Trash2 = `<svg data-icon=\"Trash2\" aria-label=\"trash icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0\" /></svg>`;\nconst TrendingDown = `<svg data-icon=\"TrendingDown\" aria-label=\"trending down icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 6 9 12.75l4.286-4.286a11.948 11.948 0 0 1 4.306 6.43l.776 2.898m0 0 3.182-5.511m-3.182 5.51-5.511-3.181\" /></svg>`;\nconst TrendingUp = `<svg data-icon=\"TrendingUp\" aria-label=\"trending up icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M2.25 18 9 11.25l4.306 4.306a11.95 11.95 0 0 1 5.814-5.518l2.74-1.22m0 0-5.94-2.281m5.94 2.28-2.28 5.941\" /></svg>`;\nconst Type = `<svg data-icon=\"Type\" aria-label=\"type icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5 8V5H19V8\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M9 20H15\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 5V19\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst UploadCloud = `<svg data-icon=\"UploadCloud\" aria-label=\"upload cloud icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\" /></svg>`;\nconst User = `<svg data-icon=\"User\" aria-label=\"user icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 6a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0ZM4.501 20.118a7.5 7.5 0 0 1 14.998 0A17.933 17.933 0 0 1 12 21.75c-2.676 0-5.216-.584-7.499-1.632Z\" /></svg>`;\nconst UserCheck = `<svg data-icon=\"UserCheck\" aria-label=\"user check icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.75 6C13.75 6.99456 13.3549 7.94839 12.6516 8.65165C11.9484 9.35491 10.9946 9.75 10 9.75C9.00544 9.75 8.05161 9.35491 7.34835 8.65165C6.64509 7.94839 6.25 6.99456 6.25 6C6.25 5.00544 6.64509 4.05161 7.34835 3.34835C8.05161 2.64509 9.00544 2.25 10 2.25C10.9946 2.25 11.9484 2.64509 12.6516 3.34835C13.3549 4.05161 13.75 5.00544 13.75 6ZM2.501 20.118C2.53313 18.1504 3.33734 16.2742 4.74018 14.894C6.14302 13.5139 8.03209 12.7405 10 12.7405C11.9679 12.7405 13.857 13.5139 15.2598 14.894C16.6627 16.2742 17.4669 18.1504 17.499 20.118C15.1464 21.1968 12.5881 21.7535 10 21.75C7.324 21.75 4.784 21.166 2.501 20.118Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M15 10L17.25 12.25L21 7\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\nconst Users = `<svg data-icon=\"Users\" aria-label=\"users icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z\" /></svg>`;\nconst X = `<svg data-icon=\"X\" aria-label=\"x icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" /></svg>`;\nconst XCircle = `<svg data-icon=\"XCircle\" aria-label=\"x circle icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\" /></svg>`;\nconst Zap = `<svg data-icon=\"Zap\" aria-label=\"zap icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z\" /></svg>`;\nconst ZoomIn = `<svg data-icon=\"ZoomIn\" aria-label=\"zoom in icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM10.5 7.5v6m3-3h-6\" /></svg>`;\nconst ZoomOut = `<svg data-icon=\"ZoomOut\" aria-label=\"zoom out icon\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607ZM13.5 10.5h-6\" /></svg>`;\n\nexport const icons = {\n AlertCircle,\n AlertTriangle,\n AlignLeft,\n Archive,\n ArrowDown,\n ArrowDownLeft,\n ArrowLeft,\n ArrowLeftCircle,\n ArrowRight,\n ArrowUp,\n ArrowUpRight,\n AtSign,\n BarChart2,\n Beaker,\n Bell,\n BellAlert,\n BookOpen,\n Briefcase,\n BuildingLibrary,\n Calendar,\n Chart,\n Check,\n CheckCircle,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n ChevronUp,\n Clipboard,\n ClipboardList,\n Clock,\n Collections,\n ColumnChart,\n Copy,\n CornerLeftUp,\n CreditCard,\n Dashboard,\n DocumentCurrencyDollar,\n Documents,\n DollarSign,\n DollarSign2,\n Download,\n DownloadCloud,\n DownloadLeft,\n DownloadRight,\n Edit,\n Edit2,\n ExternalLink,\n Eye,\n EyeOff,\n File,\n FilePlus,\n FileText,\n Filter,\n Filter2,\n Flow,\n Folder,\n HandThumbDown,\n HandThumbUp,\n Hashtag,\n Heart,\n HeartActive,\n HelpCircle,\n HorizontalBarChart,\n Inbox,\n Info,\n Key,\n Layers,\n LineChart,\n Link2,\n List,\n Lock,\n Mail,\n MapPin,\n Maximize2,\n Menu,\n MessageCircle,\n MessageCircleActive,\n MessageCircleEllipsis,\n MessageCircleEllipsisActive,\n MessageCirclePlus,\n Minimize2,\n Minus,\n MinusCircle,\n MoreHorizontal,\n MoreVertical,\n Paperclip,\n Percent,\n Phone,\n PieChart,\n PinActive,\n PinInactive,\n Plus,\n Printer,\n Productivity,\n QueueList,\n RefreshCw,\n Reorder,\n Reply,\n ReplyAll,\n RotateCw,\n Search,\n Send,\n Settings,\n Shield,\n Sidebar,\n Slash,\n Sliders,\n Sparkles,\n StackedColumnChart,\n StackedHorizontalBarChart,\n StackedLineChart,\n Star,\n Stop,\n SupportChat,\n Table,\n Tag,\n Target,\n Trash2,\n TrendingDown,\n TrendingUp,\n Type,\n UploadCloud,\n User,\n UserCheck,\n Users,\n X,\n XCircle,\n Zap,\n ZoomIn,\n ZoomOut,\n};\n\nexport const iconsMap: { [key: string]: string } = {};\nfor (const key in icons) {\n iconsMap[key] = icons[<keyof typeof icons>key];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { CacheResult, DomCache } from './dom-cache';\nimport { icons, iconsMap } from './icons';\n\ntype IconPlusColor = {\n name: IconComponent.Name;\n color: string | undefined;\n};\n\nconst cache = new DomCache<IconPlusColor, HTMLElement>(value => {\n const svgText = iconsMap[value.name];\n const parser = new DOMParser();\n const svg = parser.parseFromString(svgText, 'text/xml');\n return svg.documentElement;\n});\n\n@Component({\n selector: 'riv-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconComponent implements OnDestroy {\n private cached: CacheResult<HTMLElement> | undefined;\n\n constructor(private readonly element: ElementRef<HTMLElement>) {}\n\n name$: IconComponent.Name | null = null;\n @Input()\n set name(value: IconComponent.Name | null) {\n this.name$ = value;\n this.clearCached();\n\n if (value == null) {\n return;\n }\n\n this.addIconToScreenAndCache(value, this.fillColor$);\n }\n\n fillColor$: string | undefined;\n @Input()\n set fillColor(value: string | undefined) {\n this.fillColor$ = value;\n this.clearCached();\n\n if (this.name$ == null) {\n return;\n }\n\n this.addIconToScreenAndCache(this.name$, value);\n }\n\n @Input()\n size: IconComponent.Size = 24;\n\n @Input()\n customSize: number | undefined;\n\n @HostBinding('style.width.px')\n @HostBinding('style.height.px')\n get iconSize() {\n return this.customSize ? this.customSize : this.size;\n }\n\n @Input()\n strokeWidth: number | undefined;\n\n @HostBinding('style.stroke-width')\n get calculateStrokeWidth() {\n return this.strokeWidth ? this.strokeWidth : 24 / this.iconSize;\n }\n\n ngOnDestroy() {\n this.name = null;\n }\n\n clearCached() {\n if (this.cached) {\n this.cached.value.remove();\n this.cached.cleanup();\n this.cached = undefined;\n }\n }\n\n addIconToScreenAndCache(\n iconName: IconComponent.Name,\n color: string | undefined,\n ) {\n let valueToCache = cache.get({ name: iconName, color: color });\n if (color) {\n valueToCache.value.style.fill = color;\n }\n this.cached = valueToCache;\n this.element.nativeElement.append(this.cached.value);\n }\n}\n\nexport namespace IconComponent {\n export type Name = keyof typeof icons;\n\n export const Sizes = [8, 12, 16, 20, 24] as const;\n export type Size = (typeof Sizes)[number];\n}\n","","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-help',\n templateUrl: './help.component.html',\n styleUrls: ['./help.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HelpComponent {\n @Input() help?: string;\n @Input() size: HelpComponent.Size = 16;\n}\n\nexport namespace HelpComponent {\n export const Sizes = [12, 16] as const;\n export type Size = (typeof HelpComponent.Sizes)[number];\n}\n","<riv-icon [rivTooltip]=\"help\" [name]=\"'Info'\" [size]=\"size\"></riv-icon>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n Optional,\n} from '@angular/core';\nimport { CalloutComponent } from '../../overlay/callout/callout.component';\n\n@Component({\n selector: '[rivLink]',\n templateUrl: './link.component.html',\n styleUrls: ['./link.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkComponent {\n constructor(@Optional() private readonly parentCallout?: CalloutComponent) {}\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n locked: boolean = false;\n\n @Input()\n theme: LinkComponent.Theme = 'light';\n\n @Input()\n variant: LinkComponent.Variant = 'basic';\n\n @HostBinding('class')\n get classes() {\n return Object.entries({\n disabled: this.disabled || this.locked,\n theme: this.theme === 'dark' || this.parentCallout?.theme === 'dark',\n [this.variant]: true,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n}\n\nexport namespace LinkComponent {\n export const Themes = ['light', 'dark'] as const;\n export type Theme = (typeof Themes)[number];\n\n export const Variants = ['basic', 'ghost'] as const;\n export type Variant = (typeof Variants)[number];\n}\n","<ng-content></ng-content>\n<riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-validation-message',\n templateUrl: './validation-message.component.html',\n styleUrls: ['./validation-message.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ValidationMessageComponent {\n @Input()\n message: string = '';\n}\n","<span class=\"validation-message\">\n <riv-icon [name]=\"'AlertCircle'\" [size]=\"16\"></riv-icon>\n {{ message }}\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-input-label',\n templateUrl: './input-label.component.html',\n styleUrls: ['./input-label.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputLabelComponent {\n @Input()\n label?: string;\n\n @Input()\n help?: string;\n\n @Input()\n required: boolean = false;\n\n @Input()\n labelActionText?: string;\n\n @Input()\n errorMessage: string = '';\n\n @Input()\n state: InputLabelComponent.State = 'valid';\n\n @Output()\n labelAction = new EventEmitter<MouseEvent>();\n}\n\nexport namespace InputLabelComponent {\n export const States = ['valid', 'warning', 'error'] as const;\n export type State = (typeof States)[number];\n}\n","<label *ngIf=\"label\">\n <span class=\"title\">\n {{ label }}\n <span *ngIf=\"required\">*</span>\n </span>\n <button\n *ngIf=\"labelActionText\"\n rivLink\n type=\"button\"\n (click)=\"labelAction.emit($event)\"\n type=\"button\"\n >\n {{ labelActionText }}\n </button>\n <riv-help *ngIf=\"help\" [help]=\"help\" [size]=\"12\"></riv-help>\n</label>\n<div class=\"content\"><ng-content></ng-content></div>\n<riv-validation-message\n *ngIf=\"errorMessage\"\n [message]=\"errorMessage\"\n></riv-validation-message>\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n Input,\n OnChanges,\n} from '@angular/core';\n\n@Directive({\n selector: '[riv-auto-focus]',\n})\nexport class AutoFocusDirective implements AfterViewInit, OnChanges {\n constructor(private readonly el: ElementRef) {}\n\n @Input('riv-auto-focus')\n autoActionActive: AutoFocusDirective.AutoAction = true;\n\n private deferActionUntilActive: boolean = false;\n\n ngAfterViewInit() {\n if (this.autoActionActive) {\n this.focus();\n } else {\n this.deferActionUntilActive = true;\n }\n }\n\n ngOnChanges() {\n if (this.deferActionUntilActive && this.autoActionActive) {\n this.deferActionUntilActive = false;\n this.focus();\n }\n }\n\n private focus() {\n if (this.el && this.el.nativeElement) {\n const element = this.el.nativeElement;\n if (!element.hasAttribute('tabindex')) {\n element.tabIndex = 0;\n }\n element.focus();\n\n if (\n this.autoActionActive === 'select' &&\n typeof element.select === 'function'\n ) {\n element.select();\n }\n }\n }\n}\n\nexport namespace AutoFocusDirective {\n /**\n * false: do nothing\n * true: focus the input only\n * 'select': focus the input and select all contents\n */\n export type AutoAction = boolean | 'select';\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AutoFocusDirective } from '../auto-focus/auto-focus.directive';\nimport { InputLabelComponent } from '../input-label/input-label.component';\n\n@Component({\n selector: 'riv-text-field',\n templateUrl: './text-field.component.html',\n styleUrls: ['./text-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextFieldComponent\n extends InputLabelComponent\n implements OnChanges\n{\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n placeholder: string = '';\n\n @Input()\n casing: TextFieldComponent.Casing = 'user';\n\n @Input()\n type: TextFieldComponent.Type = 'text';\n\n @Input()\n size: TextFieldComponent.Size = 'medium';\n\n @Input()\n autoFocus: AutoFocusDirective.AutoAction = false;\n\n @Input()\n name?: string;\n\n @Input()\n minLength?: number;\n\n @Input()\n maxLength?: number;\n\n protected _value: string = '';\n @Input()\n set value(v: string) {\n this._value = v;\n }\n\n protected setText() {\n if (\n TextFieldComponent.clean(this._value, this.casing) ===\n TextFieldComponent.clean(this._text, this.casing)\n )\n return;\n this._text = TextFieldComponent.format(this._value, this.casing);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['casing']) {\n this.setText();\n }\n }\n\n @Output()\n valueChange = new EventEmitter<string>();\n\n @Output()\n blur = new EventEmitter<string>();\n\n protected _text: string = '';\n\n set text(t: string) {\n // The user is setting the value. We'll keep the internal state exactly as\n // the user has typed it, but emit the clean value. Even if the cleaned\n // value is passed directly back to us, we won't override the user's work\n // (see comment in value setter above).\n this._text = t;\n this.valueChange.emit(TextFieldComponent.clean(t, this.casing));\n }\n get text(): string {\n return this._text;\n }\n\n inputBlur() {\n // Now that the user is done editing and has left the field, we can safely\n // update the internal state to match the cleaned/formatted version of\n // their input.\n this._text = TextFieldComponent.format(this._text, this.casing);\n this.blur.emit(TextFieldComponent.clean(this._text, this.casing));\n }\n}\n\nexport namespace TextFieldComponent {\n export const Casings = ['user', 'upper', 'lower'] as const;\n export type Casing = (typeof Casings)[number];\n\n export const Types = [\n 'text',\n 'email',\n 'password',\n 'search',\n 'tel',\n 'url',\n ] as const;\n export type Type = (typeof Types)[number];\n\n export const Sizes = ['small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n\n export function clean(v: string, casing: Casing): string {\n switch (casing) {\n case 'lower':\n return v.toLowerCase();\n case 'upper':\n return v.toUpperCase();\n case 'user':\n return v;\n }\n }\n\n // For the basic text component, formatting is a simple pass-through to\n // clean(). More advanced inputs will implement more complicated formatting.\n export function format(v: string, casing: Casing): string {\n return clean(v, casing);\n }\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <input\n #input\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [value]=\"text\"\n [attr.aria-label]=\"label || null\"\n (input)=\"text = input.value\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [riv-auto-focus]=\"autoFocus\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n (blur)=\"inputBlur()\"\n />\n</riv-input-label>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { TextFieldComponent } from '../text-field/text-field.component';\n\n@Component({\n selector: 'riv-alphabetic-field',\n templateUrl: '../text-field/text-field.component.html',\n styleUrls: ['../text-field/text-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlphabeticFieldComponent extends TextFieldComponent {\n protected override setText() {\n if (\n AlphabeticFieldComponent.clean(this._value, this.casing) ===\n AlphabeticFieldComponent.clean(this._text, this.casing)\n )\n return;\n this._text = AlphabeticFieldComponent.format(this._value, this.casing);\n }\n\n override set text(t: string) {\n this._text = t;\n this.valueChange.emit(AlphabeticFieldComponent.clean(t, this.casing));\n }\n override get text(): string {\n return this._text;\n }\n\n override inputBlur() {\n this._text = AlphabeticFieldComponent.format(this._text, this.casing);\n this.blur.emit(AlphabeticFieldComponent.clean(this._text, this.casing));\n }\n}\n\nexport namespace AlphabeticFieldComponent {\n export function clean(v: string, casing: TextFieldComponent.Casing): string {\n const cleaned = v.replaceAll(/[^A-Za-z]/g, '');\n return TextFieldComponent.clean(cleaned, casing);\n }\n\n export function format(v: string, casing: TextFieldComponent.Casing): string {\n return clean(v, casing);\n }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef } from '@angular/core';\n\n@Component({\n selector: 'riv-button-group',\n templateUrl: './button-group.component.html',\n styleUrls: ['./button-group.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonGroupComponent {\n constructor(private readonly el: ElementRef<HTMLElement>) {}\n\n public isFirst(btn: ElementRef<HTMLElement>): boolean {\n const child = this.getDirectChildOfGroup(btn);\n return this.el.nativeElement.firstElementChild === child;\n }\n\n public isLast(btn: ElementRef<HTMLElement>): boolean {\n const child = this.getDirectChildOfGroup(btn);\n return this.el.nativeElement.lastElementChild === child;\n }\n\n /*\n rivButton may not always be a *direct* descendant of the button group (like\n in cases where a custom rivButton trigger is used for a riv-select as part\n of a button group), so we traverse the tree until we get up to the direct\n child of the group for calculating whether or not the button is first or\n last (or neither), for proper styling.\n */\n private getDirectChildOfGroup(\n btn: ElementRef<HTMLElement>,\n ): HTMLElement | null {\n const buttonElement = btn.nativeElement;\n const hostElement = this.el.nativeElement;\n\n let possibleChild = buttonElement;\n while (\n possibleChild.parentElement &&\n possibleChild.parentElement !== hostElement\n ) {\n possibleChild = possibleChild.parentElement;\n }\n\n return possibleChild;\n }\n}\n","<ng-content></ng-content>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-loading',\n templateUrl: './loading.component.html',\n styleUrls: ['./loading.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingComponent {\n static readonly STROKE_WIDTH = 1.5;\n static readonly ARC_START_RADIANS = (Math.PI * 22.5) / 180;\n\n @Input()\n size: LoadingComponent.Size = 40;\n\n @Input()\n variant: LoadingComponent.Variant = 'dark';\n\n getPathData() {\n const size = this.size;\n const halfSize = size / 2;\n\n const stroke = LoadingComponent.STROKE_WIDTH;\n const halfStroke = stroke / 2;\n\n const top = halfStroke;\n const right = size - stroke;\n const radius = (size - stroke * 2) / 2;\n\n const commands = [\n `M${halfSize},${top}`,\n `L${right},${top}`,\n `L${right},${halfSize}`,\n `A ${radius} ${radius},0,1,1,${halfSize} ${top}`,\n ];\n return commands.join(' ');\n }\n\n readonly strokeWidth = LoadingComponent.STROKE_WIDTH;\n}\n\nexport namespace LoadingComponent {\n export const Sizes = [16, 40, 80] as const;\n export type Size = (typeof LoadingComponent.Sizes)[number];\n\n export const Variants = ['light', 'dark'] as const;\n export type Variant = (typeof LoadingComponent.Variants)[number];\n}\n","<svg\n [ngClass]=\"{\n dark: variant === 'dark',\n light: variant === 'light',\n small: size === 16,\n medium: size === 40,\n large: size === 80\n }\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.width]=\"size\"\n [attr.height]=\"size\"\n [attr.viewBox]=\"'0 0 ' + size + ' ' + size\"\n fill=\"none\"\n>\n <path [attr.stroke-width]=\"strokeWidth\" [attr.d]=\"getPathData()\"></path>\n</svg>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n Optional,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { IconComponent } from '../../icon/icon.component';\nimport { LoadingComponent } from '../../load/loading/loading.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\n\n@Component({\n selector: '[rivButton]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonComponent implements OnChanges {\n constructor(\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n @Optional() private readonly group: ButtonGroupComponent,\n ) {}\n\n @Input()\n locked?: boolean;\n\n @Input()\n disabled?: boolean;\n\n @Input()\n loading?: boolean;\n\n @Input()\n full?: boolean;\n\n @Input()\n size: ButtonComponent.Size = 'medium';\n\n @Input()\n variant: ButtonComponent.Variant = 'basic';\n\n @Input()\n icon?: IconComponent.Name;\n\n @Input()\n iconPosition: ButtonComponent.IconPosition = 'first';\n\n @Input()\n current?: boolean;\n\n @HostBinding('class')\n get classes() {\n return Object.entries({\n disabled: this.disabled || this.locked,\n full: this.full,\n loading: this.loading,\n [this.variant]: true,\n [this.size]: true,\n stacked: this.iconPosition === 'stacked',\n grouped: !!this.group,\n first: !!this.group?.isFirst(this.el),\n last: !!this.group?.isLast(this.el),\n current: !!this.current,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled(): 'true' | null {\n return this.disabled || this.locked ? 'true' : null;\n }\n\n getLoadingVariant(): LoadingComponent.Variant {\n switch (this.variant) {\n case 'basic':\n case 'caution':\n case 'ghost':\n case 'stateful':\n return 'dark';\n case 'danger':\n case 'primary':\n return this.disabled ? 'dark' : 'light';\n }\n }\n\n getIconSize(): IconComponent.Size {\n switch (this.size) {\n case 'xsmall':\n case 'small':\n return 16;\n case 'medium':\n return 20;\n case 'large':\n case 'xlarge':\n return 24;\n }\n }\n\n private disableNativeElement: boolean = false;\n private lockNativeElement: boolean = false;\n\n ngOnChanges(changes: SimpleChanges) {\n const accessChange: boolean = !!changes['disabled'] || !!changes['locked'];\n if (accessChange) {\n if (changes['disabled']) {\n this.disableNativeElement = changes['disabled'].currentValue;\n }\n if (changes['locked']) {\n this.lockNativeElement = changes['locked'].currentValue;\n }\n if ('disabled' in this.el.nativeElement) {\n if (this.disableNativeElement || this.lockNativeElement) {\n this.renderer.setAttribute(this.el.nativeElement, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\n }\n }\n }\n\n const currentOrVariantChange: boolean =\n !!changes['current'] || !!changes['variant'];\n if (currentOrVariantChange) {\n if (this.current !== undefined && this.variant !== 'stateful') {\n // eslint-disable-next-line no-console\n console.warn(\n `ButtonComponent: The 'current' input is only valid when variant is 'stateful'. Variant: '${this.variant}'`,\n );\n }\n }\n }\n}\n\nexport namespace ButtonComponent {\n export const Sizes = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n ] as const;\n export type Size = (typeof Sizes)[number];\n\n export const Variants = [\n 'basic',\n 'ghost',\n 'primary',\n 'danger',\n 'caution',\n 'stateful',\n ] as const;\n export type Variant = (typeof Variants)[number];\n\n export const IconPositions = ['first', 'last', 'stacked'] as const;\n export type IconPosition = (typeof IconPositions)[number];\n}\n","<riv-icon\n *ngIf=\"icon && (iconPosition === 'first' || iconPosition === 'stacked')\"\n [name]=\"locked ? 'Lock' : icon\"\n [size]=\"getIconSize()\"\n></riv-icon>\n<span><ng-content></ng-content></span>\n<riv-icon\n *ngIf=\"locked && !icon\"\n [name]=\"'Lock'\"\n [size]=\"getIconSize()\"\n></riv-icon>\n<riv-icon\n *ngIf=\"icon && iconPosition === 'last'\"\n [name]=\"locked ? 'Lock' : icon\"\n [size]=\"getIconSize()\"\n></riv-icon>\n<riv-loading\n *ngIf=\"loading\"\n [size]=\"16\"\n [variant]=\"getLoadingVariant()\"\n></riv-loading>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { InputLabelComponent } from '../input-label/input-label.component';\n\n@Component({\n selector: 'riv-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent implements OnChanges {\n @Input()\n name?: string;\n\n @Input()\n identifier?: string;\n\n @Input()\n value: boolean = false;\n\n @Input()\n checkedColorToken: string = '--purp-60';\n\n @Input()\n indeterminateColorToken: string = '--purp-60';\n\n @Input()\n checkboxTooltip?: string;\n\n @Input()\n indeterminate: boolean = false;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n required: boolean = false;\n\n @Input()\n state: InputLabelComponent.State = 'valid';\n\n @Input()\n errorMessage: string = '';\n\n @Output()\n valueChange = new EventEmitter<boolean>();\n\n emit(v: boolean) {\n this.valueChange.emit(v);\n this.ensureSynchronizedState(this.value);\n }\n\n @ViewChild('label', { static: true }) label?: ElementRef<HTMLLabelElement>;\n\n @ViewChild('input', { static: true }) input?: ElementRef<HTMLInputElement>;\n\n /**\n * Used to control the aria-label of the input in cases where no label\n * content is provided.\n */\n @Input()\n ariaLabel: string = 'Checkbox';\n\n ensureSynchronizedState(v: boolean) {\n if (this.input) {\n this.input.nativeElement.checked = v;\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('value' in changes)\n this.ensureSynchronizedState(changes['value'].currentValue);\n }\n\n isCheckboxOnly(): boolean {\n return !this.label || this.label.nativeElement.childNodes.length === 1;\n }\n\n getCheckedBackgroundColor(): string {\n return `var(${this.checkedColorToken})`;\n }\n\n getIndeterminateBackgroundColor(): string {\n return `var(${this.indeterminateColorToken})`;\n }\n}\n","<label\n #label\n [class.disabled]=\"disabled\"\n [class.has-content]=\"!isCheckboxOnly()\"\n>\n <input\n #input\n type=\"checkbox\"\n [id]=\"identifier\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [checked]=\"value\"\n [indeterminate]=\"indeterminate\"\n [class.error]=\"state === 'error'\"\n (change)=\"emit(!!input.checked)\"\n [style.--checked-background-color]=\"getCheckedBackgroundColor()\"\n [style.--indeterminate-background-color]=\"getIndeterminateBackgroundColor()\"\n [rivTooltip]=\"checkboxTooltip\"\n [attr.aria-label]=\"isCheckboxOnly() ? ariaLabel : null\"\n />\n <ng-content></ng-content>\n</label>\n<riv-validation-message\n *ngIf=\"errorMessage\"\n class=\"error-message\"\n [message]=\"errorMessage\"\n></riv-validation-message>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\n\n@Component({\n selector: 'riv-card-checkbox',\n templateUrl: './card-checkbox.component.html',\n styleUrls: ['./card-checkbox.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardCheckboxComponent extends CheckboxComponent {}\n","<label [class.disabled]=\"disabled\">\n <div\n class=\"checkbox\"\n [class.checked]=\"value\"\n [class.indeterminate]=\"indeterminate\"\n >\n <riv-checkbox\n [name]=\"name\"\n [identifier]=\"identifier\"\n [value]=\"value\"\n [checkboxTooltip]=\"checkboxTooltip\"\n [indeterminate]=\"indeterminate\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [ariaLabel]=\"ariaLabel\"\n (valueChange)=\"valueChange.emit($event)\"\n ></riv-checkbox>\n </div>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</label>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AutoFocusDirective } from '../auto-focus/auto-focus.directive';\nimport { InputLabelComponent } from '../input-label/input-label.component';\nimport { TextFieldComponent } from '../text-field/text-field.component';\n\n@Component({\n selector: 'riv-number-field',\n templateUrl: './number-field.component.html',\n styleUrls: ['./number-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NumberFieldComponent\n extends InputLabelComponent\n implements OnChanges\n{\n @Input()\n disabled: boolean = false;\n\n @Input()\n readonly: boolean = false;\n\n @Input()\n placeholder: string = '';\n\n @Input()\n maximumFractionDigits: number = 0;\n\n @Input()\n minimumFractionDigits: number = 0;\n\n @Input()\n min: number = -Infinity;\n\n @Input()\n max: number = Infinity;\n\n @Input()\n align: NumberFieldComponent.Alignment = 'left';\n\n @Input()\n size: TextFieldComponent.Size = 'medium';\n\n @Input()\n autoFocus: AutoFocusDirective.AutoAction = false;\n\n @Input()\n name?: string;\n\n private _value: number | null = null;\n @Input()\n set value(v: number | null) {\n this._value = v;\n }\n\n private setText() {\n const value =\n typeof this._value === 'number' ? this._value.toString() : null;\n if (\n NumberFieldComponent.clean(\n value,\n this.maximumFractionDigits,\n this.min,\n this.max,\n ) ===\n NumberFieldComponent.clean(\n this._text,\n this.maximumFractionDigits,\n this.min,\n this.max,\n )\n )\n return;\n this._text = NumberFieldComponent.format(\n value,\n this.minimumFractionDigits,\n this.maximumFractionDigits,\n this.min,\n this.max,\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['value'] ||\n changes['maximumFractionDigits'] ||\n changes['minimumFractionDigits'] ||\n changes['min'] ||\n changes['max']\n ) {\n this.setText();\n }\n }\n\n @Output()\n valueChange = new EventEmitter<number | null>();\n\n @Output()\n blur = new EventEmitter<number | null>();\n\n protected _text: string = '';\n\n set text(t: string) {\n this._text = t;\n this.valueChange.emit(\n NumberFieldComponent.clean(\n t,\n this.maximumFractionDigits,\n this.min,\n this.max,\n ),\n );\n }\n get text(): string {\n return this._text;\n }\n\n inputBlur() {\n this._text = NumberFieldComponent.format(\n this._text,\n this.minimumFractionDigits,\n this.maximumFractionDigits,\n this.min,\n this.max,\n );\n this.blur.emit(\n NumberFieldComponent.clean(\n this._text,\n this.maximumFractionDigits,\n this.min,\n this.max,\n ),\n );\n }\n}\n\nexport namespace NumberFieldComponent {\n export const Alignments = ['left', 'center', 'right'] as const;\n export type Alignment = (typeof Alignments)[number];\n\n export function clean(\n v: string | null,\n maximumFractionDigits: number,\n min: number,\n max: number,\n ): number | null {\n function digitsOnly(str: string): string {\n return str.replace(/\\D/g, '');\n }\n\n if (!v) return null;\n const decimalPointIdx = v.indexOf('.');\n const signIdx = v.indexOf('-');\n const cleanedString: string =\n (signIdx > -1 ? '-' : '') +\n (decimalPointIdx > -1\n ? digitsOnly(v.substring(0, decimalPointIdx)) +\n '.' +\n digitsOnly(v.substring(decimalPointIdx + 1))\n : digitsOnly(v));\n if (\n cleanedString === '.' ||\n cleanedString === '-' ||\n cleanedString === '-.'\n ) {\n return null;\n }\n const cleaned = Number(\n Number(cleanedString).toFixed(maximumFractionDigits),\n );\n return Math.max(min, Math.min(max, cleaned));\n }\n\n export function format(\n v: string | null,\n minimumFractionDigits: number,\n maximumFractionDigits: number,\n min: number,\n max: number,\n ): string {\n const cleaned = clean(v, maximumFractionDigits, min, max);\n if (cleaned === null) return '';\n return new Intl.NumberFormat('en-US', {\n minimumFractionDigits,\n maximumFractionDigits,\n }).format(cleaned);\n }\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <input\n #input\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n type=\"text\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [value]=\"text\"\n [attr.aria-label]=\"label || null\"\n (input)=\"text = input.value\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [style.textAlign]=\"align\"\n [riv-auto-focus]=\"autoFocus\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n (blur)=\"inputBlur()\"\n />\n</riv-input-label>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { NumberFieldComponent } from '../number-field/number-field.component';\n\n@Component({\n selector: 'riv-currency-field',\n templateUrl: './currency-field.component.html',\n styleUrls: ['./currency-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CurrencyFieldComponent extends NumberFieldComponent {\n @Input()\n override placeholder: string = '0.00';\n\n @Input()\n override minimumFractionDigits: number = 2;\n\n @Input()\n override maximumFractionDigits: number = 2;\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <span\n class=\"prefix\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n >$</span\n >\n <input\n #input\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n type=\"text\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [value]=\"text\"\n [attr.aria-label]=\"label || null\"\n (input)=\"text = input.value\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [style.textAlign]=\"align\"\n [riv-auto-focus]=\"autoFocus\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n (blur)=\"inputBlur()\"\n />\n</riv-input-label>\n","import { BehaviorSubject } from 'rxjs';\n\n/**\n * A BehaviorSubject backed by localStorage.\n */\nexport class LocalStorage<\n T extends LocalStorage.Serializable,\n> extends BehaviorSubject<T> {\n constructor(private readonly key: string, defaultValue: T) {\n const rawValue = localStorage.getItem(key);\n const value = rawValue ? JSON.parse(rawValue) : undefined;\n super(value ?? defaultValue);\n }\n\n override next(value: T) {\n localStorage.setItem(this.key, JSON.stringify(value));\n super.next(value);\n }\n}\n\nexport namespace LocalStorage {\n export type Serializable =\n | string\n | number\n | boolean\n | null\n | { [property: string]: Serializable }\n | Serializable[];\n}\n","/**\n * Subset of callout anchored positions used by riv-select and riv-simple-select.\n * Omits side positions from the full CalloutComponent.AnchoredPositions list.\n */\nexport const defaultSelectAllowedCalloutPositions = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left',\n] as const;\n","import Fuse, {\n FuseResult,\n FuseResultMatch,\n IFuseOptions,\n RangeTuple,\n} from 'fuse.js';\nimport { defaultsDeep, flattenDeep, isNumber, sortBy } from 'lodash';\nimport {\n connectable,\n Connectable,\n map,\n merge,\n Observable,\n ReplaySubject,\n scan,\n startWith,\n Subject,\n} from 'rxjs';\nimport { DeepPartial } from 'utility-types';\nimport { NumberPipe } from '../../format/pipes/number.pipe';\nimport { HighlightComponent } from '../../visualization/highlight/highlight.component';\n\nexport namespace RivSelect {\n /////////////\n // Options //\n /////////////\n\n /**\n * ┌─────────────────────-------------------───┐\n * │ BaseOption │\n * │ │\n * │ The core data required for each option │\n * │ (such as id and title). │\n * ├──────────────────────-------------------──┤\n * │ Option (BaseOption + children) │\n * │ │\n * │ Provides recursive type safety to the │\n * │ type safety to the BaseOption. │\n * └─------------------┬-------────────────────┘\n * |\n * ┌───────────────────▼───────────────────────┐\n * │ SourceOption (Option + search highlights) │\n * │ │\n * │ Adds search highlights to the Option and │\n * │ is the return type for the option Source │\n * │ (data fetcher) function. │\n * └───────────────────┬───────────────────────┘\n * |\n * ┌───────────────────▼───────────────────────┐\n * │ FullOption (SourceOption + UI state) │\n * │ │\n * │ Augments the SourceOption with all of the │\n * │ UI information from other parts of the │\n * │ state, such as selection status, whether │\n * │ or not the node is expanded, etc. │\n * └───────────────────────────────────────────┘\n *\n * Note that the usages of Omit<...> in this section are not required, but\n * do help in-editor type hints to be more clear and direct.\n */\n\n export type BaseOption = {\n id: string | number;\n title: string;\n subtitle?: string;\n help?: string;\n count?: number;\n disabled?: boolean;\n disabledExplanation?: string;\n };\n export type Option<O extends BaseOption = BaseOption> = O & {\n children?: Option<O>[];\n };\n\n export type SourceOption<O extends BaseOption> = Omit<\n Option<O>,\n 'children'\n > & {\n titleHighlightIndices?: HighlightComponent.HighlightIndices[];\n subtitleHighlightIndices?: HighlightComponent.HighlightIndices[];\n children?: SourceOption<O>[];\n };\n\n export type MultiSelectionState = boolean | 'indeterminate';\n\n export type FullOption<O extends BaseOption> = Omit<\n SourceOption<O>,\n 'children'\n > & {\n selected: MultiSelectionState;\n expanded: boolean;\n selectable: boolean;\n expandable: boolean;\n children?: FullOption<O>[];\n };\n\n ///////////////////\n // Option groups //\n ///////////////////\n\n /**\n * The relationships between OptionGroup, SourceOptionGroup, and\n * FullOptionGroup is analogous to the option types above.\n *\n * As with before, the use of Omit<...> is not required but helpful.\n */\n\n export type OptionGroup<O extends BaseOption> = {\n header?: string;\n /** Info icon + tooltip shown beside the header. No-op without a header. */\n help?: string;\n options: Option<O>[];\n };\n\n export type SourceOptionGroup<O extends BaseOption> = Omit<\n OptionGroup<O>,\n 'options'\n > & {\n options: SourceOption<O>[];\n };\n\n export type FullOptionGroup<O extends BaseOption> = Omit<\n SourceOptionGroup<O>,\n 'options'\n > & {\n options: FullOption<O>[];\n };\n\n /**\n * The OptionSet class provides Set-like functionality, but uniqueness is\n * determined by the option's ID rather than the object reference.\n */\n export class OptionSet<O extends BaseOption> extends Set<SourceOption<O>> {\n // Parallel id → option map so has()/add()/delete() are O(1) instead of\n // spreading the Set and linear-scanning it. Rebuilding an O(N²) lookup\n // for a 16k-option selection was the primary cause of the multi-minute\n // freeze that surfaced RVT-25383's tree-select scale problem.\n private readonly byId = new Map<O['id'], SourceOption<O>>();\n\n constructor(values?: Iterable<SourceOption<O>> | null) {\n super();\n if (values) {\n for (const value of values) {\n this.add(value);\n }\n }\n }\n\n override has(option: SourceOption<O> | FullOption<O>) {\n return this.byId.has(option.id);\n }\n\n override add(option: SourceOption<O>) {\n const existing = this.byId.get(option.id);\n if (existing === option) {\n // Same object reference — nothing to update. Ancestor re-adds\n // during a selection snapshot hit this path repeatedly, so keeping\n // it O(1) is what prevents the tree-select N² blow-up seen in\n // RVT-25470.\n return this;\n }\n if (existing !== undefined) {\n // Different reference, same id — swap the stored ref while\n // preserving Set insertion order. The rebuild is O(N), but this\n // path is rare in practice (the hot ancestor-snapshot loop takes\n // the identity fast-path above).\n const items = [...this].map(o => (o.id === option.id ? option : o));\n this.byId.set(option.id, option);\n super.clear();\n for (const item of items) super.add(item);\n } else {\n this.byId.set(option.id, option);\n super.add(option);\n }\n return this;\n }\n\n override delete(option: SourceOption<O>) {\n const existing = this.byId.get(option.id);\n if (existing) {\n this.byId.delete(option.id);\n super.delete(existing);\n return true;\n } else {\n return false;\n }\n }\n\n override clear() {\n this.byId.clear();\n super.clear();\n }\n }\n\n ///////////\n // State //\n ///////////\n\n /**\n * The CoreState provides all of the foundational pieces of state required\n * for a working component. FullState is a pure derivation of CoreState plus\n * the configuration options, and provides conveniences for rendering the\n * components. Actions and the core state are passed to the reducer to\n * produce new CoreStates (which are then used to calculate new FullStates).\n *\n * ┌──────┐\n * │ UI ◄────────┐\n * └──┬───┘ │\n * │ │\n * ┌──▼────────┐ │\n * │ Actions │ │\n * └──┬────────┘ │\n * │ │\n * ┌──▼────────────┴─┐\n * │ State reducer │\n * └─────────────────┘\n */\n\n export type OrderBy = 'title' | 'count' | 'source';\n\n const MIN_OPTIONS_FOR_CONTROLS = 5;\n\n const DEFAULT_DISPLAY_LIMIT = 100;\n\n export type CoreState<O extends BaseOption> = {\n query: {\n search: string;\n order: OrderBy;\n };\n load: {\n loading: boolean;\n error: unknown | null;\n };\n sourceOptionGroups: SourceOptionGroup<O>[];\n /**\n * Stores the unfiltered original option groups when search filtering is active.\n * Used by `allowSelectNonLeafDuringSearch` to select all children of a parent,\n * including those not visible in the filtered search results.\n */\n originalOptionGroups: SourceOptionGroup<O>[];\n selection: {\n selected: OptionSet<O>;\n };\n display: {\n placeholder: string;\n open: boolean;\n expandedOptions: Set<O['id']>;\n };\n };\n\n export type FullState<O extends BaseOption> = CoreState<O> & {\n query: {\n showSearch: boolean;\n searchPlaceholder: string;\n showOrder: boolean;\n };\n fullOptionGroups: FullOptionGroup<O>[];\n selection: {\n allowMultiSelect: boolean;\n allowSelectAll: boolean;\n visibleSelectionState: MultiSelectionState;\n };\n display: {\n formattedSelectedOptions: string;\n zeroStateMessage: string | null;\n dividers: boolean;\n inline: boolean;\n maxHeight: string | null;\n maxWidth: string | null;\n minHeight: string | null;\n minWidth: string | null;\n displayLimitMessage: string | null;\n showSingleSelected: boolean;\n pillCount: number;\n };\n };\n\n /////////////\n // Actions //\n /////////////\n\n export type Action<O extends BaseOption> =\n | { type: 'load' }\n | { type: 'openChange'; open: boolean }\n | { type: 'searchChange'; payload: string }\n | { type: 'orderChange'; payload: OrderBy }\n | {\n type: 'selectionChange';\n payload: CoreState<O>['selection'];\n }\n | {\n type: 'toggleOptionSelected';\n id: O['id'];\n }\n | {\n type: 'setSelectedOption';\n id: O['id'];\n }\n | {\n type: 'visibleSelectedChange';\n }\n | {\n type: 'toggleOptionExpanded';\n id: O['id'];\n };\n\n type InternalAction<O extends BaseOption> =\n | {\n type: 'loadComplete';\n data: SourceOptionGroup<O>[];\n /** Original unfiltered data, provided when search is active */\n originalData?: SourceOptionGroup<O>[];\n }\n | { type: 'loadError'; error: unknown };\n\n ////////////\n // Source //\n ////////////\n\n /**\n * The Source's job is to fetch options (based on the current state) which\n * then blend with the other pieces of state to produce the FullState.\n */\n\n export type SourceResult<O extends BaseOption> =\n | SourceOptionGroup<O>[]\n | {\n data: SourceOptionGroup<O>[];\n /**\n * Original unfiltered data, provided when search filtering is active.\n * Used by `allowSelectNonLeafDuringSearch` to select all children of\n * a parent, including those not visible in the filtered search results.\n */\n originalData?: SourceOptionGroup<O>[];\n };\n\n export type Source<O extends BaseOption> = (\n query: CoreState<O>['query'],\n mostRecentAction: Action<O>,\n ) => Promise<SourceResult<O>>;\n\n /////////////\n // Manager //\n /////////////\n\n export type Manager<O extends BaseOption> = {\n actions: Subject<Action<O>>;\n state: Connectable<FullState<O>>;\n };\n\n export type ManagerOptions<O extends BaseOption> = {\n initialState?: DeepPartial<CoreState<O>>;\n allowMultiSelect?: boolean;\n allowSearch?: boolean;\n allowSelectAll?: boolean;\n allowOrder?: boolean;\n searchPlaceholder?: string;\n dividers?: boolean;\n inline?: boolean;\n maxHeight?: string | null;\n maxWidth?: string | null;\n minHeight?: string | null;\n minWidth?: string | null;\n displayLimit?: number;\n selectedOptionLimit?: number;\n showSingleSelected?: boolean;\n useTopLevelOptionsForDisplay?: boolean;\n getCustomOptionDisplay?: (selectedOptions: SourceOption<O>[]) => string;\n /**\n * When true, non-leaf nodes (parents) remain selectable during search,\n * and selecting them will select/deselect ALL children from the original\n * dataset, not just the visible filtered results.\n *\n * Default: false (current behavior - parents are not selectable during search)\n */\n allowSelectNonLeafDuringSearch?: boolean;\n /**\n * When true, options that were selected when the select was opened are\n * sorted to the top of their sibling lists. Set to false to preserve the\n * natural (or chosen OrderBy) order instead.\n *\n * Default: the value of allowMultiSelect\n */\n sortSelectedToTop?: boolean;\n };\n\n export function createManager<O extends BaseOption>(\n source: Source<O>,\n options?: ManagerOptions<O>,\n ): Manager<O> {\n const defaultState: CoreState<O> = {\n query: {\n search: '',\n order: 'title',\n },\n load: {\n loading: false,\n error: null,\n },\n sourceOptionGroups: [],\n originalOptionGroups: [],\n selection: {\n selected: new OptionSet(),\n },\n display: {\n placeholder: 'Select',\n open: false,\n expandedOptions: new Set(),\n },\n };\n const defaultedInitialState: CoreState<O> = defaultsDeep(\n {},\n options?.initialState,\n defaultState,\n );\n\n const actions: Subject<Action<O>> = new Subject();\n const internalActions: Subject<InternalAction<O>> = new Subject();\n\n const coreStateWithSelectionSnapshot: Observable<\n [CoreState<O>, OptionSet<O>]\n > = merge(actions, internalActions).pipe(\n scan<Action<O> | InternalAction<O>, [CoreState<O>, OptionSet<O>]>(\n ([state, snapshot], action) => {\n const newState = sideEffects(\n reduce(state, action, options),\n action,\n source,\n internalActions,\n );\n\n const newSelectionSnapshot =\n (action.type === 'openChange' && action.open) ||\n (action.type === 'loadComplete' &&\n (newState.display.open || options?.inline))\n ? createSelectionSnapshotWithAncestors(newState)\n : snapshot;\n\n return [newState, newSelectionSnapshot];\n },\n [defaultedInitialState, new OptionSet<O>()],\n ),\n startWith<[CoreState<O>, OptionSet<O>]>([\n defaultedInitialState,\n new OptionSet<O>(),\n ]),\n );\n\n const state: Connectable<FullState<O>> = connectable(\n coreStateWithSelectionSnapshot.pipe(\n map(([s, selectionAtOpen]) => {\n const allOptionGroups: FullOptionGroup<O>[] =\n s.sourceOptionGroups.map(optionGroup => {\n return {\n ...optionGroup,\n options: optionGroup.options.map(option =>\n augmentOptionToFullOption(s, option, options),\n ),\n };\n });\n\n const topLevelOptions = getTopLevelOptions(allOptionGroups);\n\n const sortedOptionGroups =\n options?.sortSelectedToTop ?? options?.allowMultiSelect\n ? sortOptionsByPreviouslySelectedState(\n allOptionGroups,\n selectionAtOpen,\n )\n : allOptionGroups;\n\n const displayLimit = options?.displayLimit ?? DEFAULT_DISPLAY_LIMIT;\n const displayLimitedOptionGroups = applyDisplayLimit(\n sortedOptionGroups,\n displayLimit,\n );\n const fullOptionGroups = applySelectedOptionLimit(\n s,\n displayLimitedOptionGroups,\n topLevelOptions,\n options,\n );\n\n return {\n ...s,\n query: {\n ...s.query,\n showSearch:\n !!s.query.search ||\n (!!options?.allowSearch &&\n countAllOptions(allOptionGroups) >\n MIN_OPTIONS_FOR_CONTROLS) ||\n countAllOptions(allOptionGroups) > displayLimit,\n searchPlaceholder: options?.searchPlaceholder ?? 'Search',\n showOrder:\n !!options?.allowOrder &&\n !s.query.search &&\n countAllOptions(allOptionGroups) > MIN_OPTIONS_FOR_CONTROLS,\n },\n fullOptionGroups,\n selection: {\n ...s.selection,\n allowMultiSelect: !!options?.allowMultiSelect,\n allowSelectAll:\n !!options?.allowSelectAll &&\n options?.selectedOptionLimit == undefined,\n visibleSelectionState:\n getParentMultiSelectionState(topLevelOptions),\n },\n display: {\n ...s.display,\n formattedSelectedOptions: getFormattedOptionsForDisplay(\n s,\n topLevelOptions,\n options,\n ),\n zeroStateMessage: getZeroStateMessage(s),\n dividers: !!options?.dividers,\n inline: !!options?.inline,\n maxHeight: options?.maxHeight ?? null,\n maxWidth: options?.maxWidth ?? null,\n minHeight: options?.minHeight ?? null,\n minWidth: options?.minWidth ?? null,\n displayLimitMessage: getDisplayLimitMessage(\n countVisibleOptions(fullOptionGroups, !!s.query.search),\n countVisibleOptions(allOptionGroups, !!s.query.search),\n s.query,\n ),\n showSingleSelected: !!options?.showSingleSelected,\n pillCount: getPillCountForDisplay(s, topLevelOptions, options),\n },\n };\n }),\n ),\n {\n connector: () => new ReplaySubject(1),\n resetOnDisconnect: false,\n },\n );\n state.connect();\n\n // Load the options immediately for selects that are displayed inline.\n if (options?.inline) actions.next({ type: 'load' });\n\n return { actions, state };\n }\n\n export type InMemoryManagerOptions<O extends BaseOption> =\n ManagerOptions<O> & {\n fuseOptions?: IFuseOptions<O>;\n };\n\n export function createInMemoryManager<O extends BaseOption>(\n fetchDataset: () => Promise<OptionGroup<O>[]> | OptionGroup<O>[],\n options?: InMemoryManagerOptions<O>,\n ): Manager<O> {\n let data: OptionGroup<O>[];\n let fuse: Fuse<O>;\n let exactMatch: boolean = false;\n let parents: Map<O['id'], O['id']>;\n let children: Map<O['id'], O['id'][]>;\n\n const source: Source<O> = async (query, mostRecentAction) => {\n /*\n Re-fetch the options on the load action, and rebuild the state\n derived from the option data.\n */\n if (\n mostRecentAction.type === 'load' ||\n mostRecentAction.type === 'openChange'\n ) {\n data = await fetchDataset();\n const topLevelOptions = getTopLevelOptions(data);\n\n fuse = new Fuse(flattenOptions(topLevelOptions, false), {\n threshold: 0.2,\n keys: ['title'],\n includeScore: true,\n includeMatches: true,\n ...options?.fuseOptions,\n });\n\n exactMatch = options?.fuseOptions?.threshold == 0;\n [parents, children] = getRelationshipMaps(topLevelOptions);\n }\n\n // Leading/trailing whitespace shouldn't affect fuzzy matching (Fuse\n // scores the pattern's length against the text's, so a stray space\n // changes results in surprising ways); a search string of only\n // whitespace is treated the same as no search.\n const search = query.search.trim();\n\n /*\n If the user is not searching options, return the full set of options\n sorted appropriately.\n */\n if (!search) {\n /*\n The `source` order property allows for opting out of automatic\n sorting, returning the data in its natural input order.\n */\n if (query.order === 'source') return data;\n\n /*\n Sort the options by title and subtitle.\n */\n if (query.order === 'title') {\n function sortByTitle(options: Option<O>[]): Option<O>[] {\n return sortBy(options, [\n (o: Option<O>) => o.title.toLowerCase(),\n (o: Option<O>) => o.subtitle?.toLowerCase() ?? '',\n ]).map(option => ({\n ...option,\n children: option.children?.length\n ? sortByTitle(option.children)\n : undefined,\n }));\n }\n\n return data.map(group => ({\n ...group,\n options: sortByTitle(group.options),\n }));\n }\n\n /*\n Sort the options by count, then by title, then by subtitle.\n */\n if (query.order === 'count') {\n function sortByCount(options: Option<O>[]): Option<O>[] {\n return sortBy(options, [\n (o: Option<O>) => (isNumber(o.count) ? -o.count : Infinity),\n (o: Option<O>) => o.title.toLowerCase(),\n (o: Option<O>) => o.subtitle?.toLowerCase() ?? '',\n ]).map(option => ({\n ...option,\n children: option.children?.length\n ? sortByCount(option.children)\n : undefined,\n }));\n }\n\n return data.map(group => ({\n ...group,\n options: sortByCount(group.options),\n }));\n }\n }\n\n /*\n Execute the search with fuse. Once we have the search match data,\n rebuild just as much of the tree as is needed to render the search\n results. Specifically, any match will need all of its ancestors (so\n that matched leaf nodes are shown nested under their ancestors) and all\n of its children (because a matching parent means that all of its\n descendants match too, per the design specification), whether they\n themselves matched or not.\n */\n const matchedOptions: FuseResult<O>[] = fuse.search(search);\n const matchedIds: Set<O['id']> = new Set(\n matchedOptions.map(result => result.item.id),\n );\n\n const matchAncestors: Set<O['id']> = new Set();\n function collectAncestors(ids: O['id'][]) {\n for (const id of ids) {\n const parentId = parents.get(id);\n if (parentId) {\n matchAncestors.add(parentId);\n collectAncestors([parentId]);\n }\n }\n }\n collectAncestors([...matchedIds]);\n\n const matchDescendants: Set<O['id']> = new Set();\n function collectDescendants(ids: O['id'][]) {\n for (const id of ids) {\n const childrenIds = children.get(id);\n if (childrenIds) {\n for (const child of childrenIds) {\n matchDescendants.add(child);\n }\n collectDescendants(childrenIds);\n }\n }\n }\n collectDescendants([...matchedIds]);\n\n /*\n Next, we'll combine all the matched IDs with their direct ancestors and\n descandants, and filter the original data set down to just these\n options.\n */\n const filteredIds: Set<O['id']> = new Set([\n ...matchedIds,\n ...matchAncestors,\n ...matchDescendants,\n ]);\n\n function filterOptions(options: Option<O>[]): Option<O>[] {\n const filteredOptions: Option<O>[] = [];\n for (const option of options) {\n if (filteredIds.has(option.id)) {\n filteredOptions.push({\n ...option,\n children: option.children?.length\n ? filterOptions(option.children)\n : undefined,\n });\n }\n }\n return filteredOptions;\n }\n const filteredOptions = filterOptions(getTopLevelOptions(data));\n\n /*\n At this point, we have an array of distinct trees (top-level options),\n filtered down to only the options matching the search query. Note that\n we don't care about section headers when searching since results should\n be ordered by relevance. To calculate the order of these trees, we'll\n take the total match scores for options found in the tree, divided by\n the count of matches in the tree (the best average match score).\n */\n\n const scoreMap: Map<O['id'], number> = new Map(\n matchedOptions.map(result => [result.item.id, result.score ?? 0]),\n );\n const ordered = sortBy(filteredOptions, (option: Option<O>): number => {\n function calculateScore(option: Option<O>): number {\n return (\n (scoreMap.get(option.id) ?? 0) +\n (option.children ?? []).reduce(\n (score, child) => score + calculateScore(child),\n 0,\n )\n );\n }\n function calculateCount(option: Option<O>): number {\n return (\n 1 +\n (option.children ?? []).reduce(\n (count, child) => count + calculateCount(child),\n 0,\n )\n );\n }\n const totalScore = calculateScore(option);\n const totalCount = calculateCount(option);\n return totalScore / totalCount;\n });\n\n /*\n Finally, we'll add highlight indices to the matches so that they can be\n displayed to the user.\n */\n\n type Highlights = {\n titleHighlightIndices?: HighlightComponent.HighlightIndices[];\n subtitleHighlightIndices?: HighlightComponent.HighlightIndices[];\n };\n const highlightMap: Map<O['id'], Highlights> = new Map(\n matchedOptions.map(result => {\n const highlights: Highlights = {};\n for (const match of result.matches ?? []) {\n // filter out inexact matches\n if (exactMatch && match.value != null) {\n match.indices = match.indices.filter(\n isFuseMatchExact(match, search),\n );\n }\n if (match.key === 'title') {\n highlights.titleHighlightIndices = [...match.indices];\n }\n if (match.key === 'subtitle') {\n highlights.subtitleHighlightIndices = [...match.indices];\n }\n }\n return [result.item.id, highlights];\n }),\n );\n function addHighlightsToOption(options: Option<O>[]): SourceOption<O>[] {\n return options.map(option => ({\n ...option,\n ...highlightMap.get(option.id),\n ...(option.children?.length\n ? { children: addHighlightsToOption(option.children) }\n : null),\n }));\n }\n\n return {\n data: [{ options: addHighlightsToOption(ordered) }],\n originalData: data,\n };\n };\n\n return createManager(source, options);\n }\n\n export function isFuseMatchExact(\n match: FuseResultMatch,\n search: string,\n ): (\n value: RangeTuple,\n index: number,\n array: readonly RangeTuple[],\n ) => boolean {\n return matchedIndices => {\n const matchedValue = match\n .value!.slice(matchedIndices[0], matchedIndices[1] + 1)\n .toLowerCase();\n // fuse is weird with it's matches. For a text of \"planning\" and a search string of \"plan\"\n // the matched value will be \"plann\" with the extra 'n' because of its fuzzy matching.\n // so just make sure the matched value at least starts with the search string.\n // it's extra weird because for a text of \"analytics\" and a search string of \"nalytics\",\n // the matched value will be \"analytics\". So we just need to make sure the the matched value\n // includes the search string because there might be extra stuff on the front or the end.\n return matchedValue.includes(search.toLowerCase());\n };\n }\n\n //////////////////////////////////\n // State reducer (with helpers) //\n //////////////////////////////////\n\n function createSelectionSnapshotWithAncestors<O extends BaseOption>(\n state: CoreState<O>,\n ): OptionSet<O> {\n const snapshot = new OptionSet(state.selection.selected);\n const topLevelOptions = getTopLevelOptions(state.sourceOptionGroups);\n const [parents] = getRelationshipMaps(topLevelOptions);\n\n // Sibling leaves share ancestors, so once we've walked up through a\n // given parent id we can stop — anything above it has already been\n // added by a previous iteration. Without this short-circuit the loop\n // re-runs findOption (which is a full tree walk) once per shared\n // ancestor edge, which was the #2 hotspot behind OptionSet.add in\n // RVT-25470's profile.\n const visited = new Set<O['id']>();\n for (const selectedOption of state.selection.selected) {\n let parentId = parents.get(selectedOption.id);\n while (parentId !== undefined && !visited.has(parentId)) {\n visited.add(parentId);\n const parentOption = findOption(topLevelOptions, parentId);\n if (parentOption) {\n snapshot.add(parentOption);\n }\n parentId = parents.get(parentId);\n }\n }\n\n return snapshot;\n }\n\n function getDisplayLimitMessage<O extends BaseOption>(\n displayedOptionCount: number,\n totalOptionCount: number,\n query: CoreState<O>['query'],\n ): string | null {\n if (displayedOptionCount === totalOptionCount) return null;\n const rivNumber = new NumberPipe();\n const displayed = rivNumber.transform(displayedOptionCount);\n const total = rivNumber.transform(totalOptionCount);\n const start = `Showing ${displayed} of ${total} options`;\n return query.search ? `${start} matching \"${query.search}\"` : start;\n }\n\n function countVisibleOptions<O extends BaseOption>(\n optionGroups: FullOptionGroup<O>[],\n leafOnly: boolean,\n ): number {\n function count(options: FullOption<O>[]): number {\n return options.reduce((acc, option) => {\n if (option.expanded && option.children?.length) {\n return acc + (leafOnly ? 0 : 1) + count(option.children);\n }\n return acc + 1;\n }, 0);\n }\n\n return optionGroups.reduce(\n (total, group) => total + count(group.options),\n 0,\n );\n }\n\n function countAllOptions<O extends BaseOption>(\n optionGroups: FullOptionGroup<O>[],\n ): number {\n function count(options: FullOption<O>[]): number {\n return options.reduce((acc, option) => {\n if (option.children?.length) {\n return acc + 1 + count(option.children);\n }\n return acc + 1;\n }, 0);\n }\n\n return optionGroups.reduce(\n (total, group) => total + count(group.options),\n 0,\n );\n }\n\n function applyDisplayLimit<O extends BaseOption>(\n optionGroups: FullOptionGroup<O>[],\n displayLimit: number,\n ): FullOptionGroup<O>[] {\n type DisplayLimitOptions = [FullOption<O>[], number];\n function filterWithLimit(\n options: FullOption<O>[],\n remaining: number,\n ): DisplayLimitOptions {\n let left = remaining;\n const visibleOptions: FullOption<O>[] = [];\n for (const option of options) {\n if (left <= 0) break;\n\n if (option.expanded && option.children?.length) {\n const [childOptions, childRemaining] = filterWithLimit(\n option.children,\n left - 1,\n );\n visibleOptions.push({\n ...option,\n children: childOptions,\n });\n left = childRemaining;\n } else {\n visibleOptions.push(option);\n left--;\n }\n }\n return [visibleOptions, left];\n }\n\n type DisplayLimitGroups = [FullOptionGroup<O>[], number];\n const startingValue: DisplayLimitGroups = [[], displayLimit];\n const [resolvedGroups] = optionGroups.reduce<DisplayLimitGroups>(\n ([groups, remaining], group) => {\n const [options, leftAfter] = filterWithLimit(group.options, remaining);\n if (options.length) {\n return [[...groups, { ...group, options }], leftAfter];\n } else {\n return [groups, remaining];\n }\n },\n startingValue,\n );\n\n return resolvedGroups;\n }\n\n /*\n Sort options so that previously selected options (from prior sessions)\n appear at the top of their peer/sibling lists.\n */\n function sortOptionsByPreviouslySelectedState<O extends BaseOption>(\n optionGroups: FullOptionGroup<O>[],\n selectionAtOpen: OptionSet<O>,\n ): FullOptionGroup<O>[] {\n function sortOptions(options: FullOption<O>[]): FullOption<O>[] {\n return sortBy(options, option => !selectionAtOpen.has(option)).map(\n option => {\n if (option.children) {\n return {\n ...option,\n children: sortOptions(option.children),\n };\n } else return option;\n },\n );\n }\n\n return optionGroups.map(group => ({\n ...group,\n options: sortOptions(group.options),\n }));\n }\n\n /*\n If we are restricting how many options are selected to a specific limit,\n when we are at that limit, disable all options not currently selected.\n */\n function applySelectedOptionLimit<O extends BaseOption>(\n state: CoreState<O>,\n optionGroups: FullOptionGroup<O>[],\n topLevelOptions: FullOption<O>[],\n options?: ManagerOptions<O>,\n ): FullOptionGroup<O>[] {\n if (options?.selectedOptionLimit === undefined) {\n return optionGroups;\n }\n\n // When useTopLevelOptionsForDisplay is true and search is active, count\n // selected top-level options from the original (unfiltered) data to ensure\n // already-selected options that don't match the search are still counted.\n const useOriginalForCounting =\n options?.useTopLevelOptionsForDisplay &&\n state.query.search &&\n state.originalOptionGroups.length > 0;\n\n const topOptionsForCounting = useOriginalForCounting\n ? getTopLevelOptions(state.originalOptionGroups).map(option =>\n augmentOptionToFullOption(state, option, options),\n )\n : topLevelOptions;\n\n const selectedOrIndeterminateTopOptions = topOptionsForCounting.filter(\n option => option.selected != false,\n );\n const numSelectedOptions: number = options?.useTopLevelOptionsForDisplay\n ? selectedOrIndeterminateTopOptions.length\n : state.selection.selected.size;\n\n const selectedOptionLimit: number = options.selectedOptionLimit;\n\n // If we have less items selected than the limit, business as usual.\n if (numSelectedOptions < selectedOptionLimit) {\n return optionGroups;\n }\n\n // If we have equal items selected to the limit (or more), prevent users from selecting more options.\n function disableUnselectedItems(\n currentOptions: FullOption<O>[],\n optionsAreChildrenOfSelectedGroup: boolean,\n ): FullOption<O>[] {\n const updatedItems: FullOption<O>[] = [];\n for (const option of currentOptions) {\n const isDisabledOrUnselected: boolean =\n !!option.disabled || (option.selectable && option.selected == false);\n\n const isCurrentOptionSelected: boolean =\n option.selectable && option.selected != false;\n const isCurrentOrParentOptionSelected: boolean =\n isCurrentOptionSelected || optionsAreChildrenOfSelectedGroup;\n\n const forceEnabledBasedOnParent: boolean =\n !!options?.useTopLevelOptionsForDisplay &&\n optionsAreChildrenOfSelectedGroup;\n const markDisabled: boolean =\n isDisabledOrUnselected && !forceEnabledBasedOnParent;\n\n if (option.children?.length) {\n const childOptions = disableUnselectedItems(\n option.children,\n isCurrentOrParentOptionSelected,\n );\n updatedItems.push({\n ...option,\n disabled: !!markDisabled,\n children: childOptions,\n });\n } else {\n updatedItems.push({\n ...option,\n disabled: !!markDisabled,\n });\n }\n }\n return updatedItems;\n }\n\n const groupsAfterLimit: FullOptionGroup<O>[] = [];\n for (const currentGroup of optionGroups) {\n groupsAfterLimit.push({\n ...currentGroup,\n options: disableUnselectedItems(currentGroup.options, false),\n });\n }\n\n return groupsAfterLimit;\n }\n\n function getRelationshipMaps<O extends BaseOption>(\n options: Option<O>[],\n ): [Map<O['id'], O['id']>, Map<O['id'], O['id'][]>] {\n const parents = new Map();\n function buildParentsMap(options: Option<O>[], parent?: Option<O>): void {\n for (const option of options) {\n if (parent) {\n parents.set(option.id, parent.id);\n }\n if (option.children?.length) {\n buildParentsMap(option.children, option);\n }\n }\n }\n buildParentsMap(options);\n\n const children = new Map();\n function buildChildrenMap(options: Option<O>[]): void {\n for (const option of options) {\n if (option.children?.length) {\n children.set(\n option.id,\n option.children.map(({ id }) => id),\n );\n buildChildrenMap(option.children);\n }\n }\n }\n buildChildrenMap(options);\n\n return [parents, children];\n }\n\n function getTopLevelOptions<O extends BaseOption>(\n optionGroups: FullOptionGroup<O>[],\n ): FullOption<O>[];\n function getTopLevelOptions<O extends BaseOption>(\n optionGroups: SourceOptionGroup<O>[],\n ): SourceOption<O>[];\n function getTopLevelOptions<O extends BaseOption>(\n optionGroups: OptionGroup<O>[],\n ): Option<O>[];\n function getTopLevelOptions<\n O extends BaseOption,\n G extends { options: readonly T[] },\n T = G extends FullOptionGroup<O>\n ? FullOption<O>\n : G extends SourceOptionGroup<O>\n ? SourceOption<O>\n : Option<O>,\n >(optionGroups: G[]): T[] {\n return optionGroups.reduce<T[]>(\n (options, group) => [...options, ...group.options],\n [],\n );\n }\n\n function getParentMultiSelectionState<O extends BaseOption>(\n children: FullOption<O>[],\n ): MultiSelectionState {\n if (children.every(child => child.selected === true)) return true;\n if (children.every(child => child.selected === false)) return false;\n return 'indeterminate';\n }\n\n function augmentOptionToFullOption<O extends BaseOption>(\n state: CoreState<O>,\n option: SourceOption<O>,\n managerOptions?: ManagerOptions<O>,\n ): FullOption<O> {\n if (option.children?.length) {\n const augmentedChildren = option.children.map(child =>\n augmentOptionToFullOption(state, child, managerOptions),\n );\n const selectableWhenSearching =\n managerOptions?.allowSelectNonLeafDuringSearch ?? false;\n\n // When allowSelectNonLeafDuringSearch is enabled and search is active,\n // calculate selection state from ALL original children, not just the\n // filtered ones visible in search results.\n const useOriginalForSelectionState =\n managerOptions?.allowSelectNonLeafDuringSearch &&\n state.query.search &&\n state.originalOptionGroups.length > 0;\n\n let selected: MultiSelectionState;\n if (useOriginalForSelectionState) {\n const originalOption = findOption(\n getTopLevelOptions(state.originalOptionGroups),\n option.id,\n );\n if (originalOption) {\n const allLeaves = flattenOptions([originalOption], true);\n const selectedCount = allLeaves.filter(leaf =>\n state.selection.selected.has(leaf),\n ).length;\n if (selectedCount === 0) {\n selected = false;\n } else if (selectedCount === allLeaves.length) {\n selected = true;\n } else {\n selected = 'indeterminate';\n }\n } else {\n selected = getParentMultiSelectionState(augmentedChildren);\n }\n } else {\n selected = getParentMultiSelectionState(augmentedChildren);\n }\n\n return {\n ...option,\n children: augmentedChildren,\n selected,\n expanded: state.query.search\n ? true\n : state.display.expandedOptions.has(option.id),\n selectable: !state.query.search || selectableWhenSearching,\n expandable: !state.query.search,\n };\n }\n return {\n ...option,\n children: undefined,\n selected: state.selection.selected.has(option),\n expanded: false,\n selectable: true,\n expandable: false,\n };\n }\n\n function getFormattedOptionsForDisplay<O extends BaseOption>(\n state: CoreState<O>,\n topLevelOptions: FullOption<O>[],\n options?: ManagerOptions<O>,\n ): string {\n // If we have a custom display function, use it\n if (options?.getCustomOptionDisplay) {\n return options.getCustomOptionDisplay([...state.selection.selected]);\n }\n if (options?.useTopLevelOptionsForDisplay) {\n return getTopLevelFormattedOptionsForDisplay(topLevelOptions);\n }\n // Otherwise, use the default display for options - titles separated by commas.\n return [...state.selection.selected].map(({ title }) => title).join(', ');\n }\n\n function getTopLevelFormattedOptionsForDisplay<O extends BaseOption>(\n topLevelOptions: FullOption<O>[],\n ): string {\n if (!topLevelOptions || topLevelOptions.length == 0) {\n return '';\n }\n const selectedOrIndeterminateTopOptions = topLevelOptions.filter(\n option => option.selected != false,\n );\n return selectedOrIndeterminateTopOptions\n .map(({ title }) => title)\n .join(', ');\n }\n\n function getPillCountForDisplay<O extends BaseOption>(\n state: CoreState<O>,\n topLevelOptions: FullOption<O>[],\n options?: ManagerOptions<O>,\n ): number {\n if (options?.useTopLevelOptionsForDisplay) {\n const selectedOrIndeterminateTopOptions = topLevelOptions.filter(\n option => option.selected != false,\n );\n return selectedOrIndeterminateTopOptions.length;\n }\n return state.selection.selected.size;\n }\n\n function getZeroStateMessage<O extends BaseOption>(\n state: CoreState<O>,\n ): string | null {\n if (state.sourceOptionGroups.every(group => group.options.length === 0)) {\n if (state.query.search) return 'No results found.';\n return 'No options.';\n }\n return null;\n }\n\n function findOption<O extends BaseOption>(\n options: SourceOption<O>[],\n id: O['id'],\n ): SourceOption<O> | null {\n for (const option of options) {\n if (option.id === id) return option;\n if (option.children?.length) {\n const child = findOption(option.children, id);\n if (child) return child;\n }\n }\n return null;\n }\n\n function flattenOptions<O extends BaseOption>(\n options: Option<O>[],\n leafOnly: boolean,\n ): O[] {\n return flattenDeep(\n options.map(option => {\n if (option.children?.length) {\n const descendants = option.children.map(child =>\n flattenOptions([child], leafOnly),\n );\n return leafOnly ? descendants : [option, ...descendants];\n } else {\n return [option];\n }\n }),\n );\n }\n\n function toggleSelected<O extends BaseOption>(\n state: CoreState<O>,\n id: O['id'],\n managerOptions?: ManagerOptions<O>,\n ): CoreState<O> {\n const topLevelOptions = getTopLevelOptions(state.sourceOptionGroups);\n const option = findOption(topLevelOptions, id);\n if (!option) return state;\n\n const newSelection = new OptionSet(state.selection.selected);\n\n const newValue = !(\n augmentOptionToFullOption(state, option, managerOptions).selected === true\n );\n\n // When allowSelectNonLeafDuringSearch is enabled and search is active,\n // use the original (unfiltered) data to get all children, not just\n // those visible in the filtered search results.\n const useOriginalData =\n managerOptions?.allowSelectNonLeafDuringSearch &&\n state.query.search &&\n state.originalOptionGroups.length > 0;\n\n const optionForLeaves = useOriginalData\n ? findOption(getTopLevelOptions(state.originalOptionGroups), id) ?? option\n : option;\n\n const leaves = flattenOptions([optionForLeaves], true);\n for (const leaf of leaves) {\n if (newValue) {\n newSelection.add(leaf);\n } else {\n newSelection.delete(leaf);\n }\n }\n\n return {\n ...state,\n selection: {\n selected: newSelection,\n },\n };\n }\n\n function setSelectedOption<O extends BaseOption>(\n state: CoreState<O>,\n id: O['id'],\n ): CoreState<O> {\n const topLevelOptions = getTopLevelOptions(state.sourceOptionGroups);\n const option = findOption(topLevelOptions, id);\n if (!option) return state;\n\n const newSelection = new OptionSet<O>();\n newSelection.add(option);\n\n return {\n ...state,\n selection: {\n selected: newSelection,\n },\n };\n }\n\n function toggleVisibleSelected<O extends BaseOption>(\n state: CoreState<O>,\n ): CoreState<O> {\n const leaves = flattenOptions(\n getTopLevelOptions(state.sourceOptionGroups),\n true,\n );\n const isAllSelected = leaves.every(leaf =>\n state.selection.selected.has(leaf),\n );\n const newSelection = new OptionSet(state.selection.selected);\n\n for (const leaf of leaves) {\n if (isAllSelected) newSelection.delete(leaf);\n else newSelection.add(leaf);\n }\n\n return {\n ...state,\n selection: {\n ...state.selection,\n selected: newSelection,\n },\n };\n }\n\n function toggleOptionExpanded<O extends BaseOption>(\n state: CoreState<O>,\n id: O['id'],\n ): CoreState<O> {\n const newValue = !state.display.expandedOptions.has(id);\n const newExpandedOptions = new Set(state.display.expandedOptions);\n if (newValue) newExpandedOptions.add(id);\n else newExpandedOptions.delete(id);\n return {\n ...state,\n display: {\n ...state.display,\n expandedOptions: newExpandedOptions,\n },\n };\n }\n\n function sideEffects<O extends BaseOption>(\n state: CoreState<O>,\n action: Action<O> | InternalAction<O>,\n source: Source<O>,\n internalActions: Subject<InternalAction<O>>,\n ): CoreState<O> {\n if (\n action.type === 'load' ||\n action.type === 'searchChange' ||\n action.type === 'orderChange' ||\n (action.type === 'openChange' && action.open)\n ) {\n source(state.query, action)\n .then(result => {\n const data = Array.isArray(result) ? result : result.data;\n const originalData = Array.isArray(result)\n ? undefined\n : result.originalData;\n internalActions.next({ type: 'loadComplete', data, originalData });\n })\n .catch(error => {\n // eslint-disable-next-line no-console\n console.error(error);\n internalActions.next({ type: 'loadError', error });\n });\n return {\n ...state,\n load: {\n loading: true,\n error: null,\n },\n };\n }\n return state;\n }\n\n function reduce<O extends BaseOption>(\n state: CoreState<O>,\n action: Action<O> | InternalAction<O>,\n managerOptions?: ManagerOptions<O>,\n ): CoreState<O> {\n switch (action.type) {\n case 'load':\n return state;\n case 'loadComplete':\n return {\n ...state,\n load: {\n loading: false,\n error: null,\n },\n sourceOptionGroups: action.data,\n originalOptionGroups: action.originalData ?? [],\n };\n case 'loadError':\n return {\n ...state,\n load: {\n loading: false,\n error: action.error,\n },\n };\n case 'openChange':\n return {\n ...state,\n query: {\n ...state.query,\n search: '',\n },\n display: {\n ...state.display,\n open: action.open,\n },\n };\n case 'searchChange':\n return {\n ...state,\n query: {\n ...state.query,\n search: action.payload,\n },\n };\n case 'orderChange':\n return {\n ...state,\n query: {\n ...state.query,\n order: action.payload,\n },\n };\n case 'selectionChange':\n return {\n ...state,\n selection: action.payload,\n };\n case 'toggleOptionSelected':\n return toggleSelected(state, action.id, managerOptions);\n case 'setSelectedOption':\n return setSelectedOption(state, action.id);\n case 'visibleSelectedChange':\n return toggleVisibleSelected(state);\n case 'toggleOptionExpanded':\n return toggleOptionExpanded(state, action.id);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { LoadingComponent } from '../loading/loading.component';\n\n@Component({\n selector: 'riv-loading-cover',\n templateUrl: './loading-cover.component.html',\n styleUrls: ['./loading-cover.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingCoverComponent {\n @Input()\n loading: boolean = false;\n\n @Input()\n loadingSize: LoadingComponent.Size = 40;\n\n @Input()\n zIndexOverride?: number;\n\n @Input()\n errorMessage?: string;\n}\n","<ng-content></ng-content>\n<div *ngIf=\"loading\" class=\"cover\" [style.z-index]=\"zIndexOverride ?? null\">\n <riv-loading [size]=\"loadingSize\"></riv-loading>\n</div>\n<div\n *ngIf=\"errorMessage\"\n class=\"cover\"\n [style.z-index]=\"zIndexOverride ?? null\"\n>\n <span class=\"error-icon\">🙁</span>\n <span>{{ errorMessage }}</span>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { TextFieldComponent } from '../text-field/text-field.component';\n\n@Component({\n selector: 'riv-search',\n templateUrl: './search.component.html',\n styleUrls: [\n '../text-field/text-field.component.css',\n './search.component.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchComponent extends TextFieldComponent {\n @Input()\n override placeholder: string = 'Search';\n\n @Input()\n override name: string = 'search';\n\n @Input()\n labelTemplate?: TemplateRef<void>;\n}\n","<input\n #input\n [id]=\"name\"\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [type]=\"type\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [value]=\"text\"\n (input)=\"text = input.value\"\n [class.large]=\"size === 'large'\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [riv-auto-focus]=\"autoFocus\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n (blur)=\"inputBlur()\"\n/>\n<div class=\"label\">\n <label [for]=\"name\" [class.close]=\"!!text\" (click)=\"text = ''\">\n <riv-icon\n *ngIf=\"!labelTemplate\"\n [class.clickable]=\"!!text\"\n [name]=\"!!text ? 'X' : 'Search'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"labelTemplate && !!text\"\n class=\"clickable\"\n [name]=\"'X'\"\n [size]=\"20\"\n ></riv-icon>\n </label>\n <ng-container *ngIf=\"labelTemplate\" class=\"search-columns\"\n ><ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template\n ></ng-container>\n</div>\n","import { HighlightComponent } from './highlight.component';\n\nexport function chunks(\n text: string,\n indices: HighlightComponent.HighlightIndices[],\n): HighlightComponent.Chunk[] {\n let lastEnd = 0;\n const chunks = [];\n for (const [start, end] of indices) {\n chunks.push(\n {\n highlight: false,\n text: text.substring(lastEnd, start),\n },\n {\n highlight: true,\n text: text.substring(start, end + 1),\n },\n );\n lastEnd = end + 1;\n }\n chunks.push({\n highlight: false,\n text: text?.substring(lastEnd, text.length),\n });\n return chunks.filter(chunk => chunk.text);\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { chunks } from './highlight.helpers';\n\n@Component({\n selector: 'riv-highlight',\n templateUrl: './highlight.component.html',\n styleUrls: ['./highlight.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HighlightComponent {\n @Input()\n text: string = '';\n\n @Input()\n indices: HighlightComponent.HighlightIndices[] = [];\n\n getChunks(): HighlightComponent.Chunk[] {\n return chunks(this.text, this.indices);\n }\n}\n\nexport namespace HighlightComponent {\n export type HighlightIndices = [number, number];\n\n export type Chunk = {\n highlight: boolean;\n text: string;\n };\n}\n","<span *ngFor=\"let chunk of getChunks()\" [class.highlight]=\"chunk.highlight\">{{\n chunk.text\n}}</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { RivSelect } from '../state';\n\n@Component({\n selector: 'riv-select-node',\n templateUrl: './select-node.component.html',\n styleUrls: ['./select-node.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectNodeComponent<O extends RivSelect.BaseOption> {\n @Input()\n mode?: SelectNodeComponent.Mode;\n\n @Input()\n node?: RivSelect.FullOption<O>;\n\n @Input()\n showSingleSelected?: boolean;\n\n /**\n * Renders in place of the default title. The default highlights search\n * matches; a custom title can use the node's `titleHighlightIndices` to do\n * the same.\n */\n @Input()\n titleTemplate?: TemplateRef<{ node: RivSelect.FullOption<O> }>;\n\n @Output()\n selectChange = new EventEmitter<O['id']>();\n\n @Output()\n expandChange = new EventEmitter<O['id']>();\n\n includeCount(): boolean {\n return typeof this.node?.count === 'number';\n }\n\n // TODO: these two functions can probably go away once we upgrade Angular and\n // get better type safety in template code. (Angular changes the type of\n // this.node from FullOption<O> to FullOption<any>.)\n // https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n getId(node: RivSelect.FullOption<O>): O['id'] {\n return node.id;\n }\n getDisabled(node: RivSelect.FullOption<O>): boolean {\n return !!node.disabled;\n }\n getHelp(node: RivSelect.FullOption<O>): O['help'] {\n return node.help;\n }\n getDisabledExplanation(\n node: RivSelect.FullOption<O>,\n ): O['disabledExplanation'] {\n return node.disabledExplanation;\n }\n getCount(node: RivSelect.FullOption<O>): O['count'] {\n return node.count;\n }\n}\n\nexport namespace SelectNodeComponent {\n export const modes = ['single', 'multi'] as const;\n export type Mode = (typeof modes)[number];\n}\n","<ng-template #title let-n=\"node\">\n <riv-highlight\n class=\"title\"\n [text]=\"n.title\"\n [indices]=\"n.titleHighlightIndices ?? []\"\n ></riv-highlight>\n <span *ngIf=\"n.subtitle\">&nbsp;</span>\n <riv-highlight\n *ngIf=\"n.subtitle\"\n class=\"subtitle\"\n [text]=\"n.subtitle\"\n [indices]=\"n.subtitleHighlightIndices ?? []\"\n ></riv-highlight>\n</ng-template>\n\n<ng-container *ngIf=\"node; let n\">\n <ng-container *ngIf=\"mode === 'multi'\">\n <div\n #row\n class=\"row\"\n [rivTooltip]=\"\n getDisabled(n) && !getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n >\n <label rivTruncate [class.disabled]=\"getDisabled(n)\">\n <riv-checkbox\n *ngIf=\"n.selectable\"\n [value]=\"n.selected === true\"\n [indeterminate]=\"n.selected === 'indeterminate'\"\n [disabled]=\"getDisabled(n)\"\n (valueChange)=\"selectChange.emit(getId(n))\"\n >\n </riv-checkbox>\n <span\n rivTruncate\n class=\"name\"\n [rivTooltip]=\"\n getDisabled(n) && getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n [rivTooltipAnchor]=\"row\"\n >\n <ng-container\n *ngTemplateOutlet=\"titleTemplate ?? title; context: { node: n }\"\n ></ng-container>\n </span>\n <span class=\"help\">\n <riv-help\n *ngIf=\"getHelp(n); let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <span\n class=\"spacer\"\n [rivTooltip]=\"\n getDisabled(n) && getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n [rivTooltipAnchor]=\"row\"\n ></span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ getCount(n) | rivNumber }}\n </span>\n </label>\n <button\n type=\"button\"\n *ngIf=\"n.children?.length\"\n class=\"expand\"\n [disabled]=\"!n.expandable\"\n [attr.aria-disabled]=\"!n.expandable ? 'true' : null\"\n (click)=\"expandChange.emit(getId(n))\"\n >\n <riv-icon\n [size]=\"20\"\n [name]=\"n.expanded ? 'ChevronUp' : 'ChevronDown'\"\n ></riv-icon>\n </button>\n </div>\n <div *ngIf=\"n.expanded\" class=\"children\">\n <riv-select-node\n *ngFor=\"let child of n.children\"\n [mode]=\"mode\"\n [node]=\"child\"\n [showSingleSelected]=\"showSingleSelected\"\n [titleTemplate]=\"titleTemplate\"\n (selectChange)=\"selectChange.emit($event)\"\n (expandChange)=\"expandChange.emit($event)\"\n ></riv-select-node>\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'single'\">\n <div\n #row\n class=\"row\"\n [rivTooltip]=\"\n getDisabled(n) && !getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n >\n <button\n type=\"button\"\n class=\"single\"\n [disabled]=\"getDisabled(n)\"\n [attr.aria-disabled]=\"getDisabled(n) ? 'true' : null\"\n (click)=\"selectChange.emit(getId(n))\"\n >\n <span\n class=\"label\"\n rivTruncate\n [rivTooltip]=\"\n getDisabled(n) && getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n [rivTooltipAnchor]=\"row\"\n >\n <ng-container\n *ngTemplateOutlet=\"titleTemplate ?? title; context: { node: n }\"\n ></ng-container>\n </span>\n <span class=\"help\">\n <riv-help\n *ngIf=\"getHelp(n); let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <span\n class=\"spacer\"\n [rivTooltip]=\"\n getDisabled(n) && getHelp(n) ? getDisabledExplanation(n) : undefined\n \"\n [rivTooltipAnchor]=\"row\"\n ></span>\n <riv-icon\n *ngIf=\"showSingleSelected && n.selected\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ getCount(n) | rivNumber }}\n </span>\n </button>\n </div>\n </ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { IconComponent } from '../../icon/icon.component';\n\n@Component({\n selector: 'riv-zero-state',\n templateUrl: './zero-state.component.html',\n styleUrls: ['./zero-state.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ZeroStateComponent {\n @Input()\n message: string = 'No data to display.';\n\n @Input()\n title?: string;\n\n @Input()\n icon?: IconComponent.Name;\n}\n","<riv-icon *ngIf=\"icon; let i\" [name]=\"i\" [customSize]=\"40\"></riv-icon>\n<span *ngIf=\"title; let t\" class=\"title\">{{ t }}</span>\n<span class=\"message\">{{ message }}</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { debounce } from 'lodash';\nimport { distinctUntilChanged, map, skip, Subscription } from 'rxjs';\nimport { InputLabelComponent } from '../../input-label/input-label.component';\nimport { RivSelect } from '../state';\nimport { CalloutComponent } from '../../../overlay/callout/callout.component';\nimport { defaultSelectAllowedCalloutPositions } from '../../../overlay/callout/select-callout-defaults';\n\n@Component({\n selector: 'riv-select',\n templateUrl: './select.component.html',\n styleUrls: ['./select.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectComponent<O extends RivSelect.BaseOption>\n extends InputLabelComponent\n implements OnInit, OnDestroy\n{\n @Input()\n manager?: RivSelect.Manager<O>;\n\n @Input()\n size: SelectComponent.Size = 'medium';\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n locked: boolean = false;\n\n /** Stretches a custom trigger to fill the width of this component. */\n @Input()\n grow: boolean = false;\n\n @Input()\n allowedCalloutPositions: CalloutComponent.AnchoredPosition[] = [\n ...defaultSelectAllowedCalloutPositions,\n ];\n\n @Input()\n preferredCalloutPosition: CalloutComponent.AnchoredPosition = 'bottom-right';\n\n @ContentChild('trigger')\n triggerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n @ContentChild('customSelectedOptions')\n customSelectedOptionsTemplate?: TemplateRef<{\n selected: RivSelect.OptionSet<O>;\n }>;\n\n @ContentChild('option')\n optionTemplate?: TemplateRef<{ node: RivSelect.FullOption<O> }>;\n\n /**\n * Replaces only an option's title, keeping the standard row's checkbox,\n * count, help, and expand controls. Ignored when `#option` is set.\n */\n @ContentChild('optionTitle')\n optionTitleTemplate?: TemplateRef<{ node: RivSelect.FullOption<O> }>;\n\n @ContentChild('header')\n headerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n @ContentChild('footer')\n footerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n @ViewChild('customTriggerButton')\n customTriggerButton?: ElementRef;\n\n @ViewChild('standardTriggerButton')\n standardTriggerButton?: ElementRef;\n\n orderByManager?: RivSelect.Manager<SelectComponent.OrderByOption>;\n private orderBySubscription?: Subscription;\n\n ngOnInit(): void {\n this.orderByManager = RivSelect.createInMemoryManager(\n () => this.orderByOptionGroups,\n {\n showSingleSelected: true,\n initialState: {\n selection: {\n selected: new RivSelect.OptionSet([\n this.orderByOptionGroups[0].options.find(\n ({ id }) => id === 'title',\n )!,\n ]),\n },\n },\n },\n );\n\n this.orderBySubscription = this.orderByManager.state\n .pipe(\n map(s => [...s.selection.selected][0]?.id ?? null),\n distinctUntilChanged((prev, current) => prev === current),\n skip(1),\n )\n .subscribe(order => {\n this.manager?.actions.next({\n type: 'orderChange',\n payload: order,\n });\n });\n }\n\n ngOnDestroy(): void {\n this.orderBySubscription?.unsubscribe();\n }\n\n getTrigger(): Element | null {\n return (\n this.customTriggerButton?.nativeElement ??\n this.standardTriggerButton?.nativeElement\n );\n }\n\n allowedOpen(): void {\n if (!this.disabled && !this.locked) {\n this.manager?.actions.next({\n type: 'openChange',\n open: true,\n });\n }\n }\n\n // preventDefault keeps a surrounding dialog from closing on the same Escape.\n escapeClose(event: Event, open: boolean): void {\n if (open && !event.defaultPrevented) {\n event.preventDefault();\n this.manager?.actions.next({ type: 'openChange', open: false });\n }\n }\n\n selectChange(multi: boolean, id: O['id']) {\n if (multi) {\n this.manager?.actions.next({\n type: 'toggleOptionSelected',\n id,\n });\n } else {\n this.manager?.actions.next({\n type: 'setSelectedOption',\n id,\n });\n this.manager?.actions.next({\n type: 'openChange',\n open: false,\n });\n }\n }\n\n readonly orderByOptionGroups: RivSelect.OptionGroup<SelectComponent.OrderByOption>[] =\n [\n {\n options: [\n {\n id: 'title',\n title: 'A-Z',\n help: 'Sorts values in alphanumeric order (A-Z, 0-9)',\n },\n {\n id: 'count',\n title: 'Volume',\n help: 'Sorts values by count (highest to lowest)',\n },\n ],\n },\n ];\n\n getSelectedOrderByOption(\n state: RivSelect.FullState<O>,\n ): SelectComponent.OrderByOption | null {\n return (\n this.orderByOptionGroups[0].options.find(\n ({ id }) => id === state.query.order,\n ) ?? null\n );\n }\n\n searchChange = debounce((query: string) => {\n this.manager?.actions?.next({ type: 'searchChange', payload: query });\n }, 500);\n\n // trackBySymbol for our option groups that don't have a good identity.\n // this lazily attaches a Javascript symbol to any value and returns it.\n // Symbols are guaranteed unique and they do not exist in JSON, so they\n // do not interfere with any types or serialization for API calls. The\n // only purpose they serve is to tell ngFor which objects are still in\n // the array. Note: this is only safe on an array of objects.\n trackBySymbol(_: number, value: any) {\n if (!value._trackingSymbol) {\n value._trackingSymbol = Symbol();\n }\n return value._trackingSymbol;\n }\n\n trackByOption(_: number, option: RivSelect.FullOption<O>): string | number {\n return option.id;\n }\n}\n\nexport namespace SelectComponent {\n export type OrderByOption = {\n id: RivSelect.OrderBy;\n title: string;\n help: string;\n };\n\n export const Sizes = ['small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n}\n","<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n (keydown.escape)=\"escapeClose($event, s.display.open)\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\n ></riv-search>\n <div *ngIf=\"s.query.showOrder\">\n <span class=\"order-by\">Sort by:</span>\n <riv-select [manager]=\"orderByManager\">\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'small'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ getSelectedOrderByOption(s)?.title }}\n </span>\n </ng-template>\n </riv-select>\n </div>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups; trackBy: trackBySymbol\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n <riv-help\n *ngIf=\"group.help; let help\"\n [help]=\"help\"\n [size]=\"12\"\n ></riv-help>\n </span>\n <ng-container\n *ngFor=\"let option of group.options; trackBy: trackByOption\"\n >\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n [showSingleSelected]=\"s.display.showSingleSelected\"\n [titleTemplate]=\"optionTitleTemplate\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n (keydown.escape)=\"escapeClose($event, s.display.open)\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n class=\"custom-trigger-button\"\n [class.grow]=\"grow\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"allowedOpen()\"\n (keydown.escape)=\"escapeClose($event, s.display.open)\"\n [disabled]=\"disabled || locked\"\n [attr.aria-disabled]=\"disabled || locked ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <ng-container\n *ngIf=\"\n customSelectedOptionsTemplate;\n else standardSelectedOptionsTemplate\n \"\n >\n <span class=\"value\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTemplate\"\n [ngTemplateOutletContext]=\"{ selected: s.selection.selected }\"\n ></ng-container>\n </span>\n </ng-container>\n <ng-template #standardSelectedOptionsTemplate>\n <span class=\"value\">{{\n s.display.formattedSelectedOptions\n }}</span>\n <span *ngIf=\"s.display.pillCount > 1\" class=\"selected-count\">\n {{ s.display.pillCount | rivNumber }}\n </span>\n </ng-template>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"s.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"allowedCalloutPositions\"\n [preferredPosition]=\"preferredCalloutPosition\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { IFuseOptions } from 'fuse.js';\nimport { isEqual } from 'lodash';\nimport { distinctUntilChanged, filter, map, Subscription } from 'rxjs';\nimport type { CalloutComponent } from '../../overlay/callout/callout.component';\nimport { defaultSelectAllowedCalloutPositions } from '../../overlay/callout/select-callout-defaults';\nimport { InputLabelComponent } from '../input-label/input-label.component';\nimport { SelectComponent } from '../select/select/select.component';\nimport { RivSelect } from '../select/state';\n\n@Component({\n selector: 'riv-simple-select',\n templateUrl: './simple-select.component.html',\n styleUrls: ['./simple-select.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleSelectComponent<O extends RivSelect.BaseOption>\n extends InputLabelComponent\n implements OnInit, OnChanges, OnDestroy\n{\n @Input()\n optionGroups: RivSelect.OptionGroup<O>[] = [];\n\n @Input()\n selectedOption: O | null = null;\n\n @Input()\n size: SelectComponent.Size = 'medium';\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n locked: boolean = false;\n\n @Input()\n filterabilityOptions: SimpleSelectComponent.FilterabilityOptions<O> = {\n enabled: false,\n };\n\n @Input()\n orderBy?: RivSelect.OrderBy;\n\n @Input()\n placeholder?: string;\n\n @Input()\n maxHeight?: string;\n\n @Input()\n maxWidth?: string;\n\n @Input()\n minHeight?: string;\n\n @Input()\n minWidth?: string;\n\n @Input()\n dividers?: boolean;\n\n @Input()\n sortSelectedToTop: boolean = false;\n\n /** Stretches the select trigger to fill the width of this component. */\n @Input()\n grow: boolean = false;\n\n @Input()\n preferredCalloutPosition: CalloutComponent.AnchoredPosition = 'bottom-right';\n\n @Input()\n allowedCalloutPositions: CalloutComponent.AnchoredPosition[] = [\n ...defaultSelectAllowedCalloutPositions,\n ];\n\n @ContentChild('trigger')\n triggerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n @ContentChild('customSelectedOptions')\n customSelectedOptionsTemplate?: TemplateRef<{\n selected: RivSelect.OptionSet<O>;\n }>;\n\n @ContentChild('option')\n optionTemplate?: TemplateRef<{ node: RivSelect.FullOption<O> }>;\n\n @ContentChild('header')\n headerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n @ContentChild('footer')\n footerTemplate?: TemplateRef<{ state: RivSelect.FullState<O> }>;\n\n manager?: RivSelect.Manager<O>;\n selectedOptionSubscription?: Subscription;\n ngOnInit(): void {\n this.manager = RivSelect.createInMemoryManager(() => this.optionGroups, {\n allowMultiSelect: false,\n allowSearch: this.filterabilityOptions.enabled,\n allowSelectAll: false,\n dividers: this.dividers,\n fuseOptions: this.filterabilityOptions.enabled\n ? this.filterabilityOptions.fuseOptions\n : undefined,\n initialState: {\n query: { order: this.orderBy },\n selection: {\n selected: new RivSelect.OptionSet(\n this.selectedOption ? [this.selectedOption] : [],\n ),\n },\n ...(this.placeholder\n ? { display: { placeholder: this.placeholder } }\n : null),\n },\n inline: false,\n maxHeight: this.maxHeight,\n maxWidth: this.maxWidth,\n minHeight: this.minHeight,\n minWidth: this.minWidth,\n searchPlaceholder: this.filterabilityOptions.enabled\n ? this.filterabilityOptions.placeholder\n : undefined,\n showSingleSelected: true,\n sortSelectedToTop: this.sortSelectedToTop,\n });\n\n this.selectedOptionSubscription = this.manager?.state\n .pipe(\n map(s => [...s.selection.selected][0] ?? null),\n distinctUntilChanged(isEqual),\n filter(selection => selection?.id !== this.selectedOption?.id),\n )\n .subscribe(selection => {\n this.selectedOptionChange.next(selection);\n });\n }\n\n private warnOnManagerOptionChanges(changes: SimpleChanges, keys: string[]) {\n for (const key of keys) {\n if (\n changes[key] &&\n !changes[key].firstChange &&\n !isEqual(changes[key].previousValue, changes[key].currentValue)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Heads up: changing ${key} on <riv-simple-select> after initialization has no effect;`,\n 'was:',\n changes[key].previousValue,\n 'changed to:',\n changes[key].currentValue,\n );\n }\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes['optionGroups'] &&\n !isEqual(\n changes['optionGroups'].previousValue,\n changes['optionGroups'].currentValue,\n )\n ) {\n this.manager?.actions.next({ type: 'load' });\n }\n\n if (\n changes['selectedOption'] &&\n !isEqual(\n changes['selectedOption'].previousValue,\n changes['selectedOption'].currentValue,\n )\n ) {\n this.manager?.actions.next({\n type: 'selectionChange',\n payload: {\n selected: new RivSelect.OptionSet(\n this.selectedOption ? [this.selectedOption] : [],\n ),\n },\n });\n }\n\n if (\n changes['orderBy'] &&\n !isEqual(\n changes['orderBy'].previousValue,\n changes['orderBy'].currentValue,\n ) &&\n this.orderBy\n ) {\n this.manager?.actions.next({\n type: 'orderChange',\n payload: this.orderBy,\n });\n }\n\n this.warnOnManagerOptionChanges(changes, [\n 'dividers',\n 'filterabilityOptions',\n 'maxHeight',\n 'maxWidth',\n 'minHeight',\n 'minWidth',\n 'placeholder',\n 'sortSelectedToTop',\n ]);\n }\n\n ngOnDestroy(): void {\n this.selectedOptionSubscription?.unsubscribe();\n }\n\n @HostBinding('class')\n get classes(): string {\n return this.grow ? 'grow' : '';\n }\n\n public issueAction(action: RivSelect.Action<O>): void {\n this.manager?.actions.next(action);\n }\n\n @Output()\n selectedOptionChange = new EventEmitter<O | null>();\n}\n\nexport namespace SimpleSelectComponent {\n export type FilterabilityOptions<O extends RivSelect.BaseOption> =\n | {\n enabled: false;\n }\n | {\n enabled: true;\n placeholder?: string;\n fuseOptions?: IFuseOptions<O>;\n };\n}\n","<riv-select\n [manager]=\"manager\"\n [size]=\"size\"\n [disabled]=\"disabled\"\n [locked]=\"locked\"\n [grow]=\"grow\"\n [preferredCalloutPosition]=\"preferredCalloutPosition\"\n [allowedCalloutPositions]=\"allowedCalloutPositions\"\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <ng-container *ngIf=\"triggerTemplate; let triggerTpl\">\n <ng-template #trigger let-state=\"state\">\n <ng-container\n [ngTemplateOutlet]=\"triggerTpl\"\n [ngTemplateOutletContext]=\"{ state }\"\n ></ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container\n *ngIf=\"customSelectedOptionsTemplate; let customSelectedOptionsTpl\"\n >\n <ng-template #customSelectedOptions let-selected=\"selected\">\n <ng-container\n [ngTemplateOutlet]=\"customSelectedOptionsTpl\"\n [ngTemplateOutletContext]=\"{ selected }\"\n ></ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"optionTemplate; let optionTpl\">\n <ng-template #option let-node=\"node\">\n <button\n class=\"custom-node\"\n [disabled]=\"node.disabled\"\n [attr.aria-disabled]=\"node.disabled ? 'true' : null\"\n (click)=\"\n manager?.actions?.next({\n type: 'setSelectedOption',\n id: node.id\n });\n manager?.actions?.next({\n type: 'openChange',\n open: false\n })\n \"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"optionTpl\"\n [ngTemplateOutletContext]=\"{ node }\"\n ></ng-container>\n </button>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"headerTemplate; let headerTpl\">\n <ng-template #header let-state=\"state\">\n <ng-container\n [ngTemplateOutlet]=\"headerTpl\"\n [ngTemplateOutletContext]=\"{ state }\"\n ></ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"footerTemplate; let footerTpl\">\n <ng-template #footer let-state=\"state\">\n <ng-container\n [ngTemplateOutlet]=\"footerTpl\"\n [ngTemplateOutletContext]=\"{ state }\"\n ></ng-container>\n </ng-template>\n </ng-container>\n</riv-select>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { RivSelect } from '../select/state';\n\n@Pipe({ name: 'rivOptionGroup' })\nexport class OptionGroupPipe<O extends RivSelect.BaseOption>\n implements PipeTransform\n{\n transform(value?: O[], header?: string): RivSelect.OptionGroup<O>[] {\n return [\n {\n header: header,\n options: value ?? [],\n },\n ];\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TrackByFunction,\n} from '@angular/core';\nimport {\n timeDay,\n timeDays,\n timeMonth,\n timeMonths,\n timeSunday,\n timeYear,\n timeYears,\n} from 'd3-time';\nimport { timeFormat } from 'd3-time-format';\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n map,\n shareReplay,\n} from 'rxjs';\n\nconst monthFormatter = timeFormat('%B');\nconst yearFormatter = timeFormat('%Y');\nconst dayFormatter = timeFormat('%e');\nconst weekdayNumberFormatter = timeFormat('%w');\n\nfunction getWeekdayNumber(date: Date): number {\n return parseInt(weekdayNumberFormatter(date));\n}\n\ntype DateOption = {\n id: string;\n title: string;\n disabled: boolean;\n date: Date;\n};\n\ntype CalendarDate = {\n date: Date;\n display: string;\n fadeIn: boolean;\n fadeOut: boolean;\n hidden: boolean;\n inCurrentMonth: boolean;\n inRange: boolean;\n roundedNe: boolean;\n roundedNw: boolean;\n roundedSe: boolean;\n roundedSw: boolean;\n selected: boolean;\n today: boolean;\n};\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of RxJS.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalendarComponent {\n private readonly activeYearMonth$ = new BehaviorSubject<Date>(new Date());\n @Input()\n public set activeYearMonth(v: Date) {\n this.activeYearMonth$.next(v);\n }\n public get activeYearMonth(): Date {\n return this.activeYearMonth$.getValue();\n }\n\n private readonly displayMin$ = new BehaviorSubject<Date>(\n CalendarComponent.defaultMin,\n );\n @Input()\n public set displayMin(v: Date) {\n this.displayMin$.next(v);\n }\n public get displayMin(): Date {\n return this.displayMin$.getValue();\n }\n\n private readonly displayMax$ = new BehaviorSubject<Date>(\n CalendarComponent.defaultMax,\n );\n @Input()\n public set displayMax(v: Date) {\n this.displayMax$.next(v);\n }\n public get displayMax(): Date {\n return this.displayMax$.getValue();\n }\n\n private readonly selectableMin$ = new BehaviorSubject<Date | undefined>(\n undefined,\n );\n @Input()\n public set selectableMin(v: Date | undefined) {\n this.selectableMin$.next(v);\n }\n public get selectableMin(): Date | undefined {\n return this.selectableMin$.getValue();\n }\n\n private readonly selectableMax$ = new BehaviorSubject<Date | undefined>(\n undefined,\n );\n @Input()\n public set selectableMax(v: Date | undefined) {\n this.selectableMax$.next(v);\n }\n public get selectableMax(): Date | undefined {\n return this.selectableMax$.getValue();\n }\n\n private readonly omitRange$ = new BehaviorSubject<[Date, Date] | undefined>(\n undefined,\n );\n @Input()\n public set omitRange(v: [Date, Date] | undefined) {\n this.omitRange$.next(v);\n }\n public get omitRange(): [Date, Date] | undefined {\n return this.omitRange$.getValue();\n }\n\n private readonly selectedValue$ = new BehaviorSubject<\n Date | [Date, Date] | undefined\n >(undefined);\n @Input()\n public set selectedValue(v: Date | [Date, Date] | undefined) {\n this.selectedValue$.next(v);\n }\n public get selectedValue(): Date | [Date, Date] | undefined {\n return this.selectedValue$.getValue();\n }\n\n readonly yearOptions$: Observable<DateOption[]> = combineLatest([\n this.displayMin$,\n this.displayMax$,\n this.selectableMin$,\n this.selectableMax$,\n this.activeYearMonth$,\n ]).pipe(\n map(\n ([\n displayMin,\n displayMax,\n selectableMin,\n selectableMax,\n activeYearMonth,\n ]) => {\n const min: Date = selectableMin ?? displayMin;\n const max: Date = selectableMax ?? displayMax;\n return timeYears(timeYear.floor(displayMin), displayMax)\n .reverse()\n .map(flooredYear => {\n const year = new Date(\n flooredYear.getFullYear(),\n activeYearMonth.getMonth(),\n );\n return {\n id: year.getFullYear().toString(),\n title: yearFormatter(year),\n disabled:\n year.getFullYear() < min.getFullYear() ||\n year.getFullYear() > max.getFullYear(),\n date: year,\n };\n });\n },\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedYearOption$ = combineLatest([\n this.yearOptions$,\n this.activeYearMonth$,\n ]).pipe(\n map(\n ([yearOptions, activeYearMonth]) =>\n yearOptions.find(\n y => y.id === activeYearMonth.getFullYear().toString(),\n ) || null,\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly monthOptions$: Observable<DateOption[]> = combineLatest([\n this.activeYearMonth$,\n this.displayMin$,\n this.displayMax$,\n this.selectableMin$,\n this.selectableMax$,\n ]).pipe(\n map(\n ([\n activeYearMonth,\n displayMin,\n displayMax,\n selectableMin,\n selectableMax,\n ]) => {\n const min = selectableMin ?? displayMin;\n const max = selectableMax ?? displayMax;\n return timeMonths(\n timeYear.floor(activeYearMonth),\n timeYear.floor(timeYear.offset(activeYearMonth, 1)),\n ).map(month => {\n const activeYear = activeYearMonth.getFullYear();\n const minYear = min.getFullYear();\n const maxYear = max.getFullYear();\n const monthNumber = month.getMonth();\n const minMonth = min.getMonth();\n const maxMonth = max.getMonth();\n\n const disabled =\n (activeYear === minYear && monthNumber < minMonth) ||\n (activeYear === maxYear && monthNumber > maxMonth) ||\n activeYear < minYear ||\n activeYear > maxYear;\n\n return {\n id: monthNumber.toString(),\n title: monthFormatter(month),\n disabled,\n date: month,\n };\n });\n },\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedMonthOption$ = combineLatest([\n this.monthOptions$,\n this.activeYearMonth$,\n ]).pipe(\n map(\n ([monthOptions, activeYearMonth]) =>\n monthOptions.find(\n m => m.id === activeYearMonth.getMonth().toString(),\n ) || null,\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly previousMonth$ = combineLatest([\n this.activeYearMonth$,\n this.displayMin$,\n this.selectableMin$,\n ]).pipe(\n map(([yearMonth, displayMin, selectableMin]) => {\n const min: Date = selectableMin ?? displayMin;\n const previous = timeMonth.floor(timeMonth.offset(yearMonth, -1));\n const minMonth = min.getMonth();\n const minYear = min.getFullYear();\n const prevMonth = previous.getMonth();\n const prevYear = previous.getFullYear();\n\n const disabled =\n (prevYear === minYear && prevMonth < minMonth) || prevYear < minYear;\n if (disabled) return null;\n return previous;\n }),\n );\n\n readonly nextMonth$ = combineLatest([\n this.activeYearMonth$,\n this.displayMax$,\n this.selectableMax$,\n ]).pipe(\n map(([yearMonth, displayMax, selectableMax]) => {\n const max: Date = selectableMax ?? displayMax;\n const next = timeMonth.floor(timeMonth.offset(yearMonth, 1));\n const maxMonth = max.getMonth();\n const maxYear = max.getFullYear();\n const nextMonth = next.getMonth();\n const nextYear = next.getFullYear();\n\n const disabled =\n (nextYear === maxYear && nextMonth > maxMonth) || nextYear > maxYear;\n if (disabled) return null;\n return next;\n }),\n );\n\n private readonly datesInSelectedRange$: Observable<Date[]> =\n this.selectedValue$.pipe(\n map(selectedValue => {\n if (!selectedValue) return [];\n if (selectedValue instanceof Date) return [selectedValue];\n return timeDays(\n timeDay.floor(selectedValue[0]),\n timeDay.floor(timeDay.offset(selectedValue[1], 1)),\n );\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly dates$: Observable<CalendarDate[]> = combineLatest([\n this.activeYearMonth$,\n this.selectedValue$,\n this.datesInSelectedRange$,\n this.selectableMin$,\n this.selectableMax$,\n this.omitRange$,\n ]).pipe(\n map(\n ([\n activeYearMonth,\n selectedValue,\n datesInSelectedRange,\n selectableMin,\n selectableMax,\n omitRange,\n ]) => {\n const calendarDates = timeDays(\n timeSunday.floor(activeYearMonth),\n timeSunday.ceil(timeMonth.offset(activeYearMonth, 1)),\n );\n const minCalendarDate = calendarDates[0];\n const maxCalendarDate = calendarDates[calendarDates.length - 1];\n const selectedDateCoordinates = new Map<number, [number, number]>();\n const visibleDatesInSelectedRange = datesInSelectedRange.filter(\n selected =>\n selected.valueOf() >= minCalendarDate.valueOf() &&\n selected.valueOf() <= maxCalendarDate.valueOf() &&\n (selectableMin\n ? selected.valueOf() >= selectableMin.valueOf()\n : true) &&\n (selectableMax\n ? selected.valueOf() <= selectableMax.valueOf()\n : true) &&\n (omitRange\n ? selected.valueOf() < omitRange[0].valueOf() ||\n selected.valueOf() > omitRange[1].valueOf()\n : true),\n );\n if (visibleDatesInSelectedRange.length > 0) {\n const firstVisibleSelectedDateOffset = getWeekdayNumber(\n visibleDatesInSelectedRange[0],\n );\n visibleDatesInSelectedRange.forEach((selected, i) => {\n const x = getWeekdayNumber(selected);\n const y = Math.floor((i + firstVisibleSelectedDateOffset) / 7);\n selectedDateCoordinates.set(selected.valueOf(), [x, y]);\n });\n }\n function serializeCoordinates(coordinates: [number, number]): string {\n return coordinates.join(':');\n }\n\n const visibleDatesInSelectedRangeCoordinates = new Set(\n [...selectedDateCoordinates.values()].map(serializeCoordinates),\n );\n\n function getRoundedCorners(date: Date): {\n nw: boolean;\n ne: boolean;\n se: boolean;\n sw: boolean;\n } {\n const coordinates = selectedDateCoordinates.get(date.valueOf());\n if (!coordinates)\n return { nw: false, ne: false, se: false, sw: false };\n const [x, y] = coordinates;\n const top = serializeCoordinates([x, y - 1]),\n right = serializeCoordinates([x + 1, y]),\n bottom = serializeCoordinates([x, y + 1]),\n left = serializeCoordinates([x - 1, y]);\n return {\n nw:\n !visibleDatesInSelectedRangeCoordinates.has(top) &&\n !visibleDatesInSelectedRangeCoordinates.has(left),\n ne:\n !visibleDatesInSelectedRangeCoordinates.has(top) &&\n !visibleDatesInSelectedRangeCoordinates.has(right),\n se:\n !visibleDatesInSelectedRangeCoordinates.has(right) &&\n !visibleDatesInSelectedRangeCoordinates.has(bottom),\n sw:\n !visibleDatesInSelectedRangeCoordinates.has(left) &&\n !visibleDatesInSelectedRangeCoordinates.has(bottom),\n };\n }\n\n const visibleDatesInSelectedRangeValues = new Set(\n visibleDatesInSelectedRange.map(selected => selected.valueOf()),\n );\n\n const today = timeDay.floor(new Date());\n\n return calendarDates.map(date => {\n const { nw, ne, se, sw } = getRoundedCorners(date);\n const dateValue = date.valueOf();\n const inRange = visibleDatesInSelectedRangeValues.has(dateValue);\n const selected = selectedValue\n ? selectedValue instanceof Date\n ? dateValue === selectedValue.valueOf()\n : dateValue === selectedValue[0].valueOf() ||\n dateValue === selectedValue[1].valueOf()\n : false;\n return {\n date,\n display: dayFormatter(date),\n fadeIn:\n inRange &&\n (dateValue ===\n Math.max(\n minCalendarDate.valueOf(),\n selectableMin?.valueOf() ?? -Infinity,\n ) ||\n dateValue ===\n (omitRange\n ? timeDay.offset(omitRange[1], 1).valueOf()\n : -Infinity)),\n fadeOut:\n inRange &&\n (dateValue ===\n Math.min(\n maxCalendarDate.valueOf(),\n selectableMax?.valueOf() ?? Infinity,\n ) ||\n dateValue ===\n (omitRange\n ? timeDay.offset(omitRange[0], -1).valueOf()\n : Infinity)),\n hidden:\n dateValue < (selectableMin?.valueOf() ?? -Infinity) ||\n dateValue > (selectableMax?.valueOf() ?? Infinity) ||\n (omitRange\n ? omitRange[0].valueOf() <= dateValue &&\n dateValue <= omitRange[1].valueOf()\n : false),\n inCurrentMonth:\n dateValue >= activeYearMonth.valueOf() &&\n dateValue < timeMonth.offset(activeYearMonth, 1).valueOf(),\n inRange,\n roundedNe: ne,\n roundedNw: nw,\n roundedSe: se,\n roundedSw: sw,\n selected,\n today: dateValue === today.valueOf(),\n };\n });\n },\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n selectDay(day: CalendarDate) {\n if (!day.inCurrentMonth) {\n this.activeYearMonthChange.emit(timeMonth.floor(day.date));\n }\n this.dateSelect.emit(day.date);\n }\n\n @Output()\n activeYearMonthChange = new EventEmitter<Date>();\n\n emitActiveYearMonth(yearMonth: Date | null) {\n if (yearMonth) this.activeYearMonthChange.emit(yearMonth);\n }\n\n @Output()\n dateSelect = new EventEmitter<Date>();\n\n trackByDate: TrackByFunction<CalendarDate> = (_, date) =>\n JSON.stringify({\n ...date,\n date: [\n date.date.getFullYear(),\n date.date.getMonth() + 1,\n date.date.getDate(),\n ].join(':'),\n });\n}\n\nexport namespace CalendarComponent {\n export const defaultMin = timeYear.floor(timeYear.offset(new Date(), -7));\n export const defaultMax = timeDay.offset(\n timeYear.floor(timeYear.offset(new Date(), 5)),\n -1,\n );\n}\n","<div class=\"controls\">\n <div>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Month' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"monthOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedMonthOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n <riv-simple-select\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Year' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"yearOptions$ | async | rivOptionGroup\"\n [selectedOption]=\"selectedYearOption$ | async\"\n (selectedOptionChange)=\"emitActiveYearMonth($event?.date ?? null)\"\n >\n <ng-template #trigger let-state=\"state\">\n <span\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n >\n {{ state.display.formattedSelectedOptions || '...' }}\n </span>\n </ng-template>\n </riv-simple-select>\n </div>\n <div\n *ngIf=\"{ prev: previousMonth$ | async, next: nextMonth$ | async }; let vm\"\n >\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowLeft'\"\n [disabled]=\"!vm.prev\"\n (click)=\"vm.prev ? activeYearMonthChange.emit(vm.prev) : null\"\n type=\"button\"\n ></button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n [icon]=\"'ArrowRight'\"\n [disabled]=\"!vm.next\"\n (click)=\"vm.next ? activeYearMonthChange.emit(vm.next) : null\"\n type=\"button\"\n ></button>\n </div>\n</div>\n<div class=\"calendar\">\n <span class=\"label\">Su</span>\n <span class=\"label\">Mo</span>\n <span class=\"label\">Tu</span>\n <span class=\"label\">We</span>\n <span class=\"label\">Th</span>\n <span class=\"label\">Fr</span>\n <span class=\"label\">Sa</span>\n <button\n *ngFor=\"let day of dates$ | async; trackBy: trackByDate\"\n class=\"day\"\n [disabled]=\"day.hidden\"\n [attr.aria-disabled]=\"day.hidden ? 'true' : null\"\n [class.hidden]=\"day.hidden\"\n [class.bleed]=\"!day.inCurrentMonth && !day.hidden\"\n [class.fade-in]=\"day.fadeIn\"\n [class.fade-out]=\"day.fadeOut\"\n [class.in-range]=\"day.inRange\"\n [class.rounded-ne]=\"day.roundedNe\"\n [class.rounded-nw]=\"day.roundedNw\"\n [class.rounded-se]=\"day.roundedSe\"\n [class.rounded-sw]=\"day.roundedSw\"\n (click)=\"selectDay(day)\"\n type=\"button\"\n >\n <span\n class=\"day-wrapper\"\n [class.selected]=\"day.selected\"\n [class.today]=\"day.today\"\n >\n {{ day.display }}\n </span>\n </button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { timeDay, timeMonth, timeSunday, timeWeek, timeYear } from 'd3-time';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n merge,\n scan,\n shareReplay,\n skipUntil,\n startWith,\n} from 'rxjs';\nimport { DatePipe } from '../../format/pipes/date.pipe';\nimport { LocalStorage } from '../../util/local-storage';\nimport { CalendarComponent } from '../calendar/calendar.component';\nimport { InputLabelComponent } from '../input-label/input-label.component';\nconst timeQuarter = timeMonth.every(3)!;\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of RxJS.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-date-range',\n templateUrl: './date-range.component.html',\n styleUrls: ['./date-range.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateRangeComponent extends InputLabelComponent {\n readonly TODAY = new Date();\n readonly STORAGE_KEY = 'date-range.default';\n\n private readonly showPresets$ = new BehaviorSubject<boolean>(true);\n @Input()\n set showPresets(v: boolean) {\n this.showPresets$.next(v);\n }\n get showPresets(): boolean {\n return this.showPresets$.getValue();\n }\n\n readonly min$ = new BehaviorSubject<Date>(CalendarComponent.defaultMin);\n @Input()\n set min(v: Date) {\n this.min$.next(v);\n }\n get min(): Date {\n return this.min$.getValue();\n }\n\n readonly max$ = new BehaviorSubject<Date>(CalendarComponent.defaultMax);\n @Input()\n set max(v: Date) {\n this.max$.next(v);\n }\n get max(): Date {\n return this.max$.getValue();\n }\n\n readonly value$ = new BehaviorSubject<[Date, Date] | undefined>(undefined);\n @Input()\n set value(v: [Date, Date] | undefined) {\n this.value$.next(v);\n }\n get value(): [Date, Date] | undefined {\n return this.value$.getValue();\n }\n\n readonly distinctValue$ = this.value$.pipe(\n distinctUntilChanged(\n (previous, current) =>\n previous?.[0].valueOf() === current?.[0].valueOf() &&\n previous?.[1].valueOf() === current?.[1].valueOf(),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly placeholder$ = new BehaviorSubject<string>('Select date range');\n @Input()\n set placeholder(v: string) {\n this.placeholder$.next(v);\n }\n get placeholder(): string {\n return this.placeholder$.getValue();\n }\n\n readonly disabled$ = new BehaviorSubject(false);\n @Input()\n set disabled(v: boolean) {\n this.disabled$.next(v);\n }\n get disabled(): boolean {\n return this.disabled$.getValue();\n }\n\n @ContentChild('trigger')\n triggerTemplate?: TemplateRef<{ open: boolean }>;\n\n @ViewChild('customTriggerButton', { read: ElementRef })\n customTriggerButton?: ElementRef;\n\n @ViewChild('standardTriggerButton', { read: ElementRef })\n standardTriggerButton?: ElementRef;\n\n getTrigger(): Element | null {\n return (\n this.customTriggerButton?.nativeElement ??\n this.standardTriggerButton?.nativeElement\n );\n }\n\n readonly alternativePresetList$ = new BehaviorSubject<\n DateRangeComponent.PresetType[]\n >([]);\n @Input()\n set alternativePresetList(v: DateRangeComponent.PresetType[]) {\n this.alternativePresetList$.next(v);\n }\n get alternativePresetList(): DateRangeComponent.PresetType[] {\n return this.alternativePresetList$.getValue();\n }\n\n readonly open$ = new BehaviorSubject(false);\n\n readonly userSelectedPreset$ =\n new Subject<DateRangeComponent.Preset | null>();\n\n readonly userSelectedDate$ = new Subject<Date | undefined>();\n readonly selectedValue$: Observable<Date | [Date, Date] | undefined> = merge(\n this.distinctValue$,\n this.userSelectedDate$.pipe(\n scan(\n (previous: Date | [Date, Date] | undefined, date: Date | undefined) => {\n if (previous instanceof Date && date instanceof Date) {\n if (date.valueOf() >= previous.valueOf()) {\n const pair: [Date, Date] = [previous, date];\n return pair;\n }\n }\n return date;\n },\n ),\n ),\n this.userSelectedPreset$.pipe(\n filter((preset): preset is DateRangeComponent.Preset => preset !== null),\n map(preset => preset.dates),\n ),\n ).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\n readonly filteredPresetOptions$ = combineLatest([\n this.min$,\n this.max$,\n this.alternativePresetList$,\n ]).pipe(\n map(([min, max, alternativePresetList]) => {\n const optionsFilteredOnMinMax = DateRangeComponent.Presets.filter(\n p =>\n p.dates[0].valueOf() >= min.valueOf() &&\n p.dates[1].valueOf() <= max.valueOf(),\n );\n if (alternativePresetList.length == 0) {\n return optionsFilteredOnMinMax;\n } else {\n const optionsFilteredOnAlternativePresetList =\n optionsFilteredOnMinMax.filter(p =>\n alternativePresetList.includes(p.id),\n );\n return optionsFilteredOnAlternativePresetList;\n }\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedPreset$: Observable<DateRangeComponent.Preset | null> =\n combineLatest([\n this.selectedValue$,\n this.userSelectedPreset$.pipe(startWith(null)),\n ]).pipe(\n map(([selectedValue, userSelectedPreset]) => {\n if (selectedValue instanceof Array) {\n const options = DateRangeComponent.Presets.filter(\n preset =>\n preset.dates[0].valueOf() === selectedValue[0].valueOf() &&\n preset.dates[1].valueOf() === selectedValue[1].valueOf(),\n );\n if (options.length) {\n // Some date ranges match multiple presets, e.g. on Jan 19th, a\n // selected date range of Jan 1-19 would correspond to \"this month\n // so far,\" \"this quarter so far,\" and \"this year so far.\" We'll\n // use the user's most recent manual selection as a tie breaker\n // where possible.\n const mostRecent = options.find(\n option => option.id === userSelectedPreset?.id,\n );\n if (mostRecent) return mostRecent;\n return options[0];\n }\n }\n return null;\n }),\n );\n\n readonly favoritePresetIds$ = new LocalStorage<string[]>(\n this.STORAGE_KEY,\n [],\n );\n\n setFavorite(preset: DateRangeComponent.Preset, favorite: boolean) {\n const ids = new Set(this.favoritePresetIds$.getValue());\n if (favorite) {\n ids.add(preset.id);\n } else {\n ids.delete(preset.id);\n }\n this.favoritePresetIds$.next([...ids]);\n }\n\n readonly favoritePresets$: Observable<DateRangeComponent.Preset[]> =\n combineLatest([\n this.favoritePresetIds$,\n this.filteredPresetOptions$,\n this.alternativePresetList$,\n ]).pipe(\n map(([ids, presets, alternativePresetList]) => {\n const favoritePresets = ids\n .map(id => presets.find(preset => preset.id === id))\n .filter((p): p is DateRangeComponent.Preset => p !== undefined);\n\n if (alternativePresetList.length == 0) {\n return favoritePresets;\n } else {\n const favoritesFilteredOnAlternativePresetList =\n favoritePresets.filter(p =>\n alternativePresetList.includes(\n <DateRangeComponent.PresetType>p.id,\n ),\n );\n return favoritesFilteredOnAlternativePresetList;\n }\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly userLeftActiveYearMonth$ = new Subject<Date>();\n readonly userRightActiveYearMonth$ = new Subject<Date>();\n\n readonly leftMin$ = this.min$.pipe(\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n readonly leftMax$ = this.max$.pipe(\n map(max => timeDay.offset(timeMonth.floor(max), -1)),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n readonly rightMax$ = this.max$.pipe(\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly leftActiveYearMonth$ = combineLatest([\n this.leftMax$,\n merge(\n this.userLeftActiveYearMonth$.pipe(\n startWith(timeMonth.floor(this.TODAY)),\n ),\n this.userSelectedPreset$.pipe(\n filter(\n (preset): preset is DateRangeComponent.Preset => preset !== null,\n ),\n map(preset => timeMonth.floor(preset.dates[0])),\n ),\n this.distinctValue$.pipe(\n filter((v): v is [Date, Date] => v !== undefined),\n map(v => timeMonth.floor(v[0])),\n ),\n ),\n ]).pipe(\n map(([leftMax, left]) => {\n if (left.valueOf() >= leftMax.valueOf()) return timeMonth.floor(leftMax);\n else return left;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly rightActiveYearMonth$ = combineLatest([\n this.leftActiveYearMonth$,\n merge(\n this.userRightActiveYearMonth$.pipe(\n startWith(timeMonth.ceil(this.TODAY)),\n ),\n this.userSelectedPreset$.pipe(\n filter(\n (preset): preset is DateRangeComponent.Preset => preset !== null,\n ),\n map(preset => timeMonth.floor(preset.dates[1])),\n ),\n this.distinctValue$.pipe(\n filter((v): v is [Date, Date] => v !== undefined),\n map(v => timeMonth.floor(v[1])),\n ),\n ),\n this.rightMax$,\n ]).pipe(\n map(([left, userRight, rightMax$]) => {\n if (left.valueOf() >= userRight.valueOf())\n return timeMonth.floor(timeMonth.offset(left, 1));\n else if (userRight.valueOf() >= rightMax$.valueOf())\n return timeMonth.floor(rightMax$);\n else return userRight;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly rightMin$ = this.leftActiveYearMonth$.pipe(\n map(left => timeMonth.floor(timeMonth.offset(left, 1))),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly leftOmitRange$: Observable<[Date, Date]> =\n this.rightActiveYearMonth$.pipe(\n map<Date, [Date, Date]>(rightActiveYearMonth => {\n const first = timeMonth.floor(rightActiveYearMonth);\n const last = timeDay.offset(\n timeMonth.floor(timeMonth.offset(rightActiveYearMonth, 1)),\n -1,\n );\n return [first, last];\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly userInteracted$ = merge(\n this.userSelectedDate$,\n this.userSelectedPreset$,\n );\n\n @Output()\n readonly valueChange: Observable<[Date, Date] | undefined> =\n this.selectedValue$.pipe(\n skipUntil(\n merge(\n this.userInteracted$,\n this.selectedValue$.pipe(filter(v => v !== undefined)),\n ),\n ),\n filter((v): v is [Date, Date] | undefined => !(v instanceof Date)),\n distinctUntilChanged(\n (previous, current) =>\n previous?.[0].valueOf() === current?.[0].valueOf() &&\n previous?.[1].valueOf() === current?.[1].valueOf(),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly displayValue$: Observable<string | undefined> =\n this.valueChange.pipe(\n map(v => {\n if (v) {\n return v.map(date => new DatePipe().transform(date)).join(' — ');\n }\n return undefined;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n}\n\nexport namespace DateRangeComponent {\n const today = new Date();\n\n export enum PresetType {\n TODAY = 'today',\n YESTERDAY = 'yesterday',\n TOMORROW = 'tomorrow',\n THIS_WEEK = 'this_week',\n THIS_WEEK_SO_FAR = 'this_week_so_far',\n LAST_WEEK = 'last_week',\n NEXT_WEEK = 'next_week',\n THIS_MONTH = 'this_month',\n THIS_MONTH_SO_FAR = 'this_month_so_far',\n LAST_MONTH = 'last_month',\n NEXT_MONTH = 'next_month',\n THIS_QUARTER = 'this_quarter',\n THIS_QUARTER_SO_FAR = 'this_quarter_so_far',\n LAST_QUARTER = 'last_quarter',\n NEXT_QUARTER = 'next_quarter',\n THIS_YEAR = 'this_year',\n THIS_YEAR_SO_FAR = 'this_year_so_far',\n LAST_YEAR = 'last_year',\n NEXT_YEAR = 'next_year',\n LAST_7_DAYS = 'last_7_days',\n LAST_14_DAYS = 'last_14_days',\n LAST_30_DAYS = 'last_30_days',\n LAST_60_DAYS = 'last_60_days',\n LAST_90_DAYS = 'last_90_days',\n LAST_180_DAYS = 'last_180_days',\n LAST_365_DAYS = 'last_365_days',\n }\n\n export type Preset = {\n id: PresetType;\n title: string;\n subtitle: string;\n dates: [Date, Date];\n };\n\n export const Presets: Preset[] = [\n {\n id: PresetType.TODAY,\n title: 'Today',\n subtitle: 'Today from midnight until the current time',\n dates: [timeDay(), timeDay()],\n },\n {\n id: PresetType.YESTERDAY,\n title: 'Yesterday',\n subtitle: 'The previous 24 hour day',\n dates: [timeDay.offset(timeDay(), -1), timeDay.offset(timeDay(), -1)],\n },\n {\n id: PresetType.TOMORROW,\n title: 'Tomorrow',\n subtitle: 'The next 24 hour day',\n dates: [timeDay.offset(timeDay(), 1), timeDay.offset(timeDay(), 1)],\n },\n {\n id: PresetType.THIS_WEEK,\n title: 'This week',\n subtitle: 'The current calendar week',\n dates: [\n timeSunday.floor(today),\n timeDay.offset(timeSunday.ceil(today), -1),\n ],\n },\n {\n id: PresetType.THIS_WEEK_SO_FAR,\n title: 'This week so far',\n subtitle: 'The current calendar week up to now',\n dates: [timeSunday.floor(today), timeDay.floor(today)],\n },\n {\n id: PresetType.LAST_WEEK,\n title: 'Last week',\n subtitle: 'The previous calendar week',\n dates: [\n timeSunday.offset(timeWeek.floor(today), -1),\n timeDay.offset(timeSunday.offset(timeWeek.ceil(today), -1), -1),\n ],\n },\n {\n id: PresetType.NEXT_WEEK,\n title: 'Next week',\n subtitle: 'The next calendar week',\n dates: [\n timeSunday.offset(timeWeek.floor(today), 1),\n timeDay.offset(timeSunday.offset(timeWeek.ceil(today), 1), -1),\n ],\n },\n {\n id: PresetType.THIS_MONTH,\n title: 'This month',\n subtitle: 'The current calendar month',\n dates: [\n timeMonth.floor(today),\n timeDay.offset(timeMonth.ceil(today), -1),\n ],\n },\n {\n id: PresetType.THIS_MONTH_SO_FAR,\n title: 'This month so far',\n subtitle: 'The current calendar month up to now',\n dates: [timeMonth.floor(today), timeDay.floor(today)],\n },\n {\n id: PresetType.LAST_MONTH,\n title: 'Last month',\n subtitle: 'The previous calendar month',\n dates: [\n timeMonth.offset(timeMonth.floor(today), -1),\n timeDay.offset(timeMonth.offset(timeMonth.ceil(today), -1), -1),\n ],\n },\n {\n id: PresetType.NEXT_MONTH,\n title: 'Next month',\n subtitle: 'The next calendar month',\n dates: [\n timeMonth.offset(timeMonth.floor(today), 1),\n timeDay.offset(timeMonth.offset(timeMonth.ceil(today), 1), -1),\n ],\n },\n {\n id: PresetType.THIS_QUARTER,\n title: 'This quarter',\n subtitle: 'The current quarter',\n dates: [\n timeQuarter.floor(today),\n timeDay.offset(timeQuarter.ceil(today), -1),\n ],\n },\n {\n id: PresetType.THIS_QUARTER_SO_FAR,\n title: 'This quarter so far',\n subtitle: 'The current quarter up to now',\n dates: [timeQuarter.floor(today), timeDay.floor(today)],\n },\n {\n id: PresetType.LAST_QUARTER,\n title: 'Last quarter',\n subtitle: 'The previous full quarter',\n dates: [\n timeQuarter.offset(timeQuarter.floor(today), -1),\n timeDay.offset(timeQuarter.offset(timeQuarter.ceil(today), -1), -1),\n ],\n },\n {\n id: PresetType.NEXT_QUARTER,\n title: 'Next quarter',\n subtitle: 'The next full quarter',\n dates: [\n timeQuarter.offset(timeQuarter.floor(today), 1),\n timeDay.offset(timeQuarter.offset(timeQuarter.ceil(today), 1), -1),\n ],\n },\n {\n id: PresetType.THIS_YEAR,\n title: 'This year',\n subtitle: 'The current calendar year',\n dates: [timeYear.floor(today), timeDay.offset(timeYear.ceil(today), -1)],\n },\n {\n id: PresetType.THIS_YEAR_SO_FAR,\n title: 'This year so far',\n subtitle: 'The current calendar year up to now',\n dates: [timeYear.floor(today), timeDay.floor(today)],\n },\n {\n id: PresetType.LAST_YEAR,\n title: 'Last year',\n subtitle: 'The previous calendar year',\n dates: [\n timeYear.offset(timeYear.floor(today), -1),\n timeDay.offset(timeYear.offset(timeYear.ceil(today), -1), -1),\n ],\n },\n {\n id: PresetType.NEXT_YEAR,\n title: 'Next year',\n subtitle: 'The next calendar year',\n dates: [\n timeYear.offset(timeYear.floor(today), 1),\n timeDay.offset(timeYear.offset(timeYear.ceil(today), 1), -1),\n ],\n },\n {\n id: PresetType.LAST_7_DAYS,\n title: 'Last 7 days',\n subtitle: 'The previous 7 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -8)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_14_DAYS,\n title: 'Last 14 days',\n subtitle: 'The previous 14 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -15)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_30_DAYS,\n title: 'Last 30 days',\n subtitle: 'The previous 30 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -31)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_60_DAYS,\n title: 'Last 60 days',\n subtitle: 'The previous 60 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -61)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_90_DAYS,\n title: 'Last 90 days',\n subtitle: 'The previous 90 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -91)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_180_DAYS,\n title: 'Last 180 days',\n subtitle: 'The previous 180 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -181)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n {\n id: PresetType.LAST_365_DAYS,\n title: 'Last 365 days',\n subtitle: 'The previous 365 days before today',\n dates: [\n timeDay.floor(timeDay.offset(today, -366)),\n timeDay.floor(timeDay.offset(today, -1)),\n ],\n },\n ];\n}\n","<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ open: open$ | async }\"\n ></ng-container>\n </button>\n</ng-container>\n<ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (click)=\"open$.next(true)\"\n [disabled]=\"disabled$ | async\"\n [attr.aria-disabled]=\"(disabled$ | async) ? 'true' : null\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"displayValue$ | async; else placeholderValue; let display\"\n >\n <span class=\"value\">{{ display }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ placeholder$ | async }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n</ng-template>\n\n<ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-inputValue\n [ngTemplateOutletContext]=\"{ $implicit: (distinctValue$ | async) }\"\n>\n <ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false); userSelectedDate$.next(inputValue)\"\n >\n <div class=\"content\" [class.include-preset]=\"showPresets\">\n <div *ngIf=\"showPresets\" class=\"presets\">\n <riv-simple-select\n [label]=\"'Date presets'\"\n [filterabilityOptions]=\"{ enabled: true, placeholder: 'Search' }\"\n [orderBy]=\"'source'\"\n [optionGroups]=\"\n (filteredPresetOptions$ | async) ?? [] | rivOptionGroup\n \"\n [selectedOption]=\"selectedPreset$ | async\"\n (selectedOptionChange)=\"userSelectedPreset$.next($event)\"\n >\n <ng-template #option let-node=\"node\">\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-isFavorite\n [ngTemplateOutletContext]=\"{\n $implicit: (favoritePresetIds$ | async)?.includes(node.id)\n }\"\n >\n <div class=\"preset\" [class.favorite]=\"isFavorite\">\n <div class=\"description\">\n <riv-highlight\n class=\"title\"\n [text]=\"node.title\"\n [indices]=\"node.titleHighlightIndices || []\"\n ></riv-highlight>\n <riv-highlight\n class=\"subtitle\"\n [text]=\"node.subtitle\"\n [indices]=\"node.subtitleHighlightIndices || []\"\n ></riv-highlight>\n </div>\n <button\n (click)=\"\n setFavorite(node, !isFavorite); $event.stopPropagation()\n \"\n type=\"button\"\n >\n <riv-icon\n [name]=\"isFavorite ? 'HeartActive' : 'Heart'\"\n [size]=\"16\"\n [rivTooltip]=\"'Mark as favorite'\"\n ></riv-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n </riv-simple-select>\n <ng-template\n #self\n [ngTemplateOutlet]=\"self\"\n let-favorites\n [ngTemplateOutletContext]=\"{ $implicit: favoritePresets$ | async }\"\n >\n <riv-input-label *ngIf=\"favorites.length\" [label]=\"'Favorites'\">\n <div class=\"shortcuts\">\n <button\n *ngFor=\"let favorite of favorites\"\n class=\"shortcut\"\n [class.active]=\"(selectedPreset$ | async)?.id === favorite.id\"\n (click)=\"userSelectedPreset$.next(favorite)\"\n type=\"button\"\n >\n <span class=\"title\">{{ favorite.title }}</span>\n <button\n (click)=\"setFavorite(favorite, false)\"\n [rivTooltip]=\"'Remove favorite'\"\n type=\"button\"\n >\n <riv-icon [name]=\"'HeartActive'\" [size]=\"16\"></riv-icon>\n </button>\n </button>\n </div>\n </riv-input-label>\n </ng-template>\n </div>\n\n <div class=\"calendars\">\n <riv-calendar\n class=\"left\"\n [activeYearMonth]=\"(leftActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userLeftActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(leftMin$ | async) || TODAY\"\n [selectableMax]=\"(leftMax$ | async) || TODAY\"\n [omitRange]=\"(leftOmitRange$ | async) || [TODAY, TODAY]\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n <riv-calendar\n class=\"right\"\n [activeYearMonth]=\"(rightActiveYearMonth$ | async) || TODAY\"\n (activeYearMonthChange)=\"userRightActiveYearMonth$.next($event)\"\n [displayMin]=\"(min$ | async) || TODAY\"\n [displayMax]=\"(max$ | async) || TODAY\"\n [selectableMin]=\"(rightMin$ | async) || TODAY\"\n [selectableMax]=\"(rightMax$ | async) || TODAY\"\n [selectedValue]=\"(selectedValue$ | async) || TODAY\"\n (dateSelect)=\"userSelectedDate$.next($event)\"\n ></riv-calendar>\n </div>\n\n <footer class=\"buttons\">\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"userSelectedDate$.next(undefined)\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n rivButton\n [size]=\"'small'\"\n [variant]=\"'primary'\"\n (click)=\"open$.next(false)\"\n type=\"button\"\n >\n Done\n </button>\n </footer>\n </div>\n </riv-callout>\n </ng-container>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { timeDay, timeMonth } from 'd3-time';\nimport { uniqueId } from 'lodash';\nimport { BehaviorSubject } from 'rxjs';\nimport { DatePipe } from '../../format/pipes/date.pipe';\nimport { CalendarComponent } from '../calendar/calendar.component';\nimport { InputLabelComponent } from '../input-label/input-label.component';\n\n@Component({\n selector: 'riv-date',\n templateUrl: './date.component.html',\n styleUrls: ['./date.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DateComponent extends InputLabelComponent implements OnChanges {\n @Input()\n min: Date = CalendarComponent.defaultMin;\n\n @Input()\n max: Date = CalendarComponent.defaultMax;\n\n @Input()\n set value(v: Date | undefined) {\n if (this._value?.getTime() === v?.getTime()) return;\n this._value = v;\n // Skip text sync while typing so we don't stomp the user's in-progress input.\n if (!this.hasFocus) this.syncInputText();\n if (v) this.setActiveMonth(v);\n this.cdr.markForCheck();\n }\n get value(): Date | undefined {\n return this._value;\n }\n private _value?: Date;\n\n @Input()\n placeholder: string = 'Select date';\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n size: DateComponent.Size = 'medium';\n\n @Input()\n showClearButton: boolean = true;\n\n @Input()\n showTodayButton: boolean = true;\n\n @Input()\n rollingTodayLabel?: string;\n\n @ContentChild('header')\n headerTemplate?: TemplateRef<void>;\n\n activeYearMonth = timeMonth.floor(new Date());\n\n readonly open$ = new BehaviorSubject<boolean>(false);\n @Input()\n set open(v: boolean) {\n this.open$.next(v);\n }\n get open(): boolean {\n return this.open$.getValue();\n }\n\n /**\n * Id the combobox `aria-controls` points at, worn by the lazily rendered\n * calendar popup. Generated per instance so multiple pickers on one page\n * never collide.\n */\n readonly calendarId = uniqueId('riv-date-calendar-');\n\n @Output()\n valueChange = new EventEmitter<Date | undefined>();\n\n inputText: string = '';\n previewValue?: Date;\n private hasFocus: boolean = false;\n private readonly datePipe = new DatePipe();\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rollingTodayLabel'] && !this.hasFocus) this.syncInputText();\n }\n\n // The callout renders with isModal=false (no full-viewport scrim) and can't\n // self-close on outside clicks. Any overlay layer — including sibling\n // overlays like the month/year selects — counts as \"inside\" the picker.\n @HostListener('document:mousedown', ['$event.target'])\n onDocumentMouseDown(target: EventTarget | null): void {\n if (!this.open$.getValue() || !(target instanceof Element)) return;\n if (this.host.nativeElement.contains(target)) return;\n if (target.closest('.callout, .scrim, .overlay-container')) return;\n this.open$.next(false);\n this.cdr.markForCheck();\n }\n\n clearValue(): void {\n this.commit(undefined);\n this.open$.next(false);\n }\n\n selectToday(): void {\n if (!this.isTodaySelectable) return;\n this.commit(this.isRolling ? undefined : timeDay.floor(new Date()));\n this.open$.next(false);\n }\n\n get isTodaySelectable(): boolean {\n return DateComponent.isValidDate(\n timeDay.floor(new Date()),\n this.min,\n this.max,\n );\n }\n\n get selectedCalendarValue(): Date | undefined {\n return (\n this.previewValue ??\n this._value ??\n (this.isRolling ? timeDay.floor(new Date()) : undefined)\n );\n }\n\n onInputChange(value: string): void {\n this.inputText = value;\n const parsed = this.parseInput(value);\n this.previewValue = parsed;\n if (parsed) this.setActiveMonth(parsed);\n this.cdr.markForCheck();\n }\n\n onInputBlur(event?: FocusEvent): void {\n this.hasFocus = false;\n const parsed = this.parseInput(this.inputText);\n if (parsed) {\n this.commit(parsed);\n } else if (!this.inputText.trim() || this.isRollingText(this.inputText)) {\n this.commit(undefined);\n } else {\n // Invalid text — revert to whatever the committed value was.\n this.syncInputText();\n }\n this.previewValue = undefined;\n // Close on keyboard-driven focus changes (Tab out). Stay open if focus\n // moved into a nested overlay (e.g. the calendar's month/year select).\n // Mouse clicks inside the calendar preventDefault mousedown so this\n // handler never runs for them.\n const nextTarget = event?.relatedTarget;\n const stayOpen =\n nextTarget instanceof Element &&\n (this.host.nativeElement.contains(nextTarget) ||\n !!nextTarget.closest('.callout, .scrim, .overlay-container'));\n if (!stayOpen) this.open$.next(false);\n this.cdr.markForCheck();\n }\n\n onDateSelect(date: Date): void {\n this.commit(timeDay.floor(date));\n this.open$.next(false);\n }\n\n onInputFocus(): void {\n this.hasFocus = true;\n this.open$.next(true);\n }\n\n toggleCalendar(): void {\n this.open$.next(!this.open$.getValue());\n }\n\n private get isRolling(): boolean {\n return this.rollingTodayLabel != null;\n }\n\n private isRollingText(text: string): boolean {\n return (\n this.rollingTodayLabel != null &&\n text.trim().toLowerCase() === this.rollingTodayLabel.toLowerCase()\n );\n }\n\n private syncInputText(): void {\n this.inputText = this._value\n ? this.formatValue(this._value)\n : this.rollingTodayLabel ?? '';\n }\n\n private formatValue(date: Date): string {\n return this.datePipe.transform(date);\n }\n\n private parseInput(text: string): Date | undefined {\n const parsed = DateComponent.parseDate(text);\n return parsed && DateComponent.isValidDate(parsed, this.min, this.max)\n ? timeDay.floor(parsed)\n : undefined;\n }\n\n private setActiveMonth(date: Date): void {\n const month = timeMonth.floor(date);\n if (month.getTime() !== this.activeYearMonth.getTime()) {\n this.activeYearMonth = month;\n }\n }\n\n private commit(next: Date | undefined): void {\n const unchanged = next?.getTime() === this._value?.getTime();\n this._value = next;\n this.syncInputText();\n this.previewValue = undefined;\n if (next) this.setActiveMonth(next);\n if (!unchanged) this.valueChange.emit(next);\n this.cdr.markForCheck();\n }\n}\n\nexport namespace DateComponent {\n export const Sizes = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n ] as const;\n export type Size = (typeof Sizes)[number];\n\n // Accepts MM/DD/YYYY, M/D/YY, and YYYY-MM-DD with /, -, or . separators, as\n // well as separator-less digit runs (MMDDYYYY or MMDDYY). A 4-digit leading\n // segment in the separated form is treated as an ISO year; 2-digit years\n // pivot at 50 (<50 → 2000s, >=50 → 1900s).\n export function parseDate(input: string): Date | undefined {\n const trimmed = input.trim();\n if (!trimmed) return undefined;\n\n const ymd = /^\\d+$/.test(trimmed)\n ? parseDigits(trimmed)\n : parseSeparated(trimmed);\n if (!ymd) return undefined;\n\n const [year, month, day] = ymd;\n const date = new Date(year, month - 1, day);\n return date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n ? date\n : undefined;\n }\n\n function expandTwoDigitYear(year: number): number {\n return year < 100 ? year + (year < 50 ? 2000 : 1900) : year;\n }\n\n // A run of digits with no separators: 8 → MMDDYYYY (literal year), 6 → MMDDYY\n // (2-digit year pivoted at 50).\n function parseDigits(digits: string): [number, number, number] | undefined {\n if (digits.length !== 8 && digits.length !== 6) return undefined;\n const year = parseInt(digits.slice(4), 10);\n return [\n digits.length === 6 ? expandTwoDigitYear(year) : year,\n parseInt(digits.slice(0, 2), 10),\n parseInt(digits.slice(2, 4), 10),\n ];\n }\n\n function parseSeparated(input: string): [number, number, number] | undefined {\n const parts = input.split(/[/.-]/);\n if (parts.length !== 3) return undefined;\n\n const nums = parts.map(p => parseInt(p, 10));\n if (nums.some(isNaN)) return undefined;\n\n const [year, month, day] =\n parts[0].length === 4 ? nums : [nums[2], nums[0], nums[1]];\n return [\n parts[0].length === 4 ? year : expandTwoDigitYear(year),\n month,\n day,\n ];\n }\n\n export function isValidDate(date: Date, min: Date, max: Date): boolean {\n const time = date.getTime();\n return time >= min.getTime() && time <= max.getTime();\n }\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <div\n #trigger\n class=\"trigger\"\n [class.xsmall]=\"size === 'xsmall'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.xlarge]=\"size === 'xlarge'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.disabled]=\"disabled\"\n >\n <input\n #input\n class=\"value\"\n [placeholder]=\"placeholder\"\n [value]=\"inputText\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-controls]=\"calendarId\"\n [attr.aria-expanded]=\"open$ | async\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n aria-autocomplete=\"none\"\n (input)=\"onInputChange(input.value)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus()\"\n (keydown.enter)=\"input.blur(); open$.next(false); $event.preventDefault()\"\n type=\"text\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n <button\n class=\"chevron\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"toggleCalendar()\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-label]=\"(open$ | async) ? 'Close calendar' : 'Open calendar'\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <riv-icon [name]=\"'Calendar'\" [size]=\"16\"></riv-icon>\n </button>\n </div>\n</riv-input-label>\n<ng-container *ngIf=\"open$ | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-right',\n 'bottom-right',\n 'bottom-left'\n ]\"\n [preferredPosition]=\"'bottom-right'\"\n (close)=\"open$.next(false)\"\n >\n <div [attr.id]=\"calendarId\" (mousedown)=\"$event.preventDefault()\">\n <header *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </header>\n <div class=\"content\">\n <riv-calendar\n [activeYearMonth]=\"activeYearMonth\"\n (activeYearMonthChange)=\"activeYearMonth = $event\"\n [displayMin]=\"min\"\n [displayMax]=\"max\"\n [selectableMin]=\"min\"\n [selectableMax]=\"max\"\n [selectedValue]=\"selectedCalendarValue\"\n (dateSelect)=\"onDateSelect($event); input.blur()\"\n ></riv-calendar>\n </div>\n <footer *ngIf=\"showClearButton || showTodayButton\" class=\"buttons\">\n <button\n *ngIf=\"showClearButton\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'ghost'\"\n (click)=\"clearValue(); input.blur()\"\n type=\"button\"\n >\n Clear\n </button>\n <button\n *ngIf=\"showTodayButton\"\n class=\"today\"\n rivButton\n [size]=\"'small'\"\n [variant]=\"'basic'\"\n [disabled]=\"!isTodaySelectable\"\n (click)=\"selectToday(); input.blur()\"\n type=\"button\"\n >\n Today\n </button>\n </footer>\n </div>\n </riv-callout>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n selector: 'riv-filter-chip',\n templateUrl: './filter-chip.component.html',\n styleUrls: ['./filter-chip.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterChipComponent {\n constructor() {}\n\n private readonly selected$ = new BehaviorSubject<boolean>(false);\n @Input()\n public set selected(v: boolean) {\n if (v !== this.selected$.getValue()) {\n this.selected$.next(v);\n }\n }\n public get selected(): boolean {\n return this.selected$.getValue();\n }\n\n @Output()\n chipClicked = new EventEmitter<boolean>();\n\n @HostBinding('class')\n get classes() {\n return Object.entries({\n selected: this.selected,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n @HostListener('click', ['$event'])\n onClick(e: any) {\n this.chipClicked.emit(!this.selected);\n }\n}\n","<riv-icon\n *ngIf=\"selected\"\n class=\"checkmark\"\n [name]=\"'Check'\"\n [size]=\"12\"\n></riv-icon>\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-badge',\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BadgeComponent {\n @Input()\n variant: BadgeComponent.Variant = 'brand';\n\n @Input()\n size: BadgeComponent.Size = 'medium';\n\n @HostBinding('class')\n get classes() {\n return `${this.size} ${this.variant}`;\n }\n}\n\nexport namespace BadgeComponent {\n export const Sizes = ['xsmall', 'small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n\n export const Variants = [\n 'brand',\n 'disabled',\n\n 'qualitative-safety',\n 'qualitative-caution',\n 'qualitative-warning',\n 'qualitative-danger',\n 'qualitative-danger-inverse',\n\n 'categorical-2',\n 'categorical-3',\n 'categorical-4',\n 'categorical-6',\n 'categorical-7',\n 'categorical-8',\n 'categorical-9',\n 'categorical-10',\n ] as const;\n export type Variant = (typeof Variants)[number];\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { CalloutComponent } from '../../overlay/callout/callout.component';\n\n@Component({\n selector: 'riv-filter-dropdown',\n templateUrl: './filter-dropdown.component.html',\n styleUrls: ['./filter-dropdown.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterDropdownComponent {\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n @Input()\n label: string = '';\n\n @Input()\n value: string | null = null;\n\n /** Pixels added to the value's 120px max width before it truncates. */\n @Input()\n valueExtraWidth: number = 0;\n\n @Input()\n count: number | null = null;\n\n /** Whether a filter is applied (Figma's \"Active\"); inactive is unfilled. */\n @Input()\n active: boolean = false;\n\n @Input()\n removable: boolean = true;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n tooltip: string | null = null;\n\n @Input()\n open: boolean = false;\n\n @Input()\n preferredPosition: CalloutComponent.AnchoredPosition = 'bottom-right';\n\n @Input()\n allowedPositions: CalloutComponent.AnchoredPosition[] = [\n 'bottom-right',\n 'top-right',\n ];\n\n @Output()\n readonly openChange = new EventEmitter<boolean>();\n\n @Output()\n readonly remove = new EventEmitter<void>();\n\n @ContentChild('trigger')\n triggerTemplate?: TemplateRef<{ open: boolean }>;\n\n @ContentChild('content')\n contentTemplate?: TemplateRef<void>;\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n active: this.active,\n removable: this.removable,\n disabled: this.disabled,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n // The callout's close fires from the overlay outlet, outside this view.\n setOpen(open: boolean) {\n this.open = open;\n this.openChange.emit(open);\n this.cdr.markForCheck();\n }\n}\n","<span #anchor>\n <button\n *ngIf=\"triggerTemplate; else defaultTrigger\"\n class=\"custom-trigger\"\n type=\"button\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"label || null\"\n [attr.aria-expanded]=\"open\"\n (click)=\"setOpen(!open)\"\n >\n <ng-container\n *ngTemplateOutlet=\"triggerTemplate; context: { open: open }\"\n ></ng-container>\n </button>\n <ng-template #defaultTrigger>\n <div\n class=\"trigger\"\n [rivTooltip]=\"tooltip ?? undefined\"\n (click)=\"!disabled && setOpen(!open)\"\n >\n <button\n *ngIf=\"removable && !disabled\"\n rivButton\n type=\"button\"\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n [attr.aria-label]=\"'Remove ' + label\"\n (click)=\"$event.stopPropagation(); remove.emit()\"\n ></button>\n <span class=\"label\">{{ label }}</span>\n <ng-container *ngIf=\"value !== null\">\n <div class=\"divider\"></div>\n <span class=\"value\" [style.max-width.px]=\"120 + valueExtraWidth\">{{\n value\n }}</span>\n </ng-container>\n <span *ngIf=\"(count ?? 0) > 0\" class=\"count\">\n <riv-badge\n [size]=\"'xsmall'\"\n [variant]=\"disabled ? 'disabled' : 'brand'\"\n >{{ count }}</riv-badge\n >\n </span>\n <button\n *ngIf=\"!disabled\"\n rivButton\n type=\"button\"\n [variant]=\"'ghost'\"\n [icon]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [attr.aria-label]=\"label\"\n [attr.aria-expanded]=\"open\"\n ></button>\n </div>\n </ng-template>\n</span>\n\n<ng-container *ngIf=\"open && !disabled\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"preferredPosition\"\n [allowedPositions]=\"allowedPositions\"\n (close)=\"setOpen(false)\"\n >\n <div class=\"content\">\n <ng-container *ngTemplateOutlet=\"contentTemplate ?? null\"></ng-container>\n </div>\n </riv-callout>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nconst ZWS = '​';\nconst ZWS_REGEX = /​/g;\n\n/**\n * A rich text input that supports `@`-mentions inside a `contenteditable` div.\n *\n * ## Data Model\n * - **Input/Output**: `ContentItem[]` (mentions, text, newlines)\n *\n * ## DOM Invariant\n * Every mention `<span data-type=\"mention\" contenteditable=\"false\">` is wrapped\n * by exactly one zero-width-space (ZWS) text node before and after it. ZWS gives\n * the cursor a valid landing spot adjacent to a non-editable element. The\n * invariant is established at render time and re-established by\n * `normalizeMentionPadding()` after any DOM-mutating operation.\n *\n * ## Copy/Paste\n * - **Copy**: `range.cloneContents()` preserves `data-*` attributes (only the\n * browser's default copy path strips them). We override copy, serialize the\n * clone ourselves, and strip ZWS from the output.\n * - **Paste**: HTML paths look for `data-type=\"mention\"` spans and rebuild\n * them; otherwise plaintext fallback.\n */\n@Component({\n selector: 'riv-mentions-input',\n templateUrl: `./mentions-input.component.html`,\n styleUrls: ['./mentions-input.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MentionsInputComponent implements OnChanges, AfterViewInit {\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n @Input() content: MentionsInputComponent.ContentItem[] = [];\n @Input() users: MentionsInputComponent.User[] = [];\n @Input() readonly = false;\n @Input() placeholder: string = 'Add a comment';\n\n @Output() readonly contentChange = new EventEmitter<\n MentionsInputComponent.ContentItem[]\n >();\n\n @ViewChild('input', { static: false })\n private readonly inputElement?: ElementRef<HTMLDivElement>;\n\n mentionsVisible = false;\n mentionSearchText = '';\n mentionAnchor: DOMRect | null = null;\n selectedUserIndex = 0;\n private savedRange: Range | null = null;\n\n ngAfterViewInit(): void {\n this.renderContent();\n }\n\n //DAHNE NOTE - ngOnChanges is called whenever any @Input() property changes, where the changed input contains information about those changes\n //So if @Input() content changes and it's not the first change (the first render is handled by ngAfterViewInit()), we render the content\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['content'] && !changes['content'].firstChange) {\n this.renderContent();\n }\n }\n\n private renderContent(): void {\n //This is necessary because the @ViewChild reference isn't available until after the view initializes\n if (!this.inputElement?.nativeElement) {\n return;\n }\n const html = this.content\n .map(item => {\n const itemHtml = MentionsInputComponent.contentItemToHtml(\n item,\n this.readonly,\n );\n return item.type === 'mention' ? `${ZWS}${itemHtml}${ZWS}` : itemHtml;\n })\n .join('');\n this.inputElement.nativeElement.innerHTML = html;\n }\n\n private static contentItemToHtml(\n item: MentionsInputComponent.ContentItem,\n readonly: boolean,\n ): string {\n switch (item.type) {\n //DAHNE TODO - maybe we escape HTML here too? Although I don't think it will be possible for users to input an XSS attack in item.name\n case 'mention':\n return `<span class=\"${\n readonly ? 'readonly-mention' : 'mention'\n }\" data-id=\"${\n item.id\n }\" data-type=\"mention\" contenteditable=\"false\">@${MentionsInputComponent.escapeHtml(\n item.name,\n )}</span>`;\n case 'text':\n return MentionsInputComponent.escapeHtml(item.text);\n case 'newline':\n return '<br>';\n }\n }\n\n private static escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n\n // ─── Event handlers ───────────────────────────────────────────────────\n\n onInput(): void {\n this.normalizeMentionPadding();\n this.checkForMentionTrigger();\n this.emitContentChange();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.mentionsVisible) {\n this.handleMentionsDropdownNav(event);\n return;\n }\n\n // Word/line jump: native behavior.\n if (event.metaKey || event.ctrlKey) {\n return;\n }\n\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n const direction = event.key === 'ArrowLeft' ? 'before' : 'after';\n const mention = this.findMentionAdjacentToCursor(direction);\n if (mention) {\n event.preventDefault();\n if (event.shiftKey) {\n this.extendSelectionAcrossMention(mention, direction);\n } else {\n this.placeCursorAdjacentToMention(mention, direction);\n }\n }\n return;\n }\n\n if (event.key === 'Backspace' || event.key === 'Delete') {\n const direction = event.key === 'Backspace' ? 'before' : 'after';\n const mention = this.findMentionAdjacentToCursor(direction);\n if (mention) {\n event.preventDefault();\n this.removeMention(mention);\n this.emitContentChange();\n return;\n }\n if (event.key === 'Backspace') {\n const br = this.findBrAdjacentToCursor();\n if (br) {\n event.preventDefault();\n br.remove();\n this.emitContentChange();\n }\n }\n return;\n }\n //Handle newlines when mentions aren't visible\n if (event.key === 'Enter') {\n event.preventDefault();\n this.insertLineBreak();\n this.emitContentChange();\n }\n }\n\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n if (!event.clipboardData) {\n return;\n }\n //Look for HTML first\n const html = event.clipboardData.getData('text/html');\n const plainText = event.clipboardData.getData('text/plain');\n\n const nodes =\n html && html.includes('data-type=\"mention\"')\n ? this.parsePastedHtml(html)\n : this.plainTextToNodes(plainText);\n\n this.insertNodesAtCursor(nodes);\n this.normalizeMentionPadding();\n this.emitContentChange();\n }\n\n // The browser strips data-* attributes during default copy serialization, but\n // range.cloneContents() preserves them. We serialize the clone ourselves and\n // strip ZWS so it doesn't leak into the clipboard.\n onCopy(event: ClipboardEvent): void {\n const selection = window.getSelection();\n if (!selection?.rangeCount) {\n return;\n }\n event.preventDefault();\n\n const div = document.createElement('div');\n div.appendChild(selection.getRangeAt(0).cloneContents());\n\n const html = div.innerHTML.replace(ZWS_REGEX, '');\n const text = (div.textContent || '').replace(ZWS_REGEX, '');\n\n event.clipboardData?.setData('text/html', html);\n event.clipboardData?.setData('text/plain', text);\n }\n\n onCut(event: ClipboardEvent): void {\n this.onCopy(event);\n const selection = window.getSelection();\n if (!selection?.rangeCount) {\n return;\n }\n selection.getRangeAt(0).deleteContents();\n this.normalizeMentionPadding();\n this.emitContentChange();\n }\n\n // ─── Mention helpers ───────────────────────────────────────────────────\n\n private static isMention(node: Node | null | undefined): node is HTMLElement {\n return (\n !!node &&\n node.nodeType === Node.ELEMENT_NODE &&\n (node as HTMLElement).getAttribute('data-type') === 'mention'\n );\n }\n\n private static isZws(node: Node | null | undefined): boolean {\n return (\n !!node &&\n node.nodeType === Node.TEXT_NODE &&\n (node.textContent || '').replace(ZWS_REGEX, '') === ''\n );\n }\n\n // Resolve the node logically adjacent to (container, offset) in the given\n // direction, transparently skipping any ZWS-only text nodes in between.\n private resolveAdjacentNode(\n container: Node,\n offset: number,\n direction: 'before' | 'after',\n ): Node | null {\n let candidate: Node | null = null;\n\n if (container.nodeType === Node.TEXT_NODE) {\n const length = (container.textContent || '').length;\n const atBoundary =\n MentionsInputComponent.isZws(container) ||\n (direction === 'before' ? offset === 0 : offset === length);\n if (!atBoundary) {\n return null;\n }\n candidate =\n direction === 'before'\n ? container.previousSibling\n : container.nextSibling;\n } else if (container.nodeType === Node.ELEMENT_NODE) {\n const children = (container as HTMLElement).childNodes;\n candidate =\n direction === 'before' ? children[offset - 1] : children[offset];\n }\n\n while (candidate && MentionsInputComponent.isZws(candidate)) {\n candidate =\n direction === 'before'\n ? candidate.previousSibling\n : candidate.nextSibling;\n }\n return candidate;\n }\n\n private findMentionAdjacentToCursor(\n direction: 'before' | 'after',\n ): HTMLElement | null {\n const selection = window.getSelection();\n if (!selection?.isCollapsed || !selection.rangeCount) {\n return null;\n }\n const range = selection.getRangeAt(0);\n const node = this.resolveAdjacentNode(\n range.startContainer,\n range.startOffset,\n direction,\n );\n return MentionsInputComponent.isMention(node) ? node : null;\n }\n\n private findBrAdjacentToCursor(): HTMLElement | null {\n const selection = window.getSelection();\n if (!selection?.isCollapsed || !selection.rangeCount) {\n return null;\n }\n const range = selection.getRangeAt(0);\n const node = this.resolveAdjacentNode(\n range.startContainer,\n range.startOffset,\n 'before',\n );\n return node?.nodeName === 'BR' ? (node as HTMLElement) : null;\n }\n\n private extendSelectionAcrossMention(\n mention: HTMLElement,\n direction: 'before' | 'after',\n ): void {\n const selection = window.getSelection();\n const parent = mention.parentNode;\n if (!selection || !parent) {\n return;\n }\n const index = Array.from(parent.childNodes).indexOf(mention as ChildNode);\n selection.extend(parent, direction === 'before' ? index : index + 1);\n }\n\n private placeCursorAdjacentToMention(\n mention: HTMLElement,\n side: 'before' | 'after',\n ): void {\n const parent = mention.parentNode;\n if (!parent) {\n return;\n }\n const sibling =\n side === 'before' ? mention.previousSibling : mention.nextSibling;\n let zws: Node;\n if (sibling && MentionsInputComponent.isZws(sibling)) {\n zws = sibling;\n } else {\n zws = document.createTextNode(ZWS);\n parent.insertBefore(\n zws,\n side === 'before' ? mention : mention.nextSibling,\n );\n }\n const range = document.createRange();\n range.setStart(zws, side === 'before' ? (zws.textContent || '').length : 0);\n range.collapse(true);\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n\n private removeMention(mention: HTMLElement): void {\n const parent = mention.parentNode;\n if (!parent) {\n return;\n }\n // Empty text-node anchor preserves cursor position through the removal.\n const anchor = document.createTextNode('');\n parent.insertBefore(anchor, mention);\n\n const prev = mention.previousSibling;\n const next = mention.nextSibling;\n if (prev && MentionsInputComponent.isZws(prev)) {\n prev.remove();\n }\n if (next && MentionsInputComponent.isZws(next)) {\n next.remove();\n }\n mention.remove();\n\n const range = document.createRange();\n range.setStart(anchor, 0);\n range.collapse(true);\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n\n // Re-establishes the invariant: every mention has exactly one ZWS text\n // node immediately before and after it, and there are no orphan ZWS-only\n // text nodes anywhere else. Run after any operation that may disturb the\n // tree (typing, paste, cut, delete) so cruft doesn't accumulate across\n // repeated copy/paste cycles.\n private normalizeMentionPadding(): void {\n const root = this.inputElement?.nativeElement;\n if (!root) {\n return;\n }\n\n // 1. Ensure each mention has a ZWS pad on both sides.\n const mentions = Array.from(\n root.querySelectorAll('span[data-type=\"mention\"]'),\n ) as HTMLElement[];\n for (const m of mentions) {\n const parent = m.parentNode;\n if (!parent) {\n continue;\n }\n if (\n !m.previousSibling ||\n !MentionsInputComponent.isZws(m.previousSibling)\n ) {\n parent.insertBefore(document.createTextNode(ZWS), m);\n }\n if (!m.nextSibling || !MentionsInputComponent.isZws(m.nextSibling)) {\n parent.insertBefore(document.createTextNode(ZWS), m.nextSibling);\n }\n }\n\n // 2. Remove any ZWS-only text node that isn't directly adjacent to a\n // mention (orphans from line-break pads, leftover splits from previous\n // paste insertions, duplicate pads from accumulated copy/paste cycles).\n // Skip a node if the cursor currently lives in it — preserves caret\n // position without needing manual restoration.\n const selection = window.getSelection();\n const cursorNode =\n selection?.rangeCount &&\n root.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0).startContainer\n : null;\n\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n const orphans: Text[] = [];\n while (walker.nextNode()) {\n const node = walker.currentNode as Text;\n if (!MentionsInputComponent.isZws(node) || node === cursorNode) {\n continue;\n }\n const adjacentToMention =\n MentionsInputComponent.isMention(node.previousSibling) ||\n MentionsInputComponent.isMention(node.nextSibling);\n if (!adjacentToMention) {\n orphans.push(node);\n }\n }\n for (const node of orphans) {\n node.remove();\n }\n }\n\n private handleMentionsDropdownNav(event: KeyboardEvent): void {\n const filteredUsers = this.getFilteredUsers();\n if (filteredUsers.length === 0) {\n this.closeMentions();\n return;\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.selectedUserIndex = Math.min(\n this.selectedUserIndex + 1,\n filteredUsers.length - 1,\n );\n this.cdr.markForCheck();\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.selectedUserIndex = Math.max(this.selectedUserIndex - 1, 0);\n this.cdr.markForCheck();\n break;\n case 'Enter':\n case 'Tab':\n event.preventDefault();\n if (filteredUsers[this.selectedUserIndex]) {\n this.selectUser(filteredUsers[this.selectedUserIndex]);\n }\n break;\n case 'Escape':\n event.preventDefault();\n this.closeMentions();\n break;\n }\n }\n\n // ─── Insertion ─────────────────────────────────────────────────────────\n\n private plainTextToNodes(text: string): Node[] {\n const nodes: Node[] = [];\n const lines = text.split('\\n');\n lines.forEach((line, index) => {\n if (line) {\n nodes.push(document.createTextNode(line));\n }\n if (index < lines.length - 1) {\n nodes.push(document.createElement('br'));\n }\n });\n return nodes;\n }\n // Create a temporary container to parse the HTML\n private parsePastedHtml(html: string): Node[] {\n // Create a temporary container to parse the HTML\n const tempContainer = document.createElement('div');\n tempContainer.innerHTML = html;\n\n const nodes: Node[] = [];\n const walk = (node: Node): void => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as HTMLElement;\n // DAHNE NOTE - we only want mention spans, br elements, and text\n if (\n el.tagName === 'SPAN' &&\n el.getAttribute('data-type') === 'mention' &&\n el.hasAttribute('data-id')\n ) {\n //Create mention to ultimately insert into the DOM\n const span = document.createElement('span');\n span.className = this.readonly ? 'readonly-mention' : 'mention';\n span.setAttribute('data-id', el.getAttribute('data-id') || '');\n span.setAttribute('data-type', 'mention');\n span.setAttribute('contenteditable', 'false');\n const raw = el.textContent || '';\n span.textContent = raw.startsWith('@') ? raw : `@${raw}`;\n nodes.push(span);\n } else if (el.tagName === 'BR') {\n // Preserve line breaks\n nodes.push(document.createElement('br'));\n } else {\n //Recursively look for nested children\n for (const child of Array.from(el.childNodes)) {\n walk(child);\n }\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n const text = (node.textContent || '').replace(ZWS_REGEX, '');\n if (text) {\n nodes.push(document.createTextNode(text));\n }\n }\n };\n\n for (const child of Array.from(tempContainer.childNodes)) {\n walk(child);\n }\n //DAHNE NOTE - the result here should be an array of text/span-mention/br nodes\n return nodes;\n }\n\n private insertNodesAtCursor(nodes: Node[]): void {\n //Get selection object, representing user cursor position/selection\n //Get Range object at start of selection, which should represent cursor position\n //If there is a selection, delete it\n //Insert the parsed nodes from above, move range ends to after node\n //Then remove the range and reset it to move the cursor position to the end\n const selection = window.getSelection();\n if (!selection?.rangeCount) {\n return;\n }\n const range = selection.getRangeAt(0);\n range.deleteContents();\n\n let cursorTarget: Node | null = null;\n for (const node of nodes) {\n if (MentionsInputComponent.isMention(node)) {\n const before = document.createTextNode(ZWS);\n const after = document.createTextNode(ZWS);\n range.insertNode(before);\n range.setStartAfter(before);\n range.insertNode(node);\n range.setStartAfter(node);\n range.insertNode(after);\n range.setStartAfter(after);\n cursorTarget = after;\n } else {\n range.insertNode(node);\n range.setStartAfter(node);\n cursorTarget = node;\n }\n range.collapse(true);\n }\n\n // After a mention, leave the cursor inside the trailing ZWS so ArrowLeft\n // can step back to before-the-mention naturally.\n if (cursorTarget && MentionsInputComponent.isZws(cursorTarget)) {\n range.setStart(cursorTarget, 0);\n range.collapse(true);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n private insertLineBreak(): void {\n const selection = window.getSelection();\n if (!selection?.rangeCount || !this.inputElement?.nativeElement) {\n return;\n }\n const range = selection.getRangeAt(0);\n range.deleteContents();\n\n const br = document.createElement('br');\n range.insertNode(br);\n range.setStartAfter(br);\n range.collapse(true);\n\n // A trailing <br> alone doesn't render an empty line in contenteditable —\n // a ZWS gives the caret a place to land.\n if (!br.nextSibling) {\n const zws = document.createTextNode(ZWS);\n range.insertNode(zws);\n range.setStart(zws, 0);\n range.collapse(true);\n }\n\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n // ─── Mention trigger / dropdown ────────────────────────────────────────\n\n private checkForMentionTrigger(): void {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount || !this.inputElement) {\n return;\n }\n\n const range = selection.getRangeAt(0);\n const textBeforeCursor = this.getTextBeforeCursor(range);\n const lastAtIndex = textBeforeCursor.lastIndexOf('@');\n\n if (lastAtIndex === -1) {\n this.closeMentions();\n return;\n }\n //If we allow for a single space, we need to check to make sure that this logic won't pick up previous\n //'@' mentions and keep the mention dropdown open\n const atPosition = this.findDomPositionAtCharIndex(lastAtIndex);\n if (atPosition && this.isInsideMentionSpan(atPosition.node)) {\n this.closeMentions();\n return;\n }\n\n const textAfterAt = textBeforeCursor.substring(lastAtIndex + 1);\n const char1 = textAfterAt.charCodeAt(0);\n const charN = textAfterAt.charCodeAt(textAfterAt.length - 1);\n const charN_1 = textAfterAt.charCodeAt(textAfterAt.length - 2);\n //These are the Unicode representations of normal space and non-breaking space\n const unicodeSpaceChars = [32, 160];\n\n // Close mentions if:\n // - There's a double space (allows single spaces in the middle of search)\n // - The text starts with a space (typing \"@ \" should not trigger mentions)\n if (\n textAfterAt.includes(' ') ||\n textAfterAt.startsWith(' ') ||\n char1 == 160 ||\n (unicodeSpaceChars.includes(charN) && unicodeSpaceChars.includes(charN_1))\n ) {\n this.closeMentions();\n return;\n }\n // Trim trailing/leading spaces from search text while preserving spaces in the middle\n this.mentionSearchText = textAfterAt.trim();\n // Only show mentions if there are filtered users\n const filteredUsers = this.getFilteredUsers();\n if (filteredUsers.length === 0) {\n this.closeMentions();\n return;\n }\n\n this.mentionsVisible = true;\n this.selectedUserIndex = 0;\n\n //Save the current range for later restoration (needed for click selection)\n //DAHNE NOTE - this is annoyingly neceessary because clicks and enter keys have different effects on the\n //focus of the contenteditable div\n this.savedRange = range.cloneRange();\n\n if (atPosition) {\n const atRange = document.createRange();\n atRange.setStart(atPosition.node, atPosition.offset);\n atRange.setEnd(atPosition.node, atPosition.offset + 1);\n this.mentionAnchor = atRange.getBoundingClientRect();\n }\n this.cdr.markForCheck();\n }\n\n private getTextBeforeCursor(range: Range): string {\n const clonedRange = range.cloneRange();\n //We select all of the input contents, and then move the end point to the current cursor position\n clonedRange.selectNodeContents(this.inputElement!.nativeElement);\n clonedRange.setEnd(range.endContainer, range.endOffset);\n //Create a temporary div so that we can extract text content from it\n const fragment = clonedRange.cloneContents();\n const div = document.createElement('div');\n div.appendChild(fragment);\n //Get text content, replacing mention spans with @name\n return div.textContent || '';\n }\n\n getFilteredUsers(): MentionsInputComponent.User[] {\n const users = !this.mentionSearchText\n ? this.users\n : this.users.filter(user =>\n user.name\n .toLowerCase()\n .includes(this.mentionSearchText.toLowerCase()),\n );\n return users.slice().sort((a, b) => a.name.localeCompare(b.name));\n }\n\n onUserHover(index: number): void {\n this.selectedUserIndex = index;\n this.cdr.markForCheck();\n }\n\n selectUser(user: MentionsInputComponent.User): void {\n if (!this.inputElement) {\n return;\n }\n //This gets DOM info from user (e.g. highlighted selections, and cursor position)\n const selection = window.getSelection();\n if (!selection) {\n return;\n }\n // Restore the saved range if available (needed when selecting via click)\n if (this.savedRange) {\n selection.removeAllRanges();\n selection.addRange(this.savedRange);\n }\n if (!selection.rangeCount) {\n return;\n }\n // Delete the \"@\" and search text\n this.deleteAtMentionSearch();\n\n //DAHNE NOTE - this would ideally be the same as contentItemToHTML, but we need an actual element reference here in order to append it to the DOM\n const mentionSpan = document.createElement('span');\n mentionSpan.className = this.readonly ? 'readonly-mention' : 'mention';\n mentionSpan.setAttribute('data-id', String(user.id));\n mentionSpan.setAttribute('data-type', 'mention');\n mentionSpan.setAttribute('contenteditable', 'false');\n mentionSpan.textContent = `@${user.name}`;\n\n this.insertNodesAtCursor([mentionSpan, document.createTextNode(' ')]);\n this.normalizeMentionPadding();\n\n this.closeMentions();\n this.emitContentChange();\n }\n\n private deleteAtMentionSearch(): void {\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) {\n return;\n }\n //This represents the current position of the cursor\n const cursorRange = selection.getRangeAt(0);\n //This will return all of the raw text (HTML-stripped) before the cursor\n const textBeforeCursor = this.getTextBeforeCursor(cursorRange);\n //We do that^ so that we can find the correct index of the most recent '@'\n const lastAtIndex = textBeforeCursor.lastIndexOf('@');\n\n if (lastAtIndex === -1) {\n return;\n }\n const atPosition = this.findDomPositionAtCharIndex(lastAtIndex);\n if (!atPosition) {\n return;\n }\n // Create range from \"@\" to cursor and delete it\n const deleteRange = document.createRange();\n deleteRange.setStart(atPosition.node, atPosition.offset);\n deleteRange.setEnd(cursorRange.endContainer, cursorRange.endOffset);\n deleteRange.deleteContents();\n }\n\n private isInsideMentionSpan(node: Node): boolean {\n let currentNode: Node | null = node;\n while (currentNode && currentNode !== this.inputElement?.nativeElement) {\n if (MentionsInputComponent.isMention(currentNode)) {\n return true;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n }\n //This will go text node by node looking for the\n //@ mention and give its position in the context of that node\n private findDomPositionAtCharIndex(\n charIndex: number,\n ): { node: Node; offset: number } | null {\n if (!this.inputElement) {\n return null;\n }\n // Walk through all text nodes in the input, counting characters\n const treeWalker = document.createTreeWalker(\n this.inputElement.nativeElement,\n NodeFilter.SHOW_TEXT,\n null,\n );\n let charCount = 0;\n while (treeWalker.nextNode()) {\n const node = treeWalker.currentNode;\n const text = node.textContent || '';\n // Check if our target character is in this text node\n if (charCount + text.length > charIndex) {\n return { node, offset: charIndex - charCount };\n }\n charCount += text.length;\n }\n return null;\n }\n\n private closeMentions(): void {\n this.mentionsVisible = false;\n this.mentionSearchText = '';\n this.mentionAnchor = null;\n this.selectedUserIndex = 0;\n this.savedRange = null;\n this.cdr.markForCheck();\n }\n\n private emitContentChange(): void {\n if (!this.inputElement) {\n return;\n }\n this.contentChange.emit(this.domToContentItems());\n }\n\n private domToContentItems(): MentionsInputComponent.ContentItem[] {\n if (!this.inputElement?.nativeElement) {\n return [];\n }\n const items: MentionsInputComponent.ContentItem[] = [];\n const childNodes = this.inputElement.nativeElement.childNodes;\n\n for (const node of Array.from(childNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n if (\n element.tagName === 'SPAN' &&\n element.getAttribute('data-type') === 'mention'\n ) {\n const id = Number(element.getAttribute('data-id'));\n const name = element.textContent?.replace('@', '') || '';\n items.push({ type: 'mention', id, name });\n } else if (element.tagName === 'BR') {\n items.push({ type: 'newline' });\n }\n } else if (node.nodeType === Node.TEXT_NODE) {\n // ZWS pads are a DOM affordance — they shouldn't leak into the data model.\n const text = (node.textContent || '').replace(ZWS_REGEX, '');\n if (text) {\n items.push({ type: 'text', text });\n }\n }\n }\n return items;\n }\n\n onCalloutClose(): void {\n this.closeMentions();\n }\n}\n\nexport namespace MentionsInputComponent {\n export const ContentTypes = ['mention', 'text', 'newline'] as const;\n export type ContentType =\n (typeof MentionsInputComponent.ContentTypes)[number];\n export interface User {\n id: number;\n name: string;\n }\n export type Content<T extends ContentType> = { type: T };\n\n export type UserMention = Content<'mention'> & User;\n export type Text = Content<'text'> & { text: string };\n export type Newline = Content<'newline'>;\n\n export type ContentItem = UserMention | Text | Newline;\n\n export function contentToPlainText(content: ContentItem[]): string {\n return content\n .map(item => {\n switch (item.type) {\n case 'mention':\n return `@${item.name}`;\n case 'text':\n return item.text;\n case 'newline':\n return '\\n';\n }\n })\n .join('');\n }\n}\n","<div class=\"mentions-container\" #container>\n <div\n *ngIf=\"!readonly\"\n #input\n class=\"text-content editable\"\n contenteditable=\"true\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n (paste)=\"onPaste($event)\"\n (copy)=\"onCopy($event)\"\n (cut)=\"onCut($event)\"\n ></div>\n\n <div *ngIf=\"readonly\" #input class=\"text-content\"></div>\n\n <riv-callout\n *ngIf=\"!readonly && mentionsVisible && mentionAnchor\"\n [anchor]=\"mentionAnchor\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [allowedPositions]=\"['bottom-right', 'top-right']\"\n [theme]=\"'light'\"\n (close)=\"onCalloutClose()\"\n >\n <div class=\"mentions-content\">\n <div class=\"mentions-header\">Mention someone</div>\n <div class=\"mentions-list\">\n <button\n type=\"button\"\n *ngFor=\"let user of getFilteredUsers(); let i = index\"\n [class.selected]=\"i === selectedUserIndex\"\n (mouseenter)=\"onUserHover(i)\"\n (click)=\"selectUser(user)\"\n >\n {{ user.name }}\n </button>\n </div>\n </div>\n </riv-callout>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { NumberFieldComponent } from '../number-field/number-field.component';\n\n@Component({\n selector: 'riv-percentage-field',\n templateUrl: './percentage-field.component.html',\n styleUrls: ['./percentage-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PercentageFieldComponent extends NumberFieldComponent {\n @Input()\n override align: NumberFieldComponent.Alignment = 'right';\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <input\n #input\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n type=\"text\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [value]=\"text\"\n [attr.aria-label]=\"label || null\"\n (input)=\"text = input.value\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [style.textAlign]=\"align\"\n [riv-auto-focus]=\"autoFocus\"\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n (blur)=\"inputBlur()\"\n />\n <span\n class=\"suffix\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n >%</span\n >\n</riv-input-label>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { TextFieldComponent } from '../text-field/text-field.component';\n\n@Component({\n selector: 'riv-phone-field',\n templateUrl: '../text-field/text-field.component.html',\n styleUrls: ['../text-field/text-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PhoneFieldComponent extends TextFieldComponent {\n @Input()\n override placeholder: string = '(123) 456-7890';\n\n @Input()\n override type: TextFieldComponent.Type = 'tel';\n\n @Input()\n override maxLength: number = 17;\n\n protected override setText() {\n if (\n PhoneFieldComponent.clean(this._value) ===\n PhoneFieldComponent.clean(this._text)\n )\n return;\n this._text = PhoneFieldComponent.format(this._value);\n }\n\n override set text(t: string) {\n this._text = t;\n this.valueChange.emit(PhoneFieldComponent.clean(t));\n }\n override get text(): string {\n return this._text;\n }\n\n override inputBlur() {\n this._text = PhoneFieldComponent.format(this._text);\n this.blur.emit(PhoneFieldComponent.clean(this._text));\n }\n}\n\nexport namespace PhoneFieldComponent {\n export function clean(v: string): string {\n const digits = v.replace(/\\D/g, '');\n\n if (digits.length >= 11 && digits[0] === '1') {\n return digits.slice(0, 11);\n }\n\n return digits.length > 10 ? digits.slice(0, 10) : digits;\n }\n\n export function format(value: string): string {\n const cleaned = clean(value);\n if (!cleaned) return '';\n\n function formatBody(v: string): string {\n if (v.length <= 3) {\n return v;\n } else if (v.length <= 6) {\n return `(${v.slice(0, 3)}) ${v.slice(3)}`;\n } else {\n return `(${v.slice(0, 3)}) ${v.slice(3, 6)}-${v.slice(6, 10)}`;\n }\n }\n\n if (cleaned.length === 11) {\n return `1 ${formatBody(cleaned.slice(1))}`;\n }\n return formatBody(cleaned);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { InputLabelComponent } from '../input-label/input-label.component';\n\n@Component({\n selector: 'riv-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioComponent {\n @Input()\n name?: string;\n\n @Input()\n identifier?: string;\n\n @Input()\n value?: string;\n\n @Input()\n checked?: boolean = false;\n\n @Input()\n size?: RadioComponent.Size = 'medium';\n\n @Input()\n title?: string;\n\n @Input()\n subtitle?: string;\n\n @ContentChild('label')\n labelTemplate?: TemplateRef<{ checked: boolean }>;\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n required: boolean = false;\n\n @Input()\n state: InputLabelComponent.State = 'valid';\n\n @Input()\n errorMessage: string = '';\n\n @Output()\n checkedChange = new EventEmitter<boolean>();\n\n @ViewChild('label', { static: true })\n label?: ElementRef<HTMLLabelElement>;\n\n isRadioOnly(): boolean {\n return !this.title && !this.labelTemplate;\n }\n}\n\nexport namespace RadioComponent {\n export const Sizes = ['medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n}\n","<label\n #label\n class=\"wrapper\"\n [ngClass]=\"size\"\n [class.disabled]=\"disabled\"\n [class.has-content]=\"!isRadioOnly()\"\n>\n <input\n #input\n type=\"radio\"\n [id]=\"identifier\"\n [name]=\"name\"\n [value]=\"value\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [checked]=\"checked\"\n [class.error]=\"state === 'error'\"\n (change)=\"checkedChange.emit(!!input.checked)\"\n />\n <ng-container *ngIf=\"labelTemplate; else defaultLabel\">\n <ng-container\n *ngTemplateOutlet=\"labelTemplate; context: { checked }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultLabel>\n <div *ngIf=\"title\" class=\"label\">\n <span class=\"title\">{{ title }}</span>\n <span *ngIf=\"subtitle\" class=\"subtitle\">{{ subtitle }}</span>\n </div>\n </ng-template>\n</label>\n<riv-validation-message\n *ngIf=\"errorMessage\"\n class=\"error-message\"\n [message]=\"errorMessage\"\n></riv-validation-message>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport Fuse from 'fuse.js';\nimport { RivSelect } from '../select/state';\n\n@Component({\n selector: 'riv-search-select',\n templateUrl: './search-select.component.html',\n styleUrls: ['./search-select.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SearchSelectComponent<T extends SearchSelectComponent.Option>\n implements OnChanges\n{\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n @Input()\n options: T[] = [];\n\n @Input()\n selected: T[] = [];\n\n @Input()\n placeholder: string = 'Search';\n\n @Input()\n addNewLabel: string = 'Add';\n\n @Input()\n newTooltip?: string;\n\n @Input()\n size: SearchSelectComponent.Size = 'medium';\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n label?: string;\n\n @Input()\n help?: string;\n\n @Input()\n required: boolean = false;\n\n @Input()\n state: SearchSelectComponent.State = 'valid';\n\n @Input()\n errorMessage?: string;\n\n @Input()\n optionTemplate?: TemplateRef<{ option: T }>;\n\n @Input()\n chipTemplate?: TemplateRef<{ option: T }>;\n\n @Output()\n readonly selectedChange = new EventEmitter<T[]>();\n\n @Output()\n readonly addNew = new EventEmitter<string>();\n\n @ViewChild('searchInput')\n searchInput: ElementRef<HTMLInputElement> | null = null;\n\n @ViewChild('trigger')\n trigger: ElementRef<HTMLDivElement> | null = null;\n\n searchText: string = '';\n isOpen: boolean = false;\n filteredOptions: T[] = [];\n private fuse: Fuse<T> | null = null;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['options']) {\n this.initializeFuse();\n }\n if (changes['selected']) {\n this.updateFilteredOptions();\n }\n }\n\n private initializeFuse(): void {\n this.fuse = new Fuse(this.options, {\n keys: ['title', 'subtitle'],\n threshold: 0.3,\n });\n this.updateFilteredOptions();\n }\n\n onSearchInput(value: string): void {\n this.searchText = value;\n this.updateFilteredOptions();\n if (!this.isOpen && value) {\n this.open();\n }\n }\n\n private updateFilteredOptions(): void {\n if (!this.searchText || !this.fuse) {\n this.filteredOptions = this.getUnselectedOptions();\n } else {\n const results = this.fuse.search(this.searchText);\n this.filteredOptions = results\n .map(result => result.item)\n .filter(option => !this.isSelected(option));\n }\n this.cdr.markForCheck();\n }\n\n private getUnselectedOptions(): T[] {\n return this.options.filter(option => !this.isSelected(option));\n }\n\n isSelected(option: T): boolean {\n return this.selected.some(s => s.id === option.id);\n }\n\n open(): void {\n if (this.disabled) return;\n this.isOpen = true;\n this.updateFilteredOptions();\n this.cdr.markForCheck();\n }\n\n close(): void {\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n\n selectOption(option: T): void {\n if (this.isSelected(option)) return;\n const newSelected = [...this.selected, option];\n this.selectedChange.emit(newSelected);\n this.searchText = '';\n this.updateFilteredOptions();\n this.focusInput();\n }\n\n removeOption(option: T): void {\n const newSelected = this.selected.filter(s => s.id !== option.id);\n this.selectedChange.emit(newSelected);\n }\n\n onAddNew(): void {\n if (!this.searchText.trim()) return;\n this.addNew.emit(this.searchText.trim());\n this.searchText = '';\n this.close();\n }\n\n onInputFocus(): void {\n this.open();\n }\n\n onInputBlur(event: FocusEvent): void {\n setTimeout(() => {\n if (!this.isClickInsideComponent(event.relatedTarget as Element)) {\n this.close();\n }\n }, 150);\n }\n\n private isClickInsideComponent(target: Element | null): boolean {\n if (!target) return false;\n return this.trigger?.nativeElement?.contains(target) ?? false;\n }\n\n private focusInput(): void {\n this.searchInput?.nativeElement?.focus();\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.isOpen) {\n this.close();\n event.preventDefault();\n } else if (event.key === 'Enter' && this.isOpen) {\n // Enter belongs to the dropdown while it's open, even when it doesn't\n // add anything, so it doesn't submit a surrounding form mid-search.\n if (this.searchText && this.filteredOptions.length === 0) {\n this.onAddNew();\n }\n event.preventDefault();\n }\n }\n\n trackByOption(_index: number, option: T): string | number {\n return option.id;\n }\n\n get showAddNew(): boolean {\n return !!this.searchText.trim();\n }\n}\n\nexport namespace SearchSelectComponent {\n export const Sizes = ['small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n\n export const States = ['valid', 'warning', 'error'] as const;\n export type State = (typeof States)[number];\n\n export type Option = RivSelect.BaseOption & { new: boolean };\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage ?? ''\"\n>\n <div class=\"search-select\" [class.disabled]=\"disabled\">\n <div #trigger class=\"input-wrapper\">\n <input\n #searchInput\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"searchText\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n (input)=\"onSearchInput(searchInput.value)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur($event)\"\n (keydown)=\"onKeydown($event)\"\n autocomplete=\"off\"\n />\n </div>\n\n <div *ngIf=\"selected.length > 0\" class=\"chips\">\n <div\n *ngFor=\"let option of selected; trackBy: trackByOption\"\n class=\"chip\"\n [class.new]=\"option.new\"\n [class.existing]=\"!option.new\"\n [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\n [rivTooltip]=\"option.new && newTooltip ? newTooltip : undefined\"\n >\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n [size]=\"'xsmall'\"\n [disabled]=\"disabled\"\n (click)=\"removeOption(option)\"\n ></button>\n <ng-container *ngIf=\"chipTemplate; else defaultChip\">\n <ng-container\n *ngTemplateOutlet=\"chipTemplate; context: { option: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultChip>\n <span class=\"chip-text\">{{ option.title }}</span>\n </ng-template>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"isOpen\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-right'\"\n [allowedPositions]=\"['bottom-right']\"\n (close)=\"close()\"\n >\n <div class=\"dropdown\">\n <button\n *ngIf=\"showAddNew\"\n type=\"button\"\n class=\"dropdown-option add-new\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onAddNew()\"\n >\n <riv-icon [name]=\"'Plus'\" [size]=\"16\"></riv-icon>\n <span>{{ addNewLabel }} \"{{ searchText }}\"</span>\n </button>\n\n <div *ngIf=\"filteredOptions.length > 0\" class=\"options-list\">\n <button\n *ngFor=\"let option of filteredOptions; trackBy: trackByOption\"\n type=\"button\"\n class=\"dropdown-option\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"selectOption(option)\"\n >\n <ng-container *ngIf=\"optionTemplate; else defaultOption\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplate; context: { option: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultOption>\n <span class=\"option-title\">{{ option.title }}</span>\n <span *ngIf=\"option.subtitle\" class=\"option-subtitle\">{{\n option.subtitle\n }}</span>\n </ng-template>\n </button>\n </div>\n\n <div\n *ngIf=\"filteredOptions.length === 0 && !showAddNew\"\n class=\"no-results\"\n >\n No results found\n </div>\n </div>\n </riv-callout>\n </ng-container>\n</riv-input-label>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\n\n@Component({\n selector: 'riv-switch-checkbox',\n templateUrl: './switch-checkbox.component.html',\n styleUrls: ['./switch-checkbox.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SwitchCheckboxComponent\n extends CheckboxComponent\n implements OnChanges\n{\n @Input()\n size: SwitchCheckboxComponent.Size = 'medium';\n\n /**\n * Only value changes after the first render animate, so a switch that\n * renders already on doesn't slide into place.\n */\n animated: boolean = false;\n\n override ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n if (changes['value'] && !changes['value'].firstChange) {\n this.animated = true;\n }\n }\n}\n\nexport namespace SwitchCheckboxComponent {\n export const Sizes = ['small', 'medium'] as const;\n export type Size = (typeof Sizes)[number];\n}\n","<label\n #label\n [ngClass]=\"size\"\n [class.checked]=\"value\"\n [class.animated]=\"animated\"\n [class.disabled]=\"disabled\"\n>\n <input\n #input\n type=\"checkbox\"\n [name]=\"name\"\n [id]=\"identifier\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [required]=\"required\"\n [attr.aria-label]=\"isCheckboxOnly() ? ariaLabel : null\"\n (change)=\"valueChange.emit(!!input.checked)\"\n />\n <ng-content></ng-content>\n</label>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { TextFieldComponent } from '../text-field/text-field.component';\n\n@Component({\n selector: 'riv-textarea-field',\n templateUrl: './textarea-field.component.html',\n styleUrls: ['./textarea-field.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextareaFieldComponent extends TextFieldComponent {\n @Input()\n rows: number = 4;\n\n override type: TextFieldComponent.Type = 'text';\n}\n","<riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [state]=\"state\"\n [errorMessage]=\"errorMessage\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n>\n <textarea\n #input\n [name]=\"name\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [readonly]=\"readonly\"\n [rows]=\"rows\"\n [value]=\"text\"\n [attr.aria-label]=\"label || null\"\n (input)=\"text = input.value\"\n [class.large]=\"size === 'large'\"\n [attr.maxlength]=\"maxLength\"\n [attr.minlength]=\"minLength\"\n [class.warning]=\"state === 'warning'\"\n [class.error]=\"state === 'error'\"\n [riv-auto-focus]=\"autoFocus\"\n (blur)=\"inputBlur()\"\n ></textarea>\n</riv-input-label>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\nimport { CardComponent } from './card.component';\n\n/**\n * Trailing control row of a `riv-card` — typically buttons or a link.\n *\n * Sits above a stretched `[riv-card-link]` overlay, so its controls stay\n * independently clickable on a card whose whole surface is activatable.\n *\n * `align` of `stretch` lays the controls out as equal-width columns, which is\n * how a card with a single full-width action reads best.\n *\n * ```html\n * <riv-card-actions [align]=\"'stretch'\" [variant]=\"'filled'\">\n * <button rivButton [variant]=\"'ghost'\">View report</button>\n * </riv-card-actions>\n * ```\n */\n@Component({\n selector: 'riv-card-actions',\n templateUrl: './card-actions.component.html',\n styleUrls: ['./card-actions.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardActionsComponent {\n /** Distribution of the controls along the row. */\n @Input()\n align: CardActionsComponent.Align = 'end';\n\n /** `filled` gives the row its own background, separating it from the body. */\n @Input()\n variant: CardActionsComponent.Variant = 'plain';\n\n @Input()\n padding: CardComponent.Padding = 'medium';\n\n @Input()\n orientation: CardActionsComponent.Orientation = 'horizontal';\n\n /** Draws a separator above the row. Implied by the `filled` variant. */\n @Input()\n divider: boolean = false;\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n [this.variant]: true,\n [`align-${this.align}`]: true,\n [`padding-${this.padding}`]: true,\n [this.orientation]: true,\n divider: this.divider,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n}\n\nexport namespace CardActionsComponent {\n export const Variants = ['plain', 'filled'] as const;\n export type Variant = (typeof Variants)[number];\n\n export const Aligns = [\n 'start',\n 'center',\n 'end',\n 'between',\n 'stretch',\n ] as const;\n export type Align = (typeof Aligns)[number];\n\n export const Orientations = ['horizontal', 'vertical'] as const;\n export type Orientation = (typeof Orientations)[number];\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n Renderer2,\n} from '@angular/core';\nimport { uniqueId } from 'lodash';\n\n/**\n * Surface container that groups related content into a single scannable unit.\n *\n * A card is composed, not configured: project the parts you need, in the order\n * you need them. Every part is optional, so a bare `riv-card` is a valid\n * surface on its own.\n *\n * - `riv-card-media` — leading image or video\n * - `riv-card-header` — heading, subheading, leading adornment, actions\n * - `riv-card-content` — body\n * - `riv-card-actions` — trailing control row\n *\n * ```html\n * <riv-card>\n * <riv-card-header [heading]=\"workbook.name\" [subheading]=\"payerName\">\n * <riv-menu actions>...</riv-menu>\n * </riv-card-header>\n * <riv-card-content>\n * Last edit: {{ workbook.modified | rivDate }}\n * </riv-card-content>\n * </riv-card>\n * ```\n *\n * ## Making the card activate\n *\n * Set `clickable` and handle `cardClick` to make the whole surface act on a\n * click:\n *\n * ```html\n * <riv-card [clickable]=\"true\" (cardClick)=\"goToWorkbook()\">\n * ```\n *\n * The card renders its own full-surface button for this, so activation works\n * with a pointer, with Enter, and with Space, and the focus ring traces the\n * whole card. Controls in `riv-card-header`'s `[actions]` slot and in\n * `riv-card-actions` sit above it and stay independently clickable — a menu\n * inside a clickable card needs no `stopPropagation`. Other interactive content\n * projected into the card must raise itself with `position: relative` and\n * `z-index: var(--card-raised-z-index)`.\n *\n * When the card's action is really a navigation, prefer `[riv-card-link]` on an\n * `<a>` instead: that keeps the URL, middle-click, and \"open in new tab\".\n *\n * ## Selection\n *\n * Set `selected` to mark the card the user is currently looking at. It gives\n * the surface a distinct border and shadow, and announces through\n * `aria-current` so the state is not conveyed by colour alone.\n *\n * ```html\n * <riv-card [selected]=\"workbook.id === activeId\">\n * ```\n *\n * Selection is separate from `tone`, so it composes with any tint — a selected\n * `danger` card keeps its danger background.\n *\n * ## Making the card expand and collapse\n *\n * Set `expandable` on `riv-card-header` and render the body only while it is\n * open. The header owns the toggle affordance and its accessibility; the\n * consumer owns the state:\n *\n * ```html\n * <riv-card>\n * <riv-card-header\n * [heading]=\"'Patient info'\"\n * [expandable]=\"true\"\n * [(expanded)]=\"open\"\n * ></riv-card-header>\n * <riv-card-content *ngIf=\"open\">...</riv-card-content>\n * </riv-card>\n * ```\n *\n * The card relays the region id from the header to the content, so the toggle's\n * `aria-controls` names the body with no ids wired by hand.\n *\n * Do not combine `expandable` with `clickable`: both claim the same click, and\n * a card that opens as well as expands leaves the user no way to tell which one\n * they are about to get.\n *\n * ## Notes\n *\n * When projecting raw content with no sub-components, set `padding` so the\n * content is not flush against the border.\n *\n * The card clips its own content so media and filled header/action rows follow\n * its corners. Popups (`riv-menu`, `rivTooltip`) render through the overlay\n * outlet, so they are not affected by that clipping.\n *\n * Set the corner radius with `radius`. The `--card-border-radius` custom\n * property still overrides it, for radii off the token scale.\n */\n@Component({\n selector: 'riv-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardComponent implements OnInit {\n constructor(\n private readonly el: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n /** Border and shadow treatment of the surface. */\n @Input()\n variant: CardComponent.Variant = 'outlined';\n\n /** Neutral background elevation, matching the `--surface-light-*` tokens. */\n @Input()\n surface: CardComponent.Surface = '0';\n\n /** Semantic background tint. Overrides `surface` when not `neutral`. */\n @Input()\n tone: CardComponent.Tone = 'neutral';\n\n /** Stacking direction of the projected parts. */\n @Input()\n orientation: CardComponent.Orientation = 'vertical';\n\n /**\n * Padding applied to the card itself. Leave as `none` when composing with\n * `riv-card-header` / `riv-card-content` / `riv-card-actions`, which own\n * their own padding.\n */\n @Input()\n padding: CardComponent.Padding = 'none';\n\n /** Corner radius, matching the `--border-radius-*` tokens. */\n @Input()\n radius: CardComponent.Radius = 'medium';\n\n /**\n * Shadow raised on hover, matching the `--depth-*` tokens. Defaults to `1`\n * for a clickable card, `2` for a clickable elevated card, and `none`\n * otherwise. A hover shadow reads as clickable, so set it on a card that\n * is not `clickable` only when the card's own controls make it interactive.\n */\n @Input()\n hoverDepth?: CardComponent.Depth;\n\n /**\n * Makes the whole surface activate, emitting `cardClick`. Adds the hover\n * affordance and keyboard support.\n */\n @Input()\n clickable: boolean = false;\n\n /**\n * Accessible name for the card's action. Defaults to the `riv-card-header`\n * title, falling back to the card's whole text content when there is no\n * header. Set this when neither reads well on its own.\n */\n @Input()\n clickLabel?: string;\n\n /**\n * Marks the card as the current selection, giving it a distinct border and\n * shadow. Composes with any `tone`, so a selected danger card keeps its\n * tint. Announced to assistive technology through `aria-current`.\n */\n @Input()\n selected: boolean = false;\n\n /**\n * Mutes the surface, suppresses hover feedback, and disables the click\n * target. Presentational for everything else — disable the card's own\n * controls too.\n */\n @Input()\n disabled: boolean = false;\n\n /** Emitted when a clickable card is activated by pointer or keyboard. */\n @Output()\n cardClick = new EventEmitter<MouseEvent>();\n\n /**\n * Names the click target from the card's content. Generated only when the\n * consumer has not set their own id.\n */\n private cardId: string = '';\n\n /** Set by a projected `riv-card-header` that has a title to name against. */\n private titleId?: string;\n\n /** Set by a projected `riv-card-header` that is expandable. */\n private expandRegionId?: string;\n\n /**\n * Id an expandable header's toggle points `aria-controls` at, worn by a\n * projected `riv-card-content`.\n */\n get regionId(): string | undefined {\n return this.expandRegionId;\n }\n\n ngOnInit() {\n this.cardId = this.el.nativeElement.id || uniqueId('riv-card-');\n if (!this.el.nativeElement.id) {\n this.renderer.setAttribute(this.el.nativeElement, 'id', this.cardId);\n }\n }\n\n /**\n * Registers the header's title as the click target's accessible name, which\n * keeps the announcement to the card's subject instead of every word on the\n * surface. Called by `riv-card-header`; not part of the public API.\n */\n setTitleId(id: string | undefined) {\n this.titleId = id;\n this.cdr.markForCheck();\n }\n\n /**\n * Gives up a title registered by `setTitleId`, so a header that is removed\n * does not leave the click target naming itself against a detached element.\n * Ignores ids that are no longer the one in use.\n */\n clearTitleId(id: string) {\n if (this.titleId === id) {\n this.setTitleId(undefined);\n }\n }\n\n /**\n * Relays the region an expandable header controls to the projected\n * `riv-card-content`, so neither side needs the consumer to wire an id.\n * Called by `riv-card-header`; not part of the public API.\n */\n setRegionId(id: string | undefined) {\n this.expandRegionId = id;\n this.cdr.markForCheck();\n }\n\n /**\n * Gives up a region registered by `setRegionId`. Ignores ids that are no\n * longer the one in use.\n */\n clearRegionId(id: string) {\n if (this.expandRegionId === id) {\n this.setRegionId(undefined);\n }\n }\n\n /**\n * Element whose text names the click target, unless `clickLabel` is set. The\n * host id is read from the DOM rather than cached, so a bound `[id]` that\n * changes is picked up on the card's next change detection.\n */\n protected get labelledBy(): string | null {\n if (this.clickLabel) return null;\n return this.titleId ?? (this.el.nativeElement.id || this.cardId);\n }\n\n /** Announces the current selection to assistive technology. */\n @HostBinding('attr.aria-current')\n get ariaCurrent(): string | null {\n return this.selected ? 'true' : null;\n }\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n [this.variant]: true,\n [`surface-${this.surface}`]: true,\n [`tone-${this.tone}`]: true,\n [this.orientation]: true,\n [`padding-${this.padding}`]: true,\n [`radius-${this.radius}`]: true,\n [`hover-depth-${\n this.hoverDepth ?? CardComponent.defaultHoverDepth(this)\n }`]: true,\n clickable: this.clickable,\n selected: this.selected,\n disabled: this.disabled,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n}\n\nexport namespace CardComponent {\n export const Variants = ['outlined', 'elevated', 'flat', 'dashed'] as const;\n export type Variant = (typeof Variants)[number];\n\n export const Surfaces = ['0', '1', '2'] as const;\n export type Surface = (typeof Surfaces)[number];\n\n export const Tones = [\n 'neutral',\n 'danger',\n 'caution',\n 'warning',\n 'safety',\n 'selected',\n ] as const;\n export type Tone = (typeof Tones)[number];\n\n export const Orientations = ['vertical', 'horizontal'] as const;\n export type Orientation = (typeof Orientations)[number];\n\n /** Shared padding scale for the card and its sub-components. */\n export const Paddings = [\n 'none',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n 'xxlarge',\n ] as const;\n export type Padding = (typeof Paddings)[number];\n\n export const Radii = ['small', 'medium', 'large', 'xlarge'] as const;\n export type Radius = (typeof Radii)[number];\n\n export const Depths = ['none', '1', '2', '3', '4'] as const;\n export type Depth = (typeof Depths)[number];\n\n export function defaultHoverDepth({\n clickable,\n variant,\n }: Pick<CardComponent, 'clickable' | 'variant'>): Depth {\n if (!clickable) return 'none';\n return variant === 'elevated' ? '2' : '1';\n }\n}\n","<button\n *ngIf=\"clickable\"\n type=\"button\"\n class=\"click-target\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-label]=\"clickLabel\"\n [attr.aria-labelledby]=\"labelledBy\"\n (click)=\"cardClick.emit($event)\"\n></button>\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnInit,\n Optional,\n Renderer2,\n} from '@angular/core';\nimport { CardComponent } from './card.component';\n\n/**\n * Body of a `riv-card`.\n *\n * Grows to absorb any spare height by default, which keeps `riv-card-actions`\n * pinned to the bottom when cards of differing content sit in an equal-height\n * grid. Set `[grow]=\"false\"` when the card should shrink to its content.\n *\n * In a card with an expandable header, this is the region the toggle controls —\n * it takes an id from the card so that `aria-controls` resolves as soon as the\n * body is rendered.\n */\n@Component({\n selector: 'riv-card-content',\n templateUrl: './card-content.component.html',\n styleUrls: ['./card-content.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardContentComponent implements OnInit {\n constructor(\n private readonly el: ElementRef<HTMLElement>,\n private readonly renderer: Renderer2,\n @Optional() private readonly card: CardComponent | null,\n ) {}\n\n @Input()\n padding: CardComponent.Padding = 'medium';\n\n @Input()\n grow: boolean = true;\n\n /** Draws a separator below the content. */\n @Input()\n divider: boolean = false;\n\n /**\n * Wears the region id an expandable header's toggle points `aria-controls`\n * at, so neither side needs the consumer to name the body. An id the consumer\n * set of their own is left alone.\n */\n ngOnInit() {\n const regionId = this.card?.regionId;\n if (regionId && !this.el.nativeElement.id) {\n this.renderer.setAttribute(this.el.nativeElement, 'id', regionId);\n }\n }\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n [`padding-${this.padding}`]: true,\n grow: this.grow,\n divider: this.divider,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { uniqueId } from 'lodash';\nimport { CardComponent } from './card.component';\n\n/**\n * Top row of a `riv-card`: heading text plus optional adornments.\n *\n * Three projection slots, all optional:\n * - `[leading]` — icon, avatar, or status dot shown before the heading\n * - default — laid out on the heading's baseline, so status badges sit beside\n * the title and wrap below it when space runs out. Also takes a whole custom\n * title (an inline rename field, say) when `heading` is left unset;\n * `subheading` still renders below either way.\n * - `[actions]` — trailing controls such as `riv-menu`\n *\n * ```html\n * <riv-card-header [heading]=\"'Commercial 2025'\" [subheading]=\"'Aetna'\">\n * <riv-icon leading [name]=\"'FileText'\"></riv-icon>\n * <riv-badge [size]=\"'small'\" [variant]=\"'categorical-8'\">Draft</riv-badge>\n * <riv-menu actions>...</riv-menu>\n * </riv-card-header>\n * ```\n *\n * `headingLevel` renders a real `h1`–`h6` so the card fits the page's heading\n * outline; pick the level that follows the surrounding content rather than the\n * one that looks right, since size comes from the design tokens either way.\n *\n * The heading font and colour can be overridden per-instance with the\n * `--card-heading-font` and `--card-heading-color` custom properties.\n *\n * ## Expanding and collapsing\n *\n * `expandable` turns the header into the toggle for the card's body: it renders\n * a chevron and covers the row with a real `<button>` carrying `aria-expanded`\n * and `aria-controls`, so the pattern is keyboard operable and announces its\n * state. Controls in `[actions]` sit above that button and stay independently\n * clickable, so a menu beside the toggle needs no `stopPropagation`.\n *\n * The header holds no state of its own — bind `expanded` and act on\n * `expandedChange`, or use `[(expanded)]`:\n *\n * ```html\n * <riv-card>\n * <riv-card-header\n * [heading]=\"'Patient info'\"\n * [expandable]=\"true\"\n * [(expanded)]=\"open\"\n * ></riv-card-header>\n * <riv-card-content *ngIf=\"open\">...</riv-card-content>\n * </riv-card>\n * ```\n *\n * The toggle is named by the header's title, so an expandable header needs a\n * `heading` or a projected title.\n */\n@Component({\n selector: 'riv-card-header',\n templateUrl: './card-header.component.html',\n styleUrls: ['./card-header.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardHeaderComponent implements OnChanges, OnDestroy {\n constructor(@Optional() private readonly card: CardComponent | null) {}\n\n /**\n * Identifies the title for a clickable `riv-card`, which names its click\n * target from the title rather than from the card's whole text.\n */\n readonly titleId: string = uniqueId('riv-card-title-');\n\n /**\n * Names the body the toggle controls. Handed to the enclosing card, which\n * relays it to the projected `riv-card-content`.\n */\n readonly regionId: string = uniqueId('riv-card-region-');\n\n /** Heading text. Omit when projecting custom heading markup instead. */\n @Input()\n heading?: string;\n\n /** Supporting text rendered below the heading. */\n @Input()\n subheading?: string;\n\n /** Heading element rendered for `heading`, for document outline purposes. */\n @Input()\n headingLevel: CardHeaderComponent.HeadingLevel = 3;\n\n /** `filled` gives the header its own background, separating it from the body. */\n @Input()\n variant: CardHeaderComponent.Variant = 'plain';\n\n @Input()\n padding: CardComponent.Padding = 'medium';\n\n /** Draws a separator below the header. Implied by the `filled` variant. */\n @Input()\n divider: boolean = false;\n\n /** Cross-axis alignment of the leading slot, heading block, and actions. */\n @Input()\n align: CardHeaderComponent.Align = 'start';\n\n /**\n * Truncates the heading to this many lines with an ellipsis. Leave unset to\n * let the heading wrap freely.\n */\n @Input()\n clamp?: number;\n\n /** Turns the header row into the toggle for the card's body. */\n @Input()\n expandable: boolean = false;\n\n /** Whether the body is currently open. The consumer owns this state. */\n @Input()\n expanded: boolean = false;\n\n /** Side of the header the chevron sits on. */\n @Input()\n togglePosition: CardHeaderComponent.TogglePosition = 'trailing';\n\n /**\n * Blocks the toggle, for a section that is not yet available to open. Set it\n * alongside a disabled `riv-card`, whose own `disabled` mutes the surface but\n * does not reach the header's controls.\n */\n @Input()\n disabled: boolean = false;\n\n /** Emitted with the state the consumer is being asked to move to. */\n @Output()\n expandedChange = new EventEmitter<boolean>();\n\n /**\n * Offers the heading to an enclosing card as the name for its click target,\n * and the toggle's region so a projected `riv-card-content` can wear it. Only\n * a text heading is offered: projected titles can be anything, so those cards\n * fall back to naming against their whole content.\n */\n ngOnChanges(changes: SimpleChanges) {\n if (changes['heading']) {\n if (this.heading?.trim()) {\n this.card?.setTitleId(this.titleId);\n } else {\n this.card?.clearTitleId(this.titleId);\n }\n }\n if (changes['expandable']) {\n if (this.expandable) {\n this.card?.setRegionId(this.regionId);\n } else {\n this.card?.clearRegionId(this.regionId);\n }\n }\n }\n\n /** Withdraws the offer, so the card stops naming itself against this header. */\n ngOnDestroy() {\n this.card?.clearTitleId(this.titleId);\n this.card?.clearRegionId(this.regionId);\n }\n\n /**\n * Asks for the opposite state rather than taking it, which keeps the header\n * free of state that could drift from the consumer's.\n */\n protected toggle() {\n this.expandedChange.emit(!this.expanded);\n }\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n [this.variant]: true,\n [`padding-${this.padding}`]: true,\n [`align-${this.align}`]: true,\n divider: this.divider,\n expandable: this.expandable,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n /**\n * Line clamping is applied inline so the line count stays a plain input\n * rather than a fixed set of CSS classes.\n */\n get clampStyle(): Record<string, string> {\n return this.clamp == null\n ? {}\n : {\n display: '-webkit-box',\n '-webkit-box-orient': 'vertical',\n '-webkit-line-clamp': `${this.clamp}`,\n overflow: 'hidden',\n };\n }\n}\n\nexport namespace CardHeaderComponent {\n export const Variants = ['plain', 'filled'] as const;\n export type Variant = (typeof Variants)[number];\n\n export const HeadingLevels = [1, 2, 3, 4, 5, 6] as const;\n export type HeadingLevel = (typeof HeadingLevels)[number];\n\n export const Aligns = ['start', 'center'] as const;\n export type Align = (typeof Aligns)[number];\n\n export const TogglePositions = ['leading', 'trailing'] as const;\n export type TogglePosition = (typeof TogglePositions)[number];\n}\n","<button\n *ngIf=\"expandable\"\n type=\"button\"\n class=\"expand-toggle\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-controls]=\"regionId\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"toggle()\"\n></button>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'leading'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"leading\"><ng-content select=\"[leading]\"></ng-content></div>\n<div class=\"main\">\n <div class=\"title-row\" [id]=\"titleId\">\n <div *ngIf=\"heading?.trim()\" class=\"heading\" [ngStyle]=\"clampStyle\">\n <ng-container [ngSwitch]=\"headingLevel\">\n <h1 *ngSwitchCase=\"1\">{{ heading }}</h1>\n <h2 *ngSwitchCase=\"2\">{{ heading }}</h2>\n <h3 *ngSwitchCase=\"3\">{{ heading }}</h3>\n <h4 *ngSwitchCase=\"4\">{{ heading }}</h4>\n <h5 *ngSwitchCase=\"5\">{{ heading }}</h5>\n <h6 *ngSwitchCase=\"6\">{{ heading }}</h6>\n </ng-container>\n </div>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"subheading?.trim()\" class=\"subheading\">{{ subheading }}</div>\n</div>\n<ng-container\n *ngIf=\"expandable && togglePosition === 'trailing'\"\n [ngTemplateOutlet]=\"chevron\"\n></ng-container>\n<div class=\"actions\"><ng-content select=\"[actions]\"></ng-content></div>\n\n<ng-template #chevron>\n <riv-icon\n class=\"expand-chevron\"\n [class.expanded]=\"expanded\"\n [name]=\"'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\n/**\n * Makes a `riv-card` activate, applied to a native `<a>` or `<button>` inside\n * the card.\n *\n * Two modes:\n * - `stretch` (default) — the element's hit area expands to cover the whole\n * card, so clicking anywhere activates it. Sibling controls in\n * `riv-card-header`'s `[actions]` slot and in `riv-card-actions` stay above\n * the overlay and remain independently clickable, with no need to stop event\n * propagation.\n * - `region` — the element behaves as an ordinary block wrapper, activating\n * only the part of the card it wraps. Use this when a card has more than one\n * meaningful destination.\n *\n * ```html\n * <riv-card>\n * <riv-card-header [heading]=\"workbook.name\">\n * <a riv-card-link [routerLink]=\"['/workbooks', workbook.id]\">\n * {{ workbook.name }}\n * </a>\n * <riv-menu actions>...</riv-menu>\n * </riv-card-header>\n * </riv-card>\n * ```\n *\n * Prefer this over a click handler on the card: a real `<a>` keeps keyboard\n * focus, \"open in new tab\", and screen reader link semantics, and a real\n * `<button>` does the same for actions that do not navigate. Because the\n * overlay is a sibling of the card's other controls rather than an ancestor,\n * the card avoids nesting interactive elements.\n *\n * When `stretch` is used, keep the visible link text meaningful on its own —\n * it is the accessible name for the whole card.\n */\n@Component({\n selector: '[riv-card-link]',\n templateUrl: './card-link.component.html',\n styleUrls: ['./card-link.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardLinkComponent implements OnChanges {\n constructor(\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n ) {}\n\n /** Whether the hit area covers the whole card or only the wrapped region. */\n @Input()\n mode: CardLinkComponent.Mode = 'stretch';\n\n @Input()\n disabled?: boolean;\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({\n [this.mode]: true,\n disabled: !!this.disabled,\n })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled(): 'true' | null {\n return this.disabled ? 'true' : null;\n }\n\n @HostBinding('attr.tabindex')\n get tabIndex(): '-1' | null {\n return this.disabled ? '-1' : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Anchors have no `disabled` property, so only real controls are disabled\n // natively; the rest rely on `aria-disabled` and suppressed pointer events.\n if (changes['disabled'] && 'disabled' in this.el.nativeElement) {\n if (this.disabled) {\n this.renderer.setAttribute(this.el.nativeElement, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\n }\n }\n }\n}\n\nexport namespace CardLinkComponent {\n export const Modes = ['stretch', 'region'] as const;\n export type Mode = (typeof Modes)[number];\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n/**\n * Image or video region of a `riv-card`, usually its first part.\n *\n * Pass `src` to render an image, or project any other media (`<video>`,\n * `<iframe>`, a chart) as content:\n *\n * ```html\n * <riv-card-media\n * [src]=\"report.thumbnailUrl\"\n * [alt]=\"'Preview of ' + report.name\"\n * [aspectRatio]=\"'16 / 9'\"\n * ></riv-card-media>\n * ```\n *\n * `alt` defaults to an empty string, which marks the image as decorative. Set\n * it whenever the media carries information the surrounding text does not — a\n * card whose only distinguishing feature is its image needs one.\n *\n * Give the region a stable box with `aspectRatio` or `height` so cards in a\n * grid stay aligned while images load.\n */\n@Component({\n selector: 'riv-card-media',\n templateUrl: './card-media.component.html',\n styleUrls: ['./card-media.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CardMediaComponent {\n /** Image URL. Omit when projecting media as content instead. */\n @Input()\n src?: string;\n\n /** Alternative text. Empty means decorative. */\n @Input()\n alt: string = '';\n\n /** Any CSS `aspect-ratio` value, e.g. `'16 / 9'`. */\n @Input()\n aspectRatio?: string;\n\n /** Any CSS length, e.g. `'140px'`. Takes precedence over `aspectRatio`. */\n @Input()\n height?: string;\n\n /** How the image fills the region. */\n @Input()\n fit: CardMediaComponent.Fit = 'cover';\n\n @HostBinding('class')\n get classes(): string {\n return `fit-${this.fit}`;\n }\n\n @HostBinding('style.aspect-ratio')\n get aspectRatioStyle(): string | null {\n return this.aspectRatio ?? null;\n }\n\n @HostBinding('style.height')\n get heightStyle(): string | null {\n return this.height ?? null;\n }\n}\n\nexport namespace CardMediaComponent {\n export const Fits = ['cover', 'contain', 'fill'] as const;\n export type Fit = (typeof Fits)[number];\n}\n","<img *ngIf=\"src\" class=\"image\" [src]=\"src\" [alt]=\"alt\" />\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\n\n/**\n * One labelled setting that is read in place and edited inline.\n *\n * Reading shows the label, the current value, and an edit button. Editing\n * swaps the value for a consumer-supplied field plus Cancel and Save buttons.\n * The row holds no state of its own — bind `editing` and act on `edit`,\n * `cancel`, and `save`.\n *\n * Set the value shown while reading with `value` for plain text, or project\n * richer content such as a `riv-badge` into the `[display-value]` slot. Use\n * one or the other: when `value` is set, the slot isn't shown.\n *\n * Two content slots:\n * - `[display-value]` — content shown while reading, when `value` is empty\n * - `#editor` template — any field component to edit the value with, such as\n * `riv-text-field`, `riv-currency-field`, or `riv-simple-select`. The row\n * wraps it in a `<label>` named after `label`, so don't give the field its\n * own label. Only the first control in the template gets that name, so keep\n * it to one field.\n *\n * ```html\n * <riv-setting-row\n * [label]=\"'Threshold'\"\n * [infoTooltip]=\"'Applies to new claims only'\"\n * [editing]=\"editing\"\n * [saving]=\"saving\"\n * (edit)=\"editing = true\"\n * (cancel)=\"editing = false\"\n * (save)=\"save()\"\n * [value]=\"threshold + '%'\"\n * >\n * <ng-template #editor>\n * <riv-text-field [(value)]=\"draft\"></riv-text-field>\n * </ng-template>\n * </riv-setting-row>\n * ```\n *\n * Stack rows directly to build a settings list; each row pads itself\n * vertically and lays out on a shared twelve-column grid so labels, values,\n * and actions line up between rows.\n */\n@Component({\n selector: 'riv-setting-row',\n templateUrl: './setting-row.component.html',\n styleUrls: ['./setting-row.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SettingRowComponent {\n /** Names the setting. Also gives the edit button its screen-reader name, \"Edit {label}\". */\n @Input()\n label: string = '';\n\n /**\n * The value shown while reading, as plain text and already formatted, such\n * as `'$250'`. For anything richer, leave this empty and project it into\n * `[display-value]` instead.\n */\n @Input()\n value: string = '';\n\n /** Explains the setting from an info icon beside the label. */\n @Input()\n infoTooltip: string = '';\n\n /**\n * Whether the edit field is shown. The consumer (the parent component) owns\n * this state, so it can keep only one row open for editing at a time.\n */\n @Input()\n editing: boolean = false;\n\n /** Blocks Save, for a draft that is not yet valid. */\n @Input()\n saveDisabled: boolean = false;\n\n /** Shows Save as loading and blocks Save and Cancel while a save is in flight. */\n @Input()\n saving: boolean = false;\n\n @Input()\n tooltipMaxWidth: string = '320px';\n\n @Output()\n edit = new EventEmitter<void>();\n\n @Output()\n cancel = new EventEmitter<void>();\n\n @Output()\n save = new EventEmitter<void>();\n\n @ContentChild('editor')\n editor?: TemplateRef<void>;\n\n @HostBinding('class.editing')\n get editingClass(): boolean {\n return this.editing;\n }\n}\n","<span class=\"label\">\n <riv-icon\n *ngIf=\"infoTooltip\"\n [name]=\"'Info'\"\n [size]=\"16\"\n [rivTooltip]=\"infoTooltip\"\n [rivTooltipMaxWidth]=\"tooltipMaxWidth\"\n ></riv-icon>\n {{ label }}\n</span>\n\n<ng-container *ngIf=\"!editing; else editMode\">\n <span class=\"value\">\n <ng-container *ngIf=\"value; else projectedValue\">{{ value }}</ng-container>\n <ng-template #projectedValue>\n <ng-content select=\"[display-value]\"></ng-content>\n </ng-template>\n </span>\n <div class=\"actions\">\n <button\n rivButton\n type=\"button\"\n [icon]=\"'Edit2'\"\n [rivTooltip]=\"'Edit'\"\n [variant]=\"'ghost'\"\n [attr.aria-label]=\"'Edit ' + label\"\n (click)=\"edit.emit()\"\n ></button>\n </div>\n</ng-container>\n\n<ng-template #editMode>\n <label class=\"field\">\n <riv-sr-only>{{ label }}</riv-sr-only>\n <ng-container *ngTemplateOutlet=\"editor ?? null\"></ng-container>\n </label>\n\n <div class=\"actions\">\n <button\n rivButton\n type=\"button\"\n [variant]=\"'basic'\"\n [size]=\"'medium'\"\n [disabled]=\"saving\"\n (click)=\"cancel.emit()\"\n >\n Cancel\n </button>\n <button\n rivButton\n type=\"button\"\n [variant]=\"'primary'\"\n [size]=\"'medium'\"\n [disabled]=\"saveDisabled || saving\"\n [loading]=\"saving\"\n (click)=\"save.emit()\"\n >\n Save\n </button>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n Output,\n ViewChild,\n} from '@angular/core';\n\n/**\n * A borderless heading with a click-to-edit title and an optional\n * click-to-edit description, plus a projected slot for actions.\n *\n * Layout: `[title] | [description] [actions]`\n *\n * - Click the title to rename; click the description (or the ghost\n * \"+ Add description\" button when empty) to edit it.\n * - Only one of title or description can be edited at a time.\n * - While either is being edited, the `[actions]` slot is hidden so\n * projected controls don't compete with the edit affordance.\n *\n * Commit semantics: `titleChange` / `descriptionChange` fire when the user\n * commits — Enter, outside click, or the Check button — not on every\n * keystroke, and always on commit (even when the value is unchanged). The\n * \"commit\" framing over \"change\" is deliberate: consumers that persist on\n * commit (analytics, PATCH) treat the gesture itself as the event; those\n * that only care about diffs can compare `next === current` in the handler.\n *\n * Escape cancels: reverts the draft back to the current value and drops out\n * of edit mode WITHOUT emitting a change. Outside-click still commits (to\n * match `riv-date` / `riv-select`); Escape is the deliberate abandon path.\n *\n * Value handling follows the same convention as `riv-text-field`: `[title]`\n * and `[description]` are treated as suggestions, not authoritative state.\n * On commit, the component keeps displaying the user's committed value,\n * and only overwrites its internal state when the parent explicitly sends\n * a different value. That lets the component demo out of the box (e.g. in\n * Storybook) without requiring a round trip through the parent.\n *\n * Programmatic entry into edit mode is available via `startEditingTitle()`\n * and `startEditingDescription()` — obtain a reference with\n * `@ViewChild(EditableHeadingComponent)`. Use these for secondary entry\n * points like a kebab-menu \"Rename\" item, or to auto-open rename after\n * creating a new entity.\n *\n * The component owns no border, background, or card chrome — consumers who\n * want a bordered container should wrap it.\n *\n * ```html\n * <riv-editable-heading\n * [title]=\"report.title\"\n * [description]=\"report.description\"\n * (titleChange)=\"onTitleCommit($event)\"\n * (descriptionChange)=\"onDescriptionCommit($event)\"\n * >\n * <riv-menu actions>\n * <ng-template #trigger>\n * <button rivButton [icon]=\"'MoreVertical'\" [variant]=\"'ghost'\"></button>\n * </ng-template>\n * <button riv-menu-item>Rename</button>\n * <button riv-menu-item>Duplicate</button>\n * </riv-menu>\n * <button rivButton actions [variant]=\"'primary'\">Save</button>\n * </riv-editable-heading>\n * ```\n */\n@Component({\n selector: 'riv-editable-heading',\n templateUrl: './editable-heading.component.html',\n styleUrls: ['./editable-heading.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditableHeadingComponent {\n // See the \"Value handling\" section of the class-level doc.\n protected _title: string = '';\n @Input()\n set title(v: string) {\n if (v !== this._title) this._title = v;\n }\n get title(): string {\n return this._title;\n }\n\n protected _description: string = '';\n @Input()\n set description(v: string) {\n if (v !== this._description) this._description = v;\n }\n get description(): string {\n return this._description;\n }\n\n @Input()\n titleMaxLength: number = 100;\n\n @Input()\n descriptionMaxLength: number = 300;\n\n /**\n * When true, the title and description are not clickable and cannot be\n * edited. Any in-progress edit is dropped without emitting. Imperative\n * `startEditing*` calls no-op. Useful for consumers that need to gate\n * editing on a permission or a broader \"actions disabled\" state.\n */\n protected _disabled: boolean = false;\n @Input()\n set disabled(v: boolean) {\n this._disabled = v;\n if (v && this.mode !== 'view') this.cancel();\n this.cdr.markForCheck();\n }\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Output()\n titleChange = new EventEmitter<string>();\n\n @Output()\n descriptionChange = new EventEmitter<string>();\n\n // `read: ElementRef` gets the host element of the `<riv-text-field>`, from\n // which we can reach the actual `<input>` for caret-at-end positioning.\n @ViewChild('titleInput', { read: ElementRef })\n private titleInputRef?: ElementRef<HTMLElement>;\n\n @ViewChild('descriptionInput', { read: ElementRef })\n private descriptionInputRef?: ElementRef<HTMLElement>;\n\n protected mode: 'view' | 'editingTitle' | 'editingDescription' = 'view';\n protected draftTitle: string = '';\n protected draftDescription: string = '';\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n @HostBinding('class.editing')\n get isEditing(): boolean {\n return this.mode !== 'view';\n }\n\n /**\n * Enter title-edit mode programmatically. Same behavior as clicking the\n * title — populates the edit buffer from the current value, focuses the\n * input with the caret at the end, and hides the actions slot. No-op if\n * already in an editing mode or when the component is disabled.\n *\n * Intended for consumers that offer a secondary entry point to renaming\n * (e.g. a kebab menu item), or that want to auto-open rename after\n * creating a new entity. Bind via `@ViewChild(EditableHeadingComponent)`.\n */\n startEditingTitle(): void {\n if (this.disabled || this.mode !== 'view') return;\n this.draftTitle = this.title;\n this.mode = 'editingTitle';\n // `markForCheck` so consumers can call this from outside Angular's zone\n // (e.g. an async callback) without having to trigger CD themselves.\n this.cdr.markForCheck();\n // Defer focus until Angular has rendered the input into the DOM.\n setTimeout(() => this.focusEnd(this.titleInputRef), 0);\n }\n\n /**\n * Enter description-edit mode programmatically. Same behavior as clicking\n * the description (or the \"+ Add description\" button). No-op if already\n * in an editing mode or when the component is disabled.\n */\n startEditingDescription(): void {\n if (this.disabled || this.mode !== 'view') return;\n this.draftDescription = this.description;\n this.mode = 'editingDescription';\n this.cdr.markForCheck();\n setTimeout(() => this.focusEnd(this.descriptionInputRef), 0);\n }\n\n protected commitTitle(): void {\n if (this.mode !== 'editingTitle') return;\n // Title cannot be committed empty. The Check button is disabled in that\n // state; for Enter and outside-click we revert to the current title so\n // the user is never stuck in edit mode with a rejected value.\n if (!this.draftTitle) {\n this.mode = 'view';\n return;\n }\n const value = this.draftTitle;\n this._title = value;\n this.mode = 'view';\n this.titleChange.emit(value);\n }\n\n protected commitDescription(): void {\n if (this.mode !== 'editingDescription') return;\n const value = this.draftDescription;\n this._description = value;\n this.mode = 'view';\n this.descriptionChange.emit(value);\n }\n\n /**\n * Abandon the current edit and return to view mode. No change is emitted.\n * Wired to the Escape key on both edit inputs; also called internally\n * when `disabled` flips to true mid-edit.\n */\n protected cancel(): void {\n if (this.mode === 'view') return;\n this.draftTitle = this._title;\n this.draftDescription = this._description;\n this.mode = 'view';\n }\n\n // Listens on `mousedown` (not `click`) so the check runs before Angular\n // re-renders the trigger element out of the DOM — otherwise\n // `host.contains(target)` returns false for a click that landed on the\n // now-removed `.title` / `.description` element. Same pattern as\n // `riv-date`.\n @HostListener('document:mousedown', ['$event.target'])\n protected onDocumentMouseDown(target: EventTarget | null): void {\n if (this.mode === 'view' || !(target instanceof Element)) return;\n if (this.host.nativeElement.contains(target)) return;\n if (this.mode === 'editingTitle') {\n this.commitTitle();\n } else if (this.mode === 'editingDescription') {\n this.commitDescription();\n }\n }\n\n // Position caret at end (rather than selecting all) so the user can continue\n // typing where the previous value left off. `riv-text-field` handles the\n // focus itself via `[autoFocus]`; we just fix up the selection range on the\n // descendant `<input>`.\n private focusEnd(ref?: ElementRef<HTMLElement>): void {\n const input = ref?.nativeElement.querySelector<HTMLInputElement>('input');\n if (!input) return;\n const len = input.value.length;\n input.setSelectionRange(len, len);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"leading\">\n <ng-container [ngSwitch]=\"mode\">\n <!-- View mode -->\n <ng-container *ngSwitchDefault>\n <button\n type=\"button\"\n class=\"title\"\n [class.has-description]=\"description\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n rivTruncate\n [attr.aria-label]=\"(title || 'Untitled') + ', rename'\"\n (click)=\"startEditingTitle()\"\n >\n {{ title || 'Untitled' }}\n </button>\n\n <div class=\"divider\"></div>\n\n <button\n *ngIf=\"description; else addDescription\"\n type=\"button\"\n class=\"description\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n rivTruncate\n [attr.aria-label]=\"description + ', edit description'\"\n (click)=\"startEditingDescription()\"\n >\n {{ description }}\n </button>\n\n <ng-template #addDescription>\n <div class=\"add-description-wrap\" *ngIf=\"!disabled\">\n <button\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'xsmall'\"\n [icon]=\"'Plus'\"\n [iconPosition]=\"'first'\"\n type=\"button\"\n (click)=\"startEditingDescription()\"\n >\n Add description\n </button>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'editingTitle'\">\n <riv-text-field\n #titleInput\n class=\"title-input\"\n [value]=\"draftTitle\"\n [maxLength]=\"titleMaxLength\"\n [autoFocus]=\"true\"\n (valueChange)=\"draftTitle = $event\"\n (keydown.enter)=\"commitTitle()\"\n (keydown.escape)=\"cancel()\"\n ></riv-text-field>\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n [disabled]=\"!draftTitle\"\n (click)=\"commitTitle()\"\n aria-label=\"Save title\"\n ></button>\n </ng-container>\n\n <!-- Editing description -->\n <ng-container *ngSwitchCase=\"'editingDescription'\">\n <riv-text-field\n #descriptionInput\n class=\"description-input\"\n placeholder=\"Add a description\"\n [value]=\"draftDescription\"\n [maxLength]=\"descriptionMaxLength\"\n [autoFocus]=\"true\"\n (valueChange)=\"draftDescription = $event\"\n (keydown.enter)=\"commitDescription()\"\n (keydown.escape)=\"cancel()\"\n ></riv-text-field>\n <button\n rivButton\n type=\"button\"\n class=\"commit\"\n [variant]=\"'primary'\"\n [icon]=\"'Check'\"\n (click)=\"commitDescription()\"\n aria-label=\"Save description\"\n ></button>\n </ng-container>\n </ng-container>\n</div>\n\n<div class=\"actions\" *ngIf=\"!isEditing\">\n <ng-content select=\"[actions]\"></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n} from '@angular/core';\n\n/**\n * Page header used to display the page/product the user is on.\n *\n * It has two mutually-exclusive left-side modes:\n * - `title` mode (default): shows a plain page title, with an optional\n * `description` beneath it.\n * - `back` mode: when `backTo` is provided, the title is replaced by a\n * \"Back to <previous page>\" button that emits `back` when activated. This is\n * intended for when the user navigates a level deeper (e.g. worklist →\n * detail view).\n *\n * The right side is a flexible content-projection slot: consumers project any\n * actions they need (e.g. `rivButton`, `riv-menu`, navigation arrows) into the\n * `[actions]` slot.\n *\n * The component owns its own horizontal gutter (`--size-large`) so it can be\n * dropped directly at the top of a page without a wrapper. Place it as a\n * sibling of (not nested inside) the page body — the body's own padding will\n * align with the header's.\n *\n * For visual consistency across pages, prefer `ghost`-variant `rivButton`s for\n * actions so they read as equal-weight, low-emphasis controls. Reserve heavier\n * variants (`primary`, `danger`) for a genuine primary action.\n *\n * ```html\n * <riv-page-header title=\"Patients\">\n * <button rivButton [variant]=\"'ghost'\" actions>Add patient</button>\n * <button rivButton [variant]=\"'ghost'\" actions>Settings</button>\n * </riv-page-header>\n * ```\n */\n@Component({\n selector: 'riv-page-header',\n templateUrl: './page-header.component.html',\n styleUrls: ['./page-header.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageHeaderComponent {\n /** Page title, shown when not in back mode. */\n @Input()\n title?: string;\n\n /** Text shown beneath the title (title mode only). */\n @Input()\n description?: string;\n\n /**\n * Label of the previous page. When set, the header renders a back button\n * (\"Back to {{ backTo }}\") instead of the title and emits `back` on click.\n */\n @Input()\n backTo?: string;\n\n /** Emitted when the back button is activated (back mode only). */\n @Output()\n back = new EventEmitter<void>();\n\n @HostBinding('class.back')\n get isBack(): boolean {\n return this.backTo != null;\n }\n\n @HostBinding('class.has-description')\n get hasDescription(): boolean {\n return !this.isBack && !!this.description;\n }\n}\n","<div class=\"leading\">\n <ng-container *ngIf=\"isBack; else titleTemplate\">\n <button class=\"back-button\" type=\"button\" (click)=\"back.emit()\">\n <riv-icon name=\"ArrowLeftCircle\" [size]=\"16\"></riv-icon>\n <span>Back to {{ backTo }}</span>\n </button>\n </ng-container>\n <ng-template #titleTemplate>\n <h1 class=\"title\">{{ title }}</h1>\n <p *ngIf=\"description\" class=\"description\">{{ description }}</p>\n </ng-template>\n</div>\n\n<div class=\"actions\">\n <ng-content select=\"[actions]\"></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: '[riv-simple-tab]',\n templateUrl: './simple-tab.component.html',\n styleUrls: ['./simple-tab.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTabComponent {\n @Input()\n current: boolean = false;\n\n /** Styles the tab as unavailable; it doesn't block clicks or navigation. */\n @Input()\n locked: boolean = false;\n\n @HostBinding('class')\n get classes(): string {\n return Object.entries({ current: this.current, locked: this.locked })\n .filter(([_, v]) => v)\n .map(([k]) => k)\n .join(' ');\n }\n\n @HostBinding('attr.aria-current')\n get ariaCurrent(): 'true' | null {\n return this.current ? 'true' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled(): 'true' | null {\n return this.locked ? 'true' : null;\n }\n}\n","<ng-content></ng-content>\n<riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'riv-simple-tabs',\n templateUrl: './simple-tabs.component.html',\n styleUrls: ['./simple-tabs.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTabsComponent {}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: '[riv-tab]',\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent {\n @Input()\n @HostBinding('class.current')\n current?: boolean;\n}\n","<ng-content></ng-content>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'riv-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabsComponent {}\n","<div class=\"container\">\n <ng-content></ng-content>\n</div>\n","import Fuse, { FuseResult, IFuseOptions } from 'fuse.js';\nimport { debounce, defaultsDeep, sortBy } from 'lodash';\nimport {\n connectable,\n Connectable,\n from,\n map,\n mergeScan,\n Observable,\n ReplaySubject,\n startWith,\n Subject,\n} from 'rxjs';\nimport { DeepPartial } from 'utility-types';\nimport { RivSelect } from '../../input/select/state';\nimport { HighlightComponent } from '../../visualization/highlight/highlight.component';\n\nexport namespace RivViews {\n export const ViewPermissions = ['private', 'shared', 'public'] as const;\n export type ViewPermission = (typeof ViewPermissions)[number];\n\n export const MenuContexts = ['tab', 'all-views', 'overflow'] as const;\n export type MenuContext = (typeof MenuContexts)[number];\n\n export type User = RivSelect.BaseOption;\n\n export const UserSelectModes = ['select', 'search-select'] as const;\n export type UserSelectMode = (typeof UserSelectModes)[number];\n\n export type SearchSelectUser<U extends User> = U & { new: boolean };\n\n export type OnAddUser<U extends User> = (\n searchText: string,\n ) => SearchSelectUser<U>;\n\n export type View<U extends User> = {\n id: string | number;\n title: string;\n enabled: boolean;\n } & (\n | {\n permission: 'private' | 'public';\n }\n | {\n permission: 'shared';\n sharedUsers: U[];\n }\n );\n\n export type FullView<U extends User, V extends View<U>> = V & {\n active: boolean;\n system: boolean;\n titleHighlightIndices?: HighlightComponent.HighlightIndices[];\n temporary: boolean;\n };\n\n ///////////\n // State //\n ///////////\n\n export type CoreState<U extends User, V extends View<U>> = {\n views: V[];\n activeViewId: V['id'] | null;\n temporaryViewId: V['id'] | null;\n containerWidth: number;\n editingViewContext: {\n id: V['id'];\n autoRename: boolean;\n menuContext: MenuContext;\n } | null;\n deletingViewContext: { id: V['id']; menuContext: MenuContext } | null;\n overflow: {\n search: string;\n pickerOpen: boolean;\n };\n all: {\n search: string;\n privateOpen: boolean;\n sharedOpen: boolean;\n publicOpen: boolean;\n };\n userSource: UserSource<U>;\n userSelectMode: UserSelectMode;\n onAddUser?: OnAddUser<U>;\n newTooltip?: string;\n hasSystemView: boolean;\n };\n\n export type FullState<U extends User, V extends View<U>> = CoreState<U, V> & {\n allViews: FullView<U, V>[];\n displayedViews: FullView<U, V>[];\n enabledViews: FullView<U, V>[];\n allEnabledViews: FullView<U, V>[];\n all: {\n privateViews: FullView<U, V>[];\n sharedViews: FullView<U, V>[];\n publicViews: FullView<U, V>[];\n };\n };\n\n /////////////\n // Actions //\n /////////////\n\n export type Action<U extends User, V extends View<U>> =\n | { type: 'load' }\n | {\n type: 'setActiveView';\n id: V['id'];\n source?: 'tab' | 'menu' | 'overflow';\n }\n | {\n type: 'setEnabled';\n id: V['id'];\n enabled: boolean;\n source?: 'menu' | 'eyeIcon';\n }\n | { type: 'setContainerWidth'; width: number }\n | { type: 'setOverflowPickerOpen'; open: boolean }\n | { type: 'setOverflowSearchQuery'; query: string }\n | { type: 'setAllViewsSearchQuery'; query: string }\n | { type: 'updateView'; view: V }\n | { type: 'deleteView'; view: V }\n | { type: 'duplicateView'; view: V; menuContext: MenuContext }\n | { type: 'copyLinkToView'; view: V }\n | { type: 'setEditingView'; context: CoreState<U, V>['editingViewContext'] }\n | {\n type: 'setDeletingView';\n context: CoreState<U, V>['deletingViewContext'];\n }\n | {\n type: 'viewOrderChange';\n previousEnabledIndex: number;\n newEnabledIndex: number;\n source?: 'tabDrag' | 'overflowDrag';\n viewTitle?: V['title'];\n }\n | { type: 'setAllViewsToggle'; permission: ViewPermission; open: boolean }\n | { type: 'createTemporaryView'; view: V };\n\n ////////////\n // Source //\n ////////////\n\n export type Source<U extends User, V extends View<U>> = () =>\n | V[]\n | Promise<V[]>;\n export type Save<U extends User, V extends View<U>> = (\n views: V[],\n ) => void | Promise<void>;\n export type Duplicate<U extends User, V extends View<U>> = (\n viewToDuplicate: V,\n ) => V | Promise<V>;\n export type UserSource<U extends User> = () => U[] | Promise<U[]>;\n export type CopyLink<U extends User, V extends View<U>> = (\n view: V,\n ) => void | Promise<void>;\n export type SetActiveViewId<U extends User, V extends View<U>> = (\n id: V['id'],\n ) => void | Promise<void>;\n\n /////////////\n // Manager //\n /////////////\n\n export type Manager<U extends User, V extends View<U>> = {\n actions: Subject<Action<U, V>>;\n state: Connectable<FullState<U, V>>;\n };\n\n export type ManagerOptions<U extends User, V extends View<U>> = {\n initialState?: DeepPartial<CoreState<U, V>>;\n fuseOptions?: IFuseOptions<V>;\n };\n\n export type CreateManagerInput<U extends User, V extends View<U>> = {\n source: Source<U, V>;\n save: Save<U, V>;\n duplicate: Duplicate<U, V>;\n userSource: UserSource<U>;\n userSelectMode?: UserSelectMode;\n onAddUser?: OnAddUser<U>;\n newTooltip?: string;\n copyLink: CopyLink<U, V>;\n setActiveViewId: SetActiveViewId<U, V>;\n options?: ManagerOptions<U, V>;\n };\n\n export function createManager<U extends User, V extends View<U>>({\n source,\n save,\n duplicate,\n userSource,\n userSelectMode,\n onAddUser,\n newTooltip,\n copyLink,\n options,\n setActiveViewId,\n }: CreateManagerInput<U, V>): Manager<U, V> {\n const defaultState: CoreState<U, V> = {\n views: [],\n activeViewId: null,\n temporaryViewId: null,\n containerWidth: 0,\n editingViewContext: null,\n deletingViewContext: null,\n overflow: {\n search: '',\n pickerOpen: false,\n },\n all: {\n search: '',\n privateOpen: true,\n sharedOpen: true,\n publicOpen: true,\n },\n userSource,\n userSelectMode: userSelectMode ?? 'select',\n onAddUser,\n newTooltip,\n hasSystemView: true,\n };\n\n const defaultedInitialState: CoreState<U, V> = defaultsDeep(\n {},\n options?.initialState,\n defaultState,\n );\n\n const actions: Subject<Action<U, V>> = new Subject();\n const coreState: Observable<CoreState<U, V>> = actions.pipe(\n mergeScan(\n (state, action) =>\n from(\n reduce(\n state,\n action,\n source,\n debounce(save, 200),\n duplicate,\n copyLink,\n setActiveViewId,\n ),\n ),\n defaultedInitialState,\n 1,\n ),\n startWith(defaultedInitialState),\n );\n\n const state: Connectable<FullState<U, V>> = connectable(\n coreState.pipe(\n map(s => {\n const enabledNormalViews: V[] = getEnabledViews(s.views);\n const activeView: V | undefined = enabledNormalViews.find(\n view => view.id === s.activeViewId,\n );\n // If for some reason the active view is not currently enabled, we'll\n // default to making the first enabled view active instead.\n const activeViewId: V['id'] | null = activeView\n ? activeView.id\n : enabledNormalViews.length > 0\n ? enabledNormalViews[0].id\n : null;\n\n const allViews: FullView<U, V>[] = s.views.map((view, i) => {\n const isSystemView: boolean = s.hasSystemView && i === 0;\n const isTemporaryView: boolean = s.temporaryViewId === view.id;\n return {\n ...view,\n enabled: view.enabled || isSystemView || isTemporaryView,\n active: activeViewId === view.id,\n system: isSystemView,\n temporary: isTemporaryView,\n };\n });\n\n const allEnabledViews = getEnabledViews(allViews);\n\n const displayedViews = calculateDisplayedViews(\n allEnabledViews,\n calculateOverflowViewIndex(s),\n activeViewId,\n s.temporaryViewId,\n );\n\n const enabledViews = s.overflow.search\n ? searchViews(\n allEnabledViews,\n s.overflow.search,\n options?.fuseOptions,\n )\n : allEnabledViews;\n\n const allPermanentViews = allViews.filter(view => !view.temporary);\n const allViewsFiltered = s.all.search\n ? searchViews(allPermanentViews, s.all.search, options?.fuseOptions)\n : allPermanentViews;\n\n const searchingAllViews = !!s.all.search;\n\n return {\n ...s,\n allViews,\n displayedViews,\n enabledViews,\n allEnabledViews,\n all: {\n ...s.all,\n privateOpen: searchingAllViews || s.all.privateOpen,\n privateViews: viewsByPermission(allViewsFiltered, 'private'),\n sharedOpen: searchingAllViews || s.all.sharedOpen,\n sharedViews: viewsByPermission(allViewsFiltered, 'shared'),\n publicOpen: searchingAllViews || s.all.publicOpen,\n publicViews: viewsByPermission(allViewsFiltered, 'public'),\n },\n activeViewId: activeViewId,\n };\n }),\n ),\n {\n connector: () => new ReplaySubject(1),\n resetOnDisconnect: false,\n },\n );\n state.connect();\n\n // Load the views immediately\n actions.next({ type: 'load' });\n\n return { actions, state };\n }\n\n //////////////////////////////////\n // State reducer (with helpers) //\n //////////////////////////////////\n\n function getEnabledViews<U extends User, V extends View<U>>(views: V[]): V[];\n function getEnabledViews<U extends User, V extends View<U>>(\n views: FullView<U, V>[],\n ): FullView<U, V>[] {\n return views.filter((v, i) => v.enabled || v.system || v.temporary);\n }\n\n /**\n * Translates an index in the enabled views list to the corresponding index\n * in the full views list. This is used to resolve UI indices (which only\n * show enabled views) to state.views indices (which includes all views).\n */\n function mapEnabledIndexToViewIndex<U extends User, V extends View<U>>(\n views: V[],\n enabledIndex: number,\n ): number {\n const enabledViews = getEnabledViews(views);\n\n const targetView = enabledViews[enabledIndex];\n if (!targetView) return enabledIndex;\n\n const viewIndex = views.findIndex(view => view.id === targetView.id);\n return viewIndex === -1 ? enabledIndex : viewIndex;\n }\n\n function calculateOverflowViewIndex<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n ): number {\n const enabledViews = getEnabledViews(state.views);\n\n // Tabs have a minimum width of 92px.\n const possibleSlotCount = Math.floor(state.containerWidth / 92);\n\n // The \"all views\" sidebar trigger takes up one slot.\n const availableSlotCount = possibleSlotCount - 1;\n\n // If there are too many tabs, the \"N more\" trigger takes up one slot as well.\n // But we want to avoid the \"1 more\" case, so we only use a slot for \"N more\" if N != 1.\n if (availableSlotCount >= enabledViews.length) return enabledViews.length;\n else return availableSlotCount - 1; // the \"N more\" uses up a slot.\n }\n\n function calculateDisplayedViews<U extends User, V extends View<U>>(\n fullViews: FullView<U, V>[],\n overflowViewIndex: number,\n activeViewId: CoreState<U, V>['activeViewId'],\n temporaryViewId: CoreState<U, V>['temporaryViewId'],\n ): FullView<U, V>[] {\n const displayedViews = fullViews.slice(0, overflowViewIndex);\n\n const viewsToAlwaysDisplay: FullView<U, V>[] = [];\n\n // The active view should always be displayed if it exists\n const activeViewInDisplay = displayedViews.some(\n view => view.id === activeViewId,\n );\n if (activeViewId !== null && !activeViewInDisplay) {\n const activeView = fullViews.find(view => view.id === activeViewId);\n if (activeView && displayedViews.length > 0) {\n viewsToAlwaysDisplay.push(activeView);\n }\n }\n\n // We should try to display the temporary view if it exists\n const temporaryViewInDisplay = displayedViews.some(\n view => view.id === temporaryViewId,\n );\n if (\n temporaryViewId !== null &&\n !temporaryViewInDisplay &&\n temporaryViewId != activeViewId\n ) {\n const temporaryView = fullViews.find(view => view.id === temporaryViewId);\n if (\n temporaryView &&\n displayedViews.length > viewsToAlwaysDisplay.length\n ) {\n viewsToAlwaysDisplay.push(temporaryView);\n }\n }\n\n if (viewsToAlwaysDisplay.length > 0) {\n const numViewsToReplace: number = viewsToAlwaysDisplay.length;\n return [\n ...displayedViews.slice(0, -1 * numViewsToReplace),\n ...viewsToAlwaysDisplay,\n ];\n }\n\n return displayedViews;\n }\n\n function viewsByPermission<U extends User, V extends View<U>>(\n views: FullView<U, V>[],\n permission: ViewPermission,\n ): FullView<U, V>[] {\n return sortBy(\n views.filter(view => view.permission === permission),\n [v => !v.system, 'title'],\n );\n }\n\n function searchViews<U extends User, V extends View<U>>(\n views: FullView<U, V>[],\n query: string,\n options?: IFuseOptions<V>,\n ): FullView<U, V>[] {\n const fuse = new Fuse(views, {\n threshold: 0.2,\n keys: ['title'],\n includeMatches: true,\n ...options,\n });\n\n const matchedOptions: FuseResult<FullView<U, V>>[] = fuse.search(query);\n\n return matchedOptions.map(result => ({\n ...result.item,\n titleHighlightIndices: [\n ...(result.matches?.find(match => match.key === 'title')?.indices ??\n []),\n ],\n }));\n }\n\n function getNextBestActiveView<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n ): V['id'] | null {\n const enabledViews = getEnabledViews(state.views);\n const currentActiveViewIndex = enabledViews.findIndex(\n view => view.id === state.activeViewId,\n );\n\n if (enabledViews.length == 0) {\n return null;\n }\n if (currentActiveViewIndex === -1) return enabledViews[0].id;\n return (\n enabledViews[currentActiveViewIndex + 1]?.id ??\n enabledViews[currentActiveViewIndex - 1]?.id ??\n enabledViews[0].id\n );\n }\n\n function deleteView<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n id: V['id'],\n ): CoreState<U, V> {\n const activeViewId =\n state.activeViewId === id\n ? getNextBestActiveView(state)\n : state.activeViewId;\n const temporaryViewId =\n state.temporaryViewId === id ? null : state.temporaryViewId;\n const views = state.views.filter(view => view.id !== id);\n return {\n ...state,\n views,\n activeViewId,\n temporaryViewId,\n deletingViewContext: null,\n };\n }\n\n function setEnabled<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n id: V['id'],\n enabled: boolean,\n ): CoreState<U, V> {\n return {\n ...state,\n views: state.views.map(view =>\n view.id === id ? { ...view, enabled } : view,\n ),\n activeViewId:\n !enabled && state.activeViewId === id\n ? getNextBestActiveView(state)\n : state.activeViewId,\n };\n }\n\n function withDuplicateView<U extends User, V extends View<U>>(\n views: V[],\n duplicatedView: V,\n newView: V,\n ): V[] {\n const sourceIndex = views.findIndex(view => view.id === duplicatedView.id);\n if (sourceIndex === -1) {\n return [newView, ...views];\n } else {\n return [\n ...views.slice(0, sourceIndex + 1),\n newView,\n ...views.slice(sourceIndex + 1),\n ];\n }\n }\n\n function viewOrderChange<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n previousEnabledIndex: number,\n newEnabledIndex: number,\n ): { state: CoreState<U, V>; shouldSave: boolean } {\n if (\n state.hasSystemView &&\n (previousEnabledIndex === 0 || newEnabledIndex === 0)\n ) {\n return { state, shouldSave: false }; // Keep system view (index 0) in place\n }\n\n const actualPreviousIndex = mapEnabledIndexToViewIndex(\n state.views,\n previousEnabledIndex,\n );\n const actualNewIndex = mapEnabledIndexToViewIndex(\n state.views,\n newEnabledIndex,\n );\n\n const item = state.views[actualPreviousIndex];\n const withoutItem = state.views.filter((_, i) => i !== actualPreviousIndex);\n\n return {\n state: {\n ...state,\n views: [\n ...withoutItem.slice(0, actualNewIndex),\n item,\n ...withoutItem.slice(actualNewIndex),\n ],\n },\n shouldSave: true,\n };\n }\n\n function getPermanentViews<U extends User, V extends View<U>>(\n views: V[],\n temporaryViewId: CoreState<U, V>['temporaryViewId'],\n ): V[] {\n return views.filter(view => view.id != temporaryViewId);\n }\n\n function savePermanentViews<U extends User, V extends View<U>>(\n save: Save<U, V>,\n views: V[],\n temporaryViewId: CoreState<U, V>['temporaryViewId'],\n ) {\n const permanentViews = getPermanentViews(views, temporaryViewId);\n\n save(permanentViews);\n }\n\n async function reduce<U extends User, V extends View<U>>(\n state: CoreState<U, V>,\n action: Action<U, V>,\n source: Source<U, V>,\n save: Save<U, V>,\n duplicate: Duplicate<U, V>,\n copyLink: CopyLink<U, V>,\n setActiveViewId: SetActiveViewId<U, V>,\n ): Promise<CoreState<U, V>> {\n switch (action.type) {\n case 'load':\n const views = await source();\n return {\n ...state,\n views,\n };\n\n case 'setActiveView': {\n const activeView = state.views.find(v => v.id === action.id);\n const views =\n activeView && !activeView.enabled\n ? state.views.map(view =>\n view.id === action.id ? { ...view, enabled: true } : view,\n )\n : state.views;\n // If enabling the view changed the views, we need to save.\n if (views !== state.views) {\n savePermanentViews(save, views, state.temporaryViewId);\n }\n // notify the caller that the active view has changed\n setActiveViewId(action.id);\n return {\n ...state,\n activeViewId: action.id,\n views,\n all: {\n ...state.all,\n search: '',\n },\n overflow: {\n ...state.overflow,\n search: '',\n },\n };\n }\n\n case 'setEnabled': {\n const newState = setEnabled(state, action.id, action.enabled);\n savePermanentViews(save, newState.views, newState.temporaryViewId);\n return newState;\n }\n\n case 'setContainerWidth':\n return {\n ...state,\n containerWidth: action.width,\n };\n\n case 'setOverflowPickerOpen':\n return {\n ...state,\n overflow: {\n ...state.overflow,\n pickerOpen: action.open,\n },\n };\n\n case 'setOverflowSearchQuery':\n return {\n ...state,\n overflow: {\n ...state.overflow,\n search: action.query,\n },\n };\n\n case 'setAllViewsSearchQuery':\n return {\n ...state,\n all: {\n ...state.all,\n search: action.query,\n },\n };\n\n case 'updateView': {\n if (action.view.id != state.temporaryViewId) {\n const views = state.views.map(view =>\n view.id === action.view.id ? action.view : view,\n );\n savePermanentViews(save, views, state.temporaryViewId);\n return {\n ...state,\n views: views,\n };\n } else {\n // Updating a temporary view saves the view and makes it permanent\n const temporaryViewToSave = await duplicate({ ...action.view });\n\n const views = state.views.map(view =>\n view.id === action.view.id ? temporaryViewToSave : view,\n );\n\n savePermanentViews(save, views, null);\n // Make sure the view we just saved is the active view\n setActiveViewId(temporaryViewToSave.id);\n return {\n ...state,\n views: views,\n activeViewId: temporaryViewToSave.id,\n temporaryViewId: null,\n };\n }\n }\n\n case 'deleteView': {\n const newState = deleteView(state, action.view.id);\n savePermanentViews(save, newState.views, state.temporaryViewId);\n return newState;\n }\n\n case 'duplicateView': {\n const newView = await duplicate({ ...action.view });\n return {\n ...state,\n views: withDuplicateView(state.views, action.view, newView),\n editingViewContext: {\n id: newView.id,\n autoRename: true,\n menuContext: action.menuContext,\n },\n activeViewId: newView.id,\n };\n }\n\n case 'copyLinkToView':\n await copyLink(action.view);\n return state;\n\n case 'viewOrderChange': {\n const { state: newState, shouldSave } = viewOrderChange(\n state,\n action.previousEnabledIndex,\n action.newEnabledIndex,\n );\n if (shouldSave) {\n savePermanentViews(save, newState.views, state.temporaryViewId);\n }\n return newState;\n }\n\n case 'setAllViewsToggle':\n return {\n ...state,\n all: {\n ...state.all,\n privateOpen:\n action.permission === 'private'\n ? action.open\n : state.all.privateOpen,\n sharedOpen:\n action.permission === 'shared'\n ? action.open\n : state.all.sharedOpen,\n publicOpen:\n action.permission === 'public'\n ? action.open\n : state.all.publicOpen,\n },\n };\n\n case 'setEditingView':\n return {\n ...state,\n editingViewContext: action.context,\n };\n\n case 'setDeletingView':\n return {\n ...state,\n deletingViewContext: action.context,\n };\n\n case 'createTemporaryView':\n const existingPermanentViews = getPermanentViews(\n state.views,\n state.temporaryViewId,\n );\n\n // Swap the active view to the temporary view\n setActiveViewId(action.view.id);\n return {\n ...state,\n temporaryViewId: action.view.id,\n activeViewId: action.view.id,\n views: [...existingPermanentViews, action.view],\n };\n }\n }\n\n ///////////////\n // Utilities //\n ///////////////\n\n export function getPermissionTitle(permission: ViewPermission): string {\n switch (permission) {\n case 'private':\n return 'Private';\n case 'shared':\n return 'Shared';\n case 'public':\n return 'Public';\n }\n }\n\n export function getPermissionDescription(permission: ViewPermission): string {\n switch (permission) {\n case 'private':\n return 'Private - Only available to you';\n case 'shared':\n return 'Shared - Only visible to those with access';\n case 'public':\n return 'Public - Visible to everyone';\n }\n }\n\n export function isSharedView<U extends User, V extends View<U>>(\n view?: FullView<U, V>,\n ): view is FullView<U, V> & { permission: 'shared'; sharedUsers: U[] } {\n return view?.permission === 'shared';\n }\n\n /**\n * Converts SearchSelectUser<U> items back to U[] for storage in sharedUsers.\n *\n * Cast required because TypeScript cannot prove that destructuring `new`\n * from `U & { new: boolean }` yields exactly `U` (spread/rest doesn't\n * narrow intersection types).\n *\n * - Strips `new: false` so isEqual() comparisons work (original users lack `new`)\n * - Preserves `new: true` so the backend knows which users to create\n */\n export function toSharedUsers<U extends User>(\n users: SearchSelectUser<U>[],\n ): U[] {\n return users.map(user => {\n if (user.new) {\n return user as unknown as U;\n }\n const { new: _isNew, ...rest } = user;\n return rest as unknown as U;\n });\n }\n}\n","import {\n animate,\n group,\n query,\n style,\n transition,\n trigger,\n} from '@angular/animations';\nimport { KeyValue } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n TrackByFunction,\n} from '@angular/core';\nimport { OverlayService } from './overlay.service';\n\ntype AnimationConfig = {\n HOOK: string;\n HIDDEN: Parameters<typeof style>[0];\n VISIBLE: Parameters<typeof style>[0];\n};\n\nexport const ANIMATION_CONSTANTS: Record<\n 'SIDE_SHEET' | 'TOAST' | 'DIALOG' | 'MODAL',\n AnimationConfig\n> = {\n SIDE_SHEET: {\n HOOK: 'side-sheet',\n HIDDEN: { transform: 'translateX(100%)' },\n VISIBLE: { transform: 'translateX(0%)' },\n },\n TOAST: {\n HOOK: 'toast',\n HIDDEN: {\n opacity: 0,\n transform: 'translateY(calc(var(--size-xsmall) * -1))',\n filter: 'blur(var(--size-xsmall))',\n },\n VISIBLE: { opacity: 1, transform: 'translateY(0px)', filter: 'none' },\n },\n MODAL: {\n HOOK: 'modal',\n HIDDEN: { opacity: 0 },\n VISIBLE: { opacity: 1 },\n },\n DIALOG: {\n HOOK: 'dialog',\n HIDDEN: {\n transform: 'translateY(var(--size-large))',\n filter: 'blur(var(--size-xsmall))',\n },\n VISIBLE: { transform: 'translateY(0px)', filter: 'none' },\n },\n};\n\nfunction createComponentAnimation(config: AnimationConfig) {\n return {\n enter: query(\n `[data-animation-hook=\"${config.HOOK}\"]`,\n [\n style(config.HIDDEN),\n animate('200ms ease-in-out', style(config.VISIBLE)),\n ],\n { optional: true },\n ),\n leave: query(\n `[data-animation-hook=\"${config.HOOK}\"]`,\n [animate('150ms linear', style(config.HIDDEN))],\n { optional: true },\n ),\n };\n}\n\nconst sideSheetAnimation = createComponentAnimation(\n ANIMATION_CONSTANTS.SIDE_SHEET,\n);\nconst toastAnimation = createComponentAnimation(ANIMATION_CONSTANTS.TOAST);\nconst modalAnimation = createComponentAnimation(ANIMATION_CONSTANTS.MODAL);\nconst dialogAnimation = createComponentAnimation(ANIMATION_CONSTANTS.DIALOG);\n\n@Component({\n animations: [\n trigger('animate', [\n transition(':enter', [\n group([\n sideSheetAnimation.enter,\n toastAnimation.enter,\n modalAnimation.enter,\n dialogAnimation.enter,\n ]),\n ]),\n transition(':leave', [\n group([\n sideSheetAnimation.leave,\n toastAnimation.leave,\n modalAnimation.leave,\n dialogAnimation.leave,\n ]),\n ]),\n ]),\n ],\n selector: 'riv-overlay-outlet',\n templateUrl: './overlay-outlet.component.html',\n styleUrls: ['./overlay-outlet.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OverlayOutletComponent {\n constructor(readonly overlayService: OverlayService) {}\n\n readonly trackOverlay: TrackByFunction<KeyValue<Symbol, TemplateRef<void>>> =\n (_, { key }: { key: Symbol }) => key;\n}\n","<ng-container\n *ngFor=\"\n let overlay of overlayService.overlays | async | keyvalue;\n trackBy: trackOverlay\n \"\n>\n <div class=\"overlay-container\" @animate>\n <ng-container *ngTemplateOutlet=\"overlay.value\"></ng-container>\n </div>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { ANIMATION_CONSTANTS } from '../overlay-outlet.component';\n\n@Component({\n selector: 'riv-modal',\n templateUrl: './modal.component.html',\n styleUrls: ['./modal.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent {\n @Input()\n obscure: boolean = false;\n\n @Input()\n topOffset: number = 0;\n\n @Output()\n readonly close = new EventEmitter<void>();\n\n scrimClick(evt: MouseEvent) {\n if (evt.target === evt.currentTarget) {\n this.close.emit();\n }\n }\n\n readonly hook = ANIMATION_CONSTANTS.MODAL.HOOK;\n}\n","<div\n #scrim\n *riv-overlay\n [attr.data-animation-hook]=\"hook\"\n [rivLockScroll]=\"true\"\n class=\"scrim\"\n [class.obscure]=\"obscure\"\n [style.top.px]=\"topOffset\"\n (click)=\"scrimClick($event)\"\n>\n <ng-content></ng-content>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { ANIMATION_CONSTANTS } from '../../overlay-outlet.component';\n\n@Component({\n selector: 'riv-side-sheet',\n templateUrl: './side-sheet.component.html',\n styleUrls: ['./side-sheet.component.css'],\n\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SideSheetComponent {\n @Input()\n topOffset: number = 0;\n\n @Input()\n width: string = 'calc(var(--base-grid-size) * 105)';\n\n @Input()\n obscure: boolean = false;\n\n /** Accessible name for the side sheet, announced by screen readers. */\n @Input()\n label?: string;\n\n @Output()\n close = new EventEmitter<void>();\n\n readonly hook = ANIMATION_CONSTANTS.SIDE_SHEET.HOOK;\n}\n","<riv-modal (close)=\"close.emit()\" [obscure]=\"obscure\" [topOffset]=\"topOffset\">\n <div\n [attr.data-animation-hook]=\"hook\"\n class=\"side-sheet\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"label ?? null\"\n [style.width]=\"width\"\n >\n <ng-content></ng-content>\n </div>\n</riv-modal>\n","import { Injectable } from '@angular/core';\n\n/**\n * Tracks open dialogs in the order they were opened, so a document-level\n * Escape handler can tell whether its dialog is the topmost one. Without this,\n * every open dialog sees the same keydown and one Escape closes the whole\n * stack.\n */\n@Injectable({ providedIn: 'root' })\nexport class DialogStackService {\n private stack: readonly symbol[] = [];\n\n register(): symbol {\n const key = Symbol();\n this.stack = [...this.stack, key];\n return key;\n }\n\n unregister(key: symbol) {\n this.stack = this.stack.filter(k => k !== key);\n }\n\n isTopmost(key: symbol): boolean {\n return this.stack[this.stack.length - 1] === key;\n }\n\n /**\n * Whether the dialog registered as `key` should close for this keydown: it\n * must be an Escape that nothing inside the dialog has already claimed (via\n * preventDefault, e.g. closing a riv-search-select or mentions popup), and\n * the dialog must be the topmost one so a dialog opened from inside another\n * doesn't close both.\n */\n isTopmostEscape(key: symbol, event: KeyboardEvent): boolean {\n return (\n event.key === 'Escape' && !event.defaultPrevented && this.isTopmost(key)\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { uniqueId } from 'lodash';\nimport { ANIMATION_CONSTANTS } from '../../overlay-outlet.component';\nimport { DialogStackService } from '../dialog-stack.service';\n\n@Component({\n selector: 'riv-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DialogComponent implements OnDestroy {\n @Input()\n title?: string;\n\n @Input()\n minWidth?: string;\n\n @Input()\n customBody = false;\n\n @Input()\n customFooter = false;\n\n @Output()\n close = new EventEmitter<void>();\n\n readonly titleId: string = uniqueId('riv-dialog-title-');\n\n private readonly stackKey: symbol;\n\n constructor(private readonly dialogStack: DialogStackService) {\n this.stackKey = dialogStack.register();\n }\n\n ngOnDestroy() {\n this.dialogStack.unregister(this.stackKey);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (this.dialogStack.isTopmostEscape(this.stackKey, event)) {\n event.preventDefault();\n this.close.emit();\n }\n }\n\n readonly hook = ANIMATION_CONSTANTS.DIALOG.HOOK;\n}\n","<riv-modal (close)=\"close.emit()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div\n class=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"title ? titleId : null\"\n [style.min-width]=\"minWidth\"\n >\n <header>\n <span class=\"title\" [id]=\"titleId\">\n {{ title }}\n </span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n <div class=\"body\" [class.custom]=\"customBody\">\n <ng-content></ng-content>\n </div>\n <div class=\"footer riv-dialog-footer\" [class.custom]=\"customFooter\">\n <ng-content select=\"footer\"></ng-content>\n </div>\n </div>\n </div>\n</riv-modal>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { isEqual } from 'lodash';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { RivSelect } from '../../../input/select/state';\nimport { RivViews } from '../state';\n\nconst titles: Record<RivViews.ViewPermission, string> = {\n private: 'Private',\n public: 'Public',\n shared: 'Shared',\n};\n\nconst subtitles: Record<RivViews.ViewPermission, string> = {\n private: 'Only visible to you',\n public: 'Visible to everyone',\n shared: 'Only visible to those with access',\n};\n\n@Component({\n selector: 'riv-permission-picker',\n templateUrl: './permission-picker.component.html',\n styleUrls: ['./permission-picker.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PermissionPickerComponent<U extends RivViews.User>\n implements OnInit, OnChanges, OnDestroy\n{\n @Input()\n permission: RivViews.ViewPermission = 'private';\n\n @Input()\n sharedUsers: U[] = [];\n\n @Input()\n userSelectMode: RivViews.UserSelectMode = 'select';\n\n @Input()\n userSource?: RivViews.UserSource<U>;\n\n @Input()\n onAddUser?: RivViews.OnAddUser<U>;\n\n @Input()\n newTooltip?: string;\n\n @Input()\n disabledPermissions: RivViews.ViewPermission[] = [];\n\n @Output()\n permissionChange = new EventEmitter<RivViews.ViewPermission>();\n\n @Output()\n sharedUsersChange = new EventEmitter<U[]>();\n\n readonly permissionOptions = RivViews.ViewPermissions.map(permission => ({\n value: permission,\n title: titles[permission],\n subtitle: subtitles[permission],\n }));\n\n userSelectManager?: RivSelect.Manager<U>;\n private userSelectSubscription?: Subscription;\n\n userOptions: RivViews.SearchSelectUser<U>[] = [];\n selectedUsers: RivViews.SearchSelectUser<U>[] = [];\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.setUpUserSelectManager();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // ngOnInit performs the initial setup, so ignore first-change events here.\n // Rebuild only on a genuine change: a new data source, a mode switch, or a\n // value-level change to the seeded selection. Comparing sharedUsers by value\n // (rather than reference) is essential — the parent binds a fresh array each\n // change-detection cycle, and reacting to that reference churn would rebuild\n // the manager on every cycle.\n const userSourceChanged =\n changes['userSource'] && !changes['userSource'].firstChange;\n const userSelectModeChanged =\n changes['userSelectMode'] && !changes['userSelectMode'].firstChange;\n const sharedUsersChanged =\n changes['sharedUsers'] &&\n !changes['sharedUsers'].firstChange &&\n !isEqual(\n changes['sharedUsers'].previousValue,\n changes['sharedUsers'].currentValue,\n );\n\n if (userSourceChanged || userSelectModeChanged || sharedUsersChanged) {\n this.setUpUserSelectManager();\n }\n }\n\n ngOnDestroy(): void {\n this.tearDownUserSelectManager();\n }\n\n private tearDownUserSelectManager(): void {\n this.userSelectSubscription?.unsubscribe();\n }\n\n private async setUpUserSelectManager(): Promise<void> {\n this.tearDownUserSelectManager();\n\n if (this.userSelectMode === 'search-select') {\n const users = await (this.userSource || (() => []))();\n this.userOptions = users.map(u => ({\n ...u,\n new: (u as RivViews.SearchSelectUser<U>).new ?? false,\n }));\n this.selectedUsers = this.sharedUsers.map(u => ({\n ...u,\n new: (u as RivViews.SearchSelectUser<U>).new ?? false,\n }));\n this.cdr.markForCheck();\n } else {\n this.userSelectManager = RivSelect.createInMemoryManager(\n async () => [{ options: await (this.userSource || (() => []))() }],\n {\n allowSearch: true,\n allowSelectAll: true,\n allowMultiSelect: true,\n displayLimit: 500,\n initialState: {\n selection: {\n selected: new RivSelect.OptionSet(this.sharedUsers),\n },\n },\n },\n );\n this.userSelectSubscription = this.userSelectManager.state\n .pipe(\n map(state => [...state.selection.selected] as U[]),\n distinctUntilChanged(isEqual),\n )\n .subscribe(users => {\n // The manager replays its initial (seeded) selection synchronously on\n // subscribe. Emitting that back would echo the sharedUsers input to\n // the parent, which mutates its view and feeds a new array reference\n // straight back into this component — an infinite change-detection\n // loop. Only propagate genuine, user-driven selection changes.\n if (!isEqual(users, this.sharedUsers)) {\n this.sharedUsersChange.emit(users);\n }\n });\n this.userSelectManager.actions.next({ type: 'load' });\n }\n }\n\n onPermissionClick(value: RivViews.ViewPermission): void {\n if (this.isDisabled(value)) {\n return;\n }\n this.permissionChange.emit(value);\n }\n\n isDisabled(permission: RivViews.ViewPermission): boolean {\n return this.disabledPermissions?.includes(permission) ?? false;\n }\n\n onSelectedUsersChange(users: RivViews.SearchSelectUser<U>[]): void {\n this.selectedUsers = users;\n this.sharedUsersChange.emit(RivViews.toSharedUsers(users));\n }\n\n handleAddUser(searchText: string): void {\n if (!this.onAddUser) return;\n const newUser = this.onAddUser(searchText);\n this.userOptions = [...this.userOptions, newUser];\n this.selectedUsers = [...this.selectedUsers, newUser];\n this.sharedUsersChange.emit(RivViews.toSharedUsers(this.selectedUsers));\n this.cdr.markForCheck();\n }\n}\n","<div class=\"permission-picker\">\n <div class=\"permission-label\">View permissions</div>\n\n <div class=\"permission-options\">\n <button\n *ngFor=\"let option of permissionOptions\"\n class=\"permission-option\"\n [class.current]=\"permission === option.value\"\n [class.disabled]=\"isDisabled(option.value)\"\n type=\"button\"\n [attr.aria-checked]=\"permission === option.value\"\n [attr.aria-label]=\"option.title + ' permission'\"\n [attr.aria-disabled]=\"isDisabled(option.value)\"\n (click)=\"onPermissionClick(option.value)\"\n >\n <div class=\"option-content\">\n <div class=\"option-title\">\n <span>{{ option.title }}</span>\n <span class=\"option-description\">{{ option.subtitle }}</span>\n </div>\n <riv-icon\n *ngIf=\"permission === option.value\"\n class=\"permission-indicator\"\n [name]=\"'Check'\"\n [size]=\"16\"\n ></riv-icon>\n </div>\n <riv-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'select' &&\n userSelectManager\n \"\n [label]=\"'Users with access'\"\n [manager]=\"userSelectManager\"\n ></riv-select>\n <riv-search-select\n *ngIf=\"\n permission === 'shared' &&\n option.value === 'shared' &&\n userSelectMode === 'search-select'\n \"\n (click)=\"$event.stopPropagation()\"\n [label]=\"'Users with access'\"\n [options]=\"userOptions\"\n [selected]=\"selectedUsers\"\n [placeholder]=\"'Search users'\"\n [addNewLabel]=\"'Add'\"\n [newTooltip]=\"newTooltip\"\n (selectedChange)=\"onSelectedUsersChange($event)\"\n (addNew)=\"handleAddUser($event)\"\n ></riv-search-select>\n </button>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash';\nimport { RivViews } from '../state';\n\n@Component({\n selector: 'riv-edit-view',\n templateUrl: './edit-view.component.html',\n styleUrls: ['./edit-view.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EditViewComponent<\n U extends RivViews.User,\n V extends RivViews.View<U>,\n> implements OnInit, OnChanges\n{\n @Input()\n anchor?: Element | DOMRect | null;\n\n @Input()\n autoSelectName: boolean = false;\n\n @Input()\n view?: RivViews.FullView<U, V>;\n\n editedView?: RivViews.FullView<U, V>;\n\n @Input()\n userSource?: RivViews.UserSource<U>;\n\n @Input()\n userSelectMode: RivViews.UserSelectMode = 'select';\n\n @Input()\n onAddUser?: RivViews.OnAddUser<U>;\n\n @Input()\n newTooltip?: string;\n\n @Input()\n mode: 'edit' | 'create' = 'edit';\n\n @Output()\n save = new EventEmitter<RivViews.FullView<U, V>>();\n\n @Output()\n delete = new EventEmitter<RivViews.FullView<U, V>>();\n\n @Output()\n close = new EventEmitter<void>();\n\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n private resetView() {\n this.editedView = cloneDeep(this.view);\n }\n\n ngOnInit(): void {\n this.resetView();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['view']) {\n this.resetView();\n }\n }\n\n canEdit(): boolean {\n return this.mode === 'edit';\n }\n\n isClean() {\n return isEqual(this.editedView, this.view);\n }\n\n titleChange(value: string): void {\n if (this.editedView) this.editedView.title = value;\n // These handlers fire from the permission picker / text field, which render\n // in the overlay outlet's change-detection subtree — a different branch than\n // this OnPush component. Without markForCheck the updated editedView never\n // flows back into the child input bindings (e.g. the highlighted option).\n this.cdr.markForCheck();\n }\n\n onPermissionChange(value: RivViews.ViewPermission): void {\n if (!this.editedView) return;\n\n if (value === 'shared') {\n if (!RivViews.isSharedView(this.editedView)) {\n this.editedView = {\n ...this.editedView,\n permission: 'shared',\n sharedUsers: [],\n } as unknown as RivViews.FullView<U, V>;\n }\n } else {\n if (RivViews.isSharedView(this.editedView)) {\n const { sharedUsers, ...rest } = this.editedView;\n this.editedView = {\n ...rest,\n permission: value,\n } as unknown as RivViews.FullView<U, V>;\n } else {\n this.editedView.permission = value;\n }\n }\n this.cdr.markForCheck();\n }\n\n onSharedUsersChange(users: U[]): void {\n if (RivViews.isSharedView(this.editedView)) {\n this.editedView.sharedUsers = users;\n }\n this.cdr.markForCheck();\n }\n\n // Stable empty-array reference for the non-shared branch, so this getter\n // doesn't hand the permission picker a fresh [] on every change-detection\n // cycle (which would churn its @Input and trigger needless work).\n private static readonly NO_SHARED_USERS: RivViews.User[] = [];\n\n getSharedUsers(view?: RivViews.FullView<U, V>): U[] {\n if (RivViews.isSharedView(view)) {\n return view.sharedUsers;\n }\n return EditViewComponent.NO_SHARED_USERS as U[];\n }\n}\n","<ng-container *ngIf=\"editedView; let ev\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor ?? null\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [fallbackDirection]=\"'clockwise'\"\n (close)=\"close.emit()\"\n >\n <div class=\"edit-view\">\n <div class=\"name-input\">\n <span class=\"name-label\">Name * </span>\n <riv-text-field\n [autoFocus]=\"autoSelectName ? 'select' : false\"\n [value]=\"ev.title ?? ''\"\n (valueChange)=\"titleChange($event)\"\n ></riv-text-field>\n </div>\n\n <hr class=\"divider\" />\n\n <riv-permission-picker\n [permission]=\"ev.permission\"\n [sharedUsers]=\"getSharedUsers(ev)\"\n [userSelectMode]=\"userSelectMode\"\n [userSource]=\"userSource\"\n [onAddUser]=\"onAddUser\"\n [newTooltip]=\"newTooltip\"\n (permissionChange)=\"onPermissionChange($event)\"\n (sharedUsersChange)=\"onSharedUsersChange($event)\"\n ></riv-permission-picker>\n\n <hr class=\"divider\" />\n\n <div class=\"actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'Trash2'\"\n (click)=\"delete.emit(ev); close.emit()\"\n *ngIf=\"canEdit()\"\n >\n Delete\n </button>\n\n <div class=\"actions-spacer\"></div>\n\n <div class=\"primary-actions\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n (click)=\"close.emit()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'primary'\"\n [disabled]=\"canEdit() && isClean()\"\n (click)=\"save.emit(ev); close.emit()\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { CalloutComponent } from '../callout.component';\n\n@Component({\n selector: 'riv-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuComponent {\n public readonly open = new BehaviorSubject<boolean>(false);\n\n @Input()\n preferredPosition: CalloutComponent.AnchoredPosition = 'bottom-left';\n\n @Input()\n disabled = false;\n\n @ContentChild('trigger')\n triggerTemplate?: TemplateRef<{ open: boolean }>;\n\n @ViewChild('customTriggerButton', { read: ElementRef })\n customTriggerButton?: ElementRef;\n\n @ViewChild('standardTriggerButton', { read: ElementRef })\n standardTriggerButton?: ElementRef;\n\n getTrigger(): Element | null {\n return (\n this.customTriggerButton?.nativeElement ??\n this.standardTriggerButton?.nativeElement\n );\n }\n}\n","<ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n type=\"button\"\n #customTriggerButton\n class=\"custom-trigger\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\n (click)=\"open.next(true)\"\n >\n <ng-container\n *ngTemplateOutlet=\"triggerTemplate; context: { open: open | async }\"\n ></ng-container>\n </button>\n</ng-container>\n\n<ng-template #standardTrigger>\n <button\n type=\"button\"\n #standardTriggerButton\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'xsmall'\"\n [icon]=\"'MoreVertical'\"\n [disabled]=\"disabled\"\n (click)=\"open.next(true)\"\n ></button>\n</ng-template>\n\n<ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"getTrigger()\"\n [showCaret]=\"false\"\n [preferredPosition]=\"preferredPosition\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"options\">\n <ng-content></ng-content>\n </div>\n </riv-callout>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { MenuComponent } from '../menu.component';\n\n@Component({\n selector: '[riv-menu-item]',\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuItemComponent implements OnChanges {\n constructor(\n public readonly menu: MenuComponent,\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n ) {}\n\n @Input()\n locked?: boolean;\n\n @Input()\n disabled?: boolean;\n\n @Input()\n variant: MenuItemComponent.Variant = 'basic';\n\n @HostBinding('class')\n get classes() {\n return {\n [this.variant]: true,\n locked: this.locked,\n disabled: this.disabled,\n };\n }\n\n private disableNativeElement: boolean = false;\n private lockNativeElement: boolean = false;\n\n ngOnChanges(changes: SimpleChanges) {\n const accessChange: boolean = !!changes['disabled'] || !!changes['locked'];\n if (accessChange) {\n if (changes['disabled']) {\n this.disableNativeElement = changes['disabled'].currentValue;\n }\n if (changes['locked']) {\n this.lockNativeElement = changes['locked'].currentValue;\n }\n if ('disabled' in this.el.nativeElement) {\n if (this.disableNativeElement || this.lockNativeElement) {\n this.renderer.setAttribute(this.el.nativeElement, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\n }\n }\n }\n }\n\n @HostListener('click', ['$event'])\n click(event: MouseEvent) {\n if (!this.disabled && !this.locked) {\n this.menu.open.next(false);\n } else {\n event.preventDefault();\n }\n }\n}\n\nexport namespace MenuItemComponent {\n export const Variants = ['basic', 'danger'] as const;\n export type Variant = (typeof Variants)[number];\n}\n","<ng-content></ng-content>\n<riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n Input,\n TemplateRef,\n} from '@angular/core';\nimport { RivViews } from '../state';\n\n@Component({\n selector: 'riv-view-menu',\n templateUrl: './view-menu.component.html',\n styleUrls: ['./view-menu.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ViewMenuComponent<\n U extends RivViews.User,\n V extends RivViews.View<U>,\n> {\n constructor(readonly el: ElementRef) {}\n\n @Input()\n manager?: RivViews.Manager<U, V>;\n\n @Input()\n view?: RivViews.FullView<U, V>;\n\n @Input()\n menuContext: RivViews.MenuContext = 'tab';\n\n @ContentChild('menuTrigger')\n triggerTemplate?: TemplateRef<void>;\n}\n","<ng-container *ngIf=\"view\">\n <riv-menu\n #menu\n [preferredPosition]=\"'bottom-right'\"\n (click)=\"$event.stopPropagation()\"\n >\n <ng-container *ngIf=\"triggerTemplate\">\n <ng-template #trigger>\n <ng-container [ngTemplateOutlet]=\"triggerTemplate\"></ng-container>\n </ng-template>\n </ng-container>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'menu'\n })\n \"\n [disabled]=\"view.system || view.temporary\"\n [attr.aria-disabled]=\"view.system || view.temporary ? 'true' : null\"\n >\n {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: false, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Edit view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setEditingView',\n context: { id: view.id, autoRename: true, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Rename view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n \"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Duplicate view\n </button>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'setDeletingView',\n context: { id: view.id, menuContext }\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n Delete view\n </button>\n <div class=\"riv-divider\"></div>\n <button\n type=\"button\"\n riv-menu-item\n (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n [disabled]=\"view.temporary\"\n [attr.aria-disabled]=\"view.temporary ? 'true' : null\"\n >\n Copy link to view\n </button>\n </riv-menu>\n\n <ng-container *ngIf=\"manager?.state | async; let state\">\n <ng-container *ngIf=\"state.editingViewContext; let editingViewContext\">\n <riv-edit-view\n *ngIf=\"\n editingViewContext.id === view.id &&\n editingViewContext.menuContext === menuContext\n \"\n [view]=\"view\"\n [userSource]=\"state.userSource\"\n [userSelectMode]=\"state.userSelectMode\"\n [onAddUser]=\"state.onAddUser\"\n [newTooltip]=\"state.newTooltip\"\n [autoSelectName]=\"editingViewContext.autoRename\"\n [anchor]=\"el.nativeElement\"\n (save)=\"manager?.actions?.next({ type: 'updateView', view: $event })\"\n (delete)=\"manager?.actions?.next({ type: 'deleteView', view: $event })\"\n (close)=\"\n manager?.actions?.next({ type: 'setEditingView', context: null })\n \"\n ></riv-edit-view>\n </ng-container>\n\n <ng-container *ngIf=\"state.deletingViewContext; let deletingViewContext\">\n <riv-dialog\n *ngIf=\"\n deletingViewContext.id === view.id &&\n deletingViewContext.menuContext === menuContext\n \"\n [title]=\"'Delete view'\"\n (close)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n <div class=\"delete-dialog\">\n <div class=\"delete-title\">\n Are you sure you want to delete the following view?\n </div>\n <p>{{ view.title }}</p>\n </div>\n <footer class=\"delete-footer\">\n <button\n type=\"button\"\n rivButton\n (click)=\"\n manager?.actions?.next({ type: 'setDeletingView', context: null })\n \"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'danger'\"\n (click)=\"\n manager?.actions?.next({\n type: 'deleteView',\n view\n })\n \"\n >\n Delete view\n </button>\n </footer>\n </riv-dialog>\n </ng-container>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { RivViews } from '../state';\n\n@Component({\n selector: 'riv-all-views-modal',\n templateUrl: './all-views-modal.component.html',\n styleUrls: ['./all-views-modal.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AllViewsModalComponent<\n U extends RivViews.User,\n V extends RivViews.View<U>,\n> {\n @Input()\n manager?: RivViews.Manager<U, V>;\n\n @Input()\n topOffset: number = 0;\n\n @Output()\n close = new EventEmitter<void>();\n\n getOpenChange(permission: RivViews.ViewPermission): (open: boolean) => void {\n return (open: boolean) =>\n this.manager?.actions?.next({\n type: 'setAllViewsToggle',\n permission,\n open,\n });\n }\n\n getPermissionTitle = RivViews.getPermissionTitle;\n getPermissionDescription = RivViews.getPermissionDescription;\n\n trackById(_: number, view: RivViews.FullView<U, V>): V['id'] {\n return view.id;\n }\n}\n","<ng-container *ngIf=\"manager?.state | async; let s\">\n <riv-side-sheet\n [label]=\"'All views'\"\n [topOffset]=\"topOffset\"\n (close)=\"close.emit()\"\n >\n <div class=\"content\">\n <header>\n <span class=\"title\">All views</span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n (click)=\"close.emit()\"\n ></button>\n </header>\n\n <riv-search\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setAllViewsSearchQuery',\n query: $event\n })\n \"\n [value]=\"s.all.search\"\n placeholder=\"Search\"\n ></riv-search>\n\n <div class=\"views\">\n <!-- View sections by permission type -->\n <ng-container\n *ngIf=\"s.all.privateViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'private',\n open: s.all.privateOpen,\n openChange: getOpenChange('private'),\n views: s.all.privateViews,\n title: getPermissionTitle('private'),\n description: getPermissionDescription('private')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.sharedViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'shared',\n open: s.all.sharedOpen,\n openChange: getOpenChange('shared'),\n views: s.all.sharedViews,\n title: getPermissionTitle('shared'),\n description: getPermissionDescription('shared')\n }\"\n ></ng-container>\n <ng-container\n *ngIf=\"s.all.publicViews.length > 0\"\n [ngTemplateOutlet]=\"permissionSection\"\n [ngTemplateOutletContext]=\"{\n permission: 'public',\n open: s.all.publicOpen,\n openChange: getOpenChange('public'),\n views: s.all.publicViews,\n title: getPermissionTitle('public'),\n description: getPermissionDescription('public')\n }\"\n ></ng-container>\n\n <!-- Permission section -->\n <ng-template\n #permissionSection\n let-permission=\"permission\"\n let-open=\"open\"\n let-openChange=\"openChange\"\n let-views=\"views\"\n let-title=\"title\"\n let-description=\"description\"\n >\n <div class=\"permission-section\">\n <button\n type=\"button\"\n class=\"permission-header\"\n (click)=\"openChange(!open)\"\n [disabled]=\"!!s.all.search\"\n [attr.aria-disabled]=\"!!s.all.search ? 'true' : null\"\n >\n <div class=\"permission-header-content\">\n <h3 class=\"permission-title\">{{ title }}</h3>\n <span class=\"permission-description\">{{ description }}</span>\n </div>\n <riv-icon\n [name]=\"open ? 'ChevronUp' : 'ChevronDown'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n\n <div class=\"permission-content\" *ngIf=\"open\">\n <div class=\"views-list\" *ngIf=\"views.length > 0\">\n <button\n type=\"button\"\n *ngFor=\"let view of views; trackBy: trackById\"\n class=\"view-item\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id,\n source: 'menu'\n });\n close.emit()\n \"\n >\n <div class=\"view-title\" rivTruncate>\n <riv-highlight\n [text]=\"view.title\"\n [indices]=\"view.titleHighlightIndices ?? []\"\n >\n </riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'all-views'\"\n ></riv-view-menu>\n <button\n type=\"button\"\n class=\"enable-view\"\n [class.enabled]=\"view.enabled && !view.system\"\n (click)=\"\n $event.stopPropagation();\n manager?.actions?.next({\n type: 'setEnabled',\n id: view.id,\n enabled: !view.enabled,\n source: 'eyeIcon'\n })\n \"\n [disabled]=\"view.system\"\n [attr.aria-disabled]=\"view.system ? 'true' : null\"\n >\n <riv-icon\n *ngIf=\"view.enabled\"\n [name]=\"view.system ? 'Lock' : 'Eye'\"\n [rivTooltip]=\"view.system ? '' : 'Hide tab'\"\n [size]=\"20\"\n ></riv-icon>\n <riv-icon\n *ngIf=\"!view.enabled\"\n [name]=\"'EyeOff'\"\n [rivTooltip]=\"'Show tab'\"\n [size]=\"20\"\n ></riv-icon>\n </button>\n </button>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n </riv-side-sheet>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { IconComponent } from '../../icon/icon.component';\nimport { ANIMATION_CONSTANTS } from '../overlay-outlet.component';\n\n@Component({\n selector: 'riv-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastComponent implements OnInit {\n static DURATION = 5000;\n\n @Input()\n variant: ToastComponent.Variant = 'basic';\n\n @Input()\n icon?: IconComponent.Name;\n\n ngOnInit(): void {\n setTimeout(() => {\n this.close.emit();\n }, ToastComponent.DURATION);\n }\n\n @Output()\n close = new EventEmitter<void>();\n\n readonly hook = ANIMATION_CONSTANTS.TOAST.HOOK;\n}\n\nexport namespace ToastComponent {\n export const Variants = [\n 'basic',\n 'danger',\n 'safety',\n 'safety-dark',\n 'safety-inverse',\n ] as const;\n export type Variant = (typeof Variants)[number];\n}\n","<div *riv-overlay class=\"wrapper\" [attr.data-animation-hook]=\"hook\">\n <div class=\"toast\" role=\"status\" [ngClass]=\"variant\">\n <riv-icon *ngIf=\"icon\" [name]=\"icon\" [size]=\"16\"></riv-icon>\n <div class=\"content\"><ng-content></ng-content></div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n TrackByFunction,\n ViewChild,\n} from '@angular/core';\nimport { filter, map, merge, Observable, Subject } from 'rxjs';\nimport { IconComponent } from '../../../icon/icon.component';\nimport { RivViews } from '../state';\n\n@Component({\n selector: 'riv-views',\n templateUrl: './views.component.html',\n styleUrls: ['./views.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ViewsComponent<U extends RivViews.User, V extends RivViews.View<U>>\n implements OnInit\n{\n @Input()\n manager?: RivViews.Manager<U, V>;\n\n @Input()\n sideSheetTopOffset: number = 0;\n\n @ViewChild('overflowTrigger', { read: ElementRef })\n overflowTrigger?: ElementRef;\n\n public showAllViews: boolean = false;\n\n draggedTabIndex: number | null = null;\n draggedOverTabIndex: number | null = null;\n draggedViewTitle: V['title'] | null = null;\n\n dragStart(index: number, title: V['title'], isSystemView: boolean): void {\n // We don't let you drag the system view\n if (!isSystemView) {\n this.draggedTabIndex = index;\n this.draggedViewTitle = title;\n }\n }\n\n dragOver(index: number, isSystemView: boolean): void {\n // We don't let you drag over the system view\n if (!isSystemView) {\n this.draggedOverTabIndex = index;\n } else {\n this.draggedOverTabIndex = null;\n }\n }\n\n drop(index: number, overflowMenu: boolean): void {\n if (this.draggedTabIndex !== null) {\n this.manager?.actions.next({\n type: 'viewOrderChange',\n previousEnabledIndex: this.draggedTabIndex,\n newEnabledIndex: index,\n source: overflowMenu ? 'overflowDrag' : 'tabDrag',\n viewTitle: this.draggedViewTitle || undefined,\n });\n }\n\n this.draggedTabIndex = null;\n this.draggedViewTitle = null;\n this.draggedOverTabIndex = null;\n }\n\n toastClosed = new Subject<void>();\n showLinkCopiedToast?: Observable<boolean>;\n ngOnInit() {\n this.showLinkCopiedToast = merge(\n this.manager!.actions.pipe(\n filter(({ type }) => type === 'copyLinkToView'),\n map(() => true),\n ),\n this.toastClosed.pipe(map(() => false)),\n );\n }\n\n trackById: TrackByFunction<RivViews.FullView<U, V>> = (\n _: number,\n v: RivViews.FullView<U, V>,\n ) => v.id;\n\n getPermissionIcon(permission: RivViews.ViewPermission): IconComponent.Name {\n switch (permission) {\n case 'private':\n return 'Lock';\n case 'shared':\n return 'UserCheck';\n case 'public':\n return 'Users';\n }\n }\n\n getPermissionDescription(permission: RivViews.ViewPermission): string {\n return RivViews.getPermissionDescription(permission);\n }\n}\n","<div\n (rivClientSize)=\"\n manager?.actions?.next({ type: 'setContainerWidth', width: $event.width })\n \"\n class=\"container\"\n>\n <ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container\n *ngFor=\"let view of s.displayedViews; let i = index; trackBy: trackById\"\n >\n <ng-container *ngIf=\"view.active; else inactiveTab\">\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'tab'\"\n class=\"active-menu\"\n >\n <ng-template #menuTrigger>\n <div\n class=\"tab active\"\n [class.dragging]=\"draggedTabIndex === i\"\n [class.dragged-over-left]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex > i\n \"\n [class.dragged-over-right]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex < i\n \"\n [attr.draggable]=\"!view.system\"\n [attr.droppable]=\"!view.system\"\n (dragstart)=\"dragStart(i, view.title, view.system)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i, view.system)\"\n (drop)=\"drop(i, false)\"\n >\n <riv-icon\n class=\"tab-reorder\"\n [class.hidden-class]=\"view.system\"\n [name]=\"'Reorder'\"\n [size]=\"16\"\n ></riv-icon>\n <div rivTruncate>\n {{ view.title }}\n </div>\n <riv-icon\n class=\"permission-icon\"\n [name]=\"getPermissionIcon(view.permission)\"\n [size]=\"12\"\n [rivTooltip]=\"getPermissionDescription(view.permission)\"\n ></riv-icon>\n </div>\n </ng-template>\n </riv-view-menu>\n </ng-container>\n <ng-template #inactiveTab>\n <button\n type=\"button\"\n class=\"tab\"\n [class.dragging]=\"draggedTabIndex === i\"\n [class.dragged-over-left]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex > i\n \"\n [class.dragged-over-right]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex < i\n \"\n [attr.draggable]=\"!view.system\"\n [attr.droppable]=\"!view.system\"\n (dragstart)=\"dragStart(i, view.title, view.system)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i, view.system)\"\n (drop)=\"drop(i, false)\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id,\n source: 'tab'\n })\n \"\n >\n <riv-icon\n class=\"tab-reorder\"\n [class.hidden-class]=\"view.system\"\n [name]=\"'Reorder'\"\n [size]=\"16\"\n ></riv-icon>\n <span rivTruncate>\n {{ view.title }}\n </span>\n </button>\n </ng-template>\n </ng-container>\n <button\n type=\"button\"\n *ngIf=\"s.allEnabledViews.length - s.displayedViews.length; let count\"\n class=\"tab overflow\"\n rivTruncate\n #overflowTrigger\n (click)=\"\n manager?.actions?.next({ type: 'setOverflowPickerOpen', open: true })\n \"\n >\n {{ count | rivNumber }} more\n </button>\n <ng-container *ngIf=\"s.overflow.pickerOpen\">\n <riv-callout\n *riv-overlay\n [anchor]=\"overflowTrigger?.nativeElement\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-left'\"\n (close)=\"\n manager?.actions?.next({ type: 'setOverflowPickerOpen', open: false })\n \"\n >\n <div class=\"overflow-callout\">\n <riv-search\n [value]=\"s.overflow.search\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'setOverflowSearchQuery',\n query: $event\n })\n \"\n ></riv-search>\n <div class=\"overflow-view-list\">\n <button\n type=\"button\"\n *ngFor=\"let view of s.enabledViews; let i = index\"\n class=\"overflow-view\"\n [class.system]=\"view.system\"\n [class.dragging]=\"draggedTabIndex === i\"\n [class.dragged-over-top]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverTabIndex === i &&\n draggedTabIndex !== null &&\n draggedTabIndex < i\n \"\n [attr.draggable]=\"!view.system\"\n [attr.droppable]=\"!view.system\"\n (dragstart)=\"dragStart(i, view.title, view.system)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i, view.system)\"\n (drop)=\"drop(i, true)\"\n (click)=\"\n manager?.actions?.next({\n type: 'setActiveView',\n id: view.id,\n source: 'overflow'\n });\n manager?.actions?.next({\n type: 'setOverflowPickerOpen',\n open: false\n })\n \"\n >\n <riv-icon\n *ngIf=\"!view.system\"\n class=\"overflow-reorder\"\n [name]=\"'Reorder'\"\n [size]=\"16\"\n ></riv-icon>\n <div class=\"overflow-title\" rivTruncate>\n <riv-highlight\n [indices]=\"view.titleHighlightIndices ?? []\"\n [text]=\"view.title\"\n ></riv-highlight>\n </div>\n <riv-view-menu\n [manager]=\"manager\"\n [view]=\"view\"\n [menuContext]=\"'overflow'\"\n ></riv-view-menu>\n </button>\n <riv-zero-state\n *ngIf=\"!s.enabledViews.length\"\n [message]=\"'No matching views.'\"\n ></riv-zero-state>\n </div>\n </div>\n </riv-callout>\n </ng-container>\n <div class=\"all-views-button-container\">\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'medium'\"\n (click)=\"showAllViews = true\"\n >\n All views\n </button>\n </div>\n </ng-container>\n</div>\n\n<riv-all-views-modal\n *ngIf=\"showAllViews\"\n [manager]=\"manager\"\n [topOffset]=\"sideSheetTopOffset\"\n (close)=\"showAllViews = false\"\n></riv-all-views-modal>\n\n<riv-toast *ngIf=\"showLinkCopiedToast | async\" (close)=\"toastClosed.next()\">\n Link to view copied to clipboard\n</riv-toast>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\n\n@Component({\n selector: '[riv-banner-action]',\n templateUrl: './banner-action.component.html',\n styleUrls: ['./banner-action.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BannerActionComponent implements OnChanges {\n constructor(\n private readonly el: ElementRef,\n private readonly renderer: Renderer2,\n ) {}\n\n @Input()\n locked?: boolean;\n\n @Input()\n disabled?: boolean;\n\n @HostBinding('class.disabled')\n get isDisabled() {\n return this.disabled || this.locked;\n }\n\n private disableNativeElement: boolean = false;\n private lockNativeElement: boolean = false;\n\n ngOnChanges(changes: SimpleChanges) {\n const accessChange: boolean = !!changes['disabled'] || !!changes['locked'];\n if (accessChange) {\n if (changes['disabled']) {\n this.disableNativeElement = changes['disabled'].currentValue;\n }\n if (changes['locked']) {\n this.lockNativeElement = changes['locked'].currentValue;\n }\n if ('disabled' in this.el.nativeElement) {\n if (this.disableNativeElement || this.lockNativeElement) {\n this.renderer.setAttribute(this.el.nativeElement, 'disabled', 'true');\n } else {\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\n }\n }\n }\n }\n}\n","<ng-content></ng-content>\n<riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n} from '@angular/core';\nimport { IconComponent } from '../../icon/icon.component';\n\n@Component({\n selector: 'riv-banner',\n templateUrl: './banner.component.html',\n styleUrls: ['./banner.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BannerComponent {\n @Input()\n @HostBinding('class')\n variant: BannerComponent.Variant = 'info';\n\n @Input()\n icon: boolean | IconComponent.Name = true;\n\n @Input()\n iconTooltip?: string;\n\n /**\n * Optional bold heading rendered above the projected body content.\n * Intended for banners that need a short title paired with supporting\n * text — a banner with a heading should always include body content.\n * Empty or whitespace-only values are treated as no heading.\n */\n @Input()\n heading?: string;\n\n @Input()\n dismissable: boolean = false;\n\n @HostBinding('class.has-heading')\n get hasHeading(): boolean {\n return !!this.heading?.trim();\n }\n\n getResolvedIcon(): IconComponent.Name | null {\n if (this.icon === false) return null;\n if (this.icon === true) {\n switch (this.variant) {\n case 'info':\n return 'Info';\n case 'warning':\n return 'AlertTriangle';\n case 'danger':\n return 'XCircle';\n case 'safety':\n return 'CheckCircle';\n }\n }\n return this.icon;\n }\n\n @Output()\n dismiss = new EventEmitter<void>();\n}\n\nexport namespace BannerComponent {\n export const Variants = ['warning', 'safety', 'danger', 'info'] as const;\n export type Variant = (typeof Variants)[number];\n}\n","<riv-icon\n *ngIf=\"getResolvedIcon(); let icon\"\n [name]=\"icon\"\n [rivTooltip]=\"iconTooltip\"\n [size]=\"20\"\n class=\"icon\"\n></riv-icon>\n<div *ngIf=\"hasHeading\" class=\"heading\">{{ heading }}</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>\n<button\n type=\"button\"\n *ngIf=\"dismissable\"\n class=\"dismiss\"\n (click)=\"dismiss.emit()\"\n>\n <riv-icon [name]=\"'X'\" [size]=\"20\"></riv-icon>\n</button>\n","const SingleSmall = `<svg aria-label=\"single small map-indicator\" width=\"12\" height=\"16\" viewBox=\"0 0 12 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25))\"><path d=\"M11.9949 6.4C11.8159 10.8779 5.99968 16 5.99968 16C5.99968 16 0.174787 10.968 0.00444185 6.4C-0.12727 2.86798 2.6886 0 5.99968 0C9.31074 0 12.1361 2.86837 11.9949 6.4Z\" fill=\"white\"/></svg>`;\nconst SingleRegular = `<svg aria-label=\"single regular map-indicator\" width=\"18\" height=\"22\" viewBox=\"0 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25))\"><path d=\"M18 8.8C18 14.08 9 22 9 22C9 22 0 14.08 0 8.8C0 3.93989 4.02943 0 9 0C13.9705 0 18 3.93989 18 8.8Z\" fill=\"white\"/></svg>`;\nconst DoubleSmall = `<svg aria-label=\"double small map-indicator\" width=\"24\" height=\"21\" viewBox=\"0 0 24 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25))\"><path d=\"M12 0C18.6274 0 24 4.02944 24 9C24 13.1748 20.2096 16.684 15.0693 17.7012C13.5555 19.6238 12.019 20.9833 12 21C12 21 10.4269 19.6403 8.8916 17.6934C3.77118 16.6662 0 13.1642 0 9C0 4.02944 5.37258 0 12 0Z\" fill=\"white\"/></svg>`;\nconst DoubleRegular = `<svg aria-label=\"double regular map-indicator\" width=\"32\" height=\"28\" viewBox=\"0 0 32 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.25))\"><path d=\"M16 0C24.8366 0 32 5.37258 32 12C32 17.4948 27.0749 22.1231 20.3555 23.5459C18.1542 26.1019 16 28 16 28C15.9994 27.9994 13.8447 26.1018 11.6436 23.5459C4.92463 22.1229 0 17.4946 0 12C0 5.37258 7.16344 0 16 0Z\" fill=\"white\"/></svg>`;\n\nexport const mapIndicators = {\n SingleSmall,\n SingleRegular,\n DoubleSmall,\n DoubleRegular,\n};\n\nexport const mapIndicatorMap: { [key: string]: string } = {};\nfor (const key in mapIndicators) {\n mapIndicatorMap[key] = mapIndicators[<keyof typeof mapIndicators>key];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n} from '@angular/core';\nimport { CacheResult, DomCache } from '../../icon/dom-cache';\nimport { IconComponent } from '../../icon/icon.component';\nimport { mapIndicatorMap, mapIndicators } from './map-indicators';\n\nconst cache = new DomCache<MapIndicatorComponent.Name, ChildNode>(value => {\n const svgText = mapIndicatorMap[value];\n const parser = new DOMParser();\n const svg = parser.parseFromString(svgText, 'text/xml');\n return svg.documentElement;\n});\n\n@Component({\n selector: 'riv-map-indicator',\n templateUrl: './map-indicator.component.html',\n styleUrls: ['./map-indicator.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MapIndicatorComponent implements OnDestroy {\n private cached: CacheResult<ChildNode> | undefined;\n\n constructor(private readonly element: ElementRef<HTMLElement>) {}\n\n @Input()\n set name(value: MapIndicatorComponent.Name | null) {\n this.nameValue = value;\n this.clearCached();\n\n if (value == null) {\n return;\n }\n\n this.cached = cache.get(value);\n // We PRE-pend the map indicator to make sure that it will be under the icon(s)\n this.element.nativeElement.prepend(this.cached.value);\n }\n nameValue: MapIndicatorComponent.Name | null = null;\n\n @Input()\n icons: MapIndicatorComponent.MapIconInfo[] = [];\n\n ngOnDestroy() {\n this.name = null;\n }\n\n clearCached() {\n if (this.cached) {\n this.cached.value.remove();\n this.cached.cleanup();\n this.cached = undefined;\n }\n }\n}\n\nexport namespace MapIndicatorComponent {\n export type Name = keyof typeof mapIndicators;\n\n export type MapIconInfo = {\n iconName: IconComponent.Name;\n color?: string;\n rotation?: string;\n };\n}\n","<ng-container\n *ngIf=\"nameValue === 'SingleSmall' || nameValue === 'SingleRegular'\"\n>\n <riv-icon\n *ngIf=\"icons.length >= 1\"\n class=\"single-icon\"\n [style.color]=\"icons[0].color\"\n [style.rotate]=\"icons[0].rotation\"\n [fillColor]=\"icons[0].color ? 'currentColor' : undefined\"\n [name]=\"icons[0].iconName\"\n [customSize]=\"nameValue === 'SingleSmall' ? 10 : 14\"\n ></riv-icon>\n</ng-container>\n\n<ng-container\n *ngIf=\"nameValue === 'DoubleSmall' || nameValue === 'DoubleRegular'\"\n>\n <riv-icon\n *ngIf=\"icons.length >= 1\"\n class=\"double-icon-left\"\n [style.color]=\"icons[0].color\"\n [style.rotate]=\"icons[0].rotation\"\n [name]=\"icons[0].iconName\"\n [customSize]=\"nameValue === 'DoubleSmall' ? 10 : 14\"\n [fillColor]=\"icons[0].color ? 'currentColor' : undefined\"\n ></riv-icon>\n\n <riv-icon\n *ngIf=\"icons.length >= 2\"\n class=\"double-icon-right\"\n [style.color]=\"icons[1].color\"\n [style.rotate]=\"icons[1].rotation\"\n [name]=\"icons[1].iconName\"\n [customSize]=\"nameValue === 'DoubleSmall' ? 10 : 14\"\n [fillColor]=\"icons[1].color ? 'currentColor' : undefined\"\n ></riv-icon>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-notification-badge',\n template: '{{ count === null ? null : (count | rivNumber) }}',\n styleUrls: ['./notification-badge.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationBadgeComponent {\n @Input()\n count: number | null = null;\n\n @Input()\n @HostBinding('class')\n variant: NotificationBadgeComponent.Variant = 'basic';\n}\n\nexport namespace NotificationBadgeComponent {\n export const Variants = ['basic', 'brand'] as const;\n export type Variant = (typeof Variants)[number];\n}\n","import { Directive, Input, OnChanges, TemplateRef } from '@angular/core';\nimport { TooltipDirective } from './tooltip.directive';\n\n/**\n * A convenience wrapper around rivTooltip that allows for conditionally\n * adding a tooltip when the `locked` input is true.\n */\n@Directive({\n selector: '[rivLockedTooltip]',\n})\nexport class LockedTooltipDirective\n extends TooltipDirective\n implements OnChanges\n{\n @Input()\n rivLockedTooltip?: string | TemplateRef<void>;\n\n @Input()\n locked?: boolean;\n\n ngOnChanges() {\n if (this.locked) {\n this.rivTooltip = this.rivLockedTooltip;\n } else {\n this.rivTooltip = undefined;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { uniqueId } from 'lodash';\nimport { Subscription, filter, map, take } from 'rxjs';\nimport { ANIMATION_CONSTANTS } from '../../overlay-outlet.component';\nimport { DialogStackService } from '../dialog-stack.service';\n\n/**\n * A dialog whose body and footer live inside a native `<form>`, so pressing\n * Enter in a field or clicking Submit both submit the form. The form is part of\n * this template (rather than wrapped around the dialog by the consumer) because\n * riv-modal teleports the dialog into riv-overlay-outlet, which would otherwise\n * move the fields and buttons out of the consumer's form.\n *\n * While `submitting` is true every close path (Escape, the X button, Cancel and\n * the scrim) is ignored, so the dialog stays open to show the request's outcome\n * and the user doesn't lose their input.\n *\n * `loading` only covers the body against pointer input and disables Submit; it\n * doesn't disable the fields, so they can still be reached and edited with the\n * keyboard. Disable the fields yourself if that matters.\n *\n * Buttons projected into the body or `footer-start` must set `type=\"button\"`.\n * A `<button>` without a type defaults to `type=\"submit\"`, so it would submit\n * the form when clicked, and if it comes before Submit in the DOM it becomes\n * the form's default button, so pressing Enter in a field clicks it instead of\n * Submit.\n *\n * When it opens, focus moves to the first enabled field in the body (or to the\n * dialog itself if the body has none), unless something inside the dialog\n * already took focus.\n */\n@Component({\n selector: 'riv-form-dialog',\n templateUrl: './form-dialog.component.html',\n styleUrls: ['../dialog/dialog.component.css', './form-dialog.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormDialogComponent implements AfterViewInit, OnDestroy {\n @Input()\n title?: string;\n\n @Input()\n minWidth?: string;\n\n @Input()\n customBody = false;\n\n @Input()\n submitText = 'Submit';\n\n @Input()\n submittingText = 'Submitting...';\n\n @Input()\n cancelText = 'Cancel';\n\n @Input()\n canSubmit = true;\n\n @Input()\n submitting = false;\n\n @Input()\n loading = false;\n\n @Input()\n submitTooltip?: string;\n\n @Input()\n closeText = 'Close';\n\n @Input()\n readonly = false;\n\n @Output()\n readonly formSubmit = new EventEmitter<void>();\n\n @Output()\n readonly close = new EventEmitter<void>();\n\n @ViewChild('dialog', { static: true })\n private readonly dialog?: ElementRef<HTMLElement>;\n\n readonly titleId: string = uniqueId('riv-form-dialog-title-');\n\n private readonly stackKey: symbol;\n\n private initialFocus?: Subscription;\n\n constructor(\n private readonly dialogStack: DialogStackService,\n private readonly zone: NgZone,\n ) {\n this.stackKey = dialogStack.register();\n }\n\n ngAfterViewInit() {\n // riv-modal moves the dialog into riv-overlay-outlet on a later change\n // detection pass, so wait until it's in the document before focusing.\n // onStable emits outside the Angular zone, so focus back inside it to let\n // the field's focus handlers trigger change detection.\n this.initialFocus = this.zone.onStable\n .pipe(\n map(() => this.dialog?.nativeElement),\n filter((dialog): dialog is HTMLElement => dialog?.isConnected ?? false),\n take(1),\n )\n .subscribe(dialog =>\n this.zone.run(() => FormDialogComponent.focusInitial(dialog)),\n );\n }\n\n ngOnDestroy() {\n this.initialFocus?.unsubscribe();\n this.dialogStack.unregister(this.stackKey);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeydown(event: KeyboardEvent) {\n if (this.dialogStack.isTopmostEscape(this.stackKey, event)) {\n event.preventDefault();\n this.requestClose();\n }\n }\n\n requestClose() {\n if (!this.submitting) {\n this.close.emit();\n }\n }\n\n get submitDisabled(): boolean {\n return !this.canSubmit || this.submitting || this.loading;\n }\n\n handleSubmit(event: Event) {\n event.preventDefault();\n if (!this.submitDisabled && !this.readonly) {\n this.formSubmit.emit();\n }\n }\n\n readonly hook = ANIMATION_CONSTANTS.DIALOG.HOOK;\n}\n\nexport namespace FormDialogComponent {\n const initialFocusSelector = [\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[contenteditable=\"true\"]',\n ]\n .map(field => `.body ${field}`)\n .join(', ');\n\n export function focusInitial(dialog: HTMLElement): void {\n if (!dialog.contains(document.activeElement)) {\n (\n dialog.querySelector<HTMLElement>(initialFocusSelector) ?? dialog\n ).focus();\n }\n }\n}\n","<riv-modal (close)=\"requestClose()\" [obscure]=\"true\">\n <div [attr.data-animation-hook]=\"hook\" class=\"wrapper\">\n <div\n #dialog\n class=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n [attr.aria-labelledby]=\"title ? titleId : null\"\n [style.min-width]=\"minWidth\"\n >\n <header>\n <span class=\"title\" [id]=\"titleId\">\n {{ title }}\n </span>\n <button\n rivButton\n type=\"button\"\n [variant]=\"'ghost'\"\n [icon]=\"'X'\"\n [attr.aria-label]=\"closeText\"\n [disabled]=\"submitting\"\n (click)=\"requestClose()\"\n ></button>\n </header>\n <form novalidate (submit)=\"handleSubmit($event)\">\n <riv-loading-cover [loading]=\"loading\">\n <div class=\"body\" [class.custom]=\"customBody\">\n <ng-content></ng-content>\n </div>\n </riv-loading-cover>\n <div class=\"footer riv-dialog-footer\">\n <footer>\n <div class=\"footer-start\">\n <ng-content select=\"[footer-start]\"></ng-content>\n </div>\n <button\n rivButton\n type=\"button\"\n [variant]=\"'ghost'\"\n [disabled]=\"submitting\"\n (click)=\"requestClose()\"\n >\n {{ readonly ? closeText : cancelText }}\n </button>\n <span\n *ngIf=\"!readonly\"\n class=\"submit-tooltip\"\n [rivTooltip]=\"submitTooltip\"\n >\n <button\n rivButton\n type=\"submit\"\n [variant]=\"'primary'\"\n [disabled]=\"submitDisabled\"\n >\n {{ submitting ? submittingText : submitText }}\n </button>\n </span>\n </footer>\n </div>\n </form>\n </div>\n </div>\n</riv-modal>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: '[riv-toast-action]',\n templateUrl: './toast-action.component.html',\n styleUrls: ['./toast-action.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToastActionComponent {}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n} from '@angular/core';\nimport { RivTable } from '../table/state';\n\n@Component({\n selector: '[riv-simple-table-cell]',\n templateUrl: './simple-table-cell.component.html',\n styleUrls: ['./simple-table-cell.component.css', './alignment.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTableCellComponent {\n /**\n * These get set automatically by the parent SimpleTableComponent.\n */\n public alignment?: RivTable.ColumnAlignment;\n public pinned?: boolean;\n public isLastRow?: boolean;\n public leftPinOffset?: number;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public elementRef: ElementRef<HTMLTableCellElement>,\n ) {}\n\n @HostBinding('class')\n get classes() {\n return [\n this.alignment,\n this.pinned && 'pinned',\n this.isLastRow && 'last-row',\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n @HostBinding('style.left.px')\n get leftPx() {\n if (this.pinned && this.leftPinOffset != undefined) {\n return this.leftPinOffset;\n }\n return null;\n }\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n} from '@angular/core';\nimport { RivTable } from '../table/state';\n\n@Component({\n selector: '[riv-simple-table-header-cell]',\n templateUrl: './simple-table-header-cell.component.html',\n styleUrls: ['./simple-table-header-cell.component.css', './alignment.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTableHeaderCellComponent {\n @Input() dataType?: RivTable.ColumnDataType;\n\n @Input() pinned?: boolean;\n\n /**\n * This gets set automatically by the parent SimpleTableComponent.\n */\n public alignment?: RivTable.ColumnAlignment;\n public leftPinOffset?: number;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public elementRef: ElementRef<HTMLTableCellElement>,\n ) {}\n\n @HostBinding('class')\n get classes() {\n return [this.alignment, this.pinned && 'pinned'].filter(Boolean).join(' ');\n }\n\n @HostBinding('style.left.px')\n get leftPx() {\n if (this.pinned && this.leftPinOffset != undefined) {\n return this.leftPinOffset;\n }\n return null;\n }\n\n get width() {\n return this.elementRef.nativeElement.offsetWidth;\n }\n}\n","<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: '[riv-simple-table-row]',\n templateUrl: './simple-table-row.component.html',\n styleUrls: ['./simple-table-row.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTableRowComponent {\n @Input()\n @HostBinding('class.selected')\n selected: boolean = false;\n}\n","<ng-content></ng-content>\n","import { RivTable } from '../state';\n\nexport namespace TableCollapseHelpers {\n export function toggleRowCollapse<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n id: R['id'],\n ): RivTable.CoreState<R, C, F, G> {\n const currentSet: Set<R['id']> =\n state.collapseState.defaultTo === 'collapsed'\n ? state.collapseState.expandedRows\n : state.collapseState.collapsedRows;\n\n const newSet = new Set(currentSet);\n const alreadyInSet: boolean = newSet.has(id);\n\n if (alreadyInSet) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n\n if (state.collapseState.defaultTo === 'collapsed') {\n return {\n ...state,\n collapseState: {\n ...state.collapseState,\n expandedRows: newSet,\n },\n };\n } else {\n return {\n ...state,\n collapseState: {\n ...state.collapseState,\n collapsedRows: newSet,\n },\n };\n }\n }\n\n export function toggleHeaderCollapse<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n id: string,\n ): RivTable.CoreState<R, C, F, G> {\n const currentSet: Set<string> =\n state.collapseState.defaultTo === 'collapsed'\n ? state.collapseState.expandedHeaders\n : state.collapseState.collapsedHeaders;\n\n const newSet = new Set(currentSet);\n const alreadyInSet: boolean = newSet.has(id);\n\n if (alreadyInSet) {\n newSet.delete(id);\n } else {\n newSet.add(id);\n }\n\n if (state.collapseState.defaultTo === 'collapsed') {\n return {\n ...state,\n collapseState: {\n ...state.collapseState,\n expandedHeaders: newSet,\n },\n };\n } else {\n return {\n ...state,\n collapseState: {\n ...state.collapseState,\n collapsedHeaders: newSet,\n },\n };\n }\n }\n\n export function toggleAllCollapsed<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.CoreState<R, C, F, G> {\n if (isAllExpanded(state.collapseState)) {\n return {\n ...state,\n collapseState: {\n defaultTo: 'collapsed',\n expandedRows: new Set(),\n expandedHeaders: new Set(),\n },\n };\n } else {\n return {\n ...state,\n collapseState: {\n defaultTo: 'expanded',\n collapsedRows: new Set(),\n collapsedHeaders: new Set(),\n },\n };\n }\n }\n\n export function isAllExpanded<R extends RivTable.Row>(\n collapseState: RivTable.CollapseState<R>,\n ): boolean {\n return (\n collapseState.defaultTo === 'expanded' &&\n collapseState.collapsedHeaders.size === 0 &&\n collapseState.collapsedRows.size === 0\n );\n }\n\n export function isRowCollapsed<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>, id: R['id']): boolean {\n if (state.collapseState.defaultTo === 'collapsed') {\n const isExpanded: boolean = state.collapseState.expandedRows.has(id);\n return !isExpanded;\n }\n return state.collapseState.collapsedRows.has(id);\n }\n\n export function isHeaderCollapsed<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>, id: string | null): boolean {\n if (!id) {\n return false;\n }\n if (state.collapseState.defaultTo === 'collapsed') {\n const isExpanded: boolean = state.collapseState.expandedHeaders.has(id);\n return !isExpanded;\n }\n return state.collapseState.collapsedHeaders.has(id);\n }\n}\n","import { difference, partition as lodashPartition } from 'lodash';\nimport { HighlightComponent } from '../../../visualization/highlight/highlight.component';\nimport { RivTable } from '../state';\n\nexport namespace TableColumnHelpers {\n export function getColumnAlignment(\n dataType: RivTable.ColumnDataType,\n isFirst: boolean,\n ): RivTable.ColumnAlignment {\n if (isFirst) return 'left';\n switch (dataType) {\n case 'date':\n case 'longText':\n return 'left';\n case 'advanced':\n case 'icon':\n case 'shortText':\n return 'center';\n case 'currency':\n case 'number':\n return 'right';\n }\n }\n\n export function getAllColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n supportedColumns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n ): RivTable.ColumnSettings<C>[] {\n // If the table offers more columns than the user has configuration settings\n // for (or if the user has no configuration settings yet), we'll append them\n // to the end (unless they should be pinned by default, in which case we'll\n // append them after the other pinned columns). This ensures that new columns\n // we add to existing tables over time (1) get displayed even though they\n // don't appear in the user's configuration settings yet, and (2) don't\n // interrupt their existing setup.\n const columnNamesWithoutUserSettings = difference(\n [...supportedColumns.keys()],\n state.display.columnSettings.map(({ key }) => key),\n );\n\n // Throw out settings for columns no longer offered by the table.\n const onlyColumnsWithUserSettings: RivTable.ColumnSettings<C>[] =\n state.display.columnSettings.filter(({ key }) =>\n supportedColumns.has(key),\n );\n const columnsWithUserSettings: RivTable.ColumnSettings<C>[] =\n onlyColumnsWithUserSettings.map(columnSetting => {\n return {\n ...columnSetting,\n /*\n Overwrite the enabled/pinned state if the column should be \"always pinned\".\n Otherwise, respect the saved user settings.\n */\n enabled: !!supportedColumns.get(columnSetting.key)?.alwaysPinned\n ? true\n : columnSetting.enabled,\n pinned: !!supportedColumns.get(columnSetting.key)?.alwaysPinned\n ? true\n : columnSetting.pinned,\n };\n });\n\n const columnsWithoutUserSettings: RivTable.ColumnSettings<C>[] = [\n ...columnNamesWithoutUserSettings,\n ].map((key: C) => ({\n key,\n enabled: true,\n preferredWidth: 'auto',\n pinned:\n !!supportedColumns.get(key)?.defaultPinned ||\n !!supportedColumns.get(key)?.alwaysPinned,\n }));\n\n return orderIntentionally(\n [...columnsWithUserSettings, ...columnsWithoutUserSettings],\n columnNameMap,\n supportedColumns,\n );\n }\n\n function orderIntentionally<C extends RivTable.Column>(\n columns: RivTable.ColumnSettings<C>[],\n columnNameMap: RivTable.ColumnNameMap<C>,\n columnMetadataMap: Map<C, RivTable.ColumnMetadata>,\n ): RivTable.ColumnSettings<C>[] {\n const [alwaysPinnedColumns, sometimesPinnedColumns] = lodashPartition(\n columns,\n column => {\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columnMetadataMap.get(column.key);\n\n return currentColumnMetadata?.alwaysPinned ?? false;\n },\n );\n\n const [pinnedColumns, unpinnedColumns] = lodashPartition(\n sometimesPinnedColumns,\n column => column.pinned,\n );\n\n const [enabledUnpinnedColumns, disabledColumns] = lodashPartition(\n unpinnedColumns,\n column => column.enabled,\n );\n\n const sortedDisabledColumns = disabledColumns.sort((a, b) => {\n const aName = columnNameMap.get(a.key) ?? a.key;\n const bName = columnNameMap.get(b.key) ?? b.key;\n return aName.localeCompare(bName);\n });\n\n return [\n ...alwaysPinnedColumns,\n ...pinnedColumns,\n ...enabledUnpinnedColumns,\n ...sortedDisabledColumns,\n ];\n }\n\n function getAlignment(\n metadata: RivTable.ColumnMetadata,\n index: number,\n allowSelection?: boolean,\n ): RivTable.ColumnAlignment {\n return getColumnAlignment(\n metadata.dataType,\n index === 0 && !allowSelection,\n );\n }\n\n export function resolveColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n supportedColumns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n allowSelection: boolean | undefined,\n filterTo: 'enabled' | 'disabled',\n hasHeaders: boolean,\n ): RivTable.FullColumn<C>[] {\n const allColumns = getAllColumns(state, supportedColumns, columnNameMap);\n return allColumns\n .filter(({ enabled }) => (filterTo === 'enabled' ? enabled : !enabled))\n .reduce(\n (\n fullColumns: RivTable.FullColumn<C>[],\n settings: RivTable.ColumnSettings<C>,\n i: number,\n ): RivTable.FullColumn<C>[] => {\n const metadata = supportedColumns.get(settings.key)!;\n const resolvedWidth =\n settings.preferredWidth === 'auto'\n ? metadata.minWidth\n : Math.max(metadata.minWidth, settings.preferredWidth);\n const previousColumn: RivTable.FullColumn<C> | undefined =\n fullColumns[i - 1];\n return [\n ...fullColumns,\n {\n ...settings,\n ...metadata,\n width: resolvedWidth,\n left: settings.pinned\n ? previousColumn\n ? (previousColumn.left || 0) + previousColumn.width\n : !!allowSelection || !!hasHeaders\n ? 40 // This makes sure the pinned column accounts for the checkbox/chevron column on the far left\n : 0\n : null,\n alignment: getAlignment(metadata, i, !!allowSelection),\n },\n ];\n },\n [],\n );\n }\n\n export function changeColumnPin<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n column: C,\n pinned: boolean,\n ): RivTable.CoreState<R, C, F, G> {\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columns.get(column);\n\n // You cannot change the pinned status of an always pinned column\n if (!!currentColumnMetadata?.alwaysPinned) {\n return state;\n }\n\n const allColumns = getAllColumns(state, columns, columnNameMap);\n\n if (pinned) {\n const target = allColumns.find(c => c.key === column);\n const wasEnabled = !!target?.enabled;\n if (!wasEnabled) {\n const enabledCount = allColumns.filter(col => col.enabled).length;\n if (enabledCount >= RivTable.ColumnsMaxShown) {\n return state; // refuse the pin since it would exceed the max\n }\n }\n }\n\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: orderIntentionally(\n allColumns.map(c => ({\n ...c,\n pinned: c.key === column ? pinned : c.pinned,\n // Check/enable if being pinned\n enabled: c.key === column && pinned ? true : c.enabled,\n })),\n columnNameMap,\n columns,\n ),\n },\n };\n }\n\n export function changeColumnsFreezeState<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n index: number,\n freeze: boolean,\n ): RivTable.CoreState<R, C, F, G> {\n const allColumns = getAllColumns(state, columns, columnNameMap);\n\n const updatedColumnSettings: RivTable.ColumnSettings<C>[] = allColumns.map(\n (currentColumnSettings, currentIndex) => {\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columns.get(currentColumnSettings.key);\n\n const isColumnAlwaysPinned: boolean =\n currentColumnMetadata?.alwaysPinned ?? false;\n\n if (isColumnAlwaysPinned) {\n return {\n ...currentColumnSettings,\n pinned: true,\n enabled: true,\n };\n }\n\n return {\n ...currentColumnSettings,\n pinned: freeze && currentIndex <= index,\n };\n },\n );\n\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: updatedColumnSettings,\n },\n };\n }\n\n export function moveColumnTo<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n column: C,\n position: 'start' | 'end',\n ): RivTable.CoreState<R, C, F, G> {\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columns.get(column);\n\n // You cannot move an always pinned column\n if (!!currentColumnMetadata?.alwaysPinned) {\n return state;\n }\n\n const allColumns = getAllColumns(state, columns, columnNameMap);\n const previousIndex = allColumns.findIndex(c => c.key === column);\n const lastIndex =\n position == 'end' ? allColumns.findIndex(c => !c.enabled) : 0;\n const newIndex =\n position == 'start'\n ? 0\n : lastIndex == -1\n ? allColumns.length - 1\n : lastIndex;\n\n if (\n !allColumns[previousIndex].enabled &&\n allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown\n )\n return state;\n\n const movedState = changeColumnOrder(\n state,\n columns,\n columnNameMap,\n previousIndex,\n newIndex,\n );\n // Make sure the column is enabled\n return changeColumnEnabled(\n movedState,\n columns,\n columnNameMap,\n column,\n true,\n );\n }\n\n export function changeColumnOrder<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n previousIndex: number,\n newIndex: number,\n ): RivTable.CoreState<R, C, F, G> {\n const allColumns = getAllColumns(state, columns, columnNameMap);\n\n const itemToMove = allColumns[previousIndex];\n\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columns.get(itemToMove.key);\n // You cannot move an always pinned column\n if (!!currentColumnMetadata?.alwaysPinned) {\n return state;\n }\n\n // First, put the columns in the desired order.\n const withoutItem = allColumns.filter((_, i) => i !== previousIndex);\n const reordered = [\n ...withoutItem.slice(0, newIndex),\n itemToMove,\n ...withoutItem.slice(newIndex),\n ];\n\n // Then, we may need to fix the pins (all pinned columns appear at the\n // beginning of the columns array) since the user is allowed to drag\n // and drop columns to and from the pinned area. If the user drags a\n // column across that threshold, update its pinned status.\n const updated = reordered.map((settings, i, arr) => {\n if (newIndex === i) {\n return {\n ...settings,\n pinned: settings.pinned\n ? arr[i - 1]?.pinned ?? true\n : arr[i + 1]?.pinned ?? false,\n enabled: settings.enabled\n ? arr[i - 1]?.enabled ?? true\n : arr[i + 1]?.enabled ?? false,\n };\n } else return settings;\n });\n\n const wasDisabled = !itemToMove.enabled;\n const becameEnabled = updated[newIndex].enabled;\n if (wasDisabled && becameEnabled) {\n const enabledCount = allColumns.filter(c => c.enabled).length;\n if (enabledCount >= RivTable.ColumnsMaxShown) {\n // Refuse the move; keep state as-is\n return state;\n }\n }\n\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: orderIntentionally(updated, columnNameMap, columns),\n },\n };\n }\n\n function columnSettingAfterEnabledChange<C extends RivTable.Column>(\n currentColumnSettings: RivTable.ColumnSettings<C>,\n columnMetadataMap: Map<C, RivTable.ColumnMetadata>,\n enabled: boolean,\n ): RivTable.ColumnSettings<C> {\n const currentColumnMetadata: RivTable.ColumnMetadata | undefined =\n columnMetadataMap.get(currentColumnSettings.key);\n\n const isColumnAlwaysPinned: boolean =\n currentColumnMetadata?.alwaysPinned ?? false;\n const isColumnAlwaysVisible: boolean =\n currentColumnMetadata?.alwaysVisible ?? false;\n\n if (isColumnAlwaysPinned) {\n return {\n ...currentColumnSettings,\n enabled: true,\n pinned: true,\n };\n }\n if (isColumnAlwaysVisible) {\n return {\n ...currentColumnSettings,\n enabled: true,\n };\n }\n\n return {\n ...currentColumnSettings,\n enabled: enabled,\n // Unpin if being unchecked\n pinned: !enabled ? false : currentColumnSettings.pinned,\n };\n }\n\n export function changeColumnEnabled<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n column: C,\n enabled: boolean,\n ): RivTable.CoreState<R, C, F, G> {\n const allColumns = getAllColumns(state, columns, columnNameMap);\n if (\n enabled &&\n allColumns.filter(col => col.enabled).length >= RivTable.ColumnsMaxShown\n ) {\n return state;\n }\n\n const updatedColumnSettings: RivTable.ColumnSettings<C>[] = allColumns.map(\n currentColumnSettings => {\n if (currentColumnSettings.key !== column) {\n return currentColumnSettings;\n }\n\n return columnSettingAfterEnabledChange(\n currentColumnSettings,\n columns,\n enabled,\n );\n },\n );\n\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: orderIntentionally(\n updatedColumnSettings,\n columnNameMap,\n columns,\n ),\n },\n };\n }\n\n export function enableAllColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n enabled: boolean,\n ): RivTable.CoreState<R, C, F, G> {\n const allColumns = getAllColumns(state, columns, columnNameMap);\n if (enabled && allColumns.length > RivTable.ColumnsMaxShown) {\n return state;\n }\n\n const updatedColumnSettings: RivTable.ColumnSettings<C>[] = allColumns.map(\n currentColumnSettings => {\n return columnSettingAfterEnabledChange(\n currentColumnSettings,\n columns,\n enabled,\n );\n },\n );\n\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: orderIntentionally(\n updatedColumnSettings,\n columnNameMap,\n columns,\n ),\n },\n };\n }\n\n export function changeColumnWidth<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n column: C,\n preferredWidth: RivTable.ColumnSettings<C>['preferredWidth'],\n ): RivTable.CoreState<R, C, F, G> {\n const allColumns = getAllColumns(state, columns, columnNameMap);\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: allColumns.map(c => ({\n ...c,\n preferredWidth: c.key === column ? preferredWidth : c.preferredWidth,\n })),\n },\n };\n }\n\n export function resetToDefaultColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n defaultColumnState: RivTable.ColumnSettings<C>[],\n ): RivTable.CoreState<R, C, F, G> {\n return {\n ...state,\n display: {\n ...state.display,\n columnSettings: orderIntentionally(\n defaultColumnState,\n columnNameMap,\n columns,\n ),\n },\n };\n }\n\n export function convertInMemoryColumnMetadataMap<\n R extends RivTable.Row,\n C extends RivTable.Column,\n >(\n columns: Map<C, RivTable.InMemoryColumnMetadata<R>>,\n ): Map<C, RivTable.ColumnMetadata> {\n return new Map(\n [...columns.entries()].map(([name, { orderKey, ...metadata }]) => [\n name,\n {\n ...metadata,\n orderable: !!orderKey,\n },\n ]),\n );\n }\n\n export type ColumnList<C extends RivTable.Column> =\n (RivTable.ColumnSettings<C> & {\n resolvedName: C | string;\n highlightIndices: HighlightComponent.HighlightIndices[];\n stateIndex: number;\n isLastPinnedColumn: boolean;\n alwaysVisible: boolean;\n tooltipForHideIcon?: string;\n alwaysPinned: boolean;\n tooltipForReorderIcon?: string;\n isUnavailable?: boolean;\n })[];\n\n export function getColumnSettingsColumnList<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.FullState<R, C, F, G>): ColumnList<C> {\n const allColumnMetadata = [\n ...state.display.columns,\n ...state.display.disabledColumns,\n ];\n const columnsLength = state.display.allColumns.length;\n const allColumns: ColumnList<C> = state.display.allColumns.map(\n (column, i) => {\n const nextColumnPinned =\n i + 2 <= columnsLength\n ? state.display.allColumns[i + 1].pinned\n : false;\n\n const currentColumnMetadata: RivTable.FullColumn<C> | undefined =\n allColumnMetadata.find(metadata => metadata.key === column.key);\n\n return {\n ...column,\n resolvedName:\n state.display.columnNameMap.get(column.key) ?? column.key,\n stateIndex: i,\n isLastPinnedColumn: column.pinned && !nextColumnPinned,\n alwaysVisible: currentColumnMetadata?.alwaysVisible ?? false,\n tooltipForHideIcon: currentColumnMetadata?.tooltipForHideIcon,\n alwaysPinned: currentColumnMetadata?.alwaysPinned ?? false,\n tooltipForReorderIcon: currentColumnMetadata?.tooltipForReorderIcon,\n highlightIndices: [],\n };\n },\n );\n\n return allColumns;\n }\n\n export function createUnavailableColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(unvailableColumnKeys: C[]): ColumnList<C> {\n return unvailableColumnKeys.map(columnKey => {\n return {\n key: columnKey,\n resolvedName: columnKey,\n enabled: false,\n pinned: false,\n isLastPinnedColumn: false,\n alwaysVisible: false,\n alwaysPinned: false,\n preferredWidth: 'auto',\n highlightIndices: [],\n stateIndex: -1,\n isUnavailable: true,\n };\n });\n }\n}\n","import { RivTable } from '../state';\n\nexport namespace TableResultHelpers {\n export function isRegularResult<\n R extends RivTable.Row,\n G extends RivTable.Group,\n >(\n result:\n | RivTable.Result<R>\n | RivTable.GroupResult<R, G>\n | RivTable.NestedResult<R>,\n ): result is RivTable.Result<R> {\n if ('currentPageData' in result) {\n return true;\n }\n return false;\n }\n\n export function isGroupResult<\n R extends RivTable.Row,\n G extends RivTable.Group,\n >(\n result:\n | RivTable.Result<R>\n | RivTable.GroupResult<R, G>\n | RivTable.NestedResult<R>,\n ): result is RivTable.GroupResult<R, G> {\n if ('totalGroupCount' in result) {\n return true;\n }\n return false;\n }\n\n export function isNestedResult<\n R extends RivTable.Row,\n G extends RivTable.Group,\n >(\n result:\n | RivTable.Result<R>\n | RivTable.GroupResult<R, G>\n | RivTable.NestedResult<R>,\n ): result is RivTable.NestedResult<R> {\n if ('currentPageNestedHeaders' in result) {\n return true;\n }\n return false;\n }\n\n export function hasHeaderRows<R extends RivTable.Row>(\n result: RivTable.NestedResult<R>,\n ): boolean {\n return result.currentPageNestedHeaders.some(\n header => header.headerText != null,\n );\n }\n\n export function getAllRowsFromResult<\n R extends RivTable.Row,\n G extends RivTable.Group,\n >(\n result:\n | RivTable.Result<R>\n | RivTable.GroupResult<R, G>\n | RivTable.NestedResult<R>,\n ): R[] {\n if (isGroupResult(result)) {\n return result.groupResults.flatMap(groups => groups.currentPageData);\n } else if (isNestedResult(result)) {\n return getAllRowsFromNestedHeaders(result.currentPageNestedHeaders);\n } else {\n return result.currentPageData;\n }\n }\n\n function getAllRowsFromNestedRows<R extends RivTable.Row>(\n nestedRows: RivTable.NestedRow<R>[],\n ): R[] {\n const allRows: R[] = [];\n\n function recursiveGetNestedRows(currentNestedRow: RivTable.NestedRow<R>) {\n allRows.push(currentNestedRow.data);\n\n const subRows: RivTable.NestedRow<R>[] = currentNestedRow.subRows ?? [];\n for (const subRow of subRows) {\n recursiveGetNestedRows(subRow);\n }\n }\n\n for (const nestedRow of nestedRows) {\n recursiveGetNestedRows(nestedRow);\n }\n\n return allRows;\n }\n\n export function getAllRowsFromNestedHeaders<R extends RivTable.Row>(\n nestedHeaders: RivTable.NestedHeaderRow<R>[],\n ): R[] {\n const allRows: R[] = [];\n\n for (const outerNestedHeaderRow of nestedHeaders) {\n const rowsInHeader: R[] = getAllRowsFromNestedRows(\n outerNestedHeaderRow.subRows,\n );\n\n for (const rowInHeader of rowsInHeader) {\n allRows.push(rowInHeader);\n }\n }\n\n return allRows;\n }\n\n export function getCsvFilename<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n pluralEntityName: string,\n options?: RivTable.ManagerOptions<R, C, F, G>,\n ): string {\n return (\n (options?.csvFileBasename?.slice(0, 200) ?? pluralEntityName) + '.csv'\n );\n }\n}\n","import { FuseOptionKey, IFuseOptions } from 'fuse.js';\nimport { RivTable } from '../state';\n\nexport namespace TableSearchHelpers {\n /**\n * The configured fuse options, without the keys for columns search does not\n * cover: the ones marked `searchable: false` and the ones turned off in\n * \"Search in\". Keys that don't belong to a column are left alone.\n */\n export function fuseOptionsForSearchColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n >(\n fuseOptions: IFuseOptions<R> | undefined,\n columns: Map<C, RivTable.InMemoryColumnMetadata<R>>,\n query: RivTable.Query<C, F>,\n ): IFuseOptions<R> | undefined {\n if (!fuseOptions?.keys) return fuseOptions;\n const excludedPaths = new Set(\n Array.from(columns.entries())\n .filter(\n ([key, column]) =>\n column.searchable === false ||\n query.searchColumns.get(key) === false,\n )\n .map(([key, column]) => columnPath(key, column)),\n );\n return {\n ...fuseOptions,\n keys: fuseOptions.keys.filter(\n key => !excludedPaths.has(fuseKeyPath(key)),\n ),\n };\n }\n\n /**\n * Marks the columns with no key in `fuseOptions.keys` as `searchable: false`,\n * so \"Search in\" only offers columns that search can cover.\n */\n export function markColumnsOutsideFuseKeysUnsearchable<\n R extends RivTable.Row,\n C extends RivTable.Column,\n >(\n columns: Map<C, RivTable.InMemoryColumnMetadata<R>>,\n fuseOptions: IFuseOptions<R> | undefined,\n ): Map<C, RivTable.InMemoryColumnMetadata<R>> {\n if (!fuseOptions?.keys) return columns;\n const keyPaths = new Set(fuseOptions.keys.map(fuseKeyPath));\n return new Map(\n Array.from(columns.entries()).map(([key, column]) => [\n key,\n keyPaths.has(columnPath(key, column))\n ? column\n : { ...column, searchable: false },\n ]),\n );\n }\n\n function columnPath<R extends RivTable.Row, C extends RivTable.Column>(\n key: C,\n column: RivTable.InMemoryColumnMetadata<R>,\n ): string {\n return column.orderKey?.toString() ?? key.toString();\n }\n\n function fuseKeyPath<R>(key: FuseOptionKey<R>): string {\n if (typeof key === 'string') return key;\n if (Array.isArray(key)) return key.join('.');\n return Array.isArray(key.name) ? key.name.join('.') : key.name;\n }\n\n export function getSearchColumnsSelectedState<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n expectedValue: 'all' | 'none',\n ): boolean {\n switch (expectedValue) {\n case 'all':\n return Array.from(state.query.searchColumns.values()).every(\n value => value,\n );\n\n case 'none':\n return Array.from(state.query.searchColumns.values()).every(\n value => !value,\n );\n }\n }\n\n export function toggleAllSearchColumns<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.CoreState<R, C, F, G> {\n const noneSelected = getSearchColumnsSelectedState(state, 'none');\n const payload = new Map(\n Array.from(state.query.searchColumns.keys()).map(key => [\n key,\n noneSelected,\n ]),\n );\n return {\n ...state,\n query: {\n ...state.query,\n searchColumns: payload,\n },\n };\n }\n}\n","import { toInteger } from 'lodash';\nimport { RivTable } from '../state';\nimport { TableResultHelpers } from './result-helpers';\nimport { TableSearchHelpers } from './search-helpers';\n\nexport namespace TableDisplayHelpers {\n export function getZeroStateMessage<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>, entity: string): string | null {\n if (\n (TableResultHelpers.isGroupResult(state.result) &&\n state.result.totalGroupCount > 0) ||\n (!TableResultHelpers.isGroupResult(state.result) &&\n state.result.totalMatchingRowCount > 0)\n )\n return null;\n const allSearchColumnsSelected =\n TableSearchHelpers.getSearchColumnsSelectedState(state, 'all');\n if (state.query.search && allSearchColumnsSelected)\n return `No ${entity} match your current search keyword.`;\n if (state.query.search && !allSearchColumnsSelected)\n return `No ${entity} match your current search keyword in the selected search columns.`;\n if (state.query.filters) return `No ${entity} match your current filters.`;\n return `No ${entity}.`;\n }\n\n export function memoizedCellRowSpan<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n s: RivTable.CoreState<R, C, F, G>,\n fullColumns: RivTable.FullColumn<C>[],\n options?: RivTable.ManagerOptions<R, C, F, G>,\n ): Map<C, number[]> | null {\n const getRowSpanForCell = options?.getRowSpanForCell;\n const result = s.result;\n\n // If the dataset exceeds the current page size, skip span calculations.\n if (s.result.totalMatchingRowCount > s.query.pagination.pageSize)\n return null;\n\n // If the user hasn't provided the row span configuration, default to no spanning\n if (!getRowSpanForCell) return null;\n\n // Row spanning is not supported on grouped tables or nested tables.\n if (\n TableResultHelpers.isGroupResult(result) ||\n TableResultHelpers.isNestedResult(result)\n ) {\n return null;\n }\n\n // Memoize the user's configuration for the current page.\n return new Map(\n fullColumns.map(column => [\n column.key,\n result.currentPageData.map((_, i) => {\n const raw = getRowSpanForCell(i, column.key);\n if (raw === 0) return 0;\n else return Math.max(1, toInteger(raw));\n }),\n ]),\n );\n }\n}\n","import { sumBy } from 'lodash';\nimport { RivTable } from '../state';\nimport { TableCollapseHelpers } from './collapse-helpers';\n\nexport namespace TableNestingHelpers {\n export function convertToFullNestedRow<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group = { key: '' },\n >(\n currentRow: RivTable.NestedRow<R>,\n coreState: RivTable.CoreState<R, C, F, G>,\n rowLinkFunction?: (row: R, group?: G) => RivTable.RowLink,\n ): RivTable.FullNestedRow<R> {\n const currentSubRows: RivTable.FullNestedRow<R>[] = currentRow.subRows\n ? currentRow.subRows.map(subrow =>\n convertToFullNestedRow(subrow, coreState, rowLinkFunction),\n )\n : [];\n\n const currentRowLink: RivTable.RowLink | null = rowLinkFunction\n ? rowLinkFunction(currentRow.data)\n : null;\n\n // We don't currently support selecting nested rows\n const currentRowIsSelected: boolean = false;\n\n const currentRowIsCollapsed: boolean = TableCollapseHelpers.isRowCollapsed(\n coreState,\n currentRow.data.id,\n );\n\n return {\n id: currentRow.data.id,\n data: currentRow.data,\n rowLink: currentRowLink,\n selected: currentRowIsSelected,\n subRows: currentSubRows,\n isCollapsed: currentRowIsCollapsed,\n };\n }\n\n export function convertToFullNestedHeaderRow<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group = { key: '' },\n >(\n currentRow: RivTable.NestedHeaderRow<R>,\n coreState: RivTable.CoreState<R, C, F, G>,\n rowLinkFunction?: (row: R, group?: G) => RivTable.RowLink,\n ): RivTable.FullNestedHeaderRow<R> {\n const currentSubRows: RivTable.FullNestedRow<R>[] = currentRow.subRows\n ? currentRow.subRows.map(subrow =>\n convertToFullNestedRow(subrow, coreState, rowLinkFunction),\n )\n : [];\n\n const currentHeaderIsCollapsed: boolean =\n TableCollapseHelpers.isHeaderCollapsed(coreState, currentRow.headerText);\n\n return {\n id: currentRow.headerText ?? '',\n subRows: currentSubRows,\n headerText: currentRow.headerText,\n isCollapsed: currentHeaderIsCollapsed,\n };\n }\n\n export function findNestedRowsWithHeadersToKeep<R extends RivTable.Row>(\n allRows: RivTable.NestedHeaderRow<R>[],\n filteredRows: R[],\n ): RivTable.NestedHeaderRow<R>[] {\n const filteredIds: Set<string | number> = new Set(\n filteredRows.map(row => row.id),\n );\n\n function recursiveFindRowsToKeep(\n currentNestedRow: RivTable.NestedRow<R>,\n ): RivTable.NestedRow<R> | null {\n // Keep all subrows if a parent row matches the filter\n if (filteredIds.has(currentNestedRow.data.id)) {\n return currentNestedRow;\n }\n\n if (!currentNestedRow.subRows) {\n return null;\n }\n\n const subRowsToKeep: RivTable.NestedRow<R>[] = [];\n for (const subRow of currentNestedRow.subRows) {\n const rowToKeep: RivTable.NestedRow<R> | null =\n recursiveFindRowsToKeep(subRow);\n if (rowToKeep) {\n subRowsToKeep.push(rowToKeep);\n }\n }\n\n if (subRowsToKeep.length == 0) {\n return null;\n }\n\n return {\n ...currentNestedRow,\n subRows: subRowsToKeep,\n };\n }\n\n const keptNestedRows: RivTable.NestedHeaderRow<R>[] = [];\n\n for (const outerLevelHeader of allRows) {\n if (!outerLevelHeader.subRows) {\n continue;\n }\n\n const keptSubRows: RivTable.NestedRow<R>[] = [];\n for (const nestedRow of outerLevelHeader.subRows) {\n const rowToKeep: RivTable.NestedRow<R> | null =\n recursiveFindRowsToKeep(nestedRow);\n if (rowToKeep) {\n keptSubRows.push(rowToKeep);\n }\n }\n\n if (keptSubRows.length == 0) {\n continue;\n }\n\n keptNestedRows.push({\n ...outerLevelHeader,\n subRows: keptSubRows,\n });\n }\n\n return keptNestedRows;\n }\n\n // Count how many rows we have at the bottom level of nesting.\n export function countBottomLevelNestedRows<R extends RivTable.Row>(\n allNestedRows: RivTable.NestedRow<R>[],\n ): number {\n let bottomLevelRowCount: number = 0;\n\n function recursiveCountRows(currentNestedRow: RivTable.NestedRow<R>) {\n if (!currentNestedRow.subRows || currentNestedRow.subRows.length == 0) {\n bottomLevelRowCount++;\n } else {\n for (const subRow of currentNestedRow.subRows) {\n recursiveCountRows(subRow);\n }\n }\n }\n\n for (const nestedRow of allNestedRows) {\n recursiveCountRows(nestedRow);\n }\n\n return bottomLevelRowCount;\n }\n\n // Count the rows pagination pages through.\n export function countNestedRows<R extends RivTable.Row>(\n allHeaders: RivTable.NestedHeaderRow<R>[],\n paginateBy: RivTable.NestedPaginateBy,\n ): number {\n return paginateBy === 'topRows'\n ? sumBy(allHeaders, header => header.subRows.length)\n : countBottomLevelNestedHeaderRows(allHeaders);\n }\n\n // Count how many rows we have at the bottom level of nesting.\n export function countBottomLevelNestedHeaderRows<R extends RivTable.Row>(\n allHeaders: RivTable.NestedHeaderRow<R>[],\n ): number {\n let bottomLevelRowCount: number = 0;\n\n for (const headerRow of allHeaders) {\n const currentHeaderBottomRowCount: number = countBottomLevelNestedRows(\n headerRow.subRows,\n );\n bottomLevelRowCount += currentHeaderBottomRowCount;\n }\n\n return bottomLevelRowCount;\n }\n}\n","import { orderBy } from 'lodash';\nimport { DeepPartial } from 'utility-types';\nimport { RivTable } from '../state';\n\nexport namespace TableOrderHelpers {\n export function orderEmptyLast<R>(\n rows: R[],\n key: keyof R,\n direction: RivTable.OrderDirection,\n ): R[] {\n return orderBy(rows, [row => row[key] == null, key], ['asc', direction]);\n }\n\n export function orderNestedRowsEmptyLast<R extends RivTable.Row>(\n rows: RivTable.NestedRow<R>[],\n key: keyof R,\n direction: RivTable.OrderDirection,\n ): RivTable.NestedRow<R>[] {\n return orderBy(\n rows,\n [row => row.data[key] == null, row => row.data[key]],\n ['asc', direction],\n );\n }\n\n export function orderNestedRowsBySearchMatch<R extends RivTable.Row>(\n rows: RivTable.NestedRow<R>[],\n idToSearchIndexMap: Map<string | number, number>,\n ): RivTable.NestedRow<R>[] {\n return orderBy(rows, [row => idToSearchIndexMap.get(row.data.id)], ['asc']);\n }\n\n export function toggleColumnOrder<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n column: C,\n ): RivTable.CoreState<R, C, F, G> {\n if (state.query.order?.column === column) {\n return {\n ...state,\n query: {\n ...state.query,\n order:\n state.query.order.direction === 'asc'\n ? {\n column,\n direction: 'desc',\n }\n : null,\n },\n };\n }\n return {\n ...state,\n query: {\n ...state.query,\n order: {\n column,\n direction: 'asc',\n },\n },\n };\n }\n\n /*\n We only sort the lowest level rows if rows are nested.\n\n In other words, we sort within each nested group, but do\n NOT sort in relation to the other groups.\n */\n export function sortLowLevelNestedRows<R extends RivTable.Row>(\n allRows: RivTable.NestedRow<R>[],\n sortKey: keyof R,\n direction: RivTable.OrderDirection,\n ): RivTable.NestedRow<R>[] {\n function recursiveSortRows(\n nestedRows: RivTable.NestedRow<R>[],\n ): RivTable.NestedRow<R>[] {\n const hasDeeperNesting: boolean = nestedRows.some(\n row => row.subRows && row.subRows.length > 0,\n );\n if (!hasDeeperNesting) {\n const sortedRows: RivTable.NestedRow<R>[] = orderNestedRowsEmptyLast(\n nestedRows,\n sortKey,\n direction,\n );\n return sortedRows;\n } else {\n // If there is a deeper nesting, keep recursing\n const sortedRows: RivTable.NestedRow<R>[] = [];\n for (const currentNestedRow of nestedRows) {\n if (currentNestedRow.subRows && currentNestedRow.subRows.length > 0) {\n const sortedSubRows: RivTable.NestedRow<R>[] = recursiveSortRows(\n currentNestedRow.subRows,\n );\n sortedRows.push({\n ...currentNestedRow,\n subRows: sortedSubRows,\n });\n } else {\n sortedRows.push(currentNestedRow);\n }\n }\n\n return sortedRows;\n }\n }\n\n return recursiveSortRows(allRows);\n }\n\n // Sort the data inside the headers, not the headers themselves\n export function sortLowLevelNestedRowsWithHeaders<R extends RivTable.Row>(\n allHeaders: RivTable.NestedHeaderRow<R>[],\n sortKey: keyof R,\n direction: RivTable.OrderDirection,\n ): RivTable.NestedHeaderRow<R>[] {\n const sortedHeaderRows: RivTable.NestedHeaderRow<R>[] = [];\n for (const headerRow of allHeaders) {\n const sortedSubRows: RivTable.NestedRow<R>[] = sortLowLevelNestedRows(\n headerRow.subRows,\n sortKey,\n direction,\n );\n sortedHeaderRows.push({\n ...headerRow,\n subRows: sortedSubRows,\n });\n }\n\n return sortedHeaderRows;\n }\n\n // Create map to help us sort on Fuse relevance order\n export function createIdToSearchIndexMap<R extends RivTable.Row>(\n rowsMatchingSearch: R[],\n ): Map<string | number, number> {\n const idToSearchIndexMap: Map<string | number, number> = new Map();\n\n for (let i = 0; i < rowsMatchingSearch.length; i++) {\n const rowMatchingIndex: R = rowsMatchingSearch[i];\n idToSearchIndexMap.set(rowMatchingIndex.id, i);\n }\n\n return idToSearchIndexMap;\n }\n\n // Sort based on how well the rows match a search\n export function sortNestedRowsBasedOnSearchMatches<R extends RivTable.Row>(\n allRows: RivTable.NestedRow<R>[],\n idToSearchIndexMap: Map<string | number, number>,\n ): RivTable.NestedRow<R>[] {\n function recursiveSortRowsBySearchMatch(\n nestedRows: RivTable.NestedRow<R>[],\n ): RivTable.NestedRow<R>[] {\n const hasDeeperNesting: boolean = nestedRows.some(\n row => row.subRows && row.subRows.length > 0,\n );\n if (!hasDeeperNesting) {\n const sortedRows: RivTable.NestedRow<R>[] =\n orderNestedRowsBySearchMatch(nestedRows, idToSearchIndexMap);\n return sortedRows;\n } else {\n // If there is a deeper nesting, keep recursing\n const sortedRows: RivTable.NestedRow<R>[] = [];\n for (const currentNestedRow of nestedRows) {\n if (currentNestedRow.subRows && currentNestedRow.subRows.length > 0) {\n const sortedSubRows: RivTable.NestedRow<R>[] =\n recursiveSortRowsBySearchMatch(currentNestedRow.subRows);\n sortedRows.push({\n ...currentNestedRow,\n subRows: sortedSubRows,\n });\n } else {\n sortedRows.push(currentNestedRow);\n }\n }\n\n return sortedRows;\n }\n }\n\n return recursiveSortRowsBySearchMatch(allRows);\n }\n\n // Sort based on how well the rows match a search\n export function sortNestedRowsWithHeadersBasedOnSearchMatches<\n R extends RivTable.Row,\n >(\n allHeaders: RivTable.NestedHeaderRow<R>[],\n idToSearchIndexMap: Map<string | number, number>,\n ): RivTable.NestedHeaderRow<R>[] {\n const sortedHeaderRows: RivTable.NestedHeaderRow<R>[] = [];\n for (const headerRow of allHeaders) {\n const sortedSubRows: RivTable.NestedRow<R>[] =\n sortNestedRowsBasedOnSearchMatches(\n headerRow.subRows,\n idToSearchIndexMap,\n );\n sortedHeaderRows.push({\n ...headerRow,\n subRows: sortedSubRows,\n });\n }\n\n return sortedHeaderRows;\n }\n\n /*\n When a defaultSort is specified, seed the initial query.order so the\n table header shows the sort indicator from the start.\n */\n export function seedDefaultSortOption<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n >(\n options?: RivTable.InMemoryManagerOptions<R, C, F>,\n ): RivTable.InMemoryManagerOptions<R, C, F> | undefined {\n if (options?.defaultSort && !options?.initialState?.query?.order) {\n const order: RivTable.Query<C, F>['order'] = options.defaultSort;\n return {\n ...options,\n initialState: {\n ...options.initialState,\n query: {\n ...options.initialState?.query,\n order,\n } as DeepPartial<RivTable.Query<C, F>>,\n },\n };\n }\n\n return options;\n }\n}\n","import { range } from 'lodash';\nimport { RivTable } from '../state';\nimport { TableResultHelpers } from './result-helpers';\n\nexport namespace TablePaginationHelpers {\n export function getPageCount<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number {\n if (TableResultHelpers.isGroupResult(state.result)) {\n return Math.max(\n Math.ceil(\n state.result.totalGroupCount / state.query.grouping.groupsPerPage,\n ),\n 1,\n );\n }\n return Math.max(\n Math.ceil(\n state.result.totalMatchingRowCount / state.query.pagination.pageSize,\n ),\n 1,\n );\n }\n\n export function getPreviousPage<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number | null {\n return state.query.pagination.page === 0\n ? null\n : state.query.pagination.page - 1;\n }\n\n export function getPages<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number[] {\n const padding = 4;\n const min = 0;\n const max = getPageCount(state) - 1;\n const desiredStart = state.query.pagination.page - padding;\n const clampedStart = Math.max(min, desiredStart);\n const desiredEnd = state.query.pagination.page + padding;\n const clampedEnd = Math.min(max, desiredEnd);\n const start = Math.max(min, clampedStart - (desiredEnd - clampedEnd));\n const end = Math.min(max, clampedEnd + (clampedStart - desiredStart));\n return range(start, end + 1);\n }\n\n export function getNextPage<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number | null {\n const max = getPageCount(state) - 1;\n const next = state.query.pagination.page + 1;\n return next <= max ? next : null;\n }\n\n // We don't want to show the pagination controls when they are unnecessary.\n export function getShowPaginationControls<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): boolean {\n if (state.query.pagination.page > 0) {\n return true;\n }\n if (TableResultHelpers.isGroupResult(state.result)) {\n return state.result.totalGroupCount > state.query.grouping.groupsPerPage;\n }\n return (\n state.result.totalMatchingRowCount > Math.min(...[...RivTable.pageSizes])\n );\n }\n\n export function getPageRowStart<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number {\n return state.query.pagination.page * state.query.pagination.pageSize + 1;\n }\n\n export function getPageRowEnd<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number {\n return Math.min(\n (state.query.pagination.page + 1) * state.query.pagination.pageSize,\n state.result.totalMatchingRowCount,\n );\n }\n\n export function isPageOutOfBounds<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n result:\n | RivTable.Result<R>\n | RivTable.GroupResult<R, G>\n | RivTable.NestedResult<R>,\n ): boolean {\n if (TableResultHelpers.isGroupResult(result)) {\n const minGroupValToShowOnCurrentPage =\n state.query.pagination.page * state.query.grouping.groupsPerPage + 1;\n if (result.totalGroupCount < minGroupValToShowOnCurrentPage) {\n return true;\n }\n } else {\n const minRowToShowOnCurrentPage =\n state.query.pagination.page * state.query.pagination.pageSize + 1;\n if (result.totalMatchingRowCount < minRowToShowOnCurrentPage) {\n return true;\n }\n }\n return false;\n }\n\n /*\n Paginate based on bottom level rows, splitting as necessary to fit within the page,\n or based on top level rows, keeping each with all of its subrows.\n */\n export function paginateNestedHeaderRows<R extends RivTable.Row>(\n allHeaders: RivTable.NestedHeaderRow<R>[],\n pageNumber: number,\n pageSize: number,\n paginateBy: RivTable.NestedPaginateBy = 'bottomRows',\n ): RivTable.NestedHeaderRow<R>[] {\n const startIdx: number = pageSize * pageNumber;\n const endIdx: number = startIdx + pageSize;\n\n let countedRowCount: number = 0;\n\n function countRow(\n currentNestedRow: RivTable.NestedRow<R>,\n ): RivTable.NestedRow<R> | null {\n countedRowCount++;\n\n // Since we add 1 first, the bounds should be (startIdx, endIdx]\n return countedRowCount > startIdx && countedRowCount <= endIdx\n ? currentNestedRow\n : null;\n }\n\n function recursivePaginateRows(\n currentNestedRow: RivTable.NestedRow<R>,\n ): RivTable.NestedRow<R> | null {\n if (countedRowCount > endIdx) {\n return null;\n }\n\n // If there are no subrows, stop recursing\n if (!currentNestedRow.subRows?.length) {\n return countRow(currentNestedRow);\n } else {\n const subRowsToKeep: RivTable.NestedRow<R>[] = [];\n for (const subRow of currentNestedRow.subRows) {\n const countedRow: RivTable.NestedRow<R> | null =\n recursivePaginateRows(subRow);\n if (countedRow != null) {\n subRowsToKeep.push(countedRow);\n }\n }\n\n if (subRowsToKeep.length == 0) {\n return null;\n } else {\n // Keep any top level row that has at least one subrow\n return {\n ...currentNestedRow,\n subRows: subRowsToKeep,\n };\n }\n }\n }\n\n const paginatedHeaders: RivTable.NestedHeaderRow<R>[] = [];\n for (const headerRow of allHeaders) {\n const paginatedSubRows: RivTable.NestedRow<R>[] = [];\n\n for (const subRow of headerRow.subRows) {\n const recursedSubRow: RivTable.NestedRow<R> | null =\n paginateBy === 'topRows'\n ? countRow(subRow)\n : recursivePaginateRows(subRow);\n\n if (recursedSubRow != null) {\n paginatedSubRows.push(recursedSubRow);\n }\n }\n\n if (paginatedSubRows.length > 0) {\n // Keep any header that has at least one subrow in the current page\n paginatedHeaders.push({\n ...headerRow,\n subRows: paginatedSubRows,\n });\n }\n }\n\n return paginatedHeaders;\n }\n}\n","import { RivTable } from '../state';\nimport { difference, union } from 'lodash';\nimport { TableResultHelpers } from './result-helpers';\n\nexport namespace TableSelectionHelpers {\n export function isRowSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>, id: R['id']): boolean {\n switch (state.selection.mode) {\n case 'include':\n return state.selection.included.has(id);\n case 'exclude':\n return !state.selection.excluded.has(id);\n }\n }\n\n export function isGroupSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n group: RivTable.SubGroupResult<R, G>,\n ): RivTable.MultiSelectionState {\n switch (state.selection.mode) {\n case 'include': {\n let allFound = true;\n let anyFound = false;\n for (const row of group.currentPageData) {\n if (!state.selection.included.has(row.id)) {\n allFound = false;\n } else {\n anyFound = true;\n }\n }\n return allFound ? true : anyFound ? 'indeterminate' : false;\n }\n case 'exclude': {\n let allFound = true;\n let anyFound = false;\n for (const row of group.currentPageData) {\n if (state.selection.excluded.has(row.id)) {\n allFound = false;\n } else {\n anyFound = true;\n }\n }\n return allFound ? true : anyFound ? 'indeterminate' : false;\n }\n }\n }\n\n export function isAllSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.MultiSelectionState {\n // If there are no rows, \"all selected\" should be false\n if (state.result.totalMatchingRowCount === 0) {\n return false;\n }\n\n if (\n (state.selection.mode === 'exclude' &&\n state.selection.excluded.size === 0) ||\n (state.selection.mode === 'include' &&\n state.selection.included.size === state.result.totalMatchingRowCount)\n )\n return true;\n if (\n (state.selection.mode === 'exclude' &&\n state.selection.excluded.size === state.result.totalMatchingRowCount) ||\n (state.selection.mode === 'include' &&\n state.selection.included.size === 0)\n )\n return false;\n return 'indeterminate';\n }\n\n export function isCurrentPageSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.MultiSelectionState {\n const selectedStates = TableResultHelpers.getAllRowsFromResult(\n state.result,\n ).map(({ id }) => isRowSelected(state, id));\n if (selectedStates.length > 0) {\n if (selectedStates.every(v => v)) return true;\n if (selectedStates.some(v => v)) return 'indeterminate';\n }\n return false;\n }\n\n export function selectedCount<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): number {\n switch (state.selection.mode) {\n case 'include':\n return state.selection.included.size;\n case 'exclude':\n return (\n state.result.totalMatchingRowCount - state.selection.excluded.size\n );\n }\n }\n\n export function setRowSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n id: R['id'],\n selected: boolean,\n contiguous: boolean,\n ): RivTable.CoreState<R, C, F, G> {\n if (selected) {\n const newSelection = new Set<R['id']>([id]);\n if (contiguous && state.selection.mostRecentlySelected) {\n const startIdx = TableResultHelpers.getAllRowsFromResult(\n state.result,\n ).findIndex(row => row.id === state.selection.mostRecentlySelected);\n const endIdx = TableResultHelpers.getAllRowsFromResult(\n state.result,\n ).findIndex(row => row.id === id);\n if (typeof startIdx === 'number' && typeof endIdx === 'number') {\n for (\n let i = Math.min(startIdx, endIdx);\n i <= Math.max(startIdx, endIdx);\n i++\n ) {\n newSelection.add(\n TableResultHelpers.getAllRowsFromResult(state.result)[i].id,\n );\n }\n }\n }\n return {\n ...state,\n selection: {\n mostRecentlySelected: id,\n ...(state.selection.mode === 'include'\n ? {\n mode: 'include',\n included: new Set(\n union([...state.selection.included], [...newSelection]),\n ),\n }\n : {\n mode: 'exclude',\n excluded: new Set(\n difference([...state.selection.excluded], [...newSelection]),\n ),\n }),\n },\n };\n } else {\n return {\n ...state,\n selection: {\n mostRecentlySelected: null,\n ...(state.selection.mode === 'include'\n ? {\n mode: 'include',\n included: new Set(\n difference([...state.selection.included], [id]),\n ),\n }\n : {\n mode: 'exclude',\n excluded: new Set(union([...state.selection.excluded], [id])),\n }),\n },\n };\n }\n }\n\n export function toggleGroupSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(\n state: RivTable.CoreState<R, C, F, G>,\n group: RivTable.RowGroup<R, G>,\n ): RivTable.CoreState<R, C, F, G> {\n const isGroupFullySelected =\n isGroupSelected(state, { ...group, currentPageData: group.rows }) ===\n true;\n return group.rows.reduce((accumulatedState, row) => {\n return setRowSelected(\n accumulatedState,\n row.id,\n !isGroupFullySelected,\n false,\n );\n }, state);\n }\n\n export function togglePageSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.CoreState<R, C, F, G> {\n const isPageFullySelected = TableResultHelpers.getAllRowsFromResult(\n state.result,\n ).every(({ id }) => isRowSelected(state, id));\n return TableResultHelpers.getAllRowsFromResult(state.result).reduce(\n (accumulatedState, row) => {\n return setRowSelected(\n accumulatedState,\n row.id,\n !isPageFullySelected,\n false,\n );\n },\n state,\n );\n }\n\n export function toggleAllSelected<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.CoreState<R, C, F, G> {\n if (isAllSelected(state) === true) {\n return {\n ...state,\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n };\n } else {\n return {\n ...state,\n selection: {\n mostRecentlySelected: null,\n mode: 'exclude',\n excluded: new Set(),\n },\n };\n }\n }\n\n export function clearSelection<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n >(state: RivTable.CoreState<R, C, F, G>): RivTable.CoreState<R, C, F, G> {\n return {\n ...state,\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n };\n }\n}\n","import type { Params, QueryParamsHandling } from '@angular/router';\nimport Fuse, { IFuseOptions } from 'fuse.js';\nimport { defaultsDeep, isEqual } from 'lodash';\nimport {\n Connectable,\n connectable,\n filter,\n from,\n map,\n mergeScan,\n Observable,\n ReplaySubject,\n scan,\n share,\n Subject,\n} from 'rxjs';\nimport { DeepPartial } from 'utility-types';\nimport { toSentenceCase } from '../../format/pipes/sentence-case.pipe';\nimport { TableCollapseHelpers } from './state-helpers/collapse-helpers';\nimport { TableColumnHelpers } from './state-helpers/column-helpers';\nimport { TableDisplayHelpers } from './state-helpers/display-helpers';\nimport { TableNestingHelpers } from './state-helpers/nesting-helpers';\nimport { TableOrderHelpers } from './state-helpers/order-helpers';\nimport { TablePaginationHelpers } from './state-helpers/pagination-helpers';\nimport { TableResultHelpers } from './state-helpers/result-helpers';\nimport { TableSearchHelpers } from './state-helpers/search-helpers';\nimport { TableSelectionHelpers } from './state-helpers/selection-helpers';\n\nexport namespace RivTable {\n export type Row = { id: string | number };\n export type Column = string;\n export type Filters = any;\n export type Group = { key: string | number };\n\n /**\n * RivTable's state and user actions are divided into the following chunks:\n *\n * - Query (for things like filters, pagination, search, etc.)\n * - Loading (for whether or not the table is loading row data)\n * - Result (for the row data itself)\n * - Display (for things like column configuration)\n * - Selection (for tracking the user's row selections)\n * - CollapseState (for tracking the rows/headers that are collapsed)\n *\n * Note that the data flow is unidirectional: the UI issues actions, which\n * affect the state, and the state gets passed back to the UI for display.\n *\n * ┌──────┐\n * │ UI ◄────────┐\n * └──┬───┘ │\n * │ │\n * ┌──▼────────┐ │\n * │ Actions │ │\n * └──┬────────┘ │\n * │ │\n * ┌──▼────────────┴─┐\n * │ State reducer │\n * └─────────────────┘\n *\n * From the core state, calculated state is derived and added to the core\n * state (e.g., from the raw selection state we can determine whether or not\n * all the rows on the currently displayed page are selected, etc.).\n */\n\n ///////////\n // Query //\n ///////////\n\n // Query state //\n\n export type OrderDirection = 'asc' | 'desc';\n export const pageSizes = [25, 50, 100, 250] as const;\n export type Query<C extends Column, F extends Filters> = {\n order: {\n direction: OrderDirection;\n column: C;\n } | null;\n search: string;\n searchColumns: Map<C, boolean>;\n filters: F | null;\n pagination: {\n page: number;\n pageSize: number;\n };\n grouping: {\n viewMoreKey: string | null;\n groupsPerPage: number;\n countPerGroup: number;\n };\n };\n\n // Query actions //\n\n export type QueryAction<C extends Column, F extends Filters> =\n | { type: 'load' }\n | {\n type: 'orderChange';\n payload: Query<C, F>['order'];\n source?: 'headerMenu';\n }\n | { type: 'orderColumnToggle'; column: C }\n | { type: 'searchChange'; payload: Query<C, F>['search'] }\n | { type: 'searchColumnsChange'; payload: Query<C, F>['searchColumns'] }\n | { type: 'filtersChange'; payload: Query<C, F>['filters'] }\n | { type: 'filterAdd'; columnKey: string }\n | { type: 'paginationChange'; payload: Query<C, F>['pagination'] }\n | { type: 'groupingChange'; payload: Query<C, F>['grouping'] }\n | { type: 'nextPageNavigate' }\n | { type: 'previousPageNavigate' }\n | { type: 'pageChange'; page: number }\n | { type: 'pageSizeChange'; size: number }\n | { type: 'groupsPerPageChange'; groupsPerPage: number }\n | { type: 'countPerGroupChange'; countPerGroup: number }\n | { type: 'viewMoreKeyChange'; viewMoreKey: string }\n | { type: 'toggleAllSearchColumns' };\n\n //////////\n // Load //\n //////////\n\n export type Load = {\n loading: boolean;\n error: unknown | null;\n };\n\n ////////////\n // Result //\n ////////////\n\n export type Result<R extends Row> = {\n /**\n * The full row data for the current page, after filters, search query, and\n * row ordering are applied.\n */\n currentPageData: R[];\n /**\n * The total number of rows (regardless of pagination) that match the\n * filters and search query.\n */\n totalMatchingRowCount: number;\n };\n\n export type SubGroupResult<R extends Row, G extends Group> = Result<R> & {\n /**\n * Any other relevant group data, used for the subheader\n */\n groupData: G;\n };\n\n export type GroupResult<R extends Row, G extends Group> = {\n /**\n * The full row data for the current page, after filters, search query, and\n * row ordering are applied, split into groups\n */\n groupResults: SubGroupResult<R, G>[];\n /**\n * The total number of groups (regardless of pagination) that match the\n * filters and search query.\n */\n totalGroupCount: number;\n /**\n * The total number of rows (regardless of pagination) that match the\n * filters and search query.\n */\n totalMatchingRowCount: number;\n };\n\n /*\n NestedResult\n NestedHeaderRow\n NestedRow - with subrows\n NestedRow - with no subrows\n */\n export type NestedHeaderRow<R extends Row> = {\n // The rows that should be hidden when the toggle on this header is toggled.\n subRows: NestedRow<R>[];\n\n // The text to show next to the toggleable chevron, or null if we don't show the header\n headerText: string | null;\n };\n export type NestedRow<R extends Row> = {\n // The rows that should be hidden when the toggle on this row is toggled.\n subRows?: NestedRow<R>[];\n\n // The relevant data used to display this row.\n data: R;\n };\n /*\n Nested header rows are toggleable headers for groups of rows.\n */\n export type NestedResult<R extends Row> = {\n /**\n * The full row data for the current page, after filters, search query, and\n * row ordering are applied, nested into \"headers with subrows\".\n */\n currentPageNestedHeaders: NestedHeaderRow<R>[];\n /**\n * The total number of rows (regardless of pagination) that match the\n * filters and search query.\n *\n * Only counts rows at the bottom level of nesting.\n */\n totalMatchingRowCount: number;\n\n /*\n This type also supports nested rows without header rows, so this property\n helps us tell whether to show the headers.\n */\n hasHeaders: boolean;\n };\n\n export type Source<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = (\n query: Query<C, F>,\n mostRecentAction: Action<R, C, F, G>,\n ) => Promise<Result<R> | GroupResult<R, G> | NestedResult<R>>;\n\n /////////////\n // Display //\n /////////////\n\n // Display state //\n\n export type ColumnSettings<C extends Column> = {\n key: C;\n enabled: boolean;\n preferredWidth: number | 'auto';\n pinned: boolean;\n };\n export type Display<C extends Column> = {\n columnSettings: ColumnSettings<C>[];\n cellRowSpan: (rowIndex: number, column: C) => number;\n };\n\n // Display actions //\n\n export type DisplayAction<C extends Column> =\n | { type: 'columnSettingsChange'; payload: Display<C>['columnSettings'] }\n | {\n type: 'columnPinChange';\n column: C;\n pinned: boolean;\n }\n | {\n type: 'columnsFreezeUpToChange';\n index: number;\n freeze: boolean;\n source?: 'headerMenu' | 'optionsMenu' | 'freezeDivider';\n column?: C;\n }\n | {\n type: 'columnOrderChange';\n previousIndex: number;\n newIndex: number;\n source?: 'tableDrag' | 'menuDrag';\n column?: C;\n }\n | {\n type: 'columnMoveToChange';\n column: C;\n position: 'start' | 'end';\n }\n | {\n type: 'columnEnabledChange';\n column: C;\n enabled: boolean;\n source?: 'headerMenu' | 'optionsMenu' | 'dragDrop' | 'eyeIcon';\n }\n | {\n type: 'enableAllColumnsChange';\n enabled: boolean;\n }\n | {\n type: 'columnWidthChange';\n column: C;\n preferredWidth: number | 'auto';\n }\n | {\n type: 'resetToDefaultColumns';\n };\n\n ///////////////\n // Selection //\n ///////////////\n\n // Selection state //\n\n export type Selection<R extends Row> = {\n mostRecentlySelected: R['id'] | null;\n } & (\n | {\n mode: 'include';\n included: Set<R['id']>;\n }\n | {\n mode: 'exclude';\n excluded: Set<R['id']>;\n }\n );\n\n // Selection actions //\n\n export type SelectionAction<R extends Row, G extends Group = { key: '' }> =\n | {\n type: 'selectionChange';\n payload: Selection<R>;\n }\n | {\n type: 'groupSelectionChange';\n payload: RowGroup<R, G>;\n }\n | {\n type: 'rowSelectedChange';\n id: R['id'];\n selected: boolean;\n contiguous: boolean;\n }\n | {\n type: 'pageSelectedChange';\n }\n | {\n type: 'allSelectedChange';\n }\n | {\n type: 'selectionClear';\n };\n\n export type CollapseState<R extends Row> =\n | {\n defaultTo: 'collapsed';\n expandedRows: Set<R['id']>;\n expandedHeaders: Set<string>;\n }\n | {\n defaultTo: 'expanded';\n collapsedRows: Set<R['id']>;\n collapsedHeaders: Set<string>;\n };\n\n export type CollapseAction<R extends Row> =\n | {\n type: 'toggleRowCollapse';\n id: R['id'];\n }\n | {\n type: 'toggleHeaderCollapse';\n id: string;\n }\n | {\n type: 'toggleAllCollapsed';\n };\n\n /////////////////////////////\n // Putting it all together //\n /////////////////////////////\n\n // Combined state //\n\n export type CoreState<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = {\n query: Query<C, F>;\n load: Load;\n result: Result<R> | GroupResult<R, G> | NestedResult<R>;\n display: Display<C>;\n selection: Selection<R>;\n collapseState: CollapseState<R>;\n };\n\n // Combined actions //\n\n export type Action<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > =\n | QueryAction<C, F>\n | DisplayAction<C>\n | SelectionAction<R, G>\n | CollapseAction<R>;\n\n export type Effect = 'saveColumnPreferences';\n\n // Full state (core state plus pure derivations) //\n export const ColumnsMaxShown: number = 50;\n export const ColumnDataTypes = [\n 'advanced',\n 'currency',\n 'date',\n 'icon',\n 'longText',\n 'number',\n 'shortText',\n ] as const;\n export type ColumnDataType = (typeof ColumnDataTypes)[number];\n export type ColumnAlignment = 'left' | 'center' | 'right';\n export type ColumnMetadata = {\n orderable: boolean;\n filterable?: boolean;\n searchable?: boolean;\n minWidth: number;\n dataType: ColumnDataType;\n description?: string;\n defaultPinned?: boolean;\n alwaysPinned?: boolean;\n tooltipForReorderIcon?: string;\n clickPreventDefault?: boolean;\n clickStopPropagation?: boolean;\n displayName?: string;\n alwaysVisible?: boolean;\n tooltipForHideIcon?: string;\n };\n export type ExternalRowLink = {\n type: 'external';\n href: string;\n };\n export type InternalRowLink = {\n type: 'internal';\n routerLink: string | string[];\n queryParams?: Params;\n queryParamsHandling?: QueryParamsHandling;\n active?: boolean;\n };\n export type RowLink = ExternalRowLink | InternalRowLink;\n export type FullRow<R extends Row> = R & {\n rowLink: RowLink | null;\n selected: boolean;\n isCollapsed: boolean;\n };\n\n export type RowGroup<R extends Row, G extends Group> = {\n rows: FullRow<R>[];\n selected: MultiSelectionState;\n totalMatchingRowCount: number;\n groupData: G;\n };\n\n export type FullNestedRow<R extends Row> = {\n id: string | number;\n subRows?: FullNestedRow<R>[];\n data: R;\n rowLink: RowLink | null;\n selected: boolean;\n isCollapsed: boolean;\n };\n\n export type FullNestedHeaderRow<R extends Row> = {\n id: string | number;\n subRows: FullNestedRow<R>[];\n headerText: string | null;\n isCollapsed: boolean;\n };\n\n export type FullColumn<C extends Column> = ColumnSettings<C> &\n ColumnMetadata & {\n width: number;\n left: number | null;\n alignment: ColumnAlignment;\n };\n export type MultiSelectionState = boolean | 'indeterminate';\n export type SelectionConfiguration = boolean | 'individual';\n\n export type RowSpanGetter<C extends Column> = (\n rowIndex: number,\n column: C,\n ) => number | null | undefined;\n\n export type ValidRowSpanGetter<C extends Column> = (\n rowIndex: number,\n column: C,\n ) => number;\n\n export type CsvCellFormatter<R extends Row, C extends Column> = (\n row: R,\n column: FullColumn<C>,\n ) => string | Promise<string>;\n export type CsvGroupCellFormatter<R extends Row, G extends Group> = (\n row: R,\n group: G,\n ) => string | Promise<string>;\n export type CsvRow = string[];\n export type Csv = CsvRow[];\n export type CsvMode = 'full' | 'selection';\n export type CsvOutput =\n | { loading: true; data: null }\n | { loading: false; data: Csv };\n\n export type ColumnNameMap<C extends Column> = Map<C, C | string>;\n\n export type SearchableColumnMap<C extends Column> = Map<C, boolean>;\n\n export type FullState<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = CoreState<R, C, F, G> & {\n query: {\n pagination: {\n previous: number | null;\n pages: number[];\n next: number | null;\n pageCount: number;\n showControls: boolean;\n pageRowStart: number;\n pageRowEnd: number;\n };\n noSearchColumnsSelected: boolean;\n };\n result:\n | {\n rows: FullRow<R>[];\n rowsAsGroup: RowGroup<R, G>;\n isGrouped: false;\n resultType: 'normal-rows';\n csvData: (mode?: CsvMode) => AsyncGenerator<CsvOutput>;\n csvFilename: string;\n }\n | {\n rows: FullRow<R>[];\n rowGroups: RowGroup<R, G>[];\n isGrouped: true;\n resultType: 'table-grouping';\n csvData: (mode?: CsvMode) => AsyncGenerator<CsvOutput>;\n csvFilename: string;\n }\n | {\n rows: FullRow<R>[];\n nestedHeaderRows: FullNestedHeaderRow<R>[];\n isGrouped: false;\n resultType: 'nested-rows';\n csvData: (mode?: CsvMode) => AsyncGenerator<CsvOutput>;\n csvFilename: string;\n };\n display: {\n columns: FullColumn<C>[];\n disabledColumns: FullColumn<C>[];\n allColumns: ColumnSettings<C>[];\n searchableColumnMap: SearchableColumnMap<C>;\n columnNameMap: ColumnNameMap<C>;\n zeroStateMessage: string | null;\n columnsAreFreezable: boolean;\n columnsAreHideable: boolean;\n columnsAreReorderable: boolean;\n rowsAreGrayed: boolean;\n customSummaryRow: boolean;\n csvExportAllowed: boolean;\n enabledCount: number;\n hidePageSizeSelector: boolean;\n needsRightBorder: (rowIndex: number, column: C) => boolean;\n unavailableColumnKeys: C[];\n unavailableFolderTitle: string;\n };\n selection: {\n allowSelection: SelectionConfiguration;\n isAllSelected: MultiSelectionState;\n isCurrentPageSelected: MultiSelectionState;\n selectedCount: number;\n };\n };\n\n /**\n * The manager is what sets up the initial state and translates user actions\n * (like pagination or filter changes, etc.) into new row data by calling the\n * reducer function. It also augments the core state with additional derived\n * state.\n */\n\n export type Manager<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = {\n actions: Subject<Action<R, C, F, G>>;\n state: Connectable<FullState<R, C, F, G>>;\n effects: Connectable<Effect>;\n };\n\n export type ManagerOptions<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = {\n initialState?: DeepPartial<CoreState<R, C, F, G>>;\n rowLink?: (row: R, group?: G) => RowLink;\n csvCellFormatter?: CsvCellFormatter<R, C>;\n csvGroupCellFormatter?: CsvGroupCellFormatter<R, G>;\n csvFileBasename?: string;\n allowSelection?: SelectionConfiguration;\n columnsAreFreezable?: boolean;\n columnsAreHideable?: boolean;\n columnsAreReorderable?: boolean;\n columnsUseOriginalCasing?: boolean;\n defaultColumnState?: ColumnSettings<C>[];\n rowsAreGrayed?: boolean;\n customSummaryRow?: boolean;\n /**\n * When true, the \"Results per page\" label and page-size dropdown are\n * hidden. Page navigation arrows and page numbers remain visible.\n */\n hidePageSizeSelector?: boolean;\n /**\n * Parent-controlled row spanning.\n * Return 0 to suppress the cell, >=1 for a real rowspan.\n * If omitted or invalid, defaults to 1.\n */\n getRowSpanForCell?: RowSpanGetter<C>;\n hasNestedHeaders?: boolean;\n unavailableColumnKeys?: C[];\n unavailableFolderTitle?: string;\n };\n\n export function createManager<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(\n source: Source<R, C, F, G>,\n columns: Map<C, ColumnMetadata>,\n pluralEntityName: string,\n options?: ManagerOptions<R, C, F, G>,\n ): Manager<R, C, F, G> {\n // Set up the initial table state.\n\n const searchableColumnMap: SearchableColumnMap<C> = new Map<C, boolean>(\n Array.from(columns.entries()).map(([key, metadata]) => [\n key,\n metadata.searchable ?? true,\n ]),\n );\n const defaultState: CoreState<R, C, F, G> = {\n query: {\n order: null,\n search: '',\n searchColumns: new Map(\n Array.from(columns.keys())\n .filter(key => searchableColumnMap.get(key))\n .map(key => [key, true]),\n ),\n pagination: {\n page: 0,\n pageSize: 25,\n },\n grouping: {\n viewMoreKey: null,\n groupsPerPage: 5,\n countPerGroup: 10,\n },\n filters: null,\n },\n load: { loading: false, error: null },\n result: {\n currentPageData: [],\n totalMatchingRowCount: 0,\n },\n display: {\n columnSettings: [],\n cellRowSpan: (_i: number, _column: C) => 1,\n },\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n collapseState: {\n defaultTo: 'expanded',\n collapsedRows: new Set(),\n collapsedHeaders: new Set(),\n },\n };\n const defaultedInitialState: CoreState<R, C, F, G> = defaultsDeep(\n {},\n options?.initialState,\n defaultState,\n );\n\n const columnNameMap: ColumnNameMap<C> = new Map<C, C | string>(\n Array.from(columns.entries()).map(([key, metadata]) => {\n const columnDisplayName: string = metadata.displayName ?? key;\n const formattedColumnName: string = options?.columnsUseOriginalCasing\n ? columnDisplayName\n : toSentenceCase(columnDisplayName);\n\n return [key, formattedColumnName];\n }),\n );\n\n const defaultColumnState =\n options?.defaultColumnState ??\n defaultedInitialState.display.columnSettings;\n\n // Wire up reduced state from actions and initial state.\n const actions: Subject<Action<R, C, F, G>> = new Subject();\n const coreState: Observable<{\n state: CoreState<R, C, F, G>;\n effect: Effect | null;\n }> = actions.pipe(\n mergeScan<\n Action<R, C, F, G>,\n {\n state: CoreState<R, C, F, G>;\n effect: Effect | null;\n }\n >(\n ({ state }, action) =>\n from(\n reduce(\n state,\n action,\n columns,\n source,\n columnNameMap,\n defaultColumnState,\n ),\n ),\n { state: defaultedInitialState, effect: null },\n 1,\n ),\n share({\n connector: () => new ReplaySubject(1),\n resetOnError: false,\n resetOnComplete: false,\n resetOnRefCountZero: false,\n }),\n );\n\n const csvExportAllowed = !(\n options?.getRowSpanForCell || options?.customSummaryRow\n );\n\n // Augment state with derived state, and subscribe.\n const state: Connectable<FullState<R, C, F, G>> = connectable(\n coreState.pipe(\n map(({ state: s }): FullState<R, C, F, G> => {\n const resolvedColumns = TableColumnHelpers.resolveColumns(\n s,\n columns,\n columnNameMap,\n !!options?.allowSelection,\n 'enabled',\n !!options?.hasNestedHeaders,\n );\n const resolvedDisabledColumns = TableColumnHelpers.resolveColumns(\n s,\n columns,\n columnNameMap,\n !!options?.allowSelection,\n 'disabled',\n !!options?.hasNestedHeaders,\n );\n\n if (TableResultHelpers.isGroupResult(s.result)) {\n return deriveFullStateFromGroupResult({\n s,\n stateResult: s.result,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n });\n } else if (TableResultHelpers.isNestedResult(s.result)) {\n return deriveFullStateFromNestedResult({\n s,\n stateResult: s.result,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n });\n } else {\n return deriveFullStateFromRegularResult({\n s,\n stateResult: s.result,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n });\n }\n }),\n scan((stable, newState) => stableState(stable, newState)),\n ),\n {\n connector: () => new ReplaySubject(1),\n resetOnDisconnect: false,\n },\n );\n state.connect();\n\n const effects: Connectable<Effect> = connectable(\n coreState.pipe(\n filter(({ effect }) => effect !== null),\n map(({ effect }) => effect as Effect),\n ),\n {\n connector: () => new ReplaySubject(1),\n resetOnDisconnect: false,\n },\n );\n effects.connect();\n\n // Load initial table row data.\n actions.next({ type: 'load' });\n\n return { actions, state, effects };\n }\n\n function deriveFullStateFromGroupResult<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(props: {\n s: CoreState<R, C, F, G>;\n stateResult: GroupResult<R, G>;\n source: Source<R, C, F, G>;\n columns: Map<C, ColumnMetadata>;\n pluralEntityName: string;\n columnNameMap: ColumnNameMap<C>;\n resolvedColumns: FullColumn<C>[];\n resolvedDisabledColumns: FullColumn<C>[];\n searchableColumnMap: SearchableColumnMap<C>;\n csvExportAllowed: boolean;\n options?: ManagerOptions<R, C, F, G>;\n }): FullState<R, C, F, G> {\n const {\n s,\n stateResult,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n } = props;\n if (options?.getRowSpanForCell) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Heads up! Custom row spans are not supported for grouped tables.',\n );\n }\n if (options?.customSummaryRow) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Heads up! Custom summary rows are not supported for grouped tables.',\n );\n }\n\n const rowGroups: RowGroup<R, G>[] = stateResult.groupResults.map(group => ({\n rows: group.currentPageData.map(row => ({\n ...row,\n rowLink: options?.rowLink\n ? options.rowLink(row, group.groupData)\n : null,\n selected: TableSelectionHelpers.isRowSelected(s, row.id),\n isCollapsed: false,\n })),\n selected: TableSelectionHelpers.isGroupSelected(s, group),\n totalMatchingRowCount: group.totalMatchingRowCount,\n groupData: group.groupData,\n }));\n\n async function* csvData(mode: CsvMode = 'full'): AsyncGenerator<CsvOutput> {\n const cellFormatter = options?.csvCellFormatter;\n const groupCellFormatter = options?.csvGroupCellFormatter;\n if (!cellFormatter)\n throw new Error('options.csvCellFormatter is required for CSV export');\n yield { loading: true, data: null };\n const dataSet = await source(\n {\n ...s.query,\n pagination: {\n page: 0,\n pageSize: stateResult.totalMatchingRowCount,\n },\n },\n { type: 'load' },\n );\n\n if (!TableResultHelpers.isGroupResult(dataSet)) {\n throw new Error('Returned non-grouped CSV data for grouped table');\n }\n\n const fullColumns = TableColumnHelpers.resolveColumns(\n s,\n columns,\n columnNameMap,\n !!options.allowSelection,\n 'enabled',\n !!options.hasNestedHeaders,\n );\n const data: Csv = [];\n data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));\n\n if (groupCellFormatter) {\n data[0].push('');\n }\n\n for (const rowItem of dataSet.groupResults.flatMap(groups =>\n groups.currentPageData.map(row => ({\n row,\n group: groups.groupData,\n })),\n )) {\n const record = rowItem.row;\n if (\n mode === 'selection' &&\n !TableSelectionHelpers.isRowSelected(s, record.id)\n )\n continue;\n const row: CsvRow = [];\n for (const column of fullColumns) {\n row.push(await cellFormatter(record, column));\n }\n if (groupCellFormatter && rowItem.group) {\n row.push(await groupCellFormatter(record, rowItem.group));\n }\n data.push(row);\n }\n yield { loading: false, data };\n }\n\n return {\n ...s,\n query: derivedFullStateQuery(s),\n display: derivedFullStateDisplay({\n coreState: s,\n columns: columns,\n pluralEntityName: pluralEntityName,\n columnNameMap: columnNameMap,\n resolvedColumns: resolvedColumns,\n resolvedDisabledColumns: resolvedDisabledColumns,\n searchableColumnMap: searchableColumnMap,\n csvExportAllowed: csvExportAllowed,\n options: options,\n }),\n selection: derivedFullStateSelection(s, options),\n result: {\n ...stateResult,\n isGrouped: true,\n resultType: 'table-grouping',\n rowGroups,\n rows: rowGroups.flatMap(group => group.rows),\n csvData,\n csvFilename: TableResultHelpers.getCsvFilename(\n pluralEntityName,\n options,\n ),\n },\n };\n }\n\n function deriveFullStateFromNestedResult<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(props: {\n s: CoreState<R, C, F, G>;\n stateResult: NestedResult<R>;\n source: Source<R, C, F, G>;\n columns: Map<C, ColumnMetadata>;\n pluralEntityName: string;\n columnNameMap: ColumnNameMap<C>;\n resolvedColumns: FullColumn<C>[];\n resolvedDisabledColumns: FullColumn<C>[];\n searchableColumnMap: SearchableColumnMap<C>;\n csvExportAllowed: boolean;\n options?: ManagerOptions<R, C, F, G>;\n }): FullState<R, C, F, G> {\n const {\n s,\n stateResult,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n } = props;\n\n if (options?.getRowSpanForCell) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Heads up! Custom row spans are not supported for tables with nested data.',\n );\n }\n if (options?.customSummaryRow) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Heads up! Custom summary rows are not supported for tables with nested data.',\n );\n }\n\n const fullNestedHeaderRows: FullNestedHeaderRow<R>[] = [];\n for (const nestedRow of stateResult.currentPageNestedHeaders) {\n const newFullRow: FullNestedHeaderRow<R> =\n TableNestingHelpers.convertToFullNestedHeaderRow(\n nestedRow,\n s,\n options?.rowLink,\n );\n fullNestedHeaderRows.push(newFullRow);\n }\n\n async function* csvData(mode = 'full'): AsyncGenerator<CsvOutput> {\n if (!csvExportAllowed) {\n throw new Error(\n 'CSV export is not supported when row spanning or a custom summary row is enabled.',\n );\n }\n\n const cellFormatter = options?.csvCellFormatter;\n if (!cellFormatter) {\n throw new Error('options.csvCellFormatter is required for CSV export');\n }\n yield { loading: true, data: null };\n const dataSet = await source(\n {\n ...s.query,\n pagination: {\n page: 0,\n pageSize: stateResult.totalMatchingRowCount,\n },\n },\n { type: 'load' },\n );\n\n if (TableResultHelpers.isRegularResult(dataSet)) {\n throw new Error(\n 'Returned non-nested CSV data for a nested with header result table',\n );\n }\n if (TableResultHelpers.isGroupResult(dataSet)) {\n throw new Error(\n 'Returned grouped CSV data for a nested with header result table',\n );\n }\n\n const fullColumns = TableColumnHelpers.resolveColumns(\n s,\n columns,\n columnNameMap,\n !!options.allowSelection,\n 'enabled',\n !!options.hasNestedHeaders,\n );\n const data: Csv = [];\n data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));\n\n const allRows: R[] = TableResultHelpers.getAllRowsFromResult(dataSet);\n\n for (const currentRow of allRows) {\n if (\n mode === 'selection' &&\n !TableSelectionHelpers.isRowSelected(s, currentRow.id)\n ) {\n return;\n }\n\n const row: CsvRow = [];\n for (const column of fullColumns) {\n row.push(await cellFormatter(currentRow, column));\n }\n data.push(row);\n }\n yield { loading: false, data };\n }\n\n return {\n ...s,\n query: derivedFullStateQuery(s),\n display: derivedFullStateDisplay({\n coreState: s,\n columns: columns,\n pluralEntityName: pluralEntityName,\n columnNameMap: columnNameMap,\n resolvedColumns: resolvedColumns,\n resolvedDisabledColumns: resolvedDisabledColumns,\n searchableColumnMap: searchableColumnMap,\n csvExportAllowed: csvExportAllowed,\n options: options,\n }),\n selection: derivedFullStateSelection(s, options),\n result: {\n ...stateResult,\n rows: [],\n isGrouped: false,\n resultType: 'nested-rows',\n nestedHeaderRows: fullNestedHeaderRows,\n csvData,\n csvFilename: TableResultHelpers.getCsvFilename(\n pluralEntityName,\n options,\n ),\n },\n };\n }\n\n function deriveFullStateFromRegularResult<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(props: {\n s: CoreState<R, C, F, G>;\n stateResult: Result<R>;\n source: Source<R, C, F, G>;\n columns: Map<C, ColumnMetadata>;\n pluralEntityName: string;\n columnNameMap: ColumnNameMap<C>;\n resolvedColumns: FullColumn<C>[];\n resolvedDisabledColumns: FullColumn<C>[];\n searchableColumnMap: SearchableColumnMap<C>;\n csvExportAllowed: boolean;\n options?: ManagerOptions<R, C, F, G>;\n }): FullState<R, C, F, G> {\n const {\n s,\n stateResult,\n source,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n } = props;\n const rows = stateResult.currentPageData.map(row => ({\n ...row,\n rowLink: options?.rowLink ? options.rowLink(row) : null,\n selected: TableSelectionHelpers.isRowSelected(s, row.id),\n isCollapsed: false,\n }));\n\n const cellRowSpanCache = TableDisplayHelpers.memoizedCellRowSpan(\n s,\n resolvedColumns,\n options,\n );\n const cellRowSpan: ValidRowSpanGetter<C> = (rowIndex, column) =>\n cellRowSpanCache?.get(column)?.[rowIndex] ?? 1;\n const hasAnyRowSpans = cellRowSpanCache\n ? [...cellRowSpanCache.values()].some(spans =>\n spans.some(span => span > 1),\n )\n : false;\n\n const resolvedColumnKeys = resolvedColumns.map(({ key }) => key);\n\n async function* csvData(mode = 'full'): AsyncGenerator<CsvOutput> {\n if (!csvExportAllowed) {\n throw new Error(\n 'CSV export is not supported when row spanning or a custom summary row is enabled.',\n );\n }\n\n const cellFormatter = options?.csvCellFormatter;\n if (!cellFormatter)\n throw new Error('options.csvCellFormatter is required for CSV export');\n yield { loading: true, data: null };\n const dataSet = await source(\n {\n ...s.query,\n pagination: {\n page: 0,\n pageSize: stateResult.totalMatchingRowCount,\n },\n },\n { type: 'load' },\n );\n\n if (TableResultHelpers.isGroupResult(dataSet)) {\n throw new Error('Returned grouped CSV data for non-grouped table');\n }\n if (TableResultHelpers.isNestedResult(dataSet)) {\n throw new Error('Returned nested CSV data for non-nested table');\n }\n\n const fullColumns = TableColumnHelpers.resolveColumns(\n s,\n columns,\n columnNameMap,\n !!options.allowSelection,\n 'enabled',\n !!options.hasNestedHeaders,\n );\n const data: Csv = [];\n data.push(fullColumns.map(({ key }) => columnNameMap.get(key) ?? key));\n\n for (const record of dataSet.currentPageData) {\n if (\n mode === 'selection' &&\n !TableSelectionHelpers.isRowSelected(s, record.id)\n )\n continue;\n const row: CsvRow = [];\n for (const column of fullColumns) {\n row.push(await cellFormatter(record, column));\n }\n data.push(row);\n }\n yield { loading: false, data };\n }\n\n return {\n ...s,\n query: derivedFullStateQuery(s, {\n order: hasAnyRowSpans ? null : s.query.order,\n }),\n display: derivedFullStateDisplay(\n {\n coreState: s,\n columns: columns,\n pluralEntityName: pluralEntityName,\n columnNameMap: columnNameMap,\n resolvedColumns: resolvedColumns,\n resolvedDisabledColumns: resolvedDisabledColumns,\n searchableColumnMap: searchableColumnMap,\n csvExportAllowed: csvExportAllowed,\n options: options,\n },\n {\n columns: resolvedColumns.map(column =>\n hasAnyRowSpans ? { ...column, orderable: false } : column,\n ),\n cellRowSpan: cellRowSpan,\n needsRightBorder: (rowIndex: number, column: C): boolean => {\n const i = resolvedColumnKeys.findIndex(key => key === column);\n if (i < 0 || i === resolvedColumnKeys.length - 1) return false;\n\n const rightColKey = resolvedColumnKeys[i + 1];\n const spanOnRight = cellRowSpan(rowIndex, rightColKey);\n return spanOnRight > 1 || spanOnRight === 0;\n },\n },\n ),\n selection: derivedFullStateSelection(s, options),\n result: {\n ...stateResult,\n isGrouped: false,\n resultType: 'normal-rows',\n rows,\n rowsAsGroup: {\n rows,\n selected: false,\n totalMatchingRowCount: rows.length,\n groupData: { key: '' } as G,\n },\n csvFilename: TableResultHelpers.getCsvFilename(\n pluralEntityName,\n options,\n ),\n csvData,\n },\n };\n }\n\n function derivedFullStateQuery<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(\n coreState: CoreState<R, C, F, G>,\n partialQuery: Partial<FullState<R, C, F, G>['query']> = {},\n ): FullState<R, C, F, G>['query'] {\n return {\n ...coreState.query,\n pagination: derivedFullStatePagination(coreState),\n noSearchColumnsSelected: TableSearchHelpers.getSearchColumnsSelectedState(\n coreState,\n 'none',\n ),\n ...partialQuery,\n };\n }\n\n function derivedFullStatePagination<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(\n coreState: CoreState<R, C, F, G>,\n ): FullState<R, C, F, G>['query']['pagination'] {\n return {\n ...coreState.query.pagination,\n previous: TablePaginationHelpers.getPreviousPage(coreState),\n pages: TablePaginationHelpers.getPages(coreState),\n next: TablePaginationHelpers.getNextPage(coreState),\n pageCount: TablePaginationHelpers.getPageCount(coreState),\n showControls: TablePaginationHelpers.getShowPaginationControls(coreState),\n pageRowStart: TablePaginationHelpers.getPageRowStart(coreState),\n pageRowEnd: TablePaginationHelpers.getPageRowEnd(coreState),\n };\n }\n\n function derivedFullStateDisplay<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(\n props: {\n coreState: CoreState<R, C, F, G>;\n columns: Map<C, ColumnMetadata>;\n pluralEntityName: string;\n columnNameMap: ColumnNameMap<C>;\n resolvedColumns: FullColumn<C>[];\n resolvedDisabledColumns: FullColumn<C>[];\n searchableColumnMap: SearchableColumnMap<C>;\n csvExportAllowed: boolean;\n options?: ManagerOptions<R, C, F, G>;\n },\n partialDisplay: Partial<FullState<R, C, F, G>['display']> = {},\n ): FullState<R, C, F, G>['display'] {\n const {\n coreState,\n columns,\n pluralEntityName,\n columnNameMap,\n resolvedColumns,\n resolvedDisabledColumns,\n searchableColumnMap,\n csvExportAllowed,\n options,\n } = props;\n\n return {\n ...coreState.display,\n columns: resolvedColumns,\n disabledColumns: resolvedDisabledColumns,\n allColumns: TableColumnHelpers.getAllColumns(\n coreState,\n columns,\n columnNameMap,\n ),\n columnNameMap: columnNameMap,\n searchableColumnMap: searchableColumnMap,\n zeroStateMessage: TableDisplayHelpers.getZeroStateMessage(\n coreState,\n pluralEntityName,\n ),\n columnsAreFreezable: !!options?.columnsAreFreezable,\n columnsAreHideable: !!options?.columnsAreHideable,\n columnsAreReorderable: options?.columnsAreReorderable ?? true,\n rowsAreGrayed: !!options?.rowsAreGrayed,\n customSummaryRow: !!options?.customSummaryRow,\n csvExportAllowed: csvExportAllowed,\n enabledCount: resolvedColumns.length,\n hidePageSizeSelector: !!options?.hidePageSizeSelector,\n cellRowSpan: (_i: number, _column: C) => 1,\n needsRightBorder: () => false,\n unavailableColumnKeys: options?.unavailableColumnKeys ?? [],\n unavailableFolderTitle: options?.unavailableFolderTitle ?? 'Unavailable',\n ...partialDisplay,\n };\n }\n\n function derivedFullStateSelection<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n >(\n coreState: CoreState<R, C, F, G>,\n options?: ManagerOptions<R, C, F, G>,\n ): FullState<R, C, F, G>['selection'] {\n return {\n ...coreState.selection,\n allowSelection: options?.allowSelection ?? false,\n isAllSelected: TableSelectionHelpers.isAllSelected(coreState),\n isCurrentPageSelected:\n TableSelectionHelpers.isCurrentPageSelected(coreState),\n selectedCount: TableSelectionHelpers.selectedCount(coreState),\n };\n }\n\n /**\n * Some tables use remote backends to fetch data asynchronously, but most tables use an\n * in-memory source, which is useful for small datasets, when RivTable features like\n * ordering and pagination are desired.\n */\n\n export type InMemoryColumnMetadata<R extends Row> = Omit<\n ColumnMetadata,\n 'orderable'\n > & { orderKey?: keyof R };\n\n export type InMemoryManagerOptions<\n R extends Row,\n C extends Column,\n F extends Filters,\n G extends Group = { key: '' },\n > = ManagerOptions<R, C, F, G> & {\n fuseOptions?: IFuseOptions<R>;\n filter?: (filters: F | null, row: R) => boolean;\n /**\n * When `query.order` is null and there is no active search, rows are ordered\n * by this column. If omitted, the first column with an `orderKey` is used\n * (ascending).\n */\n defaultSort?: { column: C; direction: OrderDirection };\n };\n\n /**\n * What a nested table's page size and total count count: every bottom-level\n * row, which can split a row's subrows across pages, or each top-level row\n * together with all of its subrows.\n */\n export const NestedPaginateByOptions = ['bottomRows', 'topRows'] as const;\n export type NestedPaginateBy = (typeof NestedPaginateByOptions)[number];\n\n export type InMemoryNestedManagerOptions<\n R extends Row,\n C extends Column,\n F extends Filters,\n > = InMemoryManagerOptions<R, C, F> & {\n /** Defaults to 'bottomRows'. */\n paginateBy?: NestedPaginateBy;\n };\n\n export function createInMemoryManager<\n R extends Row,\n C extends Column,\n F extends Filters,\n >(\n fetchDataset: () => Promise<R[]> | R[],\n columns: Map<C, InMemoryColumnMetadata<R>>,\n pluralEntityName: string,\n options?: InMemoryManagerOptions<R, C, F>,\n ): Manager<R, C, F> {\n columns = TableSearchHelpers.markColumnsOutsideFuseKeysUnsearchable(\n columns,\n options?.fuseOptions,\n );\n let data: R[];\n let fuse: Fuse<R>;\n\n const source: Source<R, C, F> = async (query, mostRecentAction) => {\n if (\n mostRecentAction.type === 'load' ||\n mostRecentAction.type === 'searchColumnsChange' ||\n mostRecentAction.type === 'toggleAllSearchColumns'\n ) {\n data = await fetchDataset();\n fuse = new Fuse(\n data,\n TableSearchHelpers.fuseOptionsForSearchColumns(\n options?.fuseOptions,\n columns,\n query,\n ),\n );\n }\n const orderColumn: keyof R | undefined = query.order\n ? columns.get(query.order.column)?.orderKey\n : undefined;\n const hasExplicitSort = query.order != null && orderColumn !== undefined;\n const defaultSortSpec = (() => {\n if (options?.defaultSort) {\n const key = columns.get(options.defaultSort.column)?.orderKey;\n if (key !== undefined) {\n return { key, direction: options.defaultSort.direction };\n }\n }\n const firstOrderable = [...columns.entries()].find(\n ([, meta]) => meta.orderKey != null,\n );\n const key = firstOrderable?.[1].orderKey;\n return key !== undefined ? { key, direction: 'asc' as const } : null;\n })();\n\n let ordered: R[];\n if (query.search) {\n const matches = fuse.search(query.search).map(result => result.item);\n ordered =\n hasExplicitSort && query.order\n ? TableOrderHelpers.orderEmptyLast(\n matches,\n orderColumn,\n query.order.direction,\n )\n : matches;\n } else if (hasExplicitSort && query.order) {\n ordered = TableOrderHelpers.orderEmptyLast(\n data,\n orderColumn,\n query.order.direction,\n );\n } else if (query.order == null && defaultSortSpec) {\n ordered = TableOrderHelpers.orderEmptyLast(\n data,\n defaultSortSpec.key,\n defaultSortSpec.direction,\n );\n } else {\n ordered = data;\n }\n const filter = options?.filter;\n const filtered = filter\n ? ordered.filter(row => filter(query.filters, row))\n : ordered;\n const startIdx = query.pagination.pageSize * query.pagination.page;\n const endIdx = startIdx + query.pagination.pageSize;\n const paginated = filtered.slice(startIdx, endIdx);\n return {\n currentPageData: paginated,\n totalMatchingRowCount: filtered.length,\n };\n };\n\n const columnMetadata: Map<C, ColumnMetadata> =\n TableColumnHelpers.convertInMemoryColumnMetadataMap(columns);\n\n /*\n When a defaultSort is specified, seed the initial query.order so the\n table header shows the sort indicator from the start.\n */\n options = TableOrderHelpers.seedDefaultSortOption(options);\n\n return createManager(source, columnMetadata, pluralEntityName, options);\n }\n\n export function createInMemoryManagerNested<\n R extends Row,\n C extends Column,\n F extends Filters,\n >(\n fetchDataset: () => Promise<NestedHeaderRow<R>[]> | NestedHeaderRow<R>[],\n columns: Map<C, InMemoryColumnMetadata<R>>,\n pluralEntityName: string,\n options?: InMemoryNestedManagerOptions<R, C, F>,\n ): Manager<R, C, F> {\n columns = TableSearchHelpers.markColumnsOutsideFuseKeysUnsearchable(\n columns,\n options?.fuseOptions,\n );\n let data: NestedHeaderRow<R>[];\n let rowsFromData: R[];\n // The fuse will search the individual rows\n let fuse: Fuse<R>;\n\n const source: Source<R, C, F> = async (query, mostRecentAction) => {\n if (\n mostRecentAction.type === 'load' ||\n mostRecentAction.type === 'searchColumnsChange' ||\n mostRecentAction.type === 'toggleAllSearchColumns'\n ) {\n data = await fetchDataset();\n rowsFromData = TableResultHelpers.getAllRowsFromNestedHeaders(data);\n fuse = new Fuse(\n rowsFromData,\n TableSearchHelpers.fuseOptionsForSearchColumns(\n options?.fuseOptions,\n columns,\n query,\n ),\n );\n }\n const orderColumn: keyof R | undefined = query.order\n ? columns.get(query.order.column)?.orderKey\n : undefined;\n const hasExplicitSort = query.order != null && orderColumn !== undefined;\n const defaultSortSpec = (() => {\n if (options?.defaultSort) {\n const key = columns.get(options.defaultSort.column)?.orderKey;\n if (key !== undefined) {\n return { key, direction: options.defaultSort.direction };\n }\n }\n const firstOrderable = [...columns.entries()].find(\n ([, meta]) => meta.orderKey != null,\n );\n const key = firstOrderable?.[1].orderKey;\n return key !== undefined ? { key, direction: 'asc' as const } : null;\n })();\n\n // Search, then filter, then sort\n let didRestrictDisplayedRows: boolean = false;\n\n let rowsMatchingSearch: R[] = rowsFromData;\n if (query.search) {\n rowsMatchingSearch = fuse\n .search(query.search)\n .map(result => result.item);\n\n didRestrictDisplayedRows = true;\n }\n\n let rowsMatchingFilters: R[] = rowsMatchingSearch;\n const filterToApply = options?.filter;\n if (filterToApply) {\n rowsMatchingFilters = rowsMatchingSearch.filter(row =>\n filterToApply(query.filters, row),\n );\n\n didRestrictDisplayedRows = true;\n }\n\n const nestedRowsToDisplay: NestedHeaderRow<R>[] = didRestrictDisplayedRows\n ? TableNestingHelpers.findNestedRowsWithHeadersToKeep(\n data,\n rowsMatchingFilters,\n )\n : data;\n const matchingRowCount: number = TableNestingHelpers.countNestedRows(\n nestedRowsToDisplay,\n options?.paginateBy ?? 'bottomRows',\n );\n\n let sortedNestedRows: NestedHeaderRow<R>[];\n if (hasExplicitSort && query.order) {\n // Explicit sort override has priority over everything else\n sortedNestedRows = TableOrderHelpers.sortLowLevelNestedRowsWithHeaders(\n nestedRowsToDisplay,\n orderColumn,\n query.order.direction,\n );\n } else if (query.search) {\n // Sort on the Fuse relevance order\n const idToSearchIndexMap: Map<string | number, number> =\n TableOrderHelpers.createIdToSearchIndexMap(rowsMatchingSearch);\n sortedNestedRows =\n TableOrderHelpers.sortNestedRowsWithHeadersBasedOnSearchMatches(\n nestedRowsToDisplay,\n idToSearchIndexMap,\n );\n } else if (query.order == null && defaultSortSpec) {\n // Use the default sort, if we have one\n sortedNestedRows = TableOrderHelpers.sortLowLevelNestedRowsWithHeaders(\n nestedRowsToDisplay,\n defaultSortSpec.key,\n defaultSortSpec.direction,\n );\n } else {\n // Don't sort if we have no information to use to sort\n sortedNestedRows = nestedRowsToDisplay;\n }\n\n const paginatedHeaderRows: NestedHeaderRow<R>[] =\n TablePaginationHelpers.paginateNestedHeaderRows(\n sortedNestedRows,\n query.pagination.page,\n query.pagination.pageSize,\n options?.paginateBy ?? 'bottomRows',\n );\n const hasHeaders: boolean = options?.hasNestedHeaders ?? false;\n\n return {\n currentPageNestedHeaders: paginatedHeaderRows,\n totalMatchingRowCount: matchingRowCount,\n hasHeaders: hasHeaders,\n };\n };\n\n const columnMetadata: Map<C, ColumnMetadata> =\n TableColumnHelpers.convertInMemoryColumnMetadataMap(columns);\n\n /*\n When a defaultSort is specified, seed the initial query.order so the\n table header shows the sort indicator from the start.\n */\n options = TableOrderHelpers.seedDefaultSortOption(options);\n\n return createManager(source, columnMetadata, pluralEntityName, options);\n }\n}\n\n/**\n * This function keeps the state object references as stable as possible, which\n * helps Angular reduce unnecessary re-renders. For now, simple isEqual()\n * checks at the state's top-level keys are sufficient to dramatically speed up\n * rendering, but if other performance issues arise, we could implement more\n * granular checks/surgical updates as needed (the state.result being the most\n * likely candidate, since many types of state updates affect parts of the\n * result rows).\n */\nfunction stableState<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n>(\n target: RivTable.FullState<R, C, F, G>,\n source: RivTable.FullState<R, C, F, G>,\n): RivTable.FullState<R, C, F, G> {\n if (!isEqual(target.query, source.query)) {\n target.query = source.query;\n }\n if (!isEqual(target.load, source.load)) {\n target.load = source.load;\n }\n\n if (!isEqual(target.result.csvData, source.result.csvData)) {\n target.result.csvData = source.result.csvData;\n }\n if (!isEqual(target.result.csvFilename, source.result.csvFilename)) {\n target.result.csvFilename = source.result.csvFilename;\n }\n if (\n !isEqual(\n target.result.totalMatchingRowCount,\n source.result.totalMatchingRowCount,\n )\n ) {\n target.result.totalMatchingRowCount = source.result.totalMatchingRowCount;\n }\n if (!isEqual(target.result, source.result)) {\n target.result = source.result;\n }\n if (!isEqual(target.display, source.display)) {\n target.display = source.display;\n }\n if (!isEqual(target.selection, source.selection)) {\n target.selection = source.selection;\n }\n if (!isEqual(target.collapseState, source.collapseState)) {\n target.collapseState = source.collapseState;\n }\n return target;\n}\n\nasync function* refreshResultWith<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n>(\n state: RivTable.CoreState<R, C, F, G>,\n source: RivTable.Source<R, C, F, G>,\n mostRecentAction: RivTable.Action<R, C, F, G>,\n): AsyncGenerator<{\n state: RivTable.CoreState<R, C, F, G>;\n effect: RivTable.Effect | null;\n}> {\n yield {\n state: {\n ...state,\n load: {\n loading: true,\n error: null,\n },\n },\n effect: null,\n };\n try {\n const result = await source(state.query, mostRecentAction);\n if (TablePaginationHelpers.isPageOutOfBounds(state, result)) {\n state.query.pagination.page = 0;\n }\n yield {\n state: {\n ...state,\n load: {\n loading: false,\n error: null,\n },\n result,\n },\n effect: null,\n };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n yield {\n state: {\n ...state,\n load: {\n loading: false,\n error,\n },\n },\n effect: null,\n };\n }\n}\n\nasync function* reduce<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n>(\n state: RivTable.CoreState<R, C, F, G>,\n action: RivTable.Action<R, C, F, G>,\n columns: Map<C, RivTable.ColumnMetadata>,\n source: RivTable.Source<R, C, F, G>,\n columnNameMap: RivTable.ColumnNameMap<C>,\n defaultColumnState: RivTable.ColumnSettings<C>[],\n): AsyncGenerator<{\n state: RivTable.CoreState<R, C, F, G>;\n effect: RivTable.Effect | null;\n}> {\n switch (action.type) {\n case 'load':\n yield* refreshResultWith(state, source, action);\n break;\n case 'orderChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n order: action.payload,\n },\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n },\n source,\n action,\n );\n break;\n case 'orderColumnToggle':\n yield* refreshResultWith(\n TableOrderHelpers.toggleColumnOrder(state, action.column),\n source,\n action,\n );\n break;\n case 'searchChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n search: action.payload,\n pagination: {\n ...state.query.pagination,\n page: 0,\n },\n },\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n collapseState: {\n defaultTo: 'expanded',\n collapsedHeaders: new Set(),\n collapsedRows: new Set(),\n },\n },\n source,\n action,\n );\n break;\n case 'searchColumnsChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n searchColumns: new Map([\n ...state.query.searchColumns,\n ...action.payload,\n ]),\n pagination: {\n ...state.query.pagination,\n page: 0,\n },\n },\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n collapseState: {\n defaultTo: 'expanded',\n collapsedHeaders: new Set(),\n collapsedRows: new Set(),\n },\n },\n source,\n action,\n );\n break;\n case 'paginationChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n pagination: action.payload,\n },\n },\n source,\n action,\n );\n break;\n case 'groupingChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n grouping: action.payload,\n },\n },\n source,\n action,\n );\n break;\n case 'previousPageNavigate':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n pagination: {\n ...state.query.pagination,\n page: TablePaginationHelpers.getPreviousPage(state) ?? 0,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'nextPageNavigate':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n pagination: {\n ...state.query.pagination,\n page:\n TablePaginationHelpers.getNextPage(state) ??\n TablePaginationHelpers.getPageCount(state) - 1,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'pageChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n pagination: {\n ...state.query.pagination,\n page: action.page,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'pageSizeChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n pagination: {\n ...state.query.pagination,\n pageSize: action.size,\n page: 0,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'filtersChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n filters: action.payload,\n pagination: {\n ...state.query.pagination,\n page: 0,\n },\n },\n selection: {\n mostRecentlySelected: null,\n mode: 'include',\n included: new Set(),\n },\n collapseState: {\n defaultTo: 'expanded',\n collapsedHeaders: new Set(),\n collapsedRows: new Set(),\n },\n },\n source,\n action,\n );\n break;\n case 'filterAdd':\n // Parent component is responsible for subscribing and adding the filter\n yield { state: { ...state }, effect: null };\n break;\n case 'columnSettingsChange':\n yield {\n state: {\n ...state,\n display: {\n ...state.display,\n columnSettings: action.payload,\n },\n },\n // do not output changes when triggered from the outside world\n effect: null,\n };\n break;\n case 'columnPinChange':\n yield {\n state: TableColumnHelpers.changeColumnPin(\n state,\n columns,\n columnNameMap,\n action.column,\n action.pinned,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'columnsFreezeUpToChange':\n yield {\n state: TableColumnHelpers.changeColumnsFreezeState(\n state,\n columns,\n columnNameMap,\n action.index,\n action.freeze,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'columnOrderChange':\n yield {\n state: TableColumnHelpers.changeColumnOrder(\n state,\n columns,\n columnNameMap,\n action.previousIndex,\n action.newIndex,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'columnMoveToChange':\n yield {\n state: TableColumnHelpers.moveColumnTo(\n state,\n columns,\n columnNameMap,\n action.column,\n action.position,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'columnEnabledChange':\n yield {\n state: TableColumnHelpers.changeColumnEnabled(\n state,\n columns,\n columnNameMap,\n action.column,\n action.enabled,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'enableAllColumnsChange':\n yield {\n state: TableColumnHelpers.enableAllColumns(\n state,\n columns,\n columnNameMap,\n action.enabled,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'columnWidthChange':\n yield {\n state: TableColumnHelpers.changeColumnWidth(\n state,\n columns,\n columnNameMap,\n action.column,\n action.preferredWidth,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'resetToDefaultColumns':\n yield {\n state: TableColumnHelpers.resetToDefaultColumns(\n state,\n columns,\n columnNameMap,\n defaultColumnState,\n ),\n effect: 'saveColumnPreferences',\n };\n break;\n case 'selectionChange':\n yield {\n state: {\n ...state,\n selection: action.payload,\n },\n effect: null,\n };\n break;\n case 'rowSelectedChange':\n yield {\n state: TableSelectionHelpers.setRowSelected(\n state,\n action.id,\n action.selected,\n action.contiguous,\n ),\n effect: null,\n };\n break;\n case 'pageSelectedChange':\n yield {\n state: TableSelectionHelpers.togglePageSelected(state),\n effect: null,\n };\n break;\n case 'allSelectedChange':\n yield {\n state: TableSelectionHelpers.toggleAllSelected(state),\n effect: null,\n };\n break;\n case 'selectionClear':\n yield {\n state: TableSelectionHelpers.clearSelection(state),\n effect: null,\n };\n break;\n case 'groupSelectionChange':\n yield {\n state: TableSelectionHelpers.toggleGroupSelected(state, action.payload),\n effect: null,\n };\n break;\n case 'groupsPerPageChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n grouping: {\n ...state.query.grouping,\n groupsPerPage: action.groupsPerPage,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'countPerGroupChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n grouping: {\n ...state.query.grouping,\n countPerGroup: action.countPerGroup,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'viewMoreKeyChange':\n yield* refreshResultWith(\n {\n ...state,\n query: {\n ...state.query,\n grouping: {\n ...state.query.grouping,\n viewMoreKey: action.viewMoreKey,\n },\n },\n },\n source,\n action,\n );\n break;\n case 'toggleAllSearchColumns':\n yield* refreshResultWith(\n TableSearchHelpers.toggleAllSearchColumns(state),\n source,\n action,\n );\n break;\n case 'toggleRowCollapse':\n yield {\n state: TableCollapseHelpers.toggleRowCollapse(state, action.id),\n effect: null,\n };\n break;\n case 'toggleHeaderCollapse':\n yield {\n state: TableCollapseHelpers.toggleHeaderCollapse(state, action.id),\n effect: null,\n };\n break;\n case 'toggleAllCollapsed':\n yield {\n state: TableCollapseHelpers.toggleAllCollapsed(state),\n effect: null,\n };\n break;\n }\n}\n","export type Cell = {\n rowspan: number;\n colspan: number;\n};\n\nexport type Coordinate = {\n row: number;\n col: number;\n};\n\nexport type Bounds = {\n start: Coordinate;\n end: Coordinate;\n};\n\nexport function createCellCoordinateCalculator(\n cells: Cell[],\n totalColumns: number,\n): (cellIndex: number) => Bounds {\n // Pre-calculate coordinates for all cells\n const cellCoordinates: Bounds[] = [];\n const grid: boolean[][] = [];\n let currentRow = 0;\n let currentCol = 0;\n\n // Process each cell and store its coordinates\n for (let i = 0; i < cells.length; i++) {\n const { rowspan, colspan } = cells[i];\n\n // Find the next available position\n while (true) {\n // Ensure we have enough rows in our grid\n while (grid.length <= currentRow) {\n grid.push(new Array(totalColumns).fill(false));\n }\n\n // Check if current position is available\n if (!grid[currentRow][currentCol]) {\n break;\n }\n\n // Move to next column\n currentCol++;\n if (currentCol >= totalColumns) {\n currentCol = 0;\n currentRow++;\n }\n }\n\n // Store coordinates for this cell\n const startCoord: Coordinate = { row: currentRow, col: currentCol };\n const endCoord: Coordinate = {\n row: currentRow + rowspan - 1,\n col: currentCol + colspan - 1,\n };\n\n cellCoordinates[i] = { start: startCoord, end: endCoord };\n\n // Mark the positions this cell occupies as taken\n for (let r = currentRow; r < currentRow + rowspan; r++) {\n // Ensure we have enough rows\n while (grid.length <= r) {\n grid.push(new Array(totalColumns).fill(false));\n }\n\n for (let c = currentCol; c < currentCol + colspan; c++) {\n if (c < totalColumns) {\n grid[r][c] = true;\n }\n }\n }\n\n // Move to next position for the next cell\n currentCol++;\n if (currentCol >= totalColumns) {\n currentCol = 0;\n currentRow++;\n }\n }\n\n // Return the lookup function\n return function getCellCoordinates(cellIndex: number): Bounds {\n if (cellIndex < 0 || cellIndex >= cells.length) {\n throw new Error('Cell index out of bounds');\n }\n\n return cellCoordinates[cellIndex];\n };\n}\n","import {\n AfterContentChecked,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n TemplateRef,\n} from '@angular/core';\nimport { RivTable } from '../table/state';\nimport { createCellCoordinateCalculator } from './coordinate-helper';\nimport { SimpleTableCellComponent } from './simple-table-cell.component';\nimport { SimpleTableHeaderCellComponent } from './simple-table-header-cell.component';\nimport { TableColumnHelpers } from '../table/state-helpers/column-helpers';\n\n@Component({\n selector: 'riv-simple-table',\n templateUrl: './simple-table.component.html',\n styleUrls: ['./simple-table.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SimpleTableComponent implements AfterContentChecked {\n @ContentChild('header')\n headerTemplate?: TemplateRef<void>;\n\n @ContentChildren(SimpleTableHeaderCellComponent, { descendants: true })\n private headerCells?: QueryList<SimpleTableHeaderCellComponent>;\n\n @ContentChildren(SimpleTableCellComponent, { descendants: true })\n private dataCells?: QueryList<SimpleTableCellComponent>;\n\n ngAfterContentChecked() {\n this.setCellProperties();\n }\n\n private setCellProperties() {\n const { headerCells, dataCells } = this;\n if (!headerCells || !dataCells) return;\n\n let runningWidthTotal = 0;\n headerCells.forEach((headerCell, i) => {\n const { dataType } = headerCell;\n if (!dataType) {\n const allowedTypes = RivTable.ColumnDataTypes.join(', ');\n throw new Error(\n `Each header cell must define an appropriate dataType, one of ${allowedTypes}`,\n );\n }\n\n const newAlignment = TableColumnHelpers.getColumnAlignment(\n dataType,\n i === 0,\n );\n const newLeftPinOffset = runningWidthTotal;\n runningWidthTotal += headerCell.width;\n\n const changed =\n headerCell.alignment != newAlignment ||\n headerCell.leftPinOffset != newLeftPinOffset;\n headerCell.alignment = newAlignment;\n headerCell.leftPinOffset = newLeftPinOffset;\n\n // Only mark for check when changed to prevent infinite cycles\n if (changed) {\n queueMicrotask(() => {\n headerCell.cdr.markForCheck();\n });\n }\n });\n\n const cellSpanData = dataCells.map(dataCell => {\n const element = dataCell.elementRef.nativeElement;\n return {\n rowspan: parseInt(element.getAttribute('rowspan') || '1', 10),\n colspan: parseInt(element.getAttribute('colspan') || '1', 10),\n };\n });\n\n // When there are no header cells, calculate totalColumns from the first <tr>\n let totalColumns = headerCells.length;\n if (totalColumns === 0 && dataCells.length > 0) {\n const firstRow = dataCells.first?.elementRef.nativeElement.parentElement;\n if (firstRow) {\n // Count td elements in the first row and sum their colspans\n const cellsInFirstRow = Array.from(\n firstRow.querySelectorAll('td[riv-simple-table-cell]'),\n );\n totalColumns = cellsInFirstRow.reduce((sum, cell) => {\n const colspan = parseInt(cell.getAttribute('colspan') || '1', 10);\n return sum + colspan;\n }, 0);\n }\n // Fallback to 1 if we couldn't determine\n if (totalColumns === 0) {\n totalColumns = 1;\n }\n }\n\n const getCellCoordinates = createCellCoordinateCalculator(\n cellSpanData,\n totalColumns,\n );\n\n const maxRow = Math.max(\n ...dataCells.map((_, i) => getCellCoordinates(i).end.row),\n );\n\n dataCells.forEach((dataCell, cellIndex) => {\n const bounds = getCellCoordinates(cellIndex);\n\n const headerCell = headerCells.get(bounds.start.col);\n let changed = false;\n if (headerCell) {\n changed =\n dataCell.alignment != headerCell.alignment ||\n dataCell.pinned != headerCell.pinned ||\n dataCell.leftPinOffset != headerCell.leftPinOffset;\n\n dataCell.alignment = headerCell.alignment;\n dataCell.pinned = headerCell.pinned;\n dataCell.leftPinOffset = headerCell.leftPinOffset;\n }\n\n const newIsLastRow = bounds.end.row === maxRow;\n changed = changed || dataCell.isLastRow != newIsLastRow;\n dataCell.isLastRow = newIsLastRow;\n\n // Only mark for check when changed to prevent infinite cycles\n if (changed) {\n queueMicrotask(() => {\n dataCell.cdr.markForCheck();\n });\n }\n });\n }\n}\n","<div class=\"header\" *ngIf=\"headerTemplate\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n</div>\n<div class=\"container\" tabindex=\"0\">\n <table>\n <ng-content></ng-content>\n </table>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { RivTable } from '../state';\nimport { TableCollapseHelpers } from '../state-helpers/collapse-helpers';\n\n@Component({\n selector: 'riv-table-collapse-all',\n templateUrl: './table-collapse-all.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableCollapseAllComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group,\n> {\n @Input()\n manager?: RivTable.Manager<R, C, F, G>;\n\n constructor() {}\n\n toggleAllCollapsed() {\n this.manager?.actions.next({\n type: 'toggleAllCollapsed',\n });\n }\n\n isAllExpanded(collapseState: RivTable.CollapseState<R>) {\n return TableCollapseHelpers.isAllExpanded(collapseState);\n }\n}\n","<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","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport Fuse from 'fuse.js';\nimport { BehaviorSubject, combineLatest, map, Observable } from 'rxjs';\nimport { RivSelect } from '../../../input/select/state';\nimport { RivTable } from '../state';\nimport { TableColumnHelpers } from '../state-helpers/column-helpers';\n\ntype ColumnGroups<C extends RivTable.Column> = {\n enabledColumns: TableColumnHelpers.ColumnList<C>;\n disabledColumns: TableColumnHelpers.ColumnList<C>;\n unavailableColumns: TableColumnHelpers.ColumnList<C>;\n unavailableFolderTitle: string;\n};\n\n@Component({\n selector: 'riv-table-column-settings-side-sheet',\n templateUrl: './table-column-settings-side-sheet.component.html',\n styleUrls: ['./table-column-settings-side-sheet.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableColumnSettingsSideSheetComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n> implements OnInit, OnDestroy\n{\n @Input()\n manager?: RivTable.Manager<R, C, F>;\n\n @ViewChild('trigger', { read: ElementRef })\n anchor?: ElementRef;\n\n readonly open = new BehaviorSubject(false);\n\n readonly filterQuery = new BehaviorSubject('');\n\n readonly searching = this.filterQuery.pipe(map(query => !!query));\n\n columnList?: Observable<ColumnGroups<C>>;\n\n maxEnabledColumns: number = RivTable.ColumnsMaxShown;\n\n ngOnInit() {\n this.columnList = combineLatest([\n this.manager!.state.pipe(\n map(s => {\n const allColumns: TableColumnHelpers.ColumnList<C> =\n TableColumnHelpers.getColumnSettingsColumnList(s);\n\n const fuse = new Fuse(allColumns, {\n keys: ['resolvedName'],\n ignoreLocation: true,\n threshold: 0,\n includeMatches: true,\n });\n\n const unavailableColumns: TableColumnHelpers.ColumnList<C> =\n TableColumnHelpers.createUnavailableColumns(\n s.display.unavailableColumnKeys,\n );\n const unavailableFolderTitle: string =\n s.display.unavailableFolderTitle;\n\n return {\n fuse,\n allColumns,\n unavailableColumns,\n unavailableFolderTitle,\n };\n }),\n ),\n this.filterQuery,\n ]).pipe(\n map(\n ([\n { fuse, allColumns, unavailableColumns, unavailableFolderTitle },\n filterQuery,\n ]) => {\n if (filterQuery) {\n const matches = fuse.search(filterQuery).map(match => {\n const firstmatch = match.matches?.find(\n result => result.key === 'resolvedName',\n );\n return {\n ...match.item,\n highlightIndices: [\n ...(firstmatch?.indices || []).filter(\n RivSelect.isFuseMatchExact(firstmatch!, filterQuery),\n ),\n ],\n };\n });\n const enabledColumns = matches.filter(column => column.enabled);\n const disabledColumns = matches.filter(column => !column.enabled);\n\n return {\n enabledColumns,\n disabledColumns,\n unavailableColumns: unavailableColumns,\n unavailableFolderTitle: unavailableFolderTitle,\n };\n }\n\n const allVisibleColumns = allColumns.map(column => ({\n ...column,\n highlightIndices: [],\n }));\n\n const enabledColumns = allVisibleColumns.filter(\n column => column.enabled,\n );\n const disabledColumns = allVisibleColumns.filter(\n column => !column.enabled,\n );\n\n return {\n enabledColumns: enabledColumns,\n disabledColumns: disabledColumns,\n unavailableColumns: unavailableColumns,\n unavailableFolderTitle: unavailableFolderTitle,\n };\n },\n ),\n );\n\n document.addEventListener('dragover', this.handleDragOver);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('dragover', this.handleDragOver);\n }\n\n // We only care about when we have entered a drop zone for applying our visual\n // treatment. However, in order to trigger the drop event, you must call preventDefault\n // on the dragover. We are handling this natively on the document, outside of angular\n // as a performance optimization. If we have a draggedOverColumnIdx and we drag over an\n // element with class drop-zone, we will assume you want to the drop element enabled\n // and we will preventDefault.\n handleDragOver = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n if (this.draggedOverColumnIdx != null && target.closest('.drop-zone')) {\n event.preventDefault();\n }\n };\n\n columnEnabledChange(\n column: RivTable.ColumnSettings<C>,\n enabled: boolean,\n source: 'optionsMenu' | 'eyeIcon',\n ) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: column.key,\n enabled,\n source,\n });\n }\n\n columnPinChange(column: RivTable.ColumnSettings<C>, pinned: boolean) {\n this.manager?.actions.next({\n type: 'columnPinChange',\n column: column.key,\n pinned,\n });\n }\n resetToDefault() {\n this.manager?.actions.next({\n type: 'resetToDefaultColumns',\n });\n }\n\n columnMoveTo(column: RivTable.ColumnSettings<C>, position: 'start' | 'end') {\n this.manager?.actions.next({\n type: 'columnMoveToChange',\n position,\n column: column.key,\n });\n }\n\n columnFreezeUpTo(\n freeze: boolean,\n index: number,\n source: 'freezeDivider' | 'optionsMenu',\n column?: C,\n ) {\n this.manager?.actions.next({\n type: 'columnsFreezeUpToChange',\n freeze,\n index,\n source,\n column,\n });\n }\n\n allColumnsDisabled(columns: ColumnGroups<C>): boolean {\n return (\n columns.disabledColumns.length == 0 && columns.enabledColumns.length > 0\n );\n }\n\n allColumnsEnabled(columns: ColumnGroups<C>): boolean {\n return (\n columns.enabledColumns.length == 0 && columns.disabledColumns.length > 0\n );\n }\n\n showAllColumnsVisible(columns: ColumnGroups<C>): boolean {\n return (\n columns.enabledColumns.length + columns.disabledColumns.length <=\n this.maxEnabledColumns\n );\n }\n\n disableEnablingColumn(\n column: RivTable.ColumnSettings<C>,\n columns: ColumnGroups<C>,\n ): boolean {\n return !column.enabled && this.disableEnablingColumns(columns);\n }\n\n disableEnablingColumns(columns: ColumnGroups<C>): boolean {\n return columns.enabledColumns.length >= this.maxEnabledColumns;\n }\n\n iconLimitTooltip(): string {\n return `Our tables support ${this.maxEnabledColumns} visible columns. Consider hiding some of your current columns to add anything new.`;\n }\n\n limitTooltip(): string {\n return `You’ve reached the ${this.maxEnabledColumns}-column limit. Hide a visible column to show this one.`;\n }\n\n enableAllColumns(enabled: boolean) {\n this.manager?.actions.next({\n type: 'enableAllColumnsChange',\n enabled,\n });\n }\n\n draggedColumnIdx: number | null = null;\n draggedColumnKey: C | null = null;\n draggedOverColumnIdx: number | null = null;\n\n dragStart(idx: number, key: C) {\n this.draggedColumnIdx = idx;\n this.draggedColumnKey = key;\n }\n\n dragOver(ontoIdx: number) {\n this.draggedOverColumnIdx = ontoIdx;\n }\n\n drop(\n ontoIdx: number,\n stateIndex: number,\n enabled: boolean,\n enabledColumnCount: number,\n ) {\n if (this.draggedColumnIdx !== null) {\n this.manager?.actions.next({\n type: 'columnOrderChange',\n previousIndex: this.draggedColumnIdx,\n newIndex: stateIndex,\n source: 'menuDrag',\n column: this.draggedColumnKey || undefined,\n });\n this.dropEnabledState(enabled, enabledColumnCount);\n\n this.draggedOverColumnIdx = null;\n this.draggedColumnKey = null;\n }\n }\n\n dropEnabledState(enabled: boolean, enabledColumnCount: number) {\n if (this.draggedColumnKey !== null && this.draggedColumnIdx !== null) {\n const isEnabled = enabledColumnCount > this.draggedColumnIdx;\n const shouldFire = enabled ? !isEnabled : isEnabled;\n if (shouldFire) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: this.draggedColumnKey,\n enabled: enabled,\n source: 'dragDrop',\n });\n }\n\n this.draggedOverColumnIdx = null;\n this.draggedColumnKey = null;\n }\n }\n\n disabledColumnsWithOffset(index: number) {\n return index;\n }\n\n hasDisabledColumnsSection(columns: ColumnGroups<C>) {\n return columns.disabledColumns.length > 0;\n }\n\n hasEnabledColumnsSection(columns: ColumnGroups<C>) {\n return columns.enabledColumns.length > 0;\n }\n\n hasNoColumnsShownSection(columns: ColumnGroups<C>, searching: boolean) {\n return columns.enabledColumns.length === 0 && searching === false;\n }\n\n hasUnavailableColumnsSection(columns: ColumnGroups<C>, searching: boolean) {\n return columns.unavailableColumns.length > 0 && searching === false;\n }\n\n unavailableFolderCollapsed: boolean = false;\n}\n","<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","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport Fuse from 'fuse.js';\nimport { BehaviorSubject, combineLatest, map, Observable } from 'rxjs';\nimport { HighlightComponent } from '../../../visualization/highlight/highlight.component';\nimport { RivTable } from '../state';\n\ntype ColumnList<C extends RivTable.Column> = (RivTable.ColumnSettings<C> & {\n resolvedName: C | string;\n highlightIndices: HighlightComponent.HighlightIndices[];\n})[];\n\n@Component({\n selector: 'riv-table-column-settings',\n templateUrl: './table-column-settings.component.html',\n styleUrls: ['./table-column-settings.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableColumnSettingsComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n> implements OnInit\n{\n @Input()\n manager?: RivTable.Manager<R, C, F>;\n\n @ViewChild('trigger', { read: ElementRef })\n anchor?: ElementRef;\n\n readonly open = new BehaviorSubject(false);\n\n readonly filterQuery = new BehaviorSubject('');\n\n readonly searching = this.filterQuery.pipe(map(query => !!query));\n\n columnList?: Observable<ColumnList<C>>;\n\n maxEnabledColumns: number = RivTable.ColumnsMaxShown;\n\n ngOnInit() {\n this.columnList = combineLatest([\n this.manager!.state.pipe(\n map(s => {\n const allColumns = s.display.allColumns.map(column => ({\n ...column,\n resolvedName: s.display.columnNameMap.get(column.key) ?? column.key,\n }));\n const fuse = new Fuse(allColumns, {\n keys: ['resolvedName'],\n includeMatches: true,\n threshold: 0.4,\n });\n return { fuse, allColumns };\n }),\n ),\n this.filterQuery,\n ]).pipe(\n map(([{ fuse, allColumns }, filterQuery]) => {\n if (filterQuery) {\n const matches = fuse.search(filterQuery);\n return matches.map(match => ({\n ...match.item,\n highlightIndices: [\n ...(match.matches?.find(result => result.key === 'resolvedName')\n ?.indices || []),\n ],\n }));\n }\n return allColumns.map(column => ({\n ...column,\n highlightIndices: [],\n }));\n }),\n );\n }\n\n columnEnabledChange(column: RivTable.ColumnSettings<C>, enabled: boolean) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: column.key,\n enabled,\n });\n }\n\n columnPinChange(column: RivTable.ColumnSettings<C>, pinned: boolean) {\n this.manager?.actions.next({\n type: 'columnPinChange',\n column: column.key,\n pinned,\n });\n }\n\n allColumnsDisabled(columns: ColumnList<C>): boolean {\n return columns.every(c => !c.enabled);\n }\n\n disableAllColumns(columns: ColumnList<C>) {\n for (const column of columns) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: column.key,\n enabled: false,\n });\n }\n }\n\n allColumnsEnabled(columns: ColumnList<C>): boolean {\n return columns.every(c => c.enabled);\n }\n\n enableAllColumns(columns: ColumnList<C>) {\n for (const column of columns) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: column.key,\n enabled: true,\n });\n }\n }\n\n showSelectAllColumns(columns: ColumnList<C>): boolean {\n return columns.length <= this.maxEnabledColumns;\n }\n\n disableEnablingColumn(\n column: RivTable.ColumnSettings<C>,\n columns: ColumnList<C>,\n ): boolean {\n return !column.enabled && this.disableColumnSelection(columns);\n }\n\n disableColumnSelection(columns: ColumnList<C>): boolean {\n const enabledCount = columns.filter(c => c.enabled).length;\n return enabledCount >= this.maxEnabledColumns;\n }\n\n limitTooltip(): string {\n return `You’ve reached the ${this.maxEnabledColumns}-column limit. Hide a visible column to show this one.`;\n }\n\n draggedColumnIdx: number | null = null;\n draggedOverColumnIdx: number | null = null;\n\n dragStart(idx: number) {\n this.draggedColumnIdx = idx;\n }\n\n dragOver(ontoIdx: number) {\n this.draggedOverColumnIdx = ontoIdx;\n }\n\n drop(ontoIdx: number) {\n if (this.draggedColumnIdx !== null) {\n this.manager?.actions.next({\n type: 'columnOrderChange',\n previousIndex: this.draggedColumnIdx,\n newIndex: ontoIdx,\n });\n this.draggedOverColumnIdx = null;\n }\n }\n}\n","<button\n type=\"button\"\n #trigger\n rivButton\n [icon]=\"(open | async) ? 'ChevronUp' : 'ChevronDown'\"\n [iconPosition]=\"'last'\"\n (click)=\"open.next(true)\"\n>\n Columns\n</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"anchor?.nativeElement\"\n [isModal]=\"true\"\n [showCaret]=\"false\"\n [theme]=\"'light'\"\n [preferredPosition]=\"'bottom-right'\"\n [allowedPositions]=\"[\n 'bottom-right',\n 'bottom-left',\n 'top-left',\n 'top-right'\n ]\"\n (close)=\"open.next(false)\"\n >\n <input\n #filter\n class=\"filter\"\n [placeholder]=\"'Search columns'\"\n [value]=\"filterQuery | async\"\n (input)=\"filterQuery.next(filter.value)\"\n [riv-auto-focus]=\"true\"\n />\n <div class=\"column-list\">\n <div\n class=\"column\"\n *ngFor=\"let column of columns; let i = index\"\n [attr.draggable]=\"\n (searching | async) === false &&\n !disableEnablingColumn(column, columns)\n \"\n [attr.droppable]=\"\n (searching | async) === false &&\n !disableEnablingColumn(column, columns)\n \"\n (dragstart)=\"dragStart(i)\"\n (dragenter)=\"$event.preventDefault()\"\n (dragover)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i)\"\n [class.dragged-over-top]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i\n \"\n [class.dragged-over-bottom]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i\n \"\n >\n <riv-checkbox\n [value]=\"column.enabled\"\n (valueChange)=\"columnEnabledChange(column, $event)\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n [checkboxTooltip]=\"\n disableEnablingColumn(column, columns)\n ? limitTooltip()\n : undefined\n \"\n >\n <riv-highlight\n [text]=\"column.resolvedName\"\n [indices]=\"column.highlightIndices\"\n ></riv-highlight>\n </riv-checkbox>\n <span\n class=\"reorder\"\n *ngIf=\"(searching | async) === false\"\n [class.disabled]=\"disableEnablingColumn(column, columns)\"\n >\n <riv-icon [name]=\"'Reorder'\" [size]=\"12\"></riv-icon>\n </span>\n <button\n type=\"button\"\n rivButton\n [variant]=\"'ghost'\"\n [size]=\"'xsmall'\"\n [icon]=\"column.pinned ? 'PinActive' : 'PinInactive'\"\n [disabled]=\"disableEnablingColumn(column, columns)\"\n (click)=\"columnPinChange(column, !column.pinned)\"\n ></button>\n </div>\n </div>\n <footer *ngIf=\"(searching | async) === false\">\n <button\n type=\"button\"\n rivButton\n [size]=\"'xsmall'\"\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsDisabled(columns)\"\n (click)=\"disableAllColumns(columns)\"\n >\n Clear\n </button>\n <button\n type=\"button\"\n rivButton\n *ngIf=\"showSelectAllColumns(columns)\"\n [size]=\"'xsmall'\"\n [variant]=\"'ghost'\"\n [disabled]=\"allColumnsEnabled(columns)\"\n (click)=\"enableAllColumns(columns)\"\n >\n Select all\n </button>\n </footer>\n </riv-callout>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n} from '@angular/core';\nimport * as p from 'papaparse';\nimport { DownloadService } from '../../../download/download.service';\nimport { RivTable } from '../state';\n\n@Component({\n selector: 'riv-table-csv-export',\n templateUrl: './table-csv-export.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableCsvExportComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n> {\n @Input()\n manager?: RivTable.Manager<R, C, F>;\n\n constructor(\n private readonly downloadService: DownloadService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n loading = false;\n\n async downloadCsv(state: RivTable.FullState<R, C, F>) {\n for await (const output of state.result.csvData()) {\n if (!output.data) {\n this.loading = true;\n } else {\n await this.downloadService.downloadBlob(\n new Blob([p.unparse(output.data)], { type: 'text/csv' }),\n state.result.csvFilename,\n );\n this.loading = false;\n }\n this.cdr.markForCheck();\n }\n }\n}\n","<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"'Export CSV'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n >\n Export\n </button>\n</ng-container>\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Output,\n} from '@angular/core';\nimport {\n concatWith,\n distinctUntilChanged,\n fromEvent,\n map,\n Observable,\n of,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs';\n\n@Component({\n selector: 'riv-table-header-resize-handle',\n templateUrl: './table-header-resize-handle.component.html',\n styleUrls: ['./table-header-resize-handle.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableHeaderResizeHandleComponent {\n constructor(\n private readonly elementRef: ElementRef,\n @Inject(DOCUMENT) private readonly documentRef: Document,\n ) {}\n\n @Output()\n readonly dragResize: Observable<number | null> = fromEvent<MouseEvent>(\n this.elementRef.nativeElement,\n 'mousedown',\n ).pipe(\n tap(evt => evt.preventDefault()),\n switchMap(() => {\n const { width, right } = this.elementRef.nativeElement\n .closest('th')!\n .getBoundingClientRect();\n\n return fromEvent<MouseEvent>(this.documentRef, 'mousemove').pipe(\n map(({ clientX }) => width + clientX - right),\n distinctUntilChanged(),\n takeUntil(fromEvent(this.documentRef, 'mouseup')),\n concatWith(of(null)), // signal that the user is done working\n );\n }),\n );\n}\n","","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { RivSelect } from '../../../input/select/state';\nimport { RivTable } from '../state';\n\ntype SearchableColumn = RivSelect.BaseOption & {\n searchEnabled: boolean;\n};\n\n@Component({\n selector: 'riv-table-search-columns',\n templateUrl: './table-search-columns.component.html',\n styleUrls: ['./table-search-columns.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableSearchColumnsComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n> implements OnInit\n{\n public readonly open = new BehaviorSubject<boolean>(false);\n\n @Input()\n manager?: RivTable.Manager<R, C, F>;\n\n @Input()\n disabled: boolean = false;\n\n columnList?: Observable<{\n activeSearchColumns: SearchableColumn[];\n hiddenSearchColumns: SearchableColumn[];\n searchEnabledCount: number;\n }>;\n\n ngOnInit() {\n this.columnList = this.manager!.state.pipe(\n map(s => {\n const makeNode = (column: RivTable.ColumnSettings<C>) => ({\n id: column.key,\n title: s.display.columnNameMap.get(column.key) ?? column.key,\n searchEnabled: !!s.query.searchColumns.get(column.key),\n });\n const activeColumns = s.display.allColumns\n .filter(c => s.display.searchableColumnMap.get(c.key) && c.enabled)\n .map(makeNode);\n const hiddenColumns = s.display.allColumns\n .filter(c => s.display.searchableColumnMap.get(c.key) && !c.enabled)\n .map(makeNode);\n\n const searchEnabledCount =\n activeColumns.filter(c => c.searchEnabled).length +\n hiddenColumns.filter(c => c.searchEnabled).length;\n\n return {\n activeSearchColumns: activeColumns,\n hiddenSearchColumns: hiddenColumns,\n searchEnabledCount: searchEnabledCount,\n };\n }),\n );\n }\n\n updateColumns(column: string, active: boolean) {\n const payload = new Map();\n payload.set(column, active);\n this.manager?.actions.next({\n type: 'searchColumnsChange',\n payload,\n });\n }\n}\n","<ng-container *ngIf=\"columnList | async; let s\">\n <button\n type=\"button\"\n #trigger\n class=\"trigger-button\"\n (click)=\"open.next(true)\"\n >\n <riv-icon [name]=\"'MoreVertical'\" [size]=\"16\"></riv-icon>\n </button>\n <ng-container *ngIf=\"open | async\">\n <riv-callout\n *riv-overlay\n [anchor]=\"trigger\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-left'\"\n [theme]=\"'light'\"\n (close)=\"open.next(false)\"\n >\n <div class=\"content-body\">\n <div class=\"header-container\">\n <riv-help\n [size]=\"12\"\n [help]=\"'Toggle which columns are included in table search results'\"\n ></riv-help\n ><span class=\"header-text\">Search in</span>\n </div>\n\n <ng-container\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.activeSearchColumns }\"\n ></ng-container>\n\n <div *ngIf=\"s.hiddenSearchColumns.length > 0\" class=\"column-header\">\n Hidden columns\n </div>\n\n <ng-container\n *ngIf=\"s.hiddenSearchColumns.length > 0\"\n [ngTemplateOutlet]=\"optionList\"\n [ngTemplateOutletContext]=\"{ columns: s.hiddenSearchColumns }\"\n ></ng-container>\n\n <ng-template #optionList let-columns=\"columns\">\n <ng-container *ngFor=\"let column of columns\">\n <ng-container\n [ngTemplateOutlet]=\"option\"\n [ngTemplateOutletContext]=\"{ node: column }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template #option let-node=\"node\">\n <div class=\"node-container\">\n <span class=\"node-text\">{{ node.title }}</span>\n <riv-switch-checkbox\n [size]=\"'small'\"\n [value]=\"node.searchEnabled\"\n [disabled]=\"s.searchEnabledCount === 1 && node.searchEnabled\"\n [rivTooltip]=\"\n s.searchEnabledCount === 1 && node.searchEnabled\n ? 'At least one search field is required'\n : undefined\n \"\n (valueChange)=\"updateColumns(node.id, $event)\"\n ></riv-switch-checkbox>\n </div>\n </ng-template>\n </div>\n </riv-callout>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { debounce, take } from 'lodash';\nimport { RivTable } from '../state';\nimport { distinctUntilChanged, map, Subject, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'riv-table-search',\n templateUrl: './table-search.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableSearchComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n> implements OnInit, OnDestroy\n{\n @Input()\n manager?: RivTable.Manager<R, C, F>;\n\n @Input()\n name: string = 'table-search';\n\n @Input()\n disabled: boolean = false;\n\n @Input()\n searchColumns: boolean = false;\n\n search = debounce((query: string) => {\n if (this.tableLoading) {\n this.searchingWhileLoading = true;\n return;\n }\n this.manager?.actions.next({ type: 'searchChange', payload: query });\n }, 300);\n\n _searchTerm: string = '';\n\n get searchTerm(): string {\n return this._searchTerm;\n }\n\n set searchTerm(value: string) {\n this._searchTerm = value;\n this.search(value);\n }\n\n searchingWhileLoading = false;\n tableLoading = false;\n destroy = new Subject<void>();\n\n ngOnInit() {\n this.manager?.state\n .pipe(\n map(s => s.load.loading),\n distinctUntilChanged(),\n takeUntil(this.destroy),\n )\n .subscribe(loading => {\n this.tableLoading = loading;\n if (!loading && this.searchingWhileLoading) {\n this.searchingWhileLoading = false;\n this.manager?.actions.next({\n type: 'searchChange',\n payload: this.searchTerm,\n });\n }\n });\n\n this.manager?.state\n .pipe(\n map(s => s.query.search),\n distinctUntilChanged(),\n takeUntil(this.destroy),\n )\n .subscribe(s => {\n if (this.searchTerm == '' && s != '') {\n this.searchTerm = s;\n }\n });\n }\n\n ngOnDestroy() {\n this.destroy.next();\n this.destroy.complete();\n }\n}\n","<riv-search\n [name]=\"name\"\n [disabled]=\"disabled\"\n [value]=\"searchTerm\"\n (valueChange)=\"searchTerm = $event\"\n [labelTemplate]=\"searchColumns ? labelTemplate : undefined\"\n></riv-search>\n<ng-template #labelTemplate\n ><riv-table-search-columns [manager]=\"manager\"></riv-table-search-columns\n></ng-template>\n","import { sumBy } from 'lodash';\n\n/**\n * Clipboard serialization for `riv-table`.\n *\n * Rows that have a link render as `<a class=\"row-link\">` rather than `<tr>`, and\n * the browser's clipboard serializer does not treat those as table rows — the\n * copied content pastes into a spreadsheet as one lateral run instead of a grid.\n * These helpers rebuild the rendered grid so that copied content pastes as rows\n * and columns.\n */\nexport namespace RivTableClipboard {\n /** Cells that hold controls rather than data. */\n const controlCellSelector =\n 'th.selection-head, th.menu-head, td.selection-body, td.menu-body';\n\n /** The column name within a header cell; the rest of the cell is controls. */\n const headerLabelSelector = '.header-wrapper';\n\n /** Elements whose text exists for assistive technology only. */\n const assistiveTextSelector = 'riv-sr-only';\n\n /** Rows that stand in for data rather than carrying it. */\n const fillerRowSelector = 'riv-zero-state';\n\n /** Elements that own their own clipboard behavior. */\n const editableSelector =\n 'input, textarea, select, [contenteditable=\"\"], [contenteditable=\"true\"]';\n\n export type Payload = {\n /** Tab-delimited rows, one line per row. */\n text: string;\n /** Equivalent table markup, for targets that prefer rich content. */\n html: string;\n };\n\n /** Predicate for whether a node falls within the user's selection. */\n export type SelectionTest = (node: Node) => boolean;\n\n /** A rendered row, holding the cell occupying each data column. */\n type Row = readonly (Element | undefined)[];\n\n type Layout = {\n header: readonly Row[];\n body: readonly Row[];\n };\n\n /** Whether the copy came from a control that serializes its own value. */\n export function isEditable(target: EventTarget | null): boolean {\n return (\n target instanceof Element && target.closest(editableSelector) !== null\n );\n }\n\n /**\n * Whether `host` is the first element of its kind that the selection touches.\n * A selection can span several tables; deferring to the first keeps instances\n * from overwriting each other's clipboard data.\n */\n export function ownsSelection(\n host: Element,\n isSelected: SelectionTest,\n ): boolean {\n return (\n Array.from(document.querySelectorAll(host.localName)).find(element =>\n isSelected(element),\n ) === host\n );\n }\n\n /**\n * Serializes the selected region of `tables` (one per row group), or null when\n * the selection covers at most one cell — those are left to the browser so\n * that copying part of a cell's text keeps working.\n *\n * `endpoints` are where the selection starts and ends, which narrow the copied\n * columns to that span. A selection is a linear range in reading order, so\n * dragging down one column touches every column in between; the endpoints are\n * what distinguish \"this column\" from \"these rows\".\n */\n export function extract(\n tables: readonly HTMLTableElement[],\n isSelected: SelectionTest,\n endpoints: readonly (Node | null | undefined)[] = [],\n ): Payload | null {\n const layouts = tables.map(layout);\n const columns = selectedColumns(layouts, isSelected, endpoints);\n const headers = layouts.flatMap(l => l.header);\n const rows = layouts\n .flatMap(l => l.body)\n .filter(row => selectedCount(row, isSelected) > 0);\n // Header cells own the pointer for column reordering, so a drag cannot\n // reach them; the header comes along with any copied data instead.\n const header =\n headers.find(row => selectedCount(row, isSelected) > 0) ??\n (rows.length > 0 ? headers[0] : undefined);\n\n if (\n columns.length === 0 ||\n sumBy([...(header ? [header] : []), ...rows], row =>\n selectedCount(row, isSelected),\n ) < 2\n )\n return null;\n\n return {\n text: toText(header, rows, columns),\n html: toHtml(header, rows, columns),\n };\n }\n\n function toText(\n header: Row | undefined,\n rows: readonly Row[],\n columns: readonly number[],\n ): string {\n return [\n ...(header ? [columns.map(column => headerText(header[column]))] : []),\n ...rows.map(row => columns.map(column => text(row[column]))),\n ]\n .map(cells => cells.join('\\t'))\n .join('\\n');\n }\n\n function toHtml(\n header: Row | undefined,\n rows: readonly Row[],\n columns: readonly number[],\n ): string {\n const cells = (values: readonly string[], tag: 'th' | 'td') =>\n values.map(value => `<${tag}>${escapeHtml(value)}</${tag}>`).join('');\n return [\n '<table>',\n header\n ? `<thead><tr>${cells(\n columns.map(column => headerText(header[column])),\n 'th',\n )}</tr></thead>`\n : '',\n `<tbody>${rows\n .map(\n row =>\n `<tr>${cells(\n columns.map(column => text(row[column])),\n 'td',\n )}</tr>`,\n )\n .join('')}</tbody>`,\n '</table>',\n ].join('');\n }\n\n function layout(table: HTMLTableElement): Layout {\n return {\n header: grid(\n Array.from(table.querySelectorAll(':scope > thead > tr')).filter(\n isDataRow,\n ),\n ),\n body: grid(\n Array.from(\n table.querySelectorAll(\n ':scope > tbody > tr, :scope > tbody > a.row-link',\n ),\n ).filter(isDataRow),\n ),\n };\n }\n\n /**\n * Maps rows onto a column grid. Cells covered by a rowspan repeat the spanning\n * cell so that every line has one value per column, matching how CSV export\n * flattens spans.\n */\n function grid(rows: readonly Element[]): Row[] {\n const cells: (Element | undefined)[][] = rows.map(() => []);\n rows.forEach((row, rowIndex) => {\n let column = 0;\n for (const cell of dataCells(row)) {\n while (cells[rowIndex][column] !== undefined) column++;\n const rowSpan = Math.max(1, cell.rowSpan);\n const colSpan = Math.max(1, cell.colSpan);\n for (\n let r = rowIndex;\n r <= Math.min(rows.length - 1, rowIndex + rowSpan - 1);\n r++\n )\n for (let c = column; c < column + colSpan; c++) cells[r][c] = cell;\n column += colSpan;\n }\n });\n return cells;\n }\n\n function dataCells(row: Element): HTMLTableCellElement[] {\n return Array.from(\n row.querySelectorAll<HTMLTableCellElement>(':scope > td, :scope > th'),\n ).filter(cell => !cell.matches(controlCellSelector));\n }\n\n /** Excludes the zero-state row, which spans every column. */\n function isDataRow(row: Element): boolean {\n return (\n row.querySelector(fillerRowSelector) === null &&\n dataCells(row).every(cell => cell.colSpan <= 1)\n );\n }\n\n function selectedColumns(\n layouts: readonly Layout[],\n isSelected: SelectionTest,\n endpoints: readonly (Node | null | undefined)[],\n ): number[] {\n const columns = new Set<number>();\n for (const { header, body } of layouts)\n for (const row of [...header, ...body])\n row.forEach((cell, column) => {\n if (cell !== undefined && isSelected(cell)) columns.add(column);\n });\n const touched = [...columns].sort((a, b) => a - b);\n\n // Both ends have to land in a cell to describe a span; anything else (a\n // select-all, an endpoint on a row rather than a cell) keeps every column.\n const span = endpoints\n .map(node => (node ? columnOf(layouts, node) : undefined))\n .filter((column): column is number => column !== undefined);\n return span.length === endpoints.length && span.length > 1\n ? touched.filter(\n column => column >= Math.min(...span) && column <= Math.max(...span),\n )\n : touched;\n }\n\n function columnOf(\n layouts: readonly Layout[],\n node: Node,\n ): number | undefined {\n for (const { header, body } of layouts)\n for (const row of [...header, ...body]) {\n const column = row.findIndex(cell => cell?.contains(node) === true);\n if (column >= 0) return column;\n }\n return undefined;\n }\n\n function selectedCount(row: Row, isSelected: SelectionTest): number {\n return row.filter(cell => cell !== undefined && isSelected(cell)).length;\n }\n\n function headerText(cell: Element | undefined): string {\n return text(cell?.querySelector(headerLabelSelector) ?? cell);\n }\n\n function text(cell: Element | undefined | null): string {\n return cell ? visibleText(cell).replace(/\\s+/g, ' ').trim() : '';\n }\n\n /**\n * Template indentation lands in the DOM as newlines and runs of spaces, which\n * split a single row across several spreadsheet rows unless collapsed by the\n * caller. Comment anchors and screen-reader-only content are dropped, and\n * sibling nodes are separated so that adjacent elements do not run together.\n */\n function visibleText(node: Node): string {\n if (node instanceof Text) return node.nodeValue ?? '';\n if (node instanceof Element)\n return node.matches(assistiveTextSelector)\n ? ''\n : Array.from(node.childNodes).map(visibleText).join(' ');\n return '';\n }\n\n function escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n TemplateRef,\n TrackByFunction,\n} from '@angular/core';\nimport { sum } from 'lodash';\nimport { combineLatest, map, Observable, Subject, takeUntil } from 'rxjs';\nimport { RivSelect } from '../../../input/select/state';\nimport { RivTableClipboard } from '../clipboard';\nimport { RivTable } from '../state';\nimport { TableResultHelpers } from '../state-helpers/result-helpers';\n\ntype PageSizeOption = {\n id: string;\n title: string;\n value: number;\n};\n\n@Component({\n selector: 'riv-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent<\n R extends RivTable.Row,\n C extends RivTable.Column,\n F extends RivTable.Filters,\n G extends RivTable.Group = { key: '' },\n> implements AfterViewInit, OnDestroy\n{\n constructor(private elementRef: ElementRef, private zone: NgZone) {}\n\n @Input()\n manager?: RivTable.Manager<R, C, F, G>;\n\n @ContentChild('cell')\n cellTemplate?: TemplateRef<{\n row: R;\n column: RivTable.FullColumn<C>;\n }>;\n\n @ContentChild('summary')\n summaryTemplate?: TemplateRef<{\n column: RivTable.FullColumn<C>;\n }>;\n\n @ContentChild('menu')\n menuTemplate?: TemplateRef<{ row: RivTable.FullRow<R> }>;\n\n @ContentChild('selection')\n selectionTemplate?: TemplateRef<{ state: RivTable.FullState<R, C, F, G> }>;\n\n @ContentChild('header')\n headerTemplate?: TemplateRef<{ state: RivTable.FullState<R, C, F, G> }>;\n\n @ContentChild('subheader')\n subheaderTemplate?: TemplateRef<{\n state: RivTable.FullState<R, C, F, G>;\n group: RivTable.RowGroup<R, G>;\n }>;\n\n readonly destroy = new Subject();\n\n readonly containerSize = new Subject<DOMRect>();\n readonly selectionCalloutPosition: Observable<DOMRect> =\n this.containerSize.pipe(\n map(rect => new DOMRect(rect.x + 44, rect.y - 12, 0, 0)),\n );\n\n private hoveredRow: HTMLElement | null = null;\n private rowHoverCleanup: (() => void) | null = null;\n\n ngAfterViewInit() {\n combineLatest([this.manager!.state, this.containerSize])\n .pipe(takeUntil(this.destroy))\n .subscribe(([state, containerSize]) => {\n const containerWidth = containerSize.width;\n const totalFrozenWidth = sum(\n state.display.columns.filter(c => c.pinned).map(c => c.width),\n );\n if (totalFrozenWidth > containerWidth) {\n // Check how many columns can be pinned without overflowing.\n for (const [i] of state.display.columns\n .filter(c => c.pinned)\n .entries()) {\n const slicedFrozenWidth = sum(\n state.display.columns.slice(0, i + 1).map(c => c.width),\n );\n if (slicedFrozenWidth > containerWidth) {\n this.manager?.actions.next({\n type: 'columnsFreezeUpToChange',\n index: i - 1,\n freeze: i > 0,\n });\n break;\n }\n }\n }\n });\n\n document.addEventListener('dragover', this.handleDragOver);\n this.setupRowSpanHover();\n }\n\n // We only care about when we have entered a drop zone for applying our visual\n // treatment. However, in order to trigger the drop event, you must call preventDefault\n // on the dragover. We are handling this natively on the document, outside of angular\n // as a performance optimization. If we have a draggedOverColumnIdx and we drag over an\n // element with class drop-zone, we will assume you want to the drop element enabled\n // and we will preventDefault.\n handleDragOver = (event: DragEvent) => {\n const target = event.target as HTMLElement;\n if (this.draggedOverColumnIdx != null && target.closest('.drop-zone')) {\n event.preventDefault();\n }\n };\n\n ngOnDestroy() {\n document.removeEventListener('dragover', this.handleDragOver);\n this.rowHoverCleanup?.();\n this.destroy.next(null);\n }\n\n readonly pageSizeOptions: RivSelect.OptionGroup<PageSizeOption>[] = [\n {\n options: RivTable.pageSizes.map(pageSize => ({\n id: pageSize.toString(),\n title: pageSize.toString(),\n value: pageSize,\n })),\n },\n ];\n\n readonly trackByRow: TrackByFunction<RivTable.FullRow<R>> = (_, row) =>\n row.id;\n readonly trackByGroup: TrackByFunction<RivTable.RowGroup<R, G>> = (\n _,\n group,\n ) => group.groupData.key;\n readonly trackByNestedRow: TrackByFunction<RivTable.FullNestedRow<R>> = (\n _,\n row,\n ) => row.id;\n readonly trackByNestedHeader: TrackByFunction<\n RivTable.FullNestedHeaderRow<R>\n > = (_, row) => row.id;\n readonly trackByColumn: TrackByFunction<RivTable.FullColumn<C>> = (\n _,\n column,\n ) => column.key;\n\n private readonly temporaryWidths: Map<C, number> = new Map();\n setWidth(column: C, width: number | null): void {\n if (width === null) {\n const temporaryWidth = this.temporaryWidths.get(column);\n if (temporaryWidth) {\n this.manager?.actions.next({\n type: 'columnWidthChange',\n column,\n preferredWidth: temporaryWidth,\n });\n }\n this.temporaryWidths.delete(column);\n } else {\n this.temporaryWidths.set(column, width);\n }\n }\n getWidth(column: RivTable.FullColumn<C>): number {\n if (this.temporaryWidths.has(column.key)) {\n return Math.max(this.temporaryWidths.get(column.key)!, column.minWidth);\n } else {\n return column.width;\n }\n }\n\n draggedColumnIdx: number | null = null;\n draggedColumnKey: C | null = null;\n draggedOverColumnIdx: number | null = null;\n\n dragStart(idx: number, key: C) {\n this.draggedColumnIdx = idx;\n this.draggedColumnKey = key;\n }\n\n dragOver(ontoIdx: number) {\n this.draggedOverColumnIdx = ontoIdx;\n }\n\n drop(ontoIdx: number, enabledColumnCount: number) {\n if (this.draggedColumnIdx !== null) {\n this.manager?.actions.next({\n type: 'columnOrderChange',\n previousIndex: this.draggedColumnIdx,\n newIndex: ontoIdx,\n source: 'tableDrag',\n column: this.draggedColumnKey || undefined,\n });\n const enabled = ontoIdx < enabledColumnCount;\n this.dropEnabledState(enabled, enabledColumnCount);\n this.draggedOverColumnIdx = null;\n this.draggedColumnKey = null;\n }\n }\n\n dropEnabledState(enabled: boolean, enabledColumnCount: number) {\n if (this.draggedColumnKey !== null && this.draggedColumnIdx !== null) {\n const isEnabled = enabledColumnCount > this.draggedColumnIdx;\n const shouldFire = enabled ? !isEnabled : isEnabled;\n if (shouldFire) {\n this.manager?.actions.next({\n type: 'columnEnabledChange',\n column: this.draggedColumnKey,\n enabled: enabled,\n source: 'dragDrop',\n });\n }\n\n this.draggedOverColumnIdx = null;\n this.draggedColumnKey = null;\n }\n }\n\n getErrorMessage(e: unknown): string {\n if (e instanceof Error) return e.message;\n if (typeof e === 'string') return e;\n if (typeof e === 'object' && e !== null) return e.toString();\n else return 'An error occurred.';\n }\n\n private shift: boolean = false;\n\n @HostListener('document:keydown', ['$event'])\n keyDown(event: KeyboardEvent) {\n this.shift = event.shiftKey;\n }\n\n @HostListener('document:keyup', ['$event'])\n keyUp(event: KeyboardEvent) {\n this.shift = event.shiftKey;\n }\n\n // Rows with links render as `<a class=\"row-link\">` rather than `<tr>`, which\n // the browser does not serialize as a table row. Copying is handled on the\n // document because a select-all dispatches the event from the selection root\n // rather than from within the table.\n @HostListener('document:copy', ['$event'])\n onCopy(event: ClipboardEvent) {\n const selection = document.getSelection();\n if (\n !event.clipboardData ||\n !selection ||\n selection.isCollapsed ||\n RivTableClipboard.isEditable(event.target)\n )\n return;\n\n const ranges = Array.from({ length: selection.rangeCount }, (_, i) =>\n selection.getRangeAt(i),\n );\n const isSelected = (node: Node) =>\n ranges.some(range => range.intersectsNode(node));\n\n const host: HTMLElement = this.elementRef.nativeElement;\n if (!RivTableClipboard.ownsSelection(host, isSelected)) return;\n\n const payload = RivTableClipboard.extract(\n // A grouped table renders one table per group, and a cell may hold a\n // nested table that serializes itself.\n Array.from(host.querySelectorAll('table')).filter(\n table => table.closest(host.localName) === host,\n ),\n isSelected,\n // Where the drag started and ended, which narrows the copy to the dragged\n // columns rather than every column the range passes through.\n [selection.anchorNode, selection.focusNode],\n );\n if (!payload) return;\n\n event.clipboardData.setData('text/plain', payload.text);\n event.clipboardData.setData('text/html', payload.html);\n event.preventDefault();\n }\n\n selectionChange(rowId: R['id'], selected: boolean) {\n this.manager?.actions.next({\n type: 'rowSelectedChange',\n id: rowId,\n selected,\n contiguous: this.shift,\n });\n }\n\n toggleRowCollapse(rowId: R['id']) {\n this.manager?.actions.next({\n type: 'toggleRowCollapse',\n id: rowId,\n });\n }\n\n toggleHeaderCollapse(headerId: string) {\n this.manager?.actions.next({\n type: 'toggleHeaderCollapse',\n id: headerId,\n });\n }\n\n handleClick(event: MouseEvent, column: RivTable.FullColumn<C>) {\n if (column.clickPreventDefault) event.preventDefault();\n if (column.clickStopPropagation) event.stopPropagation();\n }\n\n isExternalRowLink(\n rowLink: RivTable.RowLink,\n ): rowLink is RivTable.ExternalRowLink {\n return rowLink.type === 'external';\n }\n\n isInternalRowLink(\n rowLink: RivTable.RowLink,\n ): rowLink is RivTable.InternalRowLink {\n return rowLink.type === 'internal';\n }\n\n // Returns true if this is the right row + column to display a chevron, when nesting rows\n showChevronForCell(\n columnIndex: number,\n hasSubRows: boolean,\n depth: number,\n ): boolean {\n // Only show the chevron on rows with subrows\n if (!hasSubRows) {\n return false;\n }\n /*\n Only show the chevron on the column matching the level of nesting:\n v Payer\n v Code\n */\n if (columnIndex != depth) {\n return false;\n }\n\n return true;\n }\n\n // When we are nesting rows, we don't want to show the parent's data in its children's rows\n blankCellDueToNesting(columnIndex: number, depth: number) {\n /*\n Top-level row is 0 depth, and should have no columns blank.\n Second-level nested row is 1 depth, and should have the first column blank.\n Etc.\n */\n return columnIndex < depth;\n }\n\n showMenuOnColumnName(\n fullState: RivTable.FullState<R, C, F, G>,\n column: RivTable.FullColumn<C>,\n ) {\n return (\n column.orderable ||\n column.filterable ||\n this.columnCanFreeze(fullState, column) ||\n this.columnCanHide(fullState, column)\n );\n }\n\n columnCanFreeze(\n fullState: RivTable.FullState<R, C, F, G>,\n column: RivTable.FullColumn<C>,\n ) {\n return fullState.display.columnsAreFreezable && !column.alwaysPinned;\n }\n\n columnCanHide(\n fullState: RivTable.FullState<R, C, F, G>,\n column: RivTable.FullColumn<C>,\n ) {\n return (\n fullState.display.columnsAreHideable &&\n !column.alwaysVisible &&\n !column.alwaysPinned\n );\n }\n\n private setupRowSpanHover() {\n this.zone.runOutsideAngular(() => {\n const host = this.elementRef.nativeElement as HTMLElement;\n\n const onMouseOver = (event: MouseEvent) => {\n const row = (event.target as HTMLElement).closest(\n 'a.row-link, tbody > tr',\n ) as HTMLElement | null;\n if (row === this.hoveredRow) return;\n if (this.hoveredRow) this.clearRowSpanHover(this.hoveredRow);\n this.hoveredRow = row;\n if (row?.matches('a.row-link')) this.applyRowSpanHover(row);\n };\n\n const onMouseOut = (event: MouseEvent) => {\n const related = (event.relatedTarget as HTMLElement | null)?.closest(\n 'a.row-link, tbody > tr',\n ) as HTMLElement | null;\n if (!related || related !== this.hoveredRow) {\n if (this.hoveredRow) this.clearRowSpanHover(this.hoveredRow);\n this.hoveredRow = null;\n }\n };\n\n host.addEventListener('mouseover', onMouseOver);\n host.addEventListener('mouseout', onMouseOut);\n this.rowHoverCleanup = () => {\n host.removeEventListener('mouseover', onMouseOver);\n host.removeEventListener('mouseout', onMouseOut);\n };\n });\n }\n\n private applyRowSpanHover(row: HTMLElement) {\n this.forEachCoveringRowSpanCell(row, cell =>\n cell.classList.add('rs-hover'),\n );\n }\n\n private clearRowSpanHover(row: HTMLElement) {\n this.forEachCoveringRowSpanCell(row, cell =>\n cell.classList.remove('rs-hover'),\n );\n }\n\n private forEachCoveringRowSpanCell(\n row: HTMLElement,\n fn: (cell: HTMLElement) => void,\n ) {\n const tbody = row.closest('tbody');\n if (!tbody) return;\n\n const rows = Array.from(\n tbody.querySelectorAll(':scope > a.row-link, :scope > tr'),\n );\n const rowIndex = rows.indexOf(row);\n if (rowIndex < 0) return;\n\n for (let i = 0; i < rowIndex; i++) {\n const cells = rows[i].querySelectorAll('td[rowspan]');\n cells.forEach(cell => {\n const span = parseInt(cell.getAttribute('rowspan') || '1', 10);\n if (span > 1 && i + span > rowIndex) {\n fn(cell as HTMLElement);\n }\n });\n }\n }\n\n isRegularResult = TableResultHelpers.isRegularResult<R, G>;\n isGroupResult = TableResultHelpers.isGroupResult<R, G>;\n isNestedResult = TableResultHelpers.isNestedResult<R, G>;\n}\n","<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"selectionCalloutPosition | async; let position\">\n <ng-container *ngIf=\"s.selection.selectedCount > 0 && selectionTemplate\">\n <riv-callout\n *riv-overlay\n [anchor]=\"position\"\n [isModal]=\"false\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'top-right'\"\n >\n <ng-container\n *ngTemplateOutlet=\"selectionTemplate; context: { state: s }\"\n ></ng-container>\n </riv-callout>\n </ng-container>\n </ng-container>\n <div class=\"loading-container\">\n <div class=\"header\" *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </div>\n <riv-loading-cover\n class=\"container-loader-wrapper\"\n [loading]=\"s.load.loading\"\n [errorMessage]=\"s.load.error ? getErrorMessage(s.load.error) : undefined\"\n >\n <div\n class=\"container\"\n tabindex=\"0\"\n [ngClass]=\"{\n 'container-ungrouped': !isGroupResult(s.result),\n 'has-header': !isGroupResult(s.result) && headerTemplate,\n 'without-columns': s.display.columns.length === 0\n }\"\n (rivClientSize)=\"containerSize.next($event)\"\n >\n <riv-zero-state\n *ngIf=\"s.display.columns.length === 0\"\n class=\"no-columns-message\"\n [message]=\"\n 'All columns disabled. Enable at least one column to view table data.'\n \"\n ></riv-zero-state>\n\n <!--\n An overview of the templates we are using:\n\n headersAndTableBody - helps us create multiple tables for grouped results\n headerRowWithSubRows - helps us create header rows for nested with header results\n nestedRowWithSubRows - helps us create nested rows for the nested result types\n rowWrappedWithRowLink - helps us add a rowlink to a row\n rowBody - displays the row content\n -->\n\n <!-- When we are grouped, we show one table per group -->\n <ng-container\n *ngIf=\"\n isGroupResult(s.result) && s.result.resultType === 'table-grouping'\n \"\n >\n <ng-container\n *ngFor=\"\n let group of s.result.rowGroups;\n trackBy: trackByGroup;\n let last = last\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n headersAndTableBody;\n context: { group: group, last: last }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n\n <!-- When we aren't grouped, we show one table -->\n <ng-container\n *ngIf=\"isRegularResult(s.result) || isNestedResult(s.result)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n headersAndTableBody;\n context: { group: null, last: true }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template let-group=\"group\" let-last=\"last\" #headersAndTableBody>\n <ng-container *ngIf=\"isGroupResult(s.result) && group !== null\">\n <ng-container\n *ngTemplateOutlet=\"\n subheaderTemplate || null;\n context: { state: s, group }\n \"\n ></ng-container>\n </ng-container>\n <div [ngClass]=\"{ 'subcontainer-grouped': isGroupResult(s.result) }\">\n <table>\n <thead>\n <tr>\n <th\n *ngIf=\"!!s.selection.allowSelection\"\n class=\"selection-head\"\n >\n <riv-sr-only>Select rows</riv-sr-only>\n <div\n *ngIf=\"\n s.selection.allowSelection !== 'individual' &&\n s.selection.allowSelection === true\n \"\n class=\"checkbox-wrapper\"\n >\n <riv-checkbox\n *ngIf=\"!isGroupResult(s.result)\"\n [value]=\"s.selection.isAllSelected === true\"\n [indeterminate]=\"\n s.selection.isAllSelected === 'indeterminate'\n \"\n (valueChange)=\"\n manager?.actions?.next({ type: 'allSelectedChange' })\n \"\n ariaLabel=\"Select all rows\"\n ></riv-checkbox>\n <riv-checkbox\n *ngIf=\"isGroupResult(s.result) && group !== null\"\n [value]=\"group.selected === true\"\n [indeterminate]=\"group.selected === 'indeterminate'\"\n (valueChange)=\"\n manager?.actions?.next({\n type: 'groupSelectionChange',\n payload: group\n })\n \"\n ariaLabel=\"Select group rows\"\n ></riv-checkbox>\n </div>\n </th>\n <th\n *ngIf=\"isNestedResult(s.result) && !!s.result.hasHeaders\"\n class=\"toggle-head\"\n >\n <!-- Add a column for the chevrons, if we have togglable headers -->\n <riv-sr-only>Toggles</riv-sr-only>\n </th>\n <th\n *ngFor=\"let column of s.display.columns; let i = index\"\n [class.pinned]=\"column.pinned\"\n [style.left.px]=\"column.left\"\n [style.width.px]=\"getWidth(column)\"\n [attr.draggable]=\"\n s.display.columnsAreReorderable && !column.alwaysPinned\n \"\n [attr.droppable]=\"!column.alwaysPinned\"\n [class.drop-zone]=\"!column.alwaysPinned\"\n (dragstart)=\"dragStart(i, column.key)\"\n (dragenter)=\"$event.preventDefault(); dragOver(i)\"\n (drop)=\"drop(i, s.display.enabledCount)\"\n [class.dragged-over-left]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx > i &&\n !column.alwaysPinned\n \"\n [class.dragged-over-right]=\"\n draggedOverColumnIdx === i &&\n draggedColumnIdx !== null &&\n draggedColumnIdx < i &&\n !column.alwaysPinned\n \"\n >\n <div\n *ngIf=\"!showMenuOnColumnName(s, column)\"\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n >\n {{ s.display.columnNameMap.get(column.key) }}\n <riv-table-header-resize-handle\n (dragResize)=\"setWidth(column.key, $event)\"\n ></riv-table-header-resize-handle>\n </div>\n <riv-menu *ngIf=\"showMenuOnColumnName(s, column)\">\n <ng-template #trigger>\n <span\n class=\"header-wrapper\"\n [class.left]=\"column.alignment === 'left'\"\n [class.right]=\"column.alignment === 'right'\"\n [class.active]=\"s.query.order?.column === column.key\"\n >\n {{ s.display.columnNameMap.get(column.key) }}\n <span class=\"icon-container\">\n <riv-icon\n [size]=\"12\"\n [name]=\"\n s.query.order?.direction === 'desc'\n ? 'ArrowDown'\n : 'ArrowUp'\n \"\n ></riv-icon>\n </span>\n </span>\n <riv-table-header-resize-handle\n (dragResize)=\"setWidth(column.key, $event)\"\n ></riv-table-header-resize-handle>\n </ng-template>\n <ng-container *ngIf=\"column.orderable\">\n <button\n type=\"button\"\n *ngIf=\"\n !(\n s.query.order?.column === column.key &&\n s.query.order?.direction === 'asc'\n )\n \"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'orderChange',\n source: 'headerMenu',\n payload: {\n direction: 'asc',\n column: column.key\n }\n })\n \"\n >\n Sort ascending\n </button>\n <button\n type=\"button\"\n *ngIf=\"s.query.order?.column === column.key\"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'orderChange',\n source: 'headerMenu',\n payload: null\n })\n \"\n >\n Remove sort\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !(\n s.query.order?.column === column.key &&\n s.query.order?.direction === 'desc'\n )\n \"\n riv-menu-item\n (click)=\"\n manager?.actions?.next({\n type: 'orderChange',\n source: 'headerMenu',\n payload: {\n direction: 'desc',\n column: column.key\n }\n })\n \"\n >\n Sort descending\n </button>\n </ng-container>\n <div\n class=\"riv-divider\"\n *ngIf=\"column.orderable && column.filterable\"\n ></div>\n <button\n type=\"button\"\n *ngIf=\"column.filterable\"\n riv-menu-item\n (click)=\"\n this.manager?.actions?.next({\n type: 'filterAdd',\n columnKey: column.key\n })\n \"\n >\n Add a filter\n </button>\n <!-- We only show the divider when we will have an item both above and below the divider. -->\n <div\n class=\"riv-divider\"\n *ngIf=\"\n (column.orderable || column.filterable) &&\n (columnCanFreeze(s, column) ||\n columnCanHide(s, column))\n \"\n ></div>\n <ng-container *ngIf=\"columnCanFreeze(s, column)\">\n <button\n type=\"button\"\n *ngIf=\"!column.pinned\"\n riv-menu-item\n (click)=\"\n this.manager?.actions?.next({\n type: 'columnsFreezeUpToChange',\n freeze: true,\n index: i,\n source: 'headerMenu',\n column: column.key\n })\n \"\n >\n Freeze up to column\n </button>\n <button\n type=\"button\"\n *ngIf=\"column.pinned\"\n riv-menu-item\n (click)=\"\n this.manager?.actions?.next({\n type: 'columnsFreezeUpToChange',\n freeze: false,\n index: 0,\n source: 'headerMenu',\n column: column.key\n })\n \"\n >\n Un-freeze columns\n </button>\n </ng-container>\n <button\n type=\"button\"\n *ngIf=\"columnCanHide(s, column)\"\n riv-menu-item\n (click)=\"\n this.manager?.actions?.next({\n type: 'columnEnabledChange',\n column: column.key,\n enabled: false,\n source: 'headerMenu'\n })\n \"\n >\n Hide column\n </button>\n </riv-menu>\n </th>\n <th *ngIf=\"menuTemplate\" class=\"menu-head\">\n <riv-sr-only>Menu</riv-sr-only>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container\n *ngIf=\"s.result.totalMatchingRowCount > 0; else empty\"\n >\n <!-- Grouped results do not have subrows or headers -->\n <ng-container\n *ngIf=\"isGroupResult(s.result) && group !== null\"\n >\n <ng-container\n *ngFor=\"\n let row of group.rows;\n let rowIndex = index;\n trackBy: trackByRow\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowWrappedWithRowLink;\n context: {\n row: row,\n rowIndex: rowIndex,\n depth: 0,\n hasSubRows: false,\n rowIsCollapsed: false\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Regular results do not have subrows or headers -->\n <ng-container\n *ngIf=\"\n isRegularResult(s.result) &&\n s.result.resultType === 'normal-rows'\n \"\n >\n <ng-container\n *ngFor=\"\n let row of s.result.rowsAsGroup.rows;\n let rowIndex = index;\n trackBy: trackByRow\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowWrappedWithRowLink;\n context: {\n row: row,\n rowIndex: rowIndex,\n depth: 0,\n hasSubRows: false,\n rowIsCollapsed: false\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Nested with header results have subrows and headers -->\n <ng-container\n *ngIf=\"\n isNestedResult(s.result) &&\n s.result.resultType === 'nested-rows'\n \"\n >\n <ng-container\n *ngFor=\"\n let headerRow of s.result.nestedHeaderRows;\n trackBy: trackByNestedHeader\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n headerRowWithSubRows;\n context: { headerRow: headerRow }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-template let-headerRow=\"headerRow\" #headerRowWithSubRows>\n <!-- Display the header -->\n <ng-container *ngIf=\"headerRow.headerText !== null\">\n <tr\n class=\"toggle-header-row\"\n (click)=\"toggleHeaderCollapse(headerRow.id)\"\n >\n <td class=\"toggle-body\">\n <!-- Rows with subrows have a chevron indicating you can click the row to see the subrows. -->\n <riv-icon\n class=\"prevent-shrink chevron\"\n [name]=\"\n headerRow.isCollapsed\n ? 'ChevronDown'\n : 'ChevronUp'\n \"\n [size]=\"16\"\n ></riv-icon>\n </td>\n <td\n class=\"toggle-header\"\n [attr.colspan]=\"s.display.columns.length\"\n >\n <span class=\"toggle-header-text\">\n {{ headerRow.headerText }}\n </span>\n </td>\n <td *ngIf=\"menuTemplate\"></td>\n </tr>\n </ng-container>\n\n <!-- If a header is not collapsed, also show its subrows -->\n <ng-container\n *ngIf=\"\n !headerRow.isCollapsed && headerRow.subRows.length > 0\n \"\n >\n <ng-container\n *ngFor=\"\n let nestedRow of headerRow.subRows;\n trackBy: trackByNestedRow\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n nestedRowWithSubRows;\n context: { nestedRow: nestedRow, depth: 0 }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template\n let-nestedRow=\"nestedRow\"\n let-depth=\"depth\"\n #nestedRowWithSubRows\n >\n <!-- Display the current row -->\n <ng-container\n [ngTemplateOutlet]=\"rowWrappedWithRowLink\"\n [ngTemplateOutletContext]=\"{\n row: nestedRow.data,\n rowIndex: -1,\n depth: depth,\n hasSubRows: nestedRow.subRows?.length > 0,\n rowIsCollapsed: nestedRow.isCollapsed\n }\"\n >\n </ng-container>\n\n <!-- If a row is not collapsed, also show its subrows -->\n <ng-container\n *ngIf=\"\n !nestedRow.isCollapsed && nestedRow.subRows?.length > 0\n \"\n >\n <ng-container\n *ngFor=\"\n let subRow of nestedRow.subRows;\n trackBy: trackByNestedRow\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"nestedRowWithSubRows\"\n [ngTemplateOutletContext]=\"{\n nestedRow: subRow,\n depth: depth + 1\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <ng-template\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n let-depth=\"depth\"\n let-hasSubRows=\"hasSubRows\"\n let-rowIsCollapsed=\"rowIsCollapsed\"\n #rowWrappedWithRowLink\n >\n <ng-container\n *ngIf=\"{\n row: row,\n rowIndex: rowIndex,\n depth: depth,\n hasSubRows: hasSubRows,\n rowIsCollapsed: rowIsCollapsed\n } as rowContext\"\n >\n <ng-container *ngIf=\"row.rowLink; let rl\">\n <a\n *ngIf=\"isExternalRowLink(rl)\"\n [href]=\"rl.href\"\n draggable=\"false\"\n class=\"row-link\"\n [class.grayed]=\"s.display.rowsAreGrayed\"\n >\n <ng-container\n *ngTemplateOutlet=\"rowBody; context: rowContext\"\n ></ng-container>\n </a>\n <a\n *ngIf=\"isInternalRowLink(rl)\"\n draggable=\"false\"\n [routerLink]=\"rl.routerLink\"\n [queryParams]=\"rl.queryParams\"\n [queryParamsHandling]=\"rl.queryParamsHandling\"\n class=\"row-link\"\n [class.grayed]=\"s.display.rowsAreGrayed\"\n [class.active]=\"rl.active\"\n >\n <ng-container\n *ngTemplateOutlet=\"rowBody; context: rowContext\"\n ></ng-container>\n </a>\n </ng-container>\n <tr\n *ngIf=\"!row.rowLink\"\n [class.grayed]=\"s.display.rowsAreGrayed\"\n >\n <ng-container\n *ngTemplateOutlet=\"rowBody; context: rowContext\"\n ></ng-container>\n </tr>\n </ng-container>\n </ng-template>\n\n <ng-template\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n let-depth=\"depth\"\n let-hasSubRows=\"hasSubRows\"\n let-rowIsCollapsed=\"rowIsCollapsed\"\n #rowBody\n >\n <td\n *ngIf=\"\n s.selection.allowSelection === true ||\n s.selection.allowSelection === 'individual'\n \"\n class=\"selection-body\"\n (click)=\"$event.preventDefault()\"\n >\n <label\n class=\"checkbox-wrapper\"\n (click)=\"$event.stopPropagation()\"\n >\n <riv-checkbox\n [identifier]=\"'riv-table-selection-' + row.id\"\n [value]=\"row.selected\"\n (valueChange)=\"selectionChange(row.id, $event)\"\n ariaLabel=\"Select row\"\n ></riv-checkbox>\n </label>\n </td>\n <td\n *ngIf=\"isNestedResult(s.result) && !!s.result.hasHeaders\"\n class=\"toggle-body\"\n >\n <!-- This td lines up with the header chevron column -->\n </td>\n <ng-container\n *ngFor=\"\n let column of s.display.columns;\n index as columnIndex;\n trackBy: trackByColumn\n \"\n >\n <ng-container\n *ngIf=\"\n s.display.cellRowSpan(rowIndex, column.key) as span\n \"\n >\n <td\n *ngIf=\"span > 0\"\n [attr.rowspan]=\"span\"\n [class.rs-right-border]=\"\n s.display.needsRightBorder(rowIndex, column.key)\n \"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [class.toggleable-cell]=\"\n showChevronForCell(columnIndex, hasSubRows, depth)\n \"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n (click)=\"\n showChevronForCell(columnIndex, hasSubRows, depth)\n ? toggleRowCollapse(row.id)\n : handleClick($event, column)\n \"\n >\n <ng-template #cellContent>\n <ng-container\n *ngIf=\"!blankCellDueToNesting(columnIndex, depth)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n cellTemplate || null;\n context: { row: row, column: column }\n \"\n ></ng-container>\n </ng-container>\n </ng-template>\n\n <!-- Rows with subrows have a chevron indicating you can click the row to see the subrows. -->\n <div\n *ngIf=\"\n showChevronForCell(\n columnIndex,\n hasSubRows,\n depth\n );\n else cellContent\n \"\n class=\"toggleable-cell-content\"\n >\n <riv-icon\n class=\"prevent-shrink chevron\"\n [name]=\"\n rowIsCollapsed ? 'ChevronDown' : 'ChevronUp'\n \"\n [size]=\"16\"\n ></riv-icon>\n <div class=\"toggleable-cell-value\">\n <ng-container\n *ngTemplateOutlet=\"cellContent\"\n ></ng-container>\n </div>\n </div>\n </td>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"menuTemplate\"\n class=\"menu-body\"\n (click)=\"\n $event.stopPropagation(); $event.preventDefault()\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n menuTemplate || null;\n context: { row: row }\n \"\n ></ng-container>\n </td>\n </ng-template>\n\n <tr *ngIf=\"s.display.customSummaryRow\">\n <td\n *ngFor=\"\n let column of s.display.columns;\n trackBy: trackByColumn\n \"\n [class.pinned]=\"column.pinned\"\n [class.advanced]=\"column.dataType === 'advanced'\"\n [style.left.px]=\"column.left\"\n [style.text-align]=\"column.alignment\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n summaryTemplate || null;\n context: { column: column }\n \"\n ></ng-container>\n </td>\n </tr>\n </ng-container>\n <ng-template #empty>\n <tr>\n <td [attr.colspan]=\"s.display.columns.length\">\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </td>\n </tr>\n </ng-template>\n </tbody>\n </table>\n </div>\n <div\n class=\"footer\"\n *ngIf=\"\n isGroupResult(s.result) &&\n group !== null &&\n group.totalMatchingRowCount > s.query.grouping.countPerGroup &&\n group.rows.length === s.query.grouping.countPerGroup\n \"\n >\n <span\n rivLink\n class=\"footer-link\"\n (click)=\"\n manager?.actions?.next({\n type: 'viewMoreKeyChange',\n viewMoreKey: group.groupData.key.toString()\n })\n \"\n >View all {{ group.totalMatchingRowCount }}</span\n >\n </div>\n <br *ngIf=\"!last\" />\n </ng-template>\n </div>\n <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n <div class=\"page-size-controls\">\n <ng-container\n *ngIf=\"!isGroupResult(s.result) && !s.display.hidePageSizeSelector\"\n >\n <span> Results per page: </span>\n <riv-simple-select\n [selectedOption]=\"{\n id: s.query.pagination.pageSize.toString(),\n title: s.query.pagination.pageSize.toString(),\n value: s.query.pagination.pageSize\n }\"\n (selectedOptionChange)=\"\n manager?.actions?.next({\n type: 'pageSizeChange',\n size: $event?.value || 25\n })\n \"\n [optionGroups]=\"pageSizeOptions\"\n [size]=\"'small'\"\n [orderBy]=\"'source'\"\n ></riv-simple-select>\n </ng-container>\n </div>\n <span\n *ngIf=\"s.result.totalMatchingRowCount > 0 && !isGroupResult(s.result)\"\n class=\"page-data-indicator\"\n >\n {{ s.query.pagination.pageRowStart | rivNumber }}-{{\n s.query.pagination.pageRowEnd | rivNumber\n }}\n of\n {{ s.result.totalMatchingRowCount | rivNumber }}\n </span>\n <div\n *ngIf=\"s.query.pagination.showControls\"\n class=\"pagination-controls\"\n >\n <button\n rivButton\n [variant]=\"'basic'\"\n [size]=\"'small'\"\n [icon]=\"'ArrowLeft'\"\n type=\"button\"\n [disabled]=\"s.query.pagination.previous === null\"\n (click)=\"manager?.actions?.next({ type: 'previousPageNavigate' })\"\n ></button>\n <span\n *ngIf=\"s.query.pagination.pages[0] > 0\"\n class=\"truncated-pages left\"\n >\n &hellip;\n </span>\n <button\n *ngFor=\"let page of s.query.pagination.pages\"\n class=\"page\"\n type=\"button\"\n [disabled]=\"page === s.query.pagination.page\"\n [attr.aria-disabled]=\"\n page === s.query.pagination.page ? 'true' : null\n \"\n (click)=\"manager?.actions?.next({ type: 'pageChange', page })\"\n >\n {{ page + 1 }}\n </button>\n <span\n *ngIf=\"\n s.query.pagination.pages[s.query.pagination.pages.length - 1] <\n s.query.pagination.pageCount - 1\n \"\n class=\"truncated-pages right\"\n >\n &hellip;\n </span>\n <button\n rivButton\n [variant]=\"'basic'\"\n [size]=\"'small'\"\n [icon]=\"'ArrowRight'\"\n type=\"button\"\n [disabled]=\"s.query.pagination.next === null\"\n (click)=\"manager?.actions?.next({ type: 'nextPageNavigate' })\"\n ></button>\n </div>\n </div>\n </riv-loading-cover>\n </div>\n</ng-container>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\n\n@Directive({\n selector: '[rivVisibility]',\n})\nexport class VisibilityDirective implements OnInit, OnDestroy {\n private intersectionObserver: IntersectionObserver;\n\n @Output()\n rivVisibility = new EventEmitter<boolean>();\n\n constructor(\n private readonly elementRef: ElementRef<HTMLElement>,\n zone: NgZone,\n ) {\n this.intersectionObserver = new IntersectionObserver(\n entries => {\n zone.run(() => {\n for (const entry of entries) {\n this.rivVisibility.emit(entry.isIntersecting);\n }\n });\n },\n {\n threshold: 0.1,\n },\n );\n }\n\n ngOnInit() {\n this.intersectionObserver.observe(this.elementRef.nativeElement);\n }\n\n ngOnDestroy() {\n this.intersectionObserver.unobserve(this.elementRef.nativeElement);\n }\n}\n","import { Chart } from './chart';\n\nexport type ChartScaleElement =\n | 'barSize'\n | 'barClusterGap'\n | 'bucketGap'\n | 'outerGap'\n | 'leftPadding'\n | 'rightPadding'\n | 'topPadding'\n | 'bottomPadding'\n | 'leftBucketLabel'\n | 'dataLabelPadding'\n | 'fontSize';\n\nexport type ChartScaleValues = {\n [K in ChartScaleElement]: number;\n};\n\nexport type ChartDataDirection =\n | 'vertical' //All charts but horizontal-bar\n | 'horizontal'; //Currently just horizontal-bar\n\nexport type FullChartScaleValues = ChartScaleValues & {\n //Various helpful pre-calced values\n totalWidth: number;\n totalHeight: number;\n sizeForData: number;\n totalLeftOffset: number; //Total distance between the left edge of the chart, and when we start drawing data\n totalRightOffset: number; //Total distance between the end of drawn data, and the right edge of the chart\n totalTopOffset: number; //Total distance between the top edge of the chart, and the start of drawn data\n totalBottomOffset: number; //Total distance between the end of drawn data, and the bottom edge of the chart\n dataLabelTextSize: number;\n horizontalAxisLabelTextSize: number;\n verticalAxisLabelTextSize: number;\n targetTickCount: number;\n chartDataDirection: ChartDataDirection;\n horizontalContainerScale: ContainerScalingType;\n verticalContainerScale: ContainerScalingType;\n};\n\nexport const emptyChartScaleValues: FullChartScaleValues = {\n barSize: 0,\n barClusterGap: 0,\n bucketGap: 0,\n outerGap: 0,\n leftPadding: 0,\n rightPadding: 0,\n topPadding: 0,\n bottomPadding: 0,\n leftBucketLabel: 0,\n dataLabelPadding: 0,\n fontSize: 0,\n totalWidth: 0,\n totalHeight: 0,\n sizeForData: 0,\n totalLeftOffset: 0,\n totalRightOffset: 0,\n totalTopOffset: 0,\n totalBottomOffset: 0,\n dataLabelTextSize: 0,\n horizontalAxisLabelTextSize: 0,\n verticalAxisLabelTextSize: 0,\n targetTickCount: 0,\n chartDataDirection: 'vertical',\n horizontalContainerScale: 'no-scale',\n verticalContainerScale: 'no-scale',\n};\n\nexport type ElementScalingConfiguration = {\n min?: number;\n max?: number;\n target: number; //On the data axis, this is generally treated as a fixed value\n};\n\nexport type DataScalingType =\n | 'fit' //Data will scale to fit dimensions\n | 'max' //The tallest stack/bar/value of data will scale to the given px value\n | 'custom'; //The data will scale based on the provided ratio\n\nexport type DataScalingConfiguration = (\n | {\n type: Extract<DataScalingType, 'fit'>; //This'll functionally revert the scaling type of the corresponding axis to \"scale-to-fit\"\n }\n | {\n type: Extract<DataScalingType, 'max'>;\n value: number;\n }\n | {\n type: Extract<DataScalingType, 'custom'>;\n ratio: {\n px: number;\n value: number;\n };\n }\n) & {\n //Any data element with a non-zero value below this size will ignore scaling, and become this size\n minimumDataElementSize?: number;\n};\n\nexport type AxisScalingType =\n | 'scale-to-fit' //The chart will scale to fit the provided dimensions\n | 'grow' //The chart will grow if smaller than the provided dimensions, and scroll if bigger. On the data axis, the data will scale to fit, but the chart will grow and scroll rather than give the data less than half of the provided dimension\n | 'shrink' //The chart will shrink if larger than the provided dimensions, and not scale otherwise. Treated as 'scale-to-fit' on the data axis\n | 'no-scale'; //The chart will not scale, and if bigger than the provided dimensions, will scroll\n\nexport type ContainerScalingType =\n | 'shrink' //If the chart ends up smaller than the container, the container will shrink to fit\n | 'no-scale'; //The container will not change size, regardless of the size of the chart\n\nexport type FullScalingConfig = {\n dataScale?: DataScalingConfiguration; //Only used if the corresponding axis is set to 'no-scale' or is not defined by input\n elementScales?: PartialElementScalingConfig;\n horizontalAxisScale?: AxisScalingType;\n verticalAxisScale?: AxisScalingType;\n horizontalContainerScale?: ContainerScalingType;\n verticalContainerScale?: ContainerScalingType;\n targetTickCount?: number; //Target number for the number of ticks on the data axis. Defaults to '5'\n};\n\n//For use in chart-type defaults\nexport type NonElementScalingConfig = Omit<\n //This part copies FullScalingConfig, but removes the ability for attributes to be optional\n {\n [K in keyof FullScalingConfig]-?: FullScalingConfig[K];\n },\n //This part excludes elementScales, since we handle those defaults separately\n 'elementScales'\n>;\n\nexport type PartialElementScalingConfig = {\n [K in ChartScaleElement]?: ElementScalingConfiguration;\n};\n\nexport type FullElementScalingConfig = {\n [K in ChartScaleElement]: ElementScalingConfiguration;\n};\n\nexport const DefaultBarElementScalingConfig: FullElementScalingConfig = {\n barSize: {\n min: 1,\n max: 80,\n target: 30,\n },\n barClusterGap: {\n min: 1,\n max: 8,\n target: 8,\n },\n bucketGap: {\n min: 1,\n target: 40,\n },\n outerGap: {\n min: 0,\n target: 16,\n },\n leftPadding: {\n min: 48,\n max: 48,\n target: 48,\n },\n rightPadding: {\n min: 8,\n max: 48,\n target: 48,\n },\n topPadding: {\n min: 16,\n max: 16,\n target: 16,\n },\n bottomPadding: {\n min: 20,\n max: 20,\n target: 20,\n },\n dataLabelPadding: {\n min: 8,\n max: 8,\n target: 8,\n },\n fontSize: {\n min: 12,\n max: 12,\n target: 12,\n },\n leftBucketLabel: {\n target: 0, //Not applicable\n },\n};\nexport const DefaultBarWithSecondaryElementScalingConfig: FullElementScalingConfig =\n {\n ...DefaultBarElementScalingConfig,\n rightPadding: {\n min: 48,\n max: 48,\n target: 48,\n },\n };\n\nexport const DefaultHorizontalBarElementScalingConfig: FullElementScalingConfig =\n {\n barSize: {\n min: 1,\n max: 8,\n target: 8,\n },\n barClusterGap: {\n min: 1,\n max: 8,\n target: 8,\n },\n bucketGap: {\n min: 1,\n target: 16,\n },\n outerGap: {\n min: 0,\n target: 8,\n },\n leftPadding: {\n min: 8,\n max: 8,\n target: 8,\n },\n rightPadding: {\n min: 8,\n max: 48,\n target: 48,\n },\n topPadding: {\n min: 16,\n max: 16,\n target: 16,\n },\n bottomPadding: {\n min: 0,\n max: 20,\n target: 0,\n },\n leftBucketLabel: {\n min: 8,\n max: 192,\n target: 68, //Size used for timeseries buckets\n },\n dataLabelPadding: {\n min: 8,\n max: 8,\n target: 8,\n },\n fontSize: {\n min: 12,\n max: 12,\n target: 12,\n },\n };\nexport const DefaultHorizontalBarWithSecondaryElementScalingConfig: FullElementScalingConfig =\n {\n ...DefaultHorizontalBarElementScalingConfig,\n bottomPadding: {\n min: 20,\n max: 20,\n target: 20,\n },\n };\n\nexport const DefaultLineElementScalingConfig: FullElementScalingConfig = {\n bucketGap: {\n min: 1,\n target: 32,\n },\n outerGap: {\n target: 1,\n },\n leftPadding: {\n min: 48,\n max: 48,\n target: 48,\n },\n rightPadding: {\n min: 8,\n max: 48,\n target: 48,\n },\n topPadding: {\n min: 16,\n max: 16,\n target: 16,\n },\n bottomPadding: {\n min: 20,\n max: 20,\n target: 20,\n },\n dataLabelPadding: {\n min: 8,\n max: 8,\n target: 8,\n },\n fontSize: {\n min: 12,\n max: 12,\n target: 12,\n },\n barSize: {\n target: 0, //Not applicable\n },\n barClusterGap: {\n target: 0, //Not applicable\n },\n leftBucketLabel: {\n target: 0, //Not applicable\n },\n};\n\nexport const DefaultFlowElementScalingConfig: FullElementScalingConfig = {\n barSize: {\n min: 1,\n max: 40,\n target: 40,\n },\n bucketGap: {\n min: 1,\n target: 180,\n },\n leftPadding: {\n min: 24,\n max: 108,\n target: 108,\n },\n rightPadding: {\n min: 24,\n max: 108,\n target: 108,\n },\n dataLabelPadding: {\n min: 36,\n max: 36,\n target: 36,\n },\n fontSize: {\n min: 12,\n max: 12,\n target: 12,\n },\n topPadding: {\n target: 0, //Not applicable\n },\n bottomPadding: {\n target: 0, //Not applicable\n },\n outerGap: {\n target: 0, //Not applicable\n },\n barClusterGap: {\n target: 0, //Not applicable\n },\n leftBucketLabel: {\n target: 0, //Not applicable\n },\n};\n\nexport const DefaultLineWithSecondaryElementScalingConfig: FullElementScalingConfig =\n {\n ...DefaultLineElementScalingConfig,\n rightPadding: {\n min: 48,\n max: 48,\n target: 48,\n },\n };\n\n//For bar, line, area, waterfall and funnel charts\nexport const DefaultVerticalNonElementScalingConfig: NonElementScalingConfig = {\n dataScale: { type: 'fit' },\n horizontalAxisScale: 'grow',\n verticalAxisScale: 'scale-to-fit',\n horizontalContainerScale: 'shrink',\n verticalContainerScale: 'shrink',\n targetTickCount: 5,\n};\n//Flow charts can have many sub-buckets, so they'll scroll vertically rather than become too small to display\nexport const DefaultFlowNonElementScalingConfig: NonElementScalingConfig = {\n ...DefaultVerticalNonElementScalingConfig,\n verticalAxisScale: 'grow',\n};\n//For horizontal bar charts\nexport const DefaultHorizontalNonElementScalingConfig: NonElementScalingConfig =\n {\n dataScale: { type: 'fit' },\n horizontalAxisScale: 'scale-to-fit',\n verticalAxisScale: 'grow',\n horizontalContainerScale: 'shrink',\n verticalContainerScale: 'shrink',\n targetTickCount: 5,\n };\n\nexport type DefaultScalingConfig = {\n elementScales: FullElementScalingConfig;\n nonElementScales: NonElementScalingConfig;\n};\n\nexport function getDefaultScalingConfigByChartType(\n type: Exclude<Chart.ChartType, 'donut'>,\n hasSecondary: boolean,\n): DefaultScalingConfig {\n if (type === 'horizontal-bar') {\n if (hasSecondary) {\n return {\n elementScales: DefaultHorizontalBarWithSecondaryElementScalingConfig,\n nonElementScales: DefaultHorizontalNonElementScalingConfig,\n };\n }\n return {\n elementScales: DefaultHorizontalBarElementScalingConfig,\n nonElementScales: DefaultHorizontalNonElementScalingConfig,\n };\n }\n if (Chart.isBarType(type)) {\n if (hasSecondary) {\n return {\n elementScales: DefaultBarWithSecondaryElementScalingConfig,\n nonElementScales: DefaultVerticalNonElementScalingConfig,\n };\n }\n return {\n elementScales: DefaultBarElementScalingConfig,\n nonElementScales: DefaultVerticalNonElementScalingConfig,\n };\n }\n if (type === 'line' || type === 'area') {\n if (hasSecondary) {\n return {\n elementScales: DefaultLineWithSecondaryElementScalingConfig,\n nonElementScales: DefaultVerticalNonElementScalingConfig,\n };\n }\n return {\n elementScales: DefaultLineElementScalingConfig,\n nonElementScales: DefaultVerticalNonElementScalingConfig,\n };\n }\n if (type === 'flow') {\n return {\n elementScales: DefaultFlowElementScalingConfig,\n nonElementScales: DefaultFlowNonElementScalingConfig,\n };\n }\n return {\n elementScales: DefaultBarElementScalingConfig,\n nonElementScales: DefaultVerticalNonElementScalingConfig,\n };\n}\n\ntype RadiusConfig = {\n type: 'proportion' | 'absolute';\n value: number;\n};\n\nexport type DonutSizingConfig = {\n outerRadius?: RadiusConfig; //If proportion, it's relative to the container\n drawRadius?: RadiusConfig; //If proportion, it's relative to the outer radius\n elementScales?: PartialElementScalingConfig;\n horizontalContainerScale?: ContainerScalingType;\n verticalContainerScale?: ContainerScalingType;\n};\n\nexport const DefaultDonutElementScalingConfig: FullElementScalingConfig = {\n dataLabelPadding: {\n min: 16,\n max: 16,\n target: 16,\n },\n fontSize: {\n min: 12,\n max: 12,\n target: 12,\n },\n bucketGap: {\n target: 0, //Not applicable\n },\n outerGap: {\n target: 0, //Not applicable\n },\n leftPadding: {\n target: 0, //Not applicable\n },\n rightPadding: {\n target: 0, //Not applicable\n },\n topPadding: {\n target: 0, //Not applicable\n },\n bottomPadding: {\n target: 0, //Not applicable\n },\n barSize: {\n target: 0, //Not applicable\n },\n barClusterGap: {\n target: 0, //Not applicable\n },\n leftBucketLabel: {\n target: 0, //Not applicable\n },\n};\n\nexport const DEFAULT_OUTER_RADIUS_CONFIG: RadiusConfig = {\n type: 'proportion',\n value: 0.75,\n};\n\nexport const DEFAULT_DRAW_RADIUS_CONFIG: RadiusConfig = {\n type: 'absolute',\n value: 12,\n};\n\nexport const DefaultDonutSizingConfig = {\n outerRadius: DEFAULT_OUTER_RADIUS_CONFIG,\n drawRadius: DEFAULT_DRAW_RADIUS_CONFIG,\n elementScales: DefaultDonutElementScalingConfig,\n horizontalContainerScale: 'no-scale' as ContainerScalingType,\n verticalContainerScale: 'no-scale' as ContainerScalingType,\n};\n","import { CurrencyPipe } from '@angular/common';\nimport { scaleLinear } from 'd3-scale';\nimport { arc, area, line, pie } from 'd3-shape';\nimport { utcFormat } from 'd3-time-format';\nimport { sum, uniq } from 'lodash';\nimport { DaysPipe } from '../../format/pipes/days.pipe';\nimport { NumberPipe } from '../../format/pipes/number.pipe';\nimport { PercentagePipe } from '../../format/pipes/percentage.pipe';\nimport { SmallCurrencyPipe } from '../../format/pipes/small-currency.pipe';\nimport { SmallNumberPipe } from '../../format/pipes/small-number.pipe';\nimport { CalloutComponent } from '../../overlay/callout/callout.component';\nimport {\n ChartDataDirection,\n ChartScaleElement,\n ContainerScalingType,\n DefaultDonutSizingConfig,\n DefaultScalingConfig,\n DonutSizingConfig,\n ElementScalingConfiguration,\n emptyChartScaleValues,\n FullChartScaleValues,\n FullElementScalingConfig,\n FullScalingConfig,\n getDefaultScalingConfigByChartType,\n NonElementScalingConfig,\n PartialElementScalingConfig,\n} from './chart-scaling';\n\nexport namespace Chart {\n export const defaultColorPalette = [\n //Base colors\n '--baja-blast-50',\n '--teal-diamond-50',\n '--fyre-50',\n '--tang-50',\n '--purp-60',\n '--rosi-70',\n //Shift lighter from base by -20\n '--baja-blast-30',\n '--teal-diamond-30',\n '--fyre-30',\n '--tang-30',\n '--purp-40',\n '--rosi-50',\n //Shift darker from base by +20\n '--baja-blast-70',\n '--teal-diamond-70',\n '--fyre-70',\n '--tang-70',\n '--purp-80',\n '--rosi-90',\n ];\n\n export function chart(\n config: Config,\n data: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n return config.type === 'line'\n ? lines(config, data, dimensions)\n : config.type === 'area'\n ? areas(config, data, dimensions)\n : config.type === 'donut'\n ? arcs(config, data, dimensions)\n : config.type === 'horizontal-bar'\n ? horizontalBars(config, data, dimensions)\n : config.type === 'bar'\n ? bars(config, data, dimensions)\n : config.type === 'waterfall'\n ? waterfall(config, data, dimensions)\n : config.type === 'funnel'\n ? funnel(config, data, dimensions)\n : config.type === 'flow'\n ? flows(config, data, dimensions)\n : emptyChart;\n }\n\n function lines(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'line')) {\n return { ...emptyChart, chartError: 'config' };\n }\n const { data: hiddenData, visibleIndices } = hide(allData);\n if (hiddenData.type === 'labeled') {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Labeled series aren't currently supported for line charts\",\n );\n return emptyChart;\n }\n if (hasSupplementaryData(hiddenData)) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for non-bar charts\",\n );\n return emptyChart;\n }\n warnUnsupportedPatterns(hiddenData, ['striped', 'dots'], 'line');\n //This assignment makes typescript recognize the actual type (TimeseriesData)\n const data = hiddenData;\n\n const { dateFormat, pipeTransform, colors } = getFormattingAndColors(\n allData,\n data,\n config,\n );\n\n const chartSizingValues = getFullChartScaleValues(\n config,\n data,\n dimensions,\n pipeTransform,\n dateFormat,\n );\n if (chartSizingValues === null) {\n return { ...emptyChart, chartError: 'sizing' };\n }\n\n const tickCount = getBucketTickCount(chartSizingValues);\n const xTicks = generateTimeseriesTicks(\n data,\n config,\n tickCount,\n chartSizingValues,\n dateFormat,\n ).map(tick => toXTick(tick));\n const xScale = (index: number): number => {\n return (\n chartSizingValues.totalLeftOffset + chartSizingValues.bucketGap * index\n );\n };\n const { scale, ticks: dataTicks } = calcDataAxisScalesAndTicks(\n data,\n pipeTransform,\n config,\n chartSizingValues,\n );\n const yTicks = dataTicks.map(tick => toYTick(tick));\n\n const indices = data.x.map((_, i) => i);\n const lines =\n data.x.length > 1\n ? data.ys.map(y => ({\n line: line<number>(\n i => xScale(i),\n i => scale(y.values[i], y.isSecondary),\n )(indices),\n pattern: y.pattern,\n }))\n : [];\n const circles =\n data.x.length === 1\n ? data.ys.map((ySeries, i) => ({\n cx: xScale(0),\n cy: scale(ySeries.values[0], checkIfSecondary(data, i, 0)),\n }))\n : [];\n\n const yOffset = chartSizingValues.dataLabelPadding;\n const dataLabels: DataLabel[] = data.ys.flatMap((y, yIndex) => {\n const subLabels: DataLabel[] = y.values.map((val, xIndex) => ({\n elementType: 'dataLabel',\n label: pipeTransform(val, checkIfSecondary(data, yIndex, xIndex)),\n yPos: scale(val, checkIfSecondary(data, yIndex, xIndex)) - yOffset,\n xPos: xScale(xIndex),\n anchor: 'middle',\n }));\n return subLabels;\n });\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n chartSizingValues === null ||\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n chartSizingValues,\n dimensions,\n )\n ) {\n return null;\n }\n\n const xHoverIndices = getBucketAndClusterNumForHover(\n realPosX,\n chartSizingValues,\n data,\n config,\n data.x.length,\n );\n if (!xHoverIndices) {\n return null;\n }\n const { bucketNum: xIndex } = xHoverIndices;\n const x = xScale(xIndex);\n const visibleYIndex = findNearestIndexWithSecondary(\n data.ys.map((y, i) => ({\n value: y.values[xIndex],\n isSecondary: checkIfSecondary(data, i, xIndex),\n })),\n pos.y,\n scale,\n );\n const yIndex = visibleIndices[visibleYIndex];\n const ys = data.ys.map((y, i) =>\n scale(y.values[xIndex], checkIfSecondary(data, i, xIndex)),\n );\n\n const format = (date: Date) =>\n formatedDate(config.dateFormat || 'day', date);\n\n // Clamp in chart-local coordinates first so the tooltip stays within the\n // visible chart area, then translate to viewport coordinates by adding\n // pos.rect.x/y (which are viewport-relative from getBoundingClientRect).\n const localAnchorX = x - pos.containerScrollX;\n const localAnchorY = ys[visibleYIndex] - pos.containerScrollY;\n const { anchorX, anchorY } = checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n SMALL_PADDING,\n 0,\n );\n return {\n hoverType: 'standard',\n x,\n xIndex,\n ys,\n yIndex,\n visibleYIndex,\n tooltip: {\n anchor,\n date: format(new Date(data.x[xIndex])),\n metrics: data.ys\n .map((y, index) => ({\n color: colors[index % colors.length],\n label: y.label,\n pattern: y.pattern,\n value:\n pipeTransform(\n y.values[xIndex],\n checkIfSecondary(data, index, xIndex),\n true,\n ) ?? '-',\n }))\n .filter((_, i) => config.groupedTooltip || i === visibleYIndex),\n },\n };\n }\n\n return {\n chartWidth: chartSizingValues.totalWidth,\n chartHeight: chartSizingValues.totalHeight,\n chartSizingValues,\n xTicks,\n yTicks,\n colors,\n lines,\n circles,\n hover,\n bars: [],\n areas: [],\n arcs: [],\n horizontalBars: [],\n dataLabels,\n waterfallLines: [],\n gradients: [],\n flowConnections: [],\n horizontalContainerScale: chartSizingValues.horizontalContainerScale,\n verticalContainerScale: chartSizingValues.verticalContainerScale,\n chartError: null,\n };\n }\n\n function areas(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'area')) {\n return { ...emptyChart, chartError: 'config' };\n }\n const { data: uncheckedData, visibleIndices } = hide(allData);\n if (uncheckedData.type === 'labeled') {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Labeled series aren't currently supported for area charts\",\n );\n return emptyChart;\n }\n if (config.showDataLabels === true) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Data labels aren't supported for any stacked chart type\",\n );\n return emptyChart;\n }\n if (hasSupplementaryData(uncheckedData)) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for non-bar charts\",\n );\n return emptyChart;\n }\n warnUnsupportedPatterns(uncheckedData, ['striped'], 'area');\n //This assignment makes typescript recognize the actual type (TimeseriesData)\n const data = uncheckedData;\n\n const { dateFormat, pipeTransform, colors } = getFormattingAndColors(\n allData,\n data,\n config,\n );\n const chartSizingValues = getFullChartScaleValues(\n config,\n data,\n dimensions,\n pipeTransform,\n dateFormat,\n );\n if (chartSizingValues === null) {\n return { ...emptyChart, chartError: 'sizing' };\n }\n\n const tickCount = getBucketTickCount(chartSizingValues);\n const xTicks = generateTimeseriesTicks(\n data,\n config,\n tickCount,\n chartSizingValues,\n dateFormat,\n ).map(tick => toXTick(tick));\n const xScale = (index: number): number => {\n return (\n chartSizingValues.totalLeftOffset + chartSizingValues.bucketGap * index\n );\n };\n const { scale, ticks: dataTicks } = calcDataAxisScalesAndTicks(\n data,\n pipeTransform,\n config,\n chartSizingValues,\n );\n const yTicks = dataTicks.map(tick => toYTick(tick));\n const zeroAxisPosVal = scale(0, true);\n\n const indices = data.x.map((_, i) => i);\n const areas = data.ys.map((y, yIndex) => ({\n pattern: y.pattern,\n area: area<number>(\n i => xScale(i),\n i => getBarYInfo(data, config, yIndex, i, scale).yValue,\n i =>\n getBarYInfo(data, config, yIndex, i, scale).yValue +\n getBarYInfo(data, config, yIndex, i, scale).height,\n )(indices),\n }));\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n chartSizingValues === null ||\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n chartSizingValues,\n dimensions,\n )\n ) {\n return null;\n }\n\n const xHoverIndices = getBucketAndClusterNumForHover(\n realPosX,\n chartSizingValues,\n data,\n config,\n data.x.length,\n );\n if (!xHoverIndices) {\n return null;\n }\n const { bucketNum: xIndex } = xHoverIndices;\n const x = xScale(xIndex);\n const fullYs = data.ys.map((_, mapYIndex) =>\n getBarYInfo(data, config, mapYIndex, xIndex, scale),\n );\n const ys = fullYs.map(y => y.yValue);\n //This is the ys array, but shifted so that the y position for negative values is away from the axis (for the hover circles)\n const shiftedYs = fullYs.map(y => {\n if (y.yValue >= zeroAxisPosVal) {\n return y.yValue + y.height;\n }\n return y.yValue;\n });\n const yPosSign = zeroAxisPosVal - pos.y;\n let visibleYIndex = -1;\n if (yPosSign < 0 && data.ys.find(y => y.values.find(val => val < 0))) {\n for (let i = ys.length - 1; i >= 0; i--) {\n if (ys[i] >= zeroAxisPosVal && ys[i] < pos.y) {\n visibleYIndex = i;\n break;\n }\n }\n } else {\n for (let i = 0; i < ys.length; i++) {\n if (ys[i] <= zeroAxisPosVal && ys[i] < pos.y) {\n visibleYIndex = i;\n break;\n }\n }\n }\n if (visibleYIndex === -1) {\n if (pos.y <= zeroAxisPosVal) {\n visibleYIndex = ys.indexOf(Math.min(...ys));\n } else {\n visibleYIndex = ys.indexOf(Math.max(...ys));\n }\n }\n const yIndex = visibleIndices[visibleYIndex];\n const localAnchorX = x - pos.containerScrollX;\n const localAnchorY = ys[visibleYIndex] - pos.containerScrollY;\n const { anchorX, anchorY } = checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n SMALL_PADDING,\n 0,\n );\n return {\n hoverType: 'standard',\n x,\n xIndex,\n ys: shiftedYs,\n yIndex,\n visibleYIndex,\n tooltip: {\n anchor,\n date: utcFormat('%B %d, %Y')(new Date(data.x[xIndex])),\n metrics: data.ys\n .map((y, index) => ({\n color: colors[index % colors.length],\n label: y.label,\n pattern: y.pattern,\n value: pipeTransform(\n y.values[xIndex],\n checkIfSecondary(data, index, xIndex),\n true,\n ),\n }))\n .filter((_, i) => config.groupedTooltip || i === visibleYIndex),\n },\n };\n }\n\n return {\n chartWidth: chartSizingValues.totalWidth,\n chartHeight: chartSizingValues.totalHeight,\n chartSizingValues,\n xTicks,\n yTicks,\n colors,\n areas,\n lines: [],\n circles: [],\n hover,\n bars: [],\n arcs: [],\n horizontalBars: [],\n dataLabels: [],\n waterfallLines: [],\n gradients: [],\n flowConnections: [],\n horizontalContainerScale: chartSizingValues.horizontalContainerScale,\n verticalContainerScale: chartSizingValues.verticalContainerScale,\n chartError: null,\n };\n }\n\n function bars(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'bar')) {\n return { ...emptyChart, chartError: 'config' };\n }\n const { data, visibleIndices, visibleSuppIndices } = hide(allData);\n if (\n config.showDataLabels === true &&\n isStackedData(config) &&\n !isGroupingTypeException(data, config)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Data labels aren't supported for any stacked chart type\",\n );\n return emptyChart;\n }\n if (\n hasSupplementaryData(data) &&\n isClusteredData(data, config, false) &&\n !isGroupingTypeException(data, config)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for clustered data (just use another normal y series)\",\n );\n return emptyChart;\n }\n return barsHelper(\n config,\n allData,\n data,\n visibleIndices,\n visibleSuppIndices,\n dimensions,\n false,\n false,\n );\n }\n\n function funnel(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'funnel')) {\n return { ...emptyChart, chartError: 'config' };\n }\n const { data, visibleIndices, visibleSuppIndices } = hide(allData);\n return barsHelper(\n config,\n allData,\n data,\n visibleIndices,\n visibleSuppIndices,\n dimensions,\n true,\n false,\n );\n }\n\n function waterfall(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'waterfall')) {\n return { ...emptyChart, chartError: 'config' };\n }\n const { data: uncheckedData, visibleIndices } = hide(allData);\n if (hasSupplementaryData(uncheckedData)) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for non-bar charts\",\n );\n return emptyChart;\n }\n if (config.secondaryValueType) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Heads up! Waterfall charts do not currently have two-axis support',\n );\n return emptyChart;\n }\n warnUnsupportedPatterns(uncheckedData, [], 'waterfall');\n\n return barsHelper(\n config,\n allData,\n uncheckedData,\n visibleIndices,\n [],\n dimensions,\n false,\n true,\n );\n }\n\n function barsHelper(\n config: ConfigWithFullScaling,\n allData: NonFlowData,\n uncheckedData: NonFlowData,\n visibleIndices: number[],\n visibleSuppIndices: number[],\n dimensions: Dimensions,\n isFunnel: boolean,\n isWaterfall: boolean,\n ): RenderedChart {\n const { dateFormat, pipeTransform, colorIndices, colors } =\n getFormattingAndColors(allData, uncheckedData, config);\n const waterfallData = waterfallTransform(uncheckedData, isWaterfall);\n const data = isWaterfall ? waterfallData.data : uncheckedData;\n\n const chartSizingValues = getFullChartScaleValues(\n config,\n data,\n dimensions,\n pipeTransform,\n dateFormat,\n );\n if (chartSizingValues === null) {\n return { ...emptyChart, chartError: 'sizing' };\n }\n\n const tickCount = getBucketTickCount(chartSizingValues);\n const xTicks = (\n data.type === 'labeled'\n ? generateLabelledTicks(data, config, tickCount, chartSizingValues)\n : generateTimeseriesTicks(\n data,\n config,\n tickCount,\n chartSizingValues,\n dateFormat,\n )\n ).map(tick => toXTick(tick));\n const { scale, ticks: dataTicks } = calcDataAxisScalesAndTicks(\n data,\n pipeTransform,\n config,\n chartSizingValues,\n );\n const yTicks = dataTicks.map(tick => toYTick(tick));\n const zeroAxisPosVal = scale(0, true);\n\n const gradients: Rect[][] = [];\n const bars: Rect[][] = data.ys.map((y, yIndex) => {\n const indSeriesGradients: Rect[] = [];\n const indSeriesBars = y.values.map((_, index) => {\n const { yValue, height } = getBarYInfo(\n data,\n config,\n yIndex,\n index,\n scale,\n );\n const xValue = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n index,\n isClusteredData(data, config, false) ? yIndex : 0,\n );\n if (isFunnel) {\n //The empty gradient still needs to be inserted to keep data aligned\n if (index === 0) {\n indSeriesGradients.push({\n elementType: 'rect',\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n } else {\n const { yValue: prevBarYVal } = getBarYInfo(\n data,\n config,\n yIndex,\n index - 1,\n scale,\n );\n\n indSeriesGradients.push({\n elementType: 'rect',\n x: xValue,\n y: prevBarYVal,\n width: chartSizingValues.barSize,\n height: Math.max(yValue - prevBarYVal, 0),\n });\n }\n }\n\n const bar: Rect = {\n elementType: 'rect',\n x: xValue,\n y: yValue,\n width: chartSizingValues.barSize,\n height,\n offset: 0,\n pattern: y.pattern,\n };\n return bar;\n });\n gradients.push(indSeriesGradients);\n return indSeriesBars;\n });\n let suppBars: Rect[][] = [];\n if (hasSupplementaryData(data)) {\n suppBars = data.supplementaryYs.map((y, yIndex) =>\n y.values.map((_, index) => {\n const { yValue, height } = getBarYInfo(\n data,\n config,\n yIndex,\n index,\n scale,\n true,\n );\n const xValue = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n index,\n y.supplementalIndex + 1,\n );\n return {\n elementType: 'rect',\n x: xValue,\n y: yValue,\n width: chartSizingValues.barSize,\n height,\n offset: 0,\n pattern: y.pattern,\n };\n }),\n );\n bars.push(...suppBars);\n colors.push(\n ...data.supplementaryYs.map(y =>\n getColor(y, colorIndices, config.colors),\n ),\n );\n }\n\n const waterfallLines: {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n }[] = [];\n if (isWaterfall) {\n //Move bars based on height of previous bars (except the total bar)\n let barOffsetRunningTotal = 0;\n for (let i = 0; i < data.x.length - 1; i++) {\n let barOffsetChange = 0;\n for (let j = 0; j < bars.length; j++) {\n const barIsNegative =\n bars[j][i].y >= zeroAxisPosVal && bars[j][i].height > 0;\n if (barIsNegative) {\n barOffsetChange -= bars[j][i].height;\n } else {\n barOffsetChange += bars[j][i].height;\n }\n bars[j][i].offset = barOffsetRunningTotal;\n bars[j][i].y -= barOffsetRunningTotal;\n if (j === bars.length - 1) {\n const x1 = bars[j][i].x + bars[bars.length - 1][i].width;\n const y1 = bars[j][i].y + (barIsNegative ? bars[j][i].height : 0);\n const x2 = bars[j][i + 1].x;\n const y2 = y1;\n waterfallLines.push({\n x1,\n y1,\n x2,\n y2,\n });\n }\n }\n barOffsetRunningTotal += barOffsetChange;\n }\n }\n\n const dataLabels: DataLabel[] = data.ys.flatMap((y, yIndex) => {\n const subLabels: DataLabel[] = y.values.map((val, xIndex) => {\n const isNegativeBar =\n bars[yIndex][xIndex].y >= zeroAxisPosVal &&\n bars[yIndex][xIndex].height > 0;\n const yOffset = isNegativeBar\n ? chartSizingValues.dataLabelPadding +\n chartSizingValues.dataLabelTextSize +\n bars[yIndex][xIndex].height\n : -chartSizingValues.dataLabelPadding;\n return {\n elementType: 'dataLabel',\n label:\n pipeTransform(val, checkIfSecondary(data, yIndex, xIndex)) ?? '',\n yPos:\n (isFunnel && gradients[yIndex][xIndex].height !== 0\n ? gradients[yIndex][xIndex].y\n : bars[yIndex][xIndex].y) + yOffset,\n xPos: bars[yIndex][xIndex].x + bars[yIndex][xIndex].width / 2,\n anchor: 'middle',\n };\n });\n return subLabels;\n });\n if (hasSupplementaryData(data)) {\n const suppDataLabels: DataLabel[] = data.supplementaryYs.flatMap(\n (y, yIndex) => {\n const subLabels: DataLabel[] = y.values.map((val, xIndex) => {\n const isNegativeBar =\n suppBars[yIndex][xIndex].y >= zeroAxisPosVal &&\n suppBars[yIndex][xIndex].height > 0;\n const yOffset = isNegativeBar\n ? chartSizingValues.dataLabelPadding +\n suppBars[yIndex][xIndex].height\n : -chartSizingValues.dataLabelPadding;\n return {\n elementType: 'dataLabel',\n label:\n pipeTransform(\n val,\n checkIfSecondary(data, yIndex, xIndex, true),\n ) ?? '',\n yPos: suppBars[yIndex][xIndex].y + yOffset,\n xPos:\n suppBars[yIndex][xIndex].x + suppBars[yIndex][xIndex].width / 2,\n anchor: 'middle',\n };\n });\n return subLabels;\n },\n );\n dataLabels.push(...suppDataLabels);\n }\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n chartSizingValues === null ||\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n chartSizingValues,\n dimensions,\n )\n ) {\n return null;\n }\n\n const suppYs = hasSupplementaryData(data) ? data.supplementaryYs : null;\n\n const xHoverIndices = getBucketAndClusterNumForHover(\n realPosX,\n chartSizingValues,\n data,\n config,\n data.x.length,\n );\n if (!xHoverIndices) {\n return null;\n }\n const {\n bucketNum: xIndex,\n clusterNum,\n clusterNormCount,\n clusterNumType,\n } = xHoverIndices;\n\n let isSuppValue: boolean = false;\n let suppIndexVal = 0;\n if (suppYs) {\n suppIndexVal = clusterNum - clusterNormCount;\n if (clusterNumType === 'supp') {\n isSuppValue = true;\n }\n }\n\n const calcX = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n xIndex,\n clusterNum,\n );\n const ys = data.ys.map((_, mapYIndex) =>\n isSuppValue\n ? getSuppBarYInfoViaYIndex(\n data,\n config,\n mapYIndex,\n suppIndexVal,\n xIndex,\n scale,\n ).yValue\n : getBarYInfo(data, config, mapYIndex, xIndex, scale).yValue -\n (!isSuppValue && isWaterfall\n ? bars[mapYIndex][xIndex].offset ?? 0\n : 0),\n );\n const yPosSign = zeroAxisPosVal - realPosY;\n let visibleYIndex = -1;\n let dropOffHoverDetected = false;\n if (yPosSign < 0 && data.ys.find(y => y.values.find(val => val < 0))) {\n for (let i = ys.length - 1; i >= 0; i--) {\n if (ys[i] >= zeroAxisPosVal && ys[i] < realPosY) {\n visibleYIndex = i;\n break;\n }\n }\n } else {\n for (let i = 0; i < ys.length; i++) {\n if (ys[i] <= zeroAxisPosVal && ys[i] < realPosY) {\n visibleYIndex = i;\n break;\n }\n }\n }\n if (isClusteredData(data, config, false) && !suppYs) {\n visibleYIndex = clusterNum;\n if (isFunnel && xIndex !== 0 && ys[visibleYIndex] > realPosY) {\n dropOffHoverDetected = true;\n }\n }\n if (visibleYIndex === -1) {\n if (realPosY <= zeroAxisPosVal) {\n visibleYIndex = ys.indexOf(Math.min(...ys));\n } else {\n visibleYIndex = ys.indexOf(Math.max(...ys));\n }\n }\n const yIndex = visibleIndices[visibleYIndex];\n let { yValue, height } = isSuppValue\n ? getSuppBarYInfoViaYIndex(\n data,\n config,\n yIndex,\n suppIndexVal,\n xIndex,\n scale,\n )\n : getBarYInfo(data, config, yIndex, xIndex, scale);\n if (dropOffHoverDetected) {\n yValue = gradients[yIndex][xIndex].y;\n height = gradients[yIndex][xIndex].height;\n }\n\n const localAnchorX = calcX - pos.containerScrollX - SMALL_PADDING;\n const width = chartSizingValues.barSize + SMALL_PADDING * 2;\n const waterfallOffset =\n !isSuppValue && isWaterfall ? bars[yIndex][xIndex].offset ?? 0 : 0;\n const localAnchorY = yValue - pos.containerScrollY - waterfallOffset;\n const { anchorX, anchorY, anchorWidth, anchorHeight } =\n checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n width,\n height,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n anchorWidth,\n anchorHeight,\n );\n //We need to preserve the original index for the later checkIfSecondary call\n const ysForMetrics: {\n data: SupplementaryDataY | DataY;\n originalIndex: number;\n }[] =\n isSuppValue && suppYs\n ? suppYs\n .map((suppY, index) => ({ data: suppY, originalIndex: index }))\n .filter(suppY => suppY.data.supplementalIndex === suppIndexVal)\n : data.ys.map((y, index) => ({ data: y, originalIndex: index }));\n // Find the specific supplementary item that was hovered\n const groupSupps = suppYs\n ? suppYs.filter(s => s.supplementalIndex === suppIndexVal) ?? []\n : [];\n const suppArrayIndex = visibleYIndex; // Use the visual Y position within the layer\n const filteredSuppYIndex =\n suppArrayIndex >= 0 && suppArrayIndex < groupSupps.length && suppYs\n ? suppYs.indexOf(groupSupps[suppArrayIndex]) ?? -1\n : -1;\n const suppYIndex =\n filteredSuppYIndex >= 0 ? visibleSuppIndices[filteredSuppYIndex] : -1;\n\n return {\n hoverType: 'standard',\n x: calcX + chartSizingValues.barSize / 2,\n xIndex,\n ys,\n yIndex,\n visibleYIndex,\n ...(isSuppValue && suppYIndex >= 0\n ? {\n isSuppValue,\n suppYIndex: suppYIndex,\n }\n : {}),\n ...(dropOffHoverDetected ? { isDropOff: true } : {}),\n tooltip: {\n anchor,\n date:\n data.type === 'labeled'\n ? dropOffHoverDetected\n ? 'Drop off from '.concat(data.x[xIndex - 1].label)\n : data.x[xIndex].label\n : utcFormat('%B %d, %Y')(new Date(data.x[xIndex])),\n metrics: ysForMetrics\n .map(y => ({\n color: getColor(\n isWaterfall ? waterfallData.map.get(y.data) : y.data,\n colorIndices,\n config.colors,\n ),\n label: y.data.label,\n pattern: y.data.pattern,\n value: pipeTransform(\n dropOffHoverDetected\n ? Math.max(\n y.data.values[xIndex - 1] - y.data.values[xIndex],\n 0,\n )\n : y.data.values[xIndex],\n checkIfSecondary(\n data,\n y.originalIndex,\n dropOffHoverDetected ? xIndex - 1 : xIndex,\n isSuppValue,\n ),\n true,\n ),\n }))\n .filter((_, i) => config.groupedTooltip || i === visibleYIndex),\n },\n };\n }\n\n return {\n chartWidth: chartSizingValues.totalWidth,\n chartHeight: chartSizingValues.totalHeight,\n chartSizingValues,\n xTicks,\n yTicks,\n colors,\n bars,\n lines: [],\n circles: [],\n areas: [],\n hover,\n arcs: [],\n horizontalBars: [],\n dataLabels,\n waterfallLines,\n gradients,\n flowConnections: [],\n horizontalContainerScale: chartSizingValues.horizontalContainerScale,\n verticalContainerScale: chartSizingValues.verticalContainerScale,\n chartError: null,\n };\n }\n\n function horizontalBars(\n config: ConfigWithFullScaling,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'horizontal bar')) {\n return { ...emptyChart, chartError: 'config' };\n }\n //Some of this stuff gets confusing, because x and y are essentially inverted here\n // So, if you see a situation where a variable is named 'y', but referencing\n // 'x' (or vice versa), that's why\n const { data, visibleIndices, visibleSuppIndices } = hide(allData);\n if (\n config.showDataLabels === true &&\n isStackedData(config) &&\n !isGroupingTypeException(data, config)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Data labels aren't supported for any stacked chart type\",\n );\n return emptyChart;\n }\n if (\n hasSupplementaryData(data) &&\n isClusteredData(data, config, false) &&\n !isGroupingTypeException(data, config)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for clustered data (just use another normal y series)\",\n );\n return emptyChart;\n }\n\n const { dateFormat, pipeTransform, colorIndices, colors } =\n getFormattingAndColors(allData, data, config);\n\n const chartSizingValues = getFullChartScaleValues(\n config,\n data,\n dimensions,\n pipeTransform,\n dateFormat,\n );\n if (chartSizingValues === null) {\n return { ...emptyChart, chartError: 'sizing' };\n }\n\n const tickCount = getBucketTickCount(chartSizingValues);\n const yTicks = (\n data.type === 'labeled'\n ? generateLabelledTicks(data, config, tickCount, chartSizingValues)\n : generateTimeseriesTicks(\n data,\n config,\n tickCount,\n chartSizingValues,\n dateFormat,\n )\n ).map(tick => toYTick(tick));\n const { scale, ticks: dataTicks } = calcDataAxisScalesAndTicks(\n data,\n pipeTransform,\n config,\n chartSizingValues,\n );\n const xTicks = dataTicks.map(tick => toXTick(tick));\n const zeroAxisPosVal = scale(0, true);\n\n const simplifiedHorizontalBars: {\n xPos: number;\n yPos: number;\n width: number;\n }[][] = [];\n const horizontalBars = data.ys.map((y, yIndex) => {\n const subSimpHorBars: {\n xPos: number;\n yPos: number;\n width: number;\n }[] = [];\n const retVal = y.values.map((_, index) => {\n const { xValue, width } = getBarXInfo(\n data,\n config,\n yIndex,\n index,\n scale,\n );\n const clusterInfo = getClusterInfoForBucket(data, config);\n const clusterNum = clusterInfo.normClusterIndices.indexOf(yIndex);\n const yValue = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n index,\n isClusteredData(data, config, false) ? clusterNum : 0,\n );\n\n const horR = Math.min(\n DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS,\n Math.floor(width / 2),\n );\n const verR = Math.min(\n DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS,\n Math.floor(chartSizingValues.barSize / 2),\n );\n subSimpHorBars.push({\n xPos: xValue,\n yPos: yValue,\n width,\n });\n //If clusterNum is -1, then the value of data[yIndex][xIndex] must be zero\n if (clusterNum === -1) {\n return {\n horizontalBar: '',\n pattern: y.pattern,\n x: xValue,\n y: yValue,\n };\n }\n //Don't draw anything for zero-value bars\n if (width === 0) {\n return {\n horizontalBar: '',\n pattern: y.pattern,\n x: xValue,\n y: yValue,\n };\n }\n\n const isPositive = data.ys[yIndex].values[index] > 0;\n const hasAnyNegativeBars = data.ys\n .map(y => y.values[index])\n .find(val => val < 0);\n const hasAnyPositiveBars = data.ys\n .map(y => y.values[index])\n .find(val => val > 0);\n\n //These checks are to make sure we still round if all previous/later values are 0\n const allLeftZero = isPositive\n ? data.ys\n .slice(0, yIndex)\n .map(y => y.values[index])\n .filter(val => val > 0).length === 0 && !hasAnyNegativeBars\n : data.ys\n .slice(yIndex + 1, data.ys.length)\n .map(y => y.values[index])\n .filter(val => val < 0).length === 0;\n const leftSideRound = !isStackedData(config) || allLeftZero;\n const allRightZero = isPositive\n ? data.ys\n .slice(yIndex + 1, data.ys.length)\n .map(y => y.values[index])\n .filter(val => val > 0).length === 0\n : data.ys\n .slice(0, yIndex)\n .map(y => y.values[index])\n .filter(val => val < 0).length === 0 && !hasAnyPositiveBars;\n const rightSideRound = !isStackedData(config) || allRightZero;\n const pathD = calculateHorizontalBarPath(\n leftSideRound,\n rightSideRound,\n xValue,\n yValue,\n horR,\n verR,\n chartSizingValues.barSize,\n width,\n );\n return {\n horizontalBar: pathD,\n pattern: y.pattern,\n x: xValue,\n y: yValue,\n };\n });\n simplifiedHorizontalBars.push(subSimpHorBars);\n return retVal;\n });\n const suppYs = data.supplementaryYs;\n const simplifiedSuppHorizontalBars: {\n xPos: number;\n yPos: number;\n width: number;\n }[][] = [];\n if (suppYs) {\n const suppHorizontalBars = suppYs.map((y, yIndex) => {\n const subSimpHorBars: {\n xPos: number;\n yPos: number;\n width: number;\n }[] = [];\n const retVal = y.values.map((_, index) => {\n const { xValue, width } = getBarXInfo(\n data,\n config,\n yIndex,\n index,\n scale,\n true,\n );\n const clusterInfo = getClusterInfoForBucket(data, config);\n const clusterNum =\n clusterInfo.suppClusterIndices.indexOf(y.supplementalIndex) +\n clusterInfo.normCount;\n const yValue = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n index,\n clusterNum,\n );\n\n const horR = Math.min(\n DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS,\n Math.floor(width / 2),\n );\n const verR = Math.min(\n DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS,\n Math.floor(chartSizingValues.barSize / 2),\n );\n subSimpHorBars.push({\n xPos: xValue,\n yPos: yValue,\n width,\n });\n //Don't draw anything for zero-value bars\n if (width === 0) {\n return {\n horizontalBar: '',\n pattern: y.pattern,\n x: xValue,\n y: yValue,\n };\n }\n\n const isPositive = suppYs[yIndex].values[index] > 0;\n const hasAnyNegativeBars = suppYs\n .filter(suppY => suppY.supplementalIndex === y.supplementalIndex)\n .map(y => y.values[index])\n .find(val => val < 0);\n const hasAnyPositiveBars = suppYs\n .filter(suppY => suppY.supplementalIndex === y.supplementalIndex)\n .map(y => y.values[index])\n .find(val => val > 0);\n\n //These checks are to make sure we still round if all previous/later values are 0\n const allLeftZero = isPositive\n ? suppYs\n .slice(0, yIndex)\n .filter(\n suppY => suppY.supplementalIndex === y.supplementalIndex,\n )\n .map(y => y.values[index])\n .filter(val => val > 0).length === 0 && !hasAnyNegativeBars\n : suppYs\n .slice(yIndex + 1, suppYs.length)\n .filter(\n suppY => suppY.supplementalIndex === y.supplementalIndex,\n )\n .map(y => y.values[index])\n .filter(val => val < 0).length === 0;\n const leftSideRound = !isStackedData(config) || allLeftZero;\n const allRightZero = isPositive\n ? suppYs\n .slice(yIndex + 1, suppYs.length)\n .filter(\n suppY => suppY.supplementalIndex === y.supplementalIndex,\n )\n .map(y => y.values[index])\n .filter(val => val > 0).length === 0\n : suppYs\n .slice(0, yIndex)\n .filter(\n suppY => suppY.supplementalIndex === y.supplementalIndex,\n )\n .map(y => y.values[index])\n .filter(val => val < 0).length === 0 && !hasAnyPositiveBars;\n const rightSideRound = !isStackedData(config) || allRightZero;\n const pathD = calculateHorizontalBarPath(\n leftSideRound,\n rightSideRound,\n xValue,\n yValue,\n horR,\n verR,\n chartSizingValues.barSize,\n width,\n );\n return {\n horizontalBar: pathD,\n pattern: y.pattern,\n x: xValue,\n y: yValue,\n };\n });\n simplifiedSuppHorizontalBars.push(subSimpHorBars);\n return retVal;\n });\n horizontalBars.push(...suppHorizontalBars);\n colors.push(...suppYs.map(y => getColor(y, colorIndices, config.colors)));\n }\n\n const yOffset = chartSizingValues.barSize;\n const dataLabels: DataLabel[] = data.ys.flatMap((y, yIndex) => {\n const subLabels: DataLabel[] = y.values.map((val, xIndex) => {\n const barIsNegative =\n simplifiedHorizontalBars[yIndex][xIndex].xPos < zeroAxisPosVal &&\n simplifiedHorizontalBars[yIndex][xIndex].width > 0;\n const xOffset = barIsNegative\n ? -chartSizingValues.dataLabelPadding\n : simplifiedHorizontalBars[yIndex][xIndex].width +\n chartSizingValues.dataLabelPadding;\n return {\n elementType: 'dataLabel',\n label:\n pipeTransform(val, checkIfSecondary(data, yIndex, xIndex)) ?? '',\n yPos: simplifiedHorizontalBars[yIndex][xIndex].yPos + yOffset,\n xPos: simplifiedHorizontalBars[yIndex][xIndex].xPos + xOffset,\n anchor: barIsNegative ? 'end' : 'start',\n };\n });\n return subLabels;\n });\n if (suppYs) {\n const suppDataLabels: DataLabel[] = suppYs.flatMap((y, yIndex) => {\n const subLabels: DataLabel[] = y.values.map((val, xIndex) => {\n const barIsNegative =\n simplifiedSuppHorizontalBars[yIndex][xIndex].xPos <\n zeroAxisPosVal &&\n simplifiedSuppHorizontalBars[yIndex][xIndex].width > 0;\n const xOffset = barIsNegative\n ? -chartSizingValues.dataLabelPadding\n : simplifiedSuppHorizontalBars[yIndex][xIndex].width +\n chartSizingValues.dataLabelPadding;\n return {\n elementType: 'dataLabel',\n label:\n pipeTransform(\n val,\n checkIfSecondary(data, yIndex, xIndex, true),\n ) ?? '',\n yPos: simplifiedSuppHorizontalBars[yIndex][xIndex].yPos + yOffset,\n xPos: simplifiedSuppHorizontalBars[yIndex][xIndex].xPos + xOffset,\n anchor: barIsNegative ? 'end' : 'start',\n };\n });\n return subLabels;\n });\n dataLabels.push(...suppDataLabels);\n }\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n chartSizingValues === null ||\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n chartSizingValues,\n dimensions,\n )\n ) {\n return null;\n }\n\n const suppYs = hasSupplementaryData(data) ? data.supplementaryYs : null;\n const xHoverIndices = getBucketAndClusterNumForHover(\n realPosY,\n chartSizingValues,\n data,\n config,\n data.x.length,\n );\n if (!xHoverIndices) {\n return null;\n }\n const {\n bucketNum: xIndex,\n clusterNum,\n clusterNormCount,\n clusterNumType,\n } = xHoverIndices;\n\n let x = calculateBarPosition(\n data,\n config,\n chartSizingValues,\n xIndex,\n clusterNum,\n );\n let isSuppValue: boolean = false;\n let suppIndexVal = 0;\n if (suppYs) {\n suppIndexVal = clusterNum - clusterNormCount;\n if (clusterNumType === 'supp') {\n isSuppValue = true;\n }\n }\n\n // When hovering supplementary values, get bars for that supplemental layer\n // When hovering original Ys, get bars for original Ys\n const fullYs =\n hasSupplementaryData(data) && isSuppValue\n ? (\n data.supplementaryYs.filter(\n s => s.supplementalIndex === suppIndexVal,\n ) ?? []\n ).map(suppY =>\n getBarXInfo(\n data,\n config,\n data.supplementaryYs.indexOf(suppY),\n xIndex,\n scale,\n true,\n ),\n )\n : data.ys.map((_, mapYIndex) =>\n getBarXInfo(data, config, mapYIndex, xIndex, scale),\n );\n const ys = fullYs.map(y => y.xValue);\n let visibleYIndex = -1;\n for (let i = 0; i < fullYs.length; i++) {\n const leftBorder = fullYs[i].xValue;\n const rightBorderCandidates = fullYs\n .filter(y => y.xValue > leftBorder)\n .map(y => y.xValue);\n const rightBorder =\n rightBorderCandidates.length > 0\n ? Math.min(...rightBorderCandidates)\n : leftBorder + fullYs[i].width;\n if (realPosX > leftBorder && realPosX < rightBorder) {\n visibleYIndex = i;\n }\n }\n if (isClusteredData(data, config, false)) {\n visibleYIndex = clusterNum;\n }\n\n if (visibleYIndex === -1) {\n if (realPosX >= zeroAxisPosVal) {\n visibleYIndex = ys.indexOf(Math.max(...ys));\n } else {\n visibleYIndex = ys.indexOf(Math.min(...ys));\n }\n }\n // For supplementary bars: visibleYIndex is index within filtered supplementary array\n // For original Ys: visibleYIndex is index within original Ys array\n const actualSuppYIndex =\n hasSupplementaryData(data) && isSuppValue\n ? data.supplementaryYs.findIndex(\n s =>\n s.supplementalIndex === suppIndexVal &&\n data.supplementaryYs\n .filter(s2 => s2.supplementalIndex === suppIndexVal)\n .indexOf(s) === visibleYIndex,\n ) ?? -1\n : -1;\n\n const yIndex = isSuppValue ? 0 : visibleIndices[visibleYIndex];\n\n //Check if we've landed on a zero-width bar (only really relevant on ends)\n const barsToCheck = isSuppValue\n ? simplifiedSuppHorizontalBars\n : simplifiedHorizontalBars;\n const barIndexToCheck = isSuppValue ? actualSuppYIndex : visibleYIndex;\n\n if (\n barIndexToCheck >= 0 &&\n barsToCheck[barIndexToCheck][xIndex].width === 0 &&\n isStackedData(config)\n ) {\n let altBarFound = false;\n //Check upwards\n for (let i = barIndexToCheck + 1; i < barsToCheck.length; i++) {\n if (altBarFound) {\n break;\n }\n if (barsToCheck[i][xIndex].width !== 0) {\n if (hasSupplementaryData(data) && isSuppValue) {\n visibleYIndex = data.supplementaryYs\n .filter(s => s.supplementalIndex === suppIndexVal)\n .indexOf(data.supplementaryYs[i])!;\n } else {\n visibleYIndex = i;\n }\n altBarFound = true;\n }\n }\n\n //Check downwards\n for (let i = barIndexToCheck - 1; i >= 0; i--) {\n if (altBarFound) {\n break;\n }\n if (barsToCheck[i][xIndex].width !== 0) {\n if (hasSupplementaryData(data) && isSuppValue) {\n visibleYIndex = data.supplementaryYs\n .filter(s => s.supplementalIndex === suppIndexVal)\n .indexOf(data.supplementaryYs[i])!;\n } else {\n visibleYIndex = i;\n }\n altBarFound = true;\n }\n }\n }\n\n const originalSuppYIndex =\n isSuppValue && actualSuppYIndex >= 0\n ? visibleSuppIndices[actualSuppYIndex]\n : -1;\n\n const barXPos = isSuppValue\n ? simplifiedSuppHorizontalBars[actualSuppYIndex][xIndex].xPos\n : simplifiedHorizontalBars[visibleYIndex][xIndex].xPos;\n const barYPos = isSuppValue\n ? simplifiedSuppHorizontalBars[actualSuppYIndex][xIndex].yPos\n : simplifiedHorizontalBars[visibleYIndex][xIndex].yPos;\n const barWidth = isSuppValue\n ? simplifiedSuppHorizontalBars[actualSuppYIndex][xIndex].width\n : simplifiedHorizontalBars[visibleYIndex][xIndex].width;\n\n const localAnchorX = barXPos - pos.containerScrollX - SMALL_PADDING;\n const width = barWidth + SMALL_PADDING * 2;\n const localAnchorY = barYPos - pos.containerScrollY;\n const height = chartSizingValues.barSize;\n const { anchorX, anchorY, anchorWidth, anchorHeight } =\n checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n width,\n height,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n anchorWidth,\n anchorHeight,\n );\n //We need to preserve the original index for the later checkIfSecondary call\n const ysForMetrics: {\n data: SupplementaryDataY | DataY;\n originalIndex: number;\n }[] =\n isSuppValue && suppYs\n ? suppYs\n .map((suppY, index) => ({ data: suppY, originalIndex: index }))\n .filter(suppY => suppY.data.supplementalIndex === suppIndexVal)\n : data.ys.map((y, index) => ({ data: y, originalIndex: index }));\n return {\n hoverType: 'standard',\n x,\n xIndex,\n ys,\n yIndex,\n visibleYIndex,\n ...(isSuppValue && originalSuppYIndex >= 0\n ? { isSuppValue, suppYIndex: originalSuppYIndex }\n : {}),\n tooltip: {\n anchor,\n date:\n data.type === 'labeled'\n ? data.x[xIndex].label\n : utcFormat('%B %d, %Y')(new Date(data.x[xIndex])),\n metrics: ysForMetrics\n .map(y => ({\n color: getColor(y.data, colorIndices, config.colors),\n label: y.data.label,\n pattern: y.data.pattern,\n value: pipeTransform(\n y.data.values[xIndex],\n checkIfSecondary(data, y.originalIndex, xIndex, isSuppValue),\n true,\n ),\n }))\n .filter((_, i) => config.groupedTooltip || i === visibleYIndex),\n },\n };\n }\n\n return {\n chartWidth: chartSizingValues.totalWidth,\n chartHeight: chartSizingValues.totalHeight,\n chartSizingValues,\n xTicks: xTicks,\n yTicks: yTicks,\n hover,\n colors,\n bars: [],\n lines: [],\n circles: [],\n areas: [],\n arcs: [],\n horizontalBars,\n dataLabels,\n waterfallLines: [],\n gradients: [],\n flowConnections: [],\n horizontalContainerScale: chartSizingValues.horizontalContainerScale,\n verticalContainerScale: chartSizingValues.verticalContainerScale,\n chartError: null,\n };\n }\n\n function arcs(\n config: DonutConfig,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (!warnFlowData(allData, 'donut')) {\n return { ...emptyChart, chartError: 'config' };\n }\n if (\n config.secondaryValueType &&\n (config.valueType === 'percentage' ||\n config.secondaryValueType === 'percentage')\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Two axes with percentage aren't supported for donut charts\",\n );\n return emptyChart;\n }\n if (hasSupplementaryData(allData)) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Supplementary y values aren't supported for non-bar charts\",\n );\n return emptyChart;\n }\n warnUnsupportedPatterns(allData, [], 'donut');\n const { data: unstackedData, visibleIndices } = hide(allData);\n const donutData = Chart.convertChartDataToDonutData(unstackedData);\n const hasNonZeroValue = donutData.some(d => d.value > 0);\n const arcData = hasNonZeroValue\n ? donutData\n : [\n {\n label: '',\n value: 1,\n },\n ];\n const colors = hasNonZeroValue\n ? visibleIndices.map(i => config.colors[i % config.colors.length])\n : ['--gray-30'];\n const { pipeTransform } = getFormattingAndColors(\n allData,\n unstackedData,\n config,\n );\n\n const donutDefaultConfig = DefaultDonutSizingConfig;\n const dataLabelPaddingConfig = getElementScalingInfo(\n config.donutDisplayInfo.scalingConfig?.elementScales,\n donutDefaultConfig.elementScales,\n 'dataLabelPadding',\n );\n const fontSizeConfig = getElementScalingInfo(\n config.donutDisplayInfo.scalingConfig?.elementScales,\n donutDefaultConfig.elementScales,\n 'fontSize',\n );\n const dataLabelTextSizing = getDataLabelSize(\n unstackedData,\n pipeTransform,\n fontSizeConfig.target,\n );\n\n const horizontalContainerScale =\n config.donutDisplayInfo.scalingConfig?.horizontalContainerScale !==\n undefined\n ? config.donutDisplayInfo.scalingConfig.horizontalContainerScale\n : donutDefaultConfig.horizontalContainerScale;\n const verticalContainerScale =\n config.donutDisplayInfo.scalingConfig?.verticalContainerScale !==\n undefined\n ? config.donutDisplayInfo.scalingConfig.verticalContainerScale\n : donutDefaultConfig.verticalContainerScale;\n const outerRadiusConfig =\n config.donutDisplayInfo.scalingConfig?.outerRadius !== undefined\n ? config.donutDisplayInfo.scalingConfig.outerRadius\n : donutDefaultConfig.outerRadius;\n const drawRadiusConfig =\n config.donutDisplayInfo.scalingConfig?.drawRadius !== undefined\n ? config.donutDisplayInfo.scalingConfig.drawRadius\n : donutDefaultConfig.drawRadius;\n\n const outer =\n outerRadiusConfig.type === 'proportion'\n ? (dimensions.height / 2) * outerRadiusConfig.value\n : outerRadiusConfig.value;\n const drawRadius =\n drawRadiusConfig.type === 'proportion'\n ? outer * drawRadiusConfig.value\n : drawRadiusConfig.value;\n const inner = outer - drawRadius;\n\n const pieArcs = pie<DonutData>()\n .sortValues(null)\n .value(d => Math.max(d.value, 0))(arcData);\n\n const arcs = pieArcs.map(pieArc =>\n arc<DonutData>()\n .innerRadius(inner)\n .outerRadius(outer)\n .padAngle(0.013)\n .startAngle(pieArc.startAngle)\n .endAngle(pieArc.endAngle)(pieArc.data),\n );\n\n const dataLabels: DataLabel[] = hasNonZeroValue\n ? pieArcs.map(arc => {\n //Don't show data labels for zero-width donut slices (includes negative values)\n if (arc.startAngle === arc.endAngle) {\n return {\n elementType: 'dataLabel',\n label: '',\n yPos: 0,\n xPos: 0,\n anchor: 'middle',\n };\n }\n const arcCenterAngle = (arc.startAngle + arc.endAngle) / 2;\n const edgePoint = arcToPoint(arcCenterAngle, outer);\n const lineEndPoint = arcToPoint(\n arcCenterAngle,\n outer + dataLabelPaddingConfig.target,\n );\n const middleArea = outer / 4;\n let yOffset = 0;\n let xOffset = 0;\n if (lineEndPoint.y > 0) {\n if (Math.abs(lineEndPoint.y) < middleArea) {\n yOffset = SMALL_PADDING / 2;\n } else {\n yOffset = SMALL_PADDING;\n }\n if (Math.abs(lineEndPoint.x) < middleArea) {\n yOffset += SMALL_PADDING / 2;\n }\n } else {\n if (Math.abs(lineEndPoint.y) < middleArea) {\n yOffset = SMALL_PADDING / 2;\n }\n if (Math.abs(lineEndPoint.x) < middleArea) {\n yOffset -= SMALL_PADDING / 2;\n }\n }\n return {\n elementType: 'dataLabel',\n label: pipeTransform(arc.data.value, arc.data.isSecondary),\n yPos: lineEndPoint.y + yOffset,\n xPos: lineEndPoint.x + xOffset,\n anchor:\n Math.abs(lineEndPoint.x) < middleArea\n ? 'middle'\n : lineEndPoint.x < 0\n ? 'end'\n : 'start',\n line: {\n x1: edgePoint.x,\n y1: edgePoint.y,\n x2: lineEndPoint.x,\n y2: lineEndPoint.y,\n },\n };\n })\n : [];\n\n const drawWidth =\n (outer +\n (config.showDataLabels\n ? dataLabelPaddingConfig.target + dataLabelTextSizing.horizontal\n : 0)) *\n 2;\n const drawHeight =\n (outer +\n (config.showDataLabels\n ? dataLabelPaddingConfig.target + dataLabelTextSizing.vertical\n : 0)) *\n 2;\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n null,\n dimensions,\n )\n ) {\n return null;\n }\n const centerPointX = dimensions.width / 2;\n const centerPointY = dimensions.height / 2;\n const donutPositionX = realPosX - centerPointX;\n const donutPositionY = realPosY - centerPointY;\n const hoverPosArcInfo = pointToArc(donutPositionX, donutPositionY);\n const arcCenterLine = (outer + inner) / 2;\n\n //Detect donut slice\n let foundYIndex = -1;\n let preferredPosition: CalloutComponent.AnchoredPosition | undefined =\n undefined;\n let donutXPosition = 0;\n let donutYPosition = 0;\n for (let i = 0; i < pieArcs.length; i++) {\n const arc = pieArcs[i];\n\n if (\n hoverPosArcInfo.angle > arc.startAngle &&\n hoverPosArcInfo.angle < arc.endAngle &&\n hoverPosArcInfo.radius > arcCenterLine - drawRadius &&\n hoverPosArcInfo.radius < arcCenterLine + drawRadius\n ) {\n foundYIndex = i;\n const arcCenterPoint = arcToPoint(\n (arc.startAngle + arc.endAngle) / 2,\n arcCenterLine,\n );\n\n //Need to un-offset the positions\n donutXPosition = arcCenterPoint.x + centerPointX;\n donutYPosition = arcCenterPoint.y + centerPointY;\n const verticalArea =\n arcCenterPoint.y < (dimensions.height * -1) / 4\n ? 'top'\n : arcCenterPoint.y > dimensions.height / 4\n ? 'bottom'\n : 'center';\n\n //Determine the best position for the tooltip\n if (arcCenterPoint.x > 0) {\n //Right path\n if (!config.groupedTooltip || verticalArea === 'center') {\n preferredPosition = 'center-right';\n } else if (verticalArea === 'top') {\n preferredPosition = 'right-top';\n } else if (verticalArea === 'bottom') {\n preferredPosition = 'right-bottom';\n }\n } else {\n //Left path\n if (!config.groupedTooltip || verticalArea === 'center') {\n preferredPosition = 'center-left';\n } else if (verticalArea === 'top') {\n preferredPosition = 'left-top';\n } else if (verticalArea === 'bottom') {\n preferredPosition = 'left-bottom';\n }\n }\n break;\n }\n }\n if (foundYIndex === -1) {\n return null;\n }\n if (!hasNonZeroValue) {\n donutXPosition = centerPointX + arcCenterLine;\n donutYPosition = centerPointY;\n }\n\n const localAnchorX = donutXPosition - pos.containerScrollX;\n const localAnchorY = donutYPosition - pos.containerScrollY;\n const { anchorX, anchorY } = checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n SMALL_PADDING,\n 0,\n );\n return {\n hoverType: 'standard',\n tooltip: {\n anchor,\n preferredPosition,\n date: null,\n metrics: donutData\n .map((y, index) => ({\n color: colors[index % colors.length],\n label: y.label,\n value: pipeTransform(y.value, y.isSecondary, true),\n }))\n .filter((_, i) => config.groupedTooltip || i === foundYIndex),\n },\n //Not used by donut charts\n x: 0,\n xIndex: 0,\n ys: [],\n yIndex: 0,\n visibleYIndex: 0,\n };\n }\n\n return {\n chartWidth: drawWidth,\n chartHeight: drawHeight,\n chartSizingValues: {\n ...emptyChartScaleValues,\n dataLabelPadding: dataLabelPaddingConfig.target,\n dataLabelTextSize: dataLabelTextSizing.horizontal,\n fontSize: fontSizeConfig.target,\n },\n xTicks: [],\n yTicks: [],\n areas: [],\n lines: [],\n circles: [],\n bars: [],\n colors,\n arcs,\n horizontalBars: [],\n dataLabels,\n waterfallLines: [],\n gradients: [],\n flowConnections: [],\n horizontalContainerScale,\n verticalContainerScale,\n chartError: null,\n hover,\n };\n }\n\n function flows(\n config: FlowConfig,\n allData: InputData,\n dimensions: Dimensions,\n ): RenderedChart {\n if (allData.type !== 'flow') {\n // eslint-disable-next-line no-console\n console.warn(\n `Heads up! The '${allData.type}' data type isn't supported for flow charts.`,\n );\n return { ...emptyChart, chartError: 'config' };\n }\n\n const data = flowsTransform(config, allData);\n if (data.x.length === 0) {\n return emptyChart;\n }\n const overallTotal = data.x[0].totalCount;\n\n const chartSizingValues = getFullChartScaleValues(\n config,\n data,\n dimensions,\n null,\n null,\n );\n if (chartSizingValues === null) {\n return { ...emptyChart, chartError: 'sizing' };\n }\n\n const { scale } = calcDataAxisScalesAndTicks(\n data,\n null,\n config,\n chartSizingValues,\n );\n const valuePipes = getPipes(config.valueType);\n const percentPipes = getPipes('percentage');\n\n const bars: FlowRect[][] = [];\n const flowConnections: FlowConnectionRender[] = [];\n const dataLabels: FlowDataLabel[] = [];\n const minimumSize = getMinimumDataElementSize(config);\n for (let i = 0; i < data.x.length; i++) {\n const bucketBars: FlowRect[] = [];\n let runningHeight = 0;\n for (const bar of data.x[i].subBuckets) {\n const continuingCount = bar.connections\n .filter(connection => connection.direction === 'forward')\n .map(connection => connection.count)\n .reduce((a, b) => a + b, 0);\n const {\n totalSize: totalHeight,\n continuingSize: darkenedHeight,\n connectionSizes,\n } = getFlowSubBucketSizes(\n bar,\n value => scale(value, false) - chartSizingValues.totalTopOffset,\n minimumSize,\n );\n const connectionHeight = (connection: FlowConnection): number =>\n connectionSizes[bar.connections.indexOf(connection)];\n const nonDarkenedHeight = totalHeight - darkenedHeight;\n const darkenedY = runningHeight + chartSizingValues.totalTopOffset;\n const nonDarkenedY = darkenedY + darkenedHeight;\n\n const width = chartSizingValues.barSize;\n const x =\n chartSizingValues.totalLeftOffset +\n i * (chartSizingValues.barSize + chartSizingValues.bucketGap);\n const colorOverride = config.flowConfig.subBucketsConfig.find(\n bc => bc.bucketId === bar.id,\n )?.color;\n if (darkenedHeight > 0) {\n bucketBars.push({\n elementType: 'rect',\n rectType: 'flow',\n height: darkenedHeight,\n width,\n y: darkenedY,\n x,\n colorOverride,\n darken: true,\n deEmphasize: isDeEmphasized(config, bar.id, true),\n id: bar.id,\n bucketIndex: i,\n count: continuingCount,\n totalCount: bar.count,\n });\n }\n if (nonDarkenedHeight > 0) {\n bucketBars.push({\n elementType: 'rect',\n rectType: 'flow',\n height: nonDarkenedHeight,\n width,\n y: nonDarkenedY,\n x,\n colorOverride,\n darken: false,\n deEmphasize: isDeEmphasized(config, bar.id, false),\n id: bar.id,\n bucketIndex: i,\n count: bar.count - continuingCount,\n totalCount: bar.count,\n });\n }\n //Invisible bar for hover highlight purposes\n bucketBars.push({\n elementType: 'rect',\n rectType: 'flow',\n height: darkenedHeight + nonDarkenedHeight,\n width,\n y: darkenedY,\n x,\n nonDisplay: true,\n id: bar.id,\n bucketIndex: i,\n count: bar.count,\n totalCount: bar.count,\n darken: false,\n deEmphasize: false,\n });\n runningHeight +=\n totalHeight +\n chartSizingValues.dataLabelPadding +\n chartSizingValues.dataLabelTextSize;\n\n //Connections\n //Add new renders for forward connections\n let verticalConnectionOffset = 0;\n for (const connection of bar.connections.filter(\n connection => connection.direction === 'forward',\n )) {\n const topLineY1 = darkenedY + verticalConnectionOffset;\n const bottomLineY1 = topLineY1 + connectionHeight(connection);\n const x1 = x + width;\n const connectionRender: FlowConnectionRender = {\n elementType: 'connection',\n start: connection.start,\n end: connection.end,\n count: connection.count,\n step: i,\n topLine: {\n y1: topLineY1,\n x1,\n //To be filled in later\n y2: 0,\n x2: 0,\n },\n bottomLine: {\n y1: bottomLineY1,\n x1,\n //To be filled in later\n y2: 0,\n x2: 0,\n },\n //To be filled in later\n path: '',\n };\n verticalConnectionOffset += connectionHeight(connection);\n flowConnections.push(connectionRender);\n }\n //Backfill position info for backwards connections\n verticalConnectionOffset = 0;\n for (const connection of bar.connections.filter(\n connection => connection.direction === 'backward',\n )) {\n const matchingConnection = flowConnections.find(\n con =>\n con.start === connection.start &&\n con.end === connection.end &&\n con.step === i - 1,\n );\n if (matchingConnection) {\n const topLineY2 = darkenedY + verticalConnectionOffset;\n const bottomLineY2 = topLineY2 + connectionHeight(connection);\n matchingConnection.topLine.y2 = topLineY2;\n matchingConnection.topLine.x2 = x;\n matchingConnection.bottomLine.y2 = bottomLineY2;\n matchingConnection.bottomLine.x2 = x;\n matchingConnection.path =\n calculateFlowConnectionPath(matchingConnection);\n\n verticalConnectionOffset += connectionHeight(connection);\n }\n }\n\n //Data Labels\n const barName = config.flowConfig.subBucketsConfig.find(\n sbc => sbc.bucketId === bar.id,\n )?.bucketName;\n if (barName !== undefined) {\n dataLabels.push({\n elementType: 'dataLabel',\n dataLabelType: 'flow',\n label: `${barName} (${percentPipes.pipe.transform(\n bar.count / data.x[i].totalCount,\n )})`,\n xPos: x,\n yPos:\n darkenedY -\n (chartSizingValues.dataLabelTextSize +\n chartSizingValues.dataLabelPadding) /\n 2,\n anchor: 'start',\n bold: true,\n bucketIndex: i,\n barId: bar.id,\n });\n }\n const barSubtitle = config.flowConfig.subtitleFormatString.replace(\n '{value}',\n valuePipes.pipe.transform(bar.count),\n );\n dataLabels.push({\n elementType: 'dataLabel',\n dataLabelType: 'flow',\n label: barSubtitle,\n xPos: x,\n yPos: darkenedY - chartSizingValues.dataLabelPadding / 4,\n anchor: 'start',\n bucketIndex: i,\n barId: bar.id,\n });\n }\n bars.push(bucketBars);\n }\n\n function hover(pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }): HoverReturn {\n const realPosX = pos.x + pos.containerScrollX;\n const realPosY = pos.y + pos.containerScrollY;\n if (\n chartSizingValues === null ||\n getIfHoverOutOfBounds(\n pos.x,\n pos.y,\n realPosX,\n realPosY,\n chartSizingValues,\n dimensions,\n )\n ) {\n return null;\n }\n\n const bucketIndexInfo = getFlowBucketIndexForHover(\n chartSizingValues,\n realPosX,\n );\n if (bucketIndexInfo === null || bucketIndexInfo.index >= bars.length) {\n return null;\n }\n if (bucketIndexInfo.area === 'bar') {\n for (const bar of bars[bucketIndexInfo.index]) {\n if (realPosY < bar.y) {\n //Bar title\n const localAnchorX = bar.x - pos.containerScrollX;\n const width = bar.width;\n const height =\n chartSizingValues.dataLabelPadding / 2 +\n chartSizingValues.dataLabelTextSize;\n const localAnchorY = bar.y - (pos.containerScrollY + height);\n const { anchorX, anchorY, anchorWidth, anchorHeight } =\n checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n width,\n height,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n anchorWidth,\n anchorHeight,\n );\n return {\n hoverType: 'flow',\n hoverTarget: 'barTitle',\n barId: bar.id ?? '',\n bucketIndex: bucketIndexInfo.index,\n tooltip: {\n anchor,\n subtitle: config.flowConfig.subtitleFormatString.replace(\n '{value}',\n valuePipes.pipe.transform(bar.totalCount),\n ),\n },\n };\n } else if (\n // The invisible highlight bar spans both portions, so skip it to\n // avoid misreporting a portion boundary as the ending portion\n !bar.nonDisplay &&\n realPosY >= bar.y &&\n realPosY < bar.y + bar.height\n ) {\n //Bar\n const localAnchorX = bar.x - pos.containerScrollX;\n const width = bar.width;\n const localAnchorY = bar.y - pos.containerScrollY;\n const height = bar.height;\n const { anchorX, anchorY, anchorWidth, anchorHeight } =\n checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n width,\n height,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n anchorWidth,\n anchorHeight,\n );\n return {\n hoverType: 'flow',\n hoverTarget: 'bar',\n barId: bar.id ?? '',\n bucketIndex: bucketIndexInfo.index,\n forDarken: bar.darken === true,\n tooltip: {\n anchor,\n subtitle: config.flowConfig.subtitleFormatString.replace(\n '{value}',\n valuePipes.pipe.transform(bar.count),\n ),\n },\n };\n }\n }\n } else {\n for (const connection of flowConnections.filter(\n flowCon => flowCon.step === bucketIndexInfo.index,\n )) {\n if (checkIfPointWithinConnection(connection, realPosX, realPosY)) {\n const localAnchorX = connection.topLine.x1 - pos.containerScrollX;\n const width = connection.topLine.x2 - connection.topLine.x1;\n const curveTop = bezierYAtX(\n (connection.topLine.x1 + connection.topLine.x2) / 2,\n connection.topLine,\n );\n const curveBottom = bezierYAtX(\n (connection.topLine.x1 + connection.topLine.x2) / 2,\n connection.bottomLine,\n );\n const localAnchorY = curveTop - pos.containerScrollY;\n const height = curveBottom - curveTop;\n const { anchorX, anchorY, anchorWidth, anchorHeight } =\n checkAnchorsAgainstBound(\n localAnchorX,\n localAnchorY,\n dimensions,\n width,\n height,\n );\n const anchor = new DOMRect(\n anchorX + pos.rect.x,\n anchorY + pos.rect.y,\n anchorWidth,\n anchorHeight,\n );\n return {\n hoverType: 'flow',\n hoverTarget: 'connection',\n startId: connection.start,\n endId: connection.end,\n startBucketIndex: connection.step,\n tooltip: {\n anchor,\n subtitle: config.flowConfig.subtitleFormatString.replace(\n '{value}',\n valuePipes.pipe.transform(connection.count),\n ),\n },\n };\n }\n }\n }\n\n return null;\n }\n\n return {\n chartWidth: chartSizingValues.totalWidth,\n chartHeight: chartSizingValues.totalHeight,\n chartSizingValues,\n xTicks: [],\n yTicks: [],\n colors: [],\n bars,\n lines: [],\n circles: [],\n areas: [],\n hover,\n arcs: [],\n horizontalBars: [],\n dataLabels,\n waterfallLines: [],\n gradients: [],\n flowConnections,\n horizontalContainerScale: chartSizingValues.horizontalContainerScale,\n verticalContainerScale: chartSizingValues.verticalContainerScale,\n chartError: null,\n };\n }\n\n /*\n Mirrors the bucketing in flowsTransform: a path contributes values[i] to\n the bar at step i, and values[i + 1] to its forward connection (which is\n also the bar's continuing portion).\n */\n function flowValueAtStep(y: FlowY, step: number): number | null {\n return y.steps.length > step && y.values.length > step\n ? y.values[step]\n : null;\n }\n\n function sumFlowValues(\n data: FlowData,\n yIndices: number[],\n step: number,\n ): number {\n return yIndices\n .map(index => flowValueAtStep(data.ys[index], step) ?? 0)\n .reduce((a, b) => a + b, 0);\n }\n\n export function toFlowClickEvent(\n hover: FlowHoverTarget,\n data: FlowData,\n ): FlowClickEvent {\n const allYIndices = data.ys.map((_, index) => index);\n if (hover.hoverTarget === 'connection') {\n const step = hover.startBucketIndex;\n const yIndices = allYIndices.filter(\n index =>\n data.ys[index].steps[step] === hover.startId &&\n flowValueAtStep(data.ys[index], step) !== null &&\n data.ys[index].steps[step + 1] === hover.endId &&\n flowValueAtStep(data.ys[index], step + 1) !== null,\n );\n return {\n target: 'connection',\n startBucketIndex: step,\n startId: hover.startId,\n endId: hover.endId,\n count: sumFlowValues(data, yIndices, step + 1),\n yIndices,\n };\n }\n\n const step = hover.bucketIndex;\n const barYIndices = allYIndices.filter(\n index =>\n data.ys[index].steps[step] === hover.barId &&\n flowValueAtStep(data.ys[index], step) !== null,\n );\n const totalCount = sumFlowValues(data, barYIndices, step);\n const base = { bucketIndex: step, barId: hover.barId };\n if (hover.hoverTarget === 'barTitle') {\n return {\n ...base,\n target: 'title',\n count: totalCount,\n yIndices: barYIndices,\n };\n }\n\n const continuingCount = sumFlowValues(data, barYIndices, step + 1);\n if (hover.forDarken) {\n return {\n ...base,\n target: 'continuing',\n count: continuingCount,\n totalCount,\n yIndices: barYIndices.filter(\n index => (flowValueAtStep(data.ys[index], step + 1) ?? 0) > 0,\n ),\n };\n }\n return {\n ...base,\n target: 'ending',\n count: totalCount - continuingCount,\n totalCount,\n yIndices: barYIndices.filter(\n index =>\n (flowValueAtStep(data.ys[index], step) ?? 0) >\n (flowValueAtStep(data.ys[index], step + 1) ?? 0),\n ),\n };\n }\n\n const SMALL_PADDING = 8;\n export const DEFAULT_FONT_SIZE = 12; //the width constants are based on font size 12, so this variable can help w/ scaling\n export const WIDTH_PER_LETTER = 6.5;\n const WIDTH_PER_NUMBER = 7;\n const WIDTH_PER_PERIOD = 2;\n const WIDTH_PER_SLASH = 4;\n //When the data axis grows, the data is always given at least this portion of the provided size\n const GROWN_DATA_MINIMUM_RATIO = 0.5;\n const DEFAULT_HORIZONTAL_BAR_CORNER_RADIUS = 4;\n const FLOW_CONNECTION_CURVE_CONSTANT = 0.5;\n\n function getFormattingAndColors(\n originalData: NonFlowData,\n data: NonFlowData,\n config: Config,\n ) {\n const dateFormat = (date: Date) =>\n formatedDate(config.dateFormat || 'day', date);\n const { pipe, fullPipe } = getPipes(config.valueType);\n const { pipe: secondaryPipe, fullPipe: secondaryFullPipe } =\n config.secondaryValueType\n ? getPipes(config.secondaryValueType)\n : {\n pipe,\n fullPipe,\n };\n const pipeTransform = (\n value: number,\n isSecondary: boolean | undefined,\n isFull?: boolean,\n ): string => {\n if (isFull !== true) {\n if (isSecondary === true) {\n return secondaryPipe.transform(value);\n }\n return pipe.transform(value);\n }\n let retVal: string | null = null;\n if (isSecondary) {\n retVal = secondaryFullPipe.transform(value);\n } else {\n retVal = fullPipe.transform(value);\n }\n return retVal !== null ? retVal : '-';\n };\n\n // Pre-calculate color indices for all items (use original data for stable colors)\n const colorIndices = calculateColorIndices(originalData);\n const colors = data.ys.map(y => getColor(y, colorIndices, config.colors));\n\n return {\n dateFormat,\n pipeTransform,\n colorIndices,\n colors,\n };\n }\n\n export function calculateColorIndices(\n data: NonFlowData,\n ): Map<DataY | SupplementaryDataY, number> {\n const colorMap = new Map<DataY | SupplementaryDataY, number>();\n\n // Original Ys: use their array index directly\n data.ys.forEach((y, index) => {\n colorMap.set(y, index);\n });\n\n // Supplementary Ys: group by supplementalIndex, use position within that group\n if (hasSupplementaryData(data)) {\n const suppGroups = new Map<number, SupplementaryDataY[]>();\n\n data.supplementaryYs.forEach(suppY => {\n if (!suppGroups.has(suppY.supplementalIndex)) {\n suppGroups.set(suppY.supplementalIndex, []);\n }\n suppGroups.get(suppY.supplementalIndex)!.push(suppY);\n });\n\n suppGroups.forEach(items => {\n items.forEach((item, positionInGroup) => {\n colorMap.set(item, positionInGroup);\n });\n });\n }\n\n return colorMap;\n }\n\n export function getColor(\n item: DataY | SupplementaryDataY | undefined,\n colorIndices: Map<DataY | SupplementaryDataY, number>,\n colors: readonly string[],\n ): string {\n if (item === undefined) {\n return colors[0];\n }\n if (item.colorToken) return item.colorToken;\n const colorIndex = colorIndices.get(item) ?? 0;\n return colors[colorIndex % colors.length];\n }\n\n function getBucketTickCount(chartSizingValues: FullChartScaleValues): number {\n let availableSize = 0;\n let minSpacing = 1;\n if (chartSizingValues.chartDataDirection === 'vertical') {\n availableSize =\n chartSizingValues.totalWidth -\n chartSizingValues.leftPadding -\n chartSizingValues.rightPadding;\n minSpacing =\n chartSizingValues.horizontalAxisLabelTextSize + SMALL_PADDING;\n }\n if (chartSizingValues.chartDataDirection === 'horizontal') {\n availableSize =\n chartSizingValues.totalHeight -\n chartSizingValues.topPadding -\n chartSizingValues.bottomPadding;\n minSpacing = chartSizingValues.verticalAxisLabelTextSize + SMALL_PADDING;\n }\n minSpacing = minSpacing * (chartSizingValues.fontSize / DEFAULT_FONT_SIZE);\n return Math.max(2, Math.floor(availableSize / minSpacing));\n }\n\n function getClusterInfoForBucket(\n data: NonFlowData,\n config: Config,\n ): {\n normCount: number;\n suppCount: number;\n total: number;\n normClusterIndices: number[];\n suppClusterIndices: number[];\n } {\n // Slot layout is the same for every bucket — zero values still occupy\n // their slot, they just render with no height/width. This keeps bucket\n // sizes, bar positions, and hover detection consistent across buckets\n // regardless of which series happen to be zero.\n const normClusterIndices = data.ys.map((_, yIndex) => yIndex);\n const normClusterCount = normClusterIndices.length;\n const suppClusterIndices = uniq(\n hasSupplementaryData(data)\n ? data.supplementaryYs.map(y => y.supplementalIndex)\n : [],\n );\n suppClusterIndices.sort((a, b) => a - b);\n\n const suppClusterCount = suppClusterIndices.length;\n const actualNormClusterCount = isClusteredData(data, config, false)\n ? normClusterCount\n : Math.min(normClusterCount, 1);\n\n return {\n normCount: actualNormClusterCount,\n suppCount: suppClusterCount,\n total: actualNormClusterCount + suppClusterCount,\n normClusterIndices,\n suppClusterIndices,\n };\n }\n\n //This function gives the total distance from the start of the given bucket, to the end of the current bucket\n function getBucketSize(\n data: NonFlowData,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n ): number {\n const totalBarNumber = getClusterInfoForBucket(data, config);\n const bucketSize =\n totalBarNumber.total * chartSizingValues.barSize +\n (totalBarNumber.total - 1) * chartSizingValues.barClusterGap;\n\n return bucketSize;\n }\n\n //This function gives the total distance from the start of the given bucket, to the start of the next bucket\n function getTotalBucketGap(\n data: NonFlowData,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n ): number {\n const bucketSize = getBucketSize(data, config, chartSizingValues);\n return bucketSize + chartSizingValues.bucketGap;\n }\n\n //This function gives the total distance from the start of the first bucket, to the start of the given bucket\n function getTotalPreBucketGap(\n data: NonFlowData,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n bucketIndex: number,\n ): number {\n let cumulativeBucketGap = 0;\n for (let i = 0; i < bucketIndex; i++) {\n cumulativeBucketGap += getTotalBucketGap(data, config, chartSizingValues);\n }\n return cumulativeBucketGap;\n }\n\n function generateTimeseriesTicks(\n data: TimeseriesData,\n config: Config,\n tickCount: number,\n chartSizingValues: FullChartScaleValues,\n format: (date: Date) => string,\n ): GenericTick[] {\n const getLabel = (index: number) => {\n return format(new Date(data.x[index]));\n };\n return getTicks(data, getLabel, config, tickCount, chartSizingValues);\n }\n\n function generateLabelledTicks(\n data: LabeledData,\n config: Config,\n tickCount: number,\n chartSizingValues: FullChartScaleValues,\n ): GenericTick[] {\n const getLabel = (index: number) => {\n return data.x[index].label;\n };\n return getTicks(data, getLabel, config, tickCount, chartSizingValues);\n }\n\n function getTicks(\n data: NonFlowData,\n getLabel: (index: number) => string,\n config: Config,\n tickCount: number,\n chartSizingValues: FullChartScaleValues,\n ): GenericTick[] {\n if (data.x.length === 0) {\n return [];\n }\n if (data.x.length === 1) {\n const labelOffset = getTickLabelOffset(\n data,\n config,\n chartSizingValues,\n 0,\n );\n return [{ value: labelOffset, label: getLabel(0) }];\n }\n\n const lastIndex = data.x.length - 1;\n const tickBucketSpacing = Math.ceil(lastIndex / tickCount);\n const numTicks = Math.floor(lastIndex / tickBucketSpacing) + 1;\n const step = lastIndex / (numTicks - 1);\n\n // Always include first and last data points.\n // Inner ticks are approximately evenly spaced using rounding.\n const indices: number[] = [];\n for (let i = 0; i < numTicks; i++) {\n indices.push(Math.round(i * step));\n }\n\n return indices.map(i => {\n const labelOffset = getTickLabelOffset(\n data,\n config,\n chartSizingValues,\n i,\n );\n return {\n value:\n getTotalPreBucketGap(data, config, chartSizingValues, i) +\n labelOffset,\n label: getLabel(i),\n };\n });\n }\n\n function getTickLabelOffset(\n data: NonFlowData,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n bucketIndex: number,\n ) {\n const inherentOffset =\n chartSizingValues.chartDataDirection === 'horizontal'\n ? chartSizingValues.totalTopOffset\n : chartSizingValues.totalLeftOffset;\n //To have the label be centered on the bucket's center position\n const bucketOffset = getBucketSize(data, config, chartSizingValues) / 2;\n let horizontalBarOffset = 0;\n if (chartSizingValues.chartDataDirection === 'horizontal') {\n //This account for the fact that the inherentOffset and bucketOffset result in matching y values for the bar and the label\n // However, for the bar, that y position is the top of the bar, while for the label, it's the bottom of the label\n // When exactly lined up like that, the label actually looks a little low, so that -2 makes it look correct\n horizontalBarOffset = chartSizingValues.fontSize / 2 - 2;\n }\n\n return inherentOffset + bucketOffset + horizontalBarOffset;\n }\n\n export type InputData = LabeledData | TimeseriesData | FlowData;\n export type ProcessData = LabeledData | TimeseriesData | ProcessedFlowData;\n export type NonFlowData = LabeledData | TimeseriesData;\n\n type BaseData = {\n ys: DataY[];\n supplementaryYs?: SupplementaryDataY[];\n };\n\n export type Pattern = 'solid' | 'striped' | 'dots';\n\n export type DataY = {\n label: string;\n colorToken?: string;\n hidden?: boolean;\n isSecondary?: boolean;\n pattern?: Pattern;\n showLegendItem?: boolean;\n clickable?: boolean;\n values: number[];\n };\n\n export type SupplementaryDataY = DataY & {\n supplementalIndex: number;\n };\n\n export type FlowY = {\n steps: string[]; //Should always match in length w/ values\n values: number[]; //FlowY values should always be weakly decreasing\n clickable?: boolean;\n };\n\n //Currently only supported for horizontal bar charts\n export type LabeledData = BaseData & {\n type: 'labeled';\n x: { label: string; isSecondary?: boolean }[];\n };\n\n export type TimeseriesData = BaseData & {\n type: 'timeseries';\n x: number[];\n };\n\n export type FlowData = {\n type: 'flow';\n ys: FlowY[];\n };\n\n export type ProcessedFlowData = {\n type: 'flow-processed';\n x: FlowBucket[];\n };\n\n type FlowBucket = {\n totalCount: number;\n subBuckets: FlowSubBucket[];\n };\n\n type FlowSubBucket = {\n id: string;\n count: number;\n connections: FlowConnection[];\n };\n\n type FlowConnection = {\n direction: 'forward' | 'backward';\n start: string;\n end: string;\n count: number;\n };\n\n export type FlowConnectionRender = Omit<FlowConnection, 'direction'> & {\n elementType: 'connection';\n step: number;\n path: string;\n emphasize?: boolean;\n topLine: {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n };\n bottomLine: {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n };\n };\n\n type DonutData = {\n label: string;\n hidden?: boolean;\n value: number;\n isSecondary?: boolean;\n };\n\n type Dimensions = {\n width: number;\n height: number;\n };\n\n export type ChartType =\n | 'line'\n | 'area'\n | 'bar'\n | 'horizontal-bar'\n | 'donut'\n | 'waterfall'\n | 'funnel'\n | 'flow';\n\n type BaseConfig = {\n type: ChartType;\n groupedTooltip: boolean;\n colors: string[];\n allowLegendToggle: boolean;\n zeroStateMessage: string;\n sizingErrorStateMessage: string;\n valueType: ValueType;\n secondaryValueType?: ValueType;\n truncateLegend: boolean;\n dateFormat?: Interval;\n showDataLabels?: boolean;\n };\n\n type DonutSubConfig = {\n size: 'xsmall' | 'small' | 'medium' | 'large';\n displayValue: string;\n displayLabel?: string;\n scalingConfig?: DonutSizingConfig;\n };\n\n type FlowSubConfig = {\n subtitleFormatString: string;\n subBucketsConfig: {\n bucketId: string;\n bucketName: string;\n color: string;\n isHighlighted?: boolean;\n }[];\n connectionColor?: string;\n };\n\n export type Config = BaseConfig &\n (\n | {\n type: 'line' | 'area' | 'waterfall' | 'funnel';\n scalingConfig?: FullScalingConfig;\n }\n | {\n type: 'bar' | 'horizontal-bar';\n groupingType: 'stacked' | 'clustered';\n scalingConfig?: FullScalingConfig;\n }\n | {\n type: 'donut';\n donutDisplayInfo: DonutSubConfig;\n }\n | {\n type: 'flow';\n showDataLabels: true;\n flowConfig: FlowSubConfig;\n scalingConfig?: FullScalingConfig;\n }\n );\n\n type DonutConfig = Extract<Config, { type: 'donut' }>;\n\n type FlowConfig = Extract<Config, { type: 'flow' }>;\n\n type ConfigWithFullScaling = Extract<\n Config,\n {\n type:\n | 'bar'\n | 'horizontal-bar'\n | 'line'\n | 'area'\n | 'waterfall'\n | 'funnel'\n | 'flow';\n }\n >;\n\n export const defaultConfig: Config = {\n type: 'line',\n groupedTooltip: true,\n colors: defaultColorPalette,\n allowLegendToggle: false,\n zeroStateMessage: 'No data to display.',\n sizingErrorStateMessage: 'The chart cannot display at the current size.',\n valueType: 'currency',\n truncateLegend: true,\n dateFormat: 'day',\n };\n\n export const defaultDonutConfig: Config = {\n type: 'donut',\n groupedTooltip: true,\n colors: defaultColorPalette,\n allowLegendToggle: false,\n zeroStateMessage: 'No data to display.',\n sizingErrorStateMessage: 'The chart cannot display at the current size.',\n valueType: 'currency',\n truncateLegend: true,\n dateFormat: 'day',\n donutDisplayInfo: {\n size: 'medium',\n displayValue: '',\n },\n };\n\n type GenericTick = {\n value: number;\n label: string;\n secondaryLabel?: string;\n };\n\n type XTick = Omit<GenericTick, 'value'> & {\n x: number;\n };\n\n function toXTick(tick: GenericTick): XTick {\n return {\n x: tick.value,\n label: tick.label,\n secondaryLabel: tick.secondaryLabel,\n };\n }\n\n type YTick = Omit<GenericTick, 'value'> & {\n y: number;\n };\n\n function toYTick(tick: GenericTick): YTick {\n return {\n y: tick.value,\n label: tick.label,\n secondaryLabel: tick.secondaryLabel,\n };\n }\n\n type BasicRect = {\n elementType: 'rect';\n rectType?: string;\n x: number;\n y: number;\n width: number;\n height: number;\n offset?: number;\n pattern?: Pattern;\n rounding?: 'top' | 'bottom' | 'all' | 'none';\n nonDisplay?: boolean;\n };\n\n type FlowRect = BasicRect & {\n rectType: 'flow';\n id: string;\n bucketIndex: number;\n count: number;\n totalCount: number;\n colorOverride?: string;\n darken: boolean;\n deEmphasize: boolean;\n };\n\n export type Rect = (BasicRect & { rectType?: undefined }) | FlowRect;\n\n type Circle = {\n cx: number;\n cy: number;\n };\n\n export type FlowHoverTarget =\n | {\n hoverTarget: 'barTitle';\n bucketIndex: number;\n barId: string;\n }\n | {\n hoverTarget: 'bar';\n bucketIndex: number;\n barId: string;\n forDarken: boolean;\n }\n | {\n hoverTarget: 'connection';\n startId: string;\n endId: string;\n startBucketIndex: number;\n };\n\n export type FlowHoverReturn = {\n hoverType: 'flow';\n\n tooltip: {\n anchor: DOMRect;\n subtitle: string;\n secondarySubtitle?: string;\n };\n } & FlowHoverTarget;\n\n /**\n * Emitted when a clickable flow element is clicked. `yIndices` are the\n * indices into `FlowData.ys` of the paths that make up the clicked element.\n */\n export type FlowClickEvent = {\n count: number;\n yIndices: number[];\n } & (\n | ({\n bucketIndex: number;\n barId: string;\n } & (\n | {\n target: 'title';\n }\n | {\n target: 'continuing' | 'ending';\n totalCount: number;\n }\n ))\n | {\n target: 'connection';\n startBucketIndex: number;\n startId: string;\n endId: string;\n }\n );\n\n export type HoverReturn =\n | {\n hoverType: 'standard';\n // the indices into the data of the closest point\n xIndex: number;\n // we want to know which visible y index is hovered\n // and which actual y index is hovered\n yIndex: number;\n visibleYIndex: number;\n isSuppValue?: boolean;\n suppYIndex?: number;\n //Funnel only, for when dropOff section is hovered\n isDropOff?: boolean;\n\n // the viewport x and ys of the hovered items\n x: number;\n ys: number[];\n\n tooltip: {\n anchor: DOMRect;\n preferredPosition?: CalloutComponent.AnchoredPosition;\n date: string | null;\n metrics: {\n color: string;\n label: string;\n value: string;\n pattern?: Pattern;\n }[];\n };\n }\n | FlowHoverReturn\n | null;\n\n // Hover is a function that takes a viewport x and y and returns a rich\n // set of information about what values are being hovered and what the tooltip\n // should look like\n export type Hover = (pos: {\n rect: DOMRect;\n x: number;\n y: number;\n containerScrollX: number;\n containerScrollY: number;\n }) => HoverReturn;\n\n export type TooltipContext = {\n xIndex: number;\n yIndex: number;\n isSuppValue?: boolean;\n suppYIndex?: number;\n };\n\n // RenderedChart represents all of the parts of a chart\n // that end up on screen. Every chart has x and y ticks\n // and hover functionality, even though they might be\n // different from chart to chart.\n export type RenderedChart = {\n chartWidth: number;\n chartHeight: number;\n chartSizingValues: FullChartScaleValues;\n xTicks: XTick[];\n yTicks: YTick[];\n hover?: Hover;\n colors: string[];\n lines: { pattern?: Pattern; line: string | null }[];\n circles: Circle[]; //Line fallback for a single point\n areas: { pattern?: Pattern; area: string | null }[];\n bars: Rect[][];\n arcs: (string | null)[];\n horizontalBars: {\n pattern?: Pattern;\n horizontalBar: string | null;\n x: number;\n y: number;\n }[][];\n dataLabels: DataLabel[];\n waterfallLines: {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n }[];\n gradients: Rect[][];\n flowConnections: FlowConnectionRender[];\n horizontalContainerScale: ContainerScalingType;\n verticalContainerScale: ContainerScalingType;\n chartError: 'sizing' | 'config' | null;\n };\n\n type BasicDataLabel = {\n elementType: 'dataLabel';\n dataLabelType?: string;\n label: string;\n xPos: number;\n yPos: number;\n anchor: 'start' | 'middle' | 'end';\n line?: {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n };\n bold?: boolean;\n };\n\n type FlowDataLabel = BasicDataLabel & {\n elementType: 'dataLabel';\n dataLabelType: 'flow';\n //Helper data for flows\n bucketIndex: number;\n barId: string;\n };\n\n export type DataLabel =\n | (BasicDataLabel & { dataLabelType?: undefined })\n | FlowDataLabel;\n\n const emptyChart: RenderedChart = {\n chartWidth: 0,\n chartHeight: 0,\n chartSizingValues: emptyChartScaleValues,\n xTicks: [],\n yTicks: [],\n colors: [],\n lines: [],\n circles: [],\n areas: [],\n bars: [],\n arcs: [],\n horizontalBars: [],\n dataLabels: [],\n waterfallLines: [],\n gradients: [],\n flowConnections: [],\n horizontalContainerScale: 'no-scale',\n verticalContainerScale: 'no-scale',\n chartError: null,\n };\n\n //'y' in this function refers to the data y, since this function\n // is also used by horizontal-bars, where the data y is the chart x\n function calcDataAxisScalesAndTicks(\n data: ProcessData,\n pipeTransformInput:\n | ((value: number, isSecondary: boolean) => string)\n | null,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n ): {\n scale: (input: number, isSecondary: boolean | undefined) => number;\n ticks: GenericTick[];\n } {\n const pipeTransform =\n pipeTransformInput !== null ? pipeTransformInput : () => '';\n const {\n primaryDataMin,\n primaryDataMax,\n secondaryDataMin,\n secondaryDataMax,\n scaleDomainMultipleForMax,\n scaleDomainMultipleForNeg,\n } = calcDataScalingValues(data, config);\n const startOffset =\n chartSizingValues.chartDataDirection === 'horizontal'\n ? chartSizingValues.totalLeftOffset\n : chartSizingValues.totalTopOffset;\n let minSpacing =\n (chartSizingValues.chartDataDirection === 'horizontal'\n ? chartSizingValues.horizontalAxisLabelTextSize\n : chartSizingValues.verticalAxisLabelTextSize) + SMALL_PADDING;\n minSpacing = minSpacing * (chartSizingValues.fontSize / DEFAULT_FONT_SIZE);\n const spacingTickCount = Math.max(\n 2,\n Math.floor(chartSizingValues.sizeForData / minSpacing),\n );\n const actualTargetTickCount = Math.min(\n spacingTickCount,\n chartSizingValues.targetTickCount,\n );\n\n const hasPrimary = primaryDataMin !== 0 || primaryDataMax !== 0;\n const hasSecondary = secondaryDataMin !== 0 || secondaryDataMax !== 0;\n const scaleRange =\n chartSizingValues.chartDataDirection === 'horizontal' ||\n config.type === 'flow'\n ? [0, chartSizingValues.sizeForData]\n : [chartSizingValues.sizeForData, 0];\n //These 'effective' values ensure we have room for potential stacking of secondary and non-secondary values\n let effectivePrimaryMin = primaryDataMin * scaleDomainMultipleForNeg;\n let effectivePrimaryMax = primaryDataMax * scaleDomainMultipleForMax;\n\n //Simpler path for data w/o secondaries\n if (!hasSecondary) {\n const primaryYDomain = [effectivePrimaryMin, effectivePrimaryMax];\n\n const yScale = scaleLinear(primaryYDomain, scaleRange);\n const ticks: GenericTick[] = yScale\n .ticks(actualTargetTickCount)\n .map(tick => ({\n value: yScale(tick) + startOffset,\n label: pipeTransform(tick, false),\n }));\n const scale = (input: number): number => {\n return yScale(input) + startOffset;\n };\n return {\n scale,\n ticks,\n };\n }\n //Simpler path for data w/o primaries\n if (!hasPrimary) {\n const secondaryYDomain = [secondaryDataMin, secondaryDataMax];\n\n const yScale = scaleLinear(secondaryYDomain, scaleRange);\n const ticks: GenericTick[] = yScale\n .ticks(actualTargetTickCount)\n .map(tick => ({\n value: yScale(tick) + startOffset,\n label: pipeTransform(tick, true),\n }));\n const scale = (input: number): number => {\n return yScale(input) + startOffset;\n };\n return {\n scale,\n ticks,\n };\n }\n let effectiveSecondaryMax = 0;\n let effectiveSecondaryMin = 0;\n\n //This block sets the effective max for primary and secondary\n //This to ensure that the effective maxes for both data sets are properly set so that\n // 0 will fall at the same place on both and each will have 'room' for potential stacking\n if (\n (primaryDataMax <= 0 && secondaryDataMin >= 0) ||\n (primaryDataMin >= 0 && secondaryDataMax <= 0)\n ) {\n //In this scenario, one set of data is competely positive, while the other is completely negative\n //The two data sets can scale completely independently\n //We 'mirror' the values of the two data sets, which'll put the 0 axis in the center of the data\n if (primaryDataMax <= 0) {\n effectivePrimaryMax = Math.abs(effectivePrimaryMin);\n }\n if (primaryDataMin >= 0) {\n effectivePrimaryMin = -Math.abs(effectivePrimaryMax);\n }\n if (secondaryDataMax <= 0) {\n effectiveSecondaryMin = secondaryDataMin;\n effectiveSecondaryMax = Math.abs(secondaryDataMin);\n }\n if (secondaryDataMin >= 0) {\n effectiveSecondaryMax = secondaryDataMax;\n effectiveSecondaryMin = -secondaryDataMax;\n }\n } else if (primaryDataMax > 0) {\n if (primaryDataMin < 0) {\n //Primary data has positive and negative\n if (secondaryDataMax > 0) {\n //Secondary data has positive\n effectiveSecondaryMax = secondaryDataMax * scaleDomainMultipleForMax;\n if (secondaryDataMin < 0) {\n //Secondary data has negative\n effectiveSecondaryMin =\n secondaryDataMin * scaleDomainMultipleForNeg;\n } else {\n //Secondary data is only positive\n effectiveSecondaryMin =\n (secondaryDataMax / primaryDataMax) *\n primaryDataMin *\n scaleDomainMultipleForNeg;\n }\n } else {\n //Secondary data has only negative\n effectiveSecondaryMin = secondaryDataMin * scaleDomainMultipleForNeg;\n effectiveSecondaryMax =\n (secondaryDataMin / primaryDataMin) *\n primaryDataMax *\n scaleDomainMultipleForMax;\n }\n } else {\n //Primary data is only positive\n //Due to earlier check, we know that secondary data is either also all-positive, or positive and negative\n effectiveSecondaryMax = secondaryDataMax * scaleDomainMultipleForMax;\n effectiveSecondaryMin = secondaryDataMin * scaleDomainMultipleForNeg;\n effectivePrimaryMin =\n (primaryDataMax / secondaryDataMax) *\n secondaryDataMin *\n scaleDomainMultipleForNeg;\n }\n } else {\n //Primary data is only negative\n //Due to earlier check, we know that secondary data is either also all-negative, or positive and negative\n effectiveSecondaryMax = secondaryDataMax * scaleDomainMultipleForMax;\n effectiveSecondaryMin = secondaryDataMin * scaleDomainMultipleForNeg;\n effectivePrimaryMax =\n (primaryDataMin / secondaryDataMin) *\n secondaryDataMax *\n scaleDomainMultipleForMax;\n }\n const primaryYDomain = [effectivePrimaryMin, effectivePrimaryMax];\n\n const yScale = scaleLinear(primaryYDomain, scaleRange);\n\n //Figuring out the best tick count to fit the two data srouces\n const yScalePrimaryProto = scaleLinear(primaryYDomain, scaleRange);\n const yScaleSecondaryProto = scaleLinear(\n [effectiveSecondaryMin, effectiveSecondaryMax],\n scaleRange,\n );\n const tickCount = Math.max(\n actualTargetTickCount,\n yScalePrimaryProto.ticks(actualTargetTickCount).length,\n yScaleSecondaryProto.ticks(actualTargetTickCount).length,\n );\n const primaryTicks = yScale.ticks(tickCount).map(tick => ({\n value: yScale(tick) + startOffset,\n label: pipeTransform(tick, false),\n rawY: tick,\n }));\n\n //Finding a domain for the secondary data such that it will result in round tick values when matched with the primary ticks\n const secondaryTicksProto = yScaleSecondaryProto\n .ticks(tickCount)\n .map(tick => ({\n y: yScaleSecondaryProto(tick),\n rawY: tick,\n label: pipeTransform(tick, true),\n }));\n const primaryMinTick = Math.min(...primaryTicks.map(tick => tick.rawY));\n const primaryMaxTick = Math.max(...primaryTicks.map(tick => tick.rawY));\n const primaryDomainMaxTickRatio =\n primaryMaxTick !== 0 ? effectivePrimaryMax / primaryMaxTick : 0;\n const primaryDomainMinTickRatio =\n primaryMinTick !== 0 ? effectivePrimaryMin / primaryMinTick : 0;\n\n const primaryGap = primaryTicks[1].rawY - primaryTicks[0].rawY;\n const ticksBelowZero = primaryMinTick / primaryGap;\n const ticksAboveZero = primaryMaxTick / primaryGap;\n\n const secondaryGap =\n secondaryTicksProto[1].rawY - secondaryTicksProto[0].rawY;\n let calcRangeMult = 1;\n const secondaryDomainMinMult =\n ticksBelowZero * secondaryGap * primaryDomainMinTickRatio;\n const secondaryDomainMaxMult =\n ticksAboveZero * secondaryGap * primaryDomainMaxTickRatio;\n //First, we ensure the calcRangeMult is big enough\n let sizeUpComplete = false;\n while (!sizeUpComplete) {\n const calcRangeTooSmallForMin =\n secondaryDomainMinMult * calcRangeMult > effectiveSecondaryMin &&\n secondaryDomainMinMult !== 0;\n const calcRangeTooSmallForMax =\n secondaryDomainMaxMult * calcRangeMult < effectiveSecondaryMax &&\n secondaryDomainMaxMult !== 0;\n if (calcRangeTooSmallForMin || calcRangeTooSmallForMax) {\n calcRangeMult = calcRangeMult * 2;\n } else {\n sizeUpComplete = true;\n }\n }\n //Then, we check if we can scale down (for this one, both conditions have to be true, so it won't undo a previous scale up)\n let sizeDownComplete = false;\n while (!sizeDownComplete) {\n const calcRangeTooBigForMin =\n secondaryDomainMinMult * calcRangeMult < effectiveSecondaryMin * 2 &&\n secondaryDomainMinMult !== 0;\n const calcRangeTooBigForMax =\n secondaryDomainMaxMult * calcRangeMult > effectiveSecondaryMax * 2 &&\n secondaryDomainMaxMult !== 0;\n if (calcRangeTooBigForMin && calcRangeTooBigForMax) {\n calcRangeMult = calcRangeMult / 2;\n } else {\n sizeDownComplete = true;\n }\n }\n let secondaryDomainMin = secondaryDomainMinMult * calcRangeMult;\n let secondaryDomainMax = secondaryDomainMaxMult * calcRangeMult;\n //If the data is lopsided enough, it's possible that one of positive/negative have values, but no ticks\n if (secondaryDomainMin === 0 && effectivePrimaryMin < 0) {\n const posSecRatio = secondaryDomainMax / effectivePrimaryMax;\n secondaryDomainMin = posSecRatio * effectivePrimaryMin;\n }\n if (secondaryDomainMax === 0 && effectivePrimaryMax > 0) {\n const posSecRatio = secondaryDomainMin / effectivePrimaryMin;\n secondaryDomainMax = posSecRatio * effectivePrimaryMax;\n }\n const yScaleSecondary = scaleLinear(\n [secondaryDomainMin, secondaryDomainMax],\n scaleRange,\n );\n\n const ticks: GenericTick[] = primaryTicks.map(tick => ({\n ...tick,\n secondaryLabel: pipeTransform(\n yScaleSecondary.invert(yScale(tick.rawY)),\n true,\n ),\n }));\n\n const scale = (input: number, isSecondary: boolean | undefined): number => {\n if (isSecondary) {\n return yScaleSecondary(input) + startOffset;\n }\n return yScale(input) + startOffset;\n };\n return {\n scale,\n ticks,\n };\n }\n\n function calcDataScalingValues(data: ProcessData, config: Config) {\n const isStacked = isStackedData(config);\n const primaryDomainValues = calcYScaleDomainValues(data, isStacked, false);\n const secondaryDomainValues = calcYScaleDomainValues(data, isStacked, true);\n const primaryDataMax = Math.max(...primaryDomainValues.map(val => val.max));\n const secondaryDataMax = Math.max(\n ...secondaryDomainValues.map(val => val.max),\n );\n const primaryDataMin = Math.min(...primaryDomainValues.map(val => val.min));\n const secondaryDataMin = Math.min(\n ...secondaryDomainValues.map(val => val.min),\n );\n let scaleDomainMultipleForMax = 1;\n let scaleDomainMultipleForNeg = 1;\n\n //Calculating how much we need to multiple the domain by to 'fit' both axes' data\n if (isStacked) {\n for (let i = 0; i < primaryDomainValues.length; i++) {\n //Check positive max\n const primaryVal = primaryDomainValues[i].max;\n const secondaryVal = secondaryDomainValues[i].max;\n const primaryRatio =\n primaryDataMax !== 0 ? primaryVal / primaryDataMax : 0;\n const secondaryRatio =\n secondaryDataMax !== 0 ? secondaryVal / secondaryDataMax : 0;\n const multVal = primaryRatio + secondaryRatio;\n if (multVal > scaleDomainMultipleForMax) {\n scaleDomainMultipleForMax = multVal;\n }\n\n //Check negative min\n const primaryNegVal =\n primaryDomainValues[i].min < 0 ? primaryDomainValues[i].min : 0;\n const secondaryNegVal =\n secondaryDomainValues[i].min < 0 ? secondaryDomainValues[i].min : 0;\n const primaryNegRatio =\n primaryDataMin !== 0 ? primaryNegVal / primaryDataMin : 0;\n const secondaryNegRatio =\n secondaryDataMin !== 0 ? secondaryNegVal / secondaryDataMin : 0;\n const negMultVal = primaryNegRatio + secondaryNegRatio;\n if (negMultVal > scaleDomainMultipleForNeg) {\n scaleDomainMultipleForNeg = negMultVal;\n }\n }\n }\n\n return {\n primaryDataMin,\n primaryDataMax,\n secondaryDataMin,\n secondaryDataMax,\n scaleDomainMultipleForMax,\n scaleDomainMultipleForNeg,\n };\n }\n\n function calcYScaleDomainValues(\n data: ProcessData,\n isStacked: boolean,\n forSecondary: boolean,\n ): { max: number; min: number }[] {\n if (data.type === 'flow-processed') {\n if (forSecondary) {\n //Flow charts don't support secondary data\n return [{ min: 0, max: 0 }];\n }\n return [\n {\n min: 0,\n max: Math.max(...data.x.map(x => x.totalCount)),\n },\n ];\n }\n const possiblyStackedYs = data.ys.map((y, yIndex) => {\n //Handle stacking\n return isStacked\n ? y.values.map((val, xIndex) => {\n let prevRunningTotal = 0;\n for (let yI = 0; yI < yIndex; yI++) {\n if (checkIfSecondary(data, yI, xIndex, false) !== forSecondary) {\n continue;\n }\n const addVal = data.ys[yI].values[xIndex];\n //Only stack values of the same sign\n if (addVal < 0 === val < 0) {\n prevRunningTotal += addVal;\n }\n }\n return val + prevRunningTotal;\n })\n : y.values;\n });\n const suppYs = hasSupplementaryData(data) ? data.supplementaryYs : null;\n let possiblyStackedSupYs: number[][] = [];\n if (suppYs) {\n possiblyStackedSupYs = suppYs.map((y, yIndex) => {\n //Handle stacking\n return isStacked\n ? y.values.map((val, xIndex) => {\n let prevRunningTotal = 0;\n for (let yI = 0; yI < yIndex; yI++) {\n if (\n checkIfSecondary(data, yI, xIndex, true) !== forSecondary ||\n suppYs[yI].supplementalIndex !== y.supplementalIndex\n ) {\n continue;\n }\n const addVal = suppYs[yI].values[xIndex];\n //Only stack values of the same sign\n if (addVal < 0 === val < 0) {\n prevRunningTotal += addVal;\n }\n }\n return val + prevRunningTotal;\n })\n : y.values;\n });\n }\n\n const scaleRange: { max: number; min: number }[] = [];\n for (let i = 0; i < data.x.length; i++) {\n const maxNormY = Math.max(\n ...possiblyStackedYs.map((y, yIndex) => {\n if (checkIfSecondary(data, yIndex, i, false) !== forSecondary) {\n return 0;\n }\n return y[i];\n }),\n );\n const minNormY = Math.min(\n ...possiblyStackedYs.map((y, yIndex) => {\n if (checkIfSecondary(data, yIndex, i, false) !== forSecondary) {\n return 0;\n }\n return y[i];\n }),\n );\n const maxSupY = suppYs\n ? Math.max(\n ...possiblyStackedSupYs.map((y, yIndex) => {\n if (checkIfSecondary(data, yIndex, i, true) !== forSecondary) {\n return 0;\n }\n return y[i];\n }),\n )\n : 0;\n const minSupY = suppYs\n ? Math.min(\n ...possiblyStackedSupYs.map((y, yIndex) => {\n if (checkIfSecondary(data, yIndex, i, true) !== forSecondary) {\n return 0;\n }\n return y[i];\n }),\n )\n : 0;\n const max =\n maxNormY > 0 && maxNormY > maxSupY\n ? maxNormY\n : maxSupY > 0\n ? maxSupY\n : 0;\n const min =\n minNormY < 0 && minNormY < minSupY\n ? minNormY\n : minSupY < 0\n ? minSupY\n : 0;\n scaleRange.push({ max, min });\n }\n return scaleRange;\n }\n\n function calculateBarPosition(\n data: NonFlowData,\n config: Config,\n chartSizingValues: FullChartScaleValues,\n bucketNum: number,\n clusterNum: number,\n ): number {\n const offset =\n chartSizingValues.chartDataDirection === 'vertical'\n ? chartSizingValues.totalLeftOffset\n : chartSizingValues.totalTopOffset;\n const clusterOffset =\n clusterNum *\n (chartSizingValues.barSize + chartSizingValues.barClusterGap);\n const cumulativeBucketGap = getTotalPreBucketGap(\n data,\n config,\n chartSizingValues,\n bucketNum,\n );\n return offset + cumulativeBucketGap + clusterOffset;\n }\n\n function calculateHorizontalBarPath(\n leftSideRound: boolean,\n rightSideRound: boolean,\n xValue: number,\n yValue: number,\n horR: number,\n verR: number,\n height: number,\n width: number,\n ): string {\n if (leftSideRound && rightSideRound) {\n //Both-sides rounding variation\n const pathD = `\n M ${xValue + horR},${yValue}\n h ${width - horR * 2}\n q${horR},0 ${horR},${verR}\n v ${height - verR * 2}\n q0,${verR} -${horR},${verR}\n h ${-(width - horR * 2)}\n q-${horR},0 -${horR},-${verR}\n v -${height - verR * 2}\n q0,-${verR} ${horR},-${verR}\n Z\n `;\n return pathD;\n }\n if (leftSideRound) {\n //Left-side rounding variation\n const pathD = `\n M ${xValue + horR},${yValue}\n h ${width - horR}\n v ${height}\n h ${-(width - horR)}\n q-${horR},0 -${horR},-${verR}\n v -${height - verR * 2}\n q0,-${verR} ${horR},-${verR}\n Z\n `;\n return pathD;\n }\n if (rightSideRound) {\n //Right-side rounding variation\n const pathD = `\n M ${xValue},${yValue}\n h ${width - horR}\n q${horR},0 ${horR},${verR}\n v ${height - verR * 2}\n q0,${verR} -${horR},${verR}\n h ${-(width - horR)}\n Z\n `;\n return pathD;\n }\n //No-rounding variation\n const pathD = `\n M ${xValue},${yValue}\n h ${width}\n v ${height}\n h ${-width}\n v -${height}\n Z\n `;\n return pathD;\n }\n\n function getBucketAndClusterNumForHover(\n pos: number,\n chartSizingValues: FullChartScaleValues,\n data: NonFlowData,\n config: Config,\n bucketCount: number,\n ): {\n bucketNum: number;\n clusterNum: number;\n clusterNormCount: number;\n clusterNumType: 'norm' | 'supp';\n } | null {\n let bucketLeeway = chartSizingValues.bucketGap / 4;\n //if there's only 1 data point, use the outerGap as leeway instead\n if (data.x.length === 1) {\n bucketLeeway = chartSizingValues.outerGap / 4;\n }\n const barLeeway = chartSizingValues.barClusterGap / 2;\n\n const offset =\n chartSizingValues.chartDataDirection === 'vertical'\n ? chartSizingValues.totalLeftOffset\n : chartSizingValues.totalTopOffset;\n const relativePos = pos - offset;\n let bucketNum = -1;\n for (let i = 0; i < bucketCount; i++) {\n const bucketStartPos = getTotalPreBucketGap(\n data,\n config,\n chartSizingValues,\n i,\n );\n if (\n bucketStartPos - bucketLeeway < relativePos &&\n bucketStartPos +\n getBucketSize(data, config, chartSizingValues) +\n bucketLeeway >\n relativePos\n ) {\n bucketNum = i;\n break;\n }\n }\n if (bucketNum === -1) {\n return null;\n }\n if (!isClusteredData(data, config, true)) {\n return {\n bucketNum,\n clusterNum: 0,\n clusterNormCount: 1,\n clusterNumType: 'norm',\n };\n }\n\n const relativeBucketPos =\n relativePos -\n getTotalPreBucketGap(data, config, chartSizingValues, bucketNum);\n const clusterCount = getClusterInfoForBucket(data, config);\n let clusterNum = -1;\n for (let i = 0; i < clusterCount.total; i++) {\n const barStartPos =\n (chartSizingValues.barSize + chartSizingValues.barClusterGap) * i;\n if (\n barStartPos - barLeeway < relativeBucketPos &&\n barStartPos + chartSizingValues.barSize + barLeeway > relativeBucketPos\n ) {\n clusterNum = i;\n break;\n }\n }\n if (clusterNum === -1) {\n return null;\n }\n let clusterNumType: 'norm' | 'supp' = 'norm';\n if (clusterNum >= clusterCount.normCount) {\n clusterNumType = 'supp';\n }\n\n return {\n bucketNum,\n clusterNum,\n clusterNormCount: clusterCount.normCount,\n clusterNumType,\n };\n }\n\n function findNearestIndexWithSecondary(\n yInfo: { value: number; isSecondary: boolean }[],\n yPos: number,\n scale: (input: number, isSecondary: boolean | undefined) => number,\n ) {\n let foundIndex = 0;\n let currMinDistance = Math.abs(\n scale(yInfo[0].value, yInfo[0].isSecondary) - yPos,\n );\n for (let i = 1; i < yInfo.length; i++) {\n const newDistance = Math.abs(\n scale(yInfo[i].value, yInfo[i].isSecondary) - yPos,\n );\n if (newDistance < currMinDistance) {\n foundIndex = i;\n currMinDistance = newDistance;\n }\n }\n return foundIndex;\n }\n\n function getBarYInfo(\n data: NonFlowData,\n config: Config,\n yIndex: number,\n xIndex: number,\n scale: (input: number, isSecondary: boolean | undefined) => number,\n isSupplementary: boolean = false,\n ): { yValue: number; height: number } {\n const isStacked = isStackedData(config);\n const minimumSize = getMinimumDataElementSize(config);\n const zeroVal = scale(0, true);\n const yData = getMainOrSuppY(data, yIndex, isSupplementary);\n const scaleValue = scale(\n yData.values[xIndex],\n checkIfSecondary(data, yIndex, xIndex, isSupplementary),\n );\n if (scaleValue > zeroVal) {\n let prevBarHeights = 0;\n if (isStacked) {\n for (let i = 0; i < yIndex; i++) {\n const checkData = getMainOrSuppY(data, i, isSupplementary);\n //Both yData and checkData are definitely SupplementaryDataYs if isSupplementary is true, but they don't realize it\n if (\n isSupplementary &&\n 'supplementalIndex' in yData &&\n 'supplementalIndex' in checkData\n ) {\n if (yData.supplementalIndex !== checkData.supplementalIndex) {\n continue;\n }\n }\n const checkValue = scale(\n checkData.values[xIndex],\n checkIfSecondary(data, i, xIndex, isSupplementary),\n );\n //Skip positive values\n if (checkValue < zeroVal) {\n continue;\n }\n prevBarHeights += applyMinimumDataElementSize(\n checkValue - zeroVal,\n checkData.values[xIndex],\n minimumSize,\n );\n }\n }\n const yValue = zeroVal + prevBarHeights;\n const height = applyMinimumDataElementSize(\n scaleValue - zeroVal,\n yData.values[xIndex],\n minimumSize,\n );\n return { yValue, height };\n }\n let prevBarHeights = 0;\n if (isStacked) {\n for (let i = 0; i < yIndex; i++) {\n const checkData = getMainOrSuppY(data, i, isSupplementary);\n //Both yData and checkData are definitely SupplementaryDataYs if isSupplementary is true, but they don't realize it\n if (\n isSupplementary &&\n 'supplementalIndex' in yData &&\n 'supplementalIndex' in checkData\n ) {\n if (yData.supplementalIndex !== checkData.supplementalIndex) {\n continue;\n }\n }\n const checkValue = scale(\n checkData.values[xIndex],\n checkIfSecondary(data, i, xIndex, isSupplementary),\n );\n //Skip negative values\n if (checkValue > zeroVal) {\n continue;\n }\n prevBarHeights += applyMinimumDataElementSize(\n zeroVal - checkValue,\n checkData.values[xIndex],\n minimumSize,\n );\n }\n }\n const height = applyMinimumDataElementSize(\n zeroVal - scaleValue,\n yData.values[xIndex],\n minimumSize,\n );\n const yValue = zeroVal - height - prevBarHeights;\n return { yValue, height };\n }\n\n function getSuppBarYInfoViaYIndex(\n data: NonFlowData,\n config: Config,\n yIndex: number,\n suppIndex: number,\n xIndex: number,\n scale: (input: number, isSecondary: boolean | undefined) => number,\n ): { yValue: number; height: number } {\n if (!hasSupplementaryData(data)) {\n return { yValue: 0, height: 0 };\n }\n const suppYs = data.supplementaryYs;\n // Find supplementary bars with the given supplementalIndex\n const groupSupps = suppYs.filter(s => s.supplementalIndex === suppIndex);\n // yIndex refers to which Y series (within the supplemental group) we're looking at\n if (yIndex >= 0 && yIndex < groupSupps.length) {\n // Find this supp in the original array\n const suppInOriginalArray = suppYs.indexOf(groupSupps[yIndex]);\n return getBarYInfo(\n data,\n config,\n suppInOriginalArray,\n xIndex,\n scale,\n true,\n );\n }\n return { yValue: 0, height: 0 };\n }\n\n function getMainOrSuppY(\n data: NonFlowData,\n yIndex: number,\n isSupplementary: boolean,\n ): DataY | SupplementaryDataY {\n if (hasSupplementaryData(data) && isSupplementary) {\n return data.supplementaryYs[yIndex];\n }\n return data.ys[yIndex];\n }\n\n function getBarXInfo(\n data: NonFlowData,\n config: Config,\n yIndex: number,\n xIndex: number,\n scale: (input: number, isSecondary: boolean | undefined) => number,\n isSupplementary: boolean = false,\n ): { xValue: number; width: number } {\n const isStacked = isStackedData(config);\n const minimumSize = getMinimumDataElementSize(config);\n const zeroVal = scale(0, true);\n const yData = getMainOrSuppY(data, yIndex, isSupplementary);\n const scaleValue = scale(\n yData.values[xIndex],\n checkIfSecondary(data, yIndex, xIndex, isSupplementary),\n );\n if (scaleValue < zeroVal) {\n let prevBarWidths = 0;\n if (isStacked) {\n for (let i = 0; i < yIndex; i++) {\n const checkData = getMainOrSuppY(data, i, isSupplementary);\n //Both yData and checkData are definitely SupplementaryDataYs if isSupplementary is true, but they don't realize it\n if (\n isSupplementary &&\n 'supplementalIndex' in yData &&\n 'supplementalIndex' in checkData\n ) {\n if (yData.supplementalIndex !== checkData.supplementalIndex) {\n continue;\n }\n }\n const checkVal = scale(\n checkData.values[xIndex],\n checkIfSecondary(data, i, xIndex, isSupplementary),\n );\n //Skip positive values\n if (checkVal > zeroVal) {\n continue;\n }\n prevBarWidths += applyMinimumDataElementSize(\n zeroVal - checkVal,\n checkData.values[xIndex],\n minimumSize,\n );\n }\n }\n const width = applyMinimumDataElementSize(\n zeroVal - scaleValue,\n yData.values[xIndex],\n minimumSize,\n );\n const xValue = zeroVal - width - prevBarWidths;\n return { xValue, width };\n }\n let prevBarWidths = 0;\n if (isStacked) {\n for (let i = 0; i < yIndex; i++) {\n const checkData = getMainOrSuppY(data, i, isSupplementary);\n //Both yData and checkData are definitely SupplementaryDataYs if isSupplementary is true, but they don't realize it\n if (\n isSupplementary &&\n 'supplementalIndex' in yData &&\n 'supplementalIndex' in checkData\n ) {\n if (yData.supplementalIndex !== checkData.supplementalIndex) {\n continue;\n }\n }\n const checkVal = scale(\n checkData.values[xIndex],\n checkIfSecondary(data, i, xIndex, isSupplementary),\n );\n //Skip negative values\n if (checkVal < zeroVal) {\n continue;\n }\n prevBarWidths += applyMinimumDataElementSize(\n checkVal - zeroVal,\n checkData.values[xIndex],\n minimumSize,\n );\n }\n }\n const xValue = prevBarWidths + zeroVal;\n const width = applyMinimumDataElementSize(\n scaleValue - zeroVal,\n yData.values[xIndex],\n minimumSize,\n );\n return { xValue, width };\n }\n\n function checkIfSecondary(\n data: NonFlowData,\n yIndex: number,\n xIndex: number,\n isSupplementary: boolean = false,\n ): boolean {\n if (data.type === 'labeled') {\n if (data.x[xIndex].isSecondary === true) {\n return true;\n }\n }\n return getMainOrSuppY(data, yIndex, isSupplementary).isSecondary === true;\n }\n\n function warnUnsupportedPatterns(\n data: NonFlowData,\n supportedPatterns: Pattern[],\n chartType: string,\n ): void {\n const allYs: DataY[] = [\n ...data.ys,\n ...(hasSupplementaryData(data) ? data.supplementaryYs : []),\n ];\n for (const y of allYs) {\n if (\n y.pattern &&\n y.pattern !== 'solid' &&\n !supportedPatterns.includes(y.pattern)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Heads up! The '${y.pattern}' pattern isn't supported for ${chartType} charts. Falling back to solid.`,\n );\n }\n }\n }\n\n function warnFlowData(\n data: InputData,\n chartType: string,\n ): data is NonFlowData {\n if (data.type === 'flow') {\n // eslint-disable-next-line no-console\n console.warn(\n `Heads up! The 'flow' data type isn't supported for ${chartType} charts.`,\n );\n return false;\n }\n return true;\n }\n\n // hide strips out hidden y values while retaining the original indices\n // for the remaining visible values\n function hide(data: NonFlowData): {\n data: NonFlowData;\n visibleIndices: number[];\n visibleSuppIndices: number[];\n } {\n const visibleIndices = data.ys\n .map((y, i) => ({ y, i }))\n .filter(({ y }) => !y.hidden)\n .map(({ i }) => i);\n const visibleSuppIndices = hasSupplementaryData(data)\n ? data.supplementaryYs\n .map((y, i) => ({ y, i }))\n .filter(({ y }) => !y.hidden)\n .map(({ i }) => i)\n : [];\n return {\n data: {\n ...data,\n ys: visibleIndices.map(i => data.ys[i]),\n supplementaryYs: visibleSuppIndices.map(i => data.supplementaryYs![i]),\n },\n visibleIndices,\n visibleSuppIndices,\n };\n }\n\n function waterfallTransform(\n data: NonFlowData,\n isWaterfall: boolean,\n ): { data: LabeledData; map: Map<DataY, DataY> } {\n const waterfallMap = new Map<DataY, DataY>();\n if (data.type === 'timeseries' || !isWaterfall) {\n return {\n data: {\n type: 'labeled',\n x: [],\n ys: [],\n },\n map: waterfallMap,\n };\n }\n const newData: LabeledData = {\n ...data,\n x: [...data.x, { label: 'Total' }],\n ys: [\n ...data.ys.map(y => {\n const newY: DataY = {\n ...y,\n values: [...y.values, y.values.reduce((a, b) => a + b, 0)],\n };\n waterfallMap.set(newY, y);\n return newY;\n }),\n ],\n };\n return {\n data: newData,\n map: waterfallMap,\n };\n }\n\n function flowsTransform(\n config: FlowConfig,\n data: FlowData,\n ): ProcessedFlowData {\n const returnBuckets: FlowBucket[] = [];\n const maxPathLength = Math.max(...data.ys.map(y => y.steps.length));\n if (maxPathLength > 0 && maxPathLength < Infinity) {\n for (let i = 0; i < maxPathLength; i++) {\n const flowBucket: FlowBucket = {\n totalCount: 0,\n subBuckets: [],\n };\n for (const y of data.ys) {\n if (y.values.length > i && y.steps.length > i) {\n const subBucketId = y.steps[i];\n const foundSubBucket = flowBucket.subBuckets.find(\n subBucket => subBucket.id === subBucketId,\n );\n let subBucket: FlowSubBucket;\n if (foundSubBucket !== undefined) {\n subBucket = foundSubBucket;\n subBucket.count += y.values[i];\n } else {\n subBucket = {\n id: subBucketId,\n count: y.values[i],\n connections: [],\n };\n flowBucket.subBuckets.push(subBucket);\n }\n flowBucket.totalCount += y.values[i];\n\n //Fill in backwards connections\n if (i > 0) {\n const foundConnection = subBucket.connections.find(\n connection =>\n connection.start === y.steps[i - 1] &&\n connection.end === subBucketId &&\n connection.direction === 'backward',\n );\n if (foundConnection !== undefined) {\n foundConnection.count += y.values[i];\n } else {\n const newConnection: FlowConnection = {\n direction: 'backward',\n start: y.steps[i - 1],\n end: subBucketId,\n count: y.values[i],\n };\n subBucket.connections.push(newConnection);\n }\n }\n\n //Fill in forwards connections\n if (i < y.steps.length - 1 && i < y.values.length - 1) {\n const foundConnection = subBucket.connections.find(\n connection =>\n connection.start === subBucketId &&\n connection.end === y.steps[i + 1] &&\n connection.direction === 'forward',\n );\n if (foundConnection !== undefined) {\n foundConnection.count += y.values[i + 1];\n } else {\n const newConnection: FlowConnection = {\n direction: 'forward',\n start: subBucketId,\n end: y.steps[i + 1],\n count: y.values[i + 1],\n };\n subBucket.connections.push(newConnection);\n }\n }\n }\n }\n returnBuckets.push(flowBucket);\n }\n }\n\n const subBucketOrderingMap = new Map<string, number>();\n for (let i = 0; i < config.flowConfig.subBucketsConfig.length; i++) {\n subBucketOrderingMap.set(\n config.flowConfig.subBucketsConfig[i].bucketId,\n i,\n );\n }\n const mapGet = (id: string): number => {\n const foundResult = subBucketOrderingMap.get(id);\n if (foundResult !== undefined) {\n return foundResult;\n }\n //If something isn't defined in the config, put it at the end\n return Infinity;\n };\n\n //Ensure the data is sorted the same the way the config is, and drop empty\n //bars/connections so they're neither displayed nor factored into sizing\n return {\n type: 'flow-processed',\n x: returnBuckets.map(bucket => ({\n ...bucket,\n subBuckets: bucket.subBuckets\n .filter(subBucket => subBucket.count !== 0)\n .sort((a, b) => mapGet(a.id) - mapGet(b.id))\n .map(subBucket => ({\n ...subBucket,\n connections: subBucket.connections\n .filter(connection => connection.count !== 0)\n .sort((a, b) => {\n const firstSort = mapGet(a.start) - mapGet(b.start);\n if (firstSort !== 0) {\n return firstSort;\n }\n return mapGet(a.end) - mapGet(b.end);\n }),\n })),\n })),\n };\n }\n\n type ValueType = 'count' | 'currency' | 'percentage' | 'days';\n\n export function getPipes(valueType: ValueType) {\n switch (valueType) {\n case 'count': {\n return { pipe: new SmallNumberPipe(), fullPipe: new NumberPipe() };\n }\n case 'currency':\n return {\n pipe: new SmallCurrencyPipe(),\n fullPipe: new CurrencyPipe('en-us'),\n };\n case 'percentage': {\n const pipe = new PercentagePipe();\n return { pipe, fullPipe: pipe };\n }\n case 'days': {\n const pipe = new DaysPipe();\n return { pipe, fullPipe: pipe };\n }\n }\n }\n\n const intervals = ['year', 'quarter', 'month', 'week', 'day'] as const;\n export type Interval = (typeof intervals)[number];\n\n export function formatedDate(dateFormat: Interval, date: Date) {\n if (dateFormat === 'quarter') {\n const quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n const year = utcFormat(getTimeIntervalFormat('year'))(date);\n return `Q${quarter} ${year}`;\n }\n const format = getTimeIntervalFormat(dateFormat);\n return utcFormat(format)(date);\n }\n\n function getTimeIntervalFormat(interval: Interval): string {\n switch (interval) {\n case 'day':\n case 'week':\n return '%m/%d/%Y';\n case 'month':\n case 'quarter':\n return '%b %Y';\n case 'year':\n return '%Y';\n }\n }\n\n export function convertChartDataToDonutData(\n chartData: NonFlowData,\n ): DonutData[] {\n if (chartData.ys.find(y => y.values.length > 1)) {\n // eslint-disable-next-line no-console\n console.warn(\n \"Heads up! Pie charts don't support multiple values per series\",\n );\n }\n\n const donutData = chartData.ys.map(y => ({\n label: y.label,\n hidden: y.hidden,\n value: y.values.length >= 1 ? y.values[0] : 0,\n isSecondary: y.isSecondary,\n }));\n return donutData;\n }\n\n function arcToPoint(angle: number, radius: number) {\n return {\n x: radius * Math.cos(angle - Math.PI / 2),\n y: radius * Math.sin(angle - Math.PI / 2),\n };\n }\n\n function pointToArc(x: number, y: number) {\n const radius = Math.hypot(x, y);\n let angle = Math.atan2(y, x) + Math.PI / 2;\n //Normalize to be within range [0, 2π]\n angle = (angle + 2 * Math.PI) % (2 * Math.PI);\n\n return {\n angle,\n radius,\n };\n }\n\n function getFullChartScaleValues(\n config: ConfigWithFullScaling,\n data: ProcessData,\n dimensions: Dimensions,\n pipeTransform: ((value: number, isSecondary: boolean) => string) | null,\n dateFormat: ((date: Date) => string) | null,\n ): FullChartScaleValues | null {\n const chartDataDirection = getChartDataDirection(config);\n const defaultScalingConfig = getDefaultScalingConfigByChartType(\n config.type,\n config.secondaryValueType !== undefined,\n );\n const scalingConfig = combineScalingInfo(config, defaultScalingConfig);\n const nonDataAxisValues = calculateNonDataAxisValues(\n config,\n scalingConfig,\n config.scalingConfig?.elementScales,\n defaultScalingConfig.elementScales,\n dimensions,\n data,\n );\n const dataAxisValues = calculateDataAxisValues(\n config,\n scalingConfig,\n config.scalingConfig?.elementScales,\n defaultScalingConfig.elementScales,\n dimensions,\n data,\n pipeTransform,\n dateFormat,\n );\n if (\n nonDataAxisValues.sizingError === true ||\n dataAxisValues.sizingError === true\n ) {\n return null;\n }\n const dataLabelStartPadding =\n getDataLabelSizingCount(data, config).start *\n (dataAxisValues.dataLabelPadding + dataAxisValues.dataLabelTextSize);\n const dataLabelEndPadding =\n getDataLabelSizingCount(data, config).end *\n (dataAxisValues.dataLabelPadding + dataAxisValues.dataLabelTextSize);\n\n return {\n ...nonDataAxisValues,\n ...dataAxisValues,\n leftPadding:\n chartDataDirection === 'horizontal'\n ? dataAxisValues.startPadding\n : nonDataAxisValues.startPadding,\n rightPadding:\n chartDataDirection === 'horizontal'\n ? dataAxisValues.endPadding\n : nonDataAxisValues.endPadding,\n topPadding:\n chartDataDirection === 'horizontal'\n ? nonDataAxisValues.startPadding\n : dataAxisValues.startPadding,\n bottomPadding:\n chartDataDirection === 'horizontal'\n ? nonDataAxisValues.endPadding\n : dataAxisValues.endPadding,\n totalLeftOffset:\n chartDataDirection === 'horizontal'\n ? dataAxisValues.startPadding +\n dataAxisValues.leftBucketLabel +\n dataLabelStartPadding\n : nonDataAxisValues.startPadding + nonDataAxisValues.outerGap,\n totalRightOffset:\n chartDataDirection === 'horizontal'\n ? dataAxisValues.startPadding + dataLabelEndPadding\n : nonDataAxisValues.endPadding + nonDataAxisValues.outerGap,\n totalTopOffset:\n chartDataDirection === 'horizontal'\n ? nonDataAxisValues.startPadding + nonDataAxisValues.outerGap\n : dataAxisValues.startPadding + dataLabelStartPadding,\n totalBottomOffset:\n chartDataDirection === 'horizontal'\n ? nonDataAxisValues.endPadding + nonDataAxisValues.outerGap\n : dataAxisValues.endPadding + dataLabelEndPadding,\n targetTickCount: scalingConfig.targetTickCount,\n sizeForData: dataAxisValues.sizeForData,\n totalWidth:\n chartDataDirection === 'horizontal'\n ? dataAxisValues.totalSize\n : nonDataAxisValues.totalSize,\n totalHeight:\n chartDataDirection === 'horizontal'\n ? nonDataAxisValues.totalSize\n : dataAxisValues.totalSize,\n dataLabelTextSize: config.showDataLabels\n ? dataAxisValues.dataLabelTextSize\n : 0,\n horizontalAxisLabelTextSize:\n chartDataDirection === 'vertical'\n ? dataAxisValues.bucketLabelTextSize\n : dataAxisValues.dataLabelTextSize, //Ticks and data labels use the same formatting on the same kind of data\n verticalAxisLabelTextSize: dataAxisValues.fontSize,\n chartDataDirection,\n horizontalContainerScale: scalingConfig.horizontalContainerScale,\n verticalContainerScale: scalingConfig.verticalContainerScale,\n };\n }\n\n function calculateNonDataAxisValues(\n config: Config,\n scalingConfig: NonElementScalingConfig,\n elementScales: PartialElementScalingConfig | undefined,\n defaultSizing: FullElementScalingConfig,\n dimensions: Dimensions,\n data: ProcessData,\n ): {\n barSize: number;\n barClusterGap: number;\n bucketGap: number;\n outerGap: number;\n startPadding: number;\n endPadding: number;\n totalSize: number;\n sizingError?: boolean;\n } {\n const chartDataDirection = getChartDataDirection(config);\n const boundingDimension =\n chartDataDirection === 'horizontal'\n ? dimensions.height\n : dimensions.width;\n const axisScale =\n chartDataDirection === 'horizontal'\n ? scalingConfig?.verticalAxisScale\n : scalingConfig?.horizontalAxisScale;\n\n const barSizeConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'barSize',\n );\n const barClusterGapConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'barClusterGap',\n );\n const bucketGapConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'bucketGap',\n );\n const outerGapConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'outerGap',\n );\n const startPaddingConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n chartDataDirection === 'horizontal' ? 'topPadding' : 'leftPadding',\n );\n const endPaddingConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n chartDataDirection === 'horizontal' ? 'bottomPadding' : 'rightPadding',\n );\n\n const bucketCount = data.x.length;\n let barCount = 0;\n let barClusterGapCount = 0;\n for (let i = 0; i < bucketCount; i++) {\n if (data.type === 'flow-processed') {\n barCount += 1;\n } else {\n const bucketClusterCount = getClusterInfoForBucket(data, config);\n barCount += bucketClusterCount.total;\n barClusterGapCount += bucketClusterCount.total - 1;\n }\n }\n const bucketGapCount = bucketCount - 1;\n\n const barTotalSize = determinePossibleSizesOfElement(\n barSizeConfig,\n barCount,\n );\n const clusterGapTotalSize = determinePossibleSizesOfElement(\n barClusterGapConfig,\n barClusterGapCount,\n );\n const bucketGapTotalSize = determinePossibleSizesOfElement(\n bucketGapConfig,\n bucketGapCount,\n );\n const outerGapTotalSize = determinePossibleSizesOfElement(\n outerGapConfig,\n 2,\n );\n const startPaddingTotalSize = determinePossibleSizesOfElement(\n startPaddingConfig,\n 1,\n );\n const endPaddingTotalSize = determinePossibleSizesOfElement(\n endPaddingConfig,\n 1,\n );\n\n const calcTargetSize =\n barTotalSize.target +\n clusterGapTotalSize.target +\n bucketGapTotalSize.target +\n outerGapTotalSize.target +\n startPaddingTotalSize.target +\n endPaddingTotalSize.target;\n\n if (\n axisScale === 'no-scale' ||\n calcTargetSize === boundingDimension ||\n (axisScale === 'grow' && calcTargetSize > boundingDimension) ||\n (axisScale === 'shrink' && calcTargetSize < boundingDimension)\n ) {\n //No element scaling necessary, return everything as it's target value\n return {\n barSize: barSizeConfig.target,\n barClusterGap: barClusterGapConfig.target,\n bucketGap: bucketGapConfig.target,\n outerGap: outerGapConfig.target,\n startPadding: startPaddingConfig.target,\n endPadding: endPaddingConfig.target,\n totalSize: calcTargetSize,\n };\n }\n\n const calcMinSize =\n barTotalSize.min +\n clusterGapTotalSize.min +\n bucketGapTotalSize.min +\n outerGapTotalSize.min +\n startPaddingTotalSize.min +\n endPaddingTotalSize.min;\n\n //Note: This is only actually a max size if all elements have a defined max\n const calcMaxSize =\n barTotalSize.max +\n clusterGapTotalSize.max +\n bucketGapTotalSize.max +\n outerGapTotalSize.max +\n startPaddingTotalSize.max +\n endPaddingTotalSize.max;\n\n if (calcMinSize > boundingDimension) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The provided minimum element sizes mean the chart cannot display at this small of a size',\n );\n return {\n barSize: 0,\n barClusterGap: 0,\n bucketGap: 0,\n outerGap: 0,\n startPadding: 0,\n endPadding: 0,\n totalSize: 0,\n sizingError: true,\n };\n }\n const configChecks = [\n getCheckingInfoForElementConfig(barSizeConfig, barCount),\n getCheckingInfoForElementConfig(barClusterGapConfig, barClusterGapCount),\n getCheckingInfoForElementConfig(bucketGapConfig, bucketGapCount),\n getCheckingInfoForElementConfig(outerGapConfig, 2),\n getCheckingInfoForElementConfig(startPaddingConfig, 1),\n getCheckingInfoForElementConfig(endPaddingConfig, 1),\n ];\n let currScalingFactor = 1;\n if (calcTargetSize > boundingDimension) {\n //Scaling down\n let finalScalingFactorFound = false;\n while (!finalScalingFactorFound) {\n const nextScaleFactorBreakpoint = Math.max(\n ...configChecks\n .map(check => check.minScaleFactor)\n .filter(\n (val): val is number =>\n val !== undefined && !(val >= currScalingFactor),\n ),\n 0,\n );\n const newScaleFactorSize = getSumForScaleValue(\n configChecks,\n nextScaleFactorBreakpoint,\n );\n\n if (newScaleFactorSize <= boundingDimension) {\n //There's a scale value that'll work between the curr and new values\n //These are the values that'll just be at their min\n const nonScaleableValues = configChecks.filter(\n check =>\n check.minScaleFactor && check.minScaleFactor >= currScalingFactor,\n );\n //These are the values that can still be scaled down\n const scaleableValues = configChecks.filter(\n check =>\n !check.minScaleFactor || check.minScaleFactor < currScalingFactor,\n );\n const workingSpace =\n boundingDimension -\n getSumForScaleValue(nonScaleableValues, currScalingFactor);\n currScalingFactor =\n workingSpace / getSumForScaleValue(scaleableValues, 1);\n finalScalingFactorFound = true;\n } else {\n //One of the elements is hitting their minScaleFactor, so for simplicity we'll just go again\n currScalingFactor = nextScaleFactorBreakpoint;\n\n //Just in case, though previous checks should make this impossible\n if (currScalingFactor === 0) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The given size cannot contain the fixed sizes given for the elements',\n );\n return {\n barSize: 0,\n barClusterGap: 0,\n bucketGap: 0,\n outerGap: 0,\n startPadding: 0,\n endPadding: 0,\n totalSize: 0,\n sizingError: true,\n };\n }\n }\n }\n } else {\n //Checking to see if all elements have a defined max\n const maximumSizePossible =\n configChecks.filter(check => check.maxScaleFactor === undefined)\n .length === 0;\n //If all elements have a defined max, and that max is less than the size we're trying to grow to, it's impossible\n if (maximumSizePossible && calcMaxSize < boundingDimension) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The provided maximum element widths mean the chart cannot display at this large of a size',\n );\n return {\n barSize: 0,\n barClusterGap: 0,\n bucketGap: 0,\n outerGap: 0,\n startPadding: 0,\n endPadding: 0,\n totalSize: 0,\n sizingError: true,\n };\n }\n //Scaling up\n let finalScalingFactorFound = false;\n while (!finalScalingFactorFound) {\n const nextScaleFactorBreakpoint = Math.min(\n ...configChecks\n .map(check => check.maxScaleFactor)\n .filter(\n (val): val is number =>\n val !== undefined && !(val <= currScalingFactor),\n ),\n );\n const newScaleFactorSize = getSumForScaleValue(\n configChecks,\n nextScaleFactorBreakpoint,\n );\n\n if (\n newScaleFactorSize >= boundingDimension ||\n nextScaleFactorBreakpoint === Infinity\n ) {\n //There's a scale value that'll work between the curr and new values\n //These are the values that'll just be at their max\n const nonScaleableValues = configChecks.filter(\n check =>\n check.maxScaleFactor && check.maxScaleFactor <= currScalingFactor,\n );\n //These are the values that can still be scaled up\n const scaleableValues = configChecks.filter(\n check =>\n !check.maxScaleFactor || check.maxScaleFactor > currScalingFactor,\n );\n const workingSpace =\n boundingDimension -\n getSumForScaleValue(nonScaleableValues, currScalingFactor);\n currScalingFactor =\n workingSpace / getSumForScaleValue(scaleableValues, 1);\n finalScalingFactorFound = true;\n } else {\n //One of the elements is hitting their maxScaleFactor, so for simplicity we'll just go again\n currScalingFactor = nextScaleFactorBreakpoint;\n }\n }\n }\n const barSize = getScaledElementSize(barSizeConfig, currScalingFactor);\n const barClusterGap = getScaledElementSize(\n barClusterGapConfig,\n currScalingFactor,\n );\n const bucketGap = getScaledElementSize(bucketGapConfig, currScalingFactor);\n return {\n barSize,\n barClusterGap,\n bucketGap,\n outerGap: getScaledElementSize(outerGapConfig, currScalingFactor),\n startPadding: getScaledElementSize(startPaddingConfig, currScalingFactor),\n endPadding: getScaledElementSize(endPaddingConfig, currScalingFactor),\n totalSize: boundingDimension,\n };\n }\n\n function calculateDataAxisValues(\n config: Config,\n scalingConfig: NonElementScalingConfig,\n elementScales: PartialElementScalingConfig | undefined,\n defaultSizing: FullElementScalingConfig,\n dimensions: Dimensions,\n data: ProcessData,\n pipeTransform: ((value: number, isSecondary: boolean) => string) | null,\n dateFormat: ((date: Date) => string) | null,\n ): {\n startPadding: number;\n endPadding: number;\n leftBucketLabel: number;\n dataLabelTextSize: number;\n dataLabelPadding: number;\n fontSize: number;\n sizeForData: number;\n totalSize: number;\n bucketLabelTextSize: number;\n sizingError?: boolean;\n } {\n const chartDataDirection = getChartDataDirection(config);\n const boundingDimension =\n chartDataDirection === 'horizontal'\n ? dimensions.width\n : dimensions.height;\n const axisScale =\n chartDataDirection === 'horizontal'\n ? scalingConfig.horizontalAxisScale\n : scalingConfig.verticalAxisScale;\n\n const startPaddingConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n chartDataDirection === 'horizontal' ? 'leftPadding' : 'topPadding',\n );\n const endPaddingConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n chartDataDirection === 'horizontal' ? 'rightPadding' : 'bottomPadding',\n );\n const leftLabelConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'leftBucketLabel',\n );\n const dataLabelPaddingConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'dataLabelPadding',\n );\n const fontSizeConfig = getElementScalingInfo(\n elementScales,\n defaultSizing,\n 'fontSize',\n );\n const fontSize = fontSizeConfig.target;\n const dataLabelTextSizing = getDataLabelSize(data, pipeTransform, fontSize);\n //We always calculate and return dataLabelTextSize, since it's also used for determing axis label size\n const dataLabelTextSize =\n chartDataDirection === 'horizontal'\n ? dataLabelTextSizing.horizontal\n : dataLabelTextSizing.vertical;\n const dataLabelFixedSize =\n dataLabelTextSize * getDataLabelSizingCount(data, config).total;\n const bucketLabelTextSize = getBucketLabelSize(data, fontSize, dateFormat);\n //Flow charts have a data label above each sub-bucket\n const flowLabelSize = dataLabelTextSize + dataLabelPaddingConfig.target;\n\n const startPaddingTotalSize = determinePossibleSizesOfElement(\n startPaddingConfig,\n 1,\n );\n const endPaddingTotalSize = determinePossibleSizesOfElement(\n endPaddingConfig,\n 1,\n );\n const dataLabelPaddingTotalSize = determinePossibleSizesOfElement(\n dataLabelPaddingConfig,\n getDataLabelSizingCount(data, config).total,\n );\n\n let leftBucketLabelActualSize = leftLabelConfig.target;\n if (chartDataDirection === 'horizontal' && data.type === 'labeled') {\n //For horizontal bars, the start padding will scale based on the bucket labels\n const longestLabelLength =\n Math.max(...data.x.map(x => x.label.length)) *\n (WIDTH_PER_LETTER * (fontSize / DEFAULT_FONT_SIZE));\n const minLength = leftLabelConfig.min\n ? Math.max(longestLabelLength, leftLabelConfig.min)\n : longestLabelLength;\n leftBucketLabelActualSize = leftLabelConfig.max\n ? Math.min(minLength, leftLabelConfig.max)\n : longestLabelLength;\n }\n\n let fixedSizeValue =\n leftBucketLabelActualSize +\n dataLabelFixedSize +\n startPaddingTotalSize.target +\n endPaddingTotalSize.target +\n dataLabelPaddingTotalSize.target;\n if (fixedSizeValue > boundingDimension) {\n //See if further truncating the label can help\n if (\n leftLabelConfig.min &&\n fixedSizeValue - boundingDimension <\n leftBucketLabelActualSize - leftLabelConfig.min\n ) {\n leftBucketLabelActualSize =\n leftBucketLabelActualSize - (fixedSizeValue - boundingDimension);\n fixedSizeValue =\n leftBucketLabelActualSize +\n startPaddingTotalSize.target +\n endPaddingTotalSize.target +\n dataLabelPaddingTotalSize.target;\n } else if (\n axisScale !== 'grow' &&\n (axisScale !== 'no-scale' || scalingConfig.dataScale.type === 'fit')\n ) {\n //Growing and non-fitting data axes can scroll instead\n // eslint-disable-next-line no-console\n console.warn(\n 'The provided element sizes mean the chart cannot display at this small of a size',\n );\n return {\n startPadding: 0,\n endPadding: 0,\n leftBucketLabel: 0,\n dataLabelTextSize: 0,\n dataLabelPadding: 0,\n fontSize: 0,\n sizeForData: 0,\n totalSize: 0,\n bucketLabelTextSize: 0,\n sizingError: true,\n };\n }\n }\n if (\n axisScale === 'scale-to-fit' ||\n axisScale === 'grow' ||\n axisScale === 'shrink' ||\n scalingConfig.dataScale.type === 'fit'\n ) {\n //A growing data axis scrolls rather than squeezing the data below its minimum size\n const availableSize =\n axisScale === 'grow'\n ? Math.max(\n boundingDimension - fixedSizeValue,\n getMinimumGrownDataSize(\n data,\n config,\n boundingDimension,\n flowLabelSize,\n ),\n )\n : boundingDimension - fixedSizeValue;\n const sizeForData = getFittedDataSize(\n data,\n config,\n availableSize,\n flowLabelSize,\n );\n if (sizeForData === null) {\n // eslint-disable-next-line no-console\n console.warn(\n 'The provided minimum data element size means the chart cannot display at this small of a size',\n );\n return {\n startPadding: 0,\n endPadding: 0,\n leftBucketLabel: 0,\n dataLabelTextSize: 0,\n dataLabelPadding: 0,\n fontSize: 0,\n sizeForData: 0,\n totalSize: 0,\n bucketLabelTextSize: 0,\n sizingError: true,\n };\n }\n return {\n startPadding: startPaddingConfig.target,\n endPadding: endPaddingConfig.target,\n leftBucketLabel: leftBucketLabelActualSize,\n dataLabelTextSize,\n dataLabelPadding: dataLabelPaddingConfig.target,\n fontSize: fontSizeConfig.target,\n sizeForData,\n totalSize: fixedSizeValue + availableSize,\n bucketLabelTextSize,\n };\n }\n\n const {\n primaryDataMin,\n primaryDataMax,\n scaleDomainMultipleForMax,\n scaleDomainMultipleForNeg,\n } = calcDataScalingValues(data, config);\n\n const effectivePrimaryMaxForScaling =\n primaryDataMax * scaleDomainMultipleForMax;\n const effectivePrimaryMinForScaling =\n primaryDataMin < 0 ? primaryDataMin * scaleDomainMultipleForNeg : 0;\n\n if (scalingConfig.dataScale.type === 'max') {\n const dataSize =\n scalingConfig.dataScale.value *\n ((effectivePrimaryMaxForScaling - effectivePrimaryMinForScaling) /\n effectivePrimaryMaxForScaling);\n return {\n startPadding: startPaddingConfig.target,\n endPadding: endPaddingConfig.target,\n leftBucketLabel: leftBucketLabelActualSize,\n dataLabelTextSize,\n dataLabelPadding: dataLabelPaddingConfig.target,\n fontSize: fontSizeConfig.target,\n sizeForData: dataSize,\n totalSize:\n getScaledDataTotalSize(data, config, dataSize, flowLabelSize) +\n fixedSizeValue,\n bucketLabelTextSize,\n };\n }\n\n const dataSize =\n ((effectivePrimaryMaxForScaling - effectivePrimaryMinForScaling) /\n scalingConfig.dataScale.ratio.value) *\n scalingConfig.dataScale.ratio.px;\n return {\n startPadding: startPaddingConfig.target,\n endPadding: endPaddingConfig.target,\n leftBucketLabel: leftBucketLabelActualSize,\n dataLabelTextSize,\n dataLabelPadding: dataLabelPaddingConfig.target,\n fontSize: fontSizeConfig.target,\n sizeForData: dataSize,\n totalSize:\n getScaledDataTotalSize(data, config, dataSize, flowLabelSize) +\n fixedSizeValue,\n bucketLabelTextSize,\n };\n }\n\n //The least space a growing data axis gives the data: a portion of the provided size, on top of the space that\n // elements enlarged to the minimum size need (so the data stays proportional rather than all being the minimum)\n function getMinimumGrownDataSize(\n data: ProcessData,\n config: Config,\n boundingDimension: number,\n labelSize: number,\n ): number {\n const minimumElementsSize =\n data.type === 'flow-processed'\n ? getMaxFlowBucketSize(\n data,\n 0,\n getMinimumDataElementSize(config),\n labelSize,\n ) - getFlowMidLabelSize(data, labelSize)\n : 0;\n return boundingDimension * GROWN_DATA_MINIMUM_RATIO + minimumElementsSize;\n }\n\n //For flow charts, finds the size the data scale should map to so that every bucket (including its own data labels,\n // and any elements enlarged to the minimum size) fits in the available size\n //Returns null if the minimum sizes alone can't fit\n function getFittedDataSize(\n data: ProcessData,\n config: Config,\n availableSize: number,\n labelSize: number,\n ): number | null {\n if (data.type !== 'flow-processed') {\n return availableSize;\n }\n const dataMax = Math.max(...data.x.map(x => x.totalCount));\n if (dataMax <= 0) {\n return availableSize;\n }\n const minimumSize = getMinimumDataElementSize(config);\n const bucketAvailableSize =\n availableSize + getFlowMidLabelSize(data, labelSize);\n //Calculate what the sizing would need to be for each individual column,\n // taking the value that is most restrictive. Not applying minimum size yet\n const unenlargedRatio = Math.min(\n ...data.x\n .filter(bucket => bucket.totalCount > 0)\n .map(\n bucket =>\n (bucketAvailableSize - (bucket.subBuckets.length - 1) * labelSize) /\n bucket.totalCount,\n ),\n );\n if (\n minimumSize === 0 ||\n getMaxFlowBucketSize(data, unenlargedRatio, minimumSize, labelSize) <=\n bucketAvailableSize\n ) {\n return unenlargedRatio * dataMax;\n }\n if (\n getMaxFlowBucketSize(data, 0, minimumSize, labelSize) >\n bucketAvailableSize\n ) {\n return null;\n }\n //Now, we apply minimum size to the bars to calculate our true ratio (found through binary search)\n let low = 0;\n let high = unenlargedRatio;\n for (let i = 0; i < 50; i++) {\n const mid = (low + high) / 2;\n if (\n getMaxFlowBucketSize(data, mid, minimumSize, labelSize) >\n bucketAvailableSize\n ) {\n high = mid;\n } else {\n low = mid;\n }\n }\n return low * dataMax;\n }\n\n //The size needed along the data axis beyond the fixed size\n //For flow charts, this is based on the tallest bucket (including its own data labels and any enlarged elements),\n // rather than assuming the bucket with the most data also has the most sub-buckets\n function getScaledDataTotalSize(\n data: ProcessData,\n config: Config,\n dataSize: number,\n labelSize: number,\n ): number {\n if (data.type !== 'flow-processed') {\n return dataSize;\n }\n const dataMax = Math.max(...data.x.map(x => x.totalCount));\n if (dataMax <= 0) {\n return dataSize;\n }\n return (\n getMaxFlowBucketSize(\n data,\n dataSize / dataMax,\n getMinimumDataElementSize(config),\n labelSize,\n ) - getFlowMidLabelSize(data, labelSize)\n );\n }\n\n function getDataLabelSize(\n data: ProcessData,\n pipeTransform: ((value: number, isSecondary: boolean) => string) | null,\n fontSize: number,\n ): { horizontal: number; vertical: number } {\n let normHorizontalMaxLength = 0;\n let normSuppMaxLength = 0;\n if (data.type !== 'flow-processed' && pipeTransform !== null) {\n normHorizontalMaxLength = Math.max(\n ...data.ys.map((y, yIndex) =>\n Math.max(\n ...y.values.map((val, xIndex) =>\n checkLabelLength(\n pipeTransform(\n val,\n checkIfSecondary(data, yIndex, xIndex, false),\n ),\n fontSize,\n ),\n ),\n ),\n ),\n );\n normSuppMaxLength = Math.max(\n ...(data.supplementaryYs ?? []).map((y, yIndex) =>\n Math.max(\n ...y.values.map((val, xIndex) =>\n checkLabelLength(\n pipeTransform(\n val,\n checkIfSecondary(data, yIndex, xIndex, true),\n ),\n fontSize,\n ),\n ),\n ),\n ),\n );\n }\n if (data.type === 'flow-processed') {\n return {\n horizontal: Math.max(normHorizontalMaxLength, normSuppMaxLength),\n vertical: fontSize * 2,\n };\n }\n return {\n horizontal: Math.max(normHorizontalMaxLength, normSuppMaxLength),\n vertical: fontSize,\n };\n }\n\n function getBucketLabelSize(\n data: ProcessData,\n fontSize: number,\n dateFormat: ((date: Date) => string) | null,\n ) {\n if (dateFormat !== null) {\n if (data.type === 'labeled') {\n return Math.max(\n ...data.x.map(x => checkLabelLength(x.label, fontSize)),\n );\n } else if (data.type === 'timeseries') {\n return Math.max(\n ...data.x.map(x =>\n checkLabelLength(dateFormat(new Date(x)), fontSize),\n ),\n );\n }\n }\n return 0;\n }\n\n function checkLabelLength(value: string, fontSize: number): number {\n const periodCount = (value.match(/\\./g) || []).length;\n const slashCount = (value.match(/\\//g) || []).length;\n const fontScaleFactor = fontSize / DEFAULT_FONT_SIZE;\n return (\n (value.length - (periodCount + slashCount)) *\n (WIDTH_PER_NUMBER * fontScaleFactor) +\n periodCount * (WIDTH_PER_PERIOD * fontScaleFactor) +\n slashCount * (WIDTH_PER_SLASH * fontScaleFactor)\n );\n }\n\n export function isBarType(type: Chart.ChartType): boolean {\n if (\n type === 'bar' ||\n type === 'horizontal-bar' ||\n type === 'waterfall' ||\n type === 'funnel'\n ) {\n return true;\n }\n return false;\n }\n\n //Only bar-type and flow charts have discrete data elements that the minimum size applies to\n function getMinimumDataElementSize(config: Config): number {\n if (\n config.type === 'donut' ||\n config.type === 'line' ||\n config.type === 'area'\n ) {\n return 0;\n }\n return config.scalingConfig?.dataScale?.minimumDataElementSize ?? 0;\n }\n\n //Any data element with a non-zero value is kept at or above the minimum size\n function applyMinimumDataElementSize(\n size: number,\n value: number,\n minimumSize: number,\n ): number {\n return value !== 0 ? Math.max(size, minimumSize) : size;\n }\n\n function getFlowSubBucketSizes(\n subBucket: FlowSubBucket,\n valueToSize: (value: number) => number,\n minimumSize: number,\n ): {\n totalSize: number;\n continuingSize: number;\n connectionSizes: number[];\n } {\n const connectionSizes = subBucket.connections.map(connection =>\n applyMinimumDataElementSize(\n valueToSize(connection.count),\n connection.count,\n minimumSize,\n ),\n );\n const sumSizes = (direction: FlowConnection['direction']): number =>\n sum(\n connectionSizes.filter(\n (_, i) => subBucket.connections[i].direction === direction,\n ),\n );\n const continuingSize = sumSizes('forward');\n const backwardSize = sumSizes('backward');\n const nonContinuingCount =\n subBucket.count -\n sum(\n subBucket.connections\n .filter(connection => connection.direction === 'forward')\n .map(connection => connection.count),\n );\n //The sub-bucket must be big enough to hold all of its (possibly enlarged) connections on either side\n const totalSize = Math.max(\n applyMinimumDataElementSize(\n valueToSize(subBucket.count),\n subBucket.count,\n minimumSize,\n ),\n continuingSize +\n applyMinimumDataElementSize(\n valueToSize(nonContinuingCount),\n nonContinuingCount,\n minimumSize,\n ),\n backwardSize,\n );\n //Every unit in a sub-bucket arrives through its backward connections, so they're stretched to fill the\n // sub-bucket when it has been enlarged beyond them\n return {\n totalSize,\n continuingSize,\n connectionSizes: connectionSizes.map((size, i) =>\n subBucket.connections[i].direction === 'backward' && backwardSize > 0\n ? (size * totalSize) / backwardSize\n : size,\n ),\n };\n }\n\n //The size of the tallest flow bucket for the given scaling ratio, including the data labels between its sub-buckets\n // The label above the first sub-bucket is excluded, since it's part of the top offset\n function getMaxFlowBucketSize(\n data: ProcessedFlowData,\n pxPerValue: number,\n minimumSize: number,\n labelSize: number,\n ): number {\n return Math.max(\n ...data.x.map(\n bucket =>\n sum(\n bucket.subBuckets.map(\n subBucket =>\n getFlowSubBucketSizes(\n subBucket,\n value => value * pxPerValue,\n minimumSize,\n ).totalSize,\n ),\n ) +\n (bucket.subBuckets.length - 1) * labelSize,\n ),\n );\n }\n\n //The fixed size reserves room for the labels between sub-buckets as if every bucket had as many sub-buckets as the\n // bucket with the most, so this is the portion of the fixed size that each bucket can instead use based on its own labels\n function getFlowMidLabelSize(\n data: ProcessedFlowData,\n labelSize: number,\n ): number {\n return (\n (Math.max(...data.x.map(bucket => bucket.subBuckets.length)) - 1) *\n labelSize\n );\n }\n\n function isStackedData(config: Config): boolean {\n if (config.type === 'bar' || config.type === 'horizontal-bar') {\n if (config.groupingType === 'stacked') {\n return true;\n }\n }\n if (config.type === 'area' || config.type === 'waterfall') {\n return true;\n }\n return false;\n }\n\n function isClusteredData(\n data: NonFlowData,\n config: Config,\n includeSupplementary: boolean,\n ): boolean {\n //It varies whether we want to include supplementary data in this check\n if (hasSupplementaryData(data) && includeSupplementary) {\n return true;\n }\n if (\n (config.type === 'bar' || config.type === 'horizontal-bar') &&\n config.groupingType === 'clustered'\n ) {\n return true;\n }\n if (config.type === 'funnel') {\n return true;\n }\n return false;\n }\n\n //In some cases, the distinction between clustered and stacked doesn't matter\n function isGroupingTypeException(data: NonFlowData, config: Config): boolean {\n if (data.ys.length === 1) {\n return true;\n }\n //Checking for a 'metric' charts, which is a special case for horizontal bar charts,\n // where each series is also a bucket (and vice versa)\n if (config.type === 'horizontal-bar') {\n if (\n data.x.length === data.ys.length &&\n data.ys.length ===\n data.ys.filter(y => y.values.filter(val => val !== 0).length === 1)\n .length\n ) {\n return true;\n }\n }\n return false;\n }\n\n function hasSupplementaryData(data: InputData): data is NonFlowData & {\n supplementaryYs: NonNullable<NonFlowData['supplementaryYs']>;\n } {\n if (data.type === 'flow') {\n return false;\n }\n if (data.supplementaryYs && data.supplementaryYs.length > 0) {\n return true;\n }\n return false;\n }\n\n function getElementScalingInfo(\n elementScales: PartialElementScalingConfig | undefined,\n defaultScalingConfig: FullElementScalingConfig,\n element: ChartScaleElement,\n ): ElementScalingConfiguration {\n const defaultElementConfig = defaultScalingConfig[element];\n let inputConfig: ElementScalingConfiguration | null;\n if (elementScales) {\n const possibleConfig = elementScales[element];\n if (possibleConfig) {\n inputConfig = possibleConfig;\n } else {\n inputConfig = null;\n }\n } else {\n inputConfig = null;\n }\n\n if (inputConfig !== null) {\n const returnConfig = inputConfig as ElementScalingConfiguration;\n return returnConfig;\n }\n if (defaultElementConfig.target !== undefined) {\n const returnConfig = defaultElementConfig as ElementScalingConfiguration;\n return returnConfig;\n }\n return {\n target: 0,\n };\n }\n\n function determinePossibleSizesOfElement(\n elementConfig: ElementScalingConfiguration,\n elementCount: number,\n ): { min: number; max: number; target: number } {\n const indMin = elementConfig.min !== undefined ? elementConfig.min : 0;\n const indMax = elementConfig.max !== undefined ? elementConfig.max : 0;\n const indTarget = elementConfig.target;\n return {\n min: indMin * elementCount,\n max: indMax * elementCount,\n target: indTarget * elementCount,\n };\n }\n\n function determineTotalScaledSizeOfElement(\n elementConfig: ElementScalingConfiguration,\n elementCount: number,\n scaleValue: number,\n ): number {\n const scaledVal = getScaledElementSize(elementConfig, scaleValue);\n return scaledVal * elementCount;\n }\n\n function getScaledElementSize(\n elementConfig: ElementScalingConfiguration,\n scaleValue: number,\n ): number {\n const scaledTarget = elementConfig.target * scaleValue;\n if (scaleValue < 1) {\n if (elementConfig.min && elementConfig.min > scaledTarget) {\n return elementConfig.min;\n }\n return scaledTarget;\n }\n if (scaleValue > 1) {\n if (elementConfig.max && elementConfig.max < scaledTarget) {\n return elementConfig.max;\n }\n return scaledTarget;\n }\n return scaledTarget;\n }\n\n type ElementScaleCheckInfo = {\n config: ElementScalingConfiguration;\n minScaleFactor?: number;\n maxScaleFactor?: number;\n elementCount: number;\n };\n\n function getCheckingInfoForElementConfig(\n config: ElementScalingConfiguration,\n elementCount: number,\n ): ElementScaleCheckInfo {\n let minScaleFactor: number | undefined = undefined;\n if (config.min) {\n minScaleFactor =\n config.target !== 0 ? config.min / config.target : undefined;\n }\n let maxScaleFactor: number | undefined = undefined;\n if (config.max) {\n maxScaleFactor =\n config.target !== 0 ? config.max / config.target : undefined;\n }\n return {\n config,\n minScaleFactor,\n maxScaleFactor,\n elementCount,\n };\n }\n\n function getSumForScaleValue(\n checkInfos: ElementScaleCheckInfo[],\n scaleValue: number,\n ): number {\n let sum = 0;\n for (const check of checkInfos) {\n sum += determineTotalScaledSizeOfElement(\n check.config,\n check.elementCount,\n scaleValue,\n );\n }\n return sum;\n }\n\n function getDataLabelSizingCount(\n data: ProcessData,\n config: Config,\n ): { start: number; end: number; total: number } {\n if (config.showDataLabels !== true) {\n return {\n start: 0,\n end: 0,\n total: 0,\n };\n }\n //Data labels are always shown above the data for all but these 3 types\n if (\n config.type !== 'bar' &&\n config.type !== 'horizontal-bar' &&\n config.type !== 'waterfall' &&\n config.type !== 'flow'\n ) {\n return {\n start: 1,\n end: 0,\n total: 1,\n };\n }\n let startCount = 0;\n let midCount = 0;\n let endCount = 0;\n if (data.type !== 'flow-processed') {\n if (data.ys.find(y => y.values.find(val => val >= 0))) {\n if (config.type === 'horizontal-bar') {\n endCount += 1;\n } else {\n startCount += 1;\n }\n }\n if (data.ys.find(y => y.values.find(val => val < 0))) {\n if (config.type === 'horizontal-bar') {\n startCount += 1;\n } else {\n endCount += 1;\n }\n }\n } else {\n startCount = 1;\n midCount = Math.max(...data.x.map(x => x.subBuckets.length)) - 1;\n }\n return {\n start: startCount,\n end: endCount,\n total: startCount + midCount + endCount,\n };\n }\n\n function getIfHoverOutOfBounds(\n //Position not accounting for scrolling\n relPosX: number,\n relPosY: number,\n //Position accounting for scrolling\n realPosX: number,\n realPosY: number,\n chartSizingValues: FullChartScaleValues | null,\n dimensions: Dimensions,\n ): boolean {\n //Check if we're on top of one of the scrollbars\n if (relPosX > dimensions.width || relPosY > dimensions.height) {\n return true;\n }\n if (chartSizingValues === null) {\n //If chartSizingValues aren't provided, no more checks\n return false;\n }\n //Check if we're in one of the padding areas\n if (\n realPosX < chartSizingValues.leftPadding ||\n realPosX >\n chartSizingValues.totalWidth - chartSizingValues.rightPadding ||\n realPosY < chartSizingValues.topPadding ||\n realPosY > chartSizingValues.totalHeight - chartSizingValues.bottomPadding\n ) {\n return true;\n }\n return false;\n }\n\n function getChartDataDirection(config: Config): ChartDataDirection {\n if (config.type === 'horizontal-bar') {\n return 'horizontal';\n }\n return 'vertical';\n }\n\n function combineScalingInfo(\n config: ConfigWithFullScaling,\n defaultConfig: DefaultScalingConfig,\n ): NonElementScalingConfig {\n const providedScalingConfig = config.scalingConfig;\n const chartDataDirection = getChartDataDirection(config);\n\n //If the user provides a data scale, we don't want to override that unless they also provided a specific scale for the corresponding axis\n const dataScale =\n providedScalingConfig && providedScalingConfig.dataScale\n ? providedScalingConfig.dataScale\n : defaultConfig.nonElementScales.dataScale;\n let verticalAxisScale = providedScalingConfig?.verticalAxisScale;\n if (verticalAxisScale === undefined) {\n if (chartDataDirection === 'horizontal' || dataScale.type === 'fit') {\n verticalAxisScale = defaultConfig.nonElementScales.verticalAxisScale;\n } else {\n //The vertical axis is the data axis, the dataScale has a user-inputted value, and there isn't a user-inputted verticalAxisScale\n // So, we'll prevent the axis scaling from interfering with the dataScale\n verticalAxisScale = 'no-scale';\n }\n }\n let horizontalAxisScale = providedScalingConfig?.horizontalAxisScale;\n if (horizontalAxisScale === undefined) {\n if (chartDataDirection === 'vertical' || dataScale.type === 'fit') {\n horizontalAxisScale =\n defaultConfig.nonElementScales.horizontalAxisScale;\n } else {\n //The horizontal axis is the data axis, the dataScale has a user-inputted value, and there isn't a user-inputted horizontalAxisScale\n // So, we'll prevent the axis scaling from interfering with the dataScale\n horizontalAxisScale = 'no-scale';\n }\n }\n return {\n dataScale:\n providedScalingConfig && providedScalingConfig.dataScale\n ? providedScalingConfig.dataScale\n : defaultConfig.nonElementScales.dataScale,\n horizontalAxisScale,\n verticalAxisScale,\n horizontalContainerScale:\n providedScalingConfig && providedScalingConfig.horizontalContainerScale\n ? providedScalingConfig.horizontalContainerScale\n : defaultConfig.nonElementScales.horizontalContainerScale,\n verticalContainerScale:\n providedScalingConfig && providedScalingConfig.verticalContainerScale\n ? providedScalingConfig.verticalContainerScale\n : defaultConfig.nonElementScales.verticalContainerScale,\n targetTickCount:\n providedScalingConfig &&\n providedScalingConfig.targetTickCount !== undefined\n ? providedScalingConfig.targetTickCount\n : defaultConfig.nonElementScales.targetTickCount,\n };\n }\n\n function isDeEmphasized(\n config: FlowConfig,\n id: string,\n isDarkened: boolean,\n ): boolean {\n const highlightedBuckets = config.flowConfig.subBucketsConfig\n .filter(sbc => sbc.isHighlighted === true)\n .map(sbc => sbc.bucketId);\n if (highlightedBuckets.length === 0) {\n return false;\n }\n if (isDarkened) {\n return true;\n }\n if (highlightedBuckets.some(hb => hb === id)) {\n return false;\n }\n return true;\n }\n\n function calculateFlowConnectionPath(\n connection: FlowConnectionRender,\n ): string {\n const dx = connection.topLine.x2 - connection.topLine.x1;\n const curve = Math.abs(dx) * FLOW_CONNECTION_CURVE_CONSTANT;\n\n const path = `\n M ${connection.topLine.x1},${connection.topLine.y1}\n\n C ${connection.topLine.x1 + curve},${connection.topLine.y1}\n ${connection.topLine.x2 - curve},${connection.topLine.y2}\n ${connection.topLine.x2},${connection.topLine.y2}\n\n L ${connection.bottomLine.x2},${connection.bottomLine.y2}\n\n C ${connection.bottomLine.x2 - curve},${connection.bottomLine.y2}\n ${connection.bottomLine.x1 + curve},${connection.bottomLine.y1}\n ${connection.bottomLine.x1},${connection.bottomLine.y1}\n\n Z\n `;\n\n return path;\n }\n\n function cubic(\n a: number,\n b: number,\n c: number,\n d: number,\n t: number,\n ): number {\n const mt = 1 - t;\n return mt ** 3 * a + 3 * mt ** 2 * t * b + 3 * mt * t ** 2 * c + t ** 3 * d;\n }\n\n function bezierYAtX(\n x: number,\n line: {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n },\n ): number {\n const curve = Math.abs(line.x2 - line.x1) * FLOW_CONNECTION_CURVE_CONSTANT;\n const p0 = { x: line.x1, y: line.y1 };\n const p1 = { x: line.x1 + curve, y: line.y1 };\n const p2 = { x: line.x2 - curve, y: line.y2 };\n const p3 = { x: line.x2, y: line.y2 };\n\n let lo = 0;\n let hi = 1;\n\n // Binary search for t where bezierX(t) ~= x\n for (let i = 0; i < 20; i++) {\n const t = (lo + hi) / 2;\n const bx = cubic(p0.x, p1.x, p2.x, p3.x, t);\n\n if (bx < x) lo = t;\n else hi = t;\n }\n\n const t = (lo + hi) / 2;\n return cubic(p0.y, p1.y, p2.y, p3.y, t);\n }\n\n function checkIfPointWithinConnection(\n connection: FlowConnectionRender,\n pointX: number,\n pointY: number,\n ): boolean {\n const topY = bezierYAtX(pointX, connection.topLine);\n\n const bottomY = bezierYAtX(pointX, connection.bottomLine);\n\n return (\n pointX >= connection.topLine.x1 &&\n pointX <= connection.topLine.x2 &&\n pointY >= Math.min(topY, bottomY) &&\n pointY <= Math.max(topY, bottomY)\n );\n }\n\n function getFlowBucketIndexForHover(\n chartSizingValues: FullChartScaleValues,\n xPos: number,\n ): { index: number; area: 'bar' | 'connection' } | null {\n let bucketIndex = 0;\n const bucketLeftEdge = chartSizingValues.totalLeftOffset;\n const totalBucketGap =\n chartSizingValues.barSize + chartSizingValues.bucketGap;\n if (bucketLeftEdge > xPos) {\n return null;\n }\n while (bucketLeftEdge + bucketIndex * totalBucketGap < xPos) {\n if (bucketLeftEdge + (bucketIndex + 1) * totalBucketGap > xPos) {\n if (\n bucketLeftEdge +\n bucketIndex * totalBucketGap +\n chartSizingValues.barSize >\n xPos\n ) {\n return {\n index: bucketIndex,\n area: 'bar',\n };\n } else {\n return {\n index: bucketIndex,\n area: 'connection',\n };\n }\n }\n bucketIndex += 1;\n }\n return null;\n }\n\n //These overloads ensure the function knows that, if width and height are defined on input, they'll be defined on output\n function checkAnchorsAgainstBound(\n anchorX: number,\n anchorY: number,\n dimensions: Dimensions,\n ): { anchorX: number; anchorY: number };\n\n function checkAnchorsAgainstBound(\n anchorX: number,\n anchorY: number,\n dimensions: Dimensions,\n width: number,\n height: number,\n ): {\n anchorX: number;\n anchorY: number;\n anchorWidth: number;\n anchorHeight: number;\n };\n\n function checkAnchorsAgainstBound(\n anchorX: number,\n anchorY: number,\n dimensions: Dimensions,\n width?: number,\n height?: number,\n ): {\n anchorX: number;\n anchorY: number;\n anchorWidth?: number;\n anchorHeight?: number;\n } {\n let retAnchorX = anchorX;\n let retAnchorY = anchorY;\n let retWidth: number | undefined = width;\n let retHeight: number | undefined = height;\n if (retAnchorX > dimensions.width) {\n retAnchorX = dimensions.width;\n if (retWidth !== undefined) {\n retWidth = 0;\n }\n }\n if (retAnchorX < 0) {\n retAnchorX = 0;\n if (retWidth !== undefined) {\n retWidth = 0;\n }\n }\n if (retAnchorY > dimensions.height) {\n retAnchorY = dimensions.height;\n if (retHeight !== undefined) {\n retHeight = 0;\n }\n }\n if (retAnchorY < 0) {\n retAnchorY = 0;\n if (retHeight !== undefined) {\n retHeight = 0;\n }\n }\n\n return {\n anchorX: retAnchorX,\n anchorY: retAnchorY,\n anchorWidth: retWidth,\n anchorHeight: retHeight,\n };\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-issue',\n templateUrl: './issue.component.html',\n styleUrls: ['./issue.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IssueComponent {\n @Input()\n label?: string;\n\n @Input()\n colorToken: string = '';\n\n @Input()\n textColorOverride?: string;\n\n get backgroundColor(): string {\n return `var(${this.colorToken})`;\n }\n\n get textColor(): string {\n return `var(${\n this.textColorOverride\n ? this.textColorOverride\n : '--type-light-high-contrast'\n })`;\n }\n}\n","<i [style.background-color]=\"backgroundColor\"></i>\n<span *ngIf=\"label\" [style.color]=\"textColor\" rivTruncate>{{ label }}</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-legend-item',\n templateUrl: './legend-item.component.html',\n styleUrls: ['./legend-item.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LegendItemComponent {\n @Input()\n label: string = '';\n\n @Input()\n colorToken: string = '';\n\n @Input()\n style: LegendItemComponent.Style = 'solid';\n\n @Input()\n visibility: LegendItemComponent.Visibility = 'visible';\n\n @Input()\n iconTooltip?: string;\n\n get backgroundColor(): string {\n return `var(${this.colorToken})`;\n }\n\n @Input()\n clickable: boolean = false;\n\n @Input()\n showCheckWhenClickable: boolean = true;\n\n @Output()\n itemClick = new EventEmitter<MouseEvent>();\n\n isLegendItemClickable(): boolean {\n return this.clickable && this.visibility !== 'locked';\n }\n}\n\nexport namespace LegendItemComponent {\n export const Styles = ['solid', 'striped', 'dots'] as const;\n export type Style = (typeof Styles)[number];\n\n export const Visibilities = ['visible', 'hidden', 'locked'] as const;\n export type Visibility = (typeof Visibilities)[number];\n}\n","<button\n (click)=\"isLegendItemClickable() ? itemClick.emit($event) : null\"\n [rivTooltip]=\"iconTooltip\"\n type=\"button\"\n [disabled]=\"visibility === 'locked'\"\n [attr.aria-disabled]=\"visibility === 'locked' ? 'true' : null\"\n [class.clickable]=\"clickable\"\n>\n <i\n *ngIf=\"visibility === 'visible'\"\n [class.striped]=\"style === 'striped'\"\n [class.dots]=\"style === 'dots'\"\n [style.background-color]=\"style === 'dots' ? null : backgroundColor\"\n [style.--dot-color]=\"backgroundColor\"\n class=\"opacity-hover\"\n >\n <riv-icon\n *ngIf=\"clickable && showCheckWhenClickable\"\n name=\"Check\"\n [size]=\"16\"\n [strokeWidth]=\"3\"\n style=\"color: var(--white-100)\"\n ></riv-icon>\n </i>\n <i\n *ngIf=\"visibility === 'hidden'\"\n class=\"hidden-legend-item opacity-hover\"\n [class.striped]=\"style === 'striped'\"\n [class.dots]=\"style === 'dots'\"\n [style.border-color]=\"backgroundColor\"\n [style.--background-color-hover]=\"backgroundColor\"\n [style.--dot-color]=\"backgroundColor\"\n ></i>\n <riv-icon *ngIf=\"visibility === 'locked'\" name=\"Lock\" [size]=\"16\"></riv-icon>\n\n <span\n *ngIf=\"label\"\n [class.low-contrast]=\"visibility === 'hidden' || visibility === 'locked'\"\n >\n {{ label }}\n </span>\n</button>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { isEqual } from 'lodash';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n map,\n scan,\n startWith,\n Subject,\n} from 'rxjs';\nimport { Chart } from './chart';\n\ntype DrawData = {\n data: Chart.InputData;\n viewBox: string;\n} & Chart.RenderedChart;\n@Component({\n selector: 'riv-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ChartComponent {\n constructor(private readonly cdr: ChangeDetectorRef) {}\n\n @ViewChild('container') container?: ElementRef;\n @ViewChild('moreTextContainer') moreTextContainer?: ElementRef;\n\n @ContentChild('tooltip')\n tooltipTemplate?: TemplateRef<{\n xIndex: number;\n yIndex: number;\n isSuppValue?: boolean;\n suppYIndex?: number;\n isDropOff?: boolean;\n }>;\n\n readonly DEFAULT_HEIGHT_VAL = 300;\n readonly DEFAULT_WIDTH_VAL = 0; //There's an automatic resizer in the html that handles matching width to container size\n\n height$ = new BehaviorSubject(this.DEFAULT_HEIGHT_VAL);\n @Input()\n set height(w: number) {\n if (this.overrideHeight === null) {\n this.height$.next(w);\n }\n }\n get height() {\n return this.height$.value;\n }\n\n width$ = new BehaviorSubject(0);\n @Input()\n set width(w: number) {\n if (this.overrideWidth === null) {\n this.width$.next(w);\n }\n }\n get width() {\n return this.width$.value;\n }\n\n //These overrides handle situations where the chart needs to be set to a particular size that doesn't match what it would automatically scale to based on container\n oldHeight: number | null = null;\n overrideHeight$ = new BehaviorSubject<number | null>(null);\n @Input()\n set overrideHeight(w: number | null) {\n if (w !== null) {\n this.oldHeight = this.height;\n this.height$.next(w);\n } else {\n if (this.oldHeight) {\n this.height$.next(this.oldHeight);\n } else {\n this.height$.next(this.DEFAULT_HEIGHT_VAL);\n }\n }\n this.overrideHeight$.next(w);\n }\n get overrideHeight(): number | null {\n return this.overrideHeight$.value;\n }\n\n oldWidth: number | null = null;\n overrideWidth$ = new BehaviorSubject<number | null>(null);\n @Input()\n set overrideWidth(w: number | null) {\n if (w !== null) {\n this.oldWidth = this.width;\n this.width$.next(w);\n } else {\n if (this.oldWidth) {\n this.width$.next(this.oldWidth);\n } else {\n this.width$.next(this.DEFAULT_WIDTH_VAL);\n }\n }\n this.overrideWidth$.next(w);\n }\n get overrideWidth(): number | null {\n return this.overrideWidth$.value;\n }\n\n config$ = new BehaviorSubject<Chart.Config>(Chart.defaultConfig);\n @Input()\n set config(c: Chart.Config) {\n this.config$.next(c);\n }\n get config() {\n return this.config$.value;\n }\n\n data$ = new BehaviorSubject<Chart.InputData>({\n type: 'timeseries',\n x: [],\n ys: [],\n });\n\n private colorIndices = new Map<\n Chart.DataY | Chart.SupplementaryDataY,\n number\n >();\n\n @Input()\n set data(d: Chart.InputData) {\n this.data$.next(d);\n if (d.type !== 'flow') {\n this.colorIndices = Chart.calculateColorIndices(d);\n }\n }\n get data() {\n return this.data$.value;\n }\n\n getItemKey(\n item: Chart.DataY | Chart.SupplementaryDataY,\n index: number,\n ): string {\n return 'supplementalIndex' in item ? `supp-${index}` : `y-${index}`;\n }\n\n toggleLegend(item: Chart.DataY | Chart.SupplementaryDataY, index: number) {\n this.toggleLegend$.next(this.getItemKey(item, index));\n }\n\n toggleLegend$ = new Subject<string>();\n\n // toggledLegend$ is just a set of boolean\n // values for which legends have been toggled.\n // We don't know if those legends where already\n // hidden or not, we just know whether they have\n // been toggled.\n toggledLegends$ = this.toggleLegend$.pipe(\n scan<string, Record<string, boolean>>(\n (acc, value) => ({ ...acc, [value]: !acc[value] }),\n {},\n ),\n startWith<Record<string, boolean>>({}),\n );\n\n drawData$ = combineLatest([\n this.width$,\n this.height$,\n this.config$,\n this.data$,\n this.toggledLegends$,\n ]).pipe(\n distinctUntilChanged((prev, current) => isEqual(prev, current)),\n map(([width, height, config, data, toggledLegends]) => {\n if (width === 0 || height === 0) {\n return null;\n }\n const hiddenData =\n data.type !== 'flow'\n ? {\n ...data,\n ys: data.ys.map((y, index) => ({\n ...y,\n // if toggled, flip the hidden boolean\n hidden: toggledLegends[`y-${index}`] ? !y.hidden : y.hidden,\n })),\n supplementaryYs: data.supplementaryYs?.map((y, index) => ({\n ...y,\n hidden: toggledLegends[`supp-${index}`] ? !y.hidden : y.hidden,\n })),\n }\n : data;\n\n let chartData = Chart.chart(config, hiddenData, {\n width: width,\n height: height,\n });\n\n const horizontalScrollDetected = chartData.chartWidth > width;\n const verticalScrollDetected = chartData.chartHeight > height;\n if (horizontalScrollDetected || verticalScrollDetected) {\n const scrollbar = this.measureScrollbarThickness();\n chartData = Chart.chart(config, hiddenData, {\n width: width - (verticalScrollDetected ? scrollbar.vertical : 0),\n height:\n height - (horizontalScrollDetected ? scrollbar.horizontal : 0),\n });\n }\n\n const viewBox =\n config.type === 'donut'\n ? `${-chartData.chartWidth / 2} ${-chartData.chartHeight / 2}\n ${chartData.chartWidth} ${chartData.chartHeight}`\n : `0 0 ${chartData.chartWidth} ${chartData.chartHeight}`;\n const returnObj: DrawData = {\n viewBox,\n data: hiddenData,\n ...chartData,\n };\n return returnObj;\n }),\n );\n\n hover: ReturnType<Chart.Hover> = null;\n\n mousemove($event: MouseEvent, hover?: Chart.Hover) {\n if (!hover) {\n return;\n }\n const containerEl = this.container?.nativeElement as HTMLElement;\n if (containerEl === null) {\n return;\n }\n const rect = containerEl.getBoundingClientRect();\n this.hover = hover({\n rect,\n x: $event.clientX - rect.left,\n y: $event.clientY - rect.top,\n containerScrollX: containerEl.scrollLeft,\n containerScrollY: containerEl.scrollTop,\n });\n }\n\n mouseleave($event: MouseEvent) {\n this.hover = null;\n }\n\n @Output()\n chartClicked = new EventEmitter<{\n xIndex: number;\n yIndex: number;\n suppYIndex?: number;\n //Funnel only, for when dropOff section is clicked\n isDropOff?: boolean;\n }>();\n\n @Output()\n flowClicked = new EventEmitter<Chart.FlowClickEvent>();\n\n click() {\n const flowClickEvent = this.flowClickEvent;\n if (flowClickEvent && this.isHoverClickable) {\n this.flowClicked.emit(flowClickEvent);\n this.hover = null;\n } else if (\n this.hover &&\n this.isHoverClickable &&\n this.hover.hoverType === 'standard'\n ) {\n this.chartClicked.emit({\n xIndex: this.hover.xIndex,\n yIndex: this.hover.yIndex,\n ...(this.hover.isSuppValue &&\n this.hover.suppYIndex != undefined &&\n this.hover.suppYIndex >= 0\n ? { suppYIndex: this.hover.suppYIndex }\n : {}),\n ...(this.hover.isDropOff ? { isDropOff: true } : {}),\n });\n this.hover = null;\n }\n }\n\n private get flowClickEvent(): Chart.FlowClickEvent | null {\n return this.hover?.hoverType === 'flow' && this.data.type === 'flow'\n ? Chart.toFlowClickEvent(this.hover, this.data)\n : null;\n }\n\n get isHoverClickable(): boolean {\n // A flow element is clickable if any of the paths it's made of are\n const flowClickEvent = this.flowClickEvent;\n if (flowClickEvent && this.data.type === 'flow') {\n const ys = this.data.ys;\n return flowClickEvent.yIndices.some(index => ys[index]?.clickable);\n }\n\n if (!this.hover || this.hover.hoverType !== 'standard') {\n return false;\n }\n\n // If hovering a supplementary value specifically, check if it's clickable\n if (\n this.hover.isSuppValue &&\n this.hover.suppYIndex != null &&\n this.data.type !== 'flow'\n ) {\n const suppYIndex = this.hover.suppYIndex;\n const supplementaryYs = this.data.supplementaryYs;\n if (\n !supplementaryYs ||\n suppYIndex < 0 ||\n suppYIndex >= supplementaryYs.length\n ) {\n return false;\n }\n return supplementaryYs[suppYIndex]?.clickable === true;\n }\n\n // For grouped tooltips, check if any visible item is clickable\n const yIndex = this.hover.yIndex;\n if (this.config.groupedTooltip) {\n // Check if the main Y value is clickable\n if (this.data.ys[yIndex]?.clickable === true) {\n return true;\n }\n }\n\n // Single item tooltip: check if the hovered Y value is clickable\n return this.data.ys[yIndex]?.clickable === true;\n }\n\n varWrap(input: string) {\n return `var(${input})`;\n }\n\n varColor(colors: string[], index: number) {\n return this.varWrap(colors[index % colors.length]);\n }\n\n darkenColor(color: string) {\n return `color-mix(in oklab, ${color} 80%, black)`;\n }\n\n deEmphasizeColor(color: string) {\n return `color-mix(in srgb, transparent 85%, ${color})`;\n }\n\n //Helper methods for flows\n\n checkThatHoverDataIsFlow(\n hoverData: Chart.HoverReturn,\n ): hoverData is Chart.FlowHoverReturn {\n if (hoverData !== null && hoverData.hoverType === 'flow') {\n return true;\n }\n return false;\n }\n\n checkForFlowMatch(\n hover: Chart.FlowHoverTarget,\n element: Chart.Rect | Chart.DataLabel | Chart.FlowConnectionRender,\n matchTitleToRect: boolean = false,\n ): boolean {\n if (\n hover.hoverTarget === 'bar' &&\n element.elementType === 'rect' &&\n element.rectType === 'flow'\n ) {\n if (\n hover.barId === element.id &&\n hover.bucketIndex === element.bucketIndex &&\n hover.forDarken === element.darken\n ) {\n return true;\n }\n } else if (\n hover.hoverTarget === 'barTitle' &&\n element.elementType === 'dataLabel' &&\n element.dataLabelType === 'flow'\n ) {\n if (\n hover.barId === element.barId &&\n hover.bucketIndex === element.bucketIndex\n ) {\n return true;\n }\n } else if (\n hover.hoverTarget === 'barTitle' &&\n element.elementType === 'rect' &&\n element.rectType === 'flow' &&\n matchTitleToRect\n ) {\n if (\n hover.barId === element.id &&\n hover.bucketIndex === element.bucketIndex\n ) {\n return true;\n }\n } else if (\n hover.hoverTarget === 'connection' &&\n element.elementType === 'connection'\n ) {\n if (\n hover.startBucketIndex === element.step &&\n hover.startId === element.start &&\n hover.endId === element.end\n ) {\n return true;\n }\n }\n return false;\n }\n\n getBarColor(\n rect: Chart.Rect,\n colors: string[],\n index: number,\n hoverData: Chart.HoverReturn,\n ) {\n if (rect.rectType === 'flow' && rect.colorOverride !== undefined) {\n const baseColor = this.varWrap(rect.colorOverride);\n const possiblyDarkenedColor =\n rect.darken === true ? this.darkenColor(baseColor) : baseColor;\n if (\n rect.deEmphasize === true ||\n (this.checkThatHoverDataIsFlow(hoverData) &&\n !this.checkForFlowMatch(hoverData, rect, true))\n ) {\n return this.deEmphasizeColor(possiblyDarkenedColor);\n }\n return possiblyDarkenedColor;\n }\n return this.varColor(colors, index);\n }\n\n readonly DEFAULT_CONNECTION_COLOR = '--purp-60';\n\n getConnectionColor() {\n if (\n this.config.type === 'flow' &&\n this.config.flowConfig.connectionColor !== undefined\n ) {\n return this.varWrap(this.config.flowConfig.connectionColor);\n }\n return this.varWrap(this.DEFAULT_CONNECTION_COLOR);\n }\n\n readonly STANDARD_CONNECTION_OPACITY = 0.0625;\n readonly EMPHASIZED_CONNECTION_OPACITY = 0.5;\n\n getConnectionOpacity(\n connection: Chart.FlowConnectionRender,\n hoverData: Chart.HoverReturn,\n ): number {\n if (\n !this.checkThatHoverDataIsFlow(hoverData) ||\n hoverData.hoverTarget !== 'connection'\n ) {\n return this.STANDARD_CONNECTION_OPACITY;\n }\n if (this.checkForFlowMatch(hoverData, connection)) {\n return this.EMPHASIZED_CONNECTION_OPACITY;\n }\n return this.STANDARD_CONNECTION_OPACITY;\n }\n\n getDataLabelClass(\n dataLabel: Chart.DataLabel,\n config: Chart.Config,\n hoverData: Chart.HoverReturn,\n ): 'data-label' | 'flow-data-label' {\n if (\n config.type === 'flow' &&\n this.checkThatHoverDataIsFlow(hoverData) &&\n this.checkForFlowMatch(hoverData, dataLabel)\n ) {\n return 'flow-data-label';\n }\n return 'data-label';\n }\n\n getDataLabelOpacity(\n dataLabel: Chart.DataLabel,\n config: Chart.Config,\n hoverData: Chart.HoverReturn,\n ): number {\n if (\n config.type === 'flow' &&\n this.checkThatHoverDataIsFlow(hoverData) &&\n !this.checkForFlowMatch(hoverData, dataLabel)\n ) {\n return 0.15;\n }\n return 1;\n }\n\n showBarBorders(rect: Chart.Rect, hoverData: Chart.HoverReturn): boolean {\n if (\n this.checkThatHoverDataIsFlow(hoverData) &&\n this.checkForFlowMatch(hoverData, rect)\n ) {\n return true;\n }\n return false;\n }\n\n showNonDisplayRect(rect: Chart.Rect, hoverData: Chart.HoverReturn): boolean {\n if (\n rect.nonDisplay &&\n this.checkThatHoverDataIsFlow(hoverData) &&\n this.checkForFlowMatch(hoverData, rect, true)\n ) {\n return true;\n }\n return false;\n }\n\n getBucketConfigInfo(\n hoverData: Chart.FlowHoverReturn | null,\n identifier: 'startId' | 'endId' | 'barId',\n ): {\n title: string;\n color: string;\n } {\n if (hoverData === null || this.config.type !== 'flow') {\n return {\n title: '',\n color: '',\n };\n }\n //The html already ensures the hoverTarget and identifier match, but the build isn't recognizing that\n let id: string = '';\n if (hoverData.hoverTarget === 'connection') {\n if (identifier === 'barId') {\n return {\n title: '',\n color: '',\n };\n } else {\n id = hoverData[identifier];\n }\n } else {\n if (identifier !== 'barId') {\n return {\n title: '',\n color: '',\n };\n } else {\n id = hoverData[identifier];\n }\n }\n const foundInfo = this.config.flowConfig.subBucketsConfig.find(\n sbc => sbc.bucketId === id,\n );\n if (!foundInfo) {\n return {\n title: '',\n color: '',\n };\n }\n return {\n title: foundInfo.bucketName,\n color: foundInfo.color,\n };\n }\n\n getItemColor(\n item: Chart.DataY | Chart.SupplementaryDataY,\n itemIndex: number,\n ): string {\n //Flows get their color via a different method\n if (this.data.type === 'flow') {\n return '';\n }\n\n // Use index to get the original item (drawData$ maintains same indices as this.data)\n const originalItem =\n 'supplementalIndex' in item\n ? this.data.supplementaryYs![itemIndex]\n : this.data.ys[itemIndex];\n\n return Chart.getColor(originalItem, this.colorIndices, this.config.colors);\n }\n\n showMoreTooltip = false;\n lockShowMoreTooltip = false;\n\n moreTextWidth = 50;\n baseLegendItemWidth = 40;\n\n firstHiddenLegendItemIndex$ = combineLatest([\n this.width$,\n this.config$,\n this.data$,\n ]).pipe(\n distinctUntilChanged((prev, current) => isEqual(prev, current)),\n map(([width, config, data]) => {\n if (data.type === 'flow') {\n return {\n dataIndex: 0,\n suppIndex: 0,\n hiddenCount: undefined,\n };\n }\n if (!config.truncateLegend) {\n return {\n dataIndex: data.ys.length,\n suppIndex: data.supplementaryYs?.length ?? 0,\n hiddenCount: undefined,\n };\n }\n let widthRunningTotal = 0;\n for (let i = 0; i < data.ys.length; i++) {\n if (data.ys[i].showLegendItem === false) {\n continue;\n }\n const indItemWidth =\n this.baseLegendItemWidth +\n data.ys[i].label.length * Chart.WIDTH_PER_LETTER;\n if (widthRunningTotal + indItemWidth >= width - this.moreTextWidth) {\n const remainingYsCount = data.ys\n .slice(i)\n .filter(y => y.showLegendItem !== false).length;\n const suppYsCount =\n data.supplementaryYs?.filter(y => y.showLegendItem !== false)\n .length ?? 0;\n return {\n dataIndex: i,\n suppIndex: 0,\n hiddenCount: remainingYsCount + suppYsCount,\n };\n }\n widthRunningTotal += indItemWidth;\n }\n if (data.supplementaryYs) {\n for (let i = 0; i < data.supplementaryYs.length; i++) {\n if (data.supplementaryYs[i].showLegendItem === false) {\n continue;\n }\n const indItemWidth =\n this.baseLegendItemWidth +\n data.supplementaryYs[i].label.length * Chart.WIDTH_PER_LETTER;\n if (widthRunningTotal + indItemWidth >= width - this.moreTextWidth) {\n const remainingSuppYsCount = data.supplementaryYs\n .slice(i)\n .filter(y => y.showLegendItem !== false).length;\n return {\n dataIndex: data.ys.length,\n suppIndex: i,\n hiddenCount: remainingSuppYsCount,\n };\n }\n widthRunningTotal += indItemWidth;\n }\n }\n return {\n dataIndex: data.ys.length,\n suppIndex: data.supplementaryYs?.length ?? 0,\n hiddenCount: undefined,\n };\n }),\n );\n\n moreClick() {\n this.lockShowMoreTooltip = !this.lockShowMoreTooltip;\n }\n\n closeHandler() {\n this.lockShowMoreTooltip = false;\n this.cdr.markForCheck();\n }\n\n mouseoverLegend() {\n this.showMoreTooltip = true;\n }\n\n mouseleaveLegend() {\n this.showMoreTooltip = false;\n }\n\n //Since scrollbar size depeneds on browser, we have to use a method like this to figure out the correct scrollbar thickness\n measureScrollbarThickness() {\n const div = document.createElement('div');\n\n div.style.width = '100px';\n div.style.height = '100px';\n div.style.overflow = 'scroll';\n div.style.position = 'absolute';\n div.style.visibility = 'hidden';\n\n document.body.appendChild(div);\n\n const thickness = {\n vertical: div.offsetWidth - div.clientWidth,\n horizontal: div.offsetHeight - div.clientHeight,\n };\n\n div.remove();\n return thickness;\n }\n\n getSubcontainerHeight(data: DrawData | null): string {\n if (data === null) {\n return `${this.height}px`;\n }\n let height = this.height;\n if (\n data.chartHeight < this.height &&\n data.verticalContainerScale === 'shrink'\n ) {\n //Shrinking to fit content, but accounting for potential scrollbars\n const horizontalScrollDetected = data.chartWidth > this.width;\n const scrollbar = this.measureScrollbarThickness();\n height = Math.min(\n height,\n data.chartHeight +\n (horizontalScrollDetected ? scrollbar.horizontal : 0),\n );\n }\n return `${height}px`;\n }\n\n getSubcontainerWidth(data: DrawData | null): string {\n if (data === null) {\n return `${this.width}px`;\n }\n let width = this.width;\n if (\n data.chartWidth < this.width &&\n data.horizontalContainerScale === 'shrink'\n ) {\n //Shrinking to fit content, but accounting for potential scrollbars\n const verticalScrollDetected = data.chartHeight > this.height;\n const scrollbar = this.measureScrollbarThickness();\n width = Math.min(\n width,\n data.chartWidth + (verticalScrollDetected ? scrollbar.vertical : 0),\n );\n }\n return `${width}px`;\n }\n\n getBottomLabelY(data: Chart.RenderedChart): number {\n return (\n data.chartHeight -\n (data.chartSizingValues.bottomPadding - data.chartSizingValues.fontSize) /\n 2\n );\n }\n\n getFontSize(data: Chart.RenderedChart | null): string {\n const chartSizingFontSize = data?.chartSizingValues.fontSize;\n if (chartSizingFontSize && chartSizingFontSize > 0) {\n return chartSizingFontSize.toString().concat('px');\n }\n return Chart.DEFAULT_FONT_SIZE.toString().concat('px');\n }\n\n checkForNonDisplayState(data: DrawData | null): string | null {\n let empty = false;\n if (data === null) {\n empty = true;\n } else if (data.data.type === 'flow') {\n empty = data.data.ys.length === 0;\n } else {\n empty =\n (data.data.x.length === 0 && this.config.type !== 'donut') ||\n data.data.ys.length === 0;\n }\n if (empty) {\n return 'zeroState';\n }\n if (data && data.chartError === 'sizing') {\n return 'sizingErrorState';\n }\n return null;\n }\n\n standardHoverDataGuard(\n hoverData: Chart.HoverReturn,\n ): Extract<Chart.HoverReturn, { hoverType: 'standard' }> | null {\n if (hoverData === null || hoverData.hoverType === 'flow') {\n return null;\n }\n return hoverData;\n }\n\n flowHoverDataGuard(\n hoverData: Chart.HoverReturn,\n ): Chart.FlowHoverReturn | null {\n if (hoverData === null || hoverData.hoverType === 'standard') {\n return null;\n }\n return hoverData;\n }\n}\n","<div\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n *ngIf=\"{ d: drawData$ | async } as vm\"\n [style.--override-font-size]=\"getFontSize(vm.d)\"\n>\n <ng-container\n *ngIf=\"\n !checkForNonDisplayState(vm.d) && (drawData$ | async);\n let d;\n else: nonDisplayState\n \"\n >\n <div\n (mousemove)=\"mousemove($event, d.hover)\"\n (mouseleave)=\"mouseleave($event)\"\n (click)=\"click()\"\n #container\n class=\"sub-container\"\n [class.clickable]=\"isHoverClickable\"\n tabIndex=\"0\"\n [ngClass]=\"{ 'donut-container': config.type === 'donut' }\"\n [ngStyle]=\"{\n height: getSubcontainerHeight(d),\n width: getSubcontainerWidth(d)\n }\"\n >\n <svg:svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"d.viewBox\"\n [attr.height]=\"d.chartHeight\"\n [attr.width]=\"d.chartWidth\"\n >\n <defs>\n <!-- Stripe pattern -->\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"10\"\n [attr.height]=\"10\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"10\"\n [attr.x2]=\"10\"\n [attr.y2]=\"0\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <ng-container *ngIf=\"!(config.type === 'horizontal-bar')\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"middle\">\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"getBottomLabelY(d)\"\n >\n {{ tick.label }}\n </text>\n </g>\n </ng-container>\n <ng-container *ngIf=\"config.type === 'horizontal-bar'\">\n <g *ngFor=\"let tick of d.xTicks\" text-anchor=\"left\">\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.chartSizingValues.fontSize\"\n >\n {{ tick.label }}\n </text>\n <line\n class=\"tick-line\"\n [attr.x1]=\"tick.x\"\n [attr.x2]=\"tick.x\"\n y1=\"0\"\n [attr.y2]=\"d.chartHeight\"\n ></line>\n <text\n *ngIf=\"tick.secondaryLabel\"\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"getBottomLabelY(d)\"\n >\n {{ tick.secondaryLabel }}\n </text>\n </g>\n </ng-container>\n <g *ngFor=\"let tick of d.yTicks\">\n <line\n *ngIf=\"!(config.type === 'horizontal-bar')\"\n class=\"tick-line\"\n [attr.y1]=\"tick.y\"\n [attr.y2]=\"tick.y\"\n x1=\"0\"\n [attr.x2]=\"d.chartWidth\"\n ></line>\n <text\n rivSVGTextTruncate\n [text]=\"tick.label\"\n [width]=\"\n config.type === 'horizontal-bar'\n ? d.chartSizingValues.leftBucketLabel\n : d.chartSizingValues.leftPadding\n \"\n class=\"tick-label\"\n [attr.y]=\"tick.y\"\n [attr.x]=\"0\"\n >\n {{ tick.label }}\n </text>\n <text\n *ngIf=\"tick.secondaryLabel\"\n rivSVGTextTruncate\n [text]=\"tick.secondaryLabel\"\n [width]=\"d.chartSizingValues.rightPadding\"\n class=\"tick-label\"\n [attr.y]=\"tick.y\"\n [attr.x]=\"d.chartWidth\"\n text-anchor=\"end\"\n >\n {{ tick.secondaryLabel }}\n </text>\n </g>\n <ng-container *ngIf=\"standardHoverDataGuard(hover) as hoverData\">\n <g\n *ngIf=\"config.type !== 'horizontal-bar' && config.type !== 'donut'\"\n >\n <line\n class=\"tick-line\"\n [attr.x1]=\"hoverData?.x\"\n [attr.x2]=\"hoverData?.x\"\n y1=\"0\"\n [attr.y2]=\"d.chartHeight\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n </ng-container>\n <g *ngFor=\"let bar of d.bars; let i = index\">\n <ng-container *ngFor=\"let rect of bar; let j = index\">\n <defs *ngIf=\"rect.pattern === 'dots'\">\n <pattern\n [attr.id]=\"'dots-' + i + '-' + j\"\n patternUnits=\"userSpaceOnUse\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n width=\"4\"\n height=\"4\"\n >\n <circle\n cx=\"2\"\n cy=\"2\"\n r=\"1.5\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></circle>\n </pattern>\n </defs>\n\n <rect\n *ngIf=\"rect.nonDisplay !== true\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"\n rect.pattern === 'dots'\n ? 'url(#dots-' + i + '-' + j + ')'\n : getBarColor(rect, d.colors, i, hover)\n \"\n [attr.stroke]=\"\n showBarBorders(rect, hover) ? varWrap('--black-100') : undefined\n \"\n [attr.stroke-width]=\"showBarBorders(rect, hover) ? 1 : undefined\"\n ></rect>\n <rect\n *ngIf=\"showNonDisplayRect(rect, hover)\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"transparent\"\n [attr.stroke]=\"varWrap('--black-100')\"\n [attr.stroke-width]=\"1\"\n ></rect>\n <rect\n *ngIf=\"rect.pattern === 'striped'\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </ng-container>\n </g>\n <g *ngFor=\"let bar of d.horizontalBars; let i = index\">\n <ng-container *ngFor=\"let indBar of bar; let j = index\">\n <defs *ngIf=\"indBar.pattern === 'dots'\">\n <pattern\n [attr.id]=\"'dots-' + i + '-' + j\"\n patternUnits=\"userSpaceOnUse\"\n [attr.x]=\"indBar.x\"\n [attr.y]=\"indBar.y\"\n width=\"4\"\n height=\"4\"\n >\n <circle\n cx=\"2\"\n cy=\"2\"\n r=\"1.5\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></circle>\n </pattern>\n </defs>\n <path\n [attr.d]=\"indBar.horizontalBar\"\n [attr.fill]=\"\n indBar.pattern === 'dots'\n ? 'url(#dots-' + i + '-' + j + ')'\n : varColor(d.colors, i)\n \"\n [attr.stroke]=\"\n indBar.pattern === 'dots' ? 'none' : varColor(d.colors, i)\n \"\n [attr.stroke-width]=\"indBar.pattern === 'dots' ? 0 : 2\"\n />\n <path\n *ngIf=\"indBar.pattern === 'striped'\"\n [attr.d]=\"indBar.horizontalBar\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"url(#stripes)\"\n stroke-width=\"0\"\n />\n </ng-container>\n </g>\n <g *ngFor=\"let gradient of d.gradients; let i = index\">\n <ng-container *ngFor=\"let rect of gradient; let j = index\">\n <defs>\n <linearGradient\n [attr.id]=\"'grad-' + i + '-' + j\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"0%\" [attr.stop-color]=\"varColor(d.colors, i)\" />\n <stop offset=\"100%\" stop-color=\"white\" />\n </linearGradient>\n </defs>\n <rect\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"'url(#grad-' + i + '-' + j + ')'\"\n opacity=\"0.4\"\n ></rect>\n </ng-container>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <path\n [attr.d]=\"line.line\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n fill=\"none\"\n stroke-width=\"2\"\n [attr.stroke-linecap]=\"\n line.pattern === 'dots' ? 'round' : undefined\n \"\n [attr.stroke-linejoin]=\"\n line.pattern === 'dots' ? 'round' : undefined\n \"\n [attr.stroke-dasharray]=\"\n line.pattern === 'striped'\n ? '10 10'\n : line.pattern === 'dots'\n ? '0.25 7'\n : undefined\n \"\n ></path>\n </g>\n <g *ngFor=\"let lineSinglePointFallback of d.circles; let i = index\">\n <circle\n class=\"marker\"\n [attr.cx]=\"lineSinglePointFallback.cx\"\n [attr.cy]=\"lineSinglePointFallback.cy\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </g>\n <g *ngFor=\"let line of d.lines; let i = index\">\n <ng-container *ngIf=\"standardHoverDataGuard(hover) as hoverData\">\n <circle\n class=\"marker\"\n *ngIf=\"config.groupedTooltip || i === hoverData?.visibleYIndex\"\n [attr.cx]=\"hoverData?.x\"\n [attr.cy]=\"hoverData?.ys?.[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </ng-container>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <path [attr.d]=\"area.area\" [attr.fill]=\"varColor(d.colors, i)\"></path>\n <path\n *ngIf=\"area.pattern === 'striped'\"\n [attr.d]=\"area.area\"\n fill=\"url(#stripes)\"\n ></path>\n </g>\n <g *ngFor=\"let area of d.areas; let i = index\">\n <ng-container *ngIf=\"standardHoverDataGuard(hover) as hoverData\">\n <circle\n class=\"marker\"\n *ngIf=\"config.groupedTooltip || i === hoverData?.visibleYIndex\"\n [attr.cx]=\"hoverData?.x\"\n [attr.cy]=\"hoverData?.ys?.[i]\"\n r=\"3.5\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></circle>\n </ng-container>\n </g>\n <g *ngFor=\"let wLine of d.waterfallLines\">\n <line\n class=\"waterfall-line\"\n [attr.x1]=\"wLine.x1\"\n [attr.x2]=\"wLine.x2\"\n [attr.y1]=\"wLine.y1\"\n [attr.y2]=\"wLine.y2\"\n stroke-width=\"1\"\n stroke-dasharray=\"6\"\n />\n </g>\n <path\n *ngFor=\"let path of d.arcs; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"varColor(d.colors, i)\"\n ></path>\n <g *ngFor=\"let dataLabel of d.dataLabels; let i = index\">\n <text\n *ngIf=\"config.showDataLabels && dataLabel.label\"\n [ngClass]=\"getDataLabelClass(dataLabel, config, hover)\"\n [attr.y]=\"dataLabel.yPos\"\n [attr.x]=\"dataLabel.xPos\"\n [attr.text-anchor]=\"dataLabel.anchor\"\n [attr.font-weight]=\"\n dataLabel.bold\n ? 'var(--font-weight-heavy)'\n : 'var(--font-weight-normal)'\n \"\n [attr.opacity]=\"getDataLabelOpacity(dataLabel, config, hover)\"\n >\n {{ dataLabel.label }}\n </text>\n <line\n *ngIf=\"dataLabel.line && config.showDataLabels\"\n [attr.y1]=\"dataLabel.line.y1\"\n [attr.y2]=\"dataLabel.line.y2\"\n [attr.x1]=\"dataLabel.line.x1\"\n [attr.x2]=\"dataLabel.line.x2\"\n stroke-width=\"2\"\n [attr.stroke]=\"varColor(d.colors, i)\"\n ></line>\n </g>\n <g *ngFor=\"let connection of d.flowConnections\">\n <path\n [attr.d]=\"connection.path\"\n [attr.fill]=\"getConnectionColor()\"\n [attr.opacity]=\"getConnectionOpacity(connection, hover)\"\n />\n </g>\n </svg:svg>\n <div *ngIf=\"config.type === 'donut'\" class=\"donut-display\">\n <div class=\"donut-value\" [ngClass]=\"config.donutDisplayInfo.size\">\n {{ config.donutDisplayInfo.displayValue }}\n </div>\n <div class=\"donut-label\">\n {{ config.donutDisplayInfo.displayLabel }}\n </div>\n </div>\n <ng-container *ngIf=\"standardHoverDataGuard(hover) as hoverData\">\n <riv-callout\n *riv-overlay\n [anchor]=\"\n hoverData?.tooltip?.anchor ? hoverData.tooltip.anchor : null\n \"\n [isModal]=\"false\"\n [preferredPosition]=\"\n hoverData?.tooltip?.preferredPosition ?? 'center-right'\n \"\n [theme]=\"'light'\"\n >\n <ng-container *ngIf=\"tooltipTemplate; else defaultTooltip\">\n <ng-container\n [ngTemplateOutlet]=\"tooltipTemplate\"\n [ngTemplateOutletContext]=\"{\n xIndex: hoverData?.xIndex,\n yIndex: hoverData?.yIndex,\n isSuppValue: hoverData?.isSuppValue,\n suppYIndex: hoverData?.suppYIndex,\n isDropOff: hoverData?.isDropOff\n }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultTooltip>\n <div class=\"callout-content\">\n <div *ngIf=\"hoverData?.tooltip?.date\" class=\"callout-row\">\n {{ hoverData?.tooltip?.date }}\n </div>\n <div\n class=\"callout-row\"\n *ngFor=\"let metric of hoverData?.tooltip?.metrics\"\n >\n <span class=\"series-label\">\n <riv-legend-item\n [colorToken]=\"metric.color\"\n [style]=\"metric.pattern || 'solid'\"\n ></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </ng-template>\n </riv-callout>\n </ng-container>\n <ng-container *ngIf=\"flowHoverDataGuard(hover) as hoverData\">\n <riv-callout\n *riv-overlay\n [anchor]=\"\n hoverData?.tooltip?.anchor ? hoverData.tooltip.anchor : null\n \"\n [isModal]=\"false\"\n [preferredPosition]=\"'top-center'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\">\n <ng-container *ngIf=\"hoverData?.hoverTarget === 'connection'\">\n <ng-container\n *ngIf=\"\n getBucketConfigInfo(hoverData, 'startId') as startConfig\n \"\n >\n <riv-issue\n [label]=\"startConfig.title\"\n [colorToken]=\"startConfig.color\"\n ></riv-issue>\n </ng-container>\n ->\n <ng-container\n *ngIf=\"getBucketConfigInfo(hoverData, 'endId') as endConfig\"\n >\n <riv-issue\n [label]=\"endConfig.title\"\n [colorToken]=\"endConfig.color\"\n ></riv-issue>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hoverData?.hoverTarget !== 'connection'\">\n <ng-container\n *ngIf=\"getBucketConfigInfo(hoverData, 'barId') as barConfig\"\n >\n <riv-issue\n [label]=\"barConfig.title\"\n [colorToken]=\"barConfig.color\"\n ></riv-issue>\n </ng-container>\n </ng-container>\n </div>\n <div\n *ngIf=\"hoverData?.tooltip?.subtitle\"\n class=\"callout-row flow-subtitle\"\n >\n {{ hoverData?.tooltip?.subtitle }}\n </div>\n </div>\n </riv-callout>\n </ng-container>\n </div>\n <legend *ngIf=\"d.data.type !== 'flow'\">\n <ng-container *ngIf=\"firstHiddenLegendItemIndex$ | async; let fi\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i < fi.dataIndex && item.showLegendItem !== false\"\n [label]=\"item.label\"\n [style]=\"item.pattern || 'solid'\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [showCheckWhenClickable]=\"item.pattern !== 'dots'\"\n [colorToken]=\"getItemColor(item, i)\"\n (itemClick)=\"toggleLegend(item, i)\"\n ></riv-legend-item>\n </ng-container>\n <ng-container\n *ngFor=\"let item of d.data.supplementaryYs; let i = index\"\n >\n <riv-legend-item\n *ngIf=\"i < fi.suppIndex && item.showLegendItem !== false\"\n [label]=\"item.label\"\n [style]=\"item.pattern || 'solid'\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [showCheckWhenClickable]=\"item.pattern !== 'dots'\"\n [colorToken]=\"getItemColor(item, i)\"\n (itemClick)=\"toggleLegend(item, i)\"\n ></riv-legend-item>\n </ng-container>\n <div\n #moreTextContainer\n class=\"more-text-container\"\n (mouseover)=\"mouseoverLegend()\"\n (mouseleave)=\"mouseleaveLegend()\"\n (click)=\"moreClick()\"\n *ngIf=\"fi.hiddenCount\"\n >\n <span rivLink class=\"more-text\">\n +\n {{ fi.hiddenCount }} more\n </span>\n </div>\n <ng-container *ngIf=\"showMoreTooltip || lockShowMoreTooltip\">\n <riv-callout\n *riv-overlay\n [anchor]=\"moreTextContainer?.nativeElement\"\n [isModal]=\"lockShowMoreTooltip\"\n (close)=\"closeHandler()\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n >\n <div class=\"legend-tooltip\">\n <ng-container *ngFor=\"let item of d.data.ys; let i = index\">\n <riv-legend-item\n *ngIf=\"i >= fi.dataIndex && item.showLegendItem !== false\"\n [label]=\"item.label\"\n [style]=\"item.pattern || 'solid'\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [clickable]=\"config.allowLegendToggle\"\n [showCheckWhenClickable]=\"item.pattern !== 'dots'\"\n [colorToken]=\"getItemColor(item, i)\"\n (itemClick)=\"toggleLegend(item, i)\"\n ></riv-legend-item>\n </ng-container>\n <ng-container\n *ngFor=\"let item of d.data.supplementaryYs; let i = index\"\n >\n <riv-legend-item\n *ngIf=\"i >= fi.suppIndex && item.showLegendItem !== false\"\n [label]=\"item.label\"\n [style]=\"item.pattern || 'solid'\"\n [visibility]=\"item.hidden ? 'hidden' : 'visible'\"\n [colorToken]=\"getItemColor(item, i)\"\n [clickable]=\"config.allowLegendToggle\"\n [showCheckWhenClickable]=\"item.pattern !== 'dots'\"\n (itemClick)=\"toggleLegend(item, i)\"\n ></riv-legend-item>\n </ng-container>\n </div>\n </riv-callout>\n </ng-container>\n </ng-container>\n </legend>\n </ng-container>\n</div>\n\n<ng-template #nonDisplayState>\n <ng-container *ngIf=\"checkForNonDisplayState(drawData$ | async); let type\">\n <riv-zero-state\n *ngIf=\"type === 'zeroState'\"\n [message]=\"config.zeroStateMessage\"\n ></riv-zero-state>\n <riv-zero-state\n *ngIf=\"type === 'sizingErrorState'\"\n [message]=\"config.sizingErrorStateMessage\"\n ></riv-zero-state>\n </ng-container>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: '[riv-data-table-row]',\n styleUrls: ['./data-table-row.component.css'],\n template: '<ng-content></ng-content>',\n})\nexport class DataTableRowComponent {\n @Input()\n @HostBinding('class.sub-row')\n public subRow: boolean = false;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n OnInit,\n} from '@angular/core';\nimport { DataTableRowComponent } from './data-table-row.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: '[riv-data-table-cell]',\n styleUrls: ['./data-table-cell.component.css'],\n template: '<ng-content></ng-content>',\n})\nexport class DataTableCellComponent implements OnInit {\n constructor(private readonly row: DataTableRowComponent) {}\n\n @HostBinding('class.sub-cell')\n public subCell: boolean = false;\n\n ngOnInit(): void {\n this.subCell = this.row.subRow;\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: '[riv-data-table-header-cell]',\n styleUrls: ['./data-table-header-cell.component.css'],\n template: '<ng-content></ng-content>',\n})\nexport class DataTableHeaderCellComponent {}\n","import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'riv-data-table',\n styleUrls: ['./data-table.component.css'],\n template: '<table><ng-content></ng-content></table>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataTableComponent {\n @HostBinding('attr.tabindex')\n protected readonly tabIndex = 0;\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { arc, pie } from 'd3-shape';\n\n@Component({\n selector: 'riv-donut',\n templateUrl: './donut.component.html',\n styleUrls: ['./donut.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DonutComponent {\n @Input()\n displayLabel: string = '';\n\n @Input()\n displayValue: string = '';\n\n @Input()\n data: DonutComponent.DataPoint[] = [];\n\n @Input()\n displayTooltip?: string;\n\n @Input()\n size: DonutComponent.Size = 'medium';\n\n readonly HEIGHT = 256;\n\n get arcPaths() {\n const outer = (this.HEIGHT / 2) * 0.9;\n const inner = outer - 12;\n const pieArcs = pie<DonutComponent.DataPoint>()\n .sortValues(null)\n .value(d => d.value)(this.data);\n return pieArcs.map(pieArc =>\n arc<DonutComponent.DataPoint>()\n .innerRadius(inner)\n .outerRadius(outer)\n .padAngle(0.013)\n .startAngle(pieArc.startAngle)\n .endAngle(pieArc.endAngle)(pieArc.data),\n );\n }\n\n getFillStyle(idx: number): string {\n return `var(${this.data[idx].colorToken})`;\n }\n\n get empty(): boolean {\n return (\n this.data.length === 0 || this.data.every(point => point.value === 0)\n );\n }\n}\n\nexport namespace DonutComponent {\n export type DataPoint = {\n value: number;\n colorToken: string;\n };\n export const Sizes = ['xsmall', 'small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n}\n","<div *ngIf=\"!empty; else zeroState\" class=\"container\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"100%\"\n [attr.height]=\"HEIGHT\"\n viewBox=\"-128 -128 256 256\"\n >\n <path\n *ngFor=\"let path of arcPaths; let i = index\"\n [attr.d]=\"path\"\n [attr.fill]=\"getFillStyle(i)\"\n ></path>\n </svg>\n <div class=\"display\">\n <div class=\"value\" [ngClass]=\"size\" [rivTooltip]=\"displayTooltip\">\n {{ displayValue }}\n </div>\n <div class=\"label\">{{ displayLabel }}</div>\n </div>\n</div>\n\n<ng-template #zeroState>\n <riv-zero-state></riv-zero-state>\n</ng-template>\n","export function aggregateValues(values: number[]): number[] {\n return values.map(\n (v, ix) => v + values.slice(ix + 1).reduce((acc, n) => acc + n, 0),\n );\n}\n\nexport function calcPercentageSteps(values: number[]): number[] {\n return values.flatMap((v, ix) => {\n const next = values[ix + 1];\n return next !== undefined\n ? v === 0\n ? 0\n : [Math.round(100 * (next / v))]\n : [];\n });\n}\n\nexport function calcTrends(\n values: number[],\n previousValues: number[],\n): number[] {\n if (values.length !== previousValues.length) {\n return [];\n }\n return values.map((v, ix) => v - previousValues[ix]);\n}\n\nexport function calcPoints(\n values: number[],\n sectionWidth: number,\n height: number,\n gap: number,\n): [number, number][] {\n const divisor = Math.max(...values) / height;\n const normalizedValues = values.map(\n v => height - (divisor === 0 ? 0 : Math.round(v / divisor)),\n );\n\n // plot the points along the top edge of the graph\n return normalizedValues.slice(1).flatMap((v, ix) => [\n // top left point of current section\n [gap * (ix + 1) + sectionWidth * ix, normalizedValues[ix]],\n // bottom right point of current section\n [gap * (ix + 1) + sectionWidth * (ix + 1), v],\n // top left point of next section, required for small sections under vertical lines\n [gap * (ix + 2) + sectionWidth * (ix + 1), v],\n ]);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-metric',\n templateUrl: './metric.component.html',\n styleUrls: ['./metric.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MetricComponent {\n @Input()\n label: string = '';\n\n @Input()\n value: string = '';\n\n @Input()\n size: MetricComponent.Size = 'medium';\n\n @Input()\n @HostBinding('class.compact')\n compact: boolean = false;\n\n @Input()\n @HostBinding('class.card')\n card: boolean = false;\n\n @Input()\n help?: string;\n\n @Input()\n align?: MetricComponent.Alignment = 'left';\n\n @Input()\n valueColorToken?: string = '--type-light-high-contrast';\n\n get valueColor(): string {\n return `var(${this.valueColorToken})`;\n }\n}\n\nexport namespace MetricComponent {\n export const Sizes = ['xsmall', 'small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n\n export const Alignments = ['left', 'center', 'right'] as const;\n export type Alignment = (typeof Alignments)[number];\n}\n","<div class=\"label\" [ngClass]=\"align\">\n {{ label }}\n <span *ngIf=\"help\"\n ><riv-icon [rivTooltip]=\"help\" [name]=\"'Info'\" [size]=\"12\"></riv-icon>\n </span>\n</div>\n<div class=\"content\" [ngClass]=\"align\">\n <div class=\"value\" [ngClass]=\"size\" [style.color]=\"valueColor\">\n {{ value }}\n </div>\n <ng-content></ng-content>\n</div>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-trend',\n templateUrl: './trend.component.html',\n styleUrls: ['./trend.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TrendComponent {\n @Input()\n label: string = '';\n\n @Input()\n value: number = 0;\n\n @Input()\n successCondition: 'positive' | 'negative' = 'positive';\n\n getClasses() {\n const conditionalClass =\n this.value === 0\n ? ''\n : this.successCondition === 'positive'\n ? this.value > 0\n ? 'success'\n : 'danger'\n : this.value < 0\n ? 'success'\n : 'danger';\n\n return 'trend ' + conditionalClass;\n }\n}\n\nexport namespace TrendComponent {\n export function calculateTrend(\n currentValue: number | null | undefined,\n previousValue: number | null | undefined,\n ): number {\n if (currentValue == null || previousValue == null || previousValue === 0) {\n return 0;\n }\n return currentValue / previousValue - 1;\n }\n\n export function calculatePercentageTrend(\n currentValue: number | null | undefined,\n previousValue: number | null | undefined,\n ): number {\n if (currentValue == null || previousValue == null) {\n return 0;\n }\n return currentValue - previousValue;\n }\n}\n","<span [class]=\"getClasses()\">\n <riv-icon\n class=\"icon\"\n [name]=\"\n value === 0 ? 'ArrowRight' : value > 0 ? 'TrendingUp' : 'TrendingDown'\n \"\n [size]=\"16\"\n ></riv-icon>\n <span>{{ label }}</span>\n</span>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n} from '@angular/core';\nimport { area } from 'd3-shape';\nimport {\n aggregateValues,\n calcPercentageSteps,\n calcPoints,\n calcTrends,\n} from './funnel-chart.helpers';\n\n@Component({\n selector: 'riv-funnel',\n templateUrl: './funnel-chart.component.html',\n styleUrls: ['./funnel-chart.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FunnelChartComponent implements OnChanges {\n @Input()\n data: FunnelChartComponent.Data[] = [];\n\n @Input()\n isPreAggregated: boolean = false;\n\n @Input()\n graphHeight: number = 200;\n\n @Input()\n graphWidth: number = 1200;\n\n @Input()\n showConverted: boolean = true;\n\n aggregatedValues: number[] = [];\n percentageSteps: number[] = [];\n trends: number[] = [];\n path: string | null = null;\n gapWidth: number = 0;\n sectionWidth: number = 0;\n allZeroes: boolean = true;\n\n ngOnChanges() {\n this.calcValues();\n this.calcTrends();\n this.calcSpace();\n this.createPath();\n }\n\n calcValues() {\n this.aggregatedValues = this.isPreAggregated\n ? this.data.map(d => d.value)\n : aggregateValues(this.data.map(d => d.value));\n\n this.allZeroes = Math.max(...this.aggregatedValues) === 0;\n\n this.percentageSteps = calcPercentageSteps(this.aggregatedValues);\n }\n\n calcTrends() {\n const previousValues = this.data.flatMap(d =>\n d.previousValue !== null ? [d.previousValue] : [],\n );\n\n const aggregatedValues = this.isPreAggregated\n ? previousValues\n : aggregateValues(previousValues);\n\n const previousPercentageSteps = calcPercentageSteps(aggregatedValues);\n\n this.trends = calcTrends(this.percentageSteps, previousPercentageSteps);\n }\n\n calcSpace() {\n this.gapWidth = document.querySelector('.vertical-line')?.clientWidth ?? 2;\n const totalGapSpace = this.percentageSteps.length * this.gapWidth;\n\n this.sectionWidth = Math.round(\n (this.graphWidth - totalGapSpace) / (this.percentageSteps.length || 1),\n );\n }\n\n createPath() {\n const points = calcPoints(\n this.aggregatedValues,\n this.sectionWidth,\n this.graphHeight,\n this.gapWidth,\n );\n\n this.path = area()\n .x(([x, _]) => x)\n .y1(([_, y]) => y)\n .y0(this.graphHeight)(points);\n }\n}\n\nexport namespace FunnelChartComponent {\n export type Data = {\n label: string;\n value: number;\n previousValue: number | null;\n };\n}\n","<div class=\"funnel-chart\">\n <div class=\"header\">\n <!-- allocate space for the header -->\n <riv-metric\n class=\"metric-placeholder\"\n label=\"placeholder\"\n value=\"0\"\n ></riv-metric>\n <!-- center each metric over vertical lines -->\n <riv-metric\n *ngFor=\"let value of aggregatedValues; let ix = index\"\n class=\"metric\"\n [label]=\"data[ix]?.label ?? ''\"\n [value]=\"value.toString()\"\n [style.left.px]=\"ix * sectionWidth + ix * gapWidth\"\n ></riv-metric>\n </div>\n\n <div class=\"chart\">\n <ng-container *ngFor=\"let step of percentageSteps; let ix = index\">\n <div class=\"vertical-line\"></div>\n\n <div>\n <div *ngIf=\"showConverted && !allZeroes\" class=\"step-info\">\n {{ step }}% converted\n <riv-trend\n *ngIf=\"trends[ix] !== null\"\n [label]=\"trends[ix]! + '%'\"\n [value]=\"trends[ix]!\"\n ></riv-trend>\n </div>\n\n <!-- allocate space for the graph -->\n <div\n class=\"graph-placeholder\"\n [style.width.px]=\"sectionWidth\"\n [style.height.px]=\"graphHeight\"\n ></div>\n </div>\n </ng-container>\n\n <div class=\"vertical-line\"></div>\n\n <svg\n *ngIf=\"path\"\n class=\"graph\"\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.width]=\"graphWidth\"\n [attr.height]=\"graphHeight\"\n >\n <linearGradient id=\"gradient\">\n <stop stop-color=\"var(--purp-30)\" offset=\"0%\" />\n <stop stop-color=\"var(--brand)\" offset=\"100%\" />\n </linearGradient>\n <path [attr.d]=\"path\" fill=\"url(#gradient)\"></path>\n </svg>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n} from '@angular/core';\n\n@Component({\n selector: 'riv-mini-pie',\n templateUrl: './mini-pie.component.html',\n styleUrls: ['./mini-pie.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MiniPieComponent {\n @Input()\n value: number = 0;\n\n @Input()\n size: MiniPieComponent.Size = 'small';\n\n @Input()\n colorToken: string = '--purp-60';\n\n @HostBinding('class')\n get classes(): string {\n return this.size;\n }\n\n get clampedValue(): number {\n return Math.max(0, Math.min(100, this.value));\n }\n\n get fillColor(): string {\n return `var(${this.colorToken})`;\n }\n\n get isFull(): boolean {\n return this.clampedValue >= 100;\n }\n\n get wedgePath(): string {\n const pct = this.clampedValue / 100;\n if (pct <= 0 || pct >= 1) return '';\n const angle = pct * 2 * Math.PI;\n const x = Math.sin(angle) * 8;\n const y = -Math.cos(angle) * 8;\n const largeArc = pct > 0.5 ? 1 : 0;\n return `M 0 0 L 0 -8 A 8 8 0 ${largeArc} 1 ${x} ${y} Z`;\n }\n}\n\nexport namespace MiniPieComponent {\n export const Sizes = ['small', 'medium', 'large'] as const;\n export type Size = (typeof Sizes)[number];\n}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-10 -10 20 20\">\n <circle cx=\"0\" cy=\"0\" r=\"8\" class=\"track\" />\n <circle *ngIf=\"isFull\" cx=\"0\" cy=\"0\" r=\"8\" [attr.fill]=\"fillColor\" />\n <path\n *ngIf=\"clampedValue > 0 && !isFull\"\n [attr.d]=\"wedgePath\"\n [attr.fill]=\"fillColor\"\n />\n</svg>\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'riv-progress',\n templateUrl: './progress.component.html',\n styleUrls: ['./progress.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressComponent {\n @Input()\n value: number = 0;\n\n @Input()\n max: number = 0;\n\n getWidth(): string {\n if (this.max === 0) return '0%';\n return 100 * Math.min(this.value / this.max, 1) + '%';\n }\n}\n","<div class=\"track\">\n <span class=\"value\" [style.width]=\"getWidth()\"></span>\n</div>\n","import { TimeInterval, utcDay, utcMonth, utcWeek, utcYear } from 'd3-time';\n\nexport const intervals = ['year', 'quarter', 'month', 'week', 'day'] as const;\nexport type Interval = (typeof intervals)[number];\n\nexport function getTimeInterval(interval: Interval): TimeInterval {\n switch (interval) {\n case 'day':\n return utcDay;\n case 'week':\n return utcWeek;\n case 'month':\n return utcMonth;\n case 'quarter':\n return utcMonth.every(3)!;\n case 'year':\n return utcYear;\n }\n}\n\nexport function getMinorIntervalFormat(interval: Interval) {\n switch (interval) {\n case 'day':\n case 'week':\n return '%-d';\n case 'month':\n return '%b';\n case 'quarter':\n return 'Q%q';\n case 'year':\n return '%Y';\n }\n}\n\nexport function getMajorInterval(interval: Interval) {\n switch (interval) {\n case 'day':\n case 'week':\n return 'month';\n case 'month':\n case 'quarter':\n case 'year':\n return 'year';\n }\n}\n\nexport function getMajorIntervalFormat(\n interval: ReturnType<typeof getMajorInterval>,\n hasMultipleYears: boolean,\n) {\n switch (interval) {\n case 'year':\n return hasMultipleYears ? '%Y' : '';\n case 'month':\n return hasMultipleYears ? '%b %Y' : '%b';\n }\n}\n\nexport function getIntervalTitle(interval: Interval) {\n switch (interval) {\n case 'year':\n return 'Years';\n case 'quarter':\n return 'Quarters';\n case 'month':\n return 'Months';\n case 'week':\n return 'Weeks';\n case 'day':\n return 'Days';\n }\n}\n","import { StackedColumnComponent } from './stacked-column.component';\n\nexport function getDateRange(\n stacks: StackedColumnComponent.Stack[],\n): [Date, Date] {\n let min = Infinity;\n let max = -Infinity;\n for (const stack of stacks) {\n for (const series of stack.series) {\n for (const { date } of series.data) {\n const value = date.valueOf();\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n return [new Date(min), new Date(max)];\n}\n\nexport function pointReducer(points: StackedColumnComponent.Value[]) {\n return points.reduce((total, { value }) => total + value, 0);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { index } from 'd3-array';\nimport { scaleBand, scaleLinear } from 'd3-scale';\nimport { stack } from 'd3-shape';\nimport { utcFormat } from 'd3-time-format';\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n map,\n shareReplay,\n} from 'rxjs';\nimport {\n Interval,\n getIntervalTitle,\n getMajorInterval,\n getMajorIntervalFormat,\n getMinorIntervalFormat,\n getTimeInterval,\n intervals,\n} from '../intervals';\nimport { LegendItemComponent } from '../legend-item/legend-item.component';\nimport { getDateRange, pointReducer } from './stacked-column.helpers';\n\nconst DEFAULT_INTERVAL: Interval = 'month';\n\ntype IntervalOption = {\n id: Interval;\n title: string;\n};\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of RxJS.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-stacked-column',\n templateUrl: './stacked-column.component.html',\n styleUrls: ['./stacked-column.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StackedColumnComponent {\n private readonly input$ = new BehaviorSubject<StackedColumnComponent.Stack[]>(\n [],\n );\n @Input()\n public set input(v: StackedColumnComponent.Stack[]) {\n this.input$.next(v);\n }\n public get input(): StackedColumnComponent.Stack[] {\n return this.input$.getValue();\n }\n\n private readonly width$ = new BehaviorSubject<number>(960);\n protected set width(v: number) {\n this.width$.next(v);\n }\n\n @ContentChild(TemplateRef)\n calloutHeaderTemplate!: TemplateRef<{\n $implicit: StackedColumnComponent.CalloutContext;\n }>;\n\n private readonly HEIGHT = 300;\n\n @Input()\n public valueFormatter: (v: number) => string = v => v.toString();\n\n private readonly interval$ = new BehaviorSubject<Interval>(DEFAULT_INTERVAL);\n @Input()\n public set interval(v: Interval) {\n if (v !== this.interval$.getValue()) {\n this.interval$.next(v);\n this.intervalChanged.emit(v);\n }\n }\n public get interval() {\n return this.interval$.getValue();\n }\n\n @Output()\n intervalChanged = new EventEmitter<Interval>();\n\n @Output()\n stackClicked = new EventEmitter<StackedColumnComponent.StackClicked>();\n\n @ViewChild('controls')\n public readonly controls?: TemplateRef<void>;\n\n private readonly COLUMN_WIDTHS = [8, 16, 40, 72] as const;\n private readonly MIN_COLUMN_WIDTH = this.COLUMN_WIDTHS[0];\n\n private readonly maxColumns$ = this.width$.pipe(\n map(width => {\n const innerWidth = width - this.LEFT_OFFSET;\n const columnWidthWithPadding =\n this.MIN_COLUMN_WIDTH + this.COLUMN_PADDING * 2;\n return Math.floor(innerWidth / columnWidthWithPadding);\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n getXStepsInRange(interval: Interval, minDate: Date, maxDate: Date) {\n const timeInterval = getTimeInterval(interval);\n return timeInterval.range(\n timeInterval.floor(minDate),\n timeInterval.floor(timeInterval.offset(maxDate, 1)),\n ).length;\n }\n\n private readonly allowedIntervals$: Observable<Interval[]> = combineLatest([\n this.input$,\n this.maxColumns$,\n ]).pipe(\n map(([input, maxColumns]) => {\n const [minDate, maxDate] = getDateRange(input);\n\n return intervals.filter(interval => {\n const xStepsCount = this.getXStepsInRange(interval, minDate, maxDate);\n return input.length * xStepsCount <= maxColumns;\n });\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly intervalOptions$ = this.allowedIntervals$.pipe(\n map(intervals =>\n intervals.map(\n (interval): IntervalOption => ({\n id: interval,\n title: getIntervalTitle(interval),\n }),\n ),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedIntervalOption$ = combineLatest([\n this.interval$,\n this.intervalOptions$,\n ]).pipe(\n map(([interval, options]) => {\n const allowedIntervals = options.map(({ id }) => id as Interval);\n if (!allowedIntervals.includes(interval)) {\n const firstAllowed = allowedIntervals.at(0);\n const lastAllowed = allowedIntervals.at(-1);\n if (!firstAllowed || !lastAllowed) return null;\n\n if (intervals.indexOf(interval) < intervals.indexOf(firstAllowed))\n interval = firstAllowed;\n if (intervals.indexOf(interval) > intervals.indexOf(lastAllowed))\n interval = lastAllowed;\n }\n return options.find(o => o.id === interval) ?? null;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedInterval$ = this.selectedIntervalOption$.pipe(\n map(option => (option ? (option.id as Interval) : DEFAULT_INTERVAL)),\n );\n\n setIntervalOption(option: IntervalOption | null) {\n if (option) this.interval = option.id;\n }\n\n private columnWidth$ = combineLatest([\n this.input$,\n this.selectedInterval$,\n this.width$,\n ]).pipe(\n map(([input, selectedInterval, width]) => {\n const [minDate, maxDate] = getDateRange(input);\n const xStepCount = this.getXStepsInRange(\n selectedInterval,\n minDate,\n maxDate,\n );\n\n const innerWidth = width - this.LEFT_OFFSET;\n const allowedColumnWidths = this.COLUMN_WIDTHS.filter(columnWidth => {\n const columnWidthWithPadding = columnWidth + this.COLUMN_PADDING * 2;\n return (\n innerWidth - input.length * xStepCount * columnWidthWithPadding >= 0\n );\n });\n const columnWidth = allowedColumnWidths.at(-1);\n if (!columnWidth) return 0;\n\n return columnWidth;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly binnedDataWithRanges$: Observable<{\n stacks: StackedColumnComponent.Stack[];\n getRange: (date: number) => { minDate: Date; maxDate: Date };\n }> = combineLatest([this.input$, this.selectedInterval$]).pipe(\n map(([input, interval]) => {\n const rangeMap = new Map<number, Date>();\n const stacks = input.map((stack): StackedColumnComponent.Stack => {\n const timeInterval = getTimeInterval(interval);\n\n const series = stack.series.map(series => {\n const binned = new Map<number, StackedColumnComponent.Value[]>();\n for (const point of series.data) {\n const binKey = timeInterval.floor(point.date).valueOf();\n const maxDate = rangeMap.get(binKey);\n\n if (!maxDate || maxDate < point.date) {\n rangeMap.set(binKey, point.date);\n }\n\n if (!binned.has(binKey)) {\n binned.set(binKey, []);\n }\n const bin = binned.get(binKey)!;\n bin.push(point);\n }\n return {\n ...series,\n data: [...binned.entries()].map(([dateValue, points]) => ({\n date: new Date(dateValue),\n value: pointReducer(points),\n })),\n };\n });\n return {\n ...stack,\n series: series,\n };\n });\n return {\n stacks,\n getRange: (date: number) => {\n return {\n minDate: new Date(date),\n maxDate: rangeMap.get(date)!,\n };\n },\n };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly binnedData$ = this.binnedDataWithRanges$.pipe(\n map(binnedData => binnedData.stacks),\n );\n\n readonly getRange$ = this.binnedDataWithRanges$.pipe(\n map(binnedData => binnedData.getRange),\n );\n\n readonly LEFT_OFFSET = 48;\n readonly COLUMN_PADDING = 4;\n\n readonly drawData$ = combineLatest([\n this.binnedData$,\n this.width$,\n this.selectedInterval$,\n this.columnWidth$,\n ]).pipe(\n map(([binnedData, width, interval, columnWidth]) => {\n const viewBox = `0 0 ${width} ${this.HEIGHT}`;\n const padding = 16;\n\n const [minDate, maxDate] = getDateRange(binnedData);\n const hasMultipleYears = minDate.getFullYear() < maxDate.getFullYear();\n const xMinorIntervalFormat = getMinorIntervalFormat(interval);\n const minorFormatter = utcFormat(xMinorIntervalFormat);\n const minorTimeInterval = getTimeInterval(interval);\n const xSteps = minorTimeInterval.range(\n minorTimeInterval.floor(minDate),\n minorTimeInterval.floor(minorTimeInterval.offset(maxDate, 1)),\n );\n const xMajorInterval = getMajorInterval(interval);\n const xMajorIntervalFormat = getMajorIntervalFormat(\n xMajorInterval,\n hasMultipleYears,\n );\n const majorFormatter = utcFormat(xMajorIntervalFormat);\n const fullFormatter = utcFormat(\n `${xMinorIntervalFormat} ${xMajorIntervalFormat}`,\n );\n\n const xOuterScale = scaleBand()\n .domain(xSteps.map(date => fullFormatter(date)))\n .range([this.LEFT_OFFSET, width]);\n\n const outerPadding =\n (xOuterScale.bandwidth() -\n (this.COLUMN_PADDING * (binnedData.length - 1) +\n columnWidth * binnedData.length)) /\n 2;\n\n type SeriesPoint = StackedColumnComponent.Value & {\n series: StackedColumnComponent.Series;\n };\n\n const renderInformation = binnedData.map(stackData => {\n /*\n Create an array with every data point + their associated series.\n i.e. Make an backlink for each element to its series.\n */\n const stackedTable = stackData.series.reduce<SeriesPoint[]>(\n (table, s) => [\n ...table,\n ...s.data.map(point => ({\n ...point,\n series: s,\n })),\n ],\n [],\n );\n\n /*\n Maps each of the SeriesPoints based on label.\n Then map each of those maps to a date.\n\n Example:\n If we were indexing the following data:\n * Estimates Complete -> 5 in January, 7 in February\n * Estimates Incomplete -> 3 in January, 3 in February\n We would get an indexed table like the following, (note this is pseudocode):\n 'January': { 'Estimates Complete': 5, 'Estimates Incomplete': 3 }\n 'February': { 'Estimates Complete': 7, 'Estimates Incomplete': 3 }\n */\n const indexedTable: Map<Date, Map<string, SeriesPoint>> = index(\n stackedTable,\n d => d.date,\n d => d.series.label,\n );\n\n /*\n The output of \"stack()\" is an array of arrays of tuples.\n The tuples unnest as [baseline, topline].\n Each \"key\" involved in the stack has an array of tuples relating to it.\n i.e. [ Date 1 Tuple, Date 2 Tuple ]\n All \"key\" arrays are contained in the outer array.\n i.e. [ Key 1 Tuples, Key 2 Tuples]\n\n We select the keys using \".keys()\".\n For our purposes, the keys are the legend elements.\n i.e. If you have two blocks of the same color, they have the same key.\n\n We select the heights of the blocks using \".value()\".\n\n We are going to stack the blocks on top of each other.\n The baseline of the first key tuples are 0.\n The baseline of the second key tuples are the topline of the associated first key tuple.\n\n Example:\n If we were stacking the following data:\n * Estimates Complete -> 5 in January, 7 in February\n * Estimates Incomplete -> 3 in January, 3 in February\n We would get a stack of:\n [ [ [0,5],[0,7] ], [ [5,8],[7,10] ] ]\n */\n const stacked = stack<\n typeof indexedTable extends Map<infer K, infer V> ? [K, V] : never\n >()\n .keys(stackData.series.map(v => v.label))\n .value(([_, group], key) => {\n return group.get(key)!.value;\n })(indexedTable);\n\n return { indexedTable, stacked };\n });\n\n // The domain should be based on the highest value in any stack, on any date.\n let domainMax = 0;\n // For each unique stack,\n renderInformation.forEach(({ stacked, indexedTable }) => {\n // For each date,\n [...indexedTable.values()].forEach((pointMap, i) => {\n // For each series,\n [...pointMap.values()].forEach((_, j) => {\n domainMax = Math.max(domainMax, ...stacked[j][i]);\n });\n });\n });\n if (domainMax === 0) domainMax = 1;\n const yScale = scaleLinear()\n .domain([0, domainMax])\n .range([this.HEIGHT - padding * 2, padding]);\n\n const rects: {\n dateValue: number;\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n striped: boolean;\n seriesPoint: SeriesPoint;\n }[] = [];\n // For each unique stack,\n renderInformation.forEach(({ stacked, indexedTable }, index) => {\n // For each date,\n [...indexedTable.entries()].forEach(([date, pointMap], i) => {\n // For each series,\n [...pointMap.entries()].forEach(([_, seriesPoint], j) => {\n // Get the size of the box we are about to draw.\n const [baseline, topline] = stacked[j][i];\n\n const width = columnWidth;\n const height = yScale(baseline) - yScale(topline);\n const x =\n (xOuterScale(fullFormatter(date)) ?? 0) +\n outerPadding +\n columnWidth * index +\n this.COLUMN_PADDING * index;\n const y = yScale(baseline) - height;\n const fill = `var(${seriesPoint.series.colorToken})`;\n\n rects.push({\n dateValue: date.valueOf(),\n x,\n y,\n width,\n height,\n fill,\n striped: seriesPoint.series.style === 'striped',\n seriesPoint,\n });\n });\n });\n });\n\n const xMinorTicks = xSteps.map(date => ({\n dateValue: date.valueOf(),\n label: minorFormatter(date),\n x:\n (xOuterScale(fullFormatter(date)) ?? 0) + xOuterScale.bandwidth() / 2,\n }));\n const xMajorTicks =\n interval !== 'year'\n ? xSteps\n .map(date => ({\n dateValue: date.valueOf(),\n label: majorFormatter(date),\n x:\n (xOuterScale(fullFormatter(date)) ?? 0) +\n xOuterScale.bandwidth() / 2,\n }))\n .filter(\n (tick, i, ticks) =>\n i === 0 || tick.label !== ticks[i - 1].label,\n )\n : [];\n\n const yTicks = yScale.ticks(5);\n\n const hoverBandWidth =\n renderInformation.length * columnWidth +\n (renderInformation.length + 1) * this.COLUMN_PADDING;\n const hoverBands = xSteps.map(date => ({\n dateValue: date.valueOf(),\n x:\n (xOuterScale(fullFormatter(date)) ?? 0) +\n (xOuterScale.bandwidth() - hoverBandWidth) / 2,\n y: yScale(domainMax),\n width: hoverBandWidth,\n height: yScale(0) - yScale(domainMax),\n }));\n\n return {\n columnWidth,\n hoverBands,\n rects,\n viewBox,\n xMinorTicks,\n xMajorTicks,\n yScale,\n yTicks,\n };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly empty$ = this.input$.pipe(\n map(input =>\n input.every(stack =>\n stack.series.every(series => series.data.length === 0),\n ),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly hoveredBand$ = new BehaviorSubject<{\n dateValue: number;\n event: MouseEvent;\n } | null>(null);\n\n readonly callout$: Observable<StackedColumnComponent.CalloutContext | null> =\n combineLatest([this.hoveredBand$, this.binnedData$]).pipe(\n map(([hoveredBand, binnedData]) => {\n if (!hoveredBand) return null;\n\n const { target } = hoveredBand.event;\n if (!target) return null;\n const anchor = (<SVGRectElement>target).getBoundingClientRect();\n\n return {\n anchor,\n content: binnedData.map(stack => {\n const seriesPoints = stack.series.map(series => ({\n label: series.label,\n colorToken: series.colorToken,\n style: series.style,\n value:\n series.data.find(\n ({ date }) => date.valueOf() === hoveredBand.dateValue,\n )?.value ?? 0,\n }));\n return {\n title: stack.title,\n total: this.valueFormatter(\n seriesPoints.reduce((acc, point) => point.value + acc, 0),\n ),\n series: seriesPoints.map(point => ({\n ...point,\n formattedValue: this.valueFormatter(point.value),\n })),\n };\n }),\n };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n}\n\nexport namespace StackedColumnComponent {\n export type Value = {\n date: Date;\n value: number;\n };\n\n export type Series = {\n label: string;\n data: Value[];\n colorToken: string;\n style: LegendItemComponent.Style;\n };\n\n export type Stack = {\n title?: string;\n series: Series[];\n };\n\n export type StackClicked = {\n minDate: Date;\n maxDate: Date;\n };\n\n export type CalloutContext = {\n anchor: DOMRect;\n content: {\n title?: string;\n total: string;\n series: {\n label: string;\n colorToken: string;\n style: LegendItemComponent.Style;\n value: number;\n formattedValue: string;\n }[];\n }[];\n };\n}\n","<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let d\"\n [attr.viewBox]=\"d.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"d.columnWidth\"\n [attr.height]=\"d.columnWidth\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n x1=\"0\"\n [attr.y1]=\"d.columnWidth\"\n [attr.x2]=\"d.columnWidth\"\n y2=\"0\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let tick of d.xMinorTicks\">\n <rect\n class=\"tick-background\"\n [class.focused]=\"(hoveredBand$ | async)?.dateValue === tick.dateValue\"\n [attr.x]=\"tick.x - 20\"\n [attr.y]=\"d.yScale(0) + 3\"\n width=\"40\"\n height=\"12\"\n rx=\"2\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 12\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.xMajorTicks\">\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 24\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <rect\n class=\"tick\"\n x=\"0\"\n [attr.y]=\"d.yScale(tick)\"\n width=\"100%\"\n height=\"1\"\n ></rect>\n <text class=\"tick-label\" x=\"0\" [attr.y]=\"d.yScale(tick)\" dy=\"-4\">\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g *ngFor=\"let rect of d.rects\">\n <rect\n class=\"column\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.dateValue !== rect.dateValue\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <ng-container *ngIf=\"getRange$ | async; let getRange\">\n <rect\n *ngFor=\"let rect of d.hoverBands\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"transparent\"\n (mouseenter)=\"\n hoveredBand$.next({ dateValue: rect.dateValue, event: $event })\n \"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit(getRange(rect.dateValue)); hoveredBand$.next(null)\n \"\n ></rect>\n </ng-container>\n </svg>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout?.anchor ?? null\"\n [theme]=\"'light'\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div class=\"callout-stack\" *ngFor=\"let stack of callout?.content\">\n <div *ngIf=\"stack.title; let title\" class=\"callout-row\">\n <span class=\"series-label\">{{ title }}</span>\n <span>{{ stack.total }}</span>\n </div>\n <div *ngFor=\"let series of stack.series\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item\n [colorToken]=\"series.colorToken\"\n [style]=\"series.style\"\n ></riv-legend-item>\n <span>{{ series.label }}</span>\n </span>\n <span>{{ series.formattedValue }}</span>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state></riv-zero-state>\n</ng-template>\n\n<ng-template #controls>\n <riv-simple-select\n [optionGroups]=\"intervalOptions$ | async | rivOptionGroup\"\n [orderBy]=\"'source'\"\n [selectedOption]=\"selectedIntervalOption$ | async\"\n (selectedOptionChange)=\"setIntervalOption($event)\"\n ></riv-simple-select>\n</ng-template>\n","import { InternSet, union } from 'd3-array';\nimport { ScaleLinear } from 'd3-scale';\nimport { LegendItemComponent } from '../legend-item/legend-item.component';\nimport { StackedRowComponent } from './stacked-row.component';\n\n// A row element with a baseline, topline, and a reference to the stack it belongs to\ntype StackedRowElement = StackedRowComponent.RowElement & {\n baseline: number;\n topline: number;\n};\n\n// The data about a rectangle we display on screen\nexport type RowRectangle = {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n striped: boolean;\n rowName: string;\n stackedRowElement: StackedRowElement;\n stackIndex: number;\n};\n\n// The data about a row label we display on screen\nexport type RowLabel = {\n x: number;\n y: number;\n label: string;\n};\n\n// The data we are displaying in this component\nexport type StackedRowDrawData = {\n legendItems: {\n label: string;\n colorToken: string;\n style?: LegendItemComponent.Style;\n }[];\n rowHeight: number;\n rects: RowRectangle[];\n rowNames: RowLabel[];\n rowTotals: RowLabel[];\n viewBox: string;\n xScale: ScaleLinear<number, number, never>;\n xTicks: number[];\n};\n\n// Everything that describes a row we will display\nexport type RowDisplayInfo = {\n rowName: string;\n elementsButStacked: StackedRowElement[];\n rowTotal: number;\n stackIndex: number;\n};\n\n// Get a ordered+unique list of keys from the row elements\nexport function getKeyOrder(\n rowStacks: StackedRowComponent.RowStack[],\n): InternSet<string> {\n const allRowElements: StackedRowComponent.RowElement[] = [];\n for (const rowStack of rowStacks) {\n allRowElements.push(...rowStack.data);\n }\n const orderedKeys: InternSet<string> = union([\n ...allRowElements.map(rowElement => rowElement.label),\n ]);\n return orderedKeys;\n}\n\n// Get a list of the legend items we should show\nexport function getLegendItems(\n rowsForDisplay: RowDisplayInfo[],\n keysInOrder: InternSet<string>,\n): {\n label: string;\n colorToken: string;\n style?: LegendItemComponent.Style;\n}[] {\n const legendItemArray: ReturnType<typeof getLegendItems> = [];\n for (const rowForDisplay of rowsForDisplay) {\n for (const key of keysInOrder) {\n const elementMatchingKey: StackedRowElement | undefined =\n rowForDisplay.elementsButStacked.find(element => element.label == key);\n if (\n elementMatchingKey &&\n elementMatchingKey.value > 0 &&\n !legendItemArray.find(item => item.label == key)\n ) {\n legendItemArray.push({\n label: elementMatchingKey.label,\n colorToken: elementMatchingKey.colorToken,\n style: elementMatchingKey.style,\n });\n }\n }\n }\n return legendItemArray;\n}\n\n// Make sure we have input in a standard format.\nexport function standardizeRowStacks(\n rowStacks: StackedRowComponent.RowStack[],\n keysInOrder: InternSet<string>,\n): StackedRowComponent.RowStack[] {\n const standardizedRows: StackedRowComponent.RowStack[] = [];\n for (const rowStack of rowStacks) {\n const standardizedData: StackedRowComponent.RowElement[] = [];\n for (const key of keysInOrder) {\n const elementMatchingKey: StackedRowComponent.RowElement | undefined =\n rowStack.data.find(element => element.label == key);\n if (elementMatchingKey) {\n standardizedData.push({\n ...elementMatchingKey,\n value: Math.abs(elementMatchingKey.value),\n });\n }\n }\n standardizedRows.push({\n rowName: rowStack.rowName,\n data: standardizedData,\n });\n }\n return standardizedRows;\n}\n\n// Stacks the elements and creates the baselines and toplines\nexport function getRowDisplayInfo(\n rowStack: StackedRowComponent.RowStack,\n index: number,\n): RowDisplayInfo {\n const elementsButStacked: StackedRowElement[] = [];\n let currentBaseline: number = 0;\n let currentTopline: number = 0;\n\n for (const currentElement of rowStack.data) {\n currentTopline += currentElement.value ?? 0;\n\n elementsButStacked.push({\n ...currentElement,\n baseline: currentBaseline,\n topline: currentTopline,\n });\n\n currentBaseline = currentTopline;\n }\n\n return {\n rowName: rowStack.rowName,\n elementsButStacked: elementsButStacked,\n rowTotal: currentTopline,\n stackIndex: index,\n };\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n} from '@angular/core';\nimport { InternSet } from 'd3-array';\nimport { ScaleLinear, scaleLinear } from 'd3-scale';\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n map,\n shareReplay,\n} from 'rxjs';\nimport { LegendItemComponent } from '../legend-item/legend-item.component';\nimport {\n RowDisplayInfo,\n RowLabel,\n RowRectangle,\n StackedRowDrawData,\n getKeyOrder,\n getLegendItems,\n getRowDisplayInfo,\n standardizeRowStacks,\n} from './stacked-row.helpers';\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of RxJS.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-stacked-row',\n templateUrl: './stacked-row.component.html',\n styleUrls: ['./stacked-row.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StackedRowComponent {\n // This is the list of rows we will display, in the order we will display them.\n private readonly input$ = new BehaviorSubject<StackedRowComponent.RowStack[]>(\n [],\n );\n @Input()\n public set input(v: StackedRowComponent.RowStack[]) {\n this.input$.next(v);\n }\n public get input(): StackedRowComponent.RowStack[] {\n return this.input$.getValue();\n }\n\n // Width helps determine the size of the viewbox this graph is displaying in.\n private readonly width$ = new BehaviorSubject<number>(0);\n protected set width(v: number) {\n this.width$.next(v);\n }\n\n // ValueFormatter determines how we style the values in a metric and the x-axis\n @Input()\n public valueFormatter: (v: number) => string = v => v.toString();\n\n private readonly zeroStateMessage$ = new BehaviorSubject<string>(\n 'No data to display.',\n );\n @Input()\n public set zeroStateMessage(v: string) {\n this.zeroStateMessage$.next(v);\n }\n public get zeroStateMessage(): string {\n return this.zeroStateMessage$.getValue();\n }\n\n @ContentChild(TemplateRef)\n calloutHeaderTemplate!: TemplateRef<{\n $implicit: StackedRowComponent.CalloutContext;\n }>;\n\n @Output()\n stackClicked = new EventEmitter<StackedRowComponent.StackClicked>();\n\n private readonly chartAndRowHeights$ = this.input$.pipe(\n map(input => {\n const heightWithoutRows =\n input.length * this.SECTION_PADDING.BETWEEN_ROW +\n this.SECTION_PADDING.OUTER_TOP_BOTTOM * 2 +\n this.SECTION_HEIGHTS.X_AXIS_LABEL;\n\n // The combined height of all rows at their min/max\n const minHeight =\n input.length * this.RECTANGLE_HEIGHTS.MIN_HEIGHT + heightWithoutRows;\n const maxHeight =\n input.length * this.RECTANGLE_HEIGHTS.MAX_HEIGHT + heightWithoutRows;\n\n // If the max-sized rows don't need the target size, shrink the chart\n if (maxHeight < this.TARGET_HEIGHT)\n return {\n chartHeight: maxHeight,\n rowHeight: this.RECTANGLE_HEIGHTS.MAX_HEIGHT,\n };\n // If the min-sized rows need more than the target size, grow the chart\n if (minHeight > this.TARGET_HEIGHT)\n return {\n chartHeight: minHeight,\n rowHeight: this.RECTANGLE_HEIGHTS.MIN_HEIGHT,\n };\n // Otherwise shrink the rows to fit the target size\n return {\n chartHeight: this.TARGET_HEIGHT,\n rowHeight: (this.TARGET_HEIGHT - heightWithoutRows) / input.length,\n };\n }),\n );\n\n /*\n The layout we are shooting for is:\n\n | X Axis Labels |\n Row Name | Rectangles | Totals\n */\n readonly TARGET_HEIGHT = 300;\n\n readonly RECTANGLE_HEIGHTS = {\n MIN_HEIGHT: 12, // Sets the smallest size a row can shrink to\n MAX_HEIGHT: 42, // Sets the largest size a row can expand to\n };\n\n readonly LABEL_HEIGHT = 8;\n\n readonly SECTION_HEIGHTS = {\n // Space reserved for the x-axis labels\n X_AXIS_LABEL: 14,\n };\n\n readonly SECTION_WIDTHS = {\n // Space reserved for the name at the start of the row\n ROW_NAME: 100,\n // Space reserved for the totals at the end of the row\n ROW_TOTAL_LABEL: 72,\n };\n\n readonly SECTION_PADDING = {\n // Padding between each edge of the viewbox and the content\n OUTER_TOP_BOTTOM: 4,\n OUTER_LEFT_RIGHT: 4,\n // Padding between the bottom of one row and the top of the next row\n BETWEEN_ROW: 4,\n // Space between the row and the top of a rectangle in that row\n RECTANGLE_TO_ROW: 6,\n };\n\n // The number of X-axis segments to create, with labels at the start of each segment.\n readonly X_TICK_COUNT_MAX = 8;\n readonly X_TICK_COUNT_MIN = 3;\n readonly X_TICK_MAX_WIDTH = 900;\n readonly X_TICK_MIN_WIDTH = 400;\n\n // Zero on the X axis is after the left padding and the row name.\n locationOfXAxisZero() {\n return this.SECTION_PADDING.OUTER_LEFT_RIGHT + this.SECTION_WIDTHS.ROW_NAME;\n }\n // The end of the X axis is right before the row total and the right padding.\n locationOfXAxisEnd(width: number) {\n const spaceOnRight: number =\n this.SECTION_WIDTHS.ROW_TOTAL_LABEL +\n this.SECTION_PADDING.OUTER_LEFT_RIGHT;\n return width - spaceOnRight;\n }\n // The y-index of the x-axis ticks\n locationOfXAxisTick() {\n return (\n this.SECTION_PADDING.OUTER_TOP_BOTTOM + this.SECTION_HEIGHTS.X_AXIS_LABEL\n );\n }\n // The y-index of the top of the current row\n getTopOfRow(rowIndex: number, rowHeight: number) {\n const spaceAboveRows: number =\n this.SECTION_PADDING.OUTER_TOP_BOTTOM + this.SECTION_HEIGHTS.X_AXIS_LABEL;\n\n const aboveRows: number = rowIndex * rowHeight;\n const aboveRowPaddings: number =\n rowIndex * this.SECTION_PADDING.BETWEEN_ROW;\n const allAboveRows: number = aboveRows + aboveRowPaddings;\n\n return spaceAboveRows + allAboveRows;\n }\n\n // Calculate all the values we need for displaying the graph on screen.\n getDrawnData(\n rowStacks: StackedRowComponent.RowStack[],\n width: number,\n chartHeight: number,\n rowHeight: number,\n ) {\n if (rowStacks.length == 0) {\n return null;\n }\n const viewBox = `0 0 ${width} ${chartHeight}`;\n\n const keysInOrder: InternSet<string> = getKeyOrder(rowStacks);\n const standardizedRows: StackedRowComponent.RowStack[] =\n standardizeRowStacks(rowStacks, keysInOrder);\n const rowsForDisplay: RowDisplayInfo[] = standardizedRows.map(\n (stackData, i) => {\n return getRowDisplayInfo(stackData, i);\n },\n );\n\n // The maximum value of the domain should be the highest total value from the rows.\n const domainMax = Math.max(0, ...rowsForDisplay.map(row => row.rowTotal));\n const xScale: ScaleLinear<number, number, never> = scaleLinear()\n .domain([0, domainMax])\n .range([this.locationOfXAxisZero(), this.locationOfXAxisEnd(width)]);\n\n // Setup a linear scale for tick count based on width\n const tickScale = scaleLinear()\n .domain([this.X_TICK_MIN_WIDTH, this.X_TICK_MAX_WIDTH])\n .range([this.X_TICK_COUNT_MIN, this.X_TICK_COUNT_MAX])\n .clamp(true); // Ensures the scale does not go beyond the defined range\n\n const xtickCountAdjusted = Math.round(tickScale(width));\n const xTicks = xScale.ticks(xtickCountAdjusted);\n\n const rects: RowRectangle[] = this.createRectanglesFromRows(\n rowsForDisplay,\n xScale,\n rowHeight,\n );\n\n const rowNamesToDraw: RowLabel[] = this.getRowNamesToDraw(\n rowsForDisplay,\n rowHeight,\n );\n const rowTotalsToDraw: RowLabel[] = this.getRowTotalsToDraw(\n rowsForDisplay,\n width,\n rowHeight,\n );\n\n const legendItems = getLegendItems(rowsForDisplay, keysInOrder);\n\n return {\n legendItems: legendItems,\n rowHeight: rowHeight,\n rects: rects,\n rowNames: rowNamesToDraw,\n rowTotals: rowTotalsToDraw,\n viewBox: viewBox,\n xScale: xScale,\n xTicks: xTicks,\n };\n }\n\n // Get data for all the rectangles for all the rows\n createRectanglesFromRows(\n displayRows: RowDisplayInfo[],\n xScale: ScaleLinear<number, number, never>,\n rowHeight: number,\n ): RowRectangle[] {\n const rectangles: RowRectangle[] = [];\n displayRows.forEach((currentRow, rowIndex) => {\n currentRow.elementsButStacked.forEach((currentElement, _) => {\n const topOfRow: number = this.getTopOfRow(rowIndex, rowHeight);\n\n const rectangleWidth: number =\n xScale(currentElement.topline) - xScale(currentElement.baseline);\n const rectangleHeight: number = rowHeight;\n\n const rectangleX: number = xScale(currentElement.baseline);\n const rectangleY: number =\n topOfRow + this.SECTION_PADDING.RECTANGLE_TO_ROW;\n\n const fill = `var(${currentElement.colorToken})`;\n\n rectangles.push({\n x: rectangleX,\n y: rectangleY,\n width: Math.max(rectangleWidth, 0),\n height: rectangleHeight,\n fill: fill,\n striped: currentElement.style === 'striped',\n rowName: currentRow.rowName,\n stackedRowElement: currentElement,\n stackIndex: currentRow.stackIndex,\n });\n });\n });\n return rectangles;\n }\n\n // Get data on the row names we are drawing\n getRowNamesToDraw(\n displayRows: RowDisplayInfo[],\n rowHeight: number,\n ): RowLabel[] {\n return displayRows.map((row, rowIndex) => {\n const rowLabelX = this.SECTION_PADDING.OUTER_LEFT_RIGHT;\n // The row name looks right if its base is at the base of the associated rectangle\n const rowLabelY =\n this.getTopOfRow(rowIndex, rowHeight) +\n this.SECTION_PADDING.RECTANGLE_TO_ROW +\n this.LABEL_HEIGHT / 2 +\n rowHeight / 2;\n\n return {\n label: row.rowName,\n x: rowLabelX,\n y: rowLabelY,\n };\n });\n }\n\n // Get data on the row totals we are drawing\n getRowTotalsToDraw(\n displayRows: RowDisplayInfo[],\n width: number,\n rowHeight: number,\n ): RowLabel[] {\n return displayRows.map((row, rowIndex) => {\n const rowLabelX = width - this.SECTION_PADDING.OUTER_LEFT_RIGHT;\n // The row totals looks right if its base is at the base of the associated rectangle\n const rowLabelY =\n this.getTopOfRow(rowIndex, rowHeight) +\n this.SECTION_PADDING.RECTANGLE_TO_ROW +\n this.LABEL_HEIGHT / 2 +\n rowHeight / 2;\n\n return {\n label: this.valueFormatter(row.rowTotal),\n x: rowLabelX,\n y: rowLabelY,\n };\n });\n }\n\n readonly drawData$: Observable<StackedRowDrawData | null> = combineLatest([\n this.input$,\n this.width$,\n this.chartAndRowHeights$,\n ]).pipe(\n map(([input, width, height]) => {\n return this.getDrawnData(\n input,\n width,\n height.chartHeight,\n height.rowHeight,\n );\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n // Lets us know whether to display the zero data state\n readonly empty$ = this.input$.pipe(\n map(input => input.every(stack => stack.data.length === 0)),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n // What rectangle we are currently hovering over\n readonly hoveredRectangle$ = new BehaviorSubject<{\n rectangle: RowRectangle;\n event: MouseEvent;\n } | null>(null);\n\n // What band we are currently hovering over\n readonly hoveredBand$ = new BehaviorSubject<{\n rowName: string;\n event: MouseEvent;\n } | null>(null);\n\n // Create the metric to display based on the currently hovered rectangle\n readonly callout$ = combineLatest([this.hoveredBand$, this.drawData$]).pipe(\n map(([hoveredBand, drawData]) => {\n if (!hoveredBand || !drawData) return null;\n\n const { target } = hoveredBand.event;\n if (!target) return null;\n const anchor = (<SVGRectElement>target).getBoundingClientRect();\n\n type Metric = { label: string; value: string; colorToken: string };\n const metrics: Metric[] = drawData.rects\n .filter(rect => rect.rowName === hoveredBand.rowName)\n .map(rect => ({\n rect,\n label: rect.stackedRowElement.label,\n value: this.valueFormatter(rect.stackedRowElement.value),\n colorToken: rect.stackedRowElement.colorToken,\n }));\n\n return { anchor, metrics };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n}\n\nexport namespace StackedRowComponent {\n // A specifically colored section of one row.\n export type RowElement = {\n label: string; // Legend element name\n value: number;\n colorToken: string;\n style?: LegendItemComponent.Style;\n };\n // The input that determines one row.\n export type RowStack = {\n rowName: string;\n data: RowElement[];\n };\n\n export type StackClicked = {\n stackIndex: number;\n };\n\n export type CalloutContext = {\n anchor: DOMRect;\n metrics: { label: string; value: string; colorToken: string }[];\n };\n}\n","<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g\n *ngFor=\"let rect of draw.rects\"\n (mouseenter)=\"hoveredBand$.next({ rowName: rect.rowName, event: $event })\"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit({ stackIndex: rect.stackIndex });\n hoveredBand$.next(null)\n \"\n >\n <rect\n class=\"row\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.rowName !== rect.rowName\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <g *ngFor=\"let rowTotalToDraw of draw.rowTotals\">\n <text\n class=\"row-total\"\n [attr.x]=\"rowTotalToDraw.x\"\n [attr.y]=\"rowTotalToDraw.y\"\n text-anchor=\"end\"\n >\n {{ rowTotalToDraw.label }}\n </text>\n </g>\n </svg>\n <legend *ngIf=\"drawData$ | async; let draw\">\n <riv-legend-item\n *ngFor=\"let item of draw.legendItems\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [style]=\"item.style ? item.style : 'solid'\"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout?.anchor ?? null\"\n [isModal]=\"false\"\n [preferredPosition]=\"'bottom-center'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div *ngFor=\"let metric of callout?.metrics\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.colorToken\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n","import { ScaleLinear } from 'd3-scale';\nimport { TimeSeriesComponent } from './time-series.component';\n\ntype XTick = { value: number; label: string };\n\nexport type Marker = TimeSeriesComponent.DataPoint & { x: number; y: number };\n\ntype YDrawData = TimeSeriesComponent.YConfig & {\n series: (TimeSeriesComponent.Series & {\n path: string | null;\n stroke: string;\n markers: Marker[];\n })[];\n yMax: number;\n yMin: number;\n yScale: ScaleLinear<number, number, never>;\n yTicks: number[];\n};\n\nexport type DrawData = {\n viewBox: string;\n x: {\n xScale: ScaleLinear<number, number, never>;\n xMinorTicks: XTick[];\n xMajorTicks: XTick[];\n xMax: Date;\n };\n y1: YDrawData;\n y2?: YDrawData;\n};\n\nexport function getDateRange(\n configs: TimeSeriesComponent.YConfig[],\n): [Date, Date] {\n let min = Infinity;\n let max = -Infinity;\n for (const config of configs) {\n for (const series of config.series) {\n for (const { date } of series.data) {\n const value = date.valueOf();\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n }\n return [new Date(min), new Date(max)];\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { scaleLinear } from 'd3-scale';\nimport { line } from 'd3-shape';\nimport { utcDay } from 'd3-time';\nimport { utcFormat } from 'd3-time-format';\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n map,\n shareReplay,\n} from 'rxjs';\nimport { NumberPipe } from '../../format/pipes/number.pipe';\nimport {\n Interval,\n getIntervalTitle,\n getMajorInterval,\n getMajorIntervalFormat,\n getMinorIntervalFormat,\n getTimeInterval,\n intervals,\n} from '../intervals';\nimport { DrawData, Marker, getDateRange } from './time-series.helpers';\n\nconst DEFAULT_INTERVAL: Interval = 'day';\n\ntype IntervalOption = {\n id: string;\n title: string;\n};\n\n// TODO: once we upgrade to Angular 16, this component can be cleaned up with\n// signals instead of RxJS. See commit e238c2d.\n// https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n@Component({\n selector: 'riv-time-series',\n templateUrl: './time-series.component.html',\n styleUrls: ['./time-series.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TimeSeriesComponent {\n private readonly input$ =\n new BehaviorSubject<TimeSeriesComponent.TimeSeriesInput>([\n {\n pointReducer: points =>\n points.reduce((total, { value }) => total + value, 0),\n valueFormatter: v => new NumberPipe().transform(v) ?? '',\n series: [],\n },\n ]);\n @Input()\n public set input(v: TimeSeriesComponent.TimeSeriesInput) {\n this.input$.next(v);\n }\n public get input(): TimeSeriesComponent.TimeSeriesInput {\n return this.input$.getValue();\n }\n\n private readonly width$ = new BehaviorSubject<number>(0);\n protected set width(v: number) {\n this.width$.next(v);\n }\n protected get width() {\n return this.width$.getValue();\n }\n\n readonly HEIGHT = 300;\n\n private readonly zeroStateMessage$ = new BehaviorSubject<string>(\n 'No data to display.',\n );\n @Input()\n public set zeroStateMessage(v: string) {\n this.zeroStateMessage$.next(v);\n }\n public get zeroStateMessage(): string {\n return this.zeroStateMessage$.getValue();\n }\n\n readonly BOTTOM_OFFSET = 24;\n readonly LEFT_RIGHT_OFFSET = 48;\n readonly TOP_PADDING = 16;\n readonly LEFT_RIGHT_PADDING = 8;\n readonly BOTTOM_PADDING = 8;\n readonly Y_TICK_COUNT = 5;\n readonly POINT_RADIUS = 3.5;\n\n readonly dateRange$ = this.input$.pipe(\n map(getDateRange),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n private readonly interval$ = new BehaviorSubject<Interval>(DEFAULT_INTERVAL);\n @Input()\n public set interval(v: Interval) {\n if (v !== this.interval$.getValue()) {\n this.interval$.next(v);\n this.intervalChanged.emit(v);\n }\n }\n public get interval() {\n return this.interval$.getValue();\n }\n\n @Output()\n intervalChanged = new EventEmitter<Interval>();\n\n @ViewChild('controls')\n public readonly controls?: TemplateRef<void>;\n\n private readonly allowLegendToggle$ = new BehaviorSubject<boolean>(false);\n @Input()\n public set allowLegendToggle(v: boolean) {\n this.allowLegendToggle$.next(v);\n }\n public get allowLegendToggle(): boolean {\n return this.allowLegendToggle$.getValue();\n }\n\n private readonly groupedTooltips$ = new BehaviorSubject<boolean>(true);\n @Input()\n public set groupedTooltips(v: boolean) {\n this.groupedTooltips$.next(v);\n }\n public get groupedTooltips(): boolean {\n return this.groupedTooltips$.getValue();\n }\n\n @Output()\n markerClicked = new EventEmitter<TimeSeriesComponent.MarkerClicked>();\n\n private readonly maxPoints$ = combineLatest([this.width$, this.input$]).pipe(\n map(([width, input]) => {\n const innerWidth = width - this.LEFT_RIGHT_OFFSET * input.length;\n const pointWithPadding = (this.POINT_RADIUS + 4) * 2;\n return Math.floor(innerWidth / pointWithPadding);\n }),\n );\n private readonly xMinorTickLimit$ = combineLatest([\n this.width$,\n this.input$,\n ]).pipe(\n map(([width, input]) => {\n const innerWidth = width - this.LEFT_RIGHT_OFFSET * input.length;\n const minSizePerTick = 40;\n return Math.round(innerWidth / minSizePerTick);\n }),\n );\n\n private readonly allowedIntervals$: Observable<Interval[]> = combineLatest([\n this.input$,\n this.maxPoints$,\n ]).pipe(\n map(([input, maxPoints]) => {\n const [minDateValue, maxDateValue] = getDateRange(input);\n\n return intervals.filter(interval => {\n const timeInterval = getTimeInterval(interval);\n const numSteps = timeInterval.range(\n timeInterval.floor(minDateValue),\n timeInterval.ceil(utcDay.offset(maxDateValue, 1)),\n ).length;\n\n return numSteps <= maxPoints && numSteps > 1;\n });\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly intervalOptions$ = this.allowedIntervals$.pipe(\n map(intervals =>\n intervals.map(\n (interval): IntervalOption => ({\n id: interval,\n title: getIntervalTitle(interval),\n }),\n ),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedIntervalOption$ = combineLatest([\n this.interval$,\n this.intervalOptions$,\n ]).pipe(\n map(([interval, options]) => {\n const allowedIntervals = options.map(({ id }) => id as Interval);\n if (!allowedIntervals.includes(interval)) {\n const firstAllowed = allowedIntervals.at(0);\n const lastAllowed = allowedIntervals.at(-1);\n if (!firstAllowed || !lastAllowed) return null;\n\n if (intervals.indexOf(interval) < intervals.indexOf(firstAllowed))\n interval = firstAllowed;\n if (intervals.indexOf(interval) > intervals.indexOf(lastAllowed))\n interval = lastAllowed;\n }\n return options.find(o => o.id === interval) ?? null;\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly selectedInterval$ = this.selectedIntervalOption$.pipe(\n map(option => (option ? (option.id as Interval) : DEFAULT_INTERVAL)),\n );\n\n setIntervalOption(option: IntervalOption | null) {\n if (option) this.interval = option.id as Interval;\n }\n\n readonly toggleVisibility$ =\n new BehaviorSubject<TimeSeriesComponent.ToggleVisibility | null>(null);\n\n readonly binnedDataWithRanges$ = combineLatest([\n this.input$,\n this.selectedInterval$,\n this.toggleVisibility$,\n ]).pipe(\n map(([input, interval, toggleVisibility]) => {\n const rangeMap = new Map<number, Date>();\n const series = input.map((config): TimeSeriesComponent.YConfig => {\n return {\n ...config,\n series: config.series.map((series, i) => {\n const binned = new Map<number, TimeSeriesComponent.DataPoint[]>();\n for (const point of series.data) {\n const binKey = getTimeInterval(interval)\n .floor(point.date)\n .valueOf();\n const maxDate = rangeMap.get(binKey);\n\n if (!maxDate || maxDate < point.date) {\n rangeMap.set(binKey, point.date);\n }\n\n if (!binned.has(binKey)) {\n binned.set(binKey, []);\n }\n binned.get(binKey)!.push(point);\n }\n if (\n this.allowLegendToggle &&\n toggleVisibility &&\n series.label === toggleVisibility.label\n ) {\n series.visibility = toggleVisibility.visibility;\n }\n return {\n ...series,\n data: [...binned.entries()].map(([dateValue, points]) => ({\n date: new Date(dateValue),\n value: config.pointReducer(points, i),\n })),\n };\n }),\n };\n });\n return {\n series,\n getRange: (date: Date) => {\n return {\n minDate: date,\n maxDate: rangeMap.get(date.valueOf())!,\n };\n },\n };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly binnedData$ = this.binnedDataWithRanges$.pipe(\n map(binnedData => binnedData.series),\n );\n\n readonly getRange$ = this.binnedDataWithRanges$.pipe(\n map(binnedData => binnedData.getRange),\n );\n\n readonly binnedDateRange$ = this.binnedData$.pipe(\n map(getDateRange),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n getMarkerClicked(\n range: { minDate: Date; maxDate: Date },\n seriesIndex: number,\n y: 'y1' | 'y2',\n ) {\n return {\n ...range,\n seriesIndex,\n y,\n };\n }\n\n readonly drawData$: Observable<DrawData> = combineLatest([\n this.binnedData$,\n this.binnedDateRange$,\n this.selectedInterval$,\n this.width$,\n this.xMinorTickLimit$,\n ]).pipe(\n map(([binnedData, binnedDateRange, interval, width, xMinorTickLimit]) => {\n const viewBox = `0 0 ${width} ${this.HEIGHT}`;\n\n const xScaleRangeStart = this.LEFT_RIGHT_PADDING + this.LEFT_RIGHT_OFFSET;\n const xScaleRangeEnd =\n width -\n this.LEFT_RIGHT_PADDING * 2 -\n (binnedData.length > 1 ? this.LEFT_RIGHT_OFFSET : 0);\n const xScale = scaleLinear()\n .domain(binnedDateRange)\n .range([xScaleRangeStart, xScaleRangeEnd]);\n const [minDateValue, maxDateValue] = binnedDateRange;\n const hasMultipleYears =\n minDateValue.getFullYear() < maxDateValue.getFullYear();\n const xMinorIntervalFormat = getMinorIntervalFormat(interval);\n const minorFormatter = utcFormat(xMinorIntervalFormat);\n const xMinorTicks = getTimeInterval(interval)\n .range(minDateValue, utcDay.offset(maxDateValue, 1))\n .map(date => ({\n value: utcDay.offset(date, 0).valueOf(),\n label: minorFormatter(date),\n }))\n .filter((_, i, arr) =>\n arr.length > xMinorTickLimit\n ? i % Math.ceil(arr.length / xMinorTickLimit) === 0\n : true,\n );\n const xMajorInterval = getMajorInterval(interval);\n const xMajorIntervalFormat = getMajorIntervalFormat(\n xMajorInterval,\n hasMultipleYears,\n );\n const timeInterval = getTimeInterval(xMajorInterval);\n const tickFloor = timeInterval.floor(minDateValue);\n const tickCeiling = timeInterval.ceil(utcDay.offset(maxDateValue, 1));\n const majorFormatter = utcFormat(xMajorIntervalFormat);\n const xMajorTicks = timeInterval\n .range(tickFloor, tickCeiling)\n .map(tickDate => ({\n label: xMajorInterval === interval ? '' : majorFormatter(tickDate),\n value: tickDate.valueOf(),\n }));\n const x = { xMax: maxDateValue, xScale, xMinorTicks, xMajorTicks };\n\n const [y1, y2] = binnedData.map(config => {\n const visibleSeries = config.series.filter(\n s => s.visibility !== 'hidden',\n );\n const flattenedValues = visibleSeries.reduce<number[]>(\n (values, series) => [\n ...values,\n ...series.data.map(({ value }) => value),\n ],\n [],\n );\n let yMax = config.max ?? Math.max(...flattenedValues, 0);\n const yMin = config.min ?? Math.min(...flattenedValues, 0);\n // RIVET-14605 - if range is [0,0], make it [0,1] instead\n if (yMax == 0 && yMin == 0) {\n yMax = 1;\n }\n const yScale = scaleLinear()\n .domain([yMin, yMax])\n .range([\n this.HEIGHT -\n this.BOTTOM_OFFSET -\n (this.BOTTOM_PADDING + this.TOP_PADDING),\n this.TOP_PADDING,\n ]);\n const yTicks = yScale.ticks(this.Y_TICK_COUNT);\n const series = config.series.map(series => ({\n ...series,\n path: line<TimeSeriesComponent.DataPoint>()\n .x(d => xScale(d.date))\n .y(d => yScale(d.value))(series.data),\n stroke: `var(${series.colorToken})`,\n markers: series.data.map(point => ({\n ...point,\n x: xScale(point.date),\n y: yScale(point.value),\n })),\n }));\n return {\n ...config,\n series,\n yMax,\n yMin,\n yScale,\n yTicks,\n };\n });\n\n // If we have a y2, coerce y1's ticks to be visually equivalent to y2's ticks.\n if (y2?.yTicks) {\n const tickConversionScale = scaleLinear()\n .range(y1.yScale.domain())\n .domain(y2.yScale.domain());\n y1.yTicks = y2.yTicks.map(tickConversionScale);\n }\n\n return { viewBox, x, y1, y2 };\n }),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly legend$ = this.binnedData$.pipe(\n map(binnedData =>\n binnedData.reduce<\n {\n label: string;\n colorToken: string;\n visibility: 'visible' | 'hidden';\n }[]\n >(\n (items, config) => [\n ...items,\n ...config.series.map(series => ({\n label: series.label,\n colorToken: series.colorToken,\n visibility: series.visibility ?? 'visible',\n })),\n ],\n [],\n ),\n ),\n );\n\n readonly empty$ = this.binnedData$.pipe(\n map(binnedData =>\n binnedData.every(config =>\n config.series.every(series => series.data.length === 0),\n ),\n ),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\n readonly hoveredMarker$ = new BehaviorSubject<{\n event: MouseEvent;\n marker: Marker;\n seriesIndex: number;\n y: 'y1' | 'y2';\n } | null>(null);\n\n readonly callout$ = combineLatest([\n this.hoveredMarker$,\n this.drawData$,\n this.groupedTooltips$,\n ]).pipe(\n map(([hoveredMarker, drawData, groupedTooltips]) => {\n if (!hoveredMarker) return null;\n\n const { target } = hoveredMarker.event;\n if (!target) return null;\n const markerRect = (<SVGCircleElement>target).getBoundingClientRect();\n const padding = 8;\n const anchor = new DOMRect(\n markerRect.left - padding,\n markerRect.top - padding,\n markerRect.width + padding * 2,\n markerRect.height + padding * 2,\n );\n\n type Metric = { label: string; value: string; colorToken: string };\n const metrics: Metric[] = [];\n\n for (let index = 0; index < drawData.y1.series.length; index++) {\n const series = drawData.y1.series[index];\n const allowed = !groupedTooltips\n ? hoveredMarker.y == 'y1' && hoveredMarker.seriesIndex == index\n : true;\n if (series.visibility !== 'hidden' && allowed) {\n const match = series.markers.find(\n marker => marker.x === hoveredMarker.marker.x,\n );\n if (match) {\n metrics.push({\n colorToken: series.colorToken,\n label: series.label,\n value: drawData.y1.valueFormatter(match.value),\n });\n }\n }\n }\n\n if (drawData.y2) {\n for (let index = 0; index < drawData.y2.series.length; index++) {\n const series = drawData.y2.series[index];\n const allowed = !groupedTooltips\n ? hoveredMarker.y == 'y2' && hoveredMarker.seriesIndex == index\n : true;\n if (series.visibility !== 'hidden' && allowed) {\n const match = series.markers.find(\n marker => marker.x === hoveredMarker.marker.x,\n );\n if (match) {\n metrics.push({\n colorToken: series.colorToken,\n label: series.label,\n value: drawData.y2.valueFormatter(match.value),\n });\n }\n }\n }\n }\n\n return { anchor, metrics };\n }),\n );\n}\n\nexport namespace TimeSeriesComponent {\n export type Series = {\n label: string;\n colorToken: string;\n data: TimeSeriesComponent.DataPoint[];\n style?: 'solid' | 'dashed';\n visibility?: 'visible' | 'hidden';\n };\n\n export type DataPoint = {\n value: number;\n date: Date;\n };\n\n export type YConfig = {\n pointReducer: (points: DataPoint[], seriesIndex: number) => number;\n valueFormatter: (reducedValue: number) => string;\n series: Series[];\n min?: number;\n max?: number;\n };\n\n export type TimeSeriesInput = [YConfig] | [YConfig, YConfig];\n\n export type ToggleVisibility = {\n label: string;\n visibility: 'hidden' | 'visible';\n };\n\n export type MarkerClicked = {\n minDate: Date;\n maxDate: Date;\n seriesIndex: number;\n y: 'y1' | 'y2';\n };\n}\n","<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let d\"\n [attr.viewBox]=\"d.viewBox\"\n >\n <g *ngFor=\"let tick of d.x.xMajorTicks\">\n <text\n *ngIf=\"d.x.xScale(tick.value) >= 0\"\n class=\"x-major-tick-label\"\n [attr.x]=\"d.x.xScale(tick.value)\"\n [attr.y]=\"HEIGHT - BOTTOM_OFFSET\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.x.xMinorTicks\">\n <text\n class=\"x-minor-tick-label\"\n [attr.x]=\"d.x.xScale(tick.value)\"\n [attr.y]=\"HEIGHT - BOTTOM_OFFSET\"\n text-anchor=\"middle\"\n dominant-baseline=\"hanging\"\n dy=\"8\"\n >\n {{ tick.label }}\n <title>{{ tick.value | date }}</title>\n </text>\n </g>\n <g *ngFor=\"let tick of d.y1.yTicks\">\n <rect\n class=\"tick\"\n x=\"0\"\n [attr.y]=\"d.y1.yScale(tick)\"\n width=\"100%\"\n height=\"1\"\n ></rect>\n <text class=\"y-tick-label\" x=\"0\" [attr.y]=\"d.y1.yScale(tick)\" dy=\"-4\">\n {{ d.y1.valueFormatter(tick) }}\n </text>\n </g>\n\n <g *ngFor=\"let tick of d.y2?.yTicks\">\n <text\n class=\"y-tick-label\"\n [attr.x]=\"width\"\n [attr.y]=\"d.y2?.yScale(tick)\"\n text-anchor=\"end\"\n dy=\"-4\"\n >\n {{ d.y2?.valueFormatter(tick) }}\n </text>\n </g>\n\n <g *ngIf=\"hoveredMarker$ | async; let hoveredMarker\">\n <line\n class=\"hover-rule\"\n [attr.x1]=\"hoveredMarker.marker.x\"\n [attr.y1]=\"d.y1.yScale(d.y1.yMin)\"\n [attr.x2]=\"hoveredMarker.marker.x\"\n [attr.y2]=\"d.y1.yScale(d.y1.yMax)\"\n stroke-width=\"2\"\n stroke-dasharray=\"4\"\n />\n </g>\n\n <ng-template #seriesTpl let-series=\"series\" let-index=\"index\" let-y=\"y\">\n <path\n *ngIf=\"series.visibility !== 'hidden'\"\n class=\"data path\"\n [class.marker-hovered]=\"!!(hoveredMarker$ | async)\"\n [attr.d]=\"series.path\"\n fill=\"none\"\n stroke-width=\"2\"\n [attr.stroke]=\"series.stroke\"\n [attr.stroke-dasharray]=\"series.style === 'dashed' ? '4' : null\"\n ></path>\n <ng-container *ngIf=\"getRange$ | async; let getRange\">\n <ng-container *ngFor=\"let marker of series.markers\">\n <circle\n *ngIf=\"series.visibility !== 'hidden'\"\n class=\"data marker\"\n [class.focused]=\"\n (hoveredMarker$ | async)?.marker?.x === marker.x &&\n (groupedTooltips ||\n ((hoveredMarker$ | async)?.seriesIndex === index &&\n (hoveredMarker$ | async)?.y === y))\n \"\n [class.blurred]=\"\n (hoveredMarker$ | async) !== null &&\n ((hoveredMarker$ | async)?.marker?.x !== marker.x ||\n ((hoveredMarker$ | async)?.marker?.x === marker.x &&\n !groupedTooltips &&\n ((hoveredMarker$ | async)?.seriesIndex !== index ||\n (hoveredMarker$ | async)?.y !== y)))\n \"\n [attr.cx]=\"marker.x\"\n [attr.cy]=\"marker.y\"\n [attr.r]=\"POINT_RADIUS\"\n stroke-width=\"2\"\n [attr.stroke]=\"series.stroke\"\n (mouseover)=\"\n hoveredMarker$.next({\n event: $event,\n marker: marker,\n seriesIndex: index,\n y: y\n })\n \"\n (mouseleave)=\"hoveredMarker$.next(null)\"\n (click)=\"\n markerClicked.emit(\n getMarkerClicked(getRange(marker.date), index, y)\n );\n hoveredMarker$.next(null)\n \"\n ></circle>\n </ng-container>\n </ng-container>\n </ng-template>\n <g *ngFor=\"let series of d.y1.series; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n seriesTpl;\n context: { series: series, index: i, y: 'y1' }\n \"\n ></ng-container>\n </g>\n <g *ngFor=\"let series of d.y2?.series; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"\n seriesTpl;\n context: { series: series, index: i, y: 'y2' }\n \"\n ></ng-container>\n </g>\n </svg>\n <legend>\n <riv-legend-item\n *ngFor=\"let item of legend$ | async\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [visibility]=\"item.visibility\"\n [clickable]=\"allowLegendToggle\"\n (itemClick)=\"\n allowLegendToggle\n ? toggleVisibility$.next({\n label: item.label,\n visibility: item.visibility === 'hidden' ? 'visible' : 'hidden'\n })\n : null\n \"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout?.anchor ?? null\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-row\" *ngFor=\"let metric of callout?.metrics\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.colorToken\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n\n<ng-template #controls>\n <riv-simple-select\n [optionGroups]=\"intervalOptions$ | async | rivOptionGroup\"\n [orderBy]=\"'source'\"\n [selectedOption]=\"selectedIntervalOption$ | async\"\n (selectedOptionChange)=\"setIntervalOption($event)\"\n ></riv-simple-select>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SrOnlyComponent } from './accessibility/sr-only/sr-only.component';\nimport { DatePipe } from './format/pipes/date.pipe';\nimport { DaysPipe } from './format/pipes/days.pipe';\nimport { DollarsPipe } from './format/pipes/dollars.pipe';\nimport { NumberPipe } from './format/pipes/number.pipe';\nimport { PercentagePipe } from './format/pipes/percentage.pipe';\nimport { SentenceCasePipe } from './format/pipes/sentence-case.pipe';\nimport { SmallCurrencyPipe } from './format/pipes/small-currency.pipe';\nimport { SmallNumberPipe } from './format/pipes/small-number.pipe';\nimport { SVGTextTruncateDirective } from './format/svg-text-truncate/svg-text-truncate.directive';\nimport { TruncateComponent } from './format/truncate/truncate.component';\nimport { IconComponent } from './icon/icon.component';\nimport { AlphabeticFieldComponent } from './input/alphabetic-field/alphabetic-field.component';\nimport { AutoFocusDirective } from './input/auto-focus/auto-focus.directive';\nimport { ButtonGroupComponent } from './input/button-group/button-group.component';\nimport { ButtonComponent } from './input/button/button.component';\nimport { CalendarComponent } from './input/calendar/calendar.component';\nimport { CardCheckboxComponent } from './input/card-checkbox/card-checkbox.component';\nimport { CheckboxComponent } from './input/checkbox/checkbox.component';\nimport { CurrencyFieldComponent } from './input/currency-field/currency-field.component';\nimport { DateRangeComponent } from './input/date-range/date-range.component';\nimport { DateComponent } from './input/date/date.component';\nimport { FilterChipComponent } from './input/filter-chip/filter-chip.component';\nimport { FilterDropdownComponent } from './input/filter-dropdown/filter-dropdown.component';\nimport { InputLabelComponent } from './input/input-label/input-label.component';\nimport { MentionsInputComponent } from './input/mentions-input/mentions-input.component';\nimport { NumberFieldComponent } from './input/number-field/number-field.component';\nimport { PercentageFieldComponent } from './input/percentage-field/percentage-field.component';\nimport { PhoneFieldComponent } from './input/phone-field/phone-field.component';\nimport { RadioComponent } from './input/radio/radio.component';\nimport { SearchSelectComponent } from './input/search-select/search-select.component';\nimport { SearchComponent } from './input/search/search.component';\nimport { SelectNodeComponent } from './input/select/select-node/select-node.component';\nimport { SelectComponent } from './input/select/select/select.component';\nimport { OptionGroupPipe } from './input/simple-select/option-group.pipe';\nimport { SimpleSelectComponent } from './input/simple-select/simple-select.component';\nimport { SwitchCheckboxComponent } from './input/switch-checkbox/switch-checkbox.component';\nimport { TextFieldComponent } from './input/text-field/text-field.component';\nimport { TextareaFieldComponent } from './input/textarea-field/textarea-field.component';\nimport { ValidationMessageComponent } from './input/validation-message/validation-message.component';\nimport { CardActionsComponent } from './layout/card/card-actions.component';\nimport { CardContentComponent } from './layout/card/card-content.component';\nimport { CardHeaderComponent } from './layout/card/card-header.component';\nimport { CardLinkComponent } from './layout/card/card-link.component';\nimport { CardMediaComponent } from './layout/card/card-media.component';\nimport { CardComponent } from './layout/card/card.component';\nimport { SettingRowComponent } from './layout/setting-row/setting-row.component';\nimport { LoadingCoverComponent } from './load/loading-cover/loading-cover.component';\nimport { LoadingComponent } from './load/loading/loading.component';\nimport { EditableHeadingComponent } from './navigation/editable-heading/editable-heading.component';\nimport { LinkComponent } from './navigation/link/link.component';\nimport { PageHeaderComponent } from './navigation/page-header/page-header.component';\nimport { SimpleTabComponent } from './navigation/simple-tabs/simple-tab/simple-tab.component';\nimport { SimpleTabsComponent } from './navigation/simple-tabs/simple-tabs/simple-tabs.component';\nimport { TabComponent } from './navigation/tabs/tab/tab.component';\nimport { TabsComponent } from './navigation/tabs/tabs/tabs.component';\nimport { AllViewsModalComponent } from './navigation/views/all-views-modal/all-views-modal.component';\nimport { EditViewComponent } from './navigation/views/edit-view/edit-view.component';\nimport { PermissionPickerComponent } from './navigation/views/permission-picker/permission-picker.component';\nimport { ViewMenuComponent } from './navigation/views/view-menu/view-menu.component';\nimport { ViewsComponent } from './navigation/views/views/views.component';\nimport { BadgeComponent } from './notification/badge/badge.component';\nimport { BannerActionComponent } from './notification/banner/banner-action.component';\nimport { BannerComponent } from './notification/banner/banner.component';\nimport { MapIndicatorComponent } from './notification/map-indicator/map-indicator.component';\nimport { NotificationBadgeComponent } from './notification/notification-badge/notification-badge.component';\nimport { CalloutComponent } from './overlay/callout/callout.component';\nimport { HelpComponent } from './overlay/callout/help/help.component';\nimport { LockScrollDirective } from './overlay/callout/lock-scroll.directive';\nimport { MenuItemComponent } from './overlay/callout/menu/menu-item/menu-item.component';\nimport { MenuComponent } from './overlay/callout/menu/menu.component';\nimport { LockedTooltipDirective } from './overlay/callout/tooltip/locked-tooltip.directive';\nimport { TooltipComponent } from './overlay/callout/tooltip/tooltip.component';\nimport { TooltipDirective } from './overlay/callout/tooltip/tooltip.directive';\nimport { DialogComponent } from './overlay/modal/dialog/dialog.component';\nimport { FormDialogComponent } from './overlay/modal/form-dialog/form-dialog.component';\nimport { ModalComponent } from './overlay/modal/modal.component';\nimport { SideSheetComponent } from './overlay/modal/side-sheet/side-sheet.component';\nimport { OverlayOutletComponent } from './overlay/overlay-outlet.component';\nimport { OverlayDirective } from './overlay/overlay.directive';\nimport { ToastActionComponent } from './overlay/toast/toast-action.component';\nimport { ToastComponent } from './overlay/toast/toast.component';\nimport { SizeDirective } from './size/size.directive';\nimport { SimpleTableCellComponent } from './table/simple-table/simple-table-cell.component';\nimport { SimpleTableHeaderCellComponent } from './table/simple-table/simple-table-header-cell.component';\nimport { SimpleTableRowComponent } from './table/simple-table/simple-table-row.component';\nimport { SimpleTableComponent } from './table/simple-table/simple-table.component';\nimport { TableCollapseAllComponent } from './table/table/table-collapse-all/table-collapse-all.component';\nimport { TableColumnSettingsSideSheetComponent } from './table/table/table-column-settings/table-column-settings-side-sheet.component';\nimport { TableColumnSettingsComponent } from './table/table/table-column-settings/table-column-settings.component';\nimport { TableCsvExportComponent } from './table/table/table-csv-export/table-csv-export.component';\nimport { TableHeaderResizeHandleComponent } from './table/table/table-header-resize-handle/table-header-resize-handle.component';\nimport { TableSearchColumnsComponent } from './table/table/table-search-columns/table-search-columns.component';\nimport { TableSearchComponent } from './table/table/table-search/table-search.component';\nimport { TableComponent } from './table/table/table/table.component';\nimport { VisibilityDirective } from './visibility/visibility.directive';\nimport { ChartComponent } from './visualization/chart/chart.component';\nimport { DataTableCellComponent } from './visualization/data-table/data-table-cell.component';\nimport { DataTableHeaderCellComponent } from './visualization/data-table/data-table-header-cell.component';\nimport { DataTableRowComponent } from './visualization/data-table/data-table-row.component';\nimport { DataTableComponent } from './visualization/data-table/data-table.component';\nimport { DonutComponent } from './visualization/donut/donut.component';\nimport { FunnelChartComponent } from './visualization/funnel-chart/funnel-chart.component';\nimport { HighlightComponent } from './visualization/highlight/highlight.component';\nimport { IssueComponent } from './visualization/issue/issue.component';\nimport { LegendItemComponent } from './visualization/legend-item/legend-item.component';\nimport { MetricComponent } from './visualization/metric/metric.component';\nimport { MiniPieComponent } from './visualization/mini-pie/mini-pie.component';\nimport { ProgressComponent } from './visualization/progress/progress.component';\nimport { StackedColumnComponent } from './visualization/stacked-column/stacked-column.component';\nimport { StackedRowComponent } from './visualization/stacked-row/stacked-row.component';\nimport { TimeSeriesComponent } from './visualization/time-series/time-series.component';\nimport { TrendComponent } from './visualization/trend/trend.component';\nimport { ZeroStateComponent } from './visualization/zero-state/zero-state.component';\n\n@NgModule({\n declarations: [\n AllViewsModalComponent,\n AlphabeticFieldComponent,\n AutoFocusDirective,\n BadgeComponent,\n BannerActionComponent,\n BannerComponent,\n ButtonComponent,\n ButtonGroupComponent,\n CalendarComponent,\n CalloutComponent,\n CardActionsComponent,\n CardCheckboxComponent,\n CardComponent,\n CardContentComponent,\n CardHeaderComponent,\n CardLinkComponent,\n CardMediaComponent,\n ChartComponent,\n CheckboxComponent,\n CurrencyFieldComponent,\n DataTableCellComponent,\n DataTableComponent,\n DataTableHeaderCellComponent,\n DataTableRowComponent,\n DateComponent,\n DatePipe,\n DateRangeComponent,\n DaysPipe,\n DialogComponent,\n DollarsPipe,\n DonutComponent,\n EditableHeadingComponent,\n EditViewComponent,\n FilterChipComponent,\n FilterDropdownComponent,\n FormDialogComponent,\n FunnelChartComponent,\n HelpComponent,\n HighlightComponent,\n IconComponent,\n InputLabelComponent,\n IssueComponent,\n LegendItemComponent,\n LinkComponent,\n LoadingComponent,\n LoadingCoverComponent,\n LockedTooltipDirective,\n LockScrollDirective,\n MapIndicatorComponent,\n MentionsInputComponent,\n MenuComponent,\n MenuItemComponent,\n MetricComponent,\n MiniPieComponent,\n ModalComponent,\n NotificationBadgeComponent,\n NumberFieldComponent,\n NumberPipe,\n OptionGroupPipe,\n OverlayDirective,\n OverlayOutletComponent,\n PageHeaderComponent,\n PercentageFieldComponent,\n PercentagePipe,\n PermissionPickerComponent,\n PhoneFieldComponent,\n ProgressComponent,\n RadioComponent,\n SearchComponent,\n SearchSelectComponent,\n SelectComponent,\n SelectNodeComponent,\n SentenceCasePipe,\n SettingRowComponent,\n SideSheetComponent,\n SimpleSelectComponent,\n SimpleTabComponent,\n SimpleTableCellComponent,\n SimpleTableComponent,\n SimpleTableHeaderCellComponent,\n SimpleTableRowComponent,\n SimpleTabsComponent,\n SizeDirective,\n SmallCurrencyPipe,\n SmallNumberPipe,\n SrOnlyComponent,\n StackedColumnComponent,\n StackedRowComponent,\n SVGTextTruncateDirective,\n SwitchCheckboxComponent,\n TabComponent,\n TableCollapseAllComponent,\n TableColumnSettingsComponent,\n TableColumnSettingsSideSheetComponent,\n TableComponent,\n TableCsvExportComponent,\n TableHeaderResizeHandleComponent,\n TableSearchColumnsComponent,\n TableSearchComponent,\n TabsComponent,\n TextareaFieldComponent,\n TextFieldComponent,\n TimeSeriesComponent,\n ToastActionComponent,\n ToastComponent,\n TooltipComponent,\n TooltipDirective,\n TrendComponent,\n TruncateComponent,\n ValidationMessageComponent,\n ViewMenuComponent,\n ViewsComponent,\n VisibilityDirective,\n ZeroStateComponent,\n ],\n exports: [\n AllViewsModalComponent,\n AlphabeticFieldComponent,\n AutoFocusDirective,\n BadgeComponent,\n BannerActionComponent,\n BannerComponent,\n ButtonComponent,\n ButtonGroupComponent,\n CalloutComponent,\n CardActionsComponent,\n CardCheckboxComponent,\n CardComponent,\n CardContentComponent,\n CardHeaderComponent,\n CardLinkComponent,\n CardMediaComponent,\n ChartComponent,\n CheckboxComponent,\n CurrencyFieldComponent,\n DataTableCellComponent,\n DataTableComponent,\n DataTableHeaderCellComponent,\n DataTableRowComponent,\n DateComponent,\n DatePipe,\n DateRangeComponent,\n DaysPipe,\n DialogComponent,\n DollarsPipe,\n DonutComponent,\n EditableHeadingComponent,\n EditViewComponent,\n FilterChipComponent,\n FilterDropdownComponent,\n FormDialogComponent,\n FunnelChartComponent,\n HelpComponent,\n HighlightComponent,\n IconComponent,\n InputLabelComponent,\n IssueComponent,\n LegendItemComponent,\n LinkComponent,\n LoadingComponent,\n LoadingCoverComponent,\n LockedTooltipDirective,\n MapIndicatorComponent,\n MentionsInputComponent,\n MenuComponent,\n MenuItemComponent,\n MetricComponent,\n MiniPieComponent,\n ModalComponent,\n NotificationBadgeComponent,\n NumberFieldComponent,\n NumberPipe,\n OptionGroupPipe,\n OverlayDirective,\n OverlayOutletComponent,\n PageHeaderComponent,\n PercentageFieldComponent,\n PercentagePipe,\n PermissionPickerComponent,\n PhoneFieldComponent,\n ProgressComponent,\n RadioComponent,\n SearchComponent,\n SearchSelectComponent,\n SelectComponent,\n SentenceCasePipe,\n SettingRowComponent,\n SideSheetComponent,\n SimpleSelectComponent,\n SimpleTabComponent,\n SimpleTableCellComponent,\n SimpleTableComponent,\n SimpleTableHeaderCellComponent,\n SimpleTableRowComponent,\n SimpleTabsComponent,\n SizeDirective,\n SmallCurrencyPipe,\n SmallNumberPipe,\n SrOnlyComponent,\n StackedColumnComponent,\n StackedRowComponent,\n SVGTextTruncateDirective,\n SwitchCheckboxComponent,\n TabComponent,\n TableCollapseAllComponent,\n TableColumnSettingsComponent,\n TableColumnSettingsSideSheetComponent,\n TableComponent,\n TableCsvExportComponent,\n TableSearchColumnsComponent,\n TableSearchComponent,\n TabsComponent,\n TextareaFieldComponent,\n TextFieldComponent,\n TimeSeriesComponent,\n ToastActionComponent,\n ToastComponent,\n TooltipComponent,\n TooltipDirective,\n TrendComponent,\n TruncateComponent,\n ValidationMessageComponent,\n ViewMenuComponent,\n ViewsComponent,\n VisibilityDirective,\n ZeroStateComponent,\n ],\n imports: [CommonModule, RouterModule],\n})\nexport class RivModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["AngularDatePipe","i2.LockScrollDirective","i3.SizeDirective","i1.OverlayService","i2.CalloutComponent","i3.OverlayDirective","i1.TooltipDirective","Chart","cache","i1.IconComponent","i2.TooltipDirective","i1.CalloutComponent","i2","i3.IconComponent","i2.HelpComponent","i3.LinkComponent","i4.ValidationMessageComponent","i1.AutoFocusDirective","i2.InputLabelComponent","i1.ButtonGroupComponent","i4.LoadingComponent","i3.ValidationMessageComponent","i1.CheckboxComponent","i2.LoadingComponent","i2.AutoFocusDirective","i2.CheckboxComponent","i3.HelpComponent","i4.HighlightComponent","i5.IconComponent","i6.TooltipDirective","i7.TruncateComponent","i8.NumberPipe","i2.IconComponent","i2.ButtonComponent","i3.CalloutComponent","i4.HelpComponent","i6.InputLabelComponent","i7.LoadingCoverComponent","i8.OverlayDirective","i9.SearchComponent","i10.SelectNodeComponent","i11.ZeroStateComponent","i12.NumberPipe","i2.SelectComponent","i3.SimpleSelectComponent","i4.OptionGroupPipe","i3.CalendarComponent","i4.CalloutComponent","i5.HighlightComponent","i6.IconComponent","i7.InputLabelComponent","i9.SimpleSelectComponent","i10.TooltipDirective","i11.OptionGroupPipe","i7.OverlayDirective","i2.BadgeComponent","i3.ButtonComponent","i5.OverlayDirective","i2.ValidationMessageComponent","i4.IconComponent","i5.InputLabelComponent","i6.OverlayDirective","i7.TooltipDirective","i1.CardComponent","i4.SrOnlyComponent","i5.TooltipDirective","i3.TextFieldComponent","i4.TruncateComponent","i1.LockScrollDirective","i2.OverlayDirective","i1.ModalComponent","i1.DialogStackService","i3.ModalComponent","map","distinctUntilChanged","i3.SearchSelectComponent","i4.SelectComponent","i4.OverlayDirective","i5.PermissionPickerComponent","i6.TextFieldComponent","i1.MenuComponent","i3.DialogComponent","i4.EditViewComponent","i5.MenuComponent","i6.MenuItemComponent","i3.HighlightComponent","i5.SearchComponent","i6.SideSheetComponent","i8.TruncateComponent","i9.ViewMenuComponent","i2.AllViewsModalComponent","i8.SearchComponent","i9.SizeDirective","i10.ToastComponent","i11.TooltipDirective","i12.TruncateComponent","i13.ViewMenuComponent","i14.ZeroStateComponent","i15.NumberPipe","i3.TooltipDirective","i1.NumberPipe","i4.LoadingCoverComponent","i5.ModalComponent","lodashPartition","i2.BannerComponent","i6.MenuComponent","i7.MenuItemComponent","i9.SideSheetComponent","i5.CheckboxComponent","i6.HighlightComponent","i7.IconComponent","i1.DownloadService","i4.TooltipDirective","i6.SwitchCheckboxComponent","i1.SearchComponent","i2.TableSearchColumnsComponent","i7.LinkComponent","i8.LoadingCoverComponent","i9.MenuComponent","i10.MenuItemComponent","i11.OverlayDirective","i12.SimpleSelectComponent","i13.SizeDirective","i14.SrOnlyComponent","i15.TableHeaderResizeHandleComponent","i16.ZeroStateComponent","i17.NumberPipe","i2.TruncateComponent","i3.IssueComponent","i4.LegendItemComponent","i5.LinkComponent","i7.SizeDirective","i8.SVGTextTruncateDirective","i9.ZeroStateComponent","i1.DataTableRowComponent","i3.ZeroStateComponent","i2.MetricComponent","i3.TrendComponent","getDateRange","DEFAULT_INTERVAL","i3.LegendItemComponent","i5.SimpleSelectComponent","i6.SizeDirective","i7.ZeroStateComponent","i8.OptionGroupPipe","union","i5.SizeDirective","i6.SVGTextTruncateDirective"],"mappings":"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"}