@skdx/angular-charts 0.33.0 → 0.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +104 -41
  2. package/fesm2022/skdx-angular-charts-area.mjs +36 -2
  3. package/fesm2022/skdx-angular-charts-area.mjs.map +1 -1
  4. package/fesm2022/skdx-angular-charts-bar.mjs +40 -15
  5. package/fesm2022/skdx-angular-charts-bar.mjs.map +1 -1
  6. package/fesm2022/skdx-angular-charts-boxplot.mjs +76 -8
  7. package/fesm2022/skdx-angular-charts-boxplot.mjs.map +1 -1
  8. package/fesm2022/skdx-angular-charts-bubble.mjs +119 -0
  9. package/fesm2022/skdx-angular-charts-bubble.mjs.map +1 -0
  10. package/fesm2022/skdx-angular-charts-bullet.mjs +110 -0
  11. package/fesm2022/skdx-angular-charts-bullet.mjs.map +1 -0
  12. package/fesm2022/skdx-angular-charts-bump.mjs +113 -0
  13. package/fesm2022/skdx-angular-charts-bump.mjs.map +1 -0
  14. package/fesm2022/skdx-angular-charts-candlestick.mjs +76 -8
  15. package/fesm2022/skdx-angular-charts-candlestick.mjs.map +1 -1
  16. package/fesm2022/skdx-angular-charts-chord.mjs +63 -12
  17. package/fesm2022/skdx-angular-charts-chord.mjs.map +1 -1
  18. package/fesm2022/skdx-angular-charts-circle-packing.mjs +107 -0
  19. package/fesm2022/skdx-angular-charts-circle-packing.mjs.map +1 -0
  20. package/fesm2022/skdx-angular-charts-combo.mjs +82 -0
  21. package/fesm2022/skdx-angular-charts-combo.mjs.map +1 -0
  22. package/fesm2022/skdx-angular-charts-dumbbell.mjs +116 -0
  23. package/fesm2022/skdx-angular-charts-dumbbell.mjs.map +1 -0
  24. package/fesm2022/skdx-angular-charts-funnel.mjs +63 -8
  25. package/fesm2022/skdx-angular-charts-funnel.mjs.map +1 -1
  26. package/fesm2022/skdx-angular-charts-gantt.mjs +64 -11
  27. package/fesm2022/skdx-angular-charts-gantt.mjs.map +1 -1
  28. package/fesm2022/skdx-angular-charts-gauge.mjs +134 -0
  29. package/fesm2022/skdx-angular-charts-gauge.mjs.map +1 -0
  30. package/fesm2022/skdx-angular-charts-heatmap.mjs +111 -15
  31. package/fesm2022/skdx-angular-charts-heatmap.mjs.map +1 -1
  32. package/fesm2022/skdx-angular-charts-histogram.mjs +134 -0
  33. package/fesm2022/skdx-angular-charts-histogram.mjs.map +1 -0
  34. package/fesm2022/skdx-angular-charts-icicle.mjs +119 -0
  35. package/fesm2022/skdx-angular-charts-icicle.mjs.map +1 -0
  36. package/fesm2022/skdx-angular-charts-internal.mjs +10134 -1106
  37. package/fesm2022/skdx-angular-charts-internal.mjs.map +1 -1
  38. package/fesm2022/skdx-angular-charts-line.mjs +36 -2
  39. package/fesm2022/skdx-angular-charts-line.mjs.map +1 -1
  40. package/fesm2022/skdx-angular-charts-linear-gauge.mjs +119 -0
  41. package/fesm2022/skdx-angular-charts-linear-gauge.mjs.map +1 -0
  42. package/fesm2022/skdx-angular-charts-map.mjs +81 -8
  43. package/fesm2022/skdx-angular-charts-map.mjs.map +1 -1
  44. package/fesm2022/skdx-angular-charts-marimekko.mjs +103 -0
  45. package/fesm2022/skdx-angular-charts-marimekko.mjs.map +1 -0
  46. package/fesm2022/skdx-angular-charts-network.mjs +113 -0
  47. package/fesm2022/skdx-angular-charts-network.mjs.map +1 -0
  48. package/fesm2022/skdx-angular-charts-organization.mjs +111 -0
  49. package/fesm2022/skdx-angular-charts-organization.mjs.map +1 -0
  50. package/fesm2022/skdx-angular-charts-parallel.mjs +105 -0
  51. package/fesm2022/skdx-angular-charts-parallel.mjs.map +1 -0
  52. package/fesm2022/skdx-angular-charts-pareto.mjs +123 -0
  53. package/fesm2022/skdx-angular-charts-pareto.mjs.map +1 -0
  54. package/fesm2022/skdx-angular-charts-pie.mjs +79 -5
  55. package/fesm2022/skdx-angular-charts-pie.mjs.map +1 -1
  56. package/fesm2022/skdx-angular-charts-polar-area.mjs +118 -0
  57. package/fesm2022/skdx-angular-charts-polar-area.mjs.map +1 -0
  58. package/fesm2022/skdx-angular-charts-radar.mjs +87 -9
  59. package/fesm2022/skdx-angular-charts-radar.mjs.map +1 -1
  60. package/fesm2022/skdx-angular-charts-radial.mjs +130 -0
  61. package/fesm2022/skdx-angular-charts-radial.mjs.map +1 -0
  62. package/fesm2022/skdx-angular-charts-range.mjs +133 -0
  63. package/fesm2022/skdx-angular-charts-range.mjs.map +1 -0
  64. package/fesm2022/skdx-angular-charts-sankey.mjs +81 -8
  65. package/fesm2022/skdx-angular-charts-sankey.mjs.map +1 -1
  66. package/fesm2022/skdx-angular-charts-scatter.mjs +74 -5
  67. package/fesm2022/skdx-angular-charts-scatter.mjs.map +1 -1
  68. package/fesm2022/skdx-angular-charts-sparkline.mjs +76 -8
  69. package/fesm2022/skdx-angular-charts-sparkline.mjs.map +1 -1
  70. package/fesm2022/skdx-angular-charts-sunburst.mjs +88 -8
  71. package/fesm2022/skdx-angular-charts-sunburst.mjs.map +1 -1
  72. package/fesm2022/skdx-angular-charts-swarm.mjs +101 -0
  73. package/fesm2022/skdx-angular-charts-swarm.mjs.map +1 -0
  74. package/fesm2022/skdx-angular-charts-timeline.mjs +98 -0
  75. package/fesm2022/skdx-angular-charts-timeline.mjs.map +1 -0
  76. package/fesm2022/skdx-angular-charts-tree.mjs +118 -0
  77. package/fesm2022/skdx-angular-charts-tree.mjs.map +1 -0
  78. package/fesm2022/skdx-angular-charts-treemap.mjs +85 -8
  79. package/fesm2022/skdx-angular-charts-treemap.mjs.map +1 -1
  80. package/fesm2022/skdx-angular-charts-waffle.mjs +113 -0
  81. package/fesm2022/skdx-angular-charts-waffle.mjs.map +1 -0
  82. package/fesm2022/skdx-angular-charts-waterfall.mjs +76 -8
  83. package/fesm2022/skdx-angular-charts-waterfall.mjs.map +1 -1
  84. package/fesm2022/skdx-angular-charts.mjs +23 -0
  85. package/fesm2022/skdx-angular-charts.mjs.map +1 -1
  86. package/package.json +91 -3
  87. package/types/skdx-angular-charts-area.d.ts +1 -1
  88. package/types/skdx-angular-charts-bar.d.ts +5 -13
  89. package/types/skdx-angular-charts-boxplot.d.ts +20 -5
  90. package/types/skdx-angular-charts-bubble.d.ts +27 -0
  91. package/types/skdx-angular-charts-bullet.d.ts +24 -0
  92. package/types/skdx-angular-charts-bump.d.ts +25 -0
  93. package/types/skdx-angular-charts-candlestick.d.ts +15 -4
  94. package/types/skdx-angular-charts-chord.d.ts +13 -6
  95. package/types/skdx-angular-charts-circle-packing.d.ts +23 -0
  96. package/types/skdx-angular-charts-combo.d.ts +12 -0
  97. package/types/skdx-angular-charts-dumbbell.d.ts +26 -0
  98. package/types/skdx-angular-charts-funnel.d.ts +11 -3
  99. package/types/skdx-angular-charts-gantt.d.ts +13 -6
  100. package/types/skdx-angular-charts-gauge.d.ts +36 -0
  101. package/types/skdx-angular-charts-heatmap.d.ts +34 -8
  102. package/types/skdx-angular-charts-histogram.d.ts +34 -0
  103. package/types/skdx-angular-charts-icicle.d.ts +29 -0
  104. package/types/skdx-angular-charts-internal.d.ts +2477 -77
  105. package/types/skdx-angular-charts-line.d.ts +1 -1
  106. package/types/skdx-angular-charts-linear-gauge.d.ts +29 -0
  107. package/types/skdx-angular-charts-map.d.ts +17 -4
  108. package/types/skdx-angular-charts-marimekko.d.ts +21 -0
  109. package/types/skdx-angular-charts-network.d.ts +25 -0
  110. package/types/skdx-angular-charts-organization.d.ts +25 -0
  111. package/types/skdx-angular-charts-parallel.d.ts +25 -0
  112. package/types/skdx-angular-charts-pareto.d.ts +27 -0
  113. package/types/skdx-angular-charts-pie.d.ts +20 -2
  114. package/types/skdx-angular-charts-polar-area.d.ts +28 -0
  115. package/types/skdx-angular-charts-radar.d.ts +24 -4
  116. package/types/skdx-angular-charts-radial.d.ts +34 -0
  117. package/types/skdx-angular-charts-range.d.ts +29 -0
  118. package/types/skdx-angular-charts-sankey.d.ts +22 -4
  119. package/types/skdx-angular-charts-scatter.d.ts +17 -3
  120. package/types/skdx-angular-charts-sparkline.d.ts +19 -5
  121. package/types/skdx-angular-charts-sunburst.d.ts +25 -4
  122. package/types/skdx-angular-charts-swarm.d.ts +19 -0
  123. package/types/skdx-angular-charts-timeline.d.ts +18 -0
  124. package/types/skdx-angular-charts-tree.d.ts +28 -0
  125. package/types/skdx-angular-charts-treemap.d.ts +21 -5
  126. package/types/skdx-angular-charts-waffle.d.ts +25 -0
  127. package/types/skdx-angular-charts-waterfall.d.ts +19 -5
  128. package/types/skdx-angular-charts.d.ts +23 -1
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @skdx/angular-charts
2
2
 
