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
+57
View File
@@ -0,0 +1,57 @@
import * as React from 'react';
import type { BaseSelectRef } from '@rc-component/select';
import type { SemanticClassNamesType, SemanticStylesType } from '../_util/hooks';
import type { InputStatus } from '../_util/statusUtils';
import type { BaseOptionType, DefaultOptionType, InternalSelectProps, SelectPopupSemanticClassNames, SelectPopupSemanticStyles } from '../select';
export type AutoCompleteSemanticName = keyof AutoCompleteSemanticClassNames & keyof AutoCompleteSemanticStyles;
export type AutoCompleteSemanticClassNames = {
root?: string;
prefix?: string;
input?: string;
placeholder?: string;
content?: string;
};
export type AutoCompleteSemanticStyles = {
root?: React.CSSProperties;
prefix?: React.CSSProperties;
input?: React.CSSProperties;
placeholder?: React.CSSProperties;
content?: React.CSSProperties;
};
export interface DataSourceItemObject {
value: string;
text: string;
}
export type DataSourceItemType = DataSourceItemObject | React.ReactNode;
export type AutoCompleteClassNamesType = SemanticClassNamesType<AutoCompleteProps, AutoCompleteSemanticClassNames, {
popup?: SelectPopupSemanticClassNames;
}>;
export type AutoCompleteStylesType = SemanticStylesType<AutoCompleteProps, AutoCompleteSemanticStyles, {
popup?: SelectPopupSemanticStyles;
}>;
export interface AutoCompleteProps<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType> extends Omit<InternalSelectProps<ValueType, OptionType>, 'loading' | 'mode' | 'optionLabelProp' | 'labelInValue'> {
/** @deprecated Please use `options` instead */
dataSource?: DataSourceItemType[];
status?: InputStatus;
/** @deprecated Please use `classNames.popup.root` instead */
popupClassName?: string;
/** @deprecated Please use `classNames.popup.root` instead */
dropdownClassName?: string;
/** @deprecated Please use `popupMatchSelectWidth` instead */
dropdownMatchSelectWidth?: boolean | number;
popupMatchSelectWidth?: boolean | number;
styles?: AutoCompleteStylesType;
classNames?: AutoCompleteClassNamesType;
/** @deprecated Please use `popupRender` instead */
dropdownRender?: (menu: React.ReactElement) => React.ReactElement;
popupRender?: (menu: React.ReactElement) => React.ReactElement;
/** @deprecated Please use `styles.popup.root` instead */
dropdownStyle?: React.CSSProperties;
/** @deprecated Please use `onOpenChange` instead */
onDropdownVisibleChange?: (visible: boolean) => void;
onOpenChange?: (visible: boolean) => void;
}
declare const RefAutoComplete: (<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(props: React.PropsWithChildren<AutoCompleteProps<ValueType, OptionType>> & React.RefAttributes<BaseSelectRef>) => React.ReactElement) & {
displayName?: string;
};
export default RefAutoComplete;
+171
View File
@@ -0,0 +1,171 @@
"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 _util = require("@rc-component/util");
var _clsx = require("clsx");
var _hooks = require("../_util/hooks");
var _warning = require("../_util/warning");
var _configProvider = require("../config-provider");
var _select = _interopRequireDefault(require("../select"));
const {
Option
} = _select.default;
function isSelectOptionOrSelectOptGroup(child) {
return child?.type && (child.type.isSelectOption || child.type.isSelectOptGroup);
}
const AutoComplete = (props, ref) => {
const {
prefixCls: customizePrefixCls,
className,
style,
popupClassName,
dropdownClassName,
children,
dataSource,
rootClassName,
dropdownStyle,
dropdownRender,
popupRender,
onDropdownVisibleChange,
onOpenChange,
styles,
classNames,
popupMatchSelectWidth,
dropdownMatchSelectWidth
} = props;
const childNodes = (0, _util.toArray)(children);
const mergedPopupRender = popupRender || dropdownRender;
const mergedOnOpenChange = onOpenChange || onDropdownVisibleChange;
const mergedPopupMatchSelectWidth = popupMatchSelectWidth ?? dropdownMatchSelectWidth;
// ============================= Input =============================
let customizeInput;
if (childNodes.length === 1 && /*#__PURE__*/React.isValidElement(childNodes[0]) && !isSelectOptionOrSelectOptGroup(childNodes[0])) {
[customizeInput] = childNodes;
}
const getInputElement = customizeInput ? () => customizeInput : undefined;
// ============================ Options ============================
let optionChildren;
// [Legacy] convert `children` or `dataSource` into option children
if (childNodes.length && isSelectOptionOrSelectOptGroup(childNodes[0])) {
optionChildren = children;
} else {
optionChildren = dataSource ? dataSource.map(item => {
if (/*#__PURE__*/React.isValidElement(item)) {
return item;
}
switch (typeof item) {
case 'string':
return /*#__PURE__*/React.createElement(Option, {
key: item,
value: item
}, item);
case 'object':
{
const {
value: optionValue
} = item;
return /*#__PURE__*/React.createElement(Option, {
key: optionValue,
value: optionValue
}, item.text);
}
default:
return undefined;
}
}) : [];
}
// ====================== Warning ======================
if (process.env.NODE_ENV !== 'production') {
const warning = (0, _warning.devUseWarning)('AutoComplete');
process.env.NODE_ENV !== "production" ? warning(!customizeInput || !('size' in props), 'usage', 'You need to control style self instead of setting `size` when using customize input.') : void 0;
const deprecatedProps = {
dropdownMatchSelectWidth: 'popupMatchSelectWidth',
dropdownStyle: 'styles.popup.root',
dropdownClassName: 'classNames.popup.root',
popupClassName: 'classNames.popup.root',
dropdownRender: 'popupRender',
onDropdownVisibleChange: 'onOpenChange',
dataSource: 'options'
};
Object.entries(deprecatedProps).forEach(([oldProp, newProp]) => {
warning.deprecated(!(oldProp in props), oldProp, newProp);
});
}
const {
getPrefixCls
} = React.useContext(_configProvider.ConfigContext);
const prefixCls = getPrefixCls('select', customizePrefixCls);
// =========== Merged Props for Semantic ===========
const mergedProps = {
...props,
popupRender: mergedPopupRender,
onOpenChange: mergedOnOpenChange,
popupMatchSelectWidth: mergedPopupMatchSelectWidth
};
// ========================= Style ==========================
const [mergedClassNames, mergedStyles] = (0, _hooks.useMergeSemantic)([classNames], [styles], {
props: mergedProps
}, {
popup: {
_default: 'root'
}
});
const finalClassNames = React.useMemo(() => ({
root: (0, _clsx.clsx)(`${prefixCls}-auto-complete`, className, rootClassName, mergedClassNames.root, {
[`${prefixCls}-customize`]: customizeInput
}),
prefix: mergedClassNames.prefix,
input: mergedClassNames.input,
placeholder: mergedClassNames.placeholder,
content: mergedClassNames.content,
popup: {
root: (0, _clsx.clsx)(popupClassName, dropdownClassName, mergedClassNames.popup?.root),
list: mergedClassNames.popup?.list,
listItem: mergedClassNames.popup?.listItem
}
}), [prefixCls, className, rootClassName, mergedClassNames, popupClassName, dropdownClassName]);
const finalStyles = React.useMemo(() => ({
root: {
...mergedStyles.root,
...style
},
input: mergedStyles.input,
prefix: mergedStyles.prefix,
placeholder: mergedStyles.placeholder,
content: mergedStyles.content,
popup: {
root: {
...dropdownStyle,
...mergedStyles.popup?.root
},
list: mergedStyles.popup?.list,
listItem: mergedStyles.popup?.listItem
}
}), [mergedStyles, style, dropdownStyle]);
return /*#__PURE__*/React.createElement(_select.default, {
ref: ref,
suffixIcon: null,
...(0, _util.omit)(props, ['dataSource', 'dropdownClassName', 'popupClassName']),
prefixCls: prefixCls,
classNames: finalClassNames,
styles: finalStyles,
mode: _select.default.SECRET_COMBOBOX_MODE_DO_NOT_USE,
popupRender: mergedPopupRender,
onPopupVisibleChange: mergedOnOpenChange,
popupMatchSelectWidth: mergedPopupMatchSelectWidth,
// Internal api
getInputElement
}, optionChildren);
};
const RefAutoComplete = /*#__PURE__*/React.forwardRef(AutoComplete);
if (process.env.NODE_ENV !== 'production') {
RefAutoComplete.displayName = 'AutoComplete';
}
var _default = exports.default = RefAutoComplete;
+11
View File
@@ -0,0 +1,11 @@
import RefAutoComplete from './AutoComplete';
export type { AutoCompleteProps, AutoCompleteSemanticClassNames, AutoCompleteSemanticName, AutoCompleteSemanticStyles, } from './AutoComplete';
declare const Option: import("@rc-component/select/lib/Option").OptionFC;
declare const PurePanel: (props: import("../_util/type").AnyObject) => import("react").JSX.Element;
type CompoundedComponent = typeof RefAutoComplete & {
/** @deprecated Please use `options` instead. */
Option: typeof Option;
_InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel;
};
declare const AutoComplete: CompoundedComponent;
export default AutoComplete;
+22
View File
@@ -0,0 +1,22 @@
"use strict";
"use client";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _util = require("@rc-component/util");
var _PurePanel = _interopRequireDefault(require("../_util/PurePanel"));
var _select = _interopRequireDefault(require("../select"));
var _AutoComplete = _interopRequireDefault(require("./AutoComplete"));
const {
Option
} = _select.default;
// We don't care debug panel
/* istanbul ignore next */
const PurePanel = (0, _PurePanel.default)(_AutoComplete.default, 'popupAlign', props => (0, _util.omit)(props, ['visible']));
const AutoComplete = _AutoComplete.default;
AutoComplete.Option = Option;
AutoComplete._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;
var _default = exports.default = AutoComplete;