@mk-kit/ui 0.40.0 → 0.41.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.
@@ -1226,6 +1226,10 @@ class MkBarChart {
1226
1226
  /** Accessible summary; generated from the data when omitted. */
1227
1227
  label = input('', /* @ts-ignore */
1228
1228
  ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1229
+ /** Make bars clickable + keyboard-focusable (`role="button"`, accessible name) and emit `barClick`. */
1230
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1231
+ /** A bar was clicked or activated with Enter / Space (needs `interactive`). */
1232
+ barClick = output();
1229
1233
  hovered = signal(null, /* @ts-ignore */
1230
1234
  ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
1231
1235
  /** Tap-to-pin: a touch tap on a bar pins the tooltip until a tap lands
@@ -1471,6 +1475,22 @@ class MkBarChart {
1471
1475
  return `Bar chart of ${s.map((x) => x.name).join(', ')} across ${cats.length} categories`;
1472
1476
  }, /* @ts-ignore */
1473
1477
  ...(ngDevMode ? [{ debugName: "resolvedLabel" }] : /* istanbul ignore next */ []));
1478
+ emitBar(b, event) {
1479
+ if (!this.interactive())
1480
+ return;
1481
+ if (event instanceof KeyboardEvent) {
1482
+ if (event.key !== 'Enter' && event.key !== ' ')
1483
+ return;
1484
+ event.preventDefault();
1485
+ }
1486
+ const series = this.series()[b.seriesIndex];
1487
+ if (!series)
1488
+ return;
1489
+ this.barClick.emit({ series, seriesIndex: b.seriesIndex, category: this.categories()[b.categoryIndex] ?? '', categoryIndex: b.categoryIndex, value: b.value });
1490
+ }
1491
+ barLabel(b) {
1492
+ return `${this.series()[b.seriesIndex]?.name ?? ''}, ${this.categories()[b.categoryIndex] ?? ''}: ${b.value}`;
1493
+ }
1474
1494
  setHover(bar) {
1475
1495
  this.tapPin.hover(bar);
1476
1496
  }
@@ -1478,7 +1498,7 @@ class MkBarChart {
1478
1498
  this.tapPin.pin(bar, event);
1479
1499
  }
1480
1500
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkBarChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
1481
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkBarChart, isStandalone: true, selector: "mk-bar-chart", inputs: { categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, labelAngle: { classPropertyName: "labelAngle", publicName: "labelAngle", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-bar-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y1\"\n [attr.y2]=\"row.y2\"\n />\n }\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--y]=\"!horizontal()\"\n [class.mk-chart__axis-label--x]=\"horizontal()\"\n [attr.x]=\"row.labelX\"\n [attr.y]=\"row.labelY\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Bars -->\n @for (b of bars(); track b.categoryIndex + '-' + b.seriesIndex) {\n <rect\n class=\"mk-chart__bar\"\n [class.mk-chart__bar--dim]=\"hovered() && hovered() !== b\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [style.fill]=\"b.color\"\n rx=\"3\"\n (pointerenter)=\"setHover(b)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(b, $event)\"\n />\n }\n\n <!-- Category labels. Tracked by index, not label: a 12-month window can\n start and end in the same month, and thinned axes repeat the empty\n string \u2014 both are duplicate keys (NG0955). -->\n @for (band of bands(); track $index) {\n @if (band.label) {\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--x]=\"!horizontal() && !band.transform\"\n [class.mk-chart__axis-label--tilted]=\"band.transform\"\n [class.mk-chart__axis-label--y]=\"horizontal()\"\n [attr.x]=\"band.labelX\"\n [attr.y]=\"band.labelY\"\n [attr.transform]=\"band.transform\"\n >\n {{ band.label }}\n </text>\n }\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div\n class=\"mk-chart__tooltip\"\n [style.left.%]=\"t.left\"\n [style.top.%]=\"t.top\"\n >\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ t.series }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ t.value }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkBarChart, isStandalone: true, selector: "mk-bar-chart", inputs: { categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, labelAngle: { classPropertyName: "labelAngle", publicName: "labelAngle", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { barClick: "barClick" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-bar-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.role]=\"interactive() ? 'group' : null\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y1\"\n [attr.y2]=\"row.y2\"\n />\n }\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--y]=\"!horizontal()\"\n [class.mk-chart__axis-label--x]=\"horizontal()\"\n [attr.x]=\"row.labelX\"\n [attr.y]=\"row.labelY\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Bars -->\n @for (b of bars(); track b.categoryIndex + '-' + b.seriesIndex) {\n <rect\n class=\"mk-chart__bar\"\n [class.mk-chart__bar--dim]=\"hovered() && hovered() !== b\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [style.fill]=\"b.color\"\n rx=\"3\"\n [class.mk-chart__bar--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? barLabel(b) : null\"\n (pointerenter)=\"setHover(b)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(b, $event)\"\n (click)=\"emitBar(b)\"\n (keydown)=\"emitBar(b, $event)\"\n (focus)=\"setHover(b)\"\n (blur)=\"setHover(null)\"\n />\n }\n\n <!-- Category labels. Tracked by index, not label: a 12-month window can\n start and end in the same month, and thinned axes repeat the empty\n string \u2014 both are duplicate keys (NG0955). -->\n @for (band of bands(); track $index) {\n @if (band.label) {\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--x]=\"!horizontal() && !band.transform\"\n [class.mk-chart__axis-label--tilted]=\"band.transform\"\n [class.mk-chart__axis-label--y]=\"horizontal()\"\n [attr.x]=\"band.labelX\"\n [attr.y]=\"band.labelY\"\n [attr.transform]=\"band.transform\"\n >\n {{ band.label }}\n </text>\n }\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div\n class=\"mk-chart__tooltip\"\n [style.left.%]=\"t.left\"\n [style.top.%]=\"t.top\"\n >\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ t.series }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ t.value }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1482
1502
  }
1483
1503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkBarChart, decorators: [{
1484
1504
  type: Component,
@@ -1486,8 +1506,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
1486
1506
  class: 'mk-chart mk-bar-chart',
1487
1507
  role: 'group',
1488
1508
  '[attr.aria-label]': 'resolvedLabel()',
1489
- }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y1\"\n [attr.y2]=\"row.y2\"\n />\n }\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--y]=\"!horizontal()\"\n [class.mk-chart__axis-label--x]=\"horizontal()\"\n [attr.x]=\"row.labelX\"\n [attr.y]=\"row.labelY\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Bars -->\n @for (b of bars(); track b.categoryIndex + '-' + b.seriesIndex) {\n <rect\n class=\"mk-chart__bar\"\n [class.mk-chart__bar--dim]=\"hovered() && hovered() !== b\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [style.fill]=\"b.color\"\n rx=\"3\"\n (pointerenter)=\"setHover(b)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(b, $event)\"\n />\n }\n\n <!-- Category labels. Tracked by index, not label: a 12-month window can\n start and end in the same month, and thinned axes repeat the empty\n string \u2014 both are duplicate keys (NG0955). -->\n @for (band of bands(); track $index) {\n @if (band.label) {\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--x]=\"!horizontal() && !band.transform\"\n [class.mk-chart__axis-label--tilted]=\"band.transform\"\n [class.mk-chart__axis-label--y]=\"horizontal()\"\n [attr.x]=\"band.labelX\"\n [attr.y]=\"band.labelY\"\n [attr.transform]=\"band.transform\"\n >\n {{ band.label }}\n </text>\n }\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div\n class=\"mk-chart__tooltip\"\n [style.left.%]=\"t.left\"\n [style.top.%]=\"t.top\"\n >\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ t.series }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ t.value }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"] }]
1490
- }], propDecorators: { categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], labelAngle: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelAngle", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
1509
+ }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.role]=\"interactive() ? 'group' : null\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y1\"\n [attr.y2]=\"row.y2\"\n />\n }\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--y]=\"!horizontal()\"\n [class.mk-chart__axis-label--x]=\"horizontal()\"\n [attr.x]=\"row.labelX\"\n [attr.y]=\"row.labelY\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Bars -->\n @for (b of bars(); track b.categoryIndex + '-' + b.seriesIndex) {\n <rect\n class=\"mk-chart__bar\"\n [class.mk-chart__bar--dim]=\"hovered() && hovered() !== b\"\n [attr.x]=\"b.x\"\n [attr.y]=\"b.y\"\n [attr.width]=\"b.w\"\n [attr.height]=\"b.h\"\n [style.fill]=\"b.color\"\n rx=\"3\"\n [class.mk-chart__bar--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? barLabel(b) : null\"\n (pointerenter)=\"setHover(b)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(b, $event)\"\n (click)=\"emitBar(b)\"\n (keydown)=\"emitBar(b, $event)\"\n (focus)=\"setHover(b)\"\n (blur)=\"setHover(null)\"\n />\n }\n\n <!-- Category labels. Tracked by index, not label: a 12-month window can\n start and end in the same month, and thinned axes repeat the empty\n string \u2014 both are duplicate keys (NG0955). -->\n @for (band of bands(); track $index) {\n @if (band.label) {\n <text\n class=\"mk-chart__axis-label\"\n [class.mk-chart__axis-label--x]=\"!horizontal() && !band.transform\"\n [class.mk-chart__axis-label--tilted]=\"band.transform\"\n [class.mk-chart__axis-label--y]=\"horizontal()\"\n [attr.x]=\"band.labelX\"\n [attr.y]=\"band.labelY\"\n [attr.transform]=\"band.transform\"\n >\n {{ band.label }}\n </text>\n }\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div\n class=\"mk-chart__tooltip\"\n [style.left.%]=\"t.left\"\n [style.top.%]=\"t.top\"\n >\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ t.series }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ t.value }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"] }]
1510
+ }], propDecorators: { categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], labelAngle: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelAngle", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], barClick: [{ type: i0.Output, args: ["barClick"] }] } });
1491
1511
 
