@eagami/ui 5.50.0 → 5.51.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.
@@ -57,6 +57,23 @@ export interface EagamiMessages {
57
57
  breadcrumbs: {
58
58
  label: string;
59
59
  };
60
+ chart: {
61
+ /** Announced role of a chart's plot, in place of the generic "group". */
62
+ roleDescription: string;
63
+ lineChart: string;
64
+ barChart: string;
65
+ pieChart: string;
66
+ /** Header of the data table's label column. */
67
+ category: string;
68
+ value: string;
69
+ /** Header of a pie chart's percentage column. */
70
+ share: string;
71
+ noData: string;
72
+ /** Announces the highlighted point of a line or bar chart. */
73
+ point: (series: string, label: string, value: string) => string;
74
+ /** Announces the highlighted slice of a pie chart. */
75
+ slice: (label: string, value: string, percent: string) => string;
76
+ };
60
77
  codeInput: {
61
78
  groupLabel: (length: number) => string;
62
79
  digitLabel: (index: number, length: number) => string;
@@ -1273,6 +1290,269 @@ export declare class BadgeComponent {
1273
1290
  };
1274
1291
  }, {}, never, ["*"], true, never>;
1275
1292
  }
1293
+ /** Visual size of a chart; scales its axis, legend, and tooltip text. */
1294
+ type ChartSize = EaSize;
1295
+ /** One named run of values plotted by a line or bar chart. */
1296
+ interface ChartSeries {
1297
+ /** Name shown in the legend, tooltip, and data table. */
1298
+ name: string;
1299
+ /** One value per label; `null` leaves a gap. */
1300
+ data: (number | null)[];
1301
+ /** Any CSS color; defaults to the next slot of the `--color-chart-*` palette. */
1302
+ color?: string;
1303
+ }
1304
+ /** Payload describing a single plotted value of a line or bar chart. */
1305
+ interface ChartPointEvent {
1306
+ seriesIndex: number;
1307
+ seriesName: string;
1308
+ /** Position of the value within its series (and of its label within `labels`). */
1309
+ index: number;
1310
+ label: string;
1311
+ value: number;
1312
+ }
1313
+ /** Number of categorical colors in the `--color-chart-*` palette. */
1314
+ declare const CHART_COLOR_COUNT = 8;
1315
+ /** Resolves a series' color, falling back to its slot of the chart palette. */
1316
+ declare function chartColor(index: number, override?: string): string;
1317
+ /** A value axis extended to round numbers, with the ticks drawn along it. */
1318
+ interface NiceScale {
1319
+ min: number;
1320
+ max: number;
1321
+ ticks: number[];
1322
+ }
1323
+ /** Extends `[min, max]` outward to round tick values, about `maxTicks` of them. */
1324
+ declare function niceScale(min: number, max: number, maxTicks?: number): NiceScale;
1325
+ /** Rough rendered width of `text` in px, for reserving axis room without a layout pass. */
1326
+ declare function estimateTextWidth(text: string, fontPx: number): number;
1327
+ /** Live size of a chart's host, re-measured on resize and whenever `size` changes. */
1328
+ interface ChartViewport {
1329
+ width: Signal<number>;
1330
+ fontSize: Signal<number>;
1331
+ }
1332
+ /**
1333
+ * Measures the host's width and font-size so the chart can lay out its SVG in
1334
+ * real pixels, keeping text and stroke widths crisp at every width.
1335
+ */
1336
+ declare function injectChartViewport(size: Signal<ChartSize>): ChartViewport;
1337
+ /** Localized value formatter honouring a consumer's own `formatValue`. */
1338
+ declare function injectChartFormatter(formatValue: Signal<((value: number) => string) | null>): Signal<(value: number) => string>;
1339
+ /** Keeps a value inside `[min, max]`. */
1340
+ declare function clamp(value: number, min: number, max: number): number;
1341
+ /** Direction the bars extend from the baseline. */
1342
+ export type BarChartOrientation = 'vertical' | 'horizontal';
1343
+ /**
1344
+ * Entrance animation, replayed whenever the data changes. `grow` extends every
1345
+ * bar out of the baseline together, `cascade` grows them one category after
1346
+ * another, and `fade` fades the bars in.
1347
+ */
1348
+ export type BarChartAnimation = 'grow' | 'cascade' | 'fade' | 'none';
1349
+ interface PlotBar {
1350
+ series: number;
1351
+ index: number;
1352
+ value: number;
1353
+ color: string;
1354
+ path: string;
1355
+ delay: number;
1356
+ }
1357
+ interface PlotValueLabel {
1358
+ key: string;
1359
+ x: number;
1360
+ y: number;
1361
+ text: string;
1362
+ anchor: 'start' | 'middle' | 'end';
1363
+ }
1364
+ interface ActiveBar {
1365
+ series: number;
1366
+ index: number;
1367
+ }
1368
+ /**
1369
+ * Compares values across labels as vertical columns or horizontal bars, with
1370
+ * several series grouped side by side or stacked. Hovering or arrowing through
1371
+ * the chart reveals each label's values in a tooltip, and a visually hidden
1372
+ * table carries the full data for screen readers.
1373
+ */
1374
+ export declare class BarChartComponent {
1375
+ protected readonly i18n: EagamiI18nService;
1376
+ /** Category labels along the category axis, one per value. */
1377
+ readonly labels: import("@angular/core").InputSignal<string[]>;
1378
+ /** The series to plot. */
1379
+ readonly series: import("@angular/core").InputSignal<ChartSeries[]>;
1380
+ /** Direction the bars extend from the baseline. */
1381
+ readonly orientation: import("@angular/core").InputSignal<BarChartOrientation>;
1382
+ /** Stacks the series of each label into one bar instead of grouping them side by side. */
1383
+ readonly stacked: import("@angular/core").InputSignal<boolean>;
1384
+ /** Draws gridlines at each value-axis tick. */
1385
+ readonly showGrid: import("@angular/core").InputSignal<boolean>;
1386
+ /** Shows a legend beneath the chart when it plots more than one series. */
1387
+ readonly showLegend: import("@angular/core").InputSignal<boolean>;
1388
+ /** Prints each bar's value at its end, or each stack's total when stacked. */
1389
+ readonly showValues: import("@angular/core").InputSignal<boolean>;
1390
+ /** Height of the plot in pixels; the width fills the container. */
1391
+ readonly height: import("@angular/core").InputSignal<number>;
1392
+ /** Visual size; scales the axis, legend, and tooltip text and the bar thickness cap. */
1393
+ readonly size: import("@angular/core").InputSignal<import("@eagami/ui").EaSize>;
1394
+ /** Entrance animation, replayed whenever the data changes. */
1395
+ readonly animation: import("@angular/core").InputSignal<BarChartAnimation>;
1396
+ /** Length of the entrance animation in milliseconds. */
1397
+ readonly animationDuration: import("@angular/core").InputSignal<number>;
1398
+ /** Formats values on the axis, tooltip, and data table; locale-grouped by default. */
1399
+ readonly formatValue: import("@angular/core").InputSignal<((value: number) => string) | null>;
1400
+ /** Accessible name for the chart; defaults to a localized "Bar chart". */
1401
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
1402
+ /** Fires when a bar is clicked, or chosen with Enter or Space. */
1403
+ readonly pointClick: import("@angular/core").OutputEmitterRef<ChartPointEvent>;
1404
+ /** Fires when the highlighted bar changes by pointer or keyboard, with `null` once cleared. */
1405
+ readonly activePointChange: import("@angular/core").OutputEmitterRef<ChartPointEvent | null>;
1406
+ private readonly viewport;
1407
+ private readonly format;
1408
+ protected readonly active: import("@angular/core").WritableSignal<ActiveBar | null>;
1409
+ protected readonly label: import("@angular/core").Signal<string>;
1410
+ protected readonly count: import("@angular/core").Signal<number>;
1411
+ protected readonly hasData: import("@angular/core").Signal<boolean>;
1412
+ protected readonly renderPass: import("@angular/core").Signal<{}[]>;
1413
+ protected readonly hostClasses: import("@angular/core").Signal<{
1414
+ [x: string]: boolean;
1415
+ }>;
1416
+ protected readonly layout: import("@angular/core").Signal<{
1417
+ vertical: boolean;
1418
+ width: number;
1419
+ height: number;
1420
+ top: number;
1421
+ left: number;
1422
+ plotWidth: number;
1423
+ plotHeight: number;
1424
+ baseline: number;
1425
+ band: number;
1426
+ categoryStart: number;
1427
+ groupWidth: number;
1428
+ thickness: number;
1429
+ axisPx: number;
1430
+ ticks: {
1431
+ value: number;
1432
+ text: string;
1433
+ pos: number;
1434
+ }[];
1435
+ categories: {
1436
+ text: string;
1437
+ index: number;
1438
+ pos: number;
1439
+ }[];
1440
+ bars: PlotBar[];
1441
+ valueLabels: PlotValueLabel[];
1442
+ valuePos: (v: number) => number;
1443
+ }>;
1444
+ protected readonly tooltip: import("@angular/core").Signal<{
1445
+ x: number;
1446
+ y: number;
1447
+ title: string;
1448
+ rows: {
1449
+ name: string;
1450
+ color: string;
1451
+ value: string;
1452
+ active: boolean;
1453
+ }[];
1454
+ key: string;
1455
+ } | null>;
1456
+ protected readonly tooltips: import("@angular/core").Signal<{
1457
+ x: number;
1458
+ y: number;
1459
+ title: string;
1460
+ rows: {
1461
+ name: string;
1462
+ color: string;
1463
+ value: string;
1464
+ active: boolean;
1465
+ }[];
1466
+ key: string;
1467
+ }[]>;
1468
+ protected readonly announcement: import("@angular/core").Signal<string>;
1469
+ protected readonly showsLegend: import("@angular/core").Signal<boolean>;
1470
+ protected seriesColor(index: number): string;
1471
+ protected isDimmed(bar: PlotBar): boolean;
1472
+ protected tableValue(value: number | null | undefined): string;
1473
+ protected onPointerMove(event: PointerEvent): void;
1474
+ protected onPointerLeave(): void;
1475
+ protected onClick(): void;
1476
+ protected onFocus(): void;
1477
+ protected onBlur(): void;
1478
+ protected onKeydown(event: KeyboardEvent): void;
1479
+ private valueAt;
1480
+ private stackEnd;
1481
+ private firstIn;
1482
+ private eventFor;
1483
+ private setActive;
1484
+ static ɵfac: i0.ɵɵFactoryDeclaration<BarChartComponent, never>;
1485
+ static ɵcmp: i0.ɵɵComponentDeclaration<BarChartComponent, "ea-bar-chart", never, {
1486
+ "labels": {
1487
+ "alias": "labels";
1488
+ "required": false;
1489
+ "isSignal": true;
1490
+ };
1491
+ "series": {
1492
+ "alias": "series";
1493
+ "required": false;
1494
+ "isSignal": true;
1495
+ };
1496
+ "orientation": {
1497
+ "alias": "orientation";
1498
+ "required": false;
1499
+ "isSignal": true;
1500
+ };
1501
+ "stacked": {
1502
+ "alias": "stacked";
1503
+ "required": false;
1504
+ "isSignal": true;
1505
+ };
1506
+ "showGrid": {
1507
+ "alias": "showGrid";
1508
+ "required": false;
1509
+ "isSignal": true;
1510
+ };
1511
+ "showLegend": {
1512
+ "alias": "showLegend";
1513
+ "required": false;
1514
+ "isSignal": true;
1515
+ };
1516
+ "showValues": {
1517
+ "alias": "showValues";
1518
+ "required": false;
1519
+ "isSignal": true;
1520
+ };
1521
+ "height": {
1522
+ "alias": "height";
1523
+ "required": false;
1524
+ "isSignal": true;
1525
+ };
1526
+ "size": {
1527
+ "alias": "size";
1528
+ "required": false;
1529
+ "isSignal": true;
1530
+ };
1531
+ "animation": {
1532
+ "alias": "animation";
1533
+ "required": false;
1534
+ "isSignal": true;
1535
+ };
1536
+ "animationDuration": {
1537
+ "alias": "animationDuration";
1538
+ "required": false;
1539
+ "isSignal": true;
1540
+ };
1541
+ "formatValue": {
1542
+ "alias": "formatValue";
1543
+ "required": false;
1544
+ "isSignal": true;
1545
+ };
1546
+ "ariaLabel": {
1547
+ "alias": "aria-label";
1548
+ "required": false;
1549
+ "isSignal": true;
1550
+ };
1551
+ }, {
1552
+ "pointClick": "pointClick";
1553
+ "activePointChange": "activePointChange";
1554
+ }, never, never, true, never>;
1555
+ }
1276
1556
  /** Visual style of the separator rendered between breadcrumb items. */
