@conciso/design-system-angular 2.7.0 → 2.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5444,8 +5444,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5444
5444
  * `1`) macht die Ebene explizit, `.hero-image-caption-title` ist reine CSS-Klasse
5445
5445
  * und trägt keine Heading-Semantik, das Styling bleibt in beiden Fällen identisch.
5446
5446
  *
5447
- * **Entscheidung 3 — `objectPosition` als Style-Binding, die eine Ausnahme von
5448
- * Spec-Randbedingung 6.** Der Bildausschnitt ist eine Eigenschaft des konkreten
5447
+ * **Entscheidung 3 — `objectPosition` als Style-Binding, bewusste Ausnahme von
5448
+ * der Regel, dass Mockup-Inline-Styles nicht in den Wrapper wandern.** Der
5449
+ * Bildausschnitt ist eine Eigenschaft des konkreten
5449
5450
  * Bildes (Motiv, Kopfposition), nicht der Seite — anders als z. B. eine
5450
5451
  * Sektionsfläche, die vom Seitenkontext abhängt. `docs/index.html` setzt ihn
5451
5452
  * deshalb an jedem Hero individuell direkt am `<img>` (z. B. `object-position:center
@@ -5590,12 +5591,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5590
5591
  * umgebendes `<cds-stoerer-set>` bleibt eine Kachel deshalb unsichtbar: Angular hängt
5591
5592
  * projizierten Inhalt ohne passendes `<ng-content>`-Ziel nicht ins DOM.
5592
5593
  *
5593
- * **Entscheidung — Icon als projizierter Inhalt.** Wie in Ticket 05 (`cds-icon-card`,
5594
- * `.scratch/angular-seitenbausteine/issues/05-icon-karte.md`, Abschnitt „Entscheidung:
5595
- * Icon als projizierter Inhalt“) sind die Störer-Icons im Mockup wechselnde
5594
+ * **Entscheidung — Icon als projizierter Inhalt.** Wie bei `cds-icon-card` sind die
5595
+ * Störer-Icons im Mockup wechselnde
5596
5596
  * Heroicons, keine DS-Bereichsglyphen aus der Registry — Inhalt, nicht Chrom. Deshalb
5597
5597
  * Projektion über `<ng-content select="[cdsIcon]">` statt eines `icon`-Inputs.
5598
- * Abweichend von Ticket 05 trägt das projizierte `<svg>` die Klasse `stoerer-icon`
5598
+ * Abweichend von `cds-icon-card` trägt das projizierte `<svg>` die Klasse `stoerer-icon`
5599
5599
  * selbst (zusätzlich zu `cdsIcon`, `viewBox`, `aria-hidden="true"`,
5600
5600
  * `focusable="false"`): `.ep-card-icon` ist dort ein Container, der die Größe per
5601
5601
  * Nachfahren-Selektor (`.ep-card-icon svg`) an ein unverändertes Kind durchreicht.
@@ -5718,8 +5718,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5718
5718
  * `<cds-stoerer>`-Kacheln, das auf der Startseite oben rechts über dem Hero-Bild
5719
5719
  * liegt. Der Positionsrahmen `.stoerer-hero` (umschließt Hero-Bild UND Set,
5720
5720
  * `container-type:inline-size` für die Container-Query-Schwelle) ist bewusst NICHT
5721
- * Teil dieser Komponente, sondern bleibt beim Konsumenten (siehe
5722
- * `.scratch/angular-seitenbausteine/issues/03-stoerer.md`): er umschließt Hero UND
5721
+ * Teil dieser Komponente, sondern bleibt beim Konsumenten: er umschließt Hero UND
5723
5722
  * Set gemeinsam, das könnte diese Komponente als internes Detail nicht leisten, ohne
5724
5723
  * das Hero-Bild selbst zu kennen.
5725
5724
  *
@@ -5741,8 +5740,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5741
5740
  * hat ausschließlich `<li>` als direkte Kinder (`ul.stoerer-list > *` → `["LI","LI"]`),
5742
5741
  * `<cds-stoerer>` selbst taucht im gerenderten DOM nirgends auf — Angular hängt
5743
5742
  * unprojizierten Content ohne passendes `<ng-content>`-Ziel gar nicht erst ein, exakt
5744
- * wie bei `<cds-area-tab>` innerhalb von `<cds-area-tabs>`. Ein `items`-Array (die im
5745
- * Ticket vermerkte Alternative) hätte denselben DOM-Baum ergeben, aber den
5743
+ * wie bei `<cds-area-tab>` innerhalb von `<cds-area-tabs>`. Ein `items`-Array (die
5744
+ * erwogene Alternative) hätte denselben DOM-Baum ergeben, aber den
5746
5745
  * Konsumenten gezwungen, das projizierte Icon jeder Kachel in ein Datenobjekt
5747
5746
  * umzuziehen; mit dieser Lösung bleibt die deklarative, Content-projizierende API
5748
5747
  * erhalten.
@@ -5928,7 +5927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5928
5927
  *
5929
5928
  * **Entscheidung 1 — `href` entscheidet zwischen `<a>` und `<article>`.** Die
5930
5929
  * Doku-Beispiele zeigen die Featured-Card ausschließlich als Link
5931
- * (`a.card.card-elevated.card-featured`), das Ticket verlangt aber ausdrücklich eine
5930
+ * (`a.card.card-elevated.card-featured`), diese Komponente unterstützt aber ausdrücklich eine
5932
5931
  * Variante ohne `<a>`. `.card-elevated` ist nach `CONTRIBUTING.md` §4 („Elevation =
5933
5932
  * Interaktivität“) im CSS auf `a.card-elevated` gescoped — eine `<article>` bekäme
5934
5933
  * den Schatten mit gesetzter Klasse ohnehin nicht. Die Komponente führt die Klasse
@@ -5975,9 +5974,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
5975
5974
  *
5976
5975
  * **Entscheidung 4 — kein CTA- und kein Meta-Input.** Die Doku-Vorlage zeigt
5977
5976
  * zusätzlich einen Meta-Strip (Datum/Ort/Format) und einen `.card-cta-link`-Fuß;
5978
- * das Ticket benennt als API aber nur `title`/`text`/`imageSrc`/`imageAlt`/`href`/
5979
- * `pill`/`area`. Diese Komponente bildet exakt diese Fläche ab, ohne Inputs zu
5980
- * erfinden, die das Ticket nicht vorsieht — ein Meta-Strip oder ein CTA-Fuß wären
5977
+ * diese Komponente benennt als API aber nur `title`/`text`/`imageSrc`/`imageAlt`/`href`/
5978
+ * `pill`/`area`. Diese Komponente bildet exakt diese Fläche ab, ohne zusätzliche Inputs zu
5979
+ * erfinden — ein Meta-Strip oder ein CTA-Fuß wären
5981
5980
  * eine spätere, eigene Erweiterung.
5982
5981
  *
5983
5982
  * Verwendungsguidance dieser Gruppe: siehe Card (`komponenten-cards-teaser-card--verwendung`).
@@ -6170,7 +6169,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6170
6169
  *
6171
6170
  * **Entscheidung 3 — kein `cdsIconCards`-Raster.** `.ep-cards` ist ein reines
6172
6171
  * `display:grid` ohne Struktur oder Verhalten (dieselbe Begründung wie beim Verzicht
6173
- * auf einen `layout-grid`-Wrapper, siehe `spec.md`). Konsumenten schreiben
6172
+ * auf einen `layout-grid`-Wrapper). Konsumenten schreiben
6174
6173
  * `<div class="ep-cards">` von Hand (siehe Story „Im Raster“).
6175
6174
  *
6176
6175
  * Verwendungsguidance dieser Gruppe: siehe Card (`komponenten-cards-teaser-card--verwendung`).
@@ -6471,7 +6470,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6471
6470
  * bereits). Trotzdem baut diese Komponente die `.btn`-Klassen direkt zusammen
6472
6471
  * (Präzedenzfall `download-cta.component.ts`), aus einem härteren Grund als dort:
6473
6472
  * `cds-button` rendert IMMER ein `<button>` — sein Input-Vertrag
6474
- * (`ButtonComponentInputs`) kennt kein `href` — und kann die vom Ticket geforderte
6473
+ * (`ButtonComponentInputs`) kennt kein `href` — und kann die hier nötige
6475
6474
  * Verzweigung „`primaryHref` gesetzt → `<a>`“ strukturell gar nicht erfüllen. Ein
6476
6475
  * projiziertes `<cds-button>` brächte hier also kein Custom-Element-Layoutproblem
6477
6476
  * (kein Kindselektor an `.ep-cta-band` hängt von der DOM-Tiefe ab), sondern schlicht
@@ -6490,9 +6489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6490
6489
  * Farbe wie das Band darunter — unsichtbar. Eine zweite Aktion hätte deshalb
6491
6490
  * zwangsläufig dieselbe Optik wie die erste getragen, keine Hierarchie, nur zwei
6492
6491
  * gleich gewichtete Buttons. Das ist eine CSS-Lücke (kein kontrastsicherer
6493
- * sekundärer On-Band-Stil), festgehalten in
6494
- * `.scratch/angular-seitenbausteine/issues/16-css-luecke-zweite-aktion-auf-band.md`
6495
- * — gemeldet, nicht in diesem Wrapper improvisiert. Solange sie besteht, trägt
6492
+ * sekundärer On-Band-Stil) — gemeldet, nicht in diesem Wrapper improvisiert. Solange sie besteht, trägt
6496
6493
  * `cds-cta-band` nur eine Aktion; ein Konsument mit echtem Bedarf für eine zweite
6497
6494
  * schreibt sie außerhalb der Komponente ins Band hinein (`<ng-content>` gibt es
6498
6495
  * hier bewusst nicht, um genau das nicht als unterstützten Pfad zu suggerieren).
@@ -6682,12 +6679,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6682
6679
  * :638–642`). Ungesetzt (Default) bleibt `<dt>` ohne zusätzliche Klasse, erbt also