1492
1512
  const MARGIN$2 = { top: 14, right: 16, bottom: 30, left: 44 };
1493
1513
  /** Closed path filling between an upper (`top`) and lower (`bottom`) line. */
@@ -1553,6 +1573,10 @@ class MkLineChart {
1553
1573
  /** Accessible summary; generated from the data when omitted. */
1554
1574
  label = input('', /* @ts-ignore */
1555
1575
  ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1576
+ /** Make x positions keyboard-focusable (`role="button"`, accessible name) and emit `pointClick`. */
1577
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1578
+ /** A category (x position) was clicked or activated with Enter / Space (needs `interactive`). */
1579
+ pointClick = output();
1556
1580
  hoverIndex = signal(null, /* @ts-ignore */
1557
1581
  ...(ngDevMode ? [{ debugName: "hoverIndex" }] : /* istanbul ignore next */ []));
1558
1582
  /** Tap-to-pin: a touch tap on a hit band pins the tooltip until a tap lands
@@ -1726,6 +1750,24 @@ class MkLineChart {
1726
1750
  return `Line chart of ${s.map((x) => x.name).join(', ')} over ${this.categories().length} points`;
1727
1751
  }, /* @ts-ignore */
1728
1752
  ...(ngDevMode ? [{ debugName: "resolvedLabel" }] : /* istanbul ignore next */ []));
1753
+ emitPoint(index, event) {
1754
+ if (!this.interactive())
1755
+ return;
1756
+ if (event instanceof KeyboardEvent) {
1757
+ if (event.key !== 'Enter' && event.key !== ' ')
1758
+ return;
1759
+ event.preventDefault();
1760
+ }
1761
+ this.pointClick.emit({
1762
+ index,
1763
+ category: this.categories()[index] ?? '',
1764
+ values: this.series().map((series) => ({ series, value: series.data[index] ?? 0 })),
1765
+ });
1766
+ }
1767
+ pointLabel(index) {
1768
+ const values = this.series().map((s) => `${s.name} ${s.data[index] ?? 0}`).join(', ');
1769
+ return `${this.categories()[index] ?? ''}: ${values}`;
1770
+ }
1729
1771
  setHover(index) {
1730
1772
  this.tapPin.hover(index);
1731
1773
  }
@@ -1733,7 +1775,7 @@ class MkLineChart {
1733
1775
  this.tapPin.pin(index, event);
1734
1776
  }
1735
1777
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkLineChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
1736
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkLineChart, isStandalone: true, selector: "mk-line-chart", inputs: { categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, showDots: { classPropertyName: "showDots", publicName: "showDots", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-line-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"plot().x\"\n [attr.x2]=\"plot().x + plot().w\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Areas + lines -->\n @for (r of rendered(); track r.name) {\n @if (fillAreas()) {\n <path class=\"mk-chart__area\" [attr.d]=\"r.area\" [style.fill]=\"r.color\" />\n }\n <path class=\"mk-chart__line\" [attr.d]=\"r.line\" [style.stroke]=\"r.color\" />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n\n <!-- Category labels -->\n @for (cat of categories(); track $index; let i = $index) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"plot().x + (categories().length > 1 ? (i * plot().w) / (categories().length - 1) : plot().w / 2)\"\n [attr.y]=\"height() - 10\"\n >\n {{ cat }}\n </text>\n }\n\n <!-- Hover crosshair + active point markers -->\n @if (crosshairX(); as cx) {\n <line\n class=\"mk-chart__crosshair\"\n [attr.x1]=\"cx\"\n [attr.x2]=\"cx\"\n [attr.y1]=\"plot().y\"\n [attr.y2]=\"plot().y + plot().h\"\n />\n @for (p of activePoints(); track p.name) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"4\"\n [style.fill]=\"p.color\"\n />\n }\n }\n\n <!-- Transparent hit bands -->\n @for (band of hitBands(); track band.index) {\n <rect\n [attr.x]=\"band.x\"\n [attr.y]=\"band.y\"\n [attr.width]=\"band.w\"\n [attr.height]=\"band.h\"\n fill=\"transparent\"\n (pointerenter)=\"setHover(band.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(band.index, $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n @for (row of t.rows; track row.name) {\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"row.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ row.name }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1778
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkLineChart, isStandalone: true, selector: "mk-line-chart", inputs: { categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, responsive: { classPropertyName: "responsive", publicName: "responsive", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null }, stacked: { classPropertyName: "stacked", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, showDots: { classPropertyName: "showDots", publicName: "showDots", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: "pointClick" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-line-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.role]=\"interactive() ? 'group' : null\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"plot().x\"\n [attr.x2]=\"plot().x + plot().w\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Areas + lines -->\n @for (r of rendered(); track r.name) {\n @if (fillAreas()) {\n <path class=\"mk-chart__area\" [attr.d]=\"r.area\" [style.fill]=\"r.color\" />\n }\n <path class=\"mk-chart__line\" [attr.d]=\"r.line\" [style.stroke]=\"r.color\" />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n\n <!-- Category labels -->\n @for (cat of categories(); track $index; let i = $index) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"plot().x + (categories().length > 1 ? (i * plot().w) / (categories().length - 1) : plot().w / 2)\"\n [attr.y]=\"height() - 10\"\n >\n {{ cat }}\n </text>\n }\n\n <!-- Hover crosshair + active point markers -->\n @if (crosshairX(); as cx) {\n <line\n class=\"mk-chart__crosshair\"\n [attr.x1]=\"cx\"\n [attr.x2]=\"cx\"\n [attr.y1]=\"plot().y\"\n [attr.y2]=\"plot().y + plot().h\"\n />\n @for (p of activePoints(); track p.name) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"4\"\n [style.fill]=\"p.color\"\n />\n }\n }\n\n <!-- Transparent hit bands -->\n @for (band of hitBands(); track band.index) {\n <rect\n [attr.x]=\"band.x\"\n [attr.y]=\"band.y\"\n [attr.width]=\"band.w\"\n [attr.height]=\"band.h\"\n fill=\"transparent\"\n [class.mk-chart__band--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? pointLabel(band.index) : null\"\n (pointerenter)=\"setHover(band.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(band.index, $event)\"\n (click)=\"emitPoint(band.index)\"\n (keydown)=\"emitPoint(band.index, $event)\"\n (focus)=\"setHover(band.index)\"\n (blur)=\"setHover(null)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n @for (row of t.rows; track row.name) {\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"row.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ row.name }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1737
1779
  }
1738
1780
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkLineChart, decorators: [{
1739
1781
  type: Component,
@@ -1741,8 +1783,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
1741
1783
  class: 'mk-chart mk-line-chart',
1742
1784
  role: 'group',
1743
1785
  '[attr.aria-label]': 'resolvedLabel()',
1744
- }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"plot().x\"\n [attr.x2]=\"plot().x + plot().w\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Areas + lines -->\n @for (r of rendered(); track r.name) {\n @if (fillAreas()) {\n <path class=\"mk-chart__area\" [attr.d]=\"r.area\" [style.fill]=\"r.color\" />\n }\n <path class=\"mk-chart__line\" [attr.d]=\"r.line\" [style.stroke]=\"r.color\" />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n\n <!-- Category labels -->\n @for (cat of categories(); track $index; let i = $index) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"plot().x + (categories().length > 1 ? (i * plot().w) / (categories().length - 1) : plot().w / 2)\"\n [attr.y]=\"height() - 10\"\n >\n {{ cat }}\n </text>\n }\n\n <!-- Hover crosshair + active point markers -->\n @if (crosshairX(); as cx) {\n <line\n class=\"mk-chart__crosshair\"\n [attr.x1]=\"cx\"\n [attr.x2]=\"cx\"\n [attr.y1]=\"plot().y\"\n [attr.y2]=\"plot().y + plot().h\"\n />\n @for (p of activePoints(); track p.name) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"4\"\n [style.fill]=\"p.color\"\n />\n }\n }\n\n <!-- Transparent hit bands -->\n @for (band of hitBands(); track band.index) {\n <rect\n [attr.x]=\"band.x\"\n [attr.y]=\"band.y\"\n [attr.width]=\"band.w\"\n [attr.height]=\"band.h\"\n fill=\"transparent\"\n (pointerenter)=\"setHover(band.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(band.index, $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n @for (row of t.rows; track row.name) {\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"row.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ row.name }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"] }]
1745
- }], propDecorators: { categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], area: [{ type: i0.Input, args: [{ isSignal: true, alias: "area", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], showDots: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDots", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
1786
+ }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + drawWidth() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.role]=\"interactive() ? 'group' : null\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n focusable=\"false\"\n >\n <!-- Gridlines + value-axis labels -->\n @for (row of gridRows(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"plot().x\"\n [attr.x2]=\"plot().x + plot().w\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- Areas + lines -->\n @for (r of rendered(); track r.name) {\n @if (fillAreas()) {\n <path class=\"mk-chart__area\" [attr.d]=\"r.area\" [style.fill]=\"r.color\" />\n }\n <path class=\"mk-chart__line\" [attr.d]=\"r.line\" [style.stroke]=\"r.color\" />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n\n <!-- Category labels -->\n @for (cat of categories(); track $index; let i = $index) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"plot().x + (categories().length > 1 ? (i * plot().w) / (categories().length - 1) : plot().w / 2)\"\n [attr.y]=\"height() - 10\"\n >\n {{ cat }}\n </text>\n }\n\n <!-- Hover crosshair + active point markers -->\n @if (crosshairX(); as cx) {\n <line\n class=\"mk-chart__crosshair\"\n [attr.x1]=\"cx\"\n [attr.x2]=\"cx\"\n [attr.y1]=\"plot().y\"\n [attr.y2]=\"plot().y + plot().h\"\n />\n @for (p of activePoints(); track p.name) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"4\"\n [style.fill]=\"p.color\"\n />\n }\n }\n\n <!-- Transparent hit bands -->\n @for (band of hitBands(); track band.index) {\n <rect\n [attr.x]=\"band.x\"\n [attr.y]=\"band.y\"\n [attr.width]=\"band.w\"\n [attr.height]=\"band.h\"\n fill=\"transparent\"\n [class.mk-chart__band--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? pointLabel(band.index) : null\"\n (pointerenter)=\"setHover(band.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(band.index, $event)\"\n (click)=\"emitPoint(band.index)\"\n (keydown)=\"emitPoint(band.index, $event)\"\n (focus)=\"setHover(band.index)\"\n (blur)=\"setHover(null)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">{{ t.category }}</span>\n @for (row of t.rows; track row.name) {\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"row.color\"></span>\n @if (t.multi) {\n <span class=\"mk-chart__tooltip-name\">{{ row.name }}</span>\n }\n <span class=\"mk-chart__tooltip-value\">{{ row.value }}</span>\n </span>\n }\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartCategory }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (cat of categories(); track cat; let c = $index) {\n <tr>\n <th scope=\"row\">{{ cat }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[c] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"] }]
1787
+ }], propDecorators: { categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: false }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], responsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsive", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], area: [{ type: i0.Input, args: [{ isSignal: true, alias: "area", required: false }] }], stacked: [{ type: i0.Input, args: [{ isSignal: true, alias: "stacked", required: false }] }], showDots: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDots", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], pointClick: [{ type: i0.Output, args: ["pointClick"] }] } });
1746
1788
 
