Links are used to navigate to a new location, open or download an asset, or serve as an inline action.
onClick without href) when an action needs link styling. Reserve this pattern for actions within inline text.isExternal — they open in a new tab with safe HTML attributes (target="_blank" rel="noopener noreferrer") already applied.href to navigate to a page, file, or external resource.onClick without href to trigger an action inline while keeping link styling. The component renders a <button> element automatically.variant="primary" — use for standalone links. Uses text accent colors, no underline by default.variant="secondary" — use for links inside body text. Underlined by default to distinguish them from surrounding text.isUnderlined when extra emphasis is needed — the font weight updates to match surrounding body text.isUnderlined={false} when the link is already visually distinct — the font weight updates to bold.icon to render a Pluma icon. Icons add visual context and never replace the label.iconSrc to supply a custom image icon when no Pluma icon fits the context. Custom icons follow the same rules as Pluma icons — same default size, same leading or trailing placement.iconPosition="leading" (default) to clarify the destination. Use iconPosition="trailing" for external links or to signal that a workflow continues.icon="exit" iconPosition="trailing").iconSize — accepts fill, xxs, xs, sm (default), md, lg, xl.iconAlignment — defaults to uppercase for leading icons and lowercase for trailing icons.iconLeading / iconTrailing when a link needs an icon on both sides at once. They render in addition to icon, never in place of it.elementBefore / elementAfter for leading or trailing content that isn't an icon. They pick up the same spacing the icons use, including when the link sits inside a paragraph.isLoading) — overlays a spinner on the link content. The link acts as disabled while loading.2px light blue outline is applied automatically. No prop required.isDisabled) — blocks interaction and applies a muted text color.isError) — applies critical color styling for a destructive action or error condition. Combines with isDisabled.truncate — links do not truncate within smaller containers and viewports by default.href, isDisabled, isExternal, withSafeExternalAttributes, and replace.autoLoading, default true) shows the spinner automatically when onClick returns a promise. Set autoLoading={false} to drive the spinner manually with isLoading.withSafeExternalAttributes={false} to turn off the automatic target="_blank" rel="noopener noreferrer" for other protocols such as mailto: or tel:.as — it defaults to a and resolves to button when onClick is set, href is absent, and as is not given. Set as explicitly to override.truncate accepts true or the string 'true'. Truncation also drops inline icon alignment, so iconAlignment has no effect while truncation is on.iconSrc images always render with alt="" — they are decorative, so meaning must come from the link text or an aria-label.isError — use isError in code.unsafe_isLegacy is deprecated and will be removed in the next major. Never set it; the component already renders in the target style.children; elementBefore / elementAfter take nodes. Ember: pass content via {{yield}} (default block); elementBefore / elementAfter take a component or the :elementBefore / :elementAfter named blocks.<PlumaLink @href="#" @variant="primary">Label</PlumaLink>.