6683
6680
  * die umgebende Textfarbe — das deckt Kontexte ohne Bereichsbindung ab.
6684
6681
  *
6685
- * **Über die Ticket-API hinaus:** `area` stand nicht in der ursprünglichen
6686
- * API-Skizze von Ticket 08. Ergänzt, weil ohne ihn KEINES der 3 realen
6682
+ * **Über die ursprüngliche API hinaus:** `area` stand nicht in der ursprünglichen
6683
+ * API-Skizze. Ergänzt, weil ohne ihn KEINES der 3 realen
6687
6684
  * `.ep-facts`-Vorkommen originalgetreu nachgebaut werden könnte — anders als bei
6688
6685
  * `cds-tier`s `area` (dort deckt die Einschränkung eine tatsächliche CSS-Lücke
6689
6686
  * ab) fehlt hier keine CSS-Regel, nur ein API-Hook auf eine bereits vollständige
6690
- * Klasse. Siehe Ticket-Bericht für die Abwägung.
6687
+ * Klasse.
6691
6688
  */
6692
6689
  class FactsComponent {
6693
6690
  /** Fakten-Paare (`<dt>`/`<dd>`), in Darstellungsreihenfolge. */
@@ -6735,8 +6732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6735
6732
  * Nav-Einträge „Standard“ und „Gestreift“). Ausgezählt: außerhalb von `sec-table`
6736
6733
  * selbst kommt `.tbl-wrap` nur zweimal vor, beide auf Beitragsseiten
6737
6734
  * (`docs/index.html:8622`, `15080`) — keine der 24 Beispielseiten außerhalb von
6738
- * Wissensbeiträgen setzt aktuell eine Tabelle ein. Neuntes Ticket der
6739
- * Seitenbausteine-Serie.
6735
+ * Wissensbeiträgen setzt aktuell eine Tabelle ein.
6740
6736
  *
6741
6737
  * **Kein Daten-Input.** Eine `columns`/`rows`-API würde Zellinhalte auf Strings
6742
6738
  * festlegen; die Beispielseiten setzen darin Badges, Links und `data-num`
@@ -6745,7 +6741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6745
6741
  * Hülle: `.tbl-wrap`, `.tbl`, `<caption>` und die Striped-Klasse.
6746
6742
  *