1277
1557
  export type BreadcrumbsSeparator = 'chevron' | 'slash';
1278
1558
  /** Visual size of the breadcrumb trail. */
@@ -3993,6 +4273,230 @@ export declare class InputComponent implements ControlValueAccessor {
3993
4273
  "blurred": "blurred";
3994
4274
  }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
3995
4275
  }
4276
+ /** How the line bends between points. */
4277
+ export type LineChartCurve = 'linear' | 'smooth' | 'step';
4278
+ /**
4279
+ * Entrance animation, replayed whenever the data changes. `draw` traces each
4280
+ * line along its length, `reveal` wipes every line in together from left to
4281
+ * right, `fade` fades the plot in, and `rise` grows it up from the baseline.
4282
+ */
4283
+ export type LineChartAnimation = 'draw' | 'reveal' | 'fade' | 'rise' | 'none';
4284
+ interface PlotPoint {
4285
+ x: number;
4286
+ y: number;
4287
+ index: number;
4288
+ value: number;
4289
+ }
4290
+ interface PlotSeries {
4291
+ name: string;
4292
+ color: string;
4293
+ paths: string[];
4294
+ areas: string[];
4295
+ points: PlotPoint[];
4296
+ }
4297
+ interface ActivePoint {
4298
+ series: number;
4299
+ index: number;
4300
+ }
4301
+ /**
4302
+ * Plots one or more series of values across shared labels as lines, with
4303
+ * optional points and area fills. Hovering or arrowing through the chart
4304
+ * reveals each label's values in a tooltip, and a visually hidden table
4305
+ * carries the full data for screen readers.
4306
+ */
4307
+ export declare class LineChartComponent {
4308
+ protected readonly i18n: EagamiI18nService;
4309
+ /** Category labels along the x-axis, one per value. */
4310
+ readonly labels: import("@angular/core").InputSignal<string[]>;
4311
+ /** The series to plot. */
4312
+ readonly series: import("@angular/core").InputSignal<ChartSeries[]>;
4313
+ /** How the line bends between points. */
4314
+ readonly curve: import("@angular/core").InputSignal<LineChartCurve>;
4315
+ /** Fills the area beneath each line with a light wash of its color. */
4316
+ readonly showArea: import("@angular/core").InputSignal<boolean>;
4317
+ /** Marks every value with a point. */
4318
+ readonly showPoints: import("@angular/core").InputSignal<boolean>;
4319
+ /** Draws horizontal gridlines at each y-axis tick. */
4320
+ readonly showGrid: import("@angular/core").InputSignal<boolean>;
4321
+ /** Shows a legend beneath the chart when it plots more than one series. */
4322
+ readonly showLegend: import("@angular/core").InputSignal<boolean>;
4323
+ /** Lower bound of the y-axis; derived from the data when unset. */
4324
+ readonly yMin: import("@angular/core").InputSignal<number | undefined>;
4325
+ /** Upper bound of the y-axis; derived from the data when unset. */
4326
+ readonly yMax: import("@angular/core").InputSignal<number | undefined>;
4327
+ /** Height of the plot in pixels; the width fills the container. */
4328
+ readonly height: import("@angular/core").InputSignal<number>;
4329
+ /** Visual size; scales the axis, legend, and tooltip text. */
4330
+ readonly size: import("@angular/core").InputSignal<import("@eagami/ui").EaSize>;
4331
+ /** Entrance animation, replayed whenever the data changes. */
4332
+ readonly animation: import("@angular/core").InputSignal<LineChartAnimation>;
4333
+ /** Length of the entrance animation in milliseconds. */
4334
+ readonly animationDuration: import("@angular/core").InputSignal<number>;
4335
+ /** Formats values on the axis, tooltip, and data table; locale-grouped by default. */
4336
+ readonly formatValue: import("@angular/core").InputSignal<((value: number) => string) | null>;
4337
+ /** Accessible name for the chart; defaults to a localized "Line chart". */
4338
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
4339
+ /** Fires when a point is clicked, or chosen with Enter or Space. */
4340
+ readonly pointClick: import("@angular/core").OutputEmitterRef<ChartPointEvent>;
4341
+ /** Fires when the highlighted point changes by pointer or keyboard, with `null` once cleared. */
4342
+ readonly activePointChange: import("@angular/core").OutputEmitterRef<ChartPointEvent | null>;
4343
+ private readonly viewport;
4344
+ private readonly format;
4345
+ protected readonly active: import("@angular/core").WritableSignal<ActivePoint | null>;
4346
+ protected readonly label: import("@angular/core").Signal<string>;
4347
+ protected readonly count: import("@angular/core").Signal<number>;
4348
+ protected readonly hasData: import("@angular/core").Signal<boolean>;
4349
+ protected readonly renderPass: import("@angular/core").Signal<{}[]>;
4350
+ protected readonly hostClasses: import("@angular/core").Signal<{
4351
+ [x: string]: boolean;
4352
+ }>;
4353
+ protected readonly layout: import("@angular/core").Signal<{
4354
+ width: number;
4355
+ height: number;
4356
+ top: number;
4357
+ left: number;
4358
+ plotWidth: number;
4359
+ plotHeight: number;
4360
+ baselineY: number;
4361
+ labelY: number;
4362
+ tickX: number;
4363
+ ticks: {
4364
+ y: number;
4365
+ value: number;
4366
+ text: string;
4367
+ }[];
4368
+ xLabels: {
4369
+ text: string;
4370
+ index: number;
4371
+ x: number;
4372
+ }[];
4373
+ series: PlotSeries[];
4374
+ x: (i: number) => number;
4375
+ y: (v: number) => number;
4376
+ }>;
4377
+ protected readonly tooltip: import("@angular/core").Signal<{
4378
+ x: number;
4379
+ y: number;
4380
+ title: string;
4381
+ rows: {
4382
+ name: string;
4383
+ color: string;
4384
+ value: string;
4385
+ active: boolean;
4386
+ }[];
4387
+ key: string;
4388
+ } | null>;
4389
+ protected readonly tooltips: import("@angular/core").Signal<{
4390
+ x: number;
4391
+ y: number;
4392
+ title: string;
4393
+ rows: {
4394
+ name: string;
4395
+ color: string;
4396
+ value: string;
4397
+ active: boolean;
4398
+ }[];
4399
+ key: string;
4400
+ }[]>;
4401
+ protected readonly announcement: import("@angular/core").Signal<string>;
4402
+ protected readonly showsLegend: import("@angular/core").Signal<boolean>;
4403
+ protected seriesColor(index: number): string;
4404
+ protected isDimmed(index: number): boolean;
4405
+ protected isActivePoint(seriesIndex: number, index: number): boolean;
4406
+ protected tableValue(value: number | null | undefined): string;
4407
+ protected onPointerMove(event: PointerEvent): void;
4408
+ protected onPointerLeave(): void;
4409
+ protected onClick(): void;
4410
+ protected onFocus(): void;
4411
+ protected onBlur(): void;
4412
+ protected onKeydown(event: KeyboardEvent): void;
4413
+ private valueAt;
4414
+ private firstPoint;
4415
+ private nearestValid;
4416
+ private eventFor;
4417
+ private setActive;
4418
+ static ɵfac: i0.ɵɵFactoryDeclaration<LineChartComponent, never>;
4419
+ static ɵcmp: i0.ɵɵComponentDeclaration<LineChartComponent, "ea-line-chart", never, {
4420
+ "labels": {
4421
+ "alias": "labels";
4422
+ "required": false;
4423
+ "isSignal": true;
4424
+ };
4425
+ "series": {
4426
+ "alias": "series";
4427
+ "required": false;
4428
+ "isSignal": true;
4429
+ };
4430
+ "curve": {
4431
+ "alias": "curve";
4432
+ "required": false;
4433
+ "isSignal": true;
4434
+ };
4435
+ "showArea": {
4436
+ "alias": "showArea";
4437
+ "required": false;
4438
+ "isSignal": true;
4439
+ };
4440
+ "showPoints": {
4441
+ "alias": "showPoints";
4442
+ "required": false;
4443
+ "isSignal": true;
4444
+ };
4445
+ "showGrid": {
4446
+ "alias": "showGrid";
4447
+ "required": false;
4448
+ "isSignal": true;
4449
+ };
4450
+ "showLegend": {
4451
+ "alias": "showLegend";
4452
+ "required": false;
4453
+ "isSignal": true;
4454
+ };
4455
+ "yMin": {
4456
+ "alias": "yMin";
4457
+ "required": false;
4458
+ "isSignal": true;
4459
+ };
4460
+ "yMax": {
4461
+ "alias": "yMax";
4462
+ "required": false;
4463
+ "isSignal": true;
4464
+ };
4465
+ "height": {
4466
+ "alias": "height";
4467
+ "required": false;
4468
+ "isSignal": true;
4469
+ };
4470
+ "size": {
4471
+ "alias": "size";
4472
+ "required": false;
4473
+ "isSignal": true;
4474
+ };
4475
+ "animation": {
4476
+ "alias": "animation";
4477
+ "required": false;
4478
+ "isSignal": true;
4479
+ };
4480
+ "animationDuration": {
4481
+ "alias": "animationDuration";
4482
+ "required": false;
4483
+ "isSignal": true;
4484
+ };
4485
+ "formatValue": {
4486
+ "alias": "formatValue";
4487
+ "required": false;
4488
+ "isSignal": true;
4489
+ };
4490
+ "ariaLabel": {
4491
+ "alias": "aria-label";
4492
+ "required": false;
4493
+ "isSignal": true;
4494
+ };
4495
+ }, {
4496
+ "pointClick": "pointClick";
4497
+ "activePointChange": "activePointChange";
4498
+ }, never, never, true, never>;
4499
+ }
3996
4500
  /** Placement of the menu list relative to its trigger. */
