@conciso/design-system-mcp 0.0.0-bootstrap.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.
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/bin/cds-mcp.mjs +9 -0
- package/package.json +48 -0
- package/snapshot/manifests/components.json +617 -0
- package/snapshot/manifests/docs.json +293 -0
- package/snapshot/services/addon-docs/mdx/beispielseiten-/303/274bersicht--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-barrierefreiheit--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-design-tokens--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-einrichtung--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-elevation--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-icons--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-responsive--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/grundlagen-spacing-grid--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-buchungsformular--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-buttons--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-call-to-action--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-cards-teaser--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-chips-badges-pills--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-code-block--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-dropdowns--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-feedback--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-footer--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-hero--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-inputs-forms--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-navigation--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-sektion--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-slider-carousel--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-tabelle--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-theme-umschalter--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/komponenten-zitate-testimonials--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/marke-bildsprache--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/marke-brand-areas--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/marke-logo--verwendung.json +18 -0
- package/snapshot/services/addon-docs/mdx/marke-markenrad--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/referenzen-quellen--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-angebots-detailseite--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-beitrags/303/274bersicht--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-seminar-/302/267-training--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-veranstaltung--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-veranstaltungs/303/274bersicht--/303/274bersicht.json +18 -0
- package/snapshot/services/addon-docs/mdx/seitenmuster-wissensbeitrag--/303/274bersicht.json +18 -0
- package/snapshot/services/core/docgen/grundlagen-farben.json +3 -0
- package/snapshot/services/core/docgen/grundlagen-typografie.json +3 -0
- package/snapshot/services/core/docgen/komponenten-buttons-button.json +183 -0
- package/snapshot/services/core/docgen/komponenten-call-to-action-cta-band.json +131 -0
- package/snapshot/services/core/docgen/komponenten-call-to-action-downloadcta.json +182 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-card.json +146 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-feature-liste.json +128 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-featured-karte.json +158 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-icon-karte.json +111 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-klickbare-karte.json +161 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-statcard.json +115 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-statstrip.json +58 -0
- package/snapshot/services/core/docgen/komponenten-cards-teaser-tier-trenner.json +56 -0
- package/snapshot/services/core/docgen/komponenten-chips-badges-pills-bereichs-badge.json +63 -0
- package/snapshot/services/core/docgen/komponenten-chips-badges-pills-chip.json +95 -0
- package/snapshot/services/core/docgen/komponenten-chips-badges-pills-pill.json +78 -0
- package/snapshot/services/core/docgen/komponenten-chips-badges-pills-status-badge.json +63 -0
- package/snapshot/services/core/docgen/komponenten-code-block-code-block.json +91 -0
- package/snapshot/services/core/docgen/komponenten-dropdowns-combobox.json +224 -0
- package/snapshot/services/core/docgen/komponenten-dropdowns-custom-select.json +173 -0
- package/snapshot/services/core/docgen/komponenten-feedback-snackbar.json +97 -0
- package/snapshot/services/core/docgen/komponenten-footer-komplett.json +21 -0
- package/snapshot/services/core/docgen/komponenten-footer-oberer-teil.json +39 -0
- package/snapshot/services/core/docgen/komponenten-footer-unterer-teil.json +105 -0
- package/snapshot/services/core/docgen/komponenten-hero-hero-bild.json +162 -0
- package/snapshot/services/core/docgen/komponenten-hero-st/303/266rer.json +41 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-auswahlfeld.json +192 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-checkbox.json +182 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-radio.json +181 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-skala.json +179 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-slider.json +259 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-textbereich.json +190 -0
- package/snapshot/services/core/docgen/komponenten-inputs-forms-textfeld.json +207 -0
- package/snapshot/services/core/docgen/komponenten-navigation-topnav.json +186 -0
- package/snapshot/services/core/docgen/komponenten-sektion-sektion.json +113 -0
- package/snapshot/services/core/docgen/komponenten-slider-carousel-carousel.json +92 -0
- package/snapshot/services/core/docgen/komponenten-slider-carousel-logocarousel.json +92 -0
- package/snapshot/services/core/docgen/komponenten-tabelle-tabelle.json +74 -0
- package/snapshot/services/core/docgen/komponenten-tabelle-vergleichstabelle.json +142 -0
- package/snapshot/services/core/docgen/komponenten-theme-umschalter-cycle-button.json +41 -0
- package/snapshot/services/core/docgen/komponenten-theme-umschalter-dropdown.json +41 -0
- package/snapshot/services/core/docgen/komponenten-theme-umschalter-segment.json +41 -0
- package/snapshot/services/core/docgen/komponenten-zitate-testimonials-blockquote.json +96 -0
- package/snapshot/services/core/docgen/komponenten-zitate-testimonials-teamvoice.json +130 -0
- package/snapshot/services/core/docgen/komponenten-zitate-testimonials-testimonial.json +96 -0
- package/snapshot/services/core/docgen/marke-brand-areas-areatabs.json +75 -0
- package/snapshot/services/core/docgen/marke-logo-logo.json +71 -0
- package/snapshot/services/core/docgen/seitenmuster-seminar-/302/267-training-fakten-liste.json +79 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-article-header.json +196 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-author-card.json +91 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-avatar.json +100 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-callout.json +64 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-faq.json +41 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-figure.json +73 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-inhaltsverzeichnis.json +75 -0
- package/snapshot/services/core/docgen/seitenmuster-wissensbeitrag-pull-quote.json +63 -0
- package/snapshot/services/core/story-docs/grundlagen-farben.json +19 -0
- package/snapshot/services/core/story-docs/grundlagen-typografie.json +25 -0
- package/snapshot/services/core/story-docs/komponenten-buttons-button.json +48 -0
- package/snapshot/services/core/story-docs/komponenten-call-to-action-cta-band.json +27 -0
- package/snapshot/services/core/story-docs/komponenten-call-to-action-downloadcta.json +17 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-card.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-feature-liste.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-featured-karte.json +36 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-icon-karte.json +41 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-klickbare-karte.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-statcard.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-statstrip.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-cards-teaser-tier-trenner.json +22 -0
- package/snapshot/services/core/story-docs/komponenten-chips-badges-pills-bereichs-badge.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-chips-badges-pills-chip.json +27 -0
- package/snapshot/services/core/story-docs/komponenten-chips-badges-pills-pill.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-chips-badges-pills-status-badge.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-code-block-code-block.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-dropdowns-combobox.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-dropdowns-custom-select.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-feedback-snackbar.json +27 -0
- package/snapshot/services/core/story-docs/komponenten-footer-komplett.json +22 -0
- package/snapshot/services/core/story-docs/komponenten-footer-oberer-teil.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-footer-unterer-teil.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-hero-hero-bild.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-hero-st/303/266rer.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-auswahlfeld.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-checkbox.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-radio.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-skala.json +42 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-slider.json +37 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-textbereich.json +27 -0
- package/snapshot/services/core/story-docs/komponenten-inputs-forms-textfeld.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-navigation-topnav.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-sektion-sektion.json +41 -0
- package/snapshot/services/core/story-docs/komponenten-slider-carousel-carousel.json +31 -0
- package/snapshot/services/core/story-docs/komponenten-slider-carousel-logocarousel.json +27 -0
- package/snapshot/services/core/story-docs/komponenten-tabelle-tabelle.json +36 -0
- package/snapshot/services/core/story-docs/komponenten-tabelle-vergleichstabelle.json +32 -0
- package/snapshot/services/core/story-docs/komponenten-theme-umschalter-cycle-button.json +31 -0
- package/snapshot/services/core/story-docs/komponenten-theme-umschalter-dropdown.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-theme-umschalter-segment.json +26 -0
- package/snapshot/services/core/story-docs/komponenten-zitate-testimonials-blockquote.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-zitate-testimonials-teamvoice.json +21 -0
- package/snapshot/services/core/story-docs/komponenten-zitate-testimonials-testimonial.json +21 -0
- package/snapshot/services/core/story-docs/marke-brand-areas-areatabs.json +26 -0
- package/snapshot/services/core/story-docs/marke-logo-logo.json +23 -0
- package/snapshot/services/core/story-docs/seitenmuster-seminar-/302/267-training-fakten-liste.json +21 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-article-header.json +37 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-author-card.json +31 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-avatar.json +32 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-callout.json +26 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-faq.json +27 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-figure.json +22 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-inhaltsverzeichnis.json +27 -0
- package/snapshot/services/core/story-docs/seitenmuster-wissensbeitrag-pull-quote.json +21 -0
- package/src/instructions.mjs +38 -0
- package/src/server.mjs +111 -0
- package/src/version-check.mjs +80 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"marke-brand-areas-areatabs": {
|
|
4
|
+
"id": "marke-brand-areas-areatabs",
|
|
5
|
+
"name": "AreaTabsComponent",
|
|
6
|
+
"path": "./src/lib/area-tabs/area-tabs.stories.ts",
|
|
7
|
+
"description": "AreaTabs — Wrapper um `.area-tabs` / `.atab` / `.atab-content` aus\ncss/components.css → „Area Tabs“. Bereichsgefärbte Tab-Leiste: der aktive Tab\nsetzt `--atab-color` (Bereichs-700) für Text + Unterstrich, der Punkt nutzt\nBereichs-500. Umschalten per Klick (aria-selected / sichtbares Panel).\n\nTabs werden deklarativ als `<cds-area-tab>`-Kinder projiziert; jeder Tab trägt\n`area` + `label` und BELIEBIGEN Inhalt (Markup/Komponenten), der ins Panel\ngerendert wird. Der aktive Index ist über `[(active)]` steuerbar.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"active": {
|
|
11
|
+
"name": "active",
|
|
12
|
+
"description": "Index des aktiven Tabs. Two-Way (`[(active)]`).",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "number"
|
|
15
|
+
},
|
|
16
|
+
"table": {
|
|
17
|
+
"category": "inputs",
|
|
18
|
+
"type": {
|
|
19
|
+
"summary": "number"
|
|
20
|
+
},
|
|
21
|
+
"defaultValue": {
|
|
22
|
+
"summary": 0
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"ariaLabel": {
|
|
27
|
+
"name": "ariaLabel",
|
|
28
|
+
"description": "Zugänglicher Name der Tab-Leiste (WAI-ARIA verlangt aria-label/-labelledby).",
|
|
29
|
+
"type": {
|
|
30
|
+
"name": "string"
|
|
31
|
+
},
|
|
32
|
+
"table": {
|
|
33
|
+
"category": "inputs",
|
|
34
|
+
"type": {
|
|
35
|
+
"summary": "string"
|
|
36
|
+
},
|
|
37
|
+
"defaultValue": {
|
|
38
|
+
"summary": "Bereiche"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"activeChange": {
|
|
43
|
+
"name": "activeChange",
|
|
44
|
+
"description": "Index des aktiven Tabs. Two-Way (`[(active)]`).",
|
|
45
|
+
"type": {
|
|
46
|
+
"name": "other",
|
|
47
|
+
"value": "void"
|
|
48
|
+
},
|
|
49
|
+
"action": "activeChange",
|
|
50
|
+
"table": {
|
|
51
|
+
"category": "outputs",
|
|
52
|
+
"type": {
|
|
53
|
+
"summary": "(e: number) => void"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"apiDescription": "## Inputs\n\n```\nexport type AreaTabsComponentInputs = {\n /**\n * Index des aktiven Tabs. Two-Way (`[(active)]`).\n *\n * @default 0\n */\n active?: number; // two-way: [(active)]\n /**\n * Zugänglicher Name der Tab-Leiste (WAI-ARIA verlangt aria-label/-labelledby).\n *\n * @default Bereiche\n */\n ariaLabel?: string;\n}\n```\n\n## Outputs\n\n```\nexport type AreaTabsComponentOutputs = {\n /** Index des aktiven Tabs. Two-Way (`[(active)]`). */\n activeChange: (e: number) => void;\n}\n```",
|
|
59
|
+
"renderer": "angular",
|
|
60
|
+
"angularComponentMeta": {
|
|
61
|
+
"name": "AreaTabsComponent",
|
|
62
|
+
"selector": "cds-area-tabs",
|
|
63
|
+
"standalone": true,
|
|
64
|
+
"inputs": [
|
|
65
|
+
"active",
|
|
66
|
+
"ariaLabel"
|
|
67
|
+
],
|
|
68
|
+
"outputs": [
|
|
69
|
+
"activeChange"
|
|
70
|
+
],
|
|
71
|
+
"enums": []
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"marke-logo-logo": {
|
|
4
|
+
"id": "marke-logo-logo",
|
|
5
|
+
"name": "LogoComponent",
|
|
6
|
+
"path": "./src/lib/logo/logo.stories.ts",
|
|
7
|
+
"description": "Logo — einzelne Logo-Kachel (`.logo-tile` aus css/components.css).\n\nRendert bevorzugt ein **Bild** (`src`); ohne Bild fällt es auf den Text-`label`\nals Platzhalter zurück (`.logo-placeholder`). So lässt es sich sowohl im\nLogo-Carousel als auch eigenständig verwenden (Partner-Leiste, „Bekannt aus“-Reihe,\nFooter). Die Host-Klasse `logo-tile` trägt Flex-Zentrierung/Padding aus der portablen CSS.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"alt": {
|
|
11
|
+
"name": "alt",
|
|
12
|
+
"description": "Alt-Text des Bilds (Fallback: `label`).",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "string"
|
|
15
|
+
},
|
|
16
|
+
"table": {
|
|
17
|
+
"category": "inputs",
|
|
18
|
+
"type": {
|
|
19
|
+
"summary": "string"
|
|
20
|
+
},
|
|
21
|
+
"defaultValue": {
|
|
22
|
+
"summary": ""
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"label": {
|
|
27
|
+
"name": "label",
|
|
28
|
+
"type": {
|
|
29
|
+
"name": "string",
|
|
30
|
+
"required": true
|
|
31
|
+
},
|
|
32
|
+
"table": {
|
|
33
|
+
"category": "inputs",
|
|
34
|
+
"type": {
|
|
35
|
+
"summary": "string"
|
|
36
|
+
},
|
|
37
|
+
"defaultValue": {}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"src": {
|
|
41
|
+
"name": "src",
|
|
42
|
+
"description": "Bildquelle; gesetzt → Bild statt Text-Platzhalter.",
|
|
43
|
+
"type": {
|
|
44
|
+
"name": "string"
|
|
45
|
+
},
|
|
46
|
+
"table": {
|
|
47
|
+
"category": "inputs",
|
|
48
|
+
"type": {
|
|
49
|
+
"summary": "string"
|
|
50
|
+
},
|
|
51
|
+
"defaultValue": {}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"apiDescription": "## Inputs\n\n```\nexport type LogoComponentInputs = {\n /**\n * Alt-Text des Bilds (Fallback: `label`).\n *\n * @default ''\n */\n alt?: string;\n label: string;\n /** Bildquelle; gesetzt → Bild statt Text-Platzhalter. */\n src?: string;\n}\n```",
|
|
56
|
+
"renderer": "angular",
|
|
57
|
+
"angularComponentMeta": {
|
|
58
|
+
"name": "LogoComponent",
|
|
59
|
+
"selector": "cds-logo",
|
|
60
|
+
"standalone": true,
|
|
61
|
+
"inputs": [
|
|
62
|
+
"alt",
|
|
63
|
+
"label",
|
|
64
|
+
"src"
|
|
65
|
+
],
|
|
66
|
+
"outputs": [],
|
|
67
|
+
"enums": []
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
package/snapshot/services/core/docgen/seitenmuster-seminar-/302/267-training-fakten-liste.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"seitenmuster-seminar-·-training-fakten-liste": {
|
|
4
|
+
"id": "seitenmuster-seminar-·-training-fakten-liste",
|
|
5
|
+
"name": "FactsComponent",
|
|
6
|
+
"path": "./src/lib/facts/facts.stories.ts",
|
|
7
|
+
"description": "Facts (`cds-facts`) — Wrapper um `.ep-facts` aus css/components.css\n(css/components.css:1261–1272): die Definitionsliste für die harten Eckdaten\neines Angebots (Termin, Dauer, Ort, Preis), einspaltig mit Haarlinie zwischen\nden Paaren oder als `.is-grid` zweispaltig für Kästen, die neben Inhalt stehen.\nBewusst ohne eigenen Rahmen und ohne Fläche, sie zieht in einen vorhandenen\nContainer ein (Angebots-Box, Sticky-Sidebar) — Doku-Sektion\n`docs/index.html:9069` (`gt-seminar-fakten`), Beispielseiten `docs/index.html:\n9076–9082`, `13718–13726`, `16293–16300`.\n\n**Element-Selektor, kein Attribut (ADR-0008-Standardfall).** Ausgezählt: keines\nder 3 `.ep-facts`-Vorkommen in `docs/index.html` sitzt in einem `.layout-grid`\nmit `col-*`, keines wird von einem Grid-/Flex-Elternteil in der Höhe gedehnt\n(der Flex-Fall in Zeile 16290 ist `flex-direction:column`, dort füllen Block-\nElemente die Breite ihres Containers unabhängig von einer zusätzlichen\nWrapper-Ebene — anders als bei `.ep-card`/ADR-0008 Fall 1 geht es dort um Höhe,\ndie durch Block-Layout NICHT automatisch nach unten durchgereicht wird). Das\nTag variiert nicht (immer `<dl>`). Analog zu `cds-faq` (`faq.component.ts`, das\nintern `<details>` in einem `<div class=\"ep-faq\">` rendert) trägt hier die\nINNERE `<dl class=\"ep-facts\">` die CSS-Klasse, nicht der `<cds-facts>`-Host: die\nSemantik einer Definitionsliste hängt am `<dl>`-Tag selbst, ein Custom-Element\nkann dieses Tag nicht annehmen. Da `.ep-facts > div + div` ausschließlich\nNachfahren INNERHALB der eigenen Vorlage anspricht, bricht eine zusätzliche\nHost-Ebene darüber nichts — anders als bei `cds-section` (Fall 2) hängt hier\nkeine von außen gesetzte Fläche oder ein von außen adressierter Nachfahre an\ndieser Tiefe.\n\n**`<dl>`/`<div>`/`<dt>`/`<dd>` exakt wie vom CSS erwartet.** `.ep-facts > div +\ndiv` (css/components.css:1262) setzt Haarlinie und Abstand ab dem ZWEITEN Paar;\nohne das umschließende `<div>` pro Paar griffe der Selektor nicht. Jedes\n`items()`-Element wird deshalb zu genau einem `<div><dt>…</dt><dd>…</dd></div>`.\n\n**`area` färbt `<dt>` über `.t-{area}`, nicht über `data-area`.** Anders als bei\n`cds-feature`/`cds-icon-card` kennt `.ep-facts` selbst kein `[data-area]`; der\nCSS-Kommentar zu dieser Klasse (`css/components.css:1259`) benennt\nstattdessen ausdrücklich „Bereichston der Labels über `.t-XX` im Markup\n(dark-safe), nie als Inline-Farbe“ als sanktionierten Weg. Ausgezählt: alle 3\n`.ep-facts`-Vorkommen in `docs/index.html` setzen `.t-wo` auf JEDEM `<dt>`\nderselben Liste (nie gemischt, nie eine andere Bereichsfarbe) — ein optionaler\n`area`-Input, der `.t-{area}` einheitlich auf alle `<dt>` der Instanz anwendet,\nbildet dieses Muster nach, ohne einen Farbwert zu erfinden (`.t-XX` ist eine\nbestehende, bereits kontrast- und dark-mode-geprüfte Utility, `css/components.css\n:638–642`). Ungesetzt (Default) bleibt `<dt>` ohne zusätzliche Klasse, erbt also\ndie umgebende Textfarbe — das deckt Kontexte ohne Bereichsbindung ab.\n\n**Über die Ticket-API hinaus:** `area` stand nicht in der ursprünglichen\nAPI-Skizze von Ticket 08. Ergänzt, weil ohne ihn KEINES der 3 realen\n`.ep-facts`-Vorkommen originalgetreu nachgebaut werden könnte — anders als bei\n`cds-tier`s `area` (dort deckt die Einschränkung eine tatsächliche CSS-Lücke\nab) fehlt hier keine CSS-Regel, nur ein API-Hook auf eine bereits vollständige\nKlasse. Siehe Ticket-Bericht für die Abwägung.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"area": {
|
|
11
|
+
"name": "area",
|
|
12
|
+
"description": "Markenbereich → `.t-{area}` auf jedem `<dt>` (siehe Klassendoku). Ungesetzt = neutral.",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "enum",
|
|
15
|
+
"value": [
|
|
16
|
+
"co",
|
|
17
|
+
"ki",
|
|
18
|
+
"es",
|
|
19
|
+
"wo"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"table": {
|
|
23
|
+
"category": "inputs",
|
|
24
|
+
"type": {
|
|
25
|
+
"summary": "CdsArea"
|
|
26
|
+
},
|
|
27
|
+
"defaultValue": {}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"grid": {
|
|
31
|
+
"name": "grid",
|
|
32
|
+
"description": "Zweispaltige Rasterung ohne Haarlinien (`.is-grid`) statt der einspaltigen Grundform.",
|
|
33
|
+
"type": {
|
|
34
|
+
"name": "boolean"
|
|
35
|
+
},
|
|
36
|
+
"table": {
|
|
37
|
+
"category": "inputs",
|
|
38
|
+
"type": {
|
|
39
|
+
"summary": "boolean"
|
|
40
|
+
},
|
|
41
|
+
"defaultValue": {
|
|
42
|
+
"summary": false
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"items": {
|
|
47
|
+
"name": "items",
|
|
48
|
+
"description": "Fakten-Paare (`<dt>`/`<dd>`), in Darstellungsreihenfolge.",
|
|
49
|
+
"type": {
|
|
50
|
+
"name": "other",
|
|
51
|
+
"value": "empty-enum",
|
|
52
|
+
"required": true
|
|
53
|
+
},
|
|
54
|
+
"table": {
|
|
55
|
+
"category": "inputs",
|
|
56
|
+
"type": {
|
|
57
|
+
"summary": "CdsFactsItem[]"
|
|
58
|
+
},
|
|
59
|
+
"defaultValue": {}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"apiDescription": "## Inputs\n\n```\nexport type FactsComponentInputs = {\n /** Markenbereich → `.t-{area}` auf jedem `<dt>` (siehe Klassendoku). Ungesetzt = neutral. */\n area?: CdsArea;\n /**\n * Zweispaltige Rasterung ohne Haarlinien (`.is-grid`) statt der einspaltigen Grundform.\n *\n * @default false\n */\n grid?: boolean;\n /** Fakten-Paare (`<dt>`/`<dd>`), in Darstellungsreihenfolge. */\n items: CdsFactsItem[];\n}\n```",
|
|
64
|
+
"renderer": "angular",
|
|
65
|
+
"angularComponentMeta": {
|
|
66
|
+
"name": "FactsComponent",
|
|
67
|
+
"selector": "cds-facts",
|
|
68
|
+
"standalone": true,
|
|
69
|
+
"inputs": [
|
|
70
|
+
"area",
|
|
71
|
+
"grid",
|
|
72
|
+
"items"
|
|
73
|
+
],
|
|
74
|
+
"outputs": [],
|
|
75
|
+
"enums": []
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"seitenmuster-wissensbeitrag-article-header": {
|
|
4
|
+
"id": "seitenmuster-wissensbeitrag-article-header",
|
|
5
|
+
"name": "ArticleHeaderComponent",
|
|
6
|
+
"path": "./src/lib/article-header/article-header.stories.ts",
|
|
7
|
+
"description": "ArticleHeader (`cds-article-header`) — Wrapper um `.article-header` aus\ncss/components.css (css/components.css:1486–1490, 1508–1519): der zentrierte Kopf\neines Wissensbeitrags (Breadcrumb, optionale Pill, H1, Lead, Meta-Strip). Elftes\nTicket der Seitenbausteine-Serie. Hauptvorlage ist\n`storybook-angular/src/docs/seitenmuster/wissensbeitrag.mdx`, Abschnitt „Article\nHeader“ — dort steht das für dieses Ticket verbindliche Markup samt Begründung,\nnicht nur das Mockup in `docs/index.html`.\n\n**Breadcrumb sitzt im Header — abweichend von der allgemeinen Navigationsregel,\nbewusst der Ticket-Vorlage folgend.** `docs/index.html:2423` dokumentiert für\nUnterseiten allgemein, wörtlich: „Den Breadcrumb nicht in einen zentrierten\n`.article-header` einbetten, sonst wird er mittig ausgerichtet und bekommt einen\nabweichenden Abstand zur Nav“ (Tabellenzeile „Nicht“ der Breadcrumb-Doku) — und\nausgezählt\nsind es genau die beiden EINZIGEN vollständigen Beispielseiten mit\n`.article-header` (Stellenanzeige `docs/index.html:11035`, Wissensbeitrag · KI\n`docs/index.html:15020`), die dieser Regel folgen: beide setzen den Breadcrumb in\neine EIGENE, linksbündige `.ep-section` VOR dem Header (`docs/index.html:\n11023–11031` bzw. `15010–15015`). Dem stehen 6 ISOLIERTE Doku-Demos gegenüber, die\nden Breadcrumb INNERHALB von `.article-header` zeigen: 5 kleine Referenz-Boxen in\nder Doku-Sektion selbst (`docs/index.html:7850`, `8304`, `8331`, `8361`, `8392` —\nohne Topnav/Hero/Footer, reine Bauteil-Illustrationen) plus das Code-Beispiel in\n`wissensbeitrag.mdx`. Das Ticket benennt genau diese Doku (nicht die\nBeispielseiten) als Hauptvorlage. Diese Komponente folgt der Ticket-Vorgabe\n(Breadcrumb als Input, im Header) und dokumentiert den Widerspruch als eigenen\nBefund\n(`.scratch/angular-seitenbausteine/issues/20-breadcrumb-in-oder-vor-article-header.md`).\nKonsumenten, die der allgemeinen Regel folgen wollen (wie die beiden echten\nBeispielseiten), lassen `breadcrumb` leer und setzen die Leiste selbst davor\n(siehe Story „Ohne Breadcrumb“).\n\n**Letzter Breadcrumb-Eintrag immer ohne Link, mit `aria-current=\"page\"`** — so vom\nTicket als Akzeptanzkriterium gefordert. Die beiden Wissensbeitrag-Inline-Beispiele\n(`docs/index.html:7850–7856`, `wissensbeitrag.mdx`) zeigen dafür nur 2 Einträge,\nBEIDE als `<a>`, ohne `aria-current` — eine zur Kürze vereinfachte Doku-Skizze,\nkein vollständiges Barrierefreiheits-Beispiel. Das volle, korrekte Muster (Trenner\ndekorativ, letzter Eintrag `<span aria-current=\"page\">` ohne Link) steht an\nanderer Stelle exakt so vor (`docs/index.html:2406–2412` allgemeine\nBreadcrumb-Doku, `docs/index.html:11023–11030` Stellenanzeige) und ist zusätzlich\neine explizite Akzeptanzbedingung des Tickets — die Komponente folgt deshalb\ndiesem Muster für den letzten Array-Eintrag, unabhängig von einem dort eventuell\ngesetzten `href`.\n\n**Keine bereichsgefärbte Breadcrumb-Verlinkung (`.t-{area}`).** Die\nInline-Beispiele färben ihren zweiten (dort letzten) Eintrag mit `.t-ki`/`.t-es`/\n`.t-wo`; das Ticket sieht dafür aber kein API-Feld vor (`{label, href?}`, kein\n`area` pro Eintrag), und eine Zuordnung „Bereichsfarbe auf den vorletzten\nEintrag“ wäre geraten, nicht aus der Doku ableitbar — zumal der gefärbte Eintrag\ndort ein Link ist, kein `aria-current`-Element, also nicht deckungsgleich mit dem\noben umgesetzten Muster. Bleibt bewusst außen vor.\n\n**Pill über `cds-pill`, kein direkt komponiertes `<span class=\"pill\">`.** Geprüft\nper `npx storybook tools docs show --id komponenten-chips-badges-pills-pill`:\n`PillComponent`s Host ist `<cds-pill>`, `.pill` sitzt eine Ebene darunter auf\neinem inneren `<span>` (anders als bei `FeaturedCardComponent`, wo genau das wegen\n`.card-featured-body>.pill`-Kindselektoren nicht ginge). `.article-header`/`.pill`\nhaben keinen solchen Kindselektor (css/components.css:1486–1507 geprüft) — die\nzusätzliche Ebene ist hier folgenlos, deshalb bleibt `cds-pill` als echte\nKomponente eingesetzt, keine Klassen-Duplikation nötig.\n\n**Pille rendert nur, wenn `area` UND `pill` gesetzt sind — kein erfundener\nDefault.** `PillComponent.area` ist als `CdsArea` mit einem eigenen Default\n(`'ki'`) typisiert; diese Komponente führt `area` dagegen als `CdsArea | undefined`\n(keine Konfigurations-Vorgabe laut Ticket-API). Ein erster Entwurf reichte\n`area()` per `as CdsArea`-Cast durch, damit ein `undefined`-Binding\n`cds-pill`s eigenen Default überschreiben kann — eine Typ-Lüge, um einen Fall\nabzudecken, der beim Nachzählen gar nicht vorkommt: **alle 9** `.pill`-Vorkommen\nim Article-Header-Kontext (`docs/index.html:7856, 7912–7914, 8310, 8337, 8367,\n8398, 15021`) tragen ein `data-area`, keines ohne Bereich. Die Pille rendert\ndeshalb nur innerhalb von `@if (area(); as pillArea)` (narrowt `CdsArea |\nundefined` sauber auf `CdsArea`, ohne Cast) — ist `pill()` gesetzt, `area()`\naber nicht, bleibt die Pille schlicht weg, statt eine geratene Bereichsfarbe zu\nzeigen. Gepinnt in der Story „Pille ohne Bereich“.\n\n**`pillAriaLabel`, wie bei `FeaturedCardComponent`.** `PillComponent`s eigener\nDefault („Bereich `<label>`“) passt nur, wenn die Pille einen Bereichsnamen trägt\n(Stellenanzeige, `docs/index.html:11036`: „Bereich Effektive Software“). Im\nWissensbeitrag trägt die Pille dagegen die Lesezeit (`wissensbeitrag.mdx`,\nAbschnitt „Pill · Lesezeit“: `aria-label=\"Lesezeit 8 Minuten\"`) — ein Text, den\ndie Komponente nicht zuverlässig aus einem freien `pill`-String wie\n„8 min Lesezeit“ herleiten kann (keine Zahl zu parsen, keine Garantie, dass der\nText überhaupt eine Lesezeit ist). `pillAriaLabel` bleibt deshalb optional, ohne\neigenen Default: ungesetzt geht `undefined` direkt an `cds-pill`s `ariaLabel`\ndurch, das dann auf seinen eigenen Default („Bereich `<pill>`“) zurückfällt —\nkeine Logik-Duplikation nötig, weil hier die echte `PillComponent` verwendet\nwird, keine Klassen-Nachbildung.\n\n**`date`/`dateLabel` getrennt, ANDERS als `cds-stoerer`.** `cds-stoerer`\nformatiert ein reines ISO-Datum selbst nach `de-DE`\n(`stoerer.component.ts:formattedDate`, inkl. manuellem Aufbau der\n`Date`-Komponenten gegen den UTC-Mitternacht-Fallstrick von `new Date(iso)`).\nDiese Komponente tut das NICHT: `date` liefert nur den maschinenlesbaren\n`datetime`-Wert, `dateLabel` die sichtbare Schreibweise — vom Ticket ausdrücklich\nals zwei getrennte Inputs vorgegeben. Begründung der Abweichung: Erstens deckt\nsich das mit jeder realen Instanz (6 von 6 `.article-meta-date`-Vorkommen tragen\neinen redaktionell gesetzten Text wie „13. Mai 2026“, keinen von\n`Intl.DateTimeFormat` erzeugten) — anders als der Störer, dessen Kacheln NUR ein\nISO-Datum ohne separaten Text führen. Zweitens umgeht die Trennung den\nZeitzonen-Fallstrick vollständig, statt ihn zu beheben: ohne eigene Formatierung\nkonstruiert diese Komponente nie ein `Date`-Objekt aus `date()`, die\nUTC-Mitternacht-Falle kann hier gar nicht erst auftreten. Ist `dateLabel` leer,\nzeigt die Komponente `date()` unverändert als sichtbaren Text (bewusst als\nISO-Form, nicht geraten formatiert) — in der Story „Interaktiv“ als Warnfall extra\nbenannt, damit niemand das versehentlich auf eine Produktionsseite bringt.\n\n**Meta-Strip nur, wenn es etwas zu zeigen gibt.** `authorName`/`date` sind laut\nTicket-API Beiwerk (Default `''`); ausgezählt haben alle 6 realen\n`.article-meta`-Vorkommen sowohl Autor als auch Datum, eine Stellenanzeige\n(`docs/index.html:11035`) nutzt `.article-header` dagegen KOMPLETT OHNE\n`.article-meta` (dort ein `<dl>` aus Job-Fakten statt Autor/Datum) — dieser\nabweichenden Verwendung folgt diese Komponente nicht (sie hat in der Ticket-API\nkeinen Platz), sie belegt aber, dass ein leerer Meta-Strip ein realer Fall ist.\n`.article-meta` (und darin `.article-meta-author`/`.article-meta-sep`) rendern\ndeshalb nur, wenn `authorName()` bzw. `date()` tatsächlich etwas liefern; der\nTrenner nur, wenn beide Seiten vorhanden sind.\n\n**Avatar projiziert über `[cdsAvatar]`, PLUS `cds-avatar-stack`.** Die\nTicket-Skizze nennt nur `<ng-content select=\"[cdsAvatar]\">`; ergänzt um den\nTag-Selektor `cds-avatar-stack`, weil `AvatarStackComponent` (siehe dort) ein\nElement-Selektor ist, kein `[cdsAvatar]`-Attribut trägt und sonst nicht in den\nMeta-Strip projiziert werden könnte — nötig für die vom Ticket geforderte Story\n„Mehrere Autor:innen“.\n\n**Host als Block.** `.article-header` sitzt am Host und setzt nur\n`max-width:880px;margin:0 auto`. An einem unbekannten, also `display:inline`\ngerenderten Element greift beides nicht, die Block-Kinder liefen über die\n880 px hinaus. `:host{display:block}` wie bei `cds-hero-image` und\n`cds-footer-main`; Story „Breite begrenzt“ pinnt das.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"area": {
|
|
11
|
+
"name": "area",
|
|
12
|
+
"description": "Markenbereich → `data-area` der Pille; ungesetzt = keine Pille (siehe Klassendoku).",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "enum",
|
|
15
|
+
"value": [
|
|
16
|
+
"co",
|
|
17
|
+
"ki",
|
|
18
|
+
"es",
|
|
19
|
+
"wo"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"table": {
|
|
23
|
+
"category": "inputs",
|
|
24
|
+
"type": {
|
|
25
|
+
"summary": "CdsArea"
|
|
26
|
+
},
|
|
27
|
+
"defaultValue": {}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"authorName": {
|
|
31
|
+
"name": "authorName",
|
|
32
|
+
"description": "Name im Meta-Strip (`.article-meta-name`), leer = kein Meta-Strip-Autorblock.",
|
|
33
|
+
"type": {
|
|
34
|
+
"name": "string"
|
|
35
|
+
},
|
|
36
|
+
"table": {
|
|
37
|
+
"category": "inputs",
|
|
38
|
+
"type": {
|
|
39
|
+
"summary": "string"
|
|
40
|
+
},
|
|
41
|
+
"defaultValue": {
|
|
42
|
+
"summary": ""
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"authorRole": {
|
|
47
|
+
"name": "authorRole",
|
|
48
|
+
"description": "Rolle im Meta-Strip (`.article-meta-role`), leer = keine Rollenzeile.",
|
|
49
|
+
"type": {
|
|
50
|
+
"name": "string"
|
|
51
|
+
},
|
|
52
|
+
"table": {
|
|
53
|
+
"category": "inputs",
|
|
54
|
+
"type": {
|
|
55
|
+
"summary": "string"
|
|
56
|
+
},
|
|
57
|
+
"defaultValue": {
|
|
58
|
+
"summary": ""
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"breadcrumb": {
|
|
63
|
+
"name": "breadcrumb",
|
|
64
|
+
"description": "Breadcrumb-Pfad; letzter Eintrag rendert ohne Link mit `aria-current=\"page\"`.",
|
|
65
|
+
"type": {
|
|
66
|
+
"name": "other",
|
|
67
|
+
"value": "empty-enum"
|
|
68
|
+
},
|
|
69
|
+
"table": {
|
|
70
|
+
"category": "inputs",
|
|
71
|
+
"type": {
|
|
72
|
+
"summary": "CdsArticleBreadcrumbItem[]"
|
|
73
|
+
},
|
|
74
|
+
"defaultValue": {
|
|
75
|
+
"summary": "[]"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"date": {
|
|
80
|
+
"name": "date",
|
|
81
|
+
"description": "ISO-Datum (`JJJJ-MM-TT`) → `<time datetime>`, leer = kein Datum.",
|
|
82
|
+
"type": {
|
|
83
|
+
"name": "string"
|
|
84
|
+
},
|
|
85
|
+
"table": {
|
|
86
|
+
"category": "inputs",
|
|
87
|
+
"type": {
|
|
88
|
+
"summary": "string"
|
|
89
|
+
},
|
|
90
|
+
"defaultValue": {
|
|
91
|
+
"summary": ""
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"dateLabel": {
|
|
96
|
+
"name": "dateLabel",
|
|
97
|
+
"description": "Sichtbare Schreibweise des Datums; leer = `date` steht unverändert sichtbar.",
|
|
98
|
+
"type": {
|
|
99
|
+
"name": "string"
|
|
100
|
+
},
|
|
101
|
+
"table": {
|
|
102
|
+
"category": "inputs",
|
|
103
|
+
"type": {
|
|
104
|
+
"summary": "string"
|
|
105
|
+
},
|
|
106
|
+
"defaultValue": {
|
|
107
|
+
"summary": ""
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"lead": {
|
|
112
|
+
"name": "lead",
|
|
113
|
+
"description": "Anreißer unter dem Titel (`.article-lead`), leer = kein Lead.",
|
|
114
|
+
"type": {
|
|
115
|
+
"name": "string"
|
|
116
|
+
},
|
|
117
|
+
"table": {
|
|
118
|
+
"category": "inputs",
|
|
119
|
+
"type": {
|
|
120
|
+
"summary": "string"
|
|
121
|
+
},
|
|
122
|
+
"defaultValue": {
|
|
123
|
+
"summary": ""
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"pill": {
|
|
128
|
+
"name": "pill",
|
|
129
|
+
"description": "Pille über dem Titel (`.pill`, via `cds-pill`), leer = keine Pille.",
|
|
130
|
+
"type": {
|
|
131
|
+
"name": "string"
|
|
132
|
+
},
|
|
133
|
+
"table": {
|
|
134
|
+
"category": "inputs",
|
|
135
|
+
"type": {
|
|
136
|
+
"summary": "string"
|
|
137
|
+
},
|
|
138
|
+
"defaultValue": {
|
|
139
|
+
"summary": ""
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"pillAriaLabel": {
|
|
144
|
+
"name": "pillAriaLabel",
|
|
145
|
+
"description": "`aria-label` der Pille überschreiben, siehe Klassendoku.",
|
|
146
|
+
"type": {
|
|
147
|
+
"name": "string"
|
|
148
|
+
},
|
|
149
|
+
"table": {
|
|
150
|
+
"category": "inputs",
|
|
151
|
+
"type": {
|
|
152
|
+
"summary": "string"
|
|
153
|
+
},
|
|
154
|
+
"defaultValue": {}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"title": {
|
|
158
|
+
"name": "title",
|
|
159
|
+
"description": "Titel (`.article-title`, `<h1>`).",
|
|
160
|
+
"type": {
|
|
161
|
+
"name": "string",
|
|
162
|
+
"required": true
|
|
163
|
+
},
|
|
164
|
+
"table": {
|
|
165
|
+
"category": "inputs",
|
|
166
|
+
"type": {
|
|
167
|
+
"summary": "string"
|
|
168
|
+
},
|
|
169
|
+
"defaultValue": {}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"apiDescription": "## Inputs\n\n```\nexport type ArticleHeaderComponentInputs = {\n /** Markenbereich → `data-area` der Pille; ungesetzt = keine Pille (siehe Klassendoku). */\n area?: CdsArea;\n /**\n * Name im Meta-Strip (`.article-meta-name`), leer = kein Meta-Strip-Autorblock.\n *\n * @default ''\n */\n authorName?: string;\n /**\n * Rolle im Meta-Strip (`.article-meta-role`), leer = keine Rollenzeile.\n *\n * @default ''\n */\n authorRole?: string;\n /**\n * Breadcrumb-Pfad; letzter Eintrag rendert ohne Link mit `aria-current=\"page\"`.\n *\n * @default []\n */\n breadcrumb?: CdsArticleBreadcrumbItem[];\n /**\n * ISO-Datum (`JJJJ-MM-TT`) → `<time datetime>`, leer = kein Datum.\n *\n * @default ''\n */\n date?: string;\n /**\n * Sichtbare Schreibweise des Datums; leer = `date` steht unverändert sichtbar.\n *\n * @default ''\n */\n dateLabel?: string;\n /**\n * Anreißer unter dem Titel (`.article-lead`), leer = kein Lead.\n *\n * @default ''\n */\n lead?: string;\n /**\n * Pille über dem Titel (`.pill`, via `cds-pill`), leer = keine Pille.\n *\n * @default ''\n */\n pill?: string;\n /** `aria-label` der Pille überschreiben, siehe Klassendoku. */\n pillAriaLabel?: string;\n /** Titel (`.article-title`, `<h1>`). */\n title: string;\n}\n```",
|
|
174
|
+
"renderer": "angular",
|
|
175
|
+
"angularComponentMeta": {
|
|
176
|
+
"name": "ArticleHeaderComponent",
|
|
177
|
+
"selector": "cds-article-header",
|
|
178
|
+
"standalone": true,
|
|
179
|
+
"inputs": [
|
|
180
|
+
"area",
|
|
181
|
+
"authorName",
|
|
182
|
+
"authorRole",
|
|
183
|
+
"breadcrumb",
|
|
184
|
+
"date",
|
|
185
|
+
"dateLabel",
|
|
186
|
+
"lead",
|
|
187
|
+
"pill",
|
|
188
|
+
"pillAriaLabel",
|
|
189
|
+
"title"
|
|
190
|
+
],
|
|
191
|
+
"outputs": [],
|
|
192
|
+
"enums": []
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"seitenmuster-wissensbeitrag-author-card": {
|
|
4
|
+
"id": "seitenmuster-wissensbeitrag-author-card",
|
|
5
|
+
"name": "AuthorCardComponent",
|
|
6
|
+
"path": "./src/lib/author-card/author-card.stories.ts",
|
|
7
|
+
"description": "AuthorCard (`div[cdsAuthorCard]`) — Wrapper um `.author-card` aus css/components.css\n(css/components.css:1602–1606): der Avatar-plus-Bio-Strip am Ende eines\nWissensbeitrags, einzeln oder mehrfach in `cds-author-card-group`. Dreizehntes und\nletztes Ticket der Seitenbausteine-Serie. Ausgezählt: 17 reale Vorkommen in\n`docs/index.html` — 4 einzelstehend (2 Doku-Demos `docs/index.html:8193,8207`, 1\nArtikel-Demo `8424`, 1 reale Beispielseite `15179`) und 13 in fünf Gruppen (siehe\n`AuthorCardGroupComponent`).\n\n**Attributselektor (ADR-0008), gemessen im `is-grid`-Fall statt nur hergeleitet.**\n`.author-card-group.is-grid` (css/components.css:1555) ist `display:grid` ohne\neigenes `align-items` — der CSS-Default `stretch` gleicht die Kartenhöhen einer\nReihe deshalb NUR aus, wenn `.author-card` selbst das Grid-Kind ist. Spike-Story\n(zwei Karten, 600-px-Raster, kurze gegen deutlich längere Bio, seither wieder\ngelöscht) hat beide Varianten nebeneinander gebaut und mit `getBoundingClientRect()`\ngemessen:\n\n| Variante | Grid-Kind (Tag) | `.author-card`-Höhen | Bio-Rect (kurz / lang) |\n|---|---|---|---|\n| Element-Selektor `<cds-author-card-naive>` | `CDS-AUTHOR-CARD-NAIVE`, 204/204 px (gestreckt) | **84 / 204 px** (ungleich) | 24×73 / 144×200 px |\n| Attributselektor `div[cdsAuthorCardSpike]` | `DIV.author-card`, 204/204 px | **204 / 204 px** (gleich) | — |\n\nBeim Element-Selektor wird der UNSICHTBARE `<cds-author-card-naive>`-Host auf 204 px\ngestreckt, die sichtbare `.author-card`-Box eine Ebene darunter bleibt bei ihrer\nInhaltshöhe (84 px) — exakt der Fehler aus ADR-0008 Fall 1. Mit dem Attributselektor\nIST `.author-card` das Grid-Kind, `align-items:stretch` trifft direkt zu.\n\n**Ehrlicher Zusatz, anders als bei `cds-icon-card`: die Baseline-Screenshots beider\nSpike-Varianten waren byte-identisch** (`sha1` gleich). `.author-card` trägt (anders\nals `.ep-card`) weder Hintergrund noch Rahmen noch Schatten — der zusätzliche,\nunsichtbare Leerraum unter der kurzen Bio malt in keiner der beiden Varianten ein\nPixel. Der Fehler ist damit heute rein strukturell (falsches Boxmodell, `getBoundingClientRect()`\nauf `.author-card` lügt), nicht optisch sichtbar. Er wird real, sobald `.author-card`\nkünftig einen Rahmen/Hintergrund/Hover-Zustand bekommt, und er verfälscht schon\nheute jede Messung/Positionierung, die sich auf die tatsächliche Kartenhöhe verlässt\n(u. a. die Story „Als Raster“ unten, die genau das pinnt). Das ADR-0008-Kriterium\nist strukturell formuliert („die Stelle im DOM einnehmen, die es ohne Angular\neinnähme“), nicht optisch — der Attributselektor bleibt deshalb die richtige Wahl,\nobwohl der Effekt heute unsichtbar ist.\n\n**`area` ist bewusst NICHT Teil der API — CSS-Befund, nicht erfundene Konfiguration.**\nAlle 17 realen `.author-card`-Vorkommen tragen `data-area`, und sowohl\n`docs/index.html:8185` als auch `wissensbeitrag.mdx:199` behaupten wörtlich, das\nfärbe „nur den Avatar“. Ausgezählt gibt es aber in `css/components.css` (Light UND\nDark) KEINE einzige `.author-card[data-area=\"…\"]`-Regel — weder direkt noch über\neinen Nachfahren-Selektor auf `.article-avatar`, dessen eigene\n`[data-area]`-Färbung (css/components.css:1523–1526) ein Element-Selektor auf dem\nAvatar selbst ist, unabhängig vom Vorfahren. `data-area` auf `.author-card` ist\ndamit, gegen die Doku-Aussage, komplett wirkungslos — die Bereichsfarbe kommt\nausschließlich vom `area`-Input, den der Konsument direkt an das projizierte\n`[cdsAvatar]` bindet (siehe unten). Ein `area`-Input, der hier nur `data-area` ohne\njede CSS-Wirkung setzt, wäre eine erfundene Konfiguration ohne Gegenwert — Befund\ngemeldet, nicht im Wrapper geflickt (ADR-0001):\n`.scratch/angular-seitenbausteine/issues/24-css-luecke-author-card-data-area.md`.\n\n**Avatar projiziert über `[cdsAvatar]`, wie bei `cds-article-header`.** Der\nKonsument setzt Größe (`size=\"lg\"`, css/components.css:1527) und Bereich\n(`area=\"…\"`) direkt am projizierten `<div cdsAvatar>` — diese Komponente reicht\nnichts durch, exakt die Trennung, die `cds-article-header` bereits etabliert\n(siehe dessen Klassendoku, Abschnitt „Avatar projiziert über `[cdsAvatar]`“).\n\n**Eyebrow als `<h3>`, nur wenn gesetzt** (Beiwerk, Default `''`) — deckungsgleich\nmit allen 4 einzelstehenden realen Vorkommen: 2 tragen `<h3 class=\"author-card-eyebrow\">`\n(`docs/index.html:8196,8427`, „Über den Autor“/„Über die Autorin“, Ticket-Vorgabe:\neine Ebene unter dem `<h2>` des Article-Body), die anderen 2 (Doku-Demos ohne\numgebende Artikelstruktur) haben gar keinen. Innerhalb einer Gruppe trägt laut\n`wissensbeitrag.mdx` („Eyebrow-Konvention“) keine einzelne Karte mehr einen eigenen\nEyebrow — die Gruppen-Überschrift ersetzt sie (siehe `AuthorCardGroupComponent`);\nKonsumenten lassen `eyebrow` dafür einfach leer.\n\n**`roleLabel`, NICHT `role` wie im Ticket-Text — gemessene Abweichung, kein\nFreihand-Entscheid.** Ein erster Entwurf folgte der Ticket-API wörtlich\n(`role`-Input, mit `role=\"…\"` als schlichtem Attribut in den Stories gesetzt, wie\n`name`/`bio`/`eyebrow`). Storybooks eingebauter a11y-Check (`aria-roles`) schlug\ndarauf für JEDE Story mit echtem Rollentext fehl: `role` ist ein globales\nHTML-/ARIA-Attribut, und ein Angular-Input MIT DIESEM NAMEN wird bei einem\nungebundenen `role=\"Senior AI Engineer …\"` zwar als Startwert an den Input\ndurchgereicht, bleibt aber ZUSÄTZLICH als echtes `role`-Attribut im DOM stehen —\naxe meldete wörtlich „Roles must be one of the valid ARIA roles: Senior, AI,\nEngineer, …“, weil der Freitext als ARIA-Rolle interpretiert wird. Exakt dieselbe\nKollision umgehen `BlockquoteComponent`, `TestimonialComponent` und\n`TeamVoiceComponent` bereits mit `roleLabel` statt `role`\n(`grep -rn \"readonly role\" angular-lib/projects/design-system-angular/src/lib/`\nzeigt nur diese drei). Diese Komponente folgt demselben, bereits etablierten\nMuster statt die Kollision ein viertes Mal zu wiederholen — CSS-Klasse bleibt\nunverändert `.author-card-role`, nur der Input-Name weicht vom Ticket-Text ab.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"bio": {
|
|
11
|
+
"name": "bio",
|
|
12
|
+
"description": "Bio-Text (`.author-card-bio`), leer = kein Bio-Absatz.",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "string"
|
|
15
|
+
},
|
|
16
|
+
"table": {
|
|
17
|
+
"category": "inputs",
|
|
18
|
+
"type": {
|
|
19
|
+
"summary": "string"
|
|
20
|
+
},
|
|
21
|
+
"defaultValue": {
|
|
22
|
+
"summary": ""
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"eyebrow": {
|
|
27
|
+
"name": "eyebrow",
|
|
28
|
+
"description": "Kicker über dem Namen (`.author-card-eyebrow`, `<h3>`), leer = keine Eyebrow.",
|
|
29
|
+
"type": {
|
|
30
|
+
"name": "string"
|
|
31
|
+
},
|
|
32
|
+
"table": {
|
|
33
|
+
"category": "inputs",
|
|
34
|
+
"type": {
|
|
35
|
+
"summary": "string"
|
|
36
|
+
},
|
|
37
|
+
"defaultValue": {
|
|
38
|
+
"summary": ""
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"name": {
|
|
43
|
+
"name": "name",
|
|
44
|
+
"description": "Name (`.author-card-name`).",
|
|
45
|
+
"type": {
|
|
46
|
+
"name": "string",
|
|
47
|
+
"required": true
|
|
48
|
+
},
|
|
49
|
+
"table": {
|
|
50
|
+
"category": "inputs",
|
|
51
|
+
"type": {
|
|
52
|
+
"summary": "string"
|
|
53
|
+
},
|
|
54
|
+
"defaultValue": {}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"roleLabel": {
|
|
58
|
+
"name": "roleLabel",
|
|
59
|
+
"description": "Rolle/Position (`.author-card-role`), leer = keine Rollenzeile. Heißt bewusst\n`roleLabel`, nicht `role` (Kollision mit dem ARIA-Attribut `role`), siehe\nKlassendoku.",
|
|
60
|
+
"type": {
|
|
61
|
+
"name": "string"
|
|
62
|
+
},
|
|
63
|
+
"table": {
|
|
64
|
+
"category": "inputs",
|
|
65
|
+
"type": {
|
|
66
|
+
"summary": "string"
|
|
67
|
+
},
|
|
68
|
+
"defaultValue": {
|
|
69
|
+
"summary": ""
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"apiDescription": "## Inputs\n\n```\nexport type AuthorCardComponentInputs = {\n /**\n * Bio-Text (`.author-card-bio`), leer = kein Bio-Absatz.\n *\n * @default ''\n */\n bio?: string;\n /**\n * Kicker über dem Namen (`.author-card-eyebrow`, `<h3>`), leer = keine Eyebrow.\n *\n * @default ''\n */\n eyebrow?: string;\n /** Name (`.author-card-name`). */\n name: string;\n /**\n * Rolle/Position (`.author-card-role`), leer = keine Rollenzeile. Heißt bewusst\n * `roleLabel`, nicht `role` (Kollision mit dem ARIA-Attribut `role`), siehe\n * Klassendoku.\n *\n * @default ''\n */\n roleLabel?: string;\n}\n```",
|
|
75
|
+
"renderer": "angular",
|
|
76
|
+
"angularComponentMeta": {
|
|
77
|
+
"name": "AuthorCardComponent",
|
|
78
|
+
"selector": "div[cdsAuthorCard]",
|
|
79
|
+
"standalone": true,
|
|
80
|
+
"inputs": [
|
|
81
|
+
"bio",
|
|
82
|
+
"eyebrow",
|
|
83
|
+
"name",
|
|
84
|
+
"roleLabel"
|
|
85
|
+
],
|
|
86
|
+
"outputs": [],
|
|
87
|
+
"enums": []
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"seitenmuster-wissensbeitrag-avatar": {
|
|
4
|
+
"id": "seitenmuster-wissensbeitrag-avatar",
|
|
5
|
+
"name": "AvatarComponent",
|
|
6
|
+
"path": "./src/lib/avatar/avatar.stories.ts",
|
|
7
|
+
"description": "Avatar (`div[cdsAvatar]`) — Wrapper um `.article-avatar` aus css/components.css\n(css/components.css:1520–1536): der Initialen-/Foto-Kreis im Meta-Strip eines\nWissensbeitrags (`.article-meta-author`), in der Author-Card (`-lg`) und im\nTeam-Tile-Grid (`-xl`). Elftes Ticket der Seitenbausteine-Serie.\n\n**Attributselektor (ADR-0008), gemessen an der Geschwister-Kette.** Ausgezählt in\n`docs/index.html`: 8 der 11 Instanzen der Grundgröße sitzen als direkte, adjazente\nGeschwister in einer von 3 `.article-avatar-stack`-Kacheln (2 Avatare in Zeilen\n8343–8344, je 3 in Zeilen 8373–8375 und 8404–8406) — genau dort greift\n`.article-avatar-stack .article-avatar + .article-avatar`\n(css/components.css:1540–1541), eine Geschwister-Kette (Kriterium `spec.md` 2b).\nEin Element-Selektor `cds-avatar`, der `.article-avatar` auf einem INNEREN Element\nrendert (wie `cds-facts` es mit `<dl>` tut, weil `<dl>` ein Custom Element nicht\nannehmen kann), würde diese Kette brechen: die beiden `.article-avatar`-Knoten\nlägen dann je eine Ebene UNTER ihrem eigenen `<cds-avatar>`-Host und wären keine\nGeschwister mehr — `+` verlangt denselben Elternknoten, egal wie dicht die Hosts\nselbst nebeneinanderstehen. Eine zweite, ebenfalls tragfähige Variante\n(Element-Selektor MIT `host: { class: 'article-avatar' }`, ohne innere\nWrapper-Ebene) hätte dieselbe Geschwister-Kette ebenso erfüllt — verworfen zugunsten\ndes Attributselektors nur wegen des zweiten, unabhängigen Grundes unten, nicht weil\nsie die Kette nicht gelöst hätte.\n\n**Gemessen, nicht nur hergeleitet.** Story „Avatar-Stapel“ (Play-Funktion) rendert\ndrei `div[cdsAvatar]` in einem `cds-avatar-stack` und misst\n`getBoundingClientRect()` der drei `.article-avatar`-Knoten: bei 40 px Kachelbreite\nund `margin-left:-12px` (css/components.css:1541) überlappen der zweite und dritte\nKreis den jeweils vorherigen um 12 px (Differenz der `left`-Koordinaten = 28 px,\nnicht 40 px) — plus Screenshot-Baseline (`visual-snapshots/…avatar-stapel.png`) als\nvisuelle Bestätigung, nicht nur die Zahl.\n\n**Zweiter, unabhängiger Grund: Wiederverwendung als Projektions-Selektor.**\n`cds-article-header` projiziert den Avatar über\n`<ng-content select=\"[cdsAvatar]\">` (siehe dessen Klassendoku) — dasselbe Attribut,\ndas hier den Host selektiert, dient dem Elternteil zugleich als\nContent-Projection-Selektor. Ein Element-Selektor bräuchte dafür eine zusätzliche,\neigens erfundene Marker-Klasse; der Attributselektor liefert die Zielscheibe für\nbeide Zwecke aus einer Hand, ohne dass der Konsument zwei Attribute schreiben muss.\n\n**Initialen werden aus `name` abgeleitet, kein eigener Input** (Ticket-Vorgabe):\nerstes Zeichen des ersten und des letzten durch Whitespace getrennten Worts, groß\n— ein einzelnes Wort liefert dessen erste zwei Zeichen. Zwei Inputs für dieselbe\nInformation (Name UND Initialen) könnten auseinanderlaufen, sobald nur eines\ngepflegt wird.\n\n**`aria-hidden=\"true\"` fest verdrahtet, kein Input.** Ausgezählt: von 53\n`.article-avatar`-Instanzen (11 Grundgröße + 17 `-lg` + 25 `-xl`) tragen 45 das\nAttribut direkt am Element; die restlichen 8 sind genau die Grundgrößen-Avatare\nINNERHALB von `.article-avatar-stack`, wo bereits der Stack-Container selbst\n`aria-hidden=\"true\"` trägt (siehe `AvatarStackComponent`) — dort wäre ein zweites\n`aria-hidden` am Kind redundant, aber unschädlich: verschachteltes `aria-hidden`\nändert nichts am Ergebnis, der Teilbaum ist so oder so für Assistenztechnologie\nunsichtbar. Der Avatar trägt es deshalb immer: 100 % Deckung mit dem Mockup im\nAlleinstand, harmlose Redundanz im Stapel.",
|
|
8
|
+
"jsDocTags": {},
|
|
9
|
+
"argTypes": {
|
|
10
|
+
"area": {
|
|
11
|
+
"name": "area",
|
|
12
|
+
"description": "Markenbereich → `data-area` (Füllfarbe der Initialen-Kachel).",
|
|
13
|
+
"type": {
|
|
14
|
+
"name": "enum",
|
|
15
|
+
"value": [
|
|
16
|
+
"co",
|
|
17
|
+
"ki",
|
|
18
|
+
"es",
|
|
19
|
+
"wo"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"table": {
|
|
23
|
+
"category": "inputs",
|
|
24
|
+
"type": {
|
|
25
|
+
"summary": "CdsArea"
|
|
26
|
+
},
|
|
27
|
+
"defaultValue": {}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"name": {
|
|
31
|
+
"name": "name",
|
|
32
|
+
"description": "Voller Name — Quelle der Initialen und des Bild-`alt`-Texts.",
|
|
33
|
+
"type": {
|
|
34
|
+
"name": "string",
|
|
35
|
+
"required": true
|
|
36
|
+
},
|
|
37
|
+
"table": {
|
|
38
|
+
"category": "inputs",
|
|
39
|
+
"type": {
|
|
40
|
+
"summary": "string"
|
|
41
|
+
},
|
|
42
|
+
"defaultValue": {}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"size": {
|
|
46
|
+
"name": "size",
|
|
47
|
+
"description": "Größe (`.article-avatar` = sm, `-lg`, `-xl`).",
|
|
48
|
+
"type": {
|
|
49
|
+
"name": "enum",
|
|
50
|
+
"value": [
|
|
51
|
+
"sm",
|
|
52
|
+
"lg",
|
|
53
|
+
"xl"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"table": {
|
|
57
|
+
"category": "inputs",
|
|
58
|
+
"type": {
|
|
59
|
+
"summary": "CdsAvatarSize"
|
|
60
|
+
},
|
|
61
|
+
"defaultValue": {
|
|
62
|
+
"summary": "sm"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"src": {
|
|
67
|
+
"name": "src",
|
|
68
|
+
"description": "Bildquelle; gesetzt → `<img>` ersetzt die Initialen.",
|
|
69
|
+
"type": {
|
|
70
|
+
"name": "string"
|
|
71
|
+
},
|
|
72
|
+
"table": {
|
|
73
|
+
"category": "inputs",
|
|
74
|
+
"type": {
|
|
75
|
+
"summary": "string"
|
|
76
|
+
},
|
|
77
|
+
"defaultValue": {
|
|
78
|
+
"summary": ""
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"apiDescription": "## Inputs\n\n```\nexport type AvatarComponentInputs = {\n /** Markenbereich → `data-area` (Füllfarbe der Initialen-Kachel). */\n area?: CdsArea;\n /** Voller Name — Quelle der Initialen und des Bild-`alt`-Texts. */\n name: string;\n /**\n * Größe (`.article-avatar` = sm, `-lg`, `-xl`).\n *\n * @default sm\n */\n size?: CdsAvatarSize;\n /**\n * Bildquelle; gesetzt → `<img>` ersetzt die Initialen.\n *\n * @default ''\n */\n src?: string;\n}\n```",
|
|
84
|
+
"renderer": "angular",
|
|
85
|
+
"angularComponentMeta": {
|
|
86
|
+
"name": "AvatarComponent",
|
|
87
|
+
"selector": "div[cdsAvatar]",
|
|
88
|
+
"standalone": true,
|
|
89
|
+
"inputs": [
|
|
90
|
+
"area",
|
|
91
|
+
"name",
|
|
92
|
+
"size",
|
|
93
|
+
"src"
|
|
94
|
+
],
|
|
95
|
+
"outputs": [],
|
|
96
|
+
"enums": []
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|