{"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/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/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/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/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/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/badge/badge.component.ts","../../../projects/riv/src/lib/notification/badge/badge.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/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.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-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","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 { 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 magnitude = Math.log10(Math.abs(num));\n\n    if (num === 0) {\n      return (\n        this.inner.transform(\n          num,\n          undefined,\n          undefined,\n          digitsInfo ?? '1.0-0',\n        ) ?? NO_DATA_FALLBACK\n      );\n    }\n    if (magnitude >= 9) {\n      return (\n        (this.inner.transform(\n          num / 1_000_000_000,\n          undefined,\n          undefined,\n          digitsInfo ?? num / 1_000_000_000 >= 100 ? '1.0-0' : '1.0-2',\n        ) ?? NO_DATA_FALLBACK) + 'B'\n      );\n    }\n    if (magnitude >= 6) {\n      return (\n        (this.inner.transform(\n          num / 1_000_000,\n          undefined,\n          undefined,\n          digitsInfo ?? num / 1_000_000 >= 100 ? '1.0-0' : '1.0-2',\n        ) ?? NO_DATA_FALLBACK) + 'M'\n      );\n    }\n    if (magnitude >= 3) {\n      return (\n        (this.inner.transform(\n          num / 1_000,\n          undefined,\n          undefined,\n          digitsInfo ?? num / 1_000 >= 100 ? '1.0-0' : '1.0-2',\n        ) ?? NO_DATA_FALLBACK) + 'K'\n      );\n    }\n    return (\n      this.inner.transform(\n        num,\n        undefined,\n        undefined,\n        digitsInfo ?? num >= 100 ? '1.0-0' : '1.0-2',\n      ) ?? NO_DATA_FALLBACK\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, 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  public overlays = new BehaviorSubject<Overlays>(new Map());\n\n  // Note: these functions are async because Angular's change detection fails\n  // to detect changes properly when the source of an event is from within a\n  // template that is being removed as a result of that event. The Angular\n  // template sees a cached version of the overlays Map (even though the\n  // component TypeScript picks up on the changed Map), regardless of trying to\n  // trigger change detection manually. Moving the change to the next tick with\n  // this faux async fixes the issue. We may be able to remove them after an\n  // Angular upgrade (TODO).\n  // https://www.notion.so/rivet/Resolve-TODOs-after-Angular-upgrade-1f2667eb2a3180b79f6ad92a7e576f08\n  public async add(overlay: TemplateRef<void>): Promise<Symbol> {\n    await Promise.resolve();\n    const key = Symbol();\n    const overlays = new Map(this.overlays.getValue());\n    overlays.set(key, overlay);\n    this.overlays.next(overlays);\n    return key;\n  }\n  public async remove(key: Symbol) {\n    await Promise.resolve();\n    const overlays = new Map(this.overlays.getValue());\n    overlays.delete(key);\n    this.overlays.next(overlays);\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?: Promise<Symbol>;\n\n  ngOnInit() {\n    this.key = this.overlayService.add(this.template);\n  }\n\n  ngOnDestroy() {\n    if (this.key) this.key.then(k => this.overlayService.remove(k));\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 = 'calc(var(--base-grid-size) * 50)';\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  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 = 'calc(var(--base-grid-size) * 50)';\n\n  @Input()\n  rivTooltipPreferredPosition: TooltipComponent.AnchoredPosition = 'top-center';\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 = 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 { 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 = '200px';\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 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  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    [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  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    [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    [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    [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  };\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\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 = 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  [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} 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  @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  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 class=\"row\">\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 rivTruncate class=\"name\">\n          <ng-container\n            *ngTemplateOutlet=\"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 *ngIf=\"includeCount()\" class=\"count\">\n          {{ getCount(n) | rivNumber }}\n        </span>\n      </label>\n      <button\n        *ngIf=\"n.children?.length\"\n        class=\"expand\"\n        [disabled]=\"!n.expandable\"\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        (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 class=\"row\">\n      <button\n        class=\"single\"\n        [disabled]=\"getDisabled(n)\"\n        (click)=\"selectChange.emit(getId(n))\"\n      >\n        <span class=\"label\" rivTruncate>\n          <ng-container\n            *ngTemplateOutlet=\"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        <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  @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  @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  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        [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              <button\n                rivButton\n                [variant]=\"'ghost'\"\n                [size]=\"'small'\"\n                [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n                [iconPosition]=\"'last'\"\n              >\n                {{ getSelectedOrderByOption(s)?.title }}\n              </button>\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                  (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        [disabled]=\"disabled || locked\"\n        type=\"button\"\n        class=\"custom-trigger-button\"\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          [disabled]=\"disabled || locked\"\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  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  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('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    });\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    ]);\n  }\n\n  ngOnDestroy(): void {\n    this.selectedOptionSubscription?.unsubscribe();\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  [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 *ngIf=\"optionTemplate; let optionTpl\">\n    <ng-template #option let-node=\"node\">\n      <button\n        class=\"custom-node\"\n        [disabled]=\"node.disabled\"\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        <button\n          rivButton\n          [size]=\"'small'\"\n          [variant]=\"'ghost'\"\n          [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n          [iconPosition]=\"'last'\"\n          type=\"button\"\n        >\n          {{ state.display.formattedSelectedOptions || '...' }}\n        </button>\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        <button\n          rivButton\n          [size]=\"'small'\"\n          [variant]=\"'ghost'\"\n          [icon]=\"state.display.open ? 'ChevronUp' : 'ChevronDown'\"\n          [iconPosition]=\"'last'\"\n          type=\"button\"\n        >\n          {{ state.display.formattedSelectedOptions || '...' }}\n        </button>\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    [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    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      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  Output,\n  TemplateRef,\n} from '@angular/core';\nimport { timeDay, timeMonth } from 'd3-time';\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 {\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.inputText = v ? this.formatValue(v) : '';\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  @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  @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  // 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    const today = timeDay.floor(new Date());\n    if (!DateComponent.isValidDate(today, this.min, this.max)) return;\n    this.commit(today);\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  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()) {\n      this.commit(undefined);\n    } else {\n      // Invalid text — revert to whatever the committed value was.\n      this.inputText = this._value ? this.formatValue(this._value) : '';\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 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.inputText = next ? this.formatValue(next) : '';\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-label]=\"label || null\"\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-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 (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]=\"previewValue ?? value\"\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  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          *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    [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    [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') {\n      this.close();\n      event.preventDefault();\n    } else if (\n      event.key === 'Enter' &&\n      this.searchText &&\n      this.filteredOptions.length === 0\n    ) {\n      this.onAddNew();\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        [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          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 { ChangeDetectionStrategy, Component, Input } 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 extends CheckboxComponent {\n  @Input()\n  size: SwitchCheckboxComponent.Size = 'medium';\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.disabled]=\"disabled\"\n>\n  <input\n    #input\n    type=\"checkbox\"\n    [name]=\"name\"\n    [id]=\"identifier\"\n    [checked]=\"value\"\n    [disabled]=\"disabled\"\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    [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 * Per-instance radius can be overridden with the `--card-border-radius`\n * custom property.\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  /**\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      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 = ['none', 'small', 'medium', 'large'] as const;\n  export type Padding = (typeof Paddings)[number];\n}\n","<button\n  *ngIf=\"clickable\"\n  type=\"button\"\n  class=\"click-target\"\n  [disabled]=\"disabled\"\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-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  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        rivTruncate\n        aria-label=\"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        rivTruncate\n        aria-label=\"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.\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  /**\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","<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  </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-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  @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    [style.width]=\"width\"\n  >\n    <ng-content></ng-content>\n  </div>\n</riv-modal>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n} from '@angular/core';\nimport { ANIMATION_CONSTANTS } from '../../overlay-outlet.component';\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 {\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  @HostListener('document:keydown', ['$event'])\n  handleKeydown(event: KeyboardEvent) {\n    if (event.key === 'Escape') {\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 class=\"dialog\" [style.min-width]=\"minWidth\">\n      <header>\n        <span class=\"title\">\n          {{ title }}\n        </span>\n        <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          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 rivButton [variant]=\"'ghost'\" (click)=\"close.emit()\">\n            Cancel\n          </button>\n          <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  @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 #customTriggerButton class=\"custom-trigger\" (click)=\"open.next(true)\">\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    #standardTriggerButton\n    rivButton\n    [variant]=\"'ghost'\"\n    [size]=\"'xsmall'\"\n    [icon]=\"'MoreVertical'\"\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      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    >\n      {{ view.enabled ? 'Hide tab' : 'Show tab' }}\n    </button>\n    <div class=\"riv-divider\"></div>\n    <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    >\n      Edit view\n    </button>\n    <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    >\n      Rename view\n    </button>\n    <button\n      riv-menu-item\n      (click)=\"\n        manager?.actions?.next({ type: 'duplicateView', view, menuContext })\n      \"\n      [disabled]=\"view.temporary\"\n    >\n      Duplicate view\n    </button>\n    <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    >\n      Delete view\n    </button>\n    <div class=\"riv-divider\"></div>\n    <button\n      riv-menu-item\n      (click)=\"manager?.actions?.next({ type: 'copyLinkToView', view })\"\n      [disabled]=\"view.temporary\"\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            rivButton\n            (click)=\"\n              manager?.actions?.next({ type: 'setDeletingView', context: null })\n            \"\n          >\n            Cancel\n          </button>\n          <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 [topOffset]=\"topOffset\" (close)=\"close.emit()\">\n    <div class=\"content\">\n      <header>\n        <span class=\"title\">All views</span>\n        <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              class=\"permission-header\"\n              (click)=\"openChange(!open)\"\n              [disabled]=\"!!s.all.search\"\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                  *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                    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                  >\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\" [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          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      *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              *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        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  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  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 *ngIf=\"dismissable\" class=\"dismiss\" (click)=\"dismiss.emit()\">\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 { 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 type { Params, QueryParamsHandling } from '@angular/router';\nimport Fuse, { IFuseOptions } from 'fuse.js';\nimport {\n  defaultsDeep,\n  difference,\n  isEqual,\n  orderBy,\n  range,\n  toInteger,\n  union,\n} 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';\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   *\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  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>>;\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  /////////////////////////////\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>;\n    display: Display<C>;\n    selection: Selection<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  > = QueryAction<C, F> | DisplayAction<C> | SelectionAction<R, G>;\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    clickPreventDefault?: boolean;\n    clickStopPropagation?: boolean;\n    displayName?: 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  };\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  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          csvData: (mode?: CsvMode) => AsyncGenerator<CsvOutput>;\n          csvFilename: string;\n        }\n      | {\n          rows: FullRow<R>[];\n          rowGroups: RowGroup<R, G>[];\n          isGrouped: true;\n          csvData: (mode?: CsvMode) => AsyncGenerator<CsvOutput>;\n          csvFilename: string;\n        };\n    display: {\n      columns: 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    };\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    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  };\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    };\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        key,\n        toSentenceCase(metadata.displayName ?? key),\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 = resolveColumns(\n            s,\n            columns,\n            columnNameMap,\n            !!options?.allowSelection,\n          );\n\n          if (isGroupResult(s.result)) {\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 = s.result.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: isRowSelected(s, row.id),\n              })),\n              selected: isGroupSelected(s, group),\n              totalMatchingRowCount: group.totalMatchingRowCount,\n              groupData: group.groupData,\n            }));\n\n            async function* csvData(\n              mode: CsvMode = 'full',\n            ): AsyncGenerator<CsvOutput> {\n              const cellFormatter = options?.csvCellFormatter;\n              const groupCellFormatter = options?.csvGroupCellFormatter;\n              if (!cellFormatter)\n                throw new Error(\n                  '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: s.result.totalMatchingRowCount,\n                  },\n                },\n                { type: 'load' },\n              );\n\n              if (!isGroupResult(dataSet))\n                throw new Error(\n                  'Returned non-grouped CSV data for grouped table',\n                );\n\n              const fullColumns = resolveColumns(\n                s,\n                columns,\n                columnNameMap,\n                !!options.allowSelection,\n              );\n              const data: Csv = [];\n              data.push(\n                fullColumns.map(({ key }) => columnNameMap.get(key) ?? key),\n              );\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 (mode === 'selection' && !isRowSelected(s, record.id))\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: {\n                ...s.query,\n                pagination: {\n                  ...s.query.pagination,\n                  previous: getPreviousPage(s),\n                  pages: getPages(s),\n                  next: getNextPage(s),\n                  pageCount: getPageCount(s),\n                  showControls: getShowPaginationControls(s),\n                  pageRowStart: getPageRowStart(s),\n                  pageRowEnd: getPageRowEnd(s),\n                },\n                noSearchColumnsSelected: getSearchColumnsSelectedState(\n                  s,\n                  'none',\n                ),\n              },\n              display: {\n                ...s.display,\n                columns: resolvedColumns,\n                allColumns: getAllColumns(s, columns, columnNameMap),\n                columnNameMap: columnNameMap,\n                searchableColumnMap: searchableColumnMap,\n                zeroStateMessage: getZeroStateMessage(s, pluralEntityName),\n                columnsAreFreezable: !!options?.columnsAreFreezable,\n                columnsAreHideable: !!options?.columnsAreHideable,\n                columnsAreReorderable: options?.columnsAreReorderable ?? true,\n                rowsAreGrayed: !!options?.rowsAreGrayed,\n                customSummaryRow: !!options?.customSummaryRow,\n                csvExportAllowed,\n                enabledCount: resolvedColumns.length,\n                hidePageSizeSelector: !!options?.hidePageSizeSelector,\n                cellRowSpan: (_i: number, _column: C) => 1,\n                needsRightBorder: () => false,\n              },\n              selection: {\n                ...s.selection,\n                allowSelection: options?.allowSelection ?? false,\n                isAllSelected: isAllSelected(s),\n                isCurrentPageSelected: isCurrentPageSelected(s),\n                selectedCount: selectedCount(s),\n              },\n              result: {\n                ...s.result,\n                isGrouped: true,\n                rowGroups,\n                rows: rowGroups.flatMap(group => group.rows),\n                csvData,\n                csvFilename: getCsvFilename(pluralEntityName, options),\n              },\n            };\n          } else {\n            const rows = s.result.currentPageData.map(row => ({\n              ...row,\n              rowLink: options?.rowLink ? options.rowLink(row) : null,\n              selected: isRowSelected(s, row.id),\n            }));\n\n            const cellRowSpanCache = 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(\n                  '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: s.result.totalMatchingRowCount,\n                  },\n                },\n                { type: 'load' },\n              );\n\n              if (isGroupResult(dataSet))\n                throw new Error(\n                  'Returned grouped CSV data for non-grouped table',\n                );\n\n              const fullColumns = resolveColumns(\n                s,\n                columns,\n                columnNameMap,\n                !!options.allowSelection,\n              );\n              const data: Csv = [];\n              data.push(\n                fullColumns.map(({ key }) => columnNameMap.get(key) ?? key),\n              );\n\n              for (const record of dataSet.currentPageData) {\n                if (mode === 'selection' && !isRowSelected(s, record.id))\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: {\n                ...s.query,\n                order: hasAnyRowSpans ? null : s.query.order,\n                pagination: {\n                  ...s.query.pagination,\n                  previous: getPreviousPage(s),\n                  pages: getPages(s),\n                  next: getNextPage(s),\n                  pageCount: getPageCount(s),\n                  showControls: getShowPaginationControls(s),\n                  pageRowStart: getPageRowStart(s),\n                  pageRowEnd: getPageRowEnd(s),\n                },\n                noSearchColumnsSelected: getSearchColumnsSelectedState(\n                  s,\n                  'none',\n                ),\n              },\n              display: {\n                ...s.display,\n                columns: resolvedColumns.map(column =>\n                  hasAnyRowSpans ? { ...column, orderable: false } : column,\n                ),\n                allColumns: getAllColumns(s, columns, columnNameMap),\n                columnNameMap: columnNameMap,\n                searchableColumnMap: searchableColumnMap,\n                zeroStateMessage: getZeroStateMessage(s, pluralEntityName),\n                columnsAreFreezable: !!options?.columnsAreFreezable,\n                columnsAreHideable: !!options?.columnsAreHideable,\n                columnsAreReorderable: options?.columnsAreReorderable ?? true,\n                rowsAreGrayed: !!options?.rowsAreGrayed,\n                customSummaryRow: !!options?.customSummaryRow,\n                csvExportAllowed,\n                enabledCount: resolvedColumns.length,\n                hidePageSizeSelector: !!options?.hidePageSizeSelector,\n                cellRowSpan,\n                needsRightBorder: (rowIndex: number, column: C): boolean => {\n                  const i = resolvedColumnKeys.findIndex(key => key === column);\n                  if (i < 0 || i === resolvedColumnKeys.length - 1)\n                    return false;\n\n                  const rightColKey = resolvedColumnKeys[i + 1];\n                  const spanOnRight = cellRowSpan(rowIndex, rightColKey);\n                  return spanOnRight > 1 || spanOnRight === 0;\n                },\n              },\n              selection: {\n                ...s.selection,\n                allowSelection: options?.allowSelection ?? false,\n                isAllSelected: isAllSelected(s),\n                isCurrentPageSelected: isCurrentPageSelected(s),\n                selectedCount: selectedCount(s),\n              },\n              result: {\n                ...s.result,\n                isGrouped: false,\n                rows,\n                rowsAsGroup: {\n                  rows,\n                  selected: false,\n                  totalMatchingRowCount: rows.length,\n                  groupData: { key: '' } as G,\n                },\n                csvFilename: getCsvFilename(pluralEntityName, options),\n                csvData,\n              },\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  /**\n   * Most tables use remote backends to fetch data asynchronously, but an\n   * in-memory source 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  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    let data: R[];\n    let fuse: Fuse<R>;\n\n    const source: Source<R, C, F> = async (query, mostRecentAction) => {\n      //For inMemoryManagers that do not utilize searchColumns,\n      //we do not want to overwrite their fuseOptions\n      if (mostRecentAction.type === 'load') {\n        //Prevent searching on columns that are in fuse options but not supported by search.\n        const nonSearchableColumnsKeys = options?.fuseOptions?.keys\n          ? Array.from(columns.entries())\n              .filter(([key, column]) => {\n                return column.searchable == false;\n              })\n              .map(([key, column]) => {\n                return column.orderKey?.toString() || key.toString();\n              })\n          : undefined;\n        const fuseOptions =\n          options?.fuseOptions && nonSearchableColumnsKeys\n            ? {\n                ...options?.fuseOptions,\n                keys: options?.fuseOptions?.keys?.filter(\n                  k => !nonSearchableColumnsKeys.includes(k.toString()),\n                ),\n              }\n            : options?.fuseOptions;\n        data = await fetchDataset();\n        fuse = new Fuse(data, fuseOptions);\n      }\n      if (\n        mostRecentAction.type === 'searchColumnsChange' ||\n        mostRecentAction.type === 'toggleAllSearchColumns'\n      ) {\n        data = await fetchDataset();\n        fuse = new Fuse(data, {\n          ...options?.fuseOptions,\n          keys: Array.from(query.searchColumns.entries())\n            .filter(([_, value]) => !!value)\n            .map(([key, _]) => {\n              const columnKey = columns.get(key);\n              return (columnKey?.orderKey as C) || key;\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            ? orderBy(matches, orderColumn, query.order.direction)\n            : matches;\n      } else if (hasExplicitSort && query.order) {\n        ordered = orderBy(data, orderColumn, query.order.direction);\n      } else if (query.order == null && defaultSortSpec) {\n        ordered = orderBy(data, defaultSortSpec.key, defaultSortSpec.direction);\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    const columnMetadata: Map<C, ColumnMetadata> = new Map(\n      [...columns.entries()].map(([name, metadata]) => [\n        name,\n        {\n          orderable: !!metadata.orderKey,\n          filterable: metadata.filterable,\n          searchable: metadata.searchable,\n          description: metadata.description,\n          minWidth: metadata.minWidth,\n          dataType: metadata.dataType,\n          defaultPinned: metadata.defaultPinned,\n          clickPreventDefault: metadata.clickPreventDefault,\n          clickStopPropagation: metadata.clickStopPropagation,\n          displayName: metadata.displayName,\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    if (options?.defaultSort && !options?.initialState?.query?.order) {\n      const order: Query<C, F>['order'] = options.defaultSort;\n      options = {\n        ...options,\n        initialState: {\n          ...options.initialState,\n          query: {\n            ...options.initialState?.query,\n            order,\n          } as DeepPartial<Query<C, F>>,\n        },\n      };\n    }\n    return createManager(source, columnMetadata, pluralEntityName, options);\n  }\n\n  ///////////////\n  // Utilities //\n  ///////////////\n\n  export function getColumnAlignment(\n    dataType: ColumnDataType,\n    isFirst: boolean,\n  ): 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\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  return target;\n}\n\nfunction 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 (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\nfunction 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\nfunction 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\nfunction 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.\nfunction 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 (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\nfunction 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\nfunction 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\nfunction 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 (options?.csvFileBasename?.slice(0, 200) ?? pluralEntityName) + '.csv';\n}\n\nfunction 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) 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.\n  if (isGroupResult(result)) return null;\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\nfunction 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 columnsWithUserSettings: RivTable.ColumnSettings<C>[] =\n    state.display.columnSettings.filter(({ key }) => supportedColumns.has(key));\n\n  const columnsWithoutUserSettings: RivTable.ColumnSettings<C>[] = [\n    ...columnNamesWithoutUserSettings,\n  ].map((key: C) => ({\n    key,\n    enabled: true,\n    preferredWidth: 'auto',\n    pinned: !!supportedColumns.get(key)?.defaultPinned,\n  }));\n\n  return orderIntentionally(\n    [...columnsWithUserSettings, ...columnsWithoutUserSettings],\n    columnNameMap,\n  );\n}\n\nfunction orderIntentionally<C extends RivTable.Column>(\n  columns: RivTable.ColumnSettings<C>[],\n  columnNameMap: RivTable.ColumnNameMap<C>,\n): RivTable.ColumnSettings<C>[] {\n  return [\n    ...columns.filter(v => v.pinned),\n    ...columns.filter(v => v.enabled && !v.pinned),\n    ...columns\n      .filter(v => !v.enabled && !v.pinned)\n      .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}\n\nfunction getAlignment(\n  metadata: RivTable.ColumnMetadata,\n  index: number,\n  allowSelection?: boolean,\n): RivTable.ColumnAlignment {\n  return RivTable.getColumnAlignment(\n    metadata.dataType,\n    index === 0 && !allowSelection,\n  );\n}\n\nfunction 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): RivTable.FullColumn<C>[] {\n  const allColumns = getAllColumns(state, supportedColumns, columnNameMap);\n  return allColumns\n    .filter(({ 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\n                ? 40\n                : 0\n              : null,\n            alignment: getAlignment(metadata, i, !!allowSelection),\n          },\n        ];\n      },\n      [],\n    );\n}\n\nfunction 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    (isGroupResult(state.result) && state.result.totalGroupCount > 0) ||\n    (!isGroupResult(state.result) && state.result.totalMatchingRowCount > 0)\n  )\n    return null;\n  const allSearchColumnsSelected = 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\nfunction 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 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      ),\n    },\n  };\n}\n\nfunction 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  return {\n    ...state,\n    display: {\n      ...state.display,\n      columnSettings: allColumns.map((c, i) => {\n        return { ...c, pinned: freeze && i <= index };\n      }),\n    },\n  };\n}\n\nfunction 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 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(movedState, columns, columnNameMap, column, true);\n}\n\nfunction 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  // First, put the columns in the desired order.\n  const item = allColumns[previousIndex];\n  const withoutItem = allColumns.filter((_, i) => i !== previousIndex);\n  const reordered = [\n    ...withoutItem.slice(0, newIndex),\n    item,\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 = !item.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),\n    },\n  };\n}\n\nfunction 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  return {\n    ...state,\n    display: {\n      ...state.display,\n      columnSettings: orderIntentionally(\n        allColumns.map(c => ({\n          ...c,\n          enabled: c.key === column ? enabled : c.enabled,\n          // Unpin if being unchecked\n          pinned: c.key === column && !enabled ? false : c.pinned,\n        })),\n        columnNameMap,\n      ),\n    },\n  };\n}\nfunction 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) return state;\n\n  return {\n    ...state,\n    display: {\n      ...state.display,\n      columnSettings: orderIntentionally(\n        allColumns.map(c => ({\n          ...c,\n          enabled: enabled,\n          // Unpin if being unchecked\n          pinned: !enabled ? false : c.pinned,\n        })),\n        columnNameMap,\n      ),\n    },\n  };\n}\n\nfunction 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}\nfunction 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(defaultColumnState, columnNameMap),\n    },\n  };\n}\n\nfunction 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\nfunction 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\nfunction 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' && state.selection.included.size === 0)\n  )\n    return false;\n  return 'indeterminate';\n}\n\nfunction 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 = getAllRowsFromResult(state.result).map(({ id }) =>\n    isRowSelected(state, id),\n  );\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\nfunction 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 state.result.totalMatchingRowCount - state.selection.excluded.size;\n  }\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 (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\nfunction 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 = getAllRowsFromResult(state.result).findIndex(\n        row => row.id === state.selection.mostRecentlySelected,\n      );\n      const endIdx = getAllRowsFromResult(state.result).findIndex(\n        row => row.id === id,\n      );\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(getAllRowsFromResult(state.result)[i].id);\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\nfunction 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 }) === 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\nfunction 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 = getAllRowsFromResult(state.result).every(\n    ({ id }) => isRowSelected(state, id),\n  );\n  return getAllRowsFromResult(state.result).reduce((accumulatedState, row) => {\n    return setRowSelected(\n      accumulatedState,\n      row.id,\n      !isPageFullySelected,\n      false,\n    );\n  }, state);\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\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        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        },\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        },\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: 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: getNextPage(state) ?? 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        },\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: 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: 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: 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: 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: 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: enableAllColumns(state, columns, columnNameMap, action.enabled),\n        effect: 'saveColumnPreferences',\n      };\n      break;\n    case 'columnWidthChange':\n      yield {\n        state: 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: 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: 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: togglePageSelected(state),\n        effect: null,\n      };\n      break;\n    case 'allSelectedChange':\n      yield {\n        state: toggleAllSelected(state),\n        effect: null,\n      };\n      break;\n    case 'selectionClear':\n      yield {\n        state: clearSelection(state),\n        effect: null,\n      };\n      break;\n    case 'groupSelectionChange':\n      yield {\n        state: 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(toggleAllSearchColumns(state), source, action);\n      break;\n  }\n}\n\nfunction isGroupResult<R extends RivTable.Row, G extends RivTable.Group>(\n  result: RivTable.Result<R> | RivTable.GroupResult<R, G>,\n): result is RivTable.GroupResult<R, G> {\n  if ('totalGroupCount' in result) {\n    return true;\n  }\n  return false;\n}\n\nfunction getAllRowsFromResult<R extends RivTable.Row, G extends RivTable.Group>(\n  result: RivTable.Result<R> | RivTable.GroupResult<R, G>,\n): R[] {\n  if (isGroupResult(result)) {\n    return result.groupResults.flatMap(groups => groups.currentPageData);\n  } else {\n    return result.currentPageData;\n  }\n}\n\nfunction 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: RivTable.Result<R> | RivTable.GroupResult<R, G>,\n): boolean {\n  if (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","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';\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 = RivTable.getColumnAlignment(dataType, i === 0);\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","<header *ngIf=\"headerTemplate\">\n  <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n</header>\n<div class=\"container\">\n  <table>\n    <ng-content></ng-content>\n  </table>\n</div>\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 { 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  stateIndex: number;\n  isLastPinnedColumn: boolean;\n})[];\n\ntype ColumnGroups<C extends RivTable.Column> = {\n  enabledColumns: ColumnList<C>;\n  disabledColumns: ColumnList<C>;\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 columnsLength = s.display.allColumns.length;\n          const allColumns = s.display.allColumns.map((column, i) => {\n            const nextColumnPinned =\n              i + 2 <= columnsLength\n                ? s.display.allColumns[i + 1].pinned\n                : false;\n\n            return {\n              ...column,\n              resolvedName:\n                s.display.columnNameMap.get(column.key) ?? column.key,\n              stateIndex: i,\n              isLastPinnedColumn: column.pinned && !nextColumnPinned,\n            };\n          });\n          const fuse = new Fuse(allColumns, {\n            keys: ['resolvedName'],\n            ignoreLocation: true,\n            threshold: 0,\n            includeMatches: true,\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).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          };\n        }\n\n        const allVisableColumns = allColumns.map(column => ({\n          ...column,\n          highlightIndices: [],\n        }));\n\n        const enabledColumns = allVisableColumns.filter(\n          column => column.enabled,\n        );\n        const disabledColumns = allVisableColumns.filter(\n          column => !column.enabled,\n        );\n\n        return {\n          enabledColumns: enabledColumns,\n          disabledColumns: disabledColumns,\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","<button #trigger rivButton (click)=\"open.next(true)\">Columns</button>\n\n<ng-container *ngIf=\"columnList | async; let columns\">\n  <ng-container *ngIf=\"open | async\">\n    <riv-side-sheet (close)=\"open.next(false); filterQuery.next('')\">\n      <div class=\"content\">\n        <div class=\"title\">\n          <span>Columns</span>\n          <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=\"columns.enabledColumns.length > 0\">\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                *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 drop-zone\"\n                  [attr.draggable]=\"(searching | async) === false\"\n                  [attr.droppable]=\"(searching | async) === false\"\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                  \"\n                  [class.dragged-over-bottom]=\"\n                    draggedOverColumnIdx === i &&\n                    draggedColumnIdx !== null &&\n                    draggedColumnIdx < i\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                    class=\"hidden\"\n                    rivButton\n                    [rivTooltip]=\"'Un-freeze columns'\"\n                    class=\"disable-override\"\n                    [class.disabled]=\"!column.enabled\"\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              columns.enabledColumns.length === 0 &&\n              (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 rivButton [variant]=\"'ghost'\" (click)=\"resetToDefault()\">\n              Reset to default\n            </button>\n          </div>\n          <div\n            class=\"divider\"\n            *ngIf=\"\n              columns.disabledColumns.length > 0 &&\n              ((searching | async) === false ||\n                ((searching | async) && columns.enabledColumns.length > 0))\n            \"\n          ></div>\n          <div\n            *ngIf=\"columns.disabledColumns.length > 0\"\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                *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                \"\n                [attr.droppable]=\"\n                  (searching | async) === false &&\n                  !disableEnablingColumns(columns)\n                \"\n                [class.drop-zone]=\"!disableEnablingColumns(columns)\"\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      </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\">\n      <span\n        class=\"reorder\"\n        *ngIf=\"(searching | async) === false\"\n        [class.disabled]=\"disableEnablingColumn(column, columns)\"\n      >\n        <riv-icon [name]=\"'Reorder'\" [size]=\"20\"></riv-icon>\n      </span>\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=\"column.enabled || !disableEnablingColumns(columns)\"\n      >\n        <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          *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 riv-menu-item (click)=\"columnMoveTo(column, 'start')\">\n          Move to start\n        </button>\n        <button riv-menu-item (click)=\"columnMoveTo(column, 'end')\">\n          Move to end\n        </button>\n        <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      <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    </div>\n  </div>\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  #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            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          rivButton\n          [size]=\"'xsmall'\"\n          [variant]=\"'ghost'\"\n          [disabled]=\"allColumnsDisabled(columns)\"\n          (click)=\"disableAllColumns(columns)\"\n        >\n          Clear\n        </button>\n        <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 { Component, ElementRef, Inject, Output } 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})\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 #trigger class=\"trigger-button\" (click)=\"open.next(true)\">\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';\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: RivTable.FullRow<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 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  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  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","<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    <header *ngIf=\"headerTemplate\">\n      <ng-container\n        *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n      ></ng-container>\n    </header>\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        [ngClass]=\"{\n          'container-ungrouped': !s.result.isGrouped,\n          'has-header': !s.result.isGrouped && 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        <ng-container\n          *ngFor=\"\n            let group of s.result.isGrouped\n              ? s.result.rowGroups\n              : [s.result.rowsAsGroup];\n            trackBy: trackByGroup;\n            let last = last\n          \"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"\n              subheaderTemplate || null;\n              context: { state: s, group }\n            \"\n          ></ng-container>\n          <div [ngClass]=\"{ 'subcontainer-grouped': s.result.isGrouped }\">\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=\"!s.result.isGrouped\"\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=\"s.result.isGrouped\"\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                    *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]=\"s.display.columnsAreReorderable\"\n                    droppable=\"true\"\n                    class=\"drop-zone\"\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                    \"\n                    [class.dragged-over-right]=\"\n                      draggedOverColumnIdx === i &&\n                      draggedColumnIdx !== null &&\n                      draggedColumnIdx < i\n                    \"\n                  >\n                    <div\n                      *ngIf=\"\n                        !column.orderable &&\n                        !column.filterable &&\n                        !s.display.columnsAreFreezable &&\n                        !s.display.columnsAreHideable\n                      \"\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                    </div>\n                    <riv-menu\n                      *ngIf=\"\n                        column.orderable ||\n                        column.filterable ||\n                        s.display.columnsAreFreezable ||\n                        s.display.columnsAreHideable\n                      \"\n                    >\n                      <ng-template #trigger>\n                        <button\n                          type=\"button\"\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                        </button>\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                          *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                          *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                          *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                        *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                      <div\n                        class=\"riv-divider\"\n                        *ngIf=\"\n                          (column.orderable || column.filterable) &&\n                          (s.display.columnsAreFreezable ||\n                            s.display.columnsAreHideable)\n                        \"\n                      ></div>\n                      <ng-container *ngIf=\"s.display.columnsAreFreezable\">\n                        <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                          *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                        *ngIf=\"s.display.columnsAreHideable\"\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                  <ng-container\n                    *ngFor=\"\n                      let row of group.rows;\n                      let rowIndex = index;\n                      trackBy: trackByRow\n                    \"\n                  >\n                    <ng-template #rowBody>\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                      <ng-container\n                        *ngFor=\"\n                          let column of s.display.columns;\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                            [style.left.px]=\"column.left\"\n                            [style.text-align]=\"column.alignment\"\n                            (click)=\"handleClick($event, column)\"\n                          >\n                            <ng-container\n                              *ngTemplateOutlet=\"\n                                cellTemplate || null;\n                                context: { row: row, column: column }\n                              \"\n                            ></ng-container>\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                    <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\"\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\"\n                        ></ng-container>\n                      </a>\n                    </ng-container>\n                    <tr\n                      *ngIf=\"!row.rowLink\"\n                      [class.grayed]=\"s.display.rowsAreGrayed\"\n                    >\n                      <ng-container *ngTemplateOutlet=\"rowBody\"></ng-container>\n                    </tr>\n                  </ng-container>\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              s.result.isGrouped &&\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-container>\n      </div>\n      <div *ngIf=\"s.query.pagination.showControls\" class=\"pagination\">\n        <div class=\"page-size-controls\">\n          <ng-container\n            *ngIf=\"!s.result.isGrouped && !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 && !s.result.isGrouped\"\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            (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\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. Treated as 'scale-to-fit' on the data axis\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//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: DefaultVerticalNonElementScalingConfig,\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 { 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 { 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        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    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 totalHeight =\n          scale(bar.count, false) - chartSizingValues.totalTopOffset;\n        const darkenedHeight =\n          scale(continuingCount, false) - chartSizingValues.totalTopOffset;\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 connectionHeight =\n            scale(connection.count, false) - chartSizingValues.totalTopOffset;\n\n          const topLineY1 = darkenedY + verticalConnectionOffset;\n          const bottomLineY1 = topLineY1 + connectionHeight;\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;\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 connectionHeight =\n              scale(connection.count, false) - chartSizingValues.totalTopOffset;\n            const topLineY2 = darkenedY + verticalConnectionOffset;\n            const bottomLineY2 = topLineY2 + connectionHeight;\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;\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 (realPosY > bar.y && realPosY < bar.y + bar.height) {\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  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  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  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\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 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 = prevBarHeights + checkValue - zeroVal;\n        }\n      }\n      const yValue = zeroVal + prevBarHeights;\n      const height = scaleValue - zeroVal;\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 = prevBarHeights + (zeroVal - checkValue);\n      }\n    }\n    const yValue = scaleValue - prevBarHeights;\n    const height = zeroVal - scaleValue;\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 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 += zeroVal - checkVal;\n        }\n      }\n      const xValue = scaleValue - prevBarWidths;\n      const width = zeroVal - scaleValue;\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 += checkVal - zeroVal;\n      }\n    }\n    const xValue = prevBarWidths + zeroVal;\n    const width = scaleValue - zeroVal;\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\n    for (const bucket of returnBuckets) {\n      bucket.subBuckets.sort((a, b) => mapGet(a.id) - mapGet(b.id));\n      for (const subBucket of bucket.subBuckets) {\n        subBucket.connections.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    return {\n      type: 'flow-processed',\n      x: returnBuckets,\n    };\n  }\n\n  type ValueType = 'count' | 'currency' | 'percentage' | 'days';\n\n  export function getPipes(valueType: ValueType) {\n    switch (valueType) {\n      case 'count': {\n        const pipe = new NumberPipe();\n        return { pipe, fullPipe: pipe };\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\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 {\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      return {\n        startPadding: startPaddingConfig.target,\n        endPadding: endPaddingConfig.target,\n        leftBucketLabel: leftBucketLabelActualSize,\n        dataLabelTextSize,\n        dataLabelPadding: dataLabelPaddingConfig.target,\n        fontSize: fontSizeConfig.target,\n        sizeForData: boundingDimension - fixedSizeValue,\n        totalSize: boundingDimension,\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: dataSize + 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: dataSize + fixedSizeValue,\n      bucketLabelTextSize,\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  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  [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  }>;\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  }>();\n\n  click() {\n    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      });\n      this.hover = null;\n    }\n  }\n\n  get isHoverClickable(): boolean {\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              }\"\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 } 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","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\"\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\"\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\"\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 { 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 { 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 { 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 { 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 { 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 { 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    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    SideSheetComponent,\n    SimpleSelectComponent,\n    SimpleTableCellComponent,\n    SimpleTableComponent,\n    SimpleTableHeaderCellComponent,\n    SimpleTableRowComponent,\n    SizeDirective,\n    SmallCurrencyPipe,\n    SrOnlyComponent,\n    StackedColumnComponent,\n    StackedRowComponent,\n    SVGTextTruncateDirective,\n    SwitchCheckboxComponent,\n    TabComponent,\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    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    SideSheetComponent,\n    SimpleSelectComponent,\n    SimpleTableCellComponent,\n    SimpleTableComponent,\n    SimpleTableHeaderCellComponent,\n    SimpleTableRowComponent,\n    SizeDirective,\n    SmallCurrencyPipe,\n    SrOnlyComponent,\n    StackedColumnComponent,\n    StackedRowComponent,\n    SVGTextTruncateDirective,\n    SwitchCheckboxComponent,\n    TabComponent,\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.TruncateComponent","i7.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.ValidationMessageComponent","i4.IconComponent","i5.InputLabelComponent","i6.OverlayDirective","i7.TooltipDirective","i1.CardComponent","i3.TextFieldComponent","i4.TruncateComponent","i1.LockScrollDirective","i2.OverlayDirective","i1.ModalComponent","i1.ButtonComponent","i2.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","i3.ButtonComponent","i8.SearchComponent","i9.SizeDirective","i10.ToastComponent","i11.TooltipDirective","i12.TruncateComponent","i13.ViewMenuComponent","i14.ZeroStateComponent","i15.NumberPipe","i3.TooltipDirective","i1.NumberPipe","i2.BannerComponent","i6.MenuComponent","i7.MenuItemComponent","i9.SideSheetComponent","i5.CheckboxComponent","i6.HighlightComponent","i7.IconComponent","i1.DownloadService","i4.TooltipDirective","i5.OverlayDirective","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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"}