Status: active Figma assembly contract.
Source evidence
- Published
🟣 🚛 Input Multiselect/Textcomponent set17867:14645, key0c9c4ccfe5ce1b19a675d8a20f3510b548d5416c. - Published
🟣 🚛 Input Multiselect/Tagcomponent set21874:11775, key587335caa9157deb513708bd1bc218eb947f82ab. - Text summary private assembly
_FieldValue17867:15072, key926cbfa63ff38de19d6267f17d1c41020dcb72ee.
Shared parent properties
Use the generated property keys exactly. Both parent sets expose the following
properties: Size (L – 56, M – 44, S – 32), State (Default,
Active, Disable), and Filled (on, off); plus Chevron, Right Icon,
the right-icon instance swap, Description, ✸ Required, Label,
Placeholder, Focused, → RightContent, Clear, Cursor, and the
label, description, and placeholder text properties.
Text additionally exposes Value layout on the parent component set:
Fixed / truncate is its default and Growing / wrap is the wrapping,
height-growing alternative. Tag always retains its native wrapped growth.
Focusedis a visual preview only; runtime focus belongs to the component contract.→ RightContentand the icon swap are Figma anatomy, not new Angular slots.- Preserve library-bound fills, strokes, radius, focus ring, typography, clear control, and chevron. Do not detach the field to imitate a state.
Text assembly
- Place
🟣 🚛 Input Multiselect/Textfor a label summary. It contains the private_FieldValuecomponent; do not rebuild the summary with a detached text layer. _FieldValueowns the privateMoreandTruncatemechanics.Truncate=onis one 260px-wide ellipsized line and may show, ещё N;Truncate=offwraps the summary and hides that suffix.- Use the parent
Value layoutproperty instead of editing the nested instance:Fixed / truncatemaps to_FieldValue.Truncate=on, whileGrowing / wrapmaps to_FieldValue.Truncate=off. The parent set has 36 combinations (size × state × filled × value layout). Both layouts retain the same parent content insets and label position asFixed / truncate; only the private value line may wrap and increase the field height when it needs an additional line.Moreremains private assembly rather than a public parent control.
Tag assembly
- Place
🟣 🚛 Input Multiselect/Tagfor wrapped selections. Its filled Tag group has 4px gaps and verified two-row heights of 80px (L), 68px (M), and 56px (S). Keep Auto Layout capable of further vertical growth. - In the active runtime state, the filter follows the selected Tags in the same wrapping flow, taking the remaining row space or the next row without overlaying a Tag.
- The visible nested
🟢 🚛 Taginstance is the source for each selection. Its selected-value visual maps to the local semanticappearance="selected".component.taghas no Figma-sidecar yet, so it is intentionally not declared as a graph dependency in this constrained sidecar; add that sidecar before a Figma assembly run marks Tag asUsed.
Dependencies
component.iconis optional: it is present only when the right-icon or chevron anatomy is visible. The Text summary and Tag group are private anatomy of their respective parent sets, not public local component edges.
Verification checklist
- Rule ID:
multiselect.published-parent— the Text or Tag instance resolves to one of the two recorded component keys. - Rule ID:
multiselect.published-properties—Size,State, andFilleduse the published variants; parent booleans and text use their exact generated keys. - Rule ID:
multiselect.text-value-layout— Text uses the parentValue layoutproperty and its nested_FieldValuebehavior rather than an approximation. - Rule ID:
multiselect.text-growth— for equal one-line content,Fixed / truncateandGrowing / wraphave the same top/bottom content insets, label position, and field height; extra height is allowed only from an additional wrapped value line. - Rule ID:
multiselect.tag-wrap— Tag selections remain nested library Tag instances and wrap instead of being clipped. - No Code Connect mapping is created or implied by this assembly contract.