3
- Eighteen SVG charts for angular. Plain SVG colored by `@skdx/tokens`; load
4
- `@skdx/tokens/css` once so the colors resolve.
3
+ Forty SVG charts for Angular. Plain SVG colored by `@skdx/tokens`; load `@skdx/tokens/css` once
4
+ so the colors resolve.
5
5
 
6
6
  ```sh
7
7
  pnpm add @skdx/angular-charts @skdx/tokens
@@ -12,46 +12,109 @@ import { SkdxBarChartComponent } from '@skdx/angular-charts/bar';
12
12
 
13
13
  @Component({
14
14
  imports: [SkdxBarChartComponent],
15
- template: `<skdx-bar-chart [series]="series" [categories]="['Q1', 'Q2', 'Q3']"></skdx-bar-chart>`,
15
+ template: `
16
+ <skdx-bar-chart
17
+ [series]="series"
18
+ [categories]="['Jan', 'Feb', 'Mar']"
19
+ [format]="{ style: 'currency', currency: 'USD', digits: 0 }"
20
+ ></skdx-bar-chart>
21
+ `,
16
22
  })
17
- export class Sales {
18
- series = [{ name: 'Sales', data: [3, 5, 2] }];
23
+ export class Revenue {
24
+ series = [{ name: 'MRR', data: [118_000, 124_500, 131_200] }];
19
25
  }
20
26
  ```
21
27
 
