Inline navigation primitive that uses native web anchors and emits a canonical press event for host runtimes without native navigation.
Install @wyrd-company/react or the Flutter package and use it directly —
your DESIGN.md does the styling.
catalog/contracts/link.ymlsource of truth · verbatim
$schema: https://thewyrdingway.dev/schemas/component-contract.schema.ymlcontractVersion: 0.1.0identity:name: Linktag: wyrd-linkpackage: wyrd.component.linktitle: Linksummary: Inline navigation primitive that uses native web anchors and emits a canonical press event for host runtimes without native navigation.relationships:related-to: - quality-parity-and-gatesclassification:category: navigationcomposition: single-slotinteractive: truetarget-strategy:react: requiredflutter: requiredsurface:properties: - name: hreftype:kind: stringrequired: trueserializable: truesummary: Navigation destination URL. - name: targettype:kind: enumvalues: - self - blankrequired: falsedefault: selfreflects: trueserializable: truesummary: Navigation browsing context; blank web links also set noopener noreferrer.slots: - name: contentcontent: truerequired: truecardinality: exactly-oneaccepts: - textsummary: Visible link text and accessible-name source.events: - name: presspayload:href:kind: stringbubbles: truecomposed: truecancelable: truesummary: Canonical activation event emitted with the destination href when the link is activated.states: - name: defaultsource: platformsummary: Inline link in normal text flow. - name: hoversource: interactionsummary: Pointer hover state on hover-capable devices. - name: focus-visiblesource: platformsummary: Keyboard-visible focus state.parts: - name: rootsummary: Native link control root.slots: - contenttokens:color: color.primarycolor-hover: color.primary-hovermessages: []obligations:accessibility:role: linkname: Content slot provides the accessible name.keyboard: - Enter activates the link.semantics: - Web projections use a native anchor; Flutter exposes link semantics. - Target blank web links set rel="noopener noreferrer".behavior:model: statelessinteractions: - Web anchors navigate natively and also emit press. - Flutter emits press for host navigation without attempting native navigation.hostEffects: - Dispatch activation event.conditions: - rtl - reduced-motion - cvd-deuteranopia - text-expansionsdui:status: serializableserializableProperties: - href - targetserializableSlots: - contenteventBindings: - pressnotes: Link serializes its href, target, content text, and optional press binding for non-web hosts.examples: - name: inlinestate: defaultproperties:href: /docsslots:content: Read the docs - name: externalstate: defaultproperties:href: https://github.com/wyrd-companytarget: blankslots:content: View Wyrd Company on GitHub - name: relativestate: defaultproperties:href: /settingsslots:content: Account settingsoverrides:react:slots:content: content
01
Examples
Generated from the contract's examples block.
Previews are the published @wyrd-company/react component, themed by the
brand's role tokens — flip the site's light/dark toggle and they follow.
Navigation browsing context; blank web links also set noopener noreferrer.
03
Slots & events
Slot
Cardinality
Accepts
Summary
content
exactly-one
text
Visible link text and accessible-name source.
Event
Payload
Summary
press
href
Canonical activation event emitted with the destination href when the link is activated.
04
Tokens
The contract's token bindings. Open the shared contextual sidebar from any example;
primary swatches reflect the color you pick there. Error swatches show the active
preset's values; editing any knob switches to custom and resets error to TWW · Ink.
Binding
Token
color
color.primary
color-hover
color.primary-hover
05
States
State
Source
Summary
default
platform
Inline link in normal text flow.
hover
interaction
Pointer hover state on hover-capable devices.
focus-visible
platform
Keyboard-visible focus state.
06
Accessibility
From the contract's accessibility obligations. Role link; Content slot provides the accessible name.
Enter activates the link.
Web projections use a native anchor; Flutter exposes link semantics.
Target blank web links set rel="noopener noreferrer".