@slotted/angular 0.1.0-beta.3 → 0.1.0-beta.5
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.
- package/docs/AGENTS.snippet.md +2 -0
- package/docs/app-shell.examples.md +1 -1
- package/docs/app-shell.json +4 -4
- package/docs/app-shell.md +2 -2
- package/docs/calendar.json +7 -0
- package/docs/calendar.md +1 -0
- package/docs/date-field.json +8 -1
- package/docs/date-field.md +2 -1
- package/docs/date-picker.examples.md +36 -0
- package/docs/date-picker.json +20 -5
- package/docs/date-picker.md +5 -4
- package/docs/guidelines/README.md +2 -2
- package/docs/guidelines/composition.md +10 -0
- package/docs/guidelines/index.md +3 -1
- package/docs/guidelines/list-pages.md +12 -1
- package/docs/guidelines/own-elements.md +1 -1
- package/docs/page-header.json +1 -0
- package/docs/page-header.md +1 -1
- package/docs/page.json +1 -0
- package/docs/page.md +1 -0
- package/docs/skills/build-own-element/SKILL.md +6 -6
- package/docs/skills/compose-screen/SKILL.md +13 -6
- package/docs/skills/review-screen/SKILL.md +6 -6
- package/docs/skills/theme-app/SKILL.md +1 -1
- package/docs/skills/waiting-states/SKILL.md +2 -2
- package/docs/table.json +13 -0
- package/docs/table.md +3 -1
- package/docs/tabs.json +13 -3
- package/docs/tabs.md +3 -2
- package/docs/text-field.json +1 -1
- package/docs/text-field.md +1 -1
- package/fesm2022/slotted-angular-app-shell.mjs +15 -9
- package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
- package/fesm2022/slotted-angular-calendar.mjs +158 -33
- package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
- package/fesm2022/slotted-angular-cascader.mjs +7 -1
- package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
- package/fesm2022/slotted-angular-chart.mjs +13 -3
- package/fesm2022/slotted-angular-chart.mjs.map +1 -1
- package/fesm2022/slotted-angular-combobox.mjs +25 -4
- package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
- package/fesm2022/slotted-angular-data-grid.mjs +2 -2
- package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-field.mjs +35 -12
- package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-picker.mjs +95 -33
- package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-date-range-picker.mjs +5 -7
- package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-picker.mjs +5 -7
- package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-datetime-range-picker.mjs +5 -7
- package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-entity-picker.mjs +7 -1
- package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-filter-bar.mjs +1 -1
- package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
- package/fesm2022/slotted-angular-import-export-center.mjs +1 -1
- package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
- package/fesm2022/slotted-angular-multi-select.mjs +24 -3
- package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-page-header.mjs +2 -2
- package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
- package/fesm2022/slotted-angular-page.mjs +20 -1
- package/fesm2022/slotted-angular-page.mjs.map +1 -1
- package/fesm2022/slotted-angular-popover.mjs +7 -1
- package/fesm2022/slotted-angular-popover.mjs.map +1 -1
- package/fesm2022/slotted-angular-scroll-area.mjs +6 -2
- package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
- package/fesm2022/slotted-angular-select.mjs +49 -17
- package/fesm2022/slotted-angular-select.mjs.map +1 -1
- package/fesm2022/slotted-angular-stat-card.mjs +2 -2
- package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
- package/fesm2022/slotted-angular-table.mjs +24 -6
- package/fesm2022/slotted-angular-table.mjs.map +1 -1
- package/fesm2022/slotted-angular-tabs.mjs +13 -6
- package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-picker.mjs +4 -6
- package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-time-range-picker.mjs +4 -6
- package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
- package/fesm2022/slotted-angular-tooltip.mjs +7 -1
- package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
- package/package.json +3 -3
- package/types/slotted-angular-app-shell.d.ts +5 -3
- package/types/slotted-angular-app-shell.d.ts.map +1 -1
- package/types/slotted-angular-calendar.d.ts +28 -2
- package/types/slotted-angular-calendar.d.ts.map +1 -1
- package/types/slotted-angular-cascader.d.ts.map +1 -1
- package/types/slotted-angular-chart.d.ts +1 -0
- package/types/slotted-angular-chart.d.ts.map +1 -1
- package/types/slotted-angular-combobox.d.ts +4 -0
- package/types/slotted-angular-combobox.d.ts.map +1 -1
- package/types/slotted-angular-date-field.d.ts +11 -1
- package/types/slotted-angular-date-field.d.ts.map +1 -1
- package/types/slotted-angular-date-picker.d.ts +38 -12
- package/types/slotted-angular-date-picker.d.ts.map +1 -1
- package/types/slotted-angular-date-range-picker.d.ts +0 -1
- package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
- package/types/slotted-angular-datetime-range-picker.d.ts +0 -1
- package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-entity-picker.d.ts.map +1 -1
- package/types/slotted-angular-multi-select.d.ts +4 -0
- package/types/slotted-angular-multi-select.d.ts.map +1 -1
- package/types/slotted-angular-page.d.ts.map +1 -1
- package/types/slotted-angular-popover.d.ts.map +1 -1
- package/types/slotted-angular-scroll-area.d.ts.map +1 -1
- package/types/slotted-angular-select.d.ts +12 -2
- package/types/slotted-angular-select.d.ts.map +1 -1
- package/types/slotted-angular-table.d.ts +17 -2
- package/types/slotted-angular-table.d.ts.map +1 -1
- package/types/slotted-angular-tabs.d.ts +3 -4
- package/types/slotted-angular-tabs.d.ts.map +1 -1
- package/types/slotted-angular-time-picker.d.ts +0 -1
- package/types/slotted-angular-time-picker.d.ts.map +1 -1
- package/types/slotted-angular-time-range-picker.d.ts +0 -1
- package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
- package/types/slotted-angular-tooltip.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slotted-angular-chart.mjs","sources":["../../chart/src/chart-defaults.ts","../../chart/src/chart-templates.ts","../../chart/src/chart.ts","../../chart/src/chart.html","../../chart/src/slotted-angular-chart.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { ChartGrid } from '@slotted/core/chart';\n\nexport type ChartSize = 'sm' | 'md' | 'lg';\nexport type ChartVariant = 'plain' | 'card';\nexport type ChartPalette = 'categorical' | 'sequential' | 'focus';\nexport type ChartToolbar = 'visible' | 'hover' | 'none';\nexport type ChartRenderer = 'auto' | 'svg' | 'canvas';\nexport type ChartLegendOverflow = 'collapse' | 'wrap';\n\nexport interface ChartTooltipSettings {\n readonly sort?: 'none' | 'asc' | 'desc';\n readonly total?: boolean;\n readonly indicator?: 'dot' | 'line' | 'none';\n}\n\n/** What every chart in an application does before any of them states its own. */\nexport interface ChartDefaults {\n size?: ChartSize;\n variant?: ChartVariant;\n palette?: ChartPalette;\n toolbar?: ChartToolbar;\n renderer?: ChartRenderer;\n grid?: ChartGrid;\n legendOverflow?: ChartLegendOverflow;\n tooltip?: ChartTooltipSettings;\n animate?: boolean;\n}\n\nexport const CHART_DEFAULTS_TOKEN = new InjectionToken<ChartDefaults>('slotted chart defaults', {\n providedIn: 'root',\n factory: (): ChartDefaults => ({}),\n});\n\n/**\n * An application decides once how its charts look — the tile or the plain\n * form, the palette, the toolbar — and every chart inherits the decision. A\n * chart that states any of them still wins: an explicit input is never\n * overridden by the token. The words and the locale come from the language in\n * force (`provideSlotted`).\n */\nexport function provideChartDefaults(defaults: ChartDefaults) {\n return { provide: CHART_DEFAULTS_TOKEN, useValue: defaults };\n}\n\nexport function injectChartDefaults(): ChartDefaults {\n return inject(CHART_DEFAULTS_TOKEN);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport type { ChartLegendEntry, ChartModel, ChartTooltipContext } from '@slotted/core/chart';\n\n/** What a `slChartTooltip` template is handed. */\nexport interface ChartTooltipTemplateContext {\n $implicit: ChartTooltipContext;\n model: ChartModel;\n}\n\n/** Replaces the tooltip's content. The box, its place and its timing stay the chart's. */\n@Directive({ selector: 'ng-template[slChartTooltip]', standalone: true })\nexport class SlChartTooltip {\n readonly template = inject<TemplateRef<ChartTooltipTemplateContext>>(TemplateRef);\n}\n\n/** What a `slChartLegendItem` template is handed for one entry. */\nexport interface ChartLegendItemTemplateContext {\n $implicit: ChartLegendEntry;\n value: string;\n current: boolean;\n}\n\n/**\n * Replaces what one legend item holds. The item — a toggle with its pressed\n * state, its colour and its place in the roving tab stop — stays the chart's.\n */\n@Directive({ selector: 'ng-template[slChartLegendItem]', standalone: true })\nexport class SlChartLegendItem {\n readonly template = inject<TemplateRef<ChartLegendItemTemplateContext>>(TemplateRef);\n}\n\n/** Replaces the words in a donut's centre. */\n@Directive({ selector: 'ng-template[slChartCenter]', standalone: true })\nexport class SlChartCenter {\n readonly template = inject<TemplateRef<{ $implicit: ChartModel }>>(TemplateRef);\n}\n\n/** Replaces the empty plot: `no-data`, or `all-hidden`. */\n@Directive({ selector: 'ng-template[slChartEmpty]', standalone: true })\nexport class SlChartEmpty {\n readonly template = inject<TemplateRef<{ $implicit: 'no-data' | 'all-hidden' }>>(TemplateRef);\n}\n\n/** Replaces the failed plot. */\n@Directive({ selector: 'ng-template[slChartError]', standalone: true })\nexport class SlChartError {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injectable,\n InjectionToken,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n cachedChartTheme,\n categoryIndex,\n chartKeyAction,\n chartTable,\n chartToCsv,\n createChartModel,\n createLatestAnnouncer,\n defaultTrigger,\n describeChart,\n describePoint,\n describeZoom,\n firstPoint,\n FULL_ZOOM,\n isDrawn,\n isFullZoom,\n observeChartTheme,\n placeLayer,\n placeTooltip,\n readChartTheme,\n sameTheme,\n seriesOf,\n toggleHidden,\n TOOLTIP_DOCK_WIDTH,\n tooltipContext,\n trackModality,\n} from '@slotted/core/chart';\nimport { chartMessages, type ChartMessages, type PartialMessages } from '@slotted/core/i18n';\nimport type {\n ChartAnnotation,\n ChartColor,\n ChartGrid,\n ChartLegendEntry,\n ChartModel,\n ChartOrientation,\n ChartPoint,\n ChartRecord,\n ChartSeries,\n ChartSpec,\n ChartStackMode,\n ChartTheme,\n ChartTooltipContext,\n ChartTrigger,\n ChartXAxis,\n ChartYAxis,\n ChartZoom,\n} from '@slotted/core/chart';\nimport { mountChartEngine } from '@slotted/core/chart-echarts';\nimport type { ChartEngine, ChartPointLocation } from '@slotted/core/chart-echarts';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { collapseState } from '@slotted/core/overflow';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nimport {\n injectChartDefaults,\n type ChartLegendOverflow,\n type ChartPalette,\n type ChartRenderer,\n type ChartSize,\n type ChartToolbar,\n type ChartTooltipSettings,\n type ChartVariant,\n} from './chart-defaults';\nimport {\n SlChartCenter,\n SlChartEmpty,\n SlChartError,\n SlChartLegendItem,\n SlChartTooltip,\n} from './chart-templates';\n\n/**\n * The engine a chart mounts. `@slotted/core/chart-echarts` by default; a test\n * provides a recording one, and an application could provide another that\n * answers the same three calls.\n */\nexport const CHART_ENGINE = new InjectionToken<typeof mountChartEngine>('slotted chart engine', {\n providedIn: 'root',\n factory: () => mountChartEngine,\n});\n\n/** Unique ids for the chart's parts, stable across a server render. */\n@Injectable({ providedIn: 'root' })\nexport class SlChartIdFactory {\n private count = 0;\n next() {\n this.count += 1;\n return `sl-chart-${this.count}`;\n }\n}\n\n/** The imperative actions a template cannot express. */\nexport interface ChartHandle {\n focus(): void;\n resetZoom(): void;\n toDataURL(): string | null;\n toCsv(): string;\n}\n\ninterface Overlay {\n readonly crosshair: (ChartPointLocation & { readonly isBand: boolean }) | null;\n readonly markers: readonly {\n readonly key: string;\n readonly color: ChartColor;\n readonly at: ChartPointLocation;\n readonly selected: boolean;\n readonly current: boolean;\n }[];\n readonly tooltip: ChartTooltipContext | null;\n readonly docked: boolean;\n}\n\nconst NO_OVERLAY: Overlay = { crosshair: null, markers: [], tooltip: null, docked: false };\nconst samePoint = (a: ChartPoint | null, b: ChartPoint | null) =>\n a === b || (a !== null && b !== null && a.series === b.series && a.key === b.key);\nconst sameList = (a: readonly string[], b: readonly string[]) =>\n a.length === b.length && a.every((value, index) => value === b[index]);\nconst sameZoom = (a: ChartZoom, b: ChartZoom) => a.start === b.start && a.end === b.end;\n\nfunction lastDrawn(values: readonly (number | null)[]) {\n for (let index = values.length - 1; index >= 0; index -= 1)\n if (values[index] !== null) return index;\n return -1;\n}\n\nfunction focusVisible(element: Element) {\n try {\n return element.matches(':focus-visible');\n } catch {\n return false;\n }\n}\n\n/**\n * A figure: a caption that names it, a toolbar of its own controls, a legend\n * of toggles, and a plot the engine draws marks into and the family draws\n * every interaction over. The engine is ECharts, loaded on demand by\n * `@slotted/core/chart-echarts`, one chunk per kind; everything a reader\n * operates is this component's template.\n *\n * Each mutable value is a `model()` — two-way, so a template binds it with\n * `[(hidden)]` — and each move is first asked through a `*ChangeRequest`\n * output carrying the reason and the event, which a handler may cancel. The\n * model, the keyboard, the text alternatives and the theme are\n * `@slotted/core/chart`'s, shared with the React binding.\n */\n@Component({\n selector: 'figure[slChart]',\n standalone: true,\n imports: [NgTemplateOutlet, SlGlyph, SlIcon],\n templateUrl: './chart.html',\n styleUrls: [\n '../../../styles/src/button/button.css',\n '../../../styles/src/result-state/result-state.css',\n '../../../styles/src/skeleton/skeleton.css',\n '../../../styles/src/chart/chart.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slChart',\n host: {\n 'data-ui': 'chart',\n 'data-part': 'root',\n '[attr.title]': 'null',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-palette]': 'resolvedPalette()',\n '[attr.data-toolbar]': 'resolvedToolbar()',\n '[attr.data-legend-overflow]': 'resolvedLegendOverflow()',\n '[attr.data-loading]': 'loading() ? \"\" : null',\n '[attr.data-fullscreen]': 'fullscreen() ? \"\" : null',\n '(keydown)': 'onRootKeyDown($event)',\n },\n})\nexport class SlChart implements ChartHandle {\n /* ── What is drawn ─────────────────────────────────────────────────── */\n readonly data = input<readonly ChartRecord[]>([]);\n readonly series = input<readonly ChartSeries[]>([]);\n readonly x = input<ChartXAxis | undefined>(undefined);\n readonly y = input<ChartYAxis | readonly [ChartYAxis, ChartYAxis] | undefined>(undefined);\n readonly orientation = input<ChartOrientation | undefined>(undefined);\n readonly stackMode = input<ChartStackMode | undefined>(undefined);\n readonly annotations = input<readonly ChartAnnotation[] | undefined>(undefined);\n readonly recordKey = input<string | undefined>(undefined);\n readonly locale = input<string | undefined>(undefined);\n\n /* ── The words around it ───────────────────────────────────────────── */\n /** The chart's name: the caption, and the plot's accessible name. The host's native tooltip is removed. */\n readonly title = input<string | undefined>(undefined);\n readonly description = input<string | undefined>(undefined);\n /** A note behind an information control beside the title. */\n readonly help = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * toolbar, the legend, the states and the sentences a screen reader hears.\n */\n readonly messages = input<PartialMessages<ChartMessages> | undefined>(undefined);\n\n /* ── How it looks ──────────────────────────────────────────────────── */\n readonly size = input<ChartSize | undefined>(undefined);\n readonly variant = input<ChartVariant | undefined>(undefined);\n readonly palette = input<ChartPalette | undefined>(undefined);\n readonly toolbar = input<ChartToolbar | undefined>(undefined);\n readonly grid = input<ChartGrid | undefined>(undefined);\n readonly texture = input(false, { transform: booleanAttribute });\n readonly renderer = input<ChartRenderer | undefined>(undefined);\n readonly sampling = input<'auto' | 'none' | undefined>(undefined);\n readonly animate = input<boolean | undefined>(undefined);\n readonly legend = input(true, { transform: booleanAttribute });\n readonly legendInteractive = input(true, { transform: booleanAttribute });\n readonly legendValues = input(false, { transform: booleanAttribute });\n readonly legendOverflow = input<ChartLegendOverflow | undefined>(undefined);\n readonly trigger = input<ChartTrigger | undefined>(undefined);\n readonly tooltip = input<ChartTooltipSettings | undefined>(undefined);\n readonly zoomable = input(false, { transform: booleanAttribute });\n readonly selectable = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly error = input(false, { transform: booleanAttribute });\n /** The engine's option, before it is drawn: the escape hatch for what the contract does not say yet. */\n readonly extendOption = input<\n ((option: Record<string, unknown>) => Record<string, unknown>) | undefined\n >(undefined);\n\n /* ── State: two-way, each move asked first ─────────────────────────── */\n readonly hidden = model<readonly string[]>([]);\n readonly activePoint = model<ChartPoint | null>(null);\n readonly selection = model<ChartPoint | null>(null);\n readonly zoom = model<ChartZoom>(FULL_ZOOM);\n readonly tableOpen = model<boolean>(false);\n readonly fullscreen = model<boolean>(false);\n\n readonly hiddenChangeRequest = output<ChangeRequest<readonly string[]>>();\n readonly activePointChangeRequest = output<ChangeRequest<ChartPoint | null>>();\n readonly selectionChangeRequest = output<ChangeRequest<ChartPoint | null>>();\n readonly zoomChangeRequest = output<ChangeRequest<ChartZoom>>();\n readonly tableOpenChangeRequest = output<ChangeRequest<boolean>>();\n readonly fullscreenChangeRequest = output<ChangeRequest<boolean>>();\n /** The reader pressed the retry of the failed plot. */\n readonly retry = output<void>();\n\n /* ── Composition ───────────────────────────────────────────────────── */\n protected readonly tooltipTemplate = contentChild(SlChartTooltip);\n protected readonly legendItemTemplate = contentChild(SlChartLegendItem);\n protected readonly centerTemplate = contentChild(SlChartCenter);\n protected readonly emptyTemplate = contentChild(SlChartEmpty);\n protected readonly errorTemplate = contentChild(SlChartError);\n\n private readonly defaults = injectChartDefaults();\n private readonly mountEngine = inject(CHART_ENGINE);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n protected readonly id = inject(SlChartIdFactory).next();\n\n protected readonly plotRef = viewChild<ElementRef<HTMLDivElement>>('plot');\n protected readonly canvasRef = viewChild<ElementRef<HTMLDivElement>>('canvas');\n protected readonly tooltipRef = viewChild<ElementRef<HTMLDivElement>>('tooltipBox');\n protected readonly legendRef = viewChild<ElementRef<HTMLDivElement>>('legendRow');\n protected readonly menuRef = viewChild<ElementRef<HTMLDivElement>>('menu');\n protected readonly moreRef = viewChild<ElementRef<HTMLDivElement>>('moreLayer');\n protected readonly helpRef = viewChild<ElementRef<HTMLDivElement>>('helpLayer');\n\n private engine: ChartEngine | null = null;\n private readonly engineFailure = signal<unknown>(null);\n protected readonly theme = signal<ChartTheme | null>(null);\n protected readonly overlay = signal<Overlay>(NO_OVERLAY);\n protected readonly collapsed = signal<readonly number[]>([]);\n protected readonly legendFocus = signal<string | null>(null);\n protected readonly layerOpen = signal<Record<string, boolean>>({});\n private readonly widths = new Map<string, number>();\n private readonly modality = trackModality(this.host);\n private readonly pointAnnouncer = createLatestAnnouncer((message) =>\n getLiveAnnouncer().announce(message),\n );\n\n /* ── Derived ───────────────────────────────────────────────────────── */\n /** The family's words in the language in force, with this chart's `messages` laid over them. */\n protected readonly t = injectMessages(chartMessages, this.messages);\n private readonly appLocale = injectLocale();\n /** The name of the control holding the series the legend has no room for. */\n protected readonly legendMoreName = computed(() => {\n const legend = this.chartModel()?.legend ?? [];\n const names = this.collapsed().map((index) => legend[index]?.label ?? '');\n return this.t('legendMore', {\n series: new Intl.ListFormat(this.locale() ?? this.appLocale(), { type: 'unit' }).format(\n names,\n ),\n });\n });\n protected readonly resolvedSize = computed(() => this.size() ?? this.defaults.size ?? 'md');\n protected readonly resolvedVariant = computed(\n () => this.variant() ?? this.defaults.variant ?? 'plain',\n );\n protected readonly resolvedPalette = computed(\n () => this.palette() ?? this.defaults.palette ?? 'categorical',\n );\n protected readonly resolvedToolbar = computed(\n () => this.toolbar() ?? this.defaults.toolbar ?? 'visible',\n );\n protected readonly resolvedLegendOverflow = computed(\n () => this.legendOverflow() ?? this.defaults.legendOverflow ?? 'collapse',\n );\n protected readonly resolvedTooltip = computed<ChartTooltipSettings>(() => ({\n ...this.defaults.tooltip,\n ...this.tooltip(),\n }));\n\n private readonly spec = computed<ChartSpec>(() => ({\n data: this.data(),\n series: this.series(),\n x: this.x(),\n y: this.y(),\n orientation: this.orientation(),\n stackMode: this.stackMode(),\n annotations: this.annotations(),\n recordKey: this.recordKey(),\n locale: this.locale() ?? this.appLocale(),\n }));\n private readonly built = computed(() => {\n try {\n return {\n model: createChartModel(this.spec(), { hidden: this.hidden() }) as ChartModel | null,\n failure: null as unknown,\n };\n } catch (failure) {\n return { model: null, failure };\n }\n });\n protected readonly chartModel = computed(() => this.built().model);\n protected readonly failed = computed(\n () => this.error() || this.built().failure !== null || this.engineFailure() !== null,\n );\n protected readonly drawable = computed(() => {\n const current = this.chartModel();\n return Boolean(current && !this.loading() && !this.failed() && !current.empty);\n });\n protected readonly usable = computed(() => {\n const current = this.chartModel();\n return Boolean(current && !this.loading() && !this.failed() && current.empty !== 'no-data');\n });\n protected readonly resolvedTrigger = computed(() => {\n const current = this.chartModel();\n return current ? (this.trigger() ?? defaultTrigger(current)) : 'none';\n });\n protected readonly activeKey = computed(() => {\n const current = this.chartModel();\n const point = this.activePoint();\n return point && current && isDrawn(current, point) ? point.key : null;\n });\n protected readonly summary = computed(() => {\n if (this.loading()) return this.t('loading');\n if (this.failed()) return this.t('error');\n const current = this.chartModel();\n return current ? describeChart(current, this.t) : '';\n });\n protected readonly skeletonKind = computed(() => {\n const kinds = this.series().map((entry) => entry.kind);\n if (kinds.includes('pie')) return 'pie';\n return kinds.every((kind) => kind === 'line' || kind === 'area') ? 'line' : 'bar';\n });\n protected readonly legendWaiting = computed(() => {\n const current = this.chartModel();\n return this.loading() && (!current || current.shape === 'pie' || current.legend.length === 0);\n });\n protected readonly table = computed(() => {\n const current = this.chartModel();\n return this.tableOpen() && this.usable() && current ? chartTable(current, this.t) : null;\n });\n protected readonly rowKeys = computed(() => {\n const entries = this.chartModel()?.legend ?? [];\n const hiddenIndexes = this.collapsed();\n return entries.filter((_, index) => !hiddenIndexes.includes(index)).map((entry) => entry.key);\n });\n protected readonly rovingKey = computed(() => {\n const focus = this.legendFocus();\n const keys = this.rowKeys();\n return focus && keys.includes(focus) ? focus : (keys[0] ?? null);\n });\n protected readonly describedBy = computed(() =>\n this.description() !== undefined\n ? `${this.id}-description ${this.id}-summary`\n : `${this.id}-summary`,\n );\n protected readonly repeat = (count: number) => Array.from({ length: count }, (_, index) => index);\n\n /** The frame a theme read waits for; see `loadTheme`. */\n private themeFrame = 0;\n\n /**\n * The theme at the plot: the one another chart already read in the same\n * context, or a read on the next frame. A read computes styles, and right\n * after a render it forced a style recalculation of everything rendered.\n */\n private loadTheme(plot: HTMLElement) {\n const cached = cachedChartTheme(plot);\n if (cached) {\n if (this.themeFrame) cancelAnimationFrame(this.themeFrame);\n this.themeFrame = 0;\n this.applyTheme(cached);\n return;\n }\n if (this.themeFrame) return;\n this.themeFrame = requestAnimationFrame(() => {\n this.themeFrame = 0;\n this.applyTheme(readChartTheme(plot));\n });\n }\n\n private applyTheme(next: ChartTheme) {\n if (!sameTheme(untracked(this.theme), next)) this.theme.set(next);\n }\n\n constructor() {\n afterNextRender(() => {\n const plot = this.plotRef()?.nativeElement;\n const canvas = this.canvasRef()?.nativeElement;\n if (!plot || !canvas) return;\n const stop = observeChartTheme(plot, () => this.applyTheme(readChartTheme(plot)));\n this.engine = this.mountEngine(canvas, {\n onPointer: (point, source) => {\n if (point) this.requestActive(point, 'pointer', source);\n else if (document.activeElement !== plot) this.requestActive(null, 'pointer', source);\n },\n onPress: (point, source) => {\n if (!this.selectable() || !point) return;\n this.requestSelection(\n samePoint(this.selection(), point) ? null : point,\n 'pointer',\n source,\n );\n },\n onZoom: (next, source) => this.requestZoom(next, 'pointer', source),\n onRender: () => this.computeOverlay(),\n onError: (failure) => this.engineFailure.set(failure),\n });\n this.bump.update((value) => value + 1);\n const observer =\n typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.fitLegend());\n const legend = this.legendRef()?.nativeElement;\n if (legend && observer) observer.observe(legend);\n const onFullscreen = () => {\n if (document.fullscreenElement === this.host) this.native = true;\n else if (this.native) {\n this.native = false;\n if (this.fullscreen()) this.requestFullscreen(false, 'escape');\n }\n };\n document.addEventListener('fullscreenchange', onFullscreen);\n this.destroyRef.onDestroy(() => {\n stop();\n if (this.themeFrame) cancelAnimationFrame(this.themeFrame);\n observer?.disconnect();\n document.removeEventListener('fullscreenchange', onFullscreen);\n this.engine?.dispose();\n this.engine = null;\n this.modality.destroy();\n });\n });\n\n /* The theme at the plot, loaded again when a palette, a variant or the\n full screen repaint the root's tokens, which are the chart's own\n attributes and outside what the document observer watches. After the\n render, because the context a cached theme is found by includes them. */\n afterRenderEffect(() => {\n this.resolvedPalette();\n this.resolvedVariant();\n this.fullscreen();\n const plot = untracked(() => this.plotRef()?.nativeElement);\n if (plot) untracked(() => this.loadTheme(plot));\n });\n\n /* What the engine draws. */\n effect(() => {\n this.bump();\n const current = this.chartModel();\n const theme = this.theme();\n if (!this.engine || !theme || !current || !this.drawable()) return;\n void this.engine.update({\n model: current,\n theme,\n selection: this.selection(),\n zoom: this.zoom(),\n zoomable: this.zoomable(),\n grid: this.grid() ?? this.defaults.grid,\n texture: this.texture(),\n renderer: this.renderer() ?? this.defaults.renderer ?? 'auto',\n sampling: this.sampling(),\n trigger: this.resolvedTrigger(),\n animate: this.animate() ?? this.defaults.animate ?? true,\n extendOption: this.extendOption(),\n });\n });\n\n /* The overlay follows the point, the selection, the model and the view. */\n effect(() => {\n this.activePoint();\n this.selection();\n this.chartModel();\n this.drawable();\n this.tableOpen();\n untracked(() => this.computeOverlay());\n });\n\n /* Placed after the content is on the page, because its size decides where. */\n afterRenderEffect({\n write: () => {\n const overlay = this.overlay();\n const node = this.tooltipRef()?.nativeElement;\n const plot = this.plotRef()?.nativeElement;\n const point = this.activePoint();\n if (!node || !plot) return;\n if (!overlay.tooltip || !point) {\n this.tooltipWasOpen = false;\n return;\n }\n const at = this.engine?.locate(point);\n if (!at) return;\n if (!this.tooltipWasOpen) node.style.transition = 'none';\n const placement = placeTooltip({\n anchor: { x: at.x, y: at.y },\n size: { width: node.offsetWidth, height: node.offsetHeight },\n bounds: { width: plot.clientWidth, height: plot.clientHeight },\n dir: getComputedStyle(this.host).direction === 'rtl' ? 'rtl' : 'ltr',\n });\n node.style.setProperty('--slotted-chart-x', `${placement.x}px`);\n node.style.setProperty('--slotted-chart-y', `${placement.y}px`);\n if (!this.tooltipWasOpen) requestAnimationFrame(() => (node.style.transition = ''));\n this.tooltipWasOpen = true;\n },\n });\n\n /* One line of legend, measured after it is drawn. */\n afterRenderEffect({\n read: () => {\n this.chartModel();\n this.resolvedLegendOverflow();\n this.activeKey();\n this.fitLegend();\n },\n });\n }\n\n private readonly bump = signal(0);\n private native = false;\n private tooltipWasOpen = false;\n\n /* ── Requests ──────────────────────────────────────────────────────── */\n\n private ask<T>(\n value: { (): T; set(next: T): void },\n emit: (request: ChangeRequest<T>) => void,\n equals: (a: T, b: T) => boolean,\n next: T,\n reason: ChangeReason,\n source: unknown,\n ) {\n let cancelled = false;\n const state = createControllable<T>({\n initial: value(),\n equals,\n onRequest: (request) => {\n emit(request);\n cancelled = request.cancelled;\n },\n });\n if (state.request(next, reason, source) && !cancelled) value.set(next);\n }\n\n protected requestHidden(next: readonly string[], reason: ChangeReason, source?: unknown) {\n this.ask(\n this.hidden,\n (request) => this.hiddenChangeRequest.emit(request),\n sameList,\n next,\n reason,\n source,\n );\n }\n protected requestActive(next: ChartPoint | null, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.activePoint,\n (request) => this.activePointChangeRequest.emit(request),\n samePoint,\n next,\n reason,\n source,\n );\n }\n protected requestSelection(next: ChartPoint | null, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.selection,\n (request) => this.selectionChangeRequest.emit(request),\n samePoint,\n next,\n reason,\n source,\n );\n }\n protected requestZoom(next: ChartZoom, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.zoom,\n (request) => this.zoomChangeRequest.emit(request),\n sameZoom,\n next,\n reason,\n source,\n );\n }\n protected requestTable(next: boolean, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.tableOpen,\n (request) => this.tableOpenChangeRequest.emit(request),\n Object.is,\n next,\n reason,\n source,\n );\n }\n\n /**\n * The Fullscreen API when the page may use it and the reader asked; a layer\n * fixed over the page otherwise. A browser refuses the API outside the\n * press that asked for it, so it is asked here, inside the handler.\n */\n protected requestFullscreen(next: boolean, reason: ChangeReason, source?: unknown) {\n const before = this.fullscreen();\n this.ask(\n this.fullscreen,\n (request) => this.fullscreenChangeRequest.emit(request),\n Object.is,\n next,\n reason,\n source,\n );\n if (this.fullscreen() === before) return;\n if (next && document.fullscreenEnabled && reason !== 'programmatic' && reason !== 'escape') {\n this.host.requestFullscreen?.().catch(() => {});\n }\n if (!next && document.fullscreenElement === this.host) {\n this.native = false;\n document.exitFullscreen().catch(() => {});\n }\n }\n\n /** The reason the last activation came with: a pointer, a key, or the application. */\n protected pressReason(): ChangeReason {\n return this.modality.read();\n }\n\n /* ── Overlay ───────────────────────────────────────────────────────── */\n\n private computeOverlay() {\n const current = this.chartModel();\n const plot = this.plotRef()?.nativeElement;\n const engine = this.engine;\n if (!engine || !plot || !current || !this.drawable() || this.tableOpen()) {\n this.overlay.set(NO_OVERLAY);\n return;\n }\n const active = this.activePoint();\n const selected = this.selection();\n const trigger = this.resolvedTrigger();\n const markers: Overlay['markers'][number][] = [];\n if (selected && isDrawn(current, selected) && current.shape === 'cartesian') {\n const owner = seriesOf(current, selected.series);\n const at = engine.locate(selected);\n if (owner && owner.kind !== 'bar' && at) {\n markers.push({\n key: `selected-${owner.id}`,\n color: owner.color,\n at,\n selected: true,\n current: false,\n });\n }\n }\n if (current.shape === 'pie')\n engine.emphasize(active && isDrawn(current, active) ? active.key : null);\n const at = active && isDrawn(current, active) ? engine.locate(active) : null;\n if (!active || !at) {\n this.overlay.set({ crosshair: null, markers, tooltip: null, docked: false });\n return;\n }\n const hasBars = current.series.some((entry) => entry.visible && entry.kind === 'bar');\n const crosshair =\n current.shape === 'cartesian' && trigger === 'axis'\n ? { ...at, isBand: hasBars && current.xType === 'category' }\n : null;\n if (current.shape === 'cartesian') {\n const index = categoryIndex(current, active.key);\n const targets =\n trigger === 'axis'\n ? current.series.filter(\n (entry) => entry.visible && entry.kind !== 'bar' && entry.values[index] !== null,\n )\n : [seriesOf(current, active.series)].filter((entry): entry is NonNullable<typeof entry> =>\n Boolean(entry && entry.kind !== 'bar'),\n );\n for (const target of targets) {\n const spot = engine.locate({ series: target.id, key: active.key });\n if (spot)\n markers.push({\n key: target.id,\n color: target.color,\n at: spot,\n selected: false,\n current: target.id === active.series,\n });\n }\n }\n const settings = this.resolvedTooltip();\n const tooltip =\n trigger === 'none'\n ? null\n : tooltipContext(current, active, { trigger, sort: settings.sort, total: settings.total });\n this.overlay.set({\n crosshair,\n markers,\n tooltip,\n docked: plot.clientWidth < TOOLTIP_DOCK_WIDTH,\n });\n }\n\n protected px(value: number | undefined) {\n return value === undefined ? null : `${value}px`;\n }\n\n protected colorOf(color: ChartColor) {\n return {\n slot: color.type === 'slot' ? String(color.slot) : null,\n tone: color.type === 'tone' ? color.tone : null,\n overflow: color.type === 'overflow' ? '' : null,\n };\n }\n\n protected strokeOf(entry: { series: string } | ChartLegendEntry, key?: string) {\n const current = this.chartModel();\n if (!current) return null;\n const owner =\n current.shape === 'pie'\n ? current.series[0]\n : seriesOf(current, key ?? ('series' in entry ? entry.series : entry.key));\n return owner && owner.stroke !== 'solid' ? owner.stroke : null;\n }\n\n protected markerKind(kind: string, indicator?: string) {\n if (indicator === 'line' || kind === 'line') return 'line';\n if (kind === 'scatter') return 'scatter';\n return 'bar';\n }\n\n /* ── Legend ────────────────────────────────────────────────────────── */\n\n protected legendValue(entry: ChartLegendEntry) {\n const current = this.chartModel();\n if (!current) return '';\n const owner = current.shape === 'pie' ? current.series[0] : seriesOf(current, entry.key);\n if (!owner) return '';\n const key = this.activeKey();\n const index =\n current.shape === 'pie'\n ? categoryIndex(current, entry.key)\n : key\n ? categoryIndex(current, key)\n : lastDrawn(owner.values);\n const raw = index >= 0 ? owner.values[index] : null;\n return raw === null || raw === undefined ? '' : owner.format(raw);\n }\n\n protected isCurrent(entry: ChartLegendEntry) {\n const current = this.chartModel();\n const key = this.activeKey();\n if (!key) return false;\n return current?.shape === 'pie' ? entry.key === key : this.activePoint()?.series === entry.key;\n }\n\n protected toggleEntry(\n entry: ChartLegendEntry,\n mode: 'toggle' | 'isolate',\n reason: ChangeReason,\n source: unknown,\n ) {\n const current = this.chartModel();\n if (!current) return;\n const keys = current.legend.map((item) => item.key);\n const next = toggleHidden(keys, this.hidden(), entry.key, mode);\n this.legendFocus.set(entry.key);\n this.requestHidden(next, reason, source);\n getLiveAnnouncer().announce(\n this.t(next.includes(entry.key) ? 'hidden' : 'shown', { series: entry.label }),\n );\n }\n\n protected onLegendClick(entry: ChartLegendEntry, event: MouseEvent) {\n this.toggleEntry(entry, event.shiftKey ? 'isolate' : 'toggle', this.pressReason(), event);\n }\n\n protected onLegendItemKey(entry: ChartLegendEntry, event: KeyboardEvent) {\n if (event.key === 'Enter' && event.shiftKey) {\n event.preventDefault();\n this.toggleEntry(entry, 'isolate', 'keyboard', event);\n }\n }\n\n protected emphasize(key: string | null) {\n this.engine?.emphasize(key);\n }\n\n /* One tab stop for the row; the arrows move inside it (APG Toolbar). */\n protected onLegendKeyDown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n if (target.closest('[data-part=\"menu\"]')) return;\n const row = event.currentTarget as HTMLElement;\n const items = [...row.querySelectorAll<HTMLElement>(':scope > button:not([hidden])')];\n const index = items.indexOf(target);\n if (index === -1) return;\n const rtl = getComputedStyle(this.host).direction === 'rtl';\n const step =\n event.key === 'ArrowRight' ? (rtl ? -1 : 1) : event.key === 'ArrowLeft' ? (rtl ? 1 : -1) : 0;\n let next: HTMLElement | undefined;\n if (step) next = items[(index + step + items.length) % items.length];\n if (event.key === 'Home') next = items[0];\n if (event.key === 'End') next = items[items.length - 1];\n if (!next) return;\n event.preventDefault();\n this.legendFocus.set(next.dataset['key'] ?? '__more');\n next.focus();\n }\n\n /**\n * Which entries fit on the line, measured by `@slotted/core/overflow` —\n * the arithmetic `toolbar` folds its controls with. The rest wait behind\n * the `+N` control, where they toggle the same series.\n */\n private fitLegend() {\n const node = this.legendRef()?.nativeElement;\n const current = untracked(this.chartModel);\n if (!node || !current) return;\n if (untracked(this.resolvedLegendOverflow) === 'wrap') {\n if (untracked(this.collapsed).length) this.collapsed.set([]);\n return;\n }\n for (const item of node.querySelectorAll<HTMLElement>(':scope > [data-part=\"legend-item\"]')) {\n if (!item.hidden)\n this.widths.set(item.dataset['key'] ?? '', item.getBoundingClientRect().width);\n }\n const more = node.querySelector<HTMLElement>(':scope > [data-part=\"legend-more\"]');\n const result = collapseState({\n units: current.legend.map((entry) => ({\n size: this.widths.get(entry.key) ?? 0,\n collapsible: true,\n })),\n available: node.clientWidth,\n gap: Number.parseFloat(getComputedStyle(node).columnGap) || 0,\n triggerSize: more && !more.hidden ? more.getBoundingClientRect().width : 40,\n });\n const previous = untracked(this.collapsed);\n if (\n previous.length !== result.collapsed.length ||\n previous.some((value, index) => value !== result.collapsed[index])\n ) {\n this.collapsed.set(result.collapsed);\n }\n }\n\n /* ── Layers ────────────────────────────────────────────────────────── */\n\n protected toggleLayer(name: string) {\n const layer = this.layerElement(name);\n layer?.togglePopover?.();\n }\n\n protected onLayerToggle(\n name: string,\n event: Event,\n control: HTMLElement,\n align: 'start' | 'end',\n focusFirst = true,\n ) {\n const open = (event as ToggleEvent).newState === 'open';\n this.layerOpen.update((state) => ({ ...state, [name]: open }));\n const layer = this.layerElement(name);\n if (!layer) return;\n if (open) {\n const box = layer.getBoundingClientRect();\n const at = placeLayer({\n anchor: control.getBoundingClientRect(),\n size: { width: box.width, height: box.height },\n viewport: { width: window.innerWidth, height: window.innerHeight },\n align,\n dir: getComputedStyle(control).direction === 'rtl' ? 'rtl' : 'ltr',\n });\n layer.style.setProperty('--slotted-chart-x', `${at.x}px`);\n layer.style.setProperty('--slotted-chart-y', `${at.y}px`);\n if (focusFirst) layer.querySelector<HTMLElement>('button')?.focus();\n } else if (layer.contains(document.activeElement) || document.activeElement === document.body) {\n control.focus();\n }\n }\n\n protected onLayerKeyDown(event: KeyboardEvent) {\n const layer = event.currentTarget as HTMLElement;\n const items = [...layer.querySelectorAll<HTMLElement>('button')].filter((item) => !item.hidden);\n const index = items.indexOf(document.activeElement as HTMLElement);\n const step = event.key === 'ArrowDown' ? 1 : event.key === 'ArrowUp' ? -1 : 0;\n let next: HTMLElement | undefined;\n if (step) next = items[(index + step + items.length) % items.length];\n if (event.key === 'Home') next = items[0];\n if (event.key === 'End') next = items[items.length - 1];\n if (!next) return;\n event.preventDefault();\n next.focus();\n }\n\n private layerElement(name: string) {\n const ref =\n name === 'menu' ? this.menuRef() : name === 'more' ? this.moreRef() : this.helpRef();\n return ref?.nativeElement ?? null;\n }\n\n protected menuAction(action: 'view' | 'fullscreen' | 'csv' | 'image', event: Event) {\n const reason = this.pressReason();\n this.menuRef()?.nativeElement.hidePopover?.();\n const current = this.chartModel();\n if (action === 'view') this.requestTable(!this.tableOpen(), reason, event);\n if (action === 'fullscreen') this.requestFullscreen(!this.fullscreen(), reason, event);\n if (action === 'csv' && current) {\n this.download(\n `${this.fileName()}.csv`,\n `data:text/csv;charset=utf-8,${encodeURIComponent(chartToCsv(current, this.t))}`,\n );\n }\n if (action === 'image') {\n const url = this.engine?.toDataURL();\n if (url)\n this.download(\n `${this.fileName()}.${url.startsWith('data:image/svg') ? 'svg' : 'png'}`,\n url,\n );\n }\n }\n\n private fileName() {\n return this.title() ?? 'chart';\n }\n\n private download(filename: string, url: string) {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n }\n\n protected resetZoomFromToolbar(event: Event) {\n const current = this.chartModel();\n this.requestZoom(FULL_ZOOM, 'clear', event);\n if (current) getLiveAnnouncer().announce(describeZoom(current, FULL_ZOOM, this.t));\n this.plotRef()?.nativeElement.focus();\n }\n\n protected showAll(event: Event) {\n this.requestHidden([], 'pointer', event);\n }\n\n protected onRetry() {\n this.engineFailure.set(null);\n this.retry.emit();\n }\n\n protected zoomed() {\n const current = this.chartModel();\n return Boolean(this.zoomable() && !isFullZoom(this.zoom()) && current?.shape === 'cartesian');\n }\n\n /* ── Keyboard and focus ────────────────────────────────────────────── */\n\n protected onPlotKeyDown(event: KeyboardEvent) {\n const current = this.chartModel();\n if (!current || !this.drawable() || this.tableOpen()) return;\n const actions = chartKeyAction(\n current,\n {\n active: this.activePoint(),\n selection: this.selection(),\n zoom: this.zoom(),\n zoomable: this.zoomable(),\n selectable: this.selectable(),\n },\n event.key,\n );\n if (actions === null) return;\n event.preventDefault();\n for (const action of actions) {\n if (action.type === 'active') {\n this.requestActive(action.point, action.reason, event);\n if (action.point)\n this.pointAnnouncer.say(describePoint(current, action.point, this.selection(), this.t));\n else this.pointAnnouncer.cancel();\n } else if (action.type === 'select') {\n this.requestSelection(action.point, 'keyboard', event);\n if (action.point)\n this.pointAnnouncer.say(describePoint(current, action.point, action.point, this.t));\n } else {\n this.requestZoom(action.zoom, action.reason, event);\n getLiveAnnouncer().announce(describeZoom(current, action.zoom, this.t));\n }\n }\n }\n\n protected onPlotFocus(event: FocusEvent) {\n const current = this.chartModel();\n if (!current || !this.drawable() || this.tableOpen() || this.activePoint()) return;\n if (!focusVisible(event.currentTarget as Element)) return;\n const point = firstPoint(current);\n if (!point) return;\n this.requestActive(point, 'keyboard', event);\n this.pointAnnouncer.say(describePoint(current, point, this.selection(), this.t));\n }\n\n protected onRootKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented || event.key !== 'Escape' || !this.fullscreen()) return;\n event.preventDefault();\n this.requestFullscreen(false, 'escape', event);\n }\n\n /* ── Handle ────────────────────────────────────────────────────────── */\n\n focus() {\n this.plotRef()?.nativeElement.focus();\n }\n\n resetZoom() {\n this.requestZoom(FULL_ZOOM, 'programmatic');\n }\n\n toDataURL() {\n return this.engine?.toDataURL() ?? null;\n }\n\n toCsv() {\n const current = this.chartModel();\n return current ? chartToCsv(current, this.t) : '';\n }\n}\n","@let current = chartModel(); @if (title() !== undefined || description() !== undefined ||\nresolvedToolbar() !== 'none') {\n<figcaption data-part=\"header\">\n <div>\n <div>\n @if (title() !== undefined) {\n <span data-part=\"title\" [id]=\"id + '-title'\">{{ title() }}</span>\n } @if (help() !== undefined) {\n <button\n #helpControl\n type=\"button\"\n data-part=\"help\"\n [attr.aria-label]=\"t('help')\"\n [attr.aria-controls]=\"id + '-help'\"\n [attr.aria-expanded]=\"layerOpen()['help'] ?? false\"\n [attr.data-open]=\"layerOpen()['help'] ? '' : null\"\n (click)=\"toggleLayer('help')\"\n >\n <span slIcon><svg slGlyph name=\"circle-info\"></svg></span>\n </button>\n <div\n #helpLayer\n popover=\"auto\"\n data-part=\"help-content\"\n role=\"note\"\n [id]=\"id + '-help'\"\n (toggle)=\"onLayerToggle('help', $event, helpControl, 'start', false)\"\n >\n {{ help() }}\n </div>\n }\n </div>\n @if (description() !== undefined) {\n <span data-part=\"description\" [id]=\"id + '-description'\">{{ description() }}</span>\n }\n </div>\n <div data-part=\"actions\"><ng-content select=\"[slChartActions]\" /></div>\n <!-- The box stands in every state, so the header's words wrap at one width; it\n holds nothing a reader can reach until the plot has something to act on. -->\n @if (resolvedToolbar() !== 'none') { @let ready = usable();\n <div\n data-part=\"toolbar\"\n [attr.role]=\"ready ? 'toolbar' : null\"\n [attr.aria-label]=\"ready ? t('toolbar') : null\"\n [attr.aria-hidden]=\"ready ? null : 'true'\"\n [attr.inert]=\"ready ? null : ''\"\n [attr.data-waiting]=\"ready ? null : ''\"\n >\n @if (zoomed()) {\n <button\n type=\"button\"\n data-part=\"zoom-reset\"\n [attr.aria-label]=\"t('resetZoom')\"\n [attr.title]=\"t('resetZoom')\"\n (click)=\"resetZoomFromToolbar($event)\"\n >\n <span slIcon><svg slGlyph name=\"rotate-ccw\"></svg></span>\n </button>\n }\n <button\n type=\"button\"\n data-part=\"view-toggle\"\n [attr.aria-label]=\"t('tableView')\"\n [attr.title]=\"t('tableView')\"\n [attr.aria-pressed]=\"tableOpen()\"\n [attr.data-pressed]=\"tableOpen() ? '' : null\"\n (click)=\"requestTable(!tableOpen(), pressReason(), $event)\"\n >\n <span slIcon><svg slGlyph name=\"file-spreadsheet\"></svg></span>\n </button>\n <button\n type=\"button\"\n data-part=\"fullscreen-toggle\"\n [attr.aria-label]=\"fullscreen() ? t('exitFullscreen') : t('fullscreen')\"\n [attr.title]=\"fullscreen() ? t('exitFullscreen') : t('fullscreen')\"\n (click)=\"requestFullscreen(!fullscreen(), pressReason(), $event)\"\n >\n <span slIcon><svg slGlyph [name]=\"fullscreen() ? 'minimize' : 'maximize'\"></svg></span>\n </button>\n <button\n #menuControl\n type=\"button\"\n data-part=\"menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-label]=\"t('more')\"\n [attr.title]=\"t('more')\"\n [attr.aria-expanded]=\"layerOpen()['menu'] ?? false\"\n [attr.data-open]=\"layerOpen()['menu'] ? '' : null\"\n (click)=\"toggleLayer('menu')\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <div\n #menu\n popover=\"auto\"\n data-part=\"menu\"\n role=\"menu\"\n [attr.aria-label]=\"t('more')\"\n (toggle)=\"onLayerToggle('menu', $event, menuControl, 'end')\"\n (keydown)=\"onLayerKeyDown($event)\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"view\"\n (click)=\"menuAction('view', $event)\"\n >\n {{ t('tableView') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"fullscreen\"\n (click)=\"menuAction('fullscreen', $event)\"\n >\n {{ fullscreen() ? t('exitFullscreen') : t('fullscreen') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"csv\"\n (click)=\"menuAction('csv', $event)\"\n >\n {{ t('downloadCsv') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"image\"\n (click)=\"menuAction('image', $event)\"\n >\n {{ t('downloadImage') }}\n </button>\n </div>\n </div>\n }\n</figcaption>\n} @if (legend()) {\n<div\n #legendRow\n data-part=\"legend\"\n [attr.role]=\"legendWaiting() ? null : legendInteractive() ? 'toolbar' : 'list'\"\n [attr.aria-label]=\"legendWaiting() ? null : t('legend')\"\n (keydown)=\"onLegendKeyDown($event)\"\n>\n @if (legendWaiting()) { @for (line of repeat(3); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n } } @else if (current) { @for (entry of current.legend; track entry.key; let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"legendItem; context: { $implicit: entry, rowHidden: collapsed().includes(index), inLayer: false }\"\n />\n }\n <button\n #moreControl\n type=\"button\"\n data-part=\"legend-more\"\n aria-haspopup=\"true\"\n [attr.aria-label]=\"legendMoreName()\"\n [hidden]=\"collapsed().length === 0\"\n [attr.tabindex]=\"rovingKey() === null ? 0 : -1\"\n [attr.aria-expanded]=\"layerOpen()['more'] ?? false\"\n [attr.data-open]=\"layerOpen()['more'] ? '' : null\"\n (click)=\"toggleLayer('more')\"\n >\n {{ t('moreSeries', { count: collapsed().length }) }}\n </button>\n <div\n #moreLayer\n popover=\"auto\"\n data-part=\"menu\"\n role=\"group\"\n [attr.aria-label]=\"t('legend')\"\n (toggle)=\"onLayerToggle('more', $event, moreControl, 'start')\"\n (keydown)=\"onLayerKeyDown($event)\"\n >\n @for (index of collapsed(); track index) { @if (current.legend[index]; as entry) {\n <ng-container\n *ngTemplateOutlet=\"legendItem; context: { $implicit: entry, rowHidden: false, inLayer: true }\"\n />\n } }\n </div>\n }\n</div>\n}\n<ng-template #legendItem let-entry let-rowHidden=\"rowHidden\" let-inLayer=\"inLayer\">\n @let color = colorOf(entry.color); @if (legendInteractive()) {\n <button\n type=\"button\"\n data-part=\"legend-item\"\n [attr.data-key]=\"entry.key\"\n [attr.data-slot]=\"color.slot\"\n [attr.data-tone]=\"color.tone\"\n [attr.data-overflow]=\"color.overflow\"\n [attr.data-current]=\"isCurrent(entry) ? '' : null\"\n [attr.aria-pressed]=\"entry.visible\"\n [attr.data-pressed]=\"entry.visible ? '' : null\"\n [attr.tabindex]=\"inLayer || rovingKey() === entry.key ? 0 : -1\"\n [hidden]=\"rowHidden\"\n (click)=\"onLegendClick(entry, $event)\"\n (keydown)=\"onLegendItemKey(entry, $event)\"\n (focus)=\"legendFocus.set(inLayer ? legendFocus() : entry.key); emphasize(entry.visible ? entry.key : null)\"\n (blur)=\"emphasize(null)\"\n (pointerenter)=\"entry.visible && emphasize(entry.key)\"\n (pointerleave)=\"emphasize(null)\"\n >\n <ng-container *ngTemplateOutlet=\"legendContent; context: { $implicit: entry }\" />\n </button>\n } @else {\n <span\n role=\"listitem\"\n data-part=\"legend-item\"\n [attr.data-key]=\"entry.key\"\n [attr.data-slot]=\"color.slot\"\n [attr.data-tone]=\"color.tone\"\n [attr.data-overflow]=\"color.overflow\"\n [attr.data-current]=\"isCurrent(entry) ? '' : null\"\n [hidden]=\"rowHidden\"\n (pointerenter)=\"entry.visible && emphasize(entry.key)\"\n (pointerleave)=\"emphasize(null)\"\n >\n <ng-container *ngTemplateOutlet=\"legendContent; context: { $implicit: entry }\" />\n </span>\n }\n</ng-template>\n<ng-template #legendContent let-entry>\n @if (legendItemTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"custom.template; context: { $implicit: entry, value: legendValue(entry), current: isCurrent(entry) }\"\n />\n } @else {\n <span\n data-part=\"legend-marker\"\n [attr.data-kind]=\"entry.kind === 'area' || entry.kind === 'bar' || entry.kind === 'pie' ? 'bar' : entry.kind\"\n [attr.data-stroke]=\"strokeOf(entry)\"\n ></span>\n <span data-part=\"legend-label\" [attr.title]=\"entry.label\">{{ entry.label }}</span>\n @if (legendValues()) {\n <span data-part=\"legend-value\">{{ legendValue(entry) }}</span>\n } }\n</ng-template>\n<div\n #plot\n data-part=\"plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"t('roledescription')\"\n [attr.aria-labelledby]=\"title() !== undefined ? id + '-title' : null\"\n [attr.aria-label]=\"title() === undefined ? t('roledescription') : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (keydown)=\"onPlotKeyDown($event)\"\n (focus)=\"onPlotFocus($event)\"\n (blur)=\"requestActive(null, 'blur', $event)\"\n>\n @let overlayNow = overlay();\n <div\n data-part=\"crosshair\"\n [hidden]=\"!overlayNow.crosshair\"\n [attr.data-band]=\"overlayNow.crosshair?.isBand ? '' : null\"\n [attr.data-orientation]=\"current?.orientation ?? 'vertical'\"\n [style.--slotted-chart-x]=\"px(overlayNow.crosshair?.x)\"\n [style.--slotted-chart-y]=\"px(overlayNow.crosshair?.y)\"\n [style.--slotted-chart-band-start]=\"px(overlayNow.crosshair?.band?.start)\"\n [style.--slotted-chart-band-size]=\"px(overlayNow.crosshair?.band?.size)\"\n [style.--slotted-chart-frame-start]=\"px(overlayNow.crosshair?.frame?.start)\"\n [style.--slotted-chart-frame-size]=\"px(overlayNow.crosshair?.frame?.size)\"\n ></div>\n <div #canvas data-part=\"canvas\" aria-hidden=\"true\" [hidden]=\"!drawable()\"></div>\n @for (marker of overlayNow.markers; track marker.key) { @let markerColor = colorOf(marker.color);\n <div\n data-part=\"marker\"\n aria-hidden=\"true\"\n [attr.data-slot]=\"markerColor.slot\"\n [attr.data-tone]=\"markerColor.tone\"\n [attr.data-overflow]=\"markerColor.overflow\"\n [attr.data-selected]=\"marker.selected ? '' : null\"\n [attr.data-current]=\"marker.current ? '' : null\"\n [style.--slotted-chart-x]=\"px(marker.at.x)\"\n [style.--slotted-chart-y]=\"px(marker.at.y)\"\n ></div>\n }\n <div\n #tooltipBox\n data-part=\"tooltip\"\n aria-hidden=\"true\"\n [attr.data-open]=\"overlayNow.tooltip ? '' : null\"\n [attr.data-docked]=\"overlayNow.docked ? '' : null\"\n >\n @if (overlayNow.tooltip && current) { @if (tooltipTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"custom.template; context: { $implicit: overlayNow.tooltip, model: current }\"\n />\n } @else {\n <div data-part=\"tooltip-title\">{{ overlayNow.tooltip.title }}</div>\n @for (note of overlayNow.tooltip.notes; track note) {\n <div data-part=\"tooltip-note\">{{ note }}</div>\n } @for (item of overlayNow.tooltip.items; track item.series + item.label) { @let itemColor =\n colorOf(item.color);\n <div\n data-part=\"tooltip-item\"\n [attr.data-current]=\"overlayNow.tooltip.items.length > 1 && item.current ? '' : null\"\n [attr.data-slot]=\"itemColor.slot\"\n [attr.data-tone]=\"itemColor.tone\"\n [attr.data-overflow]=\"itemColor.overflow\"\n >\n @if (resolvedTooltip().indicator !== 'none') {\n <span\n data-part=\"tooltip-marker\"\n [attr.data-kind]=\"markerKind(item.kind, resolvedTooltip().indicator)\"\n [attr.data-stroke]=\"strokeOf(item)\"\n ></span>\n }\n <span data-part=\"tooltip-label\">{{ item.label }}</span>\n <span data-part=\"tooltip-value\"\n >{{ item.share ? item.share + ' · ' + item.formatted : item.formatted }}</span\n >\n </div>\n } @if (overlayNow.tooltip.total; as total) {\n <div data-part=\"tooltip-total\">\n <span>{{ t('total') }}</span>\n <span data-part=\"tooltip-value\">{{ total.formatted }}</span>\n </div>\n } } }\n </div>\n @if (drawable() && current?.shape === 'pie' && (current?.series[0]?.innerRadius ?? 0) > 0) {\n <div data-part=\"center\" aria-hidden=\"true\">\n @if (centerTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: { $implicit: current }\" />\n } @else {\n <span data-part=\"center-value\">{{ current!.series[0]!.format(current!.total) }}</span>\n <span data-part=\"center-label\">{{ t('total') }}</span>\n }\n </div>\n } @if (table(); as rows) {\n <div\n data-part=\"table-region\"\n role=\"region\"\n tabindex=\"0\"\n [attr.aria-labelledby]=\"title() !== undefined ? id + '-title' : null\"\n >\n <table data-part=\"table\">\n <caption>\n {{ title() }}\n </caption>\n <thead>\n <tr>\n @for (column of rows.columns; track column.key; let index = $index) {\n <th scope=\"col\" [attr.data-numeric]=\"index > 0 ? '' : null\">{{ column.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows.rows; track row.key) {\n <tr [attr.data-current]=\"row.key === activeKey() ? '' : null\">\n @for (cell of row.cells; track $index; let index = $index) { @if (index === 0) {\n <th scope=\"row\">{{ cell.text }}</th>\n } @else {\n <td data-numeric>{{ cell.text }}</td>\n } }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @if (loading()) {\n <div data-part=\"skeleton\" aria-hidden=\"true\" [attr.data-kind]=\"skeletonKind()\">\n <div data-ui=\"skeleton\" data-part=\"region\" data-animation=\"shimmer\" data-loading>\n @if (skeletonKind() === 'pie') {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"circle\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n } @else {\n <div data-skeleton=\"y\">\n @for (line of repeat(5); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n <div data-skeleton=\"marks\">\n @for (mark of repeat(skeletonKind() === 'bar' ? 7 : 2); track mark) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n <div data-skeleton=\"x\">\n @for (line of repeat(6); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n }\n </div>\n </div>\n } @else if (failed()) {\n <div data-part=\"error\">\n @if (errorTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template\" />\n } @else {\n <section\n data-ui=\"result-state\"\n data-part=\"root\"\n data-status=\"error\"\n data-reach=\"section\"\n data-align=\"center\"\n data-live=\"polite\"\n >\n <div data-part=\"media\" aria-hidden=\"true\"></div>\n <div data-part=\"content\" role=\"status\"><div data-part=\"title\">{{ t('error') }}</div></div>\n <div data-part=\"actions\">\n <button\n data-ui=\"button\"\n data-part=\"root\"\n data-variant=\"outline\"\n data-tone=\"secondary\"\n data-size=\"sm\"\n type=\"button\"\n (click)=\"onRetry()\"\n >\n <span data-part=\"label\">{{ t('retry') }}</span>\n </button>\n </div>\n </section>\n }\n </div>\n } @else if (current?.empty; as reason) {\n <div data-part=\"empty\">\n @if (emptyTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: { $implicit: reason }\" />\n } @else {\n <section\n data-ui=\"result-state\"\n data-part=\"root\"\n data-reach=\"section\"\n data-align=\"center\"\n data-live=\"polite\"\n [attr.data-status]=\"reason === 'all-hidden' ? 'no-results' : 'empty'\"\n >\n <div data-part=\"media\" aria-hidden=\"true\"></div>\n <div data-part=\"content\" role=\"status\">\n <div data-part=\"title\">{{ reason === 'all-hidden' ? t('allHidden') : t('noData') }}</div>\n </div>\n @if (reason === 'all-hidden') {\n <div data-part=\"actions\">\n <button\n data-ui=\"button\"\n data-part=\"root\"\n data-variant=\"outline\"\n data-tone=\"secondary\"\n data-size=\"sm\"\n type=\"button\"\n (click)=\"showAll($event)\"\n >\n <span data-part=\"label\">{{ t('showAll') }}</span>\n </button>\n </div>\n }\n </section>\n }\n </div>\n }\n <p data-part=\"summary\" [id]=\"id + '-summary'\">{{ summary() }}</p>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slotted-angular-chart.mjs","sources":["../../chart/src/chart-defaults.ts","../../chart/src/chart-templates.ts","../../chart/src/chart.ts","../../chart/src/chart.html","../../chart/src/slotted-angular-chart.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { ChartGrid } from '@slotted/core/chart';\n\nexport type ChartSize = 'sm' | 'md' | 'lg';\nexport type ChartVariant = 'plain' | 'card';\nexport type ChartPalette = 'categorical' | 'sequential' | 'focus';\nexport type ChartToolbar = 'visible' | 'hover' | 'none';\nexport type ChartRenderer = 'auto' | 'svg' | 'canvas';\nexport type ChartLegendOverflow = 'collapse' | 'wrap';\n\nexport interface ChartTooltipSettings {\n readonly sort?: 'none' | 'asc' | 'desc';\n readonly total?: boolean;\n readonly indicator?: 'dot' | 'line' | 'none';\n}\n\n/** What every chart in an application does before any of them states its own. */\nexport interface ChartDefaults {\n size?: ChartSize;\n variant?: ChartVariant;\n palette?: ChartPalette;\n toolbar?: ChartToolbar;\n renderer?: ChartRenderer;\n grid?: ChartGrid;\n legendOverflow?: ChartLegendOverflow;\n tooltip?: ChartTooltipSettings;\n animate?: boolean;\n}\n\nexport const CHART_DEFAULTS_TOKEN = new InjectionToken<ChartDefaults>('slotted chart defaults', {\n providedIn: 'root',\n factory: (): ChartDefaults => ({}),\n});\n\n/**\n * An application decides once how its charts look — the tile or the plain\n * form, the palette, the toolbar — and every chart inherits the decision. A\n * chart that states any of them still wins: an explicit input is never\n * overridden by the token. The words and the locale come from the language in\n * force (`provideSlotted`).\n */\nexport function provideChartDefaults(defaults: ChartDefaults) {\n return { provide: CHART_DEFAULTS_TOKEN, useValue: defaults };\n}\n\nexport function injectChartDefaults(): ChartDefaults {\n return inject(CHART_DEFAULTS_TOKEN);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport type { ChartLegendEntry, ChartModel, ChartTooltipContext } from '@slotted/core/chart';\n\n/** What a `slChartTooltip` template is handed. */\nexport interface ChartTooltipTemplateContext {\n $implicit: ChartTooltipContext;\n model: ChartModel;\n}\n\n/** Replaces the tooltip's content. The box, its place and its timing stay the chart's. */\n@Directive({ selector: 'ng-template[slChartTooltip]', standalone: true })\nexport class SlChartTooltip {\n readonly template = inject<TemplateRef<ChartTooltipTemplateContext>>(TemplateRef);\n}\n\n/** What a `slChartLegendItem` template is handed for one entry. */\nexport interface ChartLegendItemTemplateContext {\n $implicit: ChartLegendEntry;\n value: string;\n current: boolean;\n}\n\n/**\n * Replaces what one legend item holds. The item — a toggle with its pressed\n * state, its colour and its place in the roving tab stop — stays the chart's.\n */\n@Directive({ selector: 'ng-template[slChartLegendItem]', standalone: true })\nexport class SlChartLegendItem {\n readonly template = inject<TemplateRef<ChartLegendItemTemplateContext>>(TemplateRef);\n}\n\n/** Replaces the words in a donut's centre. */\n@Directive({ selector: 'ng-template[slChartCenter]', standalone: true })\nexport class SlChartCenter {\n readonly template = inject<TemplateRef<{ $implicit: ChartModel }>>(TemplateRef);\n}\n\n/** Replaces the empty plot: `no-data`, or `all-hidden`. */\n@Directive({ selector: 'ng-template[slChartEmpty]', standalone: true })\nexport class SlChartEmpty {\n readonly template = inject<TemplateRef<{ $implicit: 'no-data' | 'all-hidden' }>>(TemplateRef);\n}\n\n/** Replaces the failed plot. */\n@Directive({ selector: 'ng-template[slChartError]', standalone: true })\nexport class SlChartError {\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injectable,\n InjectionToken,\n input,\n model,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectLocale, injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n cachedChartTheme,\n categoryIndex,\n chartKeyAction,\n chartTable,\n chartToCsv,\n createChartModel,\n createLatestAnnouncer,\n defaultTrigger,\n describeChart,\n describePoint,\n describeZoom,\n firstPoint,\n FULL_ZOOM,\n isDrawn,\n isFullZoom,\n observeChartTheme,\n placeLayer,\n placeTooltip,\n readChartTheme,\n sameTheme,\n seriesOf,\n toggleHidden,\n TOOLTIP_DOCK_WIDTH,\n tooltipContext,\n trackModality,\n} from '@slotted/core/chart';\nimport { createFocusOrigin } from '@slotted/core/focus';\nimport { chartMessages, type ChartMessages, type PartialMessages } from '@slotted/core/i18n';\nimport type {\n ChartAnnotation,\n ChartColor,\n ChartGrid,\n ChartLegendEntry,\n ChartModel,\n ChartOrientation,\n ChartPoint,\n ChartRecord,\n ChartSeries,\n ChartSpec,\n ChartStackMode,\n ChartTheme,\n ChartTooltipContext,\n ChartTrigger,\n ChartXAxis,\n ChartYAxis,\n ChartZoom,\n} from '@slotted/core/chart';\nimport { mountChartEngine } from '@slotted/core/chart-echarts';\nimport type { ChartEngine, ChartPointLocation } from '@slotted/core/chart-echarts';\nimport { getLiveAnnouncer } from '@slotted/core/live-announcer';\nimport { collapseState } from '@slotted/core/overflow';\nimport { createControllable } from '@slotted/core/state';\nimport type { ChangeReason, ChangeRequest } from '@slotted/core/state';\n\nimport {\n injectChartDefaults,\n type ChartLegendOverflow,\n type ChartPalette,\n type ChartRenderer,\n type ChartSize,\n type ChartToolbar,\n type ChartTooltipSettings,\n type ChartVariant,\n} from './chart-defaults';\nimport {\n SlChartCenter,\n SlChartEmpty,\n SlChartError,\n SlChartLegendItem,\n SlChartTooltip,\n} from './chart-templates';\n\n/**\n * The engine a chart mounts. `@slotted/core/chart-echarts` by default; a test\n * provides a recording one, and an application could provide another that\n * answers the same three calls.\n */\nexport const CHART_ENGINE = new InjectionToken<typeof mountChartEngine>('slotted chart engine', {\n providedIn: 'root',\n factory: () => mountChartEngine,\n});\n\n/** Unique ids for the chart's parts, stable across a server render. */\n@Injectable({ providedIn: 'root' })\nexport class SlChartIdFactory {\n private count = 0;\n next() {\n this.count += 1;\n return `sl-chart-${this.count}`;\n }\n}\n\n/** The imperative actions a template cannot express. */\nexport interface ChartHandle {\n focus(): void;\n resetZoom(): void;\n toDataURL(): string | null;\n toCsv(): string;\n}\n\ninterface Overlay {\n readonly crosshair: (ChartPointLocation & { readonly isBand: boolean }) | null;\n readonly markers: readonly {\n readonly key: string;\n readonly color: ChartColor;\n readonly at: ChartPointLocation;\n readonly selected: boolean;\n readonly current: boolean;\n }[];\n readonly tooltip: ChartTooltipContext | null;\n readonly docked: boolean;\n}\n\nconst NO_OVERLAY: Overlay = { crosshair: null, markers: [], tooltip: null, docked: false };\nconst samePoint = (a: ChartPoint | null, b: ChartPoint | null) =>\n a === b || (a !== null && b !== null && a.series === b.series && a.key === b.key);\nconst sameList = (a: readonly string[], b: readonly string[]) =>\n a.length === b.length && a.every((value, index) => value === b[index]);\nconst sameZoom = (a: ChartZoom, b: ChartZoom) => a.start === b.start && a.end === b.end;\n\nfunction lastDrawn(values: readonly (number | null)[]) {\n for (let index = values.length - 1; index >= 0; index -= 1)\n if (values[index] !== null) return index;\n return -1;\n}\n\nfunction focusVisible(element: Element) {\n try {\n return element.matches(':focus-visible');\n } catch {\n return false;\n }\n}\n\n/**\n * A figure: a caption that names it, a toolbar of its own controls, a legend\n * of toggles, and a plot the engine draws marks into and the family draws\n * every interaction over. The engine is ECharts, loaded on demand by\n * `@slotted/core/chart-echarts`, one chunk per kind; everything a reader\n * operates is this component's template.\n *\n * Each mutable value is a `model()` — two-way, so a template binds it with\n * `[(hidden)]` — and each move is first asked through a `*ChangeRequest`\n * output carrying the reason and the event, which a handler may cancel. The\n * model, the keyboard, the text alternatives and the theme are\n * `@slotted/core/chart`'s, shared with the React binding.\n */\n@Component({\n selector: 'figure[slChart]',\n standalone: true,\n imports: [NgTemplateOutlet, SlGlyph, SlIcon],\n templateUrl: './chart.html',\n styleUrls: [\n '../../../styles/src/button/button.css',\n '../../../styles/src/result-state/result-state.css',\n '../../../styles/src/skeleton/skeleton.css',\n '../../../styles/src/chart/chart.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slChart',\n host: {\n 'data-ui': 'chart',\n 'data-part': 'root',\n '[attr.title]': 'null',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-palette]': 'resolvedPalette()',\n '[attr.data-toolbar]': 'resolvedToolbar()',\n '[attr.data-legend-overflow]': 'resolvedLegendOverflow()',\n '[attr.data-loading]': 'loading() ? \"\" : null',\n '[attr.data-fullscreen]': 'fullscreen() ? \"\" : null',\n '(keydown)': 'onRootKeyDown($event)',\n },\n})\nexport class SlChart implements ChartHandle {\n /* ── What is drawn ─────────────────────────────────────────────────── */\n readonly data = input<readonly ChartRecord[]>([]);\n readonly series = input<readonly ChartSeries[]>([]);\n readonly x = input<ChartXAxis | undefined>(undefined);\n readonly y = input<ChartYAxis | readonly [ChartYAxis, ChartYAxis] | undefined>(undefined);\n readonly orientation = input<ChartOrientation | undefined>(undefined);\n readonly stackMode = input<ChartStackMode | undefined>(undefined);\n readonly annotations = input<readonly ChartAnnotation[] | undefined>(undefined);\n readonly recordKey = input<string | undefined>(undefined);\n readonly locale = input<string | undefined>(undefined);\n\n /* ── The words around it ───────────────────────────────────────────── */\n /** The chart's name: the caption, and the plot's accessible name. The host's native tooltip is removed. */\n readonly title = input<string | undefined>(undefined);\n readonly description = input<string | undefined>(undefined);\n /** A note behind an information control beside the title. */\n readonly help = input<string | undefined>(undefined);\n /**\n * Words laid over the catalog of the language in force, key by key: the\n * toolbar, the legend, the states and the sentences a screen reader hears.\n */\n readonly messages = input<PartialMessages<ChartMessages> | undefined>(undefined);\n\n /* ── How it looks ──────────────────────────────────────────────────── */\n readonly size = input<ChartSize | undefined>(undefined);\n readonly variant = input<ChartVariant | undefined>(undefined);\n readonly palette = input<ChartPalette | undefined>(undefined);\n readonly toolbar = input<ChartToolbar | undefined>(undefined);\n readonly grid = input<ChartGrid | undefined>(undefined);\n readonly texture = input(false, { transform: booleanAttribute });\n readonly renderer = input<ChartRenderer | undefined>(undefined);\n readonly sampling = input<'auto' | 'none' | undefined>(undefined);\n readonly animate = input<boolean | undefined>(undefined);\n readonly legend = input(true, { transform: booleanAttribute });\n readonly legendInteractive = input(true, { transform: booleanAttribute });\n readonly legendValues = input(false, { transform: booleanAttribute });\n readonly legendOverflow = input<ChartLegendOverflow | undefined>(undefined);\n readonly trigger = input<ChartTrigger | undefined>(undefined);\n readonly tooltip = input<ChartTooltipSettings | undefined>(undefined);\n readonly zoomable = input(false, { transform: booleanAttribute });\n readonly selectable = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n readonly error = input(false, { transform: booleanAttribute });\n /** The engine's option, before it is drawn: the escape hatch for what the contract does not say yet. */\n readonly extendOption = input<\n ((option: Record<string, unknown>) => Record<string, unknown>) | undefined\n >(undefined);\n\n /* ── State: two-way, each move asked first ─────────────────────────── */\n readonly hidden = model<readonly string[]>([]);\n readonly activePoint = model<ChartPoint | null>(null);\n readonly selection = model<ChartPoint | null>(null);\n readonly zoom = model<ChartZoom>(FULL_ZOOM);\n readonly tableOpen = model<boolean>(false);\n readonly fullscreen = model<boolean>(false);\n\n readonly hiddenChangeRequest = output<ChangeRequest<readonly string[]>>();\n readonly activePointChangeRequest = output<ChangeRequest<ChartPoint | null>>();\n readonly selectionChangeRequest = output<ChangeRequest<ChartPoint | null>>();\n readonly zoomChangeRequest = output<ChangeRequest<ChartZoom>>();\n readonly tableOpenChangeRequest = output<ChangeRequest<boolean>>();\n readonly fullscreenChangeRequest = output<ChangeRequest<boolean>>();\n /** The reader pressed the retry of the failed plot. */\n readonly retry = output<void>();\n\n /* ── Composition ───────────────────────────────────────────────────── */\n protected readonly tooltipTemplate = contentChild(SlChartTooltip);\n protected readonly legendItemTemplate = contentChild(SlChartLegendItem);\n protected readonly centerTemplate = contentChild(SlChartCenter);\n protected readonly emptyTemplate = contentChild(SlChartEmpty);\n protected readonly errorTemplate = contentChild(SlChartError);\n\n private readonly defaults = injectChartDefaults();\n private readonly mountEngine = inject(CHART_ENGINE);\n private readonly host: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n protected readonly id = inject(SlChartIdFactory).next();\n\n protected readonly plotRef = viewChild<ElementRef<HTMLDivElement>>('plot');\n protected readonly canvasRef = viewChild<ElementRef<HTMLDivElement>>('canvas');\n protected readonly tableRegionRef = viewChild<ElementRef<HTMLDivElement>>('tableRegion');\n protected readonly tooltipRef = viewChild<ElementRef<HTMLDivElement>>('tooltipBox');\n protected readonly legendRef = viewChild<ElementRef<HTMLDivElement>>('legendRow');\n protected readonly menuRef = viewChild<ElementRef<HTMLDivElement>>('menu');\n protected readonly moreRef = viewChild<ElementRef<HTMLDivElement>>('moreLayer');\n protected readonly helpRef = viewChild<ElementRef<HTMLDivElement>>('helpLayer');\n\n private engine: ChartEngine | null = null;\n private readonly engineFailure = signal<unknown>(null);\n protected readonly theme = signal<ChartTheme | null>(null);\n protected readonly overlay = signal<Overlay>(NO_OVERLAY);\n protected readonly collapsed = signal<readonly number[]>([]);\n protected readonly legendFocus = signal<string | null>(null);\n protected readonly layerOpen = signal<Record<string, boolean>>({});\n private readonly widths = new Map<string, number>();\n private readonly modality = trackModality(this.host);\n private readonly pointAnnouncer = createLatestAnnouncer((message) =>\n getLiveAnnouncer().announce(message),\n );\n\n /* ── Derived ───────────────────────────────────────────────────────── */\n /** The family's words in the language in force, with this chart's `messages` laid over them. */\n protected readonly t = injectMessages(chartMessages, this.messages);\n private readonly appLocale = injectLocale();\n /** The name of the control holding the series the legend has no room for. */\n protected readonly legendMoreName = computed(() => {\n const legend = this.chartModel()?.legend ?? [];\n const names = this.collapsed().map((index) => legend[index]?.label ?? '');\n return this.t('legendMore', {\n series: new Intl.ListFormat(this.locale() ?? this.appLocale(), { type: 'unit' }).format(\n names,\n ),\n });\n });\n protected readonly resolvedSize = computed(() => this.size() ?? this.defaults.size ?? 'md');\n protected readonly resolvedVariant = computed(\n () => this.variant() ?? this.defaults.variant ?? 'plain',\n );\n protected readonly resolvedPalette = computed(\n () => this.palette() ?? this.defaults.palette ?? 'categorical',\n );\n protected readonly resolvedToolbar = computed(\n () => this.toolbar() ?? this.defaults.toolbar ?? 'visible',\n );\n protected readonly resolvedLegendOverflow = computed(\n () => this.legendOverflow() ?? this.defaults.legendOverflow ?? 'collapse',\n );\n protected readonly resolvedTooltip = computed<ChartTooltipSettings>(() => ({\n ...this.defaults.tooltip,\n ...this.tooltip(),\n }));\n\n private readonly spec = computed<ChartSpec>(() => ({\n data: this.data(),\n series: this.series(),\n x: this.x(),\n y: this.y(),\n orientation: this.orientation(),\n stackMode: this.stackMode(),\n annotations: this.annotations(),\n recordKey: this.recordKey(),\n locale: this.locale() ?? this.appLocale(),\n }));\n private readonly built = computed(() => {\n try {\n return {\n model: createChartModel(this.spec(), { hidden: this.hidden() }) as ChartModel | null,\n failure: null as unknown,\n };\n } catch (failure) {\n return { model: null, failure };\n }\n });\n protected readonly chartModel = computed(() => this.built().model);\n protected readonly failed = computed(\n () => this.error() || this.built().failure !== null || this.engineFailure() !== null,\n );\n protected readonly drawable = computed(() => {\n const current = this.chartModel();\n return Boolean(current && !this.loading() && !this.failed() && !current.empty);\n });\n protected readonly usable = computed(() => {\n const current = this.chartModel();\n return Boolean(current && !this.loading() && !this.failed() && current.empty !== 'no-data');\n });\n protected readonly resolvedTrigger = computed(() => {\n const current = this.chartModel();\n return current ? (this.trigger() ?? defaultTrigger(current)) : 'none';\n });\n protected readonly activeKey = computed(() => {\n const current = this.chartModel();\n const point = this.activePoint();\n return point && current && isDrawn(current, point) ? point.key : null;\n });\n protected readonly summary = computed(() => {\n if (this.loading()) return this.t('loading');\n if (this.failed()) return this.t('error');\n const current = this.chartModel();\n return current ? describeChart(current, this.t) : '';\n });\n protected readonly skeletonKind = computed(() => {\n const kinds = this.series().map((entry) => entry.kind);\n if (kinds.includes('pie')) return 'pie';\n return kinds.every((kind) => kind === 'line' || kind === 'area') ? 'line' : 'bar';\n });\n protected readonly legendWaiting = computed(() => {\n const current = this.chartModel();\n return this.loading() && (!current || current.shape === 'pie' || current.legend.length === 0);\n });\n protected readonly table = computed(() => {\n const current = this.chartModel();\n return this.tableOpen() && this.usable() && current ? chartTable(current, this.t) : null;\n });\n protected readonly rowKeys = computed(() => {\n const entries = this.chartModel()?.legend ?? [];\n const hiddenIndexes = this.collapsed();\n return entries.filter((_, index) => !hiddenIndexes.includes(index)).map((entry) => entry.key);\n });\n protected readonly rovingKey = computed(() => {\n const focus = this.legendFocus();\n const keys = this.rowKeys();\n return focus && keys.includes(focus) ? focus : (keys[0] ?? null);\n });\n protected readonly describedBy = computed(() =>\n this.description() !== undefined\n ? `${this.id}-description ${this.id}-summary`\n : `${this.id}-summary`,\n );\n protected readonly repeat = (count: number) => Array.from({ length: count }, (_, index) => index);\n\n /** The frame a theme read waits for; see `loadTheme`. */\n private themeFrame = 0;\n\n /**\n * The theme at the plot: the one another chart already read in the same\n * context, or a read on the next frame. A read computes styles, and right\n * after a render it forced a style recalculation of everything rendered.\n */\n private loadTheme(plot: HTMLElement) {\n const cached = cachedChartTheme(plot);\n if (cached) {\n if (this.themeFrame) cancelAnimationFrame(this.themeFrame);\n this.themeFrame = 0;\n this.applyTheme(cached);\n return;\n }\n if (this.themeFrame) return;\n this.themeFrame = requestAnimationFrame(() => {\n this.themeFrame = 0;\n this.applyTheme(readChartTheme(plot));\n });\n }\n\n private applyTheme(next: ChartTheme) {\n if (!sameTheme(untracked(this.theme), next)) this.theme.set(next);\n }\n\n constructor() {\n afterNextRender(() => {\n const plot = this.plotRef()?.nativeElement;\n const canvas = this.canvasRef()?.nativeElement;\n if (!plot || !canvas) return;\n const stop = observeChartTheme(plot, () => this.applyTheme(readChartTheme(plot)));\n this.engine = this.mountEngine(canvas, {\n onPointer: (point, source) => {\n if (point) this.requestActive(point, 'pointer', source);\n else if (document.activeElement !== plot) this.requestActive(null, 'pointer', source);\n },\n onPress: (point, source) => {\n if (!this.selectable() || !point) return;\n this.requestSelection(\n samePoint(this.selection(), point) ? null : point,\n 'pointer',\n source,\n );\n },\n onZoom: (next, source) => this.requestZoom(next, 'pointer', source),\n onRender: () => this.computeOverlay(),\n onError: (failure) => this.engineFailure.set(failure),\n });\n this.bump.update((value) => value + 1);\n const observer =\n typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.fitLegend());\n const legend = this.legendRef()?.nativeElement;\n if (legend && observer) observer.observe(legend);\n const onFullscreen = () => {\n if (document.fullscreenElement === this.host) this.native = true;\n else if (this.native) {\n this.native = false;\n if (this.fullscreen()) this.requestFullscreen(false, 'escape');\n }\n };\n document.addEventListener('fullscreenchange', onFullscreen);\n this.destroyRef.onDestroy(() => {\n stop();\n if (this.themeFrame) cancelAnimationFrame(this.themeFrame);\n observer?.disconnect();\n document.removeEventListener('fullscreenchange', onFullscreen);\n this.engine?.dispose();\n this.engine = null;\n this.modality.destroy();\n });\n });\n\n /* The theme at the plot, loaded again when a palette, a variant or the\n full screen repaint the root's tokens, which are the chart's own\n attributes and outside what the document observer watches. After the\n render, because the context a cached theme is found by includes them. */\n afterRenderEffect(() => {\n this.resolvedPalette();\n this.resolvedVariant();\n this.fullscreen();\n const plot = untracked(() => this.plotRef()?.nativeElement);\n if (plot) untracked(() => this.loadTheme(plot));\n });\n\n /** A click on a cell focuses the table region; its ring is for the keyboard (`createFocusOrigin`). */\n effect((onCleanup) => {\n const region = this.tableRegionRef()?.nativeElement;\n if (region === undefined) return;\n onCleanup(createFocusOrigin(region).destroy);\n });\n\n /* What the engine draws. */\n effect(() => {\n this.bump();\n const current = this.chartModel();\n const theme = this.theme();\n if (!this.engine || !theme || !current || !this.drawable()) return;\n void this.engine.update({\n model: current,\n theme,\n selection: this.selection(),\n zoom: this.zoom(),\n zoomable: this.zoomable(),\n grid: this.grid() ?? this.defaults.grid,\n texture: this.texture(),\n renderer: this.renderer() ?? this.defaults.renderer ?? 'auto',\n sampling: this.sampling(),\n trigger: this.resolvedTrigger(),\n animate: this.animate() ?? this.defaults.animate ?? true,\n extendOption: this.extendOption(),\n });\n });\n\n /* The overlay follows the point, the selection, the model and the view. */\n effect(() => {\n this.activePoint();\n this.selection();\n this.chartModel();\n this.drawable();\n this.tableOpen();\n untracked(() => this.computeOverlay());\n });\n\n /* Placed after the content is on the page, because its size decides where. */\n afterRenderEffect({\n write: () => {\n const overlay = this.overlay();\n const node = this.tooltipRef()?.nativeElement;\n const plot = this.plotRef()?.nativeElement;\n const point = this.activePoint();\n if (!node || !plot) return;\n if (!overlay.tooltip || !point) {\n this.tooltipWasOpen = false;\n return;\n }\n const at = this.engine?.locate(point);\n if (!at) return;\n if (!this.tooltipWasOpen) node.style.transition = 'none';\n const placement = placeTooltip({\n anchor: { x: at.x, y: at.y },\n size: { width: node.offsetWidth, height: node.offsetHeight },\n bounds: { width: plot.clientWidth, height: plot.clientHeight },\n dir: getComputedStyle(this.host).direction === 'rtl' ? 'rtl' : 'ltr',\n });\n node.style.setProperty('--slotted-chart-x', `${placement.x}px`);\n node.style.setProperty('--slotted-chart-y', `${placement.y}px`);\n if (!this.tooltipWasOpen) requestAnimationFrame(() => (node.style.transition = ''));\n this.tooltipWasOpen = true;\n },\n });\n\n /* One line of legend, measured after it is drawn. */\n afterRenderEffect({\n read: () => {\n this.chartModel();\n this.resolvedLegendOverflow();\n this.activeKey();\n this.fitLegend();\n },\n });\n }\n\n private readonly bump = signal(0);\n private native = false;\n private tooltipWasOpen = false;\n\n /* ── Requests ──────────────────────────────────────────────────────── */\n\n private ask<T>(\n value: { (): T; set(next: T): void },\n emit: (request: ChangeRequest<T>) => void,\n equals: (a: T, b: T) => boolean,\n next: T,\n reason: ChangeReason,\n source: unknown,\n ) {\n let cancelled = false;\n const state = createControllable<T>({\n initial: value(),\n equals,\n onRequest: (request) => {\n emit(request);\n cancelled = request.cancelled;\n },\n });\n if (state.request(next, reason, source) && !cancelled) value.set(next);\n }\n\n protected requestHidden(next: readonly string[], reason: ChangeReason, source?: unknown) {\n this.ask(\n this.hidden,\n (request) => this.hiddenChangeRequest.emit(request),\n sameList,\n next,\n reason,\n source,\n );\n }\n protected requestActive(next: ChartPoint | null, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.activePoint,\n (request) => this.activePointChangeRequest.emit(request),\n samePoint,\n next,\n reason,\n source,\n );\n }\n protected requestSelection(next: ChartPoint | null, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.selection,\n (request) => this.selectionChangeRequest.emit(request),\n samePoint,\n next,\n reason,\n source,\n );\n }\n protected requestZoom(next: ChartZoom, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.zoom,\n (request) => this.zoomChangeRequest.emit(request),\n sameZoom,\n next,\n reason,\n source,\n );\n }\n protected requestTable(next: boolean, reason: ChangeReason, source?: unknown) {\n this.ask(\n this.tableOpen,\n (request) => this.tableOpenChangeRequest.emit(request),\n Object.is,\n next,\n reason,\n source,\n );\n }\n\n /**\n * The Fullscreen API when the page may use it and the reader asked; a layer\n * fixed over the page otherwise. A browser refuses the API outside the\n * press that asked for it, so it is asked here, inside the handler.\n */\n protected requestFullscreen(next: boolean, reason: ChangeReason, source?: unknown) {\n const before = this.fullscreen();\n this.ask(\n this.fullscreen,\n (request) => this.fullscreenChangeRequest.emit(request),\n Object.is,\n next,\n reason,\n source,\n );\n if (this.fullscreen() === before) return;\n if (next && document.fullscreenEnabled && reason !== 'programmatic' && reason !== 'escape') {\n this.host.requestFullscreen?.().catch(() => {});\n }\n if (!next && document.fullscreenElement === this.host) {\n this.native = false;\n document.exitFullscreen().catch(() => {});\n }\n }\n\n /** The reason the last activation came with: a pointer, a key, or the application. */\n protected pressReason(): ChangeReason {\n return this.modality.read();\n }\n\n /* ── Overlay ───────────────────────────────────────────────────────── */\n\n private computeOverlay() {\n const current = this.chartModel();\n const plot = this.plotRef()?.nativeElement;\n const engine = this.engine;\n if (!engine || !plot || !current || !this.drawable() || this.tableOpen()) {\n this.overlay.set(NO_OVERLAY);\n return;\n }\n const active = this.activePoint();\n const selected = this.selection();\n const trigger = this.resolvedTrigger();\n const markers: Overlay['markers'][number][] = [];\n if (selected && isDrawn(current, selected) && current.shape === 'cartesian') {\n const owner = seriesOf(current, selected.series);\n const at = engine.locate(selected);\n if (owner && owner.kind !== 'bar' && at) {\n markers.push({\n key: `selected-${owner.id}`,\n color: owner.color,\n at,\n selected: true,\n current: false,\n });\n }\n }\n if (current.shape === 'pie')\n engine.emphasize(active && isDrawn(current, active) ? active.key : null);\n const at = active && isDrawn(current, active) ? engine.locate(active) : null;\n if (!active || !at) {\n this.overlay.set({ crosshair: null, markers, tooltip: null, docked: false });\n return;\n }\n const hasBars = current.series.some((entry) => entry.visible && entry.kind === 'bar');\n const crosshair =\n current.shape === 'cartesian' && trigger === 'axis'\n ? { ...at, isBand: hasBars && current.xType === 'category' }\n : null;\n if (current.shape === 'cartesian') {\n const index = categoryIndex(current, active.key);\n const targets =\n trigger === 'axis'\n ? current.series.filter(\n (entry) => entry.visible && entry.kind !== 'bar' && entry.values[index] !== null,\n )\n : [seriesOf(current, active.series)].filter((entry): entry is NonNullable<typeof entry> =>\n Boolean(entry && entry.kind !== 'bar'),\n );\n for (const target of targets) {\n const spot = engine.locate({ series: target.id, key: active.key });\n if (spot)\n markers.push({\n key: target.id,\n color: target.color,\n at: spot,\n selected: false,\n current: target.id === active.series,\n });\n }\n }\n const settings = this.resolvedTooltip();\n const tooltip =\n trigger === 'none'\n ? null\n : tooltipContext(current, active, { trigger, sort: settings.sort, total: settings.total });\n this.overlay.set({\n crosshair,\n markers,\n tooltip,\n docked: plot.clientWidth < TOOLTIP_DOCK_WIDTH,\n });\n }\n\n protected px(value: number | undefined) {\n return value === undefined ? null : `${value}px`;\n }\n\n protected colorOf(color: ChartColor) {\n return {\n slot: color.type === 'slot' ? String(color.slot) : null,\n tone: color.type === 'tone' ? color.tone : null,\n overflow: color.type === 'overflow' ? '' : null,\n };\n }\n\n protected strokeOf(entry: { series: string } | ChartLegendEntry, key?: string) {\n const current = this.chartModel();\n if (!current) return null;\n const owner =\n current.shape === 'pie'\n ? current.series[0]\n : seriesOf(current, key ?? ('series' in entry ? entry.series : entry.key));\n return owner && owner.stroke !== 'solid' ? owner.stroke : null;\n }\n\n protected markerKind(kind: string, indicator?: string) {\n if (indicator === 'line' || kind === 'line') return 'line';\n if (kind === 'scatter') return 'scatter';\n return 'bar';\n }\n\n /* ── Legend ────────────────────────────────────────────────────────── */\n\n protected legendValue(entry: ChartLegendEntry) {\n const current = this.chartModel();\n if (!current) return '';\n const owner = current.shape === 'pie' ? current.series[0] : seriesOf(current, entry.key);\n if (!owner) return '';\n const key = this.activeKey();\n const index =\n current.shape === 'pie'\n ? categoryIndex(current, entry.key)\n : key\n ? categoryIndex(current, key)\n : lastDrawn(owner.values);\n const raw = index >= 0 ? owner.values[index] : null;\n return raw === null || raw === undefined ? '' : owner.format(raw);\n }\n\n protected isCurrent(entry: ChartLegendEntry) {\n const current = this.chartModel();\n const key = this.activeKey();\n if (!key) return false;\n return current?.shape === 'pie' ? entry.key === key : this.activePoint()?.series === entry.key;\n }\n\n protected toggleEntry(\n entry: ChartLegendEntry,\n mode: 'toggle' | 'isolate',\n reason: ChangeReason,\n source: unknown,\n ) {\n const current = this.chartModel();\n if (!current) return;\n const keys = current.legend.map((item) => item.key);\n const next = toggleHidden(keys, this.hidden(), entry.key, mode);\n this.legendFocus.set(entry.key);\n this.requestHidden(next, reason, source);\n getLiveAnnouncer().announce(\n this.t(next.includes(entry.key) ? 'hidden' : 'shown', { series: entry.label }),\n );\n }\n\n protected onLegendClick(entry: ChartLegendEntry, event: MouseEvent) {\n this.toggleEntry(entry, event.shiftKey ? 'isolate' : 'toggle', this.pressReason(), event);\n }\n\n protected onLegendItemKey(entry: ChartLegendEntry, event: KeyboardEvent) {\n if (event.key === 'Enter' && event.shiftKey) {\n event.preventDefault();\n this.toggleEntry(entry, 'isolate', 'keyboard', event);\n }\n }\n\n protected emphasize(key: string | null) {\n this.engine?.emphasize(key);\n }\n\n /* One tab stop for the row; the arrows move inside it (APG Toolbar). */\n protected onLegendKeyDown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n if (target.closest('[data-part=\"menu\"]')) return;\n const row = event.currentTarget as HTMLElement;\n const items = [...row.querySelectorAll<HTMLElement>(':scope > button:not([hidden])')];\n const index = items.indexOf(target);\n if (index === -1) return;\n const rtl = getComputedStyle(this.host).direction === 'rtl';\n const step =\n event.key === 'ArrowRight' ? (rtl ? -1 : 1) : event.key === 'ArrowLeft' ? (rtl ? 1 : -1) : 0;\n let next: HTMLElement | undefined;\n if (step) next = items[(index + step + items.length) % items.length];\n if (event.key === 'Home') next = items[0];\n if (event.key === 'End') next = items[items.length - 1];\n if (!next) return;\n event.preventDefault();\n this.legendFocus.set(next.dataset['key'] ?? '__more');\n next.focus();\n }\n\n /**\n * Which entries fit on the line, measured by `@slotted/core/overflow` —\n * the arithmetic `toolbar` folds its controls with. The rest wait behind\n * the `+N` control, where they toggle the same series.\n */\n private fitLegend() {\n const node = this.legendRef()?.nativeElement;\n const current = untracked(this.chartModel);\n if (!node || !current) return;\n if (untracked(this.resolvedLegendOverflow) === 'wrap') {\n if (untracked(this.collapsed).length) this.collapsed.set([]);\n return;\n }\n for (const item of node.querySelectorAll<HTMLElement>(':scope > [data-part=\"legend-item\"]')) {\n if (!item.hidden)\n this.widths.set(item.dataset['key'] ?? '', item.getBoundingClientRect().width);\n }\n const more = node.querySelector<HTMLElement>(':scope > [data-part=\"legend-more\"]');\n const result = collapseState({\n units: current.legend.map((entry) => ({\n size: this.widths.get(entry.key) ?? 0,\n collapsible: true,\n })),\n available: node.clientWidth,\n gap: Number.parseFloat(getComputedStyle(node).columnGap) || 0,\n triggerSize: more && !more.hidden ? more.getBoundingClientRect().width : 40,\n });\n const previous = untracked(this.collapsed);\n if (\n previous.length !== result.collapsed.length ||\n previous.some((value, index) => value !== result.collapsed[index])\n ) {\n this.collapsed.set(result.collapsed);\n }\n }\n\n /* ── Layers ────────────────────────────────────────────────────────── */\n\n protected toggleLayer(name: string) {\n const layer = this.layerElement(name);\n layer?.togglePopover?.();\n }\n\n protected onLayerToggle(\n name: string,\n event: Event,\n control: HTMLElement,\n align: 'start' | 'end',\n focusFirst = true,\n ) {\n const open = (event as ToggleEvent).newState === 'open';\n this.layerOpen.update((state) => ({ ...state, [name]: open }));\n const layer = this.layerElement(name);\n if (!layer) return;\n if (open) {\n const box = layer.getBoundingClientRect();\n const at = placeLayer({\n anchor: control.getBoundingClientRect(),\n size: { width: box.width, height: box.height },\n viewport: { width: window.innerWidth, height: window.innerHeight },\n align,\n dir: getComputedStyle(control).direction === 'rtl' ? 'rtl' : 'ltr',\n });\n layer.style.setProperty('--slotted-chart-x', `${at.x}px`);\n layer.style.setProperty('--slotted-chart-y', `${at.y}px`);\n if (focusFirst) layer.querySelector<HTMLElement>('button')?.focus();\n } else if (layer.contains(document.activeElement) || document.activeElement === document.body) {\n control.focus();\n }\n }\n\n protected onLayerKeyDown(event: KeyboardEvent) {\n const layer = event.currentTarget as HTMLElement;\n const items = [...layer.querySelectorAll<HTMLElement>('button')].filter((item) => !item.hidden);\n const index = items.indexOf(document.activeElement as HTMLElement);\n const step = event.key === 'ArrowDown' ? 1 : event.key === 'ArrowUp' ? -1 : 0;\n let next: HTMLElement | undefined;\n if (step) next = items[(index + step + items.length) % items.length];\n if (event.key === 'Home') next = items[0];\n if (event.key === 'End') next = items[items.length - 1];\n if (!next) return;\n event.preventDefault();\n next.focus();\n }\n\n private layerElement(name: string) {\n const ref =\n name === 'menu' ? this.menuRef() : name === 'more' ? this.moreRef() : this.helpRef();\n return ref?.nativeElement ?? null;\n }\n\n protected menuAction(action: 'view' | 'fullscreen' | 'csv' | 'image', event: Event) {\n const reason = this.pressReason();\n this.menuRef()?.nativeElement.hidePopover?.();\n const current = this.chartModel();\n if (action === 'view') this.requestTable(!this.tableOpen(), reason, event);\n if (action === 'fullscreen') this.requestFullscreen(!this.fullscreen(), reason, event);\n if (action === 'csv' && current) {\n this.download(\n `${this.fileName()}.csv`,\n `data:text/csv;charset=utf-8,${encodeURIComponent(chartToCsv(current, this.t))}`,\n );\n }\n if (action === 'image') {\n const url = this.engine?.toDataURL();\n if (url)\n this.download(\n `${this.fileName()}.${url.startsWith('data:image/svg') ? 'svg' : 'png'}`,\n url,\n );\n }\n }\n\n private fileName() {\n return this.title() ?? 'chart';\n }\n\n private download(filename: string, url: string) {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n }\n\n protected resetZoomFromToolbar(event: Event) {\n const current = this.chartModel();\n this.requestZoom(FULL_ZOOM, 'clear', event);\n if (current) getLiveAnnouncer().announce(describeZoom(current, FULL_ZOOM, this.t));\n this.plotRef()?.nativeElement.focus();\n }\n\n protected showAll(event: Event) {\n this.requestHidden([], 'pointer', event);\n }\n\n protected onRetry() {\n this.engineFailure.set(null);\n this.retry.emit();\n }\n\n protected zoomed() {\n const current = this.chartModel();\n return Boolean(this.zoomable() && !isFullZoom(this.zoom()) && current?.shape === 'cartesian');\n }\n\n /* ── Keyboard and focus ────────────────────────────────────────────── */\n\n protected onPlotKeyDown(event: KeyboardEvent) {\n const current = this.chartModel();\n if (!current || !this.drawable() || this.tableOpen()) return;\n const actions = chartKeyAction(\n current,\n {\n active: this.activePoint(),\n selection: this.selection(),\n zoom: this.zoom(),\n zoomable: this.zoomable(),\n selectable: this.selectable(),\n },\n event.key,\n );\n if (actions === null) return;\n event.preventDefault();\n for (const action of actions) {\n if (action.type === 'active') {\n this.requestActive(action.point, action.reason, event);\n if (action.point)\n this.pointAnnouncer.say(describePoint(current, action.point, this.selection(), this.t));\n else this.pointAnnouncer.cancel();\n } else if (action.type === 'select') {\n this.requestSelection(action.point, 'keyboard', event);\n if (action.point)\n this.pointAnnouncer.say(describePoint(current, action.point, action.point, this.t));\n } else {\n this.requestZoom(action.zoom, action.reason, event);\n getLiveAnnouncer().announce(describeZoom(current, action.zoom, this.t));\n }\n }\n }\n\n protected onPlotFocus(event: FocusEvent) {\n const current = this.chartModel();\n if (!current || !this.drawable() || this.tableOpen() || this.activePoint()) return;\n if (!focusVisible(event.currentTarget as Element)) return;\n const point = firstPoint(current);\n if (!point) return;\n this.requestActive(point, 'keyboard', event);\n this.pointAnnouncer.say(describePoint(current, point, this.selection(), this.t));\n }\n\n protected onRootKeyDown(event: KeyboardEvent) {\n if (event.defaultPrevented || event.key !== 'Escape' || !this.fullscreen()) return;\n event.preventDefault();\n this.requestFullscreen(false, 'escape', event);\n }\n\n /* ── Handle ────────────────────────────────────────────────────────── */\n\n focus() {\n this.plotRef()?.nativeElement.focus();\n }\n\n resetZoom() {\n this.requestZoom(FULL_ZOOM, 'programmatic');\n }\n\n toDataURL() {\n return this.engine?.toDataURL() ?? null;\n }\n\n toCsv() {\n const current = this.chartModel();\n return current ? chartToCsv(current, this.t) : '';\n }\n}\n","@let current = chartModel(); @if (title() !== undefined || description() !== undefined ||\nresolvedToolbar() !== 'none') {\n<figcaption data-part=\"header\">\n <div>\n <div>\n @if (title() !== undefined) {\n <span data-part=\"title\" [id]=\"id + '-title'\">{{ title() }}</span>\n } @if (help() !== undefined) {\n <button\n #helpControl\n type=\"button\"\n data-part=\"help\"\n [attr.aria-label]=\"t('help')\"\n [attr.aria-controls]=\"id + '-help'\"\n [attr.aria-expanded]=\"layerOpen()['help'] ?? false\"\n [attr.data-open]=\"layerOpen()['help'] ? '' : null\"\n (click)=\"toggleLayer('help')\"\n >\n <span slIcon><svg slGlyph name=\"circle-info\"></svg></span>\n </button>\n <div\n #helpLayer\n popover=\"auto\"\n data-part=\"help-content\"\n role=\"note\"\n [id]=\"id + '-help'\"\n (toggle)=\"onLayerToggle('help', $event, helpControl, 'start', false)\"\n >\n {{ help() }}\n </div>\n }\n </div>\n @if (description() !== undefined) {\n <span data-part=\"description\" [id]=\"id + '-description'\">{{ description() }}</span>\n }\n </div>\n <div data-part=\"actions\"><ng-content select=\"[slChartActions]\" /></div>\n <!-- The box stands in every state, so the header's words wrap at one width; it\n holds nothing a reader can reach until the plot has something to act on. -->\n @if (resolvedToolbar() !== 'none') { @let ready = usable();\n <div\n data-part=\"toolbar\"\n [attr.role]=\"ready ? 'toolbar' : null\"\n [attr.aria-label]=\"ready ? t('toolbar') : null\"\n [attr.aria-hidden]=\"ready ? null : 'true'\"\n [attr.inert]=\"ready ? null : ''\"\n [attr.data-waiting]=\"ready ? null : ''\"\n >\n @if (zoomed()) {\n <button\n type=\"button\"\n data-part=\"zoom-reset\"\n [attr.aria-label]=\"t('resetZoom')\"\n [attr.title]=\"t('resetZoom')\"\n (click)=\"resetZoomFromToolbar($event)\"\n >\n <span slIcon><svg slGlyph name=\"rotate-ccw\"></svg></span>\n </button>\n }\n <button\n type=\"button\"\n data-part=\"view-toggle\"\n [attr.aria-label]=\"t('tableView')\"\n [attr.title]=\"t('tableView')\"\n [attr.aria-pressed]=\"tableOpen()\"\n [attr.data-pressed]=\"tableOpen() ? '' : null\"\n (click)=\"requestTable(!tableOpen(), pressReason(), $event)\"\n >\n <span slIcon><svg slGlyph name=\"file-spreadsheet\"></svg></span>\n </button>\n <button\n type=\"button\"\n data-part=\"fullscreen-toggle\"\n [attr.aria-label]=\"fullscreen() ? t('exitFullscreen') : t('fullscreen')\"\n [attr.title]=\"fullscreen() ? t('exitFullscreen') : t('fullscreen')\"\n (click)=\"requestFullscreen(!fullscreen(), pressReason(), $event)\"\n >\n <span slIcon><svg slGlyph [name]=\"fullscreen() ? 'minimize' : 'maximize'\"></svg></span>\n </button>\n <button\n #menuControl\n type=\"button\"\n data-part=\"menu-trigger\"\n aria-haspopup=\"menu\"\n [attr.aria-label]=\"t('more')\"\n [attr.title]=\"t('more')\"\n [attr.aria-expanded]=\"layerOpen()['menu'] ?? false\"\n [attr.data-open]=\"layerOpen()['menu'] ? '' : null\"\n (click)=\"toggleLayer('menu')\"\n >\n <span slIcon><svg slGlyph name=\"ellipsis\"></svg></span>\n </button>\n <div\n #menu\n popover=\"auto\"\n data-part=\"menu\"\n role=\"menu\"\n [attr.aria-label]=\"t('more')\"\n (toggle)=\"onLayerToggle('menu', $event, menuControl, 'end')\"\n (keydown)=\"onLayerKeyDown($event)\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"view\"\n (click)=\"menuAction('view', $event)\"\n >\n {{ t('tableView') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"fullscreen\"\n (click)=\"menuAction('fullscreen', $event)\"\n >\n {{ fullscreen() ? t('exitFullscreen') : t('fullscreen') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"csv\"\n (click)=\"menuAction('csv', $event)\"\n >\n {{ t('downloadCsv') }}\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n data-part=\"menu-item\"\n data-action=\"image\"\n (click)=\"menuAction('image', $event)\"\n >\n {{ t('downloadImage') }}\n </button>\n </div>\n </div>\n }\n</figcaption>\n} @if (legend()) {\n<div\n #legendRow\n data-part=\"legend\"\n [attr.role]=\"legendWaiting() ? null : legendInteractive() ? 'toolbar' : 'list'\"\n [attr.aria-label]=\"legendWaiting() ? null : t('legend')\"\n (keydown)=\"onLegendKeyDown($event)\"\n>\n @if (legendWaiting()) { @for (line of repeat(3); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n } } @else if (current) { @for (entry of current.legend; track entry.key; let index = $index) {\n <ng-container\n *ngTemplateOutlet=\"legendItem; context: { $implicit: entry, rowHidden: collapsed().includes(index), inLayer: false }\"\n />\n }\n <button\n #moreControl\n type=\"button\"\n data-part=\"legend-more\"\n aria-haspopup=\"true\"\n [attr.aria-label]=\"legendMoreName()\"\n [hidden]=\"collapsed().length === 0\"\n [attr.tabindex]=\"rovingKey() === null ? 0 : -1\"\n [attr.aria-expanded]=\"layerOpen()['more'] ?? false\"\n [attr.data-open]=\"layerOpen()['more'] ? '' : null\"\n (click)=\"toggleLayer('more')\"\n >\n {{ t('moreSeries', { count: collapsed().length }) }}\n </button>\n <div\n #moreLayer\n popover=\"auto\"\n data-part=\"menu\"\n role=\"group\"\n [attr.aria-label]=\"t('legend')\"\n (toggle)=\"onLayerToggle('more', $event, moreControl, 'start')\"\n (keydown)=\"onLayerKeyDown($event)\"\n >\n @for (index of collapsed(); track index) { @if (current.legend[index]; as entry) {\n <ng-container\n *ngTemplateOutlet=\"legendItem; context: { $implicit: entry, rowHidden: false, inLayer: true }\"\n />\n } }\n </div>\n }\n</div>\n}\n<ng-template #legendItem let-entry let-rowHidden=\"rowHidden\" let-inLayer=\"inLayer\">\n @let color = colorOf(entry.color); @if (legendInteractive()) {\n <button\n type=\"button\"\n data-part=\"legend-item\"\n [attr.data-key]=\"entry.key\"\n [attr.data-slot]=\"color.slot\"\n [attr.data-tone]=\"color.tone\"\n [attr.data-overflow]=\"color.overflow\"\n [attr.data-current]=\"isCurrent(entry) ? '' : null\"\n [attr.aria-pressed]=\"entry.visible\"\n [attr.data-pressed]=\"entry.visible ? '' : null\"\n [attr.tabindex]=\"inLayer || rovingKey() === entry.key ? 0 : -1\"\n [hidden]=\"rowHidden\"\n (click)=\"onLegendClick(entry, $event)\"\n (keydown)=\"onLegendItemKey(entry, $event)\"\n (focus)=\"legendFocus.set(inLayer ? legendFocus() : entry.key); emphasize(entry.visible ? entry.key : null)\"\n (blur)=\"emphasize(null)\"\n (pointerenter)=\"entry.visible && emphasize(entry.key)\"\n (pointerleave)=\"emphasize(null)\"\n >\n <ng-container *ngTemplateOutlet=\"legendContent; context: { $implicit: entry }\" />\n </button>\n } @else {\n <span\n role=\"listitem\"\n data-part=\"legend-item\"\n [attr.data-key]=\"entry.key\"\n [attr.data-slot]=\"color.slot\"\n [attr.data-tone]=\"color.tone\"\n [attr.data-overflow]=\"color.overflow\"\n [attr.data-current]=\"isCurrent(entry) ? '' : null\"\n [hidden]=\"rowHidden\"\n (pointerenter)=\"entry.visible && emphasize(entry.key)\"\n (pointerleave)=\"emphasize(null)\"\n >\n <ng-container *ngTemplateOutlet=\"legendContent; context: { $implicit: entry }\" />\n </span>\n }\n</ng-template>\n<ng-template #legendContent let-entry>\n @if (legendItemTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"custom.template; context: { $implicit: entry, value: legendValue(entry), current: isCurrent(entry) }\"\n />\n } @else {\n <span\n data-part=\"legend-marker\"\n [attr.data-kind]=\"entry.kind === 'area' || entry.kind === 'bar' || entry.kind === 'pie' ? 'bar' : entry.kind\"\n [attr.data-stroke]=\"strokeOf(entry)\"\n ></span>\n <span data-part=\"legend-label\" [attr.title]=\"entry.label\">{{ entry.label }}</span>\n @if (legendValues()) {\n <span data-part=\"legend-value\">{{ legendValue(entry) }}</span>\n } }\n</ng-template>\n<div\n #plot\n data-part=\"plot\"\n role=\"group\"\n tabindex=\"0\"\n [attr.aria-roledescription]=\"t('roledescription')\"\n [attr.aria-labelledby]=\"title() !== undefined ? id + '-title' : null\"\n [attr.aria-label]=\"title() === undefined ? t('roledescription') : null\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-busy]=\"loading() ? 'true' : null\"\n (keydown)=\"onPlotKeyDown($event)\"\n (focus)=\"onPlotFocus($event)\"\n (blur)=\"requestActive(null, 'blur', $event)\"\n>\n @let overlayNow = overlay();\n <div\n data-part=\"crosshair\"\n [hidden]=\"!overlayNow.crosshair\"\n [attr.data-band]=\"overlayNow.crosshair?.isBand ? '' : null\"\n [attr.data-orientation]=\"current?.orientation ?? 'vertical'\"\n [style.--slotted-chart-x]=\"px(overlayNow.crosshair?.x)\"\n [style.--slotted-chart-y]=\"px(overlayNow.crosshair?.y)\"\n [style.--slotted-chart-band-start]=\"px(overlayNow.crosshair?.band?.start)\"\n [style.--slotted-chart-band-size]=\"px(overlayNow.crosshair?.band?.size)\"\n [style.--slotted-chart-frame-start]=\"px(overlayNow.crosshair?.frame?.start)\"\n [style.--slotted-chart-frame-size]=\"px(overlayNow.crosshair?.frame?.size)\"\n ></div>\n <div #canvas data-part=\"canvas\" aria-hidden=\"true\" [hidden]=\"!drawable()\"></div>\n @for (marker of overlayNow.markers; track marker.key) { @let markerColor = colorOf(marker.color);\n <div\n data-part=\"marker\"\n aria-hidden=\"true\"\n [attr.data-slot]=\"markerColor.slot\"\n [attr.data-tone]=\"markerColor.tone\"\n [attr.data-overflow]=\"markerColor.overflow\"\n [attr.data-selected]=\"marker.selected ? '' : null\"\n [attr.data-current]=\"marker.current ? '' : null\"\n [style.--slotted-chart-x]=\"px(marker.at.x)\"\n [style.--slotted-chart-y]=\"px(marker.at.y)\"\n ></div>\n }\n <div\n #tooltipBox\n data-part=\"tooltip\"\n aria-hidden=\"true\"\n [attr.data-open]=\"overlayNow.tooltip ? '' : null\"\n [attr.data-docked]=\"overlayNow.docked ? '' : null\"\n >\n @if (overlayNow.tooltip && current) { @if (tooltipTemplate(); as custom) {\n <ng-container\n *ngTemplateOutlet=\"custom.template; context: { $implicit: overlayNow.tooltip, model: current }\"\n />\n } @else {\n <div data-part=\"tooltip-title\">{{ overlayNow.tooltip.title }}</div>\n @for (note of overlayNow.tooltip.notes; track note) {\n <div data-part=\"tooltip-note\">{{ note }}</div>\n } @for (item of overlayNow.tooltip.items; track item.series + item.label) { @let itemColor =\n colorOf(item.color);\n <div\n data-part=\"tooltip-item\"\n [attr.data-current]=\"overlayNow.tooltip.items.length > 1 && item.current ? '' : null\"\n [attr.data-slot]=\"itemColor.slot\"\n [attr.data-tone]=\"itemColor.tone\"\n [attr.data-overflow]=\"itemColor.overflow\"\n >\n @if (resolvedTooltip().indicator !== 'none') {\n <span\n data-part=\"tooltip-marker\"\n [attr.data-kind]=\"markerKind(item.kind, resolvedTooltip().indicator)\"\n [attr.data-stroke]=\"strokeOf(item)\"\n ></span>\n }\n <span data-part=\"tooltip-label\">{{ item.label }}</span>\n <span data-part=\"tooltip-value\"\n >{{ item.share ? item.share + ' · ' + item.formatted : item.formatted }}</span\n >\n </div>\n } @if (overlayNow.tooltip.total; as total) {\n <div data-part=\"tooltip-total\">\n <span>{{ t('total') }}</span>\n <span data-part=\"tooltip-value\">{{ total.formatted }}</span>\n </div>\n } } }\n </div>\n @if (drawable() && current?.shape === 'pie' && (current?.series[0]?.innerRadius ?? 0) > 0) {\n <div data-part=\"center\" aria-hidden=\"true\">\n @if (centerTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: { $implicit: current }\" />\n } @else {\n <span data-part=\"center-value\">{{ current!.series[0]!.format(current!.total) }}</span>\n <span data-part=\"center-label\">{{ t('total') }}</span>\n }\n </div>\n } @if (table(); as rows) {\n <div\n #tableRegion\n data-part=\"table-region\"\n role=\"region\"\n tabindex=\"0\"\n [attr.aria-labelledby]=\"title() !== undefined ? id + '-title' : null\"\n >\n <table data-part=\"table\">\n <caption>\n {{ title() }}\n </caption>\n <thead>\n <tr>\n @for (column of rows.columns; track column.key; let index = $index) {\n <th scope=\"col\" [attr.data-numeric]=\"index > 0 ? '' : null\">{{ column.label }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows.rows; track row.key) {\n <tr [attr.data-current]=\"row.key === activeKey() ? '' : null\">\n @for (cell of row.cells; track $index; let index = $index) { @if (index === 0) {\n <th scope=\"row\">{{ cell.text }}</th>\n } @else {\n <td data-numeric>{{ cell.text }}</td>\n } }\n </tr>\n }\n </tbody>\n </table>\n </div>\n } @if (loading()) {\n <div data-part=\"skeleton\" aria-hidden=\"true\" [attr.data-kind]=\"skeletonKind()\">\n <div data-ui=\"skeleton\" data-part=\"region\" data-animation=\"shimmer\" data-loading>\n @if (skeletonKind() === 'pie') {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"circle\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n } @else {\n <div data-skeleton=\"y\">\n @for (line of repeat(5); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n <div data-skeleton=\"marks\">\n @for (mark of repeat(skeletonKind() === 'bar' ? 7 : 2); track mark) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n <div data-skeleton=\"x\">\n @for (line of repeat(6); track line) {\n <span\n data-ui=\"skeleton\"\n data-part=\"root\"\n data-shape=\"block\"\n data-size=\"md\"\n data-animation=\"shimmer\"\n data-loading\n aria-hidden=\"true\"\n ></span>\n }\n </div>\n }\n </div>\n </div>\n } @else if (failed()) {\n <div data-part=\"error\">\n @if (errorTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template\" />\n } @else {\n <section\n data-ui=\"result-state\"\n data-part=\"root\"\n data-status=\"error\"\n data-reach=\"section\"\n data-align=\"center\"\n data-live=\"polite\"\n >\n <div data-part=\"media\" aria-hidden=\"true\"></div>\n <div data-part=\"content\" role=\"status\"><div data-part=\"title\">{{ t('error') }}</div></div>\n <div data-part=\"actions\">\n <button\n data-ui=\"button\"\n data-part=\"root\"\n data-variant=\"outline\"\n data-tone=\"secondary\"\n data-size=\"sm\"\n type=\"button\"\n (click)=\"onRetry()\"\n >\n <span data-part=\"label\">{{ t('retry') }}</span>\n </button>\n </div>\n </section>\n }\n </div>\n } @else if (current?.empty; as reason) {\n <div data-part=\"empty\">\n @if (emptyTemplate(); as custom) {\n <ng-container *ngTemplateOutlet=\"custom.template; context: { $implicit: reason }\" />\n } @else {\n <section\n data-ui=\"result-state\"\n data-part=\"root\"\n data-reach=\"section\"\n data-align=\"center\"\n data-live=\"polite\"\n [attr.data-status]=\"reason === 'all-hidden' ? 'no-results' : 'empty'\"\n >\n <div data-part=\"media\" aria-hidden=\"true\"></div>\n <div data-part=\"content\" role=\"status\">\n <div data-part=\"title\">{{ reason === 'all-hidden' ? t('allHidden') : t('noData') }}</div>\n </div>\n @if (reason === 'all-hidden') {\n <div data-part=\"actions\">\n <button\n data-ui=\"button\"\n data-part=\"root\"\n data-variant=\"outline\"\n data-tone=\"secondary\"\n data-size=\"sm\"\n type=\"button\"\n (click)=\"showAll($event)\"\n >\n <span data-part=\"label\">{{ t('showAll') }}</span>\n </button>\n </div>\n }\n </section>\n }\n </div>\n }\n <p data-part=\"summary\" [id]=\"id + '-summary'\">{{ summary() }}</p>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { createPositioner } from '@slotted/core/positioner';
|
|
|
6
6
|
import { createPresence } from '@slotted/core/presence';
|
|
7
7
|
import { createControllable } from '@slotted/core/state';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
|
-
import { InjectionToken, inject, booleanAttribute, numberAttribute, model, output, input, computed, ViewContainerRef, Injector, viewChild, signal, HostAttributeToken, DestroyRef, effect, untracked, afterNextRender, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive, ElementRef
|
|
9
|
+
import { InjectionToken, inject, booleanAttribute, numberAttribute, model, output, input, computed, ViewContainerRef, Injector, viewChild, signal, HostAttributeToken, DestroyRef, effect, untracked, afterNextRender, afterRenderEffect, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive, ElementRef } from '@angular/core';
|
|
10
10
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
|
|
11
11
|
import { injectMessages, injectLocale } from '@slotted/angular/i18n';
|
|
12
12
|
import { SlGlyph, SlIcon } from '@slotted/angular/icon';
|
|
@@ -200,6 +200,9 @@ class SlCombobox {
|
|
|
200
200
|
ownId = `sl-combobox-input-${this.identifier}`;
|
|
201
201
|
registry = signal(new Map(), /* @ts-ignore */
|
|
202
202
|
...(ngDevMode ? [{ debugName: "registry" }] : /* istanbul ignore next */ []));
|
|
203
|
+
/** Bumped by an option whose presence or visibility changed; read once per render. */
|
|
204
|
+
collection = signal(0, /* @ts-ignore */
|
|
205
|
+
...(ngDevMode ? [{ debugName: "collection" }] : /* istanbul ignore next */ []));
|
|
203
206
|
optionCount = signal(0, /* @ts-ignore */
|
|
204
207
|
...(ngDevMode ? [{ debugName: "optionCount" }] : /* istanbul ignore next */ []));
|
|
205
208
|
/**
|
|
@@ -327,6 +330,13 @@ class SlCombobox {
|
|
|
327
330
|
if (this.resolvedMount() === 'eager' && !this.isOpen())
|
|
328
331
|
this.build();
|
|
329
332
|
});
|
|
333
|
+
/* One count per render, however many options changed in it. Each option
|
|
334
|
+
counting the popup itself read the whole collection once per option —
|
|
335
|
+
quadratic in the option count on every keystroke that filters. */
|
|
336
|
+
afterRenderEffect(() => {
|
|
337
|
+
this.collection();
|
|
338
|
+
untracked(() => this.recount());
|
|
339
|
+
});
|
|
330
340
|
destroyRef.onDestroy(() => this.teardown());
|
|
331
341
|
}
|
|
332
342
|
/**
|
|
@@ -369,6 +379,10 @@ class SlCombobox {
|
|
|
369
379
|
return given(label, query);
|
|
370
380
|
return this.fallbackFilter().contains(label, query);
|
|
371
381
|
}
|
|
382
|
+
/** An option says the collection changed; the count follows after the render. */
|
|
383
|
+
collectionChanged() {
|
|
384
|
+
this.collection.update((version) => version + 1);
|
|
385
|
+
}
|
|
372
386
|
recount() {
|
|
373
387
|
/* The offer to add what was typed is drawn *because* the count is nought,
|
|
374
388
|
so counting it would take it away, which would bring it back (CB8). */
|
|
@@ -1308,10 +1322,17 @@ class SlComboboxItem {
|
|
|
1308
1322
|
*/
|
|
1309
1323
|
afterRenderEffect(() => {
|
|
1310
1324
|
this.visible();
|
|
1311
|
-
|
|
1312
|
-
this.
|
|
1325
|
+
const value = this.value();
|
|
1326
|
+
const label = this.label();
|
|
1327
|
+
/* Untracked: what the parent reads while registering is its state, not
|
|
1328
|
+
this option's, and tracking it re-ran every option's effect on every
|
|
1329
|
+
open and every highlight move. */
|
|
1330
|
+
untracked(() => {
|
|
1331
|
+
this.combobox.registerLabel(value, label);
|
|
1332
|
+
this.combobox.collectionChanged();
|
|
1333
|
+
});
|
|
1313
1334
|
});
|
|
1314
|
-
inject(DestroyRef).onDestroy(() => this.combobox.
|
|
1335
|
+
inject(DestroyRef).onDestroy(() => this.combobox.collectionChanged());
|
|
1315
1336
|
}
|
|
1316
1337
|
onPointerEnter(event) {
|
|
1317
1338
|
if (this.disabled())
|