@neuravision/ng-construct 0.7.0 → 0.9.0
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.
|
@@ -3498,6 +3498,932 @@ declare class AfTreeNodeHarness {
|
|
|
3498
3498
|
getElement(): HTMLElement;
|
|
3499
3499
|
}
|
|
3500
3500
|
|
|
3501
|
+
/**
|
|
3502
|
+
* Shared data contracts for the `af-*-chart` family.
|
|
3503
|
+
*
|
|
3504
|
+
* The shapes mirror the dashboard stats DTO (`{ value, delta, series, breakdown }`)
|
|
3505
|
+
* so server aggregates map onto the charts with no client-side reshaping:
|
|
3506
|
+
* a time/category series feeds {@link AfChartSeries}, a breakdown feeds
|
|
3507
|
+
* {@link AfChartDatum}.
|
|
3508
|
+
*/
|
|
3509
|
+
/** Maximum number of distinct palette colours before they repeat. */
|
|
3510
|
+
declare const AF_CHART_PALETTE_SIZE = 8;
|
|
3511
|
+
/**
|
|
3512
|
+
* A named data series sharing the chart's category axis. Used by the line,
|
|
3513
|
+
* area and bar charts.
|
|
3514
|
+
*/
|
|
3515
|
+
interface AfChartSeries {
|
|
3516
|
+
/** Legend label and accessible series name. */
|
|
3517
|
+
name: string;
|
|
3518
|
+
/**
|
|
3519
|
+
* Y-values aligned 1:1 with the chart's `categories` input. A `null` entry
|
|
3520
|
+
* renders as a gap (missing data) rather than a zero.
|
|
3521
|
+
*/
|
|
3522
|
+
values: (number | null)[];
|
|
3523
|
+
/** Optional explicit CSS colour; defaults to the palette slot for the series index. */
|
|
3524
|
+
color?: string;
|
|
3525
|
+
}
|
|
3526
|
+
/**
|
|
3527
|
+
* A single labelled magnitude used by part-to-whole charts (donut/pie) and as
|
|
3528
|
+
* the simplest single-series shape for bars.
|
|
3529
|
+
*/
|
|
3530
|
+
interface AfChartDatum {
|
|
3531
|
+
/** Slice/bar label — shown in the legend and the accessible data table. */
|
|
3532
|
+
label: string;
|
|
3533
|
+
/** Magnitude; negative values are clamped to 0 for part-to-whole charts. */
|
|
3534
|
+
value: number;
|
|
3535
|
+
/** Optional explicit CSS colour; defaults to the palette slot for the datum index. */
|
|
3536
|
+
color?: string;
|
|
3537
|
+
}
|
|
3538
|
+
/** Semantic colour buckets shared by the gauge and threshold-driven visuals. */
|
|
3539
|
+
type AfChartStatus = 'default' | 'success' | 'warning' | 'danger';
|
|
3540
|
+
/**
|
|
3541
|
+
* A gauge threshold band: once the gauge value reaches `from` (in value units),
|
|
3542
|
+
* the arc adopts `status`. The highest matching band wins.
|
|
3543
|
+
*/
|
|
3544
|
+
interface AfGaugeThreshold {
|
|
3545
|
+
/** Inclusive lower bound in the gauge's own value units. */
|
|
3546
|
+
from: number;
|
|
3547
|
+
/** Colour bucket applied at or above `from`. */
|
|
3548
|
+
status: AfChartStatus;
|
|
3549
|
+
}
|
|
3550
|
+
/** How a bar chart lays out multiple series. */
|
|
3551
|
+
type AfBarLayout = 'grouped' | 'stacked';
|
|
3552
|
+
/** Row model for the accessible data-table fallback rendered by every chart. */
|
|
3553
|
+
interface AfChartTableModel {
|
|
3554
|
+
/** Caption summarising the chart for assistive technology. */
|
|
3555
|
+
caption: string;
|
|
3556
|
+
/** Column headers; the first is the category/label column. */
|
|
3557
|
+
headers: string[];
|
|
3558
|
+
/** Body rows, each aligned 1:1 with `headers`. */
|
|
3559
|
+
rows: (string | number)[][];
|
|
3560
|
+
}
|
|
3561
|
+
|
|
3562
|
+
/**
|
|
3563
|
+
* Accessible data-table equivalent of a chart, rendered as a real semantic
|
|
3564
|
+
* `<table>`. Every `af-*-chart` embeds one inside `.ct-chart__table-wrap`, which
|
|
3565
|
+
* keeps it visually hidden but available to assistive technology by default and
|
|
3566
|
+
* reveals it when the consumer toggles `.ct-chart--show-table`.
|
|
3567
|
+
*
|
|
3568
|
+
* This guarantees the chart's information is never conveyed by colour or shape
|
|
3569
|
+
* alone (WCAG 1.4.1) and gives screen-reader and keyboard users the exact values.
|
|
3570
|
+
*
|
|
3571
|
+
* @docs-private — consumers use it indirectly via the chart components.
|
|
3572
|
+
*/
|
|
3573
|
+
declare class AfChartDataTableComponent {
|
|
3574
|
+
/** Table model (caption, headers, rows) describing the chart's data. */
|
|
3575
|
+
model: _angular_core.InputSignal<AfChartTableModel>;
|
|
3576
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfChartDataTableComponent, never>;
|
|
3577
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfChartDataTableComponent, "af-chart-data-table", never, { "model": { "alias": "model"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3578
|
+
}
|
|
3579
|
+
|
|
3580
|
+
/** Translatable strings shared by all chart components. */
|
|
3581
|
+
interface AfChartI18n {
|
|
3582
|
+
/** Accessible label for the button that reveals the data-table fallback. */
|
|
3583
|
+
showTable: string;
|
|
3584
|
+
/** Accessible label for the button that hides the data-table fallback. */
|
|
3585
|
+
hideTable: string;
|
|
3586
|
+
/** Visible/SR text shown when a chart has no data. */
|
|
3587
|
+
noData: string;
|
|
3588
|
+
/** Header for the value column in the data-table fallback. */
|
|
3589
|
+
valueHeader: string;
|
|
3590
|
+
/** Header for the category column in the data-table fallback. */
|
|
3591
|
+
categoryHeader: string;
|
|
3592
|
+
/** Header for the series column in the (long-format) data-table fallback. */
|
|
3593
|
+
seriesHeader: string;
|
|
3594
|
+
/** Header for the percentage column in the donut data-table fallback. */
|
|
3595
|
+
percentHeader: string;
|
|
3596
|
+
/** Suffix appended to a chart's `aria-label` describing the table fallback. */
|
|
3597
|
+
tableSuffix: string;
|
|
3598
|
+
/**
|
|
3599
|
+
* Template for the sparkline's `aria-label` summary. Supports the placeholders
|
|
3600
|
+
* `{label}`, `{count}`, `{min}`, `{max}` and `{last}`. Optional — a built-in
|
|
3601
|
+
* English default is used when omitted.
|
|
3602
|
+
*/
|
|
3603
|
+
sparklineSummary?: string;
|
|
3604
|
+
}
|
|
3605
|
+
/**
|
|
3606
|
+
* Injection token to override the chart components' screen-reader and control
|
|
3607
|
+
* strings. Libraries ship English defaults; consumers translate via DI.
|
|
3608
|
+
*
|
|
3609
|
+
* @example
|
|
3610
|
+
* providers: [{
|
|
3611
|
+
* provide: AF_CHART_I18N,
|
|
3612
|
+
* useValue: {
|
|
3613
|
+
* showTable: 'Daten als Tabelle anzeigen',
|
|
3614
|
+
* hideTable: 'Tabelle ausblenden',
|
|
3615
|
+
* noData: 'Keine Daten',
|
|
3616
|
+
* valueHeader: 'Wert',
|
|
3617
|
+
* categoryHeader: 'Kategorie',
|
|
3618
|
+
* seriesHeader: 'Datenreihe',
|
|
3619
|
+
* percentHeader: 'Anteil',
|
|
3620
|
+
* tableSuffix: 'Datentabelle unterhalb des Diagramms verfügbar.',
|
|
3621
|
+
* },
|
|
3622
|
+
* }]
|
|
3623
|
+
*/
|
|
3624
|
+
declare const AF_CHART_I18N: InjectionToken<AfChartI18n>;
|
|
3625
|
+
|
|
3626
|
+
/**
|
|
3627
|
+
* Pure, dependency-free geometry helpers shared by the chart components.
|
|
3628
|
+
*
|
|
3629
|
+
* Everything here is SSR-safe: no DOM, no `window`, no `Date`. Inputs and
|
|
3630
|
+
* outputs are plain numbers and strings so the functions are trivially unit
|
|
3631
|
+
* testable and reusable across line, bar, donut, sparkline and gauge charts.
|
|
3632
|
+
*/
|
|
3633
|
+
/** A point in SVG user space. */
|
|
3634
|
+
interface ChartPoint {
|
|
3635
|
+
x: number;
|
|
3636
|
+
y: number;
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3639
|
+
/** Internal per-point geometry carrying the source value and labels for titles/dots. */
|
|
3640
|
+
interface PlotPoint extends ChartPoint {
|
|
3641
|
+
value: number;
|
|
3642
|
+
category: string;
|
|
3643
|
+
series: string;
|
|
3644
|
+
}
|
|
3645
|
+
/** Resolved geometry for a single series. */
|
|
3646
|
+
interface SeriesGeom$1 {
|
|
3647
|
+
name: string;
|
|
3648
|
+
color: string;
|
|
3649
|
+
lineSegments: string[];
|
|
3650
|
+
areaSegments: string[];
|
|
3651
|
+
dots: PlotPoint[];
|
|
3652
|
+
}
|
|
3653
|
+
/**
|
|
3654
|
+
* Accessible line / area chart for time-series and trend data.
|
|
3655
|
+
*
|
|
3656
|
+
* Renders one or more {@link AfChartSeries} over a shared category axis as an
|
|
3657
|
+
* SVG. Geometry is computed with the SSR-safe `chart-geometry` helpers — no DOM,
|
|
3658
|
+
* `window`, or `Date` access — so it renders identically on the server.
|
|
3659
|
+
*
|
|
3660
|
+
* @example Single trend line
|
|
3661
|
+
* <af-line-chart
|
|
3662
|
+
* ariaLabel="Revenue, last 30 days"
|
|
3663
|
+
* [categories]="days"
|
|
3664
|
+
* [series]="[{ name: 'Revenue', values: revenue }]" />
|
|
3665
|
+
*
|
|
3666
|
+
* @example Multi-series area chart
|
|
3667
|
+
* <af-line-chart
|
|
3668
|
+
* ariaLabel="AI cost by origin"
|
|
3669
|
+
* [categories]="weeks"
|
|
3670
|
+
* [series]="[
|
|
3671
|
+
* { name: 'Analyzer', values: analyzer },
|
|
3672
|
+
* { name: 'Resolver', values: resolver },
|
|
3673
|
+
* ]"
|
|
3674
|
+
* [area]="true" />
|
|
3675
|
+
*
|
|
3676
|
+
* @accessibility
|
|
3677
|
+
* - The SVG carries `role="img"` and an `aria-label` describing the chart, with
|
|
3678
|
+
* a pointer to the always-present data-table fallback.
|
|
3679
|
+
* - A visually-hidden {@link AfChartDataTableComponent} mirrors every value so
|
|
3680
|
+
* information is never conveyed by colour alone (WCAG 1.4.1); a toggle reveals it.
|
|
3681
|
+
* - Each series is labelled in the legend, so colour is never the sole carrier.
|
|
3682
|
+
* - Series colours come from the contrast-checked `--color-chart-series-*` tokens.
|
|
3683
|
+
* - All user-facing strings are configurable via {@link AF_CHART_I18N}.
|
|
3684
|
+
*/
|
|
3685
|
+
declare class AfLineChartComponent {
|
|
3686
|
+
protected readonly i18n: _neuravision_ng_construct.AfChartI18n;
|
|
3687
|
+
protected readonly margin: {
|
|
3688
|
+
top: number;
|
|
3689
|
+
right: number;
|
|
3690
|
+
bottom: number;
|
|
3691
|
+
left: number;
|
|
3692
|
+
};
|
|
3693
|
+
protected readonly viewWidth = 640;
|
|
3694
|
+
protected readonly tableId: string;
|
|
3695
|
+
/** Accessible chart label (required by the WAI-ARIA `img` role). */
|
|
3696
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
3697
|
+
/** X-axis category labels (e.g. dates). Series values align 1:1 with these. */
|
|
3698
|
+
categories: _angular_core.InputSignal<string[]>;
|
|
3699
|
+
/** One or more data series sharing the category axis. */
|
|
3700
|
+
series: _angular_core.InputSignal<AfChartSeries[]>;
|
|
3701
|
+
/** Fill the area beneath each line. */
|
|
3702
|
+
area: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3703
|
+
/** Render point markers on each value. */
|
|
3704
|
+
showDots: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3705
|
+
/** Show the series legend. */
|
|
3706
|
+
showLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3707
|
+
/** Chart height in viewBox units (width is fluid). */
|
|
3708
|
+
height: _angular_core.InputSignal<number>;
|
|
3709
|
+
/** Force the y-axis minimum; defaults to a nice value derived from the data. */
|
|
3710
|
+
yMin: _angular_core.InputSignal<number | null>;
|
|
3711
|
+
/** Force the y-axis maximum; defaults to a nice value derived from the data. */
|
|
3712
|
+
yMax: _angular_core.InputSignal<number | null>;
|
|
3713
|
+
/** BCP-47 locale for number formatting (e.g. `'de-DE'`). */
|
|
3714
|
+
locale: _angular_core.InputSignal<string | undefined>;
|
|
3715
|
+
/** `Intl.NumberFormat` options for axis and value formatting. */
|
|
3716
|
+
valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
|
|
3717
|
+
/** Whether the data-table fallback starts visible. */
|
|
3718
|
+
showTableInitially: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3719
|
+
private readonly tableOverride;
|
|
3720
|
+
protected readonly tableVisible: _angular_core.Signal<boolean>;
|
|
3721
|
+
protected readonly hasData: _angular_core.Signal<boolean>;
|
|
3722
|
+
protected readonly viewBox: _angular_core.Signal<string>;
|
|
3723
|
+
protected readonly svgAriaLabel: _angular_core.Signal<string>;
|
|
3724
|
+
/** Resolved colour per series — explicit override or contrast-checked palette token. */
|
|
3725
|
+
private readonly seriesColors;
|
|
3726
|
+
protected readonly legend: _angular_core.Signal<{
|
|
3727
|
+
name: string;
|
|
3728
|
+
color: string;
|
|
3729
|
+
}[]>;
|
|
3730
|
+
/** All geometry needed by the template, derived in a single pass. */
|
|
3731
|
+
protected readonly plot: _angular_core.Signal<{
|
|
3732
|
+
baseY: number;
|
|
3733
|
+
yTicks: {
|
|
3734
|
+
value: number;
|
|
3735
|
+
y: number;
|
|
3736
|
+
label: string;
|
|
3737
|
+
}[];
|
|
3738
|
+
xLabels: {
|
|
3739
|
+
label: string;
|
|
3740
|
+
x: number;
|
|
3741
|
+
i: number;
|
|
3742
|
+
}[];
|
|
3743
|
+
series: SeriesGeom$1[];
|
|
3744
|
+
}>;
|
|
3745
|
+
protected readonly tableModel: _angular_core.Signal<AfChartTableModel>;
|
|
3746
|
+
protected toggleTable(): void;
|
|
3747
|
+
protected formatValue(value: number): string;
|
|
3748
|
+
private format;
|
|
3749
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfLineChartComponent, never>;
|
|
3750
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfLineChartComponent, "af-line-chart", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "categories": { "alias": "categories"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "showTableInitially": { "alias": "showTableInitially"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3751
|
+
}
|
|
3752
|
+
|
|
3753
|
+
/**
|
|
3754
|
+
* Test harness for AfLineChartComponent.
|
|
3755
|
+
*
|
|
3756
|
+
* Wraps DOM queries behind a semantic API so tests read intent, not selectors.
|
|
3757
|
+
*
|
|
3758
|
+
* @example
|
|
3759
|
+
* const harness = new AfLineChartHarness(fixture.nativeElement);
|
|
3760
|
+
* expect(harness.getSeriesCount()).toBe(2);
|
|
3761
|
+
* harness.toggleTable();
|
|
3762
|
+
* expect(harness.isTableVisible()).toBe(true);
|
|
3763
|
+
*/
|
|
3764
|
+
declare class AfLineChartHarness {
|
|
3765
|
+
private readonly hostEl;
|
|
3766
|
+
constructor(container: HTMLElement);
|
|
3767
|
+
/** Returns the chart `<svg>`, or null when the empty state is shown. */
|
|
3768
|
+
getSvg(): SVGSVGElement | null;
|
|
3769
|
+
/** Returns the SVG's `aria-label`. */
|
|
3770
|
+
getAriaLabel(): string | null;
|
|
3771
|
+
/** Returns the number of rendered series groups. */
|
|
3772
|
+
getSeriesCount(): number;
|
|
3773
|
+
/** Returns all line `<path>` `d` attributes. */
|
|
3774
|
+
getLinePaths(): string[];
|
|
3775
|
+
/** Returns the number of area fills (0 unless `area` is enabled). */
|
|
3776
|
+
getAreaCount(): number;
|
|
3777
|
+
/** Returns the number of point markers. */
|
|
3778
|
+
getDotCount(): number;
|
|
3779
|
+
/** Returns the legend labels in order. */
|
|
3780
|
+
getLegendLabels(): string[];
|
|
3781
|
+
/** Returns the rendered y-axis tick labels. */
|
|
3782
|
+
getYTickLabels(): string[];
|
|
3783
|
+
/** Returns whether the empty-state message is shown. */
|
|
3784
|
+
isEmpty(): boolean;
|
|
3785
|
+
/** Returns the accessible data table element (always present when data exists). */
|
|
3786
|
+
getTable(): HTMLTableElement | null;
|
|
3787
|
+
/** Returns the data-table header cell texts. */
|
|
3788
|
+
getTableHeaders(): string[];
|
|
3789
|
+
/** Returns the number of data-table body rows. */
|
|
3790
|
+
getTableRowCount(): number;
|
|
3791
|
+
/** Returns the toggle button that reveals/hides the data table. */
|
|
3792
|
+
getToggle(): HTMLButtonElement | null;
|
|
3793
|
+
/** Clicks the data-table toggle button. */
|
|
3794
|
+
toggleTable(): void;
|
|
3795
|
+
/** Returns whether the data table is visually revealed. */
|
|
3796
|
+
isTableVisible(): boolean;
|
|
3797
|
+
}
|
|
3798
|
+
|
|
3799
|
+
/** A single rendered bar rectangle in SVG user space, with its accessible title. */
|
|
3800
|
+
interface PlotBar {
|
|
3801
|
+
x: number;
|
|
3802
|
+
y: number;
|
|
3803
|
+
width: number;
|
|
3804
|
+
height: number;
|
|
3805
|
+
title: string;
|
|
3806
|
+
}
|
|
3807
|
+
/** Resolved geometry for a single series: its colour and the bars to render. */
|
|
3808
|
+
interface SeriesGeom {
|
|
3809
|
+
name: string;
|
|
3810
|
+
color: string;
|
|
3811
|
+
bars: PlotBar[];
|
|
3812
|
+
}
|
|
3813
|
+
/** A value-axis grid line plus its tick label, pre-positioned for the active orientation. */
|
|
3814
|
+
interface ValueTick {
|
|
3815
|
+
value: number;
|
|
3816
|
+
label: string;
|
|
3817
|
+
/** Grid-line endpoints. */
|
|
3818
|
+
x1: number;
|
|
3819
|
+
y1: number;
|
|
3820
|
+
x2: number;
|
|
3821
|
+
y2: number;
|
|
3822
|
+
/** Tick-label anchor. */
|
|
3823
|
+
labelX: number;
|
|
3824
|
+
labelY: number;
|
|
3825
|
+
}
|
|
3826
|
+
/** A category-axis label, pre-positioned and anchored for the active orientation. */
|
|
3827
|
+
interface CategoryLabel {
|
|
3828
|
+
label: string;
|
|
3829
|
+
x: number;
|
|
3830
|
+
y: number;
|
|
3831
|
+
}
|
|
3832
|
+
/** Endpoints of the zero/axis line. */
|
|
3833
|
+
interface AxisLine {
|
|
3834
|
+
x1: number;
|
|
3835
|
+
y1: number;
|
|
3836
|
+
x2: number;
|
|
3837
|
+
y2: number;
|
|
3838
|
+
}
|
|
3839
|
+
/** Everything the template needs, derived in a single SSR-safe pass. */
|
|
3840
|
+
interface Plot {
|
|
3841
|
+
series: SeriesGeom[];
|
|
3842
|
+
valueTicks: ValueTick[];
|
|
3843
|
+
categoryLabels: CategoryLabel[];
|
|
3844
|
+
axisLine: AxisLine;
|
|
3845
|
+
/** Anchor for value-tick labels: `'end'` (vertical) or `'middle'` (horizontal). */
|
|
3846
|
+
valueLabelAnchor: 'end' | 'middle';
|
|
3847
|
+
/** Anchor for category labels: `'middle'` (vertical) or `'end'` (horizontal). */
|
|
3848
|
+
categoryLabelAnchor: 'middle' | 'end';
|
|
3849
|
+
}
|
|
3850
|
+
/**
|
|
3851
|
+
* Accessible bar chart for categorical comparisons and distributions.
|
|
3852
|
+
*
|
|
3853
|
+
* Renders one or more {@link AfChartSeries} over a shared category axis as SVG
|
|
3854
|
+
* `<rect>` bars. Supports grouped and stacked layouts, vertical and horizontal
|
|
3855
|
+
* orientations, and a gap-free histogram mode for distributions. All geometry is
|
|
3856
|
+
* computed with the SSR-safe `chart-geometry` helpers — no DOM, `window`, or
|
|
3857
|
+
* `Date` access — so it renders identically on the server.
|
|
3858
|
+
*
|
|
3859
|
+
* @example Single-series vertical bars
|
|
3860
|
+
* <af-bar-chart
|
|
3861
|
+
* ariaLabel="Tickets by status"
|
|
3862
|
+
* [categories]="statuses"
|
|
3863
|
+
* [series]="[{ name: 'Tickets', values: counts }]" />
|
|
3864
|
+
*
|
|
3865
|
+
* @example Grouped multi-series
|
|
3866
|
+
* <af-bar-chart
|
|
3867
|
+
* ariaLabel="Cost by origin and week"
|
|
3868
|
+
* [categories]="weeks"
|
|
3869
|
+
* [series]="[
|
|
3870
|
+
* { name: 'Analyzer', values: analyzer },
|
|
3871
|
+
* { name: 'Resolver', values: resolver },
|
|
3872
|
+
* ]"
|
|
3873
|
+
* layout="grouped" />
|
|
3874
|
+
*
|
|
3875
|
+
* @example Horizontal ranked list
|
|
3876
|
+
* <af-bar-chart
|
|
3877
|
+
* ariaLabel="Top organisations"
|
|
3878
|
+
* [categories]="orgs"
|
|
3879
|
+
* [series]="[{ name: 'Documents', values: docs }]"
|
|
3880
|
+
* orientation="horizontal" />
|
|
3881
|
+
*
|
|
3882
|
+
* @accessibility
|
|
3883
|
+
* - The SVG carries `role="img"` and an `aria-label` describing the chart, with
|
|
3884
|
+
* a pointer to the always-present data-table fallback.
|
|
3885
|
+
* - A visually-hidden {@link AfChartDataTableComponent} mirrors every value so
|
|
3886
|
+
* information is never conveyed by colour alone (WCAG 1.4.1); a toggle reveals it.
|
|
3887
|
+
* - Each series is labelled in the legend and each bar carries a `<title>`, so
|
|
3888
|
+
* colour is never the sole carrier.
|
|
3889
|
+
* - Series colours come from the contrast-checked `--color-chart-series-*` tokens.
|
|
3890
|
+
* - All user-facing strings are configurable via {@link AF_CHART_I18N}.
|
|
3891
|
+
*/
|
|
3892
|
+
declare class AfBarChartComponent {
|
|
3893
|
+
protected readonly i18n: _neuravision_ng_construct.AfChartI18n;
|
|
3894
|
+
protected readonly tableId: string;
|
|
3895
|
+
/** Accessible chart label (required by the WAI-ARIA `img` role). */
|
|
3896
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
3897
|
+
/** Category-axis labels. Series values align 1:1 with these. */
|
|
3898
|
+
categories: _angular_core.InputSignal<string[]>;
|
|
3899
|
+
/** One or more data series sharing the category axis. A `null` value renders no bar. */
|
|
3900
|
+
series: _angular_core.InputSignal<AfChartSeries[]>;
|
|
3901
|
+
/** How multiple series are arranged: side-by-side (`grouped`) or stacked. */
|
|
3902
|
+
layout: _angular_core.InputSignal<AfBarLayout>;
|
|
3903
|
+
/** Bar direction: `vertical` columns or `horizontal` rows (ideal for ranked label lists). */
|
|
3904
|
+
orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
3905
|
+
/** Render contiguous, gap-free bars for distributions (typically single-series). */
|
|
3906
|
+
histogram: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3907
|
+
/** Show the series legend. */
|
|
3908
|
+
showLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3909
|
+
/** Show the legend even when there is only one series (hidden by default in that case). */
|
|
3910
|
+
showLegendForSingle: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3911
|
+
/** Chart height in viewBox units (width is the fluid 640). */
|
|
3912
|
+
height: _angular_core.InputSignal<number>;
|
|
3913
|
+
/** Force the value-axis maximum; defaults to a nice value derived from the data. */
|
|
3914
|
+
valueMax: _angular_core.InputSignal<number | null>;
|
|
3915
|
+
/** BCP-47 locale for number formatting (e.g. `'de-DE'`). */
|
|
3916
|
+
locale: _angular_core.InputSignal<string | undefined>;
|
|
3917
|
+
/** `Intl.NumberFormat` options for axis and value formatting. */
|
|
3918
|
+
valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
|
|
3919
|
+
/** Whether the data-table fallback starts visible. */
|
|
3920
|
+
showTableInitially: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3921
|
+
private readonly tableOverride;
|
|
3922
|
+
protected readonly tableVisible: _angular_core.Signal<boolean>;
|
|
3923
|
+
protected readonly hasData: _angular_core.Signal<boolean>;
|
|
3924
|
+
protected readonly viewBox: _angular_core.Signal<string>;
|
|
3925
|
+
protected readonly svgAriaLabel: _angular_core.Signal<string>;
|
|
3926
|
+
/** Resolved colour per series — explicit override or contrast-checked palette token. */
|
|
3927
|
+
private readonly seriesColors;
|
|
3928
|
+
/** Whether the legend should render — hidden for a single series unless opted in. */
|
|
3929
|
+
protected readonly legendVisible: _angular_core.Signal<boolean>;
|
|
3930
|
+
protected readonly legend: _angular_core.Signal<{
|
|
3931
|
+
name: string;
|
|
3932
|
+
color: string;
|
|
3933
|
+
}[]>;
|
|
3934
|
+
/** All geometry needed by the template, derived in a single pass. */
|
|
3935
|
+
protected readonly plot: _angular_core.Signal<Plot>;
|
|
3936
|
+
protected readonly tableModel: _angular_core.Signal<AfChartTableModel>;
|
|
3937
|
+
protected toggleTable(): void;
|
|
3938
|
+
/**
|
|
3939
|
+
* Compute the value-axis domain and ticks. The domain always includes 0; the
|
|
3940
|
+
* max defaults to the data max (or the largest stack total in stacked mode).
|
|
3941
|
+
*/
|
|
3942
|
+
private valueScale;
|
|
3943
|
+
/** Build the per-series bar geometry for every layout/orientation combination. */
|
|
3944
|
+
private buildSeries;
|
|
3945
|
+
/** Assemble one bar rect from value-axis endpoints and the cross-axis band slot. */
|
|
3946
|
+
private makeBar;
|
|
3947
|
+
/** Build value-axis grid lines + tick labels for the active orientation. */
|
|
3948
|
+
private buildValueTicks;
|
|
3949
|
+
/** Build category-axis labels centred on each band, anchored per orientation. */
|
|
3950
|
+
private buildCategoryLabels;
|
|
3951
|
+
private format;
|
|
3952
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfBarChartComponent, never>;
|
|
3953
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfBarChartComponent, "af-bar-chart", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "categories": { "alias": "categories"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "histogram": { "alias": "histogram"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showLegendForSingle": { "alias": "showLegendForSingle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "valueMax": { "alias": "valueMax"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "showTableInitially": { "alias": "showTableInitially"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3954
|
+
}
|
|
3955
|
+
|
|
3956
|
+
/**
|
|
3957
|
+
* Test harness for AfBarChartComponent.
|
|
3958
|
+
*
|
|
3959
|
+
* Wraps DOM queries behind a semantic API so tests read intent, not selectors.
|
|
3960
|
+
*
|
|
3961
|
+
* @example
|
|
3962
|
+
* const harness = new AfBarChartHarness(fixture.nativeElement);
|
|
3963
|
+
* expect(harness.getBarCount()).toBe(5);
|
|
3964
|
+
* harness.toggleTable();
|
|
3965
|
+
* expect(harness.isTableVisible()).toBe(true);
|
|
3966
|
+
*/
|
|
3967
|
+
declare class AfBarChartHarness {
|
|
3968
|
+
private readonly hostEl;
|
|
3969
|
+
constructor(container: HTMLElement);
|
|
3970
|
+
/** Returns the chart `<svg>`, or null when the empty state is shown. */
|
|
3971
|
+
getSvg(): SVGSVGElement | null;
|
|
3972
|
+
/** Returns the SVG's `aria-label`. */
|
|
3973
|
+
getAriaLabel(): string | null;
|
|
3974
|
+
/** Returns the total number of rendered bar rects. */
|
|
3975
|
+
getBarCount(): number;
|
|
3976
|
+
/** Returns all bar `<rect>` elements in DOM order. */
|
|
3977
|
+
getBars(): SVGRectElement[];
|
|
3978
|
+
/** Returns the legend labels in order. */
|
|
3979
|
+
getLegendLabels(): string[];
|
|
3980
|
+
/** Returns the rendered value-axis tick labels (orientation-independent). */
|
|
3981
|
+
getValueTickLabels(): string[];
|
|
3982
|
+
/** Returns the rendered category-axis labels in order. */
|
|
3983
|
+
getCategoryLabels(): string[];
|
|
3984
|
+
/** Returns whether the empty-state message is shown. */
|
|
3985
|
+
isEmpty(): boolean;
|
|
3986
|
+
/** Returns the accessible data table element (always present when data exists). */
|
|
3987
|
+
getTable(): HTMLTableElement | null;
|
|
3988
|
+
/** Returns the data-table header cell texts. */
|
|
3989
|
+
getTableHeaders(): string[];
|
|
3990
|
+
/** Returns the number of data-table body rows. */
|
|
3991
|
+
getTableRowCount(): number;
|
|
3992
|
+
/** Returns the toggle button that reveals/hides the data table. */
|
|
3993
|
+
getToggle(): HTMLButtonElement | null;
|
|
3994
|
+
/** Clicks the data-table toggle button. */
|
|
3995
|
+
toggleTable(): void;
|
|
3996
|
+
/** Returns whether the data table is visually revealed. */
|
|
3997
|
+
isTableVisible(): boolean;
|
|
3998
|
+
}
|
|
3999
|
+
|
|
4000
|
+
/** Resolved geometry and labels for a single rendered ring slice. */
|
|
4001
|
+
interface DonutSlice {
|
|
4002
|
+
label: string;
|
|
4003
|
+
color: string;
|
|
4004
|
+
/** SVG path `d` for the slice arc. */
|
|
4005
|
+
path: string;
|
|
4006
|
+
/** Formatted magnitude (e.g. `'40'`). */
|
|
4007
|
+
value: string;
|
|
4008
|
+
/** Formatted share including the `%` sign (e.g. `'40%'`). */
|
|
4009
|
+
percent: string;
|
|
4010
|
+
}
|
|
4011
|
+
/** A legend row — one per datum, including zero-value data. */
|
|
4012
|
+
interface DonutLegendItem {
|
|
4013
|
+
label: string;
|
|
4014
|
+
color: string;
|
|
4015
|
+
/** Formatted share including the `%` sign (e.g. `'40%'`). */
|
|
4016
|
+
percent: string;
|
|
4017
|
+
}
|
|
4018
|
+
/**
|
|
4019
|
+
* Accessible donut / pie chart for part-to-whole data.
|
|
4020
|
+
*
|
|
4021
|
+
* Renders a set of {@link AfChartDatum} slices as an SVG ring (or full pie when
|
|
4022
|
+
* `innerRadiusRatio` is 0). Arc geometry is computed with the SSR-safe
|
|
4023
|
+
* `chart-geometry` helpers — no DOM, `window`, `Date` or `Math.random` access —
|
|
4024
|
+
* so it renders identically on the server.
|
|
4025
|
+
*
|
|
4026
|
+
* @example Donut with a centre total
|
|
4027
|
+
* <af-donut-chart
|
|
4028
|
+
* ariaLabel="Contract mix"
|
|
4029
|
+
* [data]="[
|
|
4030
|
+
* { label: 'Enterprise', value: 60 },
|
|
4031
|
+
* { label: 'Team', value: 40 },
|
|
4032
|
+
* ]"
|
|
4033
|
+
* centerLabel="Total" />
|
|
4034
|
+
*
|
|
4035
|
+
* @example Full pie
|
|
4036
|
+
* <af-donut-chart
|
|
4037
|
+
* ariaLabel="AI cost by origin"
|
|
4038
|
+
* [data]="costs"
|
|
4039
|
+
* [innerRadiusRatio]="0" />
|
|
4040
|
+
*
|
|
4041
|
+
* @accessibility
|
|
4042
|
+
* - The SVG carries `role="img"` and an `aria-label` describing the chart, with
|
|
4043
|
+
* a pointer to the always-present data-table fallback.
|
|
4044
|
+
* - A visually-hidden {@link AfChartDataTableComponent} mirrors every slice's
|
|
4045
|
+
* exact value and percentage, so information is never conveyed by colour alone
|
|
4046
|
+
* (WCAG 1.4.1); a toggle reveals it.
|
|
4047
|
+
* - The legend lists every slice label (including zero-value data), so colour is
|
|
4048
|
+
* never the sole carrier, and each slice exposes a native `<title>` tooltip.
|
|
4049
|
+
* - Slice colours come from the contrast-checked `--color-chart-series-*` tokens.
|
|
4050
|
+
* - All user-facing strings are configurable via {@link AF_CHART_I18N}.
|
|
4051
|
+
*/
|
|
4052
|
+
declare class AfDonutChartComponent {
|
|
4053
|
+
protected readonly i18n: _neuravision_ng_construct.AfChartI18n;
|
|
4054
|
+
protected readonly tableId: string;
|
|
4055
|
+
/** Accessible chart label (required by the WAI-ARIA `img` role). */
|
|
4056
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
4057
|
+
/** Slices of the ring. Negative values clamp to 0; zero-value slices are
|
|
4058
|
+
* omitted from the ring but still listed in the legend and data table. */
|
|
4059
|
+
data: _angular_core.InputSignal<AfChartDatum[]>;
|
|
4060
|
+
/** Hole size as a fraction of the radius: `0` → full pie, `~0.6` → donut.
|
|
4061
|
+
* Clamped to `[0, 0.9]`. */
|
|
4062
|
+
innerRadiusRatio: _angular_core.InputSignal<number>;
|
|
4063
|
+
/** Small caption rendered inside the donut hole (e.g. `'Total'`). */
|
|
4064
|
+
centerLabel: _angular_core.InputSignal<string>;
|
|
4065
|
+
/** Big text inside the hole; defaults to the formatted sum of values. */
|
|
4066
|
+
centerValue: _angular_core.InputSignal<string>;
|
|
4067
|
+
/** Show the slice legend. */
|
|
4068
|
+
showLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4069
|
+
/** Show each slice's percentage share next to its legend label. */
|
|
4070
|
+
showPercentInLegend: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4071
|
+
/** Chart height in viewBox units (width is fluid). */
|
|
4072
|
+
height: _angular_core.InputSignal<number>;
|
|
4073
|
+
/** BCP-47 locale for number formatting (e.g. `'de-DE'`). */
|
|
4074
|
+
locale: _angular_core.InputSignal<string | undefined>;
|
|
4075
|
+
/** `Intl.NumberFormat` options for value formatting. */
|
|
4076
|
+
valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
|
|
4077
|
+
/** Whether the data-table fallback starts visible. */
|
|
4078
|
+
showTableInitially: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4079
|
+
private readonly tableOverride;
|
|
4080
|
+
protected readonly tableVisible: _angular_core.Signal<boolean>;
|
|
4081
|
+
/** Clamped magnitudes aligned 1:1 with `data()` (negatives → 0). */
|
|
4082
|
+
private readonly values;
|
|
4083
|
+
private readonly total;
|
|
4084
|
+
protected readonly hasData: _angular_core.Signal<boolean>;
|
|
4085
|
+
protected readonly viewBox: _angular_core.Signal<string>;
|
|
4086
|
+
protected readonly svgAriaLabel: _angular_core.Signal<string>;
|
|
4087
|
+
/** Resolved colour per datum — explicit override or contrast-checked palette
|
|
4088
|
+
* token — keyed by original index so slices and legend never diverge. */
|
|
4089
|
+
private readonly colors;
|
|
4090
|
+
/** Formatted shares aligned 1:1 with `data()` (e.g. `'40%'`). */
|
|
4091
|
+
private readonly percents;
|
|
4092
|
+
/** Centre value text: explicit override or the formatted total. */
|
|
4093
|
+
protected readonly centerValueText: _angular_core.Signal<string>;
|
|
4094
|
+
protected readonly legend: _angular_core.Signal<DonutLegendItem[]>;
|
|
4095
|
+
/** All ring geometry derived in a single pass; zero-value slices are skipped. */
|
|
4096
|
+
protected readonly plot: _angular_core.Signal<{
|
|
4097
|
+
slices: DonutSlice[];
|
|
4098
|
+
cx: number;
|
|
4099
|
+
cy: number;
|
|
4100
|
+
labelY: number;
|
|
4101
|
+
showCenter: boolean;
|
|
4102
|
+
}>;
|
|
4103
|
+
protected readonly tableModel: _angular_core.Signal<AfChartTableModel>;
|
|
4104
|
+
protected toggleTable(): void;
|
|
4105
|
+
/** Format a percentage to at most one fraction digit, suffixed with `%`. */
|
|
4106
|
+
private formatPercent;
|
|
4107
|
+
private format;
|
|
4108
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfDonutChartComponent, never>;
|
|
4109
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfDonutChartComponent, "af-donut-chart", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "innerRadiusRatio": { "alias": "innerRadiusRatio"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showPercentInLegend": { "alias": "showPercentInLegend"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "showTableInitially": { "alias": "showTableInitially"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4110
|
+
}
|
|
4111
|
+
|
|
4112
|
+
/**
|
|
4113
|
+
* Test harness for AfDonutChartComponent.
|
|
4114
|
+
*
|
|
4115
|
+
* Wraps DOM queries behind a semantic API so tests read intent, not selectors.
|
|
4116
|
+
*
|
|
4117
|
+
* @example
|
|
4118
|
+
* const harness = new AfDonutChartHarness(fixture.nativeElement);
|
|
4119
|
+
* expect(harness.getSliceCount()).toBe(2);
|
|
4120
|
+
* harness.toggleTable();
|
|
4121
|
+
* expect(harness.isTableVisible()).toBe(true);
|
|
4122
|
+
*/
|
|
4123
|
+
declare class AfDonutChartHarness {
|
|
4124
|
+
private readonly hostEl;
|
|
4125
|
+
constructor(container: HTMLElement);
|
|
4126
|
+
/** Returns the chart `<svg>`, or null when the empty state is shown. */
|
|
4127
|
+
getSvg(): SVGSVGElement | null;
|
|
4128
|
+
/** Returns the SVG's `aria-label`. */
|
|
4129
|
+
getAriaLabel(): string | null;
|
|
4130
|
+
/** Returns the number of rendered (non-zero) ring slices. */
|
|
4131
|
+
getSliceCount(): number;
|
|
4132
|
+
/** Returns all slice `<path>` `d` attributes. */
|
|
4133
|
+
getSlicePaths(): string[];
|
|
4134
|
+
/** Returns the big centre value text, or null in pie mode (no centre text). */
|
|
4135
|
+
getCenterValue(): string | null;
|
|
4136
|
+
/** Returns the small centre caption text, or null when none is rendered. */
|
|
4137
|
+
getCenterLabel(): string | null;
|
|
4138
|
+
/** Returns the legend item texts in order (label plus optional percent). */
|
|
4139
|
+
getLegendLabels(): string[];
|
|
4140
|
+
/** Returns whether the empty-state message is shown. */
|
|
4141
|
+
isEmpty(): boolean;
|
|
4142
|
+
/** Returns the accessible data table element (always present when data exists). */
|
|
4143
|
+
getTable(): HTMLTableElement | null;
|
|
4144
|
+
/** Returns the data-table header cell texts. */
|
|
4145
|
+
getTableHeaders(): string[];
|
|
4146
|
+
/** Returns the number of data-table body rows. */
|
|
4147
|
+
getTableRowCount(): number;
|
|
4148
|
+
/** Returns the toggle button that reveals/hides the data table. */
|
|
4149
|
+
getToggle(): HTMLButtonElement | null;
|
|
4150
|
+
/** Clicks the data-table toggle button. */
|
|
4151
|
+
toggleTable(): void;
|
|
4152
|
+
/** Returns whether the data table is visually revealed. */
|
|
4153
|
+
isTableVisible(): boolean;
|
|
4154
|
+
}
|
|
4155
|
+
|
|
4156
|
+
/** Resolved geometry for the sparkline, derived in a single pass. */
|
|
4157
|
+
interface SparklinePlot {
|
|
4158
|
+
/** SVG `M`/`L` path through every point. */
|
|
4159
|
+
line: string;
|
|
4160
|
+
/** Closed area path down to the baseline, or `''` when `area` is off. */
|
|
4161
|
+
area: string;
|
|
4162
|
+
/** Final point, used to position the last-point marker. */
|
|
4163
|
+
lastDot: ChartPoint | null;
|
|
4164
|
+
}
|
|
4165
|
+
/**
|
|
4166
|
+
* Tiny inline trend line (sparkline) for KPI tiles and dense tables.
|
|
4167
|
+
*
|
|
4168
|
+
* Renders a compact SVG line — optionally filled and with a marker on the final
|
|
4169
|
+
* point — at a fixed small size (it does not stretch to its container). Geometry
|
|
4170
|
+
* is computed with the SSR-safe `chart-geometry` helpers — no DOM, `window` or
|
|
4171
|
+
* `Date` access — so it renders identically on the server.
|
|
4172
|
+
*
|
|
4173
|
+
* Because a sparkline is too small for axes, a legend or a visible toggle, the
|
|
4174
|
+
* trend is summarised in the SVG's `aria-label` and the exact values are always
|
|
4175
|
+
* available through a visually-hidden data-table fallback.
|
|
4176
|
+
*
|
|
4177
|
+
* @example KPI tile trend
|
|
4178
|
+
* <af-sparkline ariaLabel="Sign-ups, last 14 days" [values]="signups" />
|
|
4179
|
+
*
|
|
4180
|
+
* @example Filled sparkline without the end marker
|
|
4181
|
+
* <af-sparkline
|
|
4182
|
+
* ariaLabel="Latency, last hour"
|
|
4183
|
+
* [values]="latency"
|
|
4184
|
+
* [area]="true"
|
|
4185
|
+
* [showLastDot]="false" />
|
|
4186
|
+
*
|
|
4187
|
+
* @accessibility
|
|
4188
|
+
* - The SVG carries `role="img"` and an `aria-label` that conveys the trend
|
|
4189
|
+
* (point count, min, max and latest value) plus a pointer to the data table.
|
|
4190
|
+
* - A visually-hidden {@link AfChartDataTableComponent} mirrors every value so
|
|
4191
|
+
* information is never conveyed by colour or shape alone (WCAG 1.4.1).
|
|
4192
|
+
* - The series colour defaults to the contrast-checked `--color-chart-series-1`
|
|
4193
|
+
* token; colour is never the sole carrier of meaning.
|
|
4194
|
+
* - All user-facing strings are configurable via {@link AF_CHART_I18N}.
|
|
4195
|
+
*/
|
|
4196
|
+
declare class AfSparklineComponent {
|
|
4197
|
+
protected readonly i18n: _neuravision_ng_construct.AfChartI18n;
|
|
4198
|
+
/** Accessible chart label (required by the WAI-ARIA `img` role). */
|
|
4199
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
4200
|
+
/** The numeric series to plot. `null` entries are skipped in the geometry. */
|
|
4201
|
+
values: _angular_core.InputSignal<number[]>;
|
|
4202
|
+
/** Optional labels for the data-table fallback; falls back to 1-based indices. */
|
|
4203
|
+
categories: _angular_core.InputSignal<string[]>;
|
|
4204
|
+
/** Fill the area beneath the line. */
|
|
4205
|
+
area: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4206
|
+
/** Render a marker on the final point. */
|
|
4207
|
+
showLastDot: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4208
|
+
/** Explicit CSS colour; defaults to `--color-chart-series-1`. */
|
|
4209
|
+
color: _angular_core.InputSignal<string | undefined>;
|
|
4210
|
+
/** SVG width in viewBox units (the sparkline keeps this compact size). */
|
|
4211
|
+
width: _angular_core.InputSignal<number>;
|
|
4212
|
+
/** SVG height in viewBox units (the sparkline keeps this compact size). */
|
|
4213
|
+
height: _angular_core.InputSignal<number>;
|
|
4214
|
+
/** BCP-47 locale for number formatting (e.g. `'de-DE'`). */
|
|
4215
|
+
locale: _angular_core.InputSignal<string | undefined>;
|
|
4216
|
+
/** `Intl.NumberFormat` options for the aria-label and data-table values. */
|
|
4217
|
+
valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
|
|
4218
|
+
/** Numeric values with `null`/`NaN` entries removed — drives geometry and the summary. */
|
|
4219
|
+
private readonly numericValues;
|
|
4220
|
+
protected readonly hasData: _angular_core.Signal<boolean>;
|
|
4221
|
+
protected readonly resolvedColor: _angular_core.Signal<string>;
|
|
4222
|
+
protected readonly viewBox: _angular_core.Signal<string>;
|
|
4223
|
+
/** Trend-describing label: count, min, max and latest value, plus the table pointer. */
|
|
4224
|
+
protected readonly svgAriaLabel: _angular_core.Signal<string>;
|
|
4225
|
+
/** All geometry needed by the template, derived in a single pass. */
|
|
4226
|
+
protected readonly plot: _angular_core.Signal<SparklinePlot>;
|
|
4227
|
+
protected readonly tableModel: _angular_core.Signal<AfChartTableModel>;
|
|
4228
|
+
private format;
|
|
4229
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfSparklineComponent, never>;
|
|
4230
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfSparklineComponent, "af-sparkline", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "values": { "alias": "values"; "required": true; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "showLastDot": { "alias": "showLastDot"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4231
|
+
}
|
|
4232
|
+
|
|
4233
|
+
/**
|
|
4234
|
+
* Test harness for AfSparklineComponent.
|
|
4235
|
+
*
|
|
4236
|
+
* Wraps DOM queries behind a semantic API so tests read intent, not selectors.
|
|
4237
|
+
*
|
|
4238
|
+
* @example
|
|
4239
|
+
* const harness = new AfSparklineHarness(fixture.nativeElement);
|
|
4240
|
+
* expect(harness.getLinePath()).toMatch(/^M/);
|
|
4241
|
+
* expect(harness.getDotCount()).toBe(1);
|
|
4242
|
+
*/
|
|
4243
|
+
declare class AfSparklineHarness {
|
|
4244
|
+
private readonly hostEl;
|
|
4245
|
+
constructor(container: HTMLElement);
|
|
4246
|
+
/** Returns the sparkline `<svg>`, or null when the empty state is shown. */
|
|
4247
|
+
getSvg(): SVGSVGElement | null;
|
|
4248
|
+
/** Returns the SVG's `aria-label`. */
|
|
4249
|
+
getAriaLabel(): string | null;
|
|
4250
|
+
/** Returns the line `<path>` `d` attribute, or null when empty. */
|
|
4251
|
+
getLinePath(): string | null;
|
|
4252
|
+
/** Returns whether an area fill is rendered. */
|
|
4253
|
+
hasArea(): boolean;
|
|
4254
|
+
/** Returns the number of point markers (0 or 1). */
|
|
4255
|
+
getDotCount(): number;
|
|
4256
|
+
/** Returns whether the empty-state message is shown. */
|
|
4257
|
+
isEmpty(): boolean;
|
|
4258
|
+
/** Returns the accessible data table element (always present when data exists). */
|
|
4259
|
+
getTable(): HTMLTableElement | null;
|
|
4260
|
+
/** Returns the number of data-table body rows. */
|
|
4261
|
+
getTableRowCount(): number;
|
|
4262
|
+
}
|
|
4263
|
+
|
|
4264
|
+
/** Resolved geometry for the gauge, derived in a single pass. */
|
|
4265
|
+
interface GaugePlot {
|
|
4266
|
+
/** Centre x in viewBox units. */
|
|
4267
|
+
cx: number;
|
|
4268
|
+
/** Centre y in viewBox units. */
|
|
4269
|
+
cy: number;
|
|
4270
|
+
/** Background track arc path (`M`/`A`). */
|
|
4271
|
+
track: string;
|
|
4272
|
+
/** Foreground value arc path (`M`/`A`); `''` when the fraction is zero. */
|
|
4273
|
+
value: string;
|
|
4274
|
+
/** Baseline y for the centre value/caption text block. */
|
|
4275
|
+
textY: number;
|
|
4276
|
+
}
|
|
4277
|
+
/**
|
|
4278
|
+
* Accessible single-value gauge for progress, compliance and utilisation metrics.
|
|
4279
|
+
*
|
|
4280
|
+
* Renders one metric as an SVG ring (full 360° track) or bottom-opening semi
|
|
4281
|
+
* gauge, with the value drawn as a coloured arc over a muted track and the
|
|
4282
|
+
* formatted number at the centre. Geometry is computed with the SSR-safe
|
|
4283
|
+
* `chart-geometry` helpers — no DOM, `window` or `Date` access — so it renders
|
|
4284
|
+
* identically on the server.
|
|
4285
|
+
*
|
|
4286
|
+
* The arc colour follows {@link AfGaugeThreshold} bands (the highest `from` ≤
|
|
4287
|
+
* value wins) or the explicit {@link status} input when no band matches.
|
|
4288
|
+
*
|
|
4289
|
+
* @example Compliance ring
|
|
4290
|
+
* <af-gauge ariaLabel="Compliance score" [value]="82" valueText="82%" caption="Compliance" />
|
|
4291
|
+
*
|
|
4292
|
+
* @example Utilisation with thresholds
|
|
4293
|
+
* <af-gauge
|
|
4294
|
+
* ariaLabel="Quota utilisation"
|
|
4295
|
+
* [value]="95"
|
|
4296
|
+
* valueText="95%"
|
|
4297
|
+
* [thresholds]="[
|
|
4298
|
+
* { from: 0, status: 'success' },
|
|
4299
|
+
* { from: 80, status: 'warning' },
|
|
4300
|
+
* { from: 90, status: 'danger' },
|
|
4301
|
+
* ]" />
|
|
4302
|
+
*
|
|
4303
|
+
* @accessibility
|
|
4304
|
+
* - Because a gauge conveys a single metric, the root element uses the WAI-ARIA
|
|
4305
|
+
* `meter` role with `aria-valuenow` / `aria-valuemin` / `aria-valuemax` and an
|
|
4306
|
+
* `aria-valuetext` carrying the human-readable value (e.g. `"82%"`). This is
|
|
4307
|
+
* more semantic than the data-table fallback used by the multi-value charts,
|
|
4308
|
+
* so no table is rendered here.
|
|
4309
|
+
* - The SVG is purely decorative (`aria-hidden="true"`, `focusable="false"`);
|
|
4310
|
+
* the meter role carries everything assistive technology needs.
|
|
4311
|
+
* - The centre value text mirrors `aria-valuetext`, so colour is never the sole
|
|
4312
|
+
* carrier of meaning (WCAG 1.4.1); the status colours come from the
|
|
4313
|
+
* contrast-checked `--color-state-*` tokens.
|
|
4314
|
+
* - The empty/invalid state (`max <= min`) drops the `meter` role and exposes a
|
|
4315
|
+
* `role="status"` message instead, so the meter is never invalid.
|
|
4316
|
+
* - All user-facing strings are configurable via {@link AF_CHART_I18N}.
|
|
4317
|
+
*/
|
|
4318
|
+
declare class AfGaugeComponent {
|
|
4319
|
+
protected readonly i18n: _neuravision_ng_construct.AfChartI18n;
|
|
4320
|
+
/** Accessible label for the gauge (required by the WAI-ARIA `meter` role). */
|
|
4321
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
4322
|
+
/**
|
|
4323
|
+
* The metric value. Clamped into `[min, max]` for the drawn arc and
|
|
4324
|
+
* `aria-valuenow`; `aria-valuetext` reports the raw value unchanged.
|
|
4325
|
+
*/
|
|
4326
|
+
value: _angular_core.InputSignal<number>;
|
|
4327
|
+
/** Lower bound of the gauge scale. */
|
|
4328
|
+
min: _angular_core.InputSignal<number>;
|
|
4329
|
+
/** Upper bound of the gauge scale. */
|
|
4330
|
+
max: _angular_core.InputSignal<number>;
|
|
4331
|
+
/**
|
|
4332
|
+
* Colour threshold bands. The band with the highest `from` ≤ `value` selects
|
|
4333
|
+
* the arc's `status`; if none match (or the list is empty), {@link status} is used.
|
|
4334
|
+
*/
|
|
4335
|
+
thresholds: _angular_core.InputSignal<AfGaugeThreshold[]>;
|
|
4336
|
+
/** Explicit colour bucket; overridden by a matching {@link thresholds} band. */
|
|
4337
|
+
status: _angular_core.InputSignal<AfChartStatus>;
|
|
4338
|
+
/** `'ring'` = full 360° track; `'semi'` = bottom-opening 180° half gauge. */
|
|
4339
|
+
shape: _angular_core.InputSignal<"ring" | "semi">;
|
|
4340
|
+
/** Centre/`aria-valuetext` override; defaults to the locale-formatted `value`. */
|
|
4341
|
+
valueText: _angular_core.InputSignal<string>;
|
|
4342
|
+
/** Small caption rendered beneath the value (e.g. the metric name). */
|
|
4343
|
+
caption: _angular_core.InputSignal<string>;
|
|
4344
|
+
/** Arc thickness in viewBox units; drives both the arc radius and the rendered stroke. */
|
|
4345
|
+
strokeWidth: _angular_core.InputSignal<number>;
|
|
4346
|
+
/** Render the centre value (and caption) text. */
|
|
4347
|
+
showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4348
|
+
/** BCP-47 locale for the default value formatting (e.g. `'de-DE'`). */
|
|
4349
|
+
locale: _angular_core.InputSignal<string | undefined>;
|
|
4350
|
+
/** `Intl.NumberFormat` options for the default value formatting. */
|
|
4351
|
+
valueFormat: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
|
|
4352
|
+
/** Gauge height in viewBox units (width scales fluidly to the container). */
|
|
4353
|
+
height: _angular_core.InputSignal<number>;
|
|
4354
|
+
/** True when the scale is degenerate (`max <= min`) — renders the empty state. */
|
|
4355
|
+
protected readonly isEmpty: _angular_core.Signal<boolean>;
|
|
4356
|
+
protected readonly viewBox: _angular_core.Signal<string>;
|
|
4357
|
+
/** Human-readable value: the explicit override or the locale-formatted number. */
|
|
4358
|
+
protected readonly valueDisplay: _angular_core.Signal<string>;
|
|
4359
|
+
/**
|
|
4360
|
+
* `value` clamped into `[min, max]` for `aria-valuenow`. The WAI-ARIA `meter`
|
|
4361
|
+
* role requires `valuenow ∈ [valuemin, valuemax]`; `aria-valuetext` keeps the
|
|
4362
|
+
* raw reading so assistive tech still announces an out-of-range value verbatim.
|
|
4363
|
+
*/
|
|
4364
|
+
protected readonly clampedValue: _angular_core.Signal<number>;
|
|
4365
|
+
/** Arc thickness as a CSS length, fed to the `--ct-chart-gauge-width` token. */
|
|
4366
|
+
protected readonly gaugeWidth: _angular_core.Signal<string>;
|
|
4367
|
+
/**
|
|
4368
|
+
* Resolved status bucket: the highest threshold band whose `from <= value`,
|
|
4369
|
+
* falling back to the explicit {@link status} input.
|
|
4370
|
+
*/
|
|
4371
|
+
private readonly resolvedStatus;
|
|
4372
|
+
protected readonly valueClass: _angular_core.Signal<string>;
|
|
4373
|
+
/** All geometry needed by the template, derived in a single pass. */
|
|
4374
|
+
protected readonly plot: _angular_core.Signal<GaugePlot>;
|
|
4375
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfGaugeComponent, never>;
|
|
4376
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AfGaugeComponent, "af-gauge", never, { "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "thresholds": { "alias": "thresholds"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4377
|
+
}
|
|
4378
|
+
|
|
4379
|
+
/**
|
|
4380
|
+
* Test harness for AfGaugeComponent.
|
|
4381
|
+
*
|
|
4382
|
+
* Wraps DOM queries behind a semantic API so tests read intent, not selectors.
|
|
4383
|
+
*
|
|
4384
|
+
* @example
|
|
4385
|
+
* const harness = new AfGaugeHarness(fixture.nativeElement);
|
|
4386
|
+
* expect(harness.getRole()).toBe('meter');
|
|
4387
|
+
* expect(harness.getAriaValueNow()).toBe('82');
|
|
4388
|
+
*/
|
|
4389
|
+
declare class AfGaugeHarness {
|
|
4390
|
+
private readonly hostEl;
|
|
4391
|
+
constructor(container: HTMLElement);
|
|
4392
|
+
/** Returns the `.ct-chart` root that carries the `meter` role and value attributes. */
|
|
4393
|
+
getRoot(): HTMLElement | null;
|
|
4394
|
+
/** Returns the root's `role` (`'meter'` with data, null in the empty state). */
|
|
4395
|
+
getRole(): string | null;
|
|
4396
|
+
/** Returns the `aria-valuenow` of the meter root. */
|
|
4397
|
+
getAriaValueNow(): string | null;
|
|
4398
|
+
/** Returns the `aria-valuemin` of the meter root. */
|
|
4399
|
+
getAriaValueMin(): string | null;
|
|
4400
|
+
/** Returns the `aria-valuemax` of the meter root. */
|
|
4401
|
+
getAriaValueMax(): string | null;
|
|
4402
|
+
/** Returns the human-readable `aria-valuetext` of the meter root. */
|
|
4403
|
+
getAriaValueText(): string | null;
|
|
4404
|
+
/** Returns the `aria-label` of the meter root. */
|
|
4405
|
+
getAriaLabel(): string | null;
|
|
4406
|
+
/** Returns the decorative `<svg>`, or null when the empty state is shown. */
|
|
4407
|
+
getSvg(): SVGSVGElement | null;
|
|
4408
|
+
/**
|
|
4409
|
+
* Returns the `--ct-chart-gauge-width` custom property (e.g. `'14px'`) that
|
|
4410
|
+
* drives the rendered arc thickness, or null when unset.
|
|
4411
|
+
*/
|
|
4412
|
+
getGaugeWidth(): string | null;
|
|
4413
|
+
/** Returns the track arc `<path>`. */
|
|
4414
|
+
getTrackPath(): SVGPathElement | null;
|
|
4415
|
+
/** Returns the value arc `<path>` (absent when the value fraction is zero). */
|
|
4416
|
+
getValuePath(): SVGPathElement | null;
|
|
4417
|
+
/** Returns the `--status` modifier on the value arc (e.g. `'success'`), or null. */
|
|
4418
|
+
getValueStatusClass(): string | null;
|
|
4419
|
+
/** Returns the centre value text, or null when the value text is hidden. */
|
|
4420
|
+
getCenterText(): string | null;
|
|
4421
|
+
/** Returns the caption text below the value, or null when absent. */
|
|
4422
|
+
getCaption(): string | null;
|
|
4423
|
+
/** Returns whether the empty-state message is shown. */
|
|
4424
|
+
isEmpty(): boolean;
|
|
4425
|
+
}
|
|
4426
|
+
|
|
3501
4427
|
/**
|
|
3502
4428
|
* Transforms snake_case or SCREAMING_SNAKE_CASE strings to Title Case labels.
|
|
3503
4429
|
*
|
|
@@ -3512,5 +4438,5 @@ declare class AfFormatLabelPipe implements PipeTransform {
|
|
|
3512
4438
|
static ɵpipe: _angular_core.ɵɵPipeDeclaration<AfFormatLabelPipe, "afFormatLabel", true>;
|
|
3513
4439
|
}
|
|
3514
4440
|
|
|
3515
|
-
export { AF_ACCORDION_I18N, AF_ALERT_I18N, AF_INPUT_I18N, AF_SELECT_I18N, AF_SELECT_MENU_I18N, AF_TREE_I18N, AVATAR_SEED_PALETTE_SIZE, AfAccordionComponent, AfAccordionHarness, AfAccordionItemComponent, AfAccordionItemHarness, AfAlertComponent, AfAlertHarness, AfAppShellComponent, AfAppShellPageHeaderComponent, AfAppShellV2Component, AfAppShellV2ToolbarComponent, AfAvatarComponent, AfBadgeComponent, AfBadgeHarness, AfBannerComponent, AfBreadcrumbsComponent, AfButtonComponent, AfButtonHarness, AfCardComponent, AfCellDefDirective, AfCheckboxComponent, AfChipComponent, AfChipInputComponent, AfComboboxComponent, AfDataTableComponent, AfDatepickerComponent, AfDividerComponent, AfDrawerComponent, AfDropdownComponent, AfEmptyStateComponent, AfFieldComponent, AfFileUploadComponent, AfFormatLabelPipe, AfIconComponent, AfInputComponent, AfInputHarness, AfModalComponent, AfNavItemComponent, AfNavTabsComponent, AfNavbarComponent, AfPaginationComponent, AfPopoverComponent, AfPopoverTriggerDirective, AfProgressBarComponent, AfRadioComponent, AfRadioGroupComponent, AfSelectComponent, AfSelectHarness, AfSelectMenuComponent, AfSelectMenuHarness, AfSidebarComponent, AfSkeletonComponent, AfSkipLinkComponent, AfSliderComponent, AfSpinnerComponent, AfSwitchComponent, AfTabPanelComponent, AfTableBodyComponent, AfTableCellComponent, AfTableComponent, AfTableHeaderCellComponent, AfTableHeaderComponent, AfTableRowComponent, AfTabsComponent, AfTextareaComponent, AfToastContainerComponent, AfToastService, AfToggleGroupComponent, AfToolbarComponent, AfTooltipDirective, AfTreeComponent, AfTreeHarness, AfTreeNodeHarness };
|
|
3516
|
-
export type { AfAccordionI18n, AfAlertI18n, AfAlertVariant, AfAvatarSize, AfAvatarStatus, AfBadgeVariant, AfBannerAppearance, AfBannerPosition, AfBannerVariant, AfBreadcrumb, AfButtonSize, AfButtonType, AfButtonVariant, AfCardElevation, AfCardPadding, AfChipAppearance, AfChipSize, AfChipVariant, AfColumn, AfComboboxOption, AfDataRow, AfDataTableConfig, AfDateRange, AfDatepickerMode, AfDatepickerValueFormat, AfDatepickerView, AfDividerColor, AfDividerOrientation, AfDividerSpacing, AfDrawerPosition, AfDrawerSize, AfDropdownItem, AfEmptyStateSize, AfEmptyStateVariant, AfFileEntry, AfFileValidationError, AfIconSize, AfInputI18n, AfInputType, AfNavTab, AfNavTabsSize, AfNavTabsVariant, AfNavbarSize, AfNavbarVariant, AfPopoverAlign, AfPopoverPosition, AfPopoverSize, AfProgressBarSize, AfProgressBarVariant, AfSelectI18n, AfSelectMenuI18n, AfSelectMenuOption, AfSelectOption, AfShellPanelState, AfShellSidebarState, AfSidebarMode, AfSkeletonVariant, AfSliderSize, AfSortDirection, AfSortState, AfSpinnerSize, AfTab, AfTableCellType, AfTableVariant, AfToast, AfToastVariant, AfToggleGroupSize, AfToggleItem, AfTooltipPosition, AfTreeI18n, TreeNode, TreeNodeTemplateContext, TreeSelectionMode, TreeToggleEvent };
|
|
4441
|
+
export { AF_ACCORDION_I18N, AF_ALERT_I18N, AF_CHART_I18N, AF_CHART_PALETTE_SIZE, AF_INPUT_I18N, AF_SELECT_I18N, AF_SELECT_MENU_I18N, AF_TREE_I18N, AVATAR_SEED_PALETTE_SIZE, AfAccordionComponent, AfAccordionHarness, AfAccordionItemComponent, AfAccordionItemHarness, AfAlertComponent, AfAlertHarness, AfAppShellComponent, AfAppShellPageHeaderComponent, AfAppShellV2Component, AfAppShellV2ToolbarComponent, AfAvatarComponent, AfBadgeComponent, AfBadgeHarness, AfBannerComponent, AfBarChartComponent, AfBarChartHarness, AfBreadcrumbsComponent, AfButtonComponent, AfButtonHarness, AfCardComponent, AfCellDefDirective, AfChartDataTableComponent, AfCheckboxComponent, AfChipComponent, AfChipInputComponent, AfComboboxComponent, AfDataTableComponent, AfDatepickerComponent, AfDividerComponent, AfDonutChartComponent, AfDonutChartHarness, AfDrawerComponent, AfDropdownComponent, AfEmptyStateComponent, AfFieldComponent, AfFileUploadComponent, AfFormatLabelPipe, AfGaugeComponent, AfGaugeHarness, AfIconComponent, AfInputComponent, AfInputHarness, AfLineChartComponent, AfLineChartHarness, AfModalComponent, AfNavItemComponent, AfNavTabsComponent, AfNavbarComponent, AfPaginationComponent, AfPopoverComponent, AfPopoverTriggerDirective, AfProgressBarComponent, AfRadioComponent, AfRadioGroupComponent, AfSelectComponent, AfSelectHarness, AfSelectMenuComponent, AfSelectMenuHarness, AfSidebarComponent, AfSkeletonComponent, AfSkipLinkComponent, AfSliderComponent, AfSparklineComponent, AfSparklineHarness, AfSpinnerComponent, AfSwitchComponent, AfTabPanelComponent, AfTableBodyComponent, AfTableCellComponent, AfTableComponent, AfTableHeaderCellComponent, AfTableHeaderComponent, AfTableRowComponent, AfTabsComponent, AfTextareaComponent, AfToastContainerComponent, AfToastService, AfToggleGroupComponent, AfToolbarComponent, AfTooltipDirective, AfTreeComponent, AfTreeHarness, AfTreeNodeHarness };
|
|
4442
|
+
export type { AfAccordionI18n, AfAlertI18n, AfAlertVariant, AfAvatarSize, AfAvatarStatus, AfBadgeVariant, AfBannerAppearance, AfBannerPosition, AfBannerVariant, AfBarLayout, AfBreadcrumb, AfButtonSize, AfButtonType, AfButtonVariant, AfCardElevation, AfCardPadding, AfChartDatum, AfChartI18n, AfChartSeries, AfChartStatus, AfChartTableModel, AfChipAppearance, AfChipSize, AfChipVariant, AfColumn, AfComboboxOption, AfDataRow, AfDataTableConfig, AfDateRange, AfDatepickerMode, AfDatepickerValueFormat, AfDatepickerView, AfDividerColor, AfDividerOrientation, AfDividerSpacing, AfDrawerPosition, AfDrawerSize, AfDropdownItem, AfEmptyStateSize, AfEmptyStateVariant, AfFileEntry, AfFileValidationError, AfGaugeThreshold, AfIconSize, AfInputI18n, AfInputType, AfNavTab, AfNavTabsSize, AfNavTabsVariant, AfNavbarSize, AfNavbarVariant, AfPopoverAlign, AfPopoverPosition, AfPopoverSize, AfProgressBarSize, AfProgressBarVariant, AfSelectI18n, AfSelectMenuI18n, AfSelectMenuOption, AfSelectOption, AfShellPanelState, AfShellSidebarState, AfSidebarMode, AfSkeletonVariant, AfSliderSize, AfSortDirection, AfSortState, AfSpinnerSize, AfTab, AfTableCellType, AfTableVariant, AfToast, AfToastVariant, AfToggleGroupSize, AfToggleItem, AfTooltipPosition, AfTreeI18n, TreeNode, TreeNodeTemplateContext, TreeSelectionMode, TreeToggleEvent };
|