@skdx/angular-charts 0.32.0 → 0.34.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.
Files changed (65) hide show
  1. package/README.md +96 -41
  2. package/fesm2022/skdx-angular-charts-area.mjs +27 -33
  3. package/fesm2022/skdx-angular-charts-area.mjs.map +1 -1
  4. package/fesm2022/skdx-angular-charts-bar.mjs +30 -51
  5. package/fesm2022/skdx-angular-charts-bar.mjs.map +1 -1
  6. package/fesm2022/skdx-angular-charts-boxplot.mjs +26 -14
  7. package/fesm2022/skdx-angular-charts-boxplot.mjs.map +1 -1
  8. package/fesm2022/skdx-angular-charts-candlestick.mjs +49 -16
  9. package/fesm2022/skdx-angular-charts-candlestick.mjs.map +1 -1
  10. package/fesm2022/skdx-angular-charts-chord.mjs +26 -14
  11. package/fesm2022/skdx-angular-charts-chord.mjs.map +1 -1
  12. package/fesm2022/skdx-angular-charts-funnel.mjs +37 -48
  13. package/fesm2022/skdx-angular-charts-funnel.mjs.map +1 -1
  14. package/fesm2022/skdx-angular-charts-gantt.mjs +31 -19
  15. package/fesm2022/skdx-angular-charts-gantt.mjs.map +1 -1
  16. package/fesm2022/skdx-angular-charts-heatmap.mjs +54 -81
  17. package/fesm2022/skdx-angular-charts-heatmap.mjs.map +1 -1
  18. package/fesm2022/skdx-angular-charts-internal.mjs +2746 -707
  19. package/fesm2022/skdx-angular-charts-internal.mjs.map +1 -1
  20. package/fesm2022/skdx-angular-charts-line.mjs +26 -16
  21. package/fesm2022/skdx-angular-charts-line.mjs.map +1 -1
  22. package/fesm2022/skdx-angular-charts-map.mjs +35 -14
  23. package/fesm2022/skdx-angular-charts-map.mjs.map +1 -1
  24. package/fesm2022/skdx-angular-charts-pie.mjs +47 -25
  25. package/fesm2022/skdx-angular-charts-pie.mjs.map +1 -1
  26. package/fesm2022/skdx-angular-charts-radar.mjs +45 -81
  27. package/fesm2022/skdx-angular-charts-radar.mjs.map +1 -1
  28. package/fesm2022/skdx-angular-charts-radial.mjs +108 -0
  29. package/fesm2022/skdx-angular-charts-radial.mjs.map +1 -0
  30. package/fesm2022/skdx-angular-charts-sankey.mjs +26 -14
  31. package/fesm2022/skdx-angular-charts-sankey.mjs.map +1 -1
  32. package/fesm2022/skdx-angular-charts-scatter.mjs +49 -19
  33. package/fesm2022/skdx-angular-charts-scatter.mjs.map +1 -1
  34. package/fesm2022/skdx-angular-charts-sparkline.mjs +50 -60
  35. package/fesm2022/skdx-angular-charts-sparkline.mjs.map +1 -1
  36. package/fesm2022/skdx-angular-charts-sunburst.mjs +26 -14
  37. package/fesm2022/skdx-angular-charts-sunburst.mjs.map +1 -1
  38. package/fesm2022/skdx-angular-charts-treemap.mjs +26 -14
  39. package/fesm2022/skdx-angular-charts-treemap.mjs.map +1 -1
  40. package/fesm2022/skdx-angular-charts-waterfall.mjs +26 -14
  41. package/fesm2022/skdx-angular-charts-waterfall.mjs.map +1 -1
  42. package/fesm2022/skdx-angular-charts.mjs +2 -0
  43. package/fesm2022/skdx-angular-charts.mjs.map +1 -1
  44. package/package.json +7 -12
  45. package/types/skdx-angular-charts-area.d.ts +2 -2
  46. package/types/skdx-angular-charts-bar.d.ts +5 -13
  47. package/types/skdx-angular-charts-boxplot.d.ts +2 -2
  48. package/types/skdx-angular-charts-candlestick.d.ts +10 -4
  49. package/types/skdx-angular-charts-chord.d.ts +2 -2
  50. package/types/skdx-angular-charts-funnel.d.ts +5 -3
  51. package/types/skdx-angular-charts-gantt.d.ts +6 -6
  52. package/types/skdx-angular-charts-heatmap.d.ts +16 -15
  53. package/types/skdx-angular-charts-internal.d.ts +595 -232
  54. package/types/skdx-angular-charts-line.d.ts +2 -2
  55. package/types/skdx-angular-charts-map.d.ts +4 -3
  56. package/types/skdx-angular-charts-pie.d.ts +11 -3
  57. package/types/skdx-angular-charts-radar.d.ts +8 -10
  58. package/types/skdx-angular-charts-radial.d.ts +34 -0
  59. package/types/skdx-angular-charts-sankey.d.ts +2 -2
  60. package/types/skdx-angular-charts-scatter.d.ts +11 -4
  61. package/types/skdx-angular-charts-sparkline.d.ts +13 -5
  62. package/types/skdx-angular-charts-sunburst.d.ts +2 -2
  63. package/types/skdx-angular-charts-treemap.d.ts +4 -4
  64. package/types/skdx-angular-charts-waterfall.d.ts +2 -2
  65. package/types/skdx-angular-charts.d.ts +2 -1
