diff --git a/.eslintignore b/.eslintignore index f5a9cb43b9..5550551bd0 100644 --- a/.eslintignore +++ b/.eslintignore @@ -15,3 +15,4 @@ static/ packages/common packages/ai-core site/engineering/static +packages/components/**/type.ts \ No newline at end of file diff --git a/package.json b/package.json index 41d335b72d..8f0d5921ec 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ } }, "lint-staged": { - "packages/**/*.{ts,tsx}": [ + "packages/**/!(type).{ts,tsx}": [ "prettier --write", "pnpm run lint:fix" ] diff --git a/packages/ai-core b/packages/ai-core index 7e277aa55c..b4dc9b5e93 160000 --- a/packages/ai-core +++ b/packages/ai-core @@ -1 +1 @@ -Subproject commit 7e277aa55cfbfffd481f0149eb2e30edc8b4d8ee +Subproject commit b4dc9b5e93006f2c1c8d2b7d62647979cdd69484 diff --git a/packages/common b/packages/common index 5fe21863a9..7249f43c1c 160000 --- a/packages/common +++ b/packages/common @@ -1 +1 @@ -Subproject commit 5fe21863a970f8e6551a3b7ee22e02ae7b441d24 +Subproject commit 7249f43c1c2c17f2e6dc715566c668491a8224c7 diff --git a/packages/components/_util/parseTNode.ts b/packages/components/_util/parseTNode.ts index 18b04d580f..ea9db5040f 100644 --- a/packages/components/_util/parseTNode.ts +++ b/packages/components/_util/parseTNode.ts @@ -39,3 +39,17 @@ export function parseContentTNode(tnode: TNode, props: T) { return null; } } + +export function extractTextFromTNode(node: TNode): string { + if (typeof node === 'string' || typeof node === 'number' || typeof node === 'boolean') return String(node); + if (React.isValidElement(node)) { + const { children } = node.props || {}; + if (children) return extractTextFromTNode(children); + } + if (Array.isArray(node)) { + return node.map(extractTextFromTNode).join(''); + } + + // todo:兼容 ((props: T) => ReactNode) 函数类型 + return ''; +} diff --git a/packages/components/cascader/__tests__/cascader.test.tsx b/packages/components/cascader/__tests__/cascader.test.tsx index 39b8985958..90dad6c926 100644 --- a/packages/components/cascader/__tests__/cascader.test.tsx +++ b/packages/components/cascader/__tests__/cascader.test.tsx @@ -228,12 +228,18 @@ describe('Cascader 组件测试', () => { expect(spy).toHaveBeenCalled(); fireEvent.click(getByPlaceholderText(placeholderId)); expect(spy).toHaveBeenCalledTimes(2); - await mockTimeout(() => expect(document.querySelector(popupSelector)).toHaveStyle({ display: 'none' })); + await mockTimeout(() => + expect(document.querySelector(popupSelector)).toHaveStyle({ + display: 'none', + }), + ); // disabled 不会展开 popup,且不执行 onPopupVisibleChange fireEvent.click(getByText(btnText)); fireEvent.click(getByPlaceholderText(placeholderId)); - expect(document.querySelector(popupSelector)).toHaveStyle({ display: 'none' }); + expect(document.querySelector(popupSelector)).toHaveStyle({ + display: 'none', + }); expect(spy).toHaveBeenCalledTimes(2); }); diff --git a/packages/components/cascader/components/Item.tsx b/packages/components/cascader/components/Item.tsx index 2a750e2d36..6110a8abf6 100644 --- a/packages/components/cascader/components/Item.tsx +++ b/packages/components/cascader/components/Item.tsx @@ -89,9 +89,14 @@ const Item = forwardRef( const RenderLabelContent = (node: TreeNode, cascaderContext: CascaderContextType) => { const label = RenderLabelInner(node, cascaderContext); + const getTitle = () => { + const title = cascaderContext.inputVal ? getFullPathLabel(node) : node.label; + return typeof title !== 'object' ? title : undefined; + }; + const labelCont = ( diff --git a/packages/components/dialog/Dialog.tsx b/packages/components/dialog/Dialog.tsx index c411e4e212..0c6e3f7ab3 100644 --- a/packages/components/dialog/Dialog.tsx +++ b/packages/components/dialog/Dialog.tsx @@ -44,7 +44,10 @@ const Dialog = forwardRef((originalProps, ref) => { const dialogPosition = useRef(null); const portalRef = useRef(null); - const [state, setState] = useSetState({ isPlugin: false, ...restProps }); + const [state, setState] = useSetState({ + isPlugin: false, + ...restProps, + }); const [local] = useLocaleReceiver('dialog'); const { diff --git a/packages/components/dialog/__tests__/dialog.test.tsx b/packages/components/dialog/__tests__/dialog.test.tsx index 4106eca295..d771b36de2 100644 --- a/packages/components/dialog/__tests__/dialog.test.tsx +++ b/packages/components/dialog/__tests__/dialog.test.tsx @@ -87,10 +87,16 @@ describe('Dialog组件测试', () => { expect(document.querySelector('.t-dialog__modeless')).toBeInTheDocument(); fireEvent.mouseDown(document.querySelector('.t-dialog')); fireEvent.mouseMove(document.querySelector('.t-dialog')); - expect(document.querySelector('.t-dialog')).toHaveStyle({ cursor: 'move', position: 'absolute' }); + expect(document.querySelector('.t-dialog')).toHaveStyle({ + cursor: 'move', + position: 'absolute', + }); fireEvent.mouseUp(document.querySelector('.t-dialog')); userEvent.keyboard('{esc}'); - expect(document.querySelector('.t-dialog')).toHaveStyle({ left: '0px', top: '0px' }); + expect(document.querySelector('.t-dialog')).toHaveStyle({ + left: '0px', + top: '0px', + }); }); test('DialogPlugin', async () => { @@ -204,7 +210,11 @@ describe('Dialog组件测试', () => { value={{ globalConfig: { ...defaultGlobalConfig, - dialog: { ...(defaultGlobalConfig.dialog || {}), placement: 'center', zIndex: 4321 }, + dialog: { + ...(defaultGlobalConfig.dialog || {}), + placement: 'center', + zIndex: 4321, + }, }, }} > @@ -214,7 +224,9 @@ describe('Dialog组件测试', () => { expect(document.querySelector('.t-dialog--center')).toBeInTheDocument(); expect(document.querySelector('.t-dialog--top')).not.toBeInTheDocument(); - expect(document.querySelector('.t-dialog__ctx')).toHaveStyle({ zIndex: '4321' }); + expect(document.querySelector('.t-dialog__ctx')).toHaveStyle({ + zIndex: '4321', + }); }); test('dialog props should override global dialog config', async () => { @@ -223,7 +235,11 @@ describe('Dialog组件测试', () => { value={{ globalConfig: { ...defaultGlobalConfig, - dialog: { ...(defaultGlobalConfig.dialog || {}), placement: 'center', zIndex: 4321 }, + dialog: { + ...(defaultGlobalConfig.dialog || {}), + placement: 'center', + zIndex: 4321, + }, }, }} > @@ -233,6 +249,8 @@ describe('Dialog组件测试', () => { expect(document.querySelector('.t-dialog--top')).toBeInTheDocument(); expect(document.querySelector('.t-dialog--center')).not.toBeInTheDocument(); - expect(document.querySelector('.t-dialog__ctx')).toHaveStyle({ zIndex: '1234' }); + expect(document.querySelector('.t-dialog__ctx')).toHaveStyle({ + zIndex: '1234', + }); }); }); diff --git a/packages/components/input-number/__tests__/input-number.test.tsx b/packages/components/input-number/__tests__/input-number.test.tsx index d6706c8f88..0fba598aa6 100644 --- a/packages/components/input-number/__tests__/input-number.test.tsx +++ b/packages/components/input-number/__tests__/input-number.test.tsx @@ -15,7 +15,9 @@ describe('InputNumber 组件测试', () => { ); expect(container.firstChild.classList.contains('t-input-number')).toBeTruthy(); expect(queryByPlaceholderText(InputNumberPlaceholder)).toBeInTheDocument(); - fireEvent.change(queryByPlaceholderText(InputNumberPlaceholder), { target: { value: InputNumberValue } }); + fireEvent.change(queryByPlaceholderText(InputNumberPlaceholder), { + target: { value: InputNumberValue }, + }); expect(changeFn).toBeCalledTimes(1); expect(changeFn.mock.calls[0][0]).toBe(InputNumberValue); }); diff --git a/packages/components/input-number/type.ts b/packages/components/input-number/type.ts index 4170c87834..12cc949929 100644 --- a/packages/components/input-number/type.ts +++ b/packages/components/input-number/type.ts @@ -160,4 +160,4 @@ export interface ChangeContext { | CompositionEvent; } -export type ChangeSource = 'add' | 'reduce' | 'input' | 'blur' | 'enter' | 'clear' | 'props'; +export type ChangeSource = 'add' | 'reduce' | 'input' | 'blur' | 'enter' | 'clear' | 'props'; \ No newline at end of file diff --git a/packages/components/input/Input.tsx b/packages/components/input/Input.tsx index 267a12ac84..b59fb36bf2 100644 --- a/packages/components/input/Input.tsx +++ b/packages/components/input/Input.tsx @@ -166,7 +166,7 @@ const Input = forwardRefWithStatics( ) : null; const updateInputWidth = () => { - if (!autoWidth || !inputRef.current) return; + if (!autoWidth || !inputRef.current || !inputPreRef.current) return; const { offsetWidth } = inputPreRef.current; const { width } = inputPreRef.current.getBoundingClientRect(); // 异步渲染场景下 getBoundingClientRect 宽度为 0,需要使用 offsetWidth diff --git a/packages/components/loading/Loading.tsx b/packages/components/loading/Loading.tsx index e2af83b716..dffcf331e6 100644 --- a/packages/components/loading/Loading.tsx +++ b/packages/components/loading/Loading.tsx @@ -32,7 +32,10 @@ const Loading: React.FC = (props) => { zIndex, className, style, - } = useDefaultProps(props, { ...loadingDefaultProps, ...globalLoadingConfig }); + } = useDefaultProps(props, { + ...loadingDefaultProps, + ...globalLoadingConfig, + }); const [showLoading, setShowLoading] = useState(() => (delay ? false : loading)); @@ -143,7 +146,9 @@ const Loading: React.FC = (props) => { {showLoading ? (
{commonContent()} diff --git a/packages/components/loading/__tests__/loading.test.tsx b/packages/components/loading/__tests__/loading.test.tsx index 826925f775..22b3070b40 100644 --- a/packages/components/loading/__tests__/loading.test.tsx +++ b/packages/components/loading/__tests__/loading.test.tsx @@ -60,7 +60,10 @@ describe('Loading 组件测试', () => { ); expect(container.querySelector('.t-loading__text')).toHaveTextContent('全局加载中'); - expect(container.querySelector('.t-loading')).toHaveStyle({ fontSize: '36px', zIndex: '1234' }); + expect(container.querySelector('.t-loading')).toHaveStyle({ + fontSize: '36px', + zIndex: '1234', + }); }); test('loading props should override global loading config', async () => { @@ -86,7 +89,11 @@ describe('Loading 组件测试', () => {
loading({ attach: () => document.querySelector('#loading-attach') }) as any} + onClick={() => + loading({ + attach: () => document.querySelector('#loading-attach'), + }) as any + } > container to trigger loading
diff --git a/packages/components/select-input/useSingle.tsx b/packages/components/select-input/useSingle.tsx index 34eb5a3b60..d5a09adbbd 100644 --- a/packages/components/select-input/useSingle.tsx +++ b/packages/components/select-input/useSingle.tsx @@ -1,4 +1,4 @@ -import React, { useRef } from 'react'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; import classNames from 'classnames'; import { isObject, pick } from 'lodash-es'; @@ -9,6 +9,7 @@ import Loading from '../loading'; import type { InputRef, TdInputProps } from '../input'; import type { SelectInputCommonProperties } from './interface'; +import type { SelectInputProps } from './SelectInput'; import type { TdSelectInputProps } from './type'; export interface RenderSelectSingleInputParams { @@ -38,24 +39,35 @@ const DEFAULT_KEYS: TdSelectInputProps['keys'] = { value: 'value', }; -function getInputValue(value: TdSelectInputProps['value'], keys: TdSelectInputProps['keys']) { +const getOptionLabel = (value: TdSelectInputProps['value'], keys: TdSelectInputProps['keys']) => { const iKeys = keys || DEFAULT_KEYS; return isObject(value) ? value[iKeys.label] : value; -} +}; + +export default function useSingle(props: SelectInputProps) { + const { value, autoWidth, inputProps, label, allowInput, clearable, keys, valueDisplay, suffixIcon } = props; + const commonInputProps: SelectInputCommonProperties = { + ...pick(props, COMMON_PROPERTIES), + suffixIcon: props.loading ? : suffixIcon, + }; -export default function useSingle(props: TdSelectInputProps) { - const { value, keys, loading } = props; const { classPrefix } = useConfig(); + const [inputValue, setInputValue] = useControlled(props, 'inputValue', props.onInputChange); const inputRef = useRef(null); const blurTimeoutRef = useRef(null); + const customElementRef = useRef(null); - const [inputValue, setInputValue] = useControlled(props, 'inputValue', props.onInputChange); + const [isTyping, setIsTyping] = useState(false); + const [labelWidth, setLabelWidth] = useState(0); + const [suffixSpace, setSuffixSpace] = useState(0); - const commonInputProps: SelectInputCommonProperties = { - ...pick(props, COMMON_PROPERTIES), - suffixIcon: loading ? : props.suffixIcon, - }; + const singleValueDisplay = useMemo(() => valueDisplay ?? getOptionLabel(value, keys), [value, valueDisplay, keys]); + + const showCustomElement = useMemo( + () => !isTyping && !inputValue && React.isValidElement(singleValueDisplay), + [isTyping, inputValue, singleValueDisplay], + ); const onInnerClear = (context: { e: React.MouseEvent }) => { context?.e?.stopPropagation(); @@ -64,19 +76,68 @@ export default function useSingle(props: TdSelectInputProps) { }; const onInnerInputChange: TdInputProps['onChange'] = (value, context) => { - if (props.allowInput) { + if (allowInput) { setInputValue(value, { ...context, trigger: 'input' }); } }; + useEffect(() => { + const labelEl = inputRef.current?.currentElement.querySelector(`.${classPrefix}-input__prefix`); + if (labelEl) { + const prefixWidth = labelEl.getBoundingClientRect().width; + setLabelWidth(prefixWidth); + } + }, [label, classPrefix]); + + useEffect(() => { + const inputEl = inputRef.current?.inputElement; + if (!inputEl) return; + // autoWidth 且存在自定义元素时需要撑开宽度 + if (!autoWidth || !showCustomElement || !customElementRef.current) { + inputEl.style.minWidth = ''; + return; + } + const el = customElementRef.current; + // 测量真实内容宽度时,临时强制 nowrap,避免被父级容器(受 suffixSpace 影响)压缩换行导致测量值偏小 + const prevWhiteSpace = el.style.whiteSpace; + el.style.whiteSpace = 'nowrap'; + const { width } = el.getBoundingClientRect(); + el.style.whiteSpace = prevWhiteSpace; + inputEl.style.minWidth = width > 0 ? `${width}px` : ''; + }, [autoWidth, showCustomElement, singleValueDisplay]); + + useEffect(() => { + // 避免内容延伸盖到右侧的 suffixIcon 区域,需要测量 input 右侧到 wrapper 右侧的距离作为 right 留白 + if (!showCustomElement) { + setSuffixSpace(0); + return; + } + const wrapperEl = inputRef.current?.currentElement; + const inputEl = inputRef.current?.inputElement; + if (!wrapperEl || !inputEl) return undefined; + + const measure = () => { + const wrapperRect = wrapperEl.getBoundingClientRect(); + const inputRect = inputEl.getBoundingClientRect(); + // wrapper 右内边距 + suffix 区域 + suffixIcon 区域 + const space = Math.max(wrapperRect.right - inputRect.right, 0); + setSuffixSpace((prev) => (Math.abs(prev - space) < 0.5 ? prev : space)); + }; + + measure(); + + wrapperEl.addEventListener('mouseenter', measure); + wrapperEl.addEventListener('mouseleave', measure); + return () => { + wrapperEl.removeEventListener('mouseenter', measure); + wrapperEl.removeEventListener('mouseleave', measure); + }; + }, [showCustomElement, singleValueDisplay, clearable, suffixIcon, props.suffix]); + const renderSelectSingle = ( popupVisible: boolean, onInnerBlur?: (context: { e: React.FocusEvent }) => void, ) => { - // 单选,值的呈现方式 - const singleValueDisplay: any = !props.multiple ? props.valueDisplay : null; - const displayedValue = popupVisible && props.allowInput ? inputValue : getInputValue(value, keys); - const handleBlur = (value, ctx) => { if (blurTimeoutRef.current) { clearTimeout(blurTimeoutRef.current); @@ -104,23 +165,77 @@ export default function useSingle(props: TdSelectInputProps) { // !popupVisible && setInputValue(getInputValue(value, keys), { ...context, trigger: 'input' }); }; + const displayedValue = (): string => { + if (popupVisible && inputValue) { + return inputValue; + } + if (allowInput && popupVisible && !showCustomElement) { + return ''; + } + if (!showCustomElement) { + return singleValueDisplay; + } + return inputValue; + }; + + const displayedPlaceholder = (): string => { + if (popupVisible && singleValueDisplay && !showCustomElement) { + return singleValueDisplay; + } + if (showCustomElement) return ''; + return props.placeholder; + }; + + const labelNode = showCustomElement ? ( +
+ + {singleValueDisplay} + +
+ ) : null; + return ( - {props.label} - {singleValueDisplay as React.ReactNode} + {labelNode} + {commonInputProps.suffix} - ) + )) } + autoWidth={autoWidth} + style={inputProps?.style} + allowInput={allowInput} + label={label} + value={displayedValue()} + placeholder={displayedPlaceholder()} onChange={onInnerInputChange} onClear={onInnerClear} // [Important Info]: SelectInput.blur is not equal to Input, example: click popup panel @@ -130,8 +245,16 @@ export default function useSingle(props: TdSelectInputProps) { }} // onBlur need to triggered by input when popup panel is null or when popupVisible is forced to false onBlur={handleBlur} - {...props.inputProps} - inputClass={classNames(props.inputProps?.className, { + {...inputProps} + onCompositionstart={(v, ctx) => { + setIsTyping(true); + inputProps?.onCompositionstart?.(v, ctx); + }} + onCompositionend={(v, ctx) => { + setIsTyping(false); + inputProps?.onCompositionend?.(v, ctx); + }} + inputClass={classNames(inputProps?.inputClass, { [`${classPrefix}-input--focused`]: popupVisible, [`${classPrefix}-is-focused`]: popupVisible, })} diff --git a/packages/components/select/_example/custom-options.tsx b/packages/components/select/_example/custom-options.tsx index b5883538a9..4a17df8594 100644 --- a/packages/components/select/_example/custom-options.tsx +++ b/packages/components/select/_example/custom-options.tsx @@ -1,54 +1,73 @@ import React, { useState } from 'react'; -import { Select } from 'tdesign-react'; +import { Select, Space } from 'tdesign-react'; const { Option } = Select; -const options = [ - { label: '用户一', value: '1', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户二', value: '2', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户三', value: '3', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户四', value: '4', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户五', value: '5', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户六', value: '6', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户七', value: '7', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户八', value: '8', description: '这是一段用户描述信息,可自定义内容' }, - { label: '用户九', value: '9', description: '这是一段用户描述信息,可自定义内容' }, -]; - -const avatarUrl = 'https://tdesign.gtimg.com/site/avatar.jpg'; - -export default function CustomOptions() { +const generateCustomContent = (index: number) => ( +
+ +
+
用户{index}
+
+ 这是一段用户描述信息,可自定义内容 +
+
+
+); + +const createOption = (index: number) => { + const label = `用户${index}`; + return { + label, + value: index.toString(), + description: '这是一段用户描述信息,可自定义内容', + }; +}; + +const options1 = Array.from({ length: 5 }, (_, index) => ({ + ...createOption(index + 1), +})); + +const options2 = Array.from({ length: 5 }, (_, index) => ({ + ...createOption(index + 1), + content: generateCustomContent(index + 1), +})); + +function CustomOptions() { const [value, setValue] = useState('1'); const onChange = (value: string) => { setValue(value); }; return ( - + + + 法一:使用插槽 + + + + 法二:使用 `content` 属性 + csr test packages/components/cascader/_example/valu placeholder="" readonly="" type="text" - value=" " + value="" /> +
+
+ +
+ + + 子选项二 + + + ( + 2.2 + ) + +
+
+
+
@@ -33739,7 +33751,6 @@ exports[`csr snapshot test > csr test packages/components/config-provider/_examp
csr test packages/components/select/_example/creata exports[`csr snapshot test > csr test packages/components/select/_example/custom-options.tsx 1`] = `
- - + 法一:使用插槽 + +
+
+
- - - - +
+
+ + + + + + +
+
+
+
+
+
+
+
+
+
+ + 法二:使用 \`content\` 属性 + +
+
+
+
+
+
+ + + + + + +
+
+
+
@@ -89361,23 +89462,18 @@ exports[`csr snapshot test > csr test packages/components/select/_example/custom
-
- 选中选项一 -
csr test packages/components/select-input/_example/
-
- - - - - - - - tdesign-vue - -
+
+
+ + + + + + + + + tdesign-vue + + +
+
@@ -149177,7 +149280,6 @@ exports[`csr snapshot test > csr test packages/components/tree-select/_example/f
csr test packages/components/tree-select/_example/p
csr test packages/components/tree-select/_example/v
-
- 广州市(guangzhou) -
ssr test packages/components/cascader/_example/size exports[`ssr snapshot test > ssr test packages/components/cascader/_example/trigger.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-display.tsx 1`] = `"
单选:
(2.2)
多选:
请选择
"`; +exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-display.tsx 1`] = `"
单选:
(2.2)
多选:
请选择
"`; exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-mode.tsx 1`] = `"
onlyLeaf
请选择
parentFirst
请选择
all
请选择
"`; @@ -153721,7 +153817,7 @@ exports[`ssr snapshot test > ssr test packages/components/config-provider/_examp exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/input.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/others.tsx 1`] = `"
Feature Tag
Feature Tag
Feature Tag
Feature Tag
Tree Empty Data
First Step
You need to click the blue button
Second Step
Fill your base information into the form
Error Step
Something Wrong! Custom Error Icon!
4
Last Step
You haven't finish this step.
图片加载中
"`; +exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/others.tsx 1`] = `"
Feature Tag
Feature Tag
Feature Tag
Feature Tag
Tree Empty Data
First Step
You need to click the blue button
Second Step
Fill your base information into the form
Error Step
Something Wrong! Custom Error Icon!
4
Last Step
You haven't finish this step.
图片加载中
"`; exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/pagination.tsx 1`] = `"
Total 36 items
please select
  • 1
  • 2
  • 3
  • 4
/ 4
"`; @@ -154265,7 +154361,7 @@ exports[`ssr snapshot test > ssr test packages/components/select/_example/collap exports[`ssr snapshot test > ssr test packages/components/select/_example/creatable.tsx 1`] = `"
请选择
"`; -exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-options.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-options.tsx 1`] = `"
法一:使用插槽
法二:使用 \`content\` 属性
"`; exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-selected.tsx 1`] = `"
请选择
"`; @@ -154317,7 +154413,7 @@ exports[`ssr snapshot test > ssr test packages/components/select-input/_example/ exports[`ssr snapshot test > ssr test packages/components/select-input/_example/collapsed-items.tsx 1`] = `"
tdesign-vue
+5


tdesign-vue
tdesign-react
More(+4)
"`; -exports[`ssr snapshot test > ssr test packages/components/select-input/_example/custom-tag.tsx 1`] = `"
tdesign-vue


tdesign-vue
tdesign-react


tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
"`; +exports[`ssr snapshot test > ssr test packages/components/select-input/_example/custom-tag.tsx 1`] = `"
tdesign-vue


tdesign-vue
tdesign-react


tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
"`; exports[`ssr snapshot test > ssr test packages/components/select-input/_example/excess-tags-display-type.tsx 1`] = `"

第一种呈现方式:超出时滚动显示


tdesign-vue
tdesign-react
tdesign-miniprogram
tdesign-angular
tdesign-mobile-vue
tdesign-mobile-react



第二种呈现方式:超出时换行显示


tdesign-vue
tdesign-react
tdesign-miniprogram
tdesign-angular
tdesign-mobile-vue
tdesign-mobile-react
"`; @@ -154679,7 +154775,7 @@ exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/b exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/collapsed.tsx 1`] = `"
广州市
+1
广州市
更多...
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/filterable.tsx 1`] = `"
请选择
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/filterable.tsx 1`] = `"
请选择
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/lazy.tsx 1`] = `"
"`; @@ -154689,11 +154785,11 @@ exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/p exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefix.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefixsuffix.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefixsuffix.tsx 1`] = `"
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/props.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuedisplay.tsx 1`] = `"
广州市(guangzhou)
广州市(guangzhou)
深圳市(shenzhen)
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuedisplay.tsx 1`] = `"
广州市(guangzhou)
深圳市(shenzhen)
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuetype.tsx 1`] = `"
广州市
深圳市
"`; diff --git a/test/snap/__snapshots__/ssr.test.jsx.snap b/test/snap/__snapshots__/ssr.test.jsx.snap index 2ae25c9f4e..239a6289ec 100644 --- a/test/snap/__snapshots__/ssr.test.jsx.snap +++ b/test/snap/__snapshots__/ssr.test.jsx.snap @@ -210,7 +210,7 @@ exports[`ssr snapshot test > ssr test packages/components/cascader/_example/size exports[`ssr snapshot test > ssr test packages/components/cascader/_example/trigger.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-display.tsx 1`] = `"
单选:
(2.2)
多选:
请选择
"`; +exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-display.tsx 1`] = `"
单选:
(2.2)
多选:
请选择
"`; exports[`ssr snapshot test > ssr test packages/components/cascader/_example/value-mode.tsx 1`] = `"
onlyLeaf
请选择
parentFirst
请选择
all
请选择
"`; @@ -274,7 +274,7 @@ exports[`ssr snapshot test > ssr test packages/components/config-provider/_examp exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/input.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/others.tsx 1`] = `"
Feature Tag
Feature Tag
Feature Tag
Feature Tag
Tree Empty Data
First Step
You need to click the blue button
Second Step
Fill your base information into the form
Error Step
Something Wrong! Custom Error Icon!
4
Last Step
You haven't finish this step.
图片加载中
"`; +exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/others.tsx 1`] = `"
Feature Tag
Feature Tag
Feature Tag
Feature Tag
Tree Empty Data
First Step
You need to click the blue button
Second Step
Fill your base information into the form
Error Step
Something Wrong! Custom Error Icon!
4
Last Step
You haven't finish this step.
图片加载中
"`; exports[`ssr snapshot test > ssr test packages/components/config-provider/_example/pagination.tsx 1`] = `"
Total 36 items
please select
  • 1
  • 2
  • 3
  • 4
/ 4
"`; @@ -818,7 +818,7 @@ exports[`ssr snapshot test > ssr test packages/components/select/_example/collap exports[`ssr snapshot test > ssr test packages/components/select/_example/creatable.tsx 1`] = `"
请选择
"`; -exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-options.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-options.tsx 1`] = `"
法一:使用插槽
法二:使用 \`content\` 属性
"`; exports[`ssr snapshot test > ssr test packages/components/select/_example/custom-selected.tsx 1`] = `"
请选择
"`; @@ -870,7 +870,7 @@ exports[`ssr snapshot test > ssr test packages/components/select-input/_example/ exports[`ssr snapshot test > ssr test packages/components/select-input/_example/collapsed-items.tsx 1`] = `"
tdesign-vue
+5


tdesign-vue
tdesign-react
More(+4)
"`; -exports[`ssr snapshot test > ssr test packages/components/select-input/_example/custom-tag.tsx 1`] = `"
tdesign-vue


tdesign-vue
tdesign-react


tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
"`; +exports[`ssr snapshot test > ssr test packages/components/select-input/_example/custom-tag.tsx 1`] = `"
tdesign-vue


tdesign-vue
tdesign-react


tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
tdesign-vuetdesign-reacttdesign-mobile-vue
"`; exports[`ssr snapshot test > ssr test packages/components/select-input/_example/excess-tags-display-type.tsx 1`] = `"

第一种呈现方式:超出时滚动显示


tdesign-vue
tdesign-react
tdesign-miniprogram
tdesign-angular
tdesign-mobile-vue
tdesign-mobile-react



第二种呈现方式:超出时换行显示


tdesign-vue
tdesign-react
tdesign-miniprogram
tdesign-angular
tdesign-mobile-vue
tdesign-mobile-react
"`; @@ -1232,7 +1232,7 @@ exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/b exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/collapsed.tsx 1`] = `"
广州市
+1
广州市
更多...
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/filterable.tsx 1`] = `"
请选择
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/filterable.tsx 1`] = `"
请选择
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/lazy.tsx 1`] = `"
"`; @@ -1242,11 +1242,11 @@ exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/p exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefix.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefixsuffix.tsx 1`] = `"
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/prefixsuffix.tsx 1`] = `"
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/props.tsx 1`] = `"
"`; -exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuedisplay.tsx 1`] = `"
广州市(guangzhou)
广州市(guangzhou)
深圳市(shenzhen)
"`; +exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuedisplay.tsx 1`] = `"
广州市(guangzhou)
深圳市(shenzhen)
"`; exports[`ssr snapshot test > ssr test packages/components/tree-select/_example/valuetype.tsx 1`] = `"
广州市
深圳市
"`;