// Link -- a text link that follows the theme. // // // // // external adds rel="noopener noreferrer" and an outbound icon, so the reader // is told the link leaves the site before they follow it. // // NOTE: the style block uses /* */ comments only -- // is not a CSS comment // and silently swallows the rule that follows it. component Link { props { size: string = "default" color: string = "primary" label: string = "Link" href: string = "#" target: string = "" rel: string = "" underline: string = "hover" external: boolean = false class: string = "" } view { {label} } style { .wrn-link { --link-tone: var(--wrn-color-primary); --link-tone-hover: var(--wrn-color-primary-hover); display: inline-flex; align-items: center; gap: 0.35rem; min-width: 0; border-radius: var(--wrn-radius-sm); color: var(--link-tone); font-size: 0.875rem; font-weight: 600; text-decoration: none; text-underline-offset: 4px; transition: color 140ms ease; } .wrn-link[data-color="secondary"] { --link-tone: var(--wrn-color-secondary); --link-tone-hover: var(--wrn-color-secondary-hover); } .wrn-link[data-color="success"] { --link-tone: var(--wrn-color-success); --link-tone-hover: var(--wrn-color-success); } .wrn-link[data-color="warning"] { --link-tone: var(--wrn-color-warning-text); --link-tone-hover: var(--wrn-color-warning-text); } .wrn-link[data-color="danger"] { --link-tone: var(--wrn-color-danger); --link-tone-hover: var(--wrn-color-danger); } .wrn-link[data-color="info"] { --link-tone: var(--wrn-color-info); --link-tone-hover: var(--wrn-color-info); } .wrn-link[data-color="neutral"] { --link-tone: var(--wrn-color-text); --link-tone-hover: var(--wrn-color-text); } .wrn-link[data-size="xs"] { font-size: 0.75rem; } .wrn-link[data-size="md"] { font-size: 1rem; } .wrn-link[data-size="lg"] { font-size: 1.125rem; } .wrn-link[data-underline="always"] { text-decoration: underline; } .wrn-link[data-underline="hover"]:hover { text-decoration: underline; } .wrn-link:hover { color: var(--link-tone-hover); } .wrn-link:focus-visible { outline: 2px solid var(--wrn-color-focus); outline-offset: 2px; } /* The label truncates; the outbound icon must not shrink with it. */ .wrn-link__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .wrn-link__icon { flex: 0 0 auto; width: 0.875rem; height: 0.875rem; } } }