@skyux/charts 14.18.0 → 14.19.1

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.
@@ -1177,6 +1177,21 @@ const RESOURCES = {
1177
1177
  message: 'Data table for {0}',
1178
1178
  },
1179
1179
  },
1180
+ ES: {
1181
+ 'skyux_charts.chart.bar.accessible_summary': {
1182
+ message: 'Gráfico de barras. Número de series: {0}. Número de categorías: {1}. Hay una tabla de datos disponible en el menú contextual del gráfico.',
1183
+ },
1184
+ 'skyux_charts.chart.controls.context_menu.accessible_name': {
1185
+ message: 'Menú contextual de {0}',
1186
+ },
1187
+ 'skyux_charts.chart.controls.context_menu.view_data_table': {
1188
+ message: 'Ver tabla de datos',
1189
+ },
1190
+ 'skyux_charts.data_table_modal.close_button': { message: 'Cerrar' },
1191
+ 'skyux_charts.data_table_modal.table_region_label': {
1192
+ message: 'Tabla de datos de {0}',
1193
+ },
1194
+ },
1180
1195
  'FR-CA': {
1181
1196
  'skyux_charts.chart.bar.accessible_summary': {
1182
1197
  message: 'Graphique à barres. Nombre de séries : {0}. Nombre de catégories : {1}. Un tableau de données est disponible dans le menu du contexte du graphique.',
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-charts.mjs","sources":["../../../../../libs/components/charts/src/lib/chart-axis/chart-axis-category.ts","../../../../../libs/components/charts/src/lib/shared/value-formatter.ts","../../../../../libs/components/charts/src/lib/chart-axis/optional-number-attribute.ts","../../../../../libs/components/charts/src/lib/chart-axis/chart-axis-value.ts","../../../../../libs/components/charts/src/lib/chart-js/cartesian-utils.ts","../../../../../libs/components/charts/src/lib/chart-js/chart-js.ts","../../../../../libs/components/charts/src/lib/chart-js/chart-js-config-utils.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-service.ts","../../../../../libs/components/charts/src/lib/shared/chart-theme-styles.ts","../../../../../libs/components/charts/src/lib/chart-plot/chart-plot.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar-series.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar.html","../../../../../libs/components/charts/src/lib/shared/sky-charts-resources.module.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-modal.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-modal.html","../../../../../libs/components/charts/src/lib/chart/chart-controls.ts","../../../../../libs/components/charts/src/lib/chart/chart-controls.html","../../../../../libs/components/charts/src/lib/chart/chart-heading.ts","../../../../../libs/components/charts/src/lib/chart/chart-heading.html","../../../../../libs/components/charts/src/lib/chart/chart-heading-level.ts","../../../../../libs/components/charts/src/lib/chart/chart-heading-style.ts","../../../../../libs/components/charts/src/lib/chart/chart-subheading.ts","../../../../../libs/components/charts/src/lib/chart/chart.ts","../../../../../libs/components/charts/src/lib/chart/chart.html","../../../../../libs/components/charts/src/skyux-charts.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\n/**\n * Defines the category axis of a chart. Its categories are shared by every\n * series plotted against it, and each series' values align to them by index.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-axis-category',\n template: '',\n})\nexport class SkyChartAxisCategory {\n /**\n * The categories shared by every series plotted against this axis. Each\n * series' values are aligned to these categories by index.\n */\n public readonly categories = input.required<readonly (string | number)[]>();\n\n /**\n * Whether to hide the axis label.\n */\n public readonly labelHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The text of the axis label.\n */\n public readonly labelText = input.required<string>();\n}\n","import { SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';\n\nimport { SkyChartValueFormat } from './value-format';\n\n/**\n * Options for creating a chart value formatter.\n * @internal\n */\nexport interface SkyChartValueFormatterOptions {\n /**\n * How to format the value.\n */\n format: SkyChartValueFormat;\n\n /**\n * The ISO 4217 currency code used when `format` is `currency`. Defaults to\n * `USD`, matching `SkyI18nCurrencyFormatService`.\n */\n currencyCode: string | undefined;\n\n /**\n * The number of decimal places to display. When unset, the format's\n * locale-aware default is used.\n */\n digits: number | undefined;\n\n /**\n * The locale used to format the value.\n */\n locale: string;\n}\n\n/**\n * Creates a function that formats a numeric value according to the given\n * `format`, `currencyCode`, `digits`, and `locale`. Shared by every chart type\n * so value formatting is not tied to an axis.\n * @internal\n */\nexport function createSkyChartValueFormatter(\n options: SkyChartValueFormatterOptions,\n): (value: number) => string {\n const { format, currencyCode = 'USD', digits, locale } = options;\n\n let style: SkyIntlNumberFormatStyle;\n\n switch (format) {\n case 'currency':\n style = SkyIntlNumberFormatStyle.Currency;\n break;\n\n case 'percent':\n style = SkyIntlNumberFormatStyle.Percent;\n break;\n\n default:\n style = SkyIntlNumberFormatStyle.Decimal;\n break;\n }\n\n return (value: number): string =>\n SkyIntlNumberFormatter.format(value, locale, style, {\n currency: format === 'currency' ? currencyCode : undefined,\n currencyDisplay: 'symbol',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * Coerces an attribute to a number, treating unset and invalid values as\n * `undefined`.\n */\nexport function optionalNumberAttribute(value: unknown): number | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const num = numberAttribute(value);\n\n return Number.isNaN(num) ? undefined : num;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { map } from 'rxjs/operators';\n\nimport { SkyChartValueFormat } from '../shared/value-format';\nimport { createSkyChartValueFormatter } from '../shared/value-formatter';\nimport { SkyChartValueScaleType } from '../shared/value-scale-type';\nimport { optionalNumberAttribute } from './optional-number-attribute';\n\n/**\n * Defines the value axis of a chart, which scales the plotted series and\n * formats their values in axis labels, tooltips, and the data table.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-axis-value',\n template: '',\n})\nexport class SkyChartAxisValue {\n readonly #localeProvider = inject(SkyAppLocaleProvider);\n\n readonly #locale = toSignal(\n this.#localeProvider.getLocaleInfo().pipe(map((info) => info.locale)),\n { initialValue: this.#localeProvider.defaultLocale },\n );\n\n /**\n * The ISO 4217 currency code used when `format` is `currency`. When unset,\n * currency values format as `USD`.\n */\n public readonly currencyCode = input<string>();\n\n /**\n * The number of decimal places to display. When unset, the format's\n * locale-aware default is used (for example, two places for most\n * currencies).\n */\n public readonly digits = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * How to format the axis values in axis labels, tooltips, and the data table.\n * The `percent` format expects fractional values, so `0.25` displays as\n * `25%`.\n * @default 'number'\n */\n public readonly format = input<SkyChartValueFormat>('number');\n\n /**\n * Whether to hide the axis label.\n */\n public readonly labelHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The text of the axis label.\n */\n public readonly labelText = input.required<string>();\n\n /**\n * The highest value to display on the axis. When unset, the axis scales to\n * fit the plotted values.\n */\n public readonly max = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * The lowest value to display on the axis. When unset, the axis scales to\n * fit the plotted values.\n */\n public readonly min = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * The scale type for the value axis.\n * @default 'linear'\n */\n public readonly scaleType = input<SkyChartValueScaleType>('linear');\n\n /**\n * Formats a numeric value according to this axis's `format`, `currencyCode`,\n * and the current locale.\n * @internal\n */\n public readonly formatValue = computed<(value: number) => string>(() =>\n createSkyChartValueFormatter({\n format: this.format(),\n currencyCode: this.currencyCode(),\n digits: this.digits(),\n locale: this.#locale(),\n }),\n );\n}\n","import {\n type ChartConfiguration as ChartJsConfig,\n type TooltipItem as ChartJsTooltipItem,\n} from 'chart.js';\n\nimport { SkyChartAxisCategory } from '../chart-axis/chart-axis-category';\nimport { SkyChartAxisValue } from '../chart-axis/chart-axis-value';\nimport { SkyChartBarSeries } from '../chart-bar/chart-bar-series';\nimport { type SkyChartBarSeriesValue } from '../chart-bar/chart-bar-series-value';\nimport type { SkyChartTable } from '../chart-table/chart-table';\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\n\n/**\n * The Chart.js chart types that plot a category axis against one or more value\n * axes and share the helpers in this module.\n */\ntype CartesianChartType = 'bar' | 'line';\n\n/**\n * The scale key shared by every series' category axis. Cartesian charts always\n * have exactly one category axis, so a single, stable key is sufficient.\n */\nexport const CATEGORY_AXIS_ID = 'category';\n\n/**\n * The scale key of the value axis. Cartesian charts have exactly one value\n * axis, so a single, stable key is sufficient.\n */\nexport const VALUE_AXIS_ID = 'value';\n\n/**\n * The `scales` shape of a cartesian chart. Bar and line charts register the\n * same cartesian scale types, so the shape is identical across them.\n */\ntype ChartJsCartesianScales = NonNullable<\n NonNullable<ChartJsConfig<'bar'>['options']>['scales']\n>;\n\n/**\n * The themed visual styling shared by every cartesian scale: grid line, tick,\n * border, and text colors, the tick length, and the tick/title fonts. Category\n * and value scales spread this and add their own structural options (type,\n * position, title text, tick callback, and whether grid lines fill the chart\n * area).\n */\ninterface ChartJsThemedScaleStyle {\n grid: {\n color: string;\n tickColor: string;\n tickLength: number | undefined;\n };\n border: { color: string };\n ticks: {\n color: string;\n font: {\n size: number | undefined;\n family: string;\n weight: number | undefined;\n };\n };\n title: {\n color: string;\n font: { size: number | undefined; family: string };\n padding: { top: number | undefined; bottom: number | undefined };\n };\n}\n\n/**\n * The subset of a cartesian tooltip context the value `label` callback needs.\n * Chart.js types `parsed` and `dataset` as `unknown`/`UnionToIntersection`\n * under a bare generic chart type, so the context is narrowed to this shape.\n */\ninterface CartesianTooltipContext {\n parsed: Record<'x' | 'y', number>;\n dataset: { label?: string };\n raw: unknown;\n}\n\n/**\n * Whether a series value is a floating `[start, end]` range rather than a\n * single number. `Array.isArray` alone does not narrow readonly tuples, so\n * the check is wrapped in an explicit type predicate.\n */\nexport function isValueRange(\n value: unknown,\n): value is readonly [number, number] {\n return Array.isArray(value);\n}\n\n/**\n * The axes and series a chart needs to render, present only when a category\n * axis, a value axis, and at least one series are all provided.\n */\nexport interface SkyChartCartesianData {\n categoryAxis: SkyChartAxisCategory;\n valueAxis: SkyChartAxisValue;\n series: readonly SkyChartBarSeries[];\n}\n\n/**\n * Resolves the axes and series into the data a chart needs to render, or\n * `undefined` when a required axis or series is missing.\n */\nexport function resolveCartesianData(\n categoryAxis: SkyChartAxisCategory | undefined,\n valueAxis: SkyChartAxisValue | undefined,\n series: readonly SkyChartBarSeries[],\n): SkyChartCartesianData | undefined {\n if (\n categoryAxis === undefined ||\n valueAxis === undefined ||\n series.length === 0\n ) {\n return undefined;\n }\n\n return { categoryAxis, valueAxis, series };\n}\n\n/**\n * Builds the tabular representation of a cartesian chart for the accessible\n * data table, formatting each series' values with the value axis's format.\n * Floating `[start, end]` ranges render as \"start – end\", and null values\n * render as empty cells, mirroring the gaps in the plot.\n */\nexport function buildCartesianTable(\n categoryAxis: SkyChartAxisCategory,\n series: readonly SkyChartBarSeries[],\n formatValue: (value: number) => string,\n): SkyChartTable {\n return {\n categoryLabel: categoryAxis.labelText(),\n categories: categoryAxis.categories(),\n series: series.map((chartSeries) => ({\n label: chartSeries.labelText(),\n values: chartSeries\n .values()\n .map((value) => formatCartesianValue(value, formatValue)),\n })),\n };\n}\n\n/**\n * Formats a single plotted value: numbers use the value axis's format, a\n * floating `[start, end]` range formats as \"start – end\", and `null` (a gap)\n * formats as an empty string.\n */\nfunction formatCartesianValue(\n value: SkyChartBarSeriesValue,\n formatValue: (value: number) => string,\n): string {\n if (value === null) {\n return '';\n }\n\n if (isValueRange(value)) {\n return `${formatValue(value[0])} – ${formatValue(value[1])}`;\n }\n\n return formatValue(value);\n}\n\n/**\n * Builds the themed styling shared by every cartesian scale from the resolved\n * theme styles. Building it once keeps every axis visually consistent.\n */\nfunction buildThemedScaleStyle(\n themeStyles: SkyChartThemeStyles,\n): ChartJsThemedScaleStyle {\n const { font, text, axis } = themeStyles;\n\n return {\n grid: {\n color: axis.gridlineColor,\n tickColor: axis.gridlineColor,\n tickLength: axis.tickLength,\n },\n border: {\n color: axis.lineColor,\n },\n ticks: {\n color: text.color,\n font: {\n size: font.size,\n family: font.family,\n weight: font.weight,\n },\n },\n title: {\n color: text.deemphasizedColor,\n font: {\n size: font.size,\n family: font.family,\n },\n padding: {\n top: axis.titleGap,\n bottom: axis.titleGap,\n },\n },\n };\n}\n\n/**\n * Restricts a logarithmic value axis's ticks to powers of ten. Chart.js's\n * logarithmic tick generator inserts intermediate ticks within each decade,\n * whose gridlines render at visually uneven intervals; decade-only gridlines\n * read evenly. When the generated ticks span fewer than two decades, they are\n * kept as-is so a narrow range is not left nearly unlabeled.\n */\nfunction keepDecadeLogTicks(axis: { ticks: { value: number }[] }): void {\n const decadeTicks = axis.ticks.filter((tick) => {\n const magnitude = Math.log10(tick.value);\n\n return Math.abs(magnitude - Math.round(magnitude)) < 1e-9;\n });\n\n if (decadeTicks.length >= 2) {\n axis.ticks = decadeTicks;\n }\n}\n\n/**\n * Builds the category and value axis scales for a cartesian chart. The category\n * axis draws no grid lines across the chart area, and the value axis draws them\n * to aid value comparison. When `stacked` is set, both the category and value\n * scales stack so that series accumulate into a single bar per category.\n */\nexport function buildCartesianScales(options: {\n categoryAxis: SkyChartAxisCategory;\n valueAxis: SkyChartAxisValue;\n isHorizontal: boolean;\n isStacked?: boolean;\n themeStyles: SkyChartThemeStyles;\n}): ChartJsCartesianScales {\n const {\n categoryAxis,\n valueAxis,\n isHorizontal,\n isStacked = false,\n themeStyles,\n } = options;\n\n const indexAxis = isHorizontal ? 'y' : 'x';\n const valueDirection = isHorizontal ? 'x' : 'y';\n\n const base = buildThemedScaleStyle(themeStyles);\n\n const formatValue = valueAxis.formatValue();\n const scaleType = valueAxis.scaleType();\n\n return {\n [CATEGORY_AXIS_ID]: {\n type: 'category',\n axis: indexAxis,\n position: isHorizontal ? 'left' : 'bottom',\n stacked: isStacked,\n grid: {\n display: true,\n drawTicks: true,\n // The category axis marks discrete groups, so grid lines running\n // between the bars add clutter without aiding value comparison.\n drawOnChartArea: false,\n ...base.grid,\n },\n border: {\n display: true,\n ...base.border,\n },\n ticks: {\n ...base.ticks,\n // A horizontal chart's height grows with its category count, so every\n // label is guaranteed room and none may be dropped. A vertical chart's\n // width is fixed, so its labels must still be skipped when they crowd.\n autoSkip: !isHorizontal,\n },\n title: {\n display: !categoryAxis.labelHidden(),\n text: categoryAxis.labelText(),\n ...base.title,\n },\n },\n [VALUE_AXIS_ID]: {\n type: scaleType,\n axis: valueDirection,\n position: isHorizontal ? 'bottom' : 'left',\n stacked: isStacked,\n min: valueAxis.min(),\n max: valueAxis.max(),\n ...(scaleType === 'logarithmic' && {\n afterBuildTicks: keepDecadeLogTicks,\n }),\n grid: {\n ...base.grid,\n drawOnChartArea: true,\n },\n border: {\n ...base.border,\n },\n ticks: {\n ...base.ticks,\n padding: 0,\n callback: (tickValue: string | number): string =>\n formatValue(Number(tickValue)),\n },\n title: {\n display: !valueAxis.labelHidden(),\n text: valueAxis.labelText(),\n ...base.title,\n },\n },\n };\n}\n\n/**\n * Builds a tooltip `label` callback that formats each point's value using the\n * value axis's format.\n */\nexport function buildValueTooltipLabel<T extends CartesianChartType>(\n formatValue: (value: number) => string,\n valueDirection: 'x' | 'y',\n): (context: ChartJsTooltipItem<T>) => string {\n return (context: ChartJsTooltipItem<T>): string => {\n const item = context as unknown as CartesianTooltipContext;\n\n // A floating bar carries its [start, end] range in the raw data element;\n // `parsed` holds only the end value.\n const formatted = isValueRange(item.raw)\n ? formatCartesianValue(item.raw, formatValue)\n : formatValue(item.parsed[valueDirection] ?? 0);\n\n const label = item.dataset.label;\n\n return label ? `${label}: ${formatted}` : formatted;\n };\n}\n","import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport {\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n type ChartConfiguration,\n type ChartType,\n Legend,\n LinearScale,\n LogarithmicScale,\n Tooltip,\n} from 'chart.js';\n\nChart.register(\n BarController,\n BarElement,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n Legend,\n Tooltip,\n);\n\n/**\n * A Chart.js configuration with a required `options` object. Plot components\n * always build a complete `options`, so requiring it here keeps the render\n * loop free of undefined checks.\n * @internal\n */\nexport type SkyChartJsConfig<TType extends ChartType = ChartType> =\n ChartConfiguration<TType> & {\n options: NonNullable<ChartConfiguration<TType>['options']>;\n };\n\n/**\n * Renders a Chart.js chart onto a canvas and manages its lifecycle (create,\n * update, and destroy) from a reactive configuration. Plot components such as\n * `sky-chart-bar` build the configuration and delegate rendering here.\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-js',\n // Chart.js detects size changes from the canvas's parent, not the canvas\n // itself, so the host must be a dedicated, relatively-positioned container\n // for the canvas. Without this, the chart fails to resize responsively and\n // can render blurry or continually shrink.\n // https://www.chartjs.org/docs/latest/configuration/responsive.html#important-note\n styles: `\n :host {\n display: block;\n position: relative;\n }\n `,\n template: `<canvas #chartRef aria-hidden=\"true\"></canvas>`,\n})\nexport class SkyChartJs<TType extends ChartType = ChartType> {\n /**\n * The Chart.js configuration to render.\n */\n public readonly config = input.required<SkyChartJsConfig<TType>>();\n\n protected readonly chartRef = viewChild.required('chartRef', {\n read: ElementRef,\n });\n\n #chart: Chart<TType> | undefined;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.#chart?.destroy();\n this.#chart = undefined;\n });\n\n afterRenderEffect(() => {\n const config = this.config();\n\n if (this.#chart) {\n this.#chart.data = config.data;\n this.#chart.options = config.options;\n this.#chart.update();\n } else {\n this.#chart = new Chart<TType>(this.chartRef().nativeElement, config);\n }\n });\n }\n}\n","import { type ChartOptions, type ChartType } from 'chart.js';\n\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\nimport { type SkyChartJsConfig } from './chart-js';\n\n/**\n * Builds the Chart.js `options` shared by every SKY chart type: responsiveness,\n * layout, interaction, hover, animation, and the themed legend and tooltip.\n */\nfunction buildBaseChartJsOptions(\n themeStyles: SkyChartThemeStyles,\n): ChartOptions {\n const { font, text, tooltip } = themeStyles;\n\n const bodyFont = {\n family: font.family,\n size: font.size,\n weight: font.weight,\n lineHeight: text.lineHeight,\n };\n\n const options: ChartOptions = {\n // Responsiveness: fill the container and re-layout on resize.\n responsive: true,\n maintainAspectRatio: false,\n layout: { padding: 0 },\n\n // Interaction: hovering and tooltips target the nearest point precisely.\n interaction: { mode: 'nearest', intersect: true },\n hover: { mode: 'nearest', intersect: true },\n animation: { duration: 400, easing: 'easeInOutQuart' },\n\n plugins: {\n legend: {\n position: 'bottom',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n color: text.color,\n font: bodyFont,\n },\n },\n tooltip: {\n enabled: true,\n position: 'average',\n displayColors: true,\n usePointStyle: true,\n\n // Interaction\n mode: 'index',\n intersect: false,\n\n // Typography\n titleColor: text.color,\n titleFont: {\n ...bodyFont,\n weight: font.emphasizedWeight,\n },\n bodyColor: text.color,\n bodyFont,\n footerColor: text.color,\n footerFont: bodyFont,\n\n // Container\n padding: { ...tooltip.inset },\n cornerRadius: tooltip.cornerRadius,\n borderWidth: tooltip.borderWidth,\n caretSize: 8,\n caretPadding: 4,\n\n // Color-swatch icon\n boxHeight: tooltip.iconSize,\n boxWidth: tooltip.iconSize,\n boxPadding: tooltip.iconGap,\n multiKeyBackground: 'transparent',\n\n // Text spacing.\n titleMarginBottom: tooltip.titleGap,\n bodySpacing: tooltip.bodyGap,\n footerMarginTop: tooltip.titleGap,\n\n // Colors.\n backgroundColor: tooltip.backgroundColor,\n borderColor: tooltip.borderColor,\n },\n },\n };\n\n return options;\n}\n\n/**\n * Extends the shared, themed base options with a chart-type-specific configuration.\n * @internal\n */\nexport function extendBaseChartJsConfig<TType extends ChartType = ChartType>(\n themeStyles: SkyChartThemeStyles,\n overrides: SkyChartJsConfig<TType>,\n): SkyChartJsConfig<TType> {\n const base = buildBaseChartJsOptions(themeStyles);\n\n const options: ChartOptions = {\n ...base,\n ...overrides.options,\n plugins: {\n ...base.plugins,\n ...overrides.options.plugins,\n legend: {\n ...base.plugins?.legend,\n ...overrides.options.plugins?.legend,\n },\n tooltip: {\n ...base.plugins?.tooltip,\n ...overrides.options.plugins?.tooltip,\n },\n },\n };\n\n return {\n ...overrides,\n options,\n } as SkyChartJsConfig<TType>;\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport { SkyChartTable } from './chart-table';\n\n/**\n * A localized, descriptive summary of a chart's plotted content, used as the\n * accessible name of the chart figure. Each plot type supplies its own resource\n * key and arguments so the wording can describe that type's shape (for example,\n * a bar chart's series and categories).\n * @internal\n */\nexport interface SkyChartAccessibleSummary {\n /**\n * The resource key of the localized summary sentence.\n */\n resourceKey: string;\n\n /**\n * The positional arguments for the localized summary sentence.\n */\n args: (string | number)[];\n}\n\n/**\n * Bridges a chart's tabular representation from the plotted chart component to\n * the data table modal. Provided at the `sky-chart` level so each chart has its\n * own instance.\n * @internal\n */\n@Injectable()\nexport class SkyChartTableService {\n /**\n * The current tabular representation of the chart, or `undefined` when the\n * chart has no data to represent.\n */\n public readonly table = signal<SkyChartTable | undefined>(undefined);\n\n /**\n * The current accessible summary of the chart, or `undefined` when the chart\n * has no data to represent.\n */\n public readonly summary = signal<SkyChartAccessibleSummary | undefined>(\n undefined,\n );\n}\n","/**\n * The resolved, themed styling for a chart, grouped by feature. Chart.js\n * renders to a canvas that cannot read CSS custom properties, so every SKY\n * theme token the library depends on is resolved here — and only here — to a\n * concrete value. This keeps the full set of tokens auditable in one place.\n *\n * When the SKY theme styles are not loaded, strings resolve to empty strings —\n * which Chart.js treats as unset, rendering with its own defaults — and numbers\n * to `NaN`. Every value otherwise has a default defined in the\n * `sky-default-overrides` mixin in `chart.scss`, which applies in every\n * non-modern context; the modern theme supplies the `--sky-*` tokens directly.\n * @internal\n */\nexport interface SkyChartThemeStyles {\n font: {\n family: string;\n size: number;\n weight: number;\n emphasizedWeight: number;\n };\n text: {\n color: string;\n deemphasizedColor: string;\n lineHeight: number;\n };\n height: {\n /** The minimum chart height, in pixels. */\n min: number;\n /** The maximum chart height, in pixels. */\n max: number;\n /**\n * The default chart height as a CSS `clamp()` expression, used by\n * orientations whose height is not computed from their content.\n */\n default: string;\n };\n axis: {\n lineColor: string;\n gridlineColor: string;\n tickLength: number;\n /**\n * The vertical gap between an axis title and its ticks.\n */\n titleGap: number;\n };\n series: {\n categoricalPalette: string[];\n };\n /**\n * The styling of the tooltip container and its contents.\n */\n tooltip: {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n cornerRadius: number;\n inset: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n /**\n * The size of the color-swatch icon beside each tooltip line.\n */\n iconSize: number;\n /**\n * The gap between the color-swatch icon and its text.\n */\n iconGap: number;\n /**\n * The vertical gap between the tooltip title or footer and its body.\n */\n titleGap: number;\n /**\n * The vertical gap between tooltip body lines.\n */\n bodyGap: number;\n };\n bar: {\n borderColor: string;\n borderRadius: number;\n /** Bar-layout sizing for a vertical (column) chart, in pixels. */\n vertical: {\n baseBarThickness: number;\n minBarThickness: number;\n maxBarThickness: number;\n };\n /** Bar-layout sizing for a horizontal chart, in pixels. */\n horizontal: {\n minBarThickness: number;\n maxBarThickness: number;\n minCategoryGap: number;\n };\n };\n}\n\n/**\n * Resolves the active SKY theme's chart styling for the given host element.\n * When the SKY theme styles are not loaded, the chart renders un-themed with\n * Chart.js defaults.\n * @internal\n */\nexport function resolveChartThemeStyles(\n host: HTMLElement,\n): SkyChartThemeStyles {\n const styles = getComputedStyle(host);\n\n // Custom properties keep `calc()` expressions unevaluated (for example, the\n // SKY line-height tokens are authored as `calc(20/15)`). The probe assigns\n // those raw values to a standard property, which the browser evaluates, and\n // reads the resolved value back. It is created lazily — only for values the\n // fast path cannot parse — and torn down once resolution finishes.\n const probe = createTokenProbe(host);\n\n // `rem` conversions share one root font-size read; see `remToPx`.\n const rootFontSize = Number.parseFloat(\n getComputedStyle(host.ownerDocument.documentElement).fontSize,\n );\n\n try {\n // The chart's height bounds are authored once, as custom properties on\n // the `sky-chart` host (see `chart.scss`), so the plot heights resolved\n // here always match the loading state's reserved height. Plots must\n // render inside `sky-chart` (enforced by `SkyChartPlot`), so the\n // properties are always in scope; like the theme tokens, they only fail\n // to resolve in a genuinely broken setup.\n const minHeight = readNumber(\n styles,\n probe,\n '--sky-chart-height-min',\n rootFontSize,\n );\n\n const maxHeight = readNumber(\n styles,\n probe,\n '--sky-chart-height-max',\n rootFontSize,\n );\n\n const viewportHeight = readString(styles, '--sky-chart-height-viewport');\n\n return {\n font: {\n family: readString(styles, '--sky-font-family-primary'),\n size: readNumber(styles, probe, '--sky-font-size-body-s', rootFontSize),\n weight: readNumber(\n styles,\n probe,\n '--sky-font-style-body-s',\n rootFontSize,\n ),\n emphasizedWeight: readNumber(\n styles,\n probe,\n '--sky-font-style-emphasized',\n rootFontSize,\n ),\n },\n text: {\n color: readString(styles, '--sky-color-text-default'),\n deemphasizedColor: readString(styles, '--sky-color-text-deemphasized'),\n lineHeight: readLineHeight(styles, probe),\n },\n height: {\n min: minHeight,\n max: maxHeight,\n default: `clamp(${minHeight}px, ${viewportHeight}, ${maxHeight}px)`,\n },\n axis: {\n lineColor: readString(styles, '--sky-color-viz-axis'),\n gridlineColor: readString(styles, '--sky-color-viz-gridline'),\n tickLength: readNumber(\n styles,\n probe,\n '--sky-size-chart-tick_length-measure',\n rootFontSize,\n ),\n titleGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-xs',\n rootFontSize,\n ),\n },\n series: {\n categoricalPalette: Array.from({ length: 8 }, (_, index) =>\n readString(styles, `--sky-color-viz-category-${index + 1}`),\n ),\n },\n tooltip: {\n backgroundColor: readString(\n styles,\n '--sky-color-background-container-base',\n ),\n borderColor: readString(styles, '--sky-color-border-container-base'),\n borderWidth: readNumber(\n styles,\n probe,\n '--sky-border-width-container-base',\n rootFontSize,\n ),\n cornerRadius: readNumber(\n styles,\n probe,\n '--sky-border-radius-s',\n rootFontSize,\n ),\n inset: {\n top: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-top',\n rootFontSize,\n ),\n right: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-right',\n rootFontSize,\n ),\n bottom: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-bottom',\n rootFontSize,\n ),\n left: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-left',\n rootFontSize,\n ),\n },\n iconSize: readNumber(styles, probe, '--sky-size-icon-xs', rootFontSize),\n iconGap: readNumber(\n styles,\n probe,\n '--sky-space-gap-icon-s',\n rootFontSize,\n ),\n titleGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-s',\n rootFontSize,\n ),\n bodyGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-0',\n rootFontSize,\n ),\n },\n bar: {\n borderColor: readString(\n styles,\n '--sky-color-background-container-base',\n ),\n borderRadius: readNumber(\n styles,\n probe,\n '--sky-border-radius-xs',\n rootFontSize,\n ),\n vertical: {\n baseBarThickness: remToPx('2rem', rootFontSize),\n minBarThickness: remToPx('0.75rem', rootFontSize),\n maxBarThickness: remToPx('7.5rem', rootFontSize),\n },\n horizontal: {\n minBarThickness: remToPx('0.75rem', rootFontSize),\n maxBarThickness: remToPx('1rem', rootFontSize),\n minCategoryGap: remToPx('0.5rem', rootFontSize),\n },\n },\n };\n } finally {\n probe.destroy();\n }\n}\n\n/**\n * Derives the default-theme override property for a SKY theme token. The\n * modern theme's `--sky-*` tokens are not defined in the SKY UX default\n * theme, so `sky-chart` provides `--sky-override-chart-*` values scoped to\n * the default theme (see `chart.scss`). The override wins when present,\n * matching the `var(--sky-override-x, var(--sky-x))` convention used in\n * component CSS.\n */\nfunction overrideProperty(property: string): string {\n return `--sky-override-chart-${property.slice('--sky-'.length)}`;\n}\n\n/**\n * Reads a CSS custom property — preferring its default-theme override —\n * returning an empty string when neither is set. An empty string reaching\n * Chart.js renders un-themed rather than broken.\n */\nfunction readString(styles: CSSStyleDeclaration, property: string): string {\n return (\n styles.getPropertyValue(overrideProperty(property)).trim() ||\n styles.getPropertyValue(property).trim()\n );\n}\n\n/**\n * Reads a numeric CSS custom property — preferring its default-theme\n * override — as a number, converting `rem` values to pixels using the root\n * font size. Values the fast path cannot parse (such as `calc()` lengths) are\n * resolved through the probe. Every token has a default defined in the\n * `sky-default-overrides` mixin in `chart.scss`, so a value only fails to\n * resolve — returning `NaN` — in a genuinely broken theme.\n */\nfunction readNumber(\n styles: CSSStyleDeclaration,\n probe: SkyChartTokenProbe,\n property: string,\n rootFontSize: number,\n): number {\n const raw = readString(styles, property);\n\n if (raw === '') {\n return Number.NaN;\n }\n\n const value = Number.parseFloat(raw);\n\n if (!Number.isNaN(value)) {\n return raw.endsWith('rem') ? remToPx(raw, rootFontSize) : value;\n }\n\n // A non-numeric literal such as a `calc()` length; resolve it via the probe.\n return probe.resolveLength(raw) ?? Number.NaN;\n}\n\n/**\n * Converts a `rem` length to pixels using the document root font size. `rem` is\n * defined relative to the root element (never the host), so the root font size\n * is the correct reference — resolved once per `resolveChartThemeStyles` call\n * and shared by every conversion. Chart.js reasons in pixels when it lays out\n * a canvas, so `rem`-based sizing has to be resolved before it reaches the\n * chart.\n */\nfunction remToPx(rem: string, rootFontSize: number): number {\n return Number.parseFloat(rem) * rootFontSize;\n}\n\n/**\n * Reads the body-s line height as a multiple of the font size. A plain\n * numeric value (such as the default theme's override) parses directly; the\n * modern theme's token is a `calc()` expression that `getComputedStyle`\n * leaves unevaluated on custom properties, so it is resolved through the\n * probe. Its default is defined in the `sky-default-overrides` mixin in\n * `chart.scss`, so it only fails to resolve — returning `NaN` — in a\n * genuinely broken theme.\n */\nfunction readLineHeight(\n styles: CSSStyleDeclaration,\n probe: SkyChartTokenProbe,\n): number {\n const raw = readString(styles, '--sky-font-line_height-body-s');\n\n if (raw === '') {\n return Number.NaN;\n }\n\n const value = Number.parseFloat(raw);\n\n if (!Number.isNaN(value)) {\n return value;\n }\n\n // A non-numeric expression such as `calc(20/15)`; resolve it via the probe.\n return probe.resolveNumber(raw) ?? Number.NaN;\n}\n\n/**\n * Resolves raw CSS value expressions — including `calc()` — that\n * `getComputedStyle` leaves unevaluated on custom properties. Each raw value\n * is assigned to a standard property whose type matches it (a length via\n * `padding-left`, a number via `flex-grow`) on a hidden, off-layout element;\n * the browser evaluates it, and the resolved value is read back.\n */\ninterface SkyChartTokenProbe {\n /** Resolves a length expression to pixels, or `undefined` when invalid. */\n resolveLength(value: string): number | undefined;\n\n /** Resolves a numeric expression to a number, or `undefined` when invalid. */\n resolveNumber(value: string): number | undefined;\n\n /** Removes the probe element if it was created. */\n destroy(): void;\n}\n\n/**\n * Creates a {@link SkyChartTokenProbe} bound to `host`. The probe element is\n * created on first use — so resolving only fast-path values costs nothing —\n * and inherits `host`'s theme context.\n */\nfunction createTokenProbe(host: HTMLElement): SkyChartTokenProbe {\n let element: HTMLElement | undefined;\n\n function probeElement(): HTMLElement {\n if (!element) {\n element = document.createElement('span');\n element.style.position = 'absolute';\n element.style.width = '0';\n element.style.height = '0';\n element.style.overflow = 'hidden';\n element.style.visibility = 'hidden';\n host.appendChild(element);\n }\n\n return element;\n }\n\n // Assigns the raw value to a carrier property the browser evaluates, then\n // reads the resolved value back. An invalid value is rejected by the CSSOM,\n // leaving the carrier empty, which signals it could not be resolved.\n function resolveWith(\n carrier: 'paddingLeft' | 'flexGrow',\n value: string,\n ): number | undefined {\n const el = probeElement();\n\n el.style[carrier] = '';\n el.style[carrier] = value;\n\n return el.style[carrier] === ''\n ? undefined\n : Number.parseFloat(getComputedStyle(el)[carrier]);\n }\n\n return {\n resolveLength: (value): number | undefined =>\n resolveWith('paddingLeft', value),\n resolveNumber: (value): number | undefined =>\n resolveWith('flexGrow', value),\n destroy: (): void => element?.remove(),\n };\n}\n","import {\n afterRenderEffect,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n} from '@angular/core';\n\nimport { SkyChartTable } from '../chart-table/chart-table';\nimport {\n SkyChartAccessibleSummary,\n SkyChartTableService,\n} from '../chart-table/chart-table-service';\nimport {\n resolveChartThemeStyles,\n SkyChartThemeStyles,\n} from '../shared/chart-theme-styles';\n\n/**\n * Base class for chart plot components (for example, `sky-chart-bar`). Owns the\n * bridge that publishes each plot's tabular representation to the accessible\n * data table, so every plot type shares the same lifecycle. Subclasses\n * implement `getChartTable`, `getAccessibleSummary`, and their own rendering.\n *\n * Plots must be rendered inside `sky-chart`: the wrapper provides the data\n * table bridge and the default-theme styling the plot resolves its themed\n * values from.\n * @internal\n */\n@Directive()\nexport abstract class SkyChartPlot {\n readonly #elementRef = inject(ElementRef);\n\n readonly #tableSvc: SkyChartTableService;\n\n constructor() {\n const tableSvc = inject(SkyChartTableService, { optional: true });\n\n if (!tableSvc) {\n const tagName = (\n this.#elementRef.nativeElement as HTMLElement\n ).tagName.toLowerCase();\n\n throw new Error(\n `The <${tagName}> component must be rendered inside a <sky-chart> ` +\n 'component.',\n );\n }\n\n this.#tableSvc = tableSvc;\n\n inject(DestroyRef).onDestroy(() => {\n this.#tableSvc.table.set(undefined);\n this.#tableSvc.summary.set(undefined);\n });\n\n afterRenderEffect(() => {\n this.#tableSvc.table.set(this.getChartTable());\n this.#tableSvc.summary.set(this.getAccessibleSummary());\n });\n }\n\n /**\n * Builds the tabular representation of the plotted content for the accessible\n * data table, or `undefined` when the plot has no data to represent.\n */\n protected abstract getChartTable(): SkyChartTable | undefined;\n\n /**\n * Builds the localized, descriptive summary used as the chart figure's\n * accessible name, or `undefined` when the plot has no data to represent.\n */\n protected abstract getAccessibleSummary():\n | SkyChartAccessibleSummary\n | undefined;\n\n /**\n * Resolves the active theme's chart styling against this plot's element.\n * Chart.js renders to a canvas that cannot read CSS variables, so themed\n * tokens must be resolved to concrete values against the DOM.\n */\n protected getThemeStyles(): SkyChartThemeStyles {\n return resolveChartThemeStyles(\n this.#elementRef.nativeElement as HTMLElement,\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { type SkyChartBarSeriesValue } from './chart-bar-series-value';\n\n/**\n * Defines a single series of values to plot on a bar chart, aligned to the\n * category axis by index.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-bar-series',\n template: '',\n})\nexport class SkyChartBarSeries {\n /**\n * The text that identifies this series in the legend and tooltips.\n */\n public readonly labelText = input.required<string>();\n\n /**\n * The stack this series belongs to. When a bar chart's `seriesLayout`\n * is `stacked`, series that share the same `stackId` value accumulate into\n * a single bar per category, and series with different `stackId` values\n * are placed side by side. Omit to stack every series into one bar per\n * category. Has no effect when `seriesLayout` is `grouped`.\n */\n public readonly stackId = input<string>();\n\n /**\n * The values for this series, aligned to the category axis categories by\n * index. A number renders a standard bar measured from the value axis's\n * baseline, a `[start, end]` tuple renders a floating bar spanning the two\n * values, and a `null` value renders a gap in the chart and an empty cell\n * in the data table.\n */\n public readonly values = input.required<readonly SkyChartBarSeriesValue[]>();\n}\n","import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyLogService } from '@skyux/core';\nimport { SkyThemeService } from '@skyux/theme';\nimport { type ChartDataset } from 'chart.js';\nimport { EMPTY, map } from 'rxjs';\n\nimport { SkyChartAxisCategory } from '../chart-axis/chart-axis-category';\nimport { SkyChartAxisValue } from '../chart-axis/chart-axis-value';\nimport {\n buildCartesianScales,\n buildCartesianTable,\n buildValueTooltipLabel,\n CATEGORY_AXIS_ID,\n isValueRange,\n resolveCartesianData,\n VALUE_AXIS_ID,\n} from '../chart-js/cartesian-utils';\nimport { SkyChartJs, type SkyChartJsConfig } from '../chart-js/chart-js';\nimport { extendBaseChartJsConfig } from '../chart-js/chart-js-config-utils';\nimport { SkyChartPlot } from '../chart-plot/chart-plot';\nimport { SkyChartTable } from '../chart-table/chart-table';\nimport { SkyChartAccessibleSummary } from '../chart-table/chart-table-service';\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\nimport { SkyChartBarOrientation } from './chart-bar-orientation';\nimport { SkyChartBarSeries } from './chart-bar-series';\nimport { SkyChartBarSeriesLayout } from './chart-bar-series-layout';\n\n/**\n * Renders a bar chart from a category axis, a value axis, and one or more\n * series.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartJs],\n selector: 'sky-chart-bar',\n templateUrl: './chart-bar.html',\n})\nexport class SkyChartBar extends SkyChartPlot {\n readonly #themeSettings = toSignal(\n inject(SkyThemeService, { optional: true })?.settingsChange.pipe(\n map((change) => change.currentSettings),\n ) ?? EMPTY,\n { initialValue: undefined },\n );\n\n /**\n * The orientation of the bars.\n * @default 'vertical'\n */\n public readonly orientation = input<SkyChartBarOrientation>('vertical');\n\n /**\n * How the bars of multiple series are arranged within each category.\n * `grouped` places the series' bars side by side; `stacked` accumulates the\n * bars into a single bar per category. When `stacked`, assign each series a\n * `stackId` value to subdivide the bar into side-by-side stacks (grouped,\n * stacked bars). This has no visible effect when the chart has a single\n * series.\n * @default 'grouped'\n */\n public readonly seriesLayout = input<SkyChartBarSeriesLayout>('grouped');\n\n protected readonly categoryAxis = contentChild(SkyChartAxisCategory);\n protected readonly valueAxis = contentChild(SkyChartAxisValue);\n protected readonly series = contentChildren(SkyChartBarSeries);\n\n constructor() {\n super();\n\n const logger = inject(SkyLogService);\n\n // Values align to categories by index, so a length mismatch silently\n // misaligns or drops data. Warn about the one alignment mistake that is\n // mechanically detectable.\n afterRenderEffect(() => {\n const categoryCount = this.categoryAxis()?.categories().length;\n\n if (categoryCount === undefined) {\n return;\n }\n\n for (const chartSeries of this.series()) {\n const valueCount = chartSeries.values().length;\n\n if (valueCount !== categoryCount) {\n logger.warn(\n `The <sky-chart-bar-series> labeled \"${chartSeries.labelText()}\" ` +\n `has ${valueCount} values, but the category axis has ` +\n `${categoryCount} categories. Values align to categories by ` +\n 'index, so each series must provide one value per category.',\n );\n }\n }\n });\n }\n\n protected readonly chartJsConfig = computed(() => this.#getChartJsConfig());\n\n /**\n * The height to apply to the rendered chart. Chart.js runs with\n * `maintainAspectRatio: false`, so its container must be given an explicit\n * height. Vertical charts use the themed default; horizontal charts grow\n * with their content so every bar stays legible.\n */\n protected readonly chartHeight = computed(() => this.#getChartHeight());\n\n protected override getChartTable(): SkyChartTable | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n return buildCartesianTable(\n data.categoryAxis,\n data.series,\n data.valueAxis.formatValue(),\n );\n }\n\n protected override getAccessibleSummary():\n | SkyChartAccessibleSummary\n | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n return {\n resourceKey: 'skyux_charts.chart.bar.accessible_summary',\n args: [data.series.length, data.categoryAxis.categories().length],\n };\n }\n\n #getChartJsConfig(): SkyChartJsConfig<'bar'> | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n const { categoryAxis, valueAxis, series } = data;\n\n // Read the theme signal so the config rebuilds when the theme changes,\n // then resolve the themed CSS custom properties to concrete values.\n this.#themeSettings();\n\n const themeStyles = this.getThemeStyles();\n const categorical = themeStyles.series.categoricalPalette;\n\n const isHorizontal = this.orientation() === 'horizontal';\n const isStacked = this.seriesLayout() === 'stacked';\n const indexAxis = isHorizontal ? 'y' : 'x';\n const valueDirection = isHorizontal ? 'x' : 'y';\n const formatValue = valueAxis.formatValue();\n\n // Horizontal bars target an explicit thickness (see below), which the\n // container height is also derived from; resolve the spacing once so the\n // two always agree.\n const horizontalSpacing = isHorizontal\n ? this.#getHorizontalBarSpacing(themeStyles)\n : undefined;\n\n // Vertical bars fill their responsive width; the fill percentages are\n // tuned by category count (see below).\n const verticalSpacing = isHorizontal\n ? undefined\n : this.#getVerticalBarElementSpacing(categoryAxis.categories().length);\n\n const datasets = series.map((chartSeries, index): ChartDataset<'bar'> => {\n const dataset: ChartDataset<'bar'> = {\n label: chartSeries.labelText(),\n // Chart.js mutates the arrays it is given, so deep-copy the readonly\n // input, including floating [start, end] ranges.\n data: chartSeries\n .values()\n .map((value) => (isValueRange(value) ? [...value] : value)),\n backgroundColor: categorical[index % categorical.length],\n };\n\n if (isHorizontal) {\n // Size horizontal bars through the band fill fractions, capped at the\n // target thickness (see #getHorizontalBarSpacing). An explicit numeric\n // `barThickness` would not work here: Chart.js then ignores the fill\n // fractions and renders bars that sit flush against each other and\n // overlap adjacent categories when the band is smaller than budgeted.\n dataset.categoryPercentage = horizontalSpacing?.categoryPercentage;\n dataset.barPercentage = horizontalSpacing?.barPercentage;\n dataset.maxBarThickness = horizontalSpacing?.barThickness;\n } else {\n // Shape the whitespace around vertical bars and cap their width so\n // sparse charts do not render unusably wide bars.\n dataset.categoryPercentage = verticalSpacing?.categoryPercentage;\n dataset.barPercentage = verticalSpacing?.barPercentage;\n dataset.maxBarThickness = themeStyles.bar.vertical.maxBarThickness;\n }\n\n // Stack groups only apply to a stacked layout; on a grouped layout the\n // scales are not stacked, so a shared stack id would overlap bars instead\n // of accumulating them.\n const stackId = chartSeries.stackId();\n\n if (isStacked && stackId !== undefined) {\n dataset.stack = stackId;\n }\n\n if (isHorizontal) {\n dataset.xAxisID = VALUE_AXIS_ID;\n dataset.yAxisID = CATEGORY_AXIS_ID;\n } else {\n dataset.yAxisID = VALUE_AXIS_ID;\n dataset.xAxisID = CATEGORY_AXIS_ID;\n }\n\n return dataset;\n });\n\n return extendBaseChartJsConfig<'bar'>(themeStyles, {\n type: 'bar',\n data: {\n // Chart.js mutates the arrays it is given, so copy the readonly input.\n labels: [...categoryAxis.categories()],\n datasets,\n },\n options: {\n interaction: {\n // Index hits along the category axis's direction (see the category scale's\n // `axis` in buildCartesianScales); this is a cartesian direction, not a scale ID.\n axis: isHorizontal ? 'y' : 'x',\n },\n elements: {\n bar: {\n borderWidth: 1,\n borderColor: themeStyles.bar.borderColor,\n borderRadius: themeStyles.bar.borderRadius,\n },\n },\n indexAxis,\n scales: buildCartesianScales({\n categoryAxis,\n valueAxis,\n isHorizontal,\n isStacked,\n themeStyles,\n }),\n plugins: {\n legend: {\n // Show the legend only when there are multiple series to\n // distinguish; a single-series chart's legend is redundant.\n display: datasets.length > 1,\n },\n tooltip: {\n callbacks: {\n label: buildValueTooltipLabel<'bar'>(formatValue, valueDirection),\n },\n },\n },\n },\n });\n }\n\n /**\n * Resolves the height to apply to the chart container. A vertical chart uses\n * the themed default height. A horizontal chart grows with its content:\n * every category needs enough room for its bars, so the height is derived\n * from the bar count and clamped to the minimum so small charts stay legible.\n */\n #getChartHeight(): string {\n // Read the theme signal so the height recomputes when the theme changes.\n this.#themeSettings();\n\n const themeStyles = this.getThemeStyles();\n\n if (this.orientation() !== 'horizontal') {\n return themeStyles.height.default;\n }\n\n const { rowHeight, categoryCount } =\n this.#getHorizontalBarSpacing(themeStyles);\n const totalRowsHeight = categoryCount * rowHeight;\n\n const computedHeight =\n this.#computeChartOverhead(themeStyles) + totalRowsHeight;\n\n // Horizontal charts may grow without bound, but never shrink below the\n // themed minimum.\n const clampedHeight = Math.max(themeStyles.height.min, computedHeight);\n\n return `${clampedHeight}px`;\n }\n\n /**\n * Resolves the horizontal bar layout — the target per-bar thickness, the\n * fractions of each category band the bars fill, and the per-category row\n * height — shared by the container height and the datasets so the two always\n * agree.\n */\n #getHorizontalBarSpacing(themeStyles: SkyChartThemeStyles): {\n barThickness: number;\n categoryPercentage: number;\n barPercentage: number;\n rowHeight: number;\n categoryCount: number;\n } {\n const seriesCount = this.series().length;\n // Chart.js renders one row per category-axis label, so the row count must\n // come from the category axis — a sparse series with fewer values than\n // categories must not shrink the height. The axis is always present when\n // the chart (and therefore this height) renders, so the fallback is\n // defensive only.\n /* istanbul ignore next */\n const categoryCount = this.categoryAxis()?.categories().length ?? 0;\n\n // A stacked layout renders one bar per distinct stack group — series that\n // share a stack group (or all lack one) accumulate into a single bar — so\n // the number of bars per category is the count of distinct stacks, not one.\n const barsPerCategory =\n this.seriesLayout() === 'stacked'\n ? new Set(this.series().map((chartSeries) => chartSeries.stackId()))\n .size\n : seriesCount;\n const totalBars = categoryCount * barsPerCategory;\n\n const { barThickness, categoryGap } =\n this.#computeHorizontalBarElementSpacing(totalBars, themeStyles);\n\n // Bars that share a category are separated by a small gap so grouped bars\n // read as distinct; a category with a single bar needs none.\n const barGapPercentage = 0.25;\n const barGap = barsPerCategory > 1 ? barThickness * barGapPercentage : 0;\n\n // Each bar's slot is the bar plus its gap, and each category's row is its\n // slots plus the gap that separates it from the next category — the same\n // budget the container height is derived from.\n const barSlot = barThickness + barGap;\n const rowHeight = barSlot * barsPerCategory + categoryGap;\n\n // Chart.js divides the plotted area evenly into category bands, so at the\n // derived container height each band matches `rowHeight`; these fractions\n // size each bar at the target thickness with the budgeted gaps.\n const categoryPercentage = (barSlot * barsPerCategory) / rowHeight;\n const barPercentage = barThickness / barSlot;\n\n return {\n barThickness,\n categoryPercentage,\n barPercentage,\n rowHeight,\n categoryCount,\n };\n }\n\n /**\n * Derives the per-bar thickness and the gap between categories for a\n * horizontal chart. Charts with few bars use the full bar thickness and a\n * tight gap; as the bar count grows the bars taper toward the minimum\n * thickness while the gap widens so grouped bars stay visually separated.\n */\n #computeHorizontalBarElementSpacing(\n totalBars: number,\n themeStyles: SkyChartThemeStyles,\n ): { barThickness: number; categoryGap: number } {\n const { minBarThickness, maxBarThickness, minCategoryGap } =\n themeStyles.bar.horizontal;\n\n const taperingStart = 12;\n const taperingStop = 36;\n const lowCategoryGapPercentage = 0.375;\n const highCategoryGapPercentage = 0.75;\n\n if (totalBars < taperingStart) {\n // Few bars: use the full thickness and target a fraction of the bar\n // width for the gap. No minimum is applied because the bars are already\n // at their full thickness.\n return {\n barThickness: maxBarThickness,\n categoryGap: maxBarThickness * lowCategoryGapPercentage,\n };\n }\n\n // Many bars: taper the thickness toward the minimum and widen the gap so\n // grouped bars stay separated, but never below the minimum category gap.\n const taperRange = taperingStop - taperingStart;\n const taperFraction = Math.min(1, (totalBars - taperingStart) / taperRange);\n const thicknessRange = maxBarThickness - minBarThickness;\n const taperedThickness = Math.round(\n maxBarThickness - taperFraction * thicknessRange,\n );\n const barThickness = Math.max(minBarThickness, taperedThickness);\n\n return {\n barThickness,\n categoryGap: Math.max(\n minCategoryGap,\n barThickness * highCategoryGapPercentage,\n ),\n };\n }\n\n /**\n * Tunes the category and bar fill percentages for a vertical chart. Vertical\n * bars fill their responsive width up to `bar.vertical.maxBarThickness`, so\n * these percentages shape the surrounding whitespace: sparse charts keep the\n * bars near the base width with room around them, while dense charts widen\n * the fill so bars use the available width (approaching the minimum). Chart.js\n * has no minimum-thickness option, so the base and minimum widths are soft\n * targets rather than hard pixel constraints.\n */\n #getVerticalBarElementSpacing(categoryCount: number): {\n categoryPercentage: number;\n barPercentage: number;\n } {\n const barPercentage = 0.85;\n const categoryPercentage =\n categoryCount <= 3 ? 0.4 : categoryCount >= 12 ? 0.95 : 0.7;\n\n return { categoryPercentage, barPercentage };\n }\n\n /**\n * Estimates the fixed vertical space a horizontal chart needs outside its\n * plotted rows: the bottom value axis (its tick marks, a row of tick labels,\n * and its title) plus the legend row when multiple series are shown. Added\n * to the rows' height, this keeps the plotted area sized to its bars rather\n * than absorbing the chrome.\n */\n #computeChartOverhead(themeStyles: SkyChartThemeStyles): number {\n const { axis, font, text, tooltip } = themeStyles;\n const lineHeight = font.size * text.lineHeight;\n\n // Bottom value axis: tick marks, a row of tick labels, and the axis title.\n const valueAxisHeight =\n axis.tickLength + lineHeight + axis.titleGap + lineHeight;\n\n // The legend only renders with multiple series.\n const legendHeight =\n this.series().length > 1\n ? Math.max(tooltip.iconSize, lineHeight) + axis.titleGap\n : 0;\n\n return valueAxisHeight + legendHeight;\n }\n}\n","@if (chartJsConfig(); as config) {\n <sky-chart-js [config]=\"config\" [style.height]=\"chartHeight()\" />\n}\n","/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/shared/sky-charts' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n 'skyux_charts.chart.bar.accessible_summary': {\n message:\n \"Bar chart. Number of series: {0}. Number of categories: {1}. A data table is available from the chart's context menu.\",\n },\n 'skyux_charts.chart.controls.context_menu.accessible_name': {\n message: 'Context menu for {0}',\n },\n 'skyux_charts.chart.controls.context_menu.view_data_table': {\n message: 'View data table',\n },\n 'skyux_charts.data_table_modal.close_button': { message: 'Close' },\n 'skyux_charts.data_table_modal.table_region_label': {\n message: 'Data table for {0}',\n },\n },\n 'FR-CA': {\n 'skyux_charts.chart.bar.accessible_summary': {\n message:\n 'Graphique à barres. Nombre de séries : {0}. Nombre de catégories : {1}. Un tableau de données est disponible dans le menu du contexte du graphique.',\n },\n 'skyux_charts.chart.controls.context_menu.accessible_name': {\n message: 'Menu du contexte pour {0}',\n },\n 'skyux_charts.chart.controls.context_menu.view_data_table': {\n message: 'Visualiser la table de données',\n },\n 'skyux_charts.data_table_modal.close_button': { message: 'Fermer' },\n 'skyux_charts.data_table_modal.table_region_label': {\n message: 'Tableau de données pour {0}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyChartsResourcesModule {}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\n\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\nimport type { SkyChartTable } from './chart-table';\n\nexport abstract class SkyChartTableModalContext {\n public abstract readonly headingText: string;\n public abstract readonly table: SkyChartTable | undefined;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartsResourcesModule, SkyModalModule],\n selector: 'sky-chart-table-modal',\n styleUrl: './chart-table-modal.scss',\n templateUrl: './chart-table-modal.html',\n})\nexport class SkyChartTableModal {\n protected readonly context = inject(SkyChartTableModalContext);\n protected readonly modal = inject(SkyModalInstance);\n}\n","<sky-modal [headingText]=\"context.headingText\">\n <sky-modal-content>\n @if (context.table; as table) {\n <div\n class=\"sky-chart-data-table-wrapper\"\n role=\"region\"\n tabindex=\"0\"\n [attr.aria-label]=\"\n 'skyux_charts.data_table_modal.table_region_label'\n | skyLibResources: context.headingText\n \"\n >\n <table class=\"sky-chart-data-table\">\n <thead>\n <tr>\n <th scope=\"col\">\n {{ table.categoryLabel }}\n </th>\n @for (series of table.series; track $index) {\n <th scope=\"col\">\n {{ series.label }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (\n category of table.categories;\n track $index;\n let rowIndex = $index\n ) {\n <tr>\n <th scope=\"row\">\n {{ category }}\n </th>\n @for (series of table.series; track $index) {\n <td>\n {{ series.values[rowIndex] }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-link sky-chart-table-modal-close\"\n type=\"button\"\n (click)=\"modal.close()\"\n >\n {{ 'skyux_charts.data_table_modal.close_button' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n input,\n} from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\nimport { SkyDropdownModule } from '@skyux/popovers';\n\nimport {\n SkyChartTableModal,\n SkyChartTableModalContext,\n} from '../chart-table/chart-table-modal';\nimport { SkyChartTableService } from '../chart-table/chart-table-service';\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartsResourcesModule, SkyDropdownModule],\n selector: 'sky-chart-controls',\n templateUrl: './chart-controls.html',\n})\nexport class SkyChartControls {\n readonly #destroyRef = inject(DestroyRef);\n readonly #modalSvc = inject(SkyModalService);\n readonly #tableSvc = inject(SkyChartTableService);\n\n public readonly headingText = input.required<string>();\n\n /**\n * The plot's data table. The context menu's only action is viewing the\n * data table, so the menu renders only while a table is available — a\n * plot that has not published one (no data yet, or still loading for the\n * first time) has no actions to offer.\n */\n protected readonly table = this.#tableSvc.table;\n\n protected openDataTableModal(): void {\n const instance = this.#modalSvc.open(SkyChartTableModal, {\n size: 'large',\n providers: [\n {\n provide: SkyChartTableModalContext,\n useValue: {\n headingText: this.headingText(),\n table: this.#tableSvc.table(),\n },\n },\n ],\n });\n\n this.#destroyRef.onDestroy(() => instance.close());\n }\n}\n","@if (table()) {\n <sky-dropdown\n buttonType=\"context-menu\"\n [label]=\"\n 'skyux_charts.chart.controls.context_menu.accessible_name'\n | skyLibResources: headingText()\n \"\n >\n <sky-dropdown-menu>\n <sky-dropdown-item>\n <button type=\"button\" (click)=\"openDataTableModal()\">\n {{\n 'skyux_charts.chart.controls.context_menu.view_data_table'\n | skyLibResources\n }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n type TemplateRef,\n} from '@angular/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\nimport { type SkyChartHeadingLevel } from './chart-heading-level';\nimport { type SkyChartHeadingStyle } from './chart-heading-style';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyHelpInlineModule],\n selector: 'sky-chart-heading',\n styleUrl: './chart-heading.scss',\n templateUrl: './chart-heading.html',\n})\nexport class SkyChartHeading {\n public readonly headingLevel = input.required<SkyChartHeadingLevel>();\n public readonly headingStyle = input.required<SkyChartHeadingStyle>();\n public readonly headingText = input.required<string>();\n public readonly helpKey = input<string>();\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\n public readonly helpPopoverTitle = input<string>();\n\n protected readonly headingClass = computed(() => {\n return `sky-font-heading-${this.headingStyle()}`;\n });\n}\n","@switch (headingLevel()) {\n @case (2) {\n <h2 [class]=\"headingClass()\">{{ headingText() }}</h2>\n }\n @case (3) {\n <h3 [class]=\"headingClass()\">{{ headingText() }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass()\">{{ headingText() }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass()\">{{ headingText() }}</h5>\n }\n}\n@if (helpPopoverContent() || helpKey()) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey()\"\n [labelText]=\"headingText()\"\n [popoverContent]=\"helpPopoverContent()\"\n [popoverTitle]=\"helpPopoverTitle()\"\n />\n </span>\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * The allowed heading levels for charts, corresponding to the semantic heading levels in HTML.\n *\n * @preview\n */\nexport type SkyChartHeadingLevel = 2 | 3 | 4 | 5;\n\nexport const DEFAULT_HEADING_LEVEL: SkyChartHeadingLevel = 3 as const;\n\nexport function headingLevelInputTransformer(\n value: unknown,\n): SkyChartHeadingLevel {\n const numberValue = numberAttribute(value, DEFAULT_HEADING_LEVEL);\n\n if (isHeadingLevel(numberValue)) {\n return numberValue;\n }\n\n return DEFAULT_HEADING_LEVEL;\n}\n\nfunction isHeadingLevel(value: unknown): value is SkyChartHeadingLevel {\n return value === 2 || value === 3 || value === 4 || value === 5;\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * The allowed heading styles for charts, corresponding to the font styles defined in the SKY UX design system.\n *\n * @preview\n */\nexport type SkyChartHeadingStyle = 2 | 3 | 4 | 5;\n\nexport const DEFAULT_HEADING_STYLE: SkyChartHeadingStyle = 3 as const;\n\nexport function headingStyleInputTransformer(\n value: unknown,\n): SkyChartHeadingStyle {\n const numberValue = numberAttribute(value, DEFAULT_HEADING_STYLE);\n\n if (isHeadingStyle(numberValue)) {\n return numberValue;\n }\n\n return DEFAULT_HEADING_STYLE;\n}\n\nfunction isHeadingStyle(value: unknown): value is SkyChartHeadingStyle {\n return value === 2 || value === 3 || value === 4 || value === 5;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-subheading',\n styleUrl: './chart-subheading.scss',\n template: `{{ subheadingText() }}`,\n})\nexport class SkyChartSubheading {\n public readonly subheadingText = input.required<string>();\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n type TemplateRef,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport { of, switchMap } from 'rxjs';\n\nimport { SkyChartTableService } from '../chart-table/chart-table-service';\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\nimport { SkyChartControls } from './chart-controls';\nimport { SkyChartHeading } from './chart-heading';\nimport {\n DEFAULT_HEADING_LEVEL,\n headingLevelInputTransformer,\n type SkyChartHeadingLevel,\n} from './chart-heading-level';\nimport {\n DEFAULT_HEADING_STYLE,\n headingStyleInputTransformer,\n type SkyChartHeadingStyle,\n} from './chart-heading-style';\nimport { SkyChartSubheading } from './chart-subheading';\n\n/**\n * Provides a consistent heading, subheading, and layout wrapper for a chart.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n SkyChartControls,\n SkyChartHeading,\n SkyChartSubheading,\n SkyChartsResourcesModule,\n SkyWaitModule,\n ],\n providers: [SkyChartTableService],\n selector: 'sky-chart',\n styleUrl: './chart.scss',\n templateUrl: './chart.html',\n})\nexport class SkyChart {\n /**\n * Whether to hide the chart's heading.\n */\n public readonly headingHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The semantic heading level in the document structure.\n * @default 3\n */\n public readonly headingLevel = input<SkyChartHeadingLevel, unknown>(\n DEFAULT_HEADING_LEVEL,\n {\n transform: headingLevelInputTransformer,\n },\n );\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 3\n */\n public readonly headingStyle = input<SkyChartHeadingStyle, unknown>(\n DEFAULT_HEADING_STYLE,\n {\n transform: headingStyleInputTransformer,\n },\n );\n\n /**\n * The text to display as the chart's heading.\n */\n public readonly headingText = input.required<string>();\n\n /**\n * A help key that identifies the global help content to display. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the chart heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application.\n */\n public readonly helpKey = input<string>();\n\n /**\n * The content of the help popover. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the chart heading. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title.\n */\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is also specified.\n */\n public readonly helpPopoverTitle = input<string>();\n\n /**\n * Whether the chart's data is being loaded. When `true`, a wait overlay\n * covers the chart's content area, which reserves the default chart height\n * while no plot is rendered. The heading and help button stay interactive.\n * @default false\n */\n public readonly loading = input(false, { transform: booleanAttribute });\n\n /**\n * The text to display as the chart's subheading.\n */\n public readonly subheadingText = input<string>();\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #tableSvc = inject(SkyChartTableService);\n\n // Resolve the plot's descriptive summary into localized text. Each plot type\n // publishes its own resource key and arguments, so the wording can describe\n // that type's shape.\n readonly #summaryText = toSignal(\n toObservable(this.#tableSvc.summary).pipe(\n switchMap((summary) =>\n summary\n ? this.#resourcesSvc.getString(summary.resourceKey, ...summary.args)\n : of(undefined),\n ),\n ),\n { initialValue: undefined },\n );\n\n protected readonly figureLabel = computed(() => {\n const parts: string[] = [];\n\n // When the heading is hidden, name the figure with the title (and\n // subheading) so it is not lost. When the heading is visible, it already\n // provides that context, so the title is omitted here to avoid announcing\n // it twice.\n if (this.headingHidden()) {\n const subheadingText = this.subheadingText();\n\n parts.push(\n subheadingText\n ? `${this.headingText()}, ${subheadingText}`\n : this.headingText(),\n );\n }\n\n // The descriptive summary (chart type, shape, and that a data table is\n // available) adds information rather than echoing the title, so it is safe\n // to include whether or not the heading is visible.\n const summaryText = this.#summaryText();\n\n if (summaryText) {\n parts.push(summaryText);\n }\n\n return parts.length > 0 ? parts.join('. ') : null;\n });\n}\n","<div class=\"sky-chart-header\">\n <div>\n @if (!headingHidden()) {\n <sky-chart-heading\n [headingLevel]=\"headingLevel()\"\n [headingStyle]=\"headingStyle()\"\n [headingText]=\"headingText()\"\n [helpKey]=\"helpKey()\"\n [helpPopoverContent]=\"helpPopoverContent()\"\n [helpPopoverTitle]=\"helpPopoverTitle()\"\n />\n @if (subheadingText(); as subheadingText) {\n <sky-chart-subheading [subheadingText]=\"subheadingText\" />\n }\n }\n </div>\n @if (!loading()) {\n <sky-chart-controls [headingText]=\"headingText()\" />\n }\n</div>\n<figure\n class=\"sky-chart-content\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-label]=\"figureLabel()\"\n [attr.role]=\"figureLabel() ? 'img' : null\"\n [class.sky-chart-content-loading]=\"loading()\"\n>\n <sky-wait [isWaiting]=\"loading()\" />\n <ng-content />\n</figure>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","i1"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-charts.mjs","sources":["../../../../../libs/components/charts/src/lib/chart-axis/chart-axis-category.ts","../../../../../libs/components/charts/src/lib/shared/value-formatter.ts","../../../../../libs/components/charts/src/lib/chart-axis/optional-number-attribute.ts","../../../../../libs/components/charts/src/lib/chart-axis/chart-axis-value.ts","../../../../../libs/components/charts/src/lib/chart-js/cartesian-utils.ts","../../../../../libs/components/charts/src/lib/chart-js/chart-js.ts","../../../../../libs/components/charts/src/lib/chart-js/chart-js-config-utils.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-service.ts","../../../../../libs/components/charts/src/lib/shared/chart-theme-styles.ts","../../../../../libs/components/charts/src/lib/chart-plot/chart-plot.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar-series.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar.ts","../../../../../libs/components/charts/src/lib/chart-bar/chart-bar.html","../../../../../libs/components/charts/src/lib/shared/sky-charts-resources.module.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-modal.ts","../../../../../libs/components/charts/src/lib/chart-table/chart-table-modal.html","../../../../../libs/components/charts/src/lib/chart/chart-controls.ts","../../../../../libs/components/charts/src/lib/chart/chart-controls.html","../../../../../libs/components/charts/src/lib/chart/chart-heading.ts","../../../../../libs/components/charts/src/lib/chart/chart-heading.html","../../../../../libs/components/charts/src/lib/chart/chart-heading-level.ts","../../../../../libs/components/charts/src/lib/chart/chart-heading-style.ts","../../../../../libs/components/charts/src/lib/chart/chart-subheading.ts","../../../../../libs/components/charts/src/lib/chart/chart.ts","../../../../../libs/components/charts/src/lib/chart/chart.html","../../../../../libs/components/charts/src/skyux-charts.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n} from '@angular/core';\n\n/**\n * Defines the category axis of a chart. Its categories are shared by every\n * series plotted against it, and each series' values align to them by index.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-axis-category',\n template: '',\n})\nexport class SkyChartAxisCategory {\n /**\n * The categories shared by every series plotted against this axis. Each\n * series' values are aligned to these categories by index.\n */\n public readonly categories = input.required<readonly (string | number)[]>();\n\n /**\n * Whether to hide the axis label.\n */\n public readonly labelHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The text of the axis label.\n */\n public readonly labelText = input.required<string>();\n}\n","import { SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';\n\nimport { SkyChartValueFormat } from './value-format';\n\n/**\n * Options for creating a chart value formatter.\n * @internal\n */\nexport interface SkyChartValueFormatterOptions {\n /**\n * How to format the value.\n */\n format: SkyChartValueFormat;\n\n /**\n * The ISO 4217 currency code used when `format` is `currency`. Defaults to\n * `USD`, matching `SkyI18nCurrencyFormatService`.\n */\n currencyCode: string | undefined;\n\n /**\n * The number of decimal places to display. When unset, the format's\n * locale-aware default is used.\n */\n digits: number | undefined;\n\n /**\n * The locale used to format the value.\n */\n locale: string;\n}\n\n/**\n * Creates a function that formats a numeric value according to the given\n * `format`, `currencyCode`, `digits`, and `locale`. Shared by every chart type\n * so value formatting is not tied to an axis.\n * @internal\n */\nexport function createSkyChartValueFormatter(\n options: SkyChartValueFormatterOptions,\n): (value: number) => string {\n const { format, currencyCode = 'USD', digits, locale } = options;\n\n let style: SkyIntlNumberFormatStyle;\n\n switch (format) {\n case 'currency':\n style = SkyIntlNumberFormatStyle.Currency;\n break;\n\n case 'percent':\n style = SkyIntlNumberFormatStyle.Percent;\n break;\n\n default:\n style = SkyIntlNumberFormatStyle.Decimal;\n break;\n }\n\n return (value: number): string =>\n SkyIntlNumberFormatter.format(value, locale, style, {\n currency: format === 'currency' ? currencyCode : undefined,\n currencyDisplay: 'symbol',\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * Coerces an attribute to a number, treating unset and invalid values as\n * `undefined`.\n */\nexport function optionalNumberAttribute(value: unknown): number | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n const num = numberAttribute(value);\n\n return Number.isNaN(num) ? undefined : num;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyAppLocaleProvider } from '@skyux/i18n';\n\nimport { map } from 'rxjs/operators';\n\nimport { SkyChartValueFormat } from '../shared/value-format';\nimport { createSkyChartValueFormatter } from '../shared/value-formatter';\nimport { SkyChartValueScaleType } from '../shared/value-scale-type';\nimport { optionalNumberAttribute } from './optional-number-attribute';\n\n/**\n * Defines the value axis of a chart, which scales the plotted series and\n * formats their values in axis labels, tooltips, and the data table.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-axis-value',\n template: '',\n})\nexport class SkyChartAxisValue {\n readonly #localeProvider = inject(SkyAppLocaleProvider);\n\n readonly #locale = toSignal(\n this.#localeProvider.getLocaleInfo().pipe(map((info) => info.locale)),\n { initialValue: this.#localeProvider.defaultLocale },\n );\n\n /**\n * The ISO 4217 currency code used when `format` is `currency`. When unset,\n * currency values format as `USD`.\n */\n public readonly currencyCode = input<string>();\n\n /**\n * The number of decimal places to display. When unset, the format's\n * locale-aware default is used (for example, two places for most\n * currencies).\n */\n public readonly digits = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * How to format the axis values in axis labels, tooltips, and the data table.\n * The `percent` format expects fractional values, so `0.25` displays as\n * `25%`.\n * @default 'number'\n */\n public readonly format = input<SkyChartValueFormat>('number');\n\n /**\n * Whether to hide the axis label.\n */\n public readonly labelHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The text of the axis label.\n */\n public readonly labelText = input.required<string>();\n\n /**\n * The highest value to display on the axis. When unset, the axis scales to\n * fit the plotted values.\n */\n public readonly max = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * The lowest value to display on the axis. When unset, the axis scales to\n * fit the plotted values.\n */\n public readonly min = input(undefined, {\n transform: optionalNumberAttribute,\n });\n\n /**\n * The scale type for the value axis.\n * @default 'linear'\n */\n public readonly scaleType = input<SkyChartValueScaleType>('linear');\n\n /**\n * Formats a numeric value according to this axis's `format`, `currencyCode`,\n * and the current locale.\n * @internal\n */\n public readonly formatValue = computed<(value: number) => string>(() =>\n createSkyChartValueFormatter({\n format: this.format(),\n currencyCode: this.currencyCode(),\n digits: this.digits(),\n locale: this.#locale(),\n }),\n );\n}\n","import {\n type ChartConfiguration as ChartJsConfig,\n type TooltipItem as ChartJsTooltipItem,\n} from 'chart.js';\n\nimport { SkyChartAxisCategory } from '../chart-axis/chart-axis-category';\nimport { SkyChartAxisValue } from '../chart-axis/chart-axis-value';\nimport { SkyChartBarSeries } from '../chart-bar/chart-bar-series';\nimport { type SkyChartBarSeriesValue } from '../chart-bar/chart-bar-series-value';\nimport type { SkyChartTable } from '../chart-table/chart-table';\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\n\n/**\n * The Chart.js chart types that plot a category axis against one or more value\n * axes and share the helpers in this module.\n */\ntype CartesianChartType = 'bar' | 'line';\n\n/**\n * The scale key shared by every series' category axis. Cartesian charts always\n * have exactly one category axis, so a single, stable key is sufficient.\n */\nexport const CATEGORY_AXIS_ID = 'category';\n\n/**\n * The scale key of the value axis. Cartesian charts have exactly one value\n * axis, so a single, stable key is sufficient.\n */\nexport const VALUE_AXIS_ID = 'value';\n\n/**\n * The `scales` shape of a cartesian chart. Bar and line charts register the\n * same cartesian scale types, so the shape is identical across them.\n */\ntype ChartJsCartesianScales = NonNullable<\n NonNullable<ChartJsConfig<'bar'>['options']>['scales']\n>;\n\n/**\n * The themed visual styling shared by every cartesian scale: grid line, tick,\n * border, and text colors, the tick length, and the tick/title fonts. Category\n * and value scales spread this and add their own structural options (type,\n * position, title text, tick callback, and whether grid lines fill the chart\n * area).\n */\ninterface ChartJsThemedScaleStyle {\n grid: {\n color: string;\n tickColor: string;\n tickLength: number | undefined;\n };\n border: { color: string };\n ticks: {\n color: string;\n font: {\n size: number | undefined;\n family: string;\n weight: number | undefined;\n };\n };\n title: {\n color: string;\n font: { size: number | undefined; family: string };\n padding: { top: number | undefined; bottom: number | undefined };\n };\n}\n\n/**\n * The subset of a cartesian tooltip context the value `label` callback needs.\n * Chart.js types `parsed` and `dataset` as `unknown`/`UnionToIntersection`\n * under a bare generic chart type, so the context is narrowed to this shape.\n */\ninterface CartesianTooltipContext {\n parsed: Record<'x' | 'y', number>;\n dataset: { label?: string };\n raw: unknown;\n}\n\n/**\n * Whether a series value is a floating `[start, end]` range rather than a\n * single number. `Array.isArray` alone does not narrow readonly tuples, so\n * the check is wrapped in an explicit type predicate.\n */\nexport function isValueRange(\n value: unknown,\n): value is readonly [number, number] {\n return Array.isArray(value);\n}\n\n/**\n * The axes and series a chart needs to render, present only when a category\n * axis, a value axis, and at least one series are all provided.\n */\nexport interface SkyChartCartesianData {\n categoryAxis: SkyChartAxisCategory;\n valueAxis: SkyChartAxisValue;\n series: readonly SkyChartBarSeries[];\n}\n\n/**\n * Resolves the axes and series into the data a chart needs to render, or\n * `undefined` when a required axis or series is missing.\n */\nexport function resolveCartesianData(\n categoryAxis: SkyChartAxisCategory | undefined,\n valueAxis: SkyChartAxisValue | undefined,\n series: readonly SkyChartBarSeries[],\n): SkyChartCartesianData | undefined {\n if (\n categoryAxis === undefined ||\n valueAxis === undefined ||\n series.length === 0\n ) {\n return undefined;\n }\n\n return { categoryAxis, valueAxis, series };\n}\n\n/**\n * Builds the tabular representation of a cartesian chart for the accessible\n * data table, formatting each series' values with the value axis's format.\n * Floating `[start, end]` ranges render as \"start – end\", and null values\n * render as empty cells, mirroring the gaps in the plot.\n */\nexport function buildCartesianTable(\n categoryAxis: SkyChartAxisCategory,\n series: readonly SkyChartBarSeries[],\n formatValue: (value: number) => string,\n): SkyChartTable {\n return {\n categoryLabel: categoryAxis.labelText(),\n categories: categoryAxis.categories(),\n series: series.map((chartSeries) => ({\n label: chartSeries.labelText(),\n values: chartSeries\n .values()\n .map((value) => formatCartesianValue(value, formatValue)),\n })),\n };\n}\n\n/**\n * Formats a single plotted value: numbers use the value axis's format, a\n * floating `[start, end]` range formats as \"start – end\", and `null` (a gap)\n * formats as an empty string.\n */\nfunction formatCartesianValue(\n value: SkyChartBarSeriesValue,\n formatValue: (value: number) => string,\n): string {\n if (value === null) {\n return '';\n }\n\n if (isValueRange(value)) {\n return `${formatValue(value[0])} – ${formatValue(value[1])}`;\n }\n\n return formatValue(value);\n}\n\n/**\n * Builds the themed styling shared by every cartesian scale from the resolved\n * theme styles. Building it once keeps every axis visually consistent.\n */\nfunction buildThemedScaleStyle(\n themeStyles: SkyChartThemeStyles,\n): ChartJsThemedScaleStyle {\n const { font, text, axis } = themeStyles;\n\n return {\n grid: {\n color: axis.gridlineColor,\n tickColor: axis.gridlineColor,\n tickLength: axis.tickLength,\n },\n border: {\n color: axis.lineColor,\n },\n ticks: {\n color: text.color,\n font: {\n size: font.size,\n family: font.family,\n weight: font.weight,\n },\n },\n title: {\n color: text.deemphasizedColor,\n font: {\n size: font.size,\n family: font.family,\n },\n padding: {\n top: axis.titleGap,\n bottom: axis.titleGap,\n },\n },\n };\n}\n\n/**\n * Restricts a logarithmic value axis's ticks to powers of ten. Chart.js's\n * logarithmic tick generator inserts intermediate ticks within each decade,\n * whose gridlines render at visually uneven intervals; decade-only gridlines\n * read evenly. When the generated ticks span fewer than two decades, they are\n * kept as-is so a narrow range is not left nearly unlabeled.\n */\nfunction keepDecadeLogTicks(axis: { ticks: { value: number }[] }): void {\n const decadeTicks = axis.ticks.filter((tick) => {\n const magnitude = Math.log10(tick.value);\n\n return Math.abs(magnitude - Math.round(magnitude)) < 1e-9;\n });\n\n if (decadeTicks.length >= 2) {\n axis.ticks = decadeTicks;\n }\n}\n\n/**\n * Builds the category and value axis scales for a cartesian chart. The category\n * axis draws no grid lines across the chart area, and the value axis draws them\n * to aid value comparison. When `stacked` is set, both the category and value\n * scales stack so that series accumulate into a single bar per category.\n */\nexport function buildCartesianScales(options: {\n categoryAxis: SkyChartAxisCategory;\n valueAxis: SkyChartAxisValue;\n isHorizontal: boolean;\n isStacked?: boolean;\n themeStyles: SkyChartThemeStyles;\n}): ChartJsCartesianScales {\n const {\n categoryAxis,\n valueAxis,\n isHorizontal,\n isStacked = false,\n themeStyles,\n } = options;\n\n const indexAxis = isHorizontal ? 'y' : 'x';\n const valueDirection = isHorizontal ? 'x' : 'y';\n\n const base = buildThemedScaleStyle(themeStyles);\n\n const formatValue = valueAxis.formatValue();\n const scaleType = valueAxis.scaleType();\n\n return {\n [CATEGORY_AXIS_ID]: {\n type: 'category',\n axis: indexAxis,\n position: isHorizontal ? 'left' : 'bottom',\n stacked: isStacked,\n grid: {\n display: true,\n drawTicks: true,\n // The category axis marks discrete groups, so grid lines running\n // between the bars add clutter without aiding value comparison.\n drawOnChartArea: false,\n ...base.grid,\n },\n border: {\n display: true,\n ...base.border,\n },\n ticks: {\n ...base.ticks,\n // A horizontal chart's height grows with its category count, so every\n // label is guaranteed room and none may be dropped. A vertical chart's\n // width is fixed, so its labels must still be skipped when they crowd.\n autoSkip: !isHorizontal,\n },\n title: {\n display: !categoryAxis.labelHidden(),\n text: categoryAxis.labelText(),\n ...base.title,\n },\n },\n [VALUE_AXIS_ID]: {\n type: scaleType,\n axis: valueDirection,\n position: isHorizontal ? 'bottom' : 'left',\n stacked: isStacked,\n min: valueAxis.min(),\n max: valueAxis.max(),\n ...(scaleType === 'logarithmic' && {\n afterBuildTicks: keepDecadeLogTicks,\n }),\n grid: {\n ...base.grid,\n drawOnChartArea: true,\n },\n border: {\n ...base.border,\n },\n ticks: {\n ...base.ticks,\n padding: 0,\n callback: (tickValue: string | number): string =>\n formatValue(Number(tickValue)),\n },\n title: {\n display: !valueAxis.labelHidden(),\n text: valueAxis.labelText(),\n ...base.title,\n },\n },\n };\n}\n\n/**\n * Builds a tooltip `label` callback that formats each point's value using the\n * value axis's format.\n */\nexport function buildValueTooltipLabel<T extends CartesianChartType>(\n formatValue: (value: number) => string,\n valueDirection: 'x' | 'y',\n): (context: ChartJsTooltipItem<T>) => string {\n return (context: ChartJsTooltipItem<T>): string => {\n const item = context as unknown as CartesianTooltipContext;\n\n // A floating bar carries its [start, end] range in the raw data element;\n // `parsed` holds only the end value.\n const formatted = isValueRange(item.raw)\n ? formatCartesianValue(item.raw, formatValue)\n : formatValue(item.parsed[valueDirection] ?? 0);\n\n const label = item.dataset.label;\n\n return label ? `${label}: ${formatted}` : formatted;\n };\n}\n","import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport {\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n type ChartConfiguration,\n type ChartType,\n Legend,\n LinearScale,\n LogarithmicScale,\n Tooltip,\n} from 'chart.js';\n\nChart.register(\n BarController,\n BarElement,\n CategoryScale,\n LinearScale,\n LogarithmicScale,\n Legend,\n Tooltip,\n);\n\n/**\n * A Chart.js configuration with a required `options` object. Plot components\n * always build a complete `options`, so requiring it here keeps the render\n * loop free of undefined checks.\n * @internal\n */\nexport type SkyChartJsConfig<TType extends ChartType = ChartType> =\n ChartConfiguration<TType> & {\n options: NonNullable<ChartConfiguration<TType>['options']>;\n };\n\n/**\n * Renders a Chart.js chart onto a canvas and manages its lifecycle (create,\n * update, and destroy) from a reactive configuration. Plot components such as\n * `sky-chart-bar` build the configuration and delegate rendering here.\n * @internal\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-js',\n // Chart.js detects size changes from the canvas's parent, not the canvas\n // itself, so the host must be a dedicated, relatively-positioned container\n // for the canvas. Without this, the chart fails to resize responsively and\n // can render blurry or continually shrink.\n // https://www.chartjs.org/docs/latest/configuration/responsive.html#important-note\n styles: `\n :host {\n display: block;\n position: relative;\n }\n `,\n template: `<canvas #chartRef aria-hidden=\"true\"></canvas>`,\n})\nexport class SkyChartJs<TType extends ChartType = ChartType> {\n /**\n * The Chart.js configuration to render.\n */\n public readonly config = input.required<SkyChartJsConfig<TType>>();\n\n protected readonly chartRef = viewChild.required('chartRef', {\n read: ElementRef,\n });\n\n #chart: Chart<TType> | undefined;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.#chart?.destroy();\n this.#chart = undefined;\n });\n\n afterRenderEffect(() => {\n const config = this.config();\n\n if (this.#chart) {\n this.#chart.data = config.data;\n this.#chart.options = config.options;\n this.#chart.update();\n } else {\n this.#chart = new Chart<TType>(this.chartRef().nativeElement, config);\n }\n });\n }\n}\n","import { type ChartOptions, type ChartType } from 'chart.js';\n\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\nimport { type SkyChartJsConfig } from './chart-js';\n\n/**\n * Builds the Chart.js `options` shared by every SKY chart type: responsiveness,\n * layout, interaction, hover, animation, and the themed legend and tooltip.\n */\nfunction buildBaseChartJsOptions(\n themeStyles: SkyChartThemeStyles,\n): ChartOptions {\n const { font, text, tooltip } = themeStyles;\n\n const bodyFont = {\n family: font.family,\n size: font.size,\n weight: font.weight,\n lineHeight: text.lineHeight,\n };\n\n const options: ChartOptions = {\n // Responsiveness: fill the container and re-layout on resize.\n responsive: true,\n maintainAspectRatio: false,\n layout: { padding: 0 },\n\n // Interaction: hovering and tooltips target the nearest point precisely.\n interaction: { mode: 'nearest', intersect: true },\n hover: { mode: 'nearest', intersect: true },\n animation: { duration: 400, easing: 'easeInOutQuart' },\n\n plugins: {\n legend: {\n position: 'bottom',\n labels: {\n usePointStyle: true,\n pointStyle: 'circle',\n color: text.color,\n font: bodyFont,\n },\n },\n tooltip: {\n enabled: true,\n position: 'average',\n displayColors: true,\n usePointStyle: true,\n\n // Interaction\n mode: 'index',\n intersect: false,\n\n // Typography\n titleColor: text.color,\n titleFont: {\n ...bodyFont,\n weight: font.emphasizedWeight,\n },\n bodyColor: text.color,\n bodyFont,\n footerColor: text.color,\n footerFont: bodyFont,\n\n // Container\n padding: { ...tooltip.inset },\n cornerRadius: tooltip.cornerRadius,\n borderWidth: tooltip.borderWidth,\n caretSize: 8,\n caretPadding: 4,\n\n // Color-swatch icon\n boxHeight: tooltip.iconSize,\n boxWidth: tooltip.iconSize,\n boxPadding: tooltip.iconGap,\n multiKeyBackground: 'transparent',\n\n // Text spacing.\n titleMarginBottom: tooltip.titleGap,\n bodySpacing: tooltip.bodyGap,\n footerMarginTop: tooltip.titleGap,\n\n // Colors.\n backgroundColor: tooltip.backgroundColor,\n borderColor: tooltip.borderColor,\n },\n },\n };\n\n return options;\n}\n\n/**\n * Extends the shared, themed base options with a chart-type-specific configuration.\n * @internal\n */\nexport function extendBaseChartJsConfig<TType extends ChartType = ChartType>(\n themeStyles: SkyChartThemeStyles,\n overrides: SkyChartJsConfig<TType>,\n): SkyChartJsConfig<TType> {\n const base = buildBaseChartJsOptions(themeStyles);\n\n const options: ChartOptions = {\n ...base,\n ...overrides.options,\n plugins: {\n ...base.plugins,\n ...overrides.options.plugins,\n legend: {\n ...base.plugins?.legend,\n ...overrides.options.plugins?.legend,\n },\n tooltip: {\n ...base.plugins?.tooltip,\n ...overrides.options.plugins?.tooltip,\n },\n },\n };\n\n return {\n ...overrides,\n options,\n } as SkyChartJsConfig<TType>;\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport { SkyChartTable } from './chart-table';\n\n/**\n * A localized, descriptive summary of a chart's plotted content, used as the\n * accessible name of the chart figure. Each plot type supplies its own resource\n * key and arguments so the wording can describe that type's shape (for example,\n * a bar chart's series and categories).\n * @internal\n */\nexport interface SkyChartAccessibleSummary {\n /**\n * The resource key of the localized summary sentence.\n */\n resourceKey: string;\n\n /**\n * The positional arguments for the localized summary sentence.\n */\n args: (string | number)[];\n}\n\n/**\n * Bridges a chart's tabular representation from the plotted chart component to\n * the data table modal. Provided at the `sky-chart` level so each chart has its\n * own instance.\n * @internal\n */\n@Injectable()\nexport class SkyChartTableService {\n /**\n * The current tabular representation of the chart, or `undefined` when the\n * chart has no data to represent.\n */\n public readonly table = signal<SkyChartTable | undefined>(undefined);\n\n /**\n * The current accessible summary of the chart, or `undefined` when the chart\n * has no data to represent.\n */\n public readonly summary = signal<SkyChartAccessibleSummary | undefined>(\n undefined,\n );\n}\n","/**\n * The resolved, themed styling for a chart, grouped by feature. Chart.js\n * renders to a canvas that cannot read CSS custom properties, so every SKY\n * theme token the library depends on is resolved here — and only here — to a\n * concrete value. This keeps the full set of tokens auditable in one place.\n *\n * When the SKY theme styles are not loaded, strings resolve to empty strings —\n * which Chart.js treats as unset, rendering with its own defaults — and numbers\n * to `NaN`. Every value otherwise has a default defined in the\n * `sky-default-overrides` mixin in `chart.scss`, which applies in every\n * non-modern context; the modern theme supplies the `--sky-*` tokens directly.\n * @internal\n */\nexport interface SkyChartThemeStyles {\n font: {\n family: string;\n size: number;\n weight: number;\n emphasizedWeight: number;\n };\n text: {\n color: string;\n deemphasizedColor: string;\n lineHeight: number;\n };\n height: {\n /** The minimum chart height, in pixels. */\n min: number;\n /** The maximum chart height, in pixels. */\n max: number;\n /**\n * The default chart height as a CSS `clamp()` expression, used by\n * orientations whose height is not computed from their content.\n */\n default: string;\n };\n axis: {\n lineColor: string;\n gridlineColor: string;\n tickLength: number;\n /**\n * The vertical gap between an axis title and its ticks.\n */\n titleGap: number;\n };\n series: {\n categoricalPalette: string[];\n };\n /**\n * The styling of the tooltip container and its contents.\n */\n tooltip: {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n cornerRadius: number;\n inset: {\n top: number;\n right: number;\n bottom: number;\n left: number;\n };\n /**\n * The size of the color-swatch icon beside each tooltip line.\n */\n iconSize: number;\n /**\n * The gap between the color-swatch icon and its text.\n */\n iconGap: number;\n /**\n * The vertical gap between the tooltip title or footer and its body.\n */\n titleGap: number;\n /**\n * The vertical gap between tooltip body lines.\n */\n bodyGap: number;\n };\n bar: {\n borderColor: string;\n borderRadius: number;\n /** Bar-layout sizing for a vertical (column) chart, in pixels. */\n vertical: {\n baseBarThickness: number;\n minBarThickness: number;\n maxBarThickness: number;\n };\n /** Bar-layout sizing for a horizontal chart, in pixels. */\n horizontal: {\n minBarThickness: number;\n maxBarThickness: number;\n minCategoryGap: number;\n };\n };\n}\n\n/**\n * Resolves the active SKY theme's chart styling for the given host element.\n * When the SKY theme styles are not loaded, the chart renders un-themed with\n * Chart.js defaults.\n * @internal\n */\nexport function resolveChartThemeStyles(\n host: HTMLElement,\n): SkyChartThemeStyles {\n const styles = getComputedStyle(host);\n\n // Custom properties keep `calc()` expressions unevaluated (for example, the\n // SKY line-height tokens are authored as `calc(20/15)`). The probe assigns\n // those raw values to a standard property, which the browser evaluates, and\n // reads the resolved value back. It is created lazily — only for values the\n // fast path cannot parse — and torn down once resolution finishes.\n const probe = createTokenProbe(host);\n\n // `rem` conversions share one root font-size read; see `remToPx`.\n const rootFontSize = Number.parseFloat(\n getComputedStyle(host.ownerDocument.documentElement).fontSize,\n );\n\n try {\n // The chart's height bounds are authored once, as custom properties on\n // the `sky-chart` host (see `chart.scss`), so the plot heights resolved\n // here always match the loading state's reserved height. Plots must\n // render inside `sky-chart` (enforced by `SkyChartPlot`), so the\n // properties are always in scope; like the theme tokens, they only fail\n // to resolve in a genuinely broken setup.\n const minHeight = readNumber(\n styles,\n probe,\n '--sky-chart-height-min',\n rootFontSize,\n );\n\n const maxHeight = readNumber(\n styles,\n probe,\n '--sky-chart-height-max',\n rootFontSize,\n );\n\n const viewportHeight = readString(styles, '--sky-chart-height-viewport');\n\n return {\n font: {\n family: readString(styles, '--sky-font-family-primary'),\n size: readNumber(styles, probe, '--sky-font-size-body-s', rootFontSize),\n weight: readNumber(\n styles,\n probe,\n '--sky-font-style-body-s',\n rootFontSize,\n ),\n emphasizedWeight: readNumber(\n styles,\n probe,\n '--sky-font-style-emphasized',\n rootFontSize,\n ),\n },\n text: {\n color: readString(styles, '--sky-color-text-default'),\n deemphasizedColor: readString(styles, '--sky-color-text-deemphasized'),\n lineHeight: readLineHeight(styles, probe),\n },\n height: {\n min: minHeight,\n max: maxHeight,\n default: `clamp(${minHeight}px, ${viewportHeight}, ${maxHeight}px)`,\n },\n axis: {\n lineColor: readString(styles, '--sky-color-viz-axis'),\n gridlineColor: readString(styles, '--sky-color-viz-gridline'),\n tickLength: readNumber(\n styles,\n probe,\n '--sky-size-chart-tick_length-measure',\n rootFontSize,\n ),\n titleGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-xs',\n rootFontSize,\n ),\n },\n series: {\n categoricalPalette: Array.from({ length: 8 }, (_, index) =>\n readString(styles, `--sky-color-viz-category-${index + 1}`),\n ),\n },\n tooltip: {\n backgroundColor: readString(\n styles,\n '--sky-color-background-container-base',\n ),\n borderColor: readString(styles, '--sky-color-border-container-base'),\n borderWidth: readNumber(\n styles,\n probe,\n '--sky-border-width-container-base',\n rootFontSize,\n ),\n cornerRadius: readNumber(\n styles,\n probe,\n '--sky-border-radius-s',\n rootFontSize,\n ),\n inset: {\n top: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-top',\n rootFontSize,\n ),\n right: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-right',\n rootFontSize,\n ),\n bottom: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-bottom',\n rootFontSize,\n ),\n left: readNumber(\n styles,\n probe,\n '--sky-comp-chart-tooltip-space-inset-left',\n rootFontSize,\n ),\n },\n iconSize: readNumber(styles, probe, '--sky-size-icon-xs', rootFontSize),\n iconGap: readNumber(\n styles,\n probe,\n '--sky-space-gap-icon-s',\n rootFontSize,\n ),\n titleGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-s',\n rootFontSize,\n ),\n bodyGap: readNumber(\n styles,\n probe,\n '--sky-space-stacked-0',\n rootFontSize,\n ),\n },\n bar: {\n borderColor: readString(\n styles,\n '--sky-color-background-container-base',\n ),\n borderRadius: readNumber(\n styles,\n probe,\n '--sky-border-radius-xs',\n rootFontSize,\n ),\n vertical: {\n baseBarThickness: remToPx('2rem', rootFontSize),\n minBarThickness: remToPx('0.75rem', rootFontSize),\n maxBarThickness: remToPx('7.5rem', rootFontSize),\n },\n horizontal: {\n minBarThickness: remToPx('0.75rem', rootFontSize),\n maxBarThickness: remToPx('1rem', rootFontSize),\n minCategoryGap: remToPx('0.5rem', rootFontSize),\n },\n },\n };\n } finally {\n probe.destroy();\n }\n}\n\n/**\n * Derives the default-theme override property for a SKY theme token. The\n * modern theme's `--sky-*` tokens are not defined in the SKY UX default\n * theme, so `sky-chart` provides `--sky-override-chart-*` values scoped to\n * the default theme (see `chart.scss`). The override wins when present,\n * matching the `var(--sky-override-x, var(--sky-x))` convention used in\n * component CSS.\n */\nfunction overrideProperty(property: string): string {\n return `--sky-override-chart-${property.slice('--sky-'.length)}`;\n}\n\n/**\n * Reads a CSS custom property — preferring its default-theme override —\n * returning an empty string when neither is set. An empty string reaching\n * Chart.js renders un-themed rather than broken.\n */\nfunction readString(styles: CSSStyleDeclaration, property: string): string {\n return (\n styles.getPropertyValue(overrideProperty(property)).trim() ||\n styles.getPropertyValue(property).trim()\n );\n}\n\n/**\n * Reads a numeric CSS custom property — preferring its default-theme\n * override — as a number, converting `rem` values to pixels using the root\n * font size. Values the fast path cannot parse (such as `calc()` lengths) are\n * resolved through the probe. Every token has a default defined in the\n * `sky-default-overrides` mixin in `chart.scss`, so a value only fails to\n * resolve — returning `NaN` — in a genuinely broken theme.\n */\nfunction readNumber(\n styles: CSSStyleDeclaration,\n probe: SkyChartTokenProbe,\n property: string,\n rootFontSize: number,\n): number {\n const raw = readString(styles, property);\n\n if (raw === '') {\n return Number.NaN;\n }\n\n const value = Number.parseFloat(raw);\n\n if (!Number.isNaN(value)) {\n return raw.endsWith('rem') ? remToPx(raw, rootFontSize) : value;\n }\n\n // A non-numeric literal such as a `calc()` length; resolve it via the probe.\n return probe.resolveLength(raw) ?? Number.NaN;\n}\n\n/**\n * Converts a `rem` length to pixels using the document root font size. `rem` is\n * defined relative to the root element (never the host), so the root font size\n * is the correct reference — resolved once per `resolveChartThemeStyles` call\n * and shared by every conversion. Chart.js reasons in pixels when it lays out\n * a canvas, so `rem`-based sizing has to be resolved before it reaches the\n * chart.\n */\nfunction remToPx(rem: string, rootFontSize: number): number {\n return Number.parseFloat(rem) * rootFontSize;\n}\n\n/**\n * Reads the body-s line height as a multiple of the font size. A plain\n * numeric value (such as the default theme's override) parses directly; the\n * modern theme's token is a `calc()` expression that `getComputedStyle`\n * leaves unevaluated on custom properties, so it is resolved through the\n * probe. Its default is defined in the `sky-default-overrides` mixin in\n * `chart.scss`, so it only fails to resolve — returning `NaN` — in a\n * genuinely broken theme.\n */\nfunction readLineHeight(\n styles: CSSStyleDeclaration,\n probe: SkyChartTokenProbe,\n): number {\n const raw = readString(styles, '--sky-font-line_height-body-s');\n\n if (raw === '') {\n return Number.NaN;\n }\n\n const value = Number.parseFloat(raw);\n\n if (!Number.isNaN(value)) {\n return value;\n }\n\n // A non-numeric expression such as `calc(20/15)`; resolve it via the probe.\n return probe.resolveNumber(raw) ?? Number.NaN;\n}\n\n/**\n * Resolves raw CSS value expressions — including `calc()` — that\n * `getComputedStyle` leaves unevaluated on custom properties. Each raw value\n * is assigned to a standard property whose type matches it (a length via\n * `padding-left`, a number via `flex-grow`) on a hidden, off-layout element;\n * the browser evaluates it, and the resolved value is read back.\n */\ninterface SkyChartTokenProbe {\n /** Resolves a length expression to pixels, or `undefined` when invalid. */\n resolveLength(value: string): number | undefined;\n\n /** Resolves a numeric expression to a number, or `undefined` when invalid. */\n resolveNumber(value: string): number | undefined;\n\n /** Removes the probe element if it was created. */\n destroy(): void;\n}\n\n/**\n * Creates a {@link SkyChartTokenProbe} bound to `host`. The probe element is\n * created on first use — so resolving only fast-path values costs nothing —\n * and inherits `host`'s theme context.\n */\nfunction createTokenProbe(host: HTMLElement): SkyChartTokenProbe {\n let element: HTMLElement | undefined;\n\n function probeElement(): HTMLElement {\n if (!element) {\n element = document.createElement('span');\n element.style.position = 'absolute';\n element.style.width = '0';\n element.style.height = '0';\n element.style.overflow = 'hidden';\n element.style.visibility = 'hidden';\n host.appendChild(element);\n }\n\n return element;\n }\n\n // Assigns the raw value to a carrier property the browser evaluates, then\n // reads the resolved value back. An invalid value is rejected by the CSSOM,\n // leaving the carrier empty, which signals it could not be resolved.\n function resolveWith(\n carrier: 'paddingLeft' | 'flexGrow',\n value: string,\n ): number | undefined {\n const el = probeElement();\n\n el.style[carrier] = '';\n el.style[carrier] = value;\n\n return el.style[carrier] === ''\n ? undefined\n : Number.parseFloat(getComputedStyle(el)[carrier]);\n }\n\n return {\n resolveLength: (value): number | undefined =>\n resolveWith('paddingLeft', value),\n resolveNumber: (value): number | undefined =>\n resolveWith('flexGrow', value),\n destroy: (): void => element?.remove(),\n };\n}\n","import {\n afterRenderEffect,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n} from '@angular/core';\n\nimport { SkyChartTable } from '../chart-table/chart-table';\nimport {\n SkyChartAccessibleSummary,\n SkyChartTableService,\n} from '../chart-table/chart-table-service';\nimport {\n resolveChartThemeStyles,\n SkyChartThemeStyles,\n} from '../shared/chart-theme-styles';\n\n/**\n * Base class for chart plot components (for example, `sky-chart-bar`). Owns the\n * bridge that publishes each plot's tabular representation to the accessible\n * data table, so every plot type shares the same lifecycle. Subclasses\n * implement `getChartTable`, `getAccessibleSummary`, and their own rendering.\n *\n * Plots must be rendered inside `sky-chart`: the wrapper provides the data\n * table bridge and the default-theme styling the plot resolves its themed\n * values from.\n * @internal\n */\n@Directive()\nexport abstract class SkyChartPlot {\n readonly #elementRef = inject(ElementRef);\n\n readonly #tableSvc: SkyChartTableService;\n\n constructor() {\n const tableSvc = inject(SkyChartTableService, { optional: true });\n\n if (!tableSvc) {\n const tagName = (\n this.#elementRef.nativeElement as HTMLElement\n ).tagName.toLowerCase();\n\n throw new Error(\n `The <${tagName}> component must be rendered inside a <sky-chart> ` +\n 'component.',\n );\n }\n\n this.#tableSvc = tableSvc;\n\n inject(DestroyRef).onDestroy(() => {\n this.#tableSvc.table.set(undefined);\n this.#tableSvc.summary.set(undefined);\n });\n\n afterRenderEffect(() => {\n this.#tableSvc.table.set(this.getChartTable());\n this.#tableSvc.summary.set(this.getAccessibleSummary());\n });\n }\n\n /**\n * Builds the tabular representation of the plotted content for the accessible\n * data table, or `undefined` when the plot has no data to represent.\n */\n protected abstract getChartTable(): SkyChartTable | undefined;\n\n /**\n * Builds the localized, descriptive summary used as the chart figure's\n * accessible name, or `undefined` when the plot has no data to represent.\n */\n protected abstract getAccessibleSummary():\n | SkyChartAccessibleSummary\n | undefined;\n\n /**\n * Resolves the active theme's chart styling against this plot's element.\n * Chart.js renders to a canvas that cannot read CSS variables, so themed\n * tokens must be resolved to concrete values against the DOM.\n */\n protected getThemeStyles(): SkyChartThemeStyles {\n return resolveChartThemeStyles(\n this.#elementRef.nativeElement as HTMLElement,\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport { type SkyChartBarSeriesValue } from './chart-bar-series-value';\n\n/**\n * Defines a single series of values to plot on a bar chart, aligned to the\n * category axis by index.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-bar-series',\n template: '',\n})\nexport class SkyChartBarSeries {\n /**\n * The text that identifies this series in the legend and tooltips.\n */\n public readonly labelText = input.required<string>();\n\n /**\n * The stack this series belongs to. When a bar chart's `seriesLayout`\n * is `stacked`, series that share the same `stackId` value accumulate into\n * a single bar per category, and series with different `stackId` values\n * are placed side by side. Omit to stack every series into one bar per\n * category. Has no effect when `seriesLayout` is `grouped`.\n */\n public readonly stackId = input<string>();\n\n /**\n * The values for this series, aligned to the category axis categories by\n * index. A number renders a standard bar measured from the value axis's\n * baseline, a `[start, end]` tuple renders a floating bar spanning the two\n * values, and a `null` value renders a gap in the chart and an empty cell\n * in the data table.\n */\n public readonly values = input.required<readonly SkyChartBarSeriesValue[]>();\n}\n","import {\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n inject,\n input,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { SkyLogService } from '@skyux/core';\nimport { SkyThemeService } from '@skyux/theme';\nimport { type ChartDataset } from 'chart.js';\nimport { EMPTY, map } from 'rxjs';\n\nimport { SkyChartAxisCategory } from '../chart-axis/chart-axis-category';\nimport { SkyChartAxisValue } from '../chart-axis/chart-axis-value';\nimport {\n buildCartesianScales,\n buildCartesianTable,\n buildValueTooltipLabel,\n CATEGORY_AXIS_ID,\n isValueRange,\n resolveCartesianData,\n VALUE_AXIS_ID,\n} from '../chart-js/cartesian-utils';\nimport { SkyChartJs, type SkyChartJsConfig } from '../chart-js/chart-js';\nimport { extendBaseChartJsConfig } from '../chart-js/chart-js-config-utils';\nimport { SkyChartPlot } from '../chart-plot/chart-plot';\nimport { SkyChartTable } from '../chart-table/chart-table';\nimport { SkyChartAccessibleSummary } from '../chart-table/chart-table-service';\nimport { type SkyChartThemeStyles } from '../shared/chart-theme-styles';\nimport { SkyChartBarOrientation } from './chart-bar-orientation';\nimport { SkyChartBarSeries } from './chart-bar-series';\nimport { SkyChartBarSeriesLayout } from './chart-bar-series-layout';\n\n/**\n * Renders a bar chart from a category axis, a value axis, and one or more\n * series.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartJs],\n selector: 'sky-chart-bar',\n templateUrl: './chart-bar.html',\n})\nexport class SkyChartBar extends SkyChartPlot {\n readonly #themeSettings = toSignal(\n inject(SkyThemeService, { optional: true })?.settingsChange.pipe(\n map((change) => change.currentSettings),\n ) ?? EMPTY,\n { initialValue: undefined },\n );\n\n /**\n * The orientation of the bars.\n * @default 'vertical'\n */\n public readonly orientation = input<SkyChartBarOrientation>('vertical');\n\n /**\n * How the bars of multiple series are arranged within each category.\n * `grouped` places the series' bars side by side; `stacked` accumulates the\n * bars into a single bar per category. When `stacked`, assign each series a\n * `stackId` value to subdivide the bar into side-by-side stacks (grouped,\n * stacked bars). This has no visible effect when the chart has a single\n * series.\n * @default 'grouped'\n */\n public readonly seriesLayout = input<SkyChartBarSeriesLayout>('grouped');\n\n protected readonly categoryAxis = contentChild(SkyChartAxisCategory);\n protected readonly valueAxis = contentChild(SkyChartAxisValue);\n protected readonly series = contentChildren(SkyChartBarSeries);\n\n constructor() {\n super();\n\n const logger = inject(SkyLogService);\n\n // Values align to categories by index, so a length mismatch silently\n // misaligns or drops data. Warn about the one alignment mistake that is\n // mechanically detectable.\n afterRenderEffect(() => {\n const categoryCount = this.categoryAxis()?.categories().length;\n\n if (categoryCount === undefined) {\n return;\n }\n\n for (const chartSeries of this.series()) {\n const valueCount = chartSeries.values().length;\n\n if (valueCount !== categoryCount) {\n logger.warn(\n `The <sky-chart-bar-series> labeled \"${chartSeries.labelText()}\" ` +\n `has ${valueCount} values, but the category axis has ` +\n `${categoryCount} categories. Values align to categories by ` +\n 'index, so each series must provide one value per category.',\n );\n }\n }\n });\n }\n\n protected readonly chartJsConfig = computed(() => this.#getChartJsConfig());\n\n /**\n * The height to apply to the rendered chart. Chart.js runs with\n * `maintainAspectRatio: false`, so its container must be given an explicit\n * height. Vertical charts use the themed default; horizontal charts grow\n * with their content so every bar stays legible.\n */\n protected readonly chartHeight = computed(() => this.#getChartHeight());\n\n protected override getChartTable(): SkyChartTable | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n return buildCartesianTable(\n data.categoryAxis,\n data.series,\n data.valueAxis.formatValue(),\n );\n }\n\n protected override getAccessibleSummary():\n | SkyChartAccessibleSummary\n | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n return {\n resourceKey: 'skyux_charts.chart.bar.accessible_summary',\n args: [data.series.length, data.categoryAxis.categories().length],\n };\n }\n\n #getChartJsConfig(): SkyChartJsConfig<'bar'> | undefined {\n const data = resolveCartesianData(\n this.categoryAxis(),\n this.valueAxis(),\n this.series(),\n );\n\n if (!data) {\n return undefined;\n }\n\n const { categoryAxis, valueAxis, series } = data;\n\n // Read the theme signal so the config rebuilds when the theme changes,\n // then resolve the themed CSS custom properties to concrete values.\n this.#themeSettings();\n\n const themeStyles = this.getThemeStyles();\n const categorical = themeStyles.series.categoricalPalette;\n\n const isHorizontal = this.orientation() === 'horizontal';\n const isStacked = this.seriesLayout() === 'stacked';\n const indexAxis = isHorizontal ? 'y' : 'x';\n const valueDirection = isHorizontal ? 'x' : 'y';\n const formatValue = valueAxis.formatValue();\n\n // Horizontal bars target an explicit thickness (see below), which the\n // container height is also derived from; resolve the spacing once so the\n // two always agree.\n const horizontalSpacing = isHorizontal\n ? this.#getHorizontalBarSpacing(themeStyles)\n : undefined;\n\n // Vertical bars fill their responsive width; the fill percentages are\n // tuned by category count (see below).\n const verticalSpacing = isHorizontal\n ? undefined\n : this.#getVerticalBarElementSpacing(categoryAxis.categories().length);\n\n const datasets = series.map((chartSeries, index): ChartDataset<'bar'> => {\n const dataset: ChartDataset<'bar'> = {\n label: chartSeries.labelText(),\n // Chart.js mutates the arrays it is given, so deep-copy the readonly\n // input, including floating [start, end] ranges.\n data: chartSeries\n .values()\n .map((value) => (isValueRange(value) ? [...value] : value)),\n backgroundColor: categorical[index % categorical.length],\n };\n\n if (isHorizontal) {\n // Size horizontal bars through the band fill fractions, capped at the\n // target thickness (see #getHorizontalBarSpacing). An explicit numeric\n // `barThickness` would not work here: Chart.js then ignores the fill\n // fractions and renders bars that sit flush against each other and\n // overlap adjacent categories when the band is smaller than budgeted.\n dataset.categoryPercentage = horizontalSpacing?.categoryPercentage;\n dataset.barPercentage = horizontalSpacing?.barPercentage;\n dataset.maxBarThickness = horizontalSpacing?.barThickness;\n } else {\n // Shape the whitespace around vertical bars and cap their width so\n // sparse charts do not render unusably wide bars.\n dataset.categoryPercentage = verticalSpacing?.categoryPercentage;\n dataset.barPercentage = verticalSpacing?.barPercentage;\n dataset.maxBarThickness = themeStyles.bar.vertical.maxBarThickness;\n }\n\n // Stack groups only apply to a stacked layout; on a grouped layout the\n // scales are not stacked, so a shared stack id would overlap bars instead\n // of accumulating them.\n const stackId = chartSeries.stackId();\n\n if (isStacked && stackId !== undefined) {\n dataset.stack = stackId;\n }\n\n if (isHorizontal) {\n dataset.xAxisID = VALUE_AXIS_ID;\n dataset.yAxisID = CATEGORY_AXIS_ID;\n } else {\n dataset.yAxisID = VALUE_AXIS_ID;\n dataset.xAxisID = CATEGORY_AXIS_ID;\n }\n\n return dataset;\n });\n\n return extendBaseChartJsConfig<'bar'>(themeStyles, {\n type: 'bar',\n data: {\n // Chart.js mutates the arrays it is given, so copy the readonly input.\n labels: [...categoryAxis.categories()],\n datasets,\n },\n options: {\n interaction: {\n // Index hits along the category axis's direction (see the category scale's\n // `axis` in buildCartesianScales); this is a cartesian direction, not a scale ID.\n axis: isHorizontal ? 'y' : 'x',\n },\n elements: {\n bar: {\n borderWidth: 1,\n borderColor: themeStyles.bar.borderColor,\n borderRadius: themeStyles.bar.borderRadius,\n },\n },\n indexAxis,\n scales: buildCartesianScales({\n categoryAxis,\n valueAxis,\n isHorizontal,\n isStacked,\n themeStyles,\n }),\n plugins: {\n legend: {\n // Show the legend only when there are multiple series to\n // distinguish; a single-series chart's legend is redundant.\n display: datasets.length > 1,\n },\n tooltip: {\n callbacks: {\n label: buildValueTooltipLabel<'bar'>(formatValue, valueDirection),\n },\n },\n },\n },\n });\n }\n\n /**\n * Resolves the height to apply to the chart container. A vertical chart uses\n * the themed default height. A horizontal chart grows with its content:\n * every category needs enough room for its bars, so the height is derived\n * from the bar count and clamped to the minimum so small charts stay legible.\n */\n #getChartHeight(): string {\n // Read the theme signal so the height recomputes when the theme changes.\n this.#themeSettings();\n\n const themeStyles = this.getThemeStyles();\n\n if (this.orientation() !== 'horizontal') {\n return themeStyles.height.default;\n }\n\n const { rowHeight, categoryCount } =\n this.#getHorizontalBarSpacing(themeStyles);\n const totalRowsHeight = categoryCount * rowHeight;\n\n const computedHeight =\n this.#computeChartOverhead(themeStyles) + totalRowsHeight;\n\n // Horizontal charts may grow without bound, but never shrink below the\n // themed minimum.\n const clampedHeight = Math.max(themeStyles.height.min, computedHeight);\n\n return `${clampedHeight}px`;\n }\n\n /**\n * Resolves the horizontal bar layout — the target per-bar thickness, the\n * fractions of each category band the bars fill, and the per-category row\n * height — shared by the container height and the datasets so the two always\n * agree.\n */\n #getHorizontalBarSpacing(themeStyles: SkyChartThemeStyles): {\n barThickness: number;\n categoryPercentage: number;\n barPercentage: number;\n rowHeight: number;\n categoryCount: number;\n } {\n const seriesCount = this.series().length;\n // Chart.js renders one row per category-axis label, so the row count must\n // come from the category axis — a sparse series with fewer values than\n // categories must not shrink the height. The axis is always present when\n // the chart (and therefore this height) renders, so the fallback is\n // defensive only.\n /* istanbul ignore next */\n const categoryCount = this.categoryAxis()?.categories().length ?? 0;\n\n // A stacked layout renders one bar per distinct stack group — series that\n // share a stack group (or all lack one) accumulate into a single bar — so\n // the number of bars per category is the count of distinct stacks, not one.\n const barsPerCategory =\n this.seriesLayout() === 'stacked'\n ? new Set(this.series().map((chartSeries) => chartSeries.stackId()))\n .size\n : seriesCount;\n const totalBars = categoryCount * barsPerCategory;\n\n const { barThickness, categoryGap } =\n this.#computeHorizontalBarElementSpacing(totalBars, themeStyles);\n\n // Bars that share a category are separated by a small gap so grouped bars\n // read as distinct; a category with a single bar needs none.\n const barGapPercentage = 0.25;\n const barGap = barsPerCategory > 1 ? barThickness * barGapPercentage : 0;\n\n // Each bar's slot is the bar plus its gap, and each category's row is its\n // slots plus the gap that separates it from the next category — the same\n // budget the container height is derived from.\n const barSlot = barThickness + barGap;\n const rowHeight = barSlot * barsPerCategory + categoryGap;\n\n // Chart.js divides the plotted area evenly into category bands, so at the\n // derived container height each band matches `rowHeight`; these fractions\n // size each bar at the target thickness with the budgeted gaps.\n const categoryPercentage = (barSlot * barsPerCategory) / rowHeight;\n const barPercentage = barThickness / barSlot;\n\n return {\n barThickness,\n categoryPercentage,\n barPercentage,\n rowHeight,\n categoryCount,\n };\n }\n\n /**\n * Derives the per-bar thickness and the gap between categories for a\n * horizontal chart. Charts with few bars use the full bar thickness and a\n * tight gap; as the bar count grows the bars taper toward the minimum\n * thickness while the gap widens so grouped bars stay visually separated.\n */\n #computeHorizontalBarElementSpacing(\n totalBars: number,\n themeStyles: SkyChartThemeStyles,\n ): { barThickness: number; categoryGap: number } {\n const { minBarThickness, maxBarThickness, minCategoryGap } =\n themeStyles.bar.horizontal;\n\n const taperingStart = 12;\n const taperingStop = 36;\n const lowCategoryGapPercentage = 0.375;\n const highCategoryGapPercentage = 0.75;\n\n if (totalBars < taperingStart) {\n // Few bars: use the full thickness and target a fraction of the bar\n // width for the gap. No minimum is applied because the bars are already\n // at their full thickness.\n return {\n barThickness: maxBarThickness,\n categoryGap: maxBarThickness * lowCategoryGapPercentage,\n };\n }\n\n // Many bars: taper the thickness toward the minimum and widen the gap so\n // grouped bars stay separated, but never below the minimum category gap.\n const taperRange = taperingStop - taperingStart;\n const taperFraction = Math.min(1, (totalBars - taperingStart) / taperRange);\n const thicknessRange = maxBarThickness - minBarThickness;\n const taperedThickness = Math.round(\n maxBarThickness - taperFraction * thicknessRange,\n );\n const barThickness = Math.max(minBarThickness, taperedThickness);\n\n return {\n barThickness,\n categoryGap: Math.max(\n minCategoryGap,\n barThickness * highCategoryGapPercentage,\n ),\n };\n }\n\n /**\n * Tunes the category and bar fill percentages for a vertical chart. Vertical\n * bars fill their responsive width up to `bar.vertical.maxBarThickness`, so\n * these percentages shape the surrounding whitespace: sparse charts keep the\n * bars near the base width with room around them, while dense charts widen\n * the fill so bars use the available width (approaching the minimum). Chart.js\n * has no minimum-thickness option, so the base and minimum widths are soft\n * targets rather than hard pixel constraints.\n */\n #getVerticalBarElementSpacing(categoryCount: number): {\n categoryPercentage: number;\n barPercentage: number;\n } {\n const barPercentage = 0.85;\n const categoryPercentage =\n categoryCount <= 3 ? 0.4 : categoryCount >= 12 ? 0.95 : 0.7;\n\n return { categoryPercentage, barPercentage };\n }\n\n /**\n * Estimates the fixed vertical space a horizontal chart needs outside its\n * plotted rows: the bottom value axis (its tick marks, a row of tick labels,\n * and its title) plus the legend row when multiple series are shown. Added\n * to the rows' height, this keeps the plotted area sized to its bars rather\n * than absorbing the chrome.\n */\n #computeChartOverhead(themeStyles: SkyChartThemeStyles): number {\n const { axis, font, text, tooltip } = themeStyles;\n const lineHeight = font.size * text.lineHeight;\n\n // Bottom value axis: tick marks, a row of tick labels, and the axis title.\n const valueAxisHeight =\n axis.tickLength + lineHeight + axis.titleGap + lineHeight;\n\n // The legend only renders with multiple series.\n const legendHeight =\n this.series().length > 1\n ? Math.max(tooltip.iconSize, lineHeight) + axis.titleGap\n : 0;\n\n return valueAxisHeight + legendHeight;\n }\n}\n","@if (chartJsConfig(); as config) {\n <sky-chart-js [config]=\"config\" [style.height]=\"chartHeight()\" />\n}\n","/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/shared/sky-charts' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n 'skyux_charts.chart.bar.accessible_summary': {\n message:\n \"Bar chart. Number of series: {0}. Number of categories: {1}. A data table is available from the chart's context menu.\",\n },\n 'skyux_charts.chart.controls.context_menu.accessible_name': {\n message: 'Context menu for {0}',\n },\n 'skyux_charts.chart.controls.context_menu.view_data_table': {\n message: 'View data table',\n },\n 'skyux_charts.data_table_modal.close_button': { message: 'Close' },\n 'skyux_charts.data_table_modal.table_region_label': {\n message: 'Data table for {0}',\n },\n },\n ES: {\n 'skyux_charts.chart.bar.accessible_summary': {\n message:\n 'Gráfico de barras. Número de series: {0}. Número de categorías: {1}. Hay una tabla de datos disponible en el menú contextual del gráfico.',\n },\n 'skyux_charts.chart.controls.context_menu.accessible_name': {\n message: 'Menú contextual de {0}',\n },\n 'skyux_charts.chart.controls.context_menu.view_data_table': {\n message: 'Ver tabla de datos',\n },\n 'skyux_charts.data_table_modal.close_button': { message: 'Cerrar' },\n 'skyux_charts.data_table_modal.table_region_label': {\n message: 'Tabla de datos de {0}',\n },\n },\n 'FR-CA': {\n 'skyux_charts.chart.bar.accessible_summary': {\n message:\n 'Graphique à barres. Nombre de séries : {0}. Nombre de catégories : {1}. Un tableau de données est disponible dans le menu du contexte du graphique.',\n },\n 'skyux_charts.chart.controls.context_menu.accessible_name': {\n message: 'Menu du contexte pour {0}',\n },\n 'skyux_charts.chart.controls.context_menu.view_data_table': {\n message: 'Visualiser la table de données',\n },\n 'skyux_charts.data_table_modal.close_button': { message: 'Fermer' },\n 'skyux_charts.data_table_modal.table_region_label': {\n message: 'Tableau de données pour {0}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyChartsResourcesModule {}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { SkyModalInstance, SkyModalModule } from '@skyux/modals';\n\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\nimport type { SkyChartTable } from './chart-table';\n\nexport abstract class SkyChartTableModalContext {\n public abstract readonly headingText: string;\n public abstract readonly table: SkyChartTable | undefined;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartsResourcesModule, SkyModalModule],\n selector: 'sky-chart-table-modal',\n styleUrl: './chart-table-modal.scss',\n templateUrl: './chart-table-modal.html',\n})\nexport class SkyChartTableModal {\n protected readonly context = inject(SkyChartTableModalContext);\n protected readonly modal = inject(SkyModalInstance);\n}\n","<sky-modal [headingText]=\"context.headingText\">\n <sky-modal-content>\n @if (context.table; as table) {\n <div\n class=\"sky-chart-data-table-wrapper\"\n role=\"region\"\n tabindex=\"0\"\n [attr.aria-label]=\"\n 'skyux_charts.data_table_modal.table_region_label'\n | skyLibResources: context.headingText\n \"\n >\n <table class=\"sky-chart-data-table\">\n <thead>\n <tr>\n <th scope=\"col\">\n {{ table.categoryLabel }}\n </th>\n @for (series of table.series; track $index) {\n <th scope=\"col\">\n {{ series.label }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (\n category of table.categories;\n track $index;\n let rowIndex = $index\n ) {\n <tr>\n <th scope=\"row\">\n {{ category }}\n </th>\n @for (series of table.series; track $index) {\n <td>\n {{ series.values[rowIndex] }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </sky-modal-content>\n <sky-modal-footer>\n <button\n class=\"sky-btn sky-btn-link sky-chart-table-modal-close\"\n type=\"button\"\n (click)=\"modal.close()\"\n >\n {{ 'skyux_charts.data_table_modal.close_button' | skyLibResources }}\n </button>\n </sky-modal-footer>\n</sky-modal>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n input,\n} from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\nimport { SkyDropdownModule } from '@skyux/popovers';\n\nimport {\n SkyChartTableModal,\n SkyChartTableModalContext,\n} from '../chart-table/chart-table-modal';\nimport { SkyChartTableService } from '../chart-table/chart-table-service';\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyChartsResourcesModule, SkyDropdownModule],\n selector: 'sky-chart-controls',\n templateUrl: './chart-controls.html',\n})\nexport class SkyChartControls {\n readonly #destroyRef = inject(DestroyRef);\n readonly #modalSvc = inject(SkyModalService);\n readonly #tableSvc = inject(SkyChartTableService);\n\n public readonly headingText = input.required<string>();\n\n /**\n * The plot's data table. The context menu's only action is viewing the\n * data table, so the menu renders only while a table is available — a\n * plot that has not published one (no data yet, or still loading for the\n * first time) has no actions to offer.\n */\n protected readonly table = this.#tableSvc.table;\n\n protected openDataTableModal(): void {\n const instance = this.#modalSvc.open(SkyChartTableModal, {\n size: 'large',\n providers: [\n {\n provide: SkyChartTableModalContext,\n useValue: {\n headingText: this.headingText(),\n table: this.#tableSvc.table(),\n },\n },\n ],\n });\n\n this.#destroyRef.onDestroy(() => instance.close());\n }\n}\n","@if (table()) {\n <sky-dropdown\n buttonType=\"context-menu\"\n [label]=\"\n 'skyux_charts.chart.controls.context_menu.accessible_name'\n | skyLibResources: headingText()\n \"\n >\n <sky-dropdown-menu>\n <sky-dropdown-item>\n <button type=\"button\" (click)=\"openDataTableModal()\">\n {{\n 'skyux_charts.chart.controls.context_menu.view_data_table'\n | skyLibResources\n }}\n </button>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n type TemplateRef,\n} from '@angular/core';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\n\nimport { type SkyChartHeadingLevel } from './chart-heading-level';\nimport { type SkyChartHeadingStyle } from './chart-heading-style';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkyHelpInlineModule],\n selector: 'sky-chart-heading',\n styleUrl: './chart-heading.scss',\n templateUrl: './chart-heading.html',\n})\nexport class SkyChartHeading {\n public readonly headingLevel = input.required<SkyChartHeadingLevel>();\n public readonly headingStyle = input.required<SkyChartHeadingStyle>();\n public readonly headingText = input.required<string>();\n public readonly helpKey = input<string>();\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\n public readonly helpPopoverTitle = input<string>();\n\n protected readonly headingClass = computed(() => {\n return `sky-font-heading-${this.headingStyle()}`;\n });\n}\n","@switch (headingLevel()) {\n @case (2) {\n <h2 [class]=\"headingClass()\">{{ headingText() }}</h2>\n }\n @case (3) {\n <h3 [class]=\"headingClass()\">{{ headingText() }}</h3>\n }\n @case (4) {\n <h4 [class]=\"headingClass()\">{{ headingText() }}</h4>\n }\n @case (5) {\n <h5 [class]=\"headingClass()\">{{ headingText() }}</h5>\n }\n}\n@if (helpPopoverContent() || helpKey()) {\n <span class=\"sky-control-help-container\">\n <sky-help-inline\n [helpKey]=\"helpKey()\"\n [labelText]=\"headingText()\"\n [popoverContent]=\"helpPopoverContent()\"\n [popoverTitle]=\"helpPopoverTitle()\"\n />\n </span>\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * The allowed heading levels for charts, corresponding to the semantic heading levels in HTML.\n *\n * @preview\n */\nexport type SkyChartHeadingLevel = 2 | 3 | 4 | 5;\n\nexport const DEFAULT_HEADING_LEVEL: SkyChartHeadingLevel = 3 as const;\n\nexport function headingLevelInputTransformer(\n value: unknown,\n): SkyChartHeadingLevel {\n const numberValue = numberAttribute(value, DEFAULT_HEADING_LEVEL);\n\n if (isHeadingLevel(numberValue)) {\n return numberValue;\n }\n\n return DEFAULT_HEADING_LEVEL;\n}\n\nfunction isHeadingLevel(value: unknown): value is SkyChartHeadingLevel {\n return value === 2 || value === 3 || value === 4 || value === 5;\n}\n","import { numberAttribute } from '@angular/core';\n\n/**\n * The allowed heading styles for charts, corresponding to the font styles defined in the SKY UX design system.\n *\n * @preview\n */\nexport type SkyChartHeadingStyle = 2 | 3 | 4 | 5;\n\nexport const DEFAULT_HEADING_STYLE: SkyChartHeadingStyle = 3 as const;\n\nexport function headingStyleInputTransformer(\n value: unknown,\n): SkyChartHeadingStyle {\n const numberValue = numberAttribute(value, DEFAULT_HEADING_STYLE);\n\n if (isHeadingStyle(numberValue)) {\n return numberValue;\n }\n\n return DEFAULT_HEADING_STYLE;\n}\n\nfunction isHeadingStyle(value: unknown): value is SkyChartHeadingStyle {\n return value === 2 || value === 3 || value === 4 || value === 5;\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sky-chart-subheading',\n styleUrl: './chart-subheading.scss',\n template: `{{ subheadingText() }}`,\n})\nexport class SkyChartSubheading {\n public readonly subheadingText = input.required<string>();\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n type TemplateRef,\n} from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SkyLibResourcesService } from '@skyux/i18n';\nimport { SkyWaitModule } from '@skyux/indicators';\nimport { of, switchMap } from 'rxjs';\n\nimport { SkyChartTableService } from '../chart-table/chart-table-service';\nimport { SkyChartsResourcesModule } from '../shared/sky-charts-resources.module';\nimport { SkyChartControls } from './chart-controls';\nimport { SkyChartHeading } from './chart-heading';\nimport {\n DEFAULT_HEADING_LEVEL,\n headingLevelInputTransformer,\n type SkyChartHeadingLevel,\n} from './chart-heading-level';\nimport {\n DEFAULT_HEADING_STYLE,\n headingStyleInputTransformer,\n type SkyChartHeadingStyle,\n} from './chart-heading-style';\nimport { SkyChartSubheading } from './chart-subheading';\n\n/**\n * Provides a consistent heading, subheading, and layout wrapper for a chart.\n *\n * @preview\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n SkyChartControls,\n SkyChartHeading,\n SkyChartSubheading,\n SkyChartsResourcesModule,\n SkyWaitModule,\n ],\n providers: [SkyChartTableService],\n selector: 'sky-chart',\n styleUrl: './chart.scss',\n templateUrl: './chart.html',\n})\nexport class SkyChart {\n /**\n * Whether to hide the chart's heading.\n */\n public readonly headingHidden = input(false, { transform: booleanAttribute });\n\n /**\n * The semantic heading level in the document structure.\n * @default 3\n */\n public readonly headingLevel = input<SkyChartHeadingLevel, unknown>(\n DEFAULT_HEADING_LEVEL,\n {\n transform: headingLevelInputTransformer,\n },\n );\n\n /**\n * The heading [font style](https://developer.blackbaud.com/skyux/design/styles/typography#headings).\n * @default 3\n */\n public readonly headingStyle = input<SkyChartHeadingStyle, unknown>(\n DEFAULT_HEADING_STYLE,\n {\n transform: headingStyleInputTransformer,\n },\n );\n\n /**\n * The text to display as the chart's heading.\n */\n public readonly headingText = input.required<string>();\n\n /**\n * A help key that identifies the global help content to display. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is placed beside the chart heading. Clicking the button invokes [global help](https://developer.blackbaud.com/skyux/learn/develop/global-help)\n * as configured by the application.\n */\n public readonly helpKey = input<string>();\n\n /**\n * The content of the help popover. When specified, a [help inline](https://developer.blackbaud.com/skyux/components/help-inline)\n * button is added to the chart heading. The help inline button displays a [popover](https://developer.blackbaud.com/skyux/components/popover)\n * when clicked using the specified content and optional title.\n */\n public readonly helpPopoverContent = input<string | TemplateRef<unknown>>();\n\n /**\n * The title of the help popover. This property only applies when `helpPopoverContent` is also specified.\n */\n public readonly helpPopoverTitle = input<string>();\n\n /**\n * Whether the chart's data is being loaded. When `true`, a wait overlay\n * covers the chart's content area, which reserves the default chart height\n * while no plot is rendered. The heading and help button stay interactive.\n * @default false\n */\n public readonly loading = input(false, { transform: booleanAttribute });\n\n /**\n * The text to display as the chart's subheading.\n */\n public readonly subheadingText = input<string>();\n\n readonly #resourcesSvc = inject(SkyLibResourcesService);\n readonly #tableSvc = inject(SkyChartTableService);\n\n // Resolve the plot's descriptive summary into localized text. Each plot type\n // publishes its own resource key and arguments, so the wording can describe\n // that type's shape.\n readonly #summaryText = toSignal(\n toObservable(this.#tableSvc.summary).pipe(\n switchMap((summary) =>\n summary\n ? this.#resourcesSvc.getString(summary.resourceKey, ...summary.args)\n : of(undefined),\n ),\n ),\n { initialValue: undefined },\n );\n\n protected readonly figureLabel = computed(() => {\n const parts: string[] = [];\n\n // When the heading is hidden, name the figure with the title (and\n // subheading) so it is not lost. When the heading is visible, it already\n // provides that context, so the title is omitted here to avoid announcing\n // it twice.\n if (this.headingHidden()) {\n const subheadingText = this.subheadingText();\n\n parts.push(\n subheadingText\n ? `${this.headingText()}, ${subheadingText}`\n : this.headingText(),\n );\n }\n\n // The descriptive summary (chart type, shape, and that a data table is\n // available) adds information rather than echoing the title, so it is safe\n // to include whether or not the heading is visible.\n const summaryText = this.#summaryText();\n\n if (summaryText) {\n parts.push(summaryText);\n }\n\n return parts.length > 0 ? parts.join('. ') : null;\n });\n}\n","<div class=\"sky-chart-header\">\n <div>\n @if (!headingHidden()) {\n <sky-chart-heading\n [headingLevel]=\"headingLevel()\"\n [headingStyle]=\"headingStyle()\"\n [headingText]=\"headingText()\"\n [helpKey]=\"helpKey()\"\n [helpPopoverContent]=\"helpPopoverContent()\"\n [helpPopoverTitle]=\"helpPopoverTitle()\"\n />\n @if (subheadingText(); as subheadingText) {\n <sky-chart-subheading [subheadingText]=\"subheadingText\" />\n }\n }\n </div>\n @if (!loading()) {\n <sky-chart-controls [headingText]=\"headingText()\" />\n }\n</div>\n<figure\n class=\"sky-chart-content\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n [attr.aria-label]=\"figureLabel()\"\n [attr.role]=\"figureLabel() ? 'img' : null\"\n [class.sky-chart-content-loading]=\"loading()\"\n>\n <sky-wait [isWaiting]=\"loading()\" />\n <ng-content />\n</figure>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","i1"],"mappings":";;;;;;;;;;;;;;;;;;;AAOA;;;;;AAKG;MAMU,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;AAME;;;AAGG;AACa,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAgC;AAE3E;;AAEG;QACa,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE3E;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;AACrD,IAAA;8GAhBY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,kfAFrB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAED,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;;;ACeD;;;;;AAKG;AACG,SAAU,4BAA4B,CAC1C,OAAsC,EAAA;AAEtC,IAAA,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;AAEhE,IAAA,IAAI,KAA+B;IAEnC,QAAQ,MAAM;AACZ,QAAA,KAAK,UAAU;AACb,YAAA,KAAK,GAAG,wBAAwB,CAAC,QAAQ;YACzC;AAEF,QAAA,KAAK,SAAS;AACZ,YAAA,KAAK,GAAG,wBAAwB,CAAC,OAAO;YACxC;AAEF,QAAA;AACE,YAAA,KAAK,GAAG,wBAAwB,CAAC,OAAO;YACxC;;AAGJ,IAAA,OAAO,CAAC,KAAa,KACnB,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAClD,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAG,YAAY,GAAG,SAAS;AAC1D,QAAA,eAAe,EAAE,QAAQ;AACzB,QAAA,qBAAqB,EAAE,MAAM;AAC7B,QAAA,qBAAqB,EAAE,MAAM;AAC9B,KAAA,CAAC;AACN;;AChEA;;;AAGG;AACG,SAAU,uBAAuB,CAAC,KAAc,EAAA;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC;AAElC,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,GAAG;AAC5C;;ACIA;;;;;AAKG;MAMU,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;AAMW,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE9C,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CACzB,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,EACrE,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CACrD;AAED;;;AAGG;QACa,IAAA,CAAA,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE9C;;;;AAIG;QACa,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,SAAS,mDACtC,SAAS,EAAE,uBAAuB,EAAA,CAClC;AAEF;;;;;AAKG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAsB,QAAQ,kDAAC;AAE7D;;AAEG;QACa,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE3E;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;AAEpD;;;AAGG;QACa,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,SAAS,gDACnC,SAAS,EAAE,uBAAuB,EAAA,CAClC;AAEF;;;AAGG;QACa,IAAA,CAAA,GAAG,GAAG,KAAK,CAAC,SAAS,gDACnC,SAAS,EAAE,uBAAuB,EAAA,CAClC;AAEF;;;AAGG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAyB,QAAQ,qDAAC;AAEnE;;;;AAIG;AACa,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAA4B,MAChE,4BAA4B,CAAC;AAC3B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,SAAA,CAAC,uDACH;AACF,IAAA;AA3EU,IAAA,eAAe;AAEf,IAAA,OAAO;8GAHL,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,olCAFlB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAED,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;;;ACVD;;;AAGG;AACI,MAAM,gBAAgB,GAAG,UAAU;AAE1C;;;AAGG;AACI,MAAM,aAAa,GAAG,OAAO;AAkDpC;;;;AAIG;AACG,SAAU,YAAY,CAC1B,KAAc,EAAA;AAEd,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7B;AAYA;;;AAGG;SACa,oBAAoB,CAClC,YAA8C,EAC9C,SAAwC,EACxC,MAAoC,EAAA;IAEpC,IACE,YAAY,KAAK,SAAS;AAC1B,QAAA,SAAS,KAAK,SAAS;AACvB,QAAA,MAAM,CAAC,MAAM,KAAK,CAAC,EACnB;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE;AAC5C;AAEA;;;;;AAKG;SACa,mBAAmB,CACjC,YAAkC,EAClC,MAAoC,EACpC,WAAsC,EAAA;IAEtC,OAAO;AACL,QAAA,aAAa,EAAE,YAAY,CAAC,SAAS,EAAE;AACvC,QAAA,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE;QACrC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,MAAM;AACnC,YAAA,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE;AAC9B,YAAA,MAAM,EAAE;AACL,iBAAA,MAAM;AACN,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC5D,SAAA,CAAC,CAAC;KACJ;AACH;AAEA;;;;AAIG;AACH,SAAS,oBAAoB,CAC3B,KAA6B,EAC7B,WAAsC,EAAA;AAEtC,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AACvB,QAAA,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;IAC9D;AAEA,IAAA,OAAO,WAAW,CAAC,KAAK,CAAC;AAC3B;AAEA;;;AAGG;AACH,SAAS,qBAAqB,CAC5B,WAAgC,EAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW;IAExC,OAAO;AACL,QAAA,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,SAAS,EAAE,IAAI,CAAC,aAAa;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,SAAA;AACD,QAAA,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,SAAS;AACtB,SAAA;AACD,QAAA,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,CAAC,iBAAiB;AAC7B,YAAA,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,aAAA;AACD,YAAA,OAAO,EAAE;gBACP,GAAG,EAAE,IAAI,CAAC,QAAQ;gBAClB,MAAM,EAAE,IAAI,CAAC,QAAQ;AACtB,aAAA;AACF,SAAA;KACF;AACH;AAEA;;;;;;AAMG;AACH,SAAS,kBAAkB,CAAC,IAAoC,EAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAExC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;AAC3D,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW;IAC1B;AACF;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,OAMpC,EAAA;AACC,IAAA,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,GAAG,KAAK,EACjB,WAAW,GACZ,GAAG,OAAO;IAEX,MAAM,SAAS,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG;IAC1C,MAAM,cAAc,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG;AAE/C,IAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAE/C,IAAA,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE;AAC3C,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE;IAEvC,OAAO;QACL,CAAC,gBAAgB,GAAG;AAClB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ;AAC1C,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,SAAS,EAAE,IAAI;;;AAGf,gBAAA,eAAe,EAAE,KAAK;gBACtB,GAAG,IAAI,CAAC,IAAI;AACb,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;gBACb,GAAG,IAAI,CAAC,MAAM;AACf,aAAA;AACD,YAAA,KAAK,EAAE;gBACL,GAAG,IAAI,CAAC,KAAK;;;;gBAIb,QAAQ,EAAE,CAAC,YAAY;AACxB,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE;AACpC,gBAAA,IAAI,EAAE,YAAY,CAAC,SAAS,EAAE;gBAC9B,GAAG,IAAI,CAAC,KAAK;AACd,aAAA;AACF,SAAA;QACD,CAAC,aAAa,GAAG;AACf,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,YAAY,GAAG,QAAQ,GAAG,MAAM;AAC1C,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;AACpB,YAAA,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE;AACpB,YAAA,IAAI,SAAS,KAAK,aAAa,IAAI;AACjC,gBAAA,eAAe,EAAE,kBAAkB;aACpC,CAAC;AACF,YAAA,IAAI,EAAE;gBACJ,GAAG,IAAI,CAAC,IAAI;AACZ,gBAAA,eAAe,EAAE,IAAI;AACtB,aAAA;AACD,YAAA,MAAM,EAAE;gBACN,GAAG,IAAI,CAAC,MAAM;AACf,aAAA;AACD,YAAA,KAAK,EAAE;gBACL,GAAG,IAAI,CAAC,KAAK;AACb,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,QAAQ,EAAE,CAAC,SAA0B,KACnC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE;AACjC,gBAAA,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE;gBAC3B,GAAG,IAAI,CAAC,KAAK;AACd,aAAA;AACF,SAAA;KACF;AACH;AAEA;;;AAGG;AACG,SAAU,sBAAsB,CACpC,WAAsC,EACtC,cAAyB,EAAA;IAEzB,OAAO,CAAC,OAA8B,KAAY;QAChD,MAAM,IAAI,GAAG,OAA6C;;;AAI1D,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG;cACnC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW;AAC5C,cAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AAEhC,QAAA,OAAO,KAAK,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,GAAG,SAAS;AACrD,IAAA,CAAC;AACH;;ACvTA,KAAK,CAAC,QAAQ,CACZ,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,MAAM,EACN,OAAO,CACR;AAaD;;;;;AAKG;MAiBU,UAAU,CAAA;AAUrB,IAAA,MAAM;AAEN,IAAA,WAAA,GAAA;AAXA;;AAEG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA2B;AAE/C,QAAA,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC3D,YAAA,IAAI,EAAE,UAAU;AACjB,SAAA,CAAC;AAKA,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACzB,QAAA,CAAC,CAAC;QAEF,iBAAiB,CAAC,MAAK;AACrB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;gBAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AACpC,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtB;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;YACvE;AACF,QAAA,CAAC,CAAC;IACJ;8GA7BW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOb,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATR,CAAA,8CAAA,CAAgD,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE/C,UAAU,EAAA,UAAA,EAAA,CAAA;kBAhBtB,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,cAAc,YAYd,CAAA,8CAAA,CAAgD,EAAA,MAAA,EAAA,CAAA,0CAAA,CAAA,EAAA;AAQT,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,UAAU,EAAA,EAAA,GAAE;AAC3D,4BAAA,IAAI,EAAE,UAAU;AACjB,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACrEH;;;AAGG;AACH,SAAS,uBAAuB,CAC9B,WAAgC,EAAA;IAEhC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW;AAE3C,IAAA,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B;AAED,IAAA,MAAM,OAAO,GAAiB;;AAE5B,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,mBAAmB,EAAE,KAAK;AAC1B,QAAA,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;;QAGtB,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;QACjD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;QAC3C,SAAS,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE;AAEtD,QAAA,OAAO,EAAE;AACP,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,MAAM,EAAE;AACN,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,aAAa,EAAE,IAAI;;AAGnB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,KAAK;;gBAGhB,UAAU,EAAE,IAAI,CAAC,KAAK;AACtB,gBAAA,SAAS,EAAE;AACT,oBAAA,GAAG,QAAQ;oBACX,MAAM,EAAE,IAAI,CAAC,gBAAgB;AAC9B,iBAAA;gBACD,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,QAAQ;gBACR,WAAW,EAAE,IAAI,CAAC,KAAK;AACvB,gBAAA,UAAU,EAAE,QAAQ;;AAGpB,gBAAA,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE;gBAC7B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,YAAY,EAAE,CAAC;;gBAGf,SAAS,EAAE,OAAO,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,UAAU,EAAE,OAAO,CAAC,OAAO;AAC3B,gBAAA,kBAAkB,EAAE,aAAa;;gBAGjC,iBAAiB,EAAE,OAAO,CAAC,QAAQ;gBACnC,WAAW,EAAE,OAAO,CAAC,OAAO;gBAC5B,eAAe,EAAE,OAAO,CAAC,QAAQ;;gBAGjC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,WAAW,EAAE,OAAO,CAAC,WAAW;AACjC,aAAA;AACF,SAAA;KACF;AAED,IAAA,OAAO,OAAO;AAChB;AAEA;;;AAGG;AACG,SAAU,uBAAuB,CACrC,WAAgC,EAChC,SAAkC,EAAA;AAElC,IAAA,MAAM,IAAI,GAAG,uBAAuB,CAAC,WAAW,CAAC;AAEjD,IAAA,MAAM,OAAO,GAAiB;AAC5B,QAAA,GAAG,IAAI;QACP,GAAG,SAAS,CAAC,OAAO;AACpB,QAAA,OAAO,EAAE;YACP,GAAG,IAAI,CAAC,OAAO;AACf,YAAA,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO;AAC5B,YAAA,MAAM,EAAE;AACN,gBAAA,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;AACvB,gBAAA,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM;AACrC,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO;AACxB,gBAAA,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO;AACtC,aAAA;AACF,SAAA;KACF;IAED,OAAO;AACL,QAAA,GAAG,SAAS;QACZ,OAAO;KACmB;AAC9B;;ACnGA;;;;;AAKG;MAEU,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEE;;;AAGG;AACa,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA4B,SAAS,iDAAC;AAEpE;;;AAGG;AACa,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAC9B,SAAS,mDACV;AACF,IAAA;8GAdY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApB,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACoED;;;;;AAKG;AACG,SAAU,uBAAuB,CACrC,IAAiB,EAAA;AAEjB,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC;;;;;;AAOrC,IAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;;AAGpC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CACpC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,QAAQ,CAC9D;AAED,IAAA,IAAI;;;;;;;AAOF,QAAA,MAAM,SAAS,GAAG,UAAU,CAC1B,MAAM,EACN,KAAK,EACL,wBAAwB,EACxB,YAAY,CACb;AAED,QAAA,MAAM,SAAS,GAAG,UAAU,CAC1B,MAAM,EACN,KAAK,EACL,wBAAwB,EACxB,YAAY,CACb;QAED,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,6BAA6B,CAAC;QAExE,OAAO;AACL,YAAA,IAAI,EAAE;AACJ,gBAAA,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,2BAA2B,CAAC;gBACvD,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,YAAY,CAAC;gBACvE,MAAM,EAAE,UAAU,CAChB,MAAM,EACN,KAAK,EACL,yBAAyB,EACzB,YAAY,CACb;gBACD,gBAAgB,EAAE,UAAU,CAC1B,MAAM,EACN,KAAK,EACL,6BAA6B,EAC7B,YAAY,CACb;AACF,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC;AACrD,gBAAA,iBAAiB,EAAE,UAAU,CAAC,MAAM,EAAE,+BAA+B,CAAC;AACtE,gBAAA,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC;AAC1C,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,SAAS,OAAO,cAAc,CAAA,EAAA,EAAK,SAAS,CAAA,GAAA,CAAK;AACpE,aAAA;AACD,YAAA,IAAI,EAAE;AACJ,gBAAA,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,sBAAsB,CAAC;AACrD,gBAAA,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC;gBAC7D,UAAU,EAAE,UAAU,CACpB,MAAM,EACN,KAAK,EACL,sCAAsC,EACtC,YAAY,CACb;gBACD,QAAQ,EAAE,UAAU,CAClB,MAAM,EACN,KAAK,EACL,wBAAwB,EACxB,YAAY,CACb;AACF,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,kBAAkB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KACrD,UAAU,CAAC,MAAM,EAAE,CAAA,yBAAA,EAA4B,KAAK,GAAG,CAAC,CAAA,CAAE,CAAC,CAC5D;AACF,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,eAAe,EAAE,UAAU,CACzB,MAAM,EACN,uCAAuC,CACxC;AACD,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,EAAE,mCAAmC,CAAC;gBACpE,WAAW,EAAE,UAAU,CACrB,MAAM,EACN,KAAK,EACL,mCAAmC,EACnC,YAAY,CACb;gBACD,YAAY,EAAE,UAAU,CACtB,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,YAAY,CACb;AACD,gBAAA,KAAK,EAAE;oBACL,GAAG,EAAE,UAAU,CACb,MAAM,EACN,KAAK,EACL,0CAA0C,EAC1C,YAAY,CACb;oBACD,KAAK,EAAE,UAAU,CACf,MAAM,EACN,KAAK,EACL,4CAA4C,EAC5C,YAAY,CACb;oBACD,MAAM,EAAE,UAAU,CAChB,MAAM,EACN,KAAK,EACL,6CAA6C,EAC7C,YAAY,CACb;oBACD,IAAI,EAAE,UAAU,CACd,MAAM,EACN,KAAK,EACL,2CAA2C,EAC3C,YAAY,CACb;AACF,iBAAA;gBACD,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,CAAC;gBACvE,OAAO,EAAE,UAAU,CACjB,MAAM,EACN,KAAK,EACL,wBAAwB,EACxB,YAAY,CACb;gBACD,QAAQ,EAAE,UAAU,CAClB,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,YAAY,CACb;gBACD,OAAO,EAAE,UAAU,CACjB,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,YAAY,CACb;AACF,aAAA;AACD,YAAA,GAAG,EAAE;AACH,gBAAA,WAAW,EAAE,UAAU,CACrB,MAAM,EACN,uCAAuC,CACxC;gBACD,YAAY,EAAE,UAAU,CACtB,MAAM,EACN,KAAK,EACL,wBAAwB,EACxB,YAAY,CACb;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;AAC/C,oBAAA,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;AACjD,oBAAA,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;AACjD,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;AACjD,oBAAA,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;AAC9C,oBAAA,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;AAChD,iBAAA;AACF,aAAA;SACF;IACH;YAAU;QACR,KAAK,CAAC,OAAO,EAAE;IACjB;AACF;AAEA;;;;;;;AAOG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAA;IACxC,OAAO,CAAA,qBAAA,EAAwB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAE;AAClE;AAEA;;;;AAIG;AACH,SAAS,UAAU,CAAC,MAA2B,EAAE,QAAgB,EAAA;AAC/D,IAAA,QACE,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;QAC1D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;AAE5C;AAEA;;;;;;;AAOG;AACH,SAAS,UAAU,CACjB,MAA2B,EAC3B,KAAyB,EACzB,QAAgB,EAChB,YAAoB,EAAA;IAEpB,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC;AAExC,IAAA,IAAI,GAAG,KAAK,EAAE,EAAE;QACd,OAAO,MAAM,CAAC,GAAG;IACnB;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,KAAK;IACjE;;IAGA,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG;AAC/C;AAEA;;;;;;;AAOG;AACH,SAAS,OAAO,CAAC,GAAW,EAAE,YAAoB,EAAA;IAChD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY;AAC9C;AAEA;;;;;;;;AAQG;AACH,SAAS,cAAc,CACrB,MAA2B,EAC3B,KAAyB,EAAA;IAEzB,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,+BAA+B,CAAC;AAE/D,IAAA,IAAI,GAAG,KAAK,EAAE,EAAE;QACd,OAAO,MAAM,CAAC,GAAG;IACnB;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;;IAGA,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG;AAC/C;AAoBA;;;;AAIG;AACH,SAAS,gBAAgB,CAAC,IAAiB,EAAA;AACzC,IAAA,IAAI,OAAgC;AAEpC,IAAA,SAAS,YAAY,GAAA;QACnB,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACxC,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACnC,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;AACzB,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACjC,YAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAC3B;AAEA,QAAA,OAAO,OAAO;IAChB;;;;AAKA,IAAA,SAAS,WAAW,CAClB,OAAmC,EACnC,KAAa,EAAA;AAEb,QAAA,MAAM,EAAE,GAAG,YAAY,EAAE;AAEzB,QAAA,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;AACtB,QAAA,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK;AAEzB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK;AAC3B,cAAE;AACF,cAAE,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACtD;IAEA,OAAO;QACL,aAAa,EAAE,CAAC,KAAK,KACnB,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC;QACnC,aAAa,EAAE,CAAC,KAAK,KACnB,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC;AAChC,QAAA,OAAO,EAAE,MAAY,OAAO,EAAE,MAAM,EAAE;KACvC;AACH;;ACxaA;;;;;;;;;;AAUG;MAEmB,YAAY,CAAA;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,IAAA,SAAS;AAElB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEjE,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,WAAW,CAAC,aAClB,CAAC,OAAO,CAAC,WAAW,EAAE;AAEvB,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,KAAA,EAAQ,OAAO,CAAA,kDAAA,CAAoD;AACjE,gBAAA,YAAY,CACf;QACH;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AAEzB,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;YAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACvC,QAAA,CAAC,CAAC;QAEF,iBAAiB,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACzD,QAAA,CAAC,CAAC;IACJ;AAgBA;;;;AAIG;IACO,cAAc,GAAA;QACtB,OAAO,uBAAuB,CAC5B,IAAI,CAAC,WAAW,CAAC,aAA4B,CAC9C;IACH;8GAvDoB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACzBD;;;;;AAKG;MAMU,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;AAME;;AAEG;AACa,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAU;AAEpD;;;;;;AAMG;QACa,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEzC;;;;;;AAMG;AACa,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAAqC;AAC7E,IAAA;8GAvBY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,udAFlB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAED,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA;;;ACuBD;;;;;AAKG;AAOG,MAAO,WAAY,SAAQ,YAAY,CAAA;AAClC,IAAA,cAAc;AA4BvB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AA7BA,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAChC,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,IAAI,CAC9DA,KAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,eAAe,CAAC,CACxC,IAAI,KAAK,EACV,EAAE,YAAY,EAAE,SAAS,EAAE,CAC5B;AAED;;;AAGG;AACa,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAyB,UAAU,uDAAC;AAEvE;;;;;;;;AAQG;AACa,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAA0B,SAAS,wDAAC;AAErD,QAAA,IAAA,CAAA,YAAY,GAAG,YAAY,CAAC,oBAAoB,wDAAC;AACjD,QAAA,IAAA,CAAA,SAAS,GAAG,YAAY,CAAC,iBAAiB,qDAAC;AAC3C,QAAA,IAAA,CAAA,MAAM,GAAG,eAAe,CAAC,iBAAiB,kDAAC;QAgC3C,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE3E;;;;;AAKG;QACgB,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAnCrE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;;;;QAKpC,iBAAiB,CAAC,MAAK;YACrB,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM;AAE9D,YAAA,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B;YACF;YAEA,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACvC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,MAAM;AAE9C,gBAAA,IAAI,UAAU,KAAK,aAAa,EAAE;oBAChC,MAAM,CAAC,IAAI,CACT,CAAA,oCAAA,EAAuC,WAAW,CAAC,SAAS,EAAE,CAAA,EAAA,CAAI;AAChE,wBAAA,CAAA,IAAA,EAAO,UAAU,CAAA,mCAAA,CAAqC;AACtD,wBAAA,CAAA,EAAG,aAAa,CAAA,2CAAA,CAA6C;AAC7D,wBAAA,4DAA4D,CAC/D;gBACH;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAYmB,aAAa,GAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAC/B,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,MAAM,EAAE,CACd;QAED,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,OAAO,mBAAmB,CACxB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAC7B;IACH;IAEmB,oBAAoB,GAAA;AAGrC,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAC/B,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,MAAM,EAAE,CACd;QAED,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;QAEA,OAAO;AACL,YAAA,WAAW,EAAE,2CAA2C;AACxD,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;SAClE;IACH;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAC/B,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,SAAS,EAAE,EAChB,IAAI,CAAC,MAAM,EAAE,CACd;QAED,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;QAEA,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;;;QAIhD,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,kBAAkB;QAEzD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS;QACnD,MAAM,SAAS,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG;QAC1C,MAAM,cAAc,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG;AAC/C,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,EAAE;;;;QAK3C,MAAM,iBAAiB,GAAG;AACxB,cAAE,IAAI,CAAC,wBAAwB,CAAC,WAAW;cACzC,SAAS;;;QAIb,MAAM,eAAe,GAAG;AACtB,cAAE;AACF,cAAE,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAyB;AACtE,YAAA,MAAM,OAAO,GAAwB;AACnC,gBAAA,KAAK,EAAE,WAAW,CAAC,SAAS,EAAE;;;AAG9B,gBAAA,IAAI,EAAE;AACH,qBAAA,MAAM;qBACN,GAAG,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC7D,eAAe,EAAE,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;aACzD;YAED,IAAI,YAAY,EAAE;;;;;;AAMhB,gBAAA,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,EAAE,kBAAkB;AAClE,gBAAA,OAAO,CAAC,aAAa,GAAG,iBAAiB,EAAE,aAAa;AACxD,gBAAA,OAAO,CAAC,eAAe,GAAG,iBAAiB,EAAE,YAAY;YAC3D;iBAAO;;;AAGL,gBAAA,OAAO,CAAC,kBAAkB,GAAG,eAAe,EAAE,kBAAkB;AAChE,gBAAA,OAAO,CAAC,aAAa,GAAG,eAAe,EAAE,aAAa;gBACtD,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe;YACpE;;;;AAKA,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE;AAErC,YAAA,IAAI,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE;AACtC,gBAAA,OAAO,CAAC,KAAK,GAAG,OAAO;YACzB;YAEA,IAAI,YAAY,EAAE;AAChB,gBAAA,OAAO,CAAC,OAAO,GAAG,aAAa;AAC/B,gBAAA,OAAO,CAAC,OAAO,GAAG,gBAAgB;YACpC;iBAAO;AACL,gBAAA,OAAO,CAAC,OAAO,GAAG,aAAa;AAC/B,gBAAA,OAAO,CAAC,OAAO,GAAG,gBAAgB;YACpC;AAEA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC,CAAC;QAEF,OAAO,uBAAuB,CAAQ,WAAW,EAAE;AACjD,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,IAAI,EAAE;;AAEJ,gBAAA,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;gBACtC,QAAQ;AACT,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,WAAW,EAAE;;;oBAGX,IAAI,EAAE,YAAY,GAAG,GAAG,GAAG,GAAG;AAC/B,iBAAA;AACD,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,EAAE;AACH,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW;AACxC,wBAAA,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY;AAC3C,qBAAA;AACF,iBAAA;gBACD,SAAS;gBACT,MAAM,EAAE,oBAAoB,CAAC;oBAC3B,YAAY;oBACZ,SAAS;oBACT,YAAY;oBACZ,SAAS;oBACT,WAAW;iBACZ,CAAC;AACF,gBAAA,OAAO,EAAE;AACP,oBAAA,MAAM,EAAE;;;AAGN,wBAAA,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC7B,qBAAA;AACD,oBAAA,OAAO,EAAE;AACP,wBAAA,SAAS,EAAE;AACT,4BAAA,KAAK,EAAE,sBAAsB,CAAQ,WAAW,EAAE,cAAc,CAAC;AAClE,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AAEA;;;;;AAKG;IACH,eAAe,GAAA;;QAEb,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AAEzC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE;AACvC,YAAA,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO;QACnC;AAEA,QAAA,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAChC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,eAAe,GAAG,aAAa,GAAG,SAAS;QAEjD,MAAM,cAAc,GAClB,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,eAAe;;;AAI3D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC;QAEtE,OAAO,CAAA,EAAG,aAAa,CAAA,EAAA,CAAI;IAC7B;AAEA;;;;;AAKG;AACH,IAAA,wBAAwB,CAAC,WAAgC,EAAA;QAOvD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM;;;;;;;AAOxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,IAAI,CAAC;;;;AAKnE,QAAA,MAAM,eAAe,GACnB,IAAI,CAAC,YAAY,EAAE,KAAK;cACpB,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;iBAC9D;cACH,WAAW;AACjB,QAAA,MAAM,SAAS,GAAG,aAAa,GAAG,eAAe;AAEjD,QAAA,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GACjC,IAAI,CAAC,mCAAmC,CAAC,SAAS,EAAE,WAAW,CAAC;;;QAIlE,MAAM,gBAAgB,GAAG,IAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,eAAe,GAAG,CAAC,GAAG,YAAY,GAAG,gBAAgB,GAAG,CAAC;;;;AAKxE,QAAA,MAAM,OAAO,GAAG,YAAY,GAAG,MAAM;AACrC,QAAA,MAAM,SAAS,GAAG,OAAO,GAAG,eAAe,GAAG,WAAW;;;;QAKzD,MAAM,kBAAkB,GAAG,CAAC,OAAO,GAAG,eAAe,IAAI,SAAS;AAClE,QAAA,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO;QAE5C,OAAO;YACL,YAAY;YACZ,kBAAkB;YAClB,aAAa;YACb,SAAS;YACT,aAAa;SACd;IACH;AAEA;;;;;AAKG;IACH,mCAAmC,CACjC,SAAiB,EACjB,WAAgC,EAAA;AAEhC,QAAA,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,GACxD,WAAW,CAAC,GAAG,CAAC,UAAU;QAE5B,MAAM,aAAa,GAAG,EAAE;QACxB,MAAM,YAAY,GAAG,EAAE;QACvB,MAAM,wBAAwB,GAAG,KAAK;QACtC,MAAM,yBAAyB,GAAG,IAAI;AAEtC,QAAA,IAAI,SAAS,GAAG,aAAa,EAAE;;;;YAI7B,OAAO;AACL,gBAAA,YAAY,EAAE,eAAe;gBAC7B,WAAW,EAAE,eAAe,GAAG,wBAAwB;aACxD;QACH;;;AAIA,QAAA,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa;AAC/C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,aAAa,IAAI,UAAU,CAAC;AAC3E,QAAA,MAAM,cAAc,GAAG,eAAe,GAAG,eAAe;AACxD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CACjC,eAAe,GAAG,aAAa,GAAG,cAAc,CACjD;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC;QAEhE,OAAO;YACL,YAAY;YACZ,WAAW,EAAE,IAAI,CAAC,GAAG,CACnB,cAAc,EACd,YAAY,GAAG,yBAAyB,CACzC;SACF;IACH;AAEA;;;;;;;;AAQG;AACH,IAAA,6BAA6B,CAAC,aAAqB,EAAA;QAIjD,MAAM,aAAa,GAAG,IAAI;QAC1B,MAAM,kBAAkB,GACtB,aAAa,IAAI,CAAC,GAAG,GAAG,GAAG,aAAa,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG;AAE7D,QAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE;IAC9C;AAEA;;;;;;AAMG;AACH,IAAA,qBAAqB,CAAC,WAAgC,EAAA;QACpD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,WAAW;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;;AAG9C,QAAA,MAAM,eAAe,GACnB,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU;;QAG3D,MAAM,YAAY,GAChB,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG;AACrB,cAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC;cAC9C,CAAC;QAEP,OAAO,eAAe,GAAG,YAAY;IACvC;8GAjaW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyByB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACvB,iBAAiB,4EACjB,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5E/D,kHAGA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED0CY,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIT,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,CAAC,YACX,eAAe,EAAA,QAAA,EAAA,kHAAA,EAAA;yUA4BsB,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACvB,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACjB,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE5E/D;AAEA;;;;;AAKG;AAQH,MAAM,SAAS,GAAoC;AACjD,IAAA,OAAO,EAAE;AACP,QAAA,2CAA2C,EAAE;AAC3C,YAAA,OAAO,EACL,uHAAuH;AAC1H,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,sBAAsB;AAChC,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,iBAAiB;AAC3B,SAAA;AACD,QAAA,4CAA4C,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;AAClE,QAAA,kDAAkD,EAAE;AAClD,YAAA,OAAO,EAAE,oBAAoB;AAC9B,SAAA;AACF,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,2CAA2C,EAAE;AAC3C,YAAA,OAAO,EACL,2IAA2I;AAC9I,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,wBAAwB;AAClC,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,oBAAoB;AAC9B,SAAA;AACD,QAAA,4CAA4C,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;AACnE,QAAA,kDAAkD,EAAE;AAClD,YAAA,OAAO,EAAE,uBAAuB;AACjC,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,2CAA2C,EAAE;AAC3C,YAAA,OAAO,EACL,qJAAqJ;AACxJ,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,2BAA2B;AACrC,SAAA;AACD,QAAA,0DAA0D,EAAE;AAC1D,YAAA,OAAO,EAAE,gCAAgC;AAC1C,SAAA;AACD,QAAA,4CAA4C,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;AACnE,QAAA,kDAAkD,EAAE;AAClD,YAAA,OAAO,EAAE,6BAA6B;AACvC,SAAA;AACF,KAAA;CACF;AAED,sBAAsB,CAAC,YAAY,CAAC,SAAS,CAAC;AAE9C;;AAEG;MAIU,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAFzB,aAAa,CAAA,EAAA,CAAA,CAAA;AAEZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YAFzB,aAAa,CAAA,EAAA,CAAA,CAAA;;2FAEZ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;;MCnEqB,yBAAyB,CAAA;AAG9C;MASY,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;AAQqB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpD,IAAA;8GAHY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB/B,ynDAyDA,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5CY,wBAAwB,8BAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,EAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKvC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,wBAAwB,EAAE,cAAc,CAAC,EAAA,QAAA,EACzC,uBAAuB,EAAA,QAAA,EAAA,ynDAAA,EAAA,MAAA,EAAA,CAAA,u4CAAA,CAAA,EAAA;;;MEStB,gBAAgB,CAAA;AAN7B,IAAA,WAAA,GAAA;AAOW,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEjC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AAEtD;;;;;AAKG;AACgB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;AAkBhD,IAAA;AA9BU,IAAA,WAAW;AACX,IAAA,SAAS;AACT,IAAA,SAAS;IAYR,kBAAkB,GAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACvD,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,yBAAyB;AAClC,oBAAA,QAAQ,EAAE;AACR,wBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,wBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC9B,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACpD;8GA9BW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB7B,yiBAoBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDY,wBAAwB,8BAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAI1C,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,wBAAwB,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAC5C,oBAAoB,EAAA,QAAA,EAAA,yiBAAA,EAAA;;;MEDnB,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;AAQkB,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAwB;AACrD,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAwB;AACrD,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;QACtC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QACzB,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiC;QAC3D,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE/B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,OAAO,oBAAoB,IAAI,CAAC,YAAY,EAAE,EAAE;AAClD,QAAA,CAAC,wDAAC;AACH,IAAA;8GAXY,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB5B,6oBAwBA,EAAA,MAAA,EAAA,CAAA,8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVY,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,EAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKlB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,mBAAmB,CAAC,YACpB,mBAAmB,EAAA,QAAA,EAAA,6oBAAA,EAAA,MAAA,EAAA,CAAA,8CAAA,CAAA,EAAA;;;AENxB,MAAM,qBAAqB,GAAyB,CAAU;AAE/D,SAAU,4BAA4B,CAC1C,KAAc,EAAA;IAEd,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,qBAAqB,CAAC;AAEjE,IAAA,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE;AAC/B,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,OAAO,qBAAqB;AAC9B;AAEA,SAAS,cAAc,CAAC,KAAc,EAAA;AACpC,IAAA,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;AACjE;;AChBO,MAAM,qBAAqB,GAAyB,CAAU;AAE/D,SAAU,4BAA4B,CAC1C,KAAc,EAAA;IAEd,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,qBAAqB,CAAC;AAEjE,IAAA,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE;AAC/B,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,OAAO,qBAAqB;AAC9B;AAEA,SAAS,cAAc,CAAC,KAAc,EAAA;AACpC,IAAA,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;AACjE;;MCjBa,kBAAkB,CAAA;AAN/B,IAAA,WAAA,GAAA;AAOkB,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAAU;AAC1D,IAAA;8GAFY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8OAFnB,CAAA,sBAAA,CAAwB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ooBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,sBAAsB,YAEtB,CAAA,sBAAA,CAAwB,EAAA,MAAA,EAAA,CAAA,ooBAAA,CAAA,EAAA;;;ACwBpC;;;;AAIG;MAeU,QAAQ,CAAA;AAdrB,IAAA,WAAA,GAAA;AAeE;;AAEG;QACa,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,KAAK,0DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE7E;;;AAGG;QACa,IAAA,CAAA,YAAY,GAAG,KAAK,CAClC,qBAAqB,yDAEnB,SAAS,EAAE,4BAA4B,EAAA,CAE1C;AAED;;;AAGG;QACa,IAAA,CAAA,YAAY,GAAG,KAAK,CAClC,qBAAqB,yDAEnB,SAAS,EAAE,4BAA4B,EAAA,CAE1C;AAED;;AAEG;AACa,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAU;AAEtD;;;;AAIG;QACa,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEzC;;;;AAIG;QACa,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiC;AAE3E;;AAEG;QACa,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAElD;;;;;AAKG;QACa,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK,oDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEvE;;AAEG;QACa,IAAA,CAAA,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAEvC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;;;;QAKxC,IAAA,CAAA,YAAY,GAAG,QAAQ,CAC9B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,CAAC,OAAO,KAChB;AACE,cAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI;AACnE,cAAE,EAAE,CAAC,SAAS,CAAC,CAClB,CACF,EACD,EAAE,YAAY,EAAE,SAAS,EAAE,CAC5B;AAEkB,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC7C,MAAM,KAAK,GAAa,EAAE;;;;;AAM1B,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;gBAE5C,KAAK,CAAC,IAAI,CACR;sBACI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,EAAK,cAAc,CAAA;AAC1C,sBAAE,IAAI,CAAC,WAAW,EAAE,CACvB;YACH;;;;AAKA,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;YAEvC,IAAI,WAAW,EAAE;AACf,gBAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YACzB;AAEA,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AACnD,QAAA,CAAC,uDAAC;AACH,IAAA;AA7CU,IAAA,aAAa;AACb,IAAA,SAAS;;;;AAKT,IAAA,YAAY;8GAvEV,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EALR,CAAC,oBAAoB,CAAC,0BC5CnC,y5BA8BA,EAAA,MAAA,EAAA,CAAA,8wEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,wBAAwB,8BACxB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,GAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,2BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAOJ,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;sCACS,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,gBAAgB;wBAChB,eAAe;wBACf,kBAAkB;wBAClB,wBAAwB;wBACxB,aAAa;AACd,qBAAA,EAAA,SAAA,EACU,CAAC,oBAAoB,CAAC,EAAA,QAAA,EACvB,WAAW,EAAA,QAAA,EAAA,y5BAAA,EAAA,MAAA,EAAA,CAAA,8wEAAA,CAAA,EAAA;;;AE7CvB;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/charts",
3
- "version": "14.18.0",
3
+ "version": "14.19.1",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -18,13 +18,13 @@
18
18
  "peerDependencies": {
19
19
  "@angular/cdk": "^21.2.0",
20
20
  "@angular/core": "^21.2.0",
21
- "@skyux/core": "14.18.0",
22
- "@skyux/help-inline": "14.18.0",
23
- "@skyux/i18n": "14.18.0",
24
- "@skyux/indicators": "14.18.0",
25
- "@skyux/modals": "14.18.0",
26
- "@skyux/popovers": "14.18.0",
27
- "@skyux/theme": "14.18.0"
21
+ "@skyux/core": "14.19.1",
22
+ "@skyux/help-inline": "14.19.1",
23
+ "@skyux/i18n": "14.19.1",
24
+ "@skyux/indicators": "14.19.1",
25
+ "@skyux/modals": "14.19.1",
26
+ "@skyux/popovers": "14.19.1",
27
+ "@skyux/theme": "14.19.1"
28
28
  },
29
29
  "dependencies": {
30
30
  "chart.js": "4.5.1",