@besaitech/ng-design-system 0.0.70 → 0.0.72

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.
package/README.md CHANGED
@@ -264,6 +264,35 @@ they fall back to the configured labels.
264
264
 
265
265
  Custom tooltip body: `<ng-template sdsChartTooltip let-tip>…</ng-template>` inside any chart.
266
266
 
267
+ **Rich text** (Tiptap / ProseMirror) — a **secondary entry point**, `@besaitech/ng-design-system/rich-text`,
268
+ for the same reason as the charts: ProseMirror stays in the lazy chunk of the page that edits rich text.
269
+
270
+ ```ts
271
+ import { SdsRichTextEditor, SDS_RICH_TEXT_LABELS } from '@besaitech/ng-design-system/rich-text';
272
+ ```
273
+
274
+ | Component | Selector | Notes |
275
+ | --- | --- | --- |
276
+ | `SdsRichTextEditor` | `<sds-rich-text-editor>` | CVA over an HTML string (`''` when empty). `[tools]` (headings, bold, italic, underline, strike, lists, quote, link, divider, clear, undo/redo) is the toolbar AND the schema; `rows` / `maxRows`, `maxLength` + counter, `label`, `hint`, `error`, `invalid`, `required`, `readonly`, `disabled`, `appearance` (default·filled), `contentLanguage` (spell-check language); `focus()`, `insertText(text)` |
277
+ | `SdsLocalizedRichTextEditor` | `<sds-localized-rich-text-editor>` | CVA over an `SdsLocalizedValue` (`{ fr: '<p>…</p>', de: … }`), like `sds-localized-input`: `languages`, `currentLanguage`, `requiredLanguages`, switcher at the end of the toolbar with filled / required / missing dots, empty translations pruned. One editor per language underneath — undo, caret and spell-check stay per language. Same rich-text inputs as above (`maxLength` is per language) |
278
+ | `SdsRichTextToolbarEnd` | `[sdsRichTextToolbarEnd]` | Marks content projected at the end of the toolbar (kept in `readonly`): a language switcher, "insert variable" buttons calling `editor.insertText(…)` |
279
+
280
+ The emitted HTML is clean by construction: no inline styles, nothing outside the enabled tools, and links
281
+ limited to http(s), mailto, tel, site-relative paths and anchors (`sdsSafeHref`) with
282
+ `rel="noopener noreferrer nofollow"` — still sanitise stored HTML when you display it. ⌘/Ctrl+K opens the
283
+ link field and is not passed on to an app-wide ⌘K palette. Strings are English by default: translate them
284
+ per instance with `[labels]` (a `Partial<SdsRichTextLabels>`, follows a live language switch) or app-wide with
285
+ `{ provide: SDS_RICH_TEXT_LABELS, useValue: { bold: 'Gras', … } }`.
286
+
287
+ ```html
288
+ <sds-rich-text-editor
289
+ label="Présentation"
290
+ [tools]="['heading2', 'bold', 'italic', 'bulletList', 'orderedList', 'link', 'undo', 'redo']"
291
+ [maxLength]="2000"
292
+ formControlName="description"
293
+ />
294
+ ```
295
+
267
296
  ## Theme & cross-app preferences
268
297
 
269
298
  `SdsThemeService` holds the person's **mode** — `'system' | 'light' | 'dark'`, persisted to `localStorage`
package/charts/index.d.ts CHANGED
@@ -132,6 +132,58 @@ declare class SdsChartTooltip {
132
132
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdsChartTooltip, "ng-template[sdsChartTooltip]", never, {}, {}, never, never, true, never>;
133
133
  }
134
134
 
