Link
Accessible, unstyled native anchor link with disabled and inert guards.
|
|
| Package |
@vizejs/ui/link |
| Maturity |
stable |
| Own the source |
vize lib pull link |
| Requires |
id |
| Aliases |
anchor, navigation link, disabled link |
| Covers |
HTML anchor, React Aria Link, Reka UI Primitive |
Usage
import { Link } from "@vizejs/ui/link";
Or copy the source into your project with vize lib pull link (see Source Distribution).
API
Link
Source: src/families/navigation/link/link-anchor.vue
Props
| Prop |
Type |
Default |
Description |
id |
string | null |
undefined |
Consumer-owned anchor id. null and undefined select a deterministic fallback. |
href |
string |
undefined |
Native navigation target for the anchor. |
target |
string |
undefined |
Native browsing context target. |
rel |
string |
undefined |
Native relationship tokens such as noopener or external. |
download |
LinkDownload |
undefined |
Native download hint. true renders the boolean attribute. |
disabled |
boolean |
false |
Remove link activation and sequential keyboard focus. |
inert |
boolean |
false |
Apply native inertness while also suppressing anchor activation in older runtimes. |
ariaCurrent |
LinkAriaCurrent |
undefined |
Mark the link as the current item in a set. |
Events
| Event |
Payload |
Description |
navigate |
[event: MouseEvent] |
Fired when an enabled link receives pointer or keyboard activation. |
Slots
| Slot |
Slot props |
Description |
default |
LinkSlotState |
Renders link contents with current availability state. |
Exposed
| Member |
Type |
Description |
focus |
(options?: FocusOptions) => void |
Move focus to the native anchor. |
element |
Readonly<ShallowRef<HTMLElement | null>> |
Template ref to the rendered root element. |
Behavior
Normative state × input → outcome table for link-anchor.vue (@vizejs/ui/link).
Every row is proven by the named mounted-DOM test in
src/families/navigation/link/link.test.ts; a row without a passing test is a
contract violation.
| # |
State |
Input |
Outcome |
Proven by |
| L1 |
idle, native |
render |
native <a href>, deterministic id, accessible name, forwarded link attributes, current state |
renders a native link with navigation and accessibility attributes |
| L2 |
idle |
Tab / focus() |
link receives focus through native tab order and the exposed focus method |
joins the tab order and focuses programmatically |
| L3 |
idle |
pointer click |
exactly one navigate emit carrying the MouseEvent; native click listeners still run |
click emits navigate and preserves consumer click listeners |
| L4 |
idle |
Enter / Space |
Enter follows native link activation; Space does not synthesize link activation |
Enter activates native links while Space remains non-activating |
| L5 |
disabled |
render |
no href/navigation attributes, aria-disabled="true", tabindex="-1", data-state=disabled |
disabled links remove navigation, tab focus, and activation |
| L6 |
disabled |
click / Enter / Space |
no navigate and no consumer click listener |
disabled links remove navigation, tab focus, and activation |
| L7 |
inert |
render |
native inert, no href, aria-disabled="true", tabindex="-1", data-state=inert |
inert links expose native inertness and suppress fallback activation |
| L8 |
inert |
click / Enter / Space |
no navigate |
inert links expose native inertness and suppress fallback activation |
| L9 |
any |
default slot render |
slot receives live disabled, inert, and unavailable state |
exposes disabled, inert, and unavailable to the default slot |
| L10 |
non-current |
render |
aria-current is omitted for false |
renders a native link with navigation and accessibility attributes |
Disabled and inert states deliberately omit href so the anchor cannot be
activated through native navigation in runtimes that do not enforce inertness.
Styling remains entirely consumer-owned; the component only publishes semantic
attributes and state hooks.