import React from 'react'; import { BaseComponentProps } from '../internal/base-component'; import { BaseNavigationDetail, CancelableEventHandler, ClickDetail as _ClickDetail, NonCancelableEventHandler } from '../internal/events'; /** * @awsuiSystem core */ import { NativeAttributes } from '../internal/utils/with-native-attributes'; export interface LinkProps extends BaseComponentProps { /** * Determines the visual style of the link as follows: * * - `primary` - Displays the link text with an underline for sufficient contrast with surrounding text. * Use this for links adjacent to other text, such as inside a paragraph, a "Learn more" link, * an item ID in a table, a link in a key-value pair, or a link in an alert. * - `secondary` - Uses regular font weight without additional interactivity indicators (except for an underline on hover). * Use this where context implies interactivity and users can identify links easily, * such as in a list of links inside a container. * - `info` - Use for "info" links that link to content in a help panel. * * The default is `secondary`, except inside the following components where it defaults to `primary`: * - Table * - Cards * - Alert * - Popover * - Help Panel (main `content` only) */ variant?: LinkProps.Variant; /** * Determines the font size and line height. * This property is overridden if the variant is `info`. */ fontSize?: LinkProps.FontSize; /** * Determines the text color of the link and its icon. * * - `normal`: Use in most cases where a link is required. * - `inverted`: Use to style links inside Flashbars. * * This property is overridden if the variant is `info`. */ color?: LinkProps.Color; /** * Marks the link as external by adding an icon after the text. If `href` * is provided, opens the link in a new tab when clicked. */ external?: boolean; /** * Specifies where to open the linked URL. Set this to `_blank` to open the URL * in a new tab. If you set this property to `_blank`, the component * automatically adds `rel="noopener noreferrer"` to avoid performance * and security issues. * * For other options see the documentation for tag's * [target attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target). */ target?: string; /** * The URL that the link points to. * If an `href` is not provided, the component will render using a * "button" role and `target` will not be used. */ href?: string; /** * The text to render inside the link. */ children?: React.ReactNode; /** * Adds an aria-label to the HTML element. */ ariaLabel?: string; /** * Adds an aria-label to the external icon. * @i18n */ externalIconAriaLabel?: string; /** * Called when a link is clicked without any modifier keys. If the link has no `href` provided, it will be called on * all clicks. * * If you want to implement client-side routing yourself, use this event and prevent default browser navigation * (by calling `preventDefault`). */ onFollow?: CancelableEventHandler; /** * Called when the user clicks on the link. Do not use this handler for navigation, use the `onFollow` event instead. */ onClick?: NonCancelableEventHandler; /** * Adds a `rel` attribute to the link. If the `rel` property is provided, it overrides the default behaviour. * By default, the component sets the `rel` attribute to "noopener noreferrer" when `external` is `true` or `target` is `"_blank"`. */ rel?: string; /** * An object containing CSS properties to customize the link's visual appearance. * Refer to the [style](/components/link/?tabId=style) tab for more details. * @awsuiSystem core */ style?: LinkProps.Style; /** * Attributes to add to the native element. * Some attributes will be automatically combined with internal attribute values: * - `className` will be appended. * - Event handlers will be chained, unless the default is prevented. * * We do not support using this attribute to apply custom styling. * * @awsuiSystem core */ nativeAttributes?: NativeAttributes>; } export declare namespace LinkProps { type Variant = 'primary' | 'secondary' | 'info' | 'awsui-value-large'; type FontSize = 'body-s' | 'body-m' | 'heading-xs' | 'heading-s' | 'heading-m' | 'heading-l' | 'heading-xl' | 'display-l' | 'inherit'; type Color = 'normal' | 'inverted'; type FollowDetail = BaseNavigationDetail; interface Ref { /** * Sets the browser focus on the anchor element. */ focus(): void; } type ClickDetail = _ClickDetail; interface Style { root?: { color?: { active?: string; default?: string; hover?: string; }; focusRing?: { borderColor?: string; borderRadius?: string; borderWidth?: string; }; }; } }