3997
4501
  export type MenuPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end';
3998
4502
  /** Visual size of the menu, shared by all of its items. */
@@ -5030,6 +5534,183 @@ export declare class PaginatorComponent {
5030
5534
  "changed": "changed";
5031
5535
  }, never, never, true, never>;
5032
5536
  }
5537
+ /** A solid pie, or a ring with an empty center. */
5538
+ export type PieChartVariant = 'pie' | 'donut';
5539
+ /**
5540
+ * Entrance animation, replayed whenever the data changes. `sweep` reveals the
5541
+ * slices clockwise from twelve o'clock, `grow` scales the chart out from its
5542
+ * center, and `fade` fades it in.
5543
+ */
5544
+ export type PieChartAnimation = 'sweep' | 'grow' | 'fade' | 'none';
5545
+ /** One slice of an `<ea-pie-chart>`. */
5546
+ export interface PieChartSlice {
5547
+ /** Name shown in the legend, tooltip, and data table. */
5548
+ label: string;
5549
+ /** Size of the slice; negative values count as zero. */
5550
+ value: number;
5551
+ /** Any CSS color; defaults to the next slot of the `--color-chart-*` palette. */
5552
+ color?: string;
5553
+ }
5554
+ /** Payload describing a single slice of a pie chart. */
5555
+ export interface PieChartSliceEvent {
5556
+ index: number;
5557
+ label: string;
5558
+ value: number;
5559
+ /** Share of the total, from 0 to 100. */
5560
+ percent: number;
5561
+ }
5562
+ interface PlotSlice {
5563
+ index: number;
5564
+ path: string;
5565
+ color: string;
5566
+ midAngle: number;
5567
+ start: number;
5568
+ end: number;
5569
+ }
5570
+ /**
5571
+ * Shows how parts make up a whole as slices of a pie or donut, with a legend
5572
+ * of labels and shares. Hovering or arrowing through the slices reveals each
5573
+ * one's value in a tooltip, and a visually hidden table carries the full data
5574
+ * for screen readers.
5575
+ */
5576
+ export declare class PieChartComponent {
5577
+ protected readonly i18n: EagamiI18nService;
5578
+ /** The slices to draw, clockwise from twelve o'clock. */
5579
+ readonly data: import("@angular/core").InputSignal<PieChartSlice[]>;
5580
+ /** A solid pie, or a ring with an empty center. */
5581
+ readonly variant: import("@angular/core").InputSignal<PieChartVariant>;
5582
+ /** Shows a legend of every slice beside the chart. */
5583
+ readonly showLegend: import("@angular/core").InputSignal<boolean>;
5584
+ /** Adds each slice's share of the total to its legend entry. */
5585
+ readonly showPercentages: import("@angular/core").InputSignal<boolean>;
5586
+ /** Largest diameter of the chart in pixels; it shrinks to fit a narrower container. */
5587
+ readonly height: import("@angular/core").InputSignal<number>;
5588
+ /** Visual size; scales the legend and tooltip text. */
5589
+ readonly size: import("@angular/core").InputSignal<import("@eagami/ui").EaSize>;
5590
+ /** Entrance animation, replayed whenever the data changes. */
5591
+ readonly animation: import("@angular/core").InputSignal<PieChartAnimation>;
5592
+ /** Length of the entrance animation in milliseconds. */
5593
+ readonly animationDuration: import("@angular/core").InputSignal<number>;
5594
+ /** Formats values in the tooltip and data table; locale-grouped by default. */
5595
+ readonly formatValue: import("@angular/core").InputSignal<((value: number) => string) | null>;
5596
+ /** Accessible name for the chart; defaults to a localized "Pie chart". */
5597
+ readonly ariaLabel: import("@angular/core").InputSignal<string | undefined>;
5598
+ /** Fires when a slice is clicked, or chosen with Enter or Space. */
5599
+ readonly sliceClick: import("@angular/core").OutputEmitterRef<PieChartSliceEvent>;
5600
+ /** Fires when the highlighted slice changes by pointer or keyboard, with `null` once cleared. */
5601
+ readonly activeSliceChange: import("@angular/core").OutputEmitterRef<PieChartSliceEvent | null>;
5602
+ private readonly viewport;
5603
+ private readonly format;
5604
+ protected readonly active: import("@angular/core").WritableSignal<number | null>;
5605
+ protected readonly label: import("@angular/core").Signal<string>;
5606
+ protected readonly total: import("@angular/core").Signal<number>;
5607
+ protected readonly hasData: import("@angular/core").Signal<boolean>;
5608
+ protected readonly renderPass: import("@angular/core").Signal<{}[]>;
5609
+ protected readonly hostClasses: import("@angular/core").Signal<{
5610
+ [x: string]: boolean;
5611
+ }>;
5612
+ protected readonly layout: import("@angular/core").Signal<{
5613
+ diameter: number;
5614
+ cx: number;
5615
+ cy: number;
5616
+ outer: number;
5617
+ inner: number;
5618
+ slices: PlotSlice[];
5619
+ }>;
5620
+ protected readonly legend: import("@angular/core").Signal<{
5621
+ label: string;
5622
+ color: string;
5623
+ percent: string;
5624
+ }[]>;
5625
+ protected readonly tooltip: import("@angular/core").Signal<{
5626
+ x: number;
5627
+ y: number;
5628
+ title: string;
5629
+ color: string;
5630
+ detail: string;
5631
+ key: number;
5632
+ } | null>;
5633
+ protected readonly tooltips: import("@angular/core").Signal<{
5634
+ x: number;
5635
+ y: number;
5636
+ title: string;
5637
+ color: string;
5638
+ detail: string;
5639
+ key: number;
5640
+ }[]>;
5641
+ protected readonly announcement: import("@angular/core").Signal<string>;
5642
+ protected tableValue(slice: PieChartSlice): string;
5643
+ protected tablePercent(index: number): string;
5644
+ protected isDimmed(index: number): boolean;
5645
+ protected offset(slice: PlotSlice): string | null;
5646
+ protected onPointerMove(event: PointerEvent): void;
5647
+ protected onPointerLeave(): void;
5648
+ protected onClick(): void;
5649
+ protected onFocus(): void;
5650
+ protected onBlur(): void;
5651
+ protected onKeydown(event: KeyboardEvent): void;
5652
+ private sliceValue;
5653
+ private percentOf;
5654
+ private formatPercent;
5655
+ private eventFor;
5656
+ private setActive;
5657
+ static ɵfac: i0.ɵɵFactoryDeclaration<PieChartComponent, never>;
5658
+ static ɵcmp: i0.ɵɵComponentDeclaration<PieChartComponent, "ea-pie-chart", never, {
5659
+ "data": {
5660
+ "alias": "data";
5661
+ "required": false;
5662
+ "isSignal": true;
5663
+ };
5664
+ "variant": {
5665
+ "alias": "variant";
5666
+ "required": false;
5667
+ "isSignal": true;
5668
+ };
5669
+ "showLegend": {
5670
+ "alias": "showLegend";
5671
+ "required": false;
5672
+ "isSignal": true;
5673
+ };
5674
+ "showPercentages": {
5675
+ "alias": "showPercentages";
5676
+ "required": false;
5677
+ "isSignal": true;
5678
+ };
5679
+ "height": {
5680
+ "alias": "height";
5681
+ "required": false;
5682
+ "isSignal": true;
5683
+ };
5684
+ "size": {
5685
+ "alias": "size";
5686
+ "required": false;
5687
+ "isSignal": true;
5688
+ };
5689
+ "animation": {
5690
+ "alias": "animation";
5691
+ "required": false;
5692
+ "isSignal": true;
5693
+ };
5694
+ "animationDuration": {
5695
+ "alias": "animationDuration";
5696
+ "required": false;
5697
+ "isSignal": true;
5698
+ };
5699
+ "formatValue": {
5700
+ "alias": "formatValue";
5701
+ "required": false;
5702
+ "isSignal": true;
5703
+ };
5704
+ "ariaLabel": {
5705
+ "alias": "aria-label";
5706
+ "required": false;
5707
+ "isSignal": true;
5708
+ };
5709
+ }, {
5710
+ "sliceClick": "sliceClick";
5711
+ "activeSliceChange": "activeSliceChange";
5712
+ }, never, never, true, never>;
5713
+ }
5033
5714
  /** Semantic colour scheme of the progress bar. */