6747
6743
  * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der
6748
- * Ticket-Skizze (dort `caption? = ''`).** Die eigene Doku dieser Komponente
6744
+ * ursprünglichen Skizze (dort `caption? = ''`).** Die eigene Doku dieser Komponente
6749
6745
  * (`storybook-angular/src/docs/komponenten/tabelle.mdx:137`) nennt `<caption>`
6750
6746
  * ausdrücklich „Pflicht, Screenreader lesen den Titel vor, bevor die Zellen
6751
6747
  * vorgelesen werden“ und wiederholt das in den Dos (`tabelle.mdx:147`:
@@ -6779,7 +6775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6779
6775
  * fix (kein Tag-Wechsel wie bei `cdsIconCard`), aber `.tbl-wrap` bräuchte dann
6780
6776
  * ein ZWEITES Element, das der Konsument von Hand um die Tabelle schreiben
6781
6777
  * müsste (`<div class="tbl-wrap" tabindex="0" role="region" aria-label="…">
6782
- * <table cdsTable>…`) — genau die beiden Aufgaben, die laut Ticket am ehesten
6778
+ * <table cdsTable>…`) — genau die beiden Aufgaben, die am ehesten
6783
6779
  * vergessen werden (fokussierbarer, benannter Scroll-Container), blieben dann
6784
6780
  * beim Konsumenten statt bei der Komponente. Der Element-Selektor hält Wrap und
6785
6781
  * Tabelle zusammen in einem Template.
@@ -6808,8 +6804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6808
6804
  * **`.tbl-sort` bleibt außen vor.** Die Klasse existiert
6809
6805
  * (css/components.css:1477–1482), die Sortierlogik nicht — kein zugehöriges
6810
6806
  * JS in `docs/main.js` für die Beispielseiten. Ein Wrapper, der nur den
6811
- * Button-Look lieferte, täuschte Funktion vor, die es nicht gibt. Siehe
6812
- * `.scratch/angular-seitenbausteine/issues/19-fehlende-sortierlogik-tbl-sort.md`.
6807
+ * Button-Look lieferte, täuschte Funktion vor, die es nicht gibt.
6813
6808
  */
6814
6809
  class TableComponent {
6815
6810
  /** Überschrift der Tabelle (`<caption>`, erstes Kind) — Pflicht, siehe Klassendoku. */
@@ -6870,8 +6865,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6870
6865
  * Compare (`cds-compare`) — Wrapper um `.ep-compare*` aus css/components.css
6871
6866
  * (css/components.css:1275–1294): die aufklappbare Vergleichstabelle für den zeilenweisen
6872
6867
  * Direktvergleich mehrerer Pakete/Tarife (Doku-Site `sec-table`, Nav-Eintrag
6873
- * „Vergleichstabelle (aufklappbar)“, `docs/index.html:5182–5204`). Zehntes Ticket der
6874
- * Seitenbausteine-Serie, nach `cds-table` (Ticket 09).
6868
+ * „Vergleichstabelle (aufklappbar)“, `docs/index.html:5182–5204`), nach `cds-table`.
6875
6869
  *
6876
6870
  * **Mit Daten-Input, anders als `cds-table`.** `cds-table` projiziert `<thead>`/`<tbody>`
6877
6871
  * unverändert per `<ng-content>`, weil seine Zellen Badges, Links und `data-num` tragen können
@@ -6894,7 +6888,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6894
6888
  * (WCAG 1.4.1), der `.sr-only`-Text ist deshalb kein optionaler Zusatz, sondern fest verdrahtet,
6895
6889
  * nicht per Input überschreibbar.
6896
6890
  *
6897
- * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der Ticket-Skizze (dort
6891
+ * **`caption` ist Pflicht (`input.required<string>()`), abweichend von der ursprünglichen Skizze (dort
6898
6892
  * kein Input dafür vorgesehen) — dieselbe Begründung wie bei `cds-table`.** Die eigene Doku
6899
6893
  * (`storybook-angular/src/docs/komponenten/tabelle.mdx:91`) nennt `<caption class="sr-only">`
6900
6894
  * ausdrücklich als Teil des Bauteils, und das einzige reale Vorkommen hat eine. Anders als bei
@@ -6903,7 +6897,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6903
6897
  * direkt in die Tabelle springen, ohne den Summary-Text erneut vorgelesen zu bekommen.
6904
6898
  *
6905
6899
  * **`rowsLabel` (erste Kopfzelle, `<th scope="col">Funktion</th>` im Mockup) ist dagegen Beiwerk,
6906
- * optional mit Default `''`.** Auch dafür sieht die Ticket-Skizze keinen Input vor. Den Text fest
6900
+ * optional mit Default `''`.** Auch dafür sieht die ursprüngliche Skizze keinen Input vor. Den Text fest
6907
6901
  * im Template zu verdrahten hieße, AI.Box-Copy in einen wiederverwendbaren Wrapper zu backen
6908
6902
  * (ADR-0007 §2); ihn ganz wegzulassen wich ohne CSS-Befund vom einzigen Beleg ab, ohne dass die
6909
6903
  * Doku das verlangt. Anders als `caption` ist die Kopfzelle nicht barrierefreiheitsrelevant
@@ -6911,8 +6905,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
6911
6905
  * Ecke ohne eigenen Namen. Deshalb Beiwerk, kein Inhalt — das Beispielwort „Funktion“ steht in
6912
6906
  * der Story, nicht in der Klasse.
6913
6907
  *
6914
- * **Natives `<details>`/`<summary>` bleibt erhalten, kein nachgebautes Disclosure** (Ticket-
6915
- * Vorgabe, analog `cds-faq`): Tastaturbedienung und Toggle-Verhalten kommen vom Browser, das CSS
6908
+ * **Natives `<details>`/`<summary>` bleibt erhalten, kein nachgebautes Disclosure**
6909
+ * (analog `cds-faq`): Tastaturbedienung und Toggle-Verhalten kommen vom Browser, das CSS
6916
6910
  * hängt direkt an `[open]` (`.ep-compare[open] .ep-compare-caret`). `<details class="ep-compare">`
6917
6911
  * sitzt deshalb im TEMPLATE, nicht am Host — derselbe Grund wie bei `cds-table`s
6918
6912
  * `.tbl-wrap`/`.tbl`: ein `<cds-compare>`-Host ist ein unbekanntes Custom Element, kein echtes
@@ -7082,14 +7076,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7082
7076
  * Avatar (`div[cdsAvatar]`) — Wrapper um `.article-avatar` aus css/components.css
7083
7077
  * (css/components.css:1520–1536): der Initialen-/Foto-Kreis im Meta-Strip eines
7084
7078
  * Wissensbeitrags (`.article-meta-author`), in der Author-Card (`-lg`) und im
7085
- * Team-Tile-Grid (`-xl`). Elftes Ticket der Seitenbausteine-Serie.
7079
+ * Team-Tile-Grid (`-xl`).
7086
7080
  *
7087
7081
  * **Attributselektor (ADR-0008), gemessen an der Geschwister-Kette.** Ausgezählt in
7088
7082
  * `docs/index.html`: 8 der 11 Instanzen der Grundgröße sitzen als direkte, adjazente
7089
7083
  * Geschwister in einer von 3 `.article-avatar-stack`-Kacheln (2 Avatare in Zeilen
7090
7084
  * 8343–8344, je 3 in Zeilen 8373–8375 und 8404–8406) — genau dort greift
7091
7085
  * `.article-avatar-stack .article-avatar + .article-avatar`
7092
- * (css/components.css:1540–1541), eine Geschwister-Kette (Kriterium `spec.md` 2b).
7086
+ * (css/components.css:1540–1541), eine Geschwister-Kette.
7093
7087
  * Ein Element-Selektor `cds-avatar`, der `.article-avatar` auf einem INNEREN Element
7094
7088
  * rendert (wie `cds-facts` es mit `<dl>` tut, weil `<dl>` ein Custom Element nicht
7095
7089
  * annehmen kann), würde diese Kette brechen: die beiden `.article-avatar`-Knoten
@@ -7117,7 +7111,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7117
7111
  * eigens erfundene Marker-Klasse; der Attributselektor liefert die Zielscheibe für
7118
7112
  * beide Zwecke aus einer Hand, ohne dass der Konsument zwei Attribute schreiben muss.
7119
7113
  *
7120
- * **Initialen werden aus `name` abgeleitet, kein eigener Input** (Ticket-Vorgabe):
7114
+ * **Initialen werden aus `name` abgeleitet, kein eigener Input:**
7121
7115
  * erstes Zeichen des ersten und des letzten durch Whitespace getrennten Worts, groß
7122
7116
  * — ein einzelnes Wort liefert dessen erste zwei Zeichen. Zwei Inputs für dieselbe
7123
7117
  * Information (Name UND Initialen) könnten auseinanderlaufen, sobald nur eines
@@ -7249,14 +7243,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7249
7243
  /**
7250
7244
  * ArticleHeader (`cds-article-header`) — Wrapper um `.article-header` aus
7251
7245
  * css/components.css (css/components.css:1486–1490, 1508–1519): der zentrierte Kopf
7252
- * eines Wissensbeitrags (Breadcrumb, optionale Pill, H1, Lead, Meta-Strip). Elftes
7253
- * Ticket der Seitenbausteine-Serie. Hauptvorlage ist
7246
+ * eines Wissensbeitrags (Breadcrumb, optionale Pill, H1, Lead, Meta-Strip).
7247
+ * Hauptvorlage ist
7254
7248
  * `storybook-angular/src/docs/seitenmuster/wissensbeitrag.mdx`, Abschnitt „Article
7255
- * Header“ — dort steht das für dieses Ticket verbindliche Markup samt Begründung,
7249
+ * Header“ — dort steht das verbindliche Markup samt Begründung,
7256
7250
  * nicht nur das Mockup in `docs/index.html`.
7257
7251
  *
7258
7252
  * **Breadcrumb sitzt im Header — abweichend von der allgemeinen Navigationsregel,
7259
- * bewusst der Ticket-Vorlage folgend.** `docs/index.html:2423` dokumentiert für
7253
+ * bewusst der Hauptvorlage folgend.** `docs/index.html:2423` dokumentiert für
7260
7254
  * Unterseiten allgemein, wörtlich: „Den Breadcrumb nicht in einen zentrierten
7261
7255
  * `.article-header` einbetten, sonst wird er mittig ausgerichtet und bekommt einen
7262
7256
  * abweichenden Abstand zur Nav“ (Tabellenzeile „Nicht“ der Breadcrumb-Doku) — und
@@ -7269,30 +7263,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7269
7263
  * den Breadcrumb INNERHALB von `.article-header` zeigen: 5 kleine Referenz-Boxen in
7270
7264
  * der Doku-Sektion selbst (`docs/index.html:7850`, `8304`, `8331`, `8361`, `8392` —
7271
7265
  * ohne Topnav/Hero/Footer, reine Bauteil-Illustrationen) plus das Code-Beispiel in
7272
- * `wissensbeitrag.mdx`. Das Ticket benennt genau diese Doku (nicht die
7273
- * Beispielseiten) als Hauptvorlage. Diese Komponente folgt der Ticket-Vorgabe
7274
- * (Breadcrumb als Input, im Header) und dokumentiert den Widerspruch als eigenen
7275
- * Befund
7276
- * (`.scratch/angular-seitenbausteine/issues/20-breadcrumb-in-oder-vor-article-header.md`).
7266
+ * `wissensbeitrag.mdx`. Diese Komponente folgt bewusst dieser Doku, nicht den
7267
+ * Beispielseiten (Breadcrumb als Input, im Header), und dokumentiert den
7268
+ * Widerspruch als eigenen Befund.
7277
7269
  * Konsumenten, die der allgemeinen Regel folgen wollen (wie die beiden echten
7278
7270
  * Beispielseiten), lassen `breadcrumb` leer und setzen die Leiste selbst davor
7279
7271
  * (siehe Story „Ohne Breadcrumb“).
7280
7272
  *
7281
- * **Letzter Breadcrumb-Eintrag immer ohne Link, mit `aria-current="page"`** — so vom
7282
- * Ticket als Akzeptanzkriterium gefordert. Die beiden Wissensbeitrag-Inline-Beispiele
7273
+ * **Letzter Breadcrumb-Eintrag immer ohne Link, mit `aria-current="page"`.** Die
7274
+ * beiden Wissensbeitrag-Inline-Beispiele
7283
7275
  * (`docs/index.html:7850–7856`, `wissensbeitrag.mdx`) zeigen dafür nur 2 Einträge,
7284
7276
  * BEIDE als `<a>`, ohne `aria-current` — eine zur Kürze vereinfachte Doku-Skizze,
7285
7277
  * kein vollständiges Barrierefreiheits-Beispiel. Das volle, korrekte Muster (Trenner
7286
7278
  * dekorativ, letzter Eintrag `<span aria-current="page">` ohne Link) steht an
7287
7279
  * anderer Stelle exakt so vor (`docs/index.html:2406–2412` allgemeine
7288
- * Breadcrumb-Doku, `docs/index.html:11023–11030` Stellenanzeige) und ist zusätzlich
7289
- * eine explizite Akzeptanzbedingung des Tickets — die Komponente folgt deshalb
7290
- * diesem Muster für den letzten Array-Eintrag, unabhängig von einem dort eventuell
7291
- * gesetzten `href`.
7280
+ * Breadcrumb-Doku, `docs/index.html:11023–11030` Stellenanzeige) — die Komponente
7281
+ * folgt deshalb diesem Muster für den letzten Array-Eintrag, unabhängig von einem
7282
+ * dort eventuell gesetzten `href`.
7292
7283
  *
7293
7284
  * **Keine bereichsgefärbte Breadcrumb-Verlinkung (`.t-{area}`).** Die
7294
7285
  * Inline-Beispiele färben ihren zweiten (dort letzten) Eintrag mit `.t-ki`/`.t-es`/
7295
- * `.t-wo`; das Ticket sieht dafür aber kein API-Feld vor (`{label, href?}`, kein
7286
+ * `.t-wo`; die API sieht dafür aber kein Feld vor (`{label, href?}`, kein
7296
7287
  * `area` pro Eintrag), und eine Zuordnung „Bereichsfarbe auf den vorletzten
7297
7288
  * Eintrag“ wäre geraten, nicht aus der Doku ableitbar — zumal der gefärbte Eintrag
7298
7289
  * dort ein Link ist, kein `aria-current`-Element, also nicht deckungsgleich mit dem
@@ -7310,7 +7301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7310
7301
  * **Pille rendert nur, wenn `area` UND `pill` gesetzt sind — kein erfundener
7311
7302
  * Default.** `PillComponent.area` ist als `CdsArea` mit einem eigenen Default
7312
7303
  * (`'ki'`) typisiert; diese Komponente führt `area` dagegen als `CdsArea | undefined`
7313
- * (keine Konfigurations-Vorgabe laut Ticket-API). Ein erster Entwurf reichte
7304
+ * (kein eigener Default vorgegeben). Ein erster Entwurf reichte
7314
7305
  * `area()` per `as CdsArea`-Cast durch, damit ein `undefined`-Binding
7315
7306
  * `cds-pill`s eigenen Default überschreiben kann — eine Typ-Lüge, um einen Fall
7316
7307
  * abzudecken, der beim Nachzählen gar nicht vorkommt: **alle 9** `.pill`-Vorkommen
@@ -7339,8 +7330,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7339
7330
  * (`stoerer.component.ts:formattedDate`, inkl. manuellem Aufbau der
7340
7331
  * `Date`-Komponenten gegen den UTC-Mitternacht-Fallstrick von `new Date(iso)`).
7341
7332
  * Diese Komponente tut das NICHT: `date` liefert nur den maschinenlesbaren
7342
- * `datetime`-Wert, `dateLabel` die sichtbare Schreibweise — vom Ticket ausdrücklich
7343
- * als zwei getrennte Inputs vorgegeben. Begründung der Abweichung: Erstens deckt
7333
+ * `datetime`-Wert, `dateLabel` die sichtbare Schreibweise — bewusst als zwei
7334
+ * getrennte Inputs. Begründung der Abweichung: Erstens deckt
7344
7335
  * sich das mit jeder realen Instanz (6 von 6 `.article-meta-date`-Vorkommen tragen
7345
7336
  * einen redaktionell gesetzten Text wie „13. Mai 2026“, keinen von
7346
7337
  * `Intl.DateTimeFormat` erzeugten) — anders als der Störer, dessen Kacheln NUR ein
@@ -7352,22 +7343,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7352
7343
  * ISO-Form, nicht geraten formatiert) — in der Story „Interaktiv“ als Warnfall extra
7353
7344
  * benannt, damit niemand das versehentlich auf eine Produktionsseite bringt.
7354
7345
  *
7355
- * **Meta-Strip nur, wenn es etwas zu zeigen gibt.** `authorName`/`date` sind laut
7356
- * Ticket-API Beiwerk (Default `''`); ausgezählt haben alle 6 realen
7346
+ * **Meta-Strip nur, wenn es etwas zu zeigen gibt.** `authorName`/`date` sind bewusst
7347
+ * Beiwerk (Default `''`); ausgezählt haben alle 6 realen
7357
7348
  * `.article-meta`-Vorkommen sowohl Autor als auch Datum, eine Stellenanzeige
7358
7349
  * (`docs/index.html:11035`) nutzt `.article-header` dagegen KOMPLETT OHNE
7359
7350
  * `.article-meta` (dort ein `<dl>` aus Job-Fakten statt Autor/Datum) — dieser
7360
- * abweichenden Verwendung folgt diese Komponente nicht (sie hat in der Ticket-API
7361
- * keinen Platz), sie belegt aber, dass ein leerer Meta-Strip ein realer Fall ist.
7351
+ * abweichenden Verwendung folgt diese Komponente nicht (dafür ist in der API kein
7352
+ * Feld vorgesehen), sie belegt aber, dass ein leerer Meta-Strip ein realer Fall ist.
7362
7353
  * `.article-meta` (und darin `.article-meta-author`/`.article-meta-sep`) rendern
7363
7354
  * deshalb nur, wenn `authorName()` bzw. `date()` tatsächlich etwas liefern; der
7364
7355
  * Trenner nur, wenn beide Seiten vorhanden sind.
7365
7356
  *
7366
- * **Avatar projiziert über `[cdsAvatar]`, PLUS `cds-avatar-stack`.** Die
7367
- * Ticket-Skizze nennt nur `<ng-content select="[cdsAvatar]">`; ergänzt um den
7357
+ * **Avatar projiziert über `[cdsAvatar]`, PLUS `cds-avatar-stack`.** Der
7358
+ * ursprüngliche Entwurf nennt nur `<ng-content select="[cdsAvatar]">`; ergänzt um den
7368
7359
  * Tag-Selektor `cds-avatar-stack`, weil `AvatarStackComponent` (siehe dort) ein
7369
7360
  * Element-Selektor ist, kein `[cdsAvatar]`-Attribut trägt und sonst nicht in den
7370
- * Meta-Strip projiziert werden könnte — nötig für die vom Ticket geforderte Story
7361
+ * Meta-Strip projiziert werden könnte — nötig für die Story
7371
7362
  * „Mehrere Autor:innen“.
7372
7363
  *
7373
7364
  * **Host als Block.** `.article-header` sitzt am Host und setzt nur
@@ -7522,8 +7513,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7522
7513
  /**
7523
7514
  * ArticleToc (`cds-article-toc`) — Wrapper um `.article-toc*` aus css/components.css
7524
7515
  * (css/components.css:1577–1589): das aufklappbare Inhaltsverzeichnis am Anfang eines
7525
- * Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“).
7526
- * Ausgezählt: genau 2 reale Vorkommen, beide mit 5 Einträgen und identischem
7516
+ * Wissensbeitrags. Ausgezählt: genau 2 reale Vorkommen, beide mit 5 Einträgen und identischem
7527
7517
  * sichtbarem Text „Inhalt“ plus identischem `aria-label`
7528
7518
  * (`docs/index.html:7948–7960`, Doku-Sektion mit Platzhalter-Hrefs `#gt-article-toc`;
7529
7519
  * `docs/index.html:15049–15061`, reale Beispielseite Wissensbeitrag · KI mit echten
@@ -7540,8 +7530,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7540
7530
  * zielt auf `p`, nicht auf `details` — ein `<cds-article-toc>`-Host zwischen
7541
7531
  * `.article-body` und dem `<details>` bricht deshalb keine Selektorkette.
7542
7532
  *
7543
- * **Natives `<details>`/`<summary>`, kein nachgebautes Disclosure** (Ticket-Vorgabe,
7544
- * Akzeptanzkriterium): Tastaturbedienung (Enter/Space auf `<summary>`) und
7533
+ * **Natives `<details>`/`<summary>`, kein nachgebautes Disclosure:** Tastaturbedienung
7534
+ * (Enter/Space auf `<summary>`) und
7545
7535
  * Toggle-Zustand kommen vollständig vom Browser, das CSS hängt direkt an `[open]`
7546
7536
  * (`.article-toc[open] .article-toc-caret`, css/components.css:1583). `<details
7547
7537
  * class="article-toc">` sitzt deshalb im TEMPLATE, nicht am Host — derselbe Grund
@@ -7554,8 +7544,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7554
7544
  * Form (natives `<details>`, SVG-Caret, `[open]`-Rotation über
7555
7545
  * `transition:transform`), aber nicht die Aufgabe: `cds-compare` trägt eine
7556
7546
  * Vergleichstabelle mit `columns`/`rows`/`toggled`-Output, dieses Bauteil trägt
7557
- * eine reine Link-Liste ohne Output (siehe API-Vorgabe des Tickets, die für dieses
7558
- * Bauteil bewusst keinen `toggled` vorsieht). Zwei gleiche Stellen sind ein
7547
+ * eine reine Link-Liste ohne Output (die API sieht für dieses
7548
+ * Bauteil bewusst keinen `toggled` vor). Zwei gleiche Stellen sind ein
7559
7549
  * Zufall, kein Muster — eine gemeinsame Basisklasse für zwei Vorkommen hätte nur
7560
7550
  * das `<details>`+Caret-Skelett gebündelt und dabei entweder Verhalten
7561
7551
  * vereinheitlicht (ein erzwungener `toggled`-Output ohne Zweck hier) oder so viel
@@ -7649,8 +7639,7 @@ let uid = 0;
7649
7639
  * ArticleCallout (`cds-article-callout`) — Wrapper um `.article-callout*` aus
7650
7640
  * css/components.css (css/components.css:1591–1600): der bereichsgetönte
7651
7641
  * Aside-Block für Praxis-Beispiele und „In der Realität“-Einschübe im Lauftext
7652
- * eines Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie
7653
- * („Artikel-Körper“). Ausgezählt: 5 reale Vorkommen, je eines pro Bereich in der
7642
+ * eines Wissensbeitrags. Ausgezählt: 5 reale Vorkommen, je eines pro Bereich in der
7654
7643
  * Doku-Sektion (`docs/index.html:8086–8115`, co/ki/es/wo) plus eines in der realen
7655
7644
  * Beispielseite Wissensbeitrag · KI (`docs/index.html:15110–15114`).
7656
7645
  *
@@ -7667,8 +7656,8 @@ let uid = 0;
7667
7656
  * `.article-body` und dem `<aside>` bricht deshalb keine Selektorkette.
7668
7657
  *
7669
7658
  * **Projizierte Absätze bleiben direkte Kinder von `.article-callout`, kein
7670
- * `<div>` um `<ng-content>`** (Ticket-Vorgabe: `.article-callout > p` ist ein
7671
- * Kindselektor, css/components.css:1600). `<ng-content>` selbst fügt kein
7659
+ * `<div>` um `<ng-content>`:** `.article-callout > p` ist ein
7660
+ * Kindselektor, css/components.css:1600. `<ng-content>` selbst fügt kein
7672
7661
  * DOM-Element ein — es verschiebt nur die vom Konsumenten geschriebenen
7673
7662
  * `<p>`-Elemente an ihre Stelle direkt im `<aside>`, eine Ebene unter dem
7674
7663
  * `<cds-article-callout>`-Host, aber ohne zusätzlichen Knoten dazwischen. Geprüft
@@ -7695,8 +7684,7 @@ let uid = 0;
7695
7684
  * verloren, wenn kein bereichsspezifischer Override existiert (`co` und „kein
7696
7685
  * `data-area`“ zeigen `--tx-primary` statt `--co-700`). Diese Komponente
7697
7686
  * reproduziert exakt die Klassen und die Struktur des Mockups und zeigt deshalb
7698
- * denselben, vorbestehenden Fehler wie rohes HTML — siehe
7699
- * `.scratch/angular-seitenbausteine/issues/22-css-luecke-callout-eyebrow-spezifitaet.md`.
7687
+ * denselben, vorbestehenden Fehler wie rohes HTML.
7700
7688
  *
7701
7689
  * **`aria-labelledby` auf `<aside>`, sobald `eyebrow` gesetzt ist — Zusatz zum
7702
7690
  * Mockup, keine CSS-Änderung.** `<aside>` hat implizit die Landmark-Rolle
@@ -7704,8 +7692,7 @@ let uid = 0;
7704
7692
  * mehrere gleichnamige Landmarks ohne zugänglichen Namen. Gemessen mit
7705
7693
  * axe-core an rohem Markup ohne Angular (zwei `<aside class="article-callout">`
7706
7694
  * ohne Auszeichnung): `landmark-unique` schlägt fehl, unabhängig von dieser
7707
- * Komponente — das Mockup selbst kennt diese Auszeichnung nicht (siehe
7708
- * `.scratch/angular-seitenbausteine/issues/23-doku-luecke-callout-landmark-label.md`).
7695
+ * Komponente — das Mockup selbst kennt diese Auszeichnung nicht.
7709
7696
  * Die Eyebrow ist bereits ein prägnanter, vom Redakteur gepflegter Kurztext
7710
7697
  * genau für diesen Zweck (z. B. „In der Praxis“) — sie bekommt deshalb eine
7711
7698
  * generierte `id`, auf die `aria-labelledby` zeigt, sobald sie existiert. Ohne
@@ -7767,8 +7754,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7767
7754
  * ArticleFigure (`cds-article-figure`) — Wrapper um `.article-figure`/
7768
7755
  * `.article-figcaption` aus css/components.css (css/components.css:1573–1575):
7769
7756
  * das redaktionelle Inline-Bild mit optionaler Bildunterschrift im Lauftext eines
7770
- * Wissensbeitrags. Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“).
7771
- * Ausgezählt: 3 reale Vorkommen — Doku-Demo mit Caption
7757
+ * Wissensbeitrags. Ausgezählt: 3 reale Vorkommen — Doku-Demo mit Caption
7772
7758
  * (`docs/index.html:8028–8031`), reales Body-Bild mit Caption in der Beispielseite