1747
1789
  /**
1748
1790
  * DonutChart — proportions of a whole as a ring (or a full pie when
@@ -1775,6 +1817,14 @@ class MkDonutChart {
1775
1817
  /** Accessible summary; generated from the data when omitted. */
1776
1818
  label = input('', /* @ts-ignore */
1777
1819
  ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1820
+ /**
1821
+ * Make slices (and legend rows) clickable and keyboard-focusable: they get
1822
+ * `role="button"` + an accessible name and emit `sliceClick`. Off by default —
1823
+ * the chart stays a static picture with its screen-reader table.
1824
+ */
1825
+ interactive = input(false, { ...(ngDevMode ? { debugName: "interactive" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1826
+ /** A slice was clicked or activated with Enter / Space (needs `interactive`). */
1827
+ sliceClick = output();
1778
1828
  hovered = signal(null, /* @ts-ignore */
1779
1829
  ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
1780
1830
  /** Tap-to-pin: a touch tap on a slice pins the tooltip until a tap lands
@@ -1855,6 +1905,22 @@ class MkDonutChart {
1855
1905
  return `Donut chart with ${s.length} slices totalling ${mkFormatCompact(this.total())}`;
1856
1906
  }, /* @ts-ignore */
1857
1907
  ...(ngDevMode ? [{ debugName: "resolvedLabel" }] : /* istanbul ignore next */ []));
1908
+ emitSlice(index, event) {
1909
+ if (!this.interactive())
1910
+ return;
1911
+ if (event instanceof KeyboardEvent) {
1912
+ if (event.key !== 'Enter' && event.key !== ' ')
1913
+ return;
1914
+ event.preventDefault();
1915
+ }
1916
+ const slice = this.slices()[index];
1917
+ if (slice)
1918
+ this.sliceClick.emit({ slice, index });
1919
+ }
1920
+ sliceLabel(index) {
1921
+ const s = this.slices()[index];
1922
+ return s ? `${s.name}: ${s.value}` : '';
1923
+ }
1858
1924
  setHover(index) {
1859
1925
  this.tapPin.hover(index);
1860
1926
  }
@@ -1862,7 +1928,7 @@ class MkDonutChart {
1862
1928
  this.tapPin.pin(index, event);
1863
1929
  }
1864
1930
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDonutChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
1865
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkDonutChart, isStandalone: true, selector: "mk-donut-chart", inputs: { slices: { classPropertyName: "slices", publicName: "slices", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, centerLabel: { classPropertyName: "centerLabel", publicName: "centerLabel", isSignal: true, isRequired: false, transformFunction: null }, centerSublabel: { classPropertyName: "centerSublabel", publicName: "centerSublabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-donut-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame mk-donut__frame\" [style.max-width.px]=\"size()\">\n <svg\n class=\"mk-chart__svg mk-donut__svg\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n @for (g of geom(); track g.index) {\n <path\n class=\"mk-chart__slice\"\n [class.mk-chart__slice--dim]=\"hovered() !== null && hovered() !== g.index\"\n [attr.d]=\"g.path\"\n [style.fill]=\"g.color\"\n (pointerenter)=\"setHover(g.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(g.index, $event)\"\n />\n }\n </svg>\n\n @if (innerRadius() > 0 && (centerLabel() || centerSublabel())) {\n <div class=\"mk-donut__center\">\n @if (centerLabel()) {\n <span class=\"mk-donut__center-label\">{{ centerLabel() }}</span>\n }\n @if (centerSublabel()) {\n <span class=\"mk-donut__center-sublabel\">{{ centerSublabel() }}</span>\n }\n </div>\n }\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n <span class=\"mk-chart__tooltip-name\">{{ t.name }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.value }} ({{ t.percent }}%)</span>\n </span>\n </div>\n }\n</div>\n\n@if (showLegend()) {\n <ul class=\"mk-chart__legend mk-donut__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr><th scope=\"col\">{{ i18n.chartSlice }}</th><th scope=\"col\">{{ i18n.chartValue }}</th></tr>\n </thead>\n <tbody>\n @for (s of slices(); track s.name) {\n <tr><th scope=\"row\">{{ s.name }}</th><td>{{ s.value }}</td></tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1931
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkDonutChart, isStandalone: true, selector: "mk-donut-chart", inputs: { slices: { classPropertyName: "slices", publicName: "slices", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, thickness: { classPropertyName: "thickness", publicName: "thickness", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, centerLabel: { classPropertyName: "centerLabel", publicName: "centerLabel", isSignal: true, isRequired: false, transformFunction: null }, centerSublabel: { classPropertyName: "centerSublabel", publicName: "centerSublabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sliceClick: "sliceClick" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-donut-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame mk-donut__frame\" [style.max-width.px]=\"size()\">\n <svg\n class=\"mk-chart__svg mk-donut__svg\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n [attr.role]=\"interactive() ? 'group' : null\"\n focusable=\"false\"\n >\n @for (g of geom(); track g.index) {\n <path\n class=\"mk-chart__slice\"\n [class.mk-chart__slice--dim]=\"hovered() !== null && hovered() !== g.index\"\n [attr.d]=\"g.path\"\n [style.fill]=\"g.color\"\n [class.mk-chart__slice--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? sliceLabel(g.index) : null\"\n (pointerenter)=\"setHover(g.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(g.index, $event)\"\n (click)=\"emitSlice(g.index)\"\n (keydown)=\"emitSlice(g.index, $event)\"\n (focus)=\"setHover(g.index)\"\n (blur)=\"setHover(null)\"\n />\n }\n </svg>\n\n @if (innerRadius() > 0 && (centerLabel() || centerSublabel())) {\n <div class=\"mk-donut__center\">\n @if (centerLabel()) {\n <span class=\"mk-donut__center-label\">{{ centerLabel() }}</span>\n }\n @if (centerSublabel()) {\n <span class=\"mk-donut__center-sublabel\">{{ centerSublabel() }}</span>\n }\n </div>\n }\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n <span class=\"mk-chart__tooltip-name\">{{ t.name }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.value }} ({{ t.percent }}%)</span>\n </span>\n </div>\n }\n</div>\n\n@if (showLegend()) {\n <ul class=\"mk-chart__legend mk-donut__legend\">\n @for (item of legend(); track item.name; let i = $index) {\n <li class=\"mk-chart__legend-item\">\n @if (interactive()) {\n <button type=\"button\" class=\"mk-chart__legend-button\" (click)=\"emitSlice(i)\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n </button>\n } @else {\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n }\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr><th scope=\"col\">{{ i18n.chartSlice }}</th><th scope=\"col\">{{ i18n.chartValue }}</th></tr>\n </thead>\n <tbody>\n @for (s of slices(); track s.name) {\n <tr><th scope=\"row\">{{ s.name }}</th><td>{{ s.value }}</td></tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1866
1932
  }
1867
1933
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkDonutChart, decorators: [{
1868
1934
  type: Component,
@@ -1870,8 +1936,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
1870
1936
  class: 'mk-chart mk-donut-chart',
1871
1937
  role: 'group',
1872
1938
  '[attr.aria-label]': 'resolvedLabel()',
1873
- }, template: "<div class=\"mk-chart__frame mk-donut__frame\" [style.max-width.px]=\"size()\">\n <svg\n class=\"mk-chart__svg mk-donut__svg\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n @for (g of geom(); track g.index) {\n <path\n class=\"mk-chart__slice\"\n [class.mk-chart__slice--dim]=\"hovered() !== null && hovered() !== g.index\"\n [attr.d]=\"g.path\"\n [style.fill]=\"g.color\"\n (pointerenter)=\"setHover(g.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(g.index, $event)\"\n />\n }\n </svg>\n\n @if (innerRadius() > 0 && (centerLabel() || centerSublabel())) {\n <div class=\"mk-donut__center\">\n @if (centerLabel()) {\n <span class=\"mk-donut__center-label\">{{ centerLabel() }}</span>\n }\n @if (centerSublabel()) {\n <span class=\"mk-donut__center-sublabel\">{{ centerSublabel() }}</span>\n }\n </div>\n }\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n <span class=\"mk-chart__tooltip-name\">{{ t.name }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.value }} ({{ t.percent }}%)</span>\n </span>\n </div>\n }\n</div>\n\n@if (showLegend()) {\n <ul class=\"mk-chart__legend mk-donut__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr><th scope=\"col\">{{ i18n.chartSlice }}</th><th scope=\"col\">{{ i18n.chartValue }}</th></tr>\n </thead>\n <tbody>\n @for (s of slices(); track s.name) {\n <tr><th scope=\"row\">{{ s.name }}</th><td>{{ s.value }}</td></tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"] }]
1874
- }], propDecorators: { slices: [{ type: i0.Input, args: [{ isSignal: true, alias: "slices", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], thickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "thickness", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], centerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerLabel", required: false }] }], centerSublabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerSublabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
1939
+ }, template: "<div class=\"mk-chart__frame mk-donut__frame\" [style.max-width.px]=\"size()\">\n <svg\n class=\"mk-chart__svg mk-donut__svg\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n preserveAspectRatio=\"xMidYMid meet\"\n [attr.aria-hidden]=\"interactive() ? null : true\"\n [attr.aria-label]=\"interactive() ? resolvedLabel() : null\"\n [attr.role]=\"interactive() ? 'group' : null\"\n focusable=\"false\"\n >\n @for (g of geom(); track g.index) {\n <path\n class=\"mk-chart__slice\"\n [class.mk-chart__slice--dim]=\"hovered() !== null && hovered() !== g.index\"\n [attr.d]=\"g.path\"\n [style.fill]=\"g.color\"\n [class.mk-chart__slice--interactive]=\"interactive()\"\n [attr.role]=\"interactive() ? 'button' : null\"\n [attr.tabindex]=\"interactive() ? 0 : null\"\n [attr.aria-label]=\"interactive() ? sliceLabel(g.index) : null\"\n (pointerenter)=\"setHover(g.index)\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(g.index, $event)\"\n (click)=\"emitSlice(g.index)\"\n (keydown)=\"emitSlice(g.index, $event)\"\n (focus)=\"setHover(g.index)\"\n (blur)=\"setHover(null)\"\n />\n }\n </svg>\n\n @if (innerRadius() > 0 && (centerLabel() || centerSublabel())) {\n <div class=\"mk-donut__center\">\n @if (centerLabel()) {\n <span class=\"mk-donut__center-label\">{{ centerLabel() }}</span>\n }\n @if (centerSublabel()) {\n <span class=\"mk-donut__center-sublabel\">{{ centerSublabel() }}</span>\n }\n </div>\n }\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n <span class=\"mk-chart__tooltip-name\">{{ t.name }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.value }} ({{ t.percent }}%)</span>\n </span>\n </div>\n }\n</div>\n\n@if (showLegend()) {\n <ul class=\"mk-chart__legend mk-donut__legend\">\n @for (item of legend(); track item.name; let i = $index) {\n <li class=\"mk-chart__legend-item\">\n @if (interactive()) {\n <button type=\"button\" class=\"mk-chart__legend-button\" (click)=\"emitSlice(i)\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n </button>\n } @else {\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n <span class=\"mk-donut__legend-name\">{{ item.name }}</span>\n <span class=\"mk-donut__legend-value\">{{ item.value }} \u00B7 {{ item.percent }}%</span>\n }\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr><th scope=\"col\">{{ i18n.chartSlice }}</th><th scope=\"col\">{{ i18n.chartValue }}</th></tr>\n </thead>\n <tbody>\n @for (s of slices(); track s.name) {\n <tr><th scope=\"row\">{{ s.name }}</th><td>{{ s.value }}</td></tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"] }]
1940
+ }], propDecorators: { slices: [{ type: i0.Input, args: [{ isSignal: true, alias: "slices", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], thickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "thickness", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], centerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerLabel", required: false }] }], centerSublabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerSublabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], sliceClick: [{ type: i0.Output, args: ["sliceClick"] }] } });
1875
1941
 
1876
1942
  /**
1877
1943
  * Gauge — a single-metric radial dial (a KPI: "68% of quota"). Dependency-free
@@ -2145,7 +2211,7 @@ class MkScatterChart {
2145
2211
  this.tapPin.pin(key, event);
2146
2212
  }
2147
2213
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkScatterChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
2148
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkScatterChart, isStandalone: true, selector: "mk-scatter-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, pointRadius: { classPropertyName: "pointRadius", publicName: "pointRadius", isSignal: true, isRequired: false, transformFunction: null }, bubble: { classPropertyName: "bubble", publicName: "bubble", isSignal: true, isRequired: false, transformFunction: null }, maxRadius: { classPropertyName: "maxRadius", publicName: "maxRadius", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, xLabel: { classPropertyName: "xLabel", publicName: "xLabel", isSignal: true, isRequired: false, transformFunction: null }, yLabel: { classPropertyName: "yLabel", publicName: "yLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-scatter-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Horizontal gridlines + y-axis labels -->\n @for (row of yGrid(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- x-axis labels -->\n @for (col of xGrid(); track col.value) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"col.x\"\n [attr.y]=\"height() - 12\"\n >\n {{ col.label }}\n </text>\n }\n\n <!-- Axis titles -->\n @if (xLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--x\"\n [attr.x]=\"plot().x + plot().w / 2\"\n [attr.y]=\"height() - 1\"\n >\n {{ xLabel() }}\n </text>\n }\n @if (yLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--y\"\n [attr.transform]=\"'rotate(-90 10 ' + (plot().y + plot().h / 2) + ')'\"\n [attr.x]=\"10\"\n [attr.y]=\"plot().y + plot().h / 2\"\n >\n {{ yLabel() }}\n </text>\n }\n\n <!-- Points -->\n @for (p of points(); track $index; let i = $index) {\n <circle\n class=\"mk-chart__point\"\n [class.mk-chart__point--active]=\"hoverKey() === keyOf(i)\"\n [attr.cx]=\"p.cx\"\n [attr.cy]=\"p.cy\"\n [attr.r]=\"p.r\"\n [style.fill]=\"p.color\"\n (pointerenter)=\"setHover(keyOf(i))\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(keyOf(i), $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n {{ t.title }}\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ xLabel() || 'x' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.x }}</span>\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ yLabel() || 'y' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.y }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartSeries }}</th>\n <th scope=\"col\">{{ xLabel() || 'x' }}</th>\n <th scope=\"col\">{{ yLabel() || 'y' }}</th>\n </tr>\n </thead>\n <tbody>\n @for (s of series(); track s.name) {\n @for (p of s.points; track $index) {\n <tr>\n <th scope=\"row\">{{ s.name }}</th>\n <td>{{ p.x }}</td>\n <td>{{ p.y }}</td>\n </tr>\n }\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2214
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkScatterChart, isStandalone: true, selector: "mk-scatter-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, pointRadius: { classPropertyName: "pointRadius", publicName: "pointRadius", isSignal: true, isRequired: false, transformFunction: null }, bubble: { classPropertyName: "bubble", publicName: "bubble", isSignal: true, isRequired: false, transformFunction: null }, maxRadius: { classPropertyName: "maxRadius", publicName: "maxRadius", isSignal: true, isRequired: false, transformFunction: null }, showGrid: { classPropertyName: "showGrid", publicName: "showGrid", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, xLabel: { classPropertyName: "xLabel", publicName: "xLabel", isSignal: true, isRequired: false, transformFunction: null }, yLabel: { classPropertyName: "yLabel", publicName: "yLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-scatter-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Horizontal gridlines + y-axis labels -->\n @for (row of yGrid(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- x-axis labels -->\n @for (col of xGrid(); track col.value) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"col.x\"\n [attr.y]=\"height() - 12\"\n >\n {{ col.label }}\n </text>\n }\n\n <!-- Axis titles -->\n @if (xLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--x\"\n [attr.x]=\"plot().x + plot().w / 2\"\n [attr.y]=\"height() - 1\"\n >\n {{ xLabel() }}\n </text>\n }\n @if (yLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--y\"\n [attr.transform]=\"'rotate(-90 10 ' + (plot().y + plot().h / 2) + ')'\"\n [attr.x]=\"10\"\n [attr.y]=\"plot().y + plot().h / 2\"\n >\n {{ yLabel() }}\n </text>\n }\n\n <!-- Points -->\n @for (p of points(); track $index; let i = $index) {\n <circle\n class=\"mk-chart__point\"\n [class.mk-chart__point--active]=\"hoverKey() === keyOf(i)\"\n [attr.cx]=\"p.cx\"\n [attr.cy]=\"p.cy\"\n [attr.r]=\"p.r\"\n [style.fill]=\"p.color\"\n (pointerenter)=\"setHover(keyOf(i))\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(keyOf(i), $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n {{ t.title }}\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ xLabel() || 'x' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.x }}</span>\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ yLabel() || 'y' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.y }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartSeries }}</th>\n <th scope=\"col\">{{ xLabel() || 'x' }}</th>\n <th scope=\"col\">{{ yLabel() || 'y' }}</th>\n </tr>\n </thead>\n <tbody>\n @for (s of series(); track s.name) {\n @for (p of s.points; track $index) {\n <tr>\n <th scope=\"row\">{{ s.name }}</th>\n <td>{{ p.x }}</td>\n <td>{{ p.y }}</td>\n </tr>\n }\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2149
2215
  }
2150
2216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkScatterChart, decorators: [{
2151
2217
  type: Component,
@@ -2153,7 +2219,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
2153
2219
  class: 'mk-chart mk-scatter-chart',
2154
2220
  role: 'group',
2155
2221
  '[attr.aria-label]': 'resolvedLabel()',
2156
- }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Horizontal gridlines + y-axis labels -->\n @for (row of yGrid(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- x-axis labels -->\n @for (col of xGrid(); track col.value) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"col.x\"\n [attr.y]=\"height() - 12\"\n >\n {{ col.label }}\n </text>\n }\n\n <!-- Axis titles -->\n @if (xLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--x\"\n [attr.x]=\"plot().x + plot().w / 2\"\n [attr.y]=\"height() - 1\"\n >\n {{ xLabel() }}\n </text>\n }\n @if (yLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--y\"\n [attr.transform]=\"'rotate(-90 10 ' + (plot().y + plot().h / 2) + ')'\"\n [attr.x]=\"10\"\n [attr.y]=\"plot().y + plot().h / 2\"\n >\n {{ yLabel() }}\n </text>\n }\n\n <!-- Points -->\n @for (p of points(); track $index; let i = $index) {\n <circle\n class=\"mk-chart__point\"\n [class.mk-chart__point--active]=\"hoverKey() === keyOf(i)\"\n [attr.cx]=\"p.cx\"\n [attr.cy]=\"p.cy\"\n [attr.r]=\"p.r\"\n [style.fill]=\"p.color\"\n (pointerenter)=\"setHover(keyOf(i))\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(keyOf(i), $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n {{ t.title }}\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ xLabel() || 'x' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.x }}</span>\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ yLabel() || 'y' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.y }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartSeries }}</th>\n <th scope=\"col\">{{ xLabel() || 'x' }}</th>\n <th scope=\"col\">{{ yLabel() || 'y' }}</th>\n </tr>\n </thead>\n <tbody>\n @for (s of series(); track s.name) {\n @for (p of s.points; track $index) {\n <tr>\n <th scope=\"row\">{{ s.name }}</th>\n <td>{{ p.x }}</td>\n <td>{{ p.y }}</td>\n </tr>\n }\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"] }]
2222
+ }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Horizontal gridlines + y-axis labels -->\n @for (row of yGrid(); track row.value) {\n @if (showGrid()) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"row.x1\"\n [attr.x2]=\"row.x2\"\n [attr.y1]=\"row.y\"\n [attr.y2]=\"row.y\"\n />\n }\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--y\"\n [attr.x]=\"plot().x - 8\"\n [attr.y]=\"row.y\"\n >\n {{ row.label }}\n </text>\n }\n\n <!-- x-axis labels -->\n @for (col of xGrid(); track col.value) {\n <text\n class=\"mk-chart__axis-label mk-chart__axis-label--x\"\n [attr.x]=\"col.x\"\n [attr.y]=\"height() - 12\"\n >\n {{ col.label }}\n </text>\n }\n\n <!-- Axis titles -->\n @if (xLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--x\"\n [attr.x]=\"plot().x + plot().w / 2\"\n [attr.y]=\"height() - 1\"\n >\n {{ xLabel() }}\n </text>\n }\n @if (yLabel()) {\n <text\n class=\"mk-chart__axis-title mk-chart__axis-title--y\"\n [attr.transform]=\"'rotate(-90 10 ' + (plot().y + plot().h / 2) + ')'\"\n [attr.x]=\"10\"\n [attr.y]=\"plot().y + plot().h / 2\"\n >\n {{ yLabel() }}\n </text>\n }\n\n <!-- Points -->\n @for (p of points(); track $index; let i = $index) {\n <circle\n class=\"mk-chart__point\"\n [class.mk-chart__point--active]=\"hoverKey() === keyOf(i)\"\n [attr.cx]=\"p.cx\"\n [attr.cy]=\"p.cy\"\n [attr.r]=\"p.r\"\n [style.fill]=\"p.color\"\n (pointerenter)=\"setHover(keyOf(i))\"\n (pointerleave)=\"setHover(null)\"\n (pointerdown)=\"pinHover(keyOf(i), $event)\"\n />\n }\n </svg>\n\n @if (tooltip(); as t) {\n <div class=\"mk-chart__tooltip\" [style.left.%]=\"t.left\" [style.top.%]=\"t.top\">\n <span class=\"mk-chart__tooltip-title\">\n <span class=\"mk-chart__swatch\" [style.background]=\"t.color\"></span>\n {{ t.title }}\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ xLabel() || 'x' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.x }}</span>\n </span>\n <span class=\"mk-chart__tooltip-row\">\n <span class=\"mk-chart__tooltip-name\">{{ yLabel() || 'y' }}</span>\n <span class=\"mk-chart__tooltip-value\">{{ t.y }}</span>\n </span>\n </div>\n }\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartSeries }}</th>\n <th scope=\"col\">{{ xLabel() || 'x' }}</th>\n <th scope=\"col\">{{ yLabel() || 'y' }}</th>\n </tr>\n </thead>\n <tbody>\n @for (s of series(); track s.name) {\n @for (p of s.points; track $index) {\n <tr>\n <th scope=\"row\">{{ s.name }}</th>\n <td>{{ p.x }}</td>\n <td>{{ p.y }}</td>\n </tr>\n }\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"] }]
2157
2223
  }], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], pointRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "pointRadius", required: false }] }], bubble: [{ type: i0.Input, args: [{ isSignal: true, alias: "bubble", required: false }] }], maxRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxRadius", required: false }] }], showGrid: [{ type: i0.Input, args: [{ isSignal: true, alias: "showGrid", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], xLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "xLabel", required: false }] }], yLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "yLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2158
2224
 
2159
2225
  /**
@@ -2601,7 +2667,7 @@ class MkRadarChart {
2601
2667
  }, /* @ts-ignore */
2602
2668
  ...(ngDevMode ? [{ debugName: "resolvedLabel" }] : /* istanbul ignore next */ []));
2603
2669
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkRadarChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
2604
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkRadarChart, isStandalone: true, selector: "mk-radar-chart", inputs: { axes: { classPropertyName: "axes", publicName: "axes", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, levels: { classPropertyName: "levels", publicName: "levels", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showDots: { classPropertyName: "showDots", publicName: "showDots", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-radar-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Grid rings -->\n @for (ring of rings(); track ring.key) {\n <polygon class=\"mk-chart__grid mk-radar__ring\" [attr.points]=\"ring.points\" />\n }\n\n <!-- Axis spokes + labels -->\n @for (axis of axisSpokes(); track axis.label) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"width() / 2\"\n [attr.y1]=\"height() / 2\"\n [attr.x2]=\"axis.x\"\n [attr.y2]=\"axis.y\"\n />\n <text\n class=\"mk-chart__axis-label mk-radar__axis-label\"\n [attr.x]=\"axis.lx\"\n [attr.y]=\"axis.ly\"\n [attr.text-anchor]=\"axis.anchor\"\n >\n {{ axis.label }}\n </text>\n }\n\n <!-- Series polygons -->\n @for (r of rendered(); track r.name) {\n <polygon\n class=\"mk-radar__area\"\n [attr.points]=\"r.polygon\"\n [style.fill]=\"r.color\"\n [style.stroke]=\"r.color\"\n />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n </svg>\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartAxis }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (axis of axes(); track axis; let a = $index) {\n <tr>\n <th scope=\"row\">{{ axis }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[a] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2670
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MkRadarChart, isStandalone: true, selector: "mk-radar-chart", inputs: { axes: { classPropertyName: "axes", publicName: "axes", isSignal: true, isRequired: false, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, levels: { classPropertyName: "levels", publicName: "levels", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, showDots: { classPropertyName: "showDots", publicName: "showDots", isSignal: true, isRequired: false, transformFunction: null }, showLegend: { classPropertyName: "showLegend", publicName: "showLegend", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.aria-label": "resolvedLabel()" }, classAttribute: "mk-chart mk-radar-chart" }, ngImport: i0, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Grid rings -->\n @for (ring of rings(); track ring.key) {\n <polygon class=\"mk-chart__grid mk-radar__ring\" [attr.points]=\"ring.points\" />\n }\n\n <!-- Axis spokes + labels -->\n @for (axis of axisSpokes(); track axis.label) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"width() / 2\"\n [attr.y1]=\"height() / 2\"\n [attr.x2]=\"axis.x\"\n [attr.y2]=\"axis.y\"\n />\n <text\n class=\"mk-chart__axis-label mk-radar__axis-label\"\n [attr.x]=\"axis.lx\"\n [attr.y]=\"axis.ly\"\n [attr.text-anchor]=\"axis.anchor\"\n >\n {{ axis.label }}\n </text>\n }\n\n <!-- Series polygons -->\n @for (r of rendered(); track r.name) {\n <polygon\n class=\"mk-radar__area\"\n [attr.points]=\"r.polygon\"\n [style.fill]=\"r.color\"\n [style.stroke]=\"r.color\"\n />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n </svg>\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartAxis }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (axis of axes(); track axis; let a = $index) {\n <tr>\n <th scope=\"row\">{{ axis }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[a] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2605
2671
  }
2606
2672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MkRadarChart, decorators: [{
2607
2673
  type: Component,
@@ -2609,7 +2675,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
2609
2675
  class: 'mk-chart mk-radar-chart',
2610
2676
  role: 'group',
2611
2677
  '[attr.aria-label]': 'resolvedLabel()',
2612
- }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Grid rings -->\n @for (ring of rings(); track ring.key) {\n <polygon class=\"mk-chart__grid mk-radar__ring\" [attr.points]=\"ring.points\" />\n }\n\n <!-- Axis spokes + labels -->\n @for (axis of axisSpokes(); track axis.label) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"width() / 2\"\n [attr.y1]=\"height() / 2\"\n [attr.x2]=\"axis.x\"\n [attr.y2]=\"axis.y\"\n />\n <text\n class=\"mk-chart__axis-label mk-radar__axis-label\"\n [attr.x]=\"axis.lx\"\n [attr.y]=\"axis.ly\"\n [attr.text-anchor]=\"axis.anchor\"\n >\n {{ axis.label }}\n </text>\n }\n\n <!-- Series polygons -->\n @for (r of rendered(); track r.name) {\n <polygon\n class=\"mk-radar__area\"\n [attr.points]=\"r.polygon\"\n [style.fill]=\"r.color\"\n [style.stroke]=\"r.color\"\n />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n </svg>\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartAxis }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (axis of axes(); track axis; let a = $index) {\n <tr>\n <th scope=\"row\">{{ axis }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[a] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}\n"] }]
2678
+ }, template: "<div class=\"mk-chart__frame\">\n <svg\n class=\"mk-chart__svg\"\n [attr.viewBox]=\"'0 0 ' + width() + ' ' + height()\"\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <!-- Grid rings -->\n @for (ring of rings(); track ring.key) {\n <polygon class=\"mk-chart__grid mk-radar__ring\" [attr.points]=\"ring.points\" />\n }\n\n <!-- Axis spokes + labels -->\n @for (axis of axisSpokes(); track axis.label) {\n <line\n class=\"mk-chart__grid\"\n [attr.x1]=\"width() / 2\"\n [attr.y1]=\"height() / 2\"\n [attr.x2]=\"axis.x\"\n [attr.y2]=\"axis.y\"\n />\n <text\n class=\"mk-chart__axis-label mk-radar__axis-label\"\n [attr.x]=\"axis.lx\"\n [attr.y]=\"axis.ly\"\n [attr.text-anchor]=\"axis.anchor\"\n >\n {{ axis.label }}\n </text>\n }\n\n <!-- Series polygons -->\n @for (r of rendered(); track r.name) {\n <polygon\n class=\"mk-radar__area\"\n [attr.points]=\"r.polygon\"\n [style.fill]=\"r.color\"\n [style.stroke]=\"r.color\"\n />\n @if (showDots()) {\n @for (p of r.points; track $index) {\n <circle\n class=\"mk-chart__dot\"\n [attr.cx]=\"p.x\"\n [attr.cy]=\"p.y\"\n r=\"3\"\n [style.fill]=\"r.color\"\n />\n }\n }\n }\n </svg>\n</div>\n\n@if (legendVisible()) {\n <ul class=\"mk-chart__legend\">\n @for (item of legend(); track item.name) {\n <li class=\"mk-chart__legend-item\">\n <span class=\"mk-chart__swatch\" [style.background]=\"item.color\"></span>\n {{ item.name }}\n </li>\n }\n </ul>\n}\n\n<table class=\"mk-chart__sr-table\">\n <caption>{{ resolvedLabel() }}</caption>\n <thead>\n <tr>\n <th scope=\"col\">{{ i18n.chartAxis }}</th>\n @for (s of series(); track s.name) {\n <th scope=\"col\">{{ s.name }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (axis of axes(); track axis; let a = $index) {\n <tr>\n <th scope=\"row\">{{ axis }}</th>\n @for (s of series(); track s.name) {\n <td>{{ s.data[a] }}</td>\n }\n </tr>\n }\n </tbody>\n</table>\n", styles: ["@charset \"UTF-8\";:host{display:block;font-family:var(--mk-font-sans);color:var(--mk-text)}.mk-chart__frame{position:relative}.mk-chart__svg{display:block;width:100%;height:auto;overflow:visible}.mk-chart__grid{stroke:var(--mk-chart-grid);stroke-width:1;vector-effect:non-scaling-stroke}.mk-chart__axis-label{fill:var(--mk-chart-axis);font-size:11px}.mk-chart__axis-label--y{text-anchor:end;dominant-baseline:middle}.mk-chart__axis-label--x{text-anchor:middle;dominant-baseline:hanging}.mk-chart__axis-label--tilted{text-anchor:end;dominant-baseline:middle}.mk-chart__bar{transition:opacity var(--mk-duration-fast) var(--mk-ease-standard),filter var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__bar:hover{filter:brightness(1.08)}.mk-chart__bar--dim{opacity:.4}.mk-chart__area{stroke:none;opacity:.14}.mk-chart__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-chart__dot{stroke:var(--mk-surface);stroke-width:1.5;vector-effect:non-scaling-stroke}.mk-chart__crosshair{stroke:var(--mk-chart-axis);stroke-width:1;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.6}.mk-chart__point{fill-opacity:.72;stroke:var(--mk-surface);stroke-width:1;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill-opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__point:hover,.mk-chart__point--active{fill-opacity:1}.mk-radar__ring{fill:none}.mk-radar__area{fill-opacity:.16;stroke-width:2;stroke-linejoin:round;vector-effect:non-scaling-stroke}.mk-radar__axis-label{dominant-baseline:middle}.mk-chart__axis-title{fill:var(--mk-chart-axis);font-size:11px;font-weight:var(--mk-font-weight-medium)}.mk-chart__axis-title--x,.mk-chart__axis-title--y{text-anchor:middle}.mk-chart__slice{stroke:var(--mk-surface);stroke-width:2;transition:opacity var(--mk-duration-fast) var(--mk-ease-standard)}.mk-chart__slice--dim{opacity:.45}.mk-chart__tooltip{position:absolute;z-index:1;transform:translate(-50%,calc(-100% - 8px));pointer-events:none;display:flex;flex-direction:column;gap:2px;padding:var(--mk-space-2) var(--mk-space-3);background-color:var(--mk-surface);color:var(--mk-text);border:var(--mk-border-width) solid var(--mk-border);border-radius:var(--mk-radius-md);box-shadow:var(--mk-shadow-lg);font-size:var(--mk-font-size-sm);white-space:nowrap}.mk-chart__tooltip-title{font-weight:var(--mk-font-weight-semibold)}.mk-chart__tooltip-row{display:flex;align-items:center;gap:var(--mk-space-2)}.mk-chart__tooltip-name{color:var(--mk-text-muted)}.mk-chart__tooltip-value{margin-inline-start:auto;font-variant-numeric:tabular-nums;font-weight:var(--mk-font-weight-medium)}.mk-chart__swatch{flex:none;width:.75rem;height:.75rem;border-radius:var(--mk-radius-xs)}.mk-chart__legend{display:flex;flex-wrap:wrap;gap:var(--mk-space-2) var(--mk-space-4);margin:var(--mk-space-3) 0 0;padding:0;padding-inline-start:var(--mk-space-2);list-style:none}.mk-chart__legend-item{display:inline-flex;align-items:center;gap:var(--mk-space-2);font-size:var(--mk-font-size-sm);color:var(--mk-text-muted)}.mk-donut__frame{margin:0 auto}.mk-donut__center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;pointer-events:none;text-align:center}.mk-donut__center-label{font-size:var(--mk-font-size-2xl);font-weight:var(--mk-font-weight-bold);line-height:1;color:var(--mk-text);font-variant-numeric:tabular-nums}.mk-donut__center-sublabel{font-size:var(--mk-font-size-xs);color:var(--mk-text-subtle);text-transform:uppercase;letter-spacing:.04em}.mk-donut__legend{flex-direction:column;gap:var(--mk-space-2)}.mk-donut__legend .mk-chart__legend-item{width:100%}.mk-donut__legend-name{color:var(--mk-text)}.mk-donut__legend-value{margin-inline-start:auto;color:var(--mk-text-muted);font-variant-numeric:tabular-nums}.mk-chart__sr-table{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){.mk-chart__bar,.mk-chart__slice{transition:none}}.mk-chart__slice--interactive,.mk-chart__bar--interactive,.mk-chart__band--interactive,.mk-chart__legend-item--interactive{cursor:pointer}.mk-chart__slice--interactive:focus-visible,.mk-chart__bar--interactive:focus-visible,.mk-chart__band--interactive:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}.mk-chart__legend-button{display:inline-flex;align-items:center;gap:inherit;padding:0;margin:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;border-radius:var(--mk-radius-sm)}.mk-chart__legend-button:focus-visible{outline:2px solid var(--mk-primary);outline-offset:2px}\n"] }]
2613
2679
  }], propDecorators: { axes: [{ type: i0.Input, args: [{ isSignal: true, alias: "axes", required: false }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], levels: [{ type: i0.Input, args: [{ isSignal: true, alias: "levels", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], showDots: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDots", required: false }] }], showLegend: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLegend", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
2614
2680
 
2615
2681
  const MARGIN = { top: 10, right: 12, bottom: 10, left: 12 };