@@ -7,7 +7,7 @@ import { SkdxSizedBase, layoutChord, SkdxChartRootComponent } from '@skdx/angula
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
- /** Ribbons between groups sized by the flow matrix. */
10
+ /** Groups around a circle with ribbons for the flows between them. */
11
11
  class SkdxChordChartComponent extends SkdxSizedBase {
12
12
  constructor() {
13
13
  super(...arguments);
@@ -16,14 +16,23 @@ class SkdxChordChartComponent extends SkdxSizedBase {
16
16
  /** `matrix[i][j]` is the flow from `i` to `j`. */
17
17
  this.matrix = input.required(/* @ts-ignore */
18
18
  ...(ngDevMode ? [{ debugName: "matrix" }] : /* istanbul ignore next */ []));
19
- this.l = computed(() => layoutChord({ ...this.sized(), names: this.names(), matrix: this.matrix() }), /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
19
+ this.layout = computed(() => layoutChord({ ...this.sized(), names: this.names(), matrix: this.matrix() }), /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxChordChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23
23
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxChordChartComponent, isStandalone: true, selector: "skdx-chord-chart", inputs: { names: { classPropertyName: "names", publicName: "names", isSignal: true, isRequired: true, transformFunction: null }, matrix: { classPropertyName: "matrix", publicName: "matrix", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
24
- <skdx-chart-root [layout]="l()" kind="chord" [label]="label() ?? 'Chord chart'">
25
- </skdx-chart-root>
26
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
+ <skdx-chart-root
25
+ [layout]="layout()"
26
+ kind="chord"
27
+ [label]="label() ?? 'Chord chart'"
28
+ [zoomable]="zoomable()"
29
+ [responsive]="responsive()"
30
+ (itemClick)="itemClick.emit($event)"
31
+ (hiddenSeriesChange)="toggle($event)"
32
+ (zoomChange)="zoom.set($event)"
33
+ (measured)="measuredWidth.set($event)"
34
+ ></skdx-chart-root>
35
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label", "zoomable", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
36
  }
28
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxChordChartComponent, decorators: [{
29
38
  type: Component,
@@ -33,18 +42,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
33
42
  changeDetection: ChangeDetectionStrategy.OnPush,
34
43
  imports: [SkdxChartRootComponent],
35
44
  template: `
36
- <skdx-chart-root [layout]="l()" kind="chord" [label]="label() ?? 'Chord chart'">
37
- </skdx-chart-root>
45
+ <skdx-chart-root
46
+ [layout]="layout()"
47
+ kind="chord"
48
+ [label]="label() ?? 'Chord chart'"
49
+ [zoomable]="zoomable()"
50
+ [responsive]="responsive()"
51
+ (itemClick)="itemClick.emit($event)"
52
+ (hiddenSeriesChange)="toggle($event)"
53
+ (zoomChange)="zoom.set($event)"
54
+ (measured)="measuredWidth.set($event)"
55
+ ></skdx-chart-root>
38
56
  `,
39
57
  }]
40
58
  }], propDecorators: { names: [{ type: i0.Input, args: [{ isSignal: true, alias: "names", required: true }] }], matrix: [{ type: i0.Input, args: [{ isSignal: true, alias: "matrix", required: true }] }] } });
41
59
 
42
- /*
43
- * Copyright (c) 2026 SkandaDX
44
- * This file is part of the SkandaDX organization.
45
- * Licensed under the MIT License. See LICENSE in the repository root.
46
- */
47
-
48
60
  /**
49
61
  * Generated bundle index. Do not edit.
50
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-chord.mjs","sources":["../../src/chord/chord-chart.component.ts","../../src/chord/index.ts","../../src/chord/skdx-angular-charts-chord.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 { layoutChord, SkdxChartRootComponent, SkdxSizedBase } from '@skdx/angular-charts/internal';\n\n/** Ribbons between groups sized by the flow matrix. */\n@Component({\n selector: 'skdx-chord-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root [layout]=\"l()\" kind=\"chord\" [label]=\"label() ?? 'Chord chart'\">\n </skdx-chart-root>\n `,\n})\nexport class SkdxChordChartComponent extends SkdxSizedBase {\n readonly names = input.required<string[]>();\n /** `matrix[i][j]` is the flow from `i` to `j`. */\n readonly matrix = input.required<number[][]>();\n\n protected readonly l = computed(() =>\n layoutChord({ ...this.sized(), names: this.names(), matrix: this.matrix() }),\n );\n}\n","/*\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\nexport { SkdxChordChartComponent } from './chord-chart.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAMH;AAWM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAV1D,IAAA,WAAA,GAAA;;QAWW,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAY;;QAElC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ;mFAAc;AAE3B,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAC9B,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;8EAC7E;AACF,IAAA;8GARY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,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,EALxB;;;AAGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJS,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;;2FAMrB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;AAGT,EAAA,CAAA;AACF,iBAAA;;;ACpBD;;;;AAIG;;ACJH;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-chord.mjs","sources":["../../src/chord/index.ts","../../src/chord/skdx-angular-charts-chord.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 { layoutChord, SkdxChartRootComponent, SkdxSizedBase } from '@skdx/angular-charts/internal';\n\n/** Groups around a circle with ribbons for the flows between them. */\n@Component({\n selector: 'skdx-chord-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"chord\"\n [label]=\"label() ?? 'Chord chart'\"\n [zoomable]=\"zoomable()\"\n [responsive]=\"responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxChordChartComponent extends SkdxSizedBase {\n readonly names = input.required<string[]>();\n /** `matrix[i][j]` is the flow from `i` to `j`. */\n readonly matrix = input.required<number[][]>();\n\n protected readonly layout = computed(() =>\n layoutChord({ ...this.sized(), names: this.names(), matrix: this.matrix() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAMH;AAoBM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAnB1D,IAAA,WAAA,GAAA;;QAoBW,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAY;;QAElC,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ;mFAAc;AAE3B,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;mFAC7E;AACF,IAAA;8GARY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,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,EAdxB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAerB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAnBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;AC7BD;;AAEG;;"}
@@ -7,36 +7,38 @@ import { SkdxSizedBase, layoutFunnelChart, SkdxChartRootComponent } from '@skdx/
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
- /** Centered stages, each narrowing toward the next, labelled in place. */
10
+ /** Stages narrowing with their value, or a pyramid; vertical or horizontal. */
11
11
  class SkdxFunnelChartComponent extends SkdxSizedBase {
12
12
  constructor() {
13
13
  super(...arguments);
14
14
  this.data = input.required(/* @ts-ignore */
15
15
  ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
16
- this.l = computed(() => layoutFunnelChart({ ...this.sized(), data: this.data() }), /* @ts-ignore */
17
- ...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
16
+ this.orientation = input(/* @ts-ignore */
17
+ ...(ngDevMode ? [undefined, { debugName: "orientation" }] : /* istanbul ignore next */ []));
18
+ this.variant = input(/* @ts-ignore */
19
+ ...(ngDevMode ? [undefined, { debugName: "variant" }] : /* istanbul ignore next */ []));
20
+ this.layout = computed(() => layoutFunnelChart({
21
+ ...this.sized(),
22
+ data: this.data(),
23
+ orientation: this.orientation(),
24
+ variant: this.variant(),
25
+ }), /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
18
27
  }
19
28
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxFunnelChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: SkdxFunnelChartComponent, isStandalone: true, selector: "skdx-funnel-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
21
- <skdx-chart-root [layout]="l()" kind="funnel" [label]="label() ?? 'Funnel chart'">
22
- @for (s of l().stages; track s.name) {
23
- <svg:g data-skdx-part="stage">
24
- <svg:path [attr.d]="s.d" [attr.fill]="s.color">
25
- <svg:title>{{ s.title }}</svg:title>
26
- </svg:path>
27
- <svg:text
28
- [attr.x]="s.x"
29
- [attr.y]="s.y"
30
- text-anchor="middle"
31
- dominant-baseline="middle"
32
- fill="var(--skdx-color-text-on-accent)"
33
- >
34
- {{ s.label }}
35
- </svg:text>
36
- </svg:g>
37
- }
38
- </skdx-chart-root>
39
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxFunnelChartComponent, isStandalone: true, selector: "skdx-funnel-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
30
+ <skdx-chart-root
31
+ [layout]="layout()"
32
+ kind="funnel"
33
+ [label]="label() ?? 'Funnel chart'"
34
+ [zoomable]="zoomable()"
35
+ [responsive]="responsive()"
36
+ (itemClick)="itemClick.emit($event)"
37
+ (hiddenSeriesChange)="toggle($event)"
38
+ (zoomChange)="zoom.set($event)"
39
+ (measured)="measuredWidth.set($event)"
40
+ ></skdx-chart-root>
41
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label", "zoomable", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
42
  }
41
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxFunnelChartComponent, decorators: [{
42
44
  type: Component,
@@ -46,33 +48,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
46
48
  changeDetection: ChangeDetectionStrategy.OnPush,
47
49
  imports: [SkdxChartRootComponent],
48
50
  template: `
49
- <skdx-chart-root [layout]="l()" kind="funnel" [label]="label() ?? 'Funnel chart'">
50
- @for (s of l().stages; track s.name) {
51
- <svg:g data-skdx-part="stage">
52
- <svg:path [attr.d]="s.d" [attr.fill]="s.color">
53
- <svg:title>{{ s.title }}</svg:title>
54
- </svg:path>
55
- <svg:text
56
- [attr.x]="s.x"
57
- [attr.y]="s.y"
58
- text-anchor="middle"
59
- dominant-baseline="middle"
60
- fill="var(--skdx-color-text-on-accent)"
61
- >
62
- {{ s.label }}
63
- </svg:text>
64
- </svg:g>
65
- }
66
- </skdx-chart-root>
51
+ <skdx-chart-root
52
+ [layout]="layout()"
53
+ kind="funnel"
54
+ [label]="label() ?? 'Funnel chart'"
55
+ [zoomable]="zoomable()"
56
+ [responsive]="responsive()"
57
+ (itemClick)="itemClick.emit($event)"
58
+ (hiddenSeriesChange)="toggle($event)"
59
+ (zoomChange)="zoom.set($event)"
60
+ (measured)="measuredWidth.set($event)"
61
+ ></skdx-chart-root>
67
62
  `,
68
63
  }]
69
- }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }] } });
70
-
71
- /*
72
- * Copyright (c) 2026 SkandaDX
73
- * This file is part of the SkandaDX organization.
74
- * Licensed under the MIT License. See LICENSE in the repository root.
75
- */
64
+ }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
76
65
 
77
66
  /**
78
67
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-funnel.mjs","sources":["../../src/funnel/funnel-chart.component.ts","../../src/funnel/index.ts","../../src/funnel/skdx-angular-charts-funnel.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 layoutFunnelChart,\n type Datum,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** Centered stages, each narrowing toward the next, labelled in place. */\n@Component({\n selector: 'skdx-funnel-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root [layout]=\"l()\" kind=\"funnel\" [label]=\"label() ?? 'Funnel chart'\">\n @for (s of l().stages; track s.name) {\n <svg:g data-skdx-part=\"stage\">\n <svg:path [attr.d]=\"s.d\" [attr.fill]=\"s.color\">\n <svg:title>{{ s.title }}</svg:title>\n </svg:path>\n <svg:text\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n fill=\"var(--skdx-color-text-on-accent)\"\n >\n {{ s.label }}\n </svg:text>\n </svg:g>\n }\n </skdx-chart-root>\n `,\n})\nexport class SkdxFunnelChartComponent extends SkdxSizedBase {\n readonly data = input.required<Datum[]>();\n\n protected readonly l = computed(() => layoutFunnelChart({ ...this.sized(), data: this.data() }));\n}\n","/*\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\nexport { SkdxFunnelChartComponent } from './funnel-chart.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AA2BM,MAAO,wBAAyB,SAAQ,aAAa,CAAA;AA1B3D,IAAA,WAAA,GAAA;;QA2BW,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAW;QAEtB,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAAM,iBAAiB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;8EAAC;AACjG,IAAA;8GAJY,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBzB;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBS,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;;2FAsBrB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA1BpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA;AACF,iBAAA;;;ACzCD;;;;AAIG;;ACJH;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-funnel.mjs","sources":["../../src/funnel/index.ts","../../src/funnel/skdx-angular-charts-funnel.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 layoutFunnelChart,\n SkdxChartRootComponent,\n SkdxSizedBase,\n type Datum,\n} from '@skdx/angular-charts/internal';\n\n/** Stages narrowing with their value, or a pyramid; vertical or horizontal. */\n@Component({\n selector: 'skdx-funnel-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"funnel\"\n [label]=\"label() ?? 'Funnel chart'\"\n [zoomable]=\"zoomable()\"\n [responsive]=\"responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxFunnelChartComponent extends SkdxSizedBase {\n readonly data = input.required<Datum[]>();\n readonly orientation = input<'vertical' | 'horizontal'>();\n readonly variant = input<'funnel' | 'pyramid'>();\n\n protected readonly layout = computed(() =>\n layoutFunnelChart({\n ...this.sized(),\n data: this.data(),\n orientation: this.orientation(),\n variant: this.variant(),\n }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAoBM,MAAO,wBAAyB,SAAQ,aAAa,CAAA;AAnB3D,IAAA,WAAA,GAAA;;QAoBW,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAW;AAChC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK;mGAA6B;AAChD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK;+FAAwB;AAE7B,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,iBAAiB,CAAC;YAChB,GAAG,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC;mFACH;AACF,IAAA;8GAbY,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdzB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAerB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAnBpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;AClCD;;AAEG;;"}
@@ -7,23 +7,32 @@ import { SkdxSizedBase, layoutGantt, SkdxChartRootComponent } from '@skdx/angula
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
- /** One bar per task on a numeric time axis. */
10
+ /** Intervals on a numeric time axis, one row per task or per `group`. */
11
11
  class SkdxGanttChartComponent extends SkdxSizedBase {
12
12
  constructor() {
13
13
  super(...arguments);
14
14
  this.tasks = input.required(/* @ts-ignore */
15
15
  ...(ngDevMode ? [{ debugName: "tasks" }] : /* istanbul ignore next */ []));
16
- /** Formats the x-axis ticks, e.g. a timestamp as a date. */
17
- this.format = input(/* @ts-ignore */
18
- ...(ngDevMode ? [undefined, { debugName: "format" }] : /* istanbul ignore next */ []));
19
- this.l = computed(() => layoutGantt({ ...this.sized(), tasks: this.tasks(), format: this.format() }), /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
16
+ /** Vertical lines and bands in time coordinates, e.g. today. */
17
+ this.references = input(/* @ts-ignore */
18
+ ...(ngDevMode ? [undefined, { debugName: "references" }] : /* istanbul ignore next */ []));
19
+ this.layout = computed(() => layoutGantt({ ...this.sized(), tasks: this.tasks(), references: this.references() }), /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
21
21
  }
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxGanttChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxGanttChartComponent, isStandalone: true, selector: "skdx-gantt-chart", inputs: { tasks: { classPropertyName: "tasks", publicName: "tasks", isSignal: true, isRequired: true, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
24
- <skdx-chart-root [layout]="l()" kind="gantt" [label]="label() ?? 'Gantt chart'">
25
- </skdx-chart-root>
26
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxGanttChartComponent, isStandalone: true, selector: "skdx-gantt-chart", inputs: { tasks: { classPropertyName: "tasks", publicName: "tasks", isSignal: true, isRequired: true, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
24
+ <skdx-chart-root
25
+ [layout]="layout()"
26
+ kind="gantt"
27
+ [label]="label() ?? 'Gantt chart'"
28
+ [zoomable]="zoomable()"
29
+ [responsive]="responsive()"
30
+ (itemClick)="itemClick.emit($event)"
31
+ (hiddenSeriesChange)="toggle($event)"
32
+ (zoomChange)="zoom.set($event)"
33
+ (measured)="measuredWidth.set($event)"
34
+ ></skdx-chart-root>
35
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label", "zoomable", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
36
  }
28
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxGanttChartComponent, decorators: [{
29
38
  type: Component,
@@ -33,17 +42,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
33
42
  changeDetection: ChangeDetectionStrategy.OnPush,
34
43
  imports: [SkdxChartRootComponent],
35
44
  template: `
36
- <skdx-chart-root [layout]="l()" kind="gantt" [label]="label() ?? 'Gantt chart'">
37
- </skdx-chart-root>
45
+ <skdx-chart-root
46
+ [layout]="layout()"
47
+ kind="gantt"
48
+ [label]="label() ?? 'Gantt chart'"
49
+ [zoomable]="zoomable()"
50
+ [responsive]="responsive()"
51
+ (itemClick)="itemClick.emit($event)"
52
+ (hiddenSeriesChange)="toggle($event)"
53
+ (zoomChange)="zoom.set($event)"
54
+ (measured)="measuredWidth.set($event)"
55
+ ></skdx-chart-root>
38
56
  `,
39
57
  }]
40
- }], propDecorators: { tasks: [{ type: i0.Input, args: [{ isSignal: true, alias: "tasks", required: true }] }], format: [{ type: i0.Input, args: [{ isSignal: true, alias: "format", required: false }] }] } });
41
-
42
- /*
43
- * Copyright (c) 2026 SkandaDX
44
- * This file is part of the SkandaDX organization.
45
- * Licensed under the MIT License. See LICENSE in the repository root.
46
- */
58
+ }], propDecorators: { tasks: [{ type: i0.Input, args: [{ isSignal: true, alias: "tasks", required: true }] }], references: [{ type: i0.Input, args: [{ isSignal: true, alias: "references", required: false }] }] } });
47
59
 
48
60
  /**
49
61
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-gantt.mjs","sources":["../../src/gantt/gantt-chart.component.ts","../../src/gantt/index.ts","../../src/gantt/skdx-angular-charts-gantt.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 layoutGantt,\n type GanttTask,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** One bar per task on a numeric time axis. */\n@Component({\n selector: 'skdx-gantt-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root [layout]=\"l()\" kind=\"gantt\" [label]=\"label() ?? 'Gantt chart'\">\n </skdx-chart-root>\n `,\n})\nexport class SkdxGanttChartComponent extends SkdxSizedBase {\n readonly tasks = input.required<GanttTask[]>();\n /** Formats the x-axis ticks, e.g. a timestamp as a date. */\n readonly format = input<(value: number) => string>();\n\n protected readonly l = computed(() =>\n layoutGantt({ ...this.sized(), tasks: this.tasks(), format: this.format() }),\n );\n}\n","/*\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\nexport { SkdxGanttChartComponent } from './gantt-chart.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAWM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAV1D,IAAA,WAAA,GAAA;;QAWW,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAe;;AAErC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK;8FAA6B;AAEjC,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAC9B,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;8EAC7E;AACF,IAAA;8GARY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALxB;;;AAGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJS,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;;2FAMrB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;AAGT,EAAA,CAAA;AACF,iBAAA;;;ACzBD;;;;AAIG;;ACJH;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-gantt.mjs","sources":["../../src/gantt/index.ts","../../src/gantt/skdx-angular-charts-gantt.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 layoutGantt,\n SkdxChartRootComponent,\n SkdxSizedBase,\n type GanttTask,\n type Reference,\n} from '@skdx/angular-charts/internal';\n\n/** Intervals on a numeric time axis, one row per task or per `group`. */\n@Component({\n selector: 'skdx-gantt-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"gantt\"\n [label]=\"label() ?? 'Gantt chart'\"\n [zoomable]=\"zoomable()\"\n [responsive]=\"responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxGanttChartComponent extends SkdxSizedBase {\n readonly tasks = input.required<GanttTask[]>();\n /** Vertical lines and bands in time coordinates, e.g. today. */\n readonly references = input<Reference[]>();\n\n protected readonly layout = computed(() =>\n layoutGantt({ ...this.sized(), tasks: this.tasks(), references: this.references() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAYH;AAoBM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAnB1D,IAAA,WAAA,GAAA;;QAoBW,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,QAAQ;kFAAe;;AAErC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAe;AAEvB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;mFACrF;AACF,IAAA;8GARY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAdxB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAbS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAerB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAnBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;ACnCD;;AAEG;;"}
@@ -1,69 +1,67 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { SkdxSizedBase, CHART_COLORS, layoutHeatmap, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
3
+ import { SkdxSizedBase, layoutHeatmap, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
4
4
 
5
5
  /*
6
6
  * Copyright (c) 2026 SkandaDX
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 grid of cells whose opacity follows the value. */
10
+ /** A grid of cells whose opacity follows the value; `calendar` lays days out as weekday rows and week columns. */
11
11
  class SkdxHeatmapComponent extends SkdxSizedBase {
12
12
  constructor() {
13
13
  super(...arguments);
14
- this.rows = input.required(/* @ts-ignore */
15
- ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
16
- this.columns = input.required(/* @ts-ignore */
17
- ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
14
+ this.rows = input(/* @ts-ignore */
15
+ ...(ngDevMode ? [undefined, { debugName: "rows" }] : /* istanbul ignore next */ []));
16
+ this.columns = input(/* @ts-ignore */
17
+ ...(ngDevMode ? [undefined, { debugName: "columns" }] : /* istanbul ignore next */ []));
18
18
  /** `data[row][column]`. */
19
- this.data = input.required(/* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
21
- /** The cell color; each cell's opacity follows its value. */
19
+ this.data = input(/* @ts-ignore */
20
+ ...(ngDevMode ? [undefined, { debugName: "data" }] : /* istanbul ignore next */ []));
21
+ /** One value per day, instead of rows/columns/data. */
22
+ this.calendar = input(/* @ts-ignore */
23
+ ...(ngDevMode ? [undefined, { debugName: "calendar" }] : /* istanbul ignore next */ []));
22
24
  this.color = input(/* @ts-ignore */
23
25
  ...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
24
- this.colors = CHART_COLORS;
25
- this.l = computed(() => layoutHeatmap({
26
+ /** Split around zero: negatives use `negativeColor`. */
27
+ this.diverging = input(false, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "diverging" }] : /* istanbul ignore next */ []));
29
+ this.negativeColor = input(/* @ts-ignore */
30
+ ...(ngDevMode ? [undefined, { debugName: "negativeColor" }] : /* istanbul ignore next */ []));
31
+ /** Write each value in its cell. */
32
+ this.labels = input(false, /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
34
+ /** Value range the opacity ramp covers. */
35
+ this.domain = input(/* @ts-ignore */
36
+ ...(ngDevMode ? [undefined, { debugName: "domain" }] : /* istanbul ignore next */ []));
37
+ this.layout = computed(() => layoutHeatmap({
26
38
  ...this.sized(),
27
39
  rows: this.rows(),
28
40
  columns: this.columns(),
29
41
  data: this.data(),
42
+ calendar: this.calendar(),
30
43
  color: this.color(),
44
+ diverging: this.diverging(),
45
+ negativeColor: this.negativeColor(),
46
+ labels: this.labels(),
47
+ domain: this.domain(),
31
48
  }), /* @ts-ignore */
32
- ...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
49
+ ...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
33
50
  }
34
51
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxHeatmapComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: SkdxHeatmapComponent, isStandalone: true, selector: "skdx-heatmap", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
36
- <skdx-chart-root [layout]="l()" kind="heatmap" [label]="label() ?? 'Heatmap'">
37
- <svg:g
38
- data-skdx-part="y-labels"
39
- [attr.fill]="colors.label"
40
- text-anchor="end"
41
- dominant-baseline="middle"
42
- >
43
- @for (t of l().rowLabels; track t.label) {
44
- <svg:text [attr.x]="t.x" [attr.y]="t.y">{{ t.label }}</svg:text>
45
- }
46
- </svg:g>
47
- <svg:g data-skdx-part="x-labels" [attr.fill]="colors.label" text-anchor="middle">
48
- @for (t of l().columnLabels; track t.label) {
49
- <svg:text [attr.x]="t.x" [attr.y]="t.y">{{ t.label }}</svg:text>
50
- }
51
- </svg:g>
52
- @for (c of l().cells; track $index) {
53
- <svg:rect
54
- data-skdx-part="cell"
55
- [attr.x]="c.x"
56
- [attr.y]="c.y"
57
- [attr.width]="c.width"
58
- [attr.height]="c.height"
59
- [attr.fill]="c.color"
60
- [attr.fill-opacity]="c.opacity"
61
- >
62
- <svg:title>{{ c.title }}</svg:title>
63
- </svg:rect>
64
- }
65
- </skdx-chart-root>
66
- `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxHeatmapComponent, isStandalone: true, selector: "skdx-heatmap", inputs: { rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, diverging: { classPropertyName: "diverging", publicName: "diverging", isSignal: true, isRequired: false, transformFunction: null }, negativeColor: { classPropertyName: "negativeColor", publicName: "negativeColor", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, domain: { classPropertyName: "domain", publicName: "domain", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
53
+ <skdx-chart-root
54
+ [layout]="layout()"
55
+ kind="heatmap"
56
+ [label]="label() ?? 'Heatmap'"
57
+ [zoomable]="zoomable()"
58
+ [responsive]="responsive()"
59
+ (itemClick)="itemClick.emit($event)"
60
+ (hiddenSeriesChange)="toggle($event)"
61
+ (zoomChange)="zoom.set($event)"
62
+ (measured)="measuredWidth.set($event)"
63
+ ></skdx-chart-root>
64
+ `, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label", "zoomable", "responsive"], outputs: ["itemClick", "hiddenSeriesChange", "zoomChange", "measured"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67
65
  }
68
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxHeatmapComponent, decorators: [{
69
67
  type: Component,
@@ -73,45 +71,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
73
71
  changeDetection: ChangeDetectionStrategy.OnPush,
74
72
  imports: [SkdxChartRootComponent],
75
73
  template: `
76
- <skdx-chart-root [layout]="l()" kind="heatmap" [label]="label() ?? 'Heatmap'">
77
- <svg:g
78
- data-skdx-part="y-labels"
79
- [attr.fill]="colors.label"
80
- text-anchor="end"
81
- dominant-baseline="middle"
82
- >
83
- @for (t of l().rowLabels; track t.label) {
84
- <svg:text [attr.x]="t.x" [attr.y]="t.y">{{ t.label }}</svg:text>
85
- }
86
- </svg:g>
87
- <svg:g data-skdx-part="x-labels" [attr.fill]="colors.label" text-anchor="middle">
88
- @for (t of l().columnLabels; track t.label) {
89
- <svg:text [attr.x]="t.x" [attr.y]="t.y">{{ t.label }}</svg:text>
90
- }
91
- </svg:g>
92
- @for (c of l().cells; track $index) {
93
- <svg:rect
94
- data-skdx-part="cell"
95
- [attr.x]="c.x"
96
- [attr.y]="c.y"
97
- [attr.width]="c.width"
98
- [attr.height]="c.height"
99
- [attr.fill]="c.color"
100
- [attr.fill-opacity]="c.opacity"
101
- >
102
- <svg:title>{{ c.title }}</svg:title>
103
- </svg:rect>
104
- }
105
- </skdx-chart-root>
74
+ <skdx-chart-root
75
+ [layout]="layout()"
76
+ kind="heatmap"
77
+ [label]="label() ?? 'Heatmap'"
78
+ [zoomable]="zoomable()"
79
+ [responsive]="responsive()"
80
+ (itemClick)="itemClick.emit($event)"
81
+ (hiddenSeriesChange)="toggle($event)"
82
+ (zoomChange)="zoom.set($event)"
83
+ (measured)="measuredWidth.set($event)"
84
+ ></skdx-chart-root>
106
85
  `,
107
86
  }]
108
- }], propDecorators: { rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: true }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
109
-
110
- /*
111
- * Copyright (c) 2026 SkandaDX
112
- * This file is part of the SkandaDX organization.
113
- * Licensed under the MIT License. See LICENSE in the repository root.
114
- */
87
+ }], propDecorators: { rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], calendar: [{ type: i0.Input, args: [{ isSignal: true, alias: "calendar", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], diverging: [{ type: i0.Input, args: [{ isSignal: true, alias: "diverging", required: false }] }], negativeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "negativeColor", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], domain: [{ type: i0.Input, args: [{ isSignal: true, alias: "domain", required: false }] }] } });
115
88
 
116
89
  /**
117
90
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-heatmap.mjs","sources":["../../src/heatmap/heatmap.component.ts","../../src/heatmap/index.ts","../../src/heatmap/skdx-angular-charts-heatmap.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 CHART_COLORS,\n layoutHeatmap,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** A grid of cells whose opacity follows the value. */\n@Component({\n selector: 'skdx-heatmap',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root [layout]=\"l()\" kind=\"heatmap\" [label]=\"label() ?? 'Heatmap'\">\n <svg:g\n data-skdx-part=\"y-labels\"\n [attr.fill]=\"colors.label\"\n text-anchor=\"end\"\n dominant-baseline=\"middle\"\n >\n @for (t of l().rowLabels; track t.label) {\n <svg:text [attr.x]=\"t.x\" [attr.y]=\"t.y\">{{ t.label }}</svg:text>\n }\n </svg:g>\n <svg:g data-skdx-part=\"x-labels\" [attr.fill]=\"colors.label\" text-anchor=\"middle\">\n @for (t of l().columnLabels; track t.label) {\n <svg:text [attr.x]=\"t.x\" [attr.y]=\"t.y\">{{ t.label }}</svg:text>\n }\n </svg:g>\n @for (c of l().cells; track $index) {\n <svg:rect\n data-skdx-part=\"cell\"\n [attr.x]=\"c.x\"\n [attr.y]=\"c.y\"\n [attr.width]=\"c.width\"\n [attr.height]=\"c.height\"\n [attr.fill]=\"c.color\"\n [attr.fill-opacity]=\"c.opacity\"\n >\n <svg:title>{{ c.title }}</svg:title>\n </svg:rect>\n }\n </skdx-chart-root>\n `,\n})\nexport class SkdxHeatmapComponent extends SkdxSizedBase {\n readonly rows = input.required<string[]>();\n readonly columns = input.required<string[]>();\n /** `data[row][column]`. */\n readonly data = input.required<number[][]>();\n /** The cell color; each cell's opacity follows its value. */\n readonly color = input<string>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly l = computed(() =>\n layoutHeatmap({\n ...this.sized(),\n rows: this.rows(),\n columns: this.columns(),\n data: this.data(),\n color: this.color(),\n }),\n );\n}\n","/*\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\nexport { SkdxHeatmapComponent } from './heatmap.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAuCM,MAAO,oBAAqB,SAAQ,aAAa,CAAA;AAtCvD,IAAA,WAAA,GAAA;;QAuCW,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAY;QACjC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ;oFAAY;;QAEpC,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAc;;AAEnC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;QAEb,IAAA,CAAA,MAAM,GAAG,YAAY;AACrB,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAC9B,aAAa,CAAC;YACZ,GAAG,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;SACpB,CAAC;8EACH;AACF,IAAA;8GAlBY,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,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;;2FAkCrB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtChC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA;AACF,iBAAA;;;ACrDD;;;;AAIG;;ACJH;;AAEG;;"}
1
+ {"version":3,"file":"skdx-angular-charts-heatmap.mjs","sources":["../../src/heatmap/index.ts","../../src/heatmap/skdx-angular-charts-heatmap.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 layoutHeatmap,\n SkdxChartRootComponent,\n SkdxSizedBase,\n type CalendarCell,\n type Value,\n} from '@skdx/angular-charts/internal';\n\n/** A grid of cells whose opacity follows the value; `calendar` lays days out as weekday rows and week columns. */\n@Component({\n selector: 'skdx-heatmap',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"heatmap\"\n [label]=\"label() ?? 'Heatmap'\"\n [zoomable]=\"zoomable()\"\n [responsive]=\"responsive()\"\n (itemClick)=\"itemClick.emit($event)\"\n (hiddenSeriesChange)=\"toggle($event)\"\n (zoomChange)=\"zoom.set($event)\"\n (measured)=\"measuredWidth.set($event)\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxHeatmapComponent extends SkdxSizedBase {\n readonly rows = input<string[]>();\n readonly columns = input<string[]>();\n /** `data[row][column]`. */\n readonly data = input<Value[][]>();\n /** One value per day, instead of rows/columns/data. */\n readonly calendar = input<CalendarCell[]>();\n readonly color = input<string>();\n /** Split around zero: negatives use `negativeColor`. */\n readonly diverging = input(false);\n readonly negativeColor = input<string>();\n /** Write each value in its cell. */\n readonly labels = input(false);\n /** Value range the opacity ramp covers. */\n readonly domain = input<[number, number]>();\n\n protected readonly layout = computed(() =>\n layoutHeatmap({\n ...this.sized(),\n rows: this.rows(),\n columns: this.columns(),\n data: this.data(),\n calendar: this.calendar(),\n color: this.color(),\n diverging: this.diverging(),\n negativeColor: this.negativeColor(),\n labels: this.labels(),\n domain: this.domain(),\n }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}