7773
7759
  * Wissensbeitrag · KI (`docs/index.html:15115–15118`, identischer Bild- und
7774
7760
  * Caption-Text wie die Doku-Demo) und ein dritter, captionsloser Sonderfall direkt
@@ -7796,11 +7782,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7796
7782
  * identisches Bild wie Vorschaubild für Wiedererkennung“), sitzt außerhalb von
7797
7783
  * `.article-body` und bekommt seine 720-px-Breite über ein
7798
7784
  * Inline-`style="max-width:720px;margin:0 auto"` am Konsumenten, nicht über die
7799
- * Komponente (Randbedingung 6 der Spec: Mockup-Inline-Styles wandern nicht in
7800
- * den Wrapper). Die Ticket-API sieht dafür kein `loading`/`fetchpriority`-Input
7785
+ * Komponente (Mockup-Inline-Styles wandern bewusst nicht in den Wrapper). Die
7786
+ * API sieht dafür kein `loading`/`fetchpriority`-Input
7801
7787
  * vor; dieses Bauteil deckt deshalb den (häufigeren, dokumentierten) In-Body-Fall
7802
7788
  * ab. Für den Lead-Bild-Sonderfall bleibt `<figure class="article-figure">` roh
7803
- * schreibbar oder — sofern die Semantik passt — `cds-hero-image` (Ticket 02) zu
7789
+ * schreibbar oder — sofern die Semantik passt — `cds-hero-image` zu
7804
7790
  * prüfen.
