card-meta-list + meta-row: zwei neue SDCs für Field-gebundene Job-Meta-Listen
card-meta-list als Bubble-Frame-Container (Slot-basiert) + meta-row als Mikro-SDC (prop-driven mit icon, label, value). Card-Familie wächst von drei auf vier SDCs, Render-Quellen-Trennung bleibt erhalten.
Kontext
Die Vacancy-Detail-Page (node.vacancy.full) wird nach dem SOLCOM-Figma-Frame „Projektdetails" (figma.com/design/CHHDfbpX8Ys2LBiGs5HVK0?node-id=1019-78888) überarbeitet (Volltext-Begründung in ADR-0014). Markantestes neues Element ist eine Meta-Card links neben dem Job-Titel: ein Bubble-Card-Frame mit einer Liste aus 5 Zeilen, jede aus Icon + Bold-Label + Wert (z. B. „Stellentyp: Festanstellung", „Einsatzort: Reutlingen"). Werte kommen aus Vacancy-Feldern.
Die bestehende Card-Familie aus ADR-0009 hat drei SDCs nach Render-Quelle getrennt. Die Meta-Card passt in keine der drei: sie ist strukturierte Field-gebundene Liste innerhalb eines Content-Templates, nicht freie Slot-Komposition und nicht ein einzelnes Field-zu-Card-Mapping.
Architekturell bindender Constraint aus der Canvas-Engine: Canvas Content-Templates können in einem SDC-Prop kein dynamisches items[] aus mehreren Field-Refs synthetisieren. Eine Field-Ref-Expression bindet 1:1 ein Feld — eine Meta-Liste mit 5 Zeilen, die je auf ein anderes Feld zeigen, kann also nicht sauber als ein einziges items: array<{icon, label, value}>-Prop modelliert werden.
Vor dem ADR wurde der customer-lens-reviewer-Agent aufgerufen (Pflicht laut CLAUDE.md). Vier Optionen wurden bewertet.
Entscheidung
Zwei neue SDCs einführen: card-meta-list als Bubble-Frame-Container (Slot-basiert) + meta-row als Mikro-SDC (prop-driven mit icon, label, value). Konkret:
- Neue SDC
components/card-meta-list/mit Schema (GroupCard, keine Pflicht-Props, einmain_slot, Title „Meta-Rows"). Twig hängtbubble-card-framemit Variantprofile-2-2-no-ctaals Hintergrund-Layer ein (gleiches Pattern wiecard-bubble-profile-no-button.twig). Schema-descriptiongrenzt explizit gegencard-bubble-profile-no-buttonab. - Neue SDC
components/meta-row/mit Schema (GroupBase, drei required Props):icon(string, freier Phosphor-Icon-Name,examples: [briefcase, map-pin, clock, graduation-cap, identification-card]),label(string, Bold-Bezeichner),value(string, Wert). Twig includet bestehendenicon-SDC via{% include 'byte_theme:icon' with {...} only %}mit Context-Isolation (Regel 13 ausbyte_theme/AGENTS.md). Keine eigenständige Icon-Logik im Theme — Phosphor-Pack-Wiederverwendung. - Beide SDCs werden als Canvas-Komponenten registriert — Schema-Pattern wie bestehende
canvas.component.sdc.byte_theme.card.yml. - Field-Binding bleibt 1:1. Im Content-Template
vacancy.fullwerden 5×meta-rowals Slot-Children unter einercard-meta-list-Instanz eingefügt, jede mit eigenem Field-Ref auf genau ein Vacancy-Feld. Das exakte 5er-Mapping ist Teil von ADR-0014. - Card-Familie wächst von drei auf vier SDCs. Render-Quellen-Trennung bleibt:
SDC Render-Quelle card-bubble-profileSlot-Container, freie Canvas-Komposition mit CTA card-bubble-profile-no-buttonSlot-Container, freie Canvas-Komposition ohne CTA cardProp-driven, Drupal-View-Mode-Listen card-meta-list(neu)Slot-Container, strukturierte Field-Listen in Content-Templates meta-rowist Mikro-SDC ohne CSS-Eigenleben. Die Komponente liefert das Markup für Icon + Label + Value; das visuelle Layout lebt im CSS-Layer voncard-meta-listbzw. dessen.bubble-card--profile-no-cta-Wrapper.meta-rowselbst trägt keine eigene Variant-Achse.
Rejected alternatives
Consequences
- Card-Familie wächst von drei auf vier SDCs. Render-Quellen-Trennlinie aus ADR-0009 bleibt erhalten. Schema-
descriptionan beiden Slot-Container-SDCs verweist explizit aufeinander und benennt den Use-Case-Unterschied. - Visual-Frame-Mechanik bleibt DRY. Da
card-meta-list,card-bubble-profile-no-buttonundcarddenselbenbubble-card-frame profile-2-2-no-ctaincluden, lebt die Brand-Outline an genau einer Stelle. ADR-0005-Konformität. card-meta-listundcard-bubble-profile-no-buttonsind visuell identisch im Default-State. Der Unterschied liegt im API-Modus. Die Schema-descriptionist die einzige Trennlinie für Site-Builder im Canvas-Picker — anhaltendes UX-Risiko, das Lens-Reviewer explizit als rote Flagge markiert hat.meta-rowist orphan-anfällig im Canvas-Component-Browser. SDC-Schema kann nicht erzwingen, dassmeta-rownur innerhalb voncard-meta-listeingesetzt wird. Bewusste Restbedingung; Slot-Type-Erzwingung ist in Drupal SDC nicht verfügbar.- Kein Default-Slot-Children-Mechanismus. Die 5×
meta-row-Instances müssen im Content-Templatevacancy.fullmanuell vorverkabelt werden. Wer eine neuecard-meta-list-Instanz im Canvas-Editor anlegt, bekommt einen leeren Slot und muss diemeta-row-Children selbst hinzufügen. meta-row.iconist freier String mitexamples-Liste, nicht hardcoded Enum. Lens-Reviewer-Schärfung: konsistent zum bestehendenicon-SDC. Nachteil: kein Picker-Enum-Schutz vor Tippfehlern. Theme-weite Konsistenz schlägt Picker-Sicherheit.- Pflicht-Verfahren nach SDC-Hinzufügung:
ComponentSourceManager::generateComponents('sdc')muss laufen. Anschließend muss das geänderte Content-Template perentity::save()re-materialisiert werden. Siehe ADR-0008 Consequences und ADR-0007 für die generelle Mechanik. - A11y-Implikation der
meta-row-Markup-Wahl ist offen. Definition-List (<dl>/<dt>/<dd>) wäre semantisch perfekt für Label-Value-Paare, aber unhandlich für SDC-Instances. Pragmatischer Default für MVP:<div role="listitem">inmeta-row.twig, mit<ul role="list">als Container incard-meta-list.twig. Lens-Reviewer hat das als ungeprüft markiert. - Cherry-Pick-Reibung gegen Upstream-Byte-Theme. Beide neuen Verzeichnisse existieren im Upstream nicht. Sind reine SOLCOM-Erweiterungen. Künftige Upstream-Updates am
bubble-card-frameoder amicon-SDC müssen manuell auf Auswirkungen geprüft werden. - Wiederverwendbarkeit ist ein Versprechen, kein Beweis. Die Topologie ist so gewählt, dass
card-meta-list+meta-rowfür andere Bundle-Detail-Pages ohne Schema-Änderung wiederverwendet werden können. Falls die zweite Verwendung nie kommt, ist die zweifach-SDC-Topologie rückblickend Overkill. Bewusst in-Kauf-genommenes Risiko, gestützt durch das Figma-Naming „Projektdetails" als generisches Layout-Pattern.