135
+ /** One legend entry, as handed to a custom swatch template. */
136
+ interface SdsChartLegendEntry<T = any> {
137
+ /** The series key, or the slice name (donut). */
138
+ key: string;
139
+ /** The label printed next to the swatch. */
140
+ label: string;
141
+ /** The colour the chart draws this entry in (any CSS colour). */
142
+ color: string;
143
+ /** True while the entry is toggled off from the legend. The chart already fades your swatch. */
144
+ hidden: boolean;
145
+ /**
146
+ * Donut: the slice's first source row — read your own fields from it (an icon, an id) — or `null` for the
147
+ * folded "Other" slice. Series charts (line, bar, scatter): always `null`.
148
+ */
149
+ row: T | null;
150
+ /** Donut: true for the folded "Other" slice. */
151
+ other: boolean;
152
+ }
153
+ /** Context of an `ng-template[sdsChartLegendSwatch]`. */
154
+ interface SdsChartLegendSwatchContext<T = any> {
155
+ $implicit: SdsChartLegendEntry<T>;
156
+ }
157
+ /**
158
+ * Replace the coloured swatch in front of each legend label with your own markup — an avatar, an icon, a
159
+ * logo. The template receives the entry as `$implicit` ({ key, label, color, hidden, row, other }); on a
160
+ * donut `row` is the slice's source row, so the swatch can show what the app knows about that category.
161
+ *
162
+ * Only the swatch is replaced: the chart keeps the label, the value/share, the toggle button, the hover
163
+ * emphasis and the keyboard behaviour, and fades the swatch while its entry is hidden. Keep it small
164
+ * (~20 px) and decorative — the label already names the entry. Return the default look for some entries
165
+ * (e.g. the "Other" slice) by drawing a dot in `entry.color`.
166
+ *
167
+ * Works on line, bar, scatter and donut charts.
168
+ *
169
+ * @example
170
+ * <sds-donut-chart [data]="spend" category="name" value="amount" color="color">
171
+ * <ng-template sdsChartLegendSwatch let-entry>
172
+ * @if (entry.row) {
173
+ * <app-category-avatar [icon]="entry.row.icon" [color]="entry.color" [size]="20" />
174
+ * } @else {
175
+ * <span class="h-2.5 w-2.5 rounded-full" [style.background]="entry.color"></span>
176
+ * }
177
+ * </ng-template>
178
+ * </sds-donut-chart>
179
+ */
180
+ declare class SdsChartLegendSwatch {
181
+ readonly template: TemplateRef<SdsChartLegendSwatchContext<any>>;
182
+ static ngTemplateContextGuard(_dir: SdsChartLegendSwatch, ctx: unknown): ctx is SdsChartLegendSwatchContext;
183
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsChartLegendSwatch, never>;
184
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdsChartLegendSwatch, "ng-template[sdsChartLegendSwatch]", never, {}, {}, never, never, true, never>;
185
+ }
186
+
135
187
  interface PlotRect {
136
188
  left: number;
137
189
  top: number;
@@ -163,6 +215,10 @@ interface LegendItem {
163
215
  /** Optional trailing text — a value or a share (the donut's direct labels). */
164
216
  detail?: string;
165
217
  dashed?: boolean;
218
+ /** Donut: the slice's first source row (handed to a custom swatch template); null for "Other". */
219
+ row?: unknown;
220
+ /** Donut: the folded "Other" slice. */
221
+ other?: boolean;
166
222
  }
167
223
  interface ChartTable {
168
224
  columns: string[];
@@ -250,6 +306,8 @@ declare class SdsLineChart<T = any> {
250
306
  /** A point was clicked (the series nearest the pointer) or activated with Enter. */
251
307
  readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
252
308
  protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
309
+ /** A projected `sdsChartLegendSwatch` template, drawn instead of each legend entry's swatch. */
310
+ protected readonly customSwatch: _angular_core.Signal<SdsChartLegendSwatch | undefined>;
253
311
  protected readonly uid: string;
254
312
  protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
255
313
  protected readonly active: _angular_core.WritableSignal<number | null>;
@@ -339,7 +397,7 @@ declare class SdsLineChart<T = any> {
339
397
  protected readonly label: _angular_core.Signal<string>;
340
398
  protected readonly table: _angular_core.Signal<ChartTable>;
341
399
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsLineChart<any>, never>;
342
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsLineChart<any>, "sds-line-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "xType": { "alias": "xType"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "curve": { "alias": "curve"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "endLabels": { "alias": "endLabels"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "highlight": { "alias": "highlight"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
400
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsLineChart<any>, "sds-line-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "xType": { "alias": "xType"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "curve": { "alias": "curve"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "markers": { "alias": "markers"; "required": false; "isSignal": true; }; "endLabels": { "alias": "endLabels"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "highlight": { "alias": "highlight"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip", "customSwatch"], never, true, never>;
343
401
  }
344
402
 
345
403
  /** `vertical` = columns rising from the category axis; `horizontal` = bars (best for long labels / rankings). */
@@ -409,6 +467,8 @@ declare class SdsBarChart<T = any> {
409
467
  /** A bar (or a category, from the keyboard) was clicked. */
410
468
  readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
411
469
  protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
470
+ /** A projected `sdsChartLegendSwatch` template, drawn instead of each legend entry's swatch. */
471
+ protected readonly customSwatch: _angular_core.Signal<SdsChartLegendSwatch | undefined>;
412
472
  protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
413
473
  protected readonly active: _angular_core.WritableSignal<number | null>;
414
474
  protected readonly keyboard: _angular_core.WritableSignal<boolean>;
@@ -519,7 +579,7 @@ declare class SdsBarChart<T = any> {
519
579
  protected readonly label: _angular_core.Signal<string>;
520
580
  protected readonly table: _angular_core.Signal<ChartTable>;
521
581
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsBarChart<any>, never>;
522
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsBarChart<any>, "sds-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxBarSize": { "alias": "maxBarSize"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "highlightCategories": { "alias": "highlightCategories"; "required": false; "isSignal": true; }; "barColor": { "alias": "barColor"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
582
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsBarChart<any>, "sds-bar-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "series": { "alias": "series"; "required": true; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "stack": { "alias": "stack"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxBarSize": { "alias": "maxBarSize"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "highlightCategories": { "alias": "highlightCategories"; "required": false; "isSignal": true; }; "barColor": { "alias": "barColor"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip", "customSwatch"], never, true, never>;
523
583
  }
524
584
 
525
585
  interface Dot<T> {
@@ -607,6 +667,8 @@ declare class SdsScatterChart<T = any> {
607
667
  readonly hidden: _angular_core.ModelSignal<readonly string[]>;
608
668
  readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
609
669
  protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
670
+ /** A projected `sdsChartLegendSwatch` template, drawn instead of each legend entry's swatch. */
671
+ protected readonly customSwatch: _angular_core.Signal<SdsChartLegendSwatch | undefined>;
610
672
  protected readonly uid: string;
611
673
  protected readonly legendFocus: _angular_core.WritableSignal<string | null>;
612
674
  protected readonly active: _angular_core.WritableSignal<number | null>;
@@ -692,7 +754,7 @@ declare class SdsScatterChart<T = any> {
692
754
  protected readonly label: _angular_core.Signal<string>;
693
755
  protected readonly table: _angular_core.Signal<ChartTable>;
694
756
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsScatterChart<any>, never>;
695
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsScatterChart<any>, "sds-scatter-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "pointLabel": { "alias": "pointLabel"; "required": false; "isSignal": true; }; "groupOrder": { "alias": "groupOrder"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "maxRadius": { "alias": "maxRadius"; "required": false; "isSignal": true; }; "trendline": { "alias": "trendline"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "xScale": { "alias": "xScale"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "xMin": { "alias": "xMin"; "required": false; "isSignal": true; }; "xMax": { "alias": "xMax"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "sizeFormat": { "alias": "sizeFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "sizeLabel": { "alias": "sizeLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
757
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsScatterChart<any>, "sds-scatter-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": true; "isSignal": true; }; "y": { "alias": "y"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "pointLabel": { "alias": "pointLabel"; "required": false; "isSignal": true; }; "groupOrder": { "alias": "groupOrder"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "radius": { "alias": "radius"; "required": false; "isSignal": true; }; "maxRadius": { "alias": "maxRadius"; "required": false; "isSignal": true; }; "trendline": { "alias": "trendline"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "annotations": { "alias": "annotations"; "required": false; "isSignal": true; }; "xScale": { "alias": "xScale"; "required": false; "isSignal": true; }; "yScale": { "alias": "yScale"; "required": false; "isSignal": true; }; "xMin": { "alias": "xMin"; "required": false; "isSignal": true; }; "xMax": { "alias": "xMax"; "required": false; "isSignal": true; }; "yMin": { "alias": "yMin"; "required": false; "isSignal": true; }; "yMax": { "alias": "yMax"; "required": false; "isSignal": true; }; "includeZero": { "alias": "includeZero"; "required": false; "isSignal": true; }; "xFormat": { "alias": "xFormat"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "sizeFormat": { "alias": "sizeFormat"; "required": false; "isSignal": true; }; "xLabel": { "alias": "xLabel"; "required": false; "isSignal": true; }; "yLabel": { "alias": "yLabel"; "required": false; "isSignal": true; }; "sizeLabel": { "alias": "sizeLabel"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip", "customSwatch"], never, true, never>;
696
758
  }
697
759
 
698
760
  /** `donut` has a hole for a headline figure; `pie` is solid. */
@@ -760,6 +822,8 @@ declare class SdsDonutChart<T = any> {
760
822
  readonly hidden: _angular_core.ModelSignal<readonly string[]>;
761
823
  readonly pointClick: _angular_core.OutputEmitterRef<SdsChartPointEvent<T>>;
762
824
  protected readonly customTooltip: _angular_core.Signal<SdsChartTooltip | undefined>;
825
+ /** A projected `sdsChartLegendSwatch` template, drawn instead of each legend entry's swatch. */
826
+ protected readonly customSwatch: _angular_core.Signal<SdsChartLegendSwatch | undefined>;
763
827
  protected readonly focus: _angular_core.WritableSignal<string | null>;
764
828
  protected readonly active: _angular_core.WritableSignal<string | null>;
765
829
  protected readonly keyboard: _angular_core.WritableSignal<boolean>;
@@ -829,7 +893,7 @@ declare class SdsDonutChart<T = any> {
829
893
  protected readonly label: _angular_core.Signal<string>;
830
894
  protected readonly table: _angular_core.Signal<ChartTable>;
831
895
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdsDonutChart<any>, never>;
832
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsDonutChart<any>, "sds-donut-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "category": { "alias": "category"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "half": { "alias": "half"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "maxSlices": { "alias": "maxSlices"; "required": false; "isSignal": true; }; "otherLabel": { "alias": "otherLabel"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "legendValue": { "alias": "legendValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip"], never, true, never>;
896
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsDonutChart<any>, "sds-donut-chart", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "category": { "alias": "category"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "half": { "alias": "half"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "maxSlices": { "alias": "maxSlices"; "required": false; "isSignal": true; }; "otherLabel": { "alias": "otherLabel"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "legend": { "alias": "legend"; "required": false; "isSignal": true; }; "legendValue": { "alias": "legendValue"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "tableToggle": { "alias": "tableToggle"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "hidden": "hiddenChange"; "pointClick": "pointClick"; }, ["customTooltip", "customSwatch"], never, true, never>;
833
897
  }
834
898
 
835
899
  /** `sequential` = magnitude (one hue, pale → strong); `diverging` = polarity around a midpoint. */
@@ -1229,7 +1293,7 @@ declare class SdsKpi {
1229
1293
  readonly trendLabels: _angular_core.InputSignal<readonly string[] | null>;
1230
1294
  readonly trendVariant: _angular_core.InputSignal<SdsSparklineVariant>;
1231
1295
  readonly trendColor: _angular_core.InputSignal<string | null>;
1232
- readonly icon: _angular_core.InputSignal<"x" | "search" | "filter" | "menu" | "table" | "copy" | "square" | "chart-column" | "chart-line" | "chart-bar" | "chart-area" | "chart-pie" | "chart-scatter" | "grid-3x3" | "activity" | "gauge" | "trending-up" | "trending-down" | "clipboard-list" | "credit-card" | "external-link" | "languages" | "megaphone" | "monitor" | "store" | "user-round" | "home" | "user-plus" | "user-check" | "hand" | "users" | "bike" | "building-2" | "package" | "package-plus" | "package-open" | "rotate-ccw" | "bar-chart-3" | "log-out" | "panel-left-close" | "panel-left-open" | "panel-left" | "calendar" | "chevron-right" | "chevron-left" | "chevron-down" | "chevron-up" | "plus" | "minus" | "chevrons-left" | "chevrons-right" | "check" | "alert-circle" | "info" | "type" | "tag" | "ticket" | "square-check" | "circle-dot" | "circle-user" | "layout-grid" | "panels-top-left" | "panel-top" | "rows-3" | "book-open" | "palette" | "bell" | "phone" | "settings" | "align-left" | "toggle-left" | "arrow-up" | "arrow-down" | "chevrons-up-down" | "chevrons-up" | "chevrons-down" | "star" | "message-square" | "qr-code" | "eye" | "eye-off" | "user" | "check-circle" | "arrows-clockwise" | "file-text" | "file-check" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | "locate-fixed" | "locate-off" | "bug" | "scroll-text" | "moon" | "sun" | "search-x" | "command" | "sparkles" | "triangle-alert" | "octagon-x" | "ban" | "ellipsis" | "ellipsis-vertical" | "grip-vertical" | "upload" | "image" | "image-off" | "utensils" | "zoom-in" | "zoom-out" | "trash-2" | "clock" | "pencil" | "circle-help" | "stock" | "allergen-cereals-gluten" | "allergen-crustaceans" | "allergen-eggs" | "allergen-fish" | "allergen-peanuts" | "allergen-soybeans" | "allergen-milk" | "allergen-nuts" | "allergen-celery" | "allergen-mustard" | "allergen-sesame" | "allergen-sulphites" | "allergen-lupin" | "allergen-molluscs" | null>;
1296
+ readonly icon: _angular_core.InputSignal<"x" | "search" | "bold" | "link" | "filter" | "menu" | "table" | "copy" | "square" | "list" | "chart-column" | "chart-line" | "chart-bar" | "chart-area" | "chart-pie" | "chart-scatter" | "grid-3x3" | "activity" | "gauge" | "trending-up" | "trending-down" | "clipboard-list" | "credit-card" | "external-link" | "languages" | "megaphone" | "monitor" | "store" | "user-round" | "home" | "user-plus" | "user-check" | "hand" | "users" | "bike" | "building-2" | "package" | "package-plus" | "package-open" | "rotate-ccw" | "bar-chart-3" | "log-out" | "panel-left-close" | "panel-left-open" | "panel-left" | "calendar" | "chevron-right" | "chevron-left" | "chevron-down" | "chevron-up" | "plus" | "minus" | "chevrons-left" | "chevrons-right" | "check" | "alert-circle" | "info" | "type" | "tag" | "ticket" | "square-check" | "circle-dot" | "circle-user" | "layout-grid" | "panels-top-left" | "panel-top" | "rows-3" | "book-open" | "palette" | "bell" | "phone" | "settings" | "align-left" | "toggle-left" | "arrow-up" | "arrow-down" | "chevrons-up-down" | "chevrons-up" | "chevrons-down" | "star" | "message-square" | "qr-code" | "eye" | "eye-off" | "user" | "check-circle" | "arrows-clockwise" | "file-text" | "file-check" | "hash" | "map-pin" | "inbox" | "arrow-right" | "refresh-cw" | "loader-circle" | "locate-fixed" | "locate-off" | "bug" | "scroll-text" | "moon" | "sun" | "search-x" | "command" | "sparkles" | "triangle-alert" | "octagon-x" | "ban" | "ellipsis" | "ellipsis-vertical" | "grip-vertical" | "upload" | "image" | "image-off" | "utensils" | "zoom-in" | "zoom-out" | "trash-2" | "clock" | "pencil" | "circle-help" | "stock" | "allergen-cereals-gluten" | "allergen-crustaceans" | "allergen-eggs" | "allergen-fish" | "allergen-peanuts" | "allergen-soybeans" | "allergen-milk" | "allergen-nuts" | "allergen-celery" | "allergen-mustard" | "allergen-sesame" | "allergen-sulphites" | "allergen-lupin" | "allergen-molluscs" | "italic" | "underline" | "strikethrough" | "heading-2" | "heading-3" | "pilcrow" | "list-ordered" | "text-quote" | "unlink" | "undo-2" | "redo-2" | "remove-formatting" | null>;
1233
1297
  /** Shown under the value when there is no change to report. */
1234
1298
  readonly hint: _angular_core.InputSignal<string>;
1235
1299
  readonly size: _angular_core.InputSignal<SdsKpiSize>;
@@ -1253,5 +1317,5 @@ declare class SdsKpi {
1253
1317
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdsKpi, "sds-kpi", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "previous": { "alias": "previous"; "required": false; "isSignal": true; }; "delta": { "alias": "delta"; "required": false; "isSignal": true; }; "deltaMode": { "alias": "deltaMode"; "required": false; "isSignal": true; }; "deltaLabel": { "alias": "deltaLabel"; "required": false; "isSignal": true; }; "upIsGood": { "alias": "upIsGood"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendLabels": { "alias": "trendLabels"; "required": false; "isSignal": true; }; "trendVariant": { "alias": "trendVariant"; "required": false; "isSignal": true; }; "trendColor": { "alias": "trendColor"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1254
1318
  }
1255
1319
 
1256
- export { SDS_DONUT_OTHER_KEY, SdsBarChart, SdsChartTooltip, SdsDonutChart, SdsHeatmap, SdsKpi, SdsLineChart, SdsScatterChart, SdsSparkline, SdsTreemap };
1257
- export type { SdsAccessor, SdsBarOrientation, SdsBarSort, SdsChartAnnotation, SdsChartGrid, SdsChartLegend, SdsChartPointEvent, SdsChartReferenceBand, SdsChartReferenceLine, SdsChartScale, SdsChartSeries, SdsChartStack, SdsChartTone, SdsChartTooltipContext, SdsChartTooltipRow, SdsChartXType, SdsDonutLegendValue, SdsDonutSort, SdsDonutVariant, SdsHeatmapScheme, SdsKpiAppearance, SdsKpiDeltaMode, SdsKpiSize, SdsLineCurve, SdsLineMarkers, SdsNumberFormat, SdsSparklineVariant, SdsTreemapNode, SdsXFormat, SdsXValue };
1320
+ export { SDS_DONUT_OTHER_KEY, SdsBarChart, SdsChartLegendSwatch, SdsChartTooltip, SdsDonutChart, SdsHeatmap, SdsKpi, SdsLineChart, SdsScatterChart, SdsSparkline, SdsTreemap };
1321
+ export type { SdsAccessor, SdsBarOrientation, SdsBarSort, SdsChartAnnotation, SdsChartGrid, SdsChartLegend, SdsChartLegendEntry, SdsChartLegendSwatchContext, SdsChartPointEvent, SdsChartReferenceBand, SdsChartReferenceLine, SdsChartScale, SdsChartSeries, SdsChartStack, SdsChartTone, SdsChartTooltipContext, SdsChartTooltipRow, SdsChartXType, SdsDonutLegendValue, SdsDonutSort, SdsDonutVariant, SdsHeatmapScheme, SdsKpiAppearance, SdsKpiDeltaMode, SdsKpiSize, SdsLineCurve, SdsLineMarkers, SdsNumberFormat, SdsSparklineVariant, SdsTreemapNode, SdsXFormat, SdsXValue };