7805
7791
  *
7806
7792
  * **`alt` und `caption` sind bewusst getrennte Pflicht-/Beiwerk-Inputs, keine
@@ -7850,12 +7836,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7850
7836
  * ArticlePullquote (`cds-article-pullquote`) — Wrapper um `.article-pullquote` aus
7851
7837
  * css/components.css (css/components.css:1608–1612): die typografische
7852
7838
  * Hervorhebung eines Satzes aus dem eigenen Lauftext eines Wissensbeitrags.
7853
- * Zwölftes Ticket der Seitenbausteine-Serie („Artikel-Körper“). Ausgezählt: 2
7854
- * reale Vorkommen, wortgleich, beide `data-area="ki"` — Doku-Demo
7839
+ * Ausgezählt: 2 reale Vorkommen, wortgleich, beide `data-area="ki"` — Doku-Demo
7855
7840
  * (`docs/index.html:8136`) und reale Beispielseite Wissensbeitrag · KI
7856
7841
  * (`docs/index.html:15075`).
7857
7842
  *
7858
- * **Nicht `cds-blockquote` (`BlockquoteComponent`, `.bq`) — Ticket-Vorgabe, im
7843
+ * **Nicht `cds-blockquote` (`BlockquoteComponent`, `.bq`) — im
7859
7844
  * JSDoc beider Bauteile wechselseitig abgegrenzt.** Pull-Quote und Blockquote