22
- Every chart takes `width`, `height` and `label` (the accessible name). Bar, line, area and radar
23
- take `series` (`{ name, data, color? }[]`) and `categories`; bar also takes `stacked`. Pie and
24
- funnel take `data` (`{ name, value, color? }[]`); pie also takes `innerRadius` (0 to 0.95) for a
25
- donut. Scatter takes `series` of `[x, y]` pairs. Sparkline takes `data` (`number[]`). Heatmap takes
26
- `rows`, `columns` and `data` (`number[][]`).
27
-
28
- Sankey takes `links` (`{ source, target, value }[]`). Treemap takes `data` like pie. Candlestick
29
- takes `data` as `{ label, open, high, low, close }[]`. Waterfall takes signed `data` deltas and an
30
- optional `total` label. Gantt takes `tasks` (`{ name, start, end }[]`) and an optional tick
31
- `format`. Boxplot takes `series` of raw samples. Sunburst takes `data` as a tree of
32
- `{ name, value?, children? }`. Chord takes `names` and a flow `matrix`. Map takes `features`
33
- (`{ name, value, geometry }[]` with GeoJSON Polygon or MultiPolygon geometry) and an optional
34
- `color`.
35
- Each mark carries a native `<title>` tooltip and a `data-skdx-part` attribute for styling.
36
-
37
- Every chart is also a secondary entry point (`@skdx/angular-charts/bar`, `/line`, … `/map`), so
38
- an app bundles only what it imports.
39
-
40
- ## Options
41
-
42
- Every chart takes `legend` (a swatch row above the plot, off by default) and `tooltip` (a hover
43
- tooltip for the mark under the pointer, on by default; the native `<title>` stays regardless).
44
- Charts scale down with their container while keeping their aspect ratio.
45
-
46
- | Chart | Option | Effect |
47
- | --------------------- | ---------------------------- | ---------------------------------------------------------------- |
48
- | line, area, sparkline | `curve: 'monotone'` | Smooth cubic segments that never overshoot the data |
49
- | pie | `labels` | Name and share written on each slice |
50
- | radar | `normalize` | Each series scaled to its own maximum; rings read as percentages |
51
- | heatmap | `diverging`, `negativeColor` | Split around zero, opacity by distance from zero |
52
- | waterfall | `total` | Label for a closing bar showing the running total |
53
- | gantt | `format` | Formats the time ticks, e.g. a timestamp as a date |
54
- | candlestick | `scale: 'log'` | Logarithmic price axis with ticks at powers of ten |
55
- | treemap | nested `children` | Branches outlined, children tiled inside |
56
- | sankey | (always) | Links that would close a cycle are dropped |
57
- | map | `projection: 'mercator'` | Mercator instead of equirectangular |
28
+ Every chart takes `width`, `height`, `label` (the accessible name), `description`, `decorative`,
29
+ `legend`, `tooltip`, `format`, `palette`, `hiddenSeries`, `loading`, `error` and `emptyMessage`.
30
+ Bar, line and area take `series` (`{ name, data, type?, axis?, curve?, dash?, markers?, stack? }[]`,
31
+ or `{ type: 'range', name, low, high }`) and `categories` (strings, numbers or dates). Pie, funnel
32
+ and radial take `data` (`{ name, value, color? }[]`). Scatter takes `series` of `[x, y]` pairs or
33
+ `[x, y, size]` triples. Sparkline takes `data` (`(number | null)[]`). Heatmap takes `rows`, `columns`
34
+ and `data` (`(number | null)[][]`), or `calendar` (`{ date, value }[]`). Radar takes `series` and
35
+ `categories`.
36
+
37
+ Sankey takes `links` (`{ source, target, value }[]`). Treemap and sunburst take `data` as a tree of
38
+ `{ name, value?, children? }`. Candlestick takes `data` as `{ label, open, high, low, close, volume? }[]`.
39
+ Waterfall takes signed `data` deltas and an optional `total` label. Gantt takes `tasks`
40
+ (`{ name, start, end, group? }[]`). Boxplot takes `series` of raw samples. Chord takes `names` and a
41
+ flow `matrix`. Map takes `features` (`{ name, value, geometry }[]` with GeoJSON Polygon or
42
+ MultiPolygon geometry). `null` and `NaN` values are gaps; an empty chart renders "No data available".
43
+
44
+ Gauge takes one `value` with `min`/`max`, `bands` and a `target`. Bullet takes `data`
45
+ (`{ name, value, target?, ranges? }[]`). Histogram takes `data` as a raw sample and bins it.
46
+ Bubble takes `series` of `{ x, y, z, label? }`. Combo takes the cartesian `series` with a required
47
+ `type` per series. Range takes `series` of `{ name, low, high }` and a `variant`. Network takes
48
+ `nodes` (`{ id, label?, value?, group? }[]`) and `edges` (`{ source, target, value? }[]`). Timeline
49
+ takes `events` (`{ date, label, description?, group? }[]`). One reference page per chart is in
50
+ [docs/charts](../../docs/charts/README.md).
51
+
52
+ Every chart also takes `animate` (fade in and transition on change; `true` is 300 ms, a number sets
53
+ the duration, off under `prefers-reduced-motion` and above 1500 shapes) and `responsive` (lay out
54
+ at the container's width so text keeps its size). Cartesian charts take `xAxis.type: 'time' |
55
+ 'linear'` to place numeric or date categories proportionally.
56
+
57
+ Every mark carries a native `<title>` tooltip and a `data-skdx-part` attribute for styling. The
58
+ full option reference, the mixed-series (bar + line + range) cartesian model, references, zoom,
59
+ brush, crosshair, histogram, formatting and the accessibility contract are documented once in the
60
+ [repository README](../../README.md); the decisions behind them in [CHARTS.md](../../CHARTS.md).
61
+
62
+ ## Interaction
63
+
64
+ Every chart is keyboard accessible: it takes focus, arrow keys step through the marks with a focus
65
+ ring and tooltip, Home/End jump, Escape clears and Enter/Space clicks. Clicking a legend entry hides
66
+ its series while colors stay stable. Bar, line, area and candlestick charts also zoom (wheel around
67
+ the pointer, drag to pan, double-click to reset), brush (a range strip under the plot) and snap a
68
+ shared tooltip to the nearest category (`crosshair`). Two fingers pinch-zoom on touch screens.
69
+
70
+ | Capability | Angular spelling |
71
+ | ------------------- | ------------------------------------------------------- |
72
+ | item click | `(itemClick)="onItem($event)"` |
73
+ | legend toggles | uncontrolled by default, or `[(hiddenSeries)]="hidden"` |
74
+ | zoom | `[zoomable]="true"`; `[(zoom)]="zoom"` for control |
75
+ | brush and crosshair | `[brush]="true"`, `[crosshair]="true"` |
76
+ | motion and sizing | `[animate]="true"`, `[responsive]="true"` |
77
+
78
+ ## Example: an observability panel
79
+
80
+ ```ts
81
+ import { Component, signal } from '@angular/core';
82
+
83
+ import type { ChartItem, Zoom } from '@skdx/angular-charts';
84
+ import { SkdxLineChartComponent } from '@skdx/angular-charts/line';
85
+
86
+ @Component({
87
+ imports: [SkdxLineChartComponent],
88
+ template: `
89
+ <skdx-line-chart
90
+ label="p95 latency, last 24 hours"
91
+ [categories]="timestamps"
92
+ [xAxis]="{ format: { style: 'time' } }"
93
+ [format]="{ style: 'integer', unit: ' ms' }"
94
+ [series]="series"
95
+ [rightAxis]="{ format: { style: 'percent' }, max: 0.05 }"
96
+ [references]="[{ y: 300, label: 'SLA', variant: 'warning' }]"
97
+ [crosshair]="true"
98
+ [zoomable]="true"
99
+ [brush]="true"
100
+ [legend]="true"
101
+ [(zoom)]="zoom"
102
+ [(hiddenSeries)]="hidden"
103
+ (itemClick)="onItem($event)"
104
+ ></skdx-line-chart>
105
+ `,
106
+ })
107
+ export class LatencyPanel {
108
+ timestamps = timestamps;
109
+ series = [
110
+ { name: 'p95', data: points.p95 },
111
+ { name: 'p50', data: points.p50, dash: '4 3' },
112
+ { name: 'Error rate', type: 'bar' as const, data: points.errors, axis: 'right' as const },
113
+ ];
114
+ zoom = signal<Zoom | undefined>(undefined);
115
+ hidden = signal<string[] | undefined>(undefined);
116
+ onItem(item: ChartItem) {
117
+ console.log(item.series, item.category, item.value);
118
+ }
119
+ }
120
+ ```
@@ -7,7 +7,7 @@ import { SkdxChartBase, layoutAreaChart, SkdxChartRootComponent } from '@skdx/an
7
7
  * This file is part of the SkandaDX organization.
8
8
  * Licensed under the MIT License. See LICENSE in the repository root.
9
9
  */
10
- /** A line chart with each series filled down to the zero baseline. */
10
+ /** Filled, optionally stacked, areas down to zero; series may also be bars, lines or ranges. */
11
11
  class SkdxAreaChartComponent extends SkdxChartBase {
12
12
  constructor() {
13
13
  super(...arguments);
@@ -18,10 +18,27 @@ class SkdxAreaChartComponent extends SkdxChartBase {
18
18
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: SkdxAreaChartComponent, isStandalone: true, selector: "skdx-area-chart", usesInheritance: true, ngImport: i0, template: `
19
19
  <skdx-chart-root
20
20
  [layout]="layout()"
21
+ [options]="options()"
21
22
  kind="area"
22
23
  [label]="label() ?? 'Area chart'"
24
+ [zoomable]="zoomable()"
25
+ [selectionMode]="selectionMode()"
26
+ [editable]="editable()"
27
+ [syncId]="syncId()"
28
+ [crosshair]="syncedCrosshair()"
29
+ [responsive]="!!responsive()"
30
+ (itemClick)="itemClick.emit($event)"
31
+ (dataIssue)="dataIssue.emit($event)"
32
+ (taskChange)="taskChange.emit($event)"
33
+ (hiddenSeriesChange)="toggle($event)"
34
+ (zoomChange)="zoom.set($event)"
35
+ (viewChange)="view.set($event)"
36
+ (selectedChange)="selected.set($event)"
37
+ (highlightedChange)="highlighted.set($event)"
38
+ (syncChange)="sync($event)"
39
+ (measured)="measuredWidth.set($event)"
23
40
  ></skdx-chart-root>
24
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "options", "kind", "label", "zoomable", "selectionMode", "editable", "syncId", "crosshair", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "viewChange", "selectedChange", "highlightedChange", "dataIssue", "taskChange", "syncChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25
42
  }
