ant-design-vue/components/typography/Link.tsx
tangjinzhou b0025d9e79
feat: add typography (#3807)
* feat: add typography

* fix: review typography

* fix: review typography

* feat: update typography

* feat: update typography

* fix: typography

* test: update typography

Co-authored-by: zkwolf <chenhao5866@gmail.com>
2021-03-16 12:54:22 +08:00

36 lines
1.1 KiB
Vue

import { AnchorHTMLAttributes, FunctionalComponent } from 'vue';
import warning from '../_util/warning';
import Base, { baseProps, BlockProps } from './Base';
import Omit from 'omit.js';
import PropTypes from '../_util/vue-types';
export interface LinkProps extends BlockProps, Omit<AnchorHTMLAttributes, 'type'> {
ellipsis?: boolean;
}
const Link: FunctionalComponent<LinkProps> = (props, { slots, attrs }) => {
const { ellipsis, rel, ...restProps } = { ...props, ...attrs };
warning(
typeof ellipsis !== 'object',
'Typography.Link',
'`ellipsis` only supports boolean value.',
);
const mergedProps = {
...restProps,
rel: rel === undefined && restProps.target === '_blank' ? 'noopener noreferrer' : rel,
ellipsis: !!ellipsis,
component: 'a',
};
// https://github.com/ant-design/ant-design/issues/26622
// @ts-ignore
delete mergedProps.navigate;
return <Base {...mergedProps} v-slots={slots}></Base>;
};
Link.displayName = 'ATypographyLink';
Link.inheritAttrs = false;
Link.props = Omit({ ...baseProps(), ellipsis: PropTypes.looseBool }, ['component']);
export default Link;