This commit is contained in:
2026-05-25 17:08:18 +08:00
parent df501f6151
commit f1259b71b5
9178 changed files with 1626125 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
import * as React from 'react';
import type { PickType } from '@rc-component/cascader/lib/Panel';
import type { CascaderProps, DefaultOptionType } from '.';
export type PanelPickType = Exclude<PickType, 'checkable'> | 'multiple' | 'rootClassName';
export type CascaderPanelProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean = boolean> = Pick<CascaderProps<OptionType, ValueField, Multiple>, PanelPickType>;
export type CascaderPanelAutoProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> = (CascaderPanelProps<OptionType, ValueField> & {
multiple?: false;
}) | (CascaderPanelProps<OptionType, ValueField, true> & {
multiple: true;
});
declare function CascaderPanel<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType>(props: CascaderPanelAutoProps<OptionType, ValueField>): React.JSX.Element;
export default CascaderPanel;
+75
View File
@@ -0,0 +1,75 @@
"use strict";
"use client";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _cascader = require("@rc-component/cascader");
var _clsx = require("clsx");
var _context = require("../config-provider/context");
var _defaultRenderEmpty = _interopRequireDefault(require("../config-provider/defaultRenderEmpty"));
var _DisabledContext = _interopRequireDefault(require("../config-provider/DisabledContext"));
var _useCSSVarCls = _interopRequireDefault(require("../config-provider/hooks/useCSSVarCls"));
var _useBase = _interopRequireDefault(require("./hooks/useBase"));
var _useCheckable = _interopRequireDefault(require("./hooks/useCheckable"));
var _style = _interopRequireDefault(require("./style"));
var _panel = _interopRequireDefault(require("./style/panel"));
var _useIcons = _interopRequireDefault(require("./hooks/useIcons"));
function CascaderPanel(props) {
const {
prefixCls: customizePrefixCls,
className,
multiple,
rootClassName,
notFoundContent,
direction,
expandIcon,
loadingIcon,
disabled: customDisabled
} = props;
const {
expandIcon: contextExpandIcon,
loadingIcon: contextLoadingIcon
} = (0, _context.useComponentConfig)('cascader');
const disabled = React.useContext(_DisabledContext.default);
const mergedDisabled = customDisabled ?? disabled;
const [_, cascaderPrefixCls, mergedDirection, renderEmpty] = (0, _useBase.default)(customizePrefixCls, direction);
const rootCls = (0, _useCSSVarCls.default)(cascaderPrefixCls);
const [hashId, cssVarCls] = (0, _style.default)(cascaderPrefixCls, rootCls);
(0, _panel.default)(cascaderPrefixCls);
const isRtl = mergedDirection === 'rtl';
// ===================== Icon ======================
const {
expandIcon: mergedExpandIcon,
loadingIcon: mergedLoadingIcon
} = (0, _useIcons.default)({
contextExpandIcon,
contextLoadingIcon,
expandIcon,
loadingIcon,
isRtl
});
// ===================== Empty =====================
const mergedNotFoundContent = notFoundContent || renderEmpty?.('Cascader') || (/*#__PURE__*/React.createElement(_defaultRenderEmpty.default, {
componentName: "Cascader"
}));
// =================== Multiple ====================
const checkable = (0, _useCheckable.default)(cascaderPrefixCls, multiple);
// ==================== Render =====================
return /*#__PURE__*/React.createElement(_cascader.Panel, {
...props,
checkable: checkable,
prefixCls: cascaderPrefixCls,
className: (0, _clsx.clsx)(className, hashId, rootClassName, cssVarCls, rootCls),
notFoundContent: mergedNotFoundContent,
direction: mergedDirection,
expandIcon: mergedExpandIcon,
loadingIcon: mergedLoadingIcon,
disabled: mergedDisabled
});
}
var _default = exports.default = CascaderPanel;
+8
View File
@@ -0,0 +1,8 @@
import type { DirectionType, RenderEmptyHandler } from '../../config-provider';
declare function useBase(customizePrefixCls?: string, direction?: DirectionType): [
prefixCls: string,
cascaderPrefixCls: string,
direction?: DirectionType,
renderEmpty?: RenderEmptyHandler
];
export default useBase;
+21
View File
@@ -0,0 +1,21 @@
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _configProvider = require("../../config-provider");
function useBase(customizePrefixCls, direction) {
const {
getPrefixCls,
direction: rootDirection,
renderEmpty
} = React.useContext(_configProvider.ConfigContext);
const mergedDirection = direction || rootDirection;
const prefixCls = getPrefixCls('select', customizePrefixCls);
const cascaderPrefixCls = getPrefixCls('cascader', customizePrefixCls);
return [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty];
}
var _default = exports.default = useBase;
@@ -0,0 +1,2 @@
import * as React from 'react';
export default function useCheckable(cascaderPrefixCls: string, multiple?: boolean): false | React.JSX.Element;
+14
View File
@@ -0,0 +1,14 @@
"use strict";
"use client";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useCheckable;
var React = _interopRequireWildcard(require("react"));
function useCheckable(cascaderPrefixCls, multiple) {
return React.useMemo(() => multiple ? /*#__PURE__*/React.createElement("span", {
className: `${cascaderPrefixCls}-checkbox-inner`
}) : false, [cascaderPrefixCls, multiple]);
}
+12
View File
@@ -0,0 +1,12 @@
import * as React from 'react';
export interface UseIconsOptions {
isRtl: boolean;
expandIcon: React.ReactNode;
loadingIcon: React.ReactNode;
contextExpandIcon: React.ReactNode;
contextLoadingIcon: React.ReactNode;
}
export default function useIcons({ contextExpandIcon, contextLoadingIcon, expandIcon, loadingIcon, isRtl, }: UseIconsOptions): {
expandIcon: string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element;
loadingIcon: string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element;
};
+30
View File
@@ -0,0 +1,30 @@
"use strict";
"use client";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useIcons;
var React = _interopRequireWildcard(require("react"));
var _RightOutlined = _interopRequireDefault(require("@ant-design/icons/RightOutlined"));
var _LoadingOutlined = _interopRequireDefault(require("@ant-design/icons/LoadingOutlined"));
var _LeftOutlined = _interopRequireDefault(require("@ant-design/icons/LeftOutlined"));
const defaultLoadingIcon = /*#__PURE__*/React.createElement(_LoadingOutlined.default, {
spin: true
});
const defaultExpandIcon = /*#__PURE__*/React.createElement(_RightOutlined.default, null);
const defaultRtlExpandIcon = /*#__PURE__*/React.createElement(_LeftOutlined.default, null);
function useIcons({
contextExpandIcon,
contextLoadingIcon,
expandIcon,
loadingIcon,
isRtl
}) {
return React.useMemo(() => ({
expandIcon: expandIcon ?? contextExpandIcon ?? (isRtl ? defaultRtlExpandIcon : defaultExpandIcon),
loadingIcon: loadingIcon ?? contextLoadingIcon ?? defaultLoadingIcon
}), [contextExpandIcon, contextLoadingIcon, expandIcon, isRtl, loadingIcon]);
}
+102
View File
@@ -0,0 +1,102 @@
import * as React from 'react';
import type { BaseOptionType, DefaultOptionType, FieldNames, CascaderProps as RcCascaderProps } from '@rc-component/cascader';
import type { SemanticClassNamesType, SemanticStylesType } from '../_util/hooks';
import type { SelectCommonPlacement } from '../_util/motion';
import type { InputStatus } from '../_util/statusUtils';
import type { Variant } from '../config-provider';
import type { SizeType } from '../config-provider/SizeContext';
import type { SelectPopupSemanticClassNames, SelectPopupSemanticStyles } from '../select';
import CascaderPanel from './Panel';
export type { BaseOptionType, DefaultOptionType };
export type FieldNamesType = FieldNames;
export type FilledFieldNamesType = Required<FieldNamesType>;
export type CascaderSemanticName = keyof CascaderSemanticClassNames & keyof CascaderSemanticStyles;
export type CascaderSemanticClassNames = {
root?: string;
prefix?: string;
suffix?: string;
input?: string;
placeholder?: string;
content?: string;
item?: string;
itemContent?: string;
itemRemove?: string;
};
export type CascaderSemanticStyles = {
root?: React.CSSProperties;
prefix?: React.CSSProperties;
suffix?: React.CSSProperties;
input?: React.CSSProperties;
placeholder?: React.CSSProperties;
content?: React.CSSProperties;
item?: React.CSSProperties;
itemContent?: React.CSSProperties;
itemRemove?: React.CSSProperties;
};
declare const SHOW_CHILD: "SHOW_CHILD", SHOW_PARENT: "SHOW_PARENT";
export type CascaderClassNamesType = SemanticClassNamesType<CascaderProps, CascaderSemanticClassNames, {
popup?: SelectPopupSemanticClassNames;
}>;
export type CascaderStylesType = SemanticStylesType<CascaderProps, CascaderSemanticStyles, {
popup?: SelectPopupSemanticStyles;
}>;
export interface CascaderProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType, Multiple extends boolean = boolean> extends Omit<RcCascaderProps<OptionType, ValueField, Multiple>, 'checkable' | 'classNames' | 'styles'> {
multiple?: Multiple;
size?: SizeType;
/**
* @deprecated `showArrow` is deprecated which will be removed in next major version. It will be a
* default behavior, you can hide it by setting `suffixIcon` to null.
*/
showArrow?: boolean;
disabled?: boolean;
/** @deprecated Use `variant` instead. */
bordered?: boolean;
placement?: SelectCommonPlacement;
suffixIcon?: React.ReactNode;
options?: OptionType[];
status?: InputStatus;
rootClassName?: string;
/** @deprecated Please use `classNames.popup.root` instead */
popupClassName?: string;
/** @deprecated Please use `classNames.popup.root` instead */
dropdownClassName?: string;
/** @deprecated Please use `styles.popup.root` instead */
dropdownStyle?: React.CSSProperties;
/** @deprecated Please use `popupRender` instead */
dropdownRender?: (menu: React.ReactElement) => React.ReactElement;
popupRender?: (menu: React.ReactElement) => React.ReactElement;
/** @deprecated Please use `styles.popup.listItem` instead */
dropdownMenuColumnStyle?: React.CSSProperties;
/** @deprecated Please use `styles.popup.listItem` instead */
popupMenuColumnStyle?: React.CSSProperties;
/** @deprecated Please use `onOpenChange` instead */
onDropdownVisibleChange?: (visible: boolean) => void;
/** @deprecated Please use `onOpenChange` instead */
onPopupVisibleChange?: (visible: boolean) => void;
onOpenChange?: (visible: boolean) => void;
/**
* @since 5.13.0
* @default "outlined"
*/
variant?: Variant;
classNames?: CascaderClassNamesType;
styles?: CascaderStylesType;
}
export type CascaderAutoProps<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType> = (CascaderProps<OptionType, ValueField> & {
multiple?: false;
}) | (CascaderProps<OptionType, ValueField, true> & {
multiple: true;
});
export interface CascaderRef {
focus: () => void;
blur: () => void;
}
declare const Cascader: (<OptionType extends DefaultOptionType = DefaultOptionType, ValueField extends keyof OptionType = keyof OptionType>(props: React.PropsWithChildren<CascaderAutoProps<OptionType, ValueField>> & React.RefAttributes<CascaderRef>) => React.ReactElement) & {
displayName: string;
SHOW_PARENT: typeof SHOW_PARENT;
SHOW_CHILD: typeof SHOW_CHILD;
Panel: typeof CascaderPanel;
_InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel;
};
declare const PurePanel: (props: import("../_util/type").AnyObject) => React.JSX.Element;
export default Cascader;
+318
View File
@@ -0,0 +1,318 @@
"use strict";
"use client";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var React = _interopRequireWildcard(require("react"));
var _cascader = _interopRequireDefault(require("@rc-component/cascader"));
var _util = require("@rc-component/util");
var _clsx = require("clsx");
var _hooks = require("../_util/hooks");
var _is = require("../_util/is");
var _motion = require("../_util/motion");
var _PurePanel = _interopRequireDefault(require("../_util/PurePanel"));
var _statusUtils = require("../_util/statusUtils");
var _warning = require("../_util/warning");
var _configProvider = require("../config-provider");
var _context = require("../config-provider/context");
var _defaultRenderEmpty = _interopRequireDefault(require("../config-provider/defaultRenderEmpty"));
var _DisabledContext = _interopRequireDefault(require("../config-provider/DisabledContext"));
var _useCSSVarCls = _interopRequireDefault(require("../config-provider/hooks/useCSSVarCls"));
var _useSize = _interopRequireDefault(require("../config-provider/hooks/useSize"));
var _context2 = require("../form/context");
var _useVariants = _interopRequireDefault(require("../form/hooks/useVariants"));
var _mergedBuiltinPlacements = _interopRequireDefault(require("../select/mergedBuiltinPlacements"));
var _style = _interopRequireDefault(require("../select/style"));
var _useIcons = _interopRequireDefault(require("../select/useIcons"));
var _usePopupRender = _interopRequireDefault(require("../select/usePopupRender"));
var _useShowArrow = _interopRequireDefault(require("../select/useShowArrow"));
var _Compact = require("../space/Compact");
var _useBase = _interopRequireDefault(require("./hooks/useBase"));
var _useCheckable = _interopRequireDefault(require("./hooks/useCheckable"));
var _useIcons2 = _interopRequireDefault(require("./hooks/useIcons"));
var _Panel = _interopRequireDefault(require("./Panel"));
var _style2 = _interopRequireDefault(require("./style"));
const {
SHOW_CHILD,
SHOW_PARENT
} = _cascader.default;
const highlightKeyword = (str, lowerKeyword, prefixCls) => {
const cells = str.toLowerCase().split(lowerKeyword).reduce((list, cur, index) => index === 0 ? [cur] : [].concat((0, _toConsumableArray2.default)(list), [lowerKeyword, cur]), []);
const fillCells = [];
let start = 0;
cells.forEach((cell, index) => {
const end = start + cell.length;
let originWorld = str.slice(start, end);
start = end;
if (index % 2 === 1) {
originWorld = /*#__PURE__*/React.createElement("span", {
className: `${prefixCls}-menu-item-keyword`,
key: `separator-${index}`
}, originWorld);
}
fillCells.push(originWorld);
});
return fillCells;
};
const defaultSearchRender = (inputValue, path, prefixCls, fieldNames) => {
const optionList = [];
// We do lower here to save perf
const lower = inputValue.toLowerCase();
path.forEach((node, index) => {
if (index !== 0) {
optionList.push(' / ');
}
let label = node[fieldNames.label];
const type = typeof label;
if (type === 'string' || type === 'number') {
label = highlightKeyword(String(label), lower, prefixCls);
}
optionList.push(label);
});
return optionList;
};
const Cascader = /*#__PURE__*/React.forwardRef((props, ref) => {
const {
prefixCls: customizePrefixCls,
size: customizeSize,
disabled: customDisabled,
className,
rootClassName,
multiple,
bordered = true,
transitionName,
choiceTransitionName = '',
popupClassName,
expandIcon,
placement,
showSearch,
allowClear = true,
notFoundContent,
direction,
getPopupContainer,
status: customStatus,
showArrow,
builtinPlacements,
style,
variant: customVariant,
dropdownClassName,
dropdownRender,
onDropdownVisibleChange,
onPopupVisibleChange,
dropdownMenuColumnStyle,
popupRender,
dropdownStyle,
popupMenuColumnStyle,
onOpenChange,
styles,
classNames,
loadingIcon,
...rest
} = props;
const restProps = (0, _util.omit)(rest, ['suffixIcon']);
const {
getPrefixCls,
getPopupContainer: getContextPopupContainer,
className: contextClassName,
style: contextStyle,
classNames: contextClassNames,
styles: contextStyles,
expandIcon: contextExpandIcon,
loadingIcon: contextLoadingIcon
} = (0, _context.useComponentConfig)('cascader');
const {
popupOverflow
} = React.useContext(_configProvider.ConfigContext);
// =================== Form =====================
const {
status: contextStatus,
hasFeedback,
isFormItemInput,
feedbackIcon
} = React.useContext(_context2.FormItemInputContext);
const mergedStatus = (0, _statusUtils.getMergedStatus)(contextStatus, customStatus);
// =================== Warning =====================
if (process.env.NODE_ENV !== 'production') {
const warning = (0, _warning.devUseWarning)('Cascader');
// v5 deprecated dropdown api
const deprecatedProps = {
dropdownClassName: 'classNames.popup.root',
dropdownStyle: 'styles.popup.root',
dropdownRender: 'popupRender',
dropdownMenuColumnStyle: 'styles.popup.listItem',
popupMenuColumnStyle: 'styles.popup.listItem',
onDropdownVisibleChange: 'onOpenChange',
onPopupVisibleChange: 'onOpenChange',
bordered: 'variant'
};
Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {
warning.deprecated(!(oldProp in props), oldProp, newProp);
});
process.env.NODE_ENV !== "production" ? warning(!('showArrow' in props), 'deprecated', '`showArrow` is deprecated which will be removed in next major version. It will be a default behavior, you can hide it by setting `suffixIcon` to null.') : void 0;
}
// ==================== Prefix =====================
const [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty] = (0, _useBase.default)(customizePrefixCls, direction);
const isRtl = mergedDirection === 'rtl';
const rootPrefixCls = getPrefixCls();
const rootCls = (0, _useCSSVarCls.default)(prefixCls);
const [hashId, cssVarCls] = (0, _style.default)(prefixCls, rootCls);
const cascaderRootCls = (0, _useCSSVarCls.default)(cascaderPrefixCls);
(0, _style2.default)(cascaderPrefixCls, cascaderRootCls);
const {
compactSize,
compactItemClassnames
} = (0, _Compact.useCompactItemContext)(prefixCls, direction);
const [variant, enableVariantCls] = (0, _useVariants.default)('cascader', customVariant, bordered);
// =================== No Found ====================
const mergedNotFoundContent = notFoundContent || renderEmpty?.('Cascader') || (/*#__PURE__*/React.createElement(_defaultRenderEmpty.default, {
componentName: "Cascader"
}));
const mergedPopupRender = (0, _usePopupRender.default)(popupRender || dropdownRender);
const mergedPopupMenuColumnStyle = popupMenuColumnStyle || dropdownMenuColumnStyle;
const mergedOnOpenChange = onOpenChange || onPopupVisibleChange || onDropdownVisibleChange;
// ==================== Search =====================
const mergedShowSearch = React.useMemo(() => {
if (!showSearch) {
return showSearch;
}
let searchConfig = {
render: defaultSearchRender
};
if ((0, _is.isPlainObject)(showSearch)) {
searchConfig = {
...searchConfig,
...showSearch
};
}
return searchConfig;
}, [showSearch]);
// ===================== Size ======================
const mergedSize = (0, _useSize.default)(ctx => customizeSize ?? compactSize ?? ctx);
// ===================== Disabled =====================
const disabled = React.useContext(_DisabledContext.default);
const mergedDisabled = customDisabled ?? disabled;
// ===================== Icon ======================
const {
expandIcon: mergedExpandIcon,
loadingIcon: mergedLoadingIcon
} = (0, _useIcons2.default)({
contextExpandIcon,
contextLoadingIcon,
expandIcon,
loadingIcon,
isRtl
});
// =================== Multiple ====================
const checkable = (0, _useCheckable.default)(cascaderPrefixCls, multiple);
// ===================== Icons =====================
const showSuffixIcon = (0, _useShowArrow.default)(props.suffixIcon, showArrow);
const {
suffixIcon,
removeIcon,
clearIcon
} = (0, _useIcons.default)({
...props,
loadingIcon: mergedLoadingIcon,
hasFeedback,
feedbackIcon,
showSuffixIcon,
multiple,
prefixCls,
componentName: 'Cascader'
});
// ===================== Placement =====================
const memoPlacement = React.useMemo(() => {
if (placement !== undefined) {
return placement;
}
return isRtl ? 'bottomRight' : 'bottomLeft';
}, [placement, isRtl]);
const mergedAllowClear = allowClear === true ? {
clearIcon
} : allowClear;
// =========== Merged Props for Semantic ==========
const mergedProps = {
...props,
variant,
size: mergedSize,
status: mergedStatus,
disabled: mergedDisabled
};
const [mergedClassNames, mergedStyles] = (0, _hooks.useMergeSemantic)([contextClassNames, classNames], [contextStyles, styles], {
props: mergedProps
}, {
popup: {
_default: 'root'
}
});
// =================== Dropdown ====================
const mergedPopupStyle = {
...mergedStyles.popup?.root,
...dropdownStyle
};
// ============================ zIndex ============================
const [zIndex] = (0, _hooks.useZIndex)('SelectLike', mergedPopupStyle?.zIndex);
const mergedPopupClassName = (0, _clsx.clsx)(popupClassName || dropdownClassName, `${cascaderPrefixCls}-dropdown`, {
[`${cascaderPrefixCls}-dropdown-rtl`]: mergedDirection === 'rtl'
}, rootClassName, rootCls, mergedClassNames.popup?.root, cascaderRootCls, hashId, cssVarCls);
// ==================== Render =====================
return /*#__PURE__*/React.createElement(_cascader.default, {
prefixCls: prefixCls,
className: (0, _clsx.clsx)(!customizePrefixCls && cascaderPrefixCls, {
[`${prefixCls}-lg`]: mergedSize === 'large',
[`${prefixCls}-sm`]: mergedSize === 'small',
[`${prefixCls}-rtl`]: isRtl,
[`${prefixCls}-${variant}`]: enableVariantCls,
[`${prefixCls}-in-form-item`]: isFormItemInput
}, (0, _statusUtils.getStatusClassNames)(prefixCls, mergedStatus, hasFeedback), compactItemClassnames, contextClassName, className, rootClassName, mergedClassNames.root, rootCls, cascaderRootCls, hashId, cssVarCls),
disabled: mergedDisabled,
style: {
...mergedStyles.root,
...contextStyle,
...style
},
classNames: mergedClassNames,
styles: mergedStyles,
...restProps,
builtinPlacements: (0, _mergedBuiltinPlacements.default)(builtinPlacements, popupOverflow),
direction: mergedDirection,
placement: memoPlacement,
notFoundContent: mergedNotFoundContent,
allowClear: mergedAllowClear,
showSearch: mergedShowSearch,
expandIcon: mergedExpandIcon,
suffixIcon: suffixIcon,
removeIcon: removeIcon,
loadingIcon: mergedLoadingIcon,
checkable: checkable,
popupClassName: mergedPopupClassName,
popupPrefixCls: customizePrefixCls || cascaderPrefixCls,
popupStyle: {
...mergedPopupStyle,
zIndex
},
popupRender: mergedPopupRender,
popupMenuColumnStyle: mergedPopupMenuColumnStyle,
onPopupVisibleChange: mergedOnOpenChange,
choiceTransitionName: (0, _motion.getTransitionName)(rootPrefixCls, '', choiceTransitionName),
transitionName: (0, _motion.getTransitionName)(rootPrefixCls, 'slide-up', transitionName),
getPopupContainer: getPopupContainer || getContextPopupContainer,
ref: ref
});
});
if (process.env.NODE_ENV !== 'production') {
Cascader.displayName = 'Cascader';
}
// We don't care debug panel
/* istanbul ignore next */
const PurePanel = (0, _PurePanel.default)(Cascader, 'popupAlign', props => (0, _util.omit)(props, ['visible']));
Cascader.SHOW_PARENT = SHOW_PARENT;
Cascader.SHOW_CHILD = SHOW_CHILD;
Cascader.Panel = _Panel.default;
Cascader._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;
var _default = exports.default = Cascader;
+5
View File
@@ -0,0 +1,5 @@
import type { CSSInterpolation } from '@ant-design/cssinjs';
import type { CascaderToken } from '.';
import type { GenerateStyle } from '../../theme/internal';
declare const getColumnsStyle: GenerateStyle<CascaderToken, CSSInterpolation>;
export default getColumnsStyle;
+110
View File
@@ -0,0 +1,110 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _cssinjs = require("@ant-design/cssinjs");
var _style = require("../../checkbox/style");
var _style2 = require("../../style");
const getColumnsStyle = token => {
const {
prefixCls,
componentCls
} = token;
const cascaderMenuItemCls = `${componentCls}-menu-item`;
const iconCls = `
&${cascaderMenuItemCls}-expand ${cascaderMenuItemCls}-expand-icon,
${cascaderMenuItemCls}-loading-icon
`;
return [
// ==================== Checkbox ====================
(0, _style.getStyle)(`${prefixCls}-checkbox`, token), {
[componentCls]: {
// ================== Checkbox ==================
'&-checkbox': {
top: 0,
marginInlineEnd: token.paddingXS,
pointerEvents: 'unset'
},
// ==================== Menu ====================
// >>> Menus
'&-menus': {
display: 'flex',
flexWrap: 'nowrap',
alignItems: 'flex-start',
[`&${componentCls}-menu-empty`]: {
[`${componentCls}-menu`]: {
width: '100%',
height: 'auto',
[cascaderMenuItemCls]: {
color: token.colorTextDisabled
}
}
}
},
// >>> Menu
'&-menu': {
flexGrow: 1,
flexShrink: 0,
minWidth: token.controlItemWidth,
height: token.dropdownHeight,
margin: 0,
padding: token.menuPadding,
overflow: 'auto',
verticalAlign: 'top',
listStyle: 'none',
'-ms-overflow-style': '-ms-autohiding-scrollbar',
// https://github.com/ant-design/ant-design/issues/11857
'&:not(:last-child)': {
borderInlineEnd: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
},
'&-item': {
display: 'flex',
maxWidth: 400,
flexWrap: 'nowrap',
alignItems: 'center',
padding: token.optionPadding,
lineHeight: token.lineHeight,
cursor: 'pointer',
transition: `all ${token.motionDurationMid}`,
borderRadius: token.borderRadiusSM,
'&:hover': {
background: token.controlItemBgHover
},
'&-disabled': {
color: token.colorTextDisabled,
cursor: 'not-allowed',
'&:hover': {
background: 'transparent'
},
[iconCls]: {
color: token.colorTextDisabled
}
},
[`&-active:not(${cascaderMenuItemCls}-disabled)`]: {
'&, &:hover': {
color: token.optionSelectedColor,
fontWeight: token.optionSelectedFontWeight,
backgroundColor: token.optionSelectedBg
}
},
'&-content': {
flex: 'auto',
minWidth: 0,
..._style2.textEllipsis
},
[iconCls]: {
marginInlineStart: token.paddingXXS,
color: token.colorIcon,
fontSize: token.fontSizeIcon
},
'&-keyword': {
color: token.colorHighlight
}
}
}
}
}];
};
var _default = exports.default = getColumnsStyle;
+48
View File
@@ -0,0 +1,48 @@
import type { CSSProperties } from 'react';
import type { FullToken, GlobalToken } from '../../theme/internal';
export interface ComponentToken {
/**
* @desc 选择器宽度
* @descEN Width of Cascader
*/
controlWidth: number | string;
/**
* @desc 选项宽度
* @descEN Width of item
*/
controlItemWidth: number | string;
/**
* @desc 下拉菜单高度
* @descEN Height of dropdown
*/
dropdownHeight: number | string;
/**
* @desc 选项选中时背景色
* @descEN Background color of selected item
*/
optionSelectedBg: string;
/**
* @desc 选项选中时文本颜色
* @descEN Text color when option is selected
*/
optionSelectedColor: string;
/**
* @desc 选项选中时字重
* @descEN Font weight of selected item
*/
optionSelectedFontWeight: CSSProperties['fontWeight'];
/**
* @desc 选项内间距
* @descEN Padding of menu item
*/
optionPadding: CSSProperties['padding'];
/**
* @desc 选项菜单(单列)内间距
* @descEN Padding of menu item (single column)
*/
menuPadding: CSSProperties['padding'];
}
export type CascaderToken = FullToken<'Cascader'>;
export declare const prepareComponentToken: (token: GlobalToken) => ComponentToken;
declare const _default: (prefixCls: string, rootCls?: string) => readonly [string, string];
export default _default;
+69
View File
@@ -0,0 +1,69 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.prepareComponentToken = exports.default = void 0;
var _compactItem = require("../../style/compact-item");
var _internal = require("../../theme/internal");
var _columns = _interopRequireDefault(require("./columns"));
// =============================== Base ===============================
const genBaseStyle = token => {
const {
componentCls,
antCls
} = token;
return [
// =====================================================
// == Control ==
// =====================================================
{
[componentCls]: {
width: token.controlWidth
}
},
// =====================================================
// == Popup ==
// =====================================================
{
[`${componentCls}-dropdown`]: [{
[`&${antCls}-select-dropdown`]: {
padding: 0
}
}, (0, _columns.default)(token)]
},
// =====================================================
// == RTL ==
// =====================================================
{
[`${componentCls}-dropdown-rtl`]: {
direction: 'rtl'
}
},
// =====================================================
// == Space Compact ==
// =====================================================
(0, _compactItem.genCompactItemStyle)(token)];
};
// ============================== Export ==============================
const prepareComponentToken = token => {
const itemPaddingVertical = Math.round((token.controlHeight - token.fontSize * token.lineHeight) / 2);
return {
controlWidth: 184,
controlItemWidth: 111,
dropdownHeight: 180,
optionSelectedBg: token.controlItemBgActive,
optionSelectedFontWeight: token.fontWeightStrong,
optionPadding: `${itemPaddingVertical}px ${token.paddingSM}px`,
menuPadding: token.paddingXXS,
optionSelectedColor: token.colorText
};
};
exports.prepareComponentToken = prepareComponentToken;
var _default = exports.default = (0, _internal.genStyleHooks)('Cascader', genBaseStyle, prepareComponentToken, {
resetFont: false,
unitless: {
optionSelectedFontWeight: true
}
});
+2
View File
@@ -0,0 +1,2 @@
declare const _default: (prefixCls: string, rootCls?: string) => string;
export default _default;
+39
View File
@@ -0,0 +1,39 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _cssinjs = require("@ant-design/cssinjs");
var _ = require(".");
var _internal = require("../../theme/internal");
var _columns = _interopRequireDefault(require("./columns"));
// ============================== Panel ===============================
const genPanelStyle = token => {
const {
componentCls
} = token;
return {
[`${componentCls}-panel`]: [(0, _columns.default)(token), {
display: 'inline-flex',
border: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
borderRadius: token.borderRadiusLG,
overflowX: 'auto',
maxWidth: '100%',
[`${componentCls}-menus`]: {
alignItems: 'stretch'
},
[`${componentCls}-menu`]: {
height: 'auto'
},
'&-empty': {
padding: token.paddingXXS
}
}]
};
};
// ============================== Export ==============================
var _default = exports.default = (0, _internal.genComponentStyleHook)(['Cascader', 'Panel'], genPanelStyle, _.prepareComponentToken, {
resetFont: false
});