26
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxAreaChartComponent, decorators: [{
27
44
  type: Component,
@@ -33,8 +50,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
33
50
  template: `
34
51
  <skdx-chart-root
35
52
  [layout]="layout()"
53
+ [options]="options()"
36
54
  kind="area"
37
55
  [label]="label() ?? 'Area chart'"
56
+ [zoomable]="zoomable()"
57
+ [selectionMode]="selectionMode()"
58
+ [editable]="editable()"
59
+ [syncId]="syncId()"
60
+ [crosshair]="syncedCrosshair()"
61
+ [responsive]="!!responsive()"
62
+ (itemClick)="itemClick.emit($event)"
63
+ (dataIssue)="dataIssue.emit($event)"
64
+ (taskChange)="taskChange.emit($event)"
65
+ (hiddenSeriesChange)="toggle($event)"
66
+ (zoomChange)="zoom.set($event)"
67
+ (viewChange)="view.set($event)"
68
+ (selectedChange)="selected.set($event)"
69
+ (highlightedChange)="highlighted.set($event)"
70
+ (syncChange)="sync($event)"
71
+ (measured)="measuredWidth.set($event)"
38
72
  ></skdx-chart-root>
39
73
  `,
40
74
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-area.mjs","sources":["../../src/area/index.ts","../../src/area/skdx-angular-charts-area.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport {\n layoutAreaChart,\n SkdxChartBase,\n SkdxChartRootComponent,\n} from '@skdx/angular-charts/internal';\n\n/** A line chart with each series filled down to the zero baseline. */\n@Component({\n selector: 'skdx-area-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"area\"\n [label]=\"label() ?? 'Area chart'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxAreaChartComponent extends SkdxChartBase {\n protected readonly layout = computed(() => layoutAreaChart(this.input()));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAUH;AAcM,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AAbzD,IAAA,WAAA,GAAA;;AAcqB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;mFAAC;AAC1E,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARvB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;AC3BD;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-area.mjs","sources":["../../src/area/index.ts","../../src/area/skdx-angular-charts-area.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport {\n layoutAreaChart,\n SkdxChartBase,\n SkdxChartRootComponent,\n} from '@skdx/angular-charts/internal';\n\n/** Filled, optionally stacked, areas down to zero; series may also be bars, lines or ranges. */\n@Component({\n selector: 'skdx-area-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n [options]=\"options()\"\n kind=\"area\"\n [label]=\"label() ?? 'Area chart'\"\n [zoomable]=\"zoomable()\"\n [selectionMode]=\"selectionMode()\"\n [editable]=\"editable()\"\n [syncId]=\"syncId()\"\n [crosshair]=\"syncedCrosshair()\"\n [responsive]=\"!!responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (dataIssue)=\"dataIssue.emit($event)\"\n (taskChange)=\"taskChange.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (viewChange)=\"view.set($event)\"\n (selectedChange)=\"selected.set($event)\"\n (highlightedChange)=\"highlighted.set($event)\"\n (syncChange)=\"sync($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxAreaChartComponent extends SkdxChartBase {\n protected readonly layout = computed(() => layoutAreaChart(this.input()));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAUH;AA+BM,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AA9BzD,IAAA,WAAA,GAAA;;AA+BqB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;mFAAC;AAC1E,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBvB;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxBS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0BrB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA9BlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA;AACF,iBAAA;;;AC5CD;;AAEG;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { SkdxChartBase, layoutBarChart, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
4
4
 
5
5
  /*
@@ -7,30 +7,38 @@ import { SkdxChartBase, layoutBarChart, SkdxChartRootComponent } from '@skdx/ang
7
7
  * This file is part of the SkandaDX organization.
8
8
  * Licensed under the MIT License. See LICENSE in the repository root.
9
9
  */
10
- /**
11
- * Grouped or stacked vertical bars, one per value.
12
- *
13
- * ```html
14
- * <skdx-bar-chart [series]="[{ name: 'Sales', data: [3, 5, 2] }]" [categories]="['Q1', 'Q2', 'Q3']"></skdx-bar-chart>
15
- * ```
16
- */
10
+ /** Grouped, stacked, horizontal or histogram bars; series may also be lines, areas or ranges. */
17
11
  class SkdxBarChartComponent extends SkdxChartBase {
18
12
  constructor() {
19
13
  super(...arguments);
20
- /** Stack series on top of each other instead of grouping them side by side. */
21
- this.stacked = input(false, /* @ts-ignore */
22
- ...(ngDevMode ? [{ debugName: "stacked" }] : /* istanbul ignore next */ []));
23
- this.layout = computed(() => layoutBarChart({ ...this.input(), stacked: this.stacked() }), /* @ts-ignore */
14
+ this.layout = computed(() => layoutBarChart(this.input()), /* @ts-ignore */
24
15
  ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
25
16
  }
26
17
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBarChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxBarChartComponent, isStandalone: true, selector: "skdx-bar-chart", inputs: { stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: SkdxBarChartComponent, isStandalone: true, selector: "skdx-bar-chart", usesInheritance: true, ngImport: i0, template: `
28
19
  <skdx-chart-root
29
20
  [layout]="layout()"
21
+ [options]="options()"
30
22
  kind="bar"
31
23
  [label]="label() ?? 'Bar chart'"
24
+ [zoomable]="zoomable()"
25
+ [selectionMode]="selectionMode()"
26
+ [editable]="editable()"
27
+ [syncId]="syncId()"
28
+ [crosshair]="syncedCrosshair()"
29
+ [responsive]="!!responsive()"
30
+ (itemClick)="itemClick.emit($event)"
31
+ (dataIssue)="dataIssue.emit($event)"
32
+ (taskChange)="taskChange.emit($event)"
33
+ (hiddenSeriesChange)="toggle($event)"
34
+ (zoomChange)="zoom.set($event)"
35
+ (viewChange)="view.set($event)"
36
+ (selectedChange)="selected.set($event)"
37
+ (highlightedChange)="highlighted.set($event)"
38
+ (syncChange)="sync($event)"
39
+ (measured)="measuredWidth.set($event)"
32
40
  ></skdx-chart-root>
33
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "options", "kind", "label", "zoomable", "selectionMode", "editable", "syncId", "crosshair", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "viewChange", "selectedChange", "highlightedChange", "dataIssue", "taskChange", "syncChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
42
  }
35
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBarChartComponent, decorators: [{
36
44
  type: Component,
@@ -42,12 +50,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
42
50
  template: `
43
51
  <skdx-chart-root
44
52
  [layout]="layout()"
53
+ [options]="options()"
45
54
  kind="bar"
46
55
  [label]="label() ?? 'Bar chart'"
56
+ [zoomable]="zoomable()"
57
+ [selectionMode]="selectionMode()"
58
+ [editable]="editable()"
59
+ [syncId]="syncId()"
60
+ [crosshair]="syncedCrosshair()"
61
+ [responsive]="!!responsive()"
62
+ (itemClick)="itemClick.emit($event)"
63
+ (dataIssue)="dataIssue.emit($event)"
64
+ (taskChange)="taskChange.emit($event)"
65
+ (hiddenSeriesChange)="toggle($event)"
66
+ (zoomChange)="zoom.set($event)"
67
+ (viewChange)="view.set($event)"
68
+ (selectedChange)="selected.set($event)"
69
+ (highlightedChange)="highlighted.set($event)"
70
+ (syncChange)="sync($event)"
71
+ (measured)="measuredWidth.set($event)"
47
72
  ></skdx-chart-root>
48
73
  `,
49
74
  }]
50
- }], propDecorators: { stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }] } });
75
+ }] });
51
76
 
52
77
  /**
53
78
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-bar.mjs","sources":["../../src/bar/index.ts","../../src/bar/skdx-angular-charts-bar.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n layoutBarChart,\n SkdxChartBase,\n SkdxChartRootComponent,\n} from '@skdx/angular-charts/internal';\n\n/**\n * Grouped or stacked vertical bars, one per value.\n *\n * ```html\n * <skdx-bar-chart [series]=\"[{ name: 'Sales', data: [3, 5, 2] }]\" [categories]=\"['Q1', 'Q2', 'Q3']\"></skdx-bar-chart>\n * ```\n */\n@Component({\n selector: 'skdx-bar-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"bar\"\n [label]=\"label() ?? 'Bar chart'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxBarChartComponent extends SkdxChartBase {\n /** Stack series on top of each other instead of grouping them side by side. */\n readonly stacked = input(false);\n\n protected readonly layout = computed(() =>\n layoutBarChart({ ...this.input(), stacked: this.stacked() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAUH;;;;;;AAMG;AAcG,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AAbxD,IAAA,WAAA,GAAA;;;QAeW,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,KAAK;oFAAC;QAEZ,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;mFAC7D;AACF,IAAA;8GAPY,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARtB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;ACjCD;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-bar.mjs","sources":["../../src/bar/index.ts","../../src/bar/skdx-angular-charts-bar.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport {\n layoutBarChart,\n SkdxChartBase,\n SkdxChartRootComponent,\n} from '@skdx/angular-charts/internal';\n\n/** Grouped, stacked, horizontal or histogram bars; series may also be lines, areas or ranges. */\n@Component({\n selector: 'skdx-bar-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n [options]=\"options()\"\n kind=\"bar\"\n [label]=\"label() ?? 'Bar chart'\"\n [zoomable]=\"zoomable()\"\n [selectionMode]=\"selectionMode()\"\n [editable]=\"editable()\"\n [syncId]=\"syncId()\"\n [crosshair]=\"syncedCrosshair()\"\n [responsive]=\"!!responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (dataIssue)=\"dataIssue.emit($event)\"\n (taskChange)=\"taskChange.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (viewChange)=\"view.set($event)\"\n (selectedChange)=\"selected.set($event)\"\n (highlightedChange)=\"highlighted.set($event)\"\n (syncChange)=\"sync($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxBarChartComponent extends SkdxChartBase {\n protected readonly layout = computed(() => layoutBarChart(this.input()));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAUH;AA+BM,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AA9BxD,IAAA,WAAA,GAAA;;AA+BqB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;mFAAC;AACzE,IAAA;8GAFY,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBtB;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxBS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FA0BrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA9BjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA;AACF,iBAAA;;;AC5CD;;AAEG;;"}
@@ -7,23 +7,74 @@ import { SkdxSizedBase, layoutBoxplot, SkdxChartRootComponent } from '@skdx/angu
7
7
  * This file is part of the SkandaDX organization.
8
8
  * Licensed under the MIT License. See LICENSE in the repository root.
9
9
  */
10
- /** Quartile boxes with Tukey whiskers and outliers, one per series. */
10
+ /** One Tukey box per series over its raw samples. */
11
11
  class SkdxBoxplotComponent extends SkdxSizedBase {
12
12
  constructor() {
13
13
  super(...arguments);
14
+ /** Raw samples, or precomputed summaries. */
14
15
  this.series = input.required(/* @ts-ignore */
15
16
  ...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
16
- this.l = computed(() => layoutBoxplot({ ...this.sized(), series: this.series() }), /* @ts-ignore */
17
- ...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
17
+ this.orientation = input(/* @ts-ignore */
18
+ ...(ngDevMode ? [undefined, { debugName: "orientation" }] : /* istanbul ignore next */ []));
19
+ /** How quartiles are taken from a sample. */
20
+ this.quartileMethod = input(/* @ts-ignore */
21
+ ...(ngDevMode ? [undefined, { debugName: "quartileMethod" }] : /* istanbul ignore next */ []));
22
+ /** Whisker reach as a multiple of the IQR. */
23
+ this.whisker = input(/* @ts-ignore */
24
+ ...(ngDevMode ? [undefined, { debugName: "whisker" }] : /* istanbul ignore next */ []));
25
+ /** Mark the mean with a diamond. */
26
+ this.mean = input(false, /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "mean" }] : /* istanbul ignore next */ []));
28
+ /** Draw every observation, jittered. */
29
+ this.points = input(false, /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "points" }] : /* istanbul ignore next */ []));
31
+ /** Notch the box around the median. */
32
+ this.notched = input(false, /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "notched" }] : /* istanbul ignore next */ []));
34
+ /** Groups: one box per series inside each category. */
35
+ this.categories = input(/* @ts-ignore */
36
+ ...(ngDevMode ? [undefined, { debugName: "categories" }] : /* istanbul ignore next */ []));
37
+ this.yAxis = input(/* @ts-ignore */
38
+ ...(ngDevMode ? [undefined, { debugName: "yAxis" }] : /* istanbul ignore next */ []));
39
+ this.layout = computed(() => layoutBoxplot({
40
+ ...this.sized(),
41
+ series: this.series(),
42
+ orientation: this.orientation(),
43
+ quartileMethod: this.quartileMethod(),
44
+ whisker: this.whisker(),
45
+ mean: this.mean(),
46
+ points: this.points(),
47
+ notched: this.notched(),
48
+ categories: this.categories(),
49
+ yAxis: this.yAxis(),
50
+ }), /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
18
52
  }
19
53
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBoxplotComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxBoxplotComponent, isStandalone: true, selector: "skdx-boxplot", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxBoxplotComponent, isStandalone: true, selector: "skdx-boxplot", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, quartileMethod: { classPropertyName: "quartileMethod", publicName: "quartileMethod", isSignal: true, isRequired: false, transformFunction: null }, whisker: { classPropertyName: "whisker", publicName: "whisker", isSignal: true, isRequired: false, transformFunction: null }, mean: { classPropertyName: "mean", publicName: "mean", isSignal: true, isRequired: false, transformFunction: null }, points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: false, transformFunction: null }, notched: { classPropertyName: "notched", publicName: "notched", isSignal: true, isRequired: false, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, yAxis: { classPropertyName: "yAxis", publicName: "yAxis", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
21
55
  <skdx-chart-root
22
- [layout]="l()"
56
+ [layout]="layout()"
57
+ [options]="options()"
23
58
  kind="boxplot"
24
59
  [label]="label() ?? 'Box plot'"
60
+ [zoomable]="zoomable()"
61
+ [selectionMode]="selectionMode()"
62
+ [editable]="editable()"
63
+ [syncId]="syncId()"
64
+ [crosshair]="syncedCrosshair()"
65
+ [responsive]="!!responsive()"
66
+ (itemClick)="itemClick.emit($event)"
67
+ (dataIssue)="dataIssue.emit($event)"
68
+ (taskChange)="taskChange.emit($event)"
69
+ (hiddenSeriesChange)="toggle($event)"
70
+ (zoomChange)="zoom.set($event)"
71
+ (viewChange)="view.set($event)"
72
+ (selectedChange)="selected.set($event)"
73
+ (highlightedChange)="highlighted.set($event)"
74
+ (syncChange)="sync($event)"
75
+ (measured)="measuredWidth.set($event)"
25
76
  ></skdx-chart-root>
26
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "options", "kind", "label", "zoomable", "selectionMode", "editable", "syncId", "crosshair", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "viewChange", "selectedChange", "highlightedChange", "dataIssue", "taskChange", "syncChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
78
  }
28
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBoxplotComponent, decorators: [{
29
80
  type: Component,
@@ -34,13 +85,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
34
85
  imports: [SkdxChartRootComponent],
35
86
  template: `
36
87
  <skdx-chart-root
37
- [layout]="l()"
88
+ [layout]="layout()"
89
+ [options]="options()"
38
90
  kind="boxplot"
39
91
  [label]="label() ?? 'Box plot'"
92
+ [zoomable]="zoomable()"
93
+ [selectionMode]="selectionMode()"
94
+ [editable]="editable()"
95
+ [syncId]="syncId()"
96
+ [crosshair]="syncedCrosshair()"
97
+ [responsive]="!!responsive()"
98
+ (itemClick)="itemClick.emit($event)"
99
+ (dataIssue)="dataIssue.emit($event)"
100
+ (taskChange)="taskChange.emit($event)"
101
+ (hiddenSeriesChange)="toggle($event)"
102
+ (zoomChange)="zoom.set($event)"
103
+ (viewChange)="view.set($event)"
104
+ (selectedChange)="selected.set($event)"
105
+ (highlightedChange)="highlighted.set($event)"
106
+ (syncChange)="sync($event)"
107
+ (measured)="measuredWidth.set($event)"
40
108
  ></skdx-chart-root>
41
109
  `,
42
110
  }]
43
- }], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }] } });
111
+ }], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], quartileMethod: [{ type: i0.Input, args: [{ isSignal: true, alias: "quartileMethod", required: false }] }], whisker: [{ type: i0.Input, args: [{ isSignal: true, alias: "whisker", required: false }] }], mean: [{ type: i0.Input, args: [{ isSignal: true, alias: "mean", required: false }] }], points: [{ type: i0.Input, args: [{ isSignal: true, alias: "points", required: false }] }], notched: [{ type: i0.Input, args: [{ isSignal: true, alias: "notched", required: false }] }], categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], yAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxis", required: false }] }] } });
44
112
 