7860
7845
  * teilen die typografische Familie (Serif, bereichsgefärbter Linksakzent in
7861
7846
  * `{area}-500`), aber nicht den Zweck, dokumentiert in `wissensbeitrag.mdx`,
@@ -7926,8 +7911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7926
7911
  /**
7927
7912
  * AuthorCard (`div[cdsAuthorCard]`) — Wrapper um `.author-card` aus css/components.css
7928
7913
  * (css/components.css:1602–1606): der Avatar-plus-Bio-Strip am Ende eines
7929
- * Wissensbeitrags, einzeln oder mehrfach in `cds-author-card-group`. Dreizehntes und
7930
- * letztes Ticket der Seitenbausteine-Serie. Ausgezählt: 17 reale Vorkommen in
7914
+ * Wissensbeitrags, einzeln oder mehrfach in `cds-author-card-group`. Ausgezählt: 17 reale Vorkommen in
7931
7915
  * `docs/index.html` — 4 einzelstehend (2 Doku-Demos `docs/index.html:8193,8207`, 1
7932
7916
  * Artikel-Demo `8424`, 1 reale Beispielseite `15179`) und 13 in fünf Gruppen (siehe
7933
7917
  * `AuthorCardGroupComponent`).
@@ -7975,8 +7959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7975
7959
  * ausschließlich vom `area`-Input, den der Konsument direkt an das projizierte
7976
7960
  * `[cdsAvatar]` bindet (siehe unten). Ein `area`-Input, der hier nur `data-area` ohne
7977
7961
  * jede CSS-Wirkung setzt, wäre eine erfundene Konfiguration ohne Gegenwert — Befund
7978
- * gemeldet, nicht im Wrapper geflickt (ADR-0001):
7979
- * `.scratch/angular-seitenbausteine/issues/24-css-luecke-author-card-data-area.md`.
7962
+ * gemeldet, nicht im Wrapper geflickt (ADR-0001).
7980
7963
  *
7981
7964
  * **Avatar projiziert über `[cdsAvatar]`, wie bei `cds-article-header`.** Der
7982
7965
  * Konsument setzt Größe (`size="lg"`, css/components.css:1527) und Bereich
@@ -7986,15 +7969,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
7986
7969
  *
7987
7970
  * **Eyebrow als `<h3>`, nur wenn gesetzt** (Beiwerk, Default `''`) — deckungsgleich
7988
7971
  * mit allen 4 einzelstehenden realen Vorkommen: 2 tragen `<h3 class="author-card-eyebrow">`
7989
- * (`docs/index.html:8196,8427`, „Über den Autor“/„Über die Autorin“, Ticket-Vorgabe:
7972
+ * (`docs/index.html:8196,8427`, „Über den Autor“/„Über die Autorin“:
7990
7973
  * eine Ebene unter dem `<h2>` des Article-Body), die anderen 2 (Doku-Demos ohne
7991
7974
  * umgebende Artikelstruktur) haben gar keinen. Innerhalb einer Gruppe trägt laut
7992
7975
  * `wissensbeitrag.mdx` („Eyebrow-Konvention“) keine einzelne Karte mehr einen eigenen
7993
7976
  * Eyebrow — die Gruppen-Überschrift ersetzt sie (siehe `AuthorCardGroupComponent`);
7994
7977
  * Konsumenten lassen `eyebrow` dafür einfach leer.
7995
7978
  *
7996
- * **`roleLabel`, NICHT `role` wie im Ticket-Text — gemessene Abweichung, kein
7997
- * Freihand-Entscheid.** Ein erster Entwurf folgte der Ticket-API wörtlich
7979
+ * **`roleLabel`, NICHT `role` wie in einem ersten Entwurf — gemessene Abweichung, kein
7980
+ * Freihand-Entscheid.** Der erste Entwurf setzte `role` wörtlich um
7998
7981
  * (`role`-Input, mit `role="…"` als schlichtem Attribut in den Stories gesetzt, wie
7999
7982
  * `name`/`bio`/`eyebrow`). Storybooks eingebauter a11y-Check (`aria-roles`) schlug
8000
7983
  * darauf für JEDE Story mit echtem Rollentext fehl: `role` ist ein globales
@@ -8008,7 +7991,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
8008
7991
  * (`grep -rn "readonly role" angular-lib/projects/design-system-angular/src/lib/`
8009
7992
  * zeigt nur diese drei). Diese Komponente folgt demselben, bereits etablierten
8010
7993
  * Muster statt die Kollision ein viertes Mal zu wiederholen — CSS-Klasse bleibt
8011
- * unverändert `.author-card-role`, nur der Input-Name weicht vom Ticket-Text ab.
7994
+ * unverändert `.author-card-role`, nur der Input-Name weicht vom ursprünglichen Entwurf ab.
8012
7995
  */