5034
5715
  export type ProgressBarVariant = 'default' | 'success' | 'warning' | 'error' | 'info';
5035
5716
  /** Visual height of the progress bar. */
@@ -6387,6 +7068,12 @@ export declare class TooltipDirective implements OnDestroy {
6387
7068
  * reach its scrollbar. Bubbles that fit hide immediately.
6388
7069
  */
6389
7070
  readonly dismissDelay: import("@angular/core").InputSignal<number>;
7071
+ /**
7072
+ * Shows or hides the bubble programmatically, for a trigger whose moment to
7073
+ * explain itself is not a hover or focus of its own (a chart's highlighted
7074
+ * point, say). `null` leaves it to hover and focus. Escape still dismisses it.
7075
+ */
7076
+ readonly tooltipOpen: import("@angular/core").InputSignal<boolean | null>;
6390
7077
  private tooltipEl;
6391
7078
  /** Side the open bubble settled on, held across repositions while it fits. */
6392
7079
  private placedPosition;
@@ -6411,6 +7098,7 @@ export declare class TooltipDirective implements OnDestroy {
6411
7098
  private readonly scrollListenerOptions;
6412
7099
  private resizeObserver;
6413
7100
  constructor();
7101
+ private controlled;
6414
7102
  ngOnDestroy(): void;
6415
7103
  private syncPointerListeners;
6416
7104
  private show;
@@ -6458,6 +7146,11 @@ export declare class TooltipDirective implements OnDestroy {
6458
7146
  "required": false;
6459
7147
  "isSignal": true;
6460
7148
  };
7149
+ "tooltipOpen": {
7150
+ "alias": "tooltipOpen";
7151
+ "required": false;
7152
+ "isSignal": true;
7153
+ };
6461
7154
  }, {}, never, never, true, never>;
6462
7155
  }
6463
7156
  /** Semantic colour scheme of a tag. */
@@ -11365,4 +12058,4 @@ export declare class ZoomOutIconComponent extends IconComponentBase {
11365
12058
  static ɵfac: i0.ɵɵFactoryDeclaration<ZoomOutIconComponent, never>;
11366
12059
  static ɵcmp: i0.ɵɵComponentDeclaration<ZoomOutIconComponent, "ea-icon-zoom-out", never, {}, {}, never, never, true, never>;
11367
12060
  }
11368
- export type { EaErrorMessages, EaValidationErrorKey };
12061
+ export type { ChartPointEvent, ChartSeries, ChartSize, EaErrorMessages, EaValidationErrorKey };