1
This commit is contained in:
+12
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
import * as React from 'react';
|
||||
export default function useCheckable(cascaderPrefixCls: string, multiple?: boolean): false | React.JSX.Element;
|
||||
+14
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,2 @@
|
||||
declare const _default: (prefixCls: string, rootCls?: string) => string;
|
||||
export default _default;
|
||||
+39
@@ -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
|
||||
});
|
||||
Reference in New Issue
Block a user