45
113
  /**
46
114
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-boxplot.mjs","sources":["../../src/boxplot/index.ts","../../src/boxplot/skdx-angular-charts-boxplot.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n layoutBoxplot,\n type Series,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** Quartile boxes with Tukey whiskers and outliers, one per series. */\n@Component({\n selector: 'skdx-boxplot',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"l()\"\n kind=\"boxplot\"\n [label]=\"label() ?? 'Box plot'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxBoxplotComponent extends SkdxSizedBase {\n readonly series = input.required<Series[]>();\n\n protected readonly l = computed(() => layoutBoxplot({ ...this.sized(), series: this.series() }));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAcM,MAAO,oBAAqB,SAAQ,aAAa,CAAA;AAbvD,IAAA,WAAA,GAAA;;QAcW,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ;mFAAY;QAEzB,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;8EAAC;AACjG,IAAA;8GAJY,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARrB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;AC5BD;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-boxplot.mjs","sources":["../../src/boxplot/index.ts","../../src/boxplot/skdx-angular-charts-boxplot.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n layoutBoxplot,\n SkdxChartRootComponent,\n SkdxSizedBase,\n type AxisOptions,\n type BoxplotSeries,\n} from '@skdx/angular-charts/internal';\n\n/** One Tukey box per series over its raw samples. */\n@Component({\n selector: 'skdx-boxplot',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n [options]=\"options()\"\n kind=\"boxplot\"\n [label]=\"label() ?? 'Box plot'\"\n [zoomable]=\"zoomable()\"\n [selectionMode]=\"selectionMode()\"\n [editable]=\"editable()\"\n [syncId]=\"syncId()\"\n [crosshair]=\"syncedCrosshair()\"\n [responsive]=\"!!responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (dataIssue)=\"dataIssue.emit($event)\"\n (taskChange)=\"taskChange.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (viewChange)=\"view.set($event)\"\n (selectedChange)=\"selected.set($event)\"\n (highlightedChange)=\"highlighted.set($event)\"\n (syncChange)=\"sync($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxBoxplotComponent extends SkdxSizedBase {\n /** Raw samples, or precomputed summaries. */\n readonly series = input.required<BoxplotSeries[]>();\n readonly orientation = input<'vertical' | 'horizontal'>();\n /** How quartiles are taken from a sample. */\n readonly quartileMethod = input<'linear' | 'exclusive' | 'tukey'>();\n /** Whisker reach as a multiple of the IQR. */\n readonly whisker = input<number>();\n /** Mark the mean with a diamond. */\n readonly mean = input(false);\n /** Draw every observation, jittered. */\n readonly points = input(false);\n /** Notch the box around the median. */\n readonly notched = input(false);\n /** Groups: one box per series inside each category. */\n readonly categories = input<string[]>();\n readonly yAxis = input<AxisOptions>();\n\n protected readonly layout = computed(() =>\n layoutBoxplot({\n ...this.sized(),\n series: this.series(),\n orientation: this.orientation(),\n quartileMethod: this.quartileMethod(),\n whisker: this.whisker(),\n mean: this.mean(),\n points: this.points(),\n notched: this.notched(),\n categories: this.categories(),\n yAxis: this.yAxis(),\n }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { SkdxSizedBase, layoutBubbleChart, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
4
+
5
+ /*
6
+ * Copyright (c) 2026 SkandaDX
7
+ * This file is part of the SkandaDX organization.
8
+ * Licensed under the MIT License. See LICENSE in the repository root.
9
+ */
10
+ /** Three quantities per mark: x, y and a magnitude the bubble's area follows. */
11
+ class SkdxBubbleChartComponent extends SkdxSizedBase {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.series = input.required(/* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
16
+ /** Smallest and largest bubble radius in pixels. */
17
+ this.sizeRange = input(/* @ts-ignore */
18
+ ...(ngDevMode ? [undefined, { debugName: "sizeRange" }] : /* istanbul ignore next */ []));
19
+ /** Write each bubble's label on it. */
20
+ this.labels = input(false, /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
22
+ this.xAxis = input(/* @ts-ignore */
23
+ ...(ngDevMode ? [undefined, { debugName: "xAxis" }] : /* istanbul ignore next */ []));
24
+ this.yAxis = input(/* @ts-ignore */
25
+ ...(ngDevMode ? [undefined, { debugName: "yAxis" }] : /* istanbul ignore next */ []));
26
+ /** How the magnitude is named and written. */
27
+ this.zAxis = input(/* @ts-ignore */
28
+ ...(ngDevMode ? [undefined, { debugName: "zAxis" }] : /* istanbul ignore next */ []));
29
+ this.references = input(/* @ts-ignore */
30
+ ...(ngDevMode ? [undefined, { debugName: "references" }] : /* istanbul ignore next */ []));
31
+ this.annotations = input(/* @ts-ignore */
32
+ ...(ngDevMode ? [undefined, { debugName: "annotations" }] : /* istanbul ignore next */ []));
33
+ /** Colors bubbles by their `value` (or `z`). */
34
+ this.colorScale = input(/* @ts-ignore */
35
+ ...(ngDevMode ? [undefined, { debugName: "colorScale" }] : /* istanbul ignore next */ []));
36
+ /** Draw the color scale under the plot. */
37
+ this.colorLegend = input(false, /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "colorLegend" }] : /* istanbul ignore next */ []));
39
+ this.layout = computed(() => layoutBubbleChart({
40
+ ...this.sized(),
41
+ series: this.series(),
42
+ sizeRange: this.sizeRange(),
43
+ labels: this.labels(),
44
+ xAxis: this.xAxis(),
45
+ yAxis: this.yAxis(),
46
+ zAxis: this.zAxis(),
47
+ references: this.references(),
48
+ annotations: this.annotations(),
49
+ colorScale: this.colorScale(),
50
+ colorLegend: this.colorLegend(),
51
+ }), /* @ts-ignore */
52
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBubbleChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxBubbleChartComponent, isStandalone: true, selector: "skdx-bubble-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, sizeRange: { classPropertyName: "sizeRange", publicName: "sizeRange", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, xAxis: { classPropertyName: "xAxis", publicName: "xAxis", isSignal: true, isRequired: false, transformFunction: null }, yAxis: { classPropertyName: "yAxis", publicName: "yAxis", isSignal: true, isRequired: false, transformFunction: null }, zAxis: { classPropertyName: "zAxis", publicName: "zAxis", isSignal: true, isRequired: false, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: true, isRequired: false, transformFunction: null }, annotations: { classPropertyName: "annotations", publicName: "annotations", isSignal: true, isRequired: false, transformFunction: null }, colorScale: { classPropertyName: "colorScale", publicName: "colorScale", isSignal: true, isRequired: false, transformFunction: null }, colorLegend: { classPropertyName: "colorLegend", publicName: "colorLegend", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
56
+ <skdx-chart-root
57
+ [layout]="layout()"
58
+ [options]="options()"
59
+ kind="bubble"
60
+ [label]="label() ?? 'Bubble chart'"
61
+ [zoomable]="zoomable()"
62
+ [selectionMode]="selectionMode()"
63
+ [editable]="editable()"
64
+ [syncId]="syncId()"
65
+ [crosshair]="syncedCrosshair()"
66
+ [responsive]="!!responsive()"
67
+ (itemClick)="itemClick.emit($event)"
68
+ (dataIssue)="dataIssue.emit($event)"
69
+ (taskChange)="taskChange.emit($event)"
70
+ (hiddenSeriesChange)="toggle($event)"
71
+ (zoomChange)="zoom.set($event)"
72
+ (viewChange)="view.set($event)"
73
+ (selectedChange)="selected.set($event)"
74
+ (highlightedChange)="highlighted.set($event)"
75
+ (syncChange)="sync($event)"
76
+ (measured)="measuredWidth.set($event)"
77
+ ></skdx-chart-root>
78
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "options", "kind", "label", "zoomable", "selectionMode", "editable", "syncId", "crosshair", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "viewChange", "selectedChange", "highlightedChange", "dataIssue", "taskChange", "syncChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxBubbleChartComponent, decorators: [{
81
+ type: Component,
82
+ args: [{
83
+ selector: 'skdx-bubble-chart',
84
+ standalone: true,
85
+ changeDetection: ChangeDetectionStrategy.OnPush,
86
+ imports: [SkdxChartRootComponent],
87
+ template: `
88
+ <skdx-chart-root
89
+ [layout]="layout()"
90
+ [options]="options()"
91
+ kind="bubble"
92
+ [label]="label() ?? 'Bubble chart'"
93
+ [zoomable]="zoomable()"
94
+ [selectionMode]="selectionMode()"
95
+ [editable]="editable()"
96
+ [syncId]="syncId()"
97
+ [crosshair]="syncedCrosshair()"
98
+ [responsive]="!!responsive()"
99
+ (itemClick)="itemClick.emit($event)"
100
+ (dataIssue)="dataIssue.emit($event)"
101
+ (taskChange)="taskChange.emit($event)"
102
+ (hiddenSeriesChange)="toggle($event)"
103
+ (zoomChange)="zoom.set($event)"
104
+ (viewChange)="view.set($event)"
105
+ (selectedChange)="selected.set($event)"
106
+ (highlightedChange)="highlighted.set($event)"
107
+ (syncChange)="sync($event)"
108
+ (measured)="measuredWidth.set($event)"
109
+ ></skdx-chart-root>
110
+ `,
111
+ }]
112
+ }], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], sizeRange: [{ type: i0.Input, args: [{ isSignal: true, alias: "sizeRange", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], xAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "xAxis", required: false }] }], yAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "yAxis", required: false }] }], zAxis: [{ type: i0.Input, args: [{ isSignal: true, alias: "zAxis", required: false }] }], references: [{ type: i0.Input, args: [{ isSignal: true, alias: "references", required: false }] }], annotations: [{ type: i0.Input, args: [{ isSignal: true, alias: "annotations", required: false }] }], colorScale: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorScale", required: false }] }], colorLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "colorLegend", required: false }] }] } });
113
+
114
+ /**
115
+ * Generated bundle index. Do not edit.
116
+ */
117
+
118
+ export { SkdxBubbleChartComponent };
119
+ //# sourceMappingURL=skdx-angular-charts-bubble.mjs.map