pull/2992/head
tanjinzhou 2020-10-13 18:04:22 +08:00
commit 8e1678cc70
14 changed files with 73 additions and 56 deletions

View File

@ -30,7 +30,7 @@ PropTypes.extend([
}, },
]); ]);
export function withUndefined(type: any) { export function withUndefined<T extends { default?: any }>(type: T): T {
type.default = undefined; type.default = undefined;
return type; return type;
} }

View File

@ -198,7 +198,6 @@ const Affix = defineComponent({
this.setState(newState); this.setState(newState);
}, },
// @ts-ignore TS6133
prepareMeasure() { prepareMeasure() {
this.setState({ this.setState({
status: AffixStatus.Prepare, status: AffixStatus.Prepare,

View File

@ -64,7 +64,7 @@ export interface AntAnchor {
unregisterLink: (link: string) => void; unregisterLink: (link: string) => void;
$data: AnchorState; $data: AnchorState;
scrollTo: (link: string) => void; scrollTo: (link: string) => void;
$emit?: Function $emit?: Function;
} }
interface AnchorState { interface AnchorState {
activeLink: null | string; activeLink: null | string;
@ -242,7 +242,9 @@ export default defineComponent({
`${sPrefixCls}-link-title-active`, `${sPrefixCls}-link-title-active`,
)[0]; )[0];
if (linkNode) { if (linkNode) {
(this.$refs.inkNode as HTMLElement).style.top = `${linkNode.offsetTop + linkNode.clientHeight / 2 - 4.5}px`; (this.$refs.inkNode as HTMLElement).style.top = `${linkNode.offsetTop +
linkNode.clientHeight / 2 -
4.5}px`;
} }
}, },
}, },

View File

@ -45,7 +45,7 @@ const AutoComplete = defineComponent({
return { return {
configProvider: inject('configProvider', defaultConfigProvider), configProvider: inject('configProvider', defaultConfigProvider),
popupRef: null, popupRef: null,
select: null select: null,
}; };
}, },
created() { created() {
@ -86,7 +86,7 @@ const AutoComplete = defineComponent({
const getPrefixCls = this.configProvider.getPrefixCls; const getPrefixCls = this.configProvider.getPrefixCls;
const prefixCls = getPrefixCls('select', customizePrefixCls); const prefixCls = getPrefixCls('select', customizePrefixCls);
const { class: className} = this.$attrs as any; const { class: className } = this.$attrs as any;
const cls = { const cls = {
[className]: !!className, [className]: !!className,
[`${prefixCls}-lg`]: size === 'large', [`${prefixCls}-lg`]: size === 'large',

View File

@ -17,8 +17,6 @@ export interface CardTabListType {
} }
export type CardType = 'inner'; export type CardType = 'inner';
const CardSize = tuple('default', 'small');
export type CardSizeType = typeof CardSize[number];
const { TabPane } = Tabs; const { TabPane } = Tabs;
@ -35,10 +33,7 @@ const Card = defineComponent({
loading: PropTypes.looseBool.def(false), loading: PropTypes.looseBool.def(false),
hoverable: PropTypes.looseBool.def(false), hoverable: PropTypes.looseBool.def(false),
type: PropTypes.string, type: PropTypes.string,
size: { size: PropTypes.oneOf(tuple('default', 'small')),
type: String as PropType<CardSizeType>,
validator: (val: CardSizeType) => CardSize.includes(val),
},
actions: PropTypes.VNodeChild, actions: PropTypes.VNodeChild,
tabList: { tabList: {
type: Array as PropType<CardTabListType[]>, type: Array as PropType<CardTabListType[]>,

View File

@ -1,6 +1,6 @@
import { CSSProperties, VNodeTypes, inject, App, SetupContext, FunctionalComponent } from 'vue'; import { CSSProperties, VNodeTypes, inject, App, SetupContext, FunctionalComponent } from 'vue';
import classNames from '../_util/classNames'; import classNames from '../_util/classNames';
import { defaultConfigProvider, ConfigConsumerProps } from '../config-provider'; import { defaultConfigProvider } from '../config-provider';
import LocaleReceiver from '../locale-provider/LocaleReceiver'; import LocaleReceiver from '../locale-provider/LocaleReceiver';
import DefaultEmptyImg from './empty'; import DefaultEmptyImg from './empty';
import SimpleEmptyImg from './simple'; import SimpleEmptyImg from './simple';
@ -11,7 +11,7 @@ const defaultEmptyImg = <DefaultEmptyImg />;
const simpleEmptyImg = <SimpleEmptyImg />; const simpleEmptyImg = <SimpleEmptyImg />;
export interface TransferLocale { export interface TransferLocale {
description: string; description?: string;
} }
export interface EmptyProps { export interface EmptyProps {
@ -31,7 +31,7 @@ interface EmptyType extends FunctionalComponent<EmptyProps> {
} }
const Empty: EmptyType = (props: EmptyProps, { slots = {}, attrs }: SetupContext) => { const Empty: EmptyType = (props: EmptyProps, { slots = {}, attrs }: SetupContext) => {
const configProvider = inject<ConfigConsumerProps>('configProvider', defaultConfigProvider); const configProvider = inject('configProvider', defaultConfigProvider);
const { getPrefixCls, direction } = configProvider; const { getPrefixCls, direction } = configProvider;
const { const {
prefixCls: customizePrefixCls, prefixCls: customizePrefixCls,

View File

@ -1,4 +1,5 @@
import { inject, defineComponent, VNodeTypes, PropType } from 'vue'; import { inject, defineComponent, VNodeTypes, PropType } from 'vue';
import PropTypes from '../_util/vue-types';
import defaultLocaleData from './default'; import defaultLocaleData from './default';
import { Locale } from '.'; import { Locale } from '.';
@ -12,12 +13,14 @@ interface LocaleInterface {
[key: string]: any; [key: string]: any;
} }
export interface LocaleReceiverContext {
antLocale?: LocaleInterface;
}
export default defineComponent({ export default defineComponent({
name: 'LocaleReceiver', name: 'LocaleReceiver',
props: { props: {
componentName: { componentName: PropTypes.string,
type: String,
},
defaultLocale: { defaultLocale: {
type: [Object, Function], type: [Object, Function],
}, },
@ -29,7 +32,7 @@ export default defineComponent({
}, },
setup() { setup() {
return { return {
localeData: inject('localeData', {}), localeData: inject<LocaleReceiverContext>('localeData', {}),
}; };
}, },
methods: { methods: {

View File

@ -1,4 +1,4 @@
import { provide, App, defineComponent, VNode } from 'vue'; import { provide, App, defineComponent, VNode, PropType } from 'vue';
import PropTypes from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
import moment from 'moment'; import moment from 'moment';
import interopDefault from '../_util/interopDefault'; import interopDefault from '../_util/interopDefault';
@ -39,7 +39,7 @@ const LocaleProvider = defineComponent({
name: 'ALocaleProvider', name: 'ALocaleProvider',
props: { props: {
locale: { locale: {
type: Object, type: Object as PropType<Locale>,
}, },
ANT_MARK__: PropTypes.string, ANT_MARK__: PropTypes.string,
}, },

View File

@ -1,22 +1,27 @@
import { defineComponent, PropType } from 'vue';
import { tuple } from '../_util/type';
import UpOutlined from '@ant-design/icons-vue/UpOutlined'; import UpOutlined from '@ant-design/icons-vue/UpOutlined';
import DownOutlined from '@ant-design/icons-vue/DownOutlined'; import DownOutlined from '@ant-design/icons-vue/DownOutlined';
import LeftOutlined from '@ant-design/icons-vue/LeftOutlined'; import LeftOutlined from '@ant-design/icons-vue/LeftOutlined';
import RightOutlined from '@ant-design/icons-vue/RightOutlined'; import RightOutlined from '@ant-design/icons-vue/RightOutlined';
import ScrollableInkTabBar from '../vc-tabs/src/ScrollableInkTabBar'; import ScrollableInkTabBar from '../vc-tabs/src/ScrollableInkTabBar';
import PropTypes, { withUndefined } from '../_util/vue-types'; import PropTypes from '../_util/vue-types';
const TabBar = { const TabBar = defineComponent({
name: 'TabBar', name: 'TabBar',
inheritAttrs: false, inheritAttrs: false,
props: { props: {
prefixCls: PropTypes.string, prefixCls: PropTypes.string,
tabBarStyle: PropTypes.object, tabBarStyle: PropTypes.style,
tabBarExtraContent: PropTypes.any, tabBarExtraContent: PropTypes.VNodeChild,
type: PropTypes.oneOf(['line', 'card', 'editable-card']), type: PropTypes.oneOf(tuple('line', 'card', 'editable-card')),
tabPosition: PropTypes.oneOf(['top', 'right', 'bottom', 'left']).def('top'), tabPosition: PropTypes.oneOf(tuple('top', 'right', 'bottom', 'left')).def('top'),
tabBarPosition: PropTypes.oneOf(['top', 'right', 'bottom', 'left']), tabBarPosition: PropTypes.oneOf(tuple('top', 'right', 'bottom', 'left')),
size: PropTypes.oneOf(['default', 'small', 'large']), size: PropTypes.oneOf(tuple('default', 'small', 'large')),
animated: withUndefined(PropTypes.oneOfType([PropTypes.looseBool, PropTypes.object])), animated: {
type: [Boolean, Object] as PropType<boolean | { inkBar: boolean; tabPane: boolean }>,
default: undefined,
},
renderTabBar: PropTypes.func, renderTabBar: PropTypes.func,
panels: PropTypes.array.def([]), panels: PropTypes.array.def([]),
activeKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), activeKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
@ -56,7 +61,7 @@ const TabBar = {
); );
// Additional className for style usage // Additional className for style usage
const cls = { const cls = {
[this.$attrs.class]: this.$attrs.class, [this.$attrs.class as string]: this.$attrs.class,
[`${prefixCls}-${tabPosition}-bar`]: true, [`${prefixCls}-${tabPosition}-bar`]: true,
[`${prefixCls}-${size}-bar`]: !!size, [`${prefixCls}-${size}-bar`]: !!size,
[`${prefixCls}-card-bar`]: type && type.indexOf('card') >= 0, [`${prefixCls}-card-bar`]: type && type.indexOf('card') >= 0,
@ -80,6 +85,6 @@ const TabBar = {
return <ScrollableInkTabBar {...renderProps} />; return <ScrollableInkTabBar {...renderProps} />;
} }
}, },
}; });
export default TabBar; export default TabBar;

View File

@ -1,3 +1,4 @@
import { App } from 'vue';
import Tabs from './tabs'; import Tabs from './tabs';
import TabPane from '../vc-tabs/src/TabPane'; import TabPane from '../vc-tabs/src/TabPane';
import TabContent from '../vc-tabs/src/TabContent'; import TabContent from '../vc-tabs/src/TabContent';
@ -6,7 +7,7 @@ Tabs.TabPane = { ...TabPane, name: 'ATabPane', __ANT_TAB_PANE: true };
Tabs.TabContent = { ...TabContent, name: 'ATabContent' }; Tabs.TabContent = { ...TabContent, name: 'ATabContent' };
/* istanbul ignore next */ /* istanbul ignore next */
Tabs.install = function(app) { Tabs.install = function(app: App) {
app.component(Tabs.name, Tabs); app.component(Tabs.name, Tabs);
app.component(Tabs.TabPane.name, Tabs.TabPane); app.component(Tabs.TabPane.name, Tabs.TabPane);
app.component(Tabs.TabContent.name, Tabs.TabContent); app.component(Tabs.TabContent.name, Tabs.TabContent);

View File

@ -1,4 +1,5 @@
import { defineComponent, inject } from 'vue'; import { defineComponent, inject, PropType } from 'vue';
import { tuple } from '../_util/type';
import CloseOutlined from '@ant-design/icons-vue/CloseOutlined'; import CloseOutlined from '@ant-design/icons-vue/CloseOutlined';
import PlusOutlined from '@ant-design/icons-vue/PlusOutlined'; import PlusOutlined from '@ant-design/icons-vue/PlusOutlined';
import VcTabs, { TabPane } from '../vc-tabs/src'; import VcTabs, { TabPane } from '../vc-tabs/src';
@ -30,19 +31,29 @@ export default defineComponent({
tabBarStyle: PropTypes.object, tabBarStyle: PropTypes.object,
tabBarExtraContent: PropTypes.any, tabBarExtraContent: PropTypes.any,
destroyInactiveTabPane: PropTypes.looseBool.def(false), destroyInactiveTabPane: PropTypes.looseBool.def(false),
type: PropTypes.oneOf(['line', 'card', 'editable-card']), type: PropTypes.oneOf(tuple('line', 'card', 'editable-card')),
tabPosition: PropTypes.oneOf(['top', 'right', 'bottom', 'left']).def('top'), tabPosition: PropTypes.oneOf(['top', 'right', 'bottom', 'left']).def('top'),
size: PropTypes.oneOf(['default', 'small', 'large']), size: PropTypes.oneOf(['default', 'small', 'large']),
animated: withUndefined(PropTypes.oneOfType([PropTypes.looseBool, PropTypes.object])), animated: withUndefined(PropTypes.oneOfType([PropTypes.looseBool, PropTypes.object])),
tabBarGutter: PropTypes.number, tabBarGutter: PropTypes.number,
renderTabBar: PropTypes.func, renderTabBar: PropTypes.func,
onChange: PropTypes.func, onChange: {
onTabClick: PropTypes.func, type: Function as PropType<(activeKey: string) => void>,
onPrevClick: PropTypes.func,
onNextClick: PropTypes.func,
onEdit: PropTypes.func,
'onUpdate:activeKey': PropTypes.func,
}, },
onTabClick: PropTypes.func,
onPrevClick: {
type: Function as PropType<(e: MouseEvent) => void>,
},
onNextClick: {
type: Function as PropType<(e: MouseEvent) => void>,
},
onEdit: {
type: Function as PropType<
(targetKey: string | MouseEvent, action: 'add' | 'remove') => void
>,
},
},
emits: ['update:activeKey', 'edit', 'change'],
setup() { setup() {
return { return {
configProvider: inject('configProvider', defaultConfigProvider), configProvider: inject('configProvider', defaultConfigProvider),
@ -56,17 +67,17 @@ export default defineComponent({
} }
}, },
methods: { methods: {
removeTab(targetKey, e) { removeTab(targetKey: string, e: MouseEvent) {
e.stopPropagation(); e.stopPropagation();
if (isValid(targetKey)) { if (isValid(targetKey)) {
this.$emit('edit', targetKey, 'remove'); this.$emit('edit', targetKey, 'remove');
} }
}, },
handleChange(activeKey) { handleChange(activeKey: string) {
this.$emit('update:activeKey', activeKey); this.$emit('update:activeKey', activeKey);
this.$emit('change', activeKey); this.$emit('change', activeKey);
}, },
createNewTab(targetKey) { createNewTab(targetKey: MouseEvent) {
this.$emit('edit', targetKey, 'add'); this.$emit('edit', targetKey, 'add');
}, },
}, },
@ -95,7 +106,7 @@ export default defineComponent({
tabPaneAnimated = 'animated' in props ? tabPaneAnimated : false; tabPaneAnimated = 'animated' in props ? tabPaneAnimated : false;
} }
const cls = { const cls = {
[className]: className, [className as string]: className,
[`${prefixCls}-vertical`]: tabPosition === 'left' || tabPosition === 'right', [`${prefixCls}-vertical`]: tabPosition === 'left' || tabPosition === 'right',
[`${prefixCls}-${size}`]: !!size, [`${prefixCls}-${size}`]: !!size,
[`${prefixCls}-card`]: type.indexOf('card') >= 0, [`${prefixCls}-card`]: type.indexOf('card') >= 0,
@ -107,7 +118,7 @@ export default defineComponent({
if (type === 'editable-card') { if (type === 'editable-card') {
childrenWithClose = []; childrenWithClose = [];
children.forEach((child, index) => { children.forEach((child, index) => {
const props = getPropsData(child); const props = getPropsData(child) as any;
let closable = props.closable; let closable = props.closable;
closable = typeof closable === 'undefined' ? true : closable; closable = typeof closable === 'undefined' ? true : closable;
const closeIcon = closable ? ( const closeIcon = closable ? (

View File

@ -2,7 +2,7 @@ import { FunctionalComponent } from 'vue';
import { OptionGroupData } from './interface'; import { OptionGroupData } from './interface';
export interface OptGroupProps extends Omit<OptionGroupData, 'options'> {} export type OptGroupProps = Omit<OptionGroupData, 'options'>;
export interface OptionGroupFC extends FunctionalComponent<OptGroupProps> { export interface OptionGroupFC extends FunctionalComponent<OptGroupProps> {
/** Legacy for check if is a Option Group */ /** Legacy for check if is a Option Group */

View File

@ -254,7 +254,7 @@ export default function generateSelector<
const mergedId = computed(() => props.id || `rc_select_${getUUID()}`); const mergedId = computed(() => props.id || `rc_select_${getUUID()}`);
// optionLabelProp // optionLabelProp
let mergedOptionLabelProp = computed(() => { const mergedOptionLabelProp = computed(() => {
let mergedOptionLabelProp = props.optionLabelProp; let mergedOptionLabelProp = props.optionLabelProp;
if (mergedOptionLabelProp === undefined) { if (mergedOptionLabelProp === undefined) {
mergedOptionLabelProp = props.options ? 'label' : 'children'; mergedOptionLabelProp = props.options ? 'label' : 'children';
@ -554,7 +554,7 @@ export default function generateSelector<
// ============================== Open ============================== // ============================== Open ==============================
const innerOpen = ref(undefined); const innerOpen = ref(undefined);
let mergedOpen = ref(undefined); const mergedOpen = ref(undefined);
const setInnerOpen = (val: boolean) => { const setInnerOpen = (val: boolean) => {
innerOpen.value = val; innerOpen.value = val;
mergedOpen.value = innerOpen.value; mergedOpen.value = innerOpen.value;

View File

@ -1,10 +1,11 @@
import { defineComponent } from 'vue';
import InkTabBarNode from './InkTabBarNode'; import InkTabBarNode from './InkTabBarNode';
import TabBarTabsNode from './TabBarTabsNode'; import TabBarTabsNode from './TabBarTabsNode';
import TabBarRootNode from './TabBarRootNode'; import TabBarRootNode from './TabBarRootNode';
import ScrollableTabBarNode from './ScrollableTabBarNode'; import ScrollableTabBarNode from './ScrollableTabBarNode';
import SaveRef from './SaveRef'; import SaveRef from './SaveRef';
export default { export default defineComponent({
name: 'ScrollableInkTabBar', name: 'ScrollableInkTabBar',
inheritAttrs: false, inheritAttrs: false,
render() { render() {
@ -22,4 +23,4 @@ export default {
/> />
); );
}, },
}; });