8013
7996
  class AuthorCardComponent {
8014
7997
  /** Name (`.author-card-name`). */
@@ -8072,8 +8055,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
8072
8055
  * AuthorCardGroup (`cds-author-card-group`) — Wrapper um `.author-card-group` aus
8073
8056
  * css/components.css (css/components.css:1547–1563): bündelt mehrere `[cdsAuthorCard]`
8074
8057
  * am Ende eines Wissensbeitrags, gestapelt (Default) oder als zweispaltiges Raster
8075
- * (`is-grid`, css/components.css:1555). Dreizehntes und letztes Ticket der
8076
- * Seitenbausteine-Serie. Ausgezählt: 5 reale Gruppen — 2 gestapelt in der
8058
+ * (`is-grid`, css/components.css:1555). Ausgezählt: 5 reale Gruppen — 2 gestapelt in der
8077
8059
  * Artikel-Demo (`docs/index.html:8440,8465`, je 2 bzw. 3 Karten), 2 `is-grid`
8078
8060
  * (Doku-Demo `9112`, reale Beispielseite Scrum-Training `13811`, je 4 Karten) und 0
8079
8061
  * `is-grid`-Vorkommen im Wissensbeitrag selbst — `wissensbeitrag.mdx` verweist für
@@ -8180,7 +8162,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
8180
8162
  * ausschließlich von hier re-exportiert — es gibt keine sekundären Entry-Points
8181
8163
  * (siehe docs/adr/0004-verteilung-und-versionierung.md).
8182
8164
  *
8183
- * Vollständig umgezogen (Tickets 01–09, siehe docs/adr/0002 und 0003): alle
8165
+ * Vollständig umgezogen (siehe docs/adr/0002 und 0003): alle
8184
8166
  * Komponenten leben hier in der Lib, storybook-angular enthält nur noch
8185
8167
  * Stories und importiert ausschließlich von hier.
8186
8168
  */