@mathstack/viz 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mathstack-viz.mjs","sources":["../../../libs/viz-components/src/lib/marks/marks.ts","../../../libs/viz-components/src/lib/marks/aux-marks/aux-marks.ts","../../../libs/viz-components/src/lib/marks/aux-marks/config/aux-marks-builder.ts","../../../libs/viz-components/src/lib/marks/config/marks-config.ts","../../../libs/viz-components/src/lib/marks/aux-marks/config/aux-marks-config.ts","../../../libs/viz-components/src/lib/charts/chart/chart.token.ts","../../../libs/viz-components/src/lib/charts/chart/config/chart-config.ts","../../../libs/viz-components/src/lib/charts/chart/config/chart-builder.ts","../../../libs/viz-components/src/lib/charts/chart/chart.component.ts","../../../libs/viz-components/src/lib/charts/chart/chart.component.html","../../../libs/viz-components/src/lib/charts/map-chart/map-chart.component.ts","../../../libs/viz-components/src/lib/charts/xy-chart/xy-chart.component.ts","../../../libs/viz-components/src/lib/charts/chart.module.ts","../../../libs/viz-components/src/lib/charts/chart/chart.ts","../../../libs/viz-components/src/lib/marks/map-marks/map-aux-marks/map-aux-marks.ts","../../../libs/viz-components/src/lib/marks/primary-marks/primary-marks.ts","../../../libs/viz-components/src/lib/marks/map-marks/map-primary-marks/map-primary-marks.ts","../../../libs/viz-components/src/lib/marks/primary-marks/config/primary-marks-builder.ts","../../../libs/viz-components/src/lib/marks/primary-marks/config/primary-marks-config.ts","../../../libs/viz-components/src/lib/marks/xy-marks/xy-aux-marks/xy-aux-marks.ts","../../../libs/viz-components/src/lib/marks/xy-marks/xy-marks-config.ts","../../../libs/viz-components/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks.ts","../../../libs/viz-components/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks-config.ts","../../../libs/viz-components/src/lib/axes/baseline/axis-baseline.ts","../../../libs/viz-components/src/lib/axes/baseline/axis-baseline-builder.ts","../../../libs/viz-components/src/lib/stroke/base/stroke-base.ts","../../../libs/viz-components/src/lib/stroke/stroke.ts","../../../libs/viz-components/src/lib/stroke/stroke-builder.ts","../../../libs/viz-components/src/lib/axes/grid/grid-config.ts","../../../libs/viz-components/src/lib/axes/grid/grid-builder.ts","../../../libs/viz-components/src/lib/svg-text-wrap/svg-text-wrap.ts","../../../libs/viz-components/src/lib/svg-text-wrap/svg-text-wrap-builder.ts","../../../libs/viz-components/src/lib/axes/label/axis-label.ts","../../../libs/viz-components/src/lib/axes/label/axis-label-builder.ts","../../../libs/viz-components/src/lib/axes/base/config/xy-axis-builder.ts","../../../libs/viz-components/src/lib/axes/ticks/tick-wrap/tick-wrap.ts","../../../libs/viz-components/src/lib/axes/ticks/tick-wrap/tick-wrap-builder.ts","../../../libs/viz-components/src/lib/axes/ticks/ticks.ts","../../../libs/viz-components/src/lib/axes/ticks/ticks-builder.ts","../../../libs/viz-components/src/lib/axes/base/config/xy-axis-config.ts","../../../libs/viz-components/src/lib/axes/ordinal/ordinal-axis-config.ts","../../../libs/viz-components/src/lib/axes/x/x-axis-config.ts","../../../libs/viz-components/src/lib/axes/x-ordinal/x-ordinal-axis-config.ts","../../../libs/viz-components/src/lib/axes/x-ordinal/x-ordinal-axis-builder.ts","../../../libs/viz-components/src/lib/axes/base/xy-axis-base.ts","../../../libs/viz-components/src/lib/axes/ordinal/ordinal-axis.ts","../../../libs/viz-components/src/lib/axes/x/x-axis.ts","../../../libs/viz-components/src/lib/axes/x-ordinal/x-ordinal-axis.component.ts","../../../libs/viz-components/src/lib/axes/quantitative/quantitative-axis-config.ts","../../../libs/viz-components/src/lib/axes/x-quantitative/x-quantitative-axis-config.ts","../../../libs/viz-components/src/lib/axes/x-quantitative/x-quantitative-axis-builder.ts","../../../libs/viz-components/src/lib/axes/quantitative/quantitative-axis.ts","../../../libs/viz-components/src/lib/axes/x-quantitative/x-quantitative-axis.component.ts","../../../libs/viz-components/src/lib/axes/y/y-axis.ts","../../../libs/viz-components/src/lib/axes/y-ordinal/y-ordinal-axis.component.ts","../../../libs/viz-components/src/lib/axes/y-quantitative-axis/y-quantitative-axis.component.ts","../../../libs/viz-components/src/lib/axes/xy-axis.module.ts","../../../libs/viz-components/src/lib/axes/y/y-axis-config.ts","../../../libs/viz-components/src/lib/axes/y-ordinal/y-ordinal-axis-config.ts","../../../libs/viz-components/src/lib/axes/y-ordinal/y-ordinal-axis-builder.ts","../../../libs/viz-components/src/lib/axes/y-quantitative-axis/y-quantitative-axis-config.ts","../../../libs/viz-components/src/lib/axes/y-quantitative-axis/y-quantitative-axis-builder.ts","../../../libs/viz-components/src/lib/core/utilities/colors.ts","../../../libs/viz-components/src/lib/core/utilities/fill-utilities.ts","../../../libs/viz-components/src/lib/core/utilities/type-guards.ts","../../../libs/viz-components/src/lib/core/types/values.ts","../../../libs/viz-components/src/lib/core/utilities/values.ts","../../../libs/viz-components/src/lib/bars/bars.component.ts","../../../libs/viz-components/src/lib/events/events.directive.ts","../../../libs/viz-components/src/lib/events/events.types.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/position/tooltip-position.ts","../../../libs/viz-components/src/lib/events/tooltip-positioner.ts","../../../libs/viz-components/src/lib/tooltips/config/tooltip.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/html-tooltip-config.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/size/tooltip-size.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/size/tooltip-size-builder.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/html-tooltip-builder.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/config/position/tooltip-position-builder.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/html-tooltip.directive.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.ts","../../../libs/viz-components/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.html","../../../libs/viz-components/src/lib/tooltips/html-tooltip/html-tooltip.module.ts","../../../libs/viz-components/src/lib/bars/events/bars-tooltip-positioner.ts","../../../libs/viz-components/src/lib/bars/events/bars-events.directive.ts","../../../libs/viz-components/src/lib/bars/bars.module.ts","../../../libs/viz-components/src/lib/data-dimensions/dimension-builder.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/domain-padding.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/percent-over/percent-over.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/pixel/pixel.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-interval/round-to-interval.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-sig-fig/round-to-sig-fig.ts","../../../libs/viz-components/src/lib/data-dimensions/dimension.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-dimension/number-dimension.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder.ts","../../../libs/viz-components/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position.ts","../../../libs/viz-components/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder.ts","../../../libs/viz-components/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value.ts","../../../libs/viz-components/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder.ts","../../../libs/viz-components/src/lib/bars/config/backgrounds/bars-backgrounds.ts","../../../libs/viz-components/src/lib/bars/config/backgrounds/bars-backgrounds-builder.ts","../../../libs/viz-components/src/lib/bars/config/bars-config.ts","../../../libs/viz-components/src/lib/bars/config/bars-dimensions.ts","../../../libs/viz-components/src/lib/bars/config/labels/bars-labels.ts","../../../libs/viz-components/src/lib/bars/config/labels/bars-labels-builder.ts","../../../libs/viz-components/src/lib/bars/config/bars-builder.ts","../../../libs/viz-components/src/lib/bars/events/actions/bars-click-actions.ts","../../../libs/viz-components/src/lib/bars/events/actions/bars-hover-actions.ts","../../../libs/viz-components/src/lib/bars/events/actions/bars-hover-move-actions.ts","../../../libs/viz-components/src/lib/core/types/layout.ts","../../../libs/viz-components/src/lib/core/utilities/value-format.ts","../../../libs/viz-components/src/lib/data-export/data-export.ts","../../../libs/viz-components/src/lib/data-export/data-export-config.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value.ts","../../../libs/viz-components/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-builder.ts","../../../libs/viz-components/src/lib/dots/config/dots-config.ts","../../../libs/viz-components/src/lib/dots/config/dots-builder.ts","../../../libs/viz-components/src/lib/dots/dots.component.ts","../../../libs/viz-components/src/lib/dots/events/dots-tooltip-positioner.ts","../../../libs/viz-components/src/lib/dots/events/dots-events.directive.ts","../../../libs/viz-components/src/lib/dots/dots.module.ts","../../../libs/viz-components/src/lib/dots/events/actions/dots-hover-actions.ts","../../../libs/viz-components/src/lib/dots/events/actions/dots-hover-move-actions.ts","../../../libs/viz-components/src/lib/geographies/config/geographies-config.ts","../../../libs/viz-components/src/lib/geographies/config/layers/labels/geographies-labels.ts","../../../libs/viz-components/src/lib/geographies/config/layers/labels/geographies-labels-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/geographies-layer/geographies-layer-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/geographies-layer/geographies-layer.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer-builder.ts","../../../libs/viz-components/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer.ts","../../../libs/viz-components/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer-builder.ts","../../../libs/viz-components/src/lib/geographies/config/geographies-builder.ts","../../../libs/viz-components/src/lib/geographies/events/actions/geographies-click-actions.ts","../../../libs/viz-components/src/lib/geographies/events/actions/geographies-hover-actions.ts","../../../libs/viz-components/src/lib/geographies/events/actions/geographies-hover-move-actions.ts","../../../libs/viz-components/src/lib/geographies/geographies.component.ts","../../../libs/viz-components/src/lib/geographies/geographies.component.html","../../../libs/viz-components/src/lib/geographies/events/geographies-tooltip-positioner.ts","../../../libs/viz-components/src/lib/geographies/events/geographies-events.directive.ts","../../../libs/viz-components/src/lib/geographies/geographies-feature.ts","../../../libs/viz-components/src/lib/geographies/geographies.module.ts","../../../libs/viz-components/src/lib/grouped-bars/config/grouped-bars-config.ts","../../../libs/viz-components/src/lib/grouped-bars/config/grouped-bars-builder.ts","../../../libs/viz-components/src/lib/grouped-bars/events/grouped-bars-events.directive.ts","../../../libs/viz-components/src/lib/grouped-bars/grouped-bars.component.ts","../../../libs/viz-components/src/lib/grouped-bars/grouped-bars.module.ts","../../../libs/viz-components/src/lib/image-download/image-download-enums.ts","../../../libs/viz-components/src/lib/image-download/image-download-config.ts","../../../libs/viz-components/src/lib/image-download/image-download.service.ts","../../../libs/viz-components/src/lib/point-markers/point-markers.ts","../../../libs/viz-components/src/lib/point-markers/point-markers-builder.ts","../../../libs/viz-components/src/lib/lines/config/stroke/lines-stroke.ts","../../../libs/viz-components/src/lib/lines/config/stroke/lines-stroke-builder.ts","../../../libs/viz-components/src/lib/lines/config/area-fills/area-fills-builder.ts","../../../libs/viz-components/src/lib/lines/config/lines-config.ts","../../../libs/viz-components/src/lib/lines/config/lines-builder.ts","../../../libs/viz-components/src/lib/lines/events/actions/lines-click-actions.ts","../../../libs/viz-components/src/lib/lines/events/actions/lines-hover-move-actions.ts","../../../libs/viz-components/src/lib/lines/events/actions/lines-marker-click-actions.ts","../../../libs/viz-components/src/lib/lines/lines.component.ts","../../../libs/viz-components/src/lib/lines/events/lines-tooltip-positioner.ts","../../../libs/viz-components/src/lib/lines/events/lines-events.directive.ts","../../../libs/viz-components/src/lib/lines/lines.module.ts","../../../libs/viz-components/src/lib/map-legend/map-legend-base.ts","../../../libs/viz-components/src/lib/map-legend/continuous-legend/continuous-legend.component.ts","../../../libs/viz-components/src/lib/map-legend/continuous-legend/continuous-legend.component.html","../../../libs/viz-components/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.ts","../../../libs/viz-components/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.html","../../../libs/viz-components/src/lib/map-legend/map-legend.component.ts","../../../libs/viz-components/src/lib/map-legend/map-legend.component.html","../../../libs/viz-components/src/lib/map-legend/map-legend.module.ts","../../../libs/viz-components/src/lib/quantitative-rules/config/labels/quantitative-rules-labels.ts","../../../libs/viz-components/src/lib/quantitative-rules/config/labels/quantitative-rules-labels-builder.ts","../../../libs/viz-components/src/lib/quantitative-rules/config/quantitative-rules-config.ts","../../../libs/viz-components/src/lib/quantitative-rules/config/quantitative-rules-dimensions.ts","../../../libs/viz-components/src/lib/quantitative-rules/config/quantitative-rules-builder.ts","../../../libs/viz-components/src/lib/quantitative-rules/quantitative-rules.component.ts","../../../libs/viz-components/src/lib/quantitative-rules/quantitative-rules.module.ts","../../../libs/viz-components/src/lib/stacked-area/config/stacked-area-config.ts","../../../libs/viz-components/src/lib/stacked-area/config/stacked-area-builder.ts","../../../libs/viz-components/src/lib/stacked-area/events/actions/stacked-area-hover-move-actions.ts","../../../libs/viz-components/src/lib/stacked-area/stacked-area.component.ts","../../../libs/viz-components/src/lib/stacked-area/events/stacked-area-tooltip-positioner.ts","../../../libs/viz-components/src/lib/stacked-area/events/stacked-area-events.directive.ts","../../../libs/viz-components/src/lib/stacked-area/stacked-area.module.ts","../../../libs/viz-components/src/lib/stacked-bars/config/stacked-bars-config.ts","../../../libs/viz-components/src/lib/stacked-bars/config/stacked-bars-builder.ts","../../../libs/viz-components/src/lib/stacked-bars/events/actions/stacked-bars-click-actions.ts","../../../libs/viz-components/src/lib/stacked-bars/events/actions/stacked-bars-hover-actions.ts","../../../libs/viz-components/src/lib/stacked-bars/events/actions/stacked-bars-hover-move-actions.ts","../../../libs/viz-components/src/lib/stacked-bars/stacked-bars.component.ts","../../../libs/viz-components/src/lib/stacked-bars/events/stacked-bars-events.directive.ts","../../../libs/viz-components/src/lib/stacked-bars/stacked-bars.module.ts","../../../libs/viz-components/src/lib/xy-background/xy-background.component.ts","../../../libs/viz-components/src/lib/xy-background/xy-background.component.html","../../../libs/viz-components/src/lib/xy-background/xy-background.module.ts","../../../libs/viz-components/src/public-api.ts","../../../libs/viz-components/src/mathstack-viz.ts"],"sourcesContent":["import { Directive, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { Chart } from '../charts';\n\nexport interface IMarks {\n chart: Chart;\n /**\n * drawMarks method\n *\n * All methods that require scales should be called from drawMarks. Methods\n * called from here should use scale.domain() or scale.range() to obtain those values\n * rather than this.config.dimension.domain or this.ranges.dimension.\n *\n * This method is called when scales emit from ChartComponent.\n */\n drawMarks: () => void;\n /**\n * getTransitionDuration method\n *\n * This method should return the duration of the transition to be used in the marks.\n */\n getTransitionDuration: () => number;\n}\n\n@Directive()\nexport abstract class Marks implements IMarks, OnChanges {\n chart: Chart;\n abstract drawMarks(): void;\n abstract getTransitionDuration(): number;\n abstract initFromConfig(): void;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NgOnChangesUtilities.inputObjectChangedNotFirstTime(changes, 'config')\n ) {\n this.initFromConfig();\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { DataMarksConfig, MarksConfig } from '../config/marks-config';\nimport { Marks } from '../marks';\n\n@Directive()\nexport abstract class AuxMarks<\n Datum,\n TMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends Marks\n implements Marks, OnChanges\n{\n @Input() config: TMarksConfig;\n\n initFromConfig(): void {\n this.drawMarks();\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nconst DEFAULT = {\n _class: () => '',\n _mixBlendMode: 'normal',\n};\n\nexport abstract class VicAuxMarksBuilder<Datum> {\n protected _mixBlendMode: string;\n protected _class: (d: Datum) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n}\n","import { DataMarksOptions, MarksOptions } from './marks-options';\n\nexport abstract class MarksConfig implements MarksOptions {\n readonly marksClass: string;\n readonly mixBlendMode: string;\n}\n\nexport abstract class DataMarksConfig<Datum>\n extends MarksConfig\n implements DataMarksOptions<Datum>\n{\n readonly data: Datum[];\n readonly datumClass: (d: Datum, i: number) => string;\n}\n","import { MarksConfig } from '../../config/marks-config';\nimport { MarksOptions } from '../../config/marks-options';\n\nexport abstract class AuxMarksConfig\n extends MarksConfig\n implements MarksOptions {}\n","import { InjectionToken } from '@angular/core';\nimport { Chart } from './chart';\n\nexport const CHART = new InjectionToken<Chart>('Chart');\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ElementSpacing } from '../../../core/types/layout';\nimport { ScalingStrategy } from './chart-builder';\nimport { ChartOptions } from './chart-options';\n\nexport class ChartConfig implements ChartOptions {\n aspectRatio?: number;\n height: number | null;\n isFixedHeight: boolean;\n margin: ElementSpacing;\n minWidth: number | null;\n scalingStrategy: ScalingStrategy;\n transitionDuration: number;\n width: number | null;\n viewBoxX: number;\n viewBoxY: number;\n\n constructor(config: ChartConfig) {\n safeAssign(this, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ElementSpacing } from '../../../core/types/layout';\nimport { ChartConfig } from './chart-config';\n\nexport type ScalingStrategy = 'fixed' | 'responsive-width' | 'viewbox';\n\nexport const CHART_SIZE = {\n scaledWidth: 800,\n viewBoxWidth: 800,\n minWidth: 320,\n aspectRatio: 16 / 9,\n};\n\nconst DEFAULT = {\n _fixedHeight: false,\n _margin: { top: 36, right: 36, bottom: 36, left: 36 },\n _scalingStrategy: 'responsive-width' as ScalingStrategy,\n _transitionDuration: 250,\n};\n\n/**\n * Builds a configuration object for a ChartComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicChartConfigBuilder]` in the component decorator)\n *\n */\n@Injectable()\nexport class VicChartConfigBuilder {\n private _aspectRatio?: number;\n private _fixedHeight: boolean;\n private _height: number;\n private _margin: ElementSpacing;\n private _minWidth: number;\n private _scalingStrategy: ScalingStrategy;\n private _transitionDuration: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Explicitly sets the aspect ratio to use when scalingStrategy is 'responsive-width' and fixedHeight is false, or when scalingStrategy is 'viewbox'.\n *\n * @param value - The aspect ratio (width / height) to use. If not called or called with null, a default value of 16/9 will be used. If maxWidth and maxHeight are set, aspect ratio will be derived from those values.\n */\n aspectRatio(value: number): this {\n this._aspectRatio = value;\n return this;\n }\n\n /**\n * OPTIONAL. If set to true and used with 'responsive-width' scaling strategy, height will be fixed and not derived from aspect ratio.\n *\n * Has no effect if scaling strategy is 'fixed' or 'viewbox'.\n */\n fixedHeight(value: boolean): this {\n this._fixedHeight = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the margin that will be established between the edges of the svg and the svg's contents, in px.\n *\n * @param value - The margin that will be established between the edges of the svg and the svg's contents, in px. If called with null, a default value of `{ top: 36, right: 36, bottom: 36, left: 36 }` will be used.\n */\n margin(\n value: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n } | null\n ): this {\n if (value === null) {\n value = DEFAULT._margin;\n return this;\n }\n this._margin = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is 'responsive-width' or 'viewbox', determines the maximum height of the chart. This will override any provided aspect ratio.\n *\n * If scaling strategy is 'fixed', sets the fixed height of the chart.\n *\n * @param value - The maximum height of the chart, in px. If chart size is static, the fixed height of the chart. If not called or called with `null`, chart height will be set via aspect ratio.\n */\n maxHeight(value: number | null): this {\n this._height = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is responsive-width or viewbox, sets the maximum width of the chart. In this case, this value is also used to determine the aspect ratio of the chart which will be maintained on resizing.\n *\n * If scaling strategy is fixed, sets the fixed width of the chart.\n *\n * @param value - The maximum width of the chart, in px. If chart size is static, the fixed width of the chart.\n *\n * If not called or called with `null`, a default value of 800 will be used.\n */\n maxWidth(value: number | null): this {\n this._width = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is responsive-width or viewbox, sets the minimum width of the chart. Has no effect if scaling strategy is fixed.\n *\n * @param value - The minimum width of the chart, in px. If not called or called with `null`, a default value of 320 will be used.\n */\n minWidth(value: number | null): this {\n this._minWidth = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines how the chart scales in response to container or window size changes.\n *\n * Default value, if not called, is 'responsive-width'.\n *\n * @param value - One of:\n * - 'fixed': Chart dimensions remain constant. Width and height are fixed. Dimensions can be set with maxWidth and maxHeight.\n * - 'responsive-width': Chart width responds to container; height is derived via aspect ratio, unless fixedHeight is true.\n * - 'viewbox': Chart is scaled entirely via SVG viewBox. All resizing behavior is controlled through CSS.\n */\n scalingStrategy(value: ScalingStrategy): this {\n this._scalingStrategy = value;\n return this;\n }\n\n /**\n * OPTIONAL. A time duration for all transitions in the chart, in ms.\n *\n * @@param value - The time duration for all transitions in the chart, in ms. If not called or called with null, a default value of 250 will be used.\n */\n transitionDuration(value: number | null): this {\n if (value === null) {\n value = DEFAULT._transitionDuration;\n return this;\n }\n this._transitionDuration = value;\n return this;\n }\n\n getConfig(): ChartConfig {\n this.validateBuilder();\n\n return new ChartConfig({\n aspectRatio: this._aspectRatio,\n height: this._height,\n isFixedHeight: this._fixedHeight,\n margin: this._margin,\n minWidth: this._minWidth,\n scalingStrategy: this._scalingStrategy,\n transitionDuration: this._transitionDuration,\n width: this._width,\n viewBoxX: CHART_SIZE.viewBoxWidth,\n viewBoxY:\n CHART_SIZE.viewBoxWidth / (this._aspectRatio ?? CHART_SIZE.aspectRatio),\n });\n }\n\n private validateBuilder(): void {\n if (this._width === undefined || this._width === null) {\n this._width =\n this._scalingStrategy === 'viewbox' ? null : CHART_SIZE.scaledWidth;\n }\n if (this._height === undefined || this._height === null) {\n this._height =\n this._scalingStrategy === 'viewbox'\n ? null\n : this._width / (this._aspectRatio ?? CHART_SIZE.aspectRatio);\n }\n if (this._minWidth === undefined || this._minWidth === null) {\n this._minWidth =\n this._scalingStrategy === 'viewbox' ? null : CHART_SIZE.minWidth;\n }\n if (this._scalingStrategy !== 'viewbox' && this._minWidth > this._width) {\n const [oldMin, oldWidth] = [this._minWidth, this._width];\n this._minWidth = oldWidth;\n this._width = oldMin;\n console.warn(\n `[vic-chart] The configured minWidth (${oldMin}px) cannot be larger than the configured width (${oldWidth}px). The values have been swapped.`\n );\n }\n if (this._scalingStrategy === 'responsive-width' && !this._fixedHeight) {\n this._aspectRatio = this._width / this._height;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { isEqual } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n filter,\n map,\n of,\n shareReplay,\n switchMap,\n} from 'rxjs';\nimport { Dimensions, ElementSpacing } from '../../core/types/layout';\nimport { Chart } from './chart';\nimport { CHART } from './chart.token';\nimport { ScalingStrategy, VicChartConfigBuilder } from './config/chart-builder';\nimport { ChartConfig } from './config/chart-config';\n\nexport interface Ranges {\n x: [number, number];\n y: [number, number];\n}\n\nexport interface ChartResizing {\n width: boolean;\n height: boolean;\n useViewbox: boolean;\n}\n\nexport interface ReactiveConfig {\n margin: ElementSpacing;\n height: number;\n width: number;\n scalingStrategy: ScalingStrategy;\n}\n\n/**\n * A base component that can be extended to create specific types of `Chart` components,\n * each of which can serve as a wrapper component for one `PrimaryMarks` component and any\n * other content that is projected into its content projection slots.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-chart',\n },\n imports: [CommonModule],\n})\nexport class ChartComponent implements Chart, OnInit, OnChanges {\n @Input() config: ChartConfig = new VicChartConfigBuilder().getConfig();\n @ViewChild('div', { static: true }) divRef: ElementRef<HTMLDivElement>;\n @ViewChild('svg', { static: true }) svgRef: ElementRef<SVGSVGElement>;\n\n private _config: BehaviorSubject<ChartConfig> = new BehaviorSubject(null);\n config$: Observable<ChartConfig> = this._config.asObservable().pipe(\n filter((c) => !!c),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n protected readonly strategy$ = this.config$.pipe(\n map((c) => c.scalingStrategy),\n distinctUntilChanged()\n );\n\n protected readonly widthCfg$ = this.config$.pipe(\n map((c) => c.width),\n distinctUntilChanged()\n );\n\n protected readonly minWidthCfg$ = this.config$.pipe(\n map((c) => c.minWidth),\n distinctUntilChanged()\n );\n\n protected readonly heightCfg$ = this.config$.pipe(\n map((c) => c.height),\n distinctUntilChanged()\n );\n\n private readonly aspectRatioCfg$ = this.config$.pipe(\n map(\n (c) =>\n c.aspectRatio ??\n (typeof c.width === 'number' &&\n typeof c.height === 'number' &&\n c.height !== 0\n ? c.width / c.height\n : undefined)\n ),\n distinctUntilChanged()\n );\n\n private readonly isFixedHeight$ = this.config$.pipe(\n map((c) => c.isFixedHeight),\n distinctUntilChanged()\n );\n\n protected readonly marginCfg$ = this.config$.pipe(\n map((c) => c.margin),\n distinctUntilChanged((a, b) => isEqual(a, b))\n );\n\n private readonly width$ = this.strategy$.pipe(\n switchMap((strategy) =>\n strategy === 'responsive-width'\n ? defer(() => this.observeElementWidth(this.divRef.nativeElement))\n : strategy === 'viewbox'\n ? of(this.config.viewBoxX)\n : this.widthCfg$\n )\n );\n\n private readonly height$ = combineLatest([\n this.strategy$,\n this.width$,\n this.heightCfg$,\n this.aspectRatioCfg$,\n this.isFixedHeight$,\n ]).pipe(\n map(([strategy, w, hCfg, ar, isFixedHeight]) =>\n strategy === 'responsive-width' && !isFixedHeight\n ? w / ar\n : strategy === 'viewbox'\n ? this.config.viewBoxY\n : hCfg\n ),\n distinctUntilChanged()\n );\n\n protected readonly svgDimensions$ = combineLatest([\n this.width$,\n this.height$,\n ]).pipe(\n filter(([w, h]) => w > 0 && h > 0),\n map(([width, height]) => ({ width, height })),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n readonly ranges$ = combineLatest([this.svgDimensions$, this.marginCfg$]).pipe(\n map(([dimensions, margin]) =>\n this.getRangesFromSvgDimensions(dimensions, margin)\n ),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n protected destroyRef = inject(DestroyRef);\n\n constructor(private ngZone: NgZone) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (NgOnChangesUtilities.inputObjectChanged(changes, 'config')) {\n this._config.next(this.config);\n }\n }\n\n ngOnInit(): void {\n // ensure that values are pulled through\n this.ranges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private observeElementWidth(element: HTMLElement): Observable<number> {\n return new Observable<number>((subscriber) => {\n let ro: ResizeObserver;\n this.ngZone.runOutsideAngular(() => {\n ro = new ResizeObserver((entries) => {\n const e = entries[0];\n const w =\n (Array.isArray(e.borderBoxSize)\n ? e.borderBoxSize[0]?.inlineSize\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (e as any).borderBoxSize?.inlineSize) ?? e.contentRect.width;\n this.ngZone.run(() => subscriber.next(w));\n });\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ro.observe(element, { box: 'border-box' as any });\n return () => {\n ro.unobserve(element);\n ro.disconnect();\n };\n }).pipe(\n map((w) => Math.round(w)),\n auditTime(0),\n distinctUntilChanged()\n );\n }\n\n private getRangesFromSvgDimensions(\n dim: Dimensions,\n margin: ElementSpacing\n ): Ranges {\n return {\n x: [margin.left, dim.width - margin.right],\n y: [dim.height - margin.bottom, margin.top],\n };\n }\n\n getViewBoxScale(): { x: number; y: number } {\n if (!this.svgRef?.nativeElement?.viewBox?.baseVal) {\n return { x: 1, y: 1 };\n }\n const rect = this.svgRef.nativeElement.getBoundingClientRect();\n const vb = this.svgRef.nativeElement.viewBox.baseVal;\n return {\n x: vb.width / rect.width,\n y: vb.height / rect.height,\n };\n }\n}\n","<!-- Slot exists so that projected content can have access to scales -->\n<ng-container *ngTemplateOutlet=\"htmlElementsBefore\"></ng-container>\n<div\n #div\n class=\"vic-chart-container\"\n [ngClass]=\"(strategy$ | async)\"\n [style.maxWidth.px]=\"widthCfg$ | async\"\n [style.minWidth.px]=\"minWidthCfg$ | async\"\n [style.maxHeight.px]=\"heightCfg$ | async\"\n [style.aspectRatio]=\"(strategy$ | async) === 'viewbox' ? (config.viewBoxX / config.viewBoxY) : null\"\n [style.width.%]=\"(strategy$ | async) === 'viewbox' ? 100 : null\"\n>\n <svg\n #svg\n class=\"vic-chart-svg\"\n [ngClass]=\"(strategy$ | async)\"\n [style.width.px]=\"(strategy$ | async) !== 'viewbox' ? (svgDimensions$ | async)?.width : null\"\n [style.height.px]=\"(strategy$ | async) !== 'viewbox' ? (svgDimensions$ | async)?.height : null\"\n [attr.viewBox]=\"(strategy$ | async) === 'viewbox' ? '0 0 ' + config.viewBoxX + ' ' + config.viewBoxY : null\"\n >\n <defs>\n <ng-container *ngTemplateOutlet=\"svgDefs\"></ng-container>\n </defs>\n <ng-container *ngTemplateOutlet=\"svgElements\"></ng-container>\n </svg>\n</div>\n\n<!-- Slot exists so that projected content can have access to scales -->\n<ng-container *ngTemplateOutlet=\"htmlElementsAfter\"></ng-container>\n\n<ng-template #htmlElementsBefore>\n <ng-content select=\"[html-elements-before]\"></ng-content>\n</ng-template>\n\n<ng-template #svgDefs>\n <ng-content select=\"[svg-defs]\"></ng-content>\n</ng-template>\n\n<ng-template #svgElements>\n <ng-content select=\"[svg-elements]\"></ng-content>\n</ng-template>\n\n<ng-template #htmlElementsAfter>\n <ng-content select=\"[html-elements-after]\"></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, NgZone } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { VicAttributeDataDimensionConfig } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { Chart } from '../chart/chart';\nimport { ChartComponent } from '../chart/chart.component';\nimport { CHART } from '../chart/chart.token';\n\n/**\n * A `Chart` component to be used with a `Geographies` `PrimaryMarks` component.\n *\n * This component adds an attribute data scale and config to the base `ChartComponent` that can\n * be used by any components projected into the chart.\n *\n * Components that may use these scales include the `Geographies` component\n * and the `MapLegend` component.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-map-chart',\n templateUrl: '../chart/chart.component.html',\n styleUrls: ['../chart/chart.component.scss'],\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-map-chart',\n },\n imports: [CommonModule],\n})\nexport class MapChartComponent<Datum> extends ChartComponent implements Chart {\n private attributeProperties: BehaviorSubject<{\n config: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n }> = new BehaviorSubject({ config: undefined, scale: undefined });\n attributeProperties$ = this.attributeProperties.asObservable();\n protected zone = inject(NgZone);\n\n updateAttributeProperties(properties: {\n config: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n }): void {\n this.zone.run(() => {\n this.attributeProperties.next({\n config: properties.config,\n scale: properties.scale,\n });\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n NgZone,\n OnInit,\n} from '@angular/core';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { GenericScale } from '../../core';\nimport { Chart } from '../chart/chart';\nimport { ChartComponent } from '../chart/chart.component';\nimport { CHART } from '../chart/chart.token';\n\nexport enum XyContentScale {\n x = 'x',\n y = 'y',\n}\n\nexport interface XyChartScales {\n [XyContentScale.x]: GenericScale<any, any>;\n [XyContentScale.y]: GenericScale<any, any>;\n useTransition: boolean;\n}\n/**\n * A `Chart` component to be used with `PrimaryMarks` components that have X and Y axes, such as `Bars` and `Lines`.\n *\n * This component adds x, y, and categorical scales to the base `ChartComponent` that can\n * be used by any components projected into the chart.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-xy-chart',\n templateUrl: '../chart/chart.component.html',\n styleUrls: ['../chart/chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-xy-chart',\n },\n imports: [CommonModule],\n})\nexport class XyChartComponent extends ChartComponent implements Chart, OnInit {\n private scales: BehaviorSubject<XyChartScales> = new BehaviorSubject(null);\n scales$ = this.scales.asObservable().pipe(filter((scales) => !!scales));\n protected zone = inject(NgZone);\n\n updateScales(scales: Partial<XyChartScales>): void {\n this.zone.run(() => {\n this.scales.next({ ...this.scales.value, ...scales });\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartComponent } from './chart/chart.component';\nimport { MapChartComponent } from './map-chart/map-chart.component';\nimport { XyChartComponent } from './xy-chart/xy-chart.component';\n\n@NgModule({\n imports: [ChartComponent, XyChartComponent, MapChartComponent],\n exports: [ChartComponent, XyChartComponent, MapChartComponent],\n})\nexport class VicChartModule {}\n","import { ElementRef } from '@angular/core';\n\nexport class Chart {\n svgRef: ElementRef<SVGSVGElement>;\n}\n","import { DestroyRef, Directive, inject, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { MapChartComponent } from '../../../charts';\nimport { VicAttributeDataDimensionConfig } from '../../../geographies';\nimport { AuxMarks } from '../../aux-marks/aux-marks';\nimport { MarksConfig } from '../../config/marks-config';\n\n@Directive()\nexport abstract class VicMapAuxMarks<Datum, TMarksConfig extends MarksConfig>\n extends AuxMarks<Datum, TMarksConfig>\n implements OnInit\n{\n attributeDataConfig: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeDataScale: any;\n public override chart = inject(MapChartComponent);\n destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.subscribeToAttributeDataProperties();\n }\n\n subscribeToAttributeDataProperties(): void {\n this.chart.attributeProperties$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((properties) => !!properties.scale && !!properties.config)\n )\n .subscribe((properties) => {\n this.attributeDataConfig = properties.config;\n this.attributeDataScale = properties.scale;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.chart.config.transitionDuration;\n }\n}\n","import {\n DestroyRef,\n Directive,\n InjectionToken,\n Input,\n OnChanges,\n inject,\n} from '@angular/core';\nimport { Ranges } from '../../charts';\nimport { DataMarksConfig, MarksConfig } from '../config/marks-config';\nimport { Marks } from '../marks';\n\nexport const VIC_PRIMARY_MARKS = new InjectionToken<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n PrimaryMarks<unknown, any>\n>('PrimaryMarks');\n\n@Directive()\nexport abstract class PrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends Marks\n implements Marks, OnChanges\n{\n @Input() config: TPrimaryMarksConfig;\n ranges: Ranges;\n destroyRef = inject(DestroyRef);\n\n /**\n * This method sets creates and sets scales on ChartComponent. Any methods that require ranges\n * to create the scales should be called from this method. Methods called from here should not\n * require scales.\n *\n * This method is called on init, after config-based properties are set, and also on\n * resize/when ranges change.\n */\n abstract setChartScalesFromRanges(useTransition: boolean): void;\n\n initFromConfig(): void {\n this.setChartScalesFromRanges(true);\n }\n}\n","import { Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { MapChartComponent } from '../../../charts/map-chart/map-chart.component';\nimport { VicAttributeDataDimensionConfig } from '../../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { MarksConfig } from '../../config/marks-config';\nimport { PrimaryMarks } from '../../primary-marks/primary-marks';\n\n/**\n * @internal\n */\n@Directive()\nexport abstract class MapPrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends MarksConfig,\n >\n extends PrimaryMarks<Datum, TPrimaryMarksConfig>\n implements OnInit\n{\n attributeDataConfig: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeDataScale: any;\n public override chart = inject(MapChartComponent);\n\n ngOnInit(): void {\n this.subscribeToRanges();\n this.subscribeToAttributeDataProperties();\n }\n\n subscribeToRanges(): void {\n this.chart.ranges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((ranges) => !!ranges)\n )\n .subscribe((ranges) => {\n this.ranges = ranges;\n if (this.attributeDataScale && this.attributeDataConfig) {\n this.setChartScalesFromRanges(false);\n this.drawMarks();\n } else {\n this.initFromConfig();\n }\n });\n }\n\n subscribeToAttributeDataProperties(): void {\n this.chart.attributeProperties$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((properties) => !!properties.scale && !!properties.config)\n )\n .subscribe((properties) => {\n this.attributeDataConfig = properties.config;\n this.attributeDataScale = properties.scale;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.chart.config.transitionDuration;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nconst DEFAULT = {\n _datumClass: () => '',\n _mixBlendMode: 'normal',\n};\n\nexport abstract class PrimaryMarksBuilder<Datum> {\n protected _datumClass: (d: Datum) => string;\n protected _data: Datum[];\n protected _mixBlendMode: string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that corresponds to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n datumClass(value: null): this;\n datumClass(value: string): this;\n datumClass(value: (d: Datum) => string): this;\n datumClass(value: ((d: Datum) => string) | string | null): this {\n if (value === null) {\n this._datumClass = DEFAULT._datumClass;\n return this;\n }\n if (typeof value === 'string') {\n this._datumClass = () => value;\n return this;\n }\n this._datumClass = value;\n return this;\n }\n\n /**\n * REQUIRED. Sets the data that will be used to render the marks for this component\n *\n * If no dimension domain overrides are provided, **this primary-marks data will also create the domain of the scales used on the entire chart**.\n *\n * The objects in the array can be of an type, and if an array of objects, the objects can contain any number of properties, including properties that are extraneous to the chart at hand.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: null): this;\n mixBlendMode(mixBlendMode: string): this;\n mixBlendMode(mixBlendMode: string | null): this {\n if (mixBlendMode === null) {\n this._mixBlendMode = DEFAULT._mixBlendMode;\n return this;\n }\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n protected validateBuilder(componentName: string): void {\n if (!this._data) {\n throw new Error(\n `${componentName} Builder: data is required. Use the 'data' method to set the data.`\n );\n }\n }\n}\n","import { DataMarksConfig } from '../../config/marks-config';\nimport { DataMarksOptions } from '../../config/marks-options';\n\nexport abstract class PrimaryMarksConfig<Datum>\n extends DataMarksConfig<Datum>\n implements DataMarksOptions<Datum>\n{\n protected abstract initPropertiesFromData(): void;\n}\n","import { DestroyRef, Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { XyChartComponent, XyChartScales } from '../../../charts';\nimport { AuxMarks } from '../../aux-marks/aux-marks';\nimport { DataMarksConfig, MarksConfig } from '../../config/marks-config';\nimport { XyMarks } from '../xy-marks';\n\n@Directive()\nexport abstract class XyAuxMarks<\n Datum,\n TMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends AuxMarks<Datum, TMarksConfig>\n implements OnInit, XyMarks\n{\n scales: XyChartScales;\n public override chart = inject(XyChartComponent);\n public destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.subscribeToScales();\n }\n\n subscribeToScales(): void {\n this.chart.scales$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((scales) => !!scales.x && !!scales.y)\n )\n .subscribe((scales): void => {\n this.scales = scales;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.scales.useTransition ? this.chart.config.transitionDuration : 0;\n }\n}\n","import { DataMarksConfig } from '../config/marks-config';\n\nexport abstract class XyMarksConfig<Datum> extends DataMarksConfig<Datum> {\n valueIndices: number[];\n}\n","import { Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport {\n XyChartComponent,\n XyChartScales,\n XyContentScale,\n} from '../../../charts/xy-chart/xy-chart.component';\nimport { DataMarksOptions } from '../../config/marks-options';\nimport { PrimaryMarks } from '../../primary-marks/primary-marks';\nimport { XyMarks } from '../xy-marks';\n\n/**\n * @internal\n */\n@Directive()\nexport abstract class VicXyPrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends DataMarksOptions<Datum>,\n >\n extends PrimaryMarks<Datum, TPrimaryMarksConfig>\n implements OnInit, XyMarks\n{\n scales: XyChartScales;\n requiredScales: (keyof typeof XyContentScale)[] = [\n XyContentScale.x,\n XyContentScale.y,\n ];\n public override chart = inject(XyChartComponent);\n\n ngOnInit(): void {\n this.subscribeToRanges();\n this.subscribeToScales();\n }\n\n subscribeToRanges(): void {\n this.chart.ranges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((ranges) => !!ranges)\n )\n .subscribe((ranges) => {\n this.ranges = ranges;\n if (\n this.scales &&\n this.requiredScales.every((scale) => this.scales[scale])\n ) {\n this.setChartScalesFromRanges(false);\n } else {\n this.initFromConfig();\n }\n });\n }\n\n subscribeToScales(): void {\n this.chart.scales$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((scales) => !!scales)\n )\n .subscribe((scales): void => {\n this.scales.x = scales.x;\n this.scales.y = scales.y;\n this.scales.useTransition = scales.useTransition;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.scales.useTransition ? this.chart.config.transitionDuration : 0;\n }\n}\n","import { PrimaryMarksConfig } from '../../primary-marks/config/primary-marks-config';\n\nexport abstract class XyPrimaryMarksConfig<\n Datum,\n> extends PrimaryMarksConfig<Datum> {\n valueIndices: number[];\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisBaselineOptions } from './axis-baseline-options';\n\nexport class AxisBaseline implements AxisBaselineOptions {\n readonly display: boolean;\n readonly zeroBaseline: { display: boolean; dasharray: string };\n\n constructor(options: AxisBaselineOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisBaseline } from './axis-baseline';\n\nconst DEFAULT = {\n _zeroBaseline: {\n display: true,\n dasharray: '2, 2',\n },\n};\n\nexport class AxisBaselineBuilder {\n private _display: boolean;\n private _zeroBaseline: {\n display: boolean;\n dasharray: string;\n };\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Determines whether the axis baseline will be displayed.\n *\n * @param value - `true` to display the axis baseline, `false` to remove the axis baseline.\n *\n * If not called, the default value is `true`.\n */\n display(value: boolean = true): this {\n this._display = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for the axis baseline when there are positive and negative values on the perpendicular axis.\n *\n * @param value - { display: boolean; stroke: StrokeBuilder }\n *\n * If display is `true`, the axis baseline will be relocated to the zero tick mark of the perpendicular axis. This line will still be displayed even if the axis baseline at the edge of the chart is removed.\n *\n * If display is `false`, the axis baseline will be removed.\n *\n * If stroke is `null`, the axis baseline will be displayed as a dashed line.\n */\n zeroBaseline(\n value: Partial<{\n dasharray: string;\n display: boolean;\n }>\n ): this;\n zeroBaseline(value: null): this;\n zeroBaseline(\n value?: Partial<{\n dasharray: string;\n display: boolean;\n }> | null\n ): this {\n this._zeroBaseline = DEFAULT._zeroBaseline;\n if (value === null) {\n return this;\n }\n this._zeroBaseline.display = value.display ?? true;\n this._zeroBaseline.dasharray =\n value.dasharray ?? DEFAULT._zeroBaseline.dasharray;\n return this;\n }\n\n _build(dimension: 'ordinal' | 'quantitative'): AxisBaseline {\n if (this._display === undefined) {\n this._display = dimension === 'ordinal' ? false : true;\n }\n return new AxisBaseline({\n display: this._display,\n zeroBaseline: this._zeroBaseline,\n });\n }\n}\n","import { StrokeBaseOptions } from './stroke-base-options';\n\nexport abstract class StrokeBase implements StrokeBaseOptions {\n readonly linecap: string;\n readonly linejoin: string;\n readonly opacity: number;\n readonly width: number;\n readonly dasharray: string;\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { StrokeBase } from './base/stroke-base';\nimport { StrokeOptions } from './stroke-options';\n\nexport class Stroke extends StrokeBase implements StrokeOptions {\n readonly color: string;\n\n constructor(options: Partial<StrokeOptions>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Stroke } from './stroke';\n\nconst DEFAULT = {\n _dasharray: 'none',\n _linecap: 'round',\n _linejoin: 'round',\n _opacity: 1,\n _width: 2,\n};\n\nexport class StrokeBuilder {\n private _color: string;\n private _dasharray: string;\n private _linecap: string;\n private _linejoin: string;\n private _opacity: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke}\n * attribute.\n *\n * @default '#000'\n */\n color(color: string): this {\n this._color = color;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-dasharray]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray}\n * attribute.\n *\n * @default 'round'\n */\n dasharray(dasharray: string): this {\n this._dasharray = dasharray;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linecap]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap}\n * attribute.\n *\n * @default 'round'\n */\n linecap(linecap: string): this {\n this._linecap = linecap;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linejoin]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin}\n * attribute.\n *\n * @default 'round'\n */\n linejoin(linejoin: string): this {\n this._linejoin = linejoin;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-opacity]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity}\n * attribute.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-width]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width}\n * attribute, in px.\n *\n * @default 2\n */\n width(width: number): this {\n this._width = width;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): Stroke {\n return new Stroke({\n color: this._color,\n dasharray: this._dasharray,\n linecap: this._linecap,\n linejoin: this._linejoin,\n opacity: this._opacity,\n width: this._width,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Stroke } from '../../stroke';\nimport { GridOptions } from './grid-options';\n\nexport class Grid implements GridOptions {\n axis: 'x' | 'y';\n filter: (i: number) => boolean;\n stroke: Stroke;\n\n constructor(options: GridOptions) {\n safeAssign(this, options);\n }\n}\n","import { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { Grid } from './grid-config';\n\nexport class GridBuilder {\n private _filter: (i: number) => boolean;\n private strokeBuilder: StrokeBuilder;\n\n /**\n * OPTIONAL. Determines whether or not to display grid lines. Must specify a function\n * that takes the index of the grid line and returns a boolean.\n *\n * Default: `(i) => i > 0`, but can be overriden to display all grid lines.\n */\n filter(filter: ((i: number) => boolean) | null) {\n if (filter === null) {\n this._filter = undefined;\n return this;\n }\n this._filter = filter;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the grid line stroke.\n *\n * Default color: '#cccccc'\n * Default width: 1px\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder().width(1).color('#cccccc');\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(axis: 'x' | 'y', dimension: 'quantitative' | 'ordinal'): Grid {\n this.validateBuilder();\n return new Grid({\n axis: axis,\n filter: this.getFilterForDimension(dimension),\n stroke: this.strokeBuilder._build(),\n });\n }\n\n private validateBuilder(): void {\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n }\n\n private getFilterForDimension(\n dimension: 'quantitative' | 'ordinal'\n ): (i: number) => boolean {\n if (this._filter) return this._filter;\n if (dimension === 'quantitative') {\n return (i) => i > 0;\n } else {\n return () => true;\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { select, Selection } from 'd3';\nimport { SvgTextWrapOptions } from './svg-text-wrap-options';\n\nexport class SvgTextWrap implements SvgTextWrapOptions {\n width: number;\n maintainXPosition: boolean;\n maintainYPosition: boolean;\n lineHeight: number;\n breakOnChars: string[];\n spaceAroundBreakChars: boolean;\n\n constructor(options: SvgTextWrapOptions) {\n safeAssign(this, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(textSelection: Selection<SVGTextElement, any, any, any>): void {\n textSelection.each((d, i, nodes) => {\n const text = select(nodes[i]);\n const tokens = this.buildTokens(\n text,\n this.breakOnChars ?? [],\n this.spaceAroundBreakChars ?? false\n ).reverse();\n let word;\n let line = [];\n let lineNumber = 0;\n const y = parseFloat(text.attr('y')) || 0;\n const x = this.maintainXPosition ? parseFloat(text.attr('x')) : 0;\n const maxWidth = this.width;\n const dy = parseFloat(text.attr('dy')) || 0;\n let isFirstTspan = true;\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy + 'em');\n while ((word = tokens.pop())) {\n line.push(word);\n tspan.text(line.join('').trimEnd());\n\n if (tspan.node().getComputedTextLength() > maxWidth) {\n line.pop();\n if (line.length > 0) {\n tspan.text(line.join('').trimEnd());\n isFirstTspan = false;\n } else {\n // Remove the empty tspan since it has no content\n // This happens if a single word is longer than the maxWidth\n tspan.remove();\n }\n line = [word];\n tspan = text\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr(\n 'dy',\n isFirstTspan\n ? dy + 'em'\n : ++lineNumber * this.lineHeight + dy + 'em'\n )\n .text(word);\n isFirstTspan = false;\n }\n }\n if (this.maintainYPosition && lineNumber > 0) {\n const fontSize = parseFloat(text.style('font-size')) || 16;\n const totalLines = lineNumber + 1;\n const totalHeight = (totalLines - 1) * this.lineHeight; // in em units\n\n // Convert to pixels and center\n const offsetY = (totalHeight / 2) * fontSize;\n text.selectAll('tspan').attr('y', y - offsetY);\n }\n });\n }\n\n private buildTokens(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n textSel: Selection<SVGTextElement, unknown, any, any>,\n breakOnChars: string[] = [],\n spaceAroundBreakChars = false\n ): string[] {\n const allTspans = textSel.selectAll<SVGTSpanElement, unknown>('tspan');\n const chunks: string[] =\n allTspans.size() > 0\n ? Array.from(allTspans, (t) => t.textContent ?? '')\n : [textSel.text() ?? ''];\n\n const escaped = breakOnChars.map((c) =>\n c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n );\n const delimRe = escaped.length\n ? new RegExp(`(${escaped.join('|')})`, 'g')\n : null;\n\n const tokens: string[] = [];\n\n const splitByDelims = (s: string): string[] => {\n if (!delimRe) return [s];\n return s.split(delimRe).filter(Boolean); // keeps delimiters as their own elements\n };\n\n chunks.forEach((chunk, chunkIdx) => {\n const wordsInChunk = chunk.trim().split(/\\s+/).filter(Boolean);\n\n wordsInChunk.forEach((w, wIdx) => {\n // Split the \"word\" on delimiter characters, preserving them as tokens\n const parts = splitByDelims(w);\n for (const p of parts) {\n if (breakOnChars.includes(p)) {\n // Delimiter token\n if (spaceAroundBreakChars) {\n tokens.push(' ', p, ' ');\n } else {\n tokens.push(p);\n }\n } else {\n // Normal text segment\n tokens.push(p);\n }\n }\n // Add a single space between words that came from the same chunk\n if (wIdx < wordsInChunk.length - 1) tokens.push(' ');\n });\n\n // Add a single space between tspans\n if (allTspans.size() > 0 && chunkIdx < chunks.length - 1)\n tokens.push(' ');\n });\n\n return tokens;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrap } from './svg-text-wrap';\n\nconst DEFAULT = {\n _maintainXPosition: false,\n _maintainYPosition: false,\n _lineHeight: 1.1,\n _width: 100,\n _breakOnChars: [],\n _spaceAroundBreakChars: false,\n};\nexport class SvgTextWrapBuilder {\n protected _width: number;\n protected _maintainXPosition: boolean;\n protected _maintainYPosition: boolean;\n protected _lineHeight: number;\n protected _breakOnChars: string[];\n protected _spaceAroundBreakChars: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the width to wrap the text to.\n *\n * @default 100\n */\n width(width: number) {\n this._width = width;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the x position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a vertical bar chart.\n *\n * @default false\n */\n maintainXPosition(maintainXPosition: boolean) {\n this._maintainXPosition = maintainXPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the y position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a horizontal bar chart.\n *\n * @default false\n */\n maintainYPosition(maintainYPosition: boolean) {\n this._maintainYPosition = maintainYPosition;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the line height of the text.\n *\n * @default 1.1\n */\n lineHeight(lineHeight: number) {\n this._lineHeight = lineHeight;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the characters to break on when wrapping text.\n * By default, text will only break on spaces.\n *\n * @default []\n */\n breakOnChars(breakOnChars: string[]) {\n this._breakOnChars = breakOnChars;\n return this;\n }\n\n /**\n * OPTIONAL. If true, spaces will be added around break characters.\n *\n * This is useful when breaking on punctuation characters, to avoid words being stuck to punctuation.\n * For example, breaking on commas without spaces around them would result in \"word,\" at the end of one line and \"word\" at the start of the next line.\n *\n * @default false\n */\n spaceAroundBreakChars(spaceAroundBreakChars: boolean) {\n this._spaceAroundBreakChars = spaceAroundBreakChars;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n build(): SvgTextWrap {\n return new SvgTextWrap({\n width: this._width,\n maintainXPosition: this._maintainXPosition,\n maintainYPosition: this._maintainYPosition,\n lineHeight: this._lineHeight,\n breakOnChars: this._breakOnChars,\n spaceAroundBreakChars: this._spaceAroundBreakChars,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrap } from '../../svg-text-wrap';\nimport { AxisLabelOptions } from './axis-label-options';\n\nexport class AxisLabel implements AxisLabelOptions {\n anchor: 'start' | 'middle' | 'end';\n offset: {\n x: number;\n y: number;\n };\n position: 'start' | 'middle' | 'end';\n text: string;\n wrap: SvgTextWrap;\n\n constructor(options: AxisLabelOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrapBuilder } from '../../svg-text-wrap/svg-text-wrap-builder';\nimport { AxisLabel } from './axis-label';\n\nconst DEFAULT = {\n _offset: { x: 0, y: 0 },\n _position: 'middle',\n};\n\nexport class AxisLabelBuilder {\n protected _anchor: 'start' | 'middle' | 'end';\n protected _offset: {\n x: number;\n y: number;\n };\n protected _position: 'start' | 'middle' | 'end';\n protected _text: string;\n protected textWrapBuilder: SvgTextWrapBuilder;\n protected textWrapFunction: (wrap: SvgTextWrapBuilder) => void;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The [text-anchor](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor) for the axis label.\n *\n * If not provided or if called with null, the anchor will be determined by the position.\n *\n * @default specific to the position\n */\n anchor(value: 'start' | 'middle' | 'end' | null): this {\n if (value === null) {\n this._anchor = undefined;\n return this;\n }\n this._anchor = value;\n return this;\n }\n\n /**\n * OPTIONAL. The offset for the axis label from the position that would otherwise be created. Allows for fine-tuning the position of the label.\n *\n * Positive y values will move the label down, positive x values will move the label to the right.\n *\n * If not provided or if called with null, labels parallel to the axis will be placed at the far extent of the margin. Labels perpendicular to the axis will be placed at the axis line. The latter will likely need an offset.\n *\n * @default { x: 0, y: 0 }\n */\n offset(offset: null): this;\n offset(offset: { x?: number; y?: number }): this;\n offset(offset: { x?: number; y?: number } | null): this {\n if (offset === null) {\n this._offset = DEFAULT._offset;\n return this;\n }\n this._offset = {\n x: offset.x || 0,\n y: offset.y || 0,\n };\n return this;\n }\n\n /**\n * OPTIONAL. The position of the axis label relative to the axis.\n *\n * If the axis is horizontal, the options are 'start' is left, 'middle' is center, and 'end' is right.\n *\n * If the axis is vertical, the options are 'start' is top, 'middle' is center, and 'end' is bottom.\n *\n * @default 'middle'\n */\n position(value: 'start' | 'middle' | 'end'): this {\n this._position = value;\n return this;\n }\n\n /**\n * The text for the axis label.\n */\n text(value: string): this {\n this._text = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for wrapping the text of the label.\n *\n * To unset the wrap, call with null.\n */\n wrap(wrap: null): this;\n wrap(wrap: (wrap: SvgTextWrapBuilder) => void): this;\n wrap(wrap: ((wrap: SvgTextWrapBuilder) => void) | null): this {\n if (wrap === null) {\n this.textWrapFunction = undefined;\n return this;\n }\n this.textWrapFunction = wrap;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n _build(dimension: 'x' | 'y'): AxisLabel {\n if (this.textWrapFunction) this.createTextWrapBuilder(dimension);\n return new AxisLabel({\n anchor: this.getAnchorForDimension(dimension),\n position: this._position,\n offset: this._offset,\n text: this._text,\n wrap: this.textWrapBuilder?.build(),\n });\n }\n\n private createTextWrapBuilder(dimension: 'x' | 'y'): void {\n this.textWrapBuilder = new SvgTextWrapBuilder();\n const isRotatedYLabel = dimension === 'y' && this._position === 'middle';\n // set defaults but let user override setting defaults before calling wrap function\n if (isRotatedYLabel) {\n this.textWrapBuilder.maintainXPosition(false);\n this.textWrapBuilder.maintainYPosition(true);\n }\n this.textWrapFunction(this.textWrapBuilder);\n }\n\n private getAnchorForDimension(\n dimension: 'x' | 'y'\n ): 'start' | 'middle' | 'end' {\n if (this._anchor) return this._anchor;\n switch (this._position) {\n case 'start':\n return dimension === 'x' ? 'start' : 'end';\n case 'middle':\n return 'middle';\n case 'end':\n return 'end';\n }\n }\n}\n","import { VicAuxMarksBuilder } from '../../../marks';\nimport { AxisBaselineBuilder } from '../../baseline/axis-baseline-builder';\nimport { GridBuilder } from '../../grid/grid-builder';\nimport { AxisLabelBuilder } from '../../label/axis-label-builder';\n\nexport abstract class XyAxisBaseBuilder extends VicAuxMarksBuilder<void> {\n protected _axis: 'x' | 'y';\n protected _dimension: 'ordinal' | 'quantitative';\n protected baselineBuilder: AxisBaselineBuilder = new AxisBaselineBuilder();\n protected gridBuilder: GridBuilder;\n protected labelBuilder: AxisLabelBuilder;\n protected marksClass: string;\n\n /**\n * OPTIONAL. Specifies the configuration for the axis baseline. The baseline is the line that typically runs along the edge of the chart, from which tick marks and labels are drawn.\n *\n * @param baseline - A function that specifies properties for the axis baseline, or `null` to unset the baseline.\n *\n * If called with null, the default values of the baseline will be used.\n */\n baseline(baseline: (baseline: AxisBaselineBuilder) => void): this;\n baseline(baseline: null): this;\n baseline(baseline: (baseline: AxisBaselineBuilder) => void): this {\n this.baselineBuilder = new AxisBaselineBuilder();\n if (baseline === null) {\n return this;\n }\n baseline?.(this.baselineBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Specifies the configuration of grid lines for the axis. Grid lines are the lines that run perpendicular to the axis and intersect with tick marks.\n *\n * @param grid - A function that specifies properties for the grid lines, or `null` to unset the grid.\n *\n * If called with no argument, the default values of the grid will be used.\n */\n grid(grid: (grid: GridBuilder) => void): this;\n grid(): this;\n grid(grid: null): this;\n grid(grid?: ((grid: GridBuilder) => void) | null): this {\n if (grid === null) {\n this.gridBuilder = undefined;\n return this;\n }\n this.gridBuilder = new GridBuilder();\n grid?.(this.gridBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for an axis label.\n *\n * @param label - A function that specifies properties for an axis label, or `null` to unset the label.\n */\n label(label: (label: AxisLabelBuilder) => void): this;\n label(label: null): this;\n label(label: ((label: AxisLabelBuilder) => void) | null): this {\n if (label === null) {\n this.labelBuilder = undefined;\n return this;\n }\n this.labelBuilder = new AxisLabelBuilder();\n label(this.labelBuilder);\n return this;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrapOptions } from './tick-wrap-options';\n\n/**\n * A config that specifies how axis tick labels should wrap.\n */\nexport class TickWrap {\n maintainXPosition: boolean;\n maintainYPosition: boolean;\n lineHeight: number;\n breakOnChars: string[];\n spaceAroundBreakChars: boolean;\n width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number);\n\n constructor(options: TickWrapOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrap } from './tick-wrap';\n\nconst DEFAULT = {\n _wrapWidth: 'bandwidth',\n _lineHeight: 1.1,\n};\n\nexport class TickWrapBuilder {\n _width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number);\n _maintainXPosition: boolean;\n _maintainYPosition: boolean;\n _lineHeight: number;\n _breakOnChars: string[];\n _spaceAroundBreakChars: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the characters to break on when wrapping text.\n * By default, text will only break on spaces.\n *\n * @default []\n */\n breakOnChars(breakOnChars: string[]) {\n this._breakOnChars = breakOnChars;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the line-height property of the tick labels. Adjusting the line-height can useful when wrapping labels, particularly on a y-axis.\n *\n * @param value - The line-height of the tick labels, as a multiplier of the font size. For example, 1.1 is 110% of the font size, 1.5 is 150% of the font size, etc.\n */\n lineHeight(value: number | null) {\n if (value === null) {\n this._lineHeight = undefined;\n return this;\n }\n this._lineHeight = value;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the x position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a vertical bar chart.\n *\n * @default false\n */\n maintainXPosition(maintainXPosition: boolean) {\n this._maintainXPosition = maintainXPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the y position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a horizontal bar chart.\n *\n * @default false\n */\n maintainYPosition(maintainYPosition: boolean) {\n this._maintainYPosition = maintainYPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, spaces will be added around break characters.\n *\n * This is useful when breaking on punctuation characters, to avoid words being stuck to punctuation.\n * For example, breaking on commas without spaces around them would result in \"word,\" at the end of one line and \"word\" at the start of the next line.\n *\n * @default false\n */\n spaceAroundBreakChars(spaceAroundBreakChars: boolean) {\n this._spaceAroundBreakChars = spaceAroundBreakChars;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the width to wrap the text to. Can be a number, a function that takes the chart width and number of ticks, or 'bandwidth'.\n *\n * If 'bandwidth', the width will be the bandwidth of the scale.\n *\n * @default 'bandwidth'\n */\n width(width: 'bandwidth'): this;\n width(width: number): this;\n width(width: (chartWidth: number, numOfTicks: number) => number): this;\n width(width: null): this;\n width(\n width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number)\n | null\n ) {\n if (width === null) {\n this._width = undefined;\n return this;\n }\n this._width = width;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n _build(dimension: 'x' | 'y'): TickWrap {\n this.validate(dimension);\n return new TickWrap({\n width: this._width,\n maintainXPosition: this._maintainXPosition,\n maintainYPosition: this._maintainYPosition,\n lineHeight: this._lineHeight,\n breakOnChars: this._breakOnChars,\n spaceAroundBreakChars: this._spaceAroundBreakChars,\n });\n }\n\n private validate(dimension: 'x' | 'y'): void {\n this._maintainXPosition =\n this._maintainXPosition === undefined\n ? dimension === 'y'\n ? true\n : false\n : this._maintainXPosition;\n this._maintainYPosition =\n this._maintainYPosition === undefined\n ? dimension === 'x'\n ? false\n : true\n : this._maintainYPosition;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrap } from './tick-wrap/tick-wrap';\nimport { QuantitativeTicksOptions, TicksOptions } from './ticks-options';\n\nexport class Ticks<Tick> implements TicksOptions<Tick> {\n class: (d: Tick) => string;\n fontSize: number;\n format: string | ((value: Tick) => string);\n labelsDisplay: boolean;\n labelsStroke: string;\n labelsStrokeOpacity: number;\n labelsStrokeWidth: number;\n marksDisplay: boolean;\n rotate: number;\n size: number;\n sizeInner: number;\n sizeOuter: number;\n wrap: TickWrap;\n\n constructor(options: TicksOptions<Tick>) {\n safeAssign(this, options);\n }\n}\n\nexport class QuantitativeTicks<Tick> extends Ticks<Tick> {\n count: number;\n spacing: number;\n values: Tick[];\n\n constructor(options: QuantitativeTicksOptions<Tick>) {\n super(options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisTimeInterval } from 'd3';\nimport { TickWrapBuilder } from './tick-wrap/tick-wrap-builder';\nimport { QuantitativeTicks, Ticks } from './ticks';\n\nexport interface AxisSpecificTickBuilderOptions {\n _sizeOuter: number;\n}\n\nexport interface AxisSpecificQuantitativeTickBuilderOptions<Tick>\n extends AxisSpecificTickBuilderOptions {\n _format: string | ((value: Tick) => string);\n}\n\nconst DEFAULT = {\n _class: () => '',\n _labelsDisplay: true,\n _marksDisplay: true,\n _remove: false,\n _stroke: 'none',\n _strokeOpacity: 1,\n _strokeWidth: 3,\n};\n\nconst QUANT_DEFAULT = {\n _spacing: 40,\n};\n\nexport class TicksBuilder<Tick> {\n protected _class: (d: Tick) => string;\n protected _fontSize: number;\n protected _format: string | ((value: Tick) => string);\n protected _labelsDisplay: boolean;\n protected _rotate: number;\n protected _labelsStroke: string;\n protected _labelsStrokeOpacity: number;\n protected _labelsStrokeWidth: number;\n protected _marksDisplay: boolean;\n protected _size: number;\n protected _sizeInner: number;\n protected _sizeOuter: number;\n protected wrapBuilder: TickWrapBuilder;\n\n constructor(options: Partial<AxisSpecificTickBuilderOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG G element that corresponds to a single tick.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: Tick) => string): this;\n class(value: ((d: Tick) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the font size of the tick labels.\n *\n * @param value - The font size of the tick labels, in px.\n *\n * If not called, the default font size is D3's default, which is 10px.\n */\n fontSize(value: number | null): this {\n if (value === null) {\n this._fontSize = undefined;\n return this;\n }\n this._fontSize = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how tick labels will be formatted. The format can be a string or a function.\n *\n * @param value - Either a D3 format string, a function that takes a value and returns a string, or `null` to unset the format.\n *\n * If not called, the default value for quantitative axes is ',.1f'. If not called for an ordinal axis, tick labels will be the unformatted ordinal value.\n */\n format(format: string): this;\n format(format: (value: Tick) => string): this;\n format(format: null): this;\n format(format: string | ((value: Tick) => string) | null): this {\n if (format === null) {\n this._format = undefined;\n return this;\n }\n this._format = format;\n return this;\n }\n\n /**\n * OPTIONAL. If false, tick labels will be removed.\n *\n * @param value - `true` to retain all tick labels, `false` to remove all tick labels.\n *\n * If not called, the default value is `true`.\n */\n labelsDisplay(value: boolean): this {\n this._labelsDisplay = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the color of the stroke around the tick labels. Often used to improve the legibility of tick labels, for example, on dark backgrounds.\n *\n * @param value - The stroke of the tick labels.\n *\n * If not called, the default value is 'none'.\n */\n labelsStroke(value: string | null): this {\n if (value === null) {\n this._labelsStroke = DEFAULT._stroke;\n return this;\n }\n this._labelsStroke = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the opacity of the stroke applied around the tick labels.\n *\n * @param value - The opacity of the stroke around the tick labels.\n *\n * If not called, the default value is 1.\n */\n labelsStrokeOpacity(value: number | null): this {\n if (value === null) {\n this._labelsStrokeOpacity = undefined;\n return this;\n }\n this._labelsStrokeOpacity = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the width of the stroke around the tick labels. Often used to improve the legibility of tick labels, for example, on dark backgrounds.\n *\n * @param value - The width of the stroke around the tick labels.\n *\n * If not called, the default value is 3.\n */\n labelsStrokeWidth(value: number | null): this {\n if (value === null) {\n this._labelsStrokeWidth = undefined;\n return this;\n }\n this._labelsStrokeWidth = value;\n return this;\n }\n\n /**\n * OPTIONAL. If false, tick marks (lines) will be removed.\n *\n * @param value - `true` to retain all tick marks, `false` to remove all tick marks.\n *\n * If not called, the default value is `true`.\n */\n marksDisplay(value: boolean): this {\n this._marksDisplay = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the rotation of tick labels.\n *\n * @param value - The rotation of the tick labels in degrees, or `null` to unset the rotation.\n *\n * Positive values rotate clockwise, negative values rotate counterclockwise.\n *\n * If not called, ticks will not be rotated.\n */\n\n rotate(value: number | null): this {\n if (value === null) {\n this._rotate = undefined;\n return this;\n }\n this._rotate = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the size of inner and outer tick marks.\n *\n * @param value - The size of the ticks, in px.\n *\n * If not called or called with `null`, the default size is the D3 default size.\n *\n * If specified, this value will override any values set by `sizeInner` or `sizeOuter`.\n */\n size(value: number | null): this {\n if (value === null) {\n this._size = undefined;\n return this;\n }\n this._size = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the length of the inner ticks drawn by D3. Does not apply to the outermost ticks.\n *\n * @param value - The length of the inner ticks in pixels, or `null` to unset the value.\n *\n * If not called or called with `null`, the default value is the D3 default size.\n *\n */\n sizeInner(value: number | null): this {\n if (value === null) {\n this._sizeInner = undefined;\n return this;\n }\n this._sizeInner = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the length of the square ends of the domain path drawn by D3.\n *\n * @param value - The length of the square ends of the domain path in pixels, or `null` to unset the value.\n *\n * If not called on ordinal axes, the default value is 0. If not called on quantitative axes, no modification is made to D3's default value.\n */\n sizeOuter(value: number | null): this {\n if (value === null) {\n this._sizeOuter = undefined;\n return this;\n }\n this._sizeOuter = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how tick labels will be wrapped.\n *\n * @param wrap - A callback that specifies how tick labels will be wrapped, or `null` to unset the wrapping.\n *\n * If not called, the tick labels will not be wrapped.\n */\n wrap(wrap: (wrap: TickWrapBuilder) => void): this;\n wrap(wrap: null): this;\n wrap(wrap: (wrap: TickWrapBuilder) => void | null): this {\n if (wrap === null) {\n this.wrapBuilder = undefined;\n return this;\n }\n this.wrapBuilder = new TickWrapBuilder();\n wrap(this.wrapBuilder);\n return this;\n }\n\n _build(dimension: 'x' | 'y'): Ticks<Tick> {\n return new Ticks({\n class: this._class,\n fontSize: this._fontSize,\n format: this._format,\n labelsDisplay: this._labelsDisplay,\n labelsStroke: this._labelsStroke,\n labelsStrokeOpacity: this._labelsStrokeOpacity,\n labelsStrokeWidth: this._labelsStrokeWidth,\n marksDisplay: this._marksDisplay,\n rotate: this._rotate,\n size: this._size,\n sizeInner: this._sizeInner,\n sizeOuter: this._sizeOuter,\n wrap: this.wrapBuilder?._build(dimension),\n });\n }\n}\n\nexport class QuantitativeTicksBuilder<Tick> extends TicksBuilder<Tick> {\n private _count: number | AxisTimeInterval;\n private _spacing: number;\n private _values: Tick[];\n\n constructor(\n options: Partial<AxisSpecificQuantitativeTickBuilderOptions<Tick>>\n ) {\n super(options);\n safeAssign(this, DEFAULT);\n safeAssign(this, QUANT_DEFAULT);\n }\n\n /**\n * OPTIONAL. Approximately specifies the number of ticks for the axis.\n *\n * @param value - The number of ticks to pass to D3's axis.ticks(), or null to unset the number of ticks.\n *\n * If not called, a reasonable and valid default will be used based on the size of the chart.\n *\n * Note that this number will be passed to D3's `ticks()` method and therefore it can be an approximate number of ticks.\n *\n * If this method is called, the passed in number of ticks will be validated against the data domain and the value formatter for the axis. If the number of ticks is not valid—for example, if the ticks are formatted with %Y and there are three years of values in the data, and this method is called with 10, a valid number will be used instead.\n */\n count(value: number | AxisTimeInterval | null): this {\n if (value === null) {\n this._count = undefined;\n return this;\n }\n this._count = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies the an approximate spacing between ticks, in pixels.\n *\n * @param value - The spacing between ticks in pixels, or null to unset the spacing.\n *\n * If not called, the default value is 40. If `count` is set, this value will be ignored.\n */\n spacing(value: number | null): this {\n if (value === null) {\n this._spacing = undefined;\n return this;\n }\n this._spacing = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the values that will show up as ticks on the axis.\n *\n * @param values - An array of quantitative values to pass to D3's axis.tickValues(), or null to unset the tick values.\n *\n */\n values(values: Tick[] | null): this {\n if (values === null) {\n this._values = undefined;\n return this;\n }\n this._values = values;\n return this;\n }\n\n override _build(dimension: 'x' | 'y'): QuantitativeTicks<Tick> {\n return new QuantitativeTicks({\n class: this._class,\n count: this._count,\n fontSize: this._fontSize,\n format: this._format,\n labelsDisplay: this._labelsDisplay,\n labelsStroke: this._labelsStroke,\n labelsStrokeOpacity: this._labelsStrokeOpacity,\n labelsStrokeWidth: this._labelsStrokeWidth,\n marksDisplay: this._marksDisplay,\n rotate: this._rotate,\n size: this._size,\n sizeInner: this._sizeInner,\n sizeOuter: this._sizeOuter,\n spacing: this._spacing,\n values: this._values,\n wrap: this.wrapBuilder?._build(dimension),\n });\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { AuxMarksConfig } from '../../../marks';\nimport { AxisBaseline } from '../../baseline/axis-baseline';\nimport { Grid } from '../../grid/grid-config';\nimport { AxisLabel } from '../../label/axis-label';\nimport { Ticks } from '../../ticks/ticks';\nimport { XyAxisBaseOptions } from './xy-axis-options';\n\nexport abstract class XyAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n >\n extends AuxMarksConfig\n implements XyAxisBaseOptions\n{\n baseline: AxisBaseline;\n grid: Grid;\n label: AxisLabel;\n ticks: TicksConfig;\n\n abstract getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number;\n\n getValidatedNumTicks(numTicks: number): number {\n if (numTicks < 1) {\n return 1;\n }\n return Math.floor(numTicks);\n }\n}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\nimport { TicksOptions } from '../ticks/ticks-options';\n\nexport interface VicOrdinalAxisOptions<Tick extends DataValue>\n extends XyAxisBaseOptions {\n ticks: TicksOptions<Tick>;\n}\n\nexport function mixinOrdinalAxisConfig<\n Tick extends DataValue,\n T extends AbstractConstructor<XyAxisConfig<Tick, Ticks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base implements VicOrdinalAxisOptions<Tick> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n safeAssign(this, args[0]);\n }\n }\n return Mixin;\n}\n\nexport abstract class VicOrdinalAxisConfig<\n Tick extends DataValue,\n> extends mixinOrdinalAxisConfig(XyAxisConfig)<Tick, Ticks<Tick>> {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\n\nexport interface XAxisOptions extends XyAxisBaseOptions {\n /**\n * The side of the chart on which the axis will be placed.\n */\n side: 'top' | 'bottom';\n}\n\nexport function mixinXAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxisConfig<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n side: 'top' | 'bottom';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n if (args.length > 0) {\n safeAssign(this, args[0]);\n }\n }\n\n getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number {\n const d3SuggestedDefault = dimensions.width / spacing;\n return this.getValidatedNumTicks(d3SuggestedDefault);\n }\n }\n return Mixin;\n}\n\nexport class XAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n> extends mixinXAxisConfig(XyAxisConfig)<Tick, TicksConfig> {}\n","import { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicOrdinalAxisOptions,\n mixinOrdinalAxisConfig,\n} from '../ordinal/ordinal-axis-config';\nimport { Ticks } from '../ticks/ticks';\nimport { XAxisOptions, mixinXAxisConfig } from '../x/x-axis-config';\n\ntype XyAxisConfigType<T extends DataValue> = AbstractConstructor<\n XyAxisConfig<T, Ticks<T>>\n>;\n\nconst AbstractXOrdinalAxis = mixinXAxisConfig<\n DataValue,\n Ticks<DataValue>,\n XyAxisConfigType<DataValue>\n>(mixinOrdinalAxisConfig<DataValue, XyAxisConfigType<DataValue>>(XyAxisConfig));\n\nexport class VicXOrdinalAxisConfig<\n Tick extends DataValue,\n> extends AbstractXOrdinalAxis {\n constructor(options: XAxisOptions & VicOrdinalAxisOptions<Tick>) {\n super(options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { TicksBuilder } from '../ticks/ticks-builder';\nimport { VicXOrdinalAxisConfig } from './x-ordinal-axis-config';\n\nconst DEFAULT = {\n _side: 'bottom',\n _baseline: {\n display: false,\n },\n};\n\nconst TICK_DEFAULT = {\n _sizeOuter: 0,\n};\n\n@Injectable()\nexport class VicXOrdinalAxisConfigBuilder<\n Tick extends DataValue,\n> extends XyAxisBaseBuilder {\n private _side: 'top' | 'bottom';\n private ticksBuilder: TicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `bottom`.\n */\n side(value: 'top' | 'bottom'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: TicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: TicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): TicksBuilder<Tick> {\n return new TicksBuilder<Tick>(TICK_DEFAULT);\n }\n\n getConfig(): VicXOrdinalAxisConfig<Tick> {\n return new VicXOrdinalAxisConfig<Tick>({\n baseline: this.baselineBuilder?._build('ordinal'),\n grid: this.gridBuilder?._build('x', 'ordinal'),\n label: this.labelBuilder?._build('x'),\n marksClass: 'vic-axis-x-ordinal',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('x'),\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { select, Selection } from 'd3';\nimport { GenericScale } from '../../core';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAuxMarks } from '../../marks';\nimport { SvgTextWrap } from '../../svg-text-wrap/svg-text-wrap';\nimport { Ticks } from '../ticks/ticks';\nimport { XyAxisConfig } from './config/xy-axis-config';\n\nexport type XyAxisScale = {\n useTransition: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: GenericScale<any, any>;\n};\n\ntype AxisSvgElements = 'gridGroup' | 'gridLine' | 'label' | 'axisGroup';\n\n/**\n * A base directive for all axes.\n */\n@Directive()\nexport abstract class XyAxis<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n> extends XyAuxMarks<unknown, XyAxisConfig<Tick, TicksConfig>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axis: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axisFunction: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axisGroup: Selection<SVGGElement, any, SVGGElement, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n gridGroup: Selection<SVGGElement, any, SVGGElement, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n // used to ensure that a zero axis does not transition in position from baseline on first draw\n isFirstDraw = true;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract setAxisFunction(): any;\n abstract setTranslate(): void;\n abstract setTicks(tickFormat: string | ((value: Tick) => string)): void;\n abstract setScale(): void;\n abstract createLabel(): void;\n abstract getBaselineTranslate(): string | null;\n\n get class(): Record<AxisSvgElements, string> {\n return {\n gridGroup: 'vic-grid-group',\n gridLine: 'vic-grid-line',\n axisGroup: 'vic-axis-group',\n label: 'vic-axis-label',\n };\n }\n\n override initFromConfig(): void {\n this.drawMarks();\n }\n\n setAxisFromScaleAndConfig(): void {\n this.axis = this.axisFunction(this.scale);\n\n this.setTickSize();\n if (this.config.ticks.format) {\n this.setTicks(this.config.ticks.format);\n }\n }\n\n setTickSize(): void {\n if (this.config.ticks.size !== undefined) {\n this.axis.tickSize(this.config.ticks.size);\n } else {\n if (this.config.ticks.sizeInner !== undefined) {\n this.axis.tickSizeInner(this.config.ticks.sizeInner);\n }\n if (this.config.ticks.sizeOuter !== undefined) {\n this.axis.tickSizeOuter(this.config.ticks.sizeOuter);\n }\n }\n const baselineTranslate = this.getBaselineTranslate();\n if (baselineTranslate) {\n this.axis.tickSizeOuter(0);\n }\n }\n\n drawMarks(): void {\n this.setAxisFunction();\n this.setTranslate();\n this.setScale();\n this.setAxisFromScaleAndConfig();\n this.drawAxis();\n this.isFirstDraw = false;\n }\n\n drawAxis(): void {\n if (!this.axisGroup) {\n this.axisGroup = select(this.elRef.nativeElement)\n .append('g')\n .attr('class', this.class.axisGroup);\n }\n\n // Avoid odd animations of ticks or domain lines when those things move between draws\n this.axisGroup.select('.domain').remove();\n this.axisGroup.selectAll('.tick').remove();\n\n this.axisGroup\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(this.getTransition(this.axisGroup))\n .call(this.axis)\n .on('end', () => {\n this.processTicks();\n this.processDomain();\n this.drawGrid();\n });\n\n this.processTickLabels();\n if (this.config.label) {\n this.createLabel();\n }\n }\n\n processTicks(): void {\n const tickText = select(this.elRef.nativeElement).selectAll('.tick text');\n if (this.config.ticks.class) {\n select(this.elRef.nativeElement)\n .selectAll<SVGGElement, Tick>('.tick')\n .each((d, i, nodes) => {\n const labelClass = this.config.ticks.class(d);\n if (labelClass) {\n select(nodes[i]).classed(labelClass, true);\n } else {\n ///remove any previous class\n select(nodes[i]).attr('class', 'tick');\n }\n });\n }\n if (this.config.ticks.fontSize) {\n this.setTickFontSize(tickText);\n }\n // TODO: Determine if this needs to be called from the on('end') of the axisGroup transition\n // or if if should be moved to processTickLabels. I think there is a reason it is here. (?)\n if (this.config.ticks.wrap && this.config.ticks.wrap.width !== undefined) {\n this.wrapAxisTickText(tickText);\n }\n if (this.config.ticks.marksDisplay === false) {\n const marks = select(this.elRef.nativeElement).selectAll('.tick line');\n marks.remove();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setTickFontSize(tickTextSelection: any): void {\n tickTextSelection.attr('font-size', this.config.ticks.fontSize);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapAxisTickText(tickTextSelection: any): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { width, ...properties } = this.config.ticks.wrap;\n\n let wrapWidth: number;\n if (this.config.ticks.wrap.width === 'bandwidth') {\n wrapWidth = this.scale.bandwidth();\n } else if (typeof this.config.ticks.wrap.width === 'function') {\n const chartWidth = this.scale.range()[1] - this.scale.range()[0];\n const numOfTicks = select(this.elRef.nativeElement)\n .selectAll('.tick')\n .size();\n wrapWidth = this.config.ticks.wrap.width(chartWidth, numOfTicks);\n } else {\n wrapWidth = this.config.ticks.wrap.width;\n }\n const wrap = new SvgTextWrap({ ...properties, width: wrapWidth });\n wrap.wrap(tickTextSelection);\n }\n\n processDomain(): void {\n const zeroAxisTranslate = this.getBaselineTranslate();\n\n if (\n this.config.baseline.zeroBaseline.display &&\n zeroAxisTranslate !== null\n ) {\n this.axisGroup.call((g) =>\n g\n .select('.domain')\n .attr('transform', zeroAxisTranslate)\n .attr('class', 'domain baseline zero-axis-baseline')\n .attr('stroke-dasharray', this.config.baseline.zeroBaseline.dasharray)\n );\n }\n\n if (zeroAxisTranslate === null) {\n this.axisGroup.call((g) =>\n g\n .select('.domain')\n .attr('class', 'domain baseline')\n .attr('transform', null)\n .attr('stroke-dasharray', null)\n );\n }\n\n if (!this.config.baseline.display && zeroAxisTranslate === null) {\n this.axisGroup.call((g) => g.select('.domain').remove());\n }\n }\n\n processTickLabels(): void {\n if (this.config.ticks.labelsDisplay === false) {\n this.axisGroup.call((g) => g.selectAll('.tick text').remove());\n }\n\n if (this.config.ticks.rotate) {\n this.axisGroup.call((g) =>\n g\n .selectAll('.tick text')\n .style('transform', `rotate(-${this.config.ticks.rotate}deg)`)\n .attr('text-anchor', 'end')\n .attr('alignment-baseline', 'start')\n );\n }\n\n if (\n this.config.ticks.labelsStroke ||\n this.config.ticks.labelsStrokeOpacity ||\n this.config.ticks.labelsStrokeWidth\n ) {\n this.axisGroup.call((g) =>\n g\n .selectAll('.tick text')\n .attr('stroke', this.config.ticks.labelsStroke)\n .attr('stroke-opacity', this.config.ticks.labelsStrokeOpacity)\n .attr('stroke-width', this.config.ticks.labelsStrokeWidth)\n );\n }\n }\n\n otherAxisHasPosAndNegValues(dimension: 'x' | 'y'): boolean {\n const otherDimension = dimension === 'x' ? 'y' : 'x';\n const domain = this.scales[otherDimension].domain();\n if (domain.length > 2 || isNaN(domain[0]) || isNaN(domain[1])) {\n return false;\n }\n return domain[0] < 0 && domain[1] > 0;\n }\n\n drawGrid(): void {\n if (this.config.grid) {\n if (!this.gridGroup) {\n this.gridGroup = select(this.elRef.nativeElement)\n .append('g')\n .attr('class', this.class.gridGroup);\n }\n\n this.gridGroup\n .transition(this.getTransition(this.gridGroup))\n .call(this.axis.tickSizeInner(this.getGridLineLength()))\n .selectAll('.tick')\n .attr('class', `tick ${this.class.gridLine}`)\n .style('display', (_, i) =>\n this.config.grid.filter(i) ? null : 'none'\n )\n .select('line')\n .attr('stroke', this.config.grid.stroke.color)\n .attr('stroke-dasharray', this.config.grid.stroke.dasharray)\n .attr('stroke-width', this.config.grid.stroke.width)\n .attr('opacity', this.config.grid.stroke.opacity)\n .attr('stroke-linecap', this.config.grid.stroke.linecap)\n .attr('stroke-linejoin', this.config.grid.stroke.linejoin);\n\n this.gridGroup.call((g) => {\n g.selectAll('text').remove();\n g.selectAll('.domain').remove();\n });\n } else {\n select(this.elRef.nativeElement)\n .select(`.${this.class.gridGroup}`)\n .remove();\n\n this.gridGroup = undefined;\n }\n }\n\n getGridLineLength(): number {\n const gridLineScale =\n this.config.grid.axis === 'x' ? this.scales.y : this.scales.x;\n return -1 * Math.abs(gridLineScale.range()[1] - gridLineScale.range()[0]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTransition(selection: any): any {\n const transitionDuration = this.isFirstDraw\n ? 0\n : this.getTransitionDuration();\n return selection.transition().duration(transitionDuration);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { format, utcFormat } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { VicOrdinalAxisConfig as OrdinalAxisConfig } from './ordinal-axis-config';\n\nexport function ordinalAxisMixin<\n Tick extends DataValue,\n T extends AbstractConstructor<XyAxis<Tick, Ticks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: OrdinalAxisConfig<Tick>;\n\n setTicks(tickFormat: string | ((value: Tick) => string)): void {\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n }\n\n return Mixin;\n}\n","import { Directive, Input } from '@angular/core';\nimport { axisBottom, axisTop } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { XAxisConfig } from './x-axis-config';\n\nexport function xAxisMixin<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxis<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: XAxisConfig<Tick, TicksConfig>;\n translate: string;\n\n setTranslate(): void {\n const translate = this.getTranslateDistance();\n this.translate = `translate(0, ${translate})`;\n }\n\n getTranslateDistance(): number {\n return this.config.side === 'top'\n ? this.getTopTranslate()\n : this.getBottomTranslate();\n }\n\n getTopTranslate(): number {\n return this.scales.y.range()[1];\n }\n\n getBottomTranslate(): number {\n return this.scales.y.range()[0];\n }\n\n getBaselineTranslate(): string | null {\n if (!this.otherAxisHasPosAndNegValues('x')) return null;\n\n const rangeIndexForSide = this.config.side === 'top' ? 1 : 0;\n const translateDistance =\n this.scales.y(0) - this.scales.y.range()[rangeIndexForSide];\n return `translate(0, ${translateDistance})`;\n }\n\n setScale(): void {\n this.scale = this.scales.x;\n }\n\n setAxisFunction(): void {\n this.axisFunction = this.config.side === 'top' ? axisTop : axisBottom;\n }\n\n createLabel(): void {\n const config = this.config.label;\n if (!config) return;\n\n const spaceFromMarginEdge = 4;\n let x = config.offset.x || 0;\n let y = config.offset.y || 0;\n\n y +=\n this.config.side === 'top'\n ? this.chart.config.margin.top * -1 + spaceFromMarginEdge\n : this.chart.config.margin.bottom - spaceFromMarginEdge;\n\n let anchor: 'start' | 'middle' | 'end';\n const range = this.scales.x.range();\n\n if (config.position === 'start') {\n x += range[0];\n anchor = config.anchor || 'start';\n } else if (config.position === 'middle') {\n x += (range[1] - range[0]) / 2 + range[0];\n anchor = config.anchor || 'middle';\n } else {\n x += range[1];\n anchor = config.anchor || 'end';\n }\n\n let label = this.axisGroup.select<SVGTextElement>(`.${this.class.label}`);\n const needsInit = label.empty();\n\n if (needsInit) {\n label = this.axisGroup\n .append<SVGTextElement>('text')\n .attr('class', this.class.label);\n }\n\n label\n .text(this.config.label.text)\n .attr('text-anchor', anchor)\n .attr('y', y)\n .style('visibility', config.wrap ? 'hidden' : 'visible');\n\n if (config.wrap) {\n requestAnimationFrame(() => {\n this.config.label.wrap.wrap(label);\n label.attr('x', x).style('visibility', 'visible');\n\n label.selectAll('tspan').attr('x', x);\n });\n } else {\n label.attr('x', x);\n }\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { ordinalAxisMixin } from '../ordinal/ordinal-axis';\nimport { Ticks } from '../ticks/ticks';\nimport { xAxisMixin } from '../x/x-axis';\n\nconst XOrdinalAxis = xAxisMixin(\n ordinalAxisMixin(XyAxis<DataValue, Ticks<DataValue>>)\n);\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-x-ordinal-axis]',\n template: '',\n styles: [\n `\n .vic-axis-x-ordinal .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class XOrdinalAxisComponent extends XOrdinalAxis {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { QuantitativeTicksOptions } from '../ticks/ticks-options';\n\nexport interface VicQuantitativeAxisOptions<Tick extends ContinuousValue>\n extends XyAxisBaseOptions {\n ticks: QuantitativeTicksOptions<Tick>;\n}\n\nexport function mixinQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n T extends AbstractConstructor<XyAxisConfig<Tick, QuantitativeTicks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin\n extends Base\n implements VicQuantitativeAxisOptions<Tick>\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n if (args.length > 0) {\n safeAssign(this, args[0]);\n }\n }\n }\n return Mixin;\n}\n\nexport abstract class VicQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends mixinQuantitativeAxisConfig(XyAxisConfig)<\n Tick,\n QuantitativeTicks<Tick>\n> {}\n","import { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicQuantitativeAxisOptions,\n mixinQuantitativeAxisConfig,\n} from '../quantitative/quantitative-axis-config';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { XAxisOptions, mixinXAxisConfig } from '../x/x-axis-config';\n\ntype XyAxisConfigType<T extends ContinuousValue> = AbstractConstructor<\n XyAxisConfig<T, QuantitativeTicks<T>>\n>;\n\nconst AbstractXQuantitativeAxis = mixinXAxisConfig<\n ContinuousValue,\n QuantitativeTicks<ContinuousValue>,\n XyAxisConfigType<ContinuousValue>\n>(\n mixinQuantitativeAxisConfig<\n ContinuousValue,\n XyAxisConfigType<ContinuousValue>\n >(XyAxisConfig)\n);\n\nexport class VicXQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends AbstractXQuantitativeAxis {\n constructor(options: XAxisOptions & VicQuantitativeAxisOptions<Tick>) {\n super(options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { QuantitativeTicksBuilder } from '../ticks/ticks-builder';\nimport { VicXQuantitativeAxisConfig } from './x-quantitative-axis-config';\n\nconst DEFAULT = {\n _side: 'bottom',\n _removeDomainLine: false,\n _zeroAxis: { strokeDasharray: '2', useZeroAxis: true },\n};\n\nconst TICK_DEFAULT = {\n _format: ',.1f',\n};\n\n@Injectable()\nexport class VicXQuantitativeAxisConfigBuilder<\n Tick extends ContinuousValue,\n> extends XyAxisBaseBuilder {\n private ticksBuilder: QuantitativeTicksBuilder<Tick>;\n private _side: 'top' | 'bottom';\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `bottom`.\n */\n side(value: 'top' | 'bottom'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: QuantitativeTicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: QuantitativeTicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): QuantitativeTicksBuilder<Tick> {\n return new QuantitativeTicksBuilder<Tick>(TICK_DEFAULT);\n }\n\n getConfig(): VicXQuantitativeAxisConfig<Tick> {\n return new VicXQuantitativeAxisConfig<Tick>({\n baseline: this.baselineBuilder._build('quantitative'),\n grid: this.gridBuilder?._build('x', 'quantitative'),\n label: this.labelBuilder?._build('x'),\n marksClass: 'vic-axis-x-quantitative',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('x'),\n });\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AxisTimeInterval, format, utcFormat } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { VicQuantitativeAxisConfig as QuantitativeAxisConfig } from './quantitative-axis-config';\n\nexport function quantitativeAxisMixin<\n Tick extends ContinuousValue,\n T extends AbstractConstructor<XyAxis<Tick, QuantitativeTicks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: QuantitativeAxisConfig<Tick>;\n\n setTicks(tickFormat: string | ((value: Tick) => string)): void {\n if (this.config.ticks.values) {\n this.setSpecifiedTickValues(tickFormat);\n } else {\n this.setUnspecifiedTickValues(tickFormat);\n }\n }\n\n setSpecifiedTickValues(\n tickFormat: string | ((value: Tick) => string)\n ): void {\n const validTickValues = this.getValidTickValues();\n this.axis.tickValues(validTickValues);\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n\n getValidTickValues(): Tick[] {\n const domain = this.scale.domain();\n const validValues = [];\n this.config.ticks.values.forEach((value) => {\n if (domain[0] <= value && value <= domain[1]) {\n validValues.push(value);\n }\n });\n return validValues;\n }\n\n setUnspecifiedTickValues(\n tickFormat: string | ((value: Tick) => string)\n ): void {\n const validNumTicks = this.getSuggestedNumTicks(tickFormat);\n this.axis.ticks(validNumTicks);\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n\n getSuggestedNumTicks(\n tickFormat: string | ((value: Tick) => string)\n ): number | AxisTimeInterval {\n let numSuggestedTicks = this.getNumTicks();\n if (\n typeof tickFormat === 'string' &&\n typeof numSuggestedTicks === 'number'\n ) {\n numSuggestedTicks = Math.round(numSuggestedTicks);\n\n if (this.scale.domain()[0] instanceof Date) {\n const maxTicks = this.getMaxTicksForDateFormat(tickFormat);\n if (maxTicks !== null) {\n return Math.min(numSuggestedTicks, maxTicks);\n }\n }\n if (tickFormat.includes('.')) {\n return this.getValidNumTicksForNumberFormatString(\n numSuggestedTicks,\n tickFormat\n );\n }\n return numSuggestedTicks;\n } else {\n return numSuggestedTicks;\n }\n }\n\n getNumTicks(): number | AxisTimeInterval {\n return (\n this.config.ticks.count ||\n this.config.getNumTicksBySpacing(this.config.ticks.spacing, {\n height: this.chart.config.height,\n width: this.chart.config.width,\n })\n );\n }\n\n getValidNumTicksForNumberFormatString(\n numTicks: number,\n tickFormat: string\n ): number {\n let numDecimalPlaces = Number(tickFormat.split('.')[1][0]);\n if (tickFormat.includes('%')) {\n numDecimalPlaces = numDecimalPlaces + 2;\n }\n const [start, end] = this.scale.domain();\n const range = end - start;\n const minStep = Math.pow(10, -1 * numDecimalPlaces);\n const rawCount = range / minStep;\n const numValidTicks = Math.round(rawCount);\n if (numTicks < numValidTicks) {\n return numTicks;\n } else {\n return numValidTicks;\n }\n }\n\n getMaxTicksForDateFormat(tickFormat: string): number | null {\n const [startDate, endDate] = this.scale.domain() as [Date, Date];\n\n // Year-only formatters: %Y, %y\n if (tickFormat === '%Y' || tickFormat === '%y') {\n const startYear = startDate.getUTCFullYear();\n const endYear = endDate.getUTCFullYear();\n return endYear - startYear + 1;\n }\n\n // Quarter formatter: %Y Q%q\n if (tickFormat === '%Y Q%q') {\n const startYear = startDate.getUTCFullYear();\n const startQuarter = Math.floor(startDate.getUTCMonth() / 3);\n const endYear = endDate.getUTCFullYear();\n const endQuarter = Math.floor(endDate.getUTCMonth() / 3);\n\n return (endYear - startYear) * 4 + (endQuarter - startQuarter) + 1;\n }\n\n // Month-year formatters: %B %Y, %b %Y\n if (tickFormat === '%B %Y' || tickFormat === '%b %Y') {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n const endYear = endDate.getUTCFullYear();\n const endMonth = endDate.getUTCMonth();\n\n return (endYear - startYear) * 12 + (endMonth - startMonth) + 1;\n }\n\n // Full date formatters: %B %d, %Y\n if (\n tickFormat === '%B %d, %Y' ||\n tickFormat === '%m/%d/%Y' ||\n tickFormat === '%Y-%m-%d'\n ) {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const daysDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n return daysDiff + 1;\n }\n\n // Additional common time formatters for completeness\n\n // Month formatters: %B (full month), %b (abbreviated), %m (numeric)\n if (tickFormat === '%B' || tickFormat === '%b' || tickFormat === '%m') {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n const endYear = endDate.getUTCFullYear();\n const endMonth = endDate.getUTCMonth();\n\n return (endYear - startYear) * 12 + (endMonth - startMonth) + 1;\n }\n\n // Day formatters: %d (day of month), %e (day of month with space), %j (day of year)\n if (tickFormat === '%d' || tickFormat === '%e' || tickFormat === '%j') {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const daysDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n return daysDiff + 1;\n }\n\n // Week formatters: %U, %W (week of year)\n if (tickFormat === '%U' || tickFormat === '%W') {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const weeksDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24 * 7));\n return weeksDiff + 1;\n }\n\n // For composite formats or unrecognized formats, return null to use default logic\n return null;\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ContinuousValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { quantitativeAxisMixin } from '../quantitative/quantitative-axis';\nimport { QuantitativeTicks, Ticks } from '../ticks/ticks';\nimport { xAxisMixin } from '../x/x-axis';\n\ntype XyAxisType<T extends ContinuousValue> = AbstractConstructor<\n XyAxis<T, QuantitativeTicks<T>>\n>;\n\nconst XQuantitativeAxis = xAxisMixin<\n ContinuousValue,\n Ticks<ContinuousValue>,\n XyAxisType<ContinuousValue>\n>(quantitativeAxisMixin<ContinuousValue, XyAxisType<ContinuousValue>>(XyAxis));\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-x-quantitative-axis]',\n template: '',\n styles: [\n `\n .vic-axis-x-quantitative .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class XQuantitativeAxisComponent extends XQuantitativeAxis {}\n","import { Directive, Input } from '@angular/core';\nimport { axisLeft, axisRight } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { YAxisConfig } from './y-axis-config';\n\n/**\n * A mixin that extends `XyAxis` with the functionality needed for a y-axis.\n *\n * For internal library use only.\n */\nexport function yAxisMixin<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxis<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: YAxisConfig<Tick, TicksConfig>;\n translate: string;\n\n setAxisFunction(): void {\n this.axisFunction = this.config.side === 'left' ? axisLeft : axisRight;\n }\n\n setTranslate(): void {\n const translate = this.getTranslateDistance();\n this.translate = `translate(${translate}, 0)`;\n }\n\n getTranslateDistance(): number {\n const range = this.scales.x.range();\n return this.config.side === 'left'\n ? this.getLeftTranslate(range)\n : this.getRightTranslate(range);\n }\n\n getLeftTranslate(range: [number, number]): number {\n return range[0];\n }\n\n getRightTranslate(range: [number, number]): number {\n return range[1];\n }\n\n getBaselineTranslate(): string | null {\n if (!this.otherAxisHasPosAndNegValues('y')) return null;\n\n const rangeIndexForSide = this.config.side === 'left' ? 0 : 1;\n const translateDistance =\n this.scales.x(0) - this.scales.x.range()[rangeIndexForSide];\n return `translate(${translateDistance}, 0)`;\n }\n\n setScale(): void {\n this.scale = this.scales.y;\n }\n\n initNumTicks(): number {\n // value mimics D3's default\n const defaultNumTicks = this.chart.config.height / 50;\n if (defaultNumTicks < 1) {\n return 1;\n } else {\n return Math.floor(defaultNumTicks);\n }\n }\n\n createLabel(): void {\n const config = this.config.label;\n if (!config) return;\n\n let y = config.offset.y;\n let x = config.offset.x;\n let anchor: 'start' | 'middle' | 'end';\n let rotate: string | null = null;\n let alignmentBaseline = null;\n const range = this.scales.y.range();\n\n if (config.position === 'start') {\n y += range[1];\n anchor = config.anchor || 'end';\n } else if (config.position === 'middle') {\n rotate = 'rotate(-90)';\n x = config.offset.x * -1;\n y = config.offset.y;\n y += (range[0] - range[1]) / 2 + +this.chart.config.margin.top;\n x +=\n this.config.side === 'left'\n ? this.chart.config.margin.left\n : this.chart.config.width;\n anchor = config.anchor || 'middle';\n alignmentBaseline =\n this.config.side === 'left' ? 'hanging' : 'baseline';\n } else {\n y += range[0];\n anchor = config.anchor || 'end';\n }\n\n let label = this.axisGroup.select<SVGTextElement>(`.${this.class.label}`);\n const needsInit = label.empty();\n\n if (needsInit) {\n label = this.axisGroup.append('text').attr('class', this.class.label);\n }\n\n label.text(this.config.label.text);\n\n if (rotate) {\n const edgeOffset = this.config.side === 'left' ? 1 : -1;\n const rotatedX = y * -1;\n const rotatedY =\n this.config.side === 'left' ? x * -1 : this.chart.config.margin.right;\n\n label.style('visibility', 'hidden');\n\n if (config.wrap) {\n requestAnimationFrame(() => {\n label.attr('x', x).attr('y', y);\n this.config.label.wrap.maintainXPosition = false;\n this.config.label.wrap.wrap(label);\n label.attr('transform', rotate).style('visibility', 'visible');\n\n label\n .selectAll('tspan')\n .attr('x', rotatedX)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline);\n\n label.selectAll('tspan').attr('y', rotatedY + edgeOffset);\n });\n } else {\n label\n .attr('x', rotatedX)\n .attr('y', rotatedY + edgeOffset)\n .attr('transform', rotate)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline)\n .style('visibility', 'visible');\n }\n } else {\n label\n .attr('x', x)\n .attr('y', y)\n .attr('transform', null)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline);\n\n if (config.wrap) {\n label.style('visibility', 'hidden');\n requestAnimationFrame(() => {\n this.config.label.wrap.wrap(label);\n label.style('visibility', 'visible');\n });\n }\n }\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { ordinalAxisMixin } from '../ordinal/ordinal-axis';\nimport { Ticks } from '../ticks/ticks';\nimport { yAxisMixin } from '../y/y-axis';\n\nconst YOrdinalAxis = yAxisMixin(\n ordinalAxisMixin(XyAxis<DataValue, Ticks<DataValue>>)\n);\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-y-ordinal-axis]',\n template: '',\n styles: [\n `\n .vic-axis-y-ordinal .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class YOrdinalAxisComponent extends YOrdinalAxis {}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ContinuousValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { quantitativeAxisMixin } from '../quantitative/quantitative-axis';\nimport { QuantitativeTicks, Ticks } from '../ticks/ticks';\nimport { yAxisMixin } from '../y/y-axis';\n\ntype XyAxisType<T extends ContinuousValue> = AbstractConstructor<\n XyAxis<T, QuantitativeTicks<T>>\n>;\n\nconst YQuantitativeAxis = yAxisMixin<\n ContinuousValue,\n Ticks<ContinuousValue>,\n XyAxisType<ContinuousValue>\n>(quantitativeAxisMixin<ContinuousValue, XyAxisType<ContinuousValue>>(XyAxis));\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-y-quantitative-axis]',\n template: '',\n styles: [\n `\n .vic-axis-y-quantitative .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class YQuantitativeAxisComponent extends YQuantitativeAxis {}\n","import { NgModule } from '@angular/core';\nimport { XOrdinalAxisComponent } from './x-ordinal/x-ordinal-axis.component';\nimport { XQuantitativeAxisComponent } from './x-quantitative/x-quantitative-axis.component';\nimport { YOrdinalAxisComponent } from './y-ordinal/y-ordinal-axis.component';\nimport { YQuantitativeAxisComponent } from './y-quantitative-axis/y-quantitative-axis.component';\n@NgModule({\n imports: [\n YQuantitativeAxisComponent,\n YOrdinalAxisComponent,\n XQuantitativeAxisComponent,\n XOrdinalAxisComponent,\n ],\n exports: [\n YQuantitativeAxisComponent,\n YOrdinalAxisComponent,\n XQuantitativeAxisComponent,\n XOrdinalAxisComponent,\n ],\n})\nexport class VicXyAxisModule {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\n\nexport interface YAxisOptions extends XyAxisBaseOptions {\n /**\n * The side of the chart on which the axis will be placed.\n */\n side: 'left' | 'right';\n}\n\nexport function mixinYAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxisConfig<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base implements YAxisOptions {\n side: 'left' | 'right';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n safeAssign(this, args[0]);\n this.side = this.side ?? 'left';\n }\n\n getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number {\n const d3SuggestedDefault = dimensions.height / spacing;\n return this.getValidatedNumTicks(d3SuggestedDefault);\n }\n }\n return Mixin;\n}\n\nexport class YAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n> extends mixinYAxisConfig(XyAxisConfig)<Tick, TicksConfig> {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicOrdinalAxisOptions,\n mixinOrdinalAxisConfig,\n} from '../ordinal/ordinal-axis-config';\nimport { Ticks } from '../ticks/ticks';\nimport { YAxisOptions, mixinYAxisConfig } from '../y/y-axis-config';\n\ntype XyAxisConfigType<T extends DataValue> = AbstractConstructor<\n XyAxisConfig<T, Ticks<T>>\n>;\n\nconst AbstractYOrdinalAxis = mixinYAxisConfig<\n DataValue,\n Ticks<DataValue>,\n XyAxisConfigType<DataValue>\n>(mixinOrdinalAxisConfig<DataValue, XyAxisConfigType<DataValue>>(XyAxisConfig));\n\nexport class VicYOrdinalAxisConfig<\n Tick extends DataValue,\n> extends AbstractYOrdinalAxis {\n constructor(options: YAxisOptions & VicOrdinalAxisOptions<Tick>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { TicksBuilder } from '../ticks/ticks-builder';\nimport { VicYOrdinalAxisConfig } from './y-ordinal-axis-config';\n\nconst DEFAULT = {\n _side: 'left',\n _baseline: {\n display: false,\n },\n};\n\nconst TICKS_DEFAULT = {\n _sizeOuter: 0,\n};\n\n@Injectable()\nexport class VicYOrdinalAxisConfigBuilder<\n Tick extends DataValue,\n> extends XyAxisBaseBuilder {\n private _side: 'left' | 'right';\n private ticksBuilder: TicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `left`.\n */\n side(value: 'left' | 'right'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: TicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: TicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n this.ticksBuilder = undefined;\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): TicksBuilder<Tick> {\n return new TicksBuilder<Tick>(TICKS_DEFAULT);\n }\n\n getConfig(): VicYOrdinalAxisConfig<Tick> {\n return new VicYOrdinalAxisConfig({\n baseline: this.baselineBuilder._build('ordinal'),\n grid: this.gridBuilder?._build('y', 'ordinal'),\n label: this.labelBuilder?._build('y'),\n marksClass: 'vic-axis-y-ordinal',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('y'),\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicQuantitativeAxisOptions,\n mixinQuantitativeAxisConfig,\n} from '../quantitative/quantitative-axis-config';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { YAxisOptions, mixinYAxisConfig } from '../y/y-axis-config';\n\ntype XyAxisConfigType<T extends ContinuousValue> = AbstractConstructor<\n XyAxisConfig<T, QuantitativeTicks<T>>\n>;\n\nconst AbstractYQuantitative = mixinYAxisConfig<\n ContinuousValue,\n QuantitativeTicks<ContinuousValue>,\n XyAxisConfigType<ContinuousValue>\n>(\n mixinQuantitativeAxisConfig<\n ContinuousValue,\n XyAxisConfigType<ContinuousValue>\n >(XyAxisConfig)\n);\n\nexport class VicYQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends AbstractYQuantitative {\n constructor(options: YAxisOptions & VicQuantitativeAxisOptions<Tick>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { QuantitativeTicksBuilder } from '../ticks/ticks-builder';\nimport { VicYQuantitativeAxisConfig } from './y-quantitative-axis-config';\n\nconst DEFAULT = {\n _side: 'left',\n _removeDomainLine: false,\n _zeroAxis: { strokeDasharray: '2', useZeroAxis: true },\n};\n\nconst TICKS_DEFAULT = {\n _format: ',.1f',\n};\n\n@Injectable()\nexport class VicYQuantitativeAxisConfigBuilder<\n Tick extends ContinuousValue,\n> extends XyAxisBaseBuilder {\n private _side: 'left' | 'right';\n private ticksBuilder: QuantitativeTicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `left`.\n */\n side(value: 'left' | 'right'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: QuantitativeTicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: QuantitativeTicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): QuantitativeTicksBuilder<Tick> {\n return new QuantitativeTicksBuilder<Tick>(TICKS_DEFAULT);\n }\n\n getConfig(): VicYQuantitativeAxisConfig<Tick> {\n return new VicYQuantitativeAxisConfig<Tick>({\n baseline: this.baselineBuilder._build('quantitative'),\n grid: this.gridBuilder?._build('y', 'quantitative'),\n label: this.labelBuilder?._build('y'),\n marksClass: 'vic-axis-y-quantitative',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('y'),\n });\n }\n}\n","import * as CSSType from 'csstype';\nimport { color as d3Color } from 'd3-color';\nexport class ColorUtilities {\n static getContrastRatio(foreground: string, background: string): number {\n const lumA = ColorUtilities.getLuminance(foreground);\n const lumB = ColorUtilities.getLuminance(background);\n return lumA > lumB\n ? (lumA + 0.05) / (lumB + 0.05)\n : (lumB + 0.05) / (lumA + 0.05);\n }\n\n static getLuminance(color: string): number {\n const rgb = d3Color(color).rgb();\n return (\n 0.2126 * ColorUtilities.sRGBToLinear(rgb.r) +\n 0.7152 * ColorUtilities.sRGBToLinear(rgb.g) +\n 0.0722 * ColorUtilities.sRGBToLinear(rgb.b)\n );\n }\n\n static sRGBToLinear(value: number): number {\n const v = value / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n }\n\n /**\n * @param backgroundColor string, provided by getFill\n * @param darkColor\n * @param lightColor\n * @returns label fill color (either dark or light color)\n */\n static getHigherContrastColorForBackground(\n backgroundColor: string,\n darkColor: CSSType.Property.Fill,\n lightColor: CSSType.Property.Fill\n ): CSSType.Property.Fill {\n return ColorUtilities.getContrastRatio(lightColor, backgroundColor) >\n ColorUtilities.getContrastRatio(darkColor, backgroundColor)\n ? lightColor\n : darkColor;\n }\n}\n","import { FillDefinition } from '../../fill-definitions/fill-definitions';\n\n/**\n * @internal\n */\nexport class FillUtilities {\n static getFill<Datum>(\n datum: Datum,\n defaultColor: string,\n patterns: FillDefinition<Datum>[]\n ): string {\n if (patterns) {\n patterns.forEach((pattern: FillDefinition<Datum>) => {\n if (pattern.shouldApply(datum)) {\n defaultColor = `url(#${pattern.defId})`;\n }\n });\n }\n return defaultColor;\n }\n}\n","export function isNumber(x: unknown): x is number {\n return typeof x === 'number';\n}\n\nexport function isNumberArray(x: unknown[]): x is number[] {\n return x.every(isNumber);\n}\n\nexport function isDate(x: unknown): x is Date {\n return (\n Object.prototype.toString.call(x) === '[object Date]' && !isNaN(x as number)\n );\n}\n\nexport function isFunction<T, U = unknown>(\n x: unknown\n): x is (...args: U[]) => T {\n return typeof x === 'function';\n}\n\nexport function isPrimitiveType<T>(x: unknown): x is T {\n return typeof x !== 'function';\n}\n\nexport function isObject<T>(x: unknown): x is T {\n return (\n typeof x === 'object' &&\n x !== null &&\n !Array.isArray(x) &&\n !isFunction(x) &&\n !isDate(x)\n );\n}\n","export enum ValueExtent {\n max = 'max',\n min = 'min',\n}\n\nexport type ContinuousValue = number | Date;\n\nexport type DataValue = number | string | Date;\n\nexport type VisualValue = number | string;\n","import { format, utcFormat } from 'd3';\nimport { ValueExtent } from '../types/values';\nimport { isDate } from './type-guards';\nexport type VicFormatSpecifier<Datum> = string | ((x: Datum) => string);\n\n/**\n * @internal\n */\nexport class ValueUtilities {\n static getValueRoundedToNSignificantFigures(\n value: number,\n sigFigures: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n // If the value type is VicValueExtent.max, rounds up if value is > 0 and down if value is < 0\n // If the value type is VicValueExtent.min, rounds down if value is > 0 and up if value is < 0\n // ex: 1234 => 1235, -1234 => -1235\n // SigDigits here means the first N non-zero as units holder values\n // ex: 1234, sigFigures = 2, \"1\" and \"2\" are \"significant\"\n // ex: 0.001234, sigFigures = 3, \"1\", \"2\", and \"3\" are \"significant\"\n this.validateSigFigures(sigFigures);\n let absRoundedValue;\n if (Math.abs(value) < 1) {\n absRoundedValue = this.getRoundedDecimalLessThanOne(\n value,\n sigFigures,\n valueExtent\n );\n } else {\n const absValueStr = Math.abs(value).toString();\n const decimalIndex = absValueStr.indexOf('.');\n let firstNDigits;\n let numZeros = 0;\n if (decimalIndex < sigFigures && decimalIndex > -1) {\n firstNDigits = absValueStr.substring(0, sigFigures + 1);\n } else {\n firstNDigits = absValueStr.substring(0, sigFigures);\n if (decimalIndex > -1) {\n numZeros = decimalIndex - sigFigures;\n } else {\n numZeros = absValueStr.length - sigFigures;\n }\n numZeros = numZeros < 0 ? 0 : numZeros;\n }\n const offset = this.getRoundingOffset(value, valueExtent);\n const lastSigDigit = Number(firstNDigits[firstNDigits.length - 1]);\n // handle cases where the last rounded significant is 9 and the value is rounded up\n if (offset === 1 && lastSigDigit === 9) {\n firstNDigits = this.getNewValueForNine(\n value,\n firstNDigits.split(''),\n absValueStr,\n sigFigures,\n valueExtent\n );\n if (firstNDigits[0] === '0') {\n firstNDigits.unshift('1');\n }\n firstNDigits = firstNDigits.join('');\n } else {\n firstNDigits =\n firstNDigits.substring(0, firstNDigits.length - 1) +\n (lastSigDigit + offset).toString();\n }\n absRoundedValue = Number(firstNDigits + '0'.repeat(numZeros));\n }\n return value >= 0 || absRoundedValue === 0\n ? absRoundedValue\n : -absRoundedValue;\n }\n\n private static validateSigFigures(sigFigures: number): void {\n if (sigFigures < 1) {\n throw new Error('sigFigures must be greater than or equal to 1');\n }\n }\n\n private static getRoundedDecimalLessThanOne(\n value: number,\n sigFigures: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n const valueStr = Math.abs(value).toString();\n let newValue = [];\n let sigDigitsFound = 0;\n for (let i = 0; i < valueStr.length; i++) {\n const char = valueStr[i];\n if (char === '.' || (char === '0' && sigDigitsFound === 0)) {\n newValue.push(char);\n } else {\n ++sigDigitsFound;\n if (sigDigitsFound <= sigFigures) {\n let newDigit = '0';\n if (sigDigitsFound === sigFigures || i === valueStr.length - 1) {\n if (char === '9') {\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i,\n valueExtent\n );\n } else {\n const offset = this.getRoundingOffset(value, valueExtent);\n newDigit = `${Number(char) + offset}`;\n }\n } else if (sigDigitsFound < sigFigures) {\n newDigit = char;\n }\n newValue.push(newDigit);\n }\n }\n }\n return parseFloat(newValue.join(''));\n }\n\n private static getNewValueForNine(\n value: number,\n newValue: string[],\n valueStr: string,\n i: number,\n valueExtent: keyof typeof ValueExtent\n ): string[] {\n const prevChar = valueStr[i - 1];\n if (prevChar === '9') {\n newValue[i - 1] = '0';\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i - 1,\n valueExtent\n );\n } else if (prevChar === '.') {\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i - 1,\n valueExtent\n );\n } else {\n const offset = this.getRoundingOffset(value, valueExtent);\n newValue[i - 1] = `${Number(prevChar) + offset}`;\n }\n return newValue;\n }\n\n private static getRoundingOffset(\n value: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n return (value > 0 && valueExtent === ValueExtent.max) ||\n (value < 0 && valueExtent === ValueExtent.min)\n ? 1\n : 0;\n }\n\n static getValueRoundedToInterval(\n value: number,\n interval: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n if (interval === 0) {\n return value;\n }\n const round = valueExtent === ValueExtent.max ? Math.ceil : Math.floor;\n return round(value / interval) * interval;\n }\n\n static d3Format(value: Date | number, formatter: string): string {\n return formatter\n ? isDate(value)\n ? utcFormat(formatter)(value)\n : format(formatter)(value)\n : value.toString();\n }\n\n static customFormat<Datum>(\n value: Datum,\n formatter: (x: Datum) => string\n ): string {\n return formatter ? formatter(value) : value.toString();\n }\n\n static formatForHtmlAttribute(value: string): string {\n return value.replace(/\\s/g, '-');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n ViewEncapsulation,\n} from '@angular/core';\nimport { select, Transition } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { GenericScale } from '../core';\nimport { DataValue } from '../core/types/values';\nimport { ColorUtilities } from '../core/utilities/colors';\nimport { FillUtilities } from '../core/utilities/fill-utilities';\nimport { isNumber } from '../core/utilities/type-guards';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { BarsConfig } from './config/bars-config';\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use \"unknown\"\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const BARS = new InjectionToken<BarsComponent<unknown, DataValue>>(\n 'BarsComponent'\n);\n\nexport type BarGroupSelection = Selection<\n SVGGElement,\n number,\n SVGSVGElement,\n unknown\n>;\nexport type BarSelection = Selection<\n SVGRectElement,\n number,\n SVGGElement,\n number\n>;\nexport type BarLabelSelection = Selection<\n SVGTextElement,\n number,\n SVGGElement,\n number\n>;\n\nexport type BarDatum<T> = {\n index: number;\n quantitative: number;\n ordinal: T;\n color: string;\n};\n\nexport interface BarsTooltipDatum<Datum> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n category: string;\n };\n}\n\ntype BarsSvgElement = 'g' | 'bar' | 'label' | 'background';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-bars]',\n template: '',\n styleUrls: ['./bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: BarsComponent },\n { provide: BARS, useExisting: BarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class BarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicXyPrimaryMarks<Datum, BarsConfig<Datum, TOrdinalValue>> {\n barGroups: BarGroupSelection;\n bars: BehaviorSubject<BarSelection> = new BehaviorSubject(null);\n bars$ = this.bars.asObservable().pipe(filter((s) => !!s));\n labels: BehaviorSubject<BarLabelSelection> = new BehaviorSubject(null);\n labels$ = this.bars.asObservable().pipe(filter((s) => !!s));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n protected zone = inject(NgZone);\n public elRef = inject(ElementRef<SVGGElement>);\n\n get class(): Record<BarsSvgElement, string> {\n return {\n g: this.config.marksClass + '-group',\n bar: this.config.marksClass + '-bar',\n label: this.config.marksClass + '-label',\n background: this.config.marksClass + '-background',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config[this.config.dimensions.x].getScaleFromRange(\n this.ranges.x\n );\n const y = this.config[this.config.dimensions.y].getScaleFromRange(\n this.ranges.y\n );\n this.scales.color = this.config.color.getScale();\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawBars(transitionDuration);\n if (this.config.backgrounds) {\n this.drawBackgrounds(transitionDuration);\n }\n if (this.config.labels) {\n this.drawLabels(transitionDuration);\n }\n this.updateBarElements();\n }\n\n drawBars(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, number>(`.${this.class.g}`)\n .data<number>(this.config.valueIndices, this.config.barsKeyFunction)\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (i) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[i], i)}`.trim()\n )\n .attr('transform', (i) =>\n this.getBarGroupTransform(this.getBarDatumFromIndex(i))\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (i) =>\n this.getBarGroupTransform(this.getBarDatumFromIndex(i))\n ),\n (exit) => exit.remove()\n );\n\n this.barGroups\n .selectAll<SVGRectElement, BarDatum<TOrdinalValue>>(`.${this.class.bar}`)\n .data<BarDatum<TOrdinalValue>>((i) => [this.getBarDatumFromIndex(i)])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', this.class.bar)\n .property('key', (d) => d.ordinal)\n .attr('width', (d) => this.getBarWidth(d))\n .attr('height', (d) => this.getBarHeight(d))\n .attr('fill', (d) => this.getBarFill(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('width', (d) => this.getBarWidth(d))\n .attr('height', (d) => this.getBarHeight(d))\n .attr('fill', (d) => this.getBarFill(d)),\n (exit) => exit.remove()\n );\n }\n\n drawBackgrounds(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups\n .selectAll<SVGRectElement, number>(`.${this.class.background}`)\n .data<BarDatum<TOrdinalValue>>((i) => [this.getBarDatumFromIndex(i)])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', this.class.background)\n .attr('fill', this.config.backgrounds.color)\n .attr('transform', (d) => this.getBackgroundTransform(d))\n .attr('width', this.getBackgroundWidth())\n .attr('height', this.getBackgroundBarHeight()),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (d) => this.getBackgroundTransform(d))\n .attr('width', this.getBackgroundWidth())\n .attr('height', this.getBackgroundBarHeight()),\n (exit) => exit.remove()\n )\n .lower();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getBarGroupColorClass(i: number): string {\n return this.config.color.calculatedDomain.length > 1\n ? ValueUtilities.formatForHtmlAttribute(this.config.color.values[i])\n : '';\n }\n\n getBarDatumFromIndex(i: number): BarDatum<TOrdinalValue> {\n return {\n index: i,\n quantitative: this.config.quantitative.values[i],\n ordinal: this.config.ordinal.values[i],\n color: this.config.color.values[i],\n };\n }\n\n getBarGroupTransform(datum: BarDatum<TOrdinalValue>): string {\n const x = this.getBarX(datum);\n const y = this.getBarY(datum);\n return `translate(${x},${y})`;\n }\n\n getBarFill(datum: BarDatum<TOrdinalValue>): string {\n return this.config.customFills\n ? this.getBarPattern(datum)\n : this.getBarColor(datum);\n }\n\n drawLabels(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups\n .selectAll<SVGTextElement, BarDatum<TOrdinalValue>>(\n `.${this.class.label}`\n )\n .data<BarDatum<TOrdinalValue>>((i: number) => [\n {\n index: i,\n quantitative: this.config.quantitative.values[i],\n ordinal: this.config.ordinal.values[i],\n color: this.config.color.values[i],\n },\n ])\n .join(\n (enter) =>\n enter\n .append<SVGTextElement>('text')\n .attr('class', this.class.label)\n .style('display', this.config.labels.display ? null : 'none')\n .text((d) => this.getLabelText(d))\n .style('visiblity', 'hidden')\n .call((selection) => {\n selection.each((d, i, nodes) => {\n const bbox = nodes[i].getBBox();\n select<SVGTextElement, BarDatum<TOrdinalValue>>(nodes[i])\n .style('fill', (d) => this.getLabelColor(d, bbox))\n .attr('text-anchor', (d) => this.getLabelTextAnchor(d, bbox))\n .attr('dominant-baseline', (d) =>\n this.getLabelDominantBaseline(d, bbox)\n )\n .attr('x', this.getLabelX(d, bbox))\n .attr('y', this.getLabelY(d, bbox))\n .attr('visibility', 'visible');\n });\n }),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .text((d) => this.getLabelText(d))\n .style('visiblity', 'hidden')\n .call((selection) => {\n selection.each((d, i, nodes) => {\n const bbox = nodes[i].getBBox();\n select<SVGTextElement, BarDatum<TOrdinalValue>>(nodes[i])\n .style('fill', (d) => this.getLabelColor(d, bbox))\n .attr('text-anchor', (d) => this.getLabelTextAnchor(d, bbox))\n .attr('dominant-baseline', (d) =>\n this.getLabelDominantBaseline(d, bbox)\n )\n .attr('x', this.getLabelX(d, bbox))\n .attr('y', this.getLabelY(d, bbox))\n .attr('visibility', 'visible');\n });\n }),\n (exit) => exit.remove()\n );\n }\n\n getBarX(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.x === 'ordinal') {\n return this.getBarXOrdinal(d);\n }\n return this.getBarXQuantitative(d);\n }\n\n getBarXOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.x(d.ordinal);\n }\n\n getBarXQuantitative(d: BarDatum<TOrdinalValue>): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n const origin = this.getBarQuantitativeOrigin();\n return this.scales.x(origin);\n } else if (this.config.hasNegativeValues) {\n if (d.quantitative < 0) {\n return this.scales.x(d.quantitative);\n }\n return this.scales.x(0);\n }\n return this.scales.x(this.getQuantitativeDomainFromScale()[0]);\n }\n\n getBarY(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.y === 'ordinal') {\n return this.getBarYOrdinal(d);\n }\n return this.getBarYQuantitative(d);\n }\n\n getBarYOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.ordinal);\n }\n\n getBarYQuantitative(d: BarDatum<TOrdinalValue>): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n const origin = this.getBarQuantitativeOrigin();\n return this.scales.y(origin);\n } else if (d.quantitative < 0) {\n if (this.config.quantitative.domainIncludesZero) {\n return this.scales.y(0);\n }\n return this.scales.y(this.getQuantitativeDomainFromScale()[1]);\n }\n return this.scales.y(d.quantitative);\n }\n\n getQuantitativeDomainFromScale(): number[] {\n return this.scales[this.config.dimensions.quantitative].domain();\n }\n\n getBarWidth(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n return this.getBarDimensionQuantitative(d, 'x');\n }\n return this.getBarWidthOrdinal();\n }\n\n getBarWidthOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.x as any).bandwidth();\n }\n\n getBarHeight(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.quantitativeDimension === 'height') {\n return this.getBarDimensionQuantitative(d, 'y');\n }\n return this.getBarHeightOrdinal();\n }\n\n getBarHeightOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.y as any).bandwidth();\n }\n\n getBackgroundTransform(d: BarDatum<TOrdinalValue>): string | null {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n const range = this.scales.x.range();\n const offsetFromLeft =\n d.quantitative < 0 ? this.scales.x(d.quantitative) : this.scales.x(0);\n return `translate(${range[0] - offsetFromLeft},0)`;\n }\n const range = this.scales.y.range();\n const offsetFromBottom =\n d.quantitative < 0 ? this.scales.y(0) : this.scales.y(d.quantitative);\n return `translate(0,${range[1] - offsetFromBottom})`;\n }\n\n getBackgroundWidth(): number {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n const range = this.scales.x.range();\n return range[1] - range[0];\n }\n return this.getBarWidthOrdinal();\n }\n\n getBackgroundBarHeight(): number {\n if (this.config.dimensions.quantitativeDimension === 'height') {\n const range = this.scales.y.range();\n return range[0] - range[1];\n } else {\n return this.getBarHeightOrdinal();\n }\n }\n\n getBarDimensionQuantitative(\n d: BarDatum<TOrdinalValue>,\n dimension: 'x' | 'y'\n ): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return 0;\n }\n const origin = this.getBarQuantitativeOrigin();\n return Math.abs(\n this.scales[dimension](d.quantitative) - this.scales[dimension](origin)\n );\n }\n\n getBarQuantitativeOrigin(): number {\n if (this.config.quantitative.domainIncludesZero) {\n return 0;\n }\n const domain = this.getQuantitativeDomainFromScale();\n return this.config.hasNegativeValues ? domain[1] : domain[0];\n }\n\n getBarPattern(d: BarDatum<TOrdinalValue>): string {\n const color = this.getBarColor(d);\n return FillUtilities.getFill(\n this.config.data[d.index],\n color,\n this.config.customFills\n );\n }\n\n getBarColor(d: BarDatum<TOrdinalValue>): string {\n return this.scales.color(d.color);\n }\n\n getLabelText(d: BarDatum<TOrdinalValue>): string {\n const datum = this.config.data[d.index];\n if (!isNumber(d.quantitative)) {\n return this.config.labels.noValueFunction(datum);\n }\n return this.config.quantitative.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config.quantitative.formatFunction\n )\n : ValueUtilities.d3Format(\n d.quantitative,\n this.config.quantitative.formatSpecifier\n );\n }\n\n getLabelTextAnchor(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): 'start' | 'middle' | 'end' {\n if (this.config.dimensions.isVertical) {\n return 'middle';\n }\n return this.alignTextInPositiveDirection(d, labelBbox) ? 'start' : 'end';\n }\n\n getLabelDominantBaseline(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): 'text-after-edge' | 'text-before-edge' | 'central' {\n if (this.config.dimensions.isHorizontal) {\n return 'central';\n }\n return this.alignTextInPositiveDirection(d, labelBbox)\n ? 'text-after-edge'\n : 'text-before-edge';\n }\n\n alignTextInPositiveDirection(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): boolean {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return this.positionZeroOrNonNumericValueLabelInPositiveDirection();\n }\n const placeLabelOutsideBar = this.labelFitsOutsideBar(d, labelBbox);\n const isPositiveValue = d.quantitative > 0;\n return placeLabelOutsideBar ? isPositiveValue : !isPositiveValue;\n }\n\n getLabelColor(d: BarDatum<TOrdinalValue>, labelBbox: DOMRect): string {\n if (\n this.isZeroOrNonNumeric(d.quantitative) ||\n this.labelFitsOutsideBar(d, labelBbox)\n ) {\n if (this.config.backgrounds) {\n // try to use the default label color if it has enough contrast\n if (\n ColorUtilities.getContrastRatio(\n this.config.labels.color.default,\n this.config.backgrounds.color\n ) >= 4.5\n ) {\n return this.config.labels.color.default;\n }\n // if it doesn't, user the color with the higher contrast against the background\n return ColorUtilities.getHigherContrastColorForBackground(\n this.config.backgrounds.color,\n this.config.labels.color.default,\n this.config.labels.color.withinBarAlternative\n );\n }\n return this.config.labels.color.default;\n }\n const barColor = this.getBarColor(d);\n return ColorUtilities.getHigherContrastColorForBackground(\n barColor,\n this.config.labels.color.default,\n this.config.labels.color.withinBarAlternative\n );\n }\n\n labelFitsOutsideBar(d: BarDatum<TOrdinalValue>, labelBbox: DOMRect): boolean {\n const isPositiveValue = d.quantitative > 0;\n // This approach assumes that the bar labels do not wrap.\n const distanceToChartEdge = this.getBarToChartEdgeDistance(\n isPositiveValue,\n this.ranges[this.config.dimensions.quantitative],\n this.scales[this.config.dimensions.quantitative](d.quantitative)\n );\n\n if (this.config.dimensions.isHorizontal) {\n return distanceToChartEdge > labelBbox.width + this.config.labels.offset;\n }\n return distanceToChartEdge > labelBbox.height + this.config.labels.offset;\n }\n\n getBarToChartEdgeDistance(\n isPositiveValue: boolean,\n range: [number, number],\n endOfBarPosition: number\n ): number {\n const [min, max] = range[0] < range[1] ? range : [range[1], range[0]];\n\n if (endOfBarPosition <= min || endOfBarPosition >= max) {\n return 0;\n }\n\n return isPositiveValue ? max - endOfBarPosition : endOfBarPosition - min;\n }\n\n getLabelDomRect(d: BarDatum<TOrdinalValue>): DOMRect {\n const selection = this.barGroups\n .selectAll<\n SVGTextElement,\n BarDatum<TOrdinalValue>\n >(`.${this.class.label}`)\n .filter((datum) => datum.index === d.index);\n return selection.node().getBoundingClientRect();\n }\n\n getLabelX(d: BarDatum<TOrdinalValue>, bbox: DOMRect): number {\n if (this.config.dimensions.x === 'ordinal') {\n return this.getBarWidthOrdinal() / 2;\n }\n return this.getLabelQuantitativeAxisPosition(d, bbox);\n }\n\n getLabelY(d: BarDatum<TOrdinalValue>, bbox: DOMRect): number {\n if (this.config.dimensions.y === 'ordinal') {\n return this.getBarHeightOrdinal() / 2;\n }\n return this.getLabelQuantitativeAxisPosition(d, bbox);\n }\n\n getLabelQuantitativeAxisPosition(\n d: BarDatum<TOrdinalValue>,\n bbox: DOMRect\n ): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return this.getLabelPositionForZeroOrNonnumericValue();\n }\n return this.getLabelPositionForNumericValue(d, bbox);\n }\n\n getLabelPositionForZeroOrNonnumericValue(): number {\n const positionInPositiveDirection =\n this.positionZeroOrNonNumericValueLabelInPositiveDirection();\n return (positionInPositiveDirection &&\n this.config.dimensions.isHorizontal) ||\n (!positionInPositiveDirection && this.config.dimensions.isVertical)\n ? this.config.labels.offset\n : -this.config.labels.offset;\n }\n\n getLabelPositionForNumericValue(\n d: BarDatum<TOrdinalValue>,\n bbox: DOMRect\n ): number {\n const isPositiveValue = d.quantitative > 0;\n const origin = this.getLabelOrigin(d, isPositiveValue);\n const placeLabelOutsideBar = this.labelFitsOutsideBar(d, bbox);\n if (\n (this.config.dimensions.isVertical && placeLabelOutsideBar) ||\n (this.config.dimensions.isHorizontal && !placeLabelOutsideBar)\n ) {\n return isPositiveValue\n ? origin - this.config.labels.offset\n : origin + this.config.labels.offset;\n }\n return isPositiveValue\n ? origin + this.config.labels.offset\n : origin - this.config.labels.offset;\n }\n\n getLabelOrigin(d: BarDatum<TOrdinalValue>, isPositiveValue: boolean): number {\n if (this.config.dimensions.isHorizontal) {\n return isPositiveValue ? this.getBarDimensionQuantitative(d, 'x') : 0;\n }\n return isPositiveValue ? 0 : this.getBarDimensionQuantitative(d, 'y');\n }\n\n positionZeroOrNonNumericValueLabelInPositiveDirection(): boolean {\n const quantitativeValues = this.config.quantitative.values;\n const someValuesArePositive = quantitativeValues.some((x) => x > 0);\n if (someValuesArePositive) {\n return true;\n }\n const domainMaxIsGreaterThanZero =\n this.getQuantitativeDomainFromScale()[1] > 0;\n const everyValueIsEitherZeroOrNonnumeric = quantitativeValues.every((x) =>\n this.isZeroOrNonNumeric(x)\n );\n return domainMaxIsGreaterThanZero && everyValueIsEitherZeroOrNonnumeric;\n }\n\n isZeroOrNonNumeric(value: unknown): boolean {\n return value === 0 || !isNumber(value);\n }\n\n updateBarElements(): void {\n const barEventElementsSelector = this.config.backgrounds?.events\n ? `.${this.class.bar}, .${this.class.background}`\n : `.${this.class.bar}`;\n const bars = select(this.elRef.nativeElement).selectAll<\n SVGRectElement,\n number\n >(barEventElementsSelector);\n const labels = select(this.elRef.nativeElement).selectAll<\n SVGTextElement,\n number\n >(`.${this.class.label}`);\n this.bars.next(bars);\n this.labels.next(labels);\n }\n\n getTooltipData(datum: Datum): BarsTooltipDatum<Datum> {\n const ordinalValue = this.config.ordinal.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.ordinal.formatFunction)\n : this.config.ordinal.valueAccessor(datum).toString();\n const quantitativeValue = this.config.quantitative.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config.quantitative.formatFunction\n )\n : ValueUtilities.d3Format(\n this.config.quantitative.valueAccessor(datum),\n this.config.quantitative.formatSpecifier\n );\n const category = this.config.color.valueAccessor(datum);\n const tooltipData: BarsTooltipDatum<Datum> = {\n datum,\n color: this.scales.color(category),\n values: {\n x:\n this.config.dimensions.x === 'ordinal'\n ? ordinalValue\n : quantitativeValue,\n y:\n this.config.dimensions.y === 'ordinal'\n ? ordinalValue\n : quantitativeValue,\n category,\n },\n };\n return tooltipData;\n }\n\n getSourceDatumFromBarDatum(barDatum: BarDatum<TOrdinalValue>): Datum {\n return this.config.data.find(\n (d) =>\n this.config.ordinal.values[barDatum.index] ===\n this.config.ordinal.valueAccessor(d) &&\n this.config.quantitative.values[barDatum.index] ===\n this.config.quantitative.valueAccessor(d)\n );\n }\n}\n","import {\n AfterViewInit,\n DestroyRef,\n Directive,\n inject,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { pointer } from 'd3';\nimport { Observable } from 'rxjs';\nimport {\n ActionHost,\n EventAction,\n EventType,\n UnlistenFunction,\n} from './events.types';\n\n@Directive()\nexport abstract class EventsDirective<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Host extends ActionHost<unknown> = any,\n >\n implements AfterViewInit, OnDestroy\n{\n @Input() clickRemoveEvent$: Observable<void>;\n @Input() inputEvent$: Observable<unknown>;\n protected destroyRef = inject(DestroyRef);\n protected renderer = inject(Renderer2);\n\n protected abstract getElements(): Observable<Element[]>;\n protected abstract onClickRemove(): void;\n protected abstract onInputEvent(inputValue: unknown): void;\n protected abstract setPositionsFromElement(): void;\n protected abstract setupListeners(elements: Element[]): UnlistenFunction[];\n\n protected unlistenFns: UnlistenFunction[] = [];\n protected events: EventType[] = [];\n preventAction: Record<EventType, boolean> = {\n click: false,\n hover: false,\n hoverMove: false,\n input: false,\n };\n positionX: number;\n positionY: number;\n\n ngAfterViewInit(): void {\n this.getElements()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((els) => {\n this.unlistenFns.forEach((fn) => fn());\n this.unlistenFns = this.setupListeners(els);\n });\n\n if (this.clickRemoveEvent$) {\n this.clickRemoveEvent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onClickRemove());\n }\n\n if (this.inputEvent$) {\n this.inputEvent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => this.onInputEvent(event));\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenFns.forEach((fn) => fn());\n }\n\n protected buildInteractionListeners(\n handlers: Partial<\n Record<\n EventType,\n Partial<{\n pointerenter: (e: PointerEvent, el: Element) => void;\n pointermove: (e: PointerEvent, el: Element) => void;\n pointerleave: (e: PointerEvent, el: Element) => void;\n click: (e: PointerEvent, el: Element) => void;\n }>\n >\n >\n ): Record<string, (e: PointerEvent, el: Element) => void> {\n const listeners: Record<string, (e: PointerEvent, el: Element) => void> =\n {};\n\n for (const eventType of Object.keys(handlers) as EventType[]) {\n const handler = handlers[eventType];\n if (!handler) continue;\n\n this.events.push(eventType);\n\n for (const [domEvent, fn] of Object.entries(handler)) {\n listeners[domEvent] = fn;\n }\n }\n\n return listeners;\n }\n\n protected bindEventListeners(\n elements: Element[],\n handlers: Partial<{\n pointerenter: (event: PointerEvent, el: Element) => void;\n pointermove: (event: PointerEvent, el: Element) => void;\n pointerleave: (event: PointerEvent, el: Element) => void;\n click: (event: PointerEvent, el: Element) => void;\n }>\n ): UnlistenFunction[] {\n return elements.map((el) => {\n const unlistenFns: UnlistenFunction[] = [];\n\n if (handlers.pointerenter)\n unlistenFns.push(\n this.renderer.listen(el, 'pointerenter', (e) =>\n handlers.pointerenter(e, el)\n )\n );\n if (handlers.pointermove)\n unlistenFns.push(\n this.renderer.listen(el, 'pointermove', (e) =>\n handlers.pointermove(e, el)\n )\n );\n if (handlers.pointerleave)\n unlistenFns.push(\n this.renderer.listen(el, 'pointerleave', (e) =>\n handlers.pointerleave(e, el)\n )\n );\n if (handlers.click)\n unlistenFns.push(\n this.renderer.listen(el, 'click', (e) => handlers.click(e, el))\n );\n\n return () => unlistenFns.forEach((fn) => fn());\n });\n }\n\n disableOtherActions(eventType: EventType): void {\n Object.keys(this.preventAction).forEach((key) => {\n if (key !== eventType) {\n this.preventAction[key as EventType] = true;\n }\n });\n }\n\n resumeOtherActions(eventType: EventType, cancelCurrentActions = true): void {\n Object.keys(this.preventAction).forEach((key) => {\n const isCurrent = key === eventType;\n const shouldResume = !isCurrent || cancelCurrentActions;\n if (shouldResume) {\n this.preventAction[key as EventType] = false;\n }\n });\n }\n\n setPositionsFromPointer(event: PointerEvent): void {\n [this.positionX, this.positionY] = pointer(event);\n }\n\n protected runActions<T extends EventAction<Host>>(\n actions: T[] | null | undefined,\n fn: (action: T) => void\n ): void {\n if (!actions?.length) return;\n actions.forEach(fn);\n }\n\n protected hasEvent(event: EventType): boolean {\n return this.events.includes(event);\n }\n\n protected isEventAllowed(event: EventType): boolean {\n return this.hasEvent(event) && !this.preventAction[event];\n }\n\n protected asHost(): Host {\n return this as unknown as Host;\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport type UnlistenFunction = () => void;\nexport type ListenElement = HTMLElement | SVGElement;\n\nexport enum EventType {\n Click = 'click',\n Hover = 'hover',\n HoverMove = 'hoverMove',\n Input = 'input',\n}\n\nexport interface EventAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> {\n onStart: (host: Host) => void;\n onEnd: (host: Host) => void;\n}\n\nexport interface HoverMoveAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> extends EventAction<Host> {\n initialize?: (host: Host) => void;\n}\n\nexport interface InputEventAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> {\n onStart: (host: Host, ...args) => void;\n onEnd: (host: Host, ...args) => void;\n}\n\nexport interface ActionHost<Output> {\n getInteractionOutput(type: EventType): Output;\n setPositionsFromElement(): void;\n setPositionsFromPointer(event: PointerEvent): void;\n disableOtherActions(eventType: EventType): void;\n resumeOtherActions(\n eventType: EventType,\n cancelCurrentActions?: boolean\n ): void;\n emitInteractionOutput(output: Output): void;\n}\n\nexport interface MarksHost<Output, MarksComponent = unknown>\n extends ActionHost<Output> {\n marks: MarksComponent;\n}\n\nexport interface EventStrategy {\n bindTo(elements: Element[], renderer: Renderer2): UnlistenFunction[];\n}\n","import {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n OverlayPositionBuilder,\n} from '@angular/cdk/overlay';\n\nexport type TooltipPositionConfig = {\n originX: 'start' | 'center' | 'end';\n originY: 'top' | 'center' | 'bottom';\n overlayX: 'start' | 'center' | 'end';\n overlayY: 'top' | 'center' | 'bottom';\n};\n\nexport class TooltipPosition implements ConnectedPosition {\n originX: TooltipPositionConfig['originX'];\n originY: TooltipPositionConfig['originY'];\n overlayX: TooltipPositionConfig['overlayX'];\n overlayY: TooltipPositionConfig['overlayY'];\n weight?: number;\n offsetX?: number;\n offsetY?: number;\n panelClass?: string | string[];\n\n constructor(config: TooltipPositionConfig & Partial<ConnectedPosition>) {\n Object.assign(this, config); // Merge any additional overrides\n }\n}\n\nexport class HtmlTooltipCdkManagedPosition {\n constructor(public positions: ConnectedPosition[]) {}\n\n getPositionStrategy(\n origin: Element,\n overlayPositionBuilder: OverlayPositionBuilder\n ): FlexibleConnectedPositionStrategy {\n return overlayPositionBuilder\n .flexibleConnectedTo(origin)\n .withPositions(this.positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n}\n","import {\n HtmlTooltipCdkManagedPosition,\n TooltipPosition,\n} from '../tooltips/html-tooltip/config/position/tooltip-position';\n\nexport const DEFAULT_TOOLTIP_Y_OFFSET = 2;\n\nexport abstract class TooltipPositioner {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract fromAnchor(...args: any): HtmlTooltipCdkManagedPosition;\n\n customPosition(positions: TooltipPosition[]): HtmlTooltipCdkManagedPosition {\n return new HtmlTooltipCdkManagedPosition(positions);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nexport class Tooltip {\n show: boolean;\n type: 'svg' | 'html';\n\n constructor(options?: Partial<Tooltip>) {\n this.show = false;\n safeAssign(this, options);\n }\n}\n","import { ElementRef } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { Tooltip } from '../../config/tooltip';\nimport { HtmlTooltipOptions } from './html-tooltip-options';\nimport { HtmlTooltipCdkManagedPosition } from './position/tooltip-position';\nimport { HtmlTooltipSize } from './size/tooltip-size';\n\nexport class HtmlTooltipConfig extends Tooltip implements HtmlTooltipOptions {\n override type: 'html';\n applyEventsDisabledClass: boolean;\n hasBackdrop: boolean;\n origin: ElementRef<Element>;\n panelClass: string[];\n position: HtmlTooltipCdkManagedPosition;\n size: HtmlTooltipSize;\n\n constructor(options: HtmlTooltipOptions) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { HtmlTooltipSizeOptions } from './tooltip-size-options';\n\nexport class HtmlTooltipSize implements HtmlTooltipSizeOptions {\n width: number | string;\n height: number | string;\n minWidth: number | string;\n minHeight: number | string;\n maxWidth: number | string;\n maxHeight: number | string;\n\n constructor(options: HtmlTooltipSizeOptions) {\n safeAssign(this, options);\n }\n}\n","import { HtmlTooltipSize } from './tooltip-size';\n\nexport class HtmlTooltipSizeBuilder {\n _width: number | string;\n _height: number | string;\n _minWidth: number | string;\n _minHeight: number | string;\n _maxWidth: number | string;\n _maxHeight: number | string;\n\n width(width: number | string | null) {\n if (width === null) {\n this._width = undefined;\n return this;\n }\n this._width = width;\n return this;\n }\n\n height(height: number | string | null) {\n if (height === null) {\n this._height = undefined;\n return this;\n }\n this._height = height;\n return this;\n }\n\n minWidth(minWidth: number | string | null) {\n if (minWidth === null) {\n this._minWidth = undefined;\n return this;\n }\n this._minWidth = minWidth;\n return this;\n }\n\n minHeight(minHeight: number | string | null) {\n if (minHeight === null) {\n this._minHeight = undefined;\n return this;\n }\n this._minHeight = minHeight;\n return this;\n }\n\n maxWidth(maxWidth: number | string | null) {\n if (maxWidth === null) {\n this._maxWidth = undefined;\n return this;\n }\n this._maxWidth = maxWidth;\n return this;\n }\n\n maxHeight(maxHeight: number | string | null) {\n if (maxHeight === null) {\n this._maxHeight = undefined;\n return this;\n }\n this._maxHeight = maxHeight;\n return this;\n }\n\n _build(): HtmlTooltipSize {\n return new HtmlTooltipSize({\n width: this._width,\n height: this._height,\n minWidth: this._minWidth,\n minHeight: this._minHeight,\n maxWidth: this._maxWidth,\n maxHeight: this._maxHeight,\n });\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { InteractionOutput } from '../../../events/interaction-output';\nimport { HtmlTooltipConfig } from './html-tooltip-config';\nimport { HtmlTooltipCdkManagedPosition } from './position/tooltip-position';\nimport { HtmlTooltipSizeBuilder } from './size/tooltip-size-builder';\n\nconst DEFAULT = {\n _minWidth: 300,\n _applyEventsDisabledClass: true,\n};\n\n@Injectable()\nexport class VicHtmlTooltipConfigBuilder {\n private _applyEventsDisabledClass: boolean;\n private sizeBuilder: HtmlTooltipSizeBuilder;\n private _panelClass: string | string[];\n private _origin: ElementRef<Element>;\n private _hasBackdrop: boolean;\n private _position: HtmlTooltipCdkManagedPosition;\n private _show: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n this.sizeBuilder = new HtmlTooltipSizeBuilder();\n }\n\n /**\n * OPTIONAL. If set to true, the tooltip will have the class 'events-disabled' that can be used to disable pointer events.\n * This is useful when the tooltip should not interfere with user interactions, such as when it is used for informational purposes only.\n *\n * Default is true, meaning the class will be applied.\n *\n * @param apply - Whether to apply the events-disabled class or not.\n */\n applyEventsDisabledClass(apply: boolean): this {\n this._applyEventsDisabledClass = apply;\n return this;\n }\n\n /**\n * OPTIONAL. Will create a Material CDK-provided backdrop if set to true. Clicking on the backdrop will dismiss the backdrop and emit an event.\n *\n * @param hasBackdrop - Whether to show a backdrop or not.\n */\n hasBackdrop(hasBackdrop: boolean): this {\n this._hasBackdrop = hasBackdrop;\n return this;\n }\n\n /**\n * OPTIONAL. Sets CSS classes to apply to the tooltip panel.\n *\n * @param panelClass - CSS class name(s) to apply to the tooltip panel.\n */\n panelClass(panelClass: string | string[]): this {\n this._panelClass = panelClass;\n return this;\n }\n\n /**\n * Sets the origin and position of the tooltip based on the output from a BaseInteractionOutput.\n *\n * @param origin - The origin element reference.\n * @param position - Optional position configuration. If not provided, the default position from the output will be used. Note that the output has several methods to return a position that can be used here.\n */\n positionFromOutput(\n // intentionally using InteractionOutput<unknown> to allow flexibility in the type of output\n output: InteractionOutput<unknown>,\n position?: HtmlTooltipCdkManagedPosition\n ): this {\n if (output) {\n this._origin = new ElementRef(output.origin);\n this._position = position || output?.defaultPosition;\n }\n return this;\n }\n\n /**\n * Sets whether the tooltip should be shown or not.\n *\n * @param show - Whether to show the tooltip or not.\n */\n show(show: boolean): this {\n this._show = show;\n return this;\n }\n\n size(size: null): this;\n size(size: (size: HtmlTooltipSizeBuilder) => void): this;\n size(size: ((size: HtmlTooltipSizeBuilder) => void) | null): this {\n if (size === null) {\n this.sizeBuilder = undefined;\n return this;\n }\n this.initSizeBuilder();\n size(this.sizeBuilder);\n return this;\n }\n\n private initSizeBuilder(): void {\n this.sizeBuilder = new HtmlTooltipSizeBuilder();\n }\n\n getConfig(): HtmlTooltipConfig {\n this.validateBuilder();\n return new HtmlTooltipConfig({\n hasBackdrop: this._hasBackdrop,\n panelClass: this.getPanelClasses(),\n origin: this._origin,\n position: this._position,\n show: this._show,\n size: this.sizeBuilder._build(),\n });\n }\n\n private validateBuilder(): void {\n if (!this.sizeBuilder) {\n this.initSizeBuilder();\n }\n if (this._show && !this._position) {\n throw new Error('Position must be set using positionFromOutput');\n }\n }\n\n private getPanelClasses(): string[] {\n const userClasses = this._panelClass ? [this._panelClass].flat() : [];\n const panelClasses = ['vic-html-tooltip-overlay', ...userClasses].flat();\n if (this._applyEventsDisabledClass) {\n panelClasses.push('events-disabled');\n }\n return panelClasses;\n }\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TooltipPosition, TooltipPositionConfig } from './tooltip-position';\n\n// Primarily used internally in the library, though a user could use it to make custom positions\n\nexport class TooltipPositionBuilder {\n private originX?: TooltipPositionConfig['originX'];\n private originY?: TooltipPositionConfig['originY'];\n private overlayX: TooltipPositionConfig['overlayX'] = 'center';\n private overlayY: TooltipPositionConfig['overlayY'] = 'bottom';\n private currentOffsetX = 0;\n private currentOffsetY = 0;\n private additionalConfig: Partial<ConnectedPosition> = {};\n\n // From methods - set origin\n fromTopLeft(): this {\n this.originX = 'start';\n this.originY = 'top';\n return this;\n }\n\n fromTopCenter(): this {\n this.originX = 'center';\n this.originY = 'top';\n return this;\n }\n\n fromTopRight(): this {\n this.originX = 'end';\n this.originY = 'top';\n return this;\n }\n\n fromCenterLeft(): this {\n this.originX = 'start';\n this.originY = 'center';\n return this;\n }\n\n fromCenter(): this {\n this.originX = 'center';\n this.originY = 'center';\n return this;\n }\n\n fromCenterRight(): this {\n this.originX = 'end';\n this.originY = 'center';\n return this;\n }\n\n fromBottomLeft(): this {\n this.originX = 'start';\n this.originY = 'bottom';\n return this;\n }\n\n fromBottomCenter(): this {\n this.originX = 'center';\n this.originY = 'bottom';\n return this;\n }\n\n fromBottomRight(): this {\n this.originX = 'end';\n this.originY = 'bottom';\n return this;\n }\n\n // Attach methods - set overlay\n attachTopLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-left' };\n return this;\n }\n\n attachTopCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-center' };\n return this;\n }\n\n attachTopRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-right' };\n return this;\n }\n\n attachCenterLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center-left' };\n return this;\n }\n\n attachCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center' };\n return this;\n }\n\n attachCenterRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center-right' };\n return this;\n }\n\n attachBottomLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-left' };\n return this;\n }\n\n attachBottomCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-center' };\n return this;\n }\n\n attachBottomRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-right' };\n return this;\n }\n\n // Offset method\n offset(offsetX: number, offsetY: number): this {\n this.currentOffsetX = offsetX;\n this.currentOffsetY = offsetY;\n return this;\n }\n\n // Additional config\n withConfig(config: Partial<ConnectedPosition>): this {\n this.additionalConfig = { ...this.additionalConfig, ...config };\n return this;\n }\n\n // Build the position\n getPosition(): TooltipPosition {\n if (!this.originX || !this.originY) {\n throw new Error('Origin position must be set using a from* method');\n }\n\n return new TooltipPosition({\n originX: this.originX,\n originY: this.originY,\n overlayX: this.overlayX,\n overlayY: this.overlayY,\n offsetX: this.currentOffsetX,\n offsetY: this.currentOffsetY,\n ...this.additionalConfig,\n });\n }\n\n // Reset builder for reuse\n reset(): this {\n this.originX = undefined;\n this.originY = undefined;\n this.overlayX = 'center';\n this.overlayY = 'bottom';\n this.currentOffsetX = 0;\n this.currentOffsetY = 0;\n this.additionalConfig = {};\n return this;\n }\n\n // Utility method for applying offsets to multiple positions\n applyOffsets(\n positions: TooltipPosition[],\n offsetX: number,\n offsetY: number\n ): TooltipPosition[] {\n return positions.map(\n (pos) =>\n new TooltipPosition({\n ...pos,\n offsetX: (pos.offsetX || 0) + offsetX,\n offsetY: (pos.offsetY || 0) + offsetY,\n })\n );\n }\n}\n","import {\n FlexibleConnectedPositionStrategy,\n GlobalPositionStrategy,\n Overlay,\n OverlayPositionBuilder,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HtmlTooltipConfig } from './config/html-tooltip-config';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'vic-html-tooltip',\n})\nexport class HtmlTooltipDirective implements OnChanges, OnDestroy {\n @Input() template: TemplateRef<HTMLElement>;\n @Input() config: HtmlTooltipConfig;\n @Output() backdropClick = new EventEmitter<void>();\n backdropUnsubscribe: Subject<void> = new Subject<void>();\n overlayRef: OverlayRef;\n portalAttached = false;\n positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy;\n onKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.hide();\n }\n };\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay,\n private overlayPositionBuilder: OverlayPositionBuilder,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n init(): void {\n if (!this.overlayRef) {\n this.createOverlayRef();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.overlayRef && this.config) {\n this.updateForConfigChanges(changes);\n } else if (this.config) {\n this.init();\n }\n }\n\n createOverlayRef(): void {\n this.backdropUnsubscribe = new Subject<void>();\n\n this.setPositionStrategy();\n this.overlayRef = this.overlay.create({\n ...this.config.size,\n panelClass: this.config.panelClass,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.positionStrategy,\n hasBackdrop: this.config.hasBackdrop,\n backdropClass: 'vic-html-tooltip-backdrop',\n });\n\n if (this.config.hasBackdrop) {\n this.subscribeToBackdropClick();\n }\n this.updateVisibility();\n }\n\n setPositionStrategy(): void {\n if (!this.config.origin || !this.config.position) {\n this.positionStrategy = this.overlayPositionBuilder.global();\n return;\n }\n\n this.positionStrategy = this.config.position.getPositionStrategy(\n this.config.origin.nativeElement,\n this.overlayPositionBuilder\n );\n }\n\n subscribeToBackdropClick(): void {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.backdropUnsubscribe))\n .subscribe(() => {\n this.backdropClick.emit();\n });\n }\n\n updateVisibility(): void {\n if (this.overlayRef) {\n if (this.config.show) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n\n subscribeToKeyboardEvents(): void {\n this.document.addEventListener('keydown', this.onKeydown, true);\n }\n\n unsubscribeFromKeyboardEvents(): void {\n this.document.removeEventListener('keydown', this.onKeydown, true);\n }\n\n show(): void {\n const tooltipPortal = this.getTemplatePortal();\n\n if (!this.overlayRef.hasAttached()) {\n this.overlayRef.attach(tooltipPortal);\n this.subscribeToKeyboardEvents();\n\n requestAnimationFrame(() => {\n this.updatePositionStrategy();\n });\n } else {\n this.updatePositionStrategy();\n }\n }\n\n getTemplatePortal(): TemplatePortal {\n return new TemplatePortal(this.template, this.viewContainerRef);\n }\n\n hide(): void {\n if (this.overlayRef.hasAttached()) {\n this.overlayRef.detach();\n this.unsubscribeFromKeyboardEvents();\n }\n }\n\n updateForConfigChanges(changes: SimpleChanges): void {\n if (this.configChanged(changes, 'position')) {\n this.updatePositionStrategy();\n }\n if (this.configChanged(changes, 'panelClass')) {\n this.updateClasses(changes['config'].previousValue.panelClass);\n }\n if (this.configChanged(changes, 'size')) {\n this.updateSize();\n }\n if (this.configChanged(changes, 'hasBackdrop')) {\n this.updateBackdrop();\n }\n this.updateVisibility();\n }\n\n updatePositionStrategy(): void {\n this.setPositionStrategy();\n if (this.positionStrategy) {\n // Only update if we have a valid strategy\n this.overlayRef.updatePositionStrategy(this.positionStrategy);\n }\n }\n\n updateClasses(prevClass: string[]): void {\n this.overlayRef.removePanelClass(prevClass);\n this.overlayRef.addPanelClass(this.config.panelClass);\n }\n\n updateSize(): void {\n this.overlayRef.updateSize(this.config.size);\n }\n\n updateBackdrop(): void {\n this.destroyBackdropSubscription();\n this.hide();\n this.destroyOverlay();\n this.createOverlayRef();\n }\n\n configChanged(\n changes: SimpleChanges,\n property: keyof HtmlTooltipConfig\n ): boolean {\n return NgOnChangesUtilities.inputObjectChanged(changes, 'config', property);\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFromKeyboardEvents();\n this.destroyBackdropSubscription();\n this.destroyOverlay();\n }\n\n destroyBackdropSubscription(): void {\n this.backdropUnsubscribe.next();\n this.backdropUnsubscribe.complete();\n }\n\n destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'vic-tooltip-triangle',\n imports: [],\n templateUrl: './tooltip-triangle.component.html',\n styleUrl: './tooltip-triangle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class TooltipTriangleComponent {\n @Input() height: number = 12;\n @Input() width: number = 20;\n}\n","<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle center\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + (width / 2) + ',' + height + ' ' + width + ',0'\"\n ></path>\n </g>\n</svg>\n\n<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle right\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + (width / 2) + ',' + height + ' ' + (width / 2) + ',0'\"\n ></path>\n </g>\n</svg>\n\n<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle left\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + '0,' + height + ' ' + (width / 2) + ',0'\"\n ></path>\n </g>\n</svg>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HtmlTooltipDirective } from './html-tooltip.directive';\nimport { TooltipTriangleComponent } from './tooltip-triangle/tooltip-triangle.component';\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n HtmlTooltipDirective,\n TooltipTriangleComponent,\n ],\n exports: [HtmlTooltipDirective, TooltipTriangleComponent],\n})\nexport class VicHtmlTooltipModule {}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class BarsTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { DataValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { BarDatum, BARS, BarsComponent } from '../bars.component';\nimport { BarsInteractionOutput } from './bars-interaction-output';\nimport { BarsTooltipPositioner } from './bars-tooltip-positioner';\n\nexport interface BarsHost<\n Datum,\n TOrdinalValue extends DataValue,\n TBarsComponent extends BarsComponent<Datum, TOrdinalValue> = BarsComponent<\n Datum,\n TOrdinalValue\n >,\n> extends MarksHost<BarsInteractionOutput<Datum>, TBarsComponent> {\n getBarDatum(): BarDatum<TOrdinalValue> | null;\n}\n\n@Directive({\n selector: '[vicBarsEvents]',\n})\nexport class BarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TBarsComponent extends BarsComponent<Datum, TOrdinalValue> = BarsComponent<\n Datum,\n TOrdinalValue\n >,\n >\n extends EventsDirective<BarsHost<Datum, TOrdinalValue>>\n implements BarsHost<Datum, TOrdinalValue, TBarsComponent>\n{\n @Input()\n hoverActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n barDatum: BarDatum<TOrdinalValue>;\n origin: SVGRectElement;\n\n constructor(@Inject(BARS) public bars: TBarsComponent) {\n super();\n }\n\n get marks(): TBarsComponent {\n return this.bars;\n }\n\n getElements(): Observable<Element[]> {\n return this.bars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getBarDatum(): BarDatum<TOrdinalValue> | null {\n return this.barDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.barDatum = select(\n el as SVGRectElement\n ).datum() as BarDatum<TOrdinalValue>;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.bars.getSourceDatumFromBarDatum(this.barDatum);\n const tooltipData = datum ? this.bars.getTooltipData(datum) : undefined;\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.barDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BarsComponent } from './bars.component';\nimport { BarsEventsDirective } from './events/bars-events.directive';\n\n@NgModule({\n imports: [BarsComponent, BarsEventsDirective],\n exports: [BarsComponent, BarsEventsDirective],\n})\nexport class VicBarsModule {}\n","import { DataValue } from '../core/types/values';\n\nexport abstract class DataDimensionBuilder<\n Datum,\n TDataValue extends DataValue,\n> {\n protected _formatFunction: (d: Datum) => string;\n protected _valueAccessor: (d: Datum) => TDataValue;\n\n /**\n * OPTIONAL. Sets a function that will be applied to the value of this dimension for display purposes.\n *\n * If provided, this function will be used instead of the format specifier (available only for quantitative dimensions)\n */\n formatFunction(formatFunction: null): this;\n formatFunction(formatFunction: (d: Datum) => string): this;\n formatFunction(formatFunction: ((d: Datum) => string) | null): this {\n if (formatFunction === null) {\n this._formatFunction = undefined;\n return this;\n }\n this._formatFunction = formatFunction;\n return this;\n }\n\n /**\n * Sets a user-provided method that extracts the value for this dimension from a datum.\n *\n * REQUIRED. for quantitative dimensions.\n *\n * OPTIONAL. for categorical and ordinal dimensions, though if not provided, the properties of those dimensions cannot reflect the data values.\n */\n valueAccessor(valueAccessor: (d: Datum) => TDataValue): this {\n this._valueAccessor = valueAccessor;\n return this;\n }\n\n protected validateValueAccessor(dimensionName: string): void {\n if (!this._valueAccessor) {\n throw new Error(\n `${dimensionName} Dimension: valueAccessor is required. Please use method 'valueAccessor' to set it.`\n );\n }\n }\n}\n","import { ScaleContinuousNumeric } from 'd3';\nimport { ValueExtent } from '../../../../core/types/values';\n\nexport enum DomainPaddingType {\n roundUp = 'roundUp',\n roundInterval = 'roundInterval',\n percentOver = 'percentOver',\n numPixels = 'numPixels',\n}\n\nexport interface PaddedDomainArguments {\n value?: number;\n valueType: keyof typeof ValueExtent;\n scaleFn?: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n unpaddedDomain?: [number, number];\n dimensionRange?: [number, number];\n}\n\nexport abstract class DomainPadding {\n abstract getPaddedValue(args: PaddedDomainArguments): number;\n\n getPaddedDomain(\n unpaddedDomain: [number, number],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scaleFn: any,\n dimensionRange?: [number, number]\n ): [number, number] {\n const domainMinArgs: PaddedDomainArguments = {\n value: unpaddedDomain[0],\n valueType: 'min',\n scaleFn,\n unpaddedDomain,\n dimensionRange: dimensionRange,\n };\n const domainMaxArgs: PaddedDomainArguments = {\n value: unpaddedDomain[1],\n valueType: 'max',\n scaleFn,\n unpaddedDomain,\n dimensionRange: dimensionRange,\n };\n let domainMin: number;\n let domainMax: number;\n if (unpaddedDomain[0] >= 0 && unpaddedDomain[1] >= 0) {\n domainMin = unpaddedDomain[0];\n domainMax = this.getPaddedValue(domainMaxArgs);\n } else if (unpaddedDomain[0] <= 0 && unpaddedDomain[1] <= 0) {\n domainMin = this.getPaddedValue(domainMinArgs);\n domainMax = unpaddedDomain[1];\n } else if (unpaddedDomain[0] < 0 && unpaddedDomain[1] > 0) {\n [domainMin, domainMax] = this.getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs,\n domainMaxArgs,\n unpaddedDomain,\n scaleFn,\n dimensionRange\n );\n }\n return [domainMin, domainMax];\n }\n\n protected getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs: PaddedDomainArguments,\n domainMaxArgs: PaddedDomainArguments,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\n ...args: any\n ): [number, number] {\n return [\n this.getPaddedValue(domainMinArgs),\n this.getPaddedValue(domainMaxArgs),\n ];\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { PercentOverDomainPaddingOptions } from './percent-over-options';\n\nexport class PercentOverDomainPadding\n extends DomainPadding\n implements PercentOverDomainPaddingOptions\n{\n readonly percentOver: number;\n readonly type: DomainPaddingType.percentOver;\n\n constructor(options: PercentOverDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.percentOver;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return this.getQuantitativeDomainMaxPercentOver(\n args.value,\n this.percentOver\n );\n }\n\n private getQuantitativeDomainMaxPercentOver(\n value: number,\n percent: number\n ): number {\n let overValue = Math.abs(value) * (1 + percent);\n if (value < 0) overValue = -overValue;\n return overValue;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { PixelDomainPaddingOptions } from './pixel-options';\n\nexport class PixelDomainPadding\n extends DomainPadding\n implements PixelDomainPaddingOptions\n{\n readonly numPixels: number;\n readonly type: DomainPaddingType.numPixels = DomainPaddingType.numPixels;\n\n constructor(options: PixelDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.numPixels;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n let numPixels = this.numPixels;\n if (args.dimensionRange[0] > args.dimensionRange[1]) {\n // This covers the case when this is applied to the vertical axis\n // On the vertical axis, the range is [highValue, lowValue], i.e. [100, 0]\n numPixels = -1 * this.numPixels;\n }\n const value =\n args.valueType === 'min'\n ? args.unpaddedDomain[0]\n : args.unpaddedDomain[1];\n if (value === 0)\n return args.valueType === 'min' ? value - numPixels : value + numPixels;\n const adjustedPixelRange =\n args.valueType === 'min' && args.unpaddedDomain[0] < 0\n ? [args.dimensionRange[0] + numPixels, args.dimensionRange[1]]\n : [args.dimensionRange[0], args.dimensionRange[1] - numPixels];\n const scale = args.scaleFn(args.unpaddedDomain, adjustedPixelRange);\n const targetVal =\n args.valueType === 'min'\n ? args.dimensionRange[0]\n : args.dimensionRange[1];\n return scale.invert(targetVal);\n }\n\n protected override getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs: PaddedDomainArguments,\n domainMaxArgs: PaddedDomainArguments,\n unpaddedDomain: [number, number],\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>,\n dimensionRange: [number, number]\n ): [number, number] {\n let adjustedPixelRange;\n if (dimensionRange[0] < dimensionRange[1]) {\n adjustedPixelRange = [\n dimensionRange[0] + this.numPixels,\n dimensionRange[1] - this.numPixels,\n ];\n } else {\n adjustedPixelRange = [\n dimensionRange[0] - this.numPixels,\n dimensionRange[1] + this.numPixels,\n ];\n }\n const scale = scaleFn(unpaddedDomain, adjustedPixelRange);\n return [scale.invert(dimensionRange[0]), scale.invert(dimensionRange[1])];\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ValueUtilities } from '../../../../../core/utilities/values';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { RoundUpToIntervalDomainPaddingOptions } from './round-to-interval-options';\n\nexport class RoundUpToIntervalDomainPadding extends DomainPadding {\n readonly type: DomainPaddingType.roundInterval;\n readonly interval: (maxValue: number) => number;\n\n constructor(options: RoundUpToIntervalDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.roundInterval;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return ValueUtilities.getValueRoundedToInterval(\n args.value,\n this.interval(args.value),\n args.valueType\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ValueUtilities } from '../../../../../core/utilities/values';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { RoundUpToSigFigDomainPaddingOptions } from './round-to-sig-fig-options';\n\nexport class RoundUpToSigFigDomainPadding\n extends DomainPadding\n implements RoundUpToSigFigDomainPaddingOptions\n{\n readonly sigFigures: (d: number) => number;\n readonly type: DomainPaddingType.roundUp;\n\n constructor(options: RoundUpToSigFigDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.roundUp;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return ValueUtilities.getValueRoundedToNSignificantFigures(\n args.value,\n this.sigFigures(args.value),\n args.valueType\n );\n }\n}\n","import { map } from 'd3';\nimport { DataValue } from '../core/types/values';\nimport { DataDimensionOptions } from './dimension-options';\n\nexport abstract class DataDimension<Datum, TDataValue extends DataValue>\n implements DataDimensionOptions<Datum, TDataValue>\n{\n readonly dimensionType: 'number' | 'ordinal' | 'date';\n readonly formatFunction: (d: Datum) => string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly valueAccessor: (d: Datum) => TDataValue;\n /**\n * An array of values for this dimension, extracted from the data using the value accessor.\n * @see {@link valueAccessor}\n */\n values: TDataValue[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract setPropertiesFromData(data: Datum[], ...args: any): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected abstract setDomain(...args: any): void;\n protected setValues(data: Datum[]): void {\n this.values = map(data, this.valueAccessor);\n }\n\n constructor(dimensionType: 'number' | 'ordinal' | 'date') {\n this.dimensionType = dimensionType;\n }\n}\n","import { max, min } from 'd3';\nimport { isNumber } from '../../../core/utilities/type-guards';\nimport { DataDimension } from '../../dimension';\n\n/**\n * An abstract dimension that for dimensions whose input values are numbers. It assumes that the domain is two numbers.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - The domain will be the user=provided domain if the user provides a domain.\n * - tested in: number-dimension.spec.ts\n * - The domain will be [min, max] of values if the user does not provide a domain.\n * - tested in: number-dimension.spec.ts\n * - The domain will include 0 if includeZeroInDomain is true.\n * - tested in: number-dimension.spec.ts\n * - domainIncludesZero will be true if 0 is in the domain.\n * - tested in: number-dimension.spec.ts\n */\nexport abstract class NumberDimension<Datum> extends DataDimension<\n Datum,\n number\n> {\n protected calculatedDomain: [number, number];\n readonly domain: [number, number];\n domainIncludesZero: boolean;\n readonly formatSpecifier: string;\n readonly includeZeroInDomain: boolean;\n\n setDomain(valuesOverride?: [number, number]) {\n const extents: [number, number] =\n this.domain === undefined\n ? valuesOverride || [min(this.values), max(this.values)]\n : this.domain;\n this.calculatedDomain = this.getCalculatedDomain(extents);\n this.setDomainIncludesZero();\n }\n\n protected getCalculatedDomain(domain: [number, number]): [number, number] {\n return this.includeZeroInDomain\n ? [min([domain[0], 0]), max([domain[1], 0])]\n : domain;\n }\n\n protected setDomainIncludesZero() {\n this.domainIncludesZero =\n this.calculatedDomain[0] <= 0 && 0 <= this.calculatedDomain[1];\n }\n\n // returns false if data is undefined or null or not a number\n // for some charts this may be fine\n // original intended use case: d3Line can only handle defined values\n isValidValue(x: unknown): boolean {\n return isNumber(x);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport { NumberDimension } from '../number-dimension/number-dimension';\nimport { ConcreteDomainPadding } from './domain-padding/concrete-domain-padding';\nimport { NumberChartPositionDimensionOptions } from './number-chart-position-options';\n\n/**\n * A dimension that transforms number values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The resultant scale will confirm to the ScaleContinuousNumeric interface from @types/d3. The range of the scale will be a dimension from the chart.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n * - It creates and returns a scale from a range and the a padded domain if domain padding is provided.\n * - tested in: quantitative-domain-padding.cy.ts\n * - It creates and returns a scale from a range and the regular domain if domain padding is not provided.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n */\n\nexport class NumberChartPositionDimension<Datum>\n extends NumberDimension<Datum>\n implements NumberChartPositionDimensionOptions<Datum>\n{\n readonly domainPadding?: ConcreteDomainPadding;\n readonly scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n\n constructor(options: NumberChartPositionDimensionOptions<Datum>) {\n super('number');\n safeAssign(this, options);\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n }\n\n getScaleFromRange(range: [number, number]) {\n const domain = this.domainPadding\n ? this.getPaddedQuantitativeDomain(range)\n : this.calculatedDomain;\n return this.scaleFn().domain(domain).range(range);\n }\n\n private getPaddedQuantitativeDomain(\n range: [number, number]\n ): [number, number] {\n return this.domainPadding.getPaddedDomain(\n this.calculatedDomain,\n this.scaleFn,\n range\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric, scaleLinear } from 'd3';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { ConcreteDomainPadding } from './domain-padding/concrete-domain-padding';\nimport { PercentOverDomainPadding } from './domain-padding/percent-over/percent-over';\nimport { PixelDomainPadding } from './domain-padding/pixel/pixel';\nimport { RoundUpToIntervalDomainPadding } from './domain-padding/round-to-interval/round-to-interval';\nimport { RoundUpToSigFigDomainPadding } from './domain-padding/round-to-sig-fig/round-to-sig-fig';\nimport { NumberChartPositionDimension } from './number-chart-position';\n\nconst DEFAULT = {\n _includeZeroInDomain: true,\n _scaleFn: scaleLinear,\n};\n\nconst DEFAULT_PADDING = {\n pixels: 40,\n percentOver: 0.1,\n roundInterval: () => 1,\n roundUp: () => 1,\n};\n\nexport class NumberChartPositionDimensionBuilder<\n Datum,\n> extends DataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n private _includeZeroInDomain: boolean;\n private _domainPadding: ConcreteDomainPadding;\n private _scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * Should be in the form of [min, max].\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: [number, number]): this;\n domain(domain: null): this;\n domain(domain: [number, number] | null): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension for display purposes.\n */\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string | null): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a boolean that indicates whether the domain of the dimension's scale should include zero.\n *\n * @default true\n */\n includeZeroInDomain(includeZeroInDomain: boolean): this {\n this._includeZeroInDomain = includeZeroInDomain;\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value of the quantitative domain.\n *\n * For example, if the domain is [0, 100] and the percent is 0.1, the new domain will be [0, 110].\n *\n * @default 0.1\n */\n domainPaddingPercentOver(\n percentOver: number = DEFAULT_PADDING.percentOver\n ): this {\n this._domainPadding = new PercentOverDomainPadding({\n percentOver,\n });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value of the quantitative domain so that it exceeds its original value by the specified number of pixels.\n *\n * @default 40\n */\n domainPaddingPixels(numPixels: number = DEFAULT_PADDING.pixels): this {\n this._domainPadding = new PixelDomainPadding({ numPixels });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value to a number that is rounded up to the specified interval.\n *\n * @default () => 1\n */\n domainPaddingRoundUpToInterval(\n interval: (d: number) => number = DEFAULT_PADDING.roundInterval\n ): this {\n this._domainPadding = new RoundUpToIntervalDomainPadding({\n interval,\n });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value to a number that is rounded up to the specified number of significant figures.\n *\n * @default () => 1\n */\n domainPaddingRoundUpToSigFig(\n sigFigures: (d: number) => number = DEFAULT_PADDING.roundUp\n ): this {\n this._domainPadding = new RoundUpToSigFigDomainPadding({\n sigFigures,\n });\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * @default d3.scaleLinear\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): NumberChartPositionDimension<Datum> {\n this.validateBuilder(dimensionName);\n return new NumberChartPositionDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n includeZeroInDomain: this._includeZeroInDomain,\n domainPadding: this._domainPadding,\n scaleFn: this._scaleFn,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternSet, ScaleBand, scaleBand, scalePoint, ScalePoint } from 'd3';\nimport { DataValue } from '../../../core/types/values';\nimport { DataDimension } from '../../dimension';\nimport { OrdinalChartPositionDimensionOptions } from './ordinal-chart-position-options';\n\n/**\n * A dimension that transforms string / number / Date values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The underlying scale will always be a [D3 band scale](https://d3js.org/d3-scale/band). The range of the scale will be a dimension from the chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the value that will be used to position the data on the chart.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: bars.cy.ts, dots.cy.ts, stacked-bars.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: bars.cy.ts, dots.cy.ts\n * - It checks if a value is in the domain.\n * - tested in: bars.cy.ts\n * - It creates a scale from a range.\n * - tested in: bars.cy.ts, dots.cy.ts\n * - The domain will be unique values from the user-provided domain if the user provides a domain.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain can be set in reverse order.\n * - tested in: ordinal-chart-position.spec.ts\n */\n\nexport class OrdinalChartPositionDimension<Datum, Domain extends DataValue>\n extends DataDimension<Datum, Domain>\n implements OrdinalChartPositionDimensionOptions<Datum, Domain>\n{\n readonly align: number;\n private _calculatedDomain: Domain[];\n readonly domain: Domain[];\n private internSetDomain: InternSet<Domain>;\n readonly paddingInner: number;\n readonly paddingOuter: number;\n private scaleFn: (\n domain?: Iterable<Domain>,\n range?: Iterable<number>\n ) => ScaleBand<Domain> | ScalePoint<Domain>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override readonly valueAccessor: (d: Datum, ...args: any) => Domain;\n\n constructor(\n scaleType: 'band' | 'point' = 'band',\n options: OrdinalChartPositionDimensionOptions<Datum, Domain>\n ) {\n super('ordinal');\n this.scaleFn = scaleType === 'band' ? scaleBand : scalePoint;\n safeAssign(this, options);\n }\n\n get calculatedDomain(): Domain[] {\n return this._calculatedDomain;\n }\n\n setPropertiesFromData(data: Datum[], reverseDomain: boolean = false): void {\n this.setValues(data);\n this.setDomain(reverseDomain);\n }\n\n protected setDomain(reverseDomain: boolean): void {\n let domain = this.domain;\n if (domain === undefined) {\n domain = this.values;\n }\n this.internSetDomain = new InternSet(domain);\n const uniqueValues = [...this.internSetDomain.values()];\n this._calculatedDomain = reverseDomain\n ? uniqueValues.reverse()\n : uniqueValues;\n }\n\n domainIncludes(value: Domain): boolean {\n return this.internSetDomain.has(value);\n }\n\n getScaleFromRange(\n range: [number, number]\n ): ScaleBand<Domain> | ScalePoint<Domain> {\n if (this.scaleFn === scalePoint) {\n return (this.scaleFn() as ScalePoint<Domain>)\n .domain(this._calculatedDomain)\n .range(range)\n .padding(this.paddingOuter)\n .align(this.align);\n } else {\n return (this.scaleFn() as ScaleBand<Domain>)\n .domain(this._calculatedDomain)\n .range(range)\n .paddingInner(this.paddingInner)\n .paddingOuter(this.paddingOuter)\n .align(this.align);\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../../core/types/values';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { OrdinalChartPositionDimension } from './ordinal-chart-position';\n\nconst DEFAULT = {\n _align: 0.5,\n _paddingInner: 0.1,\n _paddingOuter: 0.1,\n _valueAccessor: (d, i) => i,\n};\n\nexport class OrdinalChartPositionDimensionBuilder<\n Datum,\n Domain extends DataValue,\n> extends DataDimensionBuilder<Datum, Domain> {\n private _align: number;\n private _domain: Domain[];\n private _paddingInner: number;\n private _paddingOuter: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the alignment of the ordinal scale and is provided to [D3's align method](https://d3js.org/d3-scale/band#band_align)\n *\n * The value must be between 0 and 1.\n *\n * @default 0.5.\n */\n align(align: null): this;\n align(align: number): this;\n align(align: number): this {\n if (align === null) {\n this._align = DEFAULT._align;\n return this;\n }\n this._align = align;\n return this;\n }\n\n /**\n * OPTIONAL. Sets an array of ordinal values that will be used to define the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: Domain[]): this;\n domain(domain: Domain[]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the inner padding of the ordinal scale and is provided to [D3's paddingInner method](https://d3js.org/d3-scale/band#band_paddingInner)\n *\n * Will have no effect if the scale is a point scale.\n *\n * The value must be between 0 and 1.\n *\n * @default 0.1.\n */\n paddingInner(paddingInner: null): this;\n paddingInner(paddingInner: number): this;\n paddingInner(paddingInner: number): this {\n if (paddingInner === null) {\n this._paddingInner = DEFAULT._paddingInner;\n return this;\n }\n this._paddingInner = paddingInner;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the outer padding of the ordinal scale and is provided to [D3's paddingOuter method](https://d3js.org/d3-scale/band#band_paddingOuter)\n *\n * The value must be between 0 and 1.\n *\n * @default 0.1.\n */\n paddingOuter(paddingOuter: null): this;\n paddingOuter(paddingOuter: number): this;\n paddingOuter(paddingOuter: number): this {\n if (paddingOuter === null) {\n this._paddingOuter = DEFAULT._paddingOuter;\n return this;\n }\n this._paddingOuter = paddingOuter;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(\n scaleType: 'band' | 'point',\n dimensionName: string\n ): OrdinalChartPositionDimension<Datum, Domain> {\n this.validateDimension(dimensionName);\n return new OrdinalChartPositionDimension(scaleType, {\n align: this._align,\n domain: this._domain,\n formatFunction: this._formatFunction,\n paddingInner: this._paddingInner,\n paddingOuter: this._paddingOuter,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateDimension(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternSet, scaleOrdinal } from 'd3';\nimport { DataValue, VisualValue } from '../../../core/types/values';\nimport { DataDimension } from '../../dimension';\nimport { OrdinalVisualValueDimensionOptions } from './ordinal-visual-value-options';\n\n/**\n * A dimension that transforms string / number / Date values into a value of type number or string.\n *\n * This dimension is intended to be used to set a visual property of an element in a chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the value that will be used to set the visual property. The third generic is the type of the range of the scale / the output value.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: ordinal-visual-value.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: ordinal-visual-value.cy.ts\n * - It checks if a value is in the domain.\n * - The domain can be set by the user passing in an array of values.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will always contain only unique values.\n * - tested in: ordinal-chart-position.spec.ts\n */\n\nexport class OrdinalVisualValueDimension<\n Datum,\n Domain extends DataValue,\n Range extends VisualValue,\n> extends DataDimension<Datum, Domain> {\n private _calculatedDomain: Domain[];\n private readonly domain: Domain[];\n private internSetDomain: InternSet<Domain>;\n readonly range: Range[];\n private scale: (category: Domain) => Range;\n\n constructor(\n options: OrdinalVisualValueDimensionOptions<Datum, Domain, Range>\n ) {\n super('ordinal');\n safeAssign(this, options);\n }\n\n get calculatedDomain(): Domain[] {\n return this._calculatedDomain;\n }\n\n getScale(): (category: Domain) => Range {\n return this.scale;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n this.setScale();\n }\n\n protected setDomain(): void {\n let domain = this.domain;\n if (domain === undefined) {\n domain = this.values;\n }\n this.internSetDomain = new InternSet(domain);\n this._calculatedDomain = [...this.internSetDomain.values()];\n }\n\n private setScale(): void {\n if (this.scale === undefined) {\n this.scale = scaleOrdinal([...this.internSetDomain.values()], this.range);\n }\n }\n\n domainIncludes(value: Domain): boolean {\n return this.internSetDomain.has(value);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { schemeTableau10 } from 'd3';\nimport { DataValue, VisualValue } from '../../../core/types/values';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { OrdinalVisualValueDimension } from './ordinal-visual-value';\n\nconst DEFAULT = {\n _range: schemeTableau10,\n _valueAccessor: () => '',\n};\n\nexport class OrdinalVisualValueDimensionBuilder<\n Datum,\n Domain extends DataValue,\n Range extends VisualValue,\n> extends DataDimensionBuilder<Datum, Domain> {\n private _domain: Domain[];\n private _range: Range[];\n private _scale: (category: Domain) => Range;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets an array of categorical values that will be used to define the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: Domain[]): this;\n domain(domain: Domain[]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets an array of visual values that will be the output from D3 scale ordinal.\n *\n * For example, this could be an array of colors or sizes.\n *\n * To have all marks use the same visual value, use an array with a single element.\n *\n * Will not be used if `scale` is set by the user.\n *\n * @default d3.schemeTableau10\n */\n range(range: null): this;\n range(range: Range[]): this;\n range(range: Range[]): this {\n if (range === null) {\n this._range = DEFAULT._range as Range[];\n return this;\n }\n this._range = range;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a user-defined function that transforms a categorical value into a visual value.\n *\n * User must also provide their own implementation of `valueAccessor`.\n *\n * If a custom valueAccessor function is not provided, this function will not be used even if provided (due to default value of `valueAccessor`).\n */\n scale(scale: null): this;\n scale(scale: (category: Domain) => Range): this;\n scale(scale: (category: Domain) => Range): this {\n if (scale === null) {\n this._scale = undefined;\n return this;\n }\n this._scale = scale;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(\n dimensionName: string\n ): OrdinalVisualValueDimension<Datum, Domain, Range> {\n this.validateDimension(dimensionName);\n return new OrdinalVisualValueDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateDimension(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n if (!this._range && !this._scale) {\n throw new Error(\n `${dimensionName} Dimension: Either a range or a scale must be provided.`\n );\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsBackgroundsOptions } from './bars-backgrounds-options';\n\nexport class BarsBackgrounds {\n readonly color: string;\n readonly events: boolean;\n\n constructor(options: BarsBackgroundsOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsBackgrounds } from './bars-backgrounds';\n\nconst DEFAULT = {\n _color: 'whitesmoke',\n _events: false,\n};\n\nexport class BarsBackgroundsBuilder {\n private _color: string;\n private _events: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Determines the color of the background.\n *\n * @param value - The color of the background.\n *\n * If not called, the default color is 'whitesmoke'.\n */\n color(value: string): this {\n this._color = value;\n return this;\n }\n\n /**\n * Determines whether the background is interactive or not.\n *\n * @param value - If `true`, the background is interactive and will respond to Viz Components events. If `false`, the background is not interactive.\n *\n * If not called, the default value is `false`.\n */\n events(value: boolean): this {\n this._events = value;\n return this;\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(): BarsBackgrounds {\n return new BarsBackgrounds({\n color: this._color,\n events: this._events,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { min, range } from 'd3';\nimport { DataValue } from '../../core/types/values';\nimport { FillDefinition } from '../../data-dimensions';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { OrdinalChartPositionDimension } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { BarsBackgrounds } from './backgrounds/bars-backgrounds';\nimport { BarsDimensions } from './bars-dimensions';\nimport { BarsOptions } from './bars-options';\nimport { BarsLabels } from './labels/bars-labels';\n\nexport class BarsConfig<Datum, OrdinalDomain extends DataValue>\n extends XyPrimaryMarksConfig<Datum>\n implements BarsOptions<Datum, OrdinalDomain>\n{\n barsKeyFunction: (i: number) => string;\n readonly backgrounds: BarsBackgrounds;\n readonly color: OrdinalVisualValueDimension<Datum, string, string>;\n readonly customFills: FillDefinition<Datum>[];\n readonly dimensions: BarsDimensions;\n hasNegativeValues: boolean;\n readonly labels: BarsLabels<Datum>;\n readonly ordinal: OrdinalChartPositionDimension<Datum, OrdinalDomain>;\n readonly quantitative: NumberChartPositionDimension<Datum>;\n\n constructor(\n dimensions: BarsDimensions,\n options: BarsOptions<Datum, OrdinalDomain>\n ) {\n super();\n safeAssign(this, options);\n this.dimensions = dimensions;\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setHasNegativeValues();\n this.setBarsKeyFunction();\n }\n\n protected setDimensionPropertiesFromData(): void {\n this.quantitative.setPropertiesFromData(this.data);\n this.ordinal.setPropertiesFromData(this.data, this.dimensions.isHorizontal);\n this.color.setPropertiesFromData(this.data);\n }\n\n protected setValueIndices(): void {\n this.valueIndices = range(this.data.length).filter((i) => {\n if (!this.ordinal.domainIncludes(this.ordinal.values[i])) {\n return false;\n } else {\n const ordinalValue = this.ordinal.values[i];\n const firstIndex = this.ordinal.values.indexOf(ordinalValue);\n return i === firstIndex;\n }\n });\n }\n\n protected setHasNegativeValues(): void {\n this.hasNegativeValues = min(this.quantitative.values) < 0;\n }\n\n protected setBarsKeyFunction(): void {\n this.barsKeyFunction = (i: number): string => `${this.ordinal.values[i]}`;\n }\n}\n","export interface BarsDimensions {\n x: 'ordinal' | 'quantitative';\n y: 'ordinal' | 'quantitative';\n ordinal: 'x' | 'y';\n quantitative: 'x' | 'y';\n quantitativeDimension: 'width' | 'height';\n isHorizontal: boolean;\n isVertical: boolean;\n}\n\nexport const HORIZONTAL_BARS_DIMENSIONS: BarsDimensions = {\n x: 'quantitative',\n y: 'ordinal',\n ordinal: 'y',\n quantitative: 'x',\n quantitativeDimension: 'width',\n isHorizontal: true,\n isVertical: false,\n};\n\nexport const VERTICAL_BARS_DIMENSIONS: BarsDimensions = {\n x: 'ordinal',\n y: 'quantitative',\n ordinal: 'x',\n quantitative: 'y',\n quantitativeDimension: 'height',\n isHorizontal: false,\n isVertical: true,\n};\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsLabelsOptions } from './bars-labels-options';\n\nexport class BarsLabels<Datum> implements BarsLabelsOptions<Datum> {\n color: { default: string; withinBarAlternative: string };\n display: boolean;\n noValueFunction: (d: Datum) => string;\n offset: number;\n\n constructor(options: BarsLabels<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsLabels } from './bars-labels';\n\nconst DEFAULT = {\n _color: {\n default: '#000000',\n withinBarAlternative: '#ffffff',\n },\n _display: true,\n _noValueFunction: () => 'N/A',\n _offset: 4,\n};\n\nexport class BarsLabelsBuilder<Datum> {\n private _color: { default: string; withinBarAlternative: string };\n private _display: boolean;\n private _noValueFunction: (d: Datum) => string;\n private _offset: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n *\n * Sets colors for the labels.\n *\n * The default label color is used for a label positioned outside of a bar. Additionally, if its contrast ratio with the bar color is higher than that of the withinBarAlternative color, it is used for a label positioned within a bar. Otherwise the withinBarAlternative color is used.\n *\n * @default { default: '#000000', withinBarAlternative: '#ffffff' }\n */\n color(color: { default: string; withinBarAlternative: string }): this {\n this._color = color;\n return this;\n }\n\n /**\n * Sets whether labels are displayed or not. Labels will be created but not displayed if this is set to false.\n *\n * A user may want to set this to false if they want labels to display on hover, for example.\n *\n * @default true\n */\n display(display: boolean): this {\n this._display = display;\n return this;\n }\n\n /**\n * Sets the function to set the text of the label when the value of the bar is null or undefined.\n *\n * If called with null, the default function is used.\n *\n * @default (d: Datum) => 'N/A'\n */\n noValueFunction(noValueFunction: null): this;\n noValueFunction(noValueFunction: (d: Datum) => string): this;\n noValueFunction(noValueFunction: ((d: Datum) => string) | null): this {\n if (noValueFunction === null) {\n this._noValueFunction = DEFAULT._noValueFunction;\n return this;\n }\n this._noValueFunction = noValueFunction;\n return this;\n }\n\n /**\n * Sets the distance between the label and the end of the bar.\n *\n * @default 4\n */\n offset(offset: number): this {\n this._offset = offset;\n return this;\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(): BarsLabels<Datum> {\n return new BarsLabels({\n color: this._color,\n display: this._display,\n noValueFunction: this._noValueFunction,\n offset: this._offset,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { FillDefinition } from '../../data-dimensions';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { OrdinalChartPositionDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { BarsBackgroundsBuilder } from './backgrounds/bars-backgrounds-builder';\nimport { BarsConfig } from './bars-config';\nimport {\n BarsDimensions,\n HORIZONTAL_BARS_DIMENSIONS,\n VERTICAL_BARS_DIMENSIONS,\n} from './bars-dimensions';\nimport { BarsLabelsBuilder } from './labels/bars-labels-builder';\n\nabstract class BaseDimensionsBuilder<Datum, TOrdinalValue extends DataValue> {\n protected _ordinalDimensionBuilder: OrdinalChartPositionDimensionBuilder<\n Datum,\n TOrdinalValue\n >;\n protected _quantitativeDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n // Getter methods for VicBarsConfigBuilder to access the builders\n get ordinalDimensionBuilder() {\n return this._ordinalDimensionBuilder;\n }\n\n get quantitativeDimensionBuilder() {\n return this._quantitativeDimensionBuilder;\n }\n\n protected initOrdinalDimensionBuilder() {\n this._ordinalDimensionBuilder = new OrdinalChartPositionDimensionBuilder();\n }\n\n protected initQuantitativeDimensionBuilder() {\n this._quantitativeDimensionBuilder =\n new NumberChartPositionDimensionBuilder();\n }\n}\n\nexport class HorizontalBarsDimensionsBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BaseDimensionsBuilder<Datum, TOrdinalValue> {\n /**\n * REQUIRED. Specifies how values derived from `Datum` (of type `number`) set the x domain of the chart, and how those values are displayed.\n *\n * @param x - A function that specifies how the quantitative values that are mapped to the x dimension will be used in the chart.\n */\n x(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.initQuantitativeDimensionBuilder();\n x(this._quantitativeDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Specifies how values derived from `Datum` (may be type `string`, `number`, or `Date`, though typically `string`) set the y domain of the chart, and how those values are displayed.\n *\n * @param y - A function that specifies how ordinal/categorical values that are mapped to the y dimension will be used in the chart.\n */\n y(\n y: (y: OrdinalChartPositionDimensionBuilder<Datum, TOrdinalValue>) => void\n ): this {\n this.initOrdinalDimensionBuilder();\n y(this._ordinalDimensionBuilder);\n return this;\n }\n}\n\nexport class VerticalBarsDimensionsBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BaseDimensionsBuilder<Datum, TOrdinalValue> {\n /**\n * REQUIRED. Specifies how values derived from `Datum` (may be type `string`, `number`, or `Date`, though typically `string`) set the x domain of the chart, and how those values are displayed.\n *\n * @param x - A function that specifies how ordinal/categorical values that are mapped to the x dimension will be used in the chart.\n */\n x(\n x: (x: OrdinalChartPositionDimensionBuilder<Datum, TOrdinalValue>) => void\n ): this {\n this.initOrdinalDimensionBuilder();\n x(this._ordinalDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Specifies how values derived from `Datum` (of type `number`) set the y domain of the chart, and how those values are displayed.\n *\n * @param y - A function that specifies how the quantitative values that are mapped to the y dimension will be used in the chart.\n */\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.initQuantitativeDimensionBuilder();\n y(this._quantitativeDimensionBuilder);\n return this;\n }\n}\n\n/**\n * Builds a configuration object for a BarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicBarsConfigBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicBarsConfigBuilder<\n Datum,\n OrdinalDomain extends DataValue,\n> extends PrimaryMarksBuilder<Datum> {\n protected _customFills: FillDefinition<Datum>[];\n protected dimensions: BarsDimensions;\n protected _orientation: 'horizontal' | 'vertical';\n protected backgroundsBuilder: BarsBackgroundsBuilder;\n protected colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n protected labelsBuilder: BarsLabelsBuilder<Datum>;\n protected ordinalDimensionBuilder: OrdinalChartPositionDimensionBuilder<\n Datum,\n OrdinalDomain\n >;\n protected quantitativeDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n constructor() {\n super();\n }\n\n /**\n * OPTIONAL. Specifies properties of bars to be drawn behind the bars that represent data values. The background bars span the full width of the chart.\n *\n * @param backgrounds - A function that specifies the color of background bars and whether they respond to events, or `null` to unset the backgrounds function.\n *\n * If called with no arguments, the default background will be `whitesmoke` and events will be `false`.\n *\n * If not called, no background bars will be created.\n */\n backgrounds(backgrounds: (backgrounds: BarsBackgroundsBuilder) => void): this;\n backgrounds(): this;\n backgrounds(backgrounds: null): this;\n backgrounds(\n backgrounds: ((backgrounds: BarsBackgroundsBuilder) => void) | null | void\n ): this {\n if (backgrounds === null) {\n this.backgroundsBuilder = undefined;\n return this;\n }\n this.backgroundsBuilder = new BarsBackgroundsBuilder();\n if (backgrounds) {\n backgrounds?.(this.backgroundsBuilder);\n }\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how values derived from `Datum` (of type `string`) set the color of the bars, and how those values are displayed.\n *\n * @param color - A function that specifies how values derived from `Datum` will be used to set the color of the bars, or null to unset the color., or null to unset the color function.\n *\n * If not called, all bars will be colored with the first color in `d3.schemeTableau10`, the default `range` color scale.\n */\n color(\n color: (\n color: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n color(color: null): this;\n color(\n color:\n | ((\n color: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (color === null) {\n this.colorDimensionBuilder = undefined;\n return this;\n }\n this.initColorDimensionBuilder();\n color?.(this.colorDimensionBuilder);\n return this;\n }\n\n private initColorDimensionBuilder() {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. Determines custom fills for specified bars. Intended to be used with a user-provided fill in <defs> (provided in html) whose `id` is referenced here. The `shouldApply` function is used to determine whether the fill should be applied to a given datum.\n *\n * @param values - An array of custom fills ({ defId: string; shouldApply: (d: Datum) => boolean;}[]), or `null` to unset the custom fills.\n *\n * This will override any fill set by the `color` dimension.\n */\n customFills(values: FillDefinition<Datum>[] | null): this {\n if (values === null) {\n this._customFills = undefined;\n return this;\n }\n this._customFills = values;\n return this;\n }\n\n /**\n * REQUIRED FOR HORIZONTAL BAR CHART.\n *\n * @param bars - A function that specifies properties for the horizontal bars, or `null` to not set the horizontal orientation.\n */\n horizontal(\n bars: (bars: HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void\n ): this;\n horizontal(bars: null): this;\n horizontal(\n bars:\n | ((bars: HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void)\n | null\n ): this {\n // Do not reset anything if null is passed, as vertical will set properties if no horizontal is provided.\n // allow for\n // .horizontal(bars => condition ? bars.stuff() : null)\n // .vertical(bars => !condition ? bars.stuff() : null)\n if (bars === null) return this;\n this._orientation = 'horizontal';\n this.dimensions = HORIZONTAL_BARS_DIMENSIONS;\n const builder = new HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>();\n bars(builder);\n this.ordinalDimensionBuilder = builder.ordinalDimensionBuilder;\n this.quantitativeDimensionBuilder = builder.quantitativeDimensionBuilder;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties of labels to be rendered at the end of bars, typically used to show bar values.\n *\n * @param labels - A function that specifies properties for the labels, or `null` to unset the labels.\n *\n * If not called, no labels will be created.\n */\n labels(labels: (labels: BarsLabelsBuilder<Datum>) => void): this;\n labels(labels: null): this;\n labels(labels: ((labels: BarsLabelsBuilder<Datum>) => void) | null): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new BarsLabelsBuilder<Datum>();\n labels?.(this.labelsBuilder);\n return this;\n }\n\n /**\n * REQUIRED FOR VERTICAL BAR CHART.\n *\n * @param bars - A function that specifies properties for the vertical bars, or `null` to not set the vertical orientation.\n */\n vertical(\n bars: (bars: VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void\n ): this;\n vertical(bars: null): this;\n vertical(\n bars:\n | ((bars: VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void)\n | null\n ): this {\n if (bars === null) return this;\n this._orientation = 'vertical';\n this.dimensions = VERTICAL_BARS_DIMENSIONS;\n const builder = new VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>();\n bars(builder);\n this.ordinalDimensionBuilder = builder.ordinalDimensionBuilder;\n this.quantitativeDimensionBuilder = builder.quantitativeDimensionBuilder;\n return this;\n }\n\n /**\n * REQUIRED. Validates and builds the configuration object for the bars that can be passed to BarsComponent.\n *\n * The user must call this at the end of the chain of methods to build the configuration object.\n */\n getConfig(): BarsConfig<Datum, OrdinalDomain> {\n this.validateBuilder('Bars');\n return new BarsConfig(this.dimensions, {\n marksClass: 'vic-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n });\n }\n\n protected override validateBuilder(componentName: string): void {\n super.validateBuilder(componentName);\n if (!this.colorDimensionBuilder) {\n this.initColorDimensionBuilder();\n }\n if (!this._orientation) {\n // Technically we could make horizontal the default, but we want to make sure users are thinking about this.\n throw new Error(\n `${componentName} Builder: Orientation is required. Please use method 'horizontal' or 'vertical' to set orientation.`\n );\n }\n if (!this.ordinalDimensionBuilder) {\n // Note that the chart will still build if there is not ordinal dimension provided but it will not be full featured/anything we imagine users wanting, so we make this required.\n const dimension = this.getOrdinalDimensionName();\n throw new Error(\n `${componentName} Builder: ${dimension} dimension is required. Please use ${dimension.toLowerCase()} method to create dimension.`\n );\n }\n if (!this.quantitativeDimensionBuilder) {\n const dimension = this.getQuantitativeDimensionName();\n throw new Error(\n `${componentName} Builder: ${dimension} dimension is required. Please use ${dimension.toLowerCase()} method to create dimension.`\n );\n }\n }\n\n protected getOrdinalDimensionName(): string {\n return this._orientation === 'horizontal' ? 'Y' : 'X';\n }\n\n protected getQuantitativeDimensionName(): string {\n return this._orientation === 'horizontal' ? 'X' : 'Y';\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsClickEmitTooltipDataPauseOtherActions<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>) {\n const output = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsHoverShowLabels<Datum, TOrdinalValue extends DataValue>\n implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n host.marks.barGroups\n .filter((d) => d === host.getBarDatum().index)\n .select('text')\n .style('display', null);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.marks.barGroups\n .filter((d) => d === host.getBarDatum().index)\n .select('text')\n .style('display', 'none');\n }\n}\n\nexport class BarsHoverEmitTooltipData<Datum, TOrdinalValue extends DataValue>\n implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n const output = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsHoverMoveEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n const output = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","export enum Orientation {\n horizontal = 'horizontal',\n vertical = 'vertical',\n}\n\nexport enum Side {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left',\n}\n\nexport interface ElementSpacing {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Dimensions {\n width: number;\n height: number;\n}\n\nexport interface Position {\n x: number;\n y: number;\n}\n","export interface VicValueFormats {\n integer: string;\n integerNoComma: string;\n percent: (digits: number) => string;\n decimal: (digits: number) => string;\n decimalNoComma: (digits: number) => string;\n fullYear: string;\n monthYear: string;\n monthFullYear: string;\n}\n\nexport const valueFormat: VicValueFormats = {\n integer: ',.0f',\n integerNoComma: '.0f',\n percent: (digits: number) => `.${digits}%`,\n decimal: (digits: number) => `,.${digits}f`,\n decimalNoComma: (digits: number) => `.${digits}f`,\n fullYear: '%Y',\n monthYear: '%b %Y',\n monthFullYear: '%B %Y',\n};\n","import { Injectable } from '@angular/core';\nimport { saveAs } from 'file-saver';\nimport { cloneDeep } from 'lodash-es';\nimport { unparse } from 'papaparse';\nimport { VicDataExportConfig } from './data-export-config';\n\n@Injectable({ providedIn: 'root' })\nexport class VicDataExport {\n saveCSV(name: string, dataConfigs: VicDataExportConfig[]): void {\n const blobParts = [];\n for (const dataConfig of dataConfigs) {\n let csv: string;\n\n let csvData = cloneDeep(dataConfig.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n csvData = csvData.map((datum: any) => {\n const returnObj = {};\n for (const column of dataConfig.columns) {\n returnObj[column.title] = column.valueAccessor(datum);\n // handle common unicode character replacements\n // d3 format's strange default minus character https://observablehq.com/@d3/d3-format\n if (typeof returnObj[column.title] === 'string') {\n returnObj[column.title] = returnObj[column.title].replace(\n /\\u2212/g,\n '-'\n );\n }\n }\n return returnObj;\n });\n\n if (dataConfig.flipped) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data: any = csvData.reduce((acc: any, curr: any) => {\n for (const key in curr) {\n if (\n dataConfig.flippedHeaderKey &&\n key === dataConfig.flippedHeaderKey\n )\n continue;\n\n const valueToAdd =\n curr[key] instanceof String || typeof curr[key] === 'string'\n ? `\"${curr[key]}\"`\n : curr[key];\n if (key in acc) {\n acc[key] += `,${valueToAdd}`;\n } else {\n acc[key] = `${valueToAdd}`;\n }\n }\n return acc;\n }, {});\n\n csv = '';\n if (dataConfig.flippedHeaderKey) {\n csv += ',';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n csv += csvData.reduce((acc: any, curr: any) => {\n if (acc !== '') {\n acc += `,${curr[dataConfig.flippedHeaderKey]}`;\n } else {\n acc += `${curr[dataConfig.flippedHeaderKey]}`;\n }\n return acc;\n }, '');\n }\n\n for (const key of Object.keys(data)) {\n if (csv !== '') {\n csv += '\\r\\n';\n }\n csv += `${key},${data[key]}`;\n }\n } else {\n csv = unparse(csvData);\n }\n\n for (let i = 0; i < dataConfig.marginBottom; i++) {\n csv = `${csv}\\r\\n`;\n }\n blobParts.push(csv);\n }\n const blob = new Blob(blobParts, { type: 'text/csv;charset=utf-8' });\n saveAs.saveAs(blob, `${name}.csv`);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { valueFormat } from '../core/utilities/value-format';\nimport { ValueUtilities } from '../core/utilities/values';\n\nexport class VicColumnConfig {\n title: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n valueAccessor: (x: any) => any;\n\n constructor(options?: Partial<VicColumnConfig>) {\n safeAssign(this, options);\n }\n}\n\nexport class VicDataExportConfig {\n data: unknown[];\n /**\n * If true, the data will be flipped.\n * Data: {a: 1, b: 2}, {a: 3, b: 4}\n * Output CSV:\n * a | 1 | 3\n * b | 2 | 4\n */\n flipped = false;\n /**\n * If provided, the flipped data's header will be set.\n * Data: {a: 1, b: 2, category: shrimp}, {a: 3, b: 4, category: lobster}\n * Output CSV:\n * shrimp | lobster\n * a | 1 | 3\n * b | 2 | 4\n */\n flippedHeaderKey: string;\n /**\n * Specifies the keys on each object to include in the csv,\n * using default titles (converts thisIsAKey to This Is A Key) and values (object.thisIsAKey).\n * Data: {myKey: 1, otherKey: 2}, {myKey: 3, otherKey: 4}\n * defaultColumnList: [myKey]\n * Output CSV:\n * My Key\n * 1\n * 3\n */\n defaultColumnList: string[] = [];\n /**\n * If true, all keys from the first object in the data array\n * are used to populate defaultColumnList\n */\n includeAllKeysAsDefault = false;\n /**\n * A ColumnConfig needs to be provided for any column that can't use defaults\n * e.g. if there's a special title, the data needs to be formatted in some way,\n * sometimes certain fields are suppressed, etc.\n */\n columns: VicColumnConfig[] = [];\n marginBottom = 0;\n constructor(config?: Partial<VicDataExportConfig>) {\n safeAssign(this, config);\n if (this.includeAllKeysAsDefault && this.data) {\n this.defaultColumnList = Object.keys(this.data[0]);\n }\n this.defaultColumnList.forEach((key) => {\n this.columns.push(\n new VicColumnConfig({\n title: key !== this.flippedHeaderKey ? this.convertToTitle(key) : key,\n valueAccessor: (x) =>\n x[key] instanceof Date\n ? ValueUtilities.d3Format(x[key], valueFormat.monthYear)\n : x[key],\n })\n );\n });\n }\n\n convertToTitle(key: string): string {\n /**\n * Will convert:\n * - thisString -> This String\n * - 123String -> 123 String\n * - 123string -> 123 string\n * - string123 -> String 123\n * - thisSTRING -> This STRING\n * - thisSTRiNG -> This STRi NG\n */\n let converted_key =\n key.charAt(0).toUpperCase() +\n key.slice(1).replace(/([a-z])([A-Z])/g, (match, p1, p2) => p1 + ' ' + p2);\n converted_key = converted_key.replace(\n /([a-zA-Z])(\\d+)/g,\n (match, p1, p2) => p1 + ' ' + p2\n );\n converted_key = converted_key.replace(\n /(\\d+)([a-zA-Z])/g,\n (match, p1, p2) => p1 + ' ' + p2\n );\n return converted_key;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleTime, max, min } from 'd3';\nimport { isDate } from '../../../core/utilities/type-guards';\nimport { DataDimension } from '../../dimension';\nimport { DateChartPositionDimensionOptions } from './date-chart-position-options';\n\n/**\n * A dimension that transforms Date values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The underlying scale will always be a [D3 time scale](https://d3js.org/d3-scale/time). The range of the scale will be a dimension from the chart.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: lines.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: lines.cy.ts\n * - It creates and returns a scale from a range.\n * - tested in: lines.cy.ts\n * - It checks if a value is in valid.\n * - tested in: lines.cy.ts\n * - The domain will be unique values from the user-provided domain if the user provides a domain.\n * - tested in: date-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: date-chart-position.spec.ts\n * - The domain can be set in reverse order.\n * - tested in: date-chart-position.spec.ts\n */\n\nexport class DateChartPositionDimension<Datum>\n extends DataDimension<Datum, Date>\n implements DateChartPositionDimensionOptions<Datum>\n{\n private calculatedDomain: [Date, Date];\n readonly domain: [Date, Date];\n readonly formatSpecifier: string;\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>;\n\n constructor(options: DateChartPositionDimensionOptions<Datum>) {\n super('date');\n safeAssign(this, options);\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n }\n\n protected setDomain() {\n const extents: [Date, Date] =\n this.domain === undefined\n ? [min(this.values), max(this.values)]\n : this.domain;\n this.calculatedDomain = extents;\n }\n\n getScaleFromRange(range: [number, number]): ScaleTime<number, number> {\n return this.scaleFn().domain(this.calculatedDomain).range(range);\n }\n\n // returns false if data is undefined or null of not a Date\n // for some charts this may be fine\n // original intended use case: d3Line can only handle defined values\n isValidValue(x: unknown): boolean {\n return isDate(x);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleTime, scaleUtc } from 'd3';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { DateChartPositionDimension } from './date-chart-position';\n\nconst DEFAULT = {\n _scaleFn: scaleUtc,\n _formatSpecifier: '%Y %m',\n};\n\nexport class DateChartPositionDimensionBuilder<\n Datum,\n> extends DataDimensionBuilder<Datum, Date> {\n private _domain: [Date, Date];\n private _formatSpecifier: string;\n private _scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: [Date, Date]): this;\n domain(domain: [Date, Date]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to values from this dimension for display purposes, for example, in a tooltip.\n *\n * This is a string that is passed to D3's timeFormat function.\n *\n * @default '%Y %m'\n */\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: string): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * @default d3.scaleUtc\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): DateChartPositionDimension<Datum> {\n this.validateBuilder(dimensionName);\n return new DateChartPositionDimension<Datum>({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n scaleFn: this._scaleFn,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport { VisualValue } from '../../../core';\nimport { NumberDimension } from '../number-dimension/number-dimension';\nimport { NumberVisualValueDimensionOptions } from './number-visual-value-options';\n\n/**\n * A dimension that transforms number values into a value of type number or string.\n *\n * This dimension is intended to be used to set a visual property of an element in a chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the range of the scale / the output value.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: dots.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: dots.cy.ts\n * - It set the scale from the calculated domain and the user-provided range of the user does not provide a scale.\n * - tested in: dots.cy.ts\n */\n\nexport class NumberVisualValueDimension<\n Datum,\n Range extends VisualValue,\n> extends NumberDimension<Datum> {\n readonly range: [Range, Range];\n private scale: (value: number) => Range;\n readonly scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>;\n\n constructor(options: NumberVisualValueDimensionOptions<Datum, Range>) {\n super('number');\n safeAssign(this, options);\n }\n\n getScale(): (value: number) => Range {\n return this.scale;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n this.setScale();\n }\n\n private setScale(): void {\n if (this.scale === undefined) {\n this.scale = this.scaleFn()\n .domain(this.calculatedDomain)\n .range(this.range);\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric, scaleLinear } from 'd3';\nimport { VisualValue } from '../../../core';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { NumberVisualValueDimension } from './number-visual-value';\n\nconst DEFAULT = {\n _includeZeroInDomain: false,\n _scaleFn: scaleLinear,\n};\n\nexport class NumberVisualValueDimensionBuilder<\n Datum,\n Range extends VisualValue,\n> extends DataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n private _includeZeroInDomain: boolean;\n private _range: [Range, Range];\n private _scale: (value: number) => Range;\n private _scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * Should be in the form of [min, max].\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: [number, number]): this;\n domain(domain: [number, number]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension for display purposes.\n */\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: string): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a boolean that indicates whether the domain of the dimension's scale should include zero.\n *\n * @default false\n */\n includeZeroInDomain(includeZeroInDomain: boolean): this {\n this._includeZeroInDomain = includeZeroInDomain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a range of visual values that will be the output from D3 scale linear.\n *\n * If not provided, a scale must be provided.\n *\n * For example, this could be a range of colors or sizes.\n *\n * To have all marks use the same visual value, use an array with a single element.\n */\n range(range: null): this;\n range(range: [Range, Range]): this;\n range(range: [Range, Range]): this {\n if (range === null) {\n this._range = undefined;\n return this;\n }\n this._range = range;\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * If the user provides a custom scale function through the `scale` method, this will be ignored.\n *\n * @default d3.scaleLinear\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * OPTIONAL. Allows a user to set a completely custom scale that transforms the value returned by this dimension's valueAccessor into a visual value (string or number).\n *\n * If not provided, a range must be provided.\n *\n * If provided, this will override any values provided to domain, range, and scaleFn.\n */\n scale(scale: null): this;\n scale(scale: (value: number) => Range): this;\n scale(scale: (value: number) => Range): this {\n if (scale === null) {\n this._scale = undefined;\n return this;\n }\n this._scale = scale;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): NumberVisualValueDimension<Datum, Range> {\n this.validateBuilder(dimensionName);\n return new NumberVisualValueDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n includeZeroInDomain: this._includeZeroInDomain,\n range: this._range,\n scaleFn: this._scaleFn,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n if (!this._range && !this._scale) {\n throw new Error(\n `${dimensionName} Dimension: Either a range or a scale must be provided.`\n );\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range } from 'd3';\nimport { DataValue } from '../../core';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { NumberDimension } from '../../data-dimensions/continuous-quantitative/number-dimension/number-dimension';\nimport { NumberVisualValueDimension } from '../../data-dimensions/continuous-quantitative/number-visual-value/number-visual-value';\nimport { DataDimension } from '../../data-dimensions/dimension';\nimport { OrdinalChartPositionDimension } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { Stroke } from '../../stroke/stroke';\nimport { DotsOptions } from './dots-options';\n\nexport class DotsConfig<\n Datum,\n XOrdinalDomain extends DataValue = string,\n YOrdinalDomain extends DataValue = string,\n >\n extends XyPrimaryMarksConfig<Datum>\n implements DotsOptions<Datum, XOrdinalDomain, YOrdinalDomain>\n{\n fill:\n | OrdinalVisualValueDimension<Datum, string, string>\n | NumberVisualValueDimension<Datum, string>;\n opacity: number;\n pointerDetectionRadius: number;\n radius:\n | OrdinalVisualValueDimension<Datum, string, number>\n | NumberVisualValueDimension<Datum, number>;\n stroke: Stroke;\n x:\n | NumberChartPositionDimension<Datum>\n | DateChartPositionDimension<Datum>\n | OrdinalChartPositionDimension<Datum, XOrdinalDomain>;\n y:\n | NumberChartPositionDimension<Datum>\n | DateChartPositionDimension<Datum>\n | OrdinalChartPositionDimension<Datum, YOrdinalDomain>;\n\n constructor(options: DotsOptions<Datum, XOrdinalDomain, YOrdinalDomain>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n }\n\n protected setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data, this.y.dimensionType === 'ordinal');\n this.fill.setPropertiesFromData(this.data);\n this.radius.setPropertiesFromData(this.data);\n }\n\n protected setValueIndices(): void {\n this.valueIndices = range(this.data.length).filter(\n (i) => this.isValidValue('x', i) && this.isValidValue('y', i)\n );\n }\n\n private isValidValue(dimension: 'x' | 'y', i: number): boolean {\n const config = this[dimension];\n if (this.isContinuousQuantitativeDimension(config)) {\n return config.isValidValue(config.values[i]);\n } else {\n return true;\n }\n }\n\n isContinuousQuantitativeDimension(\n dimension: DataDimension<Datum, DataValue>\n ): dimension is NumberDimension<Datum> {\n return (\n dimension.dimensionType === 'number' || dimension.dimensionType === 'date'\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { schemeTableau10 } from 'd3';\nimport { DataValue } from '../../core';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { NumberVisualValueDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-builder';\nimport { OrdinalChartPositionDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { DotsConfig } from './dots-config';\n\nconst DEFAULT = {\n _pointerDetectionRadius: 12,\n _fill: 'lightgray',\n _opacity: 1,\n _radius: 2,\n};\n\n@Injectable()\nexport class VicDotsConfigBuilder<\n Datum,\n XOrdinalDomain extends DataValue = string,\n YOrdinalDomain extends DataValue = string,\n> extends PrimaryMarksBuilder<Datum> {\n private _opacity: number;\n private _pointerDetectionRadius: number;\n private fillBuilderCategorical: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private fillBuilderNumber: NumberVisualValueDimensionBuilder<Datum, string>;\n private fillBuilderConst: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private radiusBuilderCategorical: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n number\n >;\n private radiusBuilderNumber: NumberVisualValueDimensionBuilder<Datum, number>;\n private radiusBuilderConst: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n number\n >;\n private strokeBuilder: StrokeBuilder;\n private xBuilderNumeric: NumberChartPositionDimensionBuilder<Datum>;\n private xBuilderDate: DateChartPositionDimensionBuilder<Datum>;\n private xBuilderOrdinal: OrdinalChartPositionDimensionBuilder<\n Datum,\n XOrdinalDomain\n >;\n private yBuilderNumeric: NumberChartPositionDimensionBuilder<Datum>;\n private yBuilderDate: DateChartPositionDimensionBuilder<Datum>;\n private yBuilderOrdinal: OrdinalChartPositionDimensionBuilder<\n Datum,\n YOrdinalDomain\n >;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the appearance of the fill for the dots using a color string.\n *\n * If a string is passed, it will be used as the color for all dots.\n *\n * @default 'schemeTableau10[0]'\n */\n fill(fill: null): this;\n fill(fill: string): this;\n fill(fill: string | null): this {\n if (fill === null) {\n this.fillBuilderConst = undefined;\n return this;\n }\n this.fillBuilderConst = new OrdinalVisualValueDimensionBuilder();\n this.fillBuilderConst.valueAccessor(() => '').range([fill]);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the fill for the dots using a categorical dimension.\n *\n */\n fillCategorical(fill: null): this;\n fillCategorical(\n fill: (\n fill: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n fillCategorical(\n fill:\n | ((\n fill: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (fill === null) {\n this.fillBuilderCategorical = undefined;\n return this;\n }\n this.fillBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n fill(this.fillBuilderCategorical);\n return this;\n }\n\n fillNumeric(fill: null): this;\n fillNumeric(\n fill: (fill: NumberVisualValueDimensionBuilder<Datum, string>) => void\n ): this;\n fillNumeric(\n fill:\n | ((fill: NumberVisualValueDimensionBuilder<Datum, string>) => void)\n | null\n ): this {\n if (fill === null) {\n this.fillBuilderNumber = undefined;\n return this;\n }\n this.initFillBuilderNumber();\n fill(this.fillBuilderNumber);\n return this;\n }\n\n private initFillBuilderNumber(): void {\n this.fillBuilderNumber = new NumberVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. Sets the opacity of the dots.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. The size of the radius of the dots\n *\n * This is temporarily a constant.\n *\n * @default 2\n */\n radius(radius: null): this;\n radius(radius: number): this;\n radius(radius: number | null): this {\n if (radius === null) {\n this.radiusBuilderConst = undefined;\n return this;\n }\n this.radiusBuilderConst = new OrdinalVisualValueDimensionBuilder();\n this.radiusBuilderConst.range([radius]);\n return this;\n }\n\n radiusCategorical(radius: null): this;\n radiusCategorical(\n radius: (\n radius: OrdinalVisualValueDimensionBuilder<Datum, string, number>\n ) => void\n ): this;\n radiusCategorical(\n radius:\n | ((\n radius: OrdinalVisualValueDimensionBuilder<Datum, string, number>\n ) => void)\n | null\n ): this {\n if (radius === null) {\n this.radiusBuilderCategorical = undefined;\n return this;\n }\n this.radiusBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n radius(this.radiusBuilderCategorical);\n return this;\n }\n\n radiusNumeric(radius: null): this;\n radiusNumeric(\n radius: (radius: NumberVisualValueDimensionBuilder<Datum, number>) => void\n ): this;\n radiusNumeric(\n radius: (\n radius: NumberVisualValueDimensionBuilder<Datum, number>\n ) => void | null\n ): this {\n if (radius === null) {\n this.radiusBuilderNumber = undefined;\n return this;\n }\n this.radiusBuilderNumber = new NumberVisualValueDimensionBuilder();\n radius(this.radiusBuilderNumber);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the stroke for the dots.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xDate(x: null): this;\n xDate(x: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xBuilderDate = undefined;\n return this;\n }\n this.xBuilderDate = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xBuilderDate);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xNumeric(x: null): this;\n xNumeric(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xBuilderNumeric = undefined;\n return this;\n }\n this.xBuilderNumeric = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xBuilderNumeric);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xOrdinal(x: null): this;\n xOrdinal(\n x: (x: OrdinalChartPositionDimensionBuilder<Datum, XOrdinalDomain>) => void\n ): this;\n xOrdinal(\n x:\n | ((\n x: OrdinalChartPositionDimensionBuilder<Datum, XOrdinalDomain>\n ) => void)\n | null\n ): this {\n if (x === null) {\n this.xBuilderDate = undefined;\n return this;\n }\n this.xBuilderOrdinal = new OrdinalChartPositionDimensionBuilder<\n Datum,\n XOrdinalDomain\n >();\n x(this.xBuilderOrdinal);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yDate(y: null): this;\n yDate(y: (y: DateChartPositionDimensionBuilder<Datum>) => void): this;\n yDate(\n y: ((y: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (y === null) {\n this.yBuilderDate = undefined;\n return this;\n }\n this.yBuilderDate = new DateChartPositionDimensionBuilder<Datum>();\n y(this.yBuilderDate);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yNumeric(y: null): this;\n yNumeric(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n yNumeric(\n y: ((y: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (y === null) {\n this.yBuilderNumeric = undefined;\n return this;\n }\n this.yBuilderNumeric = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yBuilderNumeric);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yOrdinal(y: null): this;\n yOrdinal(\n y: (y: OrdinalChartPositionDimensionBuilder<Datum, YOrdinalDomain>) => void\n ): this;\n yOrdinal(\n y:\n | ((\n y: OrdinalChartPositionDimensionBuilder<Datum, YOrdinalDomain>\n ) => void)\n | null\n ): this {\n if (y === null) {\n this.yBuilderOrdinal = undefined;\n return this;\n }\n this.yBuilderOrdinal = new OrdinalChartPositionDimensionBuilder<\n Datum,\n YOrdinalDomain\n >();\n y(this.yBuilderOrdinal);\n return this;\n }\n\n /**\n * REQUIRED. Validates and builds the configuration object for the bars that can be passed to BarsComponent.\n *\n * The user must call this at the end of the chain of methods to build the configuration object.\n */\n getConfig(): DotsConfig<Datum, XOrdinalDomain, YOrdinalDomain> {\n this.validateBuilder();\n const fillName = 'Dots Fill';\n const radiusName = 'Dots Radius';\n const xName = 'Dots X';\n const yName = 'Dots Y';\n const fillBuilder = this.fillBuilderCategorical\n ? this.fillBuilderCategorical\n : this.fillBuilderNumber || this.fillBuilderConst;\n const radiusBuilder = this.radiusBuilderCategorical\n ? this.radiusBuilderCategorical\n : this.radiusBuilderNumber || this.radiusBuilderConst;\n return new DotsConfig<Datum, XOrdinalDomain, YOrdinalDomain>({\n marksClass: 'vic-dots',\n data: this._data,\n datumClass: this._datumClass,\n fill: fillBuilder._build(fillName),\n mixBlendMode: this._mixBlendMode,\n opacity: this._opacity,\n pointerDetectionRadius: this._pointerDetectionRadius,\n radius: radiusBuilder._build(radiusName),\n stroke: this.strokeBuilder?._build(),\n x: this.xBuilderDate\n ? this.xBuilderDate._build(xName)\n : this.xBuilderNumeric\n ? this.xBuilderNumeric._build(xName)\n : this.xBuilderOrdinal._build('point', xName),\n y: this.xBuilderDate\n ? this.yBuilderDate._build(yName)\n : this.yBuilderNumeric\n ? this.yBuilderNumeric._build(yName)\n : this.yBuilderOrdinal._build('point', yName),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Lines');\n const fillBuilders = [\n this.fillBuilderCategorical,\n this.fillBuilderNumber,\n this.fillBuilderConst,\n ];\n const numFillBuilders = fillBuilders.filter(\n (builder) => builder !== undefined\n ).length;\n if (numFillBuilders === 0) {\n this.fillBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n this.fillBuilderCategorical.range([schemeTableau10[0]]);\n }\n if (numFillBuilders > 1) {\n throw new Error(\n `Dots Builder: Only one fill method can be called with a truthy value. Curently ${numFillBuilders} are called.`\n );\n }\n const radiusBuilders = [\n this.radiusBuilderCategorical,\n this.radiusBuilderNumber,\n this.radiusBuilderConst,\n ];\n const numRadiusBuilders = radiusBuilders.filter(\n (builder) => builder !== undefined\n ).length;\n if (numRadiusBuilders === 0) {\n this.radiusBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n this.radiusBuilderCategorical.range([2]);\n }\n if (numRadiusBuilders > 1) {\n throw new Error(\n `Dots Builder: Only one radius method can be called with a truthy value. Curently ${numRadiusBuilders} are called.`\n );\n }\n if (\n +!!this.xBuilderNumeric +\n +!!this.xBuilderDate +\n +!!this.xBuilderOrdinal !==\n 1\n ) {\n throw new Error(\n 'Dots Builder: Exactly one X dimension is required. Please use one of `xDate`, `xNumeric`, or `xOrdinal` to set it.'\n );\n }\n if (\n +!!this.yBuilderNumeric +\n +!!this.yBuilderDate +\n +!!this.yBuilderOrdinal !==\n 1\n ) {\n throw new Error(\n 'Dots Builder: Exactly one Y dimension is required. Please use one of `yDate`, `yNumeric`, or `yOrdinal` to set it.'\n );\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { DataValue, GenericScale } from '../core';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { NumberDimension } from '../data-dimensions/continuous-quantitative/number-dimension/number-dimension';\nimport { DataDimension } from '../data-dimensions/dimension';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { DotsConfig } from './config/dots-config';\n\nexport const DOTS = new InjectionToken<DotsComponent<unknown>>('DotsComponent');\n\nexport type DotGroupSelection = Selection<\n SVGGElement,\n DotDatum,\n SVGGElement,\n unknown\n>;\nexport type DotSelection = Selection<\n SVGCircleElement,\n DotDatum,\n SVGGElement,\n DotDatum\n>;\nexport type DotLabelSelection = Selection<\n SVGTextElement,\n DotDatum,\n SVGGElement,\n DotDatum\n>;\n\nexport type DotDatum = {\n index: number;\n x: DataValue;\n y: DataValue;\n fill: string | number;\n radius: string | number;\n};\n\nexport interface DotsTooltipDatum<Datum> {\n datum: Datum;\n values: {\n x: string;\n y: string;\n fill: string | number;\n radius: string | number;\n };\n color: string;\n}\n\ntype DotsSvgElement = 'g' | 'dot';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-dots]',\n template: '',\n styleUrl: './dots.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: DotsComponent },\n { provide: DOTS, useExisting: DotsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixed-blend-mode]': 'config.mixBlendMode',\n },\n})\nexport class DotsComponent<Datum> extends VicXyPrimaryMarks<\n Datum,\n DotsConfig<Datum>\n> {\n dotGroups: DotGroupSelection;\n dots: BehaviorSubject<DotSelection> = new BehaviorSubject(null);\n dots$ = this.dots.asObservable().pipe(filter((s) => !!s));\n override scales: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill: GenericScale<any, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n radius: GenericScale<any, any>;\n } & XyChartScales = {\n fill: undefined,\n radius: undefined,\n x: undefined,\n y: undefined,\n useTransition: undefined,\n };\n private elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n private zone = inject(NgZone);\n\n get class(): Record<DotsSvgElement, string> {\n return {\n g: this.config.marksClass + '-group',\n dot: this.config.marksClass + '-dot',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.fill = this.config.fill.getScale();\n this.scales.radius = this.config.radius.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawDots(transitionDuration);\n this.updateDotElements();\n }\n\n drawDots(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n .duration(transitionDuration);\n\n this.dotGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, DotDatum>(`.${this.class.g}`)\n .data<DotDatum>(\n this.config.valueIndices.map((i) => this.getDotDatumFromIndex(i))\n )\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (d) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[d.index], d.index)}`.trim()\n )\n .attr(\n 'transform',\n (d) => `translate(${this.scales.x(d.x)}, ${this.scales.y(d.y)})`\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr(\n 'transform',\n (d) => `translate(${this.scales.x(d.x)}, ${this.scales.y(d.y)})`\n ),\n (exit) => exit.remove()\n );\n\n this.dotGroups\n .selectAll<SVGCircleElement, DotDatum>(`.${this.class.dot}`)\n .data<DotDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('circle')\n .attr('class', this.class.dot)\n .attr('r', (d) => this.scales.radius(d.radius))\n .attr('fill', (d) => this.scales.fill(d.fill))\n .attr('fill-opacity', this.config.opacity)\n .attr(\n 'stroke',\n this.config.stroke ? this.config.stroke.color : 'none'\n )\n .attr(\n 'stroke-dasharray',\n this.config.stroke ? this.config.stroke.dasharray : null\n )\n .attr(\n 'stroke-linecap',\n this.config.stroke ? this.config.stroke.linecap : null\n )\n .attr(\n 'stroke-linejoin',\n this.config.stroke ? this.config.stroke.linejoin : null\n )\n .attr(\n 'stroke-opacity',\n this.config.stroke ? this.config.stroke.opacity : null\n )\n .attr(\n 'stroke-width',\n this.config.stroke ? this.config.stroke.width : null\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('r', (d) => this.scales.radius(d.radius))\n .attr('fill', (d) => this.scales.fill(d.fill))\n .attr(\n 'stroke',\n this.config.stroke ? this.config.stroke.color : 'none'\n )\n .attr(\n 'stroke-dasharray',\n this.config.stroke ? this.config.stroke.dasharray : null\n )\n .attr(\n 'stroke-linecap',\n this.config.stroke ? this.config.stroke.linecap : null\n )\n .attr(\n 'stroke-linejoin',\n this.config.stroke ? this.config.stroke.linejoin : null\n )\n .attr(\n 'stroke-opacity',\n this.config.stroke ? this.config.stroke.opacity : null\n )\n .attr(\n 'stroke-width',\n this.config.stroke ? this.config.stroke.width : null\n ),\n (exit) => exit.remove()\n );\n }\n\n getDotDatumFromIndex(index: number): DotDatum {\n return {\n index,\n x: this.config.x.values[index],\n y: this.config.y.values[index],\n fill: this.config.fill.values[index],\n radius: this.config.radius.values[index],\n };\n }\n\n updateDotElements(): void {\n const dots = select(this.elRef.nativeElement).selectAll<\n SVGCircleElement,\n DotDatum\n >(`.${this.class.dot}`);\n this.dots.next(dots);\n }\n\n getTooltipData(dotDatum: DotDatum): DotsTooltipDatum<Datum> {\n const datum = this.config.data[dotDatum.index];\n const valueFill = this.config.fill.valueAccessor(datum);\n const tooltipData: DotsTooltipDatum<Datum> = {\n datum,\n values: {\n fill: valueFill,\n radius: this.config.radius.valueAccessor(datum),\n x: this.getFormattedValue('x', datum),\n y: this.getFormattedValue('y', datum),\n },\n color: this.scales.fill(valueFill),\n };\n return tooltipData;\n }\n\n getFormattedValue(dimension: 'x' | 'y', datum: Datum): string {\n const config = this.config[dimension];\n if (config.formatFunction) {\n return ValueUtilities.customFormat(datum, config.formatFunction);\n } else if (this.isContinuousNumericDimension(config)) {\n return ValueUtilities.d3Format(\n config.valueAccessor(datum) as number,\n config.formatSpecifier\n );\n } else {\n return config.valueAccessor(datum).toString();\n }\n }\n\n isContinuousNumericDimension(\n dimension: DataDimension<Datum, DataValue>\n ): dimension is NumberDimension<Datum> {\n return (\n 'formatSpecifier' in dimension &&\n typeof dimension.formatSpecifier === 'string'\n );\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromCenter().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromCenter().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromCenter().attachBottomRight().getPosition(),\n];\n\nexport class DotsTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { DotDatum, DOTS, DotsComponent } from '../dots.component';\nimport { DotsInteractionOutput } from './dots-interaction-output';\nimport { DotsTooltipPositioner } from './dots-tooltip-positioner';\n\nexport interface DotsHost<\n Datum,\n TDotsComponent extends DotsComponent<Datum> = DotsComponent<Datum>,\n> extends MarksHost<DotsInteractionOutput<Datum>, TDotsComponent> {\n getDotDatum(): DotDatum | null;\n}\n\n@Directive({\n selector: '[vicDotsEvents]',\n})\nexport class DotsEventsDirective<\n Datum,\n TDotsComponent extends DotsComponent<Datum> = DotsComponent<Datum>,\n> extends EventsDirective<DotsHost<Datum>> {\n @Input()\n hoverActions:\n | EventAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n clickActions:\n | EventAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n DotsHost<Datum>,\n DotsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n DotsInteractionOutput<Datum>\n >();\n\n dotDatum: DotDatum;\n origin: SVGCircleElement;\n\n constructor(@Inject(DOTS) public dots: TDotsComponent) {\n super();\n }\n\n get marks(): DotsComponent<Datum> {\n return this.dots;\n }\n\n getElements(): Observable<Element[]> {\n return this.dots.dots$.pipe(map((sel) => sel.nodes()));\n }\n\n getDotDatum(): DotDatum | null {\n return this.dotDatum;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this);\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGCircleElement;\n this.dotDatum = select(el as SVGCircleElement).datum() as DotDatum;\n }\n\n setPositionsFromElement(): void {\n const dotRect = this.origin.getBoundingClientRect();\n this.positionX = dotRect.width / 2;\n this.positionY = dotRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): DotsInteractionOutput<Datum> {\n const tooltipData = this.dotDatum\n ? this.dots.getTooltipData(this.dotDatum)\n : undefined;\n const position = new DotsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: DotsInteractionOutput<Datum>): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.dotDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DotsComponent } from './dots.component';\nimport { DotsEventsDirective } from './events/dots-events.directive';\n\n@NgModule({\n imports: [DotsComponent, DotsEventsDirective],\n exports: [DotsComponent, DotsEventsDirective],\n})\nexport class VicDotsModule {}\n","import { EventAction } from '../../../events';\nimport { DotsHost } from '../dots-events.directive';\n\nexport class DotsHoverDefaultStyles<Datum>\n implements EventAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .filter((d) => d.index !== host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', '#ccc');\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { DotsHost } from '../dots-events.directive';\n\nexport class DotsHoverMoveDefaultStyles<Datum>\n implements HoverMoveAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .filter((d) => d.index !== host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', '#ccc');\n\n host.marks.dotGroups\n .filter((d) => d.index === host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .select((d, i, nodes) => nodes[i].parentElement)\n .raise();\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', null);\n }\n}\n\nexport class DotsHoverMoveEmitTooltipData<Datum>\n implements HoverMoveAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n const output = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n ExtendedFeature,\n ExtendedFeatureCollection,\n ExtendedGeometryCollection,\n GeoGeometryObjects,\n GeoProjection,\n} from 'd3';\nimport {\n GeoJsonProperties,\n GeometryObject as Geometry,\n MultiPolygon,\n Polygon,\n} from 'geojson';\nimport { MarksConfig } from '../../marks';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GeographiesOptions } from './geographies-options';\nimport { GeographiesAttributeDataLayer } from './layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from './layers/geojson-properties-layer/geojson-properties-layer';\n\nexport class GeographiesConfig<\n Datum,\n TProperties extends GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends MarksConfig\n implements GeographiesOptions<Datum, TProperties, TGeometry>\n{\n readonly boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection;\n readonly attributeDataLayer: GeographiesAttributeDataLayer<\n Datum,\n TProperties,\n TGeometry\n >;\n featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n layers: (\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n )[];\n readonly geojsonPropertiesLayers: GeographiesGeojsonPropertiesLayer<\n TProperties,\n TGeometry\n >[];\n readonly projection: GeoProjection;\n\n constructor(options: GeographiesOptions<Datum, TProperties, TGeometry>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setLayers();\n this.setLayerFeatureIndexAccessors();\n }\n\n private setLayers(): void {\n this.layers = [];\n if (this.attributeDataLayer) {\n this.layers.push(this.attributeDataLayer);\n }\n if (this.geojsonPropertiesLayers) {\n this.layers.push(...this.geojsonPropertiesLayers);\n }\n this.layers.forEach((layer, i) => {\n layer.id = i;\n });\n }\n\n private setLayerFeatureIndexAccessors(): void {\n this.layers.forEach((layer) =>\n layer.setFeatureIndexAccessor(this.featureIndexAccessor)\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport type * as CSSType from 'csstype';\nimport { GeoPath, GeoProjection, ScaleLinear } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { Position } from '../../../../core/types/layout';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n GeographiesLabelsOptions,\n} from './geographies-labels-options';\n\nexport class GeographiesLabels<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> implements GeographiesLabelsOptions<TProperties, TGeometry>\n{\n alignmentBaseline: CSSType.Property.AlignmentBaseline;\n color: GeographiesLabelsColorOptions | CSSType.Property.Fill;\n cursor: CSSType.Property.Cursor;\n display: (featureIndex: string) => boolean;\n dominantBaseline: CSSType.Property.DominantBaseline;\n fontScale: ScaleLinear<number, number, never>;\n fontWeight: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight;\n pointerEvents: CSSType.Property.PointerEvents;\n position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection?: GeoProjection\n ) => Position;\n textAnchor: CSSType.Property.TextAnchor;\n valueAccessor: (\n feature: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n\n constructor(options: GeographiesLabelsOptions<TProperties, TGeometry>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport type * as CSSType from 'csstype';\nimport {\n GeoPath,\n GeoProjection,\n maxIndex,\n polygonArea,\n scaleLinear,\n ScaleLinear,\n} from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport polylabel from 'polylabel';\nimport { Position } from '../../../../core/types/layout';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabels } from './geographies-labels';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n} from './geographies-labels-options';\n\nconst DEFAULT = {\n _alignmentBaseline: 'middle',\n _color: '#000',\n _cursor: 'default',\n _display: () => true,\n _dominantBaseline: 'middle',\n _fontScale: scaleLinear().domain([0, 800]).range([0, 17]),\n _fontWeight: 400,\n _textAnchor: 'middle',\n _pointerEvents: 'none',\n _valueAccessor: (feature) => feature,\n};\n\nexport class GeographiesLabelsBuilder<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> {\n private _alignmentBaseline: CSSType.Property.AlignmentBaseline;\n private _color: GeographiesLabelsColorOptions | CSSType.Property.Fill;\n private _cursor: CSSType.Property.Cursor;\n private _display: (featureIndex: string) => boolean;\n private _dominantBaseline: CSSType.Property.DominantBaseline;\n private _fontWeight:\n | GeographiesLabelsFontWeightOptions\n | CSSType.Property.FontWeight;\n private _fontScale: ScaleLinear<number, number, never>;\n private _pointerEvents: CSSType.Property.PointerEvents;\n private _position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection?: GeoProjection\n ) => Position;\n private _textAnchor: CSSType.Property.TextAnchor;\n private _valueAccessor: (\n featureIndex: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n this._position = (d, path) =>\n this.positionAtCentroid<TProperties, TGeometry>(d, path);\n }\n\n /**\n * OPTIONAL. The alignment of the baseline of the text relative to the text's font.\n *\n * @default 'middle'\n */\n alignmentBaseline(\n alignmentBaseline: CSSType.Property.AlignmentBaseline\n ): this {\n this._alignmentBaseline = alignmentBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. The color of the text. If a string value is provided, that value will be used for all geographies on the layer.\n *\n * If an object is provided, the color between default and contrastAlternative that has the highest contrast ratio with the geography's background color will be used.\n *\n * If a value for `pattern` is provided, that value will be used for geographies with a fill pattern. If it is not provided, the default option will be used for geographies with a fill pattern.\n *\n * @default '#000'\n */\n color(color: GeographiesLabelsColorOptions | CSSType.Property.Fill): this {\n this._color = color;\n return this;\n }\n\n /**\n * OPTIONAL. The cursor to display when hovering over the text\n *\n * @default 'default'\n */\n cursor(cursor: CSSType.Property.Cursor): this {\n this._cursor = cursor;\n return this;\n }\n\n /**\n * OPTIONAL, A function that determines whether to display the label for a given feature.\n *\n * @default () => true\n */\n display(display: boolean): this;\n display(display: (featureIndex: string) => boolean): this;\n display(display: boolean | ((featureIndex: string) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. The dominant baseline of the text.\n *\n * @default 'middle'\n */\n dominantBaseline(dominantBaseline: CSSType.Property.DominantBaseline): this {\n this._dominantBaseline = dominantBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. The font weight of the text.\n *\n * If an object is provided, the font weight for each property on the object will be used when the corresponding color is used.\n *\n * @default 400\n */\n fontWeight(\n fontWeight: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight\n ): this {\n this._fontWeight = fontWeight;\n return this;\n }\n\n /**\n * The scale used to determine the font size of the label.\n */\n fontScale(fontScale: ScaleLinear<number, number, never>): this {\n this._fontScale = fontScale;\n return this;\n }\n\n /**\n * The pointer events of the text.\n */\n pointerEvents(pointerEvents: CSSType.Property.PointerEvents): this {\n this._pointerEvents = pointerEvents;\n return this;\n }\n\n /**\n * The position of the label relative to the feature\n */\n position(\n position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection: GeoProjection\n ) => Position\n ): this {\n this._position = position;\n return this;\n }\n\n /**\n * The text anchor of the text.\n */\n textAnchor(textAnchor: CSSType.Property.TextAnchor): this {\n this._textAnchor = textAnchor;\n return this;\n }\n\n /**\n * A function that determines the value of the label for a given feature\n */\n valueAccessor(\n valueAccessor: (\n featureIndex: GeographiesFeature<TProperties, TGeometry>\n ) => string\n ): this {\n this._valueAccessor = valueAccessor;\n return this;\n }\n\n _build(): GeographiesLabels<TProperties, TGeometry> {\n return new GeographiesLabels<TProperties, TGeometry>({\n alignmentBaseline: this._alignmentBaseline,\n color: this._color,\n cursor: this._cursor,\n display: this._display,\n dominantBaseline: this._dominantBaseline,\n fontScale: this._fontScale,\n fontWeight: this._fontWeight,\n pointerEvents: this._pointerEvents,\n position: this._position,\n textAnchor: this._textAnchor,\n valueAccessor: this._valueAccessor,\n });\n }\n\n /**\n * A function to position something at the centroid of a feature.\n */\n positionAtCentroid<TProperties, TGeometry extends Geometry>(\n feature: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath\n ): Position {\n const c = path.centroid(feature);\n return { x: c[0], y: c[1] };\n }\n\n /**\n * A function to position a label for Hawaii on a GeoAlbersUsa projection.\n */\n positionHawaiiOnGeoAlbersUsa<TProperties>(\n feature: GeographiesFeature<TProperties, MultiPolygon>,\n projection: GeoProjection\n ): Position {\n const startPolygon =\n // we need to cast because Position can return two or three numbers but GeoProjection\n // can only handle [number, number]\n (feature.geometry.coordinates[0][0] as [number, number][]).map(\n projection\n );\n const endPolygon = (\n feature.geometry.coordinates[\n feature.geometry.coordinates.length - 1\n ][0] as [number, number][]\n ).map(projection);\n\n const approxStartCoords = startPolygon[0];\n const approxEndCoords = endPolygon[0];\n return {\n x: approxStartCoords[0] + (approxEndCoords[0] - approxStartCoords[0]) / 2,\n y: approxStartCoords[1],\n };\n }\n\n /**\n * A function to position a label with Polylabel lib\n */\n positionWithPolylabel<\n TProperties,\n TGeometry extends MultiPolygon | Polygon = MultiPolygon | Polygon,\n >(\n feature: GeographiesFeature<TProperties, TGeometry>,\n projection: GeoProjection\n ): Position {\n const isMultiPolygon = feature.geometry.coordinates.length > 1;\n let largestIndex = 0;\n let largestPolygon: [number, number][];\n if (isMultiPolygon) {\n const coords = feature.geometry.coordinates as [number, number][][][];\n largestIndex = maxIndex(\n coords.map((polygon) => {\n return polygonArea(polygon[0]);\n })\n );\n largestPolygon = coords[largestIndex][0];\n } else {\n const coords = feature.geometry.coordinates as [number, number][][];\n largestPolygon = coords[0];\n }\n const projectedPoints = largestPolygon.map(projection);\n const adjustedPosition = polylabel([projectedPoints]);\n return { x: adjustedPosition[0], y: adjustedPosition[1] };\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry } from 'geojson';\nimport { StrokeBuilder } from '../../../../stroke/stroke-builder';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabelsBuilder } from '../labels/geographies-labels-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _mixBlendMode: 'normal',\n _strokeColor: 'dimgray',\n _strokeWidth: '1',\n};\n\nexport abstract class GeographiesLayerBuilder<\n TProperties,\n TGeometry extends Geometry,\n> {\n protected _class: (d: TProperties) => string;\n protected _enableEventActions: boolean;\n protected _geographies: Array<GeographiesFeature<TProperties, TGeometry>>;\n protected labelsBuilder: GeographiesLabelsBuilder<TProperties, TGeometry>;\n protected _mixBlendMode: string;\n protected strokeBuilder: StrokeBuilder;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that correspends to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: TProperties) => string): this;\n class(value: ((d: TProperties) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines whether the layer can use viz-components event actions.\n *\n * If true, the event listener that corresponds to the provided directive will be placed on that layer's paths.\n *\n * @default true for Attribute Data layer\n * @default false for Geojson Properties layers\n */\n enableEventActions(value: boolean): this {\n this._enableEventActions = value;\n return this;\n }\n\n /**\n * REQUIRED. GeoJSON features that define the geographies to be drawn.\n */\n geographies(value: Array<GeographiesFeature<TProperties, TGeometry>>): this {\n this._geographies = value;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for labels that will be drawn on the geographies.\n */\n labels(labels: null): this;\n labels(\n labels: (labels: GeographiesLabelsBuilder<TProperties, TGeometry>) => void\n ): this;\n labels(\n labels:\n | ((labels: GeographiesLabelsBuilder<TProperties, TGeometry>) => void)\n | null\n ): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new GeographiesLabelsBuilder();\n labels(this.labelsBuilder);\n return this;\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the stroke for the geographies in the layer.\n */\n stroke(setProperties?: (stroke: StrokeBuilder) => void): this {\n this.initStrokeBuilder();\n setProperties?.(this.strokeBuilder);\n return this;\n }\n\n protected initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n}\n","import * as CSSType from 'csstype';\nimport { Geometry } from 'geojson';\nimport { ColorUtilities } from '../../../../core/utilities/colors';\nimport { Stroke } from '../../../../stroke/stroke';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabels } from '../labels/geographies-labels';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n} from '../labels/geographies-labels-options';\nimport { GeographiesLayerOptions } from './geographies-layer-options';\n\nexport interface GeographiesTooltipDatum<Datum> {\n attributeValue?: string;\n color: string;\n datum?: Datum;\n geography: string;\n}\n\nexport abstract class GeographiesLayer<\n Datum,\n TProperties,\n TGeometry extends Geometry,\n> implements GeographiesLayerOptions<TProperties, TGeometry>\n{\n enableEventActions: boolean;\n featureClass: (d: TProperties) => string;\n featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n geographies: Array<GeographiesFeature<TProperties, TGeometry>>;\n id: number;\n labels: GeographiesLabels<TProperties, TGeometry>;\n stroke: Stroke;\n\n setFeatureIndexAccessor(\n accessor: (d: GeographiesFeature<TProperties, TGeometry>) => string\n ): void {\n this.featureIndexAccessor = accessor;\n }\n\n abstract getFill(feature: GeographiesFeature<TProperties, TGeometry>): string;\n\n abstract getTooltipData(\n path: SVGPathElement\n ): GeographiesTooltipDatum<Datum | undefined>;\n\n getLabelColor(\n feature: GeographiesFeature<TProperties, TGeometry>\n ): CSSType.Property.Fill {\n const pathColor = this.getFill(feature);\n if (typeof this.labels.color === 'string') {\n return this.labels.color;\n }\n\n if (pathColor.startsWith('url')) {\n return this.labels.color.pattern ?? this.labels.color.default;\n }\n\n return ColorUtilities.getHigherContrastColorForBackground(\n pathColor,\n this.labels.color.default,\n this.labels.color.contrastAlternative\n );\n }\n\n getLabelFontWeight(\n feature: GeographiesFeature<TProperties, TGeometry>\n ): CSSType.Property.FontWeight {\n const pathColor = this.getFill(feature);\n\n if (!this.isContrastFontWeightOptions(this.labels.fontWeight)) {\n return this.labels.fontWeight;\n }\n\n if (pathColor.startsWith('url')) {\n return this.labels.fontWeight.pattern ?? this.labels.fontWeight.default;\n }\n\n if (this.isContrastColorOptions(this.labels.color)) {\n const labelColor = ColorUtilities.getHigherContrastColorForBackground(\n pathColor,\n this.labels.color.default,\n this.labels.color.contrastAlternative\n );\n return labelColor === this.labels.color.default\n ? this.labels.fontWeight.default\n : this.labels.fontWeight.contrastAlternative;\n }\n\n return this.labels.fontWeight.default;\n }\n\n isContrastColorOptions(\n options: GeographiesLabelsColorOptions | CSSType.Property.Fill\n ): options is GeographiesLabelsColorOptions {\n return typeof options === 'object' && options !== null;\n }\n\n isContrastFontWeightOptions(\n options: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight\n ): options is GeographiesLabelsFontWeightOptions {\n return typeof options === 'object' && options !== null;\n }\n}\n","/**\n * Enum that defines the types of binning that can be used to map quantitative attribute data to colors.\n */\nexport enum BinStrategy {\n none = 'none',\n categorical = 'categorical',\n equalValueRanges = 'equalValueRanges',\n equalFrequencies = 'equalFrequencies',\n customBreaks = 'customBreaks',\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternMap, select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillUtilities } from '../../../../core/utilities/fill-utilities';\nimport { ValueUtilities } from '../../../../core/utilities/values';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLayer,\n GeographiesTooltipDatum,\n} from '../geographies-layer/geographies-layer';\nimport { GeographiesAttributeDataLayerOptions } from './attribute-data-layer-options';\nimport { BinStrategy } from './dimensions/attribute-data-bin-enums';\nimport { CategoricalBinsAttributeDataDimension } from './dimensions/categorical-bins/categorical-bins';\nimport { CustomBreaksBinsAttributeDataDimension } from './dimensions/custom-breaks/custom-breaks-bins';\nimport { EqualFrequenciesAttributeDataDimension } from './dimensions/equal-frequencies-bins/equal-frequencies-bins';\nimport { EqualValueRangesAttributeDataDimension } from './dimensions/equal-value-ranges-bins/equal-value-ranges-bins';\nimport { NoBinsAttributeDataDimension } from './dimensions/no-bins/no-bins';\n\nconst DEFAULT = {\n _nullColor: '#dcdcdc',\n _strokeColor: 'dimgray',\n _strokeWidth: '1',\n _enableEventActions: true,\n};\n\nexport class GeographiesAttributeDataLayer<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends GeographiesLayer<Datum, TProperties, TGeometry>\n implements GeographiesAttributeDataLayerOptions<Datum, TProperties, TGeometry>\n{\n readonly attributeDimension:\n | CategoricalBinsAttributeDataDimension<Datum>\n | NoBinsAttributeDataDimension<Datum>\n | EqualValueRangesAttributeDataDimension<Datum>\n | EqualFrequenciesAttributeDataDimension<Datum>\n | CustomBreaksBinsAttributeDataDimension<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeScale: any;\n attributeValuesByGeographyIndex: InternMap<string, string | number>;\n readonly customFills: FillDefinition<Datum>[];\n readonly data: Datum[];\n datumsByGeographyIndex: InternMap<string, Datum>;\n geographyIndexAccessor: (d: Datum) => string;\n readonly marksClass: string;\n readonly mixBlendMode: string;\n\n constructor(\n options: GeographiesAttributeDataLayerOptions<Datum, TProperties, TGeometry>\n ) {\n super();\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n if (this.attributeDimension === undefined) {\n console.error('Attribute dimension is required for data layers');\n }\n if (this.geographyIndexAccessor === undefined) {\n console.error('Geography index accessor is required for data layers');\n }\n this.initPropertiesFromData();\n }\n\n initPropertiesFromData(): void {\n const uniqueDatums = this.getUniqueDatumsByGeoAccessor(this.data);\n this.attributeDimension.setPropertiesFromData(uniqueDatums);\n this.setAttributeDataMaps(uniqueDatums);\n this.attributeScale = this.attributeDimension.getScale();\n }\n\n private getUniqueDatumsByGeoAccessor(data: Datum[]): Datum[] {\n const uniqueByGeoAccessor = (arr: Datum[], set = new Set()) =>\n arr.filter(\n (x) =>\n !set.has(this.geographyIndexAccessor(x)) &&\n set.add(this.geographyIndexAccessor(x))\n );\n return uniqueByGeoAccessor(data);\n }\n\n private setAttributeDataMaps(uniqueDatums: Datum[]): void {\n this.attributeValuesByGeographyIndex = new InternMap(\n uniqueDatums.map((d) => {\n const value = this.attributeDimension.valueAccessor(d);\n return [\n this.geographyIndexAccessor(d),\n value === null || value === undefined ? undefined : value,\n ];\n })\n );\n this.datumsByGeographyIndex = new InternMap(\n uniqueDatums.map((d) => {\n return [this.geographyIndexAccessor(d), d];\n })\n );\n }\n\n getFill(feature: GeographiesFeature<TProperties, TGeometry>): string {\n const geographyIndex = this.featureIndexAccessor(feature);\n return this.customFills\n ? this.getPatternFill(geographyIndex)\n : this.getAttributeFill(geographyIndex);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getPatternFill(geographyIndex: string): string {\n const datum = this.datumsByGeographyIndex.get(geographyIndex);\n const geographyFill = this.getAttributeFill(geographyIndex);\n return FillUtilities.getFill(datum, geographyFill, this.customFills);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getAttributeFill(geographyIndex: string): string {\n const dataValue = this.attributeValuesByGeographyIndex.get(geographyIndex);\n return this.attributeScale(dataValue);\n }\n\n getTooltipData(path: SVGPathElement): GeographiesTooltipDatum<Datum> {\n const feature = select(path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n const featureIndex = this.featureIndexAccessor(feature);\n const datum = this.datumsByGeographyIndex.get(featureIndex);\n const value = this.attributeValuesByGeographyIndex.get(featureIndex);\n const tooltipData: GeographiesTooltipDatum<Datum> = {\n datum,\n geography: this.geographyIndexAccessor(datum),\n attributeValue: this.attributeDimension.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.attributeDimension.formatFunction\n )\n : this.attributeDimension.dimensionType !== 'ordinal' &&\n this.attributeDimension.binType !== BinStrategy.categorical\n ? ValueUtilities.d3Format(\n value as number,\n this.attributeDimension.formatSpecifier\n )\n : (value as string),\n color: this.getAttributeFill(featureIndex),\n };\n\n return tooltipData;\n }\n}\n","import { DataValue } from '../../../../../../core/types/values';\nimport { DataDimensionBuilder } from '../../../../../../data-dimensions/dimension-builder';\n\nexport abstract class AttributeDataDimensionBuilder<\n Datum,\n AttributeValue extends DataValue,\n RangeValue extends string | number = string,\n> extends DataDimensionBuilder<Datum, AttributeValue> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _interpolator: (...args: any) => any;\n protected _nullColor: string;\n protected _range: RangeValue[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _scale: (...args: any) => string;\n\n /**\n * OPTIONAL. For binned dimensions, a function that will be used to create the a new range for the attribute data scale if the user's specified numBins is greater than the values in the user's specified range.\n *\n * For the No Bins dimension, this will be used to interpolate between the two colors in the range.\n *\n * @default interpolateLab\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolator(interpolator: (...args: any) => any): this {\n this._interpolator = interpolator;\n return this;\n }\n\n /**\n * A color that will be used if there are any geojson features provided in this dimension's geographies that do not have attribute data.\n *\n * @default 'whitesmoke'\n */\n nullColor(nullColor: string): this {\n this._nullColor = nullColor;\n return this;\n }\n\n /**\n * OPTIONAL. An array of values that will be used as the range in the attribute data scale.\n *\n * @default ['white', 'slategray'] for Categorical Bins\n * @default ['white', 'blue'] for Equal Frequencies Bins\n * @default ['white', 'pink', 'red'] for Equal Value Ranges Bins\n */\n range(range: RangeValue[]): this {\n this._range = range;\n return this;\n }\n\n /**\n * A function that will be used to create the scale for the attribute data.\n *\n * @default scaleOrdinal for Categorical Bins\n * @default scaleThreshold for Custom Breaks Bins (cannot be overridden)\n * @default scaleQuantile for Equal Frequencies Bins\n * @default scaleQuantize for Equal Value Ranges Bins\n * @default scaleLinear for No Bins\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale(scale: (...args: any) => string): this {\n this._scale = scale;\n return this;\n }\n}\n","import { DataValue } from '../../../../../../core/types/values';\nimport { DataDimension } from '../../../../../../data-dimensions/dimension';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimensionOptions } from './attribute-data-dimension-options';\n\n/**\n * Configuration object for attribute data that will be used to shade the map.\n *\n * The first generic parameter is the type of the attribute data.\n */\nexport abstract class AttributeDataDimension<\n Datum,\n AttributeValue extends DataValue,\n RangeValue extends string | number = string,\n >\n extends DataDimension<Datum, AttributeValue>\n implements AttributeDataDimensionOptions<Datum, AttributeValue, RangeValue>\n{\n binType: BinStrategy;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolator: (...args: any) => any;\n nullColor: string;\n range: RangeValue[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: (...args: any) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract getScale(): any;\n\n constructor(dimensionType: 'number' | 'ordinal' | 'date') {\n super(dimensionType);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { CategoricalBinsOptions } from './categorical-bins-options';\n\n/**\n * Configuration object for attribute data that is categorical.\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class CategoricalBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends AttributeDataDimension<Datum, string>\n implements CategoricalBinsOptions<Datum, string>\n{\n override readonly binType: BinStrategy.categorical;\n calculatedDomain: string[];\n readonly domain: string[];\n override interpolator: never;\n\n constructor(options: CategoricalBinsOptions<Datum, RangeValue>) {\n super('ordinal');\n this.binType = BinStrategy.categorical;\n safeAssign(this, options);\n }\n\n getDomain(): string[] {\n return this.calculatedDomain;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setRange();\n }\n\n protected setDomain(values: string[]): void {\n const domainValues = this.domain ?? values;\n this.calculatedDomain = [...new Set(domainValues)];\n }\n\n protected setRange(): void {\n this.range = this.range.slice(0, this.calculatedDomain.length);\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { scaleOrdinal } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { CategoricalBinsAttributeDataDimension } from './categorical-bins';\n\nconst DEFAULT = {\n _nullColor: 'whitesmoke',\n _range: ['white', 'lightslategray'],\n _scale: scaleOrdinal,\n _valueAccessor: () => '',\n};\n\nexport class CategoricalBinsBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, RangeValue> {\n private _domain: string[];\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: string[]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): CategoricalBinsAttributeDataDimension<Datum, RangeValue> {\n return new CategoricalBinsAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range, scaleLinear } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { CustomBreaksBinsAttributeDataDimensionOptions } from './custom-breaks-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into custom breaks.\n *\n * For example, if the data is [0, 1, 2, 4, 60, 100] and breakValues is [0, 2, 5, 10, 50], the bin ranges will be [0, 2], [2, 5], [5, 10], [10, 50], [50, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class CustomBreaksBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends AttributeDataDimension<Datum, number, RangeValue>\n implements CustomBreaksBinsAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.customBreaks;\n readonly breakValues: number[];\n private calculatedNumBins: number;\n private calculatedDomain: number[];\n readonly formatSpecifier: string;\n\n constructor(\n options: CustomBreaksBinsAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.customBreaks;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for CustomBreaksAttributeDataDimension'\n );\n }\n if (!this.breakValues) {\n console.error(\n 'breakValues are required for CustomBreaksAttributeDataDimension'\n );\n }\n if (this.breakValues.length < 2) {\n console.error(\n 'breakValues must have at least two values for CustomBreaksAttributeDataDimension'\n );\n }\n this.breakValues = this.breakValues.slice().sort((a, b) => a - b);\n }\n\n setPropertiesFromData(): void {\n this.setDomain();\n this.setNumBins();\n this.setRange();\n }\n\n protected setDomain(): void {\n this.calculatedDomain = this.breakValues.slice(1);\n }\n\n private setNumBins(): void {\n this.calculatedNumBins = this.breakValues.length - 1;\n }\n\n protected setRange(): void {\n if (this.range.length < this.calculatedNumBins) {\n const scale = scaleLinear<RangeValue>()\n .domain([0, this.calculatedNumBins - 1])\n .range(this.range);\n this.range = range(this.calculatedNumBins).map((i) => scale(i));\n }\n }\n\n getScale() {\n // the D3.ScaleThreshold domain is an array of naturally ordered values, which are typically numbers but could also be strings. Thus if scale is called with a string value here, it scale will return the first value of the range, not the nullColor. See https://d3js.org/d3-scale/threshold#threshold_domain.\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleThreshold } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { CustomBreaksBinsAttributeDataDimension } from './custom-breaks-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _scale: scaleThreshold,\n};\n\nexport class CustomBreaksBinsAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, number, RangeValue> {\n private _breakValues: number[];\n private _formatSpecifier: string;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. An array of values to specify bin ranges. This array should include both the lowest and highest values and must have at least two values.\n *\n * An array of [0, 2, 5, 10, 50] will create bins [0, 2], [2, 5], [5, 10], [10, 50].\n *\n * Values should be in ascending order.\n *\n * Values below the first value will be colored with the color for the first bin. Values above the last value will be colored with the color for the last bin. \n * \n * In this sense, the first and last values are primarily used for \n in a legend, should one be displayed. \n *\n *In order for the legend to be accurate, users should ensure that the first and last values are the minimum and maximum values in the data.\n */\n breakValues(breakValues: number[]): this {\n this._breakValues = breakValues;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n _build(): CustomBreaksBinsAttributeDataDimension<Datum, RangeValue> {\n return new CustomBreaksBinsAttributeDataDimension({\n breakValues: this._breakValues,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\n\nexport abstract class CalculatedBinsAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, number, RangeValue> {\n protected _formatSpecifier: string;\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n}\n","import { extent, range, scaleLinear } from 'd3';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\n\nexport abstract class CalculatedBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimension<Datum, number, RangeValue> {\n protected calculatedNumBins: number;\n readonly formatSpecifier: string;\n\n protected setRange(): void {\n if (this.shouldCalculateBinColors(this.calculatedNumBins, this.range)) {\n const binIndicies = range(this.calculatedNumBins);\n this.range = binIndicies.map((i) =>\n this.getColorGenerator(binIndicies)(i)\n );\n }\n }\n\n private shouldCalculateBinColors(\n numBins: number,\n range: RangeValue[]\n ): boolean {\n return numBins > 1 && range.length !== numBins;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getColorGenerator(binIndicies: number[]): any {\n return scaleLinear<RangeValue>()\n .domain(extent(binIndicies))\n .range(this.range)\n .interpolate(this.interpolator);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { CalculatedBinsAttributeDataDimension } from '../calculated-bins/calculated-bins';\nimport { EqualFrequenciesAttributeDataDimensionOptions } from './equal-frequencies-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into equal number of observations. For example, if the data is [0, 1, 2, 4, 60, 100] and numBins is 2, the bin ranges will be [0, 2] and [4, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class EqualFrequenciesAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends CalculatedBinsAttributeDataDimension<Datum, RangeValue>\n implements EqualFrequenciesAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.equalFrequencies;\n private calculatedDomain: number[];\n readonly numBins: number;\n\n constructor(\n options: EqualFrequenciesAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.equalFrequencies;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for EqualNumObservationsAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setNumBins();\n this.setRange();\n }\n\n protected setDomain(values: number[]): void {\n this.calculatedDomain = values;\n }\n\n private setNumBins(): void {\n this.calculatedNumBins = this.numBins;\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleQuantile } from 'd3';\nimport { CalculatedBinsAttributeDataDimensionBuilder } from '../calculated-bins/calculated-bins-builder';\nimport { EqualFrequenciesAttributeDataDimension } from './equal-frequencies-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _numBins: 4,\n _range: ['white', 'blue'],\n _scale: scaleQuantile,\n};\n\nexport class EqualFrequenciesAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends CalculatedBinsAttributeDataDimensionBuilder<Datum, RangeValue> {\n private _numBins: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The number of bins to create.\n *\n * @default 4\n */\n numBins(numBins: number): this {\n this._numBins = numBins;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): EqualFrequenciesAttributeDataDimension<Datum, RangeValue> {\n return new EqualFrequenciesAttributeDataDimension({\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n numBins: this._numBins,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { extent } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { CalculatedBinsAttributeDataDimension } from '../calculated-bins/calculated-bins';\nimport { EqualValueRangesAttributeDataDimensionOptions } from './equal-value-ranges-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into equal value ranges. For example, if the data is [0, 1, 2, 4, 60, 100] and numBins is 2, the bin ranges will be [0, 49] and [50, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class EqualValueRangesAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends CalculatedBinsAttributeDataDimension<Datum, RangeValue>\n implements EqualValueRangesAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.equalValueRanges;\n private calculatedDomain: [number, number];\n readonly domain: [number, number];\n readonly numBins: number;\n\n constructor(\n options: EqualValueRangesAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.equalValueRanges;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for EqualValuesAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setValidatedDomainAndNumBins();\n this.setRange();\n }\n\n protected setDomain(values: number[]): void {\n const domainValues = this.domain ?? values;\n this.calculatedDomain = extent(domainValues);\n }\n\n private setValidatedDomainAndNumBins(): void {\n if (this.valueFormatIsInteger()) {\n const validated = this.getValidatedNumBinsAndDomainForIntegerValues(\n this.numBins,\n this.calculatedDomain\n );\n this.calculatedNumBins = validated.numBins;\n this.calculatedDomain = validated.domain;\n } else {\n this.calculatedNumBins = this.numBins;\n }\n }\n\n protected valueFormatIsInteger(): boolean {\n return this.formatSpecifier && this.formatSpecifier.includes('0f');\n }\n\n protected getValidatedNumBinsAndDomainForIntegerValues(\n numBins: number,\n domain: [number, number]\n ): {\n numBins: number;\n domain: [number, number];\n } {\n const validated = { numBins, domain };\n const dataRange = domain.map((x) => Math.round(x));\n const numDiscreteValues = Math.abs(dataRange[1] - dataRange[0]) + 1;\n if (numDiscreteValues < numBins) {\n validated.numBins = numDiscreteValues;\n validated.domain = [dataRange[0], dataRange[1] + 1];\n }\n return validated;\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleQuantize } from 'd3';\nimport { CalculatedBinsAttributeDataDimensionBuilder } from '../calculated-bins/calculated-bins-builder';\nimport { EqualValueRangesAttributeDataDimension } from './equal-value-ranges-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _numBins: 3,\n _range: ['white', 'pink', 'red'],\n _scale: scaleQuantize,\n};\n\nexport class EqualValueRangesBinsBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends CalculatedBinsAttributeDataDimensionBuilder<Datum, RangeValue> {\n private _domain: [number, number];\n private _numBins: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: [number, number]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. The number of bins to create.\n *\n * @default 3\n */\n numBins(numBins: number): this {\n this._numBins = numBins;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): EqualValueRangesAttributeDataDimension<Datum, RangeValue> {\n return new EqualValueRangesAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n numBins: this._numBins,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { extent } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { NoBinsAttributeDataDimensionOptions } from './no-bins-options';\n\nexport class NoBinsAttributeDataDimension<Datum> extends AttributeDataDimension<\n Datum,\n number\n> {\n override readonly binType: BinStrategy.none;\n domain: [number, number];\n formatSpecifier: string;\n\n constructor(options: NoBinsAttributeDataDimensionOptions<Datum>) {\n super('number');\n this.binType = BinStrategy.none;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for NoBinsAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n }\n\n protected setDomain(values: number[]): void {\n const domainValues = this.domain ?? values;\n this.domain = extent(domainValues);\n }\n\n getScale() {\n return this.scale()\n .domain(this.domain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleLinear } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { NoBinsAttributeDataDimension } from './no-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _range: ['white', 'slategray'],\n _scale: scaleLinear,\n};\n\n/**\n * Configuration object for attribute data that is quantitative and does not have bins.\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class NoBinsAttributeDataDimensionBuilder<\n Datum,\n> extends AttributeDataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: [number, number]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): NoBinsAttributeDataDimension<Datum> {\n return new NoBinsAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesLayerBuilder } from '../geographies-layer/geographies-layer-builder';\nimport { GeographiesAttributeDataLayer } from './attribute-data-layer';\nimport { CategoricalBinsBuilder } from './dimensions/categorical-bins/categorical-bins-builder';\nimport { CustomBreaksBinsAttributeDataDimensionBuilder } from './dimensions/custom-breaks/custom-breaks-bins-builder';\nimport { EqualFrequenciesAttributeDataDimensionBuilder } from './dimensions/equal-frequencies-bins/equal-frequencies-bins-builder';\nimport { EqualValueRangesBinsBuilder } from './dimensions/equal-value-ranges-bins/equal-value-ranges-bins-builder';\nimport { NoBinsAttributeDataDimensionBuilder } from './dimensions/no-bins/no-bins-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _enableEventActions: true,\n};\n\nexport class GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends GeographiesLayerBuilder<TProperties, TGeometry> {\n private _customFills: FillDefinition<Datum>[];\n private _data: Datum[];\n private _geographyIndexAccessor: (d: Datum) => string;\n\n private binsBuilder:\n | CategoricalBinsBuilder<Datum>\n | CustomBreaksBinsAttributeDataDimensionBuilder<Datum>\n | EqualFrequenciesAttributeDataDimensionBuilder<Datum>\n | EqualValueRangesBinsBuilder<Datum>\n | NoBinsAttributeDataDimensionBuilder<Datum>;\n\n private categoricalBinsBuilder: CategoricalBinsBuilder<Datum>;\n private customBreaksBinsBuilder: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>;\n private equalFrequenciesBinsBuilder: EqualFrequenciesAttributeDataDimensionBuilder<Datum>;\n private equalValueRangesBinsBuilder: EqualValueRangesBinsBuilder<Datum>;\n private noBinsBuilder: NoBinsAttributeDataDimensionBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to colors by categorical values.\n *\n * For example, if the data for a set of U.S. states had a string property, 'region', this could be used to color the states by region.\n */\n categoricalBins(bins: null): this;\n categoricalBins(bins: (bins: CategoricalBinsBuilder<Datum>) => void): this;\n categoricalBins(\n bins: ((bins: CategoricalBinsBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.categoricalBinsBuilder = undefined;\n return this;\n }\n this.categoricalBinsBuilder = new CategoricalBinsBuilder<Datum, string>();\n bins(this.categoricalBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to colors by custom breaks values for bins.\n */\n customBreaksBins(bins: null): this;\n customBreaksBins(\n bins: (bins: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n customBreaksBins(\n bins:\n | ((bins: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>) => void)\n | null\n ): this {\n if (bins === null) {\n this.customBreaksBinsBuilder = undefined;\n return this;\n }\n this.customBreaksBinsBuilder =\n new CustomBreaksBinsAttributeDataDimensionBuilder();\n bins(this.customBreaksBinsBuilder);\n return this;\n }\n\n /**\n * REQUIRED. The data that will be used to color the geographies.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that for creating a map without binning values.\n */\n noBins(bins: null): this;\n noBins(\n bins: (bins: NoBinsAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n noBins(\n bins: ((bins: NoBinsAttributeDataDimensionBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.noBinsBuilder = undefined;\n return this;\n }\n this.noBinsBuilder = new NoBinsAttributeDataDimensionBuilder();\n bins(this.noBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to bins that each have the same size range.\n *\n * For example, bins may be, 0-10, 10-20, 20-30, etc.\n */\n equalValueRangesBins(bins: null): this;\n equalValueRangesBins(\n bins: (bins: EqualValueRangesBinsBuilder<Datum>) => void\n ): this;\n equalValueRangesBins(\n bins: ((bins: EqualValueRangesBinsBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.equalValueRangesBinsBuilder = undefined;\n return this;\n }\n this.equalValueRangesBinsBuilder = new EqualValueRangesBinsBuilder();\n bins(this.equalValueRangesBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to bins that contain an equal number of data observations.\n *\n * This is useful for creating quartiles, deciles, etc.\n */\n equalFrequenciesBins(bins: null): this;\n equalFrequenciesBins(\n bins: (bins: EqualFrequenciesAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n equalFrequenciesBins(\n bins:\n | ((bins: EqualFrequenciesAttributeDataDimensionBuilder<Datum>) => void)\n | null\n ): this {\n if (bins === null) {\n this.equalFrequenciesBinsBuilder = undefined;\n return this;\n }\n this.equalFrequenciesBinsBuilder =\n new EqualFrequenciesAttributeDataDimensionBuilder();\n bins(this.equalFrequenciesBinsBuilder);\n return this;\n }\n\n customFills(customFills: FillDefinition<Datum>[]): this {\n this._customFills = customFills;\n return this;\n }\n\n /**\n * REQUIRED. The accessor function that returns a value from a Datum that must match the value returned by featureIndexAccessor.\n */\n geographyIndexAccessor(accessor: (d: Datum) => string): this {\n this._geographyIndexAccessor = accessor;\n return this;\n }\n\n _build(): GeographiesAttributeDataLayer<Datum, TProperties, TGeometry> {\n this.validateBuilder();\n return new GeographiesAttributeDataLayer({\n marksClass: 'vic-geographies-attribute-data-layer',\n attributeDimension: this.binsBuilder._build(),\n customFills: this._customFills,\n data: this._data,\n featureClass: this._class,\n enableEventActions: this._enableEventActions,\n geographies: this._geographies,\n geographyIndexAccessor: this._geographyIndexAccessor,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder?._build(),\n });\n }\n\n private validateBuilder(): void {\n const binsBuilders = [\n this.categoricalBinsBuilder,\n this.customBreaksBinsBuilder,\n this.equalFrequenciesBinsBuilder,\n this.equalValueRangesBinsBuilder,\n this.noBinsBuilder,\n ];\n if (!this._data) {\n throw new Error('Data must be provided');\n }\n if (!this._geographyIndexAccessor) {\n throw new Error('Geography index accessor must be provided');\n }\n const numBinsBuilders = binsBuilders.filter((builder) => builder).length;\n if (numBinsBuilders !== 1) {\n throw new Error(\n `Exactly one bin strategy must be provided. Currently, ${numBinsBuilders} are provided.`\n );\n }\n this.binsBuilder = binsBuilders.find((builder) => builder);\n if (!this.strokeBuilder) {\n this.initStrokeBuilder();\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillUtilities } from '../../../../core/utilities/fill-utilities';\nimport { OrdinalVisualValueDimension } from '../../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLayer,\n GeographiesTooltipDatum,\n} from '../geographies-layer/geographies-layer';\nimport { GeographiesGeojsonPropertiesLayerOptions } from './geojson-properties-layer-options';\n\nexport class GeographiesGeojsonPropertiesLayer<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends GeographiesLayer<string, TProperties, TGeometry>\n implements GeographiesGeojsonPropertiesLayerOptions<TProperties, TGeometry>\n{\n readonly customFills: FillDefinition<\n GeographiesFeature<TProperties, TGeometry>\n >[];\n readonly fill: OrdinalVisualValueDimension<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >;\n readonly marksClass: string;\n readonly mixBlendMode: string;\n\n constructor(\n options: GeographiesGeojsonPropertiesLayerOptions<TProperties, TGeometry>\n ) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromGeographies();\n }\n\n private initPropertiesFromGeographies(): void {\n this.fill.setPropertiesFromData(this.geographies);\n }\n\n getFill(feature: GeographiesFeature<TProperties, TGeometry>): string {\n const featureIndex = this.featureIndexAccessor(feature);\n const defaultFill = this.fill.getScale()(featureIndex);\n return this.customFills\n ? FillUtilities.getFill(feature, defaultFill, this.customFills)\n : defaultFill;\n }\n\n getTooltipData(path: SVGPathElement): GeographiesTooltipDatum<undefined> {\n const feature = select(path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n const featureIndex = this.featureIndexAccessor(feature);\n const tooltipData: GeographiesTooltipDatum<undefined> = {\n attributeValue: undefined,\n datum: undefined,\n color: this.getFill(feature),\n geography: featureIndex,\n };\n\n return tooltipData;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { OrdinalVisualValueDimensionBuilder } from '../../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLayerBuilder } from '../geographies-layer/geographies-layer-builder';\nimport { GeographiesGeojsonPropertiesLayer } from './geojson-properties-layer';\n\nconst DEFAULT = {\n _class: () => '',\n _enableEventActions: false,\n};\n\nexport class GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends GeographiesLayerBuilder<TProperties, TGeometry> {\n private fillBuilder: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >;\n private _customFills: FillDefinition<\n GeographiesFeature<TProperties, TGeometry>\n >[];\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL: Set a fill color or function that yields a color for all geographies in the layer.\n *\n * If a string is provided, all geographies will be filled with that color.\n *\n * Otherwise, you can use this method to specify how each geography should be filled based on the properties of the geojson feature.\n */\n fill(fill: null): this;\n fill(fill: string): this;\n fill(\n fill: (\n fill: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >\n ) => void\n ): this;\n fill(\n fill:\n | string\n | null\n | ((\n fill: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >\n ) => void)\n ): this {\n this.initFillBuilder();\n\n if (fill === null) {\n this.fillBuilder.valueAccessor(() => null).range(['None']);\n return this;\n }\n\n if (typeof fill === 'string') {\n this.fillBuilder.valueAccessor(() => null).range([fill]);\n } else {\n fill(this.fillBuilder);\n }\n return this;\n }\n\n customFills(\n customFills: FillDefinition<GeographiesFeature<TProperties, TGeometry>>[]\n ): this {\n this._customFills = customFills;\n return this;\n }\n\n private initFillBuilder(): void {\n this.fillBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n _build(): GeographiesGeojsonPropertiesLayer<TProperties, TGeometry> {\n this.validateBuilder();\n return new GeographiesGeojsonPropertiesLayer({\n marksClass: 'vic-geographies-geojson-properties-layer',\n customFills: this._customFills,\n featureClass: this._class,\n enableEventActions: this._enableEventActions,\n fill: this.fillBuilder._build('Fill'),\n geographies: this._geographies,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder?._build(),\n });\n }\n\n validateBuilder(): void {\n if (!this.fillBuilder) {\n this.initFillBuilder();\n }\n if (!this.strokeBuilder) {\n this.initStrokeBuilder();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport {\n ExtendedFeature,\n ExtendedFeatureCollection,\n ExtendedGeometryCollection,\n geoAlbersUsa,\n GeoGeometryObjects,\n GeoProjection,\n} from 'd3';\nimport { GeoJsonProperties, Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GeographiesConfig } from './geographies-config';\nimport { GeographiesAttributeDataLayerBuilder } from './layers/attribute-data-layer/attribute-data-layer-builder';\nimport { GeographiesGeojsonPropertiesLayerBuilder } from './layers/geojson-properties-layer/geojson-properties-layer-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _projection: geoAlbersUsa(),\n _mixBlendMode: 'normal',\n};\n\n/** Builds a configuration object for a GeographiesComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicGeographiesBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the attribute data that will be used to shade the map areas.\n *\n * The second generic parameter, TProperties, is the type of the properties object that is associated with the GeoJson.\n *\n * The optional third generic parameter, TGeometry, is the type of the geometry object that is associated with the GeoJson. It defaults to MultiPolygon | Polygon if not provided.\n */\n@Injectable()\nexport class VicGeographiesConfigBuilder<\n Datum,\n TProperties extends GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> {\n private _boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection;\n protected _class: (d: Datum) => string;\n private _featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n private _mixBlendMode: string;\n private _projection: GeoProjection;\n private attributeDataBuilder: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >;\n public geojsonBuilders: GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >[] = [];\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. Sets a feature or geometry object or collection that defines the extents of the map to be drawn.\n *\n * Used for scaling the map.\n */\n boundary(\n boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection\n ): this {\n this._boundary = boundary;\n return this;\n }\n\n /**\n * REQUIRED. Sets a function that derives an identifying string from the GeoJson feature.\n */\n featureIndexAccessor(\n accessor: (d: GeographiesFeature<TProperties, TGeometry>) => string\n ): this {\n this._featureIndexAccessor = accessor;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for a layer that will be drawn and styled using solely the properties on a geojson feature.\n *\n * This might be used for to draw the outline of a country, for example. It could also shade the area of a country based on a property of the geojson feature.\n *\n * If events are enabled, the geojson properties will be used to populate the tooltip.\n *\n * This method can be called multiple times to create multiple layers. If this method is called with null, all layers will be removed. (Though subsequent calls can be made to add new layers.)\n *\n * The order in which layers are created will determine the order in which they are drawn.\n *\n * Multiple layers can be used to draw different parts of the map with different styles.\n */\n geojsonPropertiesLayer(geojson: null): this;\n geojsonPropertiesLayer(\n geojson: (\n geojson: GeographiesGeojsonPropertiesLayerBuilder<TProperties, TGeometry>\n ) => void\n ): this;\n geojsonPropertiesLayer(\n geojson:\n | ((\n geojson: GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >\n ) => void)\n | null\n ): this {\n if (geojson === null) {\n this.geojsonBuilders = [];\n return this;\n }\n const builder = new GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >();\n geojson(builder);\n this.geojsonBuilders.push(builder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for a layer that will be drawn from geojson and styled using attribute data.\n *\n * This object provides various methods for transforming data values into colors / color bins.\n *\n * This method can be called only once.\n */\n attributeDataLayer(attributeData: null): this;\n attributeDataLayer(\n attributeData: (\n attributeData: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >\n ) => void\n ): this;\n attributeDataLayer(\n attributeData:\n | ((\n attributeData: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >\n ) => void)\n | null\n ): this {\n if (attributeData === null) {\n this.attributeDataBuilder = undefined;\n return this;\n }\n this.attributeDataBuilder = new GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >();\n attributeData(this.attributeDataBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a projection function that maps a point in the map's coordinate space to a point in the SVG's coordinate space.\n *\n * @default d3.geoAlbersUsa()\n */\n projection(projection: GeoProjection): this {\n this._projection = projection;\n return this;\n }\n\n /**\n * REQUIRED. Builds the GeographiesConfig object.\n */\n getConfig(): GeographiesConfig<Datum, TProperties, TGeometry> {\n this.validateBuilder();\n const config = new GeographiesConfig<Datum, TProperties, TGeometry>({\n marksClass: 'vic-geographies',\n attributeDataLayer: this.attributeDataBuilder?._build(),\n boundary: this._boundary,\n mixBlendMode: this._mixBlendMode,\n featureIndexAccessor: this._featureIndexAccessor,\n geojsonPropertiesLayers: this.geojsonBuilders.length\n ? this.geojsonBuilders.map((builder) => builder._build())\n : undefined,\n projection: this._projection,\n });\n this.geojsonBuilders = [];\n return config;\n }\n\n private validateBuilder(): void {\n if (!this._boundary) {\n throw new Error('Boundary is required');\n }\n if (!this._featureIndexAccessor) {\n throw new Error('Feature index accessor is required');\n }\n if (!this.attributeDataBuilder && !this.geojsonBuilders.length) {\n throw new Error('At least one layer is required');\n }\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesClickEmitTooltipDataPauseOtherActions<Datum>\n implements\n EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const output = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesHoverEmitTooltipData<Datum>\n implements\n EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const outputData = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesHoverMoveEmitTooltipData<Datum>\n implements\n HoverMoveAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const outputData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoPath, geoPath, GeoProjection, select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { GeoJsonProperties, Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { BehaviorSubject, filter, Observable } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport { MapChartComponent } from '../charts/map-chart/map-chart.component';\nimport { MapPrimaryMarks } from '../marks/map-marks/map-primary-marks/map-primary-marks';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { GeographiesConfig } from './config/geographies-config';\nimport { GeographiesAttributeDataLayer } from './config/layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from './config/layers/geojson-properties-layer/geojson-properties-layer';\nimport { GeographiesLabels } from './config/layers/labels/geographies-labels';\nimport { GeographiesFeature } from './geographies-feature';\n\nexport type LayersGroup = Selection<SVGGElement, unknown, null, undefined>;\n\nexport const GEOGRAPHIES = new InjectionToken<\n GeographiesComponent<unknown, unknown>\n>('GeographiesComponent');\n\nexport type GeographiesSvgElement = 'layer' | 'g' | 'feature' | 'label';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-geographies]',\n templateUrl: './geographies.component.html',\n styleUrls: ['./geographies.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: GeographiesComponent },\n {\n provide: GEOGRAPHIES,\n useExisting: GeographiesComponent,\n },\n {\n provide: ChartComponent,\n useExisting: MapChartComponent,\n },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixed-blend-mode]': 'config.blendMode',\n },\n})\nexport class GeographiesComponent<\n Datum,\n TProperties extends GeoJsonProperties = GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends MapPrimaryMarks<\n Datum,\n GeographiesConfig<Datum, TProperties, TGeometry>\n> {\n projection: GeoProjection;\n path: GeoPath;\n pathsByLayer: BehaviorSubject<\n Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n > = new BehaviorSubject(null);\n pathsByLayer$: Observable<\n Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n > = this.pathsByLayer.asObservable().pipe(filter((d) => !!d));\n public elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<GeographiesSvgElement, string> {\n return {\n layer: this.config.marksClass + '-layer',\n g: this.config.marksClass + '-group',\n feature: this.config.marksClass + '-feature',\n label: this.config.marksClass + '-label',\n };\n }\n\n override initFromConfig(): void {\n this.setChartScalesFromRanges();\n if (this.config.attributeDataLayer) {\n this.updateChartAttributeProperties();\n } else {\n this.drawMarks();\n }\n }\n\n setChartScalesFromRanges(): void {\n this.setProjection();\n this.setPath();\n }\n\n setProjection(): void {\n this.projection = this.config.projection.fitSize(\n [\n this.ranges.x[1] - this.ranges.x[0],\n this.ranges.y[0] - this.ranges.y[1],\n ],\n this.config.boundary\n );\n }\n\n setPath(): void {\n this.path = geoPath().projection(this.projection);\n }\n\n updateChartAttributeProperties(): void {\n this.chart.updateAttributeProperties({\n scale: this.config.attributeDataLayer.attributeDimension.getScale(),\n config: this.config.attributeDataLayer.attributeDimension,\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawMap(transitionDuration);\n this.updateGeographyElements();\n }\n\n drawMap(transitionDuration): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n .duration(transitionDuration);\n this.drawLayers(t);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n drawLayers(t: any): void {\n const layerGroup = select(this.elRef.nativeElement)\n .style(\n 'transform',\n `translate(${this.chart.config.margin.left}px, ${this.chart.config.margin.top}px)`\n )\n .selectAll<\n SVGGElement,\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n >(`.${this.class.layer}`)\n .data<\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n >(this.config.layers, (layer) => layer.id)\n .join(\n (enter) =>\n enter\n .append('g')\n .attr(\n 'class',\n (layer) =>\n `${this.class.layer} ${this.class.layer}-${layer.id} ${layer.marksClass}`\n ),\n (update) => update,\n (exit) => exit.remove()\n );\n\n this.config.layers.forEach((layer) => {\n const geographyGroup = layerGroup\n .filter((d) => d.id === layer.id)\n .selectAll<SVGGElement, GeographiesFeature<TProperties, TGeometry>>(\n `.${this.class.g}`\n )\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => d.geographies,\n (d) => this.config.featureIndexAccessor(d)\n )\n .join('g')\n .attr('class', (d) =>\n `${this.class.g} ${layer.featureClass(d.properties)}`.trim()\n );\n\n geographyGroup\n .selectAll<SVGPathElement, GeographiesFeature<TProperties, TGeometry>>(\n `.${this.class.feature}`\n )\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => [d],\n (d) => this.config.featureIndexAccessor(d)\n )\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('d', (feature) => this.path(feature))\n .attr('class', this.class.feature)\n // layer-index is used on event directives\n .attr('data-layer-index', layer.id)\n .attr('stroke', layer.stroke.color)\n .attr('stroke-dasharray', layer.stroke.dasharray)\n .attr('stroke-linecap', layer.stroke.linecap)\n .attr('stroke-join', layer.stroke.linejoin)\n .attr('stroke-opacity', layer.stroke.opacity)\n .attr('stroke-width', layer.stroke.width)\n .attr('fill', (feature) => layer.getFill(feature)),\n (update) =>\n update.call((update) =>\n update\n .attr('d', (feature) => this.path(feature))\n .attr('class', this.class.feature)\n .attr('data-layer-index', layer.id)\n .transition(t)\n .attr('fill', (feature) => layer.getFill(feature))\n .attr('stroke', layer.stroke.color)\n .attr('stroke-dasharray', layer.stroke.dasharray)\n .attr('stroke-linecap', layer.stroke.linecap)\n .attr('stroke-join', layer.stroke.linejoin)\n .attr('stroke-opacity', layer.stroke.opacity)\n .attr('stroke-width', layer.stroke.width)\n ),\n (exit) => exit.remove()\n );\n\n if (layer.labels) {\n geographyGroup\n .filter((feature) =>\n layer.labels.display(layer.labels.valueAccessor(feature))\n )\n .selectAll<\n SVGTextElement,\n GeographiesFeature<TProperties, TGeometry>\n >(`.${this.class.label}`)\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => [d],\n (d) => this.config.featureIndexAccessor(d)\n )\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n // layer-index is used on event directives\n .attr('data-layer-index', layer.id)\n .attr('text-anchor', layer.labels.textAnchor)\n .attr('alignment-baseline', layer.labels.alignmentBaseline)\n .attr('dominant-baseline', layer.labels.dominantBaseline)\n .style('cursor', layer.labels.cursor)\n .attr('pointer-events', layer.labels.pointerEvents)\n .text((feature) => layer.labels.valueAccessor(feature))\n .attr(\n 'x',\n (feature) => this.getLabelPosition(feature, layer.labels).x\n )\n .attr(\n 'y',\n (feature) => this.getLabelPosition(feature, layer.labels).y\n )\n .attr('font-size', layer.labels.fontScale(this.ranges.x[1]))\n .attr('fill', (feature) => layer.getLabelColor(feature))\n .attr('font-weight', (feature) =>\n layer.getLabelFontWeight(feature)\n ),\n (update) =>\n update.call((update) =>\n update\n .text((feature) => layer.labels.valueAccessor(feature))\n .attr(\n 'y',\n (feature) => this.getLabelPosition(feature, layer.labels).y\n )\n .attr(\n 'x',\n (feature) => this.getLabelPosition(feature, layer.labels).x\n )\n .attr('font-size', layer.labels.fontScale(this.ranges.x[1]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('fill', (feature) => layer.getLabelColor(feature))\n .attr('font-weight', (feature) =>\n layer.getLabelFontWeight(feature)\n )\n ),\n (exit) => exit.remove()\n );\n }\n });\n }\n\n getLabelPosition(\n d: GeographiesFeature<TProperties, TGeometry>,\n labels: GeographiesLabels<TProperties, TGeometry>\n ): { x: number; y: number } {\n if (!this.path || !this.projection) return { x: 0, y: 0 };\n return labels.position(d, this.path, this.projection);\n }\n\n updateGeographyElements(): void {\n const pathsByLayer = this.config.layers.reduce(\n (paths, layer, i) => {\n if (layer.enableEventActions) {\n paths.push(\n select(this.elRef.nativeElement).selectAll(\n `.${this.class.layer}-${i} .${this.class.feature}`\n )\n );\n }\n return paths;\n },\n [] as Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n );\n this.pathsByLayer.next(pathsByLayer);\n }\n}\n","<ng-content></ng-content>\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\nexport class GeographiesTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { filter, map, Observable } from 'rxjs';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { GeographiesAttributeDataLayer } from '../config/layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from '../config/layers/geojson-properties-layer/geojson-properties-layer';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GEOGRAPHIES, GeographiesComponent } from '../geographies.component';\nimport { GeographiesInteractionOutput } from './geographies-interaction-output';\nimport { GeographiesTooltipPositioner } from './geographies-tooltip-positioner';\n\nexport type GeographiesHost<\n Datum,\n TGeographiesComponent extends\n GeographiesComponent<Datum> = GeographiesComponent<Datum>,\n> = MarksHost<GeographiesInteractionOutput<Datum>, TGeographiesComponent>;\n\n@Directive({\n selector: '[vicGeographiesEvents]',\n})\nexport class GeographiesEventsDirective<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n TComponent extends GeographiesComponent<\n Datum,\n TProperties,\n TGeometry\n > = GeographiesComponent<Datum, TProperties, TGeometry>,\n> extends EventsDirective<GeographiesHost<Datum>> {\n @Input()\n hoverActions:\n | EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n GeographiesHost<Datum>,\n GeographiesInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n GeographiesHost<Datum>,\n GeographiesInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n GeographiesInteractionOutput<Datum>\n >();\n\n bounds: [[number, number], [number, number]];\n layer:\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>;\n path: SVGPathElement;\n\n constructor(@Inject(GEOGRAPHIES) public geographies: TComponent) {\n super();\n }\n\n get marks(): GeographiesComponent<Datum, TProperties, TGeometry> {\n return this.geographies;\n }\n\n getElements(): Observable<Element[]> {\n return this.geographies.pathsByLayer$.pipe(\n filter((layers) => !!layers),\n map((layers) => layers.flatMap((selections) => selections.nodes()))\n );\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this.asHost(), inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this.asHost(), inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.path = el as SVGPathElement;\n const layerIndex = parseFloat(this.path.dataset['layerIndex']);\n this.layer =\n layerIndex === 0\n ? this.geographies.config.attributeDataLayer\n : this.geographies.config.geojsonPropertiesLayers[layerIndex - 1];\n const d = select(this.path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n this.bounds = this.geographies.path.bounds(d);\n }\n\n setPositionsFromElement(): void {\n this.positionX = (this.bounds[1][0] - this.bounds[0][0]) / 2;\n this.positionY = (this.bounds[1][1] - this.bounds[0][1]) / 2;\n }\n\n getInteractionOutput(type: EventType): GeographiesInteractionOutput<Datum> {\n const tooltipData = this.layer.getTooltipData(this.path);\n const position = new GeographiesTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.path,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(\n output: GeographiesInteractionOutput<Datum> | null\n ): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.path = undefined;\n this.bounds = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n this.layer = undefined;\n }\n}\n","/**\n * A utility type that represents a GeoJson feature with a properties object of type TProperties and a geometry object of type TGeometry.\n */\n\nimport {\n Feature,\n GeoJsonProperties,\n Geometry,\n MultiPolygon,\n Polygon,\n} from 'geojson';\n\nexport type GeographiesFeature<\n TProperties extends GeoJsonProperties = GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> = Feature<TGeometry, TProperties>;\n","import { NgModule } from '@angular/core';\nimport { GeographiesEventsDirective } from './events/geographies-events.directive';\nimport { GeographiesComponent } from './geographies.component';\n\n@NgModule({\n imports: [GeographiesComponent, GeographiesEventsDirective],\n exports: [GeographiesComponent, GeographiesEventsDirective],\n})\nexport class VicGeographiesModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range } from 'd3';\nimport { BarsConfig } from '../../bars/config/bars-config';\nimport { BarsDimensions } from '../../bars/config/bars-dimensions';\nimport { DataValue } from '../../core/types/values';\nimport { GroupedBarsOptions } from './grouped-bars-options';\n\nconst DEFAULT = {\n intraGroupPadding: 0.05,\n};\n\nexport class GroupedBarsConfig<Datum, TOrdinalValue extends DataValue>\n extends BarsConfig<Datum, TOrdinalValue>\n implements GroupedBarsOptions<Datum, TOrdinalValue>\n{\n intraGroupPadding: number;\n\n constructor(\n dimensions: BarsDimensions,\n options: GroupedBarsOptions<Datum, TOrdinalValue>\n ) {\n super(dimensions, options);\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n override setValueIndices(): void {\n this.valueIndices = range(this.ordinal.values.length).filter((i) => {\n return (\n this.ordinal.domainIncludes(this.ordinal.values[i]) &&\n this.color.domainIncludes(this.color.values[i])\n );\n });\n }\n\n override setBarsKeyFunction(): void {\n this.barsKeyFunction = (i: number): string =>\n `${this.color.values[i]}-${this.ordinal.values[i]}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { VicBarsConfigBuilder } from '../../bars/config/bars-builder';\nimport { DataValue } from '../../core/types/values';\nimport { GroupedBarsConfig } from './grouped-bars-config';\n\nconst DEFAULT = {\n _intraGroupPadding: 0.05,\n};\n\n/**\n * Builds a configuration object for a GroupedBarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicGroupedBarsBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicGroupedBarsConfigBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicBarsConfigBuilder<Datum, TOrdinalValue> {\n private _intraGroupPadding: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Set the padding between groups of bars. Passed to d3.scaleBand.padding.\n *\n * @default 0.05\n */\n intraGroupPadding(padding: number): this {\n this._intraGroupPadding = padding;\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for a GroupedBarsComponent.\n */\n override getConfig(): GroupedBarsConfig<Datum, TOrdinalValue> {\n this.validateBuilder('Grouped Bars');\n return new GroupedBarsConfig(this.dimensions, {\n marksClass: 'vic-grouped-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n intraGroupPadding: this._intraGroupPadding,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n });\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { BarDatum, BARS, BarsHost, BarsInteractionOutput } from '../../bars';\nimport { BarsTooltipPositioner } from '../../bars/events/bars-tooltip-positioner';\nimport { DataValue } from '../../core';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { GroupedBarsComponent } from '../grouped-bars.component';\n\n@Directive({\n selector: '[vicGroupedBarsEvents]',\n})\nexport class GroupedBarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TGroupedBarsComponent extends GroupedBarsComponent<\n Datum,\n TOrdinalValue\n > = GroupedBarsComponent<Datum, TOrdinalValue>,\n >\n extends EventsDirective<BarsHost<Datum, TOrdinalValue>>\n implements BarsHost<Datum, TOrdinalValue>\n{\n @Input()\n hoverActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n barDatum: BarDatum<TOrdinalValue>;\n origin: SVGRectElement;\n\n constructor(@Inject(BARS) public bars: TGroupedBarsComponent) {\n super();\n }\n\n get marks(): GroupedBarsComponent<Datum, TOrdinalValue> {\n return this.bars;\n }\n\n getElements(): Observable<Element[]> {\n return this.bars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getBarDatum(): BarDatum<TOrdinalValue> | null {\n return this.barDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.barDatum = select(\n el as SVGRectElement\n ).datum() as BarDatum<TOrdinalValue>;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.bars.getSourceDatumFromBarDatum(this.barDatum);\n const tooltipData = datum ? this.bars.getTooltipData(datum) : undefined;\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.barDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { scaleBand } from 'd3';\nimport { BarDatum, BARS, BarsComponent } from '../bars/bars.component';\nimport { ChartComponent, XyChartComponent } from '../charts';\nimport { DataValue } from '../core/types/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { GroupedBarsConfig } from './config/grouped-bars-config';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-grouped-bars]',\n template: '',\n styleUrls: ['./grouped-bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: GroupedBarsComponent },\n { provide: BARS, useExisting: GroupedBarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class GroupedBarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BarsComponent<Datum, TOrdinalValue> {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('config') override config: GroupedBarsConfig<Datum, TOrdinalValue>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupScale: any;\n\n override drawMarks(): void {\n this.setGroupScale();\n super.drawMarks();\n }\n\n setGroupScale(): void {\n if (this.config.dimensions.ordinal === 'x') {\n this.groupScale = scaleBand(this.config.color.calculatedDomain, [\n 0,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.scales.x as any).bandwidth(),\n ]).padding(this.config.intraGroupPadding);\n } else {\n this.groupScale = scaleBand(this.config.color.calculatedDomain, [\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.scales.y as any).bandwidth(),\n 0,\n ]).padding(this.config.intraGroupPadding);\n }\n }\n\n override getBarColor(d: BarDatum<TOrdinalValue>): string {\n return this.scales.color(d.color);\n }\n\n override getBarXOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.x(d.ordinal) + this.groupScale(d.color);\n }\n\n override getBarY(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.ordinal === 'x') {\n return this.getBarYQuantitative(d);\n } else {\n return this.getBarYOrdinal(d);\n }\n }\n\n override getBarYOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.ordinal) + this.groupScale(d.color);\n }\n\n override getBarYQuantitative(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.quantitative);\n }\n\n override getBarWidthOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.groupScale as any).bandwidth();\n }\n\n override getBarHeightOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.groupScale as any).bandwidth();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { GroupedBarsEventsDirective } from './events/grouped-bars-events.directive';\nimport { GroupedBarsComponent } from './grouped-bars.component';\n\n@NgModule({\n imports: [GroupedBarsComponent, GroupedBarsEventsDirective],\n exports: [GroupedBarsComponent, GroupedBarsEventsDirective],\n})\nexport class VicGroupedBarsModule {}\n","export type VicImageType = keyof typeof VicImage;\n\nexport enum VicImage {\n jpeg = 'jpeg',\n png = 'png',\n svg = 'svg',\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { VicImage } from './image-download-enums';\nimport { ImageDownloadOptions } from './image-download-options';\n\nconst DEFAULT = {\n fontEmbedCSS: undefined,\n backgroundColor: '#fff',\n quality: 1,\n};\n\nexport class VicJpegImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.jpeg;\n }\n}\n\nexport class VicPngImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.png;\n }\n}\n\nexport class VicSvgImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.svg;\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as domToImage from 'html-to-image';\nimport {\n VicJpegImageConfig,\n VicPngImageConfig,\n VicSvgImageConfig,\n} from './image-download-config';\nimport { VicImage } from './image-download-enums';\n\n@Injectable({ providedIn: 'root' })\nexport class VicImageDownloadService {\n domToImage = domToImage;\n\n /**\n * @param imageConfig\n * @returns fontEmbedCSS -- scans stylesheets for font files and base64 encodes them,\n * reuse this value in imageConfig for subsequent downloads to avoid\n * re-encoding fonts (slight performance boost)\n */\n async downloadImage(\n imageConfig: VicJpegImageConfig | VicPngImageConfig | VicSvgImageConfig\n ): Promise<string | void> {\n let dataUrl;\n if (imageConfig.fontEmbedCSS === undefined) {\n imageConfig.fontEmbedCSS = await domToImage.getFontEmbedCSS(\n imageConfig.containerNode\n );\n }\n const sizedImageConfig = {\n ...imageConfig,\n width: imageConfig.containerNode.scrollWidth,\n height: imageConfig.containerNode.scrollHeight,\n };\n switch (imageConfig.imageType) {\n case VicImage.jpeg:\n dataUrl = await this.domToImage.toJpeg(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n case VicImage.png:\n dataUrl = await this.domToImage.toPng(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n case VicImage.svg:\n dataUrl = await this.domToImage.toSvg(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n default:\n break;\n }\n\n this.createLinkAndClick(\n dataUrl,\n `${imageConfig.fileName}.${imageConfig.imageType}`\n );\n return imageConfig.fontEmbedCSS;\n }\n\n createLinkAndClick(dataUrl: string, fileName: string) {\n const link = document.createElement('a');\n link.download = fileName;\n link.href = dataUrl;\n link.click();\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { PointMarkersOptions } from './point-markers-options';\n\nexport class PointMarkers<Datum> implements PointMarkersOptions<Datum> {\n readonly datumClass: (d: Datum, i: number) => string;\n readonly display: (d: Datum) => boolean;\n readonly growByOnHover: number;\n readonly radius: number;\n\n constructor(options: PointMarkersOptions<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { PointMarkers } from './point-markers';\n\nconst DEFAULT = {\n _class: () => '',\n _display: () => true,\n _radius: 3,\n _growByOnHover: 2,\n};\n\nexport class PointMarkersBuilder<Datum> {\n private _display: (d: Datum) => boolean;\n private _class: (d: Datum) => string;\n private _growByOnHover: number;\n private _radius: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that correspends to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: Datum) => string): this;\n class(value: ((d: Datum) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if point markers will be _displayed_.\n *\n * This is used to configure the visibilty of markers -- a `true` value will set the `display` of markers to `block`, while a `false` value will set the display of the markers to `none`.\n *\n * One use case is to have markers hidden until a user interaction, such as hover.\n *\n * If a function is provided, markers whose filtering predicate returns `true` will have `display: block` while those whose predicate returns `false` will have `display: none` when the markers are drawn.\n *\n * @default () => true\n */\n display(display: boolean): this;\n display(display: (d: Datum) => boolean): this;\n display(display: boolean | ((d: Datum) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. A value by which the point marker will expand on hover, in px.\n *\n * @default 2\n */\n growByOnHover(growByOnHover: number): this {\n this._growByOnHover = growByOnHover;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the radius of the point marker, in px.\n *\n * @default 3\n */\n radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): PointMarkers<Datum> {\n return new PointMarkers({\n datumClass: this._class,\n display: this._display,\n growByOnHover: this._growByOnHover,\n radius: this._radius,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { OrdinalVisualValueDimension } from '../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { StrokeBase } from '../../../stroke/base/stroke-base';\nimport { LinesStrokeOptions } from './lines-stroke-options';\nexport class LinesStroke<Datum>\n extends StrokeBase\n implements LinesStrokeOptions<Datum>\n{\n color: OrdinalVisualValueDimension<Datum, string, string>;\n\n constructor(options: Partial<LinesStrokeOptions<Datum>>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { OrdinalVisualValueDimensionBuilder } from '../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { LinesStroke } from './lines-stroke';\n\nconst DEFAULT = {\n _dasharray: 'none',\n _linecap: 'round',\n _linejoin: 'round',\n _opacity: 1,\n _width: 2,\n};\n\nexport class LinesStrokeBuilder<Datum> {\n private colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private _dasharray: string;\n private _linecap: string;\n private _linejoin: string;\n private _opacity: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Creates a dimension that will control the color of the bars.\n *\n * If not provided, all bars will be colored with the first color in `d3.schemeTableau10`, the default `range` for the dimension.\n */\n color(color: null): this;\n color(\n color: (\n dimension: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n color(\n color:\n | ((\n dimension: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (color === null) {\n this.colorDimensionBuilder = undefined;\n return this;\n }\n this.initColorDimensionBuilder();\n color(this.colorDimensionBuilder);\n return this;\n }\n\n private initColorDimensionBuilder() {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-dasharray]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray}\n * attribute.\n *\n * @default 'round'\n */\n dasharray(dasharray: string): this {\n this._dasharray = dasharray;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linecap]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap}\n * attribute.\n *\n * @default 'round'\n */\n linecap(linecap: string): this {\n this._linecap = linecap;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linejoin]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin}\n * attribute.\n *\n * @default 'round'\n */\n linejoin(linejoin: string): this {\n this._linejoin = linejoin;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-opacity]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity}\n * attribute.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-width]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width}\n * attribute, in px.\n *\n * @default 2\n */\n width(width: number): this {\n this._width = width;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): LinesStroke<Datum> {\n this.validateBuilder();\n return new LinesStroke<Datum>({\n color: this.colorDimensionBuilder._build('Lines Stroke Color'),\n dasharray: this._dasharray,\n linecap: this._linecap,\n linejoin: this._linejoin,\n opacity: this._opacity,\n width: this._width,\n });\n }\n\n validateBuilder(): void {\n if (!this.colorDimensionBuilder) {\n this.initColorDimensionBuilder();\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { FillDefinition } from '../../../data-dimensions';\nimport { AreaFills } from './area-fills';\n\nconst DEFAULT = {\n _display: () => true,\n _opacity: 0.2,\n _gradient: undefined,\n _color: undefined,\n};\n\nexport class AreaFillsBuilder<Datum> {\n private _display: (category: string) => boolean;\n private _opacity: number;\n private _customFills: FillDefinition<Datum>[];\n private _color: (d: Datum) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A string which determines color of the fill under line,\n * or a function whose input is the first point in the line and which returns\n * a color string.\n * This string is directly passed to `fill` under the hood.\n *\n * If not set, the color of the line will be used.\n *\n * To unset the color, call with `null`.\n */\n color(color: null): this;\n color(color: string): this;\n color(color: (d: Datum) => string): this;\n color(color: string | ((d: Datum) => string) | null): this {\n if (color === null) {\n this._color = undefined;\n return this;\n }\n this._color = typeof color === 'string' ? () => color : color;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if fill under line should be displayed.\n *\n * @default true\n */\n display(display: boolean): this;\n display(display: (category: string) => boolean): this;\n display(display: boolean | ((category: string) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. A number to determine the opacity of the fill under line.\n *\n * @default 0.2\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A string to determine the gradient of the fill under line.\n *\n * @default undefined\n */\n customFills(customFills: FillDefinition<Datum>[]): this {\n this._customFills = customFills;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): AreaFills<Datum> {\n return {\n display: this._display,\n opacity: this._opacity,\n customFills: this._customFills,\n color: this._color,\n };\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { CurveFactory, group, range } from 'd3';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { PointMarkers } from '../../point-markers/point-markers';\nimport { LinesGroupSelectionDatum } from '../lines.component';\nimport { AreaFills } from './area-fills/area-fills';\nimport { LinesOptions } from './lines-options';\nimport { LinesStroke } from './stroke/lines-stroke';\n\nexport interface LinesMarkerDatum {\n key: string;\n index: number;\n category: string;\n display: string;\n}\n\nexport class LinesConfig<Datum>\n extends XyPrimaryMarksConfig<Datum>\n implements LinesOptions<Datum>\n{\n readonly curve: CurveFactory;\n readonly labelLines: boolean;\n readonly lineLabelsFormat: (d: string) => string;\n linesD3Data;\n linesKeyFunction: (d: LinesGroupSelectionDatum) => string;\n readonly areaFills: AreaFills<Datum>;\n readonly pointerDetectionRadius: number;\n readonly pointMarkers: PointMarkers<Datum>;\n readonly stroke: LinesStroke<Datum>;\n readonly x:\n | DateChartPositionDimension<Datum>\n | NumberChartPositionDimension<Datum>;\n readonly y: NumberChartPositionDimension<Datum>;\n\n constructor(options: LinesOptions<Datum>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setLinesD3Data();\n this.setLinesKeyFunction();\n }\n\n private setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data);\n this.stroke.color.setPropertiesFromData(this.data);\n }\n\n private setValueIndices(): void {\n this.valueIndices = range(this.x.values.length).filter((i) =>\n this.stroke.color.domainIncludes(this.stroke.color.values[i])\n );\n }\n\n private setLinesD3Data(): void {\n const definedIndices = this.valueIndices.filter(\n (i) =>\n this.x.isValidValue(this.x.values[i]) &&\n this.y.isValidValue(this.y.values[i])\n );\n this.linesD3Data = group(\n definedIndices,\n (i) => this.stroke.color.values[i]\n );\n }\n\n getDataFromCategory(category: string): Datum[] {\n return this.linesD3Data.get(category).map((i) => this.data[i]);\n }\n\n private setLinesKeyFunction(): void {\n this.linesKeyFunction = (d): string => d[0];\n }\n\n getPointMarkersData(indices: number[]): LinesMarkerDatum[] {\n return indices.map((i) => {\n return {\n key: this.getMarkerKey(i),\n index: i,\n category: this.stroke.color.values[i],\n display: this.pointMarkers.display(this.data[i]) ? 'block' : 'none',\n };\n });\n }\n\n private getMarkerKey(i: number): string {\n return `${this.stroke.color.values[i]}-${this.x.values[i]}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { CurveFactory, curveLinear } from 'd3';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { PointMarkersBuilder } from '../../point-markers/point-markers-builder';\nimport { LinesStrokeBuilder } from '../config/stroke/lines-stroke-builder';\nimport { AreaFillsBuilder } from './area-fills/area-fills-builder';\nimport { LinesConfig } from './lines-config';\n\nconst DEFAULT = {\n _curve: curveLinear,\n _pointerDetectionRadius: 80,\n _lineLabelsFormat: (d: string) => d,\n};\n\n/**\n * Builds a configuration object for a LinesComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicLinesBuilder]` in the component decorator)\n *\n * The generic parameter, Datum, is the type of the data that will be used to create the lines.\n */\n@Injectable()\nexport class VicLinesConfigBuilder<Datum> extends PrimaryMarksBuilder<Datum> {\n private _curve: CurveFactory;\n private _labelLines: boolean;\n private _lineLabelsFormat: (d: string) => string;\n private _pointerDetectionRadius: number;\n private pointMarkersBuilder: PointMarkersBuilder<Datum>;\n private strokeBuilder: LinesStrokeBuilder<Datum>;\n private xDimensionBuilder:\n | NumberChartPositionDimensionBuilder<Datum>\n | DateChartPositionDimensionBuilder<Datum>;\n private yDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n private areaFillsBuilder: AreaFillsBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A config to set fill underneath lines.\n *\n * If no argument is provided, the default area fills will be created.\n *\n * To unset the area fills, call with `null`.\n */\n areaFills(): this;\n areaFills(areaFills: null): this;\n areaFills(areaFills: (areaFills: AreaFillsBuilder<Datum>) => void): this;\n areaFills(\n areaFills?: ((areaFills: AreaFillsBuilder<Datum>) => void) | null\n ): this {\n if (areaFills === null) {\n this.areaFillsBuilder = undefined;\n return this;\n }\n this.initBelowLinesAreaFillBuilder();\n areaFills?.(this.areaFillsBuilder);\n return this;\n }\n\n private initBelowLinesAreaFillBuilder(): void {\n this.areaFillsBuilder = new AreaFillsBuilder();\n }\n\n /**\n * OPTIONAL. A function passed to D3's [line.curve()]{@link https://github.com/d3/d3-shape#line_curve}\n * method.\n *\n * @default [curveLinear]{@link https://github.com/d3/d3-shape#curveLinear}.\n */\n curve(curve: CurveFactory): this {\n this._curve = curve;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if the line will be labeled.\n */\n labelLines(labelLines: boolean): this {\n this._labelLines = labelLines;\n return this;\n }\n\n /**\n * OPTIONAL. A function that returns a string to be used as the label for a line. Can be used to modify the\n * line label string as needed.\n *\n * @default identity function.\n */\n lineLabelsFormat(lineLabelsFormat: (d: string) => string): this {\n this._lineLabelsFormat = lineLabelsFormat;\n return this;\n }\n\n /**\n * OPTIONAL. The distance from a line in which a hover event will trigger a tooltip, in px.\n *\n * This is used to ensure that a tooltip is triggered only when a user's pointer is close to lines.\n *\n * @default 80\n */\n pointerDetectionRadius(pointerDetectionRadius: number): this {\n this._pointerDetectionRadius = pointerDetectionRadius;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of markers for each datum on the line.\n *\n * Creating this config will create markers on lines. If no argument is provided, the default markers will be created.\n */\n pointMarkers(): this;\n pointMarkers(pointMarkers: null): this;\n pointMarkers(\n pointMarkers: ((pointMarkers: PointMarkersBuilder<Datum>) => void) | null\n ): this;\n pointMarkers(\n pointMarkers?: ((pointMarkers: PointMarkersBuilder<Datum>) => void) | null\n ): this {\n if (pointMarkers === null) {\n this.pointMarkersBuilder = undefined;\n return this;\n }\n this.pointMarkersBuilder = new PointMarkersBuilder();\n pointMarkers?.(this.pointMarkersBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the line stroke.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: LinesStrokeBuilder<Datum>) => void): this;\n stroke(stroke: ((stroke: LinesStrokeBuilder<Datum>) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new LinesStrokeBuilder();\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xNumeric(xNumeric: null): this;\n xNumeric(\n xNumeric: (x: NumberChartPositionDimensionBuilder<Datum>) => void\n ): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xDimensionBuilder = undefined;\n return this;\n }\n this.xDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using Date date.\n */\n xDate(xDate: null): this;\n xDate(xDate: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xDimensionBuilder = undefined;\n return this;\n }\n this.xDimensionBuilder = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's y dimension.\n */\n y(y: null): this;\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n y(y: ((y: NumberChartPositionDimensionBuilder<Datum>) => void) | null): this {\n if (y === null) {\n this.yDimensionBuilder = undefined;\n return this;\n }\n this.yDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for the LinesComponent.\n */\n getConfig(): LinesConfig<Datum> {\n this.validateBuilder();\n return new LinesConfig({\n marksClass: 'vic-lines',\n curve: this._curve,\n data: this._data,\n datumClass: this._datumClass,\n labelLines: this._labelLines,\n lineLabelsFormat: this._lineLabelsFormat,\n mixBlendMode: this._mixBlendMode,\n pointerDetectionRadius: this._pointerDetectionRadius,\n pointMarkers: this.pointMarkersBuilder?._build(),\n stroke: this.strokeBuilder._build(),\n x: this.xDimensionBuilder._build('X'),\n y: this.yDimensionBuilder._build('Y'),\n areaFills: this.areaFillsBuilder?._build(),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Lines');\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n if (!this.xDimensionBuilder) {\n throw new Error(\n 'Lines Builder: X dimension is required. Please use method `createXNumericDimension` or `createXDateDimension` to set it.'\n );\n }\n if (!this.yDimensionBuilder) {\n throw new Error(\n 'Lines Builder: Y dimension is required. Please use method `createYDimension` to set it.'\n );\n }\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { LinesHost } from '../lines-events.directive';\n\nexport class LinesClickEmitTooltipDataPauseHoverMoveActions<Datum>\n implements EventAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>) {\n const outputData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: LinesHost<Datum>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { LinesMarkerDatum } from '../../config/lines-config';\nimport { LinesGroupSelectionDatum } from '../../lines.component';\nimport { LinesHost } from '../lines-events.directive';\n\n/**\n * A suggested default action for the hover and move event on lines.\n *\n * This action changes the color of the non-closest-to-pointer lines\n * to a light gray.\n */\nexport class LinesHoverMoveDefaultLinesStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n host\n .getClosestLineGroup()\n .raise()\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', null);\n\n host\n .getOtherLineGroups()\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', '#ddd');\n }\n\n onEnd(directive: LinesHost<Datum>): void {\n directive.marks.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', null);\n }\n}\n\n/**\n * A suggested default action for the hover and move event on line markers.\n *\n * This action makes line markers on non-closest-to-pointer lines invisible,\n * and at the same time enlarges the marker on the \"selected\" line that is\n * closest to the pointer by a specified amount.\n */\nexport class LinesHoverMoveDefaultMarkersStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n host\n .getClosestMarker()\n .style('display', 'block')\n .attr('r', () => {\n let r = host.marks.config.pointMarkers.radius;\n r =\n host.marks.config.pointMarkers.radius +\n host.marks.config.pointMarkers.growByOnHover;\n return r;\n })\n .raise();\n\n host.getOtherMarkers().style('display', 'none');\n }\n\n onEnd(host: LinesHost<Datum>): void {\n host.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .style('display', (d) => d.display)\n .attr('r', () => host.marks.config.pointMarkers.radius);\n }\n}\n\n/**\n * A collection of suggested default actions for the hover and move event\n * on lines and line markers.\n *\n * Applies either Line Markers action or a Hover Dot action depending on\n * whether line markers are used.\n */\nexport class LinesHoverMoveDefaultStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n linesStyles: HoverMoveAction<LinesHost<Datum>>;\n markersStyles: HoverMoveAction<LinesHost<Datum>>;\n\n constructor() {\n this.linesStyles = new LinesHoverMoveDefaultLinesStyles();\n this.markersStyles = new LinesHoverMoveDefaultMarkersStyles();\n }\n\n onStart(host: LinesHost<Datum>) {\n this.linesStyles.onStart(host);\n if (host.marks.config.pointMarkers) {\n this.markersStyles.onStart(host);\n }\n }\n\n onEnd(host: LinesHost<Datum>) {\n this.linesStyles.onEnd(host);\n if (host.marks.config.pointMarkers) {\n this.markersStyles.onEnd(host);\n }\n }\n}\n\nexport class LinesHoverMoveEmitTooltipData<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: LinesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { LinesHost } from '../lines-events.directive';\n\nexport class LinesMarkerClickEmitTooltipData<Datum>\n implements EventAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>) {\n const tooltipData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host\n .getClosestMarker()\n .attr('r', (): number => {\n const r =\n host.marks.config.pointMarkers.radius +\n host.marks.config.pointMarkers.growByOnHover;\n return r;\n })\n .raise();\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: LinesHost<Datum>) {\n host\n .getClosestMarker()\n .attr('r', (): number => host.marks.config.pointMarkers.radius);\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n ViewEncapsulation,\n} from '@angular/core';\nimport { area, line, map, select, Transition } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { GenericScale } from '../core';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { LinesConfig, LinesMarkerDatum } from './config/lines-config';\nimport { LinesInteractionOutput } from './events/lines-interaction-output';\n\nexport type LinesGroupSelection = Selection<\n SVGGElement,\n LinesGroupSelectionDatum,\n SVGGElement,\n unknown\n>;\n\nexport type LinesGroupSelectionDatum = [string, number[]];\n\nexport const LINES = new InjectionToken<LinesComponent<unknown>>(\n 'LinesComponent'\n);\n\nexport interface LinesTooltipDatum<Datum> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n strokeColor: string;\n };\n}\n\ntype LinesSvgElements = 'g' | 'line' | 'area' | 'marker' | 'label';\n\nexport type MarkerSelection = Selection<\n SVGCircleElement,\n LinesMarkerDatum,\n SVGGElement,\n LinesGroupSelectionDatum\n>;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-lines]',\n template: '',\n styleUrls: ['./lines.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: LinesComponent },\n { provide: LINES, useExisting: LinesComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[attr.stroke-linecap]': 'config.stroke.linecap',\n '[attr.stroke-linejoin]': 'config.stroke.linejoin',\n '[attr.stroke-width]': 'config.stroke.width',\n '[attr.stroke-opacity]': 'config.stroke.opacity',\n '[style.mix-blend-mode]': 'config.mixBlendMode',\n fill: 'none',\n },\n})\nexport class LinesComponent<Datum> extends VicXyPrimaryMarks<\n Datum,\n LinesConfig<Datum>\n> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n line: (x: any[]) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lineArea: (x: any[]) => any;\n lineGroups: LinesGroupSelection;\n lineLabelsRef: ElementRef<SVGSVGElement>;\n markerIndexAttr = 'index';\n markers: BehaviorSubject<MarkerSelection> = new BehaviorSubject(null);\n markers$ = this.markers.asObservable().pipe(filter((d) => !!d));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n private zone = inject(NgZone);\n private elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<LinesSvgElements, string> {\n return {\n g: this.config.marksClass + '-group',\n line: this.config.marksClass + '-line',\n area: this.config.marksClass + '-area',\n marker: this.config.marksClass + '-marker',\n label: this.config.marksClass + '-label',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.color = this.config.stroke.color.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n this.setLine();\n const transitionDuration = this.getTransitionDuration();\n this.drawLines(transitionDuration);\n if (this.config.areaFills) {\n this.setAreaFunction();\n this.drawAreaFills(transitionDuration);\n }\n if (this.config.pointMarkers) {\n this.drawPointMarkers(transitionDuration);\n this.updateMarkerElements();\n }\n if (this.config.labelLines) {\n this.drawLineLabels();\n }\n }\n\n setLine(): void {\n const isValid = map(this.config.data, this.isValidValue.bind(this));\n\n this.line = line()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined((i: any) => isValid[i] as boolean)\n .curve(this.config.curve)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((i: any) => this.scales.x(this.config.x.values[i]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y((i: any) => this.scales.y(this.config.y.values[i]));\n }\n\n setAreaFunction(): void {\n const isValid = map(this.config.data, this.isValidValue.bind(this));\n\n this.lineArea = area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined((i: any) => isValid[i] as boolean)\n .curve(this.config.curve)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((i: any) => this.scales.x(this.config.x.values[i]))\n .y0(() => this.scales.y(0))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((i: any) => this.scales.y(this.config.y.values[i]));\n }\n\n isValidValue(d: Datum): boolean {\n const xIsValid = this.config.x.isValidValue(this.config.x.valueAccessor(d));\n const yIsValid = this.config.y.isValidValue(this.config.y.valueAccessor(d));\n return xIsValid && yIsValid;\n }\n\n drawLines(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, LinesGroupSelectionDatum>(`.${this.class.g}`)\n .data<LinesGroupSelectionDatum>(\n this.config.linesD3Data,\n this.config.linesKeyFunction\n )\n .join(\n (enter) => enter.append('g').attr('class', this.class.g),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (update) => update.transition(t as any),\n (exit) => exit.remove()\n );\n\n this.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>(\n `.${this.class.line}`\n )\n .data<LinesGroupSelectionDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('class', ([category], i) =>\n `${this.class.line} ${this.config.datumClass(this.config.getDataFromCategory(category)[0], i)}`.trim()\n )\n .attr('stroke', ([category]) => this.scales.color(category))\n .attr('d', ([, lineData]) => this.line(lineData)),\n (update) =>\n update\n .attr('stroke', ([category]) => this.scales.color(category))\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', ([, lineData]) => this.line(lineData))\n ),\n (exit) => exit.remove()\n );\n }\n\n drawAreaFills(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>(\n `.${this.class.area}`\n )\n .data<LinesGroupSelectionDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('class', this.class.area)\n .attr('fill', ([category, indices]) =>\n this.getAreaFill(category, indices)\n )\n .attr('opacity', this.config.areaFills.opacity)\n .attr('d', ([, lineData]) => this.lineArea(lineData))\n .attr('display', ([category]) =>\n this.config.areaFills.display(category) ? null : 'none'\n ),\n (update) =>\n update\n .attr('fill', ([category, indices]) =>\n this.getAreaFill(category, indices)\n )\n .attr('opacity', this.config.areaFills.opacity)\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', ([, lineData]) => this.lineArea(lineData))\n )\n .attr('display', ([category]) =>\n this.config.areaFills.display(category) ? null : 'none'\n ),\n (exit) => exit.remove()\n );\n }\n\n getAreaFill(category: string, lineDataIndices: number[]): string {\n const firstPointInLine = this.config.data[lineDataIndices[0]];\n if (this.config.areaFills.customFills) {\n const fillDef = this.config.areaFills.customFills.find((def) =>\n def.shouldApply(firstPointInLine)\n );\n if (fillDef) {\n return `url(#${fillDef.defId})`;\n } else {\n return null;\n }\n }\n if (this.config.areaFills.color) {\n return this.config.areaFills.color(firstPointInLine);\n }\n return this.scales.color(category);\n }\n\n drawPointMarkers(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>(`.${this.class.marker}`)\n .data<LinesMarkerDatum>(([, indices]) =>\n this.config.getPointMarkersData(indices)\n )\n .join(\n (enter) =>\n enter\n .append('circle')\n .attr('class', (d) =>\n `${this.class.marker} ${this.config.pointMarkers.datumClass(this.config.data[d.index], d.index)}`.trim()\n )\n .attr(this.markerIndexAttr, (d) => d.index)\n .attr('cx', (d) => this.scales.x(this.config.x.values[d.index]))\n .attr('cy', (d) => this.scales.y(this.config.y.values[d.index]))\n .attr('r', this.config.pointMarkers.radius)\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .style('display', (d) => d.display),\n (update) =>\n update\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('cx', (d) => this.scales.x(this.config.x.values[d.index]))\n .attr('cy', (d) => this.scales.y(this.config.y.values[d.index]))\n ),\n (exit) => exit.remove()\n );\n }\n\n drawLineLabels(): void {\n // TODO: make more flexible (or its own element? currently this only puts labels on the right side of the chart\n this.lineGroups\n .selectAll(`.${this.class.label}`)\n .data(([category, indices]) => {\n return [\n {\n category,\n index: indices[indices.length - 1],\n },\n ];\n })\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n .attr('text-anchor', 'end')\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .attr(\n 'x',\n (d) => `${this.scales.x(this.config.x.values[d.index]) - 4}px`\n )\n .attr(\n 'y',\n (d) => `${this.scales.y(this.config.y.values[d.index]) - 12}px`\n )\n .text((d) => this.config.lineLabelsFormat(d.category)),\n (update) =>\n update\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .attr(\n 'x',\n (d) => `${this.scales.x(this.config.x.values[d.index]) - 4}px`\n )\n .attr(\n 'y',\n (d) => `${this.scales.y(this.config.y.values[d.index]) - 12}px`\n )\n .text((d) => this.config.lineLabelsFormat(d.category)),\n (exit) => exit.remove()\n );\n }\n\n updateMarkerElements(): void {\n const markers = select(this.elRef.nativeElement).selectAll<\n SVGCircleElement,\n LinesMarkerDatum\n >(`.${this.class.marker}`);\n this.markers.next(markers);\n }\n\n getTooltipData(\n datumIndex: number\n ): Omit<\n LinesInteractionOutput<Datum>,\n 'type' | 'fromAnchor' | 'customPosition' | 'defaultPosition'\n > {\n const datum = this.config.data[datumIndex];\n return {\n datum,\n color: this.scales.color(this.config.stroke.color.valueAccessor(datum)),\n values: {\n strokeColor: this.config.stroke.color.valueAccessor(datum),\n x: this.config.x.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.x.formatFunction)\n : ValueUtilities.d3Format(\n this.config.x.valueAccessor(datum),\n this.config.x.formatSpecifier\n ),\n y: this.config.y.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.y.formatFunction)\n : ValueUtilities.d3Format(\n this.config.y.valueAccessor(datum),\n this.config.y.formatSpecifier\n ),\n },\n anchor: {\n x: this.scales.x(this.config.x.values[datumIndex]),\n y: this.scales.y(this.config.y.values[datumIndex]),\n },\n origin: this.chart.svgRef.nativeElement,\n };\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class LinesTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { least } from 'd3';\nimport { Observable, of } from 'rxjs';\nimport { ContinuousValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { LinesMarkerDatum } from '../config/lines-config';\nimport {\n LINES,\n LinesComponent,\n LinesGroupSelection,\n MarkerSelection,\n} from '../lines.component';\nimport { LinesInteractionOutput } from './lines-interaction-output';\nimport { LinesTooltipPositioner } from './lines-tooltip-positioner';\n\nexport interface LinesHost<\n Datum,\n TLinesComponent extends LinesComponent<Datum> = LinesComponent<Datum>,\n> extends MarksHost<LinesInteractionOutput<Datum>, TLinesComponent> {\n getClosestPointIndex(): number;\n getClosestLineGroup(): LinesGroupSelection;\n getOtherLineGroups(): LinesGroupSelection;\n getClosestMarker(): MarkerSelection;\n getOtherMarkers(): MarkerSelection;\n}\n\n@Directive({\n selector: '[vicLinesEvents]',\n})\nexport class LinesEventsDirective<\n Datum,\n TLinesComponent extends LinesComponent<Datum> = LinesComponent<Datum>,\n >\n extends EventsDirective<LinesHost<Datum>>\n implements LinesHost<Datum>\n{\n @Input()\n hoverMoveActions:\n | HoverMoveAction<LinesHost<Datum>, LinesInteractionOutput<Datum>>[]\n | null;\n @Input()\n clickActions:\n | EventAction<LinesHost<Datum>, LinesInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n LinesHost<Datum>,\n LinesInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n LinesInteractionOutput<Datum>\n >();\n\n closestPointIndex: number;\n actionActive: boolean = false;\n\n constructor(@Inject(LINES) public lines: TLinesComponent) {\n super();\n }\n\n get marks(): LinesComponent<Datum> {\n return this.lines;\n }\n\n getElements(): Observable<Element[]> {\n return of([this.lines.chart.svgRef.nativeElement]);\n }\n\n getClosestPointIndex(): number {\n return this.closestPointIndex;\n }\n\n getClosestLineGroup(): LinesGroupSelection {\n return this.marks.lineGroups.filter(\n ([category]) =>\n this.marks.config.stroke.color.values[this.getClosestPointIndex()] ===\n category\n );\n }\n\n getOtherLineGroups(): LinesGroupSelection {\n return this.marks.lineGroups.filter(\n ([category]) =>\n this.marks.config.stroke.color.values[this.getClosestPointIndex()] !==\n category\n );\n }\n\n getClosestMarker(): MarkerSelection {\n return this.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .filter((d) => d.index === this.getClosestPointIndex());\n }\n\n getOtherMarkers(): MarkerSelection {\n return this.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .filter((d) => d.index !== this.getClosestPointIndex());\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onEnter(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this);\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.callPointerEventActions(\n EventType.HoverMove,\n this.hoverMoveActions\n );\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n if (this.actionActive) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this));\n this.actionActive = false;\n }\n this.resetDirective();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClick(event: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.callPointerEventActions(EventType.Click, this.clickActions);\n }\n }\n }\n\n onClickRemove(): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.clickActions.forEach((action) => action.onEnd(this));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n pointerIsInChartArea(): boolean {\n return (\n this.positionX > this.lines.ranges.x[0] &&\n this.positionX < this.lines.ranges.x[1] &&\n this.positionY > this.lines.ranges.y[1] &&\n this.positionY < this.lines.ranges.y[0]\n );\n }\n\n private callPointerEventActions(\n type: EventType,\n actions: EventAction<this>[]\n ): void {\n if (!this.isEventAllowed(type)) return;\n\n this.closestPointIndex = this._getClosestPointIndex();\n\n const isInside = this.pointerIsInsideShowTooltipRadius(\n this.closestPointIndex,\n this.positionX,\n this.positionY\n );\n\n if (isInside) {\n actions.forEach((action) => action.onStart(this));\n this.actionActive = true;\n } else {\n this.closestPointIndex = null;\n if (this.actionActive) {\n actions.forEach((action) => action.onEnd(this));\n this.actionActive = false;\n }\n }\n }\n\n protected _getClosestPointIndex(): number {\n return least(this.lines.config.valueIndices, (i) =>\n this.getPointerDistanceFromPoint(\n this.lines.config.x.values[i],\n this.lines.config.y.values[i],\n this.positionX,\n this.positionY\n )\n );\n }\n\n getPointerDistanceFromPoint(\n xValue: ContinuousValue,\n yValue: number,\n pointerX: number,\n pointerY: number\n ): number {\n return Math.hypot(\n this.lines.scales.x(xValue) - pointerX,\n this.lines.scales.y(yValue) - pointerY\n );\n }\n\n pointerIsInsideShowTooltipRadius(\n closestPointIndex: number,\n pointerX: number,\n pointerY: number\n ): boolean {\n if (!this.lines.config.pointerDetectionRadius) {\n return true;\n } else {\n const cursorDistanceFromPoint = this.getPointerDistanceFromPoint(\n this.lines.config.x.values[closestPointIndex],\n this.lines.config.y.values[closestPointIndex],\n pointerX,\n pointerY\n );\n return cursorDistanceFromPoint < this.lines.config.pointerDetectionRadius;\n }\n }\n\n setPositionsFromElement(): void {\n return;\n }\n\n getInteractionOutput(type: EventType): LinesInteractionOutput<Datum> {\n const tooltipData = this.lines.getTooltipData(this.closestPointIndex);\n const position = new LinesTooltipPositioner({\n x: tooltipData.anchor.x,\n y: tooltipData.anchor.y,\n });\n\n return {\n ...tooltipData,\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: LinesInteractionOutput<Datum>): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.closestPointIndex = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LinesEventsDirective } from './events/lines-events.directive';\nimport { LinesComponent } from './lines.component';\n\n@NgModule({\n imports: [LinesComponent, LinesEventsDirective],\n exports: [LinesComponent, LinesEventsDirective],\n})\nexport class VicLinesModule {}\n","import { Directive, Input, OnChanges, OnInit } from '@angular/core';\nimport { Orientation, Side } from '../core/types/layout';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { BinStrategy } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { VicAttributeDataDimensionConfig } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { CalculatedBinsAttributeDataDimension } from '../geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins';\n\n@Directive()\nexport abstract class MapLegend<\n Datum,\n AttributeDimensionConfig extends VicAttributeDataDimensionConfig<Datum>,\n >\n implements OnChanges, OnInit\n{\n @Input() width: number;\n @Input() height: number;\n @Input() orientation: keyof typeof Orientation;\n @Input() valuesSide: keyof typeof Side;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() scale: any;\n @Input() config: AttributeDimensionConfig;\n @Input() outlineColor: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: any[];\n colors: string[];\n startValueSpace: number;\n endValueSpace: number;\n largerValueSpace: number;\n leftOffset: number;\n VicValuesBin: typeof BinStrategy;\n\n abstract getValuesFromScale(): string[] | number[];\n abstract getLeftOffset(values?: string[]): number;\n\n ngOnChanges(): void {\n this.setValues();\n this.setColors();\n }\n\n ngOnInit(): void {\n this.VicValuesBin = BinStrategy;\n }\n\n setValues(): void {\n if (this.config.binType !== BinStrategy.categorical) {\n this.setQuantitativeValues();\n } else {\n this.setCategoricalValues();\n }\n }\n\n setQuantitativeValues(): void {\n let values = this.getValuesFromScale() as number[];\n if (this.orientation === Orientation.vertical) {\n values = values.slice().reverse();\n }\n this.values = values.map((d) =>\n ValueUtilities.d3Format(\n d,\n (this.config as CalculatedBinsAttributeDataDimension<Datum>)\n .formatSpecifier\n )\n );\n this.setQuantitativeValueSpaces(this.values);\n }\n\n setCategoricalValues(): void {\n let values = this.getValuesFromScale() as string[];\n if (this.orientation === Orientation.vertical) {\n values = values.slice().reverse();\n }\n this.setCategoricalValueSpaces();\n this.values = values;\n }\n\n setColors(): void {\n this.colors = this.config.range;\n if (this.orientation === Orientation.vertical) {\n this.colors = this.colors.slice().reverse();\n }\n }\n\n setQuantitativeValueSpaces(values: string[]): void {\n this.startValueSpace = values[0].length * 4;\n this.endValueSpace = values[values.length - 1].length * 4;\n this.largerValueSpace =\n this.startValueSpace > this.endValueSpace\n ? this.startValueSpace\n : this.endValueSpace;\n this.leftOffset = this.getLeftOffset(values);\n }\n\n setCategoricalValueSpaces(): void {\n this.startValueSpace = 0;\n this.endValueSpace = 0;\n this.largerValueSpace = 0;\n this.leftOffset = 0;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, OnChanges, ViewChild } from '@angular/core';\nimport { scaleLinear } from 'd3';\nimport { Orientation } from '../../core/types/layout';\nimport { NoBinsAttributeDataDimension } from '../../geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins';\nimport { MapLegend } from '../map-legend-base';\n\n/**\n * @internal\n */\n@Component({\n selector: 'vic-continuous-legend',\n templateUrl: './continuous-legend.component.html',\n styleUrls: ['./continuous-legend.component.scss'],\n imports: [CommonModule],\n})\nexport class ContinuousLegendComponent<Datum>\n extends MapLegend<Datum, NoBinsAttributeDataDimension<Datum>>\n implements OnChanges\n{\n @ViewChild('canvas', { static: true })\n canvasRef: ElementRef<HTMLCanvasElement>;\n\n override ngOnChanges(): void {\n super.ngOnChanges();\n this.drawLinearGradient();\n }\n\n getValuesFromScale(): number[] {\n return this.scale.domain();\n }\n\n getLeftOffset(): number {\n if (this.orientation === Orientation.horizontal) {\n return (this.largerValueSpace - this.startValueSpace) * -1;\n } else {\n return 0;\n }\n }\n\n drawLinearGradient(): void {\n const canvas = this.canvasRef.nativeElement;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n const ctx = canvas.getContext('2d');\n if (this.orientation === Orientation.horizontal) {\n this.drawHorizontalGradient(canvas, ctx);\n } else {\n this.drawVerticalGradient(canvas, ctx);\n }\n }\n\n drawHorizontalGradient(\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ): void {\n canvas.height = 1;\n canvas.width = this.width - this.startValueSpace - this.endValueSpace - 2;\n const rectScale = scaleLinear<string>()\n .domain([0, canvas.width])\n .range(this.colors);\n for (let i = 0; i < canvas.width; ++i) {\n ctx.fillStyle = rectScale(i);\n ctx.fillRect(i, 0, 1, 1);\n }\n }\n\n drawVerticalGradient(\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ): void {\n canvas.height = this.height - 16;\n canvas.width = 1;\n const rectScale = scaleLinear<string>()\n .domain([0, canvas.height])\n .range(this.colors);\n for (let i = 0; i < canvas.height; ++i) {\n ctx.fillStyle = rectScale(i);\n ctx.fillRect(0, i, 1, 1);\n }\n }\n}\n","<div\n class=\"vic-legend-color-scale vic-continuous\"\n [ngClass]=\"['vic-' + orientation, 'vic-' + valuesSide]\"\n [style.--width]=\"width + 'px'\"\n [style.--height]=\"height + 'px'\"\n [style.--border-color]=\"outlineColor\"\n [style.--value-space]=\"largerValueSpace + 'px'\"\n [style.left.px]=\"leftOffset\"\n>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'left') ||\n (orientation === 'horizontal' && valuesSide === 'top')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n <div class=\"vic-legend-canvas-container\">\n <canvas class=\"vic-legend-canvas\" #canvas></canvas>\n </div>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'right') ||\n (orientation === 'horizontal' && valuesSide === 'bottom')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #valuesDisplay>\n <div class=\"vic-legend-values-container vic-continuous\">\n <p class=\"vic-value vic-low\">{{ values[0] }}</p>\n <p class=\"vic-value vic-high\">{{ values[values.length - 1] }}</p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Orientation } from '../../core/types/layout';\nimport { BinStrategy } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { VicAttributeDataDimensionConfig } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { NoBinsAttributeDataDimension } from '../../geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins';\nimport { MapLegend } from '../map-legend-base';\n\nexport type DiscontinuousAttributeDataDimensionConfig<Datum> = Exclude<\n VicAttributeDataDimensionConfig<Datum>,\n NoBinsAttributeDataDimension<Datum>\n>;\n\n@Component({\n selector: 'vic-discontinuous-legend',\n templateUrl: './discontinuous-legend.component.html',\n styleUrls: ['./discontinuous-legend.component.scss'],\n imports: [CommonModule],\n})\nexport class DiscontinuousLegendComponent<Datum> extends MapLegend<\n Datum,\n DiscontinuousAttributeDataDimensionConfig<Datum>\n> {\n getValuesFromScale(): string[] | number[] {\n if (this.config.binType === BinStrategy.categorical) {\n return this.config.getDomain();\n } else {\n return this.getQuantitativeValuesFromScale();\n }\n }\n\n getQuantitativeValuesFromScale(): number[] {\n const binColors = this.config.range;\n const values =\n this.config.binType === BinStrategy.customBreaks\n ? this.config.breakValues\n : [\n ...new Set(\n binColors.map((colors) => this.scale.invertExtent(colors)).flat()\n ),\n ];\n return values;\n }\n\n getLeftOffset(values: string[]): number {\n if (this.orientation === Orientation.horizontal) {\n const colorHalfWidth = this.width / (values.length * 2);\n if (colorHalfWidth > this.largerValueSpace) {\n return (colorHalfWidth - this.startValueSpace) * -1;\n } else {\n return (this.largerValueSpace - this.startValueSpace) * -1;\n }\n } else {\n return 0;\n }\n }\n}\n","<div\n class=\"vic-legend-color-scale vic-discontinuous\"\n [ngClass]=\"['vic-' + orientation, 'vic-' + valuesSide]\"\n [class.vic-categorical]=\"config.binType === VicValuesBin.categorical\"\n [style.--border-color]=\"outlineColor\"\n [style.--width]=\"width + 'px'\"\n [style.--height]=\"height + 'px'\"\n [style.--num-colors]=\"colors.length\"\n [style.--value-space]=\"largerValueSpace + 'px'\"\n [style.left.px]=\"leftOffset\"\n>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'left') ||\n (orientation === 'horizontal' && valuesSide === 'top')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n <div class=\"vic-legend-colors-container\">\n <div\n class=\"vic-legend-color-padding\"\n *ngIf=\"config.binType !== VicValuesBin.categorical\"\n ></div>\n <div\n *ngFor=\"let color of colors\"\n class=\"vic-legend-color vic-discontinuous\"\n [style.background-color]=\"color\"\n [style.--border-color]=\"outlineColor\"\n >\n </div>\n </div>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'right') ||\n (orientation === 'horizontal' && valuesSide === 'bottom')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #valuesDisplay>\n <div class=\"vic-legend-values-container vic-discontinous\">\n <p class=\"vic-value\" *ngFor=\"let value of values; let i = index\">\n {{ value }}\n </p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { MapChartComponent } from '../charts/map-chart/map-chart.component';\nimport { Orientation, Side } from '../core/types/layout';\nimport { BinStrategy } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { ContinuousLegendComponent } from './continuous-legend/continuous-legend.component';\nimport { DiscontinuousLegendComponent } from './discontinuous-legend/discontinuous-legend.component';\n\nexport enum VicLegendType {\n categorical = 'categorical',\n ordinal = 'ordinal',\n quantitative = 'quantitative',\n}\n\n@Component({\n selector: 'vic-map-legend',\n templateUrl: './map-legend.component.html',\n styleUrls: ['./map-legend.component.scss'],\n imports: [\n CommonModule,\n ContinuousLegendComponent,\n DiscontinuousLegendComponent,\n ],\n})\nexport class MapLegendComponent<Datum> implements OnInit {\n @Input() width: number;\n @Input() height: number;\n @Input() valuesSide: keyof typeof Side;\n @Input() outlineColor: string;\n @ViewChild('canvas', { static: true })\n VicValuesBin: typeof BinStrategy;\n canvasRef: ElementRef<HTMLCanvasElement>;\n legendType: keyof typeof VicLegendType;\n orientation: keyof typeof Orientation;\n chart = inject(MapChartComponent<Datum>);\n destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.VicValuesBin = BinStrategy; // for some reason this doesn't get assigned if it's assigned in the class properties above\n this.setOrientation();\n this.setValuesSide();\n }\n\n setOrientation(): void {\n this.orientation =\n this.width > this.height ? Orientation.horizontal : Orientation.vertical;\n }\n\n setValuesSide(): void {\n if (this.orientation === Orientation.horizontal) {\n if (this.valuesSide === Side.left || this.valuesSide === Side.right) {\n this.valuesSide = undefined;\n console.warn(\n \"valuesSide must be set to 'top' or 'bottom' for a map-legend with a horizontal aspect ratio\"\n );\n }\n if (!this.valuesSide) {\n this.valuesSide = Side.bottom;\n }\n } else {\n if (this.valuesSide === Side.top || this.valuesSide === Side.bottom) {\n this.valuesSide = undefined;\n console.warn(\n \"valuesSide must be set to 'left' or 'right' for a map-legend with a vertical aspect ratio\"\n );\n }\n if (!this.valuesSide) {\n this.valuesSide = Side.left;\n }\n }\n }\n}\n","<ng-content select=\"[title]\"></ng-content>\n@if (chart.attributeProperties$ | async; as attributeProperties) { @if\n(attributeProperties.config) {\n<vic-continuous-legend\n *ngIf=\"attributeProperties.config.binType === VicValuesBin.none\"\n [width]=\"width\"\n [height]=\"height\"\n [valuesSide]=\"valuesSide\"\n [scale]=\"attributeProperties.scale\"\n [config]=\"attributeProperties.config\"\n [outlineColor]=\"outlineColor\"\n [orientation]=\"orientation\"\n></vic-continuous-legend>\n<vic-discontinuous-legend\n *ngIf=\"attributeProperties.config.binType !== VicValuesBin.none\"\n [width]=\"width\"\n [height]=\"height\"\n [valuesSide]=\"valuesSide\"\n [scale]=\"attributeProperties.scale\"\n [config]=\"attributeProperties.config\"\n [outlineColor]=\"outlineColor\"\n [orientation]=\"orientation\"\n></vic-discontinuous-legend>\n} }\n","import { NgModule } from '@angular/core';\nimport { MapLegendComponent } from './map-legend.component';\n\n@NgModule({\n imports: [MapLegendComponent],\n exports: [MapLegendComponent],\n})\nexport class VicMapLegendModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { QuantitativeRulesLabelsOptions } from './quantitative-rules-labels-options';\n\nexport class QuantitativeRulesLabels<Datum>\n implements QuantitativeRulesLabelsOptions<Datum>\n{\n color: (d: Datum) => string;\n display: (d: Datum) => boolean;\n dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic';\n value: (d: Datum) => string;\n offset: number;\n position: (start: number, end: number, d: Datum) => number;\n textAnchor: 'start' | 'middle' | 'end';\n\n constructor(options: QuantitativeRulesLabelsOptions<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { QuantitativeRulesLabels } from './quantitative-rules-labels';\n\nconst DEFAULT = {\n _display: () => true,\n _dominantBaseline: 'middle',\n};\n\nexport class RulesLabelsBuilder<Datum> {\n private _color: (d: Datum) => string;\n private _display: (d: Datum) => boolean;\n private _dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic';\n private _value: (d: Datum) => string;\n private _offset: number;\n private _position: (start: number, end: number, d: Datum) => number;\n private _textAnchor: 'start' | 'middle' | 'end';\n\n constructor() {\n safeAssign(this, DEFAULT);\n this._value = (d: Datum) => `${d}`;\n }\n\n /**\n * OPTIONAL. Set the color of the labels.\n *\n * If not provided, the color of the line will be used.\n *\n * To unset the color, pass `null`.\n */\n color(color: null): this;\n color(color: string): this;\n color(color: (d: Datum) => string): this;\n color(color: string | ((d: Datum) => string) | null) {\n if (color === null) {\n this._color = null;\n return this;\n }\n this._color = typeof color === 'string' ? () => color : color;\n return this;\n }\n\n /**\n * OPTIONAL. Set the display of the labels.\n *\n * If not provided, the labels will be displayed.\n *\n * @default true\n */\n display(display: boolean): this;\n display(display: (d: Datum) => boolean): this;\n display(display: boolean | ((d: Datum) => boolean)) {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. Set the dominant baseline of the labels.\n *\n * @default 'middle'\n */\n dominantBaseline(\n dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic'\n ) {\n this._dominantBaseline = dominantBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. Set the offset of the labels.\n *\n * @default -12 for horizontal orientation, 0 for vertical orientation\n */\n offset(offset: number) {\n this._offset = offset;\n return this;\n }\n\n /**\n * OPTIONAL. Set the position of the labels.\n *\n * @default end for horizontal orientation, end for vertical orientation\n */\n position(position: (start: number, end: number, d: Datum) => number) {\n this._position = position;\n return this;\n }\n\n /**\n * OPTIONAL. Set the text anchor of the labels.\n *\n * @default 'end' for horizontal orientation, 'middle' for vertical orientation\n */\n textAnchor(textAnchor: 'start' | 'middle' | 'end') {\n this._textAnchor = textAnchor;\n return this;\n }\n\n /**\n * REQUIRED. Set the value of the labels.\n */\n value(value: (d: Datum) => string) {\n this._value = value;\n return this;\n }\n\n _build(): QuantitativeRulesLabels<Datum> {\n return new QuantitativeRulesLabels<Datum>({\n color: this._color,\n display: this._display,\n dominantBaseline: this._dominantBaseline,\n value: this._value,\n offset: this._offset,\n position: this._position,\n textAnchor: this._textAnchor,\n });\n }\n\n validateBuilder(\n orientation: 'horizontal' | 'vertical',\n lineColor: (d: Datum) => string\n ): void {\n if (!this._color) {\n this._color = lineColor;\n }\n if (!this._offset) {\n if (orientation === 'horizontal') {\n this._offset = -12;\n } else {\n this._offset = 0;\n }\n }\n if (!this._position) {\n if (orientation === 'horizontal') {\n this._position = (start: number, end: number) => end - 4;\n } else {\n this._position = (start: number, end: number) => end - 12;\n }\n }\n if (!this._textAnchor) {\n this._textAnchor = orientation === 'horizontal' ? 'end' : 'middle';\n }\n if (!this.value) {\n throw new Error('QuantitativeRulesLabels: value is required');\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { XyMarksConfig } from '../../marks/xy-marks/xy-marks-config';\nimport { Stroke } from '../../stroke/stroke';\nimport { QuantitativeRulesLabels } from './labels/quantitative-rules-labels';\nimport { QuantitativeRulesDimensions } from './quantitative-rules-dimensions';\nimport { QuantitativeRulesOptions } from './quantitative-rules-options';\n\nexport class QuantitativeRulesConfig<Datum extends number | Date>\n extends XyMarksConfig<Datum>\n implements QuantitativeRulesOptions<Datum>\n{\n color: (d: Datum) => string;\n readonly dimensions: QuantitativeRulesDimensions;\n labels: QuantitativeRulesLabels<Datum>;\n stroke: Stroke;\n\n constructor(options: QuantitativeRulesOptions<Datum>) {\n super();\n safeAssign(this, options);\n }\n}\n","export interface QuantitativeRulesDimensions {\n quantitative: 'x' | 'y';\n quantitativeDimension: 'width' | 'height';\n isHorizontal: boolean;\n isVertical: boolean;\n}\n\nexport const HORIZONTAL_RULE_DIMENSIONS: QuantitativeRulesDimensions = {\n quantitative: 'x',\n quantitativeDimension: 'width',\n isHorizontal: true,\n isVertical: false,\n};\n\nexport const VERTICAL_RULE_DIMENSIONS: QuantitativeRulesDimensions = {\n quantitative: 'y',\n quantitativeDimension: 'height',\n isHorizontal: false,\n isVertical: true,\n};\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { VicAuxMarksBuilder } from '../../marks/aux-marks/config/aux-marks-builder';\nimport { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { RulesLabelsBuilder } from './labels/quantitative-rules-labels-builder';\nimport { QuantitativeRulesConfig } from './quantitative-rules-config';\nimport {\n HORIZONTAL_RULE_DIMENSIONS,\n QuantitativeRulesDimensions,\n VERTICAL_RULE_DIMENSIONS,\n} from './quantitative-rules-dimensions';\n\nconst DEFAULT = {\n _color: () => '#cccccc',\n};\n\n@Injectable()\nexport class VicQuantitativeRulesConfigBuilder<\n Datum extends number | Date,\n> extends VicAuxMarksBuilder<Datum> {\n protected _color: (d: Datum) => string;\n protected _data: Datum[];\n protected dimensions: QuantitativeRulesDimensions;\n protected _orientation: 'horizontal' | 'vertical';\n private labelsBuilder: RulesLabelsBuilder<Datum>;\n private strokeBuilder: StrokeBuilder;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the color of the rule.\n *\n * @default #cccccc.\n */\n color(color: string | ((d: Datum) => string)): this {\n if (typeof color === 'string') {\n this._color = () => color;\n } else {\n this._color = color;\n }\n return this;\n }\n\n /**\n * REQUIRED. Sets the data that will be used to render the quantitative rules.\n *\n * This component is not a Primary Marks component, so this data will not affect chart-level scales.\n *\n * @param data The data to be used to render the quantitative rules. Should be an array of numbers or dates.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the rule labels.\n */\n labels(): this;\n labels(labels: null): this;\n labels(labels: (labels: RulesLabelsBuilder<Datum>) => void): this;\n labels(labels?: ((labels: RulesLabelsBuilder<Datum>) => void) | null): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new RulesLabelsBuilder();\n labels?.(this.labelsBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the orientation of the rule.\n */\n orientation(orientation: 'horizontal' | 'vertical'): this {\n this._orientation = orientation;\n this.dimensions =\n orientation === 'horizontal'\n ? HORIZONTAL_RULE_DIMENSIONS\n : VERTICAL_RULE_DIMENSIONS;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the rule stroke.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n\n /**\n * REQUIRED. Builds the configuration object for the RuleComponent.\n */\n getConfig(): QuantitativeRulesConfig<Datum> {\n this.validateBuilder();\n return new QuantitativeRulesConfig({\n marksClass: 'vic-quantitative-rules',\n color: this._color,\n data: this._data,\n datumClass: this._class,\n dimensions: this.dimensions,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder._build(),\n });\n }\n\n protected validateBuilder(): void {\n if (this.data === undefined) {\n throw new Error('Data is required for the Quantitative Rules component.');\n }\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n if (this.labelsBuilder) {\n this.labelsBuilder.validateBuilder(this._orientation, this._color);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { select, Selection, Transition } from 'd3';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport { XyChartComponent } from '../charts/xy-chart/xy-chart.component';\nimport { XyAuxMarks } from '../marks';\nimport { QuantitativeRulesConfig } from './config/quantitative-rules-config';\n\ntype RulesSvgElements = 'g' | 'rule' | 'label';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-quantitative-rules]',\n template: '',\n styleUrl: './quantitative-rules.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: ChartComponent, useExisting: XyChartComponent }],\n host: {\n '[class]': 'config.marksClass',\n },\n})\nexport class QuantitativeRulesComponent<\n Datum extends number | Date,\n> extends XyAuxMarks<Datum, QuantitativeRulesConfig<Datum>> {\n rulesGroups: Selection<SVGGElement, Datum, SVGGElement, unknown>;\n protected elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<RulesSvgElements, string> {\n return {\n g: this.config.marksClass + '-group',\n rule: this.config.marksClass + '-rule',\n label: this.config.marksClass + '-label',\n };\n }\n\n drawMarks(): void {\n if (this.chartScalesMatchConfigOrientation()) {\n const transitionDuration = this.getTransitionDuration();\n this.drawRules(transitionDuration);\n if (this.config.labels) {\n this.drawLabels(transitionDuration);\n }\n }\n }\n\n drawRules(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.rulesGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, Datum>(`.${this.class.g}`)\n .data<Datum>(this.config.data, (d) => d.toString())\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (d, i) =>\n `${this.class.g} ${this.config.datumClass(d, i)}`.trim()\n )\n .attr('transform', (d) => this.getRuleTransform(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (d) => this.getRuleTransform(d)),\n (exit) => exit.remove()\n );\n\n this.rulesGroups\n .selectAll<SVGLineElement, Datum>(`.${this.class.rule}`)\n .data<Datum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('line')\n .attr('class', this.class.rule)\n .attr('stroke', (d) => this.config.color(d))\n .attr('stroke-width', this.config.stroke.width)\n .attr('opacity', this.config.stroke.opacity)\n .attr('stroke-dasharray', this.config.stroke.dasharray)\n .attr('stroke-linecap', this.config.stroke.linecap)\n .attr('stroke-linejoin', this.config.stroke.linejoin)\n .attr('x1', 0)\n .attr('x2', this.getWidth())\n .attr('y1', 0)\n .attr('y2', this.getHeight()),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('x1', 0)\n .attr('x2', this.getWidth())\n .attr('y1', 0)\n .attr('y2', this.getHeight()),\n (exit) => exit.remove()\n );\n }\n\n drawLabels(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.rulesGroups\n .selectAll<SVGTextElement, Datum>(`.${this.class.label}`)\n .data<Datum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n .style('display', (d) =>\n this.config.labels.display(d) ? null : 'none'\n )\n .attr('fill', (d) => this.config.labels.color(d))\n .attr('text-anchor', this.config.labels.textAnchor)\n .attr('dominant-baseline', this.config.labels.dominantBaseline)\n .attr('x', (d) => this.getLabelX(d))\n .attr('y', (d) => this.getLabelY(d))\n .text((d) => this.config.labels.value(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .style('display', (d) =>\n this.config.labels.display(d) ? null : 'none'\n )\n .attr('fill', (d) => this.config.labels.color(d))\n .attr('text-anchor', this.config.labels.textAnchor)\n .attr('dominant-baseline', this.config.labels.dominantBaseline)\n .attr('x', (d) => this.getLabelX(d))\n .attr('y', (d) => this.getLabelY(d)),\n (exit) => exit.remove()\n );\n }\n\n // Intended to flag situations where both chart scales and the config are both updated\n // and one goes before the other.\n chartScalesMatchConfigOrientation(): boolean {\n if (this.config.dimensions.isHorizontal) {\n return this.config.data.every((d) => this.scales.y(d) !== undefined);\n } else {\n return this.config.data.every((d) => this.scales.x(d) !== undefined);\n }\n }\n\n getRuleTransform(d: Datum): string {\n let x;\n let y;\n if (this.config.dimensions.isHorizontal) {\n x = this.scales.x.range()[0];\n y = this.getYStart(d);\n } else {\n x = this.getXStart(d);\n y = this.scales.y.range()[0];\n }\n return `translate(${x}, ${y})`;\n }\n\n getXStart(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[0];\n }\n return this.scales.x(d);\n }\n\n getYStart(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.y(d);\n }\n return this.scales.y.range()[1] - this.scales.y.range()[0];\n }\n\n getWidth(): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[1] - this.scales.x.range()[0];\n } else {\n return 0;\n }\n }\n\n getHeight(): number {\n if (this.config.dimensions.isHorizontal) {\n return 0;\n } else {\n return this.scales.y.range()[1] - this.scales.y.range()[0];\n }\n }\n\n getLabelX(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.config.labels.position(this.getXStart(d), this.getXEnd(d), d);\n }\n return this.config.labels.offset;\n }\n\n getLabelY(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.config.labels.offset;\n }\n return this.config.labels.position(this.getYStart(d), this.getYEnd(d), d);\n }\n\n getXEnd(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[1] - this.scales.x.range()[0];\n }\n return this.scales.x(d);\n }\n\n getYEnd(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.y(d);\n }\n return this.scales.y.range()[1];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { QuantitativeRulesComponent } from './quantitative-rules.component';\n\n@NgModule({\n imports: [QuantitativeRulesComponent],\n exports: [QuantitativeRulesComponent],\n})\nexport class VicQuantitativeRulesModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n CurveFactory,\n extent,\n InternMap,\n range,\n rollup,\n Series,\n SeriesPoint,\n stack,\n} from 'd3';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { DataMarksOptions } from '../../marks/config/marks-options';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { StackedAreaOptions } from './stacked-area-options';\n\nexport type StackedAreaDatum<CategoricalDomain> = (SeriesPoint<\n [ContinuousValue, InternMap<CategoricalDomain, number>]\n> & {\n i: number;\n})[];\n\nexport class StackedAreaConfig<Datum, CategoricalDomain extends DataValue>\n extends XyPrimaryMarksConfig<Datum>\n implements DataMarksOptions<Datum>\n{\n color: OrdinalVisualValueDimension<Datum, CategoricalDomain, string>;\n categoricalOrder: CategoricalDomain[];\n curve: CurveFactory;\n stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>;\n stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void;\n x: DateChartPositionDimension<Datum> | NumberChartPositionDimension<Datum>;\n y: NumberChartPositionDimension<Datum>;\n series: StackedAreaDatum<CategoricalDomain>[];\n\n constructor(options: StackedAreaOptions<Datum, CategoricalDomain>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndicies();\n this.setSeries();\n this.initQuantitativeDomainFromStack();\n }\n\n private setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data);\n this.color.setPropertiesFromData(this.data);\n }\n\n private setValueIndicies(): void {\n this.valueIndices = range(this.x.values.length).filter((i) =>\n this.color.domainIncludes(this.color.values[i])\n );\n }\n\n private setSeries(): void {\n const rolledUpData = rollup(\n this.valueIndices,\n ([i]) => i,\n (i) => this.x.values[i],\n (i) => this.color.values[i]\n );\n\n const keys = this.categoricalOrder\n ? this.categoricalOrder.slice().reverse()\n : this.color.calculatedDomain;\n\n this.series = stack<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >()\n .keys(keys)\n .value(([, I], category) => this.y.values[I.get(category)])\n .order(this.stackOrder)\n .offset(this.stackOffset)(Array.from(rolledUpData))\n .map((s) =>\n s.map((d) =>\n Object.assign(d, {\n i: d.data[1].get(s.key),\n })\n )\n );\n }\n\n private initQuantitativeDomainFromStack(): void {\n if (this.y.domain === undefined) {\n this.y.setDomain(extent(this.series.flat(2)));\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport {\n CurveFactory,\n curveLinear,\n InternMap,\n Series,\n stackOffsetNone,\n stackOrderNone,\n} from 'd3';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { StackedAreaConfig } from './stacked-area-config';\n\nconst DEFAULT = {\n _curve: curveLinear,\n _stackOrder: stackOrderNone,\n _stackOffset: stackOffsetNone,\n};\n\n/**\n * Builds a configuration object for a StackedAreaComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicStackedAreaBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the stacked area chart.\n *\n * The second generic parameter, TCategoricalValue, is the type of the categorical data that will be used to stack the areas.\n */\n@Injectable()\nexport class VicStackedAreaConfigBuilder<\n Datum,\n CategoricalDomain extends DataValue,\n> extends PrimaryMarksBuilder<Datum> {\n private colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >;\n private _categoricalOrder: CategoricalDomain[];\n private _curve: CurveFactory;\n private _stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>;\n private _stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void;\n private xDimensionBuilder:\n | NumberChartPositionDimensionBuilder<Datum>\n | DateChartPositionDimensionBuilder<Datum>;\n private yDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. Sets the categorical dimension for the stacked area chart.\n */\n color(\n color: (\n color: OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >\n ) => void\n ): this {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >();\n color(this.colorDimensionBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Allows user to provide a custom order for the categories of data / the stack.\n *\n * If not provided, the order will be determined by d3.\n */\n categoricalOrder(value: CategoricalDomain[]): this {\n if (value === null) {\n this._categoricalOrder = undefined;\n return this;\n }\n this._categoricalOrder = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the curve factory for the line.\n *\n * @default curveLinear\n */\n curve(value: null): this;\n curve(value: CurveFactory): this;\n curve(value: CurveFactory | null): this {\n if (value === null) {\n this._curve = DEFAULT._curve;\n return this;\n }\n this._curve = value;\n return this;\n }\n\n /**\n * OPTIONAL: Sets the order of the stack.\n *\n * @default stackOrderNone\n */\n stackOrder(stackOrder: null): this;\n stackOrder(\n stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>\n ): this;\n stackOrder(\n stackOrder:\n | ((\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>)\n | null\n ): this {\n if (stackOrder === null) {\n this._stackOrder = DEFAULT._stackOrder;\n return this;\n }\n this._stackOrder = stackOrder;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the offset of the stack.\n *\n * @default stackOffsetNone\n */\n stackOffset(stackOffset: null): this;\n stackOffset(\n stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void\n ): this;\n stackOffset(\n stackOffset:\n | ((\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void)\n | null\n ): this {\n if (stackOffset === null) {\n this._stackOffset = DEFAULT._stackOffset;\n return this;\n }\n this._stackOffset = stackOffset;\n return this;\n }\n\n /**\n * REQUIRED. Sets the x dimension for the stacked area chart when using Date data.\n */\n xDate(x: null): this;\n xDate(x: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) return this;\n this.xDimensionBuilder = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the x dimension for the stacked area chart when using numeric data.\n */\n xNumeric(x: null): this;\n xNumeric(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n // do not reset the xDimensionBuilder if null is passed. if xNumeric is not called, then xDate will be called\n // allow for\n // .xNumber((x) => condition ? x.stuff() : null)\n // .xDate((x) => !condition ? x.stuff() : null)\n if (x === null) return this;\n this.xDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the y dimension for the stacked area chart.\n */\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.yDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for the stacked area chart.\n */\n getConfig(): StackedAreaConfig<Datum, CategoricalDomain> {\n this.validateBuilder();\n return new StackedAreaConfig({\n marksClass: 'vic-stacked-area',\n color: this.colorDimensionBuilder._build('Color'),\n categoricalOrder: this._categoricalOrder,\n curve: this._curve,\n data: this._data,\n datumClass: this._datumClass,\n mixBlendMode: this._mixBlendMode,\n stackOrder: this._stackOrder,\n stackOffset: this._stackOffset,\n x: this.xDimensionBuilder._build('X'),\n y: this.yDimensionBuilder._build('Y'),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Stacked Area');\n if (!this.colorDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: Color dimension must be created. Please use method `color` to set the categorical dimension.'\n );\n }\n if (!this.xDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: X dimension must be created. Please use method `xNumeric` or `xDate` to set the x dimension.'\n );\n }\n if (!this.yDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: Y dimension must be created. Please use method `y` to set the y dimension.'\n );\n }\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { StackedAreaHost } from '../stacked-area-events.directive';\n\nexport class StackedAreaHoverMoveEmitTooltipData<\n Datum,\n TCategoricalValue extends DataValue,\n> implements HoverMoveAction<StackedAreaHost<Datum, TCategoricalValue>>\n{\n onStart(host: StackedAreaHost<Datum, TCategoricalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedAreaHost<Datum, TCategoricalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { area, select, Selection, Transition } from 'd3';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent, XyChartComponent, XyChartScales } from '../charts';\nimport { GenericScale } from '../core';\nimport { DataValue } from '../core/types/values';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport {\n StackedAreaConfig,\n StackedAreaDatum,\n} from './config/stacked-area-config';\nimport { StackedAreaInteractionAnchor } from './events/stacked-area-interaction-output';\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use unknown instead\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const STACKED_AREA = new InjectionToken<\n StackedAreaComponent<unknown, DataValue>\n>('StackedAreaComponent');\n\nexport interface StackedAreaTooltipDatum<\n Datum,\n TCategoricalValue extends DataValue,\n> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n color: TCategoricalValue;\n };\n}\n\ntype StackedAreaSvgElements = 'area';\n\nexport type StackedAreaSelection<CategoricalDomain> = Selection<\n SVGPathElement,\n StackedAreaDatum<CategoricalDomain>,\n SVGGElement,\n unknown\n>;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-stacked-area]',\n template: '',\n styleUrls: ['./stacked-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: StackedAreaComponent },\n { provide: STACKED_AREA, useExisting: StackedAreaComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n },\n})\nexport class StackedAreaComponent<\n Datum,\n TCategoricalValue extends DataValue,\n> extends VicXyPrimaryMarks<\n Datum,\n StackedAreaConfig<Datum, TCategoricalValue>\n> {\n area;\n areas;\n stackedAreas: BehaviorSubject<StackedAreaSelection<TCategoricalValue>> =\n new BehaviorSubject(null);\n stackedAreas$ = this.stackedAreas.asObservable().pipe(filter((s) => !!s));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n protected elRef = inject<ElementRef<SVGSVGElement>>(ElementRef);\n private zone = inject(NgZone);\n\n get class(): Record<StackedAreaSvgElements, string> {\n return {\n area: this.config.marksClass + '-area',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.color = this.config.color.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.setArea();\n this.drawAreas(transitionDuration);\n this.updateStackedAreaElements();\n }\n\n setArea(): void {\n this.area = area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x(({ i }: any) => this.scales.x(this.config.x.values[i]))\n .y0(([y1]) => this.scales.y(y1))\n .y1(([, y2]) => this.scales.y(y2))\n .curve(this.config.curve);\n }\n\n drawAreas(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.areas = select(this.elRef.nativeElement)\n .selectAll(`.${this.class.area}`)\n .data(this.config.series)\n .join(\n (enter) =>\n enter\n .append('path')\n .attr(\n 'class',\n ([{ i }]) =>\n `${this.class.area} ${this.config.datumClass(this.config.data[i], i)}`\n )\n // .property('key', ([{ i }]) => this.config.color.values[i])\n .attr('fill', ([{ i }]) =>\n this.scales.color(this.config.color.values[i])\n )\n .attr('d', this.area),\n (update) =>\n update.call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', this.area)\n .attr('fill', ([{ i }]) =>\n this.scales.color(this.config.color.values[i])\n )\n ),\n (exit) => exit.remove()\n );\n }\n\n getTooltipData(\n closestXIndicies: number[],\n categoryYMin: number,\n categoryYMax: number,\n categoryIndex: number\n ): {\n anchor: StackedAreaInteractionAnchor;\n data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[];\n hoveredAreaDatum: StackedAreaTooltipDatum<Datum, TCategoricalValue>;\n origin: SVGGraphicsElement;\n } {\n const data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[] =\n closestXIndicies.map((i) => {\n const datum = this.getDatumFromIndex(i);\n return {\n datum: datum,\n values: {\n x: this.getXyDimensionValue(datum, 'x'),\n y: this.getXyDimensionValue(datum, 'y'),\n color: this.config.color.valueAccessor(datum),\n },\n color: this.scales.color(this.config.color.valueAccessor(datum)),\n };\n });\n if (this.config.categoricalOrder) {\n this.sortTooltipDataByCategoricalSortOrder(data);\n categoryIndex = closestXIndicies.length - categoryIndex;\n }\n\n return {\n data,\n anchor: {\n x: this.scales.x(this.config.x.values[closestXIndicies[0]]),\n yAreaTop: categoryYMin,\n yAreaBottom: categoryYMax,\n yChartTop: this.scales.y.range()[0],\n yChartBottom: this.scales.y.range()[1],\n },\n hoveredAreaDatum: data[categoryIndex],\n origin: this.chart.svgRef.nativeElement,\n };\n }\n\n private getDatumFromIndex(i: number) {\n return this.config.data.find(\n (d) =>\n this.config.x.valueAccessor(d) === this.config.x.values[i] &&\n this.config.color.valueAccessor(d) === this.config.color.values[i]\n );\n }\n\n private getXyDimensionValue(datum: Datum, dimension: 'x' | 'y'): string {\n return this.config[dimension].formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config[dimension].formatFunction\n )\n : ValueUtilities.d3Format(\n this.config[dimension].valueAccessor(datum),\n this.config[dimension].formatSpecifier\n );\n }\n\n private sortTooltipDataByCategoricalSortOrder(\n data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[]\n ) {\n if (this.config.categoricalOrder) {\n data.sort((a, b) => {\n return (\n this.config.categoricalOrder.indexOf(a.values.color) -\n this.config.categoricalOrder.indexOf(b.values.color)\n );\n });\n }\n }\n\n updateStackedAreaElements(): void {\n this.stackedAreas.next(this.areas);\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class StackedAreaTooltipPositioner extends TooltipPositioner {\n constructor(\n private anchor: {\n x: number;\n yAreaTop: number;\n yAreaBottom: number;\n yChartTop: number;\n yChartBottom: number;\n }\n ) {\n super();\n }\n\n fromAnchor(\n relativeTo: 'area' | 'chart',\n offset: { x: number; y: number }\n ): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n relativeTo === 'area'\n ? this.anchor.yAreaTop - offset.y\n : this.anchor.yChartTop - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { InternSet, least } from 'd3';\nimport { Observable, map } from 'rxjs';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { isDate } from '../../core/utilities/type-guards';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventType,\n EventsDirective,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { STACKED_AREA, StackedAreaComponent } from '../stacked-area.component';\nimport { StackedAreaInteractionOutput } from './stacked-area-interaction-output';\nimport { StackedAreaTooltipPositioner } from './stacked-area-tooltip-positioner';\n\nexport type StackedAreaHost<\n Datum,\n TCategoricalValue extends DataValue,\n TStackedAreaComponent extends StackedAreaComponent<\n Datum,\n TCategoricalValue\n > = StackedAreaComponent<Datum, TCategoricalValue>,\n> = MarksHost<\n StackedAreaInteractionOutput<Datum, TCategoricalValue>,\n TStackedAreaComponent\n>;\n\n@Directive({\n selector: '[vicStackedAreaEvents]',\n})\nexport class StackedAreaEventsDirective<\n Datum,\n TCategoricalValue extends DataValue,\n TStackedAreaComponent extends StackedAreaComponent<\n Datum,\n TCategoricalValue\n > = StackedAreaComponent<Datum, TCategoricalValue>,\n >\n extends EventsDirective<StackedAreaHost<Datum, TCategoricalValue>>\n implements StackedAreaHost<Datum, TCategoricalValue>\n{\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[];\n @Output() interactionOutput = new EventEmitter<StackedAreaInteractionOutput<\n Datum,\n TCategoricalValue\n > | null>();\n\n closestXIndicies: number[];\n categoryYMin: number;\n categoryYMax: number;\n categoryIndex: number;\n\n constructor(@Inject(STACKED_AREA) public stackedArea: TStackedAreaComponent) {\n super();\n }\n\n get marks(): StackedAreaComponent<Datum, TCategoricalValue> {\n return this.stackedArea;\n }\n\n getElements(): Observable<Element[]> {\n return this.stackedArea.stackedAreas$.pipe(map((sel) => sel.nodes()));\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onEnter(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.setClosestXIndicies();\n this.setClosestDatumPosition();\n this.hoverMoveActions.forEach((action) =>\n action.onStart(this.asHost())\n );\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClick(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.setPositionsFromPointer(event);\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this.asHost(), inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this.asHost(), inputValue)\n );\n }\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n setPositionsFromElement(): void {\n return;\n }\n\n pointerIsInChartArea(): boolean {\n return (\n this.positionX > this.stackedArea.ranges.x[0] &&\n this.positionX < this.stackedArea.ranges.x[1] &&\n this.positionY > this.stackedArea.ranges.y[1] &&\n this.positionY < this.stackedArea.ranges.y[0]\n );\n }\n\n setClosestXIndicies(): void {\n const uniqueXValues = [\n ...new InternSet<ContinuousValue>(this.stackedArea.config.x.values),\n ];\n const closestXValue = least(uniqueXValues, (x) =>\n Math.abs(this.stackedArea.scales.x(x) - this.positionX)\n );\n if (isDate(closestXValue)) {\n this.closestXIndicies = this.stackedArea.config.valueIndices.filter(\n (i) =>\n (this.stackedArea.config.x.values[i] as Date).getTime() ===\n closestXValue.getTime()\n );\n } else {\n this.closestXIndicies = this.stackedArea.config.valueIndices.filter(\n (i) => this.stackedArea.config.x.values[i] === closestXValue\n );\n }\n }\n\n setClosestDatumPosition(): void {\n const dataAtXValue = this.stackedArea.config.series\n .flatMap((strat) => strat)\n .filter((d) => this.closestXIndicies.includes(d.i));\n const coordinateData = dataAtXValue.map((d) => ({\n categoryYMin: this.stackedArea.scales.y(d[1]),\n categoryYMax: this.stackedArea.scales.y(d[0]),\n i: d.i,\n }));\n const closestDatumIndex = coordinateData.findIndex(\n (d) =>\n this.positionY >= d.categoryYMin && this.positionY <= d.categoryYMax\n );\n let closestDatum;\n if (closestDatumIndex !== -1) {\n closestDatum = coordinateData[closestDatumIndex];\n }\n this.categoryYMin = closestDatum?.categoryYMin;\n this.categoryYMax = closestDatum?.categoryYMax;\n this.categoryIndex = closestDatum ? closestDatumIndex : undefined;\n }\n\n getInteractionOutput(\n type: EventType\n ): StackedAreaInteractionOutput<Datum, TCategoricalValue> {\n const tooltipData = this.stackedArea.getTooltipData(\n this.closestXIndicies,\n this.categoryYMin,\n this.categoryYMax,\n this.categoryIndex\n );\n const position = new StackedAreaTooltipPositioner(tooltipData.anchor);\n\n return {\n ...tooltipData,\n defaultPosition: position.fromAnchor('area', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n defaultPositionFromArea: position.fromAnchor('area', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n defaultPositionFromChart: position.fromAnchor('chart', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (\n relativeTo: 'area' | 'chart',\n offset?: Partial<{ x: number; y: number }>\n ) => {\n return position.fromAnchor(relativeTo, {\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(\n output: StackedAreaInteractionOutput<Datum, TCategoricalValue>\n ): void {\n this.interactionOutput.emit(output);\n }\n\n resetDirective(): void {\n this.closestXIndicies = [];\n this.categoryYMin = undefined;\n this.categoryYMax = undefined;\n this.categoryIndex = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { StackedAreaEventsDirective } from './events/stacked-area-events.directive';\nimport { StackedAreaComponent } from './stacked-area.component';\n\n@NgModule({\n imports: [StackedAreaComponent, StackedAreaEventsDirective],\n exports: [StackedAreaComponent, StackedAreaEventsDirective],\n})\nexport class VicStackedAreaModule {}\n","import { InternMap, Series, extent, range, rollup, stack } from 'd3';\nimport { BarsConfig } from '../../bars/config/bars-config';\nimport { BarsDimensions } from '../../bars/config/bars-dimensions';\nimport { DataValue } from '../../core/types/values';\nimport { StackDatum } from '../stacked-bars.component';\nimport { StackedBarsOptions } from './stacked-bars-options';\n\nexport class StackedBarsConfig<Datum, TOrdinalValue extends DataValue>\n extends BarsConfig<Datum, TOrdinalValue>\n implements StackedBarsOptions<Datum, TOrdinalValue>\n{\n stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stackOrder: (x: any) => any;\n stackedData: StackDatum[][];\n\n constructor(\n dimensions: BarsDimensions,\n options: StackedBarsOptions<Datum, TOrdinalValue>\n ) {\n super(dimensions, options);\n }\n\n override initPropertiesFromData(): void {\n // parent class will call this method during this class's super call\n // if statement ensures that code in this method is only called at the end of this class's constructor\n if (this.stackOffset !== undefined && this.stackOrder !== undefined) {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setHasNegativeValues();\n this.constructStackedData();\n this.initQuantitativeDomainFromStack();\n }\n }\n\n override setValueIndices(): void {\n this.valueIndices = range(this.ordinal.values.length).filter((i) => {\n return (\n this.ordinal.domainIncludes(this.ordinal.values[i]) &&\n this.color.domainIncludes(this.color.values[i])\n );\n });\n }\n\n constructStackedData(): void {\n const stackedData = stack<[unknown, InternMap<string, number>]>()\n .keys(this.color.calculatedDomain)\n .value((d, key) => {\n return this.quantitative.values[d[1].get(key)];\n })\n .order(this.stackOrder)\n .offset(this.stackOffset)(\n rollup(\n this.valueIndices,\n ([i]) => i,\n (i) => this.ordinal.values[i],\n (i) => this.color.values[i]\n )\n );\n\n this.stackedData = stackedData.map((series) =>\n series.map((d) => {\n Object.assign(d, {\n i: d.data[1].get(series.key),\n });\n return d as unknown as StackDatum;\n })\n );\n }\n\n initQuantitativeDomainFromStack(): void {\n const extents = extent(this.stackedData.flat(2));\n this.quantitative.setDomain(extents);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { Series, stackOffsetDiverging, stackOrderNone } from 'd3';\nimport { VicBarsConfigBuilder } from '../../bars/config/bars-builder';\nimport { DataValue } from '../../core/types/values';\nimport { StackedBarsConfig } from './stacked-bars-config';\n\nconst DEFAULT = {\n _stackOrder: stackOrderNone,\n _stackOffset: stackOffsetDiverging,\n};\n\n/**\n * Builds a configuration object for a StackedBarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicStackedBarsBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the stacked bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicStackedBarsConfigBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicBarsConfigBuilder<Datum, TOrdinalValue> {\n private _stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _stackOrder: (x: any) => any;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n stackOffset(stackOffset: null): this;\n stackOffset(\n stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void\n ): this;\n stackOffset(\n stackOffset:\n | ((\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void)\n | null\n ): this {\n if (stackOffset === null) {\n this._stackOffset = DEFAULT._stackOffset;\n return this;\n }\n this._stackOffset = stackOffset;\n return this;\n }\n\n stackOrder(stackOrder: null): this;\n stackOrder(\n stackOrder:\n | ((series: Series<Datum, TOrdinalValue>) => Iterable<number>)\n | null\n ): this;\n stackOrder(\n stackOrder:\n | ((\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>\n ) => Iterable<number>)\n | null\n ): this {\n if (stackOrder === null) {\n this._stackOrder = DEFAULT._stackOrder;\n return this;\n }\n this._stackOrder = stackOrder;\n return this;\n }\n\n override getConfig(): StackedBarsConfig<Datum, TOrdinalValue> {\n this.validateBuilder('Stacked Bars');\n return new StackedBarsConfig(this.dimensions, {\n marksClass: 'vic-stacked-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n labels: this.labelsBuilder?._build(),\n stackOffset: this._stackOffset,\n stackOrder: this._stackOrder,\n });\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsClickEmitTooltipDataPauseOtherActions<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>) {\n const outputData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\n\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsHoverEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsHoverMoveEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n HoverMoveAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BaseType, SeriesPoint, Transition, select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BarsComponent } from '../bars/bars.component';\nimport { ChartComponent, XyChartComponent } from '../charts';\nimport { DataValue } from '../core/types/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { StackedBarsConfig } from './config/stacked-bars-config';\n\nexport type StackDatum = SeriesPoint<{ [key: string]: number }> & {\n i: number;\n};\n\nexport type StackedBarGroupSelection = Selection<\n BaseType | SVGRectElement,\n StackDatum,\n SVGGElement | BaseType,\n StackDatum[]\n>;\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use \"unknown\"\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const STACKED_BARS = new InjectionToken<\n StackedBarsComponent<unknown, DataValue>\n>('StackedBarsComponent');\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-stacked-bars]',\n template: '',\n styleUrls: ['./stacked-bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: StackedBarsComponent },\n { provide: STACKED_BARS, useExisting: StackedBarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class StackedBarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BarsComponent<Datum, TOrdinalValue> {\n @Input() override config: StackedBarsConfig<Datum, TOrdinalValue>;\n stackedBarGroups: StackedBarGroupSelection;\n\n override drawBars(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.stackedBarGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, StackDatum[]>(\n `.${this.config.marksClass}-category-group`\n )\n .data<StackDatum[]>(this.config.stackedData)\n .join('g')\n .attr('class', `${this.config.marksClass}-category-group`.trim())\n .attr('fill', ([{ i }]: StackDatum[]) =>\n this.scales.color(this.config.color.values[i])\n )\n .selectAll(`.${this.class.g}`)\n .data((d) => d)\n .join((enter) =>\n enter\n .append('g')\n .attr('class', (d) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[d.i], d.i)}`.trim()\n )\n );\n\n this.stackedBarGroups\n .selectAll(`.${this.class.bar}`)\n .data((d) => [d])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', () => this.class.bar)\n .attr('x', (d) => this.getStackElementX(d))\n .attr('y', (d) => this.getStackElementY(d))\n .attr('width', (d) => this.getStackElementWidth(d))\n .attr('height', (d) => this.getStackElementHeight(d)),\n (update) =>\n update.call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('x', (d) => this.getStackElementX(d))\n .attr('y', (d) => this.getStackElementY(d))\n .attr('width', (d) => this.getStackElementWidth(d))\n .attr('height', (d) => this.getStackElementHeight(d))\n ),\n (exit) =>\n exit // fancy exit needs to be tested with actual/any data\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .delay((_, i) => i * 20)\n .attr('y', this.scales.y(0))\n .attr('height', 0)\n .remove()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n );\n }\n\n getStackElementX(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return this.scales.x(\n this.config[this.config.dimensions.x].values[datum.i]\n );\n } else {\n return Math.min(this.scales.x(datum[0]), this.scales.x(datum[1]));\n }\n }\n\n getStackElementY(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return Math.min(this.scales.y(datum[0]), this.scales.y(datum[1]));\n } else {\n return this.scales.y(\n this.config[this.config.dimensions.y].values[datum.i]\n );\n }\n }\n\n getStackElementWidth(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.x as any).bandwidth();\n } else {\n return Math.abs(this.scales.x(datum[0]) - this.scales.x(datum[1]));\n }\n }\n\n getStackElementHeight(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return Math.abs(this.scales.y(datum[0]) - this.scales.y(datum[1]));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.y as any).bandwidth();\n }\n }\n\n getSourceDatumFromStackedBarDatum(datum: StackDatum): Datum {\n return this.config.data[datum.i];\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { pointer, select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { BarsInteractionOutput } from '../../bars';\nimport { BarsTooltipPositioner } from '../../bars/events/bars-tooltip-positioner';\nimport { DataValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport {\n StackDatum,\n STACKED_BARS,\n StackedBarsComponent,\n} from '../stacked-bars.component';\n\nexport interface StackedBarsHost<\n Datum,\n TOrdinalValue extends DataValue,\n TStackedBarsComponent extends StackedBarsComponent<\n Datum,\n TOrdinalValue\n > = StackedBarsComponent<Datum, TOrdinalValue>,\n> extends MarksHost<BarsInteractionOutput<Datum>, TStackedBarsComponent> {\n getStackDatum(): StackDatum | null;\n}\n\n@Directive({\n selector: '[vicStackedBarsEvents]',\n})\nexport class StackedBarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TStackedBarsComponent extends StackedBarsComponent<\n Datum,\n TOrdinalValue\n > = StackedBarsComponent<Datum, TOrdinalValue>,\n> extends EventsDirective<StackedBarsHost<Datum, TOrdinalValue>> {\n @Input()\n hoverActions:\n | EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n stackDatum: StackDatum | null = null;\n origin: SVGRectElement;\n\n constructor(@Inject(STACKED_BARS) public stackedBars: TStackedBarsComponent) {\n super();\n }\n\n get marks(): TStackedBarsComponent {\n return this.stackedBars;\n }\n\n getElements(): Observable<Element[]> {\n return this.stackedBars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getStackDatum(): StackDatum | null {\n return this.stackDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.stackDatum = select(el as SVGRectElement).datum() as StackDatum;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n override setPositionsFromPointer(event: PointerEvent): void {\n const [positionX, positionY] = pointer(event);\n this.positionX =\n positionX - parseFloat(this.origin.getAttribute('x') || '0');\n this.positionY =\n positionY - parseFloat(this.origin.getAttribute('y') || '0');\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.stackedBars.getSourceDatumFromStackedBarDatum(\n this.stackDatum\n );\n const tooltipData = this.stackedBars.getTooltipData(datum);\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.stackDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { StackedBarsEventsDirective } from './events/stacked-bars-events.directive';\nimport { StackedBarsComponent } from './stacked-bars.component';\n\n@NgModule({\n imports: [StackedBarsComponent, StackedBarsEventsDirective],\n exports: [StackedBarsComponent, StackedBarsEventsDirective],\n})\nexport class VicStackedBarsModule {}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { XyChartComponent } from '../charts/xy-chart/xy-chart.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-xy-background]',\n templateUrl: './xy-background.component.html',\n styleUrls: ['./xy-background.component.scss'],\n host: {\n class: 'vic-xy-background',\n },\n imports: [AsyncPipe, CommonModule],\n})\nexport class XyBackgroundComponent {\n @Input() color = 'whitesmoke';\n\n constructor(public chart: XyChartComponent) {}\n}\n","@if(chart.scales$ | async; as scales) { @if(scales.x && scales.y) {\n<svg:rect\n class=\"vic-xy-background\"\n [attr.x]=\"scales.x.range()[0]\"\n [attr.y]=\"scales.y.range()[1]\"\n [attr.width]=\"scales.x.range()[1] - scales.x.range()[0]\"\n [attr.height]=\"scales.y.range()[0] - scales.y.range()[1]\"\n [attr.fill]=\"color\"\n></svg:rect>\n} }\n","import { NgModule } from '@angular/core';\nimport { XyBackgroundComponent } from './xy-background.component';\n\n@NgModule({\n imports: [XyBackgroundComponent],\n exports: [XyBackgroundComponent],\n})\nexport class VicXyBackgroundModule {}\n","/*\n * Public API Surface of charts\n */\nexport * from './lib/axes/index';\nexport * from './lib/bars/index';\nexport * from './lib/charts/index';\nexport * from './lib/core/index';\nexport * from './lib/data-dimensions/index';\nexport * from './lib/data-export/index';\nexport * from './lib/dots/index';\nexport * from './lib/events/index';\nexport * from './lib/fill-definitions/index';\nexport * from './lib/geographies/index';\nexport * from './lib/grouped-bars/index';\nexport * from './lib/image-download/index';\nexport * from './lib/lines/index';\nexport * from './lib/map-legend/index';\nexport * from './lib/marks/index';\nexport * from './lib/point-markers/index';\nexport * from './lib/quantitative-rules/index';\nexport * from './lib/stacked-area/index';\nexport * from './lib/stacked-bars/index';\nexport * from './lib/stroke/index';\nexport * from './lib/svg-text-wrap/index';\nexport * from './lib/tooltips/index';\nexport * from './lib/xy-background/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT","TICK_DEFAULT","TICKS_DEFAULT","color","d3Color","DEFAULT_POSITIONS","map","i1.XyChartComponent"],"mappings":"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"}
1
+ {"version":3,"file":"mathstack-viz.mjs","sources":["../../../libs/viz/src/lib/marks/marks.ts","../../../libs/viz/src/lib/marks/aux-marks/aux-marks.ts","../../../libs/viz/src/lib/marks/aux-marks/config/aux-marks-builder.ts","../../../libs/viz/src/lib/marks/config/marks-config.ts","../../../libs/viz/src/lib/marks/aux-marks/config/aux-marks-config.ts","../../../libs/viz/src/lib/charts/chart/chart.token.ts","../../../libs/viz/src/lib/charts/chart/config/chart-config.ts","../../../libs/viz/src/lib/charts/chart/config/chart-builder.ts","../../../libs/viz/src/lib/charts/chart/chart.component.ts","../../../libs/viz/src/lib/charts/chart/chart.component.html","../../../libs/viz/src/lib/charts/map-chart/map-chart.component.ts","../../../libs/viz/src/lib/charts/xy-chart/xy-chart.component.ts","../../../libs/viz/src/lib/charts/chart.module.ts","../../../libs/viz/src/lib/charts/chart/chart.ts","../../../libs/viz/src/lib/marks/map-marks/map-aux-marks/map-aux-marks.ts","../../../libs/viz/src/lib/marks/primary-marks/primary-marks.ts","../../../libs/viz/src/lib/marks/map-marks/map-primary-marks/map-primary-marks.ts","../../../libs/viz/src/lib/marks/primary-marks/config/primary-marks-builder.ts","../../../libs/viz/src/lib/marks/primary-marks/config/primary-marks-config.ts","../../../libs/viz/src/lib/marks/xy-marks/xy-aux-marks/xy-aux-marks.ts","../../../libs/viz/src/lib/marks/xy-marks/xy-marks-config.ts","../../../libs/viz/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks.ts","../../../libs/viz/src/lib/marks/xy-marks/xy-primary-marks/xy-primary-marks-config.ts","../../../libs/viz/src/lib/axes/baseline/axis-baseline.ts","../../../libs/viz/src/lib/axes/baseline/axis-baseline-builder.ts","../../../libs/viz/src/lib/stroke/base/stroke-base.ts","../../../libs/viz/src/lib/stroke/stroke.ts","../../../libs/viz/src/lib/stroke/stroke-builder.ts","../../../libs/viz/src/lib/axes/grid/grid-config.ts","../../../libs/viz/src/lib/axes/grid/grid-builder.ts","../../../libs/viz/src/lib/svg-text-wrap/svg-text-wrap.ts","../../../libs/viz/src/lib/svg-text-wrap/svg-text-wrap-builder.ts","../../../libs/viz/src/lib/axes/label/axis-label.ts","../../../libs/viz/src/lib/axes/label/axis-label-builder.ts","../../../libs/viz/src/lib/axes/base/config/xy-axis-builder.ts","../../../libs/viz/src/lib/axes/ticks/tick-wrap/tick-wrap.ts","../../../libs/viz/src/lib/axes/ticks/tick-wrap/tick-wrap-builder.ts","../../../libs/viz/src/lib/axes/ticks/ticks.ts","../../../libs/viz/src/lib/axes/ticks/ticks-builder.ts","../../../libs/viz/src/lib/axes/base/config/xy-axis-config.ts","../../../libs/viz/src/lib/axes/ordinal/ordinal-axis-config.ts","../../../libs/viz/src/lib/axes/x/x-axis-config.ts","../../../libs/viz/src/lib/axes/x-ordinal/x-ordinal-axis-config.ts","../../../libs/viz/src/lib/axes/x-ordinal/x-ordinal-axis-builder.ts","../../../libs/viz/src/lib/axes/base/xy-axis-base.ts","../../../libs/viz/src/lib/axes/ordinal/ordinal-axis.ts","../../../libs/viz/src/lib/axes/x/x-axis.ts","../../../libs/viz/src/lib/axes/x-ordinal/x-ordinal-axis.component.ts","../../../libs/viz/src/lib/axes/quantitative/quantitative-axis-config.ts","../../../libs/viz/src/lib/axes/x-quantitative/x-quantitative-axis-config.ts","../../../libs/viz/src/lib/axes/x-quantitative/x-quantitative-axis-builder.ts","../../../libs/viz/src/lib/axes/quantitative/quantitative-axis.ts","../../../libs/viz/src/lib/axes/x-quantitative/x-quantitative-axis.component.ts","../../../libs/viz/src/lib/axes/y/y-axis.ts","../../../libs/viz/src/lib/axes/y-ordinal/y-ordinal-axis.component.ts","../../../libs/viz/src/lib/axes/y-quantitative-axis/y-quantitative-axis.component.ts","../../../libs/viz/src/lib/axes/xy-axis.module.ts","../../../libs/viz/src/lib/axes/y/y-axis-config.ts","../../../libs/viz/src/lib/axes/y-ordinal/y-ordinal-axis-config.ts","../../../libs/viz/src/lib/axes/y-ordinal/y-ordinal-axis-builder.ts","../../../libs/viz/src/lib/axes/y-quantitative-axis/y-quantitative-axis-config.ts","../../../libs/viz/src/lib/axes/y-quantitative-axis/y-quantitative-axis-builder.ts","../../../libs/viz/src/lib/core/utilities/colors.ts","../../../libs/viz/src/lib/core/utilities/fill-utilities.ts","../../../libs/viz/src/lib/core/utilities/type-guards.ts","../../../libs/viz/src/lib/core/types/values.ts","../../../libs/viz/src/lib/core/utilities/values.ts","../../../libs/viz/src/lib/bars/bars.component.ts","../../../libs/viz/src/lib/events/events.directive.ts","../../../libs/viz/src/lib/events/events.types.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/position/tooltip-position.ts","../../../libs/viz/src/lib/events/tooltip-positioner.ts","../../../libs/viz/src/lib/tooltips/config/tooltip.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/html-tooltip-config.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/size/tooltip-size.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/size/tooltip-size-builder.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/html-tooltip-builder.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/config/position/tooltip-position-builder.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/html-tooltip.directive.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.ts","../../../libs/viz/src/lib/tooltips/html-tooltip/tooltip-triangle/tooltip-triangle.component.html","../../../libs/viz/src/lib/tooltips/html-tooltip/html-tooltip.module.ts","../../../libs/viz/src/lib/bars/events/bars-tooltip-positioner.ts","../../../libs/viz/src/lib/bars/events/bars-events.directive.ts","../../../libs/viz/src/lib/bars/bars.module.ts","../../../libs/viz/src/lib/data-dimensions/dimension-builder.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/domain-padding.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/percent-over/percent-over.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/pixel/pixel.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-interval/round-to-interval.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/domain-padding/round-to-sig-fig/round-to-sig-fig.ts","../../../libs/viz/src/lib/data-dimensions/dimension.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-dimension/number-dimension.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder.ts","../../../libs/viz/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position.ts","../../../libs/viz/src/lib/data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder.ts","../../../libs/viz/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value.ts","../../../libs/viz/src/lib/data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder.ts","../../../libs/viz/src/lib/bars/config/backgrounds/bars-backgrounds.ts","../../../libs/viz/src/lib/bars/config/backgrounds/bars-backgrounds-builder.ts","../../../libs/viz/src/lib/bars/config/bars-config.ts","../../../libs/viz/src/lib/bars/config/bars-dimensions.ts","../../../libs/viz/src/lib/bars/config/labels/bars-labels.ts","../../../libs/viz/src/lib/bars/config/labels/bars-labels-builder.ts","../../../libs/viz/src/lib/bars/config/bars-builder.ts","../../../libs/viz/src/lib/bars/events/actions/bars-click-actions.ts","../../../libs/viz/src/lib/bars/events/actions/bars-hover-actions.ts","../../../libs/viz/src/lib/bars/events/actions/bars-hover-move-actions.ts","../../../libs/viz/src/lib/core/types/layout.ts","../../../libs/viz/src/lib/core/utilities/value-format.ts","../../../libs/viz/src/lib/data-export/data-export.ts","../../../libs/viz/src/lib/data-export/data-export-config.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value.ts","../../../libs/viz/src/lib/data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-builder.ts","../../../libs/viz/src/lib/dots/config/dots-config.ts","../../../libs/viz/src/lib/dots/config/dots-builder.ts","../../../libs/viz/src/lib/dots/dots.component.ts","../../../libs/viz/src/lib/dots/events/dots-tooltip-positioner.ts","../../../libs/viz/src/lib/dots/events/dots-events.directive.ts","../../../libs/viz/src/lib/dots/dots.module.ts","../../../libs/viz/src/lib/dots/events/actions/dots-hover-actions.ts","../../../libs/viz/src/lib/dots/events/actions/dots-hover-move-actions.ts","../../../libs/viz/src/lib/geographies/config/geographies-config.ts","../../../libs/viz/src/lib/geographies/config/layers/labels/geographies-labels.ts","../../../libs/viz/src/lib/geographies/config/layers/labels/geographies-labels-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/geographies-layer/geographies-layer-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/geographies-layer/geographies-layer.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/attribute-data/attribute-data-dimension.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/categorical-bins/categorical-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/custom-breaks/custom-breaks-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-frequencies-bins/equal-frequencies-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/equal-value-ranges-bins/equal-value-ranges-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/attribute-data-layer/attribute-data-layer-builder.ts","../../../libs/viz/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer.ts","../../../libs/viz/src/lib/geographies/config/layers/geojson-properties-layer/geojson-properties-layer-builder.ts","../../../libs/viz/src/lib/geographies/config/geographies-builder.ts","../../../libs/viz/src/lib/geographies/events/actions/geographies-click-actions.ts","../../../libs/viz/src/lib/geographies/events/actions/geographies-hover-actions.ts","../../../libs/viz/src/lib/geographies/events/actions/geographies-hover-move-actions.ts","../../../libs/viz/src/lib/geographies/geographies.component.ts","../../../libs/viz/src/lib/geographies/geographies.component.html","../../../libs/viz/src/lib/geographies/events/geographies-tooltip-positioner.ts","../../../libs/viz/src/lib/geographies/events/geographies-events.directive.ts","../../../libs/viz/src/lib/geographies/geographies-feature.ts","../../../libs/viz/src/lib/geographies/geographies.module.ts","../../../libs/viz/src/lib/grouped-bars/config/grouped-bars-config.ts","../../../libs/viz/src/lib/grouped-bars/config/grouped-bars-builder.ts","../../../libs/viz/src/lib/grouped-bars/events/grouped-bars-events.directive.ts","../../../libs/viz/src/lib/grouped-bars/grouped-bars.component.ts","../../../libs/viz/src/lib/grouped-bars/grouped-bars.module.ts","../../../libs/viz/src/lib/image-download/image-download-enums.ts","../../../libs/viz/src/lib/image-download/image-download-config.ts","../../../libs/viz/src/lib/image-download/image-download.service.ts","../../../libs/viz/src/lib/point-markers/point-markers.ts","../../../libs/viz/src/lib/point-markers/point-markers-builder.ts","../../../libs/viz/src/lib/lines/config/stroke/lines-stroke.ts","../../../libs/viz/src/lib/lines/config/stroke/lines-stroke-builder.ts","../../../libs/viz/src/lib/lines/config/area-fills/area-fills-builder.ts","../../../libs/viz/src/lib/lines/config/lines-config.ts","../../../libs/viz/src/lib/lines/config/lines-builder.ts","../../../libs/viz/src/lib/lines/events/actions/lines-click-actions.ts","../../../libs/viz/src/lib/lines/events/actions/lines-hover-move-actions.ts","../../../libs/viz/src/lib/lines/events/actions/lines-marker-click-actions.ts","../../../libs/viz/src/lib/lines/lines.component.ts","../../../libs/viz/src/lib/lines/events/lines-tooltip-positioner.ts","../../../libs/viz/src/lib/lines/events/lines-events.directive.ts","../../../libs/viz/src/lib/lines/lines.module.ts","../../../libs/viz/src/lib/map-legend/map-legend-base.ts","../../../libs/viz/src/lib/map-legend/continuous-legend/continuous-legend.component.ts","../../../libs/viz/src/lib/map-legend/continuous-legend/continuous-legend.component.html","../../../libs/viz/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.ts","../../../libs/viz/src/lib/map-legend/discontinuous-legend/discontinuous-legend.component.html","../../../libs/viz/src/lib/map-legend/map-legend.component.ts","../../../libs/viz/src/lib/map-legend/map-legend.component.html","../../../libs/viz/src/lib/map-legend/map-legend.module.ts","../../../libs/viz/src/lib/quantitative-rules/config/labels/quantitative-rules-labels.ts","../../../libs/viz/src/lib/quantitative-rules/config/labels/quantitative-rules-labels-builder.ts","../../../libs/viz/src/lib/quantitative-rules/config/quantitative-rules-config.ts","../../../libs/viz/src/lib/quantitative-rules/config/quantitative-rules-dimensions.ts","../../../libs/viz/src/lib/quantitative-rules/config/quantitative-rules-builder.ts","../../../libs/viz/src/lib/quantitative-rules/quantitative-rules.component.ts","../../../libs/viz/src/lib/quantitative-rules/quantitative-rules.module.ts","../../../libs/viz/src/lib/stacked-area/config/stacked-area-config.ts","../../../libs/viz/src/lib/stacked-area/config/stacked-area-builder.ts","../../../libs/viz/src/lib/stacked-area/events/actions/stacked-area-hover-move-actions.ts","../../../libs/viz/src/lib/stacked-area/stacked-area.component.ts","../../../libs/viz/src/lib/stacked-area/events/stacked-area-tooltip-positioner.ts","../../../libs/viz/src/lib/stacked-area/events/stacked-area-events.directive.ts","../../../libs/viz/src/lib/stacked-area/stacked-area.module.ts","../../../libs/viz/src/lib/stacked-bars/config/stacked-bars-config.ts","../../../libs/viz/src/lib/stacked-bars/config/stacked-bars-builder.ts","../../../libs/viz/src/lib/stacked-bars/events/actions/stacked-bars-click-actions.ts","../../../libs/viz/src/lib/stacked-bars/events/actions/stacked-bars-hover-actions.ts","../../../libs/viz/src/lib/stacked-bars/events/actions/stacked-bars-hover-move-actions.ts","../../../libs/viz/src/lib/stacked-bars/stacked-bars.component.ts","../../../libs/viz/src/lib/stacked-bars/events/stacked-bars-events.directive.ts","../../../libs/viz/src/lib/stacked-bars/stacked-bars.module.ts","../../../libs/viz/src/lib/xy-background/xy-background.component.ts","../../../libs/viz/src/lib/xy-background/xy-background.component.html","../../../libs/viz/src/lib/xy-background/xy-background.module.ts","../../../libs/viz/src/public-api.ts","../../../libs/viz/src/mathstack-viz.ts"],"sourcesContent":["import { Directive, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { Chart } from '../charts';\n\nexport interface IMarks {\n chart: Chart;\n /**\n * drawMarks method\n *\n * All methods that require scales should be called from drawMarks. Methods\n * called from here should use scale.domain() or scale.range() to obtain those values\n * rather than this.config.dimension.domain or this.ranges.dimension.\n *\n * This method is called when scales emit from ChartComponent.\n */\n drawMarks: () => void;\n /**\n * getTransitionDuration method\n *\n * This method should return the duration of the transition to be used in the marks.\n */\n getTransitionDuration: () => number;\n}\n\n@Directive()\nexport abstract class Marks implements IMarks, OnChanges {\n chart: Chart;\n abstract drawMarks(): void;\n abstract getTransitionDuration(): number;\n abstract initFromConfig(): void;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NgOnChangesUtilities.inputObjectChangedNotFirstTime(changes, 'config')\n ) {\n this.initFromConfig();\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { DataMarksConfig, MarksConfig } from '../config/marks-config';\nimport { Marks } from '../marks';\n\n@Directive()\nexport abstract class AuxMarks<\n Datum,\n TMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends Marks\n implements Marks, OnChanges\n{\n @Input() config: TMarksConfig;\n\n initFromConfig(): void {\n this.drawMarks();\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nconst DEFAULT = {\n _class: () => '',\n _mixBlendMode: 'normal',\n};\n\nexport abstract class VicAuxMarksBuilder<Datum> {\n protected _mixBlendMode: string;\n protected _class: (d: Datum) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n}\n","import { DataMarksOptions, MarksOptions } from './marks-options';\n\nexport abstract class MarksConfig implements MarksOptions {\n readonly marksClass: string;\n readonly mixBlendMode: string;\n}\n\nexport abstract class DataMarksConfig<Datum>\n extends MarksConfig\n implements DataMarksOptions<Datum>\n{\n readonly data: Datum[];\n readonly datumClass: (d: Datum, i: number) => string;\n}\n","import { MarksConfig } from '../../config/marks-config';\nimport { MarksOptions } from '../../config/marks-options';\n\nexport abstract class AuxMarksConfig\n extends MarksConfig\n implements MarksOptions {}\n","import { InjectionToken } from '@angular/core';\nimport { Chart } from './chart';\n\nexport const CHART = new InjectionToken<Chart>('Chart');\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ElementSpacing } from '../../../core/types/layout';\nimport { ScalingStrategy } from './chart-builder';\nimport { ChartOptions } from './chart-options';\n\nexport class ChartConfig implements ChartOptions {\n aspectRatio?: number;\n height: number | null;\n isFixedHeight: boolean;\n margin: ElementSpacing;\n minWidth: number | null;\n scalingStrategy: ScalingStrategy;\n transitionDuration: number;\n width: number | null;\n viewBoxX: number;\n viewBoxY: number;\n\n constructor(config: ChartConfig) {\n safeAssign(this, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ElementSpacing } from '../../../core/types/layout';\nimport { ChartConfig } from './chart-config';\n\nexport type ScalingStrategy = 'fixed' | 'responsive-width' | 'viewbox';\n\nexport const CHART_SIZE = {\n scaledWidth: 800,\n viewBoxWidth: 800,\n minWidth: 320,\n aspectRatio: 16 / 9,\n};\n\nconst DEFAULT = {\n _fixedHeight: false,\n _margin: { top: 36, right: 36, bottom: 36, left: 36 },\n _scalingStrategy: 'responsive-width' as ScalingStrategy,\n _transitionDuration: 250,\n};\n\n/**\n * Builds a configuration object for a ChartComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicChartConfigBuilder]` in the component decorator)\n *\n */\n@Injectable()\nexport class VicChartConfigBuilder {\n private _aspectRatio?: number;\n private _fixedHeight: boolean;\n private _height: number;\n private _margin: ElementSpacing;\n private _minWidth: number;\n private _scalingStrategy: ScalingStrategy;\n private _transitionDuration: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Explicitly sets the aspect ratio to use when scalingStrategy is 'responsive-width' and fixedHeight is false, or when scalingStrategy is 'viewbox'.\n *\n * @param value - The aspect ratio (width / height) to use. If not called or called with null, a default value of 16/9 will be used. If maxWidth and maxHeight are set, aspect ratio will be derived from those values.\n */\n aspectRatio(value: number): this {\n this._aspectRatio = value;\n return this;\n }\n\n /**\n * OPTIONAL. If set to true and used with 'responsive-width' scaling strategy, height will be fixed and not derived from aspect ratio.\n *\n * Has no effect if scaling strategy is 'fixed' or 'viewbox'.\n */\n fixedHeight(value: boolean): this {\n this._fixedHeight = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the margin that will be established between the edges of the svg and the svg's contents, in px.\n *\n * @param value - The margin that will be established between the edges of the svg and the svg's contents, in px. If called with null, a default value of `{ top: 36, right: 36, bottom: 36, left: 36 }` will be used.\n */\n margin(\n value: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n } | null\n ): this {\n if (value === null) {\n value = DEFAULT._margin;\n return this;\n }\n this._margin = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is 'responsive-width' or 'viewbox', determines the maximum height of the chart. This will override any provided aspect ratio.\n *\n * If scaling strategy is 'fixed', sets the fixed height of the chart.\n *\n * @param value - The maximum height of the chart, in px. If chart size is static, the fixed height of the chart. If not called or called with `null`, chart height will be set via aspect ratio.\n */\n maxHeight(value: number | null): this {\n this._height = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is responsive-width or viewbox, sets the maximum width of the chart. In this case, this value is also used to determine the aspect ratio of the chart which will be maintained on resizing.\n *\n * If scaling strategy is fixed, sets the fixed width of the chart.\n *\n * @param value - The maximum width of the chart, in px. If chart size is static, the fixed width of the chart.\n *\n * If not called or called with `null`, a default value of 800 will be used.\n */\n maxWidth(value: number | null): this {\n this._width = value;\n return this;\n }\n\n /**\n * OPTIONAL. If scaling strategy is responsive-width or viewbox, sets the minimum width of the chart. Has no effect if scaling strategy is fixed.\n *\n * @param value - The minimum width of the chart, in px. If not called or called with `null`, a default value of 320 will be used.\n */\n minWidth(value: number | null): this {\n this._minWidth = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines how the chart scales in response to container or window size changes.\n *\n * Default value, if not called, is 'responsive-width'.\n *\n * @param value - One of:\n * - 'fixed': Chart dimensions remain constant. Width and height are fixed. Dimensions can be set with maxWidth and maxHeight.\n * - 'responsive-width': Chart width responds to container; height is derived via aspect ratio, unless fixedHeight is true.\n * - 'viewbox': Chart is scaled entirely via SVG viewBox. All resizing behavior is controlled through CSS.\n */\n scalingStrategy(value: ScalingStrategy): this {\n this._scalingStrategy = value;\n return this;\n }\n\n /**\n * OPTIONAL. A time duration for all transitions in the chart, in ms.\n *\n * @@param value - The time duration for all transitions in the chart, in ms. If not called or called with null, a default value of 250 will be used.\n */\n transitionDuration(value: number | null): this {\n if (value === null) {\n value = DEFAULT._transitionDuration;\n return this;\n }\n this._transitionDuration = value;\n return this;\n }\n\n getConfig(): ChartConfig {\n this.validateBuilder();\n\n return new ChartConfig({\n aspectRatio: this._aspectRatio,\n height: this._height,\n isFixedHeight: this._fixedHeight,\n margin: this._margin,\n minWidth: this._minWidth,\n scalingStrategy: this._scalingStrategy,\n transitionDuration: this._transitionDuration,\n width: this._width,\n viewBoxX: CHART_SIZE.viewBoxWidth,\n viewBoxY:\n CHART_SIZE.viewBoxWidth / (this._aspectRatio ?? CHART_SIZE.aspectRatio),\n });\n }\n\n private validateBuilder(): void {\n if (this._width === undefined || this._width === null) {\n this._width =\n this._scalingStrategy === 'viewbox' ? null : CHART_SIZE.scaledWidth;\n }\n if (this._height === undefined || this._height === null) {\n this._height =\n this._scalingStrategy === 'viewbox'\n ? null\n : this._width / (this._aspectRatio ?? CHART_SIZE.aspectRatio);\n }\n if (this._minWidth === undefined || this._minWidth === null) {\n this._minWidth =\n this._scalingStrategy === 'viewbox' ? null : CHART_SIZE.minWidth;\n }\n if (this._scalingStrategy !== 'viewbox' && this._minWidth > this._width) {\n const [oldMin, oldWidth] = [this._minWidth, this._width];\n this._minWidth = oldWidth;\n this._width = oldMin;\n console.warn(\n `[vic-chart] The configured minWidth (${oldMin}px) cannot be larger than the configured width (${oldWidth}px). The values have been swapped.`\n );\n }\n if (this._scalingStrategy === 'responsive-width' && !this._fixedHeight) {\n this._aspectRatio = this._width / this._height;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n Input,\n NgZone,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { isEqual } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n filter,\n map,\n of,\n shareReplay,\n switchMap,\n} from 'rxjs';\nimport { Dimensions, ElementSpacing } from '../../core/types/layout';\nimport { Chart } from './chart';\nimport { CHART } from './chart.token';\nimport { ScalingStrategy, VicChartConfigBuilder } from './config/chart-builder';\nimport { ChartConfig } from './config/chart-config';\n\nexport interface Ranges {\n x: [number, number];\n y: [number, number];\n}\n\nexport interface ChartResizing {\n width: boolean;\n height: boolean;\n useViewbox: boolean;\n}\n\nexport interface ReactiveConfig {\n margin: ElementSpacing;\n height: number;\n width: number;\n scalingStrategy: ScalingStrategy;\n}\n\n/**\n * A base component that can be extended to create specific types of `Chart` components,\n * each of which can serve as a wrapper component for one `PrimaryMarks` component and any\n * other content that is projected into its content projection slots.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-chart',\n },\n imports: [CommonModule],\n})\nexport class ChartComponent implements Chart, OnInit, OnChanges {\n @Input() config: ChartConfig = new VicChartConfigBuilder().getConfig();\n @ViewChild('div', { static: true }) divRef: ElementRef<HTMLDivElement>;\n @ViewChild('svg', { static: true }) svgRef: ElementRef<SVGSVGElement>;\n\n private _config: BehaviorSubject<ChartConfig> = new BehaviorSubject(null);\n config$: Observable<ChartConfig> = this._config.asObservable().pipe(\n filter((c) => !!c),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n protected readonly strategy$ = this.config$.pipe(\n map((c) => c.scalingStrategy),\n distinctUntilChanged()\n );\n\n protected readonly widthCfg$ = this.config$.pipe(\n map((c) => c.width),\n distinctUntilChanged()\n );\n\n protected readonly minWidthCfg$ = this.config$.pipe(\n map((c) => c.minWidth),\n distinctUntilChanged()\n );\n\n protected readonly heightCfg$ = this.config$.pipe(\n map((c) => c.height),\n distinctUntilChanged()\n );\n\n private readonly aspectRatioCfg$ = this.config$.pipe(\n map(\n (c) =>\n c.aspectRatio ??\n (typeof c.width === 'number' &&\n typeof c.height === 'number' &&\n c.height !== 0\n ? c.width / c.height\n : undefined)\n ),\n distinctUntilChanged()\n );\n\n private readonly isFixedHeight$ = this.config$.pipe(\n map((c) => c.isFixedHeight),\n distinctUntilChanged()\n );\n\n protected readonly marginCfg$ = this.config$.pipe(\n map((c) => c.margin),\n distinctUntilChanged((a, b) => isEqual(a, b))\n );\n\n private readonly width$ = this.strategy$.pipe(\n switchMap((strategy) =>\n strategy === 'responsive-width'\n ? defer(() => this.observeElementWidth(this.divRef.nativeElement))\n : strategy === 'viewbox'\n ? of(this.config.viewBoxX)\n : this.widthCfg$\n )\n );\n\n private readonly height$ = combineLatest([\n this.strategy$,\n this.width$,\n this.heightCfg$,\n this.aspectRatioCfg$,\n this.isFixedHeight$,\n ]).pipe(\n map(([strategy, w, hCfg, ar, isFixedHeight]) =>\n strategy === 'responsive-width' && !isFixedHeight\n ? w / ar\n : strategy === 'viewbox'\n ? this.config.viewBoxY\n : hCfg\n ),\n distinctUntilChanged()\n );\n\n protected readonly svgDimensions$ = combineLatest([\n this.width$,\n this.height$,\n ]).pipe(\n filter(([w, h]) => w > 0 && h > 0),\n map(([width, height]) => ({ width, height })),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n readonly ranges$ = combineLatest([this.svgDimensions$, this.marginCfg$]).pipe(\n map(([dimensions, margin]) =>\n this.getRangesFromSvgDimensions(dimensions, margin)\n ),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n\n protected destroyRef = inject(DestroyRef);\n\n constructor(private ngZone: NgZone) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (NgOnChangesUtilities.inputObjectChanged(changes, 'config')) {\n this._config.next(this.config);\n }\n }\n\n ngOnInit(): void {\n // ensure that values are pulled through\n this.ranges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private observeElementWidth(element: HTMLElement): Observable<number> {\n return new Observable<number>((subscriber) => {\n let ro: ResizeObserver;\n this.ngZone.runOutsideAngular(() => {\n ro = new ResizeObserver((entries) => {\n const e = entries[0];\n const w =\n (Array.isArray(e.borderBoxSize)\n ? e.borderBoxSize[0]?.inlineSize\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (e as any).borderBoxSize?.inlineSize) ?? e.contentRect.width;\n this.ngZone.run(() => subscriber.next(w));\n });\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ro.observe(element, { box: 'border-box' as any });\n return () => {\n ro.unobserve(element);\n ro.disconnect();\n };\n }).pipe(\n map((w) => Math.round(w)),\n auditTime(0),\n distinctUntilChanged()\n );\n }\n\n private getRangesFromSvgDimensions(\n dim: Dimensions,\n margin: ElementSpacing\n ): Ranges {\n return {\n x: [margin.left, dim.width - margin.right],\n y: [dim.height - margin.bottom, margin.top],\n };\n }\n\n getViewBoxScale(): { x: number; y: number } {\n if (!this.svgRef?.nativeElement?.viewBox?.baseVal) {\n return { x: 1, y: 1 };\n }\n const rect = this.svgRef.nativeElement.getBoundingClientRect();\n const vb = this.svgRef.nativeElement.viewBox.baseVal;\n return {\n x: vb.width / rect.width,\n y: vb.height / rect.height,\n };\n }\n}\n","<!-- Slot exists so that projected content can have access to scales -->\n<ng-container *ngTemplateOutlet=\"htmlElementsBefore\"></ng-container>\n<div\n #div\n class=\"vic-chart-container\"\n [ngClass]=\"(strategy$ | async)\"\n [style.maxWidth.px]=\"widthCfg$ | async\"\n [style.minWidth.px]=\"minWidthCfg$ | async\"\n [style.maxHeight.px]=\"heightCfg$ | async\"\n [style.aspectRatio]=\"(strategy$ | async) === 'viewbox' ? (config.viewBoxX / config.viewBoxY) : null\"\n [style.width.%]=\"(strategy$ | async) === 'viewbox' ? 100 : null\"\n>\n <svg\n #svg\n class=\"vic-chart-svg\"\n [ngClass]=\"(strategy$ | async)\"\n [style.width.px]=\"(strategy$ | async) !== 'viewbox' ? (svgDimensions$ | async)?.width : null\"\n [style.height.px]=\"(strategy$ | async) !== 'viewbox' ? (svgDimensions$ | async)?.height : null\"\n [attr.viewBox]=\"(strategy$ | async) === 'viewbox' ? '0 0 ' + config.viewBoxX + ' ' + config.viewBoxY : null\"\n >\n <defs>\n <ng-container *ngTemplateOutlet=\"svgDefs\"></ng-container>\n </defs>\n <ng-container *ngTemplateOutlet=\"svgElements\"></ng-container>\n </svg>\n</div>\n\n<!-- Slot exists so that projected content can have access to scales -->\n<ng-container *ngTemplateOutlet=\"htmlElementsAfter\"></ng-container>\n\n<ng-template #htmlElementsBefore>\n <ng-content select=\"[html-elements-before]\"></ng-content>\n</ng-template>\n\n<ng-template #svgDefs>\n <ng-content select=\"[svg-defs]\"></ng-content>\n</ng-template>\n\n<ng-template #svgElements>\n <ng-content select=\"[svg-elements]\"></ng-content>\n</ng-template>\n\n<ng-template #htmlElementsAfter>\n <ng-content select=\"[html-elements-after]\"></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, NgZone } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { VicAttributeDataDimensionConfig } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { Chart } from '../chart/chart';\nimport { ChartComponent } from '../chart/chart.component';\nimport { CHART } from '../chart/chart.token';\n\n/**\n * A `Chart` component to be used with a `Geographies` `PrimaryMarks` component.\n *\n * This component adds an attribute data scale and config to the base `ChartComponent` that can\n * be used by any components projected into the chart.\n *\n * Components that may use these scales include the `Geographies` component\n * and the `MapLegend` component.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-map-chart',\n templateUrl: '../chart/chart.component.html',\n styleUrls: ['../chart/chart.component.scss'],\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-map-chart',\n },\n imports: [CommonModule],\n})\nexport class MapChartComponent<Datum> extends ChartComponent implements Chart {\n private attributeProperties: BehaviorSubject<{\n config: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n }> = new BehaviorSubject({ config: undefined, scale: undefined });\n attributeProperties$ = this.attributeProperties.asObservable();\n protected zone = inject(NgZone);\n\n updateAttributeProperties(properties: {\n config: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n }): void {\n this.zone.run(() => {\n this.attributeProperties.next({\n config: properties.config,\n scale: properties.scale,\n });\n });\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n NgZone,\n OnInit,\n} from '@angular/core';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { GenericScale } from '../../core';\nimport { Chart } from '../chart/chart';\nimport { ChartComponent } from '../chart/chart.component';\nimport { CHART } from '../chart/chart.token';\n\nexport enum XyContentScale {\n x = 'x',\n y = 'y',\n}\n\nexport interface XyChartScales {\n [XyContentScale.x]: GenericScale<any, any>;\n [XyContentScale.y]: GenericScale<any, any>;\n useTransition: boolean;\n}\n/**\n * A `Chart` component to be used with `PrimaryMarks` components that have X and Y axes, such as `Bars` and `Lines`.\n *\n * This component adds x, y, and categorical scales to the base `ChartComponent` that can\n * be used by any components projected into the chart.\n *\n * <p class=\"comment-slots\">Content projection slots</p>\n *\n * `html-elements-before`: Elements that will be projected before the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n *\n * `svg-defs`: Used to create any required defs for the chart's svg element. For example, patterns or gradients.\n *\n * `svg-elements`: Used for all elements that should be children of the chart's scaled svg element.\n *\n * `html-elements-after`: Elements that will be projected after the chart's scaled div\n * and scaled svg element in the DOM. USeful for adding elements that require access to chart scales.\n */\n@Component({\n selector: 'vic-xy-chart',\n templateUrl: '../chart/chart.component.html',\n styleUrls: ['../chart/chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: CHART, useExisting: ChartComponent }],\n host: {\n class: 'vic-xy-chart',\n },\n imports: [CommonModule],\n})\nexport class XyChartComponent extends ChartComponent implements Chart, OnInit {\n private scales: BehaviorSubject<XyChartScales> = new BehaviorSubject(null);\n scales$ = this.scales.asObservable().pipe(filter((scales) => !!scales));\n protected zone = inject(NgZone);\n\n updateScales(scales: Partial<XyChartScales>): void {\n this.zone.run(() => {\n this.scales.next({ ...this.scales.value, ...scales });\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ChartComponent } from './chart/chart.component';\nimport { MapChartComponent } from './map-chart/map-chart.component';\nimport { XyChartComponent } from './xy-chart/xy-chart.component';\n\n@NgModule({\n imports: [ChartComponent, XyChartComponent, MapChartComponent],\n exports: [ChartComponent, XyChartComponent, MapChartComponent],\n})\nexport class VicChartModule {}\n","import { ElementRef } from '@angular/core';\n\nexport class Chart {\n svgRef: ElementRef<SVGSVGElement>;\n}\n","import { DestroyRef, Directive, inject, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { MapChartComponent } from '../../../charts';\nimport { VicAttributeDataDimensionConfig } from '../../../geographies';\nimport { AuxMarks } from '../../aux-marks/aux-marks';\nimport { MarksConfig } from '../../config/marks-config';\n\n@Directive()\nexport abstract class VicMapAuxMarks<Datum, TMarksConfig extends MarksConfig>\n extends AuxMarks<Datum, TMarksConfig>\n implements OnInit\n{\n attributeDataConfig: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeDataScale: any;\n public override chart = inject(MapChartComponent);\n destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.subscribeToAttributeDataProperties();\n }\n\n subscribeToAttributeDataProperties(): void {\n this.chart.attributeProperties$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((properties) => !!properties.scale && !!properties.config)\n )\n .subscribe((properties) => {\n this.attributeDataConfig = properties.config;\n this.attributeDataScale = properties.scale;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.chart.config.transitionDuration;\n }\n}\n","import {\n DestroyRef,\n Directive,\n InjectionToken,\n Input,\n OnChanges,\n inject,\n} from '@angular/core';\nimport { Ranges } from '../../charts';\nimport { DataMarksConfig, MarksConfig } from '../config/marks-config';\nimport { Marks } from '../marks';\n\nexport const VIC_PRIMARY_MARKS = new InjectionToken<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n PrimaryMarks<unknown, any>\n>('PrimaryMarks');\n\n@Directive()\nexport abstract class PrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends Marks\n implements Marks, OnChanges\n{\n @Input() config: TPrimaryMarksConfig;\n ranges: Ranges;\n destroyRef = inject(DestroyRef);\n\n /**\n * This method sets creates and sets scales on ChartComponent. Any methods that require ranges\n * to create the scales should be called from this method. Methods called from here should not\n * require scales.\n *\n * This method is called on init, after config-based properties are set, and also on\n * resize/when ranges change.\n */\n abstract setChartScalesFromRanges(useTransition: boolean): void;\n\n initFromConfig(): void {\n this.setChartScalesFromRanges(true);\n }\n}\n","import { Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { MapChartComponent } from '../../../charts/map-chart/map-chart.component';\nimport { VicAttributeDataDimensionConfig } from '../../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { MarksConfig } from '../../config/marks-config';\nimport { PrimaryMarks } from '../../primary-marks/primary-marks';\n\n/**\n * @internal\n */\n@Directive()\nexport abstract class MapPrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends MarksConfig,\n >\n extends PrimaryMarks<Datum, TPrimaryMarksConfig>\n implements OnInit\n{\n attributeDataConfig: VicAttributeDataDimensionConfig<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeDataScale: any;\n public override chart = inject(MapChartComponent);\n\n ngOnInit(): void {\n this.subscribeToRanges();\n this.subscribeToAttributeDataProperties();\n }\n\n subscribeToRanges(): void {\n this.chart.ranges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((ranges) => !!ranges)\n )\n .subscribe((ranges) => {\n this.ranges = ranges;\n if (this.attributeDataScale && this.attributeDataConfig) {\n this.setChartScalesFromRanges(false);\n this.drawMarks();\n } else {\n this.initFromConfig();\n }\n });\n }\n\n subscribeToAttributeDataProperties(): void {\n this.chart.attributeProperties$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((properties) => !!properties.scale && !!properties.config)\n )\n .subscribe((properties) => {\n this.attributeDataConfig = properties.config;\n this.attributeDataScale = properties.scale;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.chart.config.transitionDuration;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nconst DEFAULT = {\n _datumClass: () => '',\n _mixBlendMode: 'normal',\n};\n\nexport abstract class PrimaryMarksBuilder<Datum> {\n protected _datumClass: (d: Datum) => string;\n protected _data: Datum[];\n protected _mixBlendMode: string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that corresponds to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n datumClass(value: null): this;\n datumClass(value: string): this;\n datumClass(value: (d: Datum) => string): this;\n datumClass(value: ((d: Datum) => string) | string | null): this {\n if (value === null) {\n this._datumClass = DEFAULT._datumClass;\n return this;\n }\n if (typeof value === 'string') {\n this._datumClass = () => value;\n return this;\n }\n this._datumClass = value;\n return this;\n }\n\n /**\n * REQUIRED. Sets the data that will be used to render the marks for this component\n *\n * If no dimension domain overrides are provided, **this primary-marks data will also create the domain of the scales used on the entire chart**.\n *\n * The objects in the array can be of an type, and if an array of objects, the objects can contain any number of properties, including properties that are extraneous to the chart at hand.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: null): this;\n mixBlendMode(mixBlendMode: string): this;\n mixBlendMode(mixBlendMode: string | null): this {\n if (mixBlendMode === null) {\n this._mixBlendMode = DEFAULT._mixBlendMode;\n return this;\n }\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n protected validateBuilder(componentName: string): void {\n if (!this._data) {\n throw new Error(\n `${componentName} Builder: data is required. Use the 'data' method to set the data.`\n );\n }\n }\n}\n","import { DataMarksConfig } from '../../config/marks-config';\nimport { DataMarksOptions } from '../../config/marks-options';\n\nexport abstract class PrimaryMarksConfig<Datum>\n extends DataMarksConfig<Datum>\n implements DataMarksOptions<Datum>\n{\n protected abstract initPropertiesFromData(): void;\n}\n","import { DestroyRef, Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport { XyChartComponent, XyChartScales } from '../../../charts';\nimport { AuxMarks } from '../../aux-marks/aux-marks';\nimport { DataMarksConfig, MarksConfig } from '../../config/marks-config';\nimport { XyMarks } from '../xy-marks';\n\n@Directive()\nexport abstract class XyAuxMarks<\n Datum,\n TMarksConfig extends MarksConfig | DataMarksConfig<Datum>,\n >\n extends AuxMarks<Datum, TMarksConfig>\n implements OnInit, XyMarks\n{\n scales: XyChartScales;\n public override chart = inject(XyChartComponent);\n public destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.subscribeToScales();\n }\n\n subscribeToScales(): void {\n this.chart.scales$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((scales) => !!scales.x && !!scales.y)\n )\n .subscribe((scales): void => {\n this.scales = scales;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.scales.useTransition ? this.chart.config.transitionDuration : 0;\n }\n}\n","import { DataMarksConfig } from '../config/marks-config';\n\nexport abstract class XyMarksConfig<Datum> extends DataMarksConfig<Datum> {\n valueIndices: number[];\n}\n","import { Directive, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs';\nimport {\n XyChartComponent,\n XyChartScales,\n XyContentScale,\n} from '../../../charts/xy-chart/xy-chart.component';\nimport { DataMarksOptions } from '../../config/marks-options';\nimport { PrimaryMarks } from '../../primary-marks/primary-marks';\nimport { XyMarks } from '../xy-marks';\n\n/**\n * @internal\n */\n@Directive()\nexport abstract class VicXyPrimaryMarks<\n Datum,\n TPrimaryMarksConfig extends DataMarksOptions<Datum>,\n >\n extends PrimaryMarks<Datum, TPrimaryMarksConfig>\n implements OnInit, XyMarks\n{\n scales: XyChartScales;\n requiredScales: (keyof typeof XyContentScale)[] = [\n XyContentScale.x,\n XyContentScale.y,\n ];\n public override chart = inject(XyChartComponent);\n\n ngOnInit(): void {\n this.subscribeToRanges();\n this.subscribeToScales();\n }\n\n subscribeToRanges(): void {\n this.chart.ranges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((ranges) => !!ranges)\n )\n .subscribe((ranges) => {\n this.ranges = ranges;\n if (\n this.scales &&\n this.requiredScales.every((scale) => this.scales[scale])\n ) {\n this.setChartScalesFromRanges(false);\n } else {\n this.initFromConfig();\n }\n });\n }\n\n subscribeToScales(): void {\n this.chart.scales$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((scales) => !!scales)\n )\n .subscribe((scales): void => {\n this.scales.x = scales.x;\n this.scales.y = scales.y;\n this.scales.useTransition = scales.useTransition;\n this.drawMarks();\n });\n }\n\n getTransitionDuration(): number {\n return this.scales.useTransition ? this.chart.config.transitionDuration : 0;\n }\n}\n","import { PrimaryMarksConfig } from '../../primary-marks/config/primary-marks-config';\n\nexport abstract class XyPrimaryMarksConfig<\n Datum,\n> extends PrimaryMarksConfig<Datum> {\n valueIndices: number[];\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisBaselineOptions } from './axis-baseline-options';\n\nexport class AxisBaseline implements AxisBaselineOptions {\n readonly display: boolean;\n readonly zeroBaseline: { display: boolean; dasharray: string };\n\n constructor(options: AxisBaselineOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisBaseline } from './axis-baseline';\n\nconst DEFAULT = {\n _zeroBaseline: {\n display: true,\n dasharray: '2, 2',\n },\n};\n\nexport class AxisBaselineBuilder {\n private _display: boolean;\n private _zeroBaseline: {\n display: boolean;\n dasharray: string;\n };\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Determines whether the axis baseline will be displayed.\n *\n * @param value - `true` to display the axis baseline, `false` to remove the axis baseline.\n *\n * If not called, the default value is `true`.\n */\n display(value: boolean = true): this {\n this._display = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for the axis baseline when there are positive and negative values on the perpendicular axis.\n *\n * @param value - { display: boolean; stroke: StrokeBuilder }\n *\n * If display is `true`, the axis baseline will be relocated to the zero tick mark of the perpendicular axis. This line will still be displayed even if the axis baseline at the edge of the chart is removed.\n *\n * If display is `false`, the axis baseline will be removed.\n *\n * If stroke is `null`, the axis baseline will be displayed as a dashed line.\n */\n zeroBaseline(\n value: Partial<{\n dasharray: string;\n display: boolean;\n }>\n ): this;\n zeroBaseline(value: null): this;\n zeroBaseline(\n value?: Partial<{\n dasharray: string;\n display: boolean;\n }> | null\n ): this {\n this._zeroBaseline = DEFAULT._zeroBaseline;\n if (value === null) {\n return this;\n }\n this._zeroBaseline.display = value.display ?? true;\n this._zeroBaseline.dasharray =\n value.dasharray ?? DEFAULT._zeroBaseline.dasharray;\n return this;\n }\n\n _build(dimension: 'ordinal' | 'quantitative'): AxisBaseline {\n if (this._display === undefined) {\n this._display = dimension === 'ordinal' ? false : true;\n }\n return new AxisBaseline({\n display: this._display,\n zeroBaseline: this._zeroBaseline,\n });\n }\n}\n","import { StrokeBaseOptions } from './stroke-base-options';\n\nexport abstract class StrokeBase implements StrokeBaseOptions {\n readonly linecap: string;\n readonly linejoin: string;\n readonly opacity: number;\n readonly width: number;\n readonly dasharray: string;\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { StrokeBase } from './base/stroke-base';\nimport { StrokeOptions } from './stroke-options';\n\nexport class Stroke extends StrokeBase implements StrokeOptions {\n readonly color: string;\n\n constructor(options: Partial<StrokeOptions>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Stroke } from './stroke';\n\nconst DEFAULT = {\n _dasharray: 'none',\n _linecap: 'round',\n _linejoin: 'round',\n _opacity: 1,\n _width: 2,\n};\n\nexport class StrokeBuilder {\n private _color: string;\n private _dasharray: string;\n private _linecap: string;\n private _linejoin: string;\n private _opacity: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke}\n * attribute.\n *\n * @default '#000'\n */\n color(color: string): this {\n this._color = color;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-dasharray]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray}\n * attribute.\n *\n * @default 'round'\n */\n dasharray(dasharray: string): this {\n this._dasharray = dasharray;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linecap]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap}\n * attribute.\n *\n * @default 'round'\n */\n linecap(linecap: string): this {\n this._linecap = linecap;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linejoin]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin}\n * attribute.\n *\n * @default 'round'\n */\n linejoin(linejoin: string): this {\n this._linejoin = linejoin;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-opacity]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity}\n * attribute.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-width]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width}\n * attribute, in px.\n *\n * @default 2\n */\n width(width: number): this {\n this._width = width;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): Stroke {\n return new Stroke({\n color: this._color,\n dasharray: this._dasharray,\n linecap: this._linecap,\n linejoin: this._linejoin,\n opacity: this._opacity,\n width: this._width,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Stroke } from '../../stroke';\nimport { GridOptions } from './grid-options';\n\nexport class Grid implements GridOptions {\n axis: 'x' | 'y';\n filter: (i: number) => boolean;\n stroke: Stroke;\n\n constructor(options: GridOptions) {\n safeAssign(this, options);\n }\n}\n","import { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { Grid } from './grid-config';\n\nexport class GridBuilder {\n private _filter: (i: number) => boolean;\n private strokeBuilder: StrokeBuilder;\n\n /**\n * OPTIONAL. Determines whether or not to display grid lines. Must specify a function\n * that takes the index of the grid line and returns a boolean.\n *\n * Default: `(i) => i > 0`, but can be overriden to display all grid lines.\n */\n filter(filter: ((i: number) => boolean) | null) {\n if (filter === null) {\n this._filter = undefined;\n return this;\n }\n this._filter = filter;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the grid line stroke.\n *\n * Default color: '#cccccc'\n * Default width: 1px\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder().width(1).color('#cccccc');\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(axis: 'x' | 'y', dimension: 'quantitative' | 'ordinal'): Grid {\n this.validateBuilder();\n return new Grid({\n axis: axis,\n filter: this.getFilterForDimension(dimension),\n stroke: this.strokeBuilder._build(),\n });\n }\n\n private validateBuilder(): void {\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n }\n\n private getFilterForDimension(\n dimension: 'quantitative' | 'ordinal'\n ): (i: number) => boolean {\n if (this._filter) return this._filter;\n if (dimension === 'quantitative') {\n return (i) => i > 0;\n } else {\n return () => true;\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { select, Selection } from 'd3';\nimport { SvgTextWrapOptions } from './svg-text-wrap-options';\n\nexport class SvgTextWrap implements SvgTextWrapOptions {\n width: number;\n maintainXPosition: boolean;\n maintainYPosition: boolean;\n lineHeight: number;\n breakOnChars: string[];\n spaceAroundBreakChars: boolean;\n\n constructor(options: SvgTextWrapOptions) {\n safeAssign(this, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(textSelection: Selection<SVGTextElement, any, any, any>): void {\n textSelection.each((d, i, nodes) => {\n const text = select(nodes[i]);\n const tokens = this.buildTokens(\n text,\n this.breakOnChars ?? [],\n this.spaceAroundBreakChars ?? false\n ).reverse();\n let word;\n let line = [];\n let lineNumber = 0;\n const y = parseFloat(text.attr('y')) || 0;\n const x = this.maintainXPosition ? parseFloat(text.attr('x')) : 0;\n const maxWidth = this.width;\n const dy = parseFloat(text.attr('dy')) || 0;\n let isFirstTspan = true;\n let tspan = text\n .text(null)\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy + 'em');\n while ((word = tokens.pop())) {\n line.push(word);\n tspan.text(line.join('').trimEnd());\n\n if (tspan.node().getComputedTextLength() > maxWidth) {\n line.pop();\n if (line.length > 0) {\n tspan.text(line.join('').trimEnd());\n isFirstTspan = false;\n } else {\n // Remove the empty tspan since it has no content\n // This happens if a single word is longer than the maxWidth\n tspan.remove();\n }\n line = [word];\n tspan = text\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr(\n 'dy',\n isFirstTspan\n ? dy + 'em'\n : ++lineNumber * this.lineHeight + dy + 'em'\n )\n .text(word);\n isFirstTspan = false;\n }\n }\n if (this.maintainYPosition && lineNumber > 0) {\n const fontSize = parseFloat(text.style('font-size')) || 16;\n const totalLines = lineNumber + 1;\n const totalHeight = (totalLines - 1) * this.lineHeight; // in em units\n\n // Convert to pixels and center\n const offsetY = (totalHeight / 2) * fontSize;\n text.selectAll('tspan').attr('y', y - offsetY);\n }\n });\n }\n\n private buildTokens(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n textSel: Selection<SVGTextElement, unknown, any, any>,\n breakOnChars: string[] = [],\n spaceAroundBreakChars = false\n ): string[] {\n const allTspans = textSel.selectAll<SVGTSpanElement, unknown>('tspan');\n const chunks: string[] =\n allTspans.size() > 0\n ? Array.from(allTspans, (t) => t.textContent ?? '')\n : [textSel.text() ?? ''];\n\n const escaped = breakOnChars.map((c) =>\n c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n );\n const delimRe = escaped.length\n ? new RegExp(`(${escaped.join('|')})`, 'g')\n : null;\n\n const tokens: string[] = [];\n\n const splitByDelims = (s: string): string[] => {\n if (!delimRe) return [s];\n return s.split(delimRe).filter(Boolean); // keeps delimiters as their own elements\n };\n\n chunks.forEach((chunk, chunkIdx) => {\n const wordsInChunk = chunk.trim().split(/\\s+/).filter(Boolean);\n\n wordsInChunk.forEach((w, wIdx) => {\n // Split the \"word\" on delimiter characters, preserving them as tokens\n const parts = splitByDelims(w);\n for (const p of parts) {\n if (breakOnChars.includes(p)) {\n // Delimiter token\n if (spaceAroundBreakChars) {\n tokens.push(' ', p, ' ');\n } else {\n tokens.push(p);\n }\n } else {\n // Normal text segment\n tokens.push(p);\n }\n }\n // Add a single space between words that came from the same chunk\n if (wIdx < wordsInChunk.length - 1) tokens.push(' ');\n });\n\n // Add a single space between tspans\n if (allTspans.size() > 0 && chunkIdx < chunks.length - 1)\n tokens.push(' ');\n });\n\n return tokens;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrap } from './svg-text-wrap';\n\nconst DEFAULT = {\n _maintainXPosition: false,\n _maintainYPosition: false,\n _lineHeight: 1.1,\n _width: 100,\n _breakOnChars: [],\n _spaceAroundBreakChars: false,\n};\nexport class SvgTextWrapBuilder {\n protected _width: number;\n protected _maintainXPosition: boolean;\n protected _maintainYPosition: boolean;\n protected _lineHeight: number;\n protected _breakOnChars: string[];\n protected _spaceAroundBreakChars: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the width to wrap the text to.\n *\n * @default 100\n */\n width(width: number) {\n this._width = width;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the x position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a vertical bar chart.\n *\n * @default false\n */\n maintainXPosition(maintainXPosition: boolean) {\n this._maintainXPosition = maintainXPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the y position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a horizontal bar chart.\n *\n * @default false\n */\n maintainYPosition(maintainYPosition: boolean) {\n this._maintainYPosition = maintainYPosition;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the line height of the text.\n *\n * @default 1.1\n */\n lineHeight(lineHeight: number) {\n this._lineHeight = lineHeight;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the characters to break on when wrapping text.\n * By default, text will only break on spaces.\n *\n * @default []\n */\n breakOnChars(breakOnChars: string[]) {\n this._breakOnChars = breakOnChars;\n return this;\n }\n\n /**\n * OPTIONAL. If true, spaces will be added around break characters.\n *\n * This is useful when breaking on punctuation characters, to avoid words being stuck to punctuation.\n * For example, breaking on commas without spaces around them would result in \"word,\" at the end of one line and \"word\" at the start of the next line.\n *\n * @default false\n */\n spaceAroundBreakChars(spaceAroundBreakChars: boolean) {\n this._spaceAroundBreakChars = spaceAroundBreakChars;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n build(): SvgTextWrap {\n return new SvgTextWrap({\n width: this._width,\n maintainXPosition: this._maintainXPosition,\n maintainYPosition: this._maintainYPosition,\n lineHeight: this._lineHeight,\n breakOnChars: this._breakOnChars,\n spaceAroundBreakChars: this._spaceAroundBreakChars,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrap } from '../../svg-text-wrap';\nimport { AxisLabelOptions } from './axis-label-options';\n\nexport class AxisLabel implements AxisLabelOptions {\n anchor: 'start' | 'middle' | 'end';\n offset: {\n x: number;\n y: number;\n };\n position: 'start' | 'middle' | 'end';\n text: string;\n wrap: SvgTextWrap;\n\n constructor(options: AxisLabelOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { SvgTextWrapBuilder } from '../../svg-text-wrap/svg-text-wrap-builder';\nimport { AxisLabel } from './axis-label';\n\nconst DEFAULT = {\n _offset: { x: 0, y: 0 },\n _position: 'middle',\n};\n\nexport class AxisLabelBuilder {\n protected _anchor: 'start' | 'middle' | 'end';\n protected _offset: {\n x: number;\n y: number;\n };\n protected _position: 'start' | 'middle' | 'end';\n protected _text: string;\n protected textWrapBuilder: SvgTextWrapBuilder;\n protected textWrapFunction: (wrap: SvgTextWrapBuilder) => void;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The [text-anchor](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor) for the axis label.\n *\n * If not provided or if called with null, the anchor will be determined by the position.\n *\n * @default specific to the position\n */\n anchor(value: 'start' | 'middle' | 'end' | null): this {\n if (value === null) {\n this._anchor = undefined;\n return this;\n }\n this._anchor = value;\n return this;\n }\n\n /**\n * OPTIONAL. The offset for the axis label from the position that would otherwise be created. Allows for fine-tuning the position of the label.\n *\n * Positive y values will move the label down, positive x values will move the label to the right.\n *\n * If not provided or if called with null, labels parallel to the axis will be placed at the far extent of the margin. Labels perpendicular to the axis will be placed at the axis line. The latter will likely need an offset.\n *\n * @default { x: 0, y: 0 }\n */\n offset(offset: null): this;\n offset(offset: { x?: number; y?: number }): this;\n offset(offset: { x?: number; y?: number } | null): this {\n if (offset === null) {\n this._offset = DEFAULT._offset;\n return this;\n }\n this._offset = {\n x: offset.x || 0,\n y: offset.y || 0,\n };\n return this;\n }\n\n /**\n * OPTIONAL. The position of the axis label relative to the axis.\n *\n * If the axis is horizontal, the options are 'start' is left, 'middle' is center, and 'end' is right.\n *\n * If the axis is vertical, the options are 'start' is top, 'middle' is center, and 'end' is bottom.\n *\n * @default 'middle'\n */\n position(value: 'start' | 'middle' | 'end'): this {\n this._position = value;\n return this;\n }\n\n /**\n * The text for the axis label.\n */\n text(value: string): this {\n this._text = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for wrapping the text of the label.\n *\n * To unset the wrap, call with null.\n */\n wrap(wrap: null): this;\n wrap(wrap: (wrap: SvgTextWrapBuilder) => void): this;\n wrap(wrap: ((wrap: SvgTextWrapBuilder) => void) | null): this {\n if (wrap === null) {\n this.textWrapFunction = undefined;\n return this;\n }\n this.textWrapFunction = wrap;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n _build(dimension: 'x' | 'y'): AxisLabel {\n if (this.textWrapFunction) this.createTextWrapBuilder(dimension);\n return new AxisLabel({\n anchor: this.getAnchorForDimension(dimension),\n position: this._position,\n offset: this._offset,\n text: this._text,\n wrap: this.textWrapBuilder?.build(),\n });\n }\n\n private createTextWrapBuilder(dimension: 'x' | 'y'): void {\n this.textWrapBuilder = new SvgTextWrapBuilder();\n const isRotatedYLabel = dimension === 'y' && this._position === 'middle';\n // set defaults but let user override setting defaults before calling wrap function\n if (isRotatedYLabel) {\n this.textWrapBuilder.maintainXPosition(false);\n this.textWrapBuilder.maintainYPosition(true);\n }\n this.textWrapFunction(this.textWrapBuilder);\n }\n\n private getAnchorForDimension(\n dimension: 'x' | 'y'\n ): 'start' | 'middle' | 'end' {\n if (this._anchor) return this._anchor;\n switch (this._position) {\n case 'start':\n return dimension === 'x' ? 'start' : 'end';\n case 'middle':\n return 'middle';\n case 'end':\n return 'end';\n }\n }\n}\n","import { VicAuxMarksBuilder } from '../../../marks';\nimport { AxisBaselineBuilder } from '../../baseline/axis-baseline-builder';\nimport { GridBuilder } from '../../grid/grid-builder';\nimport { AxisLabelBuilder } from '../../label/axis-label-builder';\n\nexport abstract class XyAxisBaseBuilder extends VicAuxMarksBuilder<void> {\n protected _axis: 'x' | 'y';\n protected _dimension: 'ordinal' | 'quantitative';\n protected baselineBuilder: AxisBaselineBuilder = new AxisBaselineBuilder();\n protected gridBuilder: GridBuilder;\n protected labelBuilder: AxisLabelBuilder;\n protected marksClass: string;\n\n /**\n * OPTIONAL. Specifies the configuration for the axis baseline. The baseline is the line that typically runs along the edge of the chart, from which tick marks and labels are drawn.\n *\n * @param baseline - A function that specifies properties for the axis baseline, or `null` to unset the baseline.\n *\n * If called with null, the default values of the baseline will be used.\n */\n baseline(baseline: (baseline: AxisBaselineBuilder) => void): this;\n baseline(baseline: null): this;\n baseline(baseline: (baseline: AxisBaselineBuilder) => void): this {\n this.baselineBuilder = new AxisBaselineBuilder();\n if (baseline === null) {\n return this;\n }\n baseline?.(this.baselineBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Specifies the configuration of grid lines for the axis. Grid lines are the lines that run perpendicular to the axis and intersect with tick marks.\n *\n * @param grid - A function that specifies properties for the grid lines, or `null` to unset the grid.\n *\n * If called with no argument, the default values of the grid will be used.\n */\n grid(grid: (grid: GridBuilder) => void): this;\n grid(): this;\n grid(grid: null): this;\n grid(grid?: ((grid: GridBuilder) => void) | null): this {\n if (grid === null) {\n this.gridBuilder = undefined;\n return this;\n }\n this.gridBuilder = new GridBuilder();\n grid?.(this.gridBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for an axis label.\n *\n * @param label - A function that specifies properties for an axis label, or `null` to unset the label.\n */\n label(label: (label: AxisLabelBuilder) => void): this;\n label(label: null): this;\n label(label: ((label: AxisLabelBuilder) => void) | null): this {\n if (label === null) {\n this.labelBuilder = undefined;\n return this;\n }\n this.labelBuilder = new AxisLabelBuilder();\n label(this.labelBuilder);\n return this;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrapOptions } from './tick-wrap-options';\n\n/**\n * A config that specifies how axis tick labels should wrap.\n */\nexport class TickWrap {\n maintainXPosition: boolean;\n maintainYPosition: boolean;\n lineHeight: number;\n breakOnChars: string[];\n spaceAroundBreakChars: boolean;\n width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number);\n\n constructor(options: TickWrapOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrap } from './tick-wrap';\n\nconst DEFAULT = {\n _wrapWidth: 'bandwidth',\n _lineHeight: 1.1,\n};\n\nexport class TickWrapBuilder {\n _width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number);\n _maintainXPosition: boolean;\n _maintainYPosition: boolean;\n _lineHeight: number;\n _breakOnChars: string[];\n _spaceAroundBreakChars: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the characters to break on when wrapping text.\n * By default, text will only break on spaces.\n *\n * @default []\n */\n breakOnChars(breakOnChars: string[]) {\n this._breakOnChars = breakOnChars;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the line-height property of the tick labels. Adjusting the line-height can useful when wrapping labels, particularly on a y-axis.\n *\n * @param value - The line-height of the tick labels, as a multiplier of the font size. For example, 1.1 is 110% of the font size, 1.5 is 150% of the font size, etc.\n */\n lineHeight(value: number | null) {\n if (value === null) {\n this._lineHeight = undefined;\n return this;\n }\n this._lineHeight = value;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the x position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a vertical bar chart.\n *\n * @default false\n */\n maintainXPosition(maintainXPosition: boolean) {\n this._maintainXPosition = maintainXPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, the y position of the text will be maintained.\n *\n * This is useful, for example, for centering bar labels on a horizontal bar chart.\n *\n * @default false\n */\n maintainYPosition(maintainYPosition: boolean) {\n this._maintainYPosition = maintainYPosition;\n return this;\n }\n\n /**\n * OPTIONAL. If true, spaces will be added around break characters.\n *\n * This is useful when breaking on punctuation characters, to avoid words being stuck to punctuation.\n * For example, breaking on commas without spaces around them would result in \"word,\" at the end of one line and \"word\" at the start of the next line.\n *\n * @default false\n */\n spaceAroundBreakChars(spaceAroundBreakChars: boolean) {\n this._spaceAroundBreakChars = spaceAroundBreakChars;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the width to wrap the text to. Can be a number, a function that takes the chart width and number of ticks, or 'bandwidth'.\n *\n * If 'bandwidth', the width will be the bandwidth of the scale.\n *\n * @default 'bandwidth'\n */\n width(width: 'bandwidth'): this;\n width(width: number): this;\n width(width: (chartWidth: number, numOfTicks: number) => number): this;\n width(width: null): this;\n width(\n width:\n | 'bandwidth'\n | number\n | ((chartWidth: number, numOfTicks: number) => number)\n | null\n ) {\n if (width === null) {\n this._width = undefined;\n return this;\n }\n this._width = width;\n return this;\n }\n\n /**\n * @internal Not meant to be called by consumers of the library.\n */\n _build(dimension: 'x' | 'y'): TickWrap {\n this.validate(dimension);\n return new TickWrap({\n width: this._width,\n maintainXPosition: this._maintainXPosition,\n maintainYPosition: this._maintainYPosition,\n lineHeight: this._lineHeight,\n breakOnChars: this._breakOnChars,\n spaceAroundBreakChars: this._spaceAroundBreakChars,\n });\n }\n\n private validate(dimension: 'x' | 'y'): void {\n this._maintainXPosition =\n this._maintainXPosition === undefined\n ? dimension === 'y'\n ? true\n : false\n : this._maintainXPosition;\n this._maintainYPosition =\n this._maintainYPosition === undefined\n ? dimension === 'x'\n ? false\n : true\n : this._maintainYPosition;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { TickWrap } from './tick-wrap/tick-wrap';\nimport { QuantitativeTicksOptions, TicksOptions } from './ticks-options';\n\nexport class Ticks<Tick> implements TicksOptions<Tick> {\n class: (d: Tick) => string;\n fontSize: number;\n format: string | ((value: Tick) => string);\n labelsDisplay: boolean;\n labelsStroke: string;\n labelsStrokeOpacity: number;\n labelsStrokeWidth: number;\n marksDisplay: boolean;\n rotate: number;\n size: number;\n sizeInner: number;\n sizeOuter: number;\n wrap: TickWrap;\n\n constructor(options: TicksOptions<Tick>) {\n safeAssign(this, options);\n }\n}\n\nexport class QuantitativeTicks<Tick> extends Ticks<Tick> {\n count: number;\n spacing: number;\n values: Tick[];\n\n constructor(options: QuantitativeTicksOptions<Tick>) {\n super(options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AxisTimeInterval } from 'd3';\nimport { TickWrapBuilder } from './tick-wrap/tick-wrap-builder';\nimport { QuantitativeTicks, Ticks } from './ticks';\n\nexport interface AxisSpecificTickBuilderOptions {\n _sizeOuter: number;\n}\n\nexport interface AxisSpecificQuantitativeTickBuilderOptions<Tick>\n extends AxisSpecificTickBuilderOptions {\n _format: string | ((value: Tick) => string);\n}\n\nconst DEFAULT = {\n _class: () => '',\n _labelsDisplay: true,\n _marksDisplay: true,\n _remove: false,\n _stroke: 'none',\n _strokeOpacity: 1,\n _strokeWidth: 3,\n};\n\nconst QUANT_DEFAULT = {\n _spacing: 40,\n};\n\nexport class TicksBuilder<Tick> {\n protected _class: (d: Tick) => string;\n protected _fontSize: number;\n protected _format: string | ((value: Tick) => string);\n protected _labelsDisplay: boolean;\n protected _rotate: number;\n protected _labelsStroke: string;\n protected _labelsStrokeOpacity: number;\n protected _labelsStrokeWidth: number;\n protected _marksDisplay: boolean;\n protected _size: number;\n protected _sizeInner: number;\n protected _sizeOuter: number;\n protected wrapBuilder: TickWrapBuilder;\n\n constructor(options: Partial<AxisSpecificTickBuilderOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG G element that corresponds to a single tick.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: Tick) => string): this;\n class(value: ((d: Tick) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the font size of the tick labels.\n *\n * @param value - The font size of the tick labels, in px.\n *\n * If not called, the default font size is D3's default, which is 10px.\n */\n fontSize(value: number | null): this {\n if (value === null) {\n this._fontSize = undefined;\n return this;\n }\n this._fontSize = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how tick labels will be formatted. The format can be a string or a function.\n *\n * @param value - Either a D3 format string, a function that takes a value and returns a string, or `null` to unset the format.\n *\n * If not called, the default value for quantitative axes is ',.1f'. If not called for an ordinal axis, tick labels will be the unformatted ordinal value.\n */\n format(format: string): this;\n format(format: (value: Tick) => string): this;\n format(format: null): this;\n format(format: string | ((value: Tick) => string) | null): this {\n if (format === null) {\n this._format = undefined;\n return this;\n }\n this._format = format;\n return this;\n }\n\n /**\n * OPTIONAL. If false, tick labels will be removed.\n *\n * @param value - `true` to retain all tick labels, `false` to remove all tick labels.\n *\n * If not called, the default value is `true`.\n */\n labelsDisplay(value: boolean): this {\n this._labelsDisplay = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the color of the stroke around the tick labels. Often used to improve the legibility of tick labels, for example, on dark backgrounds.\n *\n * @param value - The stroke of the tick labels.\n *\n * If not called, the default value is 'none'.\n */\n labelsStroke(value: string | null): this {\n if (value === null) {\n this._labelsStroke = DEFAULT._stroke;\n return this;\n }\n this._labelsStroke = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the opacity of the stroke applied around the tick labels.\n *\n * @param value - The opacity of the stroke around the tick labels.\n *\n * If not called, the default value is 1.\n */\n labelsStrokeOpacity(value: number | null): this {\n if (value === null) {\n this._labelsStrokeOpacity = undefined;\n return this;\n }\n this._labelsStrokeOpacity = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the width of the stroke around the tick labels. Often used to improve the legibility of tick labels, for example, on dark backgrounds.\n *\n * @param value - The width of the stroke around the tick labels.\n *\n * If not called, the default value is 3.\n */\n labelsStrokeWidth(value: number | null): this {\n if (value === null) {\n this._labelsStrokeWidth = undefined;\n return this;\n }\n this._labelsStrokeWidth = value;\n return this;\n }\n\n /**\n * OPTIONAL. If false, tick marks (lines) will be removed.\n *\n * @param value - `true` to retain all tick marks, `false` to remove all tick marks.\n *\n * If not called, the default value is `true`.\n */\n marksDisplay(value: boolean): this {\n this._marksDisplay = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the rotation of tick labels.\n *\n * @param value - The rotation of the tick labels in degrees, or `null` to unset the rotation.\n *\n * Positive values rotate clockwise, negative values rotate counterclockwise.\n *\n * If not called, ticks will not be rotated.\n */\n\n rotate(value: number | null): this {\n if (value === null) {\n this._rotate = undefined;\n return this;\n }\n this._rotate = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the size of inner and outer tick marks.\n *\n * @param value - The size of the ticks, in px.\n *\n * If not called or called with `null`, the default size is the D3 default size.\n *\n * If specified, this value will override any values set by `sizeInner` or `sizeOuter`.\n */\n size(value: number | null): this {\n if (value === null) {\n this._size = undefined;\n return this;\n }\n this._size = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the length of the inner ticks drawn by D3. Does not apply to the outermost ticks.\n *\n * @param value - The length of the inner ticks in pixels, or `null` to unset the value.\n *\n * If not called or called with `null`, the default value is the D3 default size.\n *\n */\n sizeInner(value: number | null): this {\n if (value === null) {\n this._sizeInner = undefined;\n return this;\n }\n this._sizeInner = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the length of the square ends of the domain path drawn by D3.\n *\n * @param value - The length of the square ends of the domain path in pixels, or `null` to unset the value.\n *\n * If not called on ordinal axes, the default value is 0. If not called on quantitative axes, no modification is made to D3's default value.\n */\n sizeOuter(value: number | null): this {\n if (value === null) {\n this._sizeOuter = undefined;\n return this;\n }\n this._sizeOuter = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how tick labels will be wrapped.\n *\n * @param wrap - A callback that specifies how tick labels will be wrapped, or `null` to unset the wrapping.\n *\n * If not called, the tick labels will not be wrapped.\n */\n wrap(wrap: (wrap: TickWrapBuilder) => void): this;\n wrap(wrap: null): this;\n wrap(wrap: (wrap: TickWrapBuilder) => void | null): this {\n if (wrap === null) {\n this.wrapBuilder = undefined;\n return this;\n }\n this.wrapBuilder = new TickWrapBuilder();\n wrap(this.wrapBuilder);\n return this;\n }\n\n _build(dimension: 'x' | 'y'): Ticks<Tick> {\n return new Ticks({\n class: this._class,\n fontSize: this._fontSize,\n format: this._format,\n labelsDisplay: this._labelsDisplay,\n labelsStroke: this._labelsStroke,\n labelsStrokeOpacity: this._labelsStrokeOpacity,\n labelsStrokeWidth: this._labelsStrokeWidth,\n marksDisplay: this._marksDisplay,\n rotate: this._rotate,\n size: this._size,\n sizeInner: this._sizeInner,\n sizeOuter: this._sizeOuter,\n wrap: this.wrapBuilder?._build(dimension),\n });\n }\n}\n\nexport class QuantitativeTicksBuilder<Tick> extends TicksBuilder<Tick> {\n private _count: number | AxisTimeInterval;\n private _spacing: number;\n private _values: Tick[];\n\n constructor(\n options: Partial<AxisSpecificQuantitativeTickBuilderOptions<Tick>>\n ) {\n super(options);\n safeAssign(this, DEFAULT);\n safeAssign(this, QUANT_DEFAULT);\n }\n\n /**\n * OPTIONAL. Approximately specifies the number of ticks for the axis.\n *\n * @param value - The number of ticks to pass to D3's axis.ticks(), or null to unset the number of ticks.\n *\n * If not called, a reasonable and valid default will be used based on the size of the chart.\n *\n * Note that this number will be passed to D3's `ticks()` method and therefore it can be an approximate number of ticks.\n *\n * If this method is called, the passed in number of ticks will be validated against the data domain and the value formatter for the axis. If the number of ticks is not valid—for example, if the ticks are formatted with %Y and there are three years of values in the data, and this method is called with 10, a valid number will be used instead.\n */\n count(value: number | AxisTimeInterval | null): this {\n if (value === null) {\n this._count = undefined;\n return this;\n }\n this._count = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies the an approximate spacing between ticks, in pixels.\n *\n * @param value - The spacing between ticks in pixels, or null to unset the spacing.\n *\n * If not called, the default value is 40. If `count` is set, this value will be ignored.\n */\n spacing(value: number | null): this {\n if (value === null) {\n this._spacing = undefined;\n return this;\n }\n this._spacing = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines the values that will show up as ticks on the axis.\n *\n * @param values - An array of quantitative values to pass to D3's axis.tickValues(), or null to unset the tick values.\n *\n */\n values(values: Tick[] | null): this {\n if (values === null) {\n this._values = undefined;\n return this;\n }\n this._values = values;\n return this;\n }\n\n override _build(dimension: 'x' | 'y'): QuantitativeTicks<Tick> {\n return new QuantitativeTicks({\n class: this._class,\n count: this._count,\n fontSize: this._fontSize,\n format: this._format,\n labelsDisplay: this._labelsDisplay,\n labelsStroke: this._labelsStroke,\n labelsStrokeOpacity: this._labelsStrokeOpacity,\n labelsStrokeWidth: this._labelsStrokeWidth,\n marksDisplay: this._marksDisplay,\n rotate: this._rotate,\n size: this._size,\n sizeInner: this._sizeInner,\n sizeOuter: this._sizeOuter,\n spacing: this._spacing,\n values: this._values,\n wrap: this.wrapBuilder?._build(dimension),\n });\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { AuxMarksConfig } from '../../../marks';\nimport { AxisBaseline } from '../../baseline/axis-baseline';\nimport { Grid } from '../../grid/grid-config';\nimport { AxisLabel } from '../../label/axis-label';\nimport { Ticks } from '../../ticks/ticks';\nimport { XyAxisBaseOptions } from './xy-axis-options';\n\nexport abstract class XyAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n >\n extends AuxMarksConfig\n implements XyAxisBaseOptions\n{\n baseline: AxisBaseline;\n grid: Grid;\n label: AxisLabel;\n ticks: TicksConfig;\n\n abstract getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number;\n\n getValidatedNumTicks(numTicks: number): number {\n if (numTicks < 1) {\n return 1;\n }\n return Math.floor(numTicks);\n }\n}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\nimport { TicksOptions } from '../ticks/ticks-options';\n\nexport interface VicOrdinalAxisOptions<Tick extends DataValue>\n extends XyAxisBaseOptions {\n ticks: TicksOptions<Tick>;\n}\n\nexport function mixinOrdinalAxisConfig<\n Tick extends DataValue,\n T extends AbstractConstructor<XyAxisConfig<Tick, Ticks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base implements VicOrdinalAxisOptions<Tick> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n safeAssign(this, args[0]);\n }\n }\n return Mixin;\n}\n\nexport abstract class VicOrdinalAxisConfig<\n Tick extends DataValue,\n> extends mixinOrdinalAxisConfig(XyAxisConfig)<Tick, Ticks<Tick>> {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\n\nexport interface XAxisOptions extends XyAxisBaseOptions {\n /**\n * The side of the chart on which the axis will be placed.\n */\n side: 'top' | 'bottom';\n}\n\nexport function mixinXAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxisConfig<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n side: 'top' | 'bottom';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n if (args.length > 0) {\n safeAssign(this, args[0]);\n }\n }\n\n getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number {\n const d3SuggestedDefault = dimensions.width / spacing;\n return this.getValidatedNumTicks(d3SuggestedDefault);\n }\n }\n return Mixin;\n}\n\nexport class XAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n> extends mixinXAxisConfig(XyAxisConfig)<Tick, TicksConfig> {}\n","import { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicOrdinalAxisOptions,\n mixinOrdinalAxisConfig,\n} from '../ordinal/ordinal-axis-config';\nimport { Ticks } from '../ticks/ticks';\nimport { XAxisOptions, mixinXAxisConfig } from '../x/x-axis-config';\n\ntype XyAxisConfigType<T extends DataValue> = AbstractConstructor<\n XyAxisConfig<T, Ticks<T>>\n>;\n\nconst AbstractXOrdinalAxis = mixinXAxisConfig<\n DataValue,\n Ticks<DataValue>,\n XyAxisConfigType<DataValue>\n>(mixinOrdinalAxisConfig<DataValue, XyAxisConfigType<DataValue>>(XyAxisConfig));\n\nexport class VicXOrdinalAxisConfig<\n Tick extends DataValue,\n> extends AbstractXOrdinalAxis {\n constructor(options: XAxisOptions & VicOrdinalAxisOptions<Tick>) {\n super(options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { TicksBuilder } from '../ticks/ticks-builder';\nimport { VicXOrdinalAxisConfig } from './x-ordinal-axis-config';\n\nconst DEFAULT = {\n _side: 'bottom',\n _baseline: {\n display: false,\n },\n};\n\nconst TICK_DEFAULT = {\n _sizeOuter: 0,\n};\n\n@Injectable()\nexport class VicXOrdinalAxisConfigBuilder<\n Tick extends DataValue,\n> extends XyAxisBaseBuilder {\n private _side: 'top' | 'bottom';\n private ticksBuilder: TicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `bottom`.\n */\n side(value: 'top' | 'bottom'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: TicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: TicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): TicksBuilder<Tick> {\n return new TicksBuilder<Tick>(TICK_DEFAULT);\n }\n\n getConfig(): VicXOrdinalAxisConfig<Tick> {\n return new VicXOrdinalAxisConfig<Tick>({\n baseline: this.baselineBuilder?._build('ordinal'),\n grid: this.gridBuilder?._build('x', 'ordinal'),\n label: this.labelBuilder?._build('x'),\n marksClass: 'vic-axis-x-ordinal',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('x'),\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { select, Selection } from 'd3';\nimport { GenericScale } from '../../core';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAuxMarks } from '../../marks';\nimport { SvgTextWrap } from '../../svg-text-wrap/svg-text-wrap';\nimport { Ticks } from '../ticks/ticks';\nimport { XyAxisConfig } from './config/xy-axis-config';\n\nexport type XyAxisScale = {\n useTransition: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: GenericScale<any, any>;\n};\n\ntype AxisSvgElements = 'gridGroup' | 'gridLine' | 'label' | 'axisGroup';\n\n/**\n * A base directive for all axes.\n */\n@Directive()\nexport abstract class XyAxis<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n> extends XyAuxMarks<unknown, XyAxisConfig<Tick, TicksConfig>> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axis: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axisFunction: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n axisGroup: Selection<SVGGElement, any, SVGGElement, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n gridGroup: Selection<SVGGElement, any, SVGGElement, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: any;\n elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n // used to ensure that a zero axis does not transition in position from baseline on first draw\n isFirstDraw = true;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract setAxisFunction(): any;\n abstract setTranslate(): void;\n abstract setTicks(tickFormat: string | ((value: Tick) => string)): void;\n abstract setScale(): void;\n abstract createLabel(): void;\n abstract getBaselineTranslate(): string | null;\n\n get class(): Record<AxisSvgElements, string> {\n return {\n gridGroup: 'vic-grid-group',\n gridLine: 'vic-grid-line',\n axisGroup: 'vic-axis-group',\n label: 'vic-axis-label',\n };\n }\n\n override initFromConfig(): void {\n this.drawMarks();\n }\n\n setAxisFromScaleAndConfig(): void {\n this.axis = this.axisFunction(this.scale);\n\n this.setTickSize();\n if (this.config.ticks.format) {\n this.setTicks(this.config.ticks.format);\n }\n }\n\n setTickSize(): void {\n if (this.config.ticks.size !== undefined) {\n this.axis.tickSize(this.config.ticks.size);\n } else {\n if (this.config.ticks.sizeInner !== undefined) {\n this.axis.tickSizeInner(this.config.ticks.sizeInner);\n }\n if (this.config.ticks.sizeOuter !== undefined) {\n this.axis.tickSizeOuter(this.config.ticks.sizeOuter);\n }\n }\n const baselineTranslate = this.getBaselineTranslate();\n if (baselineTranslate) {\n this.axis.tickSizeOuter(0);\n }\n }\n\n drawMarks(): void {\n this.setAxisFunction();\n this.setTranslate();\n this.setScale();\n this.setAxisFromScaleAndConfig();\n this.drawAxis();\n this.isFirstDraw = false;\n }\n\n drawAxis(): void {\n if (!this.axisGroup) {\n this.axisGroup = select(this.elRef.nativeElement)\n .append('g')\n .attr('class', this.class.axisGroup);\n }\n\n // Avoid odd animations of ticks or domain lines when those things move between draws\n this.axisGroup.select('.domain').remove();\n this.axisGroup.selectAll('.tick').remove();\n\n this.axisGroup\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(this.getTransition(this.axisGroup))\n .call(this.axis)\n .on('end', () => {\n this.processTicks();\n this.processDomain();\n this.drawGrid();\n });\n\n this.processTickLabels();\n if (this.config.label) {\n this.createLabel();\n }\n }\n\n processTicks(): void {\n const tickText = select(this.elRef.nativeElement).selectAll('.tick text');\n if (this.config.ticks.class) {\n select(this.elRef.nativeElement)\n .selectAll<SVGGElement, Tick>('.tick')\n .each((d, i, nodes) => {\n const labelClass = this.config.ticks.class(d);\n if (labelClass) {\n select(nodes[i]).classed(labelClass, true);\n } else {\n ///remove any previous class\n select(nodes[i]).attr('class', 'tick');\n }\n });\n }\n if (this.config.ticks.fontSize) {\n this.setTickFontSize(tickText);\n }\n // TODO: Determine if this needs to be called from the on('end') of the axisGroup transition\n // or if if should be moved to processTickLabels. I think there is a reason it is here. (?)\n if (this.config.ticks.wrap && this.config.ticks.wrap.width !== undefined) {\n this.wrapAxisTickText(tickText);\n }\n if (this.config.ticks.marksDisplay === false) {\n const marks = select(this.elRef.nativeElement).selectAll('.tick line');\n marks.remove();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setTickFontSize(tickTextSelection: any): void {\n tickTextSelection.attr('font-size', this.config.ticks.fontSize);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapAxisTickText(tickTextSelection: any): void {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { width, ...properties } = this.config.ticks.wrap;\n\n let wrapWidth: number;\n if (this.config.ticks.wrap.width === 'bandwidth') {\n wrapWidth = this.scale.bandwidth();\n } else if (typeof this.config.ticks.wrap.width === 'function') {\n const chartWidth = this.scale.range()[1] - this.scale.range()[0];\n const numOfTicks = select(this.elRef.nativeElement)\n .selectAll('.tick')\n .size();\n wrapWidth = this.config.ticks.wrap.width(chartWidth, numOfTicks);\n } else {\n wrapWidth = this.config.ticks.wrap.width;\n }\n const wrap = new SvgTextWrap({ ...properties, width: wrapWidth });\n wrap.wrap(tickTextSelection);\n }\n\n processDomain(): void {\n const zeroAxisTranslate = this.getBaselineTranslate();\n\n if (\n this.config.baseline.zeroBaseline.display &&\n zeroAxisTranslate !== null\n ) {\n this.axisGroup.call((g) =>\n g\n .select('.domain')\n .attr('transform', zeroAxisTranslate)\n .attr('class', 'domain baseline zero-axis-baseline')\n .attr('stroke-dasharray', this.config.baseline.zeroBaseline.dasharray)\n );\n }\n\n if (zeroAxisTranslate === null) {\n this.axisGroup.call((g) =>\n g\n .select('.domain')\n .attr('class', 'domain baseline')\n .attr('transform', null)\n .attr('stroke-dasharray', null)\n );\n }\n\n if (!this.config.baseline.display && zeroAxisTranslate === null) {\n this.axisGroup.call((g) => g.select('.domain').remove());\n }\n }\n\n processTickLabels(): void {\n if (this.config.ticks.labelsDisplay === false) {\n this.axisGroup.call((g) => g.selectAll('.tick text').remove());\n }\n\n if (this.config.ticks.rotate) {\n this.axisGroup.call((g) =>\n g\n .selectAll('.tick text')\n .style('transform', `rotate(-${this.config.ticks.rotate}deg)`)\n .attr('text-anchor', 'end')\n .attr('alignment-baseline', 'start')\n );\n }\n\n if (\n this.config.ticks.labelsStroke ||\n this.config.ticks.labelsStrokeOpacity ||\n this.config.ticks.labelsStrokeWidth\n ) {\n this.axisGroup.call((g) =>\n g\n .selectAll('.tick text')\n .attr('stroke', this.config.ticks.labelsStroke)\n .attr('stroke-opacity', this.config.ticks.labelsStrokeOpacity)\n .attr('stroke-width', this.config.ticks.labelsStrokeWidth)\n );\n }\n }\n\n otherAxisHasPosAndNegValues(dimension: 'x' | 'y'): boolean {\n const otherDimension = dimension === 'x' ? 'y' : 'x';\n const domain = this.scales[otherDimension].domain();\n if (domain.length > 2 || isNaN(domain[0]) || isNaN(domain[1])) {\n return false;\n }\n return domain[0] < 0 && domain[1] > 0;\n }\n\n drawGrid(): void {\n if (this.config.grid) {\n if (!this.gridGroup) {\n this.gridGroup = select(this.elRef.nativeElement)\n .append('g')\n .attr('class', this.class.gridGroup);\n }\n\n this.gridGroup\n .transition(this.getTransition(this.gridGroup))\n .call(this.axis.tickSizeInner(this.getGridLineLength()))\n .selectAll('.tick')\n .attr('class', `tick ${this.class.gridLine}`)\n .style('display', (_, i) =>\n this.config.grid.filter(i) ? null : 'none'\n )\n .select('line')\n .attr('stroke', this.config.grid.stroke.color)\n .attr('stroke-dasharray', this.config.grid.stroke.dasharray)\n .attr('stroke-width', this.config.grid.stroke.width)\n .attr('opacity', this.config.grid.stroke.opacity)\n .attr('stroke-linecap', this.config.grid.stroke.linecap)\n .attr('stroke-linejoin', this.config.grid.stroke.linejoin);\n\n this.gridGroup.call((g) => {\n g.selectAll('text').remove();\n g.selectAll('.domain').remove();\n });\n } else {\n select(this.elRef.nativeElement)\n .select(`.${this.class.gridGroup}`)\n .remove();\n\n this.gridGroup = undefined;\n }\n }\n\n getGridLineLength(): number {\n const gridLineScale =\n this.config.grid.axis === 'x' ? this.scales.y : this.scales.x;\n return -1 * Math.abs(gridLineScale.range()[1] - gridLineScale.range()[0]);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTransition(selection: any): any {\n const transitionDuration = this.isFirstDraw\n ? 0\n : this.getTransitionDuration();\n return selection.transition().duration(transitionDuration);\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { format, utcFormat } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { VicOrdinalAxisConfig as OrdinalAxisConfig } from './ordinal-axis-config';\n\nexport function ordinalAxisMixin<\n Tick extends DataValue,\n T extends AbstractConstructor<XyAxis<Tick, Ticks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: OrdinalAxisConfig<Tick>;\n\n setTicks(tickFormat: string | ((value: Tick) => string)): void {\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n }\n\n return Mixin;\n}\n","import { Directive, Input } from '@angular/core';\nimport { axisBottom, axisTop } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { XAxisConfig } from './x-axis-config';\n\nexport function xAxisMixin<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxis<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: XAxisConfig<Tick, TicksConfig>;\n translate: string;\n\n setTranslate(): void {\n const translate = this.getTranslateDistance();\n this.translate = `translate(0, ${translate})`;\n }\n\n getTranslateDistance(): number {\n return this.config.side === 'top'\n ? this.getTopTranslate()\n : this.getBottomTranslate();\n }\n\n getTopTranslate(): number {\n return this.scales.y.range()[1];\n }\n\n getBottomTranslate(): number {\n return this.scales.y.range()[0];\n }\n\n getBaselineTranslate(): string | null {\n if (!this.otherAxisHasPosAndNegValues('x')) return null;\n\n const rangeIndexForSide = this.config.side === 'top' ? 1 : 0;\n const translateDistance =\n this.scales.y(0) - this.scales.y.range()[rangeIndexForSide];\n return `translate(0, ${translateDistance})`;\n }\n\n setScale(): void {\n this.scale = this.scales.x;\n }\n\n setAxisFunction(): void {\n this.axisFunction = this.config.side === 'top' ? axisTop : axisBottom;\n }\n\n createLabel(): void {\n const config = this.config.label;\n if (!config) return;\n\n const spaceFromMarginEdge = 4;\n let x = config.offset.x || 0;\n let y = config.offset.y || 0;\n\n y +=\n this.config.side === 'top'\n ? this.chart.config.margin.top * -1 + spaceFromMarginEdge\n : this.chart.config.margin.bottom - spaceFromMarginEdge;\n\n let anchor: 'start' | 'middle' | 'end';\n const range = this.scales.x.range();\n\n if (config.position === 'start') {\n x += range[0];\n anchor = config.anchor || 'start';\n } else if (config.position === 'middle') {\n x += (range[1] - range[0]) / 2 + range[0];\n anchor = config.anchor || 'middle';\n } else {\n x += range[1];\n anchor = config.anchor || 'end';\n }\n\n let label = this.axisGroup.select<SVGTextElement>(`.${this.class.label}`);\n const needsInit = label.empty();\n\n if (needsInit) {\n label = this.axisGroup\n .append<SVGTextElement>('text')\n .attr('class', this.class.label);\n }\n\n label\n .text(this.config.label.text)\n .attr('text-anchor', anchor)\n .attr('y', y)\n .style('visibility', config.wrap ? 'hidden' : 'visible');\n\n if (config.wrap) {\n requestAnimationFrame(() => {\n this.config.label.wrap.wrap(label);\n label.attr('x', x).style('visibility', 'visible');\n\n label.selectAll('tspan').attr('x', x);\n });\n } else {\n label.attr('x', x);\n }\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { ordinalAxisMixin } from '../ordinal/ordinal-axis';\nimport { Ticks } from '../ticks/ticks';\nimport { xAxisMixin } from '../x/x-axis';\n\nconst XOrdinalAxis = xAxisMixin(\n ordinalAxisMixin(XyAxis<DataValue, Ticks<DataValue>>)\n);\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-x-ordinal-axis]',\n template: '',\n styles: [\n `\n .vic-axis-x-ordinal .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class XOrdinalAxisComponent extends XOrdinalAxis {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { QuantitativeTicksOptions } from '../ticks/ticks-options';\n\nexport interface VicQuantitativeAxisOptions<Tick extends ContinuousValue>\n extends XyAxisBaseOptions {\n ticks: QuantitativeTicksOptions<Tick>;\n}\n\nexport function mixinQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n T extends AbstractConstructor<XyAxisConfig<Tick, QuantitativeTicks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin\n extends Base\n implements VicQuantitativeAxisOptions<Tick>\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n if (args.length > 0) {\n safeAssign(this, args[0]);\n }\n }\n }\n return Mixin;\n}\n\nexport abstract class VicQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends mixinQuantitativeAxisConfig(XyAxisConfig)<\n Tick,\n QuantitativeTicks<Tick>\n> {}\n","import { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicQuantitativeAxisOptions,\n mixinQuantitativeAxisConfig,\n} from '../quantitative/quantitative-axis-config';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { XAxisOptions, mixinXAxisConfig } from '../x/x-axis-config';\n\ntype XyAxisConfigType<T extends ContinuousValue> = AbstractConstructor<\n XyAxisConfig<T, QuantitativeTicks<T>>\n>;\n\nconst AbstractXQuantitativeAxis = mixinXAxisConfig<\n ContinuousValue,\n QuantitativeTicks<ContinuousValue>,\n XyAxisConfigType<ContinuousValue>\n>(\n mixinQuantitativeAxisConfig<\n ContinuousValue,\n XyAxisConfigType<ContinuousValue>\n >(XyAxisConfig)\n);\n\nexport class VicXQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends AbstractXQuantitativeAxis {\n constructor(options: XAxisOptions & VicQuantitativeAxisOptions<Tick>) {\n super(options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { QuantitativeTicksBuilder } from '../ticks/ticks-builder';\nimport { VicXQuantitativeAxisConfig } from './x-quantitative-axis-config';\n\nconst DEFAULT = {\n _side: 'bottom',\n _removeDomainLine: false,\n _zeroAxis: { strokeDasharray: '2', useZeroAxis: true },\n};\n\nconst TICK_DEFAULT = {\n _format: ',.1f',\n};\n\n@Injectable()\nexport class VicXQuantitativeAxisConfigBuilder<\n Tick extends ContinuousValue,\n> extends XyAxisBaseBuilder {\n private ticksBuilder: QuantitativeTicksBuilder<Tick>;\n private _side: 'top' | 'bottom';\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `bottom`.\n */\n side(value: 'top' | 'bottom'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: QuantitativeTicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: QuantitativeTicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): QuantitativeTicksBuilder<Tick> {\n return new QuantitativeTicksBuilder<Tick>(TICK_DEFAULT);\n }\n\n getConfig(): VicXQuantitativeAxisConfig<Tick> {\n return new VicXQuantitativeAxisConfig<Tick>({\n baseline: this.baselineBuilder._build('quantitative'),\n grid: this.gridBuilder?._build('x', 'quantitative'),\n label: this.labelBuilder?._build('x'),\n marksClass: 'vic-axis-x-quantitative',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('x'),\n });\n }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AxisTimeInterval, format, utcFormat } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { VicQuantitativeAxisConfig as QuantitativeAxisConfig } from './quantitative-axis-config';\n\nexport function quantitativeAxisMixin<\n Tick extends ContinuousValue,\n T extends AbstractConstructor<XyAxis<Tick, QuantitativeTicks<Tick>>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: QuantitativeAxisConfig<Tick>;\n\n setTicks(tickFormat: string | ((value: Tick) => string)): void {\n if (this.config.ticks.values) {\n this.setSpecifiedTickValues(tickFormat);\n } else {\n this.setUnspecifiedTickValues(tickFormat);\n }\n }\n\n setSpecifiedTickValues(\n tickFormat: string | ((value: Tick) => string)\n ): void {\n const validTickValues = this.getValidTickValues();\n this.axis.tickValues(validTickValues);\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n\n getValidTickValues(): Tick[] {\n const domain = this.scale.domain();\n const validValues = [];\n this.config.ticks.values.forEach((value) => {\n if (domain[0] <= value && value <= domain[1]) {\n validValues.push(value);\n }\n });\n return validValues;\n }\n\n setUnspecifiedTickValues(\n tickFormat: string | ((value: Tick) => string)\n ): void {\n const validNumTicks = this.getSuggestedNumTicks(tickFormat);\n this.axis.ticks(validNumTicks);\n this.axis.tickFormat((d) => {\n const formatter = d instanceof Date ? utcFormat : format;\n return typeof tickFormat === 'function'\n ? tickFormat(d)\n : formatter(tickFormat)(d);\n });\n }\n\n getSuggestedNumTicks(\n tickFormat: string | ((value: Tick) => string)\n ): number | AxisTimeInterval {\n let numSuggestedTicks = this.getNumTicks();\n if (\n typeof tickFormat === 'string' &&\n typeof numSuggestedTicks === 'number'\n ) {\n numSuggestedTicks = Math.round(numSuggestedTicks);\n\n if (this.scale.domain()[0] instanceof Date) {\n const maxTicks = this.getMaxTicksForDateFormat(tickFormat);\n if (maxTicks !== null) {\n return Math.min(numSuggestedTicks, maxTicks);\n }\n }\n if (tickFormat.includes('.')) {\n return this.getValidNumTicksForNumberFormatString(\n numSuggestedTicks,\n tickFormat\n );\n }\n return numSuggestedTicks;\n } else {\n return numSuggestedTicks;\n }\n }\n\n getNumTicks(): number | AxisTimeInterval {\n return (\n this.config.ticks.count ||\n this.config.getNumTicksBySpacing(this.config.ticks.spacing, {\n height: this.chart.config.height,\n width: this.chart.config.width,\n })\n );\n }\n\n getValidNumTicksForNumberFormatString(\n numTicks: number,\n tickFormat: string\n ): number {\n let numDecimalPlaces = Number(tickFormat.split('.')[1][0]);\n if (tickFormat.includes('%')) {\n numDecimalPlaces = numDecimalPlaces + 2;\n }\n const [start, end] = this.scale.domain();\n const range = end - start;\n const minStep = Math.pow(10, -1 * numDecimalPlaces);\n const rawCount = range / minStep;\n const numValidTicks = Math.round(rawCount);\n if (numTicks < numValidTicks) {\n return numTicks;\n } else {\n return numValidTicks;\n }\n }\n\n getMaxTicksForDateFormat(tickFormat: string): number | null {\n const [startDate, endDate] = this.scale.domain() as [Date, Date];\n\n // Year-only formatters: %Y, %y\n if (tickFormat === '%Y' || tickFormat === '%y') {\n const startYear = startDate.getUTCFullYear();\n const endYear = endDate.getUTCFullYear();\n return endYear - startYear + 1;\n }\n\n // Quarter formatter: %Y Q%q\n if (tickFormat === '%Y Q%q') {\n const startYear = startDate.getUTCFullYear();\n const startQuarter = Math.floor(startDate.getUTCMonth() / 3);\n const endYear = endDate.getUTCFullYear();\n const endQuarter = Math.floor(endDate.getUTCMonth() / 3);\n\n return (endYear - startYear) * 4 + (endQuarter - startQuarter) + 1;\n }\n\n // Month-year formatters: %B %Y, %b %Y\n if (tickFormat === '%B %Y' || tickFormat === '%b %Y') {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n const endYear = endDate.getUTCFullYear();\n const endMonth = endDate.getUTCMonth();\n\n return (endYear - startYear) * 12 + (endMonth - startMonth) + 1;\n }\n\n // Full date formatters: %B %d, %Y\n if (\n tickFormat === '%B %d, %Y' ||\n tickFormat === '%m/%d/%Y' ||\n tickFormat === '%Y-%m-%d'\n ) {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const daysDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n return daysDiff + 1;\n }\n\n // Additional common time formatters for completeness\n\n // Month formatters: %B (full month), %b (abbreviated), %m (numeric)\n if (tickFormat === '%B' || tickFormat === '%b' || tickFormat === '%m') {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n const endYear = endDate.getUTCFullYear();\n const endMonth = endDate.getUTCMonth();\n\n return (endYear - startYear) * 12 + (endMonth - startMonth) + 1;\n }\n\n // Day formatters: %d (day of month), %e (day of month with space), %j (day of year)\n if (tickFormat === '%d' || tickFormat === '%e' || tickFormat === '%j') {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const daysDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n return daysDiff + 1;\n }\n\n // Week formatters: %U, %W (week of year)\n if (tickFormat === '%U' || tickFormat === '%W') {\n const timeDiff = endDate.getTime() - startDate.getTime();\n const weeksDiff = Math.ceil(timeDiff / (1000 * 60 * 60 * 24 * 7));\n return weeksDiff + 1;\n }\n\n // For composite formats or unrecognized formats, return null to use default logic\n return null;\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ContinuousValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { quantitativeAxisMixin } from '../quantitative/quantitative-axis';\nimport { QuantitativeTicks, Ticks } from '../ticks/ticks';\nimport { xAxisMixin } from '../x/x-axis';\n\ntype XyAxisType<T extends ContinuousValue> = AbstractConstructor<\n XyAxis<T, QuantitativeTicks<T>>\n>;\n\nconst XQuantitativeAxis = xAxisMixin<\n ContinuousValue,\n Ticks<ContinuousValue>,\n XyAxisType<ContinuousValue>\n>(quantitativeAxisMixin<ContinuousValue, XyAxisType<ContinuousValue>>(XyAxis));\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-x-quantitative-axis]',\n template: '',\n styles: [\n `\n .vic-axis-x-quantitative .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class XQuantitativeAxisComponent extends XQuantitativeAxis {}\n","import { Directive, Input } from '@angular/core';\nimport { axisLeft, axisRight } from 'd3';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { Ticks } from '../ticks/ticks';\nimport { YAxisConfig } from './y-axis-config';\n\n/**\n * A mixin that extends `XyAxis` with the functionality needed for a y-axis.\n *\n * For internal library use only.\n */\nexport function yAxisMixin<\n Tick extends DataValue | ContinuousValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxis<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base {\n @Input() override config: YAxisConfig<Tick, TicksConfig>;\n translate: string;\n\n setAxisFunction(): void {\n this.axisFunction = this.config.side === 'left' ? axisLeft : axisRight;\n }\n\n setTranslate(): void {\n const translate = this.getTranslateDistance();\n this.translate = `translate(${translate}, 0)`;\n }\n\n getTranslateDistance(): number {\n const range = this.scales.x.range();\n return this.config.side === 'left'\n ? this.getLeftTranslate(range)\n : this.getRightTranslate(range);\n }\n\n getLeftTranslate(range: [number, number]): number {\n return range[0];\n }\n\n getRightTranslate(range: [number, number]): number {\n return range[1];\n }\n\n getBaselineTranslate(): string | null {\n if (!this.otherAxisHasPosAndNegValues('y')) return null;\n\n const rangeIndexForSide = this.config.side === 'left' ? 0 : 1;\n const translateDistance =\n this.scales.x(0) - this.scales.x.range()[rangeIndexForSide];\n return `translate(${translateDistance}, 0)`;\n }\n\n setScale(): void {\n this.scale = this.scales.y;\n }\n\n initNumTicks(): number {\n // value mimics D3's default\n const defaultNumTicks = this.chart.config.height / 50;\n if (defaultNumTicks < 1) {\n return 1;\n } else {\n return Math.floor(defaultNumTicks);\n }\n }\n\n createLabel(): void {\n const config = this.config.label;\n if (!config) return;\n\n let y = config.offset.y;\n let x = config.offset.x;\n let anchor: 'start' | 'middle' | 'end';\n let rotate: string | null = null;\n let alignmentBaseline = null;\n const range = this.scales.y.range();\n\n if (config.position === 'start') {\n y += range[1];\n anchor = config.anchor || 'end';\n } else if (config.position === 'middle') {\n rotate = 'rotate(-90)';\n x = config.offset.x * -1;\n y = config.offset.y;\n y += (range[0] - range[1]) / 2 + +this.chart.config.margin.top;\n x +=\n this.config.side === 'left'\n ? this.chart.config.margin.left\n : this.chart.config.width;\n anchor = config.anchor || 'middle';\n alignmentBaseline =\n this.config.side === 'left' ? 'hanging' : 'baseline';\n } else {\n y += range[0];\n anchor = config.anchor || 'end';\n }\n\n let label = this.axisGroup.select<SVGTextElement>(`.${this.class.label}`);\n const needsInit = label.empty();\n\n if (needsInit) {\n label = this.axisGroup.append('text').attr('class', this.class.label);\n }\n\n label.text(this.config.label.text);\n\n if (rotate) {\n const edgeOffset = this.config.side === 'left' ? 1 : -1;\n const rotatedX = y * -1;\n const rotatedY =\n this.config.side === 'left' ? x * -1 : this.chart.config.margin.right;\n\n label.style('visibility', 'hidden');\n\n if (config.wrap) {\n requestAnimationFrame(() => {\n label.attr('x', x).attr('y', y);\n this.config.label.wrap.maintainXPosition = false;\n this.config.label.wrap.wrap(label);\n label.attr('transform', rotate).style('visibility', 'visible');\n\n label\n .selectAll('tspan')\n .attr('x', rotatedX)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline);\n\n label.selectAll('tspan').attr('y', rotatedY + edgeOffset);\n });\n } else {\n label\n .attr('x', rotatedX)\n .attr('y', rotatedY + edgeOffset)\n .attr('transform', rotate)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline)\n .style('visibility', 'visible');\n }\n } else {\n label\n .attr('x', x)\n .attr('y', y)\n .attr('transform', null)\n .attr('text-anchor', anchor)\n .attr('alignment-baseline', alignmentBaseline);\n\n if (config.wrap) {\n label.style('visibility', 'hidden');\n requestAnimationFrame(() => {\n this.config.label.wrap.wrap(label);\n label.style('visibility', 'visible');\n });\n }\n }\n }\n }\n\n return Mixin;\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { ordinalAxisMixin } from '../ordinal/ordinal-axis';\nimport { Ticks } from '../ticks/ticks';\nimport { yAxisMixin } from '../y/y-axis';\n\nconst YOrdinalAxis = yAxisMixin(\n ordinalAxisMixin(XyAxis<DataValue, Ticks<DataValue>>)\n);\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-y-ordinal-axis]',\n template: '',\n styles: [\n `\n .vic-axis-y-ordinal .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class YOrdinalAxisComponent extends YOrdinalAxis {}\n","import { Component, ViewEncapsulation } from '@angular/core';\nimport { ContinuousValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxis } from '../base/xy-axis-base';\nimport { quantitativeAxisMixin } from '../quantitative/quantitative-axis';\nimport { QuantitativeTicks, Ticks } from '../ticks/ticks';\nimport { yAxisMixin } from '../y/y-axis';\n\ntype XyAxisType<T extends ContinuousValue> = AbstractConstructor<\n XyAxis<T, QuantitativeTicks<T>>\n>;\n\nconst YQuantitativeAxis = yAxisMixin<\n ContinuousValue,\n Ticks<ContinuousValue>,\n XyAxisType<ContinuousValue>\n>(quantitativeAxisMixin<ContinuousValue, XyAxisType<ContinuousValue>>(XyAxis));\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-y-quantitative-axis]',\n template: '',\n styles: [\n `\n .vic-axis-y-quantitative .vic-axis-label {\n fill: currentColor;\n }\n `,\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['config'],\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'config.marksClass',\n class: 'vic-axis',\n '[attr.mix-blend-mode]': 'config.mixBlendMode',\n '[attr.transform]': 'translate',\n },\n})\nexport class YQuantitativeAxisComponent extends YQuantitativeAxis {}\n","import { NgModule } from '@angular/core';\nimport { XOrdinalAxisComponent } from './x-ordinal/x-ordinal-axis.component';\nimport { XQuantitativeAxisComponent } from './x-quantitative/x-quantitative-axis.component';\nimport { YOrdinalAxisComponent } from './y-ordinal/y-ordinal-axis.component';\nimport { YQuantitativeAxisComponent } from './y-quantitative-axis/y-quantitative-axis.component';\n@NgModule({\n imports: [\n YQuantitativeAxisComponent,\n YOrdinalAxisComponent,\n XQuantitativeAxisComponent,\n XOrdinalAxisComponent,\n ],\n exports: [\n YQuantitativeAxisComponent,\n YOrdinalAxisComponent,\n XQuantitativeAxisComponent,\n XOrdinalAxisComponent,\n ],\n})\nexport class VicXyAxisModule {}\n","import { Directive } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport { XyAxisBaseOptions } from '../base/config/xy-axis-options';\nimport { Ticks } from '../ticks/ticks';\n\nexport interface YAxisOptions extends XyAxisBaseOptions {\n /**\n * The side of the chart on which the axis will be placed.\n */\n side: 'left' | 'right';\n}\n\nexport function mixinYAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n T extends AbstractConstructor<XyAxisConfig<Tick, TicksConfig>>,\n>(Base: T) {\n @Directive()\n abstract class Mixin extends Base implements YAxisOptions {\n side: 'left' | 'right';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n safeAssign(this, args[0]);\n this.side = this.side ?? 'left';\n }\n\n getNumTicksBySpacing(\n spacing: number,\n dimensions: {\n height: number;\n width: number;\n }\n ): number {\n const d3SuggestedDefault = dimensions.height / spacing;\n return this.getValidatedNumTicks(d3SuggestedDefault);\n }\n }\n return Mixin;\n}\n\nexport class YAxisConfig<\n Tick extends DataValue,\n TicksConfig extends Ticks<Tick>,\n> extends mixinYAxisConfig(XyAxisConfig)<Tick, TicksConfig> {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicOrdinalAxisOptions,\n mixinOrdinalAxisConfig,\n} from '../ordinal/ordinal-axis-config';\nimport { Ticks } from '../ticks/ticks';\nimport { YAxisOptions, mixinYAxisConfig } from '../y/y-axis-config';\n\ntype XyAxisConfigType<T extends DataValue> = AbstractConstructor<\n XyAxisConfig<T, Ticks<T>>\n>;\n\nconst AbstractYOrdinalAxis = mixinYAxisConfig<\n DataValue,\n Ticks<DataValue>,\n XyAxisConfigType<DataValue>\n>(mixinOrdinalAxisConfig<DataValue, XyAxisConfigType<DataValue>>(XyAxisConfig));\n\nexport class VicYOrdinalAxisConfig<\n Tick extends DataValue,\n> extends AbstractYOrdinalAxis {\n constructor(options: YAxisOptions & VicOrdinalAxisOptions<Tick>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { TicksBuilder } from '../ticks/ticks-builder';\nimport { VicYOrdinalAxisConfig } from './y-ordinal-axis-config';\n\nconst DEFAULT = {\n _side: 'left',\n _baseline: {\n display: false,\n },\n};\n\nconst TICKS_DEFAULT = {\n _sizeOuter: 0,\n};\n\n@Injectable()\nexport class VicYOrdinalAxisConfigBuilder<\n Tick extends DataValue,\n> extends XyAxisBaseBuilder {\n private _side: 'left' | 'right';\n private ticksBuilder: TicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `left`.\n */\n side(value: 'left' | 'right'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: TicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: TicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n this.ticksBuilder = undefined;\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): TicksBuilder<Tick> {\n return new TicksBuilder<Tick>(TICKS_DEFAULT);\n }\n\n getConfig(): VicYOrdinalAxisConfig<Tick> {\n return new VicYOrdinalAxisConfig({\n baseline: this.baselineBuilder._build('ordinal'),\n grid: this.gridBuilder?._build('y', 'ordinal'),\n label: this.labelBuilder?._build('y'),\n marksClass: 'vic-axis-y-ordinal',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('y'),\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { AbstractConstructor } from '../../core/common-behaviors/constructor';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisConfig } from '../base/config/xy-axis-config';\nimport {\n VicQuantitativeAxisOptions,\n mixinQuantitativeAxisConfig,\n} from '../quantitative/quantitative-axis-config';\nimport { QuantitativeTicks } from '../ticks/ticks';\nimport { YAxisOptions, mixinYAxisConfig } from '../y/y-axis-config';\n\ntype XyAxisConfigType<T extends ContinuousValue> = AbstractConstructor<\n XyAxisConfig<T, QuantitativeTicks<T>>\n>;\n\nconst AbstractYQuantitative = mixinYAxisConfig<\n ContinuousValue,\n QuantitativeTicks<ContinuousValue>,\n XyAxisConfigType<ContinuousValue>\n>(\n mixinQuantitativeAxisConfig<\n ContinuousValue,\n XyAxisConfigType<ContinuousValue>\n >(XyAxisConfig)\n);\n\nexport class VicYQuantitativeAxisConfig<\n Tick extends ContinuousValue,\n> extends AbstractYQuantitative {\n constructor(options: YAxisOptions & VicQuantitativeAxisOptions<Tick>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { ContinuousValue } from '../../core/types/values';\nimport { XyAxisBaseBuilder } from '../base/config/xy-axis-builder';\nimport { QuantitativeTicksBuilder } from '../ticks/ticks-builder';\nimport { VicYQuantitativeAxisConfig } from './y-quantitative-axis-config';\n\nconst DEFAULT = {\n _side: 'left',\n _removeDomainLine: false,\n _zeroAxis: { strokeDasharray: '2', useZeroAxis: true },\n};\n\nconst TICKS_DEFAULT = {\n _format: ',.1f',\n};\n\n@Injectable()\nexport class VicYQuantitativeAxisConfigBuilder<\n Tick extends ContinuousValue,\n> extends XyAxisBaseBuilder {\n private _side: 'left' | 'right';\n private ticksBuilder: QuantitativeTicksBuilder<Tick>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n this.ticksBuilder = this.getTicksBuilder();\n }\n\n /**\n * OPTIONAL. Specifies the location of the axis on the chart.\n *\n * @param value - The side of the chart where the axis will be placed.\n *\n * If not called, the default value is `left`.\n */\n side(value: 'left' | 'right'): this {\n this._side = value;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties for axis ticks.\n *\n * @param ticks - A function that specifies properties for axis ticks.\n */\n ticks(ticks: (ticks: QuantitativeTicksBuilder<Tick>) => void): this;\n ticks(ticks: null): this;\n ticks(ticks: ((ticks: QuantitativeTicksBuilder<Tick>) => void) | null): this {\n this.ticksBuilder = this.getTicksBuilder();\n if (ticks === null) {\n return this;\n }\n ticks?.(this.ticksBuilder);\n return this;\n }\n\n private getTicksBuilder(): QuantitativeTicksBuilder<Tick> {\n return new QuantitativeTicksBuilder<Tick>(TICKS_DEFAULT);\n }\n\n getConfig(): VicYQuantitativeAxisConfig<Tick> {\n return new VicYQuantitativeAxisConfig<Tick>({\n baseline: this.baselineBuilder._build('quantitative'),\n grid: this.gridBuilder?._build('y', 'quantitative'),\n label: this.labelBuilder?._build('y'),\n marksClass: 'vic-axis-y-quantitative',\n mixBlendMode: this._mixBlendMode,\n side: this._side,\n ticks: this.ticksBuilder._build('y'),\n });\n }\n}\n","import * as CSSType from 'csstype';\nimport { color as d3Color } from 'd3-color';\nexport class ColorUtilities {\n static getContrastRatio(foreground: string, background: string): number {\n const lumA = ColorUtilities.getLuminance(foreground);\n const lumB = ColorUtilities.getLuminance(background);\n return lumA > lumB\n ? (lumA + 0.05) / (lumB + 0.05)\n : (lumB + 0.05) / (lumA + 0.05);\n }\n\n static getLuminance(color: string): number {\n const rgb = d3Color(color).rgb();\n return (\n 0.2126 * ColorUtilities.sRGBToLinear(rgb.r) +\n 0.7152 * ColorUtilities.sRGBToLinear(rgb.g) +\n 0.0722 * ColorUtilities.sRGBToLinear(rgb.b)\n );\n }\n\n static sRGBToLinear(value: number): number {\n const v = value / 255;\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n }\n\n /**\n * @param backgroundColor string, provided by getFill\n * @param darkColor\n * @param lightColor\n * @returns label fill color (either dark or light color)\n */\n static getHigherContrastColorForBackground(\n backgroundColor: string,\n darkColor: CSSType.Property.Fill,\n lightColor: CSSType.Property.Fill\n ): CSSType.Property.Fill {\n return ColorUtilities.getContrastRatio(lightColor, backgroundColor) >\n ColorUtilities.getContrastRatio(darkColor, backgroundColor)\n ? lightColor\n : darkColor;\n }\n}\n","import { FillDefinition } from '../../fill-definitions/fill-definitions';\n\n/**\n * @internal\n */\nexport class FillUtilities {\n static getFill<Datum>(\n datum: Datum,\n defaultColor: string,\n patterns: FillDefinition<Datum>[]\n ): string {\n if (patterns) {\n patterns.forEach((pattern: FillDefinition<Datum>) => {\n if (pattern.shouldApply(datum)) {\n defaultColor = `url(#${pattern.defId})`;\n }\n });\n }\n return defaultColor;\n }\n}\n","export function isNumber(x: unknown): x is number {\n return typeof x === 'number';\n}\n\nexport function isNumberArray(x: unknown[]): x is number[] {\n return x.every(isNumber);\n}\n\nexport function isDate(x: unknown): x is Date {\n return (\n Object.prototype.toString.call(x) === '[object Date]' && !isNaN(x as number)\n );\n}\n\nexport function isFunction<T, U = unknown>(\n x: unknown\n): x is (...args: U[]) => T {\n return typeof x === 'function';\n}\n\nexport function isPrimitiveType<T>(x: unknown): x is T {\n return typeof x !== 'function';\n}\n\nexport function isObject<T>(x: unknown): x is T {\n return (\n typeof x === 'object' &&\n x !== null &&\n !Array.isArray(x) &&\n !isFunction(x) &&\n !isDate(x)\n );\n}\n","export enum ValueExtent {\n max = 'max',\n min = 'min',\n}\n\nexport type ContinuousValue = number | Date;\n\nexport type DataValue = number | string | Date;\n\nexport type VisualValue = number | string;\n","import { format, utcFormat } from 'd3';\nimport { ValueExtent } from '../types/values';\nimport { isDate } from './type-guards';\nexport type VicFormatSpecifier<Datum> = string | ((x: Datum) => string);\n\n/**\n * @internal\n */\nexport class ValueUtilities {\n static getValueRoundedToNSignificantFigures(\n value: number,\n sigFigures: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n // If the value type is VicValueExtent.max, rounds up if value is > 0 and down if value is < 0\n // If the value type is VicValueExtent.min, rounds down if value is > 0 and up if value is < 0\n // ex: 1234 => 1235, -1234 => -1235\n // SigDigits here means the first N non-zero as units holder values\n // ex: 1234, sigFigures = 2, \"1\" and \"2\" are \"significant\"\n // ex: 0.001234, sigFigures = 3, \"1\", \"2\", and \"3\" are \"significant\"\n this.validateSigFigures(sigFigures);\n let absRoundedValue;\n if (Math.abs(value) < 1) {\n absRoundedValue = this.getRoundedDecimalLessThanOne(\n value,\n sigFigures,\n valueExtent\n );\n } else {\n const absValueStr = Math.abs(value).toString();\n const decimalIndex = absValueStr.indexOf('.');\n let firstNDigits;\n let numZeros = 0;\n if (decimalIndex < sigFigures && decimalIndex > -1) {\n firstNDigits = absValueStr.substring(0, sigFigures + 1);\n } else {\n firstNDigits = absValueStr.substring(0, sigFigures);\n if (decimalIndex > -1) {\n numZeros = decimalIndex - sigFigures;\n } else {\n numZeros = absValueStr.length - sigFigures;\n }\n numZeros = numZeros < 0 ? 0 : numZeros;\n }\n const offset = this.getRoundingOffset(value, valueExtent);\n const lastSigDigit = Number(firstNDigits[firstNDigits.length - 1]);\n // handle cases where the last rounded significant is 9 and the value is rounded up\n if (offset === 1 && lastSigDigit === 9) {\n firstNDigits = this.getNewValueForNine(\n value,\n firstNDigits.split(''),\n absValueStr,\n sigFigures,\n valueExtent\n );\n if (firstNDigits[0] === '0') {\n firstNDigits.unshift('1');\n }\n firstNDigits = firstNDigits.join('');\n } else {\n firstNDigits =\n firstNDigits.substring(0, firstNDigits.length - 1) +\n (lastSigDigit + offset).toString();\n }\n absRoundedValue = Number(firstNDigits + '0'.repeat(numZeros));\n }\n return value >= 0 || absRoundedValue === 0\n ? absRoundedValue\n : -absRoundedValue;\n }\n\n private static validateSigFigures(sigFigures: number): void {\n if (sigFigures < 1) {\n throw new Error('sigFigures must be greater than or equal to 1');\n }\n }\n\n private static getRoundedDecimalLessThanOne(\n value: number,\n sigFigures: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n const valueStr = Math.abs(value).toString();\n let newValue = [];\n let sigDigitsFound = 0;\n for (let i = 0; i < valueStr.length; i++) {\n const char = valueStr[i];\n if (char === '.' || (char === '0' && sigDigitsFound === 0)) {\n newValue.push(char);\n } else {\n ++sigDigitsFound;\n if (sigDigitsFound <= sigFigures) {\n let newDigit = '0';\n if (sigDigitsFound === sigFigures || i === valueStr.length - 1) {\n if (char === '9') {\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i,\n valueExtent\n );\n } else {\n const offset = this.getRoundingOffset(value, valueExtent);\n newDigit = `${Number(char) + offset}`;\n }\n } else if (sigDigitsFound < sigFigures) {\n newDigit = char;\n }\n newValue.push(newDigit);\n }\n }\n }\n return parseFloat(newValue.join(''));\n }\n\n private static getNewValueForNine(\n value: number,\n newValue: string[],\n valueStr: string,\n i: number,\n valueExtent: keyof typeof ValueExtent\n ): string[] {\n const prevChar = valueStr[i - 1];\n if (prevChar === '9') {\n newValue[i - 1] = '0';\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i - 1,\n valueExtent\n );\n } else if (prevChar === '.') {\n newValue = this.getNewValueForNine(\n value,\n newValue,\n valueStr,\n i - 1,\n valueExtent\n );\n } else {\n const offset = this.getRoundingOffset(value, valueExtent);\n newValue[i - 1] = `${Number(prevChar) + offset}`;\n }\n return newValue;\n }\n\n private static getRoundingOffset(\n value: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n return (value > 0 && valueExtent === ValueExtent.max) ||\n (value < 0 && valueExtent === ValueExtent.min)\n ? 1\n : 0;\n }\n\n static getValueRoundedToInterval(\n value: number,\n interval: number,\n valueExtent: keyof typeof ValueExtent\n ): number {\n if (interval === 0) {\n return value;\n }\n const round = valueExtent === ValueExtent.max ? Math.ceil : Math.floor;\n return round(value / interval) * interval;\n }\n\n static d3Format(value: Date | number, formatter: string): string {\n return formatter\n ? isDate(value)\n ? utcFormat(formatter)(value)\n : format(formatter)(value)\n : value.toString();\n }\n\n static customFormat<Datum>(\n value: Datum,\n formatter: (x: Datum) => string\n ): string {\n return formatter ? formatter(value) : value.toString();\n }\n\n static formatForHtmlAttribute(value: string): string {\n return value.replace(/\\s/g, '-');\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n ViewEncapsulation,\n} from '@angular/core';\nimport { select, Transition } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { GenericScale } from '../core';\nimport { DataValue } from '../core/types/values';\nimport { ColorUtilities } from '../core/utilities/colors';\nimport { FillUtilities } from '../core/utilities/fill-utilities';\nimport { isNumber } from '../core/utilities/type-guards';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { BarsConfig } from './config/bars-config';\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use \"unknown\"\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const BARS = new InjectionToken<BarsComponent<unknown, DataValue>>(\n 'BarsComponent'\n);\n\nexport type BarGroupSelection = Selection<\n SVGGElement,\n number,\n SVGSVGElement,\n unknown\n>;\nexport type BarSelection = Selection<\n SVGRectElement,\n number,\n SVGGElement,\n number\n>;\nexport type BarLabelSelection = Selection<\n SVGTextElement,\n number,\n SVGGElement,\n number\n>;\n\nexport type BarDatum<T> = {\n index: number;\n quantitative: number;\n ordinal: T;\n color: string;\n};\n\nexport interface BarsTooltipDatum<Datum> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n category: string;\n };\n}\n\ntype BarsSvgElement = 'g' | 'bar' | 'label' | 'background';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-bars]',\n template: '',\n styleUrls: ['./bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: BarsComponent },\n { provide: BARS, useExisting: BarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class BarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicXyPrimaryMarks<Datum, BarsConfig<Datum, TOrdinalValue>> {\n barGroups: BarGroupSelection;\n bars: BehaviorSubject<BarSelection> = new BehaviorSubject(null);\n bars$ = this.bars.asObservable().pipe(filter((s) => !!s));\n labels: BehaviorSubject<BarLabelSelection> = new BehaviorSubject(null);\n labels$ = this.bars.asObservable().pipe(filter((s) => !!s));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n protected zone = inject(NgZone);\n public elRef = inject(ElementRef<SVGGElement>);\n\n get class(): Record<BarsSvgElement, string> {\n return {\n g: this.config.marksClass + '-group',\n bar: this.config.marksClass + '-bar',\n label: this.config.marksClass + '-label',\n background: this.config.marksClass + '-background',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config[this.config.dimensions.x].getScaleFromRange(\n this.ranges.x\n );\n const y = this.config[this.config.dimensions.y].getScaleFromRange(\n this.ranges.y\n );\n this.scales.color = this.config.color.getScale();\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawBars(transitionDuration);\n if (this.config.backgrounds) {\n this.drawBackgrounds(transitionDuration);\n }\n if (this.config.labels) {\n this.drawLabels(transitionDuration);\n }\n this.updateBarElements();\n }\n\n drawBars(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, number>(`.${this.class.g}`)\n .data<number>(this.config.valueIndices, this.config.barsKeyFunction)\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (i) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[i], i)}`.trim()\n )\n .attr('transform', (i) =>\n this.getBarGroupTransform(this.getBarDatumFromIndex(i))\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (i) =>\n this.getBarGroupTransform(this.getBarDatumFromIndex(i))\n ),\n (exit) => exit.remove()\n );\n\n this.barGroups\n .selectAll<SVGRectElement, BarDatum<TOrdinalValue>>(`.${this.class.bar}`)\n .data<BarDatum<TOrdinalValue>>((i) => [this.getBarDatumFromIndex(i)])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', this.class.bar)\n .property('key', (d) => d.ordinal)\n .attr('width', (d) => this.getBarWidth(d))\n .attr('height', (d) => this.getBarHeight(d))\n .attr('fill', (d) => this.getBarFill(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('width', (d) => this.getBarWidth(d))\n .attr('height', (d) => this.getBarHeight(d))\n .attr('fill', (d) => this.getBarFill(d)),\n (exit) => exit.remove()\n );\n }\n\n drawBackgrounds(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups\n .selectAll<SVGRectElement, number>(`.${this.class.background}`)\n .data<BarDatum<TOrdinalValue>>((i) => [this.getBarDatumFromIndex(i)])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', this.class.background)\n .attr('fill', this.config.backgrounds.color)\n .attr('transform', (d) => this.getBackgroundTransform(d))\n .attr('width', this.getBackgroundWidth())\n .attr('height', this.getBackgroundBarHeight()),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (d) => this.getBackgroundTransform(d))\n .attr('width', this.getBackgroundWidth())\n .attr('height', this.getBackgroundBarHeight()),\n (exit) => exit.remove()\n )\n .lower();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getBarGroupColorClass(i: number): string {\n return this.config.color.calculatedDomain.length > 1\n ? ValueUtilities.formatForHtmlAttribute(this.config.color.values[i])\n : '';\n }\n\n getBarDatumFromIndex(i: number): BarDatum<TOrdinalValue> {\n return {\n index: i,\n quantitative: this.config.quantitative.values[i],\n ordinal: this.config.ordinal.values[i],\n color: this.config.color.values[i],\n };\n }\n\n getBarGroupTransform(datum: BarDatum<TOrdinalValue>): string {\n const x = this.getBarX(datum);\n const y = this.getBarY(datum);\n return `translate(${x},${y})`;\n }\n\n getBarFill(datum: BarDatum<TOrdinalValue>): string {\n return this.config.customFills\n ? this.getBarPattern(datum)\n : this.getBarColor(datum);\n }\n\n drawLabels(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.barGroups\n .selectAll<SVGTextElement, BarDatum<TOrdinalValue>>(\n `.${this.class.label}`\n )\n .data<BarDatum<TOrdinalValue>>((i: number) => [\n {\n index: i,\n quantitative: this.config.quantitative.values[i],\n ordinal: this.config.ordinal.values[i],\n color: this.config.color.values[i],\n },\n ])\n .join(\n (enter) =>\n enter\n .append<SVGTextElement>('text')\n .attr('class', this.class.label)\n .style('display', this.config.labels.display ? null : 'none')\n .text((d) => this.getLabelText(d))\n .style('visiblity', 'hidden')\n .call((selection) => {\n selection.each((d, i, nodes) => {\n const bbox = nodes[i].getBBox();\n select<SVGTextElement, BarDatum<TOrdinalValue>>(nodes[i])\n .style('fill', (d) => this.getLabelColor(d, bbox))\n .attr('text-anchor', (d) => this.getLabelTextAnchor(d, bbox))\n .attr('dominant-baseline', (d) =>\n this.getLabelDominantBaseline(d, bbox)\n )\n .attr('x', this.getLabelX(d, bbox))\n .attr('y', this.getLabelY(d, bbox))\n .attr('visibility', 'visible');\n });\n }),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .text((d) => this.getLabelText(d))\n .style('visiblity', 'hidden')\n .call((selection) => {\n selection.each((d, i, nodes) => {\n const bbox = nodes[i].getBBox();\n select<SVGTextElement, BarDatum<TOrdinalValue>>(nodes[i])\n .style('fill', (d) => this.getLabelColor(d, bbox))\n .attr('text-anchor', (d) => this.getLabelTextAnchor(d, bbox))\n .attr('dominant-baseline', (d) =>\n this.getLabelDominantBaseline(d, bbox)\n )\n .attr('x', this.getLabelX(d, bbox))\n .attr('y', this.getLabelY(d, bbox))\n .attr('visibility', 'visible');\n });\n }),\n (exit) => exit.remove()\n );\n }\n\n getBarX(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.x === 'ordinal') {\n return this.getBarXOrdinal(d);\n }\n return this.getBarXQuantitative(d);\n }\n\n getBarXOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.x(d.ordinal);\n }\n\n getBarXQuantitative(d: BarDatum<TOrdinalValue>): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n const origin = this.getBarQuantitativeOrigin();\n return this.scales.x(origin);\n } else if (this.config.hasNegativeValues) {\n if (d.quantitative < 0) {\n return this.scales.x(d.quantitative);\n }\n return this.scales.x(0);\n }\n return this.scales.x(this.getQuantitativeDomainFromScale()[0]);\n }\n\n getBarY(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.y === 'ordinal') {\n return this.getBarYOrdinal(d);\n }\n return this.getBarYQuantitative(d);\n }\n\n getBarYOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.ordinal);\n }\n\n getBarYQuantitative(d: BarDatum<TOrdinalValue>): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n const origin = this.getBarQuantitativeOrigin();\n return this.scales.y(origin);\n } else if (d.quantitative < 0) {\n if (this.config.quantitative.domainIncludesZero) {\n return this.scales.y(0);\n }\n return this.scales.y(this.getQuantitativeDomainFromScale()[1]);\n }\n return this.scales.y(d.quantitative);\n }\n\n getQuantitativeDomainFromScale(): number[] {\n return this.scales[this.config.dimensions.quantitative].domain();\n }\n\n getBarWidth(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n return this.getBarDimensionQuantitative(d, 'x');\n }\n return this.getBarWidthOrdinal();\n }\n\n getBarWidthOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.x as any).bandwidth();\n }\n\n getBarHeight(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.quantitativeDimension === 'height') {\n return this.getBarDimensionQuantitative(d, 'y');\n }\n return this.getBarHeightOrdinal();\n }\n\n getBarHeightOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.y as any).bandwidth();\n }\n\n getBackgroundTransform(d: BarDatum<TOrdinalValue>): string | null {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n const range = this.scales.x.range();\n const offsetFromLeft =\n d.quantitative < 0 ? this.scales.x(d.quantitative) : this.scales.x(0);\n return `translate(${range[0] - offsetFromLeft},0)`;\n }\n const range = this.scales.y.range();\n const offsetFromBottom =\n d.quantitative < 0 ? this.scales.y(0) : this.scales.y(d.quantitative);\n return `translate(0,${range[1] - offsetFromBottom})`;\n }\n\n getBackgroundWidth(): number {\n if (this.config.dimensions.quantitativeDimension === 'width') {\n const range = this.scales.x.range();\n return range[1] - range[0];\n }\n return this.getBarWidthOrdinal();\n }\n\n getBackgroundBarHeight(): number {\n if (this.config.dimensions.quantitativeDimension === 'height') {\n const range = this.scales.y.range();\n return range[0] - range[1];\n } else {\n return this.getBarHeightOrdinal();\n }\n }\n\n getBarDimensionQuantitative(\n d: BarDatum<TOrdinalValue>,\n dimension: 'x' | 'y'\n ): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return 0;\n }\n const origin = this.getBarQuantitativeOrigin();\n return Math.abs(\n this.scales[dimension](d.quantitative) - this.scales[dimension](origin)\n );\n }\n\n getBarQuantitativeOrigin(): number {\n if (this.config.quantitative.domainIncludesZero) {\n return 0;\n }\n const domain = this.getQuantitativeDomainFromScale();\n return this.config.hasNegativeValues ? domain[1] : domain[0];\n }\n\n getBarPattern(d: BarDatum<TOrdinalValue>): string {\n const color = this.getBarColor(d);\n return FillUtilities.getFill(\n this.config.data[d.index],\n color,\n this.config.customFills\n );\n }\n\n getBarColor(d: BarDatum<TOrdinalValue>): string {\n return this.scales.color(d.color);\n }\n\n getLabelText(d: BarDatum<TOrdinalValue>): string {\n const datum = this.config.data[d.index];\n if (!isNumber(d.quantitative)) {\n return this.config.labels.noValueFunction(datum);\n }\n return this.config.quantitative.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config.quantitative.formatFunction\n )\n : ValueUtilities.d3Format(\n d.quantitative,\n this.config.quantitative.formatSpecifier\n );\n }\n\n getLabelTextAnchor(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): 'start' | 'middle' | 'end' {\n if (this.config.dimensions.isVertical) {\n return 'middle';\n }\n return this.alignTextInPositiveDirection(d, labelBbox) ? 'start' : 'end';\n }\n\n getLabelDominantBaseline(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): 'text-after-edge' | 'text-before-edge' | 'central' {\n if (this.config.dimensions.isHorizontal) {\n return 'central';\n }\n return this.alignTextInPositiveDirection(d, labelBbox)\n ? 'text-after-edge'\n : 'text-before-edge';\n }\n\n alignTextInPositiveDirection(\n d: BarDatum<TOrdinalValue>,\n labelBbox: DOMRect\n ): boolean {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return this.positionZeroOrNonNumericValueLabelInPositiveDirection();\n }\n const placeLabelOutsideBar = this.labelFitsOutsideBar(d, labelBbox);\n const isPositiveValue = d.quantitative > 0;\n return placeLabelOutsideBar ? isPositiveValue : !isPositiveValue;\n }\n\n getLabelColor(d: BarDatum<TOrdinalValue>, labelBbox: DOMRect): string {\n if (\n this.isZeroOrNonNumeric(d.quantitative) ||\n this.labelFitsOutsideBar(d, labelBbox)\n ) {\n if (this.config.backgrounds) {\n // try to use the default label color if it has enough contrast\n if (\n ColorUtilities.getContrastRatio(\n this.config.labels.color.default,\n this.config.backgrounds.color\n ) >= 4.5\n ) {\n return this.config.labels.color.default;\n }\n // if it doesn't, user the color with the higher contrast against the background\n return ColorUtilities.getHigherContrastColorForBackground(\n this.config.backgrounds.color,\n this.config.labels.color.default,\n this.config.labels.color.withinBarAlternative\n );\n }\n return this.config.labels.color.default;\n }\n const barColor = this.getBarColor(d);\n return ColorUtilities.getHigherContrastColorForBackground(\n barColor,\n this.config.labels.color.default,\n this.config.labels.color.withinBarAlternative\n );\n }\n\n labelFitsOutsideBar(d: BarDatum<TOrdinalValue>, labelBbox: DOMRect): boolean {\n const isPositiveValue = d.quantitative > 0;\n // This approach assumes that the bar labels do not wrap.\n const distanceToChartEdge = this.getBarToChartEdgeDistance(\n isPositiveValue,\n this.ranges[this.config.dimensions.quantitative],\n this.scales[this.config.dimensions.quantitative](d.quantitative)\n );\n\n if (this.config.dimensions.isHorizontal) {\n return distanceToChartEdge > labelBbox.width + this.config.labels.offset;\n }\n return distanceToChartEdge > labelBbox.height + this.config.labels.offset;\n }\n\n getBarToChartEdgeDistance(\n isPositiveValue: boolean,\n range: [number, number],\n endOfBarPosition: number\n ): number {\n const [min, max] = range[0] < range[1] ? range : [range[1], range[0]];\n\n if (endOfBarPosition <= min || endOfBarPosition >= max) {\n return 0;\n }\n\n return isPositiveValue ? max - endOfBarPosition : endOfBarPosition - min;\n }\n\n getLabelDomRect(d: BarDatum<TOrdinalValue>): DOMRect {\n const selection = this.barGroups\n .selectAll<\n SVGTextElement,\n BarDatum<TOrdinalValue>\n >(`.${this.class.label}`)\n .filter((datum) => datum.index === d.index);\n return selection.node().getBoundingClientRect();\n }\n\n getLabelX(d: BarDatum<TOrdinalValue>, bbox: DOMRect): number {\n if (this.config.dimensions.x === 'ordinal') {\n return this.getBarWidthOrdinal() / 2;\n }\n return this.getLabelQuantitativeAxisPosition(d, bbox);\n }\n\n getLabelY(d: BarDatum<TOrdinalValue>, bbox: DOMRect): number {\n if (this.config.dimensions.y === 'ordinal') {\n return this.getBarHeightOrdinal() / 2;\n }\n return this.getLabelQuantitativeAxisPosition(d, bbox);\n }\n\n getLabelQuantitativeAxisPosition(\n d: BarDatum<TOrdinalValue>,\n bbox: DOMRect\n ): number {\n if (this.isZeroOrNonNumeric(d.quantitative)) {\n return this.getLabelPositionForZeroOrNonnumericValue();\n }\n return this.getLabelPositionForNumericValue(d, bbox);\n }\n\n getLabelPositionForZeroOrNonnumericValue(): number {\n const positionInPositiveDirection =\n this.positionZeroOrNonNumericValueLabelInPositiveDirection();\n return (positionInPositiveDirection &&\n this.config.dimensions.isHorizontal) ||\n (!positionInPositiveDirection && this.config.dimensions.isVertical)\n ? this.config.labels.offset\n : -this.config.labels.offset;\n }\n\n getLabelPositionForNumericValue(\n d: BarDatum<TOrdinalValue>,\n bbox: DOMRect\n ): number {\n const isPositiveValue = d.quantitative > 0;\n const origin = this.getLabelOrigin(d, isPositiveValue);\n const placeLabelOutsideBar = this.labelFitsOutsideBar(d, bbox);\n if (\n (this.config.dimensions.isVertical && placeLabelOutsideBar) ||\n (this.config.dimensions.isHorizontal && !placeLabelOutsideBar)\n ) {\n return isPositiveValue\n ? origin - this.config.labels.offset\n : origin + this.config.labels.offset;\n }\n return isPositiveValue\n ? origin + this.config.labels.offset\n : origin - this.config.labels.offset;\n }\n\n getLabelOrigin(d: BarDatum<TOrdinalValue>, isPositiveValue: boolean): number {\n if (this.config.dimensions.isHorizontal) {\n return isPositiveValue ? this.getBarDimensionQuantitative(d, 'x') : 0;\n }\n return isPositiveValue ? 0 : this.getBarDimensionQuantitative(d, 'y');\n }\n\n positionZeroOrNonNumericValueLabelInPositiveDirection(): boolean {\n const quantitativeValues = this.config.quantitative.values;\n const someValuesArePositive = quantitativeValues.some((x) => x > 0);\n if (someValuesArePositive) {\n return true;\n }\n const domainMaxIsGreaterThanZero =\n this.getQuantitativeDomainFromScale()[1] > 0;\n const everyValueIsEitherZeroOrNonnumeric = quantitativeValues.every((x) =>\n this.isZeroOrNonNumeric(x)\n );\n return domainMaxIsGreaterThanZero && everyValueIsEitherZeroOrNonnumeric;\n }\n\n isZeroOrNonNumeric(value: unknown): boolean {\n return value === 0 || !isNumber(value);\n }\n\n updateBarElements(): void {\n const barEventElementsSelector = this.config.backgrounds?.events\n ? `.${this.class.bar}, .${this.class.background}`\n : `.${this.class.bar}`;\n const bars = select(this.elRef.nativeElement).selectAll<\n SVGRectElement,\n number\n >(barEventElementsSelector);\n const labels = select(this.elRef.nativeElement).selectAll<\n SVGTextElement,\n number\n >(`.${this.class.label}`);\n this.bars.next(bars);\n this.labels.next(labels);\n }\n\n getTooltipData(datum: Datum): BarsTooltipDatum<Datum> {\n const ordinalValue = this.config.ordinal.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.ordinal.formatFunction)\n : this.config.ordinal.valueAccessor(datum).toString();\n const quantitativeValue = this.config.quantitative.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config.quantitative.formatFunction\n )\n : ValueUtilities.d3Format(\n this.config.quantitative.valueAccessor(datum),\n this.config.quantitative.formatSpecifier\n );\n const category = this.config.color.valueAccessor(datum);\n const tooltipData: BarsTooltipDatum<Datum> = {\n datum,\n color: this.scales.color(category),\n values: {\n x:\n this.config.dimensions.x === 'ordinal'\n ? ordinalValue\n : quantitativeValue,\n y:\n this.config.dimensions.y === 'ordinal'\n ? ordinalValue\n : quantitativeValue,\n category,\n },\n };\n return tooltipData;\n }\n\n getSourceDatumFromBarDatum(barDatum: BarDatum<TOrdinalValue>): Datum {\n return this.config.data.find(\n (d) =>\n this.config.ordinal.values[barDatum.index] ===\n this.config.ordinal.valueAccessor(d) &&\n this.config.quantitative.values[barDatum.index] ===\n this.config.quantitative.valueAccessor(d)\n );\n }\n}\n","import {\n AfterViewInit,\n DestroyRef,\n Directive,\n inject,\n Input,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { pointer } from 'd3';\nimport { Observable } from 'rxjs';\nimport {\n ActionHost,\n EventAction,\n EventType,\n UnlistenFunction,\n} from './events.types';\n\n@Directive()\nexport abstract class EventsDirective<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Host extends ActionHost<unknown> = any,\n >\n implements AfterViewInit, OnDestroy\n{\n @Input() clickRemoveEvent$: Observable<void>;\n @Input() inputEvent$: Observable<unknown>;\n protected destroyRef = inject(DestroyRef);\n protected renderer = inject(Renderer2);\n\n protected abstract getElements(): Observable<Element[]>;\n protected abstract onClickRemove(): void;\n protected abstract onInputEvent(inputValue: unknown): void;\n protected abstract setPositionsFromElement(): void;\n protected abstract setupListeners(elements: Element[]): UnlistenFunction[];\n\n protected unlistenFns: UnlistenFunction[] = [];\n protected events: EventType[] = [];\n preventAction: Record<EventType, boolean> = {\n click: false,\n hover: false,\n hoverMove: false,\n input: false,\n };\n positionX: number;\n positionY: number;\n\n ngAfterViewInit(): void {\n this.getElements()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((els) => {\n this.unlistenFns.forEach((fn) => fn());\n this.unlistenFns = this.setupListeners(els);\n });\n\n if (this.clickRemoveEvent$) {\n this.clickRemoveEvent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.onClickRemove());\n }\n\n if (this.inputEvent$) {\n this.inputEvent$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => this.onInputEvent(event));\n }\n }\n\n ngOnDestroy(): void {\n this.unlistenFns.forEach((fn) => fn());\n }\n\n protected buildInteractionListeners(\n handlers: Partial<\n Record<\n EventType,\n Partial<{\n pointerenter: (e: PointerEvent, el: Element) => void;\n pointermove: (e: PointerEvent, el: Element) => void;\n pointerleave: (e: PointerEvent, el: Element) => void;\n click: (e: PointerEvent, el: Element) => void;\n }>\n >\n >\n ): Record<string, (e: PointerEvent, el: Element) => void> {\n const listeners: Record<string, (e: PointerEvent, el: Element) => void> =\n {};\n\n for (const eventType of Object.keys(handlers) as EventType[]) {\n const handler = handlers[eventType];\n if (!handler) continue;\n\n this.events.push(eventType);\n\n for (const [domEvent, fn] of Object.entries(handler)) {\n listeners[domEvent] = fn;\n }\n }\n\n return listeners;\n }\n\n protected bindEventListeners(\n elements: Element[],\n handlers: Partial<{\n pointerenter: (event: PointerEvent, el: Element) => void;\n pointermove: (event: PointerEvent, el: Element) => void;\n pointerleave: (event: PointerEvent, el: Element) => void;\n click: (event: PointerEvent, el: Element) => void;\n }>\n ): UnlistenFunction[] {\n return elements.map((el) => {\n const unlistenFns: UnlistenFunction[] = [];\n\n if (handlers.pointerenter)\n unlistenFns.push(\n this.renderer.listen(el, 'pointerenter', (e) =>\n handlers.pointerenter(e, el)\n )\n );\n if (handlers.pointermove)\n unlistenFns.push(\n this.renderer.listen(el, 'pointermove', (e) =>\n handlers.pointermove(e, el)\n )\n );\n if (handlers.pointerleave)\n unlistenFns.push(\n this.renderer.listen(el, 'pointerleave', (e) =>\n handlers.pointerleave(e, el)\n )\n );\n if (handlers.click)\n unlistenFns.push(\n this.renderer.listen(el, 'click', (e) => handlers.click(e, el))\n );\n\n return () => unlistenFns.forEach((fn) => fn());\n });\n }\n\n disableOtherActions(eventType: EventType): void {\n Object.keys(this.preventAction).forEach((key) => {\n if (key !== eventType) {\n this.preventAction[key as EventType] = true;\n }\n });\n }\n\n resumeOtherActions(eventType: EventType, cancelCurrentActions = true): void {\n Object.keys(this.preventAction).forEach((key) => {\n const isCurrent = key === eventType;\n const shouldResume = !isCurrent || cancelCurrentActions;\n if (shouldResume) {\n this.preventAction[key as EventType] = false;\n }\n });\n }\n\n setPositionsFromPointer(event: PointerEvent): void {\n [this.positionX, this.positionY] = pointer(event);\n }\n\n protected runActions<T extends EventAction<Host>>(\n actions: T[] | null | undefined,\n fn: (action: T) => void\n ): void {\n if (!actions?.length) return;\n actions.forEach(fn);\n }\n\n protected hasEvent(event: EventType): boolean {\n return this.events.includes(event);\n }\n\n protected isEventAllowed(event: EventType): boolean {\n return this.hasEvent(event) && !this.preventAction[event];\n }\n\n protected asHost(): Host {\n return this as unknown as Host;\n }\n}\n","import { Renderer2 } from '@angular/core';\n\nexport type UnlistenFunction = () => void;\nexport type ListenElement = HTMLElement | SVGElement;\n\nexport enum EventType {\n Click = 'click',\n Hover = 'hover',\n HoverMove = 'hoverMove',\n Input = 'input',\n}\n\nexport interface EventAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> {\n onStart: (host: Host) => void;\n onEnd: (host: Host) => void;\n}\n\nexport interface HoverMoveAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> extends EventAction<Host> {\n initialize?: (host: Host) => void;\n}\n\nexport interface InputEventAction<\n Host extends ActionHost<Output>,\n Output = unknown,\n> {\n onStart: (host: Host, ...args) => void;\n onEnd: (host: Host, ...args) => void;\n}\n\nexport interface ActionHost<Output> {\n getInteractionOutput(type: EventType): Output;\n setPositionsFromElement(): void;\n setPositionsFromPointer(event: PointerEvent): void;\n disableOtherActions(eventType: EventType): void;\n resumeOtherActions(\n eventType: EventType,\n cancelCurrentActions?: boolean\n ): void;\n emitInteractionOutput(output: Output): void;\n}\n\nexport interface MarksHost<Output, MarksComponent = unknown>\n extends ActionHost<Output> {\n marks: MarksComponent;\n}\n\nexport interface EventStrategy {\n bindTo(elements: Element[], renderer: Renderer2): UnlistenFunction[];\n}\n","import {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n OverlayPositionBuilder,\n} from '@angular/cdk/overlay';\n\nexport type TooltipPositionConfig = {\n originX: 'start' | 'center' | 'end';\n originY: 'top' | 'center' | 'bottom';\n overlayX: 'start' | 'center' | 'end';\n overlayY: 'top' | 'center' | 'bottom';\n};\n\nexport class TooltipPosition implements ConnectedPosition {\n originX: TooltipPositionConfig['originX'];\n originY: TooltipPositionConfig['originY'];\n overlayX: TooltipPositionConfig['overlayX'];\n overlayY: TooltipPositionConfig['overlayY'];\n weight?: number;\n offsetX?: number;\n offsetY?: number;\n panelClass?: string | string[];\n\n constructor(config: TooltipPositionConfig & Partial<ConnectedPosition>) {\n Object.assign(this, config); // Merge any additional overrides\n }\n}\n\nexport class HtmlTooltipCdkManagedPosition {\n constructor(public positions: ConnectedPosition[]) {}\n\n getPositionStrategy(\n origin: Element,\n overlayPositionBuilder: OverlayPositionBuilder\n ): FlexibleConnectedPositionStrategy {\n return overlayPositionBuilder\n .flexibleConnectedTo(origin)\n .withPositions(this.positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n }\n}\n","import {\n HtmlTooltipCdkManagedPosition,\n TooltipPosition,\n} from '../tooltips/html-tooltip/config/position/tooltip-position';\n\nexport const DEFAULT_TOOLTIP_Y_OFFSET = 2;\n\nexport abstract class TooltipPositioner {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract fromAnchor(...args: any): HtmlTooltipCdkManagedPosition;\n\n customPosition(positions: TooltipPosition[]): HtmlTooltipCdkManagedPosition {\n return new HtmlTooltipCdkManagedPosition(positions);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\n\nexport class Tooltip {\n show: boolean;\n type: 'svg' | 'html';\n\n constructor(options?: Partial<Tooltip>) {\n this.show = false;\n safeAssign(this, options);\n }\n}\n","import { ElementRef } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { Tooltip } from '../../config/tooltip';\nimport { HtmlTooltipOptions } from './html-tooltip-options';\nimport { HtmlTooltipCdkManagedPosition } from './position/tooltip-position';\nimport { HtmlTooltipSize } from './size/tooltip-size';\n\nexport class HtmlTooltipConfig extends Tooltip implements HtmlTooltipOptions {\n override type: 'html';\n applyEventsDisabledClass: boolean;\n hasBackdrop: boolean;\n origin: ElementRef<Element>;\n panelClass: string[];\n position: HtmlTooltipCdkManagedPosition;\n size: HtmlTooltipSize;\n\n constructor(options: HtmlTooltipOptions) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { HtmlTooltipSizeOptions } from './tooltip-size-options';\n\nexport class HtmlTooltipSize implements HtmlTooltipSizeOptions {\n width: number | string;\n height: number | string;\n minWidth: number | string;\n minHeight: number | string;\n maxWidth: number | string;\n maxHeight: number | string;\n\n constructor(options: HtmlTooltipSizeOptions) {\n safeAssign(this, options);\n }\n}\n","import { HtmlTooltipSize } from './tooltip-size';\n\nexport class HtmlTooltipSizeBuilder {\n _width: number | string;\n _height: number | string;\n _minWidth: number | string;\n _minHeight: number | string;\n _maxWidth: number | string;\n _maxHeight: number | string;\n\n width(width: number | string | null) {\n if (width === null) {\n this._width = undefined;\n return this;\n }\n this._width = width;\n return this;\n }\n\n height(height: number | string | null) {\n if (height === null) {\n this._height = undefined;\n return this;\n }\n this._height = height;\n return this;\n }\n\n minWidth(minWidth: number | string | null) {\n if (minWidth === null) {\n this._minWidth = undefined;\n return this;\n }\n this._minWidth = minWidth;\n return this;\n }\n\n minHeight(minHeight: number | string | null) {\n if (minHeight === null) {\n this._minHeight = undefined;\n return this;\n }\n this._minHeight = minHeight;\n return this;\n }\n\n maxWidth(maxWidth: number | string | null) {\n if (maxWidth === null) {\n this._maxWidth = undefined;\n return this;\n }\n this._maxWidth = maxWidth;\n return this;\n }\n\n maxHeight(maxHeight: number | string | null) {\n if (maxHeight === null) {\n this._maxHeight = undefined;\n return this;\n }\n this._maxHeight = maxHeight;\n return this;\n }\n\n _build(): HtmlTooltipSize {\n return new HtmlTooltipSize({\n width: this._width,\n height: this._height,\n minWidth: this._minWidth,\n minHeight: this._minHeight,\n maxWidth: this._maxWidth,\n maxHeight: this._maxHeight,\n });\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { InteractionOutput } from '../../../events/interaction-output';\nimport { HtmlTooltipConfig } from './html-tooltip-config';\nimport { HtmlTooltipCdkManagedPosition } from './position/tooltip-position';\nimport { HtmlTooltipSizeBuilder } from './size/tooltip-size-builder';\n\nconst DEFAULT = {\n _minWidth: 300,\n _applyEventsDisabledClass: true,\n};\n\n@Injectable()\nexport class VicHtmlTooltipConfigBuilder {\n private _applyEventsDisabledClass: boolean;\n private sizeBuilder: HtmlTooltipSizeBuilder;\n private _panelClass: string | string[];\n private _origin: ElementRef<Element>;\n private _hasBackdrop: boolean;\n private _position: HtmlTooltipCdkManagedPosition;\n private _show: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n this.sizeBuilder = new HtmlTooltipSizeBuilder();\n }\n\n /**\n * OPTIONAL. If set to true, the tooltip will have the class 'events-disabled' that can be used to disable pointer events.\n * This is useful when the tooltip should not interfere with user interactions, such as when it is used for informational purposes only.\n *\n * Default is true, meaning the class will be applied.\n *\n * @param apply - Whether to apply the events-disabled class or not.\n */\n applyEventsDisabledClass(apply: boolean): this {\n this._applyEventsDisabledClass = apply;\n return this;\n }\n\n /**\n * OPTIONAL. Will create a Material CDK-provided backdrop if set to true. Clicking on the backdrop will dismiss the backdrop and emit an event.\n *\n * @param hasBackdrop - Whether to show a backdrop or not.\n */\n hasBackdrop(hasBackdrop: boolean): this {\n this._hasBackdrop = hasBackdrop;\n return this;\n }\n\n /**\n * OPTIONAL. Sets CSS classes to apply to the tooltip panel.\n *\n * @param panelClass - CSS class name(s) to apply to the tooltip panel.\n */\n panelClass(panelClass: string | string[]): this {\n this._panelClass = panelClass;\n return this;\n }\n\n /**\n * Sets the origin and position of the tooltip based on the output from a BaseInteractionOutput.\n *\n * @param origin - The origin element reference.\n * @param position - Optional position configuration. If not provided, the default position from the output will be used. Note that the output has several methods to return a position that can be used here.\n */\n positionFromOutput(\n // intentionally using InteractionOutput<unknown> to allow flexibility in the type of output\n output: InteractionOutput<unknown>,\n position?: HtmlTooltipCdkManagedPosition\n ): this {\n if (output) {\n this._origin = new ElementRef(output.origin);\n this._position = position || output?.defaultPosition;\n }\n return this;\n }\n\n /**\n * Sets whether the tooltip should be shown or not.\n *\n * @param show - Whether to show the tooltip or not.\n */\n show(show: boolean): this {\n this._show = show;\n return this;\n }\n\n size(size: null): this;\n size(size: (size: HtmlTooltipSizeBuilder) => void): this;\n size(size: ((size: HtmlTooltipSizeBuilder) => void) | null): this {\n if (size === null) {\n this.sizeBuilder = undefined;\n return this;\n }\n this.initSizeBuilder();\n size(this.sizeBuilder);\n return this;\n }\n\n private initSizeBuilder(): void {\n this.sizeBuilder = new HtmlTooltipSizeBuilder();\n }\n\n getConfig(): HtmlTooltipConfig {\n this.validateBuilder();\n return new HtmlTooltipConfig({\n hasBackdrop: this._hasBackdrop,\n panelClass: this.getPanelClasses(),\n origin: this._origin,\n position: this._position,\n show: this._show,\n size: this.sizeBuilder._build(),\n });\n }\n\n private validateBuilder(): void {\n if (!this.sizeBuilder) {\n this.initSizeBuilder();\n }\n if (this._show && !this._position) {\n throw new Error('Position must be set using positionFromOutput');\n }\n }\n\n private getPanelClasses(): string[] {\n const userClasses = this._panelClass ? [this._panelClass].flat() : [];\n const panelClasses = ['vic-html-tooltip-overlay', ...userClasses].flat();\n if (this._applyEventsDisabledClass) {\n panelClasses.push('events-disabled');\n }\n return panelClasses;\n }\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TooltipPosition, TooltipPositionConfig } from './tooltip-position';\n\n// Primarily used internally in the library, though a user could use it to make custom positions\n\nexport class TooltipPositionBuilder {\n private originX?: TooltipPositionConfig['originX'];\n private originY?: TooltipPositionConfig['originY'];\n private overlayX: TooltipPositionConfig['overlayX'] = 'center';\n private overlayY: TooltipPositionConfig['overlayY'] = 'bottom';\n private currentOffsetX = 0;\n private currentOffsetY = 0;\n private additionalConfig: Partial<ConnectedPosition> = {};\n\n // From methods - set origin\n fromTopLeft(): this {\n this.originX = 'start';\n this.originY = 'top';\n return this;\n }\n\n fromTopCenter(): this {\n this.originX = 'center';\n this.originY = 'top';\n return this;\n }\n\n fromTopRight(): this {\n this.originX = 'end';\n this.originY = 'top';\n return this;\n }\n\n fromCenterLeft(): this {\n this.originX = 'start';\n this.originY = 'center';\n return this;\n }\n\n fromCenter(): this {\n this.originX = 'center';\n this.originY = 'center';\n return this;\n }\n\n fromCenterRight(): this {\n this.originX = 'end';\n this.originY = 'center';\n return this;\n }\n\n fromBottomLeft(): this {\n this.originX = 'start';\n this.originY = 'bottom';\n return this;\n }\n\n fromBottomCenter(): this {\n this.originX = 'center';\n this.originY = 'bottom';\n return this;\n }\n\n fromBottomRight(): this {\n this.originX = 'end';\n this.originY = 'bottom';\n return this;\n }\n\n // Attach methods - set overlay\n attachTopLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-left' };\n return this;\n }\n\n attachTopCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-center' };\n return this;\n }\n\n attachTopRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'top';\n this.additionalConfig = { panelClass: 'position-top-right' };\n return this;\n }\n\n attachCenterLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center-left' };\n return this;\n }\n\n attachCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center' };\n return this;\n }\n\n attachCenterRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'center';\n this.additionalConfig = { panelClass: 'position-center-right' };\n return this;\n }\n\n attachBottomLeft(): this {\n this.overlayX = 'start';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-left' };\n return this;\n }\n\n attachBottomCenter(): this {\n this.overlayX = 'center';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-center' };\n return this;\n }\n\n attachBottomRight(): this {\n this.overlayX = 'end';\n this.overlayY = 'bottom';\n this.additionalConfig = { panelClass: 'position-bottom-right' };\n return this;\n }\n\n // Offset method\n offset(offsetX: number, offsetY: number): this {\n this.currentOffsetX = offsetX;\n this.currentOffsetY = offsetY;\n return this;\n }\n\n // Additional config\n withConfig(config: Partial<ConnectedPosition>): this {\n this.additionalConfig = { ...this.additionalConfig, ...config };\n return this;\n }\n\n // Build the position\n getPosition(): TooltipPosition {\n if (!this.originX || !this.originY) {\n throw new Error('Origin position must be set using a from* method');\n }\n\n return new TooltipPosition({\n originX: this.originX,\n originY: this.originY,\n overlayX: this.overlayX,\n overlayY: this.overlayY,\n offsetX: this.currentOffsetX,\n offsetY: this.currentOffsetY,\n ...this.additionalConfig,\n });\n }\n\n // Reset builder for reuse\n reset(): this {\n this.originX = undefined;\n this.originY = undefined;\n this.overlayX = 'center';\n this.overlayY = 'bottom';\n this.currentOffsetX = 0;\n this.currentOffsetY = 0;\n this.additionalConfig = {};\n return this;\n }\n\n // Utility method for applying offsets to multiple positions\n applyOffsets(\n positions: TooltipPosition[],\n offsetX: number,\n offsetY: number\n ): TooltipPosition[] {\n return positions.map(\n (pos) =>\n new TooltipPosition({\n ...pos,\n offsetX: (pos.offsetX || 0) + offsetX,\n offsetY: (pos.offsetY || 0) + offsetY,\n })\n );\n }\n}\n","import {\n FlexibleConnectedPositionStrategy,\n GlobalPositionStrategy,\n Overlay,\n OverlayPositionBuilder,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { Subject, takeUntil } from 'rxjs';\nimport { HtmlTooltipConfig } from './config/html-tooltip-config';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'vic-html-tooltip',\n})\nexport class HtmlTooltipDirective implements OnChanges, OnDestroy {\n @Input() template: TemplateRef<HTMLElement>;\n @Input() config: HtmlTooltipConfig;\n @Output() backdropClick = new EventEmitter<void>();\n backdropUnsubscribe: Subject<void> = new Subject<void>();\n overlayRef: OverlayRef;\n portalAttached = false;\n positionStrategy: FlexibleConnectedPositionStrategy | GlobalPositionStrategy;\n onKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.hide();\n }\n };\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private overlay: Overlay,\n private overlayPositionBuilder: OverlayPositionBuilder,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n init(): void {\n if (!this.overlayRef) {\n this.createOverlayRef();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.overlayRef && this.config) {\n this.updateForConfigChanges(changes);\n } else if (this.config) {\n this.init();\n }\n }\n\n createOverlayRef(): void {\n this.backdropUnsubscribe = new Subject<void>();\n\n this.setPositionStrategy();\n this.overlayRef = this.overlay.create({\n ...this.config.size,\n panelClass: this.config.panelClass,\n scrollStrategy: this.overlay.scrollStrategies.close(),\n positionStrategy: this.positionStrategy,\n hasBackdrop: this.config.hasBackdrop,\n backdropClass: 'vic-html-tooltip-backdrop',\n });\n\n if (this.config.hasBackdrop) {\n this.subscribeToBackdropClick();\n }\n this.updateVisibility();\n }\n\n setPositionStrategy(): void {\n if (!this.config.origin || !this.config.position) {\n this.positionStrategy = this.overlayPositionBuilder.global();\n return;\n }\n\n this.positionStrategy = this.config.position.getPositionStrategy(\n this.config.origin.nativeElement,\n this.overlayPositionBuilder\n );\n }\n\n subscribeToBackdropClick(): void {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntil(this.backdropUnsubscribe))\n .subscribe(() => {\n this.backdropClick.emit();\n });\n }\n\n updateVisibility(): void {\n if (this.overlayRef) {\n if (this.config.show) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n\n subscribeToKeyboardEvents(): void {\n this.document.addEventListener('keydown', this.onKeydown, true);\n }\n\n unsubscribeFromKeyboardEvents(): void {\n this.document.removeEventListener('keydown', this.onKeydown, true);\n }\n\n show(): void {\n const tooltipPortal = this.getTemplatePortal();\n\n if (!this.overlayRef.hasAttached()) {\n this.overlayRef.attach(tooltipPortal);\n this.subscribeToKeyboardEvents();\n\n requestAnimationFrame(() => {\n this.updatePositionStrategy();\n });\n } else {\n this.updatePositionStrategy();\n }\n }\n\n getTemplatePortal(): TemplatePortal {\n return new TemplatePortal(this.template, this.viewContainerRef);\n }\n\n hide(): void {\n if (this.overlayRef.hasAttached()) {\n this.overlayRef.detach();\n this.unsubscribeFromKeyboardEvents();\n }\n }\n\n updateForConfigChanges(changes: SimpleChanges): void {\n if (this.configChanged(changes, 'position')) {\n this.updatePositionStrategy();\n }\n if (this.configChanged(changes, 'panelClass')) {\n this.updateClasses(changes['config'].previousValue.panelClass);\n }\n if (this.configChanged(changes, 'size')) {\n this.updateSize();\n }\n if (this.configChanged(changes, 'hasBackdrop')) {\n this.updateBackdrop();\n }\n this.updateVisibility();\n }\n\n updatePositionStrategy(): void {\n this.setPositionStrategy();\n if (this.positionStrategy) {\n // Only update if we have a valid strategy\n this.overlayRef.updatePositionStrategy(this.positionStrategy);\n }\n }\n\n updateClasses(prevClass: string[]): void {\n this.overlayRef.removePanelClass(prevClass);\n this.overlayRef.addPanelClass(this.config.panelClass);\n }\n\n updateSize(): void {\n this.overlayRef.updateSize(this.config.size);\n }\n\n updateBackdrop(): void {\n this.destroyBackdropSubscription();\n this.hide();\n this.destroyOverlay();\n this.createOverlayRef();\n }\n\n configChanged(\n changes: SimpleChanges,\n property: keyof HtmlTooltipConfig\n ): boolean {\n return NgOnChangesUtilities.inputObjectChanged(changes, 'config', property);\n }\n\n ngOnDestroy(): void {\n this.unsubscribeFromKeyboardEvents();\n this.destroyBackdropSubscription();\n this.destroyOverlay();\n }\n\n destroyBackdropSubscription(): void {\n this.backdropUnsubscribe.next();\n this.backdropUnsubscribe.complete();\n }\n\n destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'vic-tooltip-triangle',\n imports: [],\n templateUrl: './tooltip-triangle.component.html',\n styleUrl: './tooltip-triangle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class TooltipTriangleComponent {\n @Input() height: number = 12;\n @Input() width: number = 20;\n}\n","<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle center\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + (width / 2) + ',' + height + ' ' + width + ',0'\"\n ></path>\n </g>\n</svg>\n\n<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle right\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + (width / 2) + ',' + height + ' ' + (width / 2) + ',0'\"\n ></path>\n </g>\n</svg>\n\n<svg\n width=\"100%\"\n [attr.height]=\"height\"\n [style.--width]=\"width + 'px'\"\n class=\"vic-tooltip-svg-triangle left\"\n>\n <g class=\"svg-g\">\n <path\n class=\"triangle-path\"\n [attr.d]=\"'M 0,0 ' + '0,' + height + ' ' + (width / 2) + ',0'\"\n ></path>\n </g>\n</svg>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HtmlTooltipDirective } from './html-tooltip.directive';\nimport { TooltipTriangleComponent } from './tooltip-triangle/tooltip-triangle.component';\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n HtmlTooltipDirective,\n TooltipTriangleComponent,\n ],\n exports: [HtmlTooltipDirective, TooltipTriangleComponent],\n})\nexport class VicHtmlTooltipModule {}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class BarsTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { DataValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { BarDatum, BARS, BarsComponent } from '../bars.component';\nimport { BarsInteractionOutput } from './bars-interaction-output';\nimport { BarsTooltipPositioner } from './bars-tooltip-positioner';\n\nexport interface BarsHost<\n Datum,\n TOrdinalValue extends DataValue,\n TBarsComponent extends BarsComponent<Datum, TOrdinalValue> = BarsComponent<\n Datum,\n TOrdinalValue\n >,\n> extends MarksHost<BarsInteractionOutput<Datum>, TBarsComponent> {\n getBarDatum(): BarDatum<TOrdinalValue> | null;\n}\n\n@Directive({\n selector: '[vicBarsEvents]',\n})\nexport class BarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TBarsComponent extends BarsComponent<Datum, TOrdinalValue> = BarsComponent<\n Datum,\n TOrdinalValue\n >,\n >\n extends EventsDirective<BarsHost<Datum, TOrdinalValue>>\n implements BarsHost<Datum, TOrdinalValue, TBarsComponent>\n{\n @Input()\n hoverActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n barDatum: BarDatum<TOrdinalValue>;\n origin: SVGRectElement;\n\n constructor(@Inject(BARS) public bars: TBarsComponent) {\n super();\n }\n\n get marks(): TBarsComponent {\n return this.bars;\n }\n\n getElements(): Observable<Element[]> {\n return this.bars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getBarDatum(): BarDatum<TOrdinalValue> | null {\n return this.barDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.barDatum = select(\n el as SVGRectElement\n ).datum() as BarDatum<TOrdinalValue>;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.bars.getSourceDatumFromBarDatum(this.barDatum);\n const tooltipData = datum ? this.bars.getTooltipData(datum) : undefined;\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.barDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BarsComponent } from './bars.component';\nimport { BarsEventsDirective } from './events/bars-events.directive';\n\n@NgModule({\n imports: [BarsComponent, BarsEventsDirective],\n exports: [BarsComponent, BarsEventsDirective],\n})\nexport class VicBarsModule {}\n","import { DataValue } from '../core/types/values';\n\nexport abstract class DataDimensionBuilder<\n Datum,\n TDataValue extends DataValue,\n> {\n protected _formatFunction: (d: Datum) => string;\n protected _valueAccessor: (d: Datum) => TDataValue;\n\n /**\n * OPTIONAL. Sets a function that will be applied to the value of this dimension for display purposes.\n *\n * If provided, this function will be used instead of the format specifier (available only for quantitative dimensions)\n */\n formatFunction(formatFunction: null): this;\n formatFunction(formatFunction: (d: Datum) => string): this;\n formatFunction(formatFunction: ((d: Datum) => string) | null): this {\n if (formatFunction === null) {\n this._formatFunction = undefined;\n return this;\n }\n this._formatFunction = formatFunction;\n return this;\n }\n\n /**\n * Sets a user-provided method that extracts the value for this dimension from a datum.\n *\n * REQUIRED. for quantitative dimensions.\n *\n * OPTIONAL. for categorical and ordinal dimensions, though if not provided, the properties of those dimensions cannot reflect the data values.\n */\n valueAccessor(valueAccessor: (d: Datum) => TDataValue): this {\n this._valueAccessor = valueAccessor;\n return this;\n }\n\n protected validateValueAccessor(dimensionName: string): void {\n if (!this._valueAccessor) {\n throw new Error(\n `${dimensionName} Dimension: valueAccessor is required. Please use method 'valueAccessor' to set it.`\n );\n }\n }\n}\n","import { ScaleContinuousNumeric } from 'd3';\nimport { ValueExtent } from '../../../../core/types/values';\n\nexport enum DomainPaddingType {\n roundUp = 'roundUp',\n roundInterval = 'roundInterval',\n percentOver = 'percentOver',\n numPixels = 'numPixels',\n}\n\nexport interface PaddedDomainArguments {\n value?: number;\n valueType: keyof typeof ValueExtent;\n scaleFn?: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n unpaddedDomain?: [number, number];\n dimensionRange?: [number, number];\n}\n\nexport abstract class DomainPadding {\n abstract getPaddedValue(args: PaddedDomainArguments): number;\n\n getPaddedDomain(\n unpaddedDomain: [number, number],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scaleFn: any,\n dimensionRange?: [number, number]\n ): [number, number] {\n const domainMinArgs: PaddedDomainArguments = {\n value: unpaddedDomain[0],\n valueType: 'min',\n scaleFn,\n unpaddedDomain,\n dimensionRange: dimensionRange,\n };\n const domainMaxArgs: PaddedDomainArguments = {\n value: unpaddedDomain[1],\n valueType: 'max',\n scaleFn,\n unpaddedDomain,\n dimensionRange: dimensionRange,\n };\n let domainMin: number;\n let domainMax: number;\n if (unpaddedDomain[0] >= 0 && unpaddedDomain[1] >= 0) {\n domainMin = unpaddedDomain[0];\n domainMax = this.getPaddedValue(domainMaxArgs);\n } else if (unpaddedDomain[0] <= 0 && unpaddedDomain[1] <= 0) {\n domainMin = this.getPaddedValue(domainMinArgs);\n domainMax = unpaddedDomain[1];\n } else if (unpaddedDomain[0] < 0 && unpaddedDomain[1] > 0) {\n [domainMin, domainMax] = this.getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs,\n domainMaxArgs,\n unpaddedDomain,\n scaleFn,\n dimensionRange\n );\n }\n return [domainMin, domainMax];\n }\n\n protected getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs: PaddedDomainArguments,\n domainMaxArgs: PaddedDomainArguments,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars\n ...args: any\n ): [number, number] {\n return [\n this.getPaddedValue(domainMinArgs),\n this.getPaddedValue(domainMaxArgs),\n ];\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { PercentOverDomainPaddingOptions } from './percent-over-options';\n\nexport class PercentOverDomainPadding\n extends DomainPadding\n implements PercentOverDomainPaddingOptions\n{\n readonly percentOver: number;\n readonly type: DomainPaddingType.percentOver;\n\n constructor(options: PercentOverDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.percentOver;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return this.getQuantitativeDomainMaxPercentOver(\n args.value,\n this.percentOver\n );\n }\n\n private getQuantitativeDomainMaxPercentOver(\n value: number,\n percent: number\n ): number {\n let overValue = Math.abs(value) * (1 + percent);\n if (value < 0) overValue = -overValue;\n return overValue;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { PixelDomainPaddingOptions } from './pixel-options';\n\nexport class PixelDomainPadding\n extends DomainPadding\n implements PixelDomainPaddingOptions\n{\n readonly numPixels: number;\n readonly type: DomainPaddingType.numPixels = DomainPaddingType.numPixels;\n\n constructor(options: PixelDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.numPixels;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n let numPixels = this.numPixels;\n if (args.dimensionRange[0] > args.dimensionRange[1]) {\n // This covers the case when this is applied to the vertical axis\n // On the vertical axis, the range is [highValue, lowValue], i.e. [100, 0]\n numPixels = -1 * this.numPixels;\n }\n const value =\n args.valueType === 'min'\n ? args.unpaddedDomain[0]\n : args.unpaddedDomain[1];\n if (value === 0)\n return args.valueType === 'min' ? value - numPixels : value + numPixels;\n const adjustedPixelRange =\n args.valueType === 'min' && args.unpaddedDomain[0] < 0\n ? [args.dimensionRange[0] + numPixels, args.dimensionRange[1]]\n : [args.dimensionRange[0], args.dimensionRange[1] - numPixels];\n const scale = args.scaleFn(args.unpaddedDomain, adjustedPixelRange);\n const targetVal =\n args.valueType === 'min'\n ? args.dimensionRange[0]\n : args.dimensionRange[1];\n return scale.invert(targetVal);\n }\n\n protected override getPaddedDomainForPositiveAndNegativeValues(\n domainMinArgs: PaddedDomainArguments,\n domainMaxArgs: PaddedDomainArguments,\n unpaddedDomain: [number, number],\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>,\n dimensionRange: [number, number]\n ): [number, number] {\n let adjustedPixelRange;\n if (dimensionRange[0] < dimensionRange[1]) {\n adjustedPixelRange = [\n dimensionRange[0] + this.numPixels,\n dimensionRange[1] - this.numPixels,\n ];\n } else {\n adjustedPixelRange = [\n dimensionRange[0] - this.numPixels,\n dimensionRange[1] + this.numPixels,\n ];\n }\n const scale = scaleFn(unpaddedDomain, adjustedPixelRange);\n return [scale.invert(dimensionRange[0]), scale.invert(dimensionRange[1])];\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ValueUtilities } from '../../../../../core/utilities/values';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { RoundUpToIntervalDomainPaddingOptions } from './round-to-interval-options';\n\nexport class RoundUpToIntervalDomainPadding extends DomainPadding {\n readonly type: DomainPaddingType.roundInterval;\n readonly interval: (maxValue: number) => number;\n\n constructor(options: RoundUpToIntervalDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.roundInterval;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return ValueUtilities.getValueRoundedToInterval(\n args.value,\n this.interval(args.value),\n args.valueType\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ValueUtilities } from '../../../../../core/utilities/values';\nimport {\n DomainPadding,\n DomainPaddingType,\n PaddedDomainArguments,\n} from '../domain-padding';\nimport { RoundUpToSigFigDomainPaddingOptions } from './round-to-sig-fig-options';\n\nexport class RoundUpToSigFigDomainPadding\n extends DomainPadding\n implements RoundUpToSigFigDomainPaddingOptions\n{\n readonly sigFigures: (d: number) => number;\n readonly type: DomainPaddingType.roundUp;\n\n constructor(options: RoundUpToSigFigDomainPaddingOptions) {\n super();\n safeAssign(this, options);\n this.type = DomainPaddingType.roundUp;\n }\n\n getPaddedValue(args: PaddedDomainArguments): number {\n return ValueUtilities.getValueRoundedToNSignificantFigures(\n args.value,\n this.sigFigures(args.value),\n args.valueType\n );\n }\n}\n","import { map } from 'd3';\nimport { DataValue } from '../core/types/values';\nimport { DataDimensionOptions } from './dimension-options';\n\nexport abstract class DataDimension<Datum, TDataValue extends DataValue>\n implements DataDimensionOptions<Datum, TDataValue>\n{\n readonly dimensionType: 'number' | 'ordinal' | 'date';\n readonly formatFunction: (d: Datum) => string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly valueAccessor: (d: Datum) => TDataValue;\n /**\n * An array of values for this dimension, extracted from the data using the value accessor.\n * @see {@link valueAccessor}\n */\n values: TDataValue[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract setPropertiesFromData(data: Datum[], ...args: any): void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected abstract setDomain(...args: any): void;\n protected setValues(data: Datum[]): void {\n this.values = map(data, this.valueAccessor);\n }\n\n constructor(dimensionType: 'number' | 'ordinal' | 'date') {\n this.dimensionType = dimensionType;\n }\n}\n","import { max, min } from 'd3';\nimport { isNumber } from '../../../core/utilities/type-guards';\nimport { DataDimension } from '../../dimension';\n\n/**\n * An abstract dimension that for dimensions whose input values are numbers. It assumes that the domain is two numbers.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - The domain will be the user=provided domain if the user provides a domain.\n * - tested in: number-dimension.spec.ts\n * - The domain will be [min, max] of values if the user does not provide a domain.\n * - tested in: number-dimension.spec.ts\n * - The domain will include 0 if includeZeroInDomain is true.\n * - tested in: number-dimension.spec.ts\n * - domainIncludesZero will be true if 0 is in the domain.\n * - tested in: number-dimension.spec.ts\n */\nexport abstract class NumberDimension<Datum> extends DataDimension<\n Datum,\n number\n> {\n protected calculatedDomain: [number, number];\n readonly domain: [number, number];\n domainIncludesZero: boolean;\n readonly formatSpecifier: string;\n readonly includeZeroInDomain: boolean;\n\n setDomain(valuesOverride?: [number, number]) {\n const extents: [number, number] =\n this.domain === undefined\n ? valuesOverride || [min(this.values), max(this.values)]\n : this.domain;\n this.calculatedDomain = this.getCalculatedDomain(extents);\n this.setDomainIncludesZero();\n }\n\n protected getCalculatedDomain(domain: [number, number]): [number, number] {\n return this.includeZeroInDomain\n ? [min([domain[0], 0]), max([domain[1], 0])]\n : domain;\n }\n\n protected setDomainIncludesZero() {\n this.domainIncludesZero =\n this.calculatedDomain[0] <= 0 && 0 <= this.calculatedDomain[1];\n }\n\n // returns false if data is undefined or null or not a number\n // for some charts this may be fine\n // original intended use case: d3Line can only handle defined values\n isValidValue(x: unknown): boolean {\n return isNumber(x);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport { NumberDimension } from '../number-dimension/number-dimension';\nimport { ConcreteDomainPadding } from './domain-padding/concrete-domain-padding';\nimport { NumberChartPositionDimensionOptions } from './number-chart-position-options';\n\n/**\n * A dimension that transforms number values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The resultant scale will confirm to the ScaleContinuousNumeric interface from @types/d3. The range of the scale will be a dimension from the chart.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n * - It creates and returns a scale from a range and the a padded domain if domain padding is provided.\n * - tested in: quantitative-domain-padding.cy.ts\n * - It creates and returns a scale from a range and the regular domain if domain padding is not provided.\n * - tested in: bars.cy.ts, dots.cy.ts, lines.cy.ts, stacked-bars.cy.ts\n */\n\nexport class NumberChartPositionDimension<Datum>\n extends NumberDimension<Datum>\n implements NumberChartPositionDimensionOptions<Datum>\n{\n readonly domainPadding?: ConcreteDomainPadding;\n readonly scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n\n constructor(options: NumberChartPositionDimensionOptions<Datum>) {\n super('number');\n safeAssign(this, options);\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n }\n\n getScaleFromRange(range: [number, number]) {\n const domain = this.domainPadding\n ? this.getPaddedQuantitativeDomain(range)\n : this.calculatedDomain;\n return this.scaleFn().domain(domain).range(range);\n }\n\n private getPaddedQuantitativeDomain(\n range: [number, number]\n ): [number, number] {\n return this.domainPadding.getPaddedDomain(\n this.calculatedDomain,\n this.scaleFn,\n range\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric, scaleLinear } from 'd3';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { ConcreteDomainPadding } from './domain-padding/concrete-domain-padding';\nimport { PercentOverDomainPadding } from './domain-padding/percent-over/percent-over';\nimport { PixelDomainPadding } from './domain-padding/pixel/pixel';\nimport { RoundUpToIntervalDomainPadding } from './domain-padding/round-to-interval/round-to-interval';\nimport { RoundUpToSigFigDomainPadding } from './domain-padding/round-to-sig-fig/round-to-sig-fig';\nimport { NumberChartPositionDimension } from './number-chart-position';\n\nconst DEFAULT = {\n _includeZeroInDomain: true,\n _scaleFn: scaleLinear,\n};\n\nconst DEFAULT_PADDING = {\n pixels: 40,\n percentOver: 0.1,\n roundInterval: () => 1,\n roundUp: () => 1,\n};\n\nexport class NumberChartPositionDimensionBuilder<\n Datum,\n> extends DataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n private _includeZeroInDomain: boolean;\n private _domainPadding: ConcreteDomainPadding;\n private _scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * Should be in the form of [min, max].\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: [number, number]): this;\n domain(domain: null): this;\n domain(domain: [number, number] | null): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension for display purposes.\n */\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string | null): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a boolean that indicates whether the domain of the dimension's scale should include zero.\n *\n * @default true\n */\n includeZeroInDomain(includeZeroInDomain: boolean): this {\n this._includeZeroInDomain = includeZeroInDomain;\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value of the quantitative domain.\n *\n * For example, if the domain is [0, 100] and the percent is 0.1, the new domain will be [0, 110].\n *\n * @default 0.1\n */\n domainPaddingPercentOver(\n percentOver: number = DEFAULT_PADDING.percentOver\n ): this {\n this._domainPadding = new PercentOverDomainPadding({\n percentOver,\n });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value of the quantitative domain so that it exceeds its original value by the specified number of pixels.\n *\n * @default 40\n */\n domainPaddingPixels(numPixels: number = DEFAULT_PADDING.pixels): this {\n this._domainPadding = new PixelDomainPadding({ numPixels });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value to a number that is rounded up to the specified interval.\n *\n * @default () => 1\n */\n domainPaddingRoundUpToInterval(\n interval: (d: number) => number = DEFAULT_PADDING.roundInterval\n ): this {\n this._domainPadding = new RoundUpToIntervalDomainPadding({\n interval,\n });\n return this;\n }\n\n /**\n * OPTIONAL. Adds additional space between data values and the edge of a chart by increasing the max value to a number that is rounded up to the specified number of significant figures.\n *\n * @default () => 1\n */\n domainPaddingRoundUpToSigFig(\n sigFigures: (d: number) => number = DEFAULT_PADDING.roundUp\n ): this {\n this._domainPadding = new RoundUpToSigFigDomainPadding({\n sigFigures,\n });\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * @default d3.scaleLinear\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<number>\n ) => ScaleContinuousNumeric<number, number>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): NumberChartPositionDimension<Datum> {\n this.validateBuilder(dimensionName);\n return new NumberChartPositionDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n includeZeroInDomain: this._includeZeroInDomain,\n domainPadding: this._domainPadding,\n scaleFn: this._scaleFn,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternSet, ScaleBand, scaleBand, scalePoint, ScalePoint } from 'd3';\nimport { DataValue } from '../../../core/types/values';\nimport { DataDimension } from '../../dimension';\nimport { OrdinalChartPositionDimensionOptions } from './ordinal-chart-position-options';\n\n/**\n * A dimension that transforms string / number / Date values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The underlying scale will always be a [D3 band scale](https://d3js.org/d3-scale/band). The range of the scale will be a dimension from the chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the value that will be used to position the data on the chart.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: bars.cy.ts, dots.cy.ts, stacked-bars.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: bars.cy.ts, dots.cy.ts\n * - It checks if a value is in the domain.\n * - tested in: bars.cy.ts\n * - It creates a scale from a range.\n * - tested in: bars.cy.ts, dots.cy.ts\n * - The domain will be unique values from the user-provided domain if the user provides a domain.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain can be set in reverse order.\n * - tested in: ordinal-chart-position.spec.ts\n */\n\nexport class OrdinalChartPositionDimension<Datum, Domain extends DataValue>\n extends DataDimension<Datum, Domain>\n implements OrdinalChartPositionDimensionOptions<Datum, Domain>\n{\n readonly align: number;\n private _calculatedDomain: Domain[];\n readonly domain: Domain[];\n private internSetDomain: InternSet<Domain>;\n readonly paddingInner: number;\n readonly paddingOuter: number;\n private scaleFn: (\n domain?: Iterable<Domain>,\n range?: Iterable<number>\n ) => ScaleBand<Domain> | ScalePoint<Domain>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override readonly valueAccessor: (d: Datum, ...args: any) => Domain;\n\n constructor(\n scaleType: 'band' | 'point' = 'band',\n options: OrdinalChartPositionDimensionOptions<Datum, Domain>\n ) {\n super('ordinal');\n this.scaleFn = scaleType === 'band' ? scaleBand : scalePoint;\n safeAssign(this, options);\n }\n\n get calculatedDomain(): Domain[] {\n return this._calculatedDomain;\n }\n\n setPropertiesFromData(data: Datum[], reverseDomain: boolean = false): void {\n this.setValues(data);\n this.setDomain(reverseDomain);\n }\n\n protected setDomain(reverseDomain: boolean): void {\n let domain = this.domain;\n if (domain === undefined) {\n domain = this.values;\n }\n this.internSetDomain = new InternSet(domain);\n const uniqueValues = [...this.internSetDomain.values()];\n this._calculatedDomain = reverseDomain\n ? uniqueValues.reverse()\n : uniqueValues;\n }\n\n domainIncludes(value: Domain): boolean {\n return this.internSetDomain.has(value);\n }\n\n getScaleFromRange(\n range: [number, number]\n ): ScaleBand<Domain> | ScalePoint<Domain> {\n if (this.scaleFn === scalePoint) {\n return (this.scaleFn() as ScalePoint<Domain>)\n .domain(this._calculatedDomain)\n .range(range)\n .padding(this.paddingOuter)\n .align(this.align);\n } else {\n return (this.scaleFn() as ScaleBand<Domain>)\n .domain(this._calculatedDomain)\n .range(range)\n .paddingInner(this.paddingInner)\n .paddingOuter(this.paddingOuter)\n .align(this.align);\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { DataValue } from '../../../core/types/values';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { OrdinalChartPositionDimension } from './ordinal-chart-position';\n\nconst DEFAULT = {\n _align: 0.5,\n _paddingInner: 0.1,\n _paddingOuter: 0.1,\n _valueAccessor: (d, i) => i,\n};\n\nexport class OrdinalChartPositionDimensionBuilder<\n Datum,\n Domain extends DataValue,\n> extends DataDimensionBuilder<Datum, Domain> {\n private _align: number;\n private _domain: Domain[];\n private _paddingInner: number;\n private _paddingOuter: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the alignment of the ordinal scale and is provided to [D3's align method](https://d3js.org/d3-scale/band#band_align)\n *\n * The value must be between 0 and 1.\n *\n * @default 0.5.\n */\n align(align: null): this;\n align(align: number): this;\n align(align: number): this {\n if (align === null) {\n this._align = DEFAULT._align;\n return this;\n }\n this._align = align;\n return this;\n }\n\n /**\n * OPTIONAL. Sets an array of ordinal values that will be used to define the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: Domain[]): this;\n domain(domain: Domain[]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the inner padding of the ordinal scale and is provided to [D3's paddingInner method](https://d3js.org/d3-scale/band#band_paddingInner)\n *\n * Will have no effect if the scale is a point scale.\n *\n * The value must be between 0 and 1.\n *\n * @default 0.1.\n */\n paddingInner(paddingInner: null): this;\n paddingInner(paddingInner: number): this;\n paddingInner(paddingInner: number): this {\n if (paddingInner === null) {\n this._paddingInner = DEFAULT._paddingInner;\n return this;\n }\n this._paddingInner = paddingInner;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the outer padding of the ordinal scale and is provided to [D3's paddingOuter method](https://d3js.org/d3-scale/band#band_paddingOuter)\n *\n * The value must be between 0 and 1.\n *\n * @default 0.1.\n */\n paddingOuter(paddingOuter: null): this;\n paddingOuter(paddingOuter: number): this;\n paddingOuter(paddingOuter: number): this {\n if (paddingOuter === null) {\n this._paddingOuter = DEFAULT._paddingOuter;\n return this;\n }\n this._paddingOuter = paddingOuter;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(\n scaleType: 'band' | 'point',\n dimensionName: string\n ): OrdinalChartPositionDimension<Datum, Domain> {\n this.validateDimension(dimensionName);\n return new OrdinalChartPositionDimension(scaleType, {\n align: this._align,\n domain: this._domain,\n formatFunction: this._formatFunction,\n paddingInner: this._paddingInner,\n paddingOuter: this._paddingOuter,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateDimension(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternSet, scaleOrdinal } from 'd3';\nimport { DataValue, VisualValue } from '../../../core/types/values';\nimport { DataDimension } from '../../dimension';\nimport { OrdinalVisualValueDimensionOptions } from './ordinal-visual-value-options';\n\n/**\n * A dimension that transforms string / number / Date values into a value of type number or string.\n *\n * This dimension is intended to be used to set a visual property of an element in a chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the value that will be used to set the visual property. The third generic is the type of the range of the scale / the output value.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: ordinal-visual-value.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: ordinal-visual-value.cy.ts\n * - It checks if a value is in the domain.\n * - The domain can be set by the user passing in an array of values.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: ordinal-chart-position.spec.ts\n * - The domain will always contain only unique values.\n * - tested in: ordinal-chart-position.spec.ts\n */\n\nexport class OrdinalVisualValueDimension<\n Datum,\n Domain extends DataValue,\n Range extends VisualValue,\n> extends DataDimension<Datum, Domain> {\n private _calculatedDomain: Domain[];\n private readonly domain: Domain[];\n private internSetDomain: InternSet<Domain>;\n readonly range: Range[];\n private scale: (category: Domain) => Range;\n\n constructor(\n options: OrdinalVisualValueDimensionOptions<Datum, Domain, Range>\n ) {\n super('ordinal');\n safeAssign(this, options);\n }\n\n get calculatedDomain(): Domain[] {\n return this._calculatedDomain;\n }\n\n getScale(): (category: Domain) => Range {\n return this.scale;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n this.setScale();\n }\n\n protected setDomain(): void {\n let domain = this.domain;\n if (domain === undefined) {\n domain = this.values;\n }\n this.internSetDomain = new InternSet(domain);\n this._calculatedDomain = [...this.internSetDomain.values()];\n }\n\n private setScale(): void {\n if (this.scale === undefined) {\n this.scale = scaleOrdinal([...this.internSetDomain.values()], this.range);\n }\n }\n\n domainIncludes(value: Domain): boolean {\n return this.internSetDomain.has(value);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { schemeTableau10 } from 'd3';\nimport { DataValue, VisualValue } from '../../../core/types/values';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { OrdinalVisualValueDimension } from './ordinal-visual-value';\n\nconst DEFAULT = {\n _range: schemeTableau10,\n _valueAccessor: () => '',\n};\n\nexport class OrdinalVisualValueDimensionBuilder<\n Datum,\n Domain extends DataValue,\n Range extends VisualValue,\n> extends DataDimensionBuilder<Datum, Domain> {\n private _domain: Domain[];\n private _range: Range[];\n private _scale: (category: Domain) => Range;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets an array of categorical values that will be used to define the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: Domain[]): this;\n domain(domain: Domain[]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets an array of visual values that will be the output from D3 scale ordinal.\n *\n * For example, this could be an array of colors or sizes.\n *\n * To have all marks use the same visual value, use an array with a single element.\n *\n * Will not be used if `scale` is set by the user.\n *\n * @default d3.schemeTableau10\n */\n range(range: null): this;\n range(range: Range[]): this;\n range(range: Range[]): this {\n if (range === null) {\n this._range = DEFAULT._range as Range[];\n return this;\n }\n this._range = range;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a user-defined function that transforms a categorical value into a visual value.\n *\n * User must also provide their own implementation of `valueAccessor`.\n *\n * If a custom valueAccessor function is not provided, this function will not be used even if provided (due to default value of `valueAccessor`).\n */\n scale(scale: null): this;\n scale(scale: (category: Domain) => Range): this;\n scale(scale: (category: Domain) => Range): this {\n if (scale === null) {\n this._scale = undefined;\n return this;\n }\n this._scale = scale;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(\n dimensionName: string\n ): OrdinalVisualValueDimension<Datum, Domain, Range> {\n this.validateDimension(dimensionName);\n return new OrdinalVisualValueDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateDimension(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n if (!this._range && !this._scale) {\n throw new Error(\n `${dimensionName} Dimension: Either a range or a scale must be provided.`\n );\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsBackgroundsOptions } from './bars-backgrounds-options';\n\nexport class BarsBackgrounds {\n readonly color: string;\n readonly events: boolean;\n\n constructor(options: BarsBackgroundsOptions) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsBackgrounds } from './bars-backgrounds';\n\nconst DEFAULT = {\n _color: 'whitesmoke',\n _events: false,\n};\n\nexport class BarsBackgroundsBuilder {\n private _color: string;\n private _events: boolean;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Determines the color of the background.\n *\n * @param value - The color of the background.\n *\n * If not called, the default color is 'whitesmoke'.\n */\n color(value: string): this {\n this._color = value;\n return this;\n }\n\n /**\n * Determines whether the background is interactive or not.\n *\n * @param value - If `true`, the background is interactive and will respond to Viz Components events. If `false`, the background is not interactive.\n *\n * If not called, the default value is `false`.\n */\n events(value: boolean): this {\n this._events = value;\n return this;\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(): BarsBackgrounds {\n return new BarsBackgrounds({\n color: this._color,\n events: this._events,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { min, range } from 'd3';\nimport { DataValue } from '../../core/types/values';\nimport { FillDefinition } from '../../data-dimensions';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { OrdinalChartPositionDimension } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { BarsBackgrounds } from './backgrounds/bars-backgrounds';\nimport { BarsDimensions } from './bars-dimensions';\nimport { BarsOptions } from './bars-options';\nimport { BarsLabels } from './labels/bars-labels';\n\nexport class BarsConfig<Datum, OrdinalDomain extends DataValue>\n extends XyPrimaryMarksConfig<Datum>\n implements BarsOptions<Datum, OrdinalDomain>\n{\n barsKeyFunction: (i: number) => string;\n readonly backgrounds: BarsBackgrounds;\n readonly color: OrdinalVisualValueDimension<Datum, string, string>;\n readonly customFills: FillDefinition<Datum>[];\n readonly dimensions: BarsDimensions;\n hasNegativeValues: boolean;\n readonly labels: BarsLabels<Datum>;\n readonly ordinal: OrdinalChartPositionDimension<Datum, OrdinalDomain>;\n readonly quantitative: NumberChartPositionDimension<Datum>;\n\n constructor(\n dimensions: BarsDimensions,\n options: BarsOptions<Datum, OrdinalDomain>\n ) {\n super();\n safeAssign(this, options);\n this.dimensions = dimensions;\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setHasNegativeValues();\n this.setBarsKeyFunction();\n }\n\n protected setDimensionPropertiesFromData(): void {\n this.quantitative.setPropertiesFromData(this.data);\n this.ordinal.setPropertiesFromData(this.data, this.dimensions.isHorizontal);\n this.color.setPropertiesFromData(this.data);\n }\n\n protected setValueIndices(): void {\n this.valueIndices = range(this.data.length).filter((i) => {\n if (!this.ordinal.domainIncludes(this.ordinal.values[i])) {\n return false;\n } else {\n const ordinalValue = this.ordinal.values[i];\n const firstIndex = this.ordinal.values.indexOf(ordinalValue);\n return i === firstIndex;\n }\n });\n }\n\n protected setHasNegativeValues(): void {\n this.hasNegativeValues = min(this.quantitative.values) < 0;\n }\n\n protected setBarsKeyFunction(): void {\n this.barsKeyFunction = (i: number): string => `${this.ordinal.values[i]}`;\n }\n}\n","export interface BarsDimensions {\n x: 'ordinal' | 'quantitative';\n y: 'ordinal' | 'quantitative';\n ordinal: 'x' | 'y';\n quantitative: 'x' | 'y';\n quantitativeDimension: 'width' | 'height';\n isHorizontal: boolean;\n isVertical: boolean;\n}\n\nexport const HORIZONTAL_BARS_DIMENSIONS: BarsDimensions = {\n x: 'quantitative',\n y: 'ordinal',\n ordinal: 'y',\n quantitative: 'x',\n quantitativeDimension: 'width',\n isHorizontal: true,\n isVertical: false,\n};\n\nexport const VERTICAL_BARS_DIMENSIONS: BarsDimensions = {\n x: 'ordinal',\n y: 'quantitative',\n ordinal: 'x',\n quantitative: 'y',\n quantitativeDimension: 'height',\n isHorizontal: false,\n isVertical: true,\n};\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsLabelsOptions } from './bars-labels-options';\n\nexport class BarsLabels<Datum> implements BarsLabelsOptions<Datum> {\n color: { default: string; withinBarAlternative: string };\n display: boolean;\n noValueFunction: (d: Datum) => string;\n offset: number;\n\n constructor(options: BarsLabels<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BarsLabels } from './bars-labels';\n\nconst DEFAULT = {\n _color: {\n default: '#000000',\n withinBarAlternative: '#ffffff',\n },\n _display: true,\n _noValueFunction: () => 'N/A',\n _offset: 4,\n};\n\nexport class BarsLabelsBuilder<Datum> {\n private _color: { default: string; withinBarAlternative: string };\n private _display: boolean;\n private _noValueFunction: (d: Datum) => string;\n private _offset: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n *\n * Sets colors for the labels.\n *\n * The default label color is used for a label positioned outside of a bar. Additionally, if its contrast ratio with the bar color is higher than that of the withinBarAlternative color, it is used for a label positioned within a bar. Otherwise the withinBarAlternative color is used.\n *\n * @default { default: '#000000', withinBarAlternative: '#ffffff' }\n */\n color(color: { default: string; withinBarAlternative: string }): this {\n this._color = color;\n return this;\n }\n\n /**\n * Sets whether labels are displayed or not. Labels will be created but not displayed if this is set to false.\n *\n * A user may want to set this to false if they want labels to display on hover, for example.\n *\n * @default true\n */\n display(display: boolean): this {\n this._display = display;\n return this;\n }\n\n /**\n * Sets the function to set the text of the label when the value of the bar is null or undefined.\n *\n * If called with null, the default function is used.\n *\n * @default (d: Datum) => 'N/A'\n */\n noValueFunction(noValueFunction: null): this;\n noValueFunction(noValueFunction: (d: Datum) => string): this;\n noValueFunction(noValueFunction: ((d: Datum) => string) | null): this {\n if (noValueFunction === null) {\n this._noValueFunction = DEFAULT._noValueFunction;\n return this;\n }\n this._noValueFunction = noValueFunction;\n return this;\n }\n\n /**\n * Sets the distance between the label and the end of the bar.\n *\n * @default 4\n */\n offset(offset: number): this {\n this._offset = offset;\n return this;\n }\n\n /**\n * @internal\n * This function is for internal use only and should never be called by the user.\n */\n _build(): BarsLabels<Datum> {\n return new BarsLabels({\n color: this._color,\n display: this._display,\n noValueFunction: this._noValueFunction,\n offset: this._offset,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DataValue } from '../../core/types/values';\nimport { FillDefinition } from '../../data-dimensions';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { OrdinalChartPositionDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { BarsBackgroundsBuilder } from './backgrounds/bars-backgrounds-builder';\nimport { BarsConfig } from './bars-config';\nimport {\n BarsDimensions,\n HORIZONTAL_BARS_DIMENSIONS,\n VERTICAL_BARS_DIMENSIONS,\n} from './bars-dimensions';\nimport { BarsLabelsBuilder } from './labels/bars-labels-builder';\n\nabstract class BaseDimensionsBuilder<Datum, TOrdinalValue extends DataValue> {\n protected _ordinalDimensionBuilder: OrdinalChartPositionDimensionBuilder<\n Datum,\n TOrdinalValue\n >;\n protected _quantitativeDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n // Getter methods for VicBarsConfigBuilder to access the builders\n get ordinalDimensionBuilder() {\n return this._ordinalDimensionBuilder;\n }\n\n get quantitativeDimensionBuilder() {\n return this._quantitativeDimensionBuilder;\n }\n\n protected initOrdinalDimensionBuilder() {\n this._ordinalDimensionBuilder = new OrdinalChartPositionDimensionBuilder();\n }\n\n protected initQuantitativeDimensionBuilder() {\n this._quantitativeDimensionBuilder =\n new NumberChartPositionDimensionBuilder();\n }\n}\n\nexport class HorizontalBarsDimensionsBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BaseDimensionsBuilder<Datum, TOrdinalValue> {\n /**\n * REQUIRED. Specifies how values derived from `Datum` (of type `number`) set the x domain of the chart, and how those values are displayed.\n *\n * @param x - A function that specifies how the quantitative values that are mapped to the x dimension will be used in the chart.\n */\n x(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.initQuantitativeDimensionBuilder();\n x(this._quantitativeDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Specifies how values derived from `Datum` (may be type `string`, `number`, or `Date`, though typically `string`) set the y domain of the chart, and how those values are displayed.\n *\n * @param y - A function that specifies how ordinal/categorical values that are mapped to the y dimension will be used in the chart.\n */\n y(\n y: (y: OrdinalChartPositionDimensionBuilder<Datum, TOrdinalValue>) => void\n ): this {\n this.initOrdinalDimensionBuilder();\n y(this._ordinalDimensionBuilder);\n return this;\n }\n}\n\nexport class VerticalBarsDimensionsBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BaseDimensionsBuilder<Datum, TOrdinalValue> {\n /**\n * REQUIRED. Specifies how values derived from `Datum` (may be type `string`, `number`, or `Date`, though typically `string`) set the x domain of the chart, and how those values are displayed.\n *\n * @param x - A function that specifies how ordinal/categorical values that are mapped to the x dimension will be used in the chart.\n */\n x(\n x: (x: OrdinalChartPositionDimensionBuilder<Datum, TOrdinalValue>) => void\n ): this {\n this.initOrdinalDimensionBuilder();\n x(this._ordinalDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Specifies how values derived from `Datum` (of type `number`) set the y domain of the chart, and how those values are displayed.\n *\n * @param y - A function that specifies how the quantitative values that are mapped to the y dimension will be used in the chart.\n */\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.initQuantitativeDimensionBuilder();\n y(this._quantitativeDimensionBuilder);\n return this;\n }\n}\n\n/**\n * Builds a configuration object for a BarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicBarsConfigBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicBarsConfigBuilder<\n Datum,\n OrdinalDomain extends DataValue,\n> extends PrimaryMarksBuilder<Datum> {\n protected _customFills: FillDefinition<Datum>[];\n protected dimensions: BarsDimensions;\n protected _orientation: 'horizontal' | 'vertical';\n protected backgroundsBuilder: BarsBackgroundsBuilder;\n protected colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n protected labelsBuilder: BarsLabelsBuilder<Datum>;\n protected ordinalDimensionBuilder: OrdinalChartPositionDimensionBuilder<\n Datum,\n OrdinalDomain\n >;\n protected quantitativeDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n constructor() {\n super();\n }\n\n /**\n * OPTIONAL. Specifies properties of bars to be drawn behind the bars that represent data values. The background bars span the full width of the chart.\n *\n * @param backgrounds - A function that specifies the color of background bars and whether they respond to events, or `null` to unset the backgrounds function.\n *\n * If called with no arguments, the default background will be `whitesmoke` and events will be `false`.\n *\n * If not called, no background bars will be created.\n */\n backgrounds(backgrounds: (backgrounds: BarsBackgroundsBuilder) => void): this;\n backgrounds(): this;\n backgrounds(backgrounds: null): this;\n backgrounds(\n backgrounds: ((backgrounds: BarsBackgroundsBuilder) => void) | null | void\n ): this {\n if (backgrounds === null) {\n this.backgroundsBuilder = undefined;\n return this;\n }\n this.backgroundsBuilder = new BarsBackgroundsBuilder();\n if (backgrounds) {\n backgrounds?.(this.backgroundsBuilder);\n }\n return this;\n }\n\n /**\n * OPTIONAL. Specifies how values derived from `Datum` (of type `string`) set the color of the bars, and how those values are displayed.\n *\n * @param color - A function that specifies how values derived from `Datum` will be used to set the color of the bars, or null to unset the color., or null to unset the color function.\n *\n * If not called, all bars will be colored with the first color in `d3.schemeTableau10`, the default `range` color scale.\n */\n color(\n color: (\n color: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n color(color: null): this;\n color(\n color:\n | ((\n color: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (color === null) {\n this.colorDimensionBuilder = undefined;\n return this;\n }\n this.initColorDimensionBuilder();\n color?.(this.colorDimensionBuilder);\n return this;\n }\n\n private initColorDimensionBuilder() {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. Determines custom fills for specified bars. Intended to be used with a user-provided fill in <defs> (provided in html) whose `id` is referenced here. The `shouldApply` function is used to determine whether the fill should be applied to a given datum.\n *\n * @param values - An array of custom fills ({ defId: string; shouldApply: (d: Datum) => boolean;}[]), or `null` to unset the custom fills.\n *\n * This will override any fill set by the `color` dimension.\n */\n customFills(values: FillDefinition<Datum>[] | null): this {\n if (values === null) {\n this._customFills = undefined;\n return this;\n }\n this._customFills = values;\n return this;\n }\n\n /**\n * REQUIRED FOR HORIZONTAL BAR CHART.\n *\n * @param bars - A function that specifies properties for the horizontal bars, or `null` to not set the horizontal orientation.\n */\n horizontal(\n bars: (bars: HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void\n ): this;\n horizontal(bars: null): this;\n horizontal(\n bars:\n | ((bars: HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void)\n | null\n ): this {\n // Do not reset anything if null is passed, as vertical will set properties if no horizontal is provided.\n // allow for\n // .horizontal(bars => condition ? bars.stuff() : null)\n // .vertical(bars => !condition ? bars.stuff() : null)\n if (bars === null) return this;\n this._orientation = 'horizontal';\n this.dimensions = HORIZONTAL_BARS_DIMENSIONS;\n const builder = new HorizontalBarsDimensionsBuilder<Datum, OrdinalDomain>();\n bars(builder);\n this.ordinalDimensionBuilder = builder.ordinalDimensionBuilder;\n this.quantitativeDimensionBuilder = builder.quantitativeDimensionBuilder;\n return this;\n }\n\n /**\n * OPTIONAL. Specifies properties of labels to be rendered at the end of bars, typically used to show bar values.\n *\n * @param labels - A function that specifies properties for the labels, or `null` to unset the labels.\n *\n * If not called, no labels will be created.\n */\n labels(labels: (labels: BarsLabelsBuilder<Datum>) => void): this;\n labels(labels: null): this;\n labels(labels: ((labels: BarsLabelsBuilder<Datum>) => void) | null): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new BarsLabelsBuilder<Datum>();\n labels?.(this.labelsBuilder);\n return this;\n }\n\n /**\n * REQUIRED FOR VERTICAL BAR CHART.\n *\n * @param bars - A function that specifies properties for the vertical bars, or `null` to not set the vertical orientation.\n */\n vertical(\n bars: (bars: VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void\n ): this;\n vertical(bars: null): this;\n vertical(\n bars:\n | ((bars: VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>) => void)\n | null\n ): this {\n if (bars === null) return this;\n this._orientation = 'vertical';\n this.dimensions = VERTICAL_BARS_DIMENSIONS;\n const builder = new VerticalBarsDimensionsBuilder<Datum, OrdinalDomain>();\n bars(builder);\n this.ordinalDimensionBuilder = builder.ordinalDimensionBuilder;\n this.quantitativeDimensionBuilder = builder.quantitativeDimensionBuilder;\n return this;\n }\n\n /**\n * REQUIRED. Validates and builds the configuration object for the bars that can be passed to BarsComponent.\n *\n * The user must call this at the end of the chain of methods to build the configuration object.\n */\n getConfig(): BarsConfig<Datum, OrdinalDomain> {\n this.validateBuilder('Bars');\n return new BarsConfig(this.dimensions, {\n marksClass: 'vic-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n });\n }\n\n protected override validateBuilder(componentName: string): void {\n super.validateBuilder(componentName);\n if (!this.colorDimensionBuilder) {\n this.initColorDimensionBuilder();\n }\n if (!this._orientation) {\n // Technically we could make horizontal the default, but we want to make sure users are thinking about this.\n throw new Error(\n `${componentName} Builder: Orientation is required. Please use method 'horizontal' or 'vertical' to set orientation.`\n );\n }\n if (!this.ordinalDimensionBuilder) {\n // Note that the chart will still build if there is not ordinal dimension provided but it will not be full featured/anything we imagine users wanting, so we make this required.\n const dimension = this.getOrdinalDimensionName();\n throw new Error(\n `${componentName} Builder: ${dimension} dimension is required. Please use ${dimension.toLowerCase()} method to create dimension.`\n );\n }\n if (!this.quantitativeDimensionBuilder) {\n const dimension = this.getQuantitativeDimensionName();\n throw new Error(\n `${componentName} Builder: ${dimension} dimension is required. Please use ${dimension.toLowerCase()} method to create dimension.`\n );\n }\n }\n\n protected getOrdinalDimensionName(): string {\n return this._orientation === 'horizontal' ? 'Y' : 'X';\n }\n\n protected getQuantitativeDimensionName(): string {\n return this._orientation === 'horizontal' ? 'X' : 'Y';\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsClickEmitTooltipDataPauseOtherActions<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>) {\n const output = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsHoverShowLabels<Datum, TOrdinalValue extends DataValue>\n implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n host.marks.barGroups\n .filter((d) => d === host.getBarDatum().index)\n .select('text')\n .style('display', null);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.marks.barGroups\n .filter((d) => d === host.getBarDatum().index)\n .select('text')\n .style('display', 'none');\n }\n}\n\nexport class BarsHoverEmitTooltipData<Datum, TOrdinalValue extends DataValue>\n implements\n EventAction<BarsHost<Datum, TOrdinalValue>, BarsInteractionOutput<Datum>>\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n const output = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { BarsHost } from '../bars-events.directive';\nimport { BarsInteractionOutput } from '../bars-interaction-output';\n\nexport class BarsHoverMoveEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: BarsHost<Datum, TOrdinalValue>): void {\n const output = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: BarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","export enum Orientation {\n horizontal = 'horizontal',\n vertical = 'vertical',\n}\n\nexport enum Side {\n top = 'top',\n right = 'right',\n bottom = 'bottom',\n left = 'left',\n}\n\nexport interface ElementSpacing {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Dimensions {\n width: number;\n height: number;\n}\n\nexport interface Position {\n x: number;\n y: number;\n}\n","export interface VicValueFormats {\n integer: string;\n integerNoComma: string;\n percent: (digits: number) => string;\n decimal: (digits: number) => string;\n decimalNoComma: (digits: number) => string;\n fullYear: string;\n monthYear: string;\n monthFullYear: string;\n}\n\nexport const valueFormat: VicValueFormats = {\n integer: ',.0f',\n integerNoComma: '.0f',\n percent: (digits: number) => `.${digits}%`,\n decimal: (digits: number) => `,.${digits}f`,\n decimalNoComma: (digits: number) => `.${digits}f`,\n fullYear: '%Y',\n monthYear: '%b %Y',\n monthFullYear: '%B %Y',\n};\n","import { Injectable } from '@angular/core';\nimport { saveAs } from 'file-saver';\nimport { cloneDeep } from 'lodash-es';\nimport { unparse } from 'papaparse';\nimport { VicDataExportConfig } from './data-export-config';\n\n@Injectable({ providedIn: 'root' })\nexport class VicDataExport {\n saveCSV(name: string, dataConfigs: VicDataExportConfig[]): void {\n const blobParts = [];\n for (const dataConfig of dataConfigs) {\n let csv: string;\n\n let csvData = cloneDeep(dataConfig.data);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n csvData = csvData.map((datum: any) => {\n const returnObj = {};\n for (const column of dataConfig.columns) {\n returnObj[column.title] = column.valueAccessor(datum);\n // handle common unicode character replacements\n // d3 format's strange default minus character https://observablehq.com/@d3/d3-format\n if (typeof returnObj[column.title] === 'string') {\n returnObj[column.title] = returnObj[column.title].replace(\n /\\u2212/g,\n '-'\n );\n }\n }\n return returnObj;\n });\n\n if (dataConfig.flipped) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data: any = csvData.reduce((acc: any, curr: any) => {\n for (const key in curr) {\n if (\n dataConfig.flippedHeaderKey &&\n key === dataConfig.flippedHeaderKey\n )\n continue;\n\n const valueToAdd =\n curr[key] instanceof String || typeof curr[key] === 'string'\n ? `\"${curr[key]}\"`\n : curr[key];\n if (key in acc) {\n acc[key] += `,${valueToAdd}`;\n } else {\n acc[key] = `${valueToAdd}`;\n }\n }\n return acc;\n }, {});\n\n csv = '';\n if (dataConfig.flippedHeaderKey) {\n csv += ',';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n csv += csvData.reduce((acc: any, curr: any) => {\n if (acc !== '') {\n acc += `,${curr[dataConfig.flippedHeaderKey]}`;\n } else {\n acc += `${curr[dataConfig.flippedHeaderKey]}`;\n }\n return acc;\n }, '');\n }\n\n for (const key of Object.keys(data)) {\n if (csv !== '') {\n csv += '\\r\\n';\n }\n csv += `${key},${data[key]}`;\n }\n } else {\n csv = unparse(csvData);\n }\n\n for (let i = 0; i < dataConfig.marginBottom; i++) {\n csv = `${csv}\\r\\n`;\n }\n blobParts.push(csv);\n }\n const blob = new Blob(blobParts, { type: 'text/csv;charset=utf-8' });\n saveAs.saveAs(blob, `${name}.csv`);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { valueFormat } from '../core/utilities/value-format';\nimport { ValueUtilities } from '../core/utilities/values';\n\nexport class VicColumnConfig {\n title: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n valueAccessor: (x: any) => any;\n\n constructor(options?: Partial<VicColumnConfig>) {\n safeAssign(this, options);\n }\n}\n\nexport class VicDataExportConfig {\n data: unknown[];\n /**\n * If true, the data will be flipped.\n * Data: {a: 1, b: 2}, {a: 3, b: 4}\n * Output CSV:\n * a | 1 | 3\n * b | 2 | 4\n */\n flipped = false;\n /**\n * If provided, the flipped data's header will be set.\n * Data: {a: 1, b: 2, category: shrimp}, {a: 3, b: 4, category: lobster}\n * Output CSV:\n * shrimp | lobster\n * a | 1 | 3\n * b | 2 | 4\n */\n flippedHeaderKey: string;\n /**\n * Specifies the keys on each object to include in the csv,\n * using default titles (converts thisIsAKey to This Is A Key) and values (object.thisIsAKey).\n * Data: {myKey: 1, otherKey: 2}, {myKey: 3, otherKey: 4}\n * defaultColumnList: [myKey]\n * Output CSV:\n * My Key\n * 1\n * 3\n */\n defaultColumnList: string[] = [];\n /**\n * If true, all keys from the first object in the data array\n * are used to populate defaultColumnList\n */\n includeAllKeysAsDefault = false;\n /**\n * A ColumnConfig needs to be provided for any column that can't use defaults\n * e.g. if there's a special title, the data needs to be formatted in some way,\n * sometimes certain fields are suppressed, etc.\n */\n columns: VicColumnConfig[] = [];\n marginBottom = 0;\n constructor(config?: Partial<VicDataExportConfig>) {\n safeAssign(this, config);\n if (this.includeAllKeysAsDefault && this.data) {\n this.defaultColumnList = Object.keys(this.data[0]);\n }\n this.defaultColumnList.forEach((key) => {\n this.columns.push(\n new VicColumnConfig({\n title: key !== this.flippedHeaderKey ? this.convertToTitle(key) : key,\n valueAccessor: (x) =>\n x[key] instanceof Date\n ? ValueUtilities.d3Format(x[key], valueFormat.monthYear)\n : x[key],\n })\n );\n });\n }\n\n convertToTitle(key: string): string {\n /**\n * Will convert:\n * - thisString -> This String\n * - 123String -> 123 String\n * - 123string -> 123 string\n * - string123 -> String 123\n * - thisSTRING -> This STRING\n * - thisSTRiNG -> This STRi NG\n */\n let converted_key =\n key.charAt(0).toUpperCase() +\n key.slice(1).replace(/([a-z])([A-Z])/g, (match, p1, p2) => p1 + ' ' + p2);\n converted_key = converted_key.replace(\n /([a-zA-Z])(\\d+)/g,\n (match, p1, p2) => p1 + ' ' + p2\n );\n converted_key = converted_key.replace(\n /(\\d+)([a-zA-Z])/g,\n (match, p1, p2) => p1 + ' ' + p2\n );\n return converted_key;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleTime, max, min } from 'd3';\nimport { isDate } from '../../../core/utilities/type-guards';\nimport { DataDimension } from '../../dimension';\nimport { DateChartPositionDimensionOptions } from './date-chart-position-options';\n\n/**\n * A dimension that transforms Date values into a position on a chart.\n *\n * This dimension is used for the positional dimensions of a chart, such as x and y. The underlying scale will always be a [D3 time scale](https://d3js.org/d3-scale/time). The range of the scale will be a dimension from the chart.\n *\n * The generic is the type of the data that will be passed to the dimension.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: lines.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: lines.cy.ts\n * - It creates and returns a scale from a range.\n * - tested in: lines.cy.ts\n * - It checks if a value is in valid.\n * - tested in: lines.cy.ts\n * - The domain will be unique values from the user-provided domain if the user provides a domain.\n * - tested in: date-chart-position.spec.ts\n * - The domain will be unique values from the data if no custom domain is given by the user.\n * - tested in: date-chart-position.spec.ts\n * - The domain can be set in reverse order.\n * - tested in: date-chart-position.spec.ts\n */\n\nexport class DateChartPositionDimension<Datum>\n extends DataDimension<Datum, Date>\n implements DateChartPositionDimensionOptions<Datum>\n{\n private calculatedDomain: [Date, Date];\n readonly domain: [Date, Date];\n readonly formatSpecifier: string;\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>;\n\n constructor(options: DateChartPositionDimensionOptions<Datum>) {\n super('date');\n safeAssign(this, options);\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n }\n\n protected setDomain() {\n const extents: [Date, Date] =\n this.domain === undefined\n ? [min(this.values), max(this.values)]\n : this.domain;\n this.calculatedDomain = extents;\n }\n\n getScaleFromRange(range: [number, number]): ScaleTime<number, number> {\n return this.scaleFn().domain(this.calculatedDomain).range(range);\n }\n\n // returns false if data is undefined or null of not a Date\n // for some charts this may be fine\n // original intended use case: d3Line can only handle defined values\n isValidValue(x: unknown): boolean {\n return isDate(x);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleTime, scaleUtc } from 'd3';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { DateChartPositionDimension } from './date-chart-position';\n\nconst DEFAULT = {\n _scaleFn: scaleUtc,\n _formatSpecifier: '%Y %m',\n};\n\nexport class DateChartPositionDimensionBuilder<\n Datum,\n> extends DataDimensionBuilder<Datum, Date> {\n private _domain: [Date, Date];\n private _formatSpecifier: string;\n private _scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: [Date, Date]): this;\n domain(domain: [Date, Date]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to values from this dimension for display purposes, for example, in a tooltip.\n *\n * This is a string that is passed to D3's timeFormat function.\n *\n * @default '%Y %m'\n */\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: string): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * @default d3.scaleUtc\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<Date>,\n range?: Iterable<number>\n ) => ScaleTime<number, number>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): DateChartPositionDimension<Datum> {\n this.validateBuilder(dimensionName);\n return new DateChartPositionDimension<Datum>({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n scaleFn: this._scaleFn,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName): void {\n this.validateValueAccessor(dimensionName);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric } from 'd3';\nimport { VisualValue } from '../../../core';\nimport { NumberDimension } from '../number-dimension/number-dimension';\nimport { NumberVisualValueDimensionOptions } from './number-visual-value-options';\n\n/**\n * A dimension that transforms number values into a value of type number or string.\n *\n * This dimension is intended to be used to set a visual property of an element in a chart.\n *\n * The first generic is the type of the data that will be passed to the dimension. The second generic is the type of the range of the scale / the output value.\n *\n * TESTABLE FUNCTIONALITY\n *\n * - It extracts values for the dimension from data.\n * - tested in: dots.cy.ts\n * - It sets the domain of the dimension.\n * - tested in: dots.cy.ts\n * - It set the scale from the calculated domain and the user-provided range of the user does not provide a scale.\n * - tested in: dots.cy.ts\n */\n\nexport class NumberVisualValueDimension<\n Datum,\n Range extends VisualValue,\n> extends NumberDimension<Datum> {\n readonly range: [Range, Range];\n private scale: (value: number) => Range;\n readonly scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>;\n\n constructor(options: NumberVisualValueDimensionOptions<Datum, Range>) {\n super('number');\n safeAssign(this, options);\n }\n\n getScale(): (value: number) => Range {\n return this.scale;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n this.setValues(data);\n this.setDomain();\n this.setScale();\n }\n\n private setScale(): void {\n if (this.scale === undefined) {\n this.scale = this.scaleFn()\n .domain(this.calculatedDomain)\n .range(this.range);\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ScaleContinuousNumeric, scaleLinear } from 'd3';\nimport { VisualValue } from '../../../core';\nimport { DataDimensionBuilder } from '../../dimension-builder';\nimport { NumberVisualValueDimension } from './number-visual-value';\n\nconst DEFAULT = {\n _includeZeroInDomain: false,\n _scaleFn: scaleLinear,\n};\n\nexport class NumberVisualValueDimensionBuilder<\n Datum,\n Range extends VisualValue,\n> extends DataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n private _includeZeroInDomain: boolean;\n private _range: [Range, Range];\n private _scale: (value: number) => Range;\n private _scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale.\n *\n * Should be in the form of [min, max].\n *\n * If not provided, the domain will be determined by the data.\n */\n domain(domain: null): this;\n domain(domain: [number, number]): this;\n domain(domain: [number, number]): this {\n if (domain === null) {\n this._domain = undefined;\n return this;\n }\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension for display purposes.\n */\n formatSpecifier(formatSpecifier: null): this;\n formatSpecifier(formatSpecifier: string): this;\n formatSpecifier(formatSpecifier: string): this {\n if (formatSpecifier === null) {\n this._formatSpecifier = undefined;\n return this;\n }\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a boolean that indicates whether the domain of the dimension's scale should include zero.\n *\n * @default false\n */\n includeZeroInDomain(includeZeroInDomain: boolean): this {\n this._includeZeroInDomain = includeZeroInDomain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a range of visual values that will be the output from D3 scale linear.\n *\n * If not provided, a scale must be provided.\n *\n * For example, this could be a range of colors or sizes.\n *\n * To have all marks use the same visual value, use an array with a single element.\n */\n range(range: null): this;\n range(range: [Range, Range]): this;\n range(range: [Range, Range]): this {\n if (range === null) {\n this._range = undefined;\n return this;\n }\n this._range = range;\n return this;\n }\n\n /**\n * OPTIONAL. This is a D3 scale function that maps values from the dimension's domain to the dimension's range.\n *\n * If the user provides a custom scale function through the `scale` method, this will be ignored.\n *\n * @default d3.scaleLinear\n */\n scaleFn(scaleFn: null): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>\n ): this;\n scaleFn(\n scaleFn: (\n domain?: Iterable<number>,\n range?: Iterable<Range>\n ) => ScaleContinuousNumeric<Range, Range>\n ): this {\n if (scaleFn === null) {\n this._scaleFn = undefined;\n return this;\n }\n this._scaleFn = scaleFn;\n return this;\n }\n\n /**\n * OPTIONAL. Allows a user to set a completely custom scale that transforms the value returned by this dimension's valueAccessor into a visual value (string or number).\n *\n * If not provided, a range must be provided.\n *\n * If provided, this will override any values provided to domain, range, and scaleFn.\n */\n scale(scale: null): this;\n scale(scale: (value: number) => Range): this;\n scale(scale: (value: number) => Range): this {\n if (scale === null) {\n this._scale = undefined;\n return this;\n }\n this._scale = scale;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n *\n * @param dimensionName A user-intelligible name for the dimension being built. Used for error messages. Should be title cased.\n */\n _build(dimensionName: string): NumberVisualValueDimension<Datum, Range> {\n this.validateBuilder(dimensionName);\n return new NumberVisualValueDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n includeZeroInDomain: this._includeZeroInDomain,\n range: this._range,\n scaleFn: this._scaleFn,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n\n private validateBuilder(dimensionName: string): void {\n this.validateValueAccessor(dimensionName);\n if (!this._range && !this._scale) {\n throw new Error(\n `${dimensionName} Dimension: Either a range or a scale must be provided.`\n );\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range } from 'd3';\nimport { DataValue } from '../../core';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { NumberDimension } from '../../data-dimensions/continuous-quantitative/number-dimension/number-dimension';\nimport { NumberVisualValueDimension } from '../../data-dimensions/continuous-quantitative/number-visual-value/number-visual-value';\nimport { DataDimension } from '../../data-dimensions/dimension';\nimport { OrdinalChartPositionDimension } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { Stroke } from '../../stroke/stroke';\nimport { DotsOptions } from './dots-options';\n\nexport class DotsConfig<\n Datum,\n XOrdinalDomain extends DataValue = string,\n YOrdinalDomain extends DataValue = string,\n >\n extends XyPrimaryMarksConfig<Datum>\n implements DotsOptions<Datum, XOrdinalDomain, YOrdinalDomain>\n{\n fill:\n | OrdinalVisualValueDimension<Datum, string, string>\n | NumberVisualValueDimension<Datum, string>;\n opacity: number;\n pointerDetectionRadius: number;\n radius:\n | OrdinalVisualValueDimension<Datum, string, number>\n | NumberVisualValueDimension<Datum, number>;\n stroke: Stroke;\n x:\n | NumberChartPositionDimension<Datum>\n | DateChartPositionDimension<Datum>\n | OrdinalChartPositionDimension<Datum, XOrdinalDomain>;\n y:\n | NumberChartPositionDimension<Datum>\n | DateChartPositionDimension<Datum>\n | OrdinalChartPositionDimension<Datum, YOrdinalDomain>;\n\n constructor(options: DotsOptions<Datum, XOrdinalDomain, YOrdinalDomain>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n }\n\n protected setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data, this.y.dimensionType === 'ordinal');\n this.fill.setPropertiesFromData(this.data);\n this.radius.setPropertiesFromData(this.data);\n }\n\n protected setValueIndices(): void {\n this.valueIndices = range(this.data.length).filter(\n (i) => this.isValidValue('x', i) && this.isValidValue('y', i)\n );\n }\n\n private isValidValue(dimension: 'x' | 'y', i: number): boolean {\n const config = this[dimension];\n if (this.isContinuousQuantitativeDimension(config)) {\n return config.isValidValue(config.values[i]);\n } else {\n return true;\n }\n }\n\n isContinuousQuantitativeDimension(\n dimension: DataDimension<Datum, DataValue>\n ): dimension is NumberDimension<Datum> {\n return (\n dimension.dimensionType === 'number' || dimension.dimensionType === 'date'\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { schemeTableau10 } from 'd3';\nimport { DataValue } from '../../core';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { NumberVisualValueDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-visual-value/number-visual-value-builder';\nimport { OrdinalChartPositionDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-chart-position/ordinal-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { DotsConfig } from './dots-config';\n\nconst DEFAULT = {\n _pointerDetectionRadius: 12,\n _fill: 'lightgray',\n _opacity: 1,\n _radius: 2,\n};\n\n@Injectable()\nexport class VicDotsConfigBuilder<\n Datum,\n XOrdinalDomain extends DataValue = string,\n YOrdinalDomain extends DataValue = string,\n> extends PrimaryMarksBuilder<Datum> {\n private _opacity: number;\n private _pointerDetectionRadius: number;\n private fillBuilderCategorical: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private fillBuilderNumber: NumberVisualValueDimensionBuilder<Datum, string>;\n private fillBuilderConst: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private radiusBuilderCategorical: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n number\n >;\n private radiusBuilderNumber: NumberVisualValueDimensionBuilder<Datum, number>;\n private radiusBuilderConst: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n number\n >;\n private strokeBuilder: StrokeBuilder;\n private xBuilderNumeric: NumberChartPositionDimensionBuilder<Datum>;\n private xBuilderDate: DateChartPositionDimensionBuilder<Datum>;\n private xBuilderOrdinal: OrdinalChartPositionDimensionBuilder<\n Datum,\n XOrdinalDomain\n >;\n private yBuilderNumeric: NumberChartPositionDimensionBuilder<Datum>;\n private yBuilderDate: DateChartPositionDimensionBuilder<Datum>;\n private yBuilderOrdinal: OrdinalChartPositionDimensionBuilder<\n Datum,\n YOrdinalDomain\n >;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the appearance of the fill for the dots using a color string.\n *\n * If a string is passed, it will be used as the color for all dots.\n *\n * @default 'schemeTableau10[0]'\n */\n fill(fill: null): this;\n fill(fill: string): this;\n fill(fill: string | null): this {\n if (fill === null) {\n this.fillBuilderConst = undefined;\n return this;\n }\n this.fillBuilderConst = new OrdinalVisualValueDimensionBuilder();\n this.fillBuilderConst.valueAccessor(() => '').range([fill]);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the fill for the dots using a categorical dimension.\n *\n */\n fillCategorical(fill: null): this;\n fillCategorical(\n fill: (\n fill: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n fillCategorical(\n fill:\n | ((\n fill: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (fill === null) {\n this.fillBuilderCategorical = undefined;\n return this;\n }\n this.fillBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n fill(this.fillBuilderCategorical);\n return this;\n }\n\n fillNumeric(fill: null): this;\n fillNumeric(\n fill: (fill: NumberVisualValueDimensionBuilder<Datum, string>) => void\n ): this;\n fillNumeric(\n fill:\n | ((fill: NumberVisualValueDimensionBuilder<Datum, string>) => void)\n | null\n ): this {\n if (fill === null) {\n this.fillBuilderNumber = undefined;\n return this;\n }\n this.initFillBuilderNumber();\n fill(this.fillBuilderNumber);\n return this;\n }\n\n private initFillBuilderNumber(): void {\n this.fillBuilderNumber = new NumberVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. Sets the opacity of the dots.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. The size of the radius of the dots\n *\n * This is temporarily a constant.\n *\n * @default 2\n */\n radius(radius: null): this;\n radius(radius: number): this;\n radius(radius: number | null): this {\n if (radius === null) {\n this.radiusBuilderConst = undefined;\n return this;\n }\n this.radiusBuilderConst = new OrdinalVisualValueDimensionBuilder();\n this.radiusBuilderConst.range([radius]);\n return this;\n }\n\n radiusCategorical(radius: null): this;\n radiusCategorical(\n radius: (\n radius: OrdinalVisualValueDimensionBuilder<Datum, string, number>\n ) => void\n ): this;\n radiusCategorical(\n radius:\n | ((\n radius: OrdinalVisualValueDimensionBuilder<Datum, string, number>\n ) => void)\n | null\n ): this {\n if (radius === null) {\n this.radiusBuilderCategorical = undefined;\n return this;\n }\n this.radiusBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n radius(this.radiusBuilderCategorical);\n return this;\n }\n\n radiusNumeric(radius: null): this;\n radiusNumeric(\n radius: (radius: NumberVisualValueDimensionBuilder<Datum, number>) => void\n ): this;\n radiusNumeric(\n radius: (\n radius: NumberVisualValueDimensionBuilder<Datum, number>\n ) => void | null\n ): this {\n if (radius === null) {\n this.radiusBuilderNumber = undefined;\n return this;\n }\n this.radiusBuilderNumber = new NumberVisualValueDimensionBuilder();\n radius(this.radiusBuilderNumber);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the stroke for the dots.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xDate(x: null): this;\n xDate(x: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xBuilderDate = undefined;\n return this;\n }\n this.xBuilderDate = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xBuilderDate);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xNumeric(x: null): this;\n xNumeric(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xBuilderNumeric = undefined;\n return this;\n }\n this.xBuilderNumeric = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xBuilderNumeric);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xOrdinal(x: null): this;\n xOrdinal(\n x: (x: OrdinalChartPositionDimensionBuilder<Datum, XOrdinalDomain>) => void\n ): this;\n xOrdinal(\n x:\n | ((\n x: OrdinalChartPositionDimensionBuilder<Datum, XOrdinalDomain>\n ) => void)\n | null\n ): this {\n if (x === null) {\n this.xBuilderDate = undefined;\n return this;\n }\n this.xBuilderOrdinal = new OrdinalChartPositionDimensionBuilder<\n Datum,\n XOrdinalDomain\n >();\n x(this.xBuilderOrdinal);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yDate(y: null): this;\n yDate(y: (y: DateChartPositionDimensionBuilder<Datum>) => void): this;\n yDate(\n y: ((y: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (y === null) {\n this.yBuilderDate = undefined;\n return this;\n }\n this.yBuilderDate = new DateChartPositionDimensionBuilder<Datum>();\n y(this.yBuilderDate);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yNumeric(y: null): this;\n yNumeric(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n yNumeric(\n y: ((y: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (y === null) {\n this.yBuilderNumeric = undefined;\n return this;\n }\n this.yBuilderNumeric = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yBuilderNumeric);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n yOrdinal(y: null): this;\n yOrdinal(\n y: (y: OrdinalChartPositionDimensionBuilder<Datum, YOrdinalDomain>) => void\n ): this;\n yOrdinal(\n y:\n | ((\n y: OrdinalChartPositionDimensionBuilder<Datum, YOrdinalDomain>\n ) => void)\n | null\n ): this {\n if (y === null) {\n this.yBuilderOrdinal = undefined;\n return this;\n }\n this.yBuilderOrdinal = new OrdinalChartPositionDimensionBuilder<\n Datum,\n YOrdinalDomain\n >();\n y(this.yBuilderOrdinal);\n return this;\n }\n\n /**\n * REQUIRED. Validates and builds the configuration object for the bars that can be passed to BarsComponent.\n *\n * The user must call this at the end of the chain of methods to build the configuration object.\n */\n getConfig(): DotsConfig<Datum, XOrdinalDomain, YOrdinalDomain> {\n this.validateBuilder();\n const fillName = 'Dots Fill';\n const radiusName = 'Dots Radius';\n const xName = 'Dots X';\n const yName = 'Dots Y';\n const fillBuilder = this.fillBuilderCategorical\n ? this.fillBuilderCategorical\n : this.fillBuilderNumber || this.fillBuilderConst;\n const radiusBuilder = this.radiusBuilderCategorical\n ? this.radiusBuilderCategorical\n : this.radiusBuilderNumber || this.radiusBuilderConst;\n return new DotsConfig<Datum, XOrdinalDomain, YOrdinalDomain>({\n marksClass: 'vic-dots',\n data: this._data,\n datumClass: this._datumClass,\n fill: fillBuilder._build(fillName),\n mixBlendMode: this._mixBlendMode,\n opacity: this._opacity,\n pointerDetectionRadius: this._pointerDetectionRadius,\n radius: radiusBuilder._build(radiusName),\n stroke: this.strokeBuilder?._build(),\n x: this.xBuilderDate\n ? this.xBuilderDate._build(xName)\n : this.xBuilderNumeric\n ? this.xBuilderNumeric._build(xName)\n : this.xBuilderOrdinal._build('point', xName),\n y: this.xBuilderDate\n ? this.yBuilderDate._build(yName)\n : this.yBuilderNumeric\n ? this.yBuilderNumeric._build(yName)\n : this.yBuilderOrdinal._build('point', yName),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Lines');\n const fillBuilders = [\n this.fillBuilderCategorical,\n this.fillBuilderNumber,\n this.fillBuilderConst,\n ];\n const numFillBuilders = fillBuilders.filter(\n (builder) => builder !== undefined\n ).length;\n if (numFillBuilders === 0) {\n this.fillBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n this.fillBuilderCategorical.range([schemeTableau10[0]]);\n }\n if (numFillBuilders > 1) {\n throw new Error(\n `Dots Builder: Only one fill method can be called with a truthy value. Curently ${numFillBuilders} are called.`\n );\n }\n const radiusBuilders = [\n this.radiusBuilderCategorical,\n this.radiusBuilderNumber,\n this.radiusBuilderConst,\n ];\n const numRadiusBuilders = radiusBuilders.filter(\n (builder) => builder !== undefined\n ).length;\n if (numRadiusBuilders === 0) {\n this.radiusBuilderCategorical = new OrdinalVisualValueDimensionBuilder();\n this.radiusBuilderCategorical.range([2]);\n }\n if (numRadiusBuilders > 1) {\n throw new Error(\n `Dots Builder: Only one radius method can be called with a truthy value. Curently ${numRadiusBuilders} are called.`\n );\n }\n if (\n +!!this.xBuilderNumeric +\n +!!this.xBuilderDate +\n +!!this.xBuilderOrdinal !==\n 1\n ) {\n throw new Error(\n 'Dots Builder: Exactly one X dimension is required. Please use one of `xDate`, `xNumeric`, or `xOrdinal` to set it.'\n );\n }\n if (\n +!!this.yBuilderNumeric +\n +!!this.yBuilderDate +\n +!!this.yBuilderOrdinal !==\n 1\n ) {\n throw new Error(\n 'Dots Builder: Exactly one Y dimension is required. Please use one of `yDate`, `yNumeric`, or `yOrdinal` to set it.'\n );\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { DataValue, GenericScale } from '../core';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { NumberDimension } from '../data-dimensions/continuous-quantitative/number-dimension/number-dimension';\nimport { DataDimension } from '../data-dimensions/dimension';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { DotsConfig } from './config/dots-config';\n\nexport const DOTS = new InjectionToken<DotsComponent<unknown>>('DotsComponent');\n\nexport type DotGroupSelection = Selection<\n SVGGElement,\n DotDatum,\n SVGGElement,\n unknown\n>;\nexport type DotSelection = Selection<\n SVGCircleElement,\n DotDatum,\n SVGGElement,\n DotDatum\n>;\nexport type DotLabelSelection = Selection<\n SVGTextElement,\n DotDatum,\n SVGGElement,\n DotDatum\n>;\n\nexport type DotDatum = {\n index: number;\n x: DataValue;\n y: DataValue;\n fill: string | number;\n radius: string | number;\n};\n\nexport interface DotsTooltipDatum<Datum> {\n datum: Datum;\n values: {\n x: string;\n y: string;\n fill: string | number;\n radius: string | number;\n };\n color: string;\n}\n\ntype DotsSvgElement = 'g' | 'dot';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-dots]',\n template: '',\n styleUrl: './dots.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: DotsComponent },\n { provide: DOTS, useExisting: DotsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixed-blend-mode]': 'config.mixBlendMode',\n },\n})\nexport class DotsComponent<Datum> extends VicXyPrimaryMarks<\n Datum,\n DotsConfig<Datum>\n> {\n dotGroups: DotGroupSelection;\n dots: BehaviorSubject<DotSelection> = new BehaviorSubject(null);\n dots$ = this.dots.asObservable().pipe(filter((s) => !!s));\n override scales: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill: GenericScale<any, any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n radius: GenericScale<any, any>;\n } & XyChartScales = {\n fill: undefined,\n radius: undefined,\n x: undefined,\n y: undefined,\n useTransition: undefined,\n };\n private elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n private zone = inject(NgZone);\n\n get class(): Record<DotsSvgElement, string> {\n return {\n g: this.config.marksClass + '-group',\n dot: this.config.marksClass + '-dot',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.fill = this.config.fill.getScale();\n this.scales.radius = this.config.radius.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawDots(transitionDuration);\n this.updateDotElements();\n }\n\n drawDots(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n .duration(transitionDuration);\n\n this.dotGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, DotDatum>(`.${this.class.g}`)\n .data<DotDatum>(\n this.config.valueIndices.map((i) => this.getDotDatumFromIndex(i))\n )\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (d) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[d.index], d.index)}`.trim()\n )\n .attr(\n 'transform',\n (d) => `translate(${this.scales.x(d.x)}, ${this.scales.y(d.y)})`\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr(\n 'transform',\n (d) => `translate(${this.scales.x(d.x)}, ${this.scales.y(d.y)})`\n ),\n (exit) => exit.remove()\n );\n\n this.dotGroups\n .selectAll<SVGCircleElement, DotDatum>(`.${this.class.dot}`)\n .data<DotDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('circle')\n .attr('class', this.class.dot)\n .attr('r', (d) => this.scales.radius(d.radius))\n .attr('fill', (d) => this.scales.fill(d.fill))\n .attr('fill-opacity', this.config.opacity)\n .attr(\n 'stroke',\n this.config.stroke ? this.config.stroke.color : 'none'\n )\n .attr(\n 'stroke-dasharray',\n this.config.stroke ? this.config.stroke.dasharray : null\n )\n .attr(\n 'stroke-linecap',\n this.config.stroke ? this.config.stroke.linecap : null\n )\n .attr(\n 'stroke-linejoin',\n this.config.stroke ? this.config.stroke.linejoin : null\n )\n .attr(\n 'stroke-opacity',\n this.config.stroke ? this.config.stroke.opacity : null\n )\n .attr(\n 'stroke-width',\n this.config.stroke ? this.config.stroke.width : null\n ),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('r', (d) => this.scales.radius(d.radius))\n .attr('fill', (d) => this.scales.fill(d.fill))\n .attr(\n 'stroke',\n this.config.stroke ? this.config.stroke.color : 'none'\n )\n .attr(\n 'stroke-dasharray',\n this.config.stroke ? this.config.stroke.dasharray : null\n )\n .attr(\n 'stroke-linecap',\n this.config.stroke ? this.config.stroke.linecap : null\n )\n .attr(\n 'stroke-linejoin',\n this.config.stroke ? this.config.stroke.linejoin : null\n )\n .attr(\n 'stroke-opacity',\n this.config.stroke ? this.config.stroke.opacity : null\n )\n .attr(\n 'stroke-width',\n this.config.stroke ? this.config.stroke.width : null\n ),\n (exit) => exit.remove()\n );\n }\n\n getDotDatumFromIndex(index: number): DotDatum {\n return {\n index,\n x: this.config.x.values[index],\n y: this.config.y.values[index],\n fill: this.config.fill.values[index],\n radius: this.config.radius.values[index],\n };\n }\n\n updateDotElements(): void {\n const dots = select(this.elRef.nativeElement).selectAll<\n SVGCircleElement,\n DotDatum\n >(`.${this.class.dot}`);\n this.dots.next(dots);\n }\n\n getTooltipData(dotDatum: DotDatum): DotsTooltipDatum<Datum> {\n const datum = this.config.data[dotDatum.index];\n const valueFill = this.config.fill.valueAccessor(datum);\n const tooltipData: DotsTooltipDatum<Datum> = {\n datum,\n values: {\n fill: valueFill,\n radius: this.config.radius.valueAccessor(datum),\n x: this.getFormattedValue('x', datum),\n y: this.getFormattedValue('y', datum),\n },\n color: this.scales.fill(valueFill),\n };\n return tooltipData;\n }\n\n getFormattedValue(dimension: 'x' | 'y', datum: Datum): string {\n const config = this.config[dimension];\n if (config.formatFunction) {\n return ValueUtilities.customFormat(datum, config.formatFunction);\n } else if (this.isContinuousNumericDimension(config)) {\n return ValueUtilities.d3Format(\n config.valueAccessor(datum) as number,\n config.formatSpecifier\n );\n } else {\n return config.valueAccessor(datum).toString();\n }\n }\n\n isContinuousNumericDimension(\n dimension: DataDimension<Datum, DataValue>\n ): dimension is NumberDimension<Datum> {\n return (\n 'formatSpecifier' in dimension &&\n typeof dimension.formatSpecifier === 'string'\n );\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromCenter().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromCenter().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromCenter().attachBottomRight().getPosition(),\n];\n\nexport class DotsTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { DotDatum, DOTS, DotsComponent } from '../dots.component';\nimport { DotsInteractionOutput } from './dots-interaction-output';\nimport { DotsTooltipPositioner } from './dots-tooltip-positioner';\n\nexport interface DotsHost<\n Datum,\n TDotsComponent extends DotsComponent<Datum> = DotsComponent<Datum>,\n> extends MarksHost<DotsInteractionOutput<Datum>, TDotsComponent> {\n getDotDatum(): DotDatum | null;\n}\n\n@Directive({\n selector: '[vicDotsEvents]',\n})\nexport class DotsEventsDirective<\n Datum,\n TDotsComponent extends DotsComponent<Datum> = DotsComponent<Datum>,\n> extends EventsDirective<DotsHost<Datum>> {\n @Input()\n hoverActions:\n | EventAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n clickActions:\n | EventAction<DotsHost<Datum>, DotsInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n DotsHost<Datum>,\n DotsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n DotsInteractionOutput<Datum>\n >();\n\n dotDatum: DotDatum;\n origin: SVGCircleElement;\n\n constructor(@Inject(DOTS) public dots: TDotsComponent) {\n super();\n }\n\n get marks(): DotsComponent<Datum> {\n return this.dots;\n }\n\n getElements(): Observable<Element[]> {\n return this.dots.dots$.pipe(map((sel) => sel.nodes()));\n }\n\n getDotDatum(): DotDatum | null {\n return this.dotDatum;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this);\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGCircleElement;\n this.dotDatum = select(el as SVGCircleElement).datum() as DotDatum;\n }\n\n setPositionsFromElement(): void {\n const dotRect = this.origin.getBoundingClientRect();\n this.positionX = dotRect.width / 2;\n this.positionY = dotRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): DotsInteractionOutput<Datum> {\n const tooltipData = this.dotDatum\n ? this.dots.getTooltipData(this.dotDatum)\n : undefined;\n const position = new DotsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: DotsInteractionOutput<Datum>): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.dotDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DotsComponent } from './dots.component';\nimport { DotsEventsDirective } from './events/dots-events.directive';\n\n@NgModule({\n imports: [DotsComponent, DotsEventsDirective],\n exports: [DotsComponent, DotsEventsDirective],\n})\nexport class VicDotsModule {}\n","import { EventAction } from '../../../events';\nimport { DotsHost } from '../dots-events.directive';\n\nexport class DotsHoverDefaultStyles<Datum>\n implements EventAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .filter((d) => d.index !== host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', '#ccc');\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { DotsHost } from '../dots-events.directive';\n\nexport class DotsHoverMoveDefaultStyles<Datum>\n implements HoverMoveAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .filter((d) => d.index !== host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', '#ccc');\n\n host.marks.dotGroups\n .filter((d) => d.index === host.getDotDatum().index)\n .selectAll<SVGCircleElement, number>('circle')\n .select((d, i, nodes) => nodes[i].parentElement)\n .raise();\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.marks.dotGroups\n .selectAll<SVGCircleElement, number>('circle')\n .style('fill', null);\n }\n}\n\nexport class DotsHoverMoveEmitTooltipData<Datum>\n implements HoverMoveAction<DotsHost<Datum>>\n{\n onStart(host: DotsHost<Datum>): void {\n const output = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: DotsHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n ExtendedFeature,\n ExtendedFeatureCollection,\n ExtendedGeometryCollection,\n GeoGeometryObjects,\n GeoProjection,\n} from 'd3';\nimport {\n GeoJsonProperties,\n GeometryObject as Geometry,\n MultiPolygon,\n Polygon,\n} from 'geojson';\nimport { MarksConfig } from '../../marks';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GeographiesOptions } from './geographies-options';\nimport { GeographiesAttributeDataLayer } from './layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from './layers/geojson-properties-layer/geojson-properties-layer';\n\nexport class GeographiesConfig<\n Datum,\n TProperties extends GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends MarksConfig\n implements GeographiesOptions<Datum, TProperties, TGeometry>\n{\n readonly boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection;\n readonly attributeDataLayer: GeographiesAttributeDataLayer<\n Datum,\n TProperties,\n TGeometry\n >;\n featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n layers: (\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n )[];\n readonly geojsonPropertiesLayers: GeographiesGeojsonPropertiesLayer<\n TProperties,\n TGeometry\n >[];\n readonly projection: GeoProjection;\n\n constructor(options: GeographiesOptions<Datum, TProperties, TGeometry>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setLayers();\n this.setLayerFeatureIndexAccessors();\n }\n\n private setLayers(): void {\n this.layers = [];\n if (this.attributeDataLayer) {\n this.layers.push(this.attributeDataLayer);\n }\n if (this.geojsonPropertiesLayers) {\n this.layers.push(...this.geojsonPropertiesLayers);\n }\n this.layers.forEach((layer, i) => {\n layer.id = i;\n });\n }\n\n private setLayerFeatureIndexAccessors(): void {\n this.layers.forEach((layer) =>\n layer.setFeatureIndexAccessor(this.featureIndexAccessor)\n );\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport type * as CSSType from 'csstype';\nimport { GeoPath, GeoProjection, ScaleLinear } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { Position } from '../../../../core/types/layout';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n GeographiesLabelsOptions,\n} from './geographies-labels-options';\n\nexport class GeographiesLabels<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> implements GeographiesLabelsOptions<TProperties, TGeometry>\n{\n alignmentBaseline: CSSType.Property.AlignmentBaseline;\n color: GeographiesLabelsColorOptions | CSSType.Property.Fill;\n cursor: CSSType.Property.Cursor;\n display: (featureIndex: string) => boolean;\n dominantBaseline: CSSType.Property.DominantBaseline;\n fontScale: ScaleLinear<number, number, never>;\n fontWeight: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight;\n pointerEvents: CSSType.Property.PointerEvents;\n position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection?: GeoProjection\n ) => Position;\n textAnchor: CSSType.Property.TextAnchor;\n valueAccessor: (\n feature: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n\n constructor(options: GeographiesLabelsOptions<TProperties, TGeometry>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport type * as CSSType from 'csstype';\nimport {\n GeoPath,\n GeoProjection,\n maxIndex,\n polygonArea,\n scaleLinear,\n ScaleLinear,\n} from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport polylabel from 'polylabel';\nimport { Position } from '../../../../core/types/layout';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabels } from './geographies-labels';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n} from './geographies-labels-options';\n\nconst DEFAULT = {\n _alignmentBaseline: 'middle',\n _color: '#000',\n _cursor: 'default',\n _display: () => true,\n _dominantBaseline: 'middle',\n _fontScale: scaleLinear().domain([0, 800]).range([0, 17]),\n _fontWeight: 400,\n _textAnchor: 'middle',\n _pointerEvents: 'none',\n _valueAccessor: (feature) => feature,\n};\n\nexport class GeographiesLabelsBuilder<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> {\n private _alignmentBaseline: CSSType.Property.AlignmentBaseline;\n private _color: GeographiesLabelsColorOptions | CSSType.Property.Fill;\n private _cursor: CSSType.Property.Cursor;\n private _display: (featureIndex: string) => boolean;\n private _dominantBaseline: CSSType.Property.DominantBaseline;\n private _fontWeight:\n | GeographiesLabelsFontWeightOptions\n | CSSType.Property.FontWeight;\n private _fontScale: ScaleLinear<number, number, never>;\n private _pointerEvents: CSSType.Property.PointerEvents;\n private _position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection?: GeoProjection\n ) => Position;\n private _textAnchor: CSSType.Property.TextAnchor;\n private _valueAccessor: (\n featureIndex: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n this._position = (d, path) =>\n this.positionAtCentroid<TProperties, TGeometry>(d, path);\n }\n\n /**\n * OPTIONAL. The alignment of the baseline of the text relative to the text's font.\n *\n * @default 'middle'\n */\n alignmentBaseline(\n alignmentBaseline: CSSType.Property.AlignmentBaseline\n ): this {\n this._alignmentBaseline = alignmentBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. The color of the text. If a string value is provided, that value will be used for all geographies on the layer.\n *\n * If an object is provided, the color between default and contrastAlternative that has the highest contrast ratio with the geography's background color will be used.\n *\n * If a value for `pattern` is provided, that value will be used for geographies with a fill pattern. If it is not provided, the default option will be used for geographies with a fill pattern.\n *\n * @default '#000'\n */\n color(color: GeographiesLabelsColorOptions | CSSType.Property.Fill): this {\n this._color = color;\n return this;\n }\n\n /**\n * OPTIONAL. The cursor to display when hovering over the text\n *\n * @default 'default'\n */\n cursor(cursor: CSSType.Property.Cursor): this {\n this._cursor = cursor;\n return this;\n }\n\n /**\n * OPTIONAL, A function that determines whether to display the label for a given feature.\n *\n * @default () => true\n */\n display(display: boolean): this;\n display(display: (featureIndex: string) => boolean): this;\n display(display: boolean | ((featureIndex: string) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. The dominant baseline of the text.\n *\n * @default 'middle'\n */\n dominantBaseline(dominantBaseline: CSSType.Property.DominantBaseline): this {\n this._dominantBaseline = dominantBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. The font weight of the text.\n *\n * If an object is provided, the font weight for each property on the object will be used when the corresponding color is used.\n *\n * @default 400\n */\n fontWeight(\n fontWeight: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight\n ): this {\n this._fontWeight = fontWeight;\n return this;\n }\n\n /**\n * The scale used to determine the font size of the label.\n */\n fontScale(fontScale: ScaleLinear<number, number, never>): this {\n this._fontScale = fontScale;\n return this;\n }\n\n /**\n * The pointer events of the text.\n */\n pointerEvents(pointerEvents: CSSType.Property.PointerEvents): this {\n this._pointerEvents = pointerEvents;\n return this;\n }\n\n /**\n * The position of the label relative to the feature\n */\n position(\n position: (\n d: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath,\n projection: GeoProjection\n ) => Position\n ): this {\n this._position = position;\n return this;\n }\n\n /**\n * The text anchor of the text.\n */\n textAnchor(textAnchor: CSSType.Property.TextAnchor): this {\n this._textAnchor = textAnchor;\n return this;\n }\n\n /**\n * A function that determines the value of the label for a given feature\n */\n valueAccessor(\n valueAccessor: (\n featureIndex: GeographiesFeature<TProperties, TGeometry>\n ) => string\n ): this {\n this._valueAccessor = valueAccessor;\n return this;\n }\n\n _build(): GeographiesLabels<TProperties, TGeometry> {\n return new GeographiesLabels<TProperties, TGeometry>({\n alignmentBaseline: this._alignmentBaseline,\n color: this._color,\n cursor: this._cursor,\n display: this._display,\n dominantBaseline: this._dominantBaseline,\n fontScale: this._fontScale,\n fontWeight: this._fontWeight,\n pointerEvents: this._pointerEvents,\n position: this._position,\n textAnchor: this._textAnchor,\n valueAccessor: this._valueAccessor,\n });\n }\n\n /**\n * A function to position something at the centroid of a feature.\n */\n positionAtCentroid<TProperties, TGeometry extends Geometry>(\n feature: GeographiesFeature<TProperties, TGeometry>,\n path: GeoPath\n ): Position {\n const c = path.centroid(feature);\n return { x: c[0], y: c[1] };\n }\n\n /**\n * A function to position a label for Hawaii on a GeoAlbersUsa projection.\n */\n positionHawaiiOnGeoAlbersUsa<TProperties>(\n feature: GeographiesFeature<TProperties, MultiPolygon>,\n projection: GeoProjection\n ): Position {\n const startPolygon =\n // we need to cast because Position can return two or three numbers but GeoProjection\n // can only handle [number, number]\n (feature.geometry.coordinates[0][0] as [number, number][]).map(\n projection\n );\n const endPolygon = (\n feature.geometry.coordinates[\n feature.geometry.coordinates.length - 1\n ][0] as [number, number][]\n ).map(projection);\n\n const approxStartCoords = startPolygon[0];\n const approxEndCoords = endPolygon[0];\n return {\n x: approxStartCoords[0] + (approxEndCoords[0] - approxStartCoords[0]) / 2,\n y: approxStartCoords[1],\n };\n }\n\n /**\n * A function to position a label with Polylabel lib\n */\n positionWithPolylabel<\n TProperties,\n TGeometry extends MultiPolygon | Polygon = MultiPolygon | Polygon,\n >(\n feature: GeographiesFeature<TProperties, TGeometry>,\n projection: GeoProjection\n ): Position {\n const isMultiPolygon = feature.geometry.coordinates.length > 1;\n let largestIndex = 0;\n let largestPolygon: [number, number][];\n if (isMultiPolygon) {\n const coords = feature.geometry.coordinates as [number, number][][][];\n largestIndex = maxIndex(\n coords.map((polygon) => {\n return polygonArea(polygon[0]);\n })\n );\n largestPolygon = coords[largestIndex][0];\n } else {\n const coords = feature.geometry.coordinates as [number, number][][];\n largestPolygon = coords[0];\n }\n const projectedPoints = largestPolygon.map(projection);\n const adjustedPosition = polylabel([projectedPoints]);\n return { x: adjustedPosition[0], y: adjustedPosition[1] };\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry } from 'geojson';\nimport { StrokeBuilder } from '../../../../stroke/stroke-builder';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabelsBuilder } from '../labels/geographies-labels-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _mixBlendMode: 'normal',\n _strokeColor: 'dimgray',\n _strokeWidth: '1',\n};\n\nexport abstract class GeographiesLayerBuilder<\n TProperties,\n TGeometry extends Geometry,\n> {\n protected _class: (d: TProperties) => string;\n protected _enableEventActions: boolean;\n protected _geographies: Array<GeographiesFeature<TProperties, TGeometry>>;\n protected labelsBuilder: GeographiesLabelsBuilder<TProperties, TGeometry>;\n protected _mixBlendMode: string;\n protected strokeBuilder: StrokeBuilder;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that correspends to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: TProperties) => string): this;\n class(value: ((d: TProperties) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. Determines whether the layer can use viz event actions.\n *\n * If true, the event listener that corresponds to the provided directive will be placed on that layer's paths.\n *\n * @default true for Attribute Data layer\n * @default false for Geojson Properties layers\n */\n enableEventActions(value: boolean): this {\n this._enableEventActions = value;\n return this;\n }\n\n /**\n * REQUIRED. GeoJSON features that define the geographies to be drawn.\n */\n geographies(value: Array<GeographiesFeature<TProperties, TGeometry>>): this {\n this._geographies = value;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for labels that will be drawn on the geographies.\n */\n labels(labels: null): this;\n labels(\n labels: (labels: GeographiesLabelsBuilder<TProperties, TGeometry>) => void\n ): this;\n labels(\n labels:\n | ((labels: GeographiesLabelsBuilder<TProperties, TGeometry>) => void)\n | null\n ): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new GeographiesLabelsBuilder();\n labels(this.labelsBuilder);\n return this;\n }\n\n /**\n * Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the appearance of the stroke for the geographies in the layer.\n */\n stroke(setProperties?: (stroke: StrokeBuilder) => void): this {\n this.initStrokeBuilder();\n setProperties?.(this.strokeBuilder);\n return this;\n }\n\n protected initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n}\n","import * as CSSType from 'csstype';\nimport { Geometry } from 'geojson';\nimport { ColorUtilities } from '../../../../core/utilities/colors';\nimport { Stroke } from '../../../../stroke/stroke';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLabels } from '../labels/geographies-labels';\nimport {\n GeographiesLabelsColorOptions,\n GeographiesLabelsFontWeightOptions,\n} from '../labels/geographies-labels-options';\nimport { GeographiesLayerOptions } from './geographies-layer-options';\n\nexport interface GeographiesTooltipDatum<Datum> {\n attributeValue?: string;\n color: string;\n datum?: Datum;\n geography: string;\n}\n\nexport abstract class GeographiesLayer<\n Datum,\n TProperties,\n TGeometry extends Geometry,\n> implements GeographiesLayerOptions<TProperties, TGeometry>\n{\n enableEventActions: boolean;\n featureClass: (d: TProperties) => string;\n featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n geographies: Array<GeographiesFeature<TProperties, TGeometry>>;\n id: number;\n labels: GeographiesLabels<TProperties, TGeometry>;\n stroke: Stroke;\n\n setFeatureIndexAccessor(\n accessor: (d: GeographiesFeature<TProperties, TGeometry>) => string\n ): void {\n this.featureIndexAccessor = accessor;\n }\n\n abstract getFill(feature: GeographiesFeature<TProperties, TGeometry>): string;\n\n abstract getTooltipData(\n path: SVGPathElement\n ): GeographiesTooltipDatum<Datum | undefined>;\n\n getLabelColor(\n feature: GeographiesFeature<TProperties, TGeometry>\n ): CSSType.Property.Fill {\n const pathColor = this.getFill(feature);\n if (typeof this.labels.color === 'string') {\n return this.labels.color;\n }\n\n if (pathColor.startsWith('url')) {\n return this.labels.color.pattern ?? this.labels.color.default;\n }\n\n return ColorUtilities.getHigherContrastColorForBackground(\n pathColor,\n this.labels.color.default,\n this.labels.color.contrastAlternative\n );\n }\n\n getLabelFontWeight(\n feature: GeographiesFeature<TProperties, TGeometry>\n ): CSSType.Property.FontWeight {\n const pathColor = this.getFill(feature);\n\n if (!this.isContrastFontWeightOptions(this.labels.fontWeight)) {\n return this.labels.fontWeight;\n }\n\n if (pathColor.startsWith('url')) {\n return this.labels.fontWeight.pattern ?? this.labels.fontWeight.default;\n }\n\n if (this.isContrastColorOptions(this.labels.color)) {\n const labelColor = ColorUtilities.getHigherContrastColorForBackground(\n pathColor,\n this.labels.color.default,\n this.labels.color.contrastAlternative\n );\n return labelColor === this.labels.color.default\n ? this.labels.fontWeight.default\n : this.labels.fontWeight.contrastAlternative;\n }\n\n return this.labels.fontWeight.default;\n }\n\n isContrastColorOptions(\n options: GeographiesLabelsColorOptions | CSSType.Property.Fill\n ): options is GeographiesLabelsColorOptions {\n return typeof options === 'object' && options !== null;\n }\n\n isContrastFontWeightOptions(\n options: GeographiesLabelsFontWeightOptions | CSSType.Property.FontWeight\n ): options is GeographiesLabelsFontWeightOptions {\n return typeof options === 'object' && options !== null;\n }\n}\n","/**\n * Enum that defines the types of binning that can be used to map quantitative attribute data to colors.\n */\nexport enum BinStrategy {\n none = 'none',\n categorical = 'categorical',\n equalValueRanges = 'equalValueRanges',\n equalFrequencies = 'equalFrequencies',\n customBreaks = 'customBreaks',\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { InternMap, select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillUtilities } from '../../../../core/utilities/fill-utilities';\nimport { ValueUtilities } from '../../../../core/utilities/values';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLayer,\n GeographiesTooltipDatum,\n} from '../geographies-layer/geographies-layer';\nimport { GeographiesAttributeDataLayerOptions } from './attribute-data-layer-options';\nimport { BinStrategy } from './dimensions/attribute-data-bin-enums';\nimport { CategoricalBinsAttributeDataDimension } from './dimensions/categorical-bins/categorical-bins';\nimport { CustomBreaksBinsAttributeDataDimension } from './dimensions/custom-breaks/custom-breaks-bins';\nimport { EqualFrequenciesAttributeDataDimension } from './dimensions/equal-frequencies-bins/equal-frequencies-bins';\nimport { EqualValueRangesAttributeDataDimension } from './dimensions/equal-value-ranges-bins/equal-value-ranges-bins';\nimport { NoBinsAttributeDataDimension } from './dimensions/no-bins/no-bins';\n\nconst DEFAULT = {\n _nullColor: '#dcdcdc',\n _strokeColor: 'dimgray',\n _strokeWidth: '1',\n _enableEventActions: true,\n};\n\nexport class GeographiesAttributeDataLayer<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends GeographiesLayer<Datum, TProperties, TGeometry>\n implements GeographiesAttributeDataLayerOptions<Datum, TProperties, TGeometry>\n{\n readonly attributeDimension:\n | CategoricalBinsAttributeDataDimension<Datum>\n | NoBinsAttributeDataDimension<Datum>\n | EqualValueRangesAttributeDataDimension<Datum>\n | EqualFrequenciesAttributeDataDimension<Datum>\n | CustomBreaksBinsAttributeDataDimension<Datum>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n attributeScale: any;\n attributeValuesByGeographyIndex: InternMap<string, string | number>;\n readonly customFills: FillDefinition<Datum>[];\n readonly data: Datum[];\n datumsByGeographyIndex: InternMap<string, Datum>;\n geographyIndexAccessor: (d: Datum) => string;\n readonly marksClass: string;\n readonly mixBlendMode: string;\n\n constructor(\n options: GeographiesAttributeDataLayerOptions<Datum, TProperties, TGeometry>\n ) {\n super();\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n if (this.attributeDimension === undefined) {\n console.error('Attribute dimension is required for data layers');\n }\n if (this.geographyIndexAccessor === undefined) {\n console.error('Geography index accessor is required for data layers');\n }\n this.initPropertiesFromData();\n }\n\n initPropertiesFromData(): void {\n const uniqueDatums = this.getUniqueDatumsByGeoAccessor(this.data);\n this.attributeDimension.setPropertiesFromData(uniqueDatums);\n this.setAttributeDataMaps(uniqueDatums);\n this.attributeScale = this.attributeDimension.getScale();\n }\n\n private getUniqueDatumsByGeoAccessor(data: Datum[]): Datum[] {\n const uniqueByGeoAccessor = (arr: Datum[], set = new Set()) =>\n arr.filter(\n (x) =>\n !set.has(this.geographyIndexAccessor(x)) &&\n set.add(this.geographyIndexAccessor(x))\n );\n return uniqueByGeoAccessor(data);\n }\n\n private setAttributeDataMaps(uniqueDatums: Datum[]): void {\n this.attributeValuesByGeographyIndex = new InternMap(\n uniqueDatums.map((d) => {\n const value = this.attributeDimension.valueAccessor(d);\n return [\n this.geographyIndexAccessor(d),\n value === null || value === undefined ? undefined : value,\n ];\n })\n );\n this.datumsByGeographyIndex = new InternMap(\n uniqueDatums.map((d) => {\n return [this.geographyIndexAccessor(d), d];\n })\n );\n }\n\n getFill(feature: GeographiesFeature<TProperties, TGeometry>): string {\n const geographyIndex = this.featureIndexAccessor(feature);\n return this.customFills\n ? this.getPatternFill(geographyIndex)\n : this.getAttributeFill(geographyIndex);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getPatternFill(geographyIndex: string): string {\n const datum = this.datumsByGeographyIndex.get(geographyIndex);\n const geographyFill = this.getAttributeFill(geographyIndex);\n return FillUtilities.getFill(datum, geographyFill, this.customFills);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getAttributeFill(geographyIndex: string): string {\n const dataValue = this.attributeValuesByGeographyIndex.get(geographyIndex);\n return this.attributeScale(dataValue);\n }\n\n getTooltipData(path: SVGPathElement): GeographiesTooltipDatum<Datum> {\n const feature = select(path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n const featureIndex = this.featureIndexAccessor(feature);\n const datum = this.datumsByGeographyIndex.get(featureIndex);\n const value = this.attributeValuesByGeographyIndex.get(featureIndex);\n const tooltipData: GeographiesTooltipDatum<Datum> = {\n datum,\n geography: this.geographyIndexAccessor(datum),\n attributeValue: this.attributeDimension.formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.attributeDimension.formatFunction\n )\n : this.attributeDimension.dimensionType !== 'ordinal' &&\n this.attributeDimension.binType !== BinStrategy.categorical\n ? ValueUtilities.d3Format(\n value as number,\n this.attributeDimension.formatSpecifier\n )\n : (value as string),\n color: this.getAttributeFill(featureIndex),\n };\n\n return tooltipData;\n }\n}\n","import { DataValue } from '../../../../../../core/types/values';\nimport { DataDimensionBuilder } from '../../../../../../data-dimensions/dimension-builder';\n\nexport abstract class AttributeDataDimensionBuilder<\n Datum,\n AttributeValue extends DataValue,\n RangeValue extends string | number = string,\n> extends DataDimensionBuilder<Datum, AttributeValue> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _interpolator: (...args: any) => any;\n protected _nullColor: string;\n protected _range: RangeValue[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected _scale: (...args: any) => string;\n\n /**\n * OPTIONAL. For binned dimensions, a function that will be used to create the a new range for the attribute data scale if the user's specified numBins is greater than the values in the user's specified range.\n *\n * For the No Bins dimension, this will be used to interpolate between the two colors in the range.\n *\n * @default interpolateLab\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolator(interpolator: (...args: any) => any): this {\n this._interpolator = interpolator;\n return this;\n }\n\n /**\n * A color that will be used if there are any geojson features provided in this dimension's geographies that do not have attribute data.\n *\n * @default 'whitesmoke'\n */\n nullColor(nullColor: string): this {\n this._nullColor = nullColor;\n return this;\n }\n\n /**\n * OPTIONAL. An array of values that will be used as the range in the attribute data scale.\n *\n * @default ['white', 'slategray'] for Categorical Bins\n * @default ['white', 'blue'] for Equal Frequencies Bins\n * @default ['white', 'pink', 'red'] for Equal Value Ranges Bins\n */\n range(range: RangeValue[]): this {\n this._range = range;\n return this;\n }\n\n /**\n * A function that will be used to create the scale for the attribute data.\n *\n * @default scaleOrdinal for Categorical Bins\n * @default scaleThreshold for Custom Breaks Bins (cannot be overridden)\n * @default scaleQuantile for Equal Frequencies Bins\n * @default scaleQuantize for Equal Value Ranges Bins\n * @default scaleLinear for No Bins\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale(scale: (...args: any) => string): this {\n this._scale = scale;\n return this;\n }\n}\n","import { DataValue } from '../../../../../../core/types/values';\nimport { DataDimension } from '../../../../../../data-dimensions/dimension';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimensionOptions } from './attribute-data-dimension-options';\n\n/**\n * Configuration object for attribute data that will be used to shade the map.\n *\n * The first generic parameter is the type of the attribute data.\n */\nexport abstract class AttributeDataDimension<\n Datum,\n AttributeValue extends DataValue,\n RangeValue extends string | number = string,\n >\n extends DataDimension<Datum, AttributeValue>\n implements AttributeDataDimensionOptions<Datum, AttributeValue, RangeValue>\n{\n binType: BinStrategy;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n interpolator: (...args: any) => any;\n nullColor: string;\n range: RangeValue[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n scale: (...args: any) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n abstract getScale(): any;\n\n constructor(dimensionType: 'number' | 'ordinal' | 'date') {\n super(dimensionType);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { CategoricalBinsOptions } from './categorical-bins-options';\n\n/**\n * Configuration object for attribute data that is categorical.\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class CategoricalBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends AttributeDataDimension<Datum, string>\n implements CategoricalBinsOptions<Datum, string>\n{\n override readonly binType: BinStrategy.categorical;\n calculatedDomain: string[];\n readonly domain: string[];\n override interpolator: never;\n\n constructor(options: CategoricalBinsOptions<Datum, RangeValue>) {\n super('ordinal');\n this.binType = BinStrategy.categorical;\n safeAssign(this, options);\n }\n\n getDomain(): string[] {\n return this.calculatedDomain;\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setRange();\n }\n\n protected setDomain(values: string[]): void {\n const domainValues = this.domain ?? values;\n this.calculatedDomain = [...new Set(domainValues)];\n }\n\n protected setRange(): void {\n this.range = this.range.slice(0, this.calculatedDomain.length);\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { scaleOrdinal } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { CategoricalBinsAttributeDataDimension } from './categorical-bins';\n\nconst DEFAULT = {\n _nullColor: 'whitesmoke',\n _range: ['white', 'lightslategray'],\n _scale: scaleOrdinal,\n _valueAccessor: () => '',\n};\n\nexport class CategoricalBinsBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, RangeValue> {\n private _domain: string[];\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: string[]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): CategoricalBinsAttributeDataDimension<Datum, RangeValue> {\n return new CategoricalBinsAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range, scaleLinear } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { CustomBreaksBinsAttributeDataDimensionOptions } from './custom-breaks-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into custom breaks.\n *\n * For example, if the data is [0, 1, 2, 4, 60, 100] and breakValues is [0, 2, 5, 10, 50], the bin ranges will be [0, 2], [2, 5], [5, 10], [10, 50], [50, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class CustomBreaksBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends AttributeDataDimension<Datum, number, RangeValue>\n implements CustomBreaksBinsAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.customBreaks;\n readonly breakValues: number[];\n private calculatedNumBins: number;\n private calculatedDomain: number[];\n readonly formatSpecifier: string;\n\n constructor(\n options: CustomBreaksBinsAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.customBreaks;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for CustomBreaksAttributeDataDimension'\n );\n }\n if (!this.breakValues) {\n console.error(\n 'breakValues are required for CustomBreaksAttributeDataDimension'\n );\n }\n if (this.breakValues.length < 2) {\n console.error(\n 'breakValues must have at least two values for CustomBreaksAttributeDataDimension'\n );\n }\n this.breakValues = this.breakValues.slice().sort((a, b) => a - b);\n }\n\n setPropertiesFromData(): void {\n this.setDomain();\n this.setNumBins();\n this.setRange();\n }\n\n protected setDomain(): void {\n this.calculatedDomain = this.breakValues.slice(1);\n }\n\n private setNumBins(): void {\n this.calculatedNumBins = this.breakValues.length - 1;\n }\n\n protected setRange(): void {\n if (this.range.length < this.calculatedNumBins) {\n const scale = scaleLinear<RangeValue>()\n .domain([0, this.calculatedNumBins - 1])\n .range(this.range);\n this.range = range(this.calculatedNumBins).map((i) => scale(i));\n }\n }\n\n getScale() {\n // the D3.ScaleThreshold domain is an array of naturally ordered values, which are typically numbers but could also be strings. Thus if scale is called with a string value here, it scale will return the first value of the range, not the nullColor. See https://d3js.org/d3-scale/threshold#threshold_domain.\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleThreshold } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { CustomBreaksBinsAttributeDataDimension } from './custom-breaks-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _scale: scaleThreshold,\n};\n\nexport class CustomBreaksBinsAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, number, RangeValue> {\n private _breakValues: number[];\n private _formatSpecifier: string;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. An array of values to specify bin ranges. This array should include both the lowest and highest values and must have at least two values.\n *\n * An array of [0, 2, 5, 10, 50] will create bins [0, 2], [2, 5], [5, 10], [10, 50].\n *\n * Values should be in ascending order.\n *\n * Values below the first value will be colored with the color for the first bin. Values above the last value will be colored with the color for the last bin. \n * \n * In this sense, the first and last values are primarily used for \n in a legend, should one be displayed. \n *\n *In order for the legend to be accurate, users should ensure that the first and last values are the minimum and maximum values in the data.\n */\n breakValues(breakValues: number[]): this {\n this._breakValues = breakValues;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n _build(): CustomBreaksBinsAttributeDataDimension<Datum, RangeValue> {\n return new CustomBreaksBinsAttributeDataDimension({\n breakValues: this._breakValues,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\n\nexport abstract class CalculatedBinsAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimensionBuilder<Datum, number, RangeValue> {\n protected _formatSpecifier: string;\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n}\n","import { extent, range, scaleLinear } from 'd3';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\n\nexport abstract class CalculatedBinsAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n> extends AttributeDataDimension<Datum, number, RangeValue> {\n protected calculatedNumBins: number;\n readonly formatSpecifier: string;\n\n protected setRange(): void {\n if (this.shouldCalculateBinColors(this.calculatedNumBins, this.range)) {\n const binIndicies = range(this.calculatedNumBins);\n this.range = binIndicies.map((i) =>\n this.getColorGenerator(binIndicies)(i)\n );\n }\n }\n\n private shouldCalculateBinColors(\n numBins: number,\n range: RangeValue[]\n ): boolean {\n return numBins > 1 && range.length !== numBins;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private getColorGenerator(binIndicies: number[]): any {\n return scaleLinear<RangeValue>()\n .domain(extent(binIndicies))\n .range(this.range)\n .interpolate(this.interpolator);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { CalculatedBinsAttributeDataDimension } from '../calculated-bins/calculated-bins';\nimport { EqualFrequenciesAttributeDataDimensionOptions } from './equal-frequencies-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into equal number of observations. For example, if the data is [0, 1, 2, 4, 60, 100] and numBins is 2, the bin ranges will be [0, 2] and [4, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class EqualFrequenciesAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends CalculatedBinsAttributeDataDimension<Datum, RangeValue>\n implements EqualFrequenciesAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.equalFrequencies;\n private calculatedDomain: number[];\n readonly numBins: number;\n\n constructor(\n options: EqualFrequenciesAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.equalFrequencies;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for EqualNumObservationsAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setNumBins();\n this.setRange();\n }\n\n protected setDomain(values: number[]): void {\n this.calculatedDomain = values;\n }\n\n private setNumBins(): void {\n this.calculatedNumBins = this.numBins;\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleQuantile } from 'd3';\nimport { CalculatedBinsAttributeDataDimensionBuilder } from '../calculated-bins/calculated-bins-builder';\nimport { EqualFrequenciesAttributeDataDimension } from './equal-frequencies-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _numBins: 4,\n _range: ['white', 'blue'],\n _scale: scaleQuantile,\n};\n\nexport class EqualFrequenciesAttributeDataDimensionBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends CalculatedBinsAttributeDataDimensionBuilder<Datum, RangeValue> {\n private _numBins: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The number of bins to create.\n *\n * @default 4\n */\n numBins(numBins: number): this {\n this._numBins = numBins;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): EqualFrequenciesAttributeDataDimension<Datum, RangeValue> {\n return new EqualFrequenciesAttributeDataDimension({\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n numBins: this._numBins,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { extent } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { CalculatedBinsAttributeDataDimension } from '../calculated-bins/calculated-bins';\nimport { EqualValueRangesAttributeDataDimensionOptions } from './equal-value-ranges-bins-options';\n\n/**\n * Configuration object for attribute data that is quantitative and will be binned into equal value ranges. For example, if the data is [0, 1, 2, 4, 60, 100] and numBins is 2, the bin ranges will be [0, 49] and [50, 100].\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class EqualValueRangesAttributeDataDimension<\n Datum,\n RangeValue extends string | number = string,\n >\n extends CalculatedBinsAttributeDataDimension<Datum, RangeValue>\n implements EqualValueRangesAttributeDataDimensionOptions<Datum, RangeValue>\n{\n override readonly binType: BinStrategy.equalValueRanges;\n private calculatedDomain: [number, number];\n readonly domain: [number, number];\n readonly numBins: number;\n\n constructor(\n options: EqualValueRangesAttributeDataDimensionOptions<Datum, RangeValue>\n ) {\n super('number');\n this.binType = BinStrategy.equalValueRanges;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for EqualValuesAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n this.setValidatedDomainAndNumBins();\n this.setRange();\n }\n\n protected setDomain(values: number[]): void {\n const domainValues = this.domain ?? values;\n this.calculatedDomain = extent(domainValues);\n }\n\n private setValidatedDomainAndNumBins(): void {\n if (this.valueFormatIsInteger()) {\n const validated = this.getValidatedNumBinsAndDomainForIntegerValues(\n this.numBins,\n this.calculatedDomain\n );\n this.calculatedNumBins = validated.numBins;\n this.calculatedDomain = validated.domain;\n } else {\n this.calculatedNumBins = this.numBins;\n }\n }\n\n protected valueFormatIsInteger(): boolean {\n return this.formatSpecifier && this.formatSpecifier.includes('0f');\n }\n\n protected getValidatedNumBinsAndDomainForIntegerValues(\n numBins: number,\n domain: [number, number]\n ): {\n numBins: number;\n domain: [number, number];\n } {\n const validated = { numBins, domain };\n const dataRange = domain.map((x) => Math.round(x));\n const numDiscreteValues = Math.abs(dataRange[1] - dataRange[0]) + 1;\n if (numDiscreteValues < numBins) {\n validated.numBins = numDiscreteValues;\n validated.domain = [dataRange[0], dataRange[1] + 1];\n }\n return validated;\n }\n\n getScale() {\n return this.scale()\n .domain(this.calculatedDomain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleQuantize } from 'd3';\nimport { CalculatedBinsAttributeDataDimensionBuilder } from '../calculated-bins/calculated-bins-builder';\nimport { EqualValueRangesAttributeDataDimension } from './equal-value-ranges-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _numBins: 3,\n _range: ['white', 'pink', 'red'],\n _scale: scaleQuantize,\n};\n\nexport class EqualValueRangesBinsBuilder<\n Datum,\n RangeValue extends string | number = string,\n> extends CalculatedBinsAttributeDataDimensionBuilder<Datum, RangeValue> {\n private _domain: [number, number];\n private _numBins: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: [number, number]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. The number of bins to create.\n *\n * @default 3\n */\n numBins(numBins: number): this {\n this._numBins = numBins;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): EqualValueRangesAttributeDataDimension<Datum, RangeValue> {\n return new EqualValueRangesAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n numBins: this._numBins,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { extent } from 'd3';\nimport { BinStrategy } from '../attribute-data-bin-enums';\nimport { AttributeDataDimension } from '../attribute-data/attribute-data-dimension';\nimport { NoBinsAttributeDataDimensionOptions } from './no-bins-options';\n\nexport class NoBinsAttributeDataDimension<Datum> extends AttributeDataDimension<\n Datum,\n number\n> {\n override readonly binType: BinStrategy.none;\n domain: [number, number];\n formatSpecifier: string;\n\n constructor(options: NoBinsAttributeDataDimensionOptions<Datum>) {\n super('number');\n this.binType = BinStrategy.none;\n safeAssign(this, options);\n if (!this.valueAccessor) {\n console.error(\n 'Value accessor is required for NoBinsAttributeDataDimension'\n );\n }\n }\n\n setPropertiesFromData(data: Datum[]): void {\n const values = data.map(this.valueAccessor);\n this.setDomain(values);\n }\n\n protected setDomain(values: number[]): void {\n const domainValues = this.domain ?? values;\n this.domain = extent(domainValues);\n }\n\n getScale() {\n return this.scale()\n .domain(this.domain)\n .range(this.range)\n .unknown(this.nullColor);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { interpolateLab, scaleLinear } from 'd3';\nimport { AttributeDataDimensionBuilder } from '../attribute-data/attribute-data-dimension-builder';\nimport { NoBinsAttributeDataDimension } from './no-bins';\n\nconst DEFAULT = {\n _interpolator: interpolateLab,\n _nullColor: 'whitesmoke',\n _range: ['white', 'slategray'],\n _scale: scaleLinear,\n};\n\n/**\n * Configuration object for attribute data that is quantitative and does not have bins.\n *\n * The generic parameter is the type of the attribute data.\n */\nexport class NoBinsAttributeDataDimensionBuilder<\n Datum,\n> extends AttributeDataDimensionBuilder<Datum, number> {\n private _domain: [number, number];\n private _formatSpecifier: string;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. The domain of the scale. If not set, the domain will be inferred from the data.\n */\n domain(domain: [number, number]): this {\n this._domain = domain;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a format specifier that will be applied to the value of this dimension using D3 format for display purposes.\n *\n * For example, this will format data values shown in a tooltip\n */\n formatSpecifier(formatSpecifier: string): this {\n this._formatSpecifier = formatSpecifier;\n return this;\n }\n\n /**\n * @internal This method is not intended to be used by consumers of this library.\n */\n _build(): NoBinsAttributeDataDimension<Datum> {\n return new NoBinsAttributeDataDimension({\n domain: this._domain,\n formatFunction: this._formatFunction,\n formatSpecifier: this._formatSpecifier,\n interpolator: this._interpolator,\n nullColor: this._nullColor,\n range: this._range,\n scale: this._scale,\n valueAccessor: this._valueAccessor,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesLayerBuilder } from '../geographies-layer/geographies-layer-builder';\nimport { GeographiesAttributeDataLayer } from './attribute-data-layer';\nimport { CategoricalBinsBuilder } from './dimensions/categorical-bins/categorical-bins-builder';\nimport { CustomBreaksBinsAttributeDataDimensionBuilder } from './dimensions/custom-breaks/custom-breaks-bins-builder';\nimport { EqualFrequenciesAttributeDataDimensionBuilder } from './dimensions/equal-frequencies-bins/equal-frequencies-bins-builder';\nimport { EqualValueRangesBinsBuilder } from './dimensions/equal-value-ranges-bins/equal-value-ranges-bins-builder';\nimport { NoBinsAttributeDataDimensionBuilder } from './dimensions/no-bins/no-bins-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _enableEventActions: true,\n};\n\nexport class GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends GeographiesLayerBuilder<TProperties, TGeometry> {\n private _customFills: FillDefinition<Datum>[];\n private _data: Datum[];\n private _geographyIndexAccessor: (d: Datum) => string;\n\n private binsBuilder:\n | CategoricalBinsBuilder<Datum>\n | CustomBreaksBinsAttributeDataDimensionBuilder<Datum>\n | EqualFrequenciesAttributeDataDimensionBuilder<Datum>\n | EqualValueRangesBinsBuilder<Datum>\n | NoBinsAttributeDataDimensionBuilder<Datum>;\n\n private categoricalBinsBuilder: CategoricalBinsBuilder<Datum>;\n private customBreaksBinsBuilder: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>;\n private equalFrequenciesBinsBuilder: EqualFrequenciesAttributeDataDimensionBuilder<Datum>;\n private equalValueRangesBinsBuilder: EqualValueRangesBinsBuilder<Datum>;\n private noBinsBuilder: NoBinsAttributeDataDimensionBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to colors by categorical values.\n *\n * For example, if the data for a set of U.S. states had a string property, 'region', this could be used to color the states by region.\n */\n categoricalBins(bins: null): this;\n categoricalBins(bins: (bins: CategoricalBinsBuilder<Datum>) => void): this;\n categoricalBins(\n bins: ((bins: CategoricalBinsBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.categoricalBinsBuilder = undefined;\n return this;\n }\n this.categoricalBinsBuilder = new CategoricalBinsBuilder<Datum, string>();\n bins(this.categoricalBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to colors by custom breaks values for bins.\n */\n customBreaksBins(bins: null): this;\n customBreaksBins(\n bins: (bins: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n customBreaksBins(\n bins:\n | ((bins: CustomBreaksBinsAttributeDataDimensionBuilder<Datum>) => void)\n | null\n ): this {\n if (bins === null) {\n this.customBreaksBinsBuilder = undefined;\n return this;\n }\n this.customBreaksBinsBuilder =\n new CustomBreaksBinsAttributeDataDimensionBuilder();\n bins(this.customBreaksBinsBuilder);\n return this;\n }\n\n /**\n * REQUIRED. The data that will be used to color the geographies.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that for creating a map without binning values.\n */\n noBins(bins: null): this;\n noBins(\n bins: (bins: NoBinsAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n noBins(\n bins: ((bins: NoBinsAttributeDataDimensionBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.noBinsBuilder = undefined;\n return this;\n }\n this.noBinsBuilder = new NoBinsAttributeDataDimensionBuilder();\n bins(this.noBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to bins that each have the same size range.\n *\n * For example, bins may be, 0-10, 10-20, 20-30, etc.\n */\n equalValueRangesBins(bins: null): this;\n equalValueRangesBins(\n bins: (bins: EqualValueRangesBinsBuilder<Datum>) => void\n ): this;\n equalValueRangesBins(\n bins: ((bins: EqualValueRangesBinsBuilder<Datum>) => void) | null\n ): this {\n if (bins === null) {\n this.equalValueRangesBinsBuilder = undefined;\n return this;\n }\n this.equalValueRangesBinsBuilder = new EqualValueRangesBinsBuilder();\n bins(this.equalValueRangesBinsBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object that maps data to bins that contain an equal number of data observations.\n *\n * This is useful for creating quartiles, deciles, etc.\n */\n equalFrequenciesBins(bins: null): this;\n equalFrequenciesBins(\n bins: (bins: EqualFrequenciesAttributeDataDimensionBuilder<Datum>) => void\n ): this;\n equalFrequenciesBins(\n bins:\n | ((bins: EqualFrequenciesAttributeDataDimensionBuilder<Datum>) => void)\n | null\n ): this {\n if (bins === null) {\n this.equalFrequenciesBinsBuilder = undefined;\n return this;\n }\n this.equalFrequenciesBinsBuilder =\n new EqualFrequenciesAttributeDataDimensionBuilder();\n bins(this.equalFrequenciesBinsBuilder);\n return this;\n }\n\n customFills(customFills: FillDefinition<Datum>[]): this {\n this._customFills = customFills;\n return this;\n }\n\n /**\n * REQUIRED. The accessor function that returns a value from a Datum that must match the value returned by featureIndexAccessor.\n */\n geographyIndexAccessor(accessor: (d: Datum) => string): this {\n this._geographyIndexAccessor = accessor;\n return this;\n }\n\n _build(): GeographiesAttributeDataLayer<Datum, TProperties, TGeometry> {\n this.validateBuilder();\n return new GeographiesAttributeDataLayer({\n marksClass: 'vic-geographies-attribute-data-layer',\n attributeDimension: this.binsBuilder._build(),\n customFills: this._customFills,\n data: this._data,\n featureClass: this._class,\n enableEventActions: this._enableEventActions,\n geographies: this._geographies,\n geographyIndexAccessor: this._geographyIndexAccessor,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder?._build(),\n });\n }\n\n private validateBuilder(): void {\n const binsBuilders = [\n this.categoricalBinsBuilder,\n this.customBreaksBinsBuilder,\n this.equalFrequenciesBinsBuilder,\n this.equalValueRangesBinsBuilder,\n this.noBinsBuilder,\n ];\n if (!this._data) {\n throw new Error('Data must be provided');\n }\n if (!this._geographyIndexAccessor) {\n throw new Error('Geography index accessor must be provided');\n }\n const numBinsBuilders = binsBuilders.filter((builder) => builder).length;\n if (numBinsBuilders !== 1) {\n throw new Error(\n `Exactly one bin strategy must be provided. Currently, ${numBinsBuilders} are provided.`\n );\n }\n this.binsBuilder = binsBuilders.find((builder) => builder);\n if (!this.strokeBuilder) {\n this.initStrokeBuilder();\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { FillUtilities } from '../../../../core/utilities/fill-utilities';\nimport { OrdinalVisualValueDimension } from '../../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport {\n GeographiesLayer,\n GeographiesTooltipDatum,\n} from '../geographies-layer/geographies-layer';\nimport { GeographiesGeojsonPropertiesLayerOptions } from './geojson-properties-layer-options';\n\nexport class GeographiesGeojsonPropertiesLayer<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n >\n extends GeographiesLayer<string, TProperties, TGeometry>\n implements GeographiesGeojsonPropertiesLayerOptions<TProperties, TGeometry>\n{\n readonly customFills: FillDefinition<\n GeographiesFeature<TProperties, TGeometry>\n >[];\n readonly fill: OrdinalVisualValueDimension<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >;\n readonly marksClass: string;\n readonly mixBlendMode: string;\n\n constructor(\n options: GeographiesGeojsonPropertiesLayerOptions<TProperties, TGeometry>\n ) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromGeographies();\n }\n\n private initPropertiesFromGeographies(): void {\n this.fill.setPropertiesFromData(this.geographies);\n }\n\n getFill(feature: GeographiesFeature<TProperties, TGeometry>): string {\n const featureIndex = this.featureIndexAccessor(feature);\n const defaultFill = this.fill.getScale()(featureIndex);\n return this.customFills\n ? FillUtilities.getFill(feature, defaultFill, this.customFills)\n : defaultFill;\n }\n\n getTooltipData(path: SVGPathElement): GeographiesTooltipDatum<undefined> {\n const feature = select(path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n const featureIndex = this.featureIndexAccessor(feature);\n const tooltipData: GeographiesTooltipDatum<undefined> = {\n attributeValue: undefined,\n datum: undefined,\n color: this.getFill(feature),\n geography: featureIndex,\n };\n\n return tooltipData;\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { OrdinalVisualValueDimensionBuilder } from '../../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { FillDefinition } from '../../../../fill-definitions/fill-definitions';\nimport { GeographiesFeature } from '../../../geographies-feature';\nimport { GeographiesLayerBuilder } from '../geographies-layer/geographies-layer-builder';\nimport { GeographiesGeojsonPropertiesLayer } from './geojson-properties-layer';\n\nconst DEFAULT = {\n _class: () => '',\n _enableEventActions: false,\n};\n\nexport class GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends GeographiesLayerBuilder<TProperties, TGeometry> {\n private fillBuilder: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >;\n private _customFills: FillDefinition<\n GeographiesFeature<TProperties, TGeometry>\n >[];\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL: Set a fill color or function that yields a color for all geographies in the layer.\n *\n * If a string is provided, all geographies will be filled with that color.\n *\n * Otherwise, you can use this method to specify how each geography should be filled based on the properties of the geojson feature.\n */\n fill(fill: null): this;\n fill(fill: string): this;\n fill(\n fill: (\n fill: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >\n ) => void\n ): this;\n fill(\n fill:\n | string\n | null\n | ((\n fill: OrdinalVisualValueDimensionBuilder<\n GeographiesFeature<TProperties, TGeometry>,\n string,\n string\n >\n ) => void)\n ): this {\n this.initFillBuilder();\n\n if (fill === null) {\n this.fillBuilder.valueAccessor(() => null).range(['None']);\n return this;\n }\n\n if (typeof fill === 'string') {\n this.fillBuilder.valueAccessor(() => null).range([fill]);\n } else {\n fill(this.fillBuilder);\n }\n return this;\n }\n\n customFills(\n customFills: FillDefinition<GeographiesFeature<TProperties, TGeometry>>[]\n ): this {\n this._customFills = customFills;\n return this;\n }\n\n private initFillBuilder(): void {\n this.fillBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n _build(): GeographiesGeojsonPropertiesLayer<TProperties, TGeometry> {\n this.validateBuilder();\n return new GeographiesGeojsonPropertiesLayer({\n marksClass: 'vic-geographies-geojson-properties-layer',\n customFills: this._customFills,\n featureClass: this._class,\n enableEventActions: this._enableEventActions,\n fill: this.fillBuilder._build('Fill'),\n geographies: this._geographies,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder?._build(),\n });\n }\n\n validateBuilder(): void {\n if (!this.fillBuilder) {\n this.initFillBuilder();\n }\n if (!this.strokeBuilder) {\n this.initStrokeBuilder();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport {\n ExtendedFeature,\n ExtendedFeatureCollection,\n ExtendedGeometryCollection,\n geoAlbersUsa,\n GeoGeometryObjects,\n GeoProjection,\n} from 'd3';\nimport { GeoJsonProperties, Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GeographiesConfig } from './geographies-config';\nimport { GeographiesAttributeDataLayerBuilder } from './layers/attribute-data-layer/attribute-data-layer-builder';\nimport { GeographiesGeojsonPropertiesLayerBuilder } from './layers/geojson-properties-layer/geojson-properties-layer-builder';\n\nconst DEFAULT = {\n _class: () => '',\n _projection: geoAlbersUsa(),\n _mixBlendMode: 'normal',\n};\n\n/** Builds a configuration object for a GeographiesComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicGeographiesBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the attribute data that will be used to shade the map areas.\n *\n * The second generic parameter, TProperties, is the type of the properties object that is associated with the GeoJson.\n *\n * The optional third generic parameter, TGeometry, is the type of the geometry object that is associated with the GeoJson. It defaults to MultiPolygon | Polygon if not provided.\n */\n@Injectable()\nexport class VicGeographiesConfigBuilder<\n Datum,\n TProperties extends GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> {\n private _boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection;\n protected _class: (d: Datum) => string;\n private _featureIndexAccessor: (\n d: GeographiesFeature<TProperties, TGeometry>\n ) => string;\n private _mixBlendMode: string;\n private _projection: GeoProjection;\n private attributeDataBuilder: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >;\n public geojsonBuilders: GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >[] = [];\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. Sets a feature or geometry object or collection that defines the extents of the map to be drawn.\n *\n * Used for scaling the map.\n */\n boundary(\n boundary:\n | ExtendedFeature\n | ExtendedFeatureCollection\n | GeoGeometryObjects\n | ExtendedGeometryCollection\n ): this {\n this._boundary = boundary;\n return this;\n }\n\n /**\n * REQUIRED. Sets a function that derives an identifying string from the GeoJson feature.\n */\n featureIndexAccessor(\n accessor: (d: GeographiesFeature<TProperties, TGeometry>) => string\n ): this {\n this._featureIndexAccessor = accessor;\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for a layer that will be drawn and styled using solely the properties on a geojson feature.\n *\n * This might be used for to draw the outline of a country, for example. It could also shade the area of a country based on a property of the geojson feature.\n *\n * If events are enabled, the geojson properties will be used to populate the tooltip.\n *\n * This method can be called multiple times to create multiple layers. If this method is called with null, all layers will be removed. (Though subsequent calls can be made to add new layers.)\n *\n * The order in which layers are created will determine the order in which they are drawn.\n *\n * Multiple layers can be used to draw different parts of the map with different styles.\n */\n geojsonPropertiesLayer(geojson: null): this;\n geojsonPropertiesLayer(\n geojson: (\n geojson: GeographiesGeojsonPropertiesLayerBuilder<TProperties, TGeometry>\n ) => void\n ): this;\n geojsonPropertiesLayer(\n geojson:\n | ((\n geojson: GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >\n ) => void)\n | null\n ): this {\n if (geojson === null) {\n this.geojsonBuilders = [];\n return this;\n }\n const builder = new GeographiesGeojsonPropertiesLayerBuilder<\n TProperties,\n TGeometry\n >();\n geojson(builder);\n this.geojsonBuilders.push(builder);\n return this;\n }\n\n /**\n * OPTIONAL. Creates a configuration object for a layer that will be drawn from geojson and styled using attribute data.\n *\n * This object provides various methods for transforming data values into colors / color bins.\n *\n * This method can be called only once.\n */\n attributeDataLayer(attributeData: null): this;\n attributeDataLayer(\n attributeData: (\n attributeData: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >\n ) => void\n ): this;\n attributeDataLayer(\n attributeData:\n | ((\n attributeData: GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >\n ) => void)\n | null\n ): this {\n if (attributeData === null) {\n this.attributeDataBuilder = undefined;\n return this;\n }\n this.attributeDataBuilder = new GeographiesAttributeDataLayerBuilder<\n Datum,\n TProperties,\n TGeometry\n >();\n attributeData(this.attributeDataBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Sets the mix-blend-mode of the marks.\n *\n * @default 'normal'\n */\n mixBlendMode(mixBlendMode: string): this {\n this._mixBlendMode = mixBlendMode;\n return this;\n }\n\n /**\n * OPTIONAL. Sets a projection function that maps a point in the map's coordinate space to a point in the SVG's coordinate space.\n *\n * @default d3.geoAlbersUsa()\n */\n projection(projection: GeoProjection): this {\n this._projection = projection;\n return this;\n }\n\n /**\n * REQUIRED. Builds the GeographiesConfig object.\n */\n getConfig(): GeographiesConfig<Datum, TProperties, TGeometry> {\n this.validateBuilder();\n const config = new GeographiesConfig<Datum, TProperties, TGeometry>({\n marksClass: 'vic-geographies',\n attributeDataLayer: this.attributeDataBuilder?._build(),\n boundary: this._boundary,\n mixBlendMode: this._mixBlendMode,\n featureIndexAccessor: this._featureIndexAccessor,\n geojsonPropertiesLayers: this.geojsonBuilders.length\n ? this.geojsonBuilders.map((builder) => builder._build())\n : undefined,\n projection: this._projection,\n });\n this.geojsonBuilders = [];\n return config;\n }\n\n private validateBuilder(): void {\n if (!this._boundary) {\n throw new Error('Boundary is required');\n }\n if (!this._featureIndexAccessor) {\n throw new Error('Feature index accessor is required');\n }\n if (!this.attributeDataBuilder && !this.geojsonBuilders.length) {\n throw new Error('At least one layer is required');\n }\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesClickEmitTooltipDataPauseOtherActions<Datum>\n implements\n EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const output = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(output);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesHoverEmitTooltipData<Datum>\n implements\n EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const outputData = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { GeographiesHost } from '../geographies-events.directive';\nimport { GeographiesInteractionOutput } from '../geographies-interaction-output';\n\nexport class GeographiesHoverMoveEmitTooltipData<Datum>\n implements\n HoverMoveAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>\n{\n onStart(host: GeographiesHost<Datum>): void {\n const outputData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: GeographiesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n ViewEncapsulation,\n} from '@angular/core';\nimport { GeoPath, geoPath, GeoProjection, select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { GeoJsonProperties, Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { BehaviorSubject, filter, Observable } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport { MapChartComponent } from '../charts/map-chart/map-chart.component';\nimport { MapPrimaryMarks } from '../marks/map-marks/map-primary-marks/map-primary-marks';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { GeographiesConfig } from './config/geographies-config';\nimport { GeographiesAttributeDataLayer } from './config/layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from './config/layers/geojson-properties-layer/geojson-properties-layer';\nimport { GeographiesLabels } from './config/layers/labels/geographies-labels';\nimport { GeographiesFeature } from './geographies-feature';\n\nexport type LayersGroup = Selection<SVGGElement, unknown, null, undefined>;\n\nexport const GEOGRAPHIES = new InjectionToken<\n GeographiesComponent<unknown, unknown>\n>('GeographiesComponent');\n\nexport type GeographiesSvgElement = 'layer' | 'g' | 'feature' | 'label';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-geographies]',\n templateUrl: './geographies.component.html',\n styleUrls: ['./geographies.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: GeographiesComponent },\n {\n provide: GEOGRAPHIES,\n useExisting: GeographiesComponent,\n },\n {\n provide: ChartComponent,\n useExisting: MapChartComponent,\n },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixed-blend-mode]': 'config.blendMode',\n },\n})\nexport class GeographiesComponent<\n Datum,\n TProperties extends GeoJsonProperties = GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> extends MapPrimaryMarks<\n Datum,\n GeographiesConfig<Datum, TProperties, TGeometry>\n> {\n projection: GeoProjection;\n path: GeoPath;\n pathsByLayer: BehaviorSubject<\n Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n > = new BehaviorSubject(null);\n pathsByLayer$: Observable<\n Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n > = this.pathsByLayer.asObservable().pipe(filter((d) => !!d));\n public elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<GeographiesSvgElement, string> {\n return {\n layer: this.config.marksClass + '-layer',\n g: this.config.marksClass + '-group',\n feature: this.config.marksClass + '-feature',\n label: this.config.marksClass + '-label',\n };\n }\n\n override initFromConfig(): void {\n this.setChartScalesFromRanges();\n if (this.config.attributeDataLayer) {\n this.updateChartAttributeProperties();\n } else {\n this.drawMarks();\n }\n }\n\n setChartScalesFromRanges(): void {\n this.setProjection();\n this.setPath();\n }\n\n setProjection(): void {\n this.projection = this.config.projection.fitSize(\n [\n this.ranges.x[1] - this.ranges.x[0],\n this.ranges.y[0] - this.ranges.y[1],\n ],\n this.config.boundary\n );\n }\n\n setPath(): void {\n this.path = geoPath().projection(this.projection);\n }\n\n updateChartAttributeProperties(): void {\n this.chart.updateAttributeProperties({\n scale: this.config.attributeDataLayer.attributeDimension.getScale(),\n config: this.config.attributeDataLayer.attributeDimension,\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.drawMap(transitionDuration);\n this.updateGeographyElements();\n }\n\n drawMap(transitionDuration): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n .duration(transitionDuration);\n this.drawLayers(t);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n drawLayers(t: any): void {\n const layerGroup = select(this.elRef.nativeElement)\n .style(\n 'transform',\n `translate(${this.chart.config.margin.left}px, ${this.chart.config.margin.top}px)`\n )\n .selectAll<\n SVGGElement,\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n >(`.${this.class.layer}`)\n .data<\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>\n >(this.config.layers, (layer) => layer.id)\n .join(\n (enter) =>\n enter\n .append('g')\n .attr(\n 'class',\n (layer) =>\n `${this.class.layer} ${this.class.layer}-${layer.id} ${layer.marksClass}`\n ),\n (update) => update,\n (exit) => exit.remove()\n );\n\n this.config.layers.forEach((layer) => {\n const geographyGroup = layerGroup\n .filter((d) => d.id === layer.id)\n .selectAll<SVGGElement, GeographiesFeature<TProperties, TGeometry>>(\n `.${this.class.g}`\n )\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => d.geographies,\n (d) => this.config.featureIndexAccessor(d)\n )\n .join('g')\n .attr('class', (d) =>\n `${this.class.g} ${layer.featureClass(d.properties)}`.trim()\n );\n\n geographyGroup\n .selectAll<SVGPathElement, GeographiesFeature<TProperties, TGeometry>>(\n `.${this.class.feature}`\n )\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => [d],\n (d) => this.config.featureIndexAccessor(d)\n )\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('d', (feature) => this.path(feature))\n .attr('class', this.class.feature)\n // layer-index is used on event directives\n .attr('data-layer-index', layer.id)\n .attr('stroke', layer.stroke.color)\n .attr('stroke-dasharray', layer.stroke.dasharray)\n .attr('stroke-linecap', layer.stroke.linecap)\n .attr('stroke-join', layer.stroke.linejoin)\n .attr('stroke-opacity', layer.stroke.opacity)\n .attr('stroke-width', layer.stroke.width)\n .attr('fill', (feature) => layer.getFill(feature)),\n (update) =>\n update.call((update) =>\n update\n .attr('d', (feature) => this.path(feature))\n .attr('class', this.class.feature)\n .attr('data-layer-index', layer.id)\n .transition(t)\n .attr('fill', (feature) => layer.getFill(feature))\n .attr('stroke', layer.stroke.color)\n .attr('stroke-dasharray', layer.stroke.dasharray)\n .attr('stroke-linecap', layer.stroke.linecap)\n .attr('stroke-join', layer.stroke.linejoin)\n .attr('stroke-opacity', layer.stroke.opacity)\n .attr('stroke-width', layer.stroke.width)\n ),\n (exit) => exit.remove()\n );\n\n if (layer.labels) {\n geographyGroup\n .filter((feature) =>\n layer.labels.display(layer.labels.valueAccessor(feature))\n )\n .selectAll<\n SVGTextElement,\n GeographiesFeature<TProperties, TGeometry>\n >(`.${this.class.label}`)\n .data<GeographiesFeature<TProperties, TGeometry>>(\n (d) => [d],\n (d) => this.config.featureIndexAccessor(d)\n )\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n // layer-index is used on event directives\n .attr('data-layer-index', layer.id)\n .attr('text-anchor', layer.labels.textAnchor)\n .attr('alignment-baseline', layer.labels.alignmentBaseline)\n .attr('dominant-baseline', layer.labels.dominantBaseline)\n .style('cursor', layer.labels.cursor)\n .attr('pointer-events', layer.labels.pointerEvents)\n .text((feature) => layer.labels.valueAccessor(feature))\n .attr(\n 'x',\n (feature) => this.getLabelPosition(feature, layer.labels).x\n )\n .attr(\n 'y',\n (feature) => this.getLabelPosition(feature, layer.labels).y\n )\n .attr('font-size', layer.labels.fontScale(this.ranges.x[1]))\n .attr('fill', (feature) => layer.getLabelColor(feature))\n .attr('font-weight', (feature) =>\n layer.getLabelFontWeight(feature)\n ),\n (update) =>\n update.call((update) =>\n update\n .text((feature) => layer.labels.valueAccessor(feature))\n .attr(\n 'y',\n (feature) => this.getLabelPosition(feature, layer.labels).y\n )\n .attr(\n 'x',\n (feature) => this.getLabelPosition(feature, layer.labels).x\n )\n .attr('font-size', layer.labels.fontScale(this.ranges.x[1]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('fill', (feature) => layer.getLabelColor(feature))\n .attr('font-weight', (feature) =>\n layer.getLabelFontWeight(feature)\n )\n ),\n (exit) => exit.remove()\n );\n }\n });\n }\n\n getLabelPosition(\n d: GeographiesFeature<TProperties, TGeometry>,\n labels: GeographiesLabels<TProperties, TGeometry>\n ): { x: number; y: number } {\n if (!this.path || !this.projection) return { x: 0, y: 0 };\n return labels.position(d, this.path, this.projection);\n }\n\n updateGeographyElements(): void {\n const pathsByLayer = this.config.layers.reduce(\n (paths, layer, i) => {\n if (layer.enableEventActions) {\n paths.push(\n select(this.elRef.nativeElement).selectAll(\n `.${this.class.layer}-${i} .${this.class.feature}`\n )\n );\n }\n return paths;\n },\n [] as Selection<\n SVGPathElement,\n GeographiesFeature<TProperties, TGeometry>,\n SVGGElement,\n GeographiesFeature<TProperties, TGeometry>\n >[]\n );\n this.pathsByLayer.next(pathsByLayer);\n }\n}\n","<ng-content></ng-content>\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\nexport class GeographiesTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { Geometry, MultiPolygon, Polygon } from 'geojson';\nimport { filter, map, Observable } from 'rxjs';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { GeographiesAttributeDataLayer } from '../config/layers/attribute-data-layer/attribute-data-layer';\nimport { GeographiesGeojsonPropertiesLayer } from '../config/layers/geojson-properties-layer/geojson-properties-layer';\nimport { GeographiesFeature } from '../geographies-feature';\nimport { GEOGRAPHIES, GeographiesComponent } from '../geographies.component';\nimport { GeographiesInteractionOutput } from './geographies-interaction-output';\nimport { GeographiesTooltipPositioner } from './geographies-tooltip-positioner';\n\nexport type GeographiesHost<\n Datum,\n TGeographiesComponent extends\n GeographiesComponent<Datum> = GeographiesComponent<Datum>,\n> = MarksHost<GeographiesInteractionOutput<Datum>, TGeographiesComponent>;\n\n@Directive({\n selector: '[vicGeographiesEvents]',\n})\nexport class GeographiesEventsDirective<\n Datum,\n TProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n TComponent extends GeographiesComponent<\n Datum,\n TProperties,\n TGeometry\n > = GeographiesComponent<Datum, TProperties, TGeometry>,\n> extends EventsDirective<GeographiesHost<Datum>> {\n @Input()\n hoverActions:\n | EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n GeographiesHost<Datum>,\n GeographiesInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<GeographiesHost<Datum>, GeographiesInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n GeographiesHost<Datum>,\n GeographiesInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n GeographiesInteractionOutput<Datum>\n >();\n\n bounds: [[number, number], [number, number]];\n layer:\n | GeographiesAttributeDataLayer<Datum, TProperties, TGeometry>\n | GeographiesGeojsonPropertiesLayer<TProperties, TGeometry>;\n path: SVGPathElement;\n\n constructor(@Inject(GEOGRAPHIES) public geographies: TComponent) {\n super();\n }\n\n get marks(): GeographiesComponent<Datum, TProperties, TGeometry> {\n return this.geographies;\n }\n\n getElements(): Observable<Element[]> {\n return this.geographies.pathsByLayer$.pipe(\n filter((layers) => !!layers),\n map((layers) => layers.flatMap((selections) => selections.nodes()))\n );\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this.asHost(), inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this.asHost(), inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.path = el as SVGPathElement;\n const layerIndex = parseFloat(this.path.dataset['layerIndex']);\n this.layer =\n layerIndex === 0\n ? this.geographies.config.attributeDataLayer\n : this.geographies.config.geojsonPropertiesLayers[layerIndex - 1];\n const d = select(this.path).datum() as GeographiesFeature<\n TProperties,\n TGeometry\n >;\n this.bounds = this.geographies.path.bounds(d);\n }\n\n setPositionsFromElement(): void {\n this.positionX = (this.bounds[1][0] - this.bounds[0][0]) / 2;\n this.positionY = (this.bounds[1][1] - this.bounds[0][1]) / 2;\n }\n\n getInteractionOutput(type: EventType): GeographiesInteractionOutput<Datum> {\n const tooltipData = this.layer.getTooltipData(this.path);\n const position = new GeographiesTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.path,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(\n output: GeographiesInteractionOutput<Datum> | null\n ): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.path = undefined;\n this.bounds = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n this.layer = undefined;\n }\n}\n","/**\n * A utility type that represents a GeoJson feature with a properties object of type TProperties and a geometry object of type TGeometry.\n */\n\nimport {\n Feature,\n GeoJsonProperties,\n Geometry,\n MultiPolygon,\n Polygon,\n} from 'geojson';\n\nexport type GeographiesFeature<\n TProperties extends GeoJsonProperties = GeoJsonProperties,\n TGeometry extends Geometry = MultiPolygon | Polygon,\n> = Feature<TGeometry, TProperties>;\n","import { NgModule } from '@angular/core';\nimport { GeographiesEventsDirective } from './events/geographies-events.directive';\nimport { GeographiesComponent } from './geographies.component';\n\n@NgModule({\n imports: [GeographiesComponent, GeographiesEventsDirective],\n exports: [GeographiesComponent, GeographiesEventsDirective],\n})\nexport class VicGeographiesModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { range } from 'd3';\nimport { BarsConfig } from '../../bars/config/bars-config';\nimport { BarsDimensions } from '../../bars/config/bars-dimensions';\nimport { DataValue } from '../../core/types/values';\nimport { GroupedBarsOptions } from './grouped-bars-options';\n\nconst DEFAULT = {\n intraGroupPadding: 0.05,\n};\n\nexport class GroupedBarsConfig<Datum, TOrdinalValue extends DataValue>\n extends BarsConfig<Datum, TOrdinalValue>\n implements GroupedBarsOptions<Datum, TOrdinalValue>\n{\n intraGroupPadding: number;\n\n constructor(\n dimensions: BarsDimensions,\n options: GroupedBarsOptions<Datum, TOrdinalValue>\n ) {\n super(dimensions, options);\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n override setValueIndices(): void {\n this.valueIndices = range(this.ordinal.values.length).filter((i) => {\n return (\n this.ordinal.domainIncludes(this.ordinal.values[i]) &&\n this.color.domainIncludes(this.color.values[i])\n );\n });\n }\n\n override setBarsKeyFunction(): void {\n this.barsKeyFunction = (i: number): string =>\n `${this.color.values[i]}-${this.ordinal.values[i]}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { VicBarsConfigBuilder } from '../../bars/config/bars-builder';\nimport { DataValue } from '../../core/types/values';\nimport { GroupedBarsConfig } from './grouped-bars-config';\n\nconst DEFAULT = {\n _intraGroupPadding: 0.05,\n};\n\n/**\n * Builds a configuration object for a GroupedBarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicGroupedBarsBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicGroupedBarsConfigBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicBarsConfigBuilder<Datum, TOrdinalValue> {\n private _intraGroupPadding: number;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Set the padding between groups of bars. Passed to d3.scaleBand.padding.\n *\n * @default 0.05\n */\n intraGroupPadding(padding: number): this {\n this._intraGroupPadding = padding;\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for a GroupedBarsComponent.\n */\n override getConfig(): GroupedBarsConfig<Datum, TOrdinalValue> {\n this.validateBuilder('Grouped Bars');\n return new GroupedBarsConfig(this.dimensions, {\n marksClass: 'vic-grouped-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n intraGroupPadding: this._intraGroupPadding,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n });\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { BarDatum, BARS, BarsHost, BarsInteractionOutput } from '../../bars';\nimport { BarsTooltipPositioner } from '../../bars/events/bars-tooltip-positioner';\nimport { DataValue } from '../../core';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { GroupedBarsComponent } from '../grouped-bars.component';\n\n@Directive({\n selector: '[vicGroupedBarsEvents]',\n})\nexport class GroupedBarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TGroupedBarsComponent extends GroupedBarsComponent<\n Datum,\n TOrdinalValue\n > = GroupedBarsComponent<Datum, TOrdinalValue>,\n >\n extends EventsDirective<BarsHost<Datum, TOrdinalValue>>\n implements BarsHost<Datum, TOrdinalValue>\n{\n @Input()\n hoverActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n BarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n barDatum: BarDatum<TOrdinalValue>;\n origin: SVGRectElement;\n\n constructor(@Inject(BARS) public bars: TGroupedBarsComponent) {\n super();\n }\n\n get marks(): GroupedBarsComponent<Datum, TOrdinalValue> {\n return this.bars;\n }\n\n getElements(): Observable<Element[]> {\n return this.bars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getBarDatum(): BarDatum<TOrdinalValue> | null {\n return this.barDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.barDatum = select(\n el as SVGRectElement\n ).datum() as BarDatum<TOrdinalValue>;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.bars.getSourceDatumFromBarDatum(this.barDatum);\n const tooltipData = datum ? this.bars.getTooltipData(datum) : undefined;\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.barDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { scaleBand } from 'd3';\nimport { BarDatum, BARS, BarsComponent } from '../bars/bars.component';\nimport { ChartComponent, XyChartComponent } from '../charts';\nimport { DataValue } from '../core/types/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { GroupedBarsConfig } from './config/grouped-bars-config';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-grouped-bars]',\n template: '',\n styleUrls: ['./grouped-bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: GroupedBarsComponent },\n { provide: BARS, useExisting: GroupedBarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class GroupedBarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BarsComponent<Datum, TOrdinalValue> {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('config') override config: GroupedBarsConfig<Datum, TOrdinalValue>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupScale: any;\n\n override drawMarks(): void {\n this.setGroupScale();\n super.drawMarks();\n }\n\n setGroupScale(): void {\n if (this.config.dimensions.ordinal === 'x') {\n this.groupScale = scaleBand(this.config.color.calculatedDomain, [\n 0,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.scales.x as any).bandwidth(),\n ]).padding(this.config.intraGroupPadding);\n } else {\n this.groupScale = scaleBand(this.config.color.calculatedDomain, [\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.scales.y as any).bandwidth(),\n 0,\n ]).padding(this.config.intraGroupPadding);\n }\n }\n\n override getBarColor(d: BarDatum<TOrdinalValue>): string {\n return this.scales.color(d.color);\n }\n\n override getBarXOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.x(d.ordinal) + this.groupScale(d.color);\n }\n\n override getBarY(d: BarDatum<TOrdinalValue>): number {\n if (this.config.dimensions.ordinal === 'x') {\n return this.getBarYQuantitative(d);\n } else {\n return this.getBarYOrdinal(d);\n }\n }\n\n override getBarYOrdinal(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.ordinal) + this.groupScale(d.color);\n }\n\n override getBarYQuantitative(d: BarDatum<TOrdinalValue>): number {\n return this.scales.y(d.quantitative);\n }\n\n override getBarWidthOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.groupScale as any).bandwidth();\n }\n\n override getBarHeightOrdinal(): number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.groupScale as any).bandwidth();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { GroupedBarsEventsDirective } from './events/grouped-bars-events.directive';\nimport { GroupedBarsComponent } from './grouped-bars.component';\n\n@NgModule({\n imports: [GroupedBarsComponent, GroupedBarsEventsDirective],\n exports: [GroupedBarsComponent, GroupedBarsEventsDirective],\n})\nexport class VicGroupedBarsModule {}\n","export type VicImageType = keyof typeof VicImage;\n\nexport enum VicImage {\n jpeg = 'jpeg',\n png = 'png',\n svg = 'svg',\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { VicImage } from './image-download-enums';\nimport { ImageDownloadOptions } from './image-download-options';\n\nconst DEFAULT = {\n fontEmbedCSS: undefined,\n backgroundColor: '#fff',\n quality: 1,\n};\n\nexport class VicJpegImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.jpeg;\n }\n}\n\nexport class VicPngImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.png;\n }\n}\n\nexport class VicSvgImageConfig implements ImageDownloadOptions {\n backgroundColor: string;\n containerNode: HTMLElement;\n fileName: string;\n filter: (domNode: HTMLElement) => boolean;\n fontEmbedCSS: string;\n imageType: string;\n quality: number;\n\n constructor(options?: Partial<ImageDownloadOptions>) {\n safeAssign(this, DEFAULT);\n safeAssign(this, options);\n this.imageType = VicImage.svg;\n }\n}\n","import { Injectable } from '@angular/core';\nimport * as domToImage from 'html-to-image';\nimport {\n VicJpegImageConfig,\n VicPngImageConfig,\n VicSvgImageConfig,\n} from './image-download-config';\nimport { VicImage } from './image-download-enums';\n\n@Injectable({ providedIn: 'root' })\nexport class VicImageDownloadService {\n domToImage = domToImage;\n\n /**\n * @param imageConfig\n * @returns fontEmbedCSS -- scans stylesheets for font files and base64 encodes them,\n * reuse this value in imageConfig for subsequent downloads to avoid\n * re-encoding fonts (slight performance boost)\n */\n async downloadImage(\n imageConfig: VicJpegImageConfig | VicPngImageConfig | VicSvgImageConfig\n ): Promise<string | void> {\n let dataUrl;\n if (imageConfig.fontEmbedCSS === undefined) {\n imageConfig.fontEmbedCSS = await domToImage.getFontEmbedCSS(\n imageConfig.containerNode\n );\n }\n const sizedImageConfig = {\n ...imageConfig,\n width: imageConfig.containerNode.scrollWidth,\n height: imageConfig.containerNode.scrollHeight,\n };\n switch (imageConfig.imageType) {\n case VicImage.jpeg:\n dataUrl = await this.domToImage.toJpeg(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n case VicImage.png:\n dataUrl = await this.domToImage.toPng(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n case VicImage.svg:\n dataUrl = await this.domToImage.toSvg(\n imageConfig.containerNode,\n sizedImageConfig\n );\n break;\n default:\n break;\n }\n\n this.createLinkAndClick(\n dataUrl,\n `${imageConfig.fileName}.${imageConfig.imageType}`\n );\n return imageConfig.fontEmbedCSS;\n }\n\n createLinkAndClick(dataUrl: string, fileName: string) {\n const link = document.createElement('a');\n link.download = fileName;\n link.href = dataUrl;\n link.click();\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { PointMarkersOptions } from './point-markers-options';\n\nexport class PointMarkers<Datum> implements PointMarkersOptions<Datum> {\n readonly datumClass: (d: Datum, i: number) => string;\n readonly display: (d: Datum) => boolean;\n readonly growByOnHover: number;\n readonly radius: number;\n\n constructor(options: PointMarkersOptions<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { PointMarkers } from './point-markers';\n\nconst DEFAULT = {\n _class: () => '',\n _display: () => true,\n _radius: 3,\n _growByOnHover: 2,\n};\n\nexport class PointMarkersBuilder<Datum> {\n private _display: (d: Datum) => boolean;\n private _class: (d: Datum) => string;\n private _growByOnHover: number;\n private _radius: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Provides a class on the SVG element that correspends to a single datum. If a datum creates multiple SVG elements -- for example, a rect and a label, the class will be applied on the parent SVGGElement.\n *\n * IF the chart does not have SVG elements that correspond to a single datum, this class will be placed on the SVG element that represents a collection of data, for example, a area in a stacked area chart, or a line in a line chart. In this case the datum passed to the callback function will be the first datum in the collection.\n *\n * Note that if the resultant string has spaces in the name, multiple classes will be applied. For example, if the class is 'North Carolina', the element will have the classes 'North' and 'Carolina'.\n */\n class(value: null): this;\n class(value: string): this;\n class(value: (d: Datum) => string): this;\n class(value: ((d: Datum) => string) | string | null): this {\n if (value === null) {\n this._class = DEFAULT._class;\n return this;\n }\n if (typeof value === 'string') {\n this._class = () => value;\n return this;\n }\n this._class = value;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if point markers will be _displayed_.\n *\n * This is used to configure the visibilty of markers -- a `true` value will set the `display` of markers to `block`, while a `false` value will set the display of the markers to `none`.\n *\n * One use case is to have markers hidden until a user interaction, such as hover.\n *\n * If a function is provided, markers whose filtering predicate returns `true` will have `display: block` while those whose predicate returns `false` will have `display: none` when the markers are drawn.\n *\n * @default () => true\n */\n display(display: boolean): this;\n display(display: (d: Datum) => boolean): this;\n display(display: boolean | ((d: Datum) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. A value by which the point marker will expand on hover, in px.\n *\n * @default 2\n */\n growByOnHover(growByOnHover: number): this {\n this._growByOnHover = growByOnHover;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the radius of the point marker, in px.\n *\n * @default 3\n */\n radius(radius: number): this {\n this._radius = radius;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): PointMarkers<Datum> {\n return new PointMarkers({\n datumClass: this._class,\n display: this._display,\n growByOnHover: this._growByOnHover,\n radius: this._radius,\n });\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { OrdinalVisualValueDimension } from '../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { StrokeBase } from '../../../stroke/base/stroke-base';\nimport { LinesStrokeOptions } from './lines-stroke-options';\nexport class LinesStroke<Datum>\n extends StrokeBase\n implements LinesStrokeOptions<Datum>\n{\n color: OrdinalVisualValueDimension<Datum, string, string>;\n\n constructor(options: Partial<LinesStrokeOptions<Datum>>) {\n super();\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { OrdinalVisualValueDimensionBuilder } from '../../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { LinesStroke } from './lines-stroke';\n\nconst DEFAULT = {\n _dasharray: 'none',\n _linecap: 'round',\n _linejoin: 'round',\n _opacity: 1,\n _width: 2,\n};\n\nexport class LinesStrokeBuilder<Datum> {\n private colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n string,\n string\n >;\n private _dasharray: string;\n private _linecap: string;\n private _linejoin: string;\n private _opacity: number;\n private _width: number;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Creates a dimension that will control the color of the bars.\n *\n * If not provided, all bars will be colored with the first color in `d3.schemeTableau10`, the default `range` for the dimension.\n */\n color(color: null): this;\n color(\n color: (\n dimension: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void\n ): this;\n color(\n color:\n | ((\n dimension: OrdinalVisualValueDimensionBuilder<Datum, string, string>\n ) => void)\n | null\n ): this {\n if (color === null) {\n this.colorDimensionBuilder = undefined;\n return this;\n }\n this.initColorDimensionBuilder();\n color(this.colorDimensionBuilder);\n return this;\n }\n\n private initColorDimensionBuilder() {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder();\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-dasharray]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray}\n * attribute.\n *\n * @default 'round'\n */\n dasharray(dasharray: string): this {\n this._dasharray = dasharray;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linecap]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap}\n * attribute.\n *\n * @default 'round'\n */\n linecap(linecap: string): this {\n this._linecap = linecap;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-linejoin]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin}\n * attribute.\n *\n * @default 'round'\n */\n linejoin(linejoin: string): this {\n this._linejoin = linejoin;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-opacity]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity}\n * attribute.\n *\n * @default 1\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A value for the line's [stroke-width]{@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width}\n * attribute, in px.\n *\n * @default 2\n */\n width(width: number): this {\n this._width = width;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): LinesStroke<Datum> {\n this.validateBuilder();\n return new LinesStroke<Datum>({\n color: this.colorDimensionBuilder._build('Lines Stroke Color'),\n dasharray: this._dasharray,\n linecap: this._linecap,\n linejoin: this._linejoin,\n opacity: this._opacity,\n width: this._width,\n });\n }\n\n validateBuilder(): void {\n if (!this.colorDimensionBuilder) {\n this.initColorDimensionBuilder();\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { FillDefinition } from '../../../data-dimensions';\nimport { AreaFills } from './area-fills';\n\nconst DEFAULT = {\n _display: () => true,\n _opacity: 0.2,\n _gradient: undefined,\n _color: undefined,\n};\n\nexport class AreaFillsBuilder<Datum> {\n private _display: (category: string) => boolean;\n private _opacity: number;\n private _customFills: FillDefinition<Datum>[];\n private _color: (d: Datum) => string;\n\n constructor() {\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A string which determines color of the fill under line,\n * or a function whose input is the first point in the line and which returns\n * a color string.\n * This string is directly passed to `fill` under the hood.\n *\n * If not set, the color of the line will be used.\n *\n * To unset the color, call with `null`.\n */\n color(color: null): this;\n color(color: string): this;\n color(color: (d: Datum) => string): this;\n color(color: string | ((d: Datum) => string) | null): this {\n if (color === null) {\n this._color = undefined;\n return this;\n }\n this._color = typeof color === 'string' ? () => color : color;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if fill under line should be displayed.\n *\n * @default true\n */\n display(display: boolean): this;\n display(display: (category: string) => boolean): this;\n display(display: boolean | ((category: string) => boolean)): this {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. A number to determine the opacity of the fill under line.\n *\n * @default 0.2\n */\n opacity(opacity: number): this {\n this._opacity = opacity;\n return this;\n }\n\n /**\n * OPTIONAL. A string to determine the gradient of the fill under line.\n *\n * @default undefined\n */\n customFills(customFills: FillDefinition<Datum>[]): this {\n this._customFills = customFills;\n return this;\n }\n\n /**\n * @internal This function is for internal use only and should never be called by the user.\n */\n _build(): AreaFills<Datum> {\n return {\n display: this._display,\n opacity: this._opacity,\n customFills: this._customFills,\n color: this._color,\n };\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { CurveFactory, group, range } from 'd3';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { PointMarkers } from '../../point-markers/point-markers';\nimport { LinesGroupSelectionDatum } from '../lines.component';\nimport { AreaFills } from './area-fills/area-fills';\nimport { LinesOptions } from './lines-options';\nimport { LinesStroke } from './stroke/lines-stroke';\n\nexport interface LinesMarkerDatum {\n key: string;\n index: number;\n category: string;\n display: string;\n}\n\nexport class LinesConfig<Datum>\n extends XyPrimaryMarksConfig<Datum>\n implements LinesOptions<Datum>\n{\n readonly curve: CurveFactory;\n readonly labelLines: boolean;\n readonly lineLabelsFormat: (d: string) => string;\n linesD3Data;\n linesKeyFunction: (d: LinesGroupSelectionDatum) => string;\n readonly areaFills: AreaFills<Datum>;\n readonly pointerDetectionRadius: number;\n readonly pointMarkers: PointMarkers<Datum>;\n readonly stroke: LinesStroke<Datum>;\n readonly x:\n | DateChartPositionDimension<Datum>\n | NumberChartPositionDimension<Datum>;\n readonly y: NumberChartPositionDimension<Datum>;\n\n constructor(options: LinesOptions<Datum>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setLinesD3Data();\n this.setLinesKeyFunction();\n }\n\n private setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data);\n this.stroke.color.setPropertiesFromData(this.data);\n }\n\n private setValueIndices(): void {\n this.valueIndices = range(this.x.values.length).filter((i) =>\n this.stroke.color.domainIncludes(this.stroke.color.values[i])\n );\n }\n\n private setLinesD3Data(): void {\n const definedIndices = this.valueIndices.filter(\n (i) =>\n this.x.isValidValue(this.x.values[i]) &&\n this.y.isValidValue(this.y.values[i])\n );\n this.linesD3Data = group(\n definedIndices,\n (i) => this.stroke.color.values[i]\n );\n }\n\n getDataFromCategory(category: string): Datum[] {\n return this.linesD3Data.get(category).map((i) => this.data[i]);\n }\n\n private setLinesKeyFunction(): void {\n this.linesKeyFunction = (d): string => d[0];\n }\n\n getPointMarkersData(indices: number[]): LinesMarkerDatum[] {\n return indices.map((i) => {\n return {\n key: this.getMarkerKey(i),\n index: i,\n category: this.stroke.color.values[i],\n display: this.pointMarkers.display(this.data[i]) ? 'block' : 'none',\n };\n });\n }\n\n private getMarkerKey(i: number): string {\n return `${this.stroke.color.values[i]}-${this.x.values[i]}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { CurveFactory, curveLinear } from 'd3';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { PointMarkersBuilder } from '../../point-markers/point-markers-builder';\nimport { LinesStrokeBuilder } from '../config/stroke/lines-stroke-builder';\nimport { AreaFillsBuilder } from './area-fills/area-fills-builder';\nimport { LinesConfig } from './lines-config';\n\nconst DEFAULT = {\n _curve: curveLinear,\n _pointerDetectionRadius: 80,\n _lineLabelsFormat: (d: string) => d,\n};\n\n/**\n * Builds a configuration object for a LinesComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicLinesBuilder]` in the component decorator)\n *\n * The generic parameter, Datum, is the type of the data that will be used to create the lines.\n */\n@Injectable()\nexport class VicLinesConfigBuilder<Datum> extends PrimaryMarksBuilder<Datum> {\n private _curve: CurveFactory;\n private _labelLines: boolean;\n private _lineLabelsFormat: (d: string) => string;\n private _pointerDetectionRadius: number;\n private pointMarkersBuilder: PointMarkersBuilder<Datum>;\n private strokeBuilder: LinesStrokeBuilder<Datum>;\n private xDimensionBuilder:\n | NumberChartPositionDimensionBuilder<Datum>\n | DateChartPositionDimensionBuilder<Datum>;\n private yDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n private areaFillsBuilder: AreaFillsBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. A config to set fill underneath lines.\n *\n * If no argument is provided, the default area fills will be created.\n *\n * To unset the area fills, call with `null`.\n */\n areaFills(): this;\n areaFills(areaFills: null): this;\n areaFills(areaFills: (areaFills: AreaFillsBuilder<Datum>) => void): this;\n areaFills(\n areaFills?: ((areaFills: AreaFillsBuilder<Datum>) => void) | null\n ): this {\n if (areaFills === null) {\n this.areaFillsBuilder = undefined;\n return this;\n }\n this.initBelowLinesAreaFillBuilder();\n areaFills?.(this.areaFillsBuilder);\n return this;\n }\n\n private initBelowLinesAreaFillBuilder(): void {\n this.areaFillsBuilder = new AreaFillsBuilder();\n }\n\n /**\n * OPTIONAL. A function passed to D3's [line.curve()]{@link https://github.com/d3/d3-shape#line_curve}\n * method.\n *\n * @default [curveLinear]{@link https://github.com/d3/d3-shape#curveLinear}.\n */\n curve(curve: CurveFactory): this {\n this._curve = curve;\n return this;\n }\n\n /**\n * OPTIONAL. A boolean to determine if the line will be labeled.\n */\n labelLines(labelLines: boolean): this {\n this._labelLines = labelLines;\n return this;\n }\n\n /**\n * OPTIONAL. A function that returns a string to be used as the label for a line. Can be used to modify the\n * line label string as needed.\n *\n * @default identity function.\n */\n lineLabelsFormat(lineLabelsFormat: (d: string) => string): this {\n this._lineLabelsFormat = lineLabelsFormat;\n return this;\n }\n\n /**\n * OPTIONAL. The distance from a line in which a hover event will trigger a tooltip, in px.\n *\n * This is used to ensure that a tooltip is triggered only when a user's pointer is close to lines.\n *\n * @default 80\n */\n pointerDetectionRadius(pointerDetectionRadius: number): this {\n this._pointerDetectionRadius = pointerDetectionRadius;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of markers for each datum on the line.\n *\n * Creating this config will create markers on lines. If no argument is provided, the default markers will be created.\n */\n pointMarkers(): this;\n pointMarkers(pointMarkers: null): this;\n pointMarkers(\n pointMarkers: ((pointMarkers: PointMarkersBuilder<Datum>) => void) | null\n ): this;\n pointMarkers(\n pointMarkers?: ((pointMarkers: PointMarkersBuilder<Datum>) => void) | null\n ): this {\n if (pointMarkers === null) {\n this.pointMarkersBuilder = undefined;\n return this;\n }\n this.pointMarkersBuilder = new PointMarkersBuilder();\n pointMarkers?.(this.pointMarkersBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the line stroke.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: LinesStrokeBuilder<Datum>) => void): this;\n stroke(stroke: ((stroke: LinesStrokeBuilder<Datum>) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new LinesStrokeBuilder();\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using numeric data.\n */\n xNumeric(xNumeric: null): this;\n xNumeric(\n xNumeric: (x: NumberChartPositionDimensionBuilder<Datum>) => void\n ): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xDimensionBuilder = undefined;\n return this;\n }\n this.xDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's x dimension when using Date date.\n */\n xDate(xDate: null): this;\n xDate(xDate: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) {\n this.xDimensionBuilder = undefined;\n return this;\n }\n this.xDimensionBuilder = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. A config for the behavior of the chart's y dimension.\n */\n y(y: null): this;\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n y(y: ((y: NumberChartPositionDimensionBuilder<Datum>) => void) | null): this {\n if (y === null) {\n this.yDimensionBuilder = undefined;\n return this;\n }\n this.yDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for the LinesComponent.\n */\n getConfig(): LinesConfig<Datum> {\n this.validateBuilder();\n return new LinesConfig({\n marksClass: 'vic-lines',\n curve: this._curve,\n data: this._data,\n datumClass: this._datumClass,\n labelLines: this._labelLines,\n lineLabelsFormat: this._lineLabelsFormat,\n mixBlendMode: this._mixBlendMode,\n pointerDetectionRadius: this._pointerDetectionRadius,\n pointMarkers: this.pointMarkersBuilder?._build(),\n stroke: this.strokeBuilder._build(),\n x: this.xDimensionBuilder._build('X'),\n y: this.yDimensionBuilder._build('Y'),\n areaFills: this.areaFillsBuilder?._build(),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Lines');\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n if (!this.xDimensionBuilder) {\n throw new Error(\n 'Lines Builder: X dimension is required. Please use method `createXNumericDimension` or `createXDateDimension` to set it.'\n );\n }\n if (!this.yDimensionBuilder) {\n throw new Error(\n 'Lines Builder: Y dimension is required. Please use method `createYDimension` to set it.'\n );\n }\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { LinesHost } from '../lines-events.directive';\n\nexport class LinesClickEmitTooltipDataPauseHoverMoveActions<Datum>\n implements EventAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>) {\n const outputData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: LinesHost<Datum>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { EventType, HoverMoveAction } from '../../../events';\nimport { LinesMarkerDatum } from '../../config/lines-config';\nimport { LinesGroupSelectionDatum } from '../../lines.component';\nimport { LinesHost } from '../lines-events.directive';\n\n/**\n * A suggested default action for the hover and move event on lines.\n *\n * This action changes the color of the non-closest-to-pointer lines\n * to a light gray.\n */\nexport class LinesHoverMoveDefaultLinesStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n host\n .getClosestLineGroup()\n .raise()\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', null);\n\n host\n .getOtherLineGroups()\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', '#ddd');\n }\n\n onEnd(directive: LinesHost<Datum>): void {\n directive.marks.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>('path')\n .style('stroke', null);\n }\n}\n\n/**\n * A suggested default action for the hover and move event on line markers.\n *\n * This action makes line markers on non-closest-to-pointer lines invisible,\n * and at the same time enlarges the marker on the \"selected\" line that is\n * closest to the pointer by a specified amount.\n */\nexport class LinesHoverMoveDefaultMarkersStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n host\n .getClosestMarker()\n .style('display', 'block')\n .attr('r', () => {\n let r = host.marks.config.pointMarkers.radius;\n r =\n host.marks.config.pointMarkers.radius +\n host.marks.config.pointMarkers.growByOnHover;\n return r;\n })\n .raise();\n\n host.getOtherMarkers().style('display', 'none');\n }\n\n onEnd(host: LinesHost<Datum>): void {\n host.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .style('display', (d) => d.display)\n .attr('r', () => host.marks.config.pointMarkers.radius);\n }\n}\n\n/**\n * A collection of suggested default actions for the hover and move event\n * on lines and line markers.\n *\n * Applies either Line Markers action or a Hover Dot action depending on\n * whether line markers are used.\n */\nexport class LinesHoverMoveDefaultStyles<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n linesStyles: HoverMoveAction<LinesHost<Datum>>;\n markersStyles: HoverMoveAction<LinesHost<Datum>>;\n\n constructor() {\n this.linesStyles = new LinesHoverMoveDefaultLinesStyles();\n this.markersStyles = new LinesHoverMoveDefaultMarkersStyles();\n }\n\n onStart(host: LinesHost<Datum>) {\n this.linesStyles.onStart(host);\n if (host.marks.config.pointMarkers) {\n this.markersStyles.onStart(host);\n }\n }\n\n onEnd(host: LinesHost<Datum>) {\n this.linesStyles.onEnd(host);\n if (host.marks.config.pointMarkers) {\n this.markersStyles.onEnd(host);\n }\n }\n}\n\nexport class LinesHoverMoveEmitTooltipData<Datum>\n implements HoverMoveAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: LinesHost<Datum>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { EventAction, EventType } from '../../../events';\nimport { LinesHost } from '../lines-events.directive';\n\nexport class LinesMarkerClickEmitTooltipData<Datum>\n implements EventAction<LinesHost<Datum>>\n{\n onStart(host: LinesHost<Datum>) {\n const tooltipData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host\n .getClosestMarker()\n .attr('r', (): number => {\n const r =\n host.marks.config.pointMarkers.radius +\n host.marks.config.pointMarkers.growByOnHover;\n return r;\n })\n .raise();\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: LinesHost<Datum>) {\n host\n .getClosestMarker()\n .attr('r', (): number => host.marks.config.pointMarkers.radius);\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n ViewEncapsulation,\n} from '@angular/core';\nimport { area, line, map, select, Transition } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport {\n XyChartComponent,\n XyChartScales,\n} from '../charts/xy-chart/xy-chart.component';\nimport { GenericScale } from '../core';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport { LinesConfig, LinesMarkerDatum } from './config/lines-config';\nimport { LinesInteractionOutput } from './events/lines-interaction-output';\n\nexport type LinesGroupSelection = Selection<\n SVGGElement,\n LinesGroupSelectionDatum,\n SVGGElement,\n unknown\n>;\n\nexport type LinesGroupSelectionDatum = [string, number[]];\n\nexport const LINES = new InjectionToken<LinesComponent<unknown>>(\n 'LinesComponent'\n);\n\nexport interface LinesTooltipDatum<Datum> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n strokeColor: string;\n };\n}\n\ntype LinesSvgElements = 'g' | 'line' | 'area' | 'marker' | 'label';\n\nexport type MarkerSelection = Selection<\n SVGCircleElement,\n LinesMarkerDatum,\n SVGGElement,\n LinesGroupSelectionDatum\n>;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-lines]',\n template: '',\n styleUrls: ['./lines.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: LinesComponent },\n { provide: LINES, useExisting: LinesComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[attr.stroke-linecap]': 'config.stroke.linecap',\n '[attr.stroke-linejoin]': 'config.stroke.linejoin',\n '[attr.stroke-width]': 'config.stroke.width',\n '[attr.stroke-opacity]': 'config.stroke.opacity',\n '[style.mix-blend-mode]': 'config.mixBlendMode',\n fill: 'none',\n },\n})\nexport class LinesComponent<Datum> extends VicXyPrimaryMarks<\n Datum,\n LinesConfig<Datum>\n> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n line: (x: any[]) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lineArea: (x: any[]) => any;\n lineGroups: LinesGroupSelection;\n lineLabelsRef: ElementRef<SVGSVGElement>;\n markerIndexAttr = 'index';\n markers: BehaviorSubject<MarkerSelection> = new BehaviorSubject(null);\n markers$ = this.markers.asObservable().pipe(filter((d) => !!d));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n private zone = inject(NgZone);\n private elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<LinesSvgElements, string> {\n return {\n g: this.config.marksClass + '-group',\n line: this.config.marksClass + '-line',\n area: this.config.marksClass + '-area',\n marker: this.config.marksClass + '-marker',\n label: this.config.marksClass + '-label',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.color = this.config.stroke.color.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n this.setLine();\n const transitionDuration = this.getTransitionDuration();\n this.drawLines(transitionDuration);\n if (this.config.areaFills) {\n this.setAreaFunction();\n this.drawAreaFills(transitionDuration);\n }\n if (this.config.pointMarkers) {\n this.drawPointMarkers(transitionDuration);\n this.updateMarkerElements();\n }\n if (this.config.labelLines) {\n this.drawLineLabels();\n }\n }\n\n setLine(): void {\n const isValid = map(this.config.data, this.isValidValue.bind(this));\n\n this.line = line()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined((i: any) => isValid[i] as boolean)\n .curve(this.config.curve)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((i: any) => this.scales.x(this.config.x.values[i]))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y((i: any) => this.scales.y(this.config.y.values[i]));\n }\n\n setAreaFunction(): void {\n const isValid = map(this.config.data, this.isValidValue.bind(this));\n\n this.lineArea = area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined((i: any) => isValid[i] as boolean)\n .curve(this.config.curve)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x((i: any) => this.scales.x(this.config.x.values[i]))\n .y0(() => this.scales.y(0))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .y1((i: any) => this.scales.y(this.config.y.values[i]));\n }\n\n isValidValue(d: Datum): boolean {\n const xIsValid = this.config.x.isValidValue(this.config.x.valueAccessor(d));\n const yIsValid = this.config.y.isValidValue(this.config.y.valueAccessor(d));\n return xIsValid && yIsValid;\n }\n\n drawLines(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, LinesGroupSelectionDatum>(`.${this.class.g}`)\n .data<LinesGroupSelectionDatum>(\n this.config.linesD3Data,\n this.config.linesKeyFunction\n )\n .join(\n (enter) => enter.append('g').attr('class', this.class.g),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (update) => update.transition(t as any),\n (exit) => exit.remove()\n );\n\n this.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>(\n `.${this.class.line}`\n )\n .data<LinesGroupSelectionDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('class', ([category], i) =>\n `${this.class.line} ${this.config.datumClass(this.config.getDataFromCategory(category)[0], i)}`.trim()\n )\n .attr('stroke', ([category]) => this.scales.color(category))\n .attr('d', ([, lineData]) => this.line(lineData)),\n (update) =>\n update\n .attr('stroke', ([category]) => this.scales.color(category))\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', ([, lineData]) => this.line(lineData))\n ),\n (exit) => exit.remove()\n );\n }\n\n drawAreaFills(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups\n .selectAll<SVGPathElement, LinesGroupSelectionDatum>(\n `.${this.class.area}`\n )\n .data<LinesGroupSelectionDatum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('path')\n .attr('class', this.class.area)\n .attr('fill', ([category, indices]) =>\n this.getAreaFill(category, indices)\n )\n .attr('opacity', this.config.areaFills.opacity)\n .attr('d', ([, lineData]) => this.lineArea(lineData))\n .attr('display', ([category]) =>\n this.config.areaFills.display(category) ? null : 'none'\n ),\n (update) =>\n update\n .attr('fill', ([category, indices]) =>\n this.getAreaFill(category, indices)\n )\n .attr('opacity', this.config.areaFills.opacity)\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', ([, lineData]) => this.lineArea(lineData))\n )\n .attr('display', ([category]) =>\n this.config.areaFills.display(category) ? null : 'none'\n ),\n (exit) => exit.remove()\n );\n }\n\n getAreaFill(category: string, lineDataIndices: number[]): string {\n const firstPointInLine = this.config.data[lineDataIndices[0]];\n if (this.config.areaFills.customFills) {\n const fillDef = this.config.areaFills.customFills.find((def) =>\n def.shouldApply(firstPointInLine)\n );\n if (fillDef) {\n return `url(#${fillDef.defId})`;\n } else {\n return null;\n }\n }\n if (this.config.areaFills.color) {\n return this.config.areaFills.color(firstPointInLine);\n }\n return this.scales.color(category);\n }\n\n drawPointMarkers(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>(`.${this.class.marker}`)\n .data<LinesMarkerDatum>(([, indices]) =>\n this.config.getPointMarkersData(indices)\n )\n .join(\n (enter) =>\n enter\n .append('circle')\n .attr('class', (d) =>\n `${this.class.marker} ${this.config.pointMarkers.datumClass(this.config.data[d.index], d.index)}`.trim()\n )\n .attr(this.markerIndexAttr, (d) => d.index)\n .attr('cx', (d) => this.scales.x(this.config.x.values[d.index]))\n .attr('cy', (d) => this.scales.y(this.config.y.values[d.index]))\n .attr('r', this.config.pointMarkers.radius)\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .style('display', (d) => d.display),\n (update) =>\n update\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('cx', (d) => this.scales.x(this.config.x.values[d.index]))\n .attr('cy', (d) => this.scales.y(this.config.y.values[d.index]))\n ),\n (exit) => exit.remove()\n );\n }\n\n drawLineLabels(): void {\n // TODO: make more flexible (or its own element? currently this only puts labels on the right side of the chart\n this.lineGroups\n .selectAll(`.${this.class.label}`)\n .data(([category, indices]) => {\n return [\n {\n category,\n index: indices[indices.length - 1],\n },\n ];\n })\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n .attr('text-anchor', 'end')\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .attr(\n 'x',\n (d) => `${this.scales.x(this.config.x.values[d.index]) - 4}px`\n )\n .attr(\n 'y',\n (d) => `${this.scales.y(this.config.y.values[d.index]) - 12}px`\n )\n .text((d) => this.config.lineLabelsFormat(d.category)),\n (update) =>\n update\n .attr('fill', (d) =>\n this.scales.color(this.config.stroke.color.values[d.index])\n )\n .attr(\n 'x',\n (d) => `${this.scales.x(this.config.x.values[d.index]) - 4}px`\n )\n .attr(\n 'y',\n (d) => `${this.scales.y(this.config.y.values[d.index]) - 12}px`\n )\n .text((d) => this.config.lineLabelsFormat(d.category)),\n (exit) => exit.remove()\n );\n }\n\n updateMarkerElements(): void {\n const markers = select(this.elRef.nativeElement).selectAll<\n SVGCircleElement,\n LinesMarkerDatum\n >(`.${this.class.marker}`);\n this.markers.next(markers);\n }\n\n getTooltipData(\n datumIndex: number\n ): Omit<\n LinesInteractionOutput<Datum>,\n 'type' | 'fromAnchor' | 'customPosition' | 'defaultPosition'\n > {\n const datum = this.config.data[datumIndex];\n return {\n datum,\n color: this.scales.color(this.config.stroke.color.valueAccessor(datum)),\n values: {\n strokeColor: this.config.stroke.color.valueAccessor(datum),\n x: this.config.x.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.x.formatFunction)\n : ValueUtilities.d3Format(\n this.config.x.valueAccessor(datum),\n this.config.x.formatSpecifier\n ),\n y: this.config.y.formatFunction\n ? ValueUtilities.customFormat(datum, this.config.y.formatFunction)\n : ValueUtilities.d3Format(\n this.config.y.valueAccessor(datum),\n this.config.y.formatSpecifier\n ),\n },\n anchor: {\n x: this.scales.x(this.config.x.values[datumIndex]),\n y: this.scales.y(this.config.y.values[datumIndex]),\n },\n origin: this.chart.svgRef.nativeElement,\n };\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class LinesTooltipPositioner extends TooltipPositioner {\n constructor(private anchor: { x: number; y: number }) {\n super();\n }\n\n fromAnchor(offset: { x: number; y: number }): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n this.anchor.y - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { least } from 'd3';\nimport { Observable, of } from 'rxjs';\nimport { ContinuousValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { LinesMarkerDatum } from '../config/lines-config';\nimport {\n LINES,\n LinesComponent,\n LinesGroupSelection,\n MarkerSelection,\n} from '../lines.component';\nimport { LinesInteractionOutput } from './lines-interaction-output';\nimport { LinesTooltipPositioner } from './lines-tooltip-positioner';\n\nexport interface LinesHost<\n Datum,\n TLinesComponent extends LinesComponent<Datum> = LinesComponent<Datum>,\n> extends MarksHost<LinesInteractionOutput<Datum>, TLinesComponent> {\n getClosestPointIndex(): number;\n getClosestLineGroup(): LinesGroupSelection;\n getOtherLineGroups(): LinesGroupSelection;\n getClosestMarker(): MarkerSelection;\n getOtherMarkers(): MarkerSelection;\n}\n\n@Directive({\n selector: '[vicLinesEvents]',\n})\nexport class LinesEventsDirective<\n Datum,\n TLinesComponent extends LinesComponent<Datum> = LinesComponent<Datum>,\n >\n extends EventsDirective<LinesHost<Datum>>\n implements LinesHost<Datum>\n{\n @Input()\n hoverMoveActions:\n | HoverMoveAction<LinesHost<Datum>, LinesInteractionOutput<Datum>>[]\n | null;\n @Input()\n clickActions:\n | EventAction<LinesHost<Datum>, LinesInteractionOutput<Datum>>[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n LinesHost<Datum>,\n LinesInteractionOutput<Datum>\n >[];\n @Output() interactionOutput = new EventEmitter<\n LinesInteractionOutput<Datum>\n >();\n\n closestPointIndex: number;\n actionActive: boolean = false;\n\n constructor(@Inject(LINES) public lines: TLinesComponent) {\n super();\n }\n\n get marks(): LinesComponent<Datum> {\n return this.lines;\n }\n\n getElements(): Observable<Element[]> {\n return of([this.lines.chart.svgRef.nativeElement]);\n }\n\n getClosestPointIndex(): number {\n return this.closestPointIndex;\n }\n\n getClosestLineGroup(): LinesGroupSelection {\n return this.marks.lineGroups.filter(\n ([category]) =>\n this.marks.config.stroke.color.values[this.getClosestPointIndex()] ===\n category\n );\n }\n\n getOtherLineGroups(): LinesGroupSelection {\n return this.marks.lineGroups.filter(\n ([category]) =>\n this.marks.config.stroke.color.values[this.getClosestPointIndex()] !==\n category\n );\n }\n\n getClosestMarker(): MarkerSelection {\n return this.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .filter((d) => d.index === this.getClosestPointIndex());\n }\n\n getOtherMarkers(): MarkerSelection {\n return this.marks.lineGroups\n .selectAll<SVGCircleElement, LinesMarkerDatum>('circle')\n .filter((d) => d.index !== this.getClosestPointIndex());\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onEnter(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this);\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.callPointerEventActions(\n EventType.HoverMove,\n this.hoverMoveActions\n );\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n if (this.actionActive) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this));\n this.actionActive = false;\n }\n this.resetDirective();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClick(event: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.callPointerEventActions(EventType.Click, this.clickActions);\n }\n }\n }\n\n onClickRemove(): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.clickActions.forEach((action) => action.onEnd(this));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n pointerIsInChartArea(): boolean {\n return (\n this.positionX > this.lines.ranges.x[0] &&\n this.positionX < this.lines.ranges.x[1] &&\n this.positionY > this.lines.ranges.y[1] &&\n this.positionY < this.lines.ranges.y[0]\n );\n }\n\n private callPointerEventActions(\n type: EventType,\n actions: EventAction<this>[]\n ): void {\n if (!this.isEventAllowed(type)) return;\n\n this.closestPointIndex = this._getClosestPointIndex();\n\n const isInside = this.pointerIsInsideShowTooltipRadius(\n this.closestPointIndex,\n this.positionX,\n this.positionY\n );\n\n if (isInside) {\n actions.forEach((action) => action.onStart(this));\n this.actionActive = true;\n } else {\n this.closestPointIndex = null;\n if (this.actionActive) {\n actions.forEach((action) => action.onEnd(this));\n this.actionActive = false;\n }\n }\n }\n\n protected _getClosestPointIndex(): number {\n return least(this.lines.config.valueIndices, (i) =>\n this.getPointerDistanceFromPoint(\n this.lines.config.x.values[i],\n this.lines.config.y.values[i],\n this.positionX,\n this.positionY\n )\n );\n }\n\n getPointerDistanceFromPoint(\n xValue: ContinuousValue,\n yValue: number,\n pointerX: number,\n pointerY: number\n ): number {\n return Math.hypot(\n this.lines.scales.x(xValue) - pointerX,\n this.lines.scales.y(yValue) - pointerY\n );\n }\n\n pointerIsInsideShowTooltipRadius(\n closestPointIndex: number,\n pointerX: number,\n pointerY: number\n ): boolean {\n if (!this.lines.config.pointerDetectionRadius) {\n return true;\n } else {\n const cursorDistanceFromPoint = this.getPointerDistanceFromPoint(\n this.lines.config.x.values[closestPointIndex],\n this.lines.config.y.values[closestPointIndex],\n pointerX,\n pointerY\n );\n return cursorDistanceFromPoint < this.lines.config.pointerDetectionRadius;\n }\n }\n\n setPositionsFromElement(): void {\n return;\n }\n\n getInteractionOutput(type: EventType): LinesInteractionOutput<Datum> {\n const tooltipData = this.lines.getTooltipData(this.closestPointIndex);\n const position = new LinesTooltipPositioner({\n x: tooltipData.anchor.x,\n y: tooltipData.anchor.y,\n });\n\n return {\n ...tooltipData,\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: LinesInteractionOutput<Datum>): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.closestPointIndex = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LinesEventsDirective } from './events/lines-events.directive';\nimport { LinesComponent } from './lines.component';\n\n@NgModule({\n imports: [LinesComponent, LinesEventsDirective],\n exports: [LinesComponent, LinesEventsDirective],\n})\nexport class VicLinesModule {}\n","import { Directive, Input, OnChanges, OnInit } from '@angular/core';\nimport { Orientation, Side } from '../core/types/layout';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { BinStrategy } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { VicAttributeDataDimensionConfig } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { CalculatedBinsAttributeDataDimension } from '../geographies/config/layers/attribute-data-layer/dimensions/calculated-bins/calculated-bins';\n\n@Directive()\nexport abstract class MapLegend<\n Datum,\n AttributeDimensionConfig extends VicAttributeDataDimensionConfig<Datum>,\n >\n implements OnChanges, OnInit\n{\n @Input() width: number;\n @Input() height: number;\n @Input() orientation: keyof typeof Orientation;\n @Input() valuesSide: keyof typeof Side;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() scale: any;\n @Input() config: AttributeDimensionConfig;\n @Input() outlineColor: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: any[];\n colors: string[];\n startValueSpace: number;\n endValueSpace: number;\n largerValueSpace: number;\n leftOffset: number;\n VicValuesBin: typeof BinStrategy;\n\n abstract getValuesFromScale(): string[] | number[];\n abstract getLeftOffset(values?: string[]): number;\n\n ngOnChanges(): void {\n this.setValues();\n this.setColors();\n }\n\n ngOnInit(): void {\n this.VicValuesBin = BinStrategy;\n }\n\n setValues(): void {\n if (this.config.binType !== BinStrategy.categorical) {\n this.setQuantitativeValues();\n } else {\n this.setCategoricalValues();\n }\n }\n\n setQuantitativeValues(): void {\n let values = this.getValuesFromScale() as number[];\n if (this.orientation === Orientation.vertical) {\n values = values.slice().reverse();\n }\n this.values = values.map((d) =>\n ValueUtilities.d3Format(\n d,\n (this.config as CalculatedBinsAttributeDataDimension<Datum>)\n .formatSpecifier\n )\n );\n this.setQuantitativeValueSpaces(this.values);\n }\n\n setCategoricalValues(): void {\n let values = this.getValuesFromScale() as string[];\n if (this.orientation === Orientation.vertical) {\n values = values.slice().reverse();\n }\n this.setCategoricalValueSpaces();\n this.values = values;\n }\n\n setColors(): void {\n this.colors = this.config.range;\n if (this.orientation === Orientation.vertical) {\n this.colors = this.colors.slice().reverse();\n }\n }\n\n setQuantitativeValueSpaces(values: string[]): void {\n this.startValueSpace = values[0].length * 4;\n this.endValueSpace = values[values.length - 1].length * 4;\n this.largerValueSpace =\n this.startValueSpace > this.endValueSpace\n ? this.startValueSpace\n : this.endValueSpace;\n this.leftOffset = this.getLeftOffset(values);\n }\n\n setCategoricalValueSpaces(): void {\n this.startValueSpace = 0;\n this.endValueSpace = 0;\n this.largerValueSpace = 0;\n this.leftOffset = 0;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, OnChanges, ViewChild } from '@angular/core';\nimport { scaleLinear } from 'd3';\nimport { Orientation } from '../../core/types/layout';\nimport { NoBinsAttributeDataDimension } from '../../geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins';\nimport { MapLegend } from '../map-legend-base';\n\n/**\n * @internal\n */\n@Component({\n selector: 'vic-continuous-legend',\n templateUrl: './continuous-legend.component.html',\n styleUrls: ['./continuous-legend.component.scss'],\n imports: [CommonModule],\n})\nexport class ContinuousLegendComponent<Datum>\n extends MapLegend<Datum, NoBinsAttributeDataDimension<Datum>>\n implements OnChanges\n{\n @ViewChild('canvas', { static: true })\n canvasRef: ElementRef<HTMLCanvasElement>;\n\n override ngOnChanges(): void {\n super.ngOnChanges();\n this.drawLinearGradient();\n }\n\n getValuesFromScale(): number[] {\n return this.scale.domain();\n }\n\n getLeftOffset(): number {\n if (this.orientation === Orientation.horizontal) {\n return (this.largerValueSpace - this.startValueSpace) * -1;\n } else {\n return 0;\n }\n }\n\n drawLinearGradient(): void {\n const canvas = this.canvasRef.nativeElement;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n const ctx = canvas.getContext('2d');\n if (this.orientation === Orientation.horizontal) {\n this.drawHorizontalGradient(canvas, ctx);\n } else {\n this.drawVerticalGradient(canvas, ctx);\n }\n }\n\n drawHorizontalGradient(\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ): void {\n canvas.height = 1;\n canvas.width = this.width - this.startValueSpace - this.endValueSpace - 2;\n const rectScale = scaleLinear<string>()\n .domain([0, canvas.width])\n .range(this.colors);\n for (let i = 0; i < canvas.width; ++i) {\n ctx.fillStyle = rectScale(i);\n ctx.fillRect(i, 0, 1, 1);\n }\n }\n\n drawVerticalGradient(\n canvas: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D\n ): void {\n canvas.height = this.height - 16;\n canvas.width = 1;\n const rectScale = scaleLinear<string>()\n .domain([0, canvas.height])\n .range(this.colors);\n for (let i = 0; i < canvas.height; ++i) {\n ctx.fillStyle = rectScale(i);\n ctx.fillRect(0, i, 1, 1);\n }\n }\n}\n","<div\n class=\"vic-legend-color-scale vic-continuous\"\n [ngClass]=\"['vic-' + orientation, 'vic-' + valuesSide]\"\n [style.--width]=\"width + 'px'\"\n [style.--height]=\"height + 'px'\"\n [style.--border-color]=\"outlineColor\"\n [style.--value-space]=\"largerValueSpace + 'px'\"\n [style.left.px]=\"leftOffset\"\n>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'left') ||\n (orientation === 'horizontal' && valuesSide === 'top')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n <div class=\"vic-legend-canvas-container\">\n <canvas class=\"vic-legend-canvas\" #canvas></canvas>\n </div>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'right') ||\n (orientation === 'horizontal' && valuesSide === 'bottom')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #valuesDisplay>\n <div class=\"vic-legend-values-container vic-continuous\">\n <p class=\"vic-value vic-low\">{{ values[0] }}</p>\n <p class=\"vic-value vic-high\">{{ values[values.length - 1] }}</p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { Orientation } from '../../core/types/layout';\nimport { BinStrategy } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { VicAttributeDataDimensionConfig } from '../../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-types';\nimport { NoBinsAttributeDataDimension } from '../../geographies/config/layers/attribute-data-layer/dimensions/no-bins/no-bins';\nimport { MapLegend } from '../map-legend-base';\n\nexport type DiscontinuousAttributeDataDimensionConfig<Datum> = Exclude<\n VicAttributeDataDimensionConfig<Datum>,\n NoBinsAttributeDataDimension<Datum>\n>;\n\n@Component({\n selector: 'vic-discontinuous-legend',\n templateUrl: './discontinuous-legend.component.html',\n styleUrls: ['./discontinuous-legend.component.scss'],\n imports: [CommonModule],\n})\nexport class DiscontinuousLegendComponent<Datum> extends MapLegend<\n Datum,\n DiscontinuousAttributeDataDimensionConfig<Datum>\n> {\n getValuesFromScale(): string[] | number[] {\n if (this.config.binType === BinStrategy.categorical) {\n return this.config.getDomain();\n } else {\n return this.getQuantitativeValuesFromScale();\n }\n }\n\n getQuantitativeValuesFromScale(): number[] {\n const binColors = this.config.range;\n const values =\n this.config.binType === BinStrategy.customBreaks\n ? this.config.breakValues\n : [\n ...new Set(\n binColors.map((colors) => this.scale.invertExtent(colors)).flat()\n ),\n ];\n return values;\n }\n\n getLeftOffset(values: string[]): number {\n if (this.orientation === Orientation.horizontal) {\n const colorHalfWidth = this.width / (values.length * 2);\n if (colorHalfWidth > this.largerValueSpace) {\n return (colorHalfWidth - this.startValueSpace) * -1;\n } else {\n return (this.largerValueSpace - this.startValueSpace) * -1;\n }\n } else {\n return 0;\n }\n }\n}\n","<div\n class=\"vic-legend-color-scale vic-discontinuous\"\n [ngClass]=\"['vic-' + orientation, 'vic-' + valuesSide]\"\n [class.vic-categorical]=\"config.binType === VicValuesBin.categorical\"\n [style.--border-color]=\"outlineColor\"\n [style.--width]=\"width + 'px'\"\n [style.--height]=\"height + 'px'\"\n [style.--num-colors]=\"colors.length\"\n [style.--value-space]=\"largerValueSpace + 'px'\"\n [style.left.px]=\"leftOffset\"\n>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'left') ||\n (orientation === 'horizontal' && valuesSide === 'top')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n <div class=\"vic-legend-colors-container\">\n <div\n class=\"vic-legend-color-padding\"\n *ngIf=\"config.binType !== VicValuesBin.categorical\"\n ></div>\n <div\n *ngFor=\"let color of colors\"\n class=\"vic-legend-color vic-discontinuous\"\n [style.background-color]=\"color\"\n [style.--border-color]=\"outlineColor\"\n >\n </div>\n </div>\n <ng-container\n *ngIf=\"\n (orientation === 'vertical' && valuesSide === 'right') ||\n (orientation === 'horizontal' && valuesSide === 'bottom')\n \"\n >\n <ng-container *ngTemplateOutlet=\"valuesDisplay\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #valuesDisplay>\n <div class=\"vic-legend-values-container vic-discontinous\">\n <p class=\"vic-value\" *ngFor=\"let value of values; let i = index\">\n {{ value }}\n </p>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n Input,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { MapChartComponent } from '../charts/map-chart/map-chart.component';\nimport { Orientation, Side } from '../core/types/layout';\nimport { BinStrategy } from '../geographies/config/layers/attribute-data-layer/dimensions/attribute-data-bin-enums';\nimport { ContinuousLegendComponent } from './continuous-legend/continuous-legend.component';\nimport { DiscontinuousLegendComponent } from './discontinuous-legend/discontinuous-legend.component';\n\nexport enum VicLegendType {\n categorical = 'categorical',\n ordinal = 'ordinal',\n quantitative = 'quantitative',\n}\n\n@Component({\n selector: 'vic-map-legend',\n templateUrl: './map-legend.component.html',\n styleUrls: ['./map-legend.component.scss'],\n imports: [\n CommonModule,\n ContinuousLegendComponent,\n DiscontinuousLegendComponent,\n ],\n})\nexport class MapLegendComponent<Datum> implements OnInit {\n @Input() width: number;\n @Input() height: number;\n @Input() valuesSide: keyof typeof Side;\n @Input() outlineColor: string;\n @ViewChild('canvas', { static: true })\n VicValuesBin: typeof BinStrategy;\n canvasRef: ElementRef<HTMLCanvasElement>;\n legendType: keyof typeof VicLegendType;\n orientation: keyof typeof Orientation;\n chart = inject(MapChartComponent<Datum>);\n destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.VicValuesBin = BinStrategy; // for some reason this doesn't get assigned if it's assigned in the class properties above\n this.setOrientation();\n this.setValuesSide();\n }\n\n setOrientation(): void {\n this.orientation =\n this.width > this.height ? Orientation.horizontal : Orientation.vertical;\n }\n\n setValuesSide(): void {\n if (this.orientation === Orientation.horizontal) {\n if (this.valuesSide === Side.left || this.valuesSide === Side.right) {\n this.valuesSide = undefined;\n console.warn(\n \"valuesSide must be set to 'top' or 'bottom' for a map-legend with a horizontal aspect ratio\"\n );\n }\n if (!this.valuesSide) {\n this.valuesSide = Side.bottom;\n }\n } else {\n if (this.valuesSide === Side.top || this.valuesSide === Side.bottom) {\n this.valuesSide = undefined;\n console.warn(\n \"valuesSide must be set to 'left' or 'right' for a map-legend with a vertical aspect ratio\"\n );\n }\n if (!this.valuesSide) {\n this.valuesSide = Side.left;\n }\n }\n }\n}\n","<ng-content select=\"[title]\"></ng-content>\n@if (chart.attributeProperties$ | async; as attributeProperties) { @if\n(attributeProperties.config) {\n<vic-continuous-legend\n *ngIf=\"attributeProperties.config.binType === VicValuesBin.none\"\n [width]=\"width\"\n [height]=\"height\"\n [valuesSide]=\"valuesSide\"\n [scale]=\"attributeProperties.scale\"\n [config]=\"attributeProperties.config\"\n [outlineColor]=\"outlineColor\"\n [orientation]=\"orientation\"\n></vic-continuous-legend>\n<vic-discontinuous-legend\n *ngIf=\"attributeProperties.config.binType !== VicValuesBin.none\"\n [width]=\"width\"\n [height]=\"height\"\n [valuesSide]=\"valuesSide\"\n [scale]=\"attributeProperties.scale\"\n [config]=\"attributeProperties.config\"\n [outlineColor]=\"outlineColor\"\n [orientation]=\"orientation\"\n></vic-discontinuous-legend>\n} }\n","import { NgModule } from '@angular/core';\nimport { MapLegendComponent } from './map-legend.component';\n\n@NgModule({\n imports: [MapLegendComponent],\n exports: [MapLegendComponent],\n})\nexport class VicMapLegendModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { QuantitativeRulesLabelsOptions } from './quantitative-rules-labels-options';\n\nexport class QuantitativeRulesLabels<Datum>\n implements QuantitativeRulesLabelsOptions<Datum>\n{\n color: (d: Datum) => string;\n display: (d: Datum) => boolean;\n dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic';\n value: (d: Datum) => string;\n offset: number;\n position: (start: number, end: number, d: Datum) => number;\n textAnchor: 'start' | 'middle' | 'end';\n\n constructor(options: QuantitativeRulesLabelsOptions<Datum>) {\n safeAssign(this, options);\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { QuantitativeRulesLabels } from './quantitative-rules-labels';\n\nconst DEFAULT = {\n _display: () => true,\n _dominantBaseline: 'middle',\n};\n\nexport class RulesLabelsBuilder<Datum> {\n private _color: (d: Datum) => string;\n private _display: (d: Datum) => boolean;\n private _dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic';\n private _value: (d: Datum) => string;\n private _offset: number;\n private _position: (start: number, end: number, d: Datum) => number;\n private _textAnchor: 'start' | 'middle' | 'end';\n\n constructor() {\n safeAssign(this, DEFAULT);\n this._value = (d: Datum) => `${d}`;\n }\n\n /**\n * OPTIONAL. Set the color of the labels.\n *\n * If not provided, the color of the line will be used.\n *\n * To unset the color, pass `null`.\n */\n color(color: null): this;\n color(color: string): this;\n color(color: (d: Datum) => string): this;\n color(color: string | ((d: Datum) => string) | null) {\n if (color === null) {\n this._color = null;\n return this;\n }\n this._color = typeof color === 'string' ? () => color : color;\n return this;\n }\n\n /**\n * OPTIONAL. Set the display of the labels.\n *\n * If not provided, the labels will be displayed.\n *\n * @default true\n */\n display(display: boolean): this;\n display(display: (d: Datum) => boolean): this;\n display(display: boolean | ((d: Datum) => boolean)) {\n this._display = typeof display === 'boolean' ? () => display : display;\n return this;\n }\n\n /**\n * OPTIONAL. Set the dominant baseline of the labels.\n *\n * @default 'middle'\n */\n dominantBaseline(\n dominantBaseline:\n | 'middle'\n | 'text-after-edge'\n | 'text-before-edge'\n | 'central'\n | 'auto'\n | 'hanging'\n | 'ideographic'\n | 'alphabetic'\n ) {\n this._dominantBaseline = dominantBaseline;\n return this;\n }\n\n /**\n * OPTIONAL. Set the offset of the labels.\n *\n * @default -12 for horizontal orientation, 0 for vertical orientation\n */\n offset(offset: number) {\n this._offset = offset;\n return this;\n }\n\n /**\n * OPTIONAL. Set the position of the labels.\n *\n * @default end for horizontal orientation, end for vertical orientation\n */\n position(position: (start: number, end: number, d: Datum) => number) {\n this._position = position;\n return this;\n }\n\n /**\n * OPTIONAL. Set the text anchor of the labels.\n *\n * @default 'end' for horizontal orientation, 'middle' for vertical orientation\n */\n textAnchor(textAnchor: 'start' | 'middle' | 'end') {\n this._textAnchor = textAnchor;\n return this;\n }\n\n /**\n * REQUIRED. Set the value of the labels.\n */\n value(value: (d: Datum) => string) {\n this._value = value;\n return this;\n }\n\n _build(): QuantitativeRulesLabels<Datum> {\n return new QuantitativeRulesLabels<Datum>({\n color: this._color,\n display: this._display,\n dominantBaseline: this._dominantBaseline,\n value: this._value,\n offset: this._offset,\n position: this._position,\n textAnchor: this._textAnchor,\n });\n }\n\n validateBuilder(\n orientation: 'horizontal' | 'vertical',\n lineColor: (d: Datum) => string\n ): void {\n if (!this._color) {\n this._color = lineColor;\n }\n if (!this._offset) {\n if (orientation === 'horizontal') {\n this._offset = -12;\n } else {\n this._offset = 0;\n }\n }\n if (!this._position) {\n if (orientation === 'horizontal') {\n this._position = (start: number, end: number) => end - 4;\n } else {\n this._position = (start: number, end: number) => end - 12;\n }\n }\n if (!this._textAnchor) {\n this._textAnchor = orientation === 'horizontal' ? 'end' : 'middle';\n }\n if (!this.value) {\n throw new Error('QuantitativeRulesLabels: value is required');\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { XyMarksConfig } from '../../marks/xy-marks/xy-marks-config';\nimport { Stroke } from '../../stroke/stroke';\nimport { QuantitativeRulesLabels } from './labels/quantitative-rules-labels';\nimport { QuantitativeRulesDimensions } from './quantitative-rules-dimensions';\nimport { QuantitativeRulesOptions } from './quantitative-rules-options';\n\nexport class QuantitativeRulesConfig<Datum extends number | Date>\n extends XyMarksConfig<Datum>\n implements QuantitativeRulesOptions<Datum>\n{\n color: (d: Datum) => string;\n readonly dimensions: QuantitativeRulesDimensions;\n labels: QuantitativeRulesLabels<Datum>;\n stroke: Stroke;\n\n constructor(options: QuantitativeRulesOptions<Datum>) {\n super();\n safeAssign(this, options);\n }\n}\n","export interface QuantitativeRulesDimensions {\n quantitative: 'x' | 'y';\n quantitativeDimension: 'width' | 'height';\n isHorizontal: boolean;\n isVertical: boolean;\n}\n\nexport const HORIZONTAL_RULE_DIMENSIONS: QuantitativeRulesDimensions = {\n quantitative: 'x',\n quantitativeDimension: 'width',\n isHorizontal: true,\n isVertical: false,\n};\n\nexport const VERTICAL_RULE_DIMENSIONS: QuantitativeRulesDimensions = {\n quantitative: 'y',\n quantitativeDimension: 'height',\n isHorizontal: false,\n isVertical: true,\n};\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { VicAuxMarksBuilder } from '../../marks/aux-marks/config/aux-marks-builder';\nimport { StrokeBuilder } from '../../stroke/stroke-builder';\nimport { RulesLabelsBuilder } from './labels/quantitative-rules-labels-builder';\nimport { QuantitativeRulesConfig } from './quantitative-rules-config';\nimport {\n HORIZONTAL_RULE_DIMENSIONS,\n QuantitativeRulesDimensions,\n VERTICAL_RULE_DIMENSIONS,\n} from './quantitative-rules-dimensions';\n\nconst DEFAULT = {\n _color: () => '#cccccc',\n};\n\n@Injectable()\nexport class VicQuantitativeRulesConfigBuilder<\n Datum extends number | Date,\n> extends VicAuxMarksBuilder<Datum> {\n protected _color: (d: Datum) => string;\n protected _data: Datum[];\n protected dimensions: QuantitativeRulesDimensions;\n protected _orientation: 'horizontal' | 'vertical';\n private labelsBuilder: RulesLabelsBuilder<Datum>;\n private strokeBuilder: StrokeBuilder;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * OPTIONAL. Sets the color of the rule.\n *\n * @default #cccccc.\n */\n color(color: string | ((d: Datum) => string)): this {\n if (typeof color === 'string') {\n this._color = () => color;\n } else {\n this._color = color;\n }\n return this;\n }\n\n /**\n * REQUIRED. Sets the data that will be used to render the quantitative rules.\n *\n * This component is not a Primary Marks component, so this data will not affect chart-level scales.\n *\n * @param data The data to be used to render the quantitative rules. Should be an array of numbers or dates.\n */\n data(data: Datum[]): this {\n this._data = data;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the rule labels.\n */\n labels(): this;\n labels(labels: null): this;\n labels(labels: (labels: RulesLabelsBuilder<Datum>) => void): this;\n labels(labels?: ((labels: RulesLabelsBuilder<Datum>) => void) | null): this {\n if (labels === null) {\n this.labelsBuilder = undefined;\n return this;\n }\n this.labelsBuilder = new RulesLabelsBuilder();\n labels?.(this.labelsBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the orientation of the rule.\n */\n orientation(orientation: 'horizontal' | 'vertical'): this {\n this._orientation = orientation;\n this.dimensions =\n orientation === 'horizontal'\n ? HORIZONTAL_RULE_DIMENSIONS\n : VERTICAL_RULE_DIMENSIONS;\n return this;\n }\n\n /**\n * OPTIONAL. A config for the behavior of the rule stroke.\n */\n stroke(stroke: null): this;\n stroke(stroke: (stroke: StrokeBuilder) => void): this;\n stroke(stroke: ((stroke: StrokeBuilder) => void) | null): this {\n if (stroke === null) {\n this.strokeBuilder = undefined;\n return this;\n }\n this.initStrokeBuilder();\n stroke(this.strokeBuilder);\n return this;\n }\n\n private initStrokeBuilder(): void {\n this.strokeBuilder = new StrokeBuilder();\n }\n\n /**\n * REQUIRED. Builds the configuration object for the RuleComponent.\n */\n getConfig(): QuantitativeRulesConfig<Datum> {\n this.validateBuilder();\n return new QuantitativeRulesConfig({\n marksClass: 'vic-quantitative-rules',\n color: this._color,\n data: this._data,\n datumClass: this._class,\n dimensions: this.dimensions,\n labels: this.labelsBuilder?._build(),\n mixBlendMode: this._mixBlendMode,\n stroke: this.strokeBuilder._build(),\n });\n }\n\n protected validateBuilder(): void {\n if (this.data === undefined) {\n throw new Error('Data is required for the Quantitative Rules component.');\n }\n if (this.strokeBuilder === undefined) {\n this.initStrokeBuilder();\n }\n if (this.labelsBuilder) {\n this.labelsBuilder.validateBuilder(this._orientation, this._color);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n} from '@angular/core';\nimport { select, Selection, Transition } from 'd3';\nimport { ChartComponent } from '../charts/chart/chart.component';\nimport { XyChartComponent } from '../charts/xy-chart/xy-chart.component';\nimport { XyAuxMarks } from '../marks';\nimport { QuantitativeRulesConfig } from './config/quantitative-rules-config';\n\ntype RulesSvgElements = 'g' | 'rule' | 'label';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-quantitative-rules]',\n template: '',\n styleUrl: './quantitative-rules.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: ChartComponent, useExisting: XyChartComponent }],\n host: {\n '[class]': 'config.marksClass',\n },\n})\nexport class QuantitativeRulesComponent<\n Datum extends number | Date,\n> extends XyAuxMarks<Datum, QuantitativeRulesConfig<Datum>> {\n rulesGroups: Selection<SVGGElement, Datum, SVGGElement, unknown>;\n protected elRef = inject<ElementRef<SVGGElement>>(ElementRef);\n\n get class(): Record<RulesSvgElements, string> {\n return {\n g: this.config.marksClass + '-group',\n rule: this.config.marksClass + '-rule',\n label: this.config.marksClass + '-label',\n };\n }\n\n drawMarks(): void {\n if (this.chartScalesMatchConfigOrientation()) {\n const transitionDuration = this.getTransitionDuration();\n this.drawRules(transitionDuration);\n if (this.config.labels) {\n this.drawLabels(transitionDuration);\n }\n }\n }\n\n drawRules(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.rulesGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, Datum>(`.${this.class.g}`)\n .data<Datum>(this.config.data, (d) => d.toString())\n .join(\n (enter) =>\n enter\n .append('g')\n .attr('class', (d, i) =>\n `${this.class.g} ${this.config.datumClass(d, i)}`.trim()\n )\n .attr('transform', (d) => this.getRuleTransform(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('transform', (d) => this.getRuleTransform(d)),\n (exit) => exit.remove()\n );\n\n this.rulesGroups\n .selectAll<SVGLineElement, Datum>(`.${this.class.rule}`)\n .data<Datum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('line')\n .attr('class', this.class.rule)\n .attr('stroke', (d) => this.config.color(d))\n .attr('stroke-width', this.config.stroke.width)\n .attr('opacity', this.config.stroke.opacity)\n .attr('stroke-dasharray', this.config.stroke.dasharray)\n .attr('stroke-linecap', this.config.stroke.linecap)\n .attr('stroke-linejoin', this.config.stroke.linejoin)\n .attr('x1', 0)\n .attr('x2', this.getWidth())\n .attr('y1', 0)\n .attr('y2', this.getHeight()),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('x1', 0)\n .attr('x2', this.getWidth())\n .attr('y1', 0)\n .attr('y2', this.getHeight()),\n (exit) => exit.remove()\n );\n }\n\n drawLabels(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.rulesGroups\n .selectAll<SVGTextElement, Datum>(`.${this.class.label}`)\n .data<Datum>((d) => [d])\n .join(\n (enter) =>\n enter\n .append('text')\n .attr('class', this.class.label)\n .style('display', (d) =>\n this.config.labels.display(d) ? null : 'none'\n )\n .attr('fill', (d) => this.config.labels.color(d))\n .attr('text-anchor', this.config.labels.textAnchor)\n .attr('dominant-baseline', this.config.labels.dominantBaseline)\n .attr('x', (d) => this.getLabelX(d))\n .attr('y', (d) => this.getLabelY(d))\n .text((d) => this.config.labels.value(d)),\n (update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .style('display', (d) =>\n this.config.labels.display(d) ? null : 'none'\n )\n .attr('fill', (d) => this.config.labels.color(d))\n .attr('text-anchor', this.config.labels.textAnchor)\n .attr('dominant-baseline', this.config.labels.dominantBaseline)\n .attr('x', (d) => this.getLabelX(d))\n .attr('y', (d) => this.getLabelY(d)),\n (exit) => exit.remove()\n );\n }\n\n // Intended to flag situations where both chart scales and the config are both updated\n // and one goes before the other.\n chartScalesMatchConfigOrientation(): boolean {\n if (this.config.dimensions.isHorizontal) {\n return this.config.data.every((d) => this.scales.y(d) !== undefined);\n } else {\n return this.config.data.every((d) => this.scales.x(d) !== undefined);\n }\n }\n\n getRuleTransform(d: Datum): string {\n let x;\n let y;\n if (this.config.dimensions.isHorizontal) {\n x = this.scales.x.range()[0];\n y = this.getYStart(d);\n } else {\n x = this.getXStart(d);\n y = this.scales.y.range()[0];\n }\n return `translate(${x}, ${y})`;\n }\n\n getXStart(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[0];\n }\n return this.scales.x(d);\n }\n\n getYStart(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.y(d);\n }\n return this.scales.y.range()[1] - this.scales.y.range()[0];\n }\n\n getWidth(): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[1] - this.scales.x.range()[0];\n } else {\n return 0;\n }\n }\n\n getHeight(): number {\n if (this.config.dimensions.isHorizontal) {\n return 0;\n } else {\n return this.scales.y.range()[1] - this.scales.y.range()[0];\n }\n }\n\n getLabelX(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.config.labels.position(this.getXStart(d), this.getXEnd(d), d);\n }\n return this.config.labels.offset;\n }\n\n getLabelY(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.config.labels.offset;\n }\n return this.config.labels.position(this.getYStart(d), this.getYEnd(d), d);\n }\n\n getXEnd(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.x.range()[1] - this.scales.x.range()[0];\n }\n return this.scales.x(d);\n }\n\n getYEnd(d: Datum): number {\n if (this.config.dimensions.isHorizontal) {\n return this.scales.y(d);\n }\n return this.scales.y.range()[1];\n }\n}\n","import { NgModule } from '@angular/core';\nimport { QuantitativeRulesComponent } from './quantitative-rules.component';\n\n@NgModule({\n imports: [QuantitativeRulesComponent],\n exports: [QuantitativeRulesComponent],\n})\nexport class VicQuantitativeRulesModule {}\n","import { safeAssign } from '@mathstack/app-kit';\nimport {\n CurveFactory,\n extent,\n InternMap,\n range,\n rollup,\n Series,\n SeriesPoint,\n stack,\n} from 'd3';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { DateChartPositionDimension } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position';\nimport { NumberChartPositionDimension } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position';\nimport { OrdinalVisualValueDimension } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value';\nimport { DataMarksOptions } from '../../marks/config/marks-options';\nimport { XyPrimaryMarksConfig } from '../../marks/xy-marks/xy-primary-marks/xy-primary-marks-config';\nimport { StackedAreaOptions } from './stacked-area-options';\n\nexport type StackedAreaDatum<CategoricalDomain> = (SeriesPoint<\n [ContinuousValue, InternMap<CategoricalDomain, number>]\n> & {\n i: number;\n})[];\n\nexport class StackedAreaConfig<Datum, CategoricalDomain extends DataValue>\n extends XyPrimaryMarksConfig<Datum>\n implements DataMarksOptions<Datum>\n{\n color: OrdinalVisualValueDimension<Datum, CategoricalDomain, string>;\n categoricalOrder: CategoricalDomain[];\n curve: CurveFactory;\n stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>;\n stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void;\n x: DateChartPositionDimension<Datum> | NumberChartPositionDimension<Datum>;\n y: NumberChartPositionDimension<Datum>;\n series: StackedAreaDatum<CategoricalDomain>[];\n\n constructor(options: StackedAreaOptions<Datum, CategoricalDomain>) {\n super();\n safeAssign(this, options);\n this.initPropertiesFromData();\n }\n\n protected initPropertiesFromData(): void {\n this.setDimensionPropertiesFromData();\n this.setValueIndicies();\n this.setSeries();\n this.initQuantitativeDomainFromStack();\n }\n\n private setDimensionPropertiesFromData(): void {\n this.x.setPropertiesFromData(this.data);\n this.y.setPropertiesFromData(this.data);\n this.color.setPropertiesFromData(this.data);\n }\n\n private setValueIndicies(): void {\n this.valueIndices = range(this.x.values.length).filter((i) =>\n this.color.domainIncludes(this.color.values[i])\n );\n }\n\n private setSeries(): void {\n const rolledUpData = rollup(\n this.valueIndices,\n ([i]) => i,\n (i) => this.x.values[i],\n (i) => this.color.values[i]\n );\n\n const keys = this.categoricalOrder\n ? this.categoricalOrder.slice().reverse()\n : this.color.calculatedDomain;\n\n this.series = stack<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >()\n .keys(keys)\n .value(([, I], category) => this.y.values[I.get(category)])\n .order(this.stackOrder)\n .offset(this.stackOffset)(Array.from(rolledUpData))\n .map((s) =>\n s.map((d) =>\n Object.assign(d, {\n i: d.data[1].get(s.key),\n })\n )\n );\n }\n\n private initQuantitativeDomainFromStack(): void {\n if (this.y.domain === undefined) {\n this.y.setDomain(extent(this.series.flat(2)));\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport {\n CurveFactory,\n curveLinear,\n InternMap,\n Series,\n stackOffsetNone,\n stackOrderNone,\n} from 'd3';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { DateChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/date-chart-position/date-chart-position-builder';\nimport { NumberChartPositionDimensionBuilder } from '../../data-dimensions/continuous-quantitative/number-chart-position/number-chart-position-builder';\nimport { OrdinalVisualValueDimensionBuilder } from '../../data-dimensions/ordinal/ordinal-visual-value/ordinal-visual-value-builder';\nimport { PrimaryMarksBuilder } from '../../marks/primary-marks/config/primary-marks-builder';\nimport { StackedAreaConfig } from './stacked-area-config';\n\nconst DEFAULT = {\n _curve: curveLinear,\n _stackOrder: stackOrderNone,\n _stackOffset: stackOffsetNone,\n};\n\n/**\n * Builds a configuration object for a StackedAreaComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicStackedAreaBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the stacked area chart.\n *\n * The second generic parameter, TCategoricalValue, is the type of the categorical data that will be used to stack the areas.\n */\n@Injectable()\nexport class VicStackedAreaConfigBuilder<\n Datum,\n CategoricalDomain extends DataValue,\n> extends PrimaryMarksBuilder<Datum> {\n private colorDimensionBuilder: OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >;\n private _categoricalOrder: CategoricalDomain[];\n private _curve: CurveFactory;\n private _stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>;\n private _stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void;\n private xDimensionBuilder:\n | NumberChartPositionDimensionBuilder<Datum>\n | DateChartPositionDimensionBuilder<Datum>;\n private yDimensionBuilder: NumberChartPositionDimensionBuilder<Datum>;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n /**\n * REQUIRED. Sets the categorical dimension for the stacked area chart.\n */\n color(\n color: (\n color: OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >\n ) => void\n ): this {\n this.colorDimensionBuilder = new OrdinalVisualValueDimensionBuilder<\n Datum,\n CategoricalDomain,\n string\n >();\n color(this.colorDimensionBuilder);\n return this;\n }\n\n /**\n * OPTIONAL. Allows user to provide a custom order for the categories of data / the stack.\n *\n * If not provided, the order will be determined by d3.\n */\n categoricalOrder(value: CategoricalDomain[]): this {\n if (value === null) {\n this._categoricalOrder = undefined;\n return this;\n }\n this._categoricalOrder = value;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the curve factory for the line.\n *\n * @default curveLinear\n */\n curve(value: null): this;\n curve(value: CurveFactory): this;\n curve(value: CurveFactory | null): this {\n if (value === null) {\n this._curve = DEFAULT._curve;\n return this;\n }\n this._curve = value;\n return this;\n }\n\n /**\n * OPTIONAL: Sets the order of the stack.\n *\n * @default stackOrderNone\n */\n stackOrder(stackOrder: null): this;\n stackOrder(\n stackOrder: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>\n ): this;\n stackOrder(\n stackOrder:\n | ((\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >\n ) => Iterable<number>)\n | null\n ): this {\n if (stackOrder === null) {\n this._stackOrder = DEFAULT._stackOrder;\n return this;\n }\n this._stackOrder = stackOrder;\n return this;\n }\n\n /**\n * OPTIONAL. Sets the offset of the stack.\n *\n * @default stackOffsetNone\n */\n stackOffset(stackOffset: null): this;\n stackOffset(\n stackOffset: (\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void\n ): this;\n stackOffset(\n stackOffset:\n | ((\n series: Series<\n [ContinuousValue, InternMap<CategoricalDomain, number>],\n CategoricalDomain\n >,\n order: number[]\n ) => void)\n | null\n ): this {\n if (stackOffset === null) {\n this._stackOffset = DEFAULT._stackOffset;\n return this;\n }\n this._stackOffset = stackOffset;\n return this;\n }\n\n /**\n * REQUIRED. Sets the x dimension for the stacked area chart when using Date data.\n */\n xDate(x: null): this;\n xDate(x: (x: DateChartPositionDimensionBuilder<Datum>) => void): this;\n xDate(\n x: ((x: DateChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n if (x === null) return this;\n this.xDimensionBuilder = new DateChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the x dimension for the stacked area chart when using numeric data.\n */\n xNumeric(x: null): this;\n xNumeric(x: (x: NumberChartPositionDimensionBuilder<Datum>) => void): this;\n xNumeric(\n x: ((x: NumberChartPositionDimensionBuilder<Datum>) => void) | null\n ): this {\n // do not reset the xDimensionBuilder if null is passed. if xNumeric is not called, then xDate will be called\n // allow for\n // .xNumber((x) => condition ? x.stuff() : null)\n // .xDate((x) => !condition ? x.stuff() : null)\n if (x === null) return this;\n this.xDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n x(this.xDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Sets the y dimension for the stacked area chart.\n */\n y(y: (y: NumberChartPositionDimensionBuilder<Datum>) => void): this {\n this.yDimensionBuilder = new NumberChartPositionDimensionBuilder<Datum>();\n y(this.yDimensionBuilder);\n return this;\n }\n\n /**\n * REQUIRED. Builds the configuration object for the stacked area chart.\n */\n getConfig(): StackedAreaConfig<Datum, CategoricalDomain> {\n this.validateBuilder();\n return new StackedAreaConfig({\n marksClass: 'vic-stacked-area',\n color: this.colorDimensionBuilder._build('Color'),\n categoricalOrder: this._categoricalOrder,\n curve: this._curve,\n data: this._data,\n datumClass: this._datumClass,\n mixBlendMode: this._mixBlendMode,\n stackOrder: this._stackOrder,\n stackOffset: this._stackOffset,\n x: this.xDimensionBuilder._build('X'),\n y: this.yDimensionBuilder._build('Y'),\n });\n }\n\n protected override validateBuilder(): void {\n super.validateBuilder('Stacked Area');\n if (!this.colorDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: Color dimension must be created. Please use method `color` to set the categorical dimension.'\n );\n }\n if (!this.xDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: X dimension must be created. Please use method `xNumeric` or `xDate` to set the x dimension.'\n );\n }\n if (!this.yDimensionBuilder) {\n throw new Error(\n 'Stacked Area Builder: Y dimension must be created. Please use method `y` to set the y dimension.'\n );\n }\n }\n}\n","import { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { StackedAreaHost } from '../stacked-area-events.directive';\n\nexport class StackedAreaHoverMoveEmitTooltipData<\n Datum,\n TCategoricalValue extends DataValue,\n> implements HoverMoveAction<StackedAreaHost<Datum, TCategoricalValue>>\n{\n onStart(host: StackedAreaHost<Datum, TCategoricalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedAreaHost<Datum, TCategoricalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n InjectionToken,\n NgZone,\n} from '@angular/core';\nimport { area, select, Selection, Transition } from 'd3';\nimport { BehaviorSubject, filter } from 'rxjs';\nimport { ChartComponent, XyChartComponent, XyChartScales } from '../charts';\nimport { GenericScale } from '../core';\nimport { DataValue } from '../core/types/values';\nimport { ValueUtilities } from '../core/utilities/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { VicXyPrimaryMarks } from '../marks/xy-marks/xy-primary-marks/xy-primary-marks';\nimport {\n StackedAreaConfig,\n StackedAreaDatum,\n} from './config/stacked-area-config';\nimport { StackedAreaInteractionAnchor } from './events/stacked-area-interaction-output';\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use unknown instead\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const STACKED_AREA = new InjectionToken<\n StackedAreaComponent<unknown, DataValue>\n>('StackedAreaComponent');\n\nexport interface StackedAreaTooltipDatum<\n Datum,\n TCategoricalValue extends DataValue,\n> {\n datum: Datum;\n color: string;\n values: {\n x: string;\n y: string;\n color: TCategoricalValue;\n };\n}\n\ntype StackedAreaSvgElements = 'area';\n\nexport type StackedAreaSelection<CategoricalDomain> = Selection<\n SVGPathElement,\n StackedAreaDatum<CategoricalDomain>,\n SVGGElement,\n unknown\n>;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-stacked-area]',\n template: '',\n styleUrls: ['./stacked-area.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: StackedAreaComponent },\n { provide: STACKED_AREA, useExisting: StackedAreaComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n },\n})\nexport class StackedAreaComponent<\n Datum,\n TCategoricalValue extends DataValue,\n> extends VicXyPrimaryMarks<\n Datum,\n StackedAreaConfig<Datum, TCategoricalValue>\n> {\n area;\n areas;\n stackedAreas: BehaviorSubject<StackedAreaSelection<TCategoricalValue>> =\n new BehaviorSubject(null);\n stackedAreas$ = this.stackedAreas.asObservable().pipe(filter((s) => !!s));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override scales: { color: GenericScale<any, any> } & XyChartScales = {\n x: undefined,\n y: undefined,\n color: undefined,\n useTransition: undefined,\n };\n protected elRef = inject<ElementRef<SVGSVGElement>>(ElementRef);\n private zone = inject(NgZone);\n\n get class(): Record<StackedAreaSvgElements, string> {\n return {\n area: this.config.marksClass + '-area',\n };\n }\n\n setChartScalesFromRanges(useTransition: boolean): void {\n const x = this.config.x.getScaleFromRange(this.ranges.x);\n const y = this.config.y.getScaleFromRange(this.ranges.y);\n this.scales.color = this.config.color.getScale();\n this.zone.run(() => {\n this.chart.updateScales({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n x: x as unknown as GenericScale<any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n y: y as unknown as GenericScale<any, any>,\n useTransition,\n });\n });\n }\n\n drawMarks(): void {\n const transitionDuration = this.getTransitionDuration();\n this.setArea();\n this.drawAreas(transitionDuration);\n this.updateStackedAreaElements();\n }\n\n setArea(): void {\n this.area = area()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .x(({ i }: any) => this.scales.x(this.config.x.values[i]))\n .y0(([y1]) => this.scales.y(y1))\n .y1(([, y2]) => this.scales.y(y2))\n .curve(this.config.curve);\n }\n\n drawAreas(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.areas = select(this.elRef.nativeElement)\n .selectAll(`.${this.class.area}`)\n .data(this.config.series)\n .join(\n (enter) =>\n enter\n .append('path')\n .attr(\n 'class',\n ([{ i }]) =>\n `${this.class.area} ${this.config.datumClass(this.config.data[i], i)}`\n )\n // .property('key', ([{ i }]) => this.config.color.values[i])\n .attr('fill', ([{ i }]) =>\n this.scales.color(this.config.color.values[i])\n )\n .attr('d', this.area),\n (update) =>\n update.call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('d', this.area)\n .attr('fill', ([{ i }]) =>\n this.scales.color(this.config.color.values[i])\n )\n ),\n (exit) => exit.remove()\n );\n }\n\n getTooltipData(\n closestXIndicies: number[],\n categoryYMin: number,\n categoryYMax: number,\n categoryIndex: number\n ): {\n anchor: StackedAreaInteractionAnchor;\n data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[];\n hoveredAreaDatum: StackedAreaTooltipDatum<Datum, TCategoricalValue>;\n origin: SVGGraphicsElement;\n } {\n const data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[] =\n closestXIndicies.map((i) => {\n const datum = this.getDatumFromIndex(i);\n return {\n datum: datum,\n values: {\n x: this.getXyDimensionValue(datum, 'x'),\n y: this.getXyDimensionValue(datum, 'y'),\n color: this.config.color.valueAccessor(datum),\n },\n color: this.scales.color(this.config.color.valueAccessor(datum)),\n };\n });\n if (this.config.categoricalOrder) {\n this.sortTooltipDataByCategoricalSortOrder(data);\n categoryIndex = closestXIndicies.length - categoryIndex;\n }\n\n return {\n data,\n anchor: {\n x: this.scales.x(this.config.x.values[closestXIndicies[0]]),\n yAreaTop: categoryYMin,\n yAreaBottom: categoryYMax,\n yChartTop: this.scales.y.range()[0],\n yChartBottom: this.scales.y.range()[1],\n },\n hoveredAreaDatum: data[categoryIndex],\n origin: this.chart.svgRef.nativeElement,\n };\n }\n\n private getDatumFromIndex(i: number) {\n return this.config.data.find(\n (d) =>\n this.config.x.valueAccessor(d) === this.config.x.values[i] &&\n this.config.color.valueAccessor(d) === this.config.color.values[i]\n );\n }\n\n private getXyDimensionValue(datum: Datum, dimension: 'x' | 'y'): string {\n return this.config[dimension].formatFunction\n ? ValueUtilities.customFormat(\n datum,\n this.config[dimension].formatFunction\n )\n : ValueUtilities.d3Format(\n this.config[dimension].valueAccessor(datum),\n this.config[dimension].formatSpecifier\n );\n }\n\n private sortTooltipDataByCategoricalSortOrder(\n data: StackedAreaTooltipDatum<Datum, TCategoricalValue>[]\n ) {\n if (this.config.categoricalOrder) {\n data.sort((a, b) => {\n return (\n this.config.categoricalOrder.indexOf(a.values.color) -\n this.config.categoricalOrder.indexOf(b.values.color)\n );\n });\n }\n }\n\n updateStackedAreaElements(): void {\n this.stackedAreas.next(this.areas);\n }\n}\n","import { TooltipPositioner } from '../../events/tooltip-positioner';\nimport { HtmlTooltipCdkManagedPosition } from '../../tooltips';\nimport { TooltipPositionBuilder } from '../../tooltips/html-tooltip/config/position/tooltip-position-builder';\n\nconst DEFAULT_POSITIONS = [\n new TooltipPositionBuilder().fromTopLeft().attachBottomCenter().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomLeft().getPosition(),\n new TooltipPositionBuilder().fromTopLeft().attachBottomRight().getPosition(),\n];\n\nexport class StackedAreaTooltipPositioner extends TooltipPositioner {\n constructor(\n private anchor: {\n x: number;\n yAreaTop: number;\n yAreaBottom: number;\n yChartTop: number;\n yChartBottom: number;\n }\n ) {\n super();\n }\n\n fromAnchor(\n relativeTo: 'area' | 'chart',\n offset: { x: number; y: number }\n ): HtmlTooltipCdkManagedPosition {\n const positionsWithOffsets = new TooltipPositionBuilder().applyOffsets(\n DEFAULT_POSITIONS,\n this.anchor.x + offset.x,\n relativeTo === 'area'\n ? this.anchor.yAreaTop - offset.y\n : this.anchor.yChartTop - offset.y\n );\n return new HtmlTooltipCdkManagedPosition(positionsWithOffsets);\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { InternSet, least } from 'd3';\nimport { Observable, map } from 'rxjs';\nimport { ContinuousValue, DataValue } from '../../core/types/values';\nimport { isDate } from '../../core/utilities/type-guards';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventType,\n EventsDirective,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport { STACKED_AREA, StackedAreaComponent } from '../stacked-area.component';\nimport { StackedAreaInteractionOutput } from './stacked-area-interaction-output';\nimport { StackedAreaTooltipPositioner } from './stacked-area-tooltip-positioner';\n\nexport type StackedAreaHost<\n Datum,\n TCategoricalValue extends DataValue,\n TStackedAreaComponent extends StackedAreaComponent<\n Datum,\n TCategoricalValue\n > = StackedAreaComponent<Datum, TCategoricalValue>,\n> = MarksHost<\n StackedAreaInteractionOutput<Datum, TCategoricalValue>,\n TStackedAreaComponent\n>;\n\n@Directive({\n selector: '[vicStackedAreaEvents]',\n})\nexport class StackedAreaEventsDirective<\n Datum,\n TCategoricalValue extends DataValue,\n TStackedAreaComponent extends StackedAreaComponent<\n Datum,\n TCategoricalValue\n > = StackedAreaComponent<Datum, TCategoricalValue>,\n >\n extends EventsDirective<StackedAreaHost<Datum, TCategoricalValue>>\n implements StackedAreaHost<Datum, TCategoricalValue>\n{\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n StackedAreaHost<Datum, TCategoricalValue>,\n StackedAreaInteractionOutput<Datum, TCategoricalValue>\n >[];\n @Output() interactionOutput = new EventEmitter<StackedAreaInteractionOutput<\n Datum,\n TCategoricalValue\n > | null>();\n\n closestXIndicies: number[];\n categoryYMin: number;\n categoryYMax: number;\n categoryIndex: number;\n\n constructor(@Inject(STACKED_AREA) public stackedArea: TStackedAreaComponent) {\n super();\n }\n\n get marks(): StackedAreaComponent<Datum, TCategoricalValue> {\n return this.stackedArea;\n }\n\n getElements(): Observable<Element[]> {\n return this.stackedArea.stackedAreas$.pipe(map((sel) => sel.nodes()));\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onEnter(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n if (this.pointerIsInChartArea()) {\n this.setClosestXIndicies();\n this.setClosestDatumPosition();\n this.hoverMoveActions.forEach((action) =>\n action.onStart(this.asHost())\n );\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onClick(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.Click)) {\n this.setPositionsFromPointer(event);\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this.asHost(), inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this.asHost(), inputValue)\n );\n }\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n setPositionsFromElement(): void {\n return;\n }\n\n pointerIsInChartArea(): boolean {\n return (\n this.positionX > this.stackedArea.ranges.x[0] &&\n this.positionX < this.stackedArea.ranges.x[1] &&\n this.positionY > this.stackedArea.ranges.y[1] &&\n this.positionY < this.stackedArea.ranges.y[0]\n );\n }\n\n setClosestXIndicies(): void {\n const uniqueXValues = [\n ...new InternSet<ContinuousValue>(this.stackedArea.config.x.values),\n ];\n const closestXValue = least(uniqueXValues, (x) =>\n Math.abs(this.stackedArea.scales.x(x) - this.positionX)\n );\n if (isDate(closestXValue)) {\n this.closestXIndicies = this.stackedArea.config.valueIndices.filter(\n (i) =>\n (this.stackedArea.config.x.values[i] as Date).getTime() ===\n closestXValue.getTime()\n );\n } else {\n this.closestXIndicies = this.stackedArea.config.valueIndices.filter(\n (i) => this.stackedArea.config.x.values[i] === closestXValue\n );\n }\n }\n\n setClosestDatumPosition(): void {\n const dataAtXValue = this.stackedArea.config.series\n .flatMap((strat) => strat)\n .filter((d) => this.closestXIndicies.includes(d.i));\n const coordinateData = dataAtXValue.map((d) => ({\n categoryYMin: this.stackedArea.scales.y(d[1]),\n categoryYMax: this.stackedArea.scales.y(d[0]),\n i: d.i,\n }));\n const closestDatumIndex = coordinateData.findIndex(\n (d) =>\n this.positionY >= d.categoryYMin && this.positionY <= d.categoryYMax\n );\n let closestDatum;\n if (closestDatumIndex !== -1) {\n closestDatum = coordinateData[closestDatumIndex];\n }\n this.categoryYMin = closestDatum?.categoryYMin;\n this.categoryYMax = closestDatum?.categoryYMax;\n this.categoryIndex = closestDatum ? closestDatumIndex : undefined;\n }\n\n getInteractionOutput(\n type: EventType\n ): StackedAreaInteractionOutput<Datum, TCategoricalValue> {\n const tooltipData = this.stackedArea.getTooltipData(\n this.closestXIndicies,\n this.categoryYMin,\n this.categoryYMax,\n this.categoryIndex\n );\n const position = new StackedAreaTooltipPositioner(tooltipData.anchor);\n\n return {\n ...tooltipData,\n defaultPosition: position.fromAnchor('area', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n defaultPositionFromArea: position.fromAnchor('area', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n defaultPositionFromChart: position.fromAnchor('chart', {\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (\n relativeTo: 'area' | 'chart',\n offset?: Partial<{ x: number; y: number }>\n ) => {\n return position.fromAnchor(relativeTo, {\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(\n output: StackedAreaInteractionOutput<Datum, TCategoricalValue>\n ): void {\n this.interactionOutput.emit(output);\n }\n\n resetDirective(): void {\n this.closestXIndicies = [];\n this.categoryYMin = undefined;\n this.categoryYMax = undefined;\n this.categoryIndex = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { StackedAreaEventsDirective } from './events/stacked-area-events.directive';\nimport { StackedAreaComponent } from './stacked-area.component';\n\n@NgModule({\n imports: [StackedAreaComponent, StackedAreaEventsDirective],\n exports: [StackedAreaComponent, StackedAreaEventsDirective],\n})\nexport class VicStackedAreaModule {}\n","import { InternMap, Series, extent, range, rollup, stack } from 'd3';\nimport { BarsConfig } from '../../bars/config/bars-config';\nimport { BarsDimensions } from '../../bars/config/bars-dimensions';\nimport { DataValue } from '../../core/types/values';\nimport { StackDatum } from '../stacked-bars.component';\nimport { StackedBarsOptions } from './stacked-bars-options';\n\nexport class StackedBarsConfig<Datum, TOrdinalValue extends DataValue>\n extends BarsConfig<Datum, TOrdinalValue>\n implements StackedBarsOptions<Datum, TOrdinalValue>\n{\n stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stackOrder: (x: any) => any;\n stackedData: StackDatum[][];\n\n constructor(\n dimensions: BarsDimensions,\n options: StackedBarsOptions<Datum, TOrdinalValue>\n ) {\n super(dimensions, options);\n }\n\n override initPropertiesFromData(): void {\n // parent class will call this method during this class's super call\n // if statement ensures that code in this method is only called at the end of this class's constructor\n if (this.stackOffset !== undefined && this.stackOrder !== undefined) {\n this.setDimensionPropertiesFromData();\n this.setValueIndices();\n this.setHasNegativeValues();\n this.constructStackedData();\n this.initQuantitativeDomainFromStack();\n }\n }\n\n override setValueIndices(): void {\n this.valueIndices = range(this.ordinal.values.length).filter((i) => {\n return (\n this.ordinal.domainIncludes(this.ordinal.values[i]) &&\n this.color.domainIncludes(this.color.values[i])\n );\n });\n }\n\n constructStackedData(): void {\n const stackedData = stack<[unknown, InternMap<string, number>]>()\n .keys(this.color.calculatedDomain)\n .value((d, key) => {\n return this.quantitative.values[d[1].get(key)];\n })\n .order(this.stackOrder)\n .offset(this.stackOffset)(\n rollup(\n this.valueIndices,\n ([i]) => i,\n (i) => this.ordinal.values[i],\n (i) => this.color.values[i]\n )\n );\n\n this.stackedData = stackedData.map((series) =>\n series.map((d) => {\n Object.assign(d, {\n i: d.data[1].get(series.key),\n });\n return d as unknown as StackDatum;\n })\n );\n }\n\n initQuantitativeDomainFromStack(): void {\n const extents = extent(this.stackedData.flat(2));\n this.quantitative.setDomain(extents);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { safeAssign } from '@mathstack/app-kit';\nimport { Series, stackOffsetDiverging, stackOrderNone } from 'd3';\nimport { VicBarsConfigBuilder } from '../../bars/config/bars-builder';\nimport { DataValue } from '../../core/types/values';\nimport { StackedBarsConfig } from './stacked-bars-config';\n\nconst DEFAULT = {\n _stackOrder: stackOrderNone,\n _stackOffset: stackOffsetDiverging,\n};\n\n/**\n * Builds a configuration object for a StackedBarsComponent.\n *\n * Must be added to a providers array in or above the component that consumes it if it is injected via the constructor. (e.g. `providers: [VicStackedBarsBuilder]` in the component decorator)\n *\n * The first generic parameter, Datum, is the type of the data that will be used to create the stacked bars.\n *\n * The second generic parameter, TOrdinalValue, is the type of the ordinal data that will be used to position the bars.\n */\n@Injectable()\nexport class VicStackedBarsConfigBuilder<\n Datum,\n TOrdinalValue extends DataValue,\n> extends VicBarsConfigBuilder<Datum, TOrdinalValue> {\n private _stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _stackOrder: (x: any) => any;\n\n constructor() {\n super();\n safeAssign(this, DEFAULT);\n }\n\n stackOffset(stackOffset: null): this;\n stackOffset(\n stackOffset: (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void\n ): this;\n stackOffset(\n stackOffset:\n | ((\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>,\n order: Iterable<number>\n ) => void)\n | null\n ): this {\n if (stackOffset === null) {\n this._stackOffset = DEFAULT._stackOffset;\n return this;\n }\n this._stackOffset = stackOffset;\n return this;\n }\n\n stackOrder(stackOrder: null): this;\n stackOrder(\n stackOrder:\n | ((series: Series<Datum, TOrdinalValue>) => Iterable<number>)\n | null\n ): this;\n stackOrder(\n stackOrder:\n | ((\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n series: Series<any, any>\n ) => Iterable<number>)\n | null\n ): this {\n if (stackOrder === null) {\n this._stackOrder = DEFAULT._stackOrder;\n return this;\n }\n this._stackOrder = stackOrder;\n return this;\n }\n\n override getConfig(): StackedBarsConfig<Datum, TOrdinalValue> {\n this.validateBuilder('Stacked Bars');\n return new StackedBarsConfig(this.dimensions, {\n marksClass: 'vic-stacked-bars',\n backgrounds: this.backgroundsBuilder?._build(),\n color: this.colorDimensionBuilder._build('Color'),\n customFills: this._customFills,\n data: this._data,\n datumClass: this._datumClass,\n mixBlendMode: this._mixBlendMode,\n ordinal: this.ordinalDimensionBuilder._build(\n 'band',\n this.getOrdinalDimensionName()\n ),\n quantitative: this.quantitativeDimensionBuilder._build(\n this.getQuantitativeDimensionName()\n ),\n labels: this.labelsBuilder?._build(),\n stackOffset: this._stackOffset,\n stackOrder: this._stackOrder,\n });\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsClickEmitTooltipDataPauseOtherActions<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>) {\n const outputData = host.getInteractionOutput(EventType.Click);\n host.disableOtherActions(EventType.Click);\n host.emitInteractionOutput(outputData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>) {\n host.resumeOtherActions(EventType.Click);\n host.emitInteractionOutput(null);\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventAction, EventType } from '../../../events';\n\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsHoverEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.Hover);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import { BarsInteractionOutput } from '../../../bars';\nimport { DataValue } from '../../../core/types/values';\nimport { EventType, HoverMoveAction } from '../../../events';\nimport { StackedBarsHost } from '../stacked-bars-events.directive';\n\nexport class StackedBarsHoverMoveEmitTooltipData<\n Datum,\n TOrdinalValue extends DataValue,\n> implements\n HoverMoveAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >\n{\n onStart(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n const tooltipData = host.getInteractionOutput(EventType.HoverMove);\n host.emitInteractionOutput(tooltipData);\n }\n\n onEnd(host: StackedBarsHost<Datum, TOrdinalValue>): void {\n host.emitInteractionOutput(null);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n Input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { BaseType, SeriesPoint, Transition, select } from 'd3';\nimport { Selection } from 'd3-selection';\nimport { BarsComponent } from '../bars/bars.component';\nimport { ChartComponent, XyChartComponent } from '../charts';\nimport { DataValue } from '../core/types/values';\nimport { VIC_PRIMARY_MARKS } from '../marks/primary-marks/primary-marks';\nimport { StackedBarsConfig } from './config/stacked-bars-config';\n\nexport type StackDatum = SeriesPoint<{ [key: string]: number }> & {\n i: number;\n};\n\nexport type StackedBarGroupSelection = Selection<\n BaseType | SVGRectElement,\n StackDatum,\n SVGGElement | BaseType,\n StackDatum[]\n>;\n\n// Ideally we would be able to use generic T with the component, but Angular doesn't yet support this, so we use \"unknown\"\n// https://github.com/angular/angular/issues/46815, https://github.com/angular/angular/pull/47461\nexport const STACKED_BARS = new InjectionToken<\n StackedBarsComponent<unknown, DataValue>\n>('StackedBarsComponent');\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-primary-marks-stacked-bars]',\n template: '',\n styleUrls: ['./stacked-bars.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: VIC_PRIMARY_MARKS, useExisting: StackedBarsComponent },\n { provide: STACKED_BARS, useExisting: StackedBarsComponent },\n { provide: ChartComponent, useExisting: XyChartComponent },\n ],\n host: {\n '[class]': 'config.marksClass',\n '[style.mixBlendMode]': 'config.mixBlendMode',\n },\n})\nexport class StackedBarsComponent<\n Datum,\n TOrdinalValue extends DataValue,\n> extends BarsComponent<Datum, TOrdinalValue> {\n @Input() override config: StackedBarsConfig<Datum, TOrdinalValue>;\n stackedBarGroups: StackedBarGroupSelection;\n\n override drawBars(transitionDuration: number): void {\n const t = select(this.chart.svgRef.nativeElement)\n .transition()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .duration(transitionDuration) as Transition<SVGSVGElement, any, any, any>;\n\n this.stackedBarGroups = select(this.elRef.nativeElement)\n .selectAll<SVGGElement, StackDatum[]>(\n `.${this.config.marksClass}-category-group`\n )\n .data<StackDatum[]>(this.config.stackedData)\n .join('g')\n .attr('class', `${this.config.marksClass}-category-group`.trim())\n .attr('fill', ([{ i }]: StackDatum[]) =>\n this.scales.color(this.config.color.values[i])\n )\n .selectAll(`.${this.class.g}`)\n .data((d) => d)\n .join((enter) =>\n enter\n .append('g')\n .attr('class', (d) =>\n `${this.class.g} ${this.config.datumClass(this.config.data[d.i], d.i)}`.trim()\n )\n );\n\n this.stackedBarGroups\n .selectAll(`.${this.class.bar}`)\n .data((d) => [d])\n .join(\n (enter) =>\n enter\n .append('rect')\n .attr('class', () => this.class.bar)\n .attr('x', (d) => this.getStackElementX(d))\n .attr('y', (d) => this.getStackElementY(d))\n .attr('width', (d) => this.getStackElementWidth(d))\n .attr('height', (d) => this.getStackElementHeight(d)),\n (update) =>\n update.call((update) =>\n update\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .attr('x', (d) => this.getStackElementX(d))\n .attr('y', (d) => this.getStackElementY(d))\n .attr('width', (d) => this.getStackElementWidth(d))\n .attr('height', (d) => this.getStackElementHeight(d))\n ),\n (exit) =>\n exit // fancy exit needs to be tested with actual/any data\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .transition(t as any)\n .delay((_, i) => i * 20)\n .attr('y', this.scales.y(0))\n .attr('height', 0)\n .remove()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n );\n }\n\n getStackElementX(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return this.scales.x(\n this.config[this.config.dimensions.x].values[datum.i]\n );\n } else {\n return Math.min(this.scales.x(datum[0]), this.scales.x(datum[1]));\n }\n }\n\n getStackElementY(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return Math.min(this.scales.y(datum[0]), this.scales.y(datum[1]));\n } else {\n return this.scales.y(\n this.config[this.config.dimensions.y].values[datum.i]\n );\n }\n }\n\n getStackElementWidth(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.x as any).bandwidth();\n } else {\n return Math.abs(this.scales.x(datum[0]) - this.scales.x(datum[1]));\n }\n }\n\n getStackElementHeight(datum: StackDatum): number {\n if (this.config.dimensions.ordinal === 'x') {\n return Math.abs(this.scales.y(datum[0]) - this.scales.y(datum[1]));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (this.scales.y as any).bandwidth();\n }\n }\n\n getSourceDatumFromStackedBarDatum(datum: StackDatum): Datum {\n return this.config.data[datum.i];\n }\n}\n","import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';\nimport { pointer, select } from 'd3';\nimport { map, Observable } from 'rxjs';\nimport { BarsInteractionOutput } from '../../bars';\nimport { BarsTooltipPositioner } from '../../bars/events/bars-tooltip-positioner';\nimport { DataValue } from '../../core/types/values';\nimport {\n DEFAULT_TOOLTIP_Y_OFFSET,\n EventAction,\n EventsDirective,\n EventType,\n HoverMoveAction,\n InputEventAction,\n MarksHost,\n UnlistenFunction,\n} from '../../events';\nimport { TooltipPosition } from '../../tooltips';\nimport {\n StackDatum,\n STACKED_BARS,\n StackedBarsComponent,\n} from '../stacked-bars.component';\n\nexport interface StackedBarsHost<\n Datum,\n TOrdinalValue extends DataValue,\n TStackedBarsComponent extends StackedBarsComponent<\n Datum,\n TOrdinalValue\n > = StackedBarsComponent<Datum, TOrdinalValue>,\n> extends MarksHost<BarsInteractionOutput<Datum>, TStackedBarsComponent> {\n getStackDatum(): StackDatum | null;\n}\n\n@Directive({\n selector: '[vicStackedBarsEvents]',\n})\nexport class StackedBarsEventsDirective<\n Datum,\n TOrdinalValue extends DataValue,\n TStackedBarsComponent extends StackedBarsComponent<\n Datum,\n TOrdinalValue\n > = StackedBarsComponent<Datum, TOrdinalValue>,\n> extends EventsDirective<StackedBarsHost<Datum, TOrdinalValue>> {\n @Input()\n hoverActions:\n | EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n hoverMoveActions:\n | HoverMoveAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n clickActions:\n | EventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[]\n | null;\n @Input()\n inputEventActions: InputEventAction<\n StackedBarsHost<Datum, TOrdinalValue>,\n BarsInteractionOutput<Datum>\n >[];\n @Output() interactionOutput =\n new EventEmitter<BarsInteractionOutput<Datum> | null>();\n\n stackDatum: StackDatum | null = null;\n origin: SVGRectElement;\n\n constructor(@Inject(STACKED_BARS) public stackedBars: TStackedBarsComponent) {\n super();\n }\n\n get marks(): TStackedBarsComponent {\n return this.stackedBars;\n }\n\n getElements(): Observable<Element[]> {\n return this.stackedBars.bars$.pipe(map((sel) => sel.nodes()));\n }\n\n getStackDatum(): StackDatum | null {\n return this.stackDatum ?? null;\n }\n\n setupListeners(elements: Element[]): UnlistenFunction[] {\n if (this.inputEventActions?.length && this.inputEvent$) {\n this.events.push(EventType.Input);\n }\n\n return this.bindEventListeners(\n elements,\n this.buildInteractionListeners({\n hover: this.hoverActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n hoverMove: this.hoverMoveActions?.length && {\n pointerenter: (e, el) => this.onEnter(e, el),\n pointermove: (e, el) => this.onMove(e, el),\n pointerleave: (e, el) => this.onLeave(e, el),\n },\n click: this.clickActions?.length && {\n click: (e, el) => this.onClick(e, el),\n },\n })\n );\n }\n\n onEnter(_: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (this.isEventAllowed(EventType.Hover)) {\n this.setPositionsFromElement();\n this.runActions(this.hoverActions, (a) => a.onStart(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.runActions(this.hoverMoveActions, (a) => {\n if (a.initialize) {\n a.initialize(this.asHost());\n }\n });\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMove(event: PointerEvent, _: Element): void {\n if (this.isEventAllowed(EventType.HoverMove)) {\n this.setPositionsFromPointer(event);\n this.hoverMoveActions.forEach((action) => action.onStart(this.asHost()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onLeave(_: PointerEvent, __: Element): void {\n if (this.isEventAllowed(EventType.Hover)) {\n this.hoverActions.forEach((action) => action.onEnd(this.asHost()));\n } else if (this.isEventAllowed(EventType.HoverMove)) {\n this.hoverMoveActions.forEach((action) => action.onEnd(this.asHost()));\n }\n this.resetDirective();\n }\n\n onClick(event: PointerEvent, el: Element): void {\n this.initFromElement(el);\n if (!this.preventAction.click) {\n if (this.hasEvent(EventType.Hover)) {\n this.setPositionsFromElement();\n } else {\n this.setPositionsFromPointer(event);\n }\n this.runActions(this.clickActions, (a) => a.onStart(this.asHost()));\n }\n }\n\n onClickRemove(): void {\n if (!this.preventAction.click) {\n this.runActions(this.clickActions, (a) => a.onEnd(this.asHost()));\n this.resetDirective();\n }\n }\n\n onInputEvent(inputValue: unknown): void {\n if (this.isEventAllowed(EventType.Input)) {\n if (inputValue === null || inputValue === undefined) {\n this.inputEventActions.forEach((action) =>\n action.onEnd(this, inputValue)\n );\n } else {\n this.inputEventActions.forEach((action) =>\n action.onStart(this, inputValue)\n );\n }\n }\n }\n\n initFromElement(el: Element): void {\n this.origin = el as SVGRectElement;\n this.stackDatum = select(el as SVGRectElement).datum() as StackDatum;\n }\n\n setPositionsFromElement(): void {\n const barRect = this.origin.getBoundingClientRect();\n this.positionX = barRect.width / 2;\n this.positionY = barRect.height / 2;\n }\n\n override setPositionsFromPointer(event: PointerEvent): void {\n const [positionX, positionY] = pointer(event);\n this.positionX =\n positionX - parseFloat(this.origin.getAttribute('x') || '0');\n this.positionY =\n positionY - parseFloat(this.origin.getAttribute('y') || '0');\n }\n\n getInteractionOutput(type: EventType): BarsInteractionOutput<Datum> {\n const datum = this.stackedBars.getSourceDatumFromStackedBarDatum(\n this.stackDatum\n );\n const tooltipData = this.stackedBars.getTooltipData(datum);\n const position = new BarsTooltipPositioner({\n x: this.positionX,\n y: this.positionY,\n });\n\n return {\n ...tooltipData,\n origin: this.origin,\n anchor: {\n x: this.positionX,\n y: this.positionY,\n },\n defaultPosition: position.fromAnchor({\n x: 0,\n y: DEFAULT_TOOLTIP_Y_OFFSET,\n }),\n fromAnchor: (offset?: Partial<{ x: number; y: number }>) => {\n return position.fromAnchor({\n x: offset?.x ?? 0,\n y: offset?.y ?? DEFAULT_TOOLTIP_Y_OFFSET,\n });\n },\n customPosition: (positions: TooltipPosition[]) => {\n return position.customPosition(positions);\n },\n type,\n };\n }\n\n emitInteractionOutput(output: BarsInteractionOutput<Datum> | null): void {\n this.interactionOutput.emit(output);\n }\n\n private resetDirective(): void {\n this.stackDatum = undefined;\n this.origin = undefined;\n this.positionX = undefined;\n this.positionY = undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { StackedBarsEventsDirective } from './events/stacked-bars-events.directive';\nimport { StackedBarsComponent } from './stacked-bars.component';\n\n@NgModule({\n imports: [StackedBarsComponent, StackedBarsEventsDirective],\n exports: [StackedBarsComponent, StackedBarsEventsDirective],\n})\nexport class VicStackedBarsModule {}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { XyChartComponent } from '../charts/xy-chart/xy-chart.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[vic-xy-background]',\n templateUrl: './xy-background.component.html',\n styleUrls: ['./xy-background.component.scss'],\n host: {\n class: 'vic-xy-background',\n },\n imports: [AsyncPipe, CommonModule],\n})\nexport class XyBackgroundComponent {\n @Input() color = 'whitesmoke';\n\n constructor(public chart: XyChartComponent) {}\n}\n","@if(chart.scales$ | async; as scales) { @if(scales.x && scales.y) {\n<svg:rect\n class=\"vic-xy-background\"\n [attr.x]=\"scales.x.range()[0]\"\n [attr.y]=\"scales.y.range()[1]\"\n [attr.width]=\"scales.x.range()[1] - scales.x.range()[0]\"\n [attr.height]=\"scales.y.range()[0] - scales.y.range()[1]\"\n [attr.fill]=\"color\"\n></svg:rect>\n} }\n","import { NgModule } from '@angular/core';\nimport { XyBackgroundComponent } from './xy-background.component';\n\n@NgModule({\n imports: [XyBackgroundComponent],\n exports: [XyBackgroundComponent],\n})\nexport class VicXyBackgroundModule {}\n","/*\n * Public API Surface of charts\n */\nexport * from './lib/axes/index';\nexport * from './lib/bars/index';\nexport * from './lib/charts/index';\nexport * from './lib/core/index';\nexport * from './lib/data-dimensions/index';\nexport * from './lib/data-export/index';\nexport * from './lib/dots/index';\nexport * from './lib/events/index';\nexport * from './lib/fill-definitions/index';\nexport * from './lib/geographies/index';\nexport * from './lib/grouped-bars/index';\nexport * from './lib/image-download/index';\nexport * from './lib/lines/index';\nexport * from './lib/map-legend/index';\nexport * from './lib/marks/index';\nexport * from './lib/point-markers/index';\nexport * from './lib/quantitative-rules/index';\nexport * from './lib/stacked-area/index';\nexport * from './lib/stacked-bars/index';\nexport * from './lib/stroke/index';\nexport * from './lib/svg-text-wrap/index';\nexport * from './lib/tooltips/index';\nexport * from './lib/xy-background/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT","TICK_DEFAULT","TICKS_DEFAULT","color","d3Color","DEFAULT_POSITIONS","map","i1.XyChartComponent"],"mappings":"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"}