{"componentChunkName":"component---src-templates-post-template-js","path":"/en-US/show/table","result":{"data":{"current":{"frontmatter":{"title":"Table","order":81,"brief":"Tables are used to present structured data content, usually accompanied by the ability to manipulate the data (sort, search, paginate...).","icon":"doc-table"},"fields":{"type":"show"},"tableOfContents":{"items":[{"url":"#how-to-use","title":"How to Use"},{"url":"#demos","title":"Demos","items":[{"url":"#basic-table","title":"Basic Table"},{"url":"#jsx-writing","title":"JSX Writing"},{"url":"#row-selection-operation","title":"Row Selection Operation"},{"url":"#custom-rendering","title":"Custom Rendering"},{"url":"#table-with-pagination","title":"Table With Pagination"},{"url":"#pull-remote-data","title":"Pull Remote Data"},{"url":"#fixed-column-or-head","title":"Fixed Column or Head"},{"url":"#table-header-with-sorting-and-filtering-function","title":"Table Header With Sorting and Filtering Function"},{"url":"#custom-header-filtering","title":"Custom Header Filtering"},{"url":"#custom-filter-rendering","title":"Custom Filter Rendering"},{"url":"#filter-confirm-mode","title":"Filter Confirm Mode"},{"url":"#custom-filter-item-rendering","title":"Custom Filter Item Rendering"},{"url":"#a-table-that-can-be-expanded","title":"A Table That Can Be Expanded","items":[{"url":"#a-common-table-that-can-be-expanded","title":"A Common Table That Can Be Expanded"},{"url":"#the-unfold-button-is-rendered-in-a-separated-column","title":"The Unfold Button Is Rendered In a Separated Column"},{"url":"#turn-off-rendering-of-expandable-button-of-a-row","title":"Turn Off Rendering of Expandable Button of a Row"}]},{"url":"#tree-data-display","title":"Tree Data Display","items":[{"url":"#simple-example-of-tree-data","title":"Simple example of tree data"},{"url":"#rows-of-interchangeable-tree-data","title":"Rows of Interchangeable Tree Data"},{"url":"#tree-selection","title":"Tree Selection"}]},{"url":"#custom-row-or-cell-events-and-properties","title":"Custom Row or Cell Events and Properties"},{"url":"#zebra-pattern-table","title":"Zebra Pattern Table"},{"url":"#column-ellipsis","title":"Column Ellipsis"},{"url":"#resizable-column","title":"Resizable Column","items":[{"url":"#basic-resizable-column","title":"Basic Resizable Column"},{"url":"#advanced-telescopic-columns","title":"Advanced Telescopic Columns"}]},{"url":"#drag-sorting","title":"Drag Sorting"},{"url":"#table-grouping","title":"Table Grouping"},{"url":"#virtualized-table","title":"Virtualized Table"},{"url":"#infinite-scroll","title":"Infinite Scroll"},{"url":"#controlled-dynamic-tables","title":"Controlled Dynamic Tables"},{"url":"#fully-custom-rendering","title":"Fully custom rendering"},{"url":"#header-merge","title":"Header Merge","items":[{"url":"#combined-header-configuration-writing","title":"Combined Header Configuration Writing"},{"url":"#merge-header-jsx-writing","title":"Merge Header JSX Writing"}]},{"url":"#colspan-and-rowspan","title":"colSpan and rowSpan"}]},{"url":"#api-reference","title":"API Reference"},{"url":"#table","title":"Table"},{"url":"#onrowonheaderrow-usage","title":"onRow/onHeaderRow Usage"},{"url":"#column","title":"Column"},{"url":"#rowselection","title":"rowSelection"},{"url":"#scroll","title":"scroll"},{"url":"#pagination","title":"pagination"},{"url":"#resizable","title":"Resizable"},{"url":"#methods","title":"Methods"},{"url":"#accessibility","title":"Accessibility","items":[{"url":"#aria","title":"ARIA"}]},{"url":"#rtlltr","title":"RTL/LTR"},{"url":"#content-guidelines","title":"Content Guidelines"},{"url":"#design-tokens","title":"Design Tokens"},{"url":"#faq","title":"FAQ"}]},"body":"var _excluded = [\"components\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"localeCode\": \"en-US\",\n  \"order\": 81,\n  \"category\": \"Show\",\n  \"title\": \"Table\",\n  \"subTitle\": \"Table\",\n  \"icon\": \"doc-table\",\n  \"dir\": \"column\",\n  \"brief\": \"Tables are used to present structured data content, usually accompanied by the ability to manipulate the data (sort, search, paginate...).\"\n};\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\nvar Notice = makeShortcode(\"Notice\");\nvar StickyHeaderTable = makeShortcode(\"StickyHeaderTable\");\nvar DesignToken = makeShortcode(\"DesignToken\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"How to Use\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Into the header. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"columns\"), \" And data. \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"DataSource\"), \" To render.\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Please provide a \\\"key\\\" for each data item in the dataSource that is different from the value of the other data items, or use the row Key parameter to specify an attribute name as the primary key, alternative row operation functions such as row selection and expansion of the table.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"noInline=true import\",\n    \"noInline\": \"true\",\n    \"import\": true\n  }, \"import React from 'react';\\nimport { Table } from '@douyinfe/semi-ui';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n        },\\n    ];\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Semi Design design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi Design share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    return <Table columns={columns} dataSource={data} pagination={false} />;\\n}\\n\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Demos\"), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Basic Table\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"For tables, the two most basic parameters are \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"dataSource\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"columns\"), \", the former is the data item, the latter is the configuration of each column, both are array types.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar\\n                            size=\\\"small\\\"\\n                            shape=\\\"square\\\"\\n                            src={record.nameIconSrc}\\n                            style={{ marginRight: 12 }}\\n                        ></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ];\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Semi Design design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi Design share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    return <Table columns={columns} dataSource={data} pagination={false} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"JSX Writing\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can also use JSX syntax definitions \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"columns\"), \", note that Table only supports \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"columns\"), \" JSX syntax definition. You cannot use any component package \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Table.Column\"), \".\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: JSX-written tables are not supported the parameter \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Resizable\"), \".\")), mdx(Notice, {\n    type: \"primary\",\n    title: \"Notice\",\n    mdxType: \"Notice\"\n  }, mdx(\"div\", null, \"When columns are written in JSX, please do not use it at the same time as the configuration method; if used at the same time, only the configuration method will take effect, and no aggregation operation will be performed.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nconst { Column } = Table;\\n\\nfunction App() {\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Semi Design design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi Design share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    const renderName = (text, record, index) => {\\n        return (\\n            <div>\\n                <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={record.nameIconSrc} style={{ marginRight: 12 }}></Avatar>\\n                {text}\\n            </div>\\n        );\\n    };\\n\\n    const renderOwner = (text, record, index) => {\\n        return (\\n            <div>\\n                <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                    {typeof text === 'string' && text.slice(0, 1)}\\n                </Avatar>\\n                {text}\\n            </div>\\n        );\\n    };\\n\\n    return (\\n        <Table dataSource={data} pagination={false}>\\n            <Column title=\\\"Title\\\" dataIndex=\\\"name\\\" key=\\\"name\\\" render={renderName} />\\n            <Column title=\\\"Size\\\" dataIndex=\\\"size\\\" key=\\\"size\\\" />\\n            <Column title=\\\"Owner\\\" dataIndex=\\\"owner\\\" key=\\\"owner\\\" render={renderOwner} />\\n            <Column title=\\\"Update\\\" dataIndex=\\\"updateTime\\\" key=\\\"updateTime\\\" />\\n            <Column title=\\\"\\\" dataIndex=\\\"operate\\\" key=\\\"operate\\\" render={() => <IconMore />} />\\n        </Table>\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Row Selection Operation\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"This feature can be turned on by passing in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"rowSelection\"), \".\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Click the selection box in the header, and all rows in the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"dataSource\"), \" that are not in the state of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"disabled\"), \" will be selected. The callback function for selecting all rows is \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onSelectAll\"), \";\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Clicking on the row selection box will select the current row. Its callback function is \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onSelect\"), \";\")), mdx(Notice, {\n    title: \"\\u6CE8\\u610F\\u4E8B\\u9879\",\n    mdxType: \"Notice\"\n  }, mdx(\"div\", null, \"1. Be sure to provide a \\\"key\\\" for each row of data that is different from other row values, or use the rowKey parameter to specify a property name as the primary key.\"), mdx(\"div\", null, \"2. If you encounter the problem of returning to the first page after clicking a row selection on the second page, please check whether component rendering triggers \\\"dataSource\\\" update (shallow equal). After the \\\"dataSource\\\" is updated, the uncontrolled page turner will return to the first page. Please put \\\"dataSource\\\" inside state. \")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nfunction App() {\\n    const [selectedKeys, setSelectedKeys] = useState([]);\\n    const columns = useMemo(() => [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar\\n                            size=\\\"small\\\"\\n                            shape=\\\"square\\\"\\n                            src={record.nameIconSrc}\\n                            style={{ marginRight: 12 }}\\n                        ></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ], []);\\n    const data = useMemo(() => [\\n        {\\n            key: '1',\\n            name: 'Semi Design design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi Design share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '4',\\n            name: 'Semi D2C design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '5',\\n            name: 'Semi D2C share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '6',\\n            name: 'Semi D2C Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ], []);\\n    const rowSelection = {\\n        getCheckboxProps: record => ({\\n            disabled: record.name === 'Design docs', // Column configuration not to be checked\\n            name: record.name,\\n        }),\\n        onSelect: (record, selected) => {\\n            console.log(`select row: ${selected}`, record);\\n        },\\n        onSelectAll: (selected, selectedRows) => {\\n            console.log(`select all rows: ${selected}`, selectedRows);\\n        },\\n        onChange: (selectedRowKeys, selectedRows) => {\\n            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            setSelectedKeys(selectedRowKeys);\\n        },\\n    };\\n\\n    const pagination = useMemo(\\n        () => ({\\n            pageSize: 3,\\n        }),\\n        []\\n    );\\n\\n    return <Table columns={columns} dataSource={data} rowSelection={rowSelection} pagination={pagination} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Custom Rendering\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Users can use Column.render to customize the rendering of a column of cells, which is suitable for rendering more complex cell content.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar, Button, Empty, Typography } from '@douyinfe/semi-ui';\\nimport { IconDelete } from '@douyinfe/semi-icons';\\nimport { IllustrationNoResult, IllustrationNoResultDark } from '@douyinfe/semi-illustrations';\\nconst { Text } = Typography;\\n\\nconst raw = [\\n    {\\n        key: '1',\\n        name: 'Semi Design design draft title may be a bit long Tooltip should be displayed at this time.fig',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n        size: '2M',\\n        owner: 'Jiang Pengzhi',\\n        updateTime: '2020-02-02 05:13',\\n        avatarBg: 'grey',\\n    },\\n    {\\n        key: '2',\\n        name: 'Semi Design share docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '2M',\\n        owner: 'Hao Xuan',\\n        updateTime: '2020-01-17 05:31',\\n        avatarBg: 'red',\\n    },\\n    {\\n        key: '3',\\n        name: 'Design docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '34KB',\\n        owner: 'Zoey Edwards',\\n        updateTime: '2020-01-26 11:01',\\n        avatarBg: 'light-blue',\\n    },\\n    {\\n        key: '4',\\n        name: 'Semi D2C design draft title may be a bit long Tooltip should be displayed at this time.fig',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '34KB',\\n        owner: 'Jiang Qi',\\n        updateTime: '2020-01-26 11:01',\\n        avatarBg: 'green',\\n    },\\n];\\n\\nfunction App() {\\n    const [dataSource, setData] = useState(raw);\\n\\n    const removeRecord = key => {\\n        let newDataSource = [...dataSource];\\n        if (key != null) {\\n            let idx = newDataSource.findIndex(data => data.key === key);\\n\\n            if (idx > -1) {\\n                newDataSource.splice(idx, 1);\\n                setData(newDataSource);\\n            }\\n        }\\n    };\\n    const resetData = () => {\\n        const newDataSource = [...raw];\\n        setData(newDataSource);\\n    };\\n\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <span style={{ display: 'flex', alignItems: 'center' }}>\\n                        <Avatar\\n                            size=\\\"small\\\"\\n                            shape=\\\"square\\\"\\n                            src={record.nameIconSrc}\\n                            style={{ marginRight: 12 }}\\n                        ></Avatar>\\n                        {/* The width calculation method is the cell setting width minus the non-text content width */}\\n                        <Text ellipsis={{ showTooltip: true }} style={{ width: 'calc(400px - 76px)' }}>\\n                            {text}\\n                        </Text>\\n                    </span>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            width: 150,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            width: 300,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            width: 200,\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            render: (text, record) => (\\n                <Button icon={<IconDelete />} theme=\\\"borderless\\\" onClick={() => removeRecord(record.key)} />\\n            ),\\n        },\\n    ];\\n\\n    const empty = (\\n        <Empty\\n            image={<IllustrationNoResult />}\\n            darkModeImage={<IllustrationNoResultDark />}\\n            description={'No result'}\\n        />\\n    );\\n\\n    return (\\n        <>\\n            <Button onClick={resetData} style={{ marginBottom: 10 }}>\\n                Reset\\n            </Button>\\n            <Table\\n                style={{ minHeight: 350 }}\\n                columns={columns}\\n                dataSource={dataSource}\\n                pagination={false}\\n                empty={empty}\\n            />\\n        </>\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Table With Pagination\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Table paging currently supports two modes: controlled and uncontrolled.\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In controlled mode, the paging state is passed entirely externally, depending on whether the pagination .currentPage field is passed. In general, the controlled mode is suitable for remotely pulling data and rendering.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In uncontrolled mode, Table passes the incoming dataSource length as total to the Pagination component by default, and of course you can also pass a total field to overwrite the value of the Table component, but we do not recommend users to pass this field in uncontrolled paging mode.\")), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: The custom \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"pagination.total\"), \" field passed in uncontrolled conditions is supported.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const rowSelection = useMemo(\\n        () => ({\\n            onChange: (selectedRowKeys, selectedRows) => {\\n                console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            },\\n            getCheckboxProps: record => ({\\n                disabled: record.name === 'Michael James', // Column configuration not to be checked\\n                name: record.name,\\n            }),\\n        }),\\n        []\\n    );\\n    const scroll = useMemo(() => ({ y: 300 }), []);\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} rowSelection={rowSelection} scroll={scroll} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Pull Remote Data\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Under normal circumstances, the data is often not obtained at one time. We will retrieve the data from the interface when clicking on the page number, filter or sort button. In this case, please use \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Controlled mode\"), \" To handle pagination. The user needs to pass in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"pagination.currentPage\"), \" field, where the rendering of the pagination component depends entirely on the incoming pagination object.\"), mdx(Notice, {\n    type: \"primary\",\n    title: \"Notice\",\n    mdxType: \"Notice\"\n  }, mdx(\"div\", null, \"1. When pagination is an object type, literal is not recommended because it causes the table to render to its original state (it looks like the pager is not working). Please try to define reference type parameters outside the render method. If hooks are used, please use useMemo or useState for storage.\"), mdx(\"div\", null, \"2. In the controlled mode, Table will not paginate dataSource, please pass in current page data to dataSource\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\nconst pageSize = 5;\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nconst getData = () => {\\n    const data = [];\\n    for (let i = 0; i < 46; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = (i * 1000) % 199;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nconst data = getData();\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n    const [loading, setLoading] = useState(false);\\n    const [currentPage, setPage] = useState(1);\\n\\n    const fetchData = (currentPage = 1) => {\\n        setLoading(true);\\n        setPage(currentPage);\\n        return new Promise((res, rej) => {\\n            setTimeout(() => {\\n                const data = getData();\\n                let dataSource = data.slice((currentPage - 1) * pageSize, currentPage * pageSize);\\n                res(dataSource);\\n            }, 300);\\n        }).then(dataSource => {\\n            setLoading(false);\\n            setData(dataSource);\\n        });\\n    };\\n\\n    const handlePageChange = page => {\\n        fetchData(page);\\n    };\\n\\n    useEffect(() => {\\n        fetchData();\\n    }, []);\\n\\n    return (\\n        <Table\\n            columns={columns}\\n            dataSource={dataSource}\\n            pagination={{\\n                currentPage,\\n                pageSize: 5,\\n                total: data.length,\\n                onPageChange: handlePageChange,\\n            }}\\n            loading={loading}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Fixed Column or Head\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can fix the column by setting the Fixed attribute of the column and scroll.x, and fix the header by setting scroll.y.\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"ul\", {\n    parentName: \"blockquote\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"It is recommended to specify scroll.x as a \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"fixed value\"), \" or percentage greater than the width of the table. If it is a fixed value, set it to >= the sum of all fixed column widths + the sum of all table column widths.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Make sure that all elements inside the table do not affect the height of the cells after rendering (e.g. containing unloaded pictures, etc.). In this case, give the stator element a definite height to ensure that the left and right Fixed columns of cells are not deranged.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If the column header is not aligned with the content or there is a column duplication or when the fixed column fails, specify the width width of the fixed column, if still not effective, try to recommend leaving a column with no width to accommodate the elastic layout, or check for ultra-long continuous fields to destroy the layout.\"))), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        fixed: true,\\n        width: 250,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        width: 200,\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        width: 200,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        width: 200,\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n    {\\n        title: '',\\n        dataIndex: 'operate',\\n        fixed: 'right',\\n        align: 'center',\\n        width: 100,\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const scroll = useMemo(() => ({ y: 300, x: 1200 }), []);\\n    const rowSelection = useMemo(\\n        () => ({\\n            onChange: (selectedRowKeys, selectedRows) => {\\n                console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            },\\n            getCheckboxProps: record => ({\\n                disabled: record.name === 'Michael James', // Column configuration not to be checked\\n                name: record.name,\\n            }),\\n            fixed: true,\\n        }),\\n        []\\n    );\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} rowSelection={rowSelection} scroll={scroll} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The header can be fixed to the top of the page with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sticky\"), \" property. v2.21 version support. When passing \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"top\"), \", you can control the distance from the scroll container.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"After turning on sticky, Table will automatically turn on the fixed layout, and the column width will be determined by \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"column.width\"), \". Columns without a given width are automatically assigned by the browser.\"), mdx(StickyHeaderTable, {\n    mdxType: \"StickyHeaderTable\"\n  }), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=false noInline=true dir=\\\"column\\\"\",\n    \"live\": \"false\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: '\\u6807\\u9898',\\n        dataIndex: 'name',\\n        fixed: true,\\n        width: 250,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design \\u8BBE\\u8BA1\\u7A3F',\\n                value: 'Semi Design \\u8BBE\\u8BA1\\u7A3F',\\n            },\\n            {\\n                text: 'Semi D2C \\u8BBE\\u8BA1\\u7A3F',\\n                value: 'Semi D2C \\u8BBE\\u8BA1\\u7A3F',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: '\\u5927\\u5C0F',\\n        dataIndex: 'size',\\n        width: 200,\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: '\\u6240\\u6709\\u8005',\\n        dataIndex: 'owner',\\n        width: 200,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: '\\u66F4\\u65B0\\u65E5\\u671F',\\n        dataIndex: 'updateTime',\\n        width: 200,\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n    {\\n        title: '',\\n        dataIndex: 'operate',\\n        fixed: 'right',\\n        align: 'center',\\n        width: 100,\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const scroll = useMemo(() => ({ y: 300, x: 1200 }), []);\\n    const rowSelection = useMemo(\\n        () => ({\\n            onChange: (selectedRowKeys, selectedRows) => {\\n                console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            },\\n            getCheckboxProps: record => ({\\n                disabled: record.name === 'Michael James', // Column configuration not to be checked\\n                name: record.name,\\n            }),\\n            fixed: true,\\n        }),\\n        []\\n    );\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design \\u8BBE\\u8BA1\\u7A3F${i}.fig` : `Semi D2C \\u8BBE\\u8BA1\\u7A3F${i}.fig`,\\n                owner: isSemiDesign ? '\\u59DC\\u9E4F\\u5FD7' : '\\u90DD\\u5BA3',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return (\\n        <Table\\n            sticky={{ top: 60 }}\\n            columns={columns}\\n            dataSource={dataSource}\\n            rowSelection={rowSelection}\\n            scroll={scroll}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Table Header With Sorting and Filtering Function\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Filters and sorting controls are integrated inside the table, and users can pass in the sorter display of the sorter open header by passing filters in Column and the filter control display of the onFilter open header.\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: Be sure to provide a \\\"key\\\" for each row of data that is different from other row values, or use the rowKey parameter to specify a property name as the primary key.\")), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: Sorting and filtering columns must set independent \\\"dataIndex\\\"\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n        sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const rowSelection = useMemo(\\n        () => ({\\n            onChange: (selectedRowKeys, selectedRows) => {\\n                console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            },\\n            getCheckboxProps: record => ({\\n                disabled: record.name === 'Michael James', // Column configuration not to be checked\\n                name: record.name,\\n            }),\\n        }),\\n        []\\n    );\\n    const scroll = useMemo(() => ({ y: 300 }), []);\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} rowSelection={rowSelection} scroll={scroll} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"When sorter is a function type, the sortOrder status can be obtained through the third parameter of the function. The function type is \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"(a?: RecordType, b?: RecordType, sortOrder?: 'ascend' | 'descend') => number\"), \". Supported by version v2.47.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can control whether to display the sorting tip through the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"showSortTip\"), \" attribute. It is supported since v2.65 and defaults to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"false\"), \". When the tip is turned on, when there is only sorting function, the sorting prompt will be displayed when the mouse is moved to the table header; in other cases, the sorting prompt will be displayed only when the mouse is moved to the sorting icon.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Note\"), \": When using the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sortOrder\"), \" attribute for controlled sorting, since the next sort order cannot be predicted, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"showSortTip\"), \" does not take effect and the prompt will not be displayed.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            }\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (r1, r2, order) => {\\n                const a = r1.size;\\n                const b = r2.size;\\n                if (typeof a === \\\"number\\\" && typeof b === \\\"number\\\") {\\n                    return a - b;\\n                } else if (typeof a === \\\"undefined\\\") {\\n                    return order === \\\"ascend\\\" ? 1 : -1;\\n                } else if (typeof b === \\\"undefined\\\") {\\n                    return order === \\\"ascend\\\" ? -1 : 1;\\n                } else {\\n                    return 0;\\n                }\\n            },\\n            render: text => text ? `${text} KB` : 'Unknown',\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n    ];\\n\\n    const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n    const docIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png';\\n\\n    const dataSource = [\\n        {\\n            key: '1',\\n            name: 'Semi Design draft.fig',\\n            nameIconSrc: figmaIconUrl,\\n            size: 3,\\n            owner: 'Jiang',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi D2C draft',\\n            nameIconSrc: docIconUrl,\\n            size: undefined,\\n            owner: 'Hao',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Semi D2C doc 3',\\n            nameIconSrc: docIconUrl,\\n            size: 1,\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '4',\\n            name: 'Semi Design doc 4',\\n            nameIconSrc: docIconUrl,\\n            size: 5,\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '5',\\n            name: 'Semi D2C doc 5',\\n            nameIconSrc: docIconUrl,\\n            size: undefined,\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '6',\\n            name: 'Semi Design doc 6',\\n            nameIconSrc: docIconUrl,\\n            size: 2,\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    return <Table columns={columns} dataSource={dataSource} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Custom Header Filtering\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"If you need to display the filter input box in the table header, you can pass ReactNode in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"title\"), \" and use it with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"filteredValue\"), \".\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useEffect, useRef } from 'react';\\nimport { Table, Avatar, Input, Space } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n    const [filteredValue, setFilteredValue] = useState([]);\\n    const compositionRef = useRef({ isComposition: false });\\n\\n    const DAY = 24 * 60 * 60 * 1000;\\n    const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\n\\n    const handleChange = (value) => {\\n        if (compositionRef.current.isComposition) {\\n            return;\\n        }\\n        const newFilteredValue = value ? [value] : [];\\n        setFilteredValue(newFilteredValue);\\n    };\\n    const handleCompositionStart = () => {\\n        compositionRef.current.isComposition = true;\\n    };\\n\\n    const handleCompositionEnd = (event) => {\\n        compositionRef.current.isComposition = false;\\n        const value = event.target.value;\\n        const newFilteredValue = value ? [value] : [];\\n        setFilteredValue(newFilteredValue);\\n    };\\n\\n\\n    const columns = [\\n        {\\n            title: (\\n                <Space>\\n                    <span>Title</span>\\n                    <Input\\n                        placeholder=\\\"Input filter value\\\"\\n                        style={{ width: 200 }}\\n                        onCompositionStart={handleCompositionStart}\\n                        onCompositionEnd={handleCompositionEnd}\\n                        onChange={handleChange}\\n                        showClear \\n                    />\\n                </Space>\\n            ),\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            onFilter: (value, record) => record.name.includes(value),\\n            filteredValue,\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n            render: text => `${text} KB`,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n    ];\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Custom Filter Rendering\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"renderFilterDropdown\"), \" to customize the render filter panel. v2.52 supported.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can call \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"setTempFilteredValue\"), \" to store the filter value when the user enters the filter value, and call \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"confirm\"), \" to trigger the actual filtering after the filter value is entered. You can also filter directly through \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"confirm({ filteredValue })\"), \".\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The reason for setting \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"tempFilteredValue\"), \" is that in scenarios where temporary filtered values need to be stored, there is no need to declare a state to save this temporary filtered value.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"type RenderFilterDropdown = (props: RenderFilterDropdownProps) => React.ReactNode;\\ninterface RenderFilterDropdownProps {\\n     /** Temporary filter value, the initial value is `filteredValue` or `defaultFilteredValue` */\\n     tempFilteredValue: any[];\\n     /** Set temporary filter value */\\n     setTempFilteredValue: (tempFilteredValue: any[]) => void;\\n     /** `confirm` will assign `tempFilteredValue` to `filteredValue` by default and trigger the `onChange` event. You can also set the filter value directly by passing in `filteredValue` */\\n     confirm: (props?: { closeDropdown?: boolean; filteredValue?: any[] }) => void;\\n     /** Clear filter values and temporary filter values */\\n     clear: (props?: { closeDropdown?: boolean }) => void;\\n     /** Close dropdown */\\n     close: () => void;\\n     /** Filter configuration items, do not pass if not required */\\n     filters?: RenderDropdownProps['filters']\\n}\\n\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useEffect, useRef } from 'react';\\nimport { Table, Avatar, Input, Button, Space } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n    const inputRef = useRef();\\n\\n    const DAY = 24 * 60 * 60 * 1000;\\n    const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            onFilter: (value, record) => record.name.includes(value),\\n            renderFilterDropdown: (props) => {\\n                console.log('renderFilterDropdown', props);\\n                const { tempFilteredValue, setTempFilteredValue, confirm, clear, close } = props;\\n\\n                const handleChange = value => {\\n                    const filteredValue = value ? [value] : [];\\n                    setTempFilteredValue(filteredValue);\\n                    // You can also filter directly when the input value changes\\n                    // confirm({ filteredValue });\\n                };\\n\\n                return (\\n                    <Space vertical align='start' style={{ padding: 8 }}>\\n                        <Input ref={inputRef} value={tempFilteredValue[0]} onChange={handleChange}/>\\n                        <Space>\\n                            <Button onClick={() => confirm({ closeDropdown: true })}>Filter+Close</Button>\\n                            <Button onClick={() => clear({ closeDropdown: true })}>Clear+Close</Button>\\n                            <Button onClick={() => close()}>Close</Button>\\n                        </Space>\\n                    </Space>\\n                );\\n            },\\n            onFilterDropdownVisibleChange: (visible) => {\\n                console.log('inputRef', visible, inputRef);\\n                if (inputRef.current && inputRef.current.focus) {\\n                    inputRef.current.focus();\\n                }\\n            }\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n            render: text => `${text} KB`,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            onFilter: (value, record) => record.owner.includes(value),\\n            defaultFilteredValue: ['Jiang Pengzhi'],\\n            renderFilterDropdown: (props) => {\\n                console.log('renderFilterDropdown', props);\\n                const { tempFilteredValue, setTempFilteredValue, confirm, clear, close } = props;\\n\\n                const handleChange = (value) => {\\n                    if (value) {\\n                        setTempFilteredValue([value]);\\n                    } else {\\n                        setTempFilteredValue([]);\\n                    }\\n                };\\n\\n                return (\\n                    <Space vertical align='start' style={{ padding: 8 }}>\\n                        <Input value={tempFilteredValue[0]} onChange={handleChange}/>\\n                        <Space>\\n                            <Button onClick={() => confirm({ closeDropdown: false })}>Filter+Close</Button>\\n                            <Button onClick={() => clear({ closeDropdown: false })}>Clear+Close</Button>\\n                            <Button onClick={() => close()}>Close</Button>\\n                        </Space>\\n                    </Space>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n    ];\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Filter Confirm Mode\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"By setting \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"filterConfirmMode='confirm'\"), \", the filter dropdown panel can support confirm mode. In this mode:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Clicking filter items will not take effect immediately, but will be temporarily stored\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The bottom of the dropdown panel will show \\\"Confirm\\\" and \\\"Reset\\\" buttons\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Clicking the \\\"Confirm\\\" button will apply the filter conditions and close the dropdown panel\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Clicking the \\\"Reset\\\" button will restore to the initial state when the dropdown was opened (will not close the panel)\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"This feature is suitable for scenarios where multiple filter conditions need to be selected before applying them at once, avoiding triggering filtering on every click.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useEffect } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const DAY = 24 * 60 * 60 * 1000;\\n    const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 300,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            filters: [\\n                {\\n                    text: 'Semi Design',\\n                    value: 'Semi Design',\\n                },\\n                {\\n                    text: 'Semi Pro',\\n                    value: 'Semi Pro',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n            filterMultiple: true,\\n            // Enable filter confirm mode\\n            filterConfirmMode: 'confirm',\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n            render: text => `${text} KB`,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            filters: [\\n                {\\n                    text: 'Jiang Pengzhi',\\n                    value: 'Jiang Pengzhi',\\n                },\\n                {\\n                    text: 'Hao Xuan',\\n                    value: 'Hao Xuan',\\n                },\\n            ],\\n            onFilter: (value, record) => record.owner.includes(value),\\n            filterMultiple: true,\\n            // Enable filter confirm mode\\n            filterConfirmMode: 'confirm',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update Date',\\n            dataIndex: 'updateTime',\\n            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n    ];\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 20; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi Pro homepage${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date('2024-01-25').valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Custom Filter Item Rendering\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"It is supported to pass in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"renderFilterDropdownItem\"), \" to customize the rendering method of each filter item.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"This method accepts an \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Object\"), \" input parameter, and the meaning of each attribute is as follows:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onChange: e => void\"), \" current filter item selection/reverse selection event;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"text: ReactNode\"), \" copy of the current screening item;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"value: any\"), \" the value of the current filter item;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"checked: boolean\"), \" whether the current filter item has been selected;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"filteredValue: any[]\"), \" all currently filtered values;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"level: number\"), \" is the level of the current filter item, if it is a nested filter item, the value will be >= 1;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"filterMultiple: boolean\"), \" whether the current filter item is multi-select.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar, Dropdown } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n        renderFilterDropdownItem: ({ text, checked, onChange }) => (\\n            <Dropdown.Item onClick={onChange} active={checked}>\\n                {text}\\n            </Dropdown.Item>\\n        ),\\n        filterDropdownProps: {\\n            showTick: true,\\n        },\\n        sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const rowSelection = useMemo(\\n        () => ({\\n            onChange: (selectedRowKeys, selectedRows) => {\\n                console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n            },\\n            getCheckboxProps: record => ({\\n                disabled: record.name === 'Michael James', // Column configuration not to be checked\\n                name: record.name,\\n            }),\\n        }),\\n        []\\n    );\\n    const scroll = useMemo(() => ({ y: 300 }), []);\\n\\n    const getData = () => {\\n        const data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} rowSelection={rowSelection} scroll={scroll} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"A Table That Can Be Expanded\"), mdx(Notice, {\n    type: \"primary\",\n    title: \"Note\",\n    mdxType: \"Notice\"\n  }, mdx(\"div\", null, \"1. The unfold button will be rendered in the same cell as the first column, and you can open a separate column of rendering by passing in `hideExpandedColumn = \", false, \"`.\"), mdx(\"div\", null, \"2. Be sure to provide a \\\"key\\\" for each row of data that is different from the other row values, or use the rowKey parameter to specify an attribute name as the primary key.\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"A Common Table That Can Be Expanded\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"If you need to render a table that can be expanded, in addition to the need to pass \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"expandedRowRender\"), \" In addition to this method, you must specify \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"rowKey\"), \"(by default \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"key\"), \"), Table will be based on \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"rowKey\"), \" Gets a row unique identifier.\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"rowKey\"), \" is a Function, the result of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"rowKey(record)\"), \" is taken as the row unique ID\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"rowKey\"), \" is a string type, you take \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"record[rowKey]\"), \" as the row unique ID\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar, Descriptions, Tag } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        width: 500,\\n        dataIndex: 'name',\\n        render: (text, record, index) => {\\n            return (\\n                <span>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={record.nameIconSrc} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </span>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n    },\\n    {\\n        title: '',\\n        dataIndex: 'operate',\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nconst data = [\\n    {\\n        key: '1',\\n        name: 'Semi Design design draft.fig',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n        size: '2M',\\n        owner: 'Jiang Pengzhi',\\n        updateTime: '2020-02-02 05:13',\\n        avatarBg: 'grey',\\n    },\\n    {\\n        key: '2',\\n        name: 'Semi Design share docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '2M',\\n        owner: 'Hao Xuan',\\n        updateTime: '2020-01-17 05:31',\\n        avatarBg: 'red',\\n    },\\n    {\\n        key: '3',\\n        name: 'Design docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '34KB',\\n        owner: 'Zoey Edwards',\\n        updateTime: '2020-01-26 11:01',\\n        avatarBg: 'light-blue',\\n    },\\n];\\n\\nconst expandData = {\\n    '0': [\\n        { key: 'DAU', value: '1,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '3 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Designer</Tag> },\\n        { key: 'Certification', value: 'No Verified' },\\n    ],\\n    '1': [\\n        { key: 'DAU', value: '2,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '90%' },\\n        { key: 'Security Level', value: '1 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Template</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n    '2': [\\n        { key: 'DAU', value: '2,920,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '2 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Docs</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n};\\n\\nfunction App() {\\n    const expandRowRender = (record, index) => {\\n        return <Descriptions align=\\\"justify\\\" data={expandData[index]} />;\\n    };\\n\\n    const rowSelection = {\\n        getCheckboxProps: record => ({\\n            disabled: record.name === 'Design docs', // Column configuration not to be checked\\n            name: record.name,\\n        }),\\n        onSelect: (record, selected) => {\\n            console.log(`select row: ${selected}`, record);\\n        },\\n        onSelectAll: (selected, selectedRows) => {\\n            console.log(`select all rows: ${selected}`, selectedRows);\\n        },\\n        onChange: (selectedRowKeys, selectedRows) => {\\n            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n        },\\n    };\\n\\n    return (\\n        <Table\\n            rowKey=\\\"name\\\"\\n            columns={columns}\\n            dataSource={data}\\n            expandedRowRender={expandRowRender}\\n            rowSelection={rowSelection}\\n            pagination={false}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"The Unfold Button Is Rendered In a Separated Column\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"By default, the expansion button will be rendered in the same cell as the first copy, and you can enter \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"hideExpandedColumn={false}\"), \" to render as a separate column:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar, Descriptions, Tag } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        width: 500,\\n        dataIndex: 'name',\\n        render: (text, record, index) => {\\n            return (\\n                <span>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={record.nameIconSrc} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </span>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n    },\\n    {\\n        title: '',\\n        dataIndex: 'operate',\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nconst data = [\\n    {\\n        key: '1',\\n        name: 'Semi Design design draft.fig',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n        size: '2M',\\n        owner: 'Jiang Pengzhi',\\n        updateTime: '2020-02-02 05:13',\\n        avatarBg: 'grey',\\n    },\\n    {\\n        key: '2',\\n        name: 'Semi Design share docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '2M',\\n        owner: 'Hao Xuan',\\n        updateTime: '2020-01-17 05:31',\\n        avatarBg: 'red',\\n    },\\n    {\\n        key: '3',\\n        name: 'Design docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '34KB',\\n        owner: 'Zoey Edwards',\\n        updateTime: '2020-01-26 11:01',\\n        avatarBg: 'light-blue',\\n    },\\n];\\n\\nconst expandData = {\\n    '0': [\\n        { key: 'DAU', value: '1,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '3 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Designer</Tag> },\\n        { key: 'Certification', value: 'No Verified' },\\n    ],\\n    '1': [\\n        { key: 'DAU', value: '2,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '90%' },\\n        { key: 'Security Level', value: '1 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Template</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n    '2': [\\n        { key: 'DAU', value: '2,920,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '2 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Docs</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n};\\n\\nfunction App() {\\n    const expandRowRender = (record, index) => {\\n        return <Descriptions align=\\\"justify\\\" data={expandData[index]} />;\\n    };\\n\\n    const rowSelection = {\\n        getCheckboxProps: record => ({\\n            disabled: record.name === 'Design docs', // Column configuration not to be checked\\n            name: record.name,\\n        }),\\n        onSelect: (record, selected) => {\\n            console.log(`select row: ${selected}`, record);\\n        },\\n        onSelectAll: (selected, selectedRows) => {\\n            console.log(`select all rows: ${selected}`, selectedRows);\\n        },\\n        onChange: (selectedRowKeys, selectedRows) => {\\n            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n        },\\n    };\\n\\n    return (\\n        <Table\\n            rowKey=\\\"name\\\"\\n            columns={columns}\\n            dataSource={data}\\n            expandedRowRender={expandRowRender}\\n            hideExpandedColumn={false}\\n            rowSelection={rowSelection}\\n            pagination={false}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Turn Off Rendering of Expandable Button of a Row\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can pass the row Expandable method, enter the reference as record, and determine whether the return value is false to close the rendering of the expandable button on a row.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar, Descriptions, Tag } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        width: 500,\\n        dataIndex: 'name',\\n        render: (text, record, index) => {\\n            return (\\n                <span>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={record.nameIconSrc} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </span>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n    },\\n    {\\n        title: '',\\n        dataIndex: 'operate',\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nconst data = [\\n    {\\n        key: '1',\\n        name: 'Semi Design design draft.fig',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n        size: '2M',\\n        owner: 'Jiang Pengzhi',\\n        updateTime: '2020-02-02 05:13',\\n        avatarBg: 'grey',\\n    },\\n    {\\n        key: '2',\\n        name: 'Semi Design share docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '2M',\\n        owner: 'Hao Xuan',\\n        updateTime: '2020-01-17 05:31',\\n        avatarBg: 'red',\\n    },\\n    {\\n        key: '3',\\n        name: 'Design docs',\\n        nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n        size: '34KB',\\n        owner: 'Zoey Edwards',\\n        updateTime: '2020-01-26 11:01',\\n        avatarBg: 'light-blue',\\n    },\\n];\\n\\nconst expandData = {\\n    '0': [\\n        { key: 'DAU', value: '1,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '3 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Designer</Tag> },\\n        { key: 'Certification', value: 'No Verified' },\\n    ],\\n    '1': [\\n        { key: 'DAU', value: '2,480,000' },\\n        { key: 'Day7 Retention Ratio', value: '90%' },\\n        { key: 'Security Level', value: '1 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Template</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n    '2': [\\n        { key: 'DAU', value: '2,920,000' },\\n        { key: 'Day7 Retention Ratio', value: '98%' },\\n        { key: 'Security Level', value: '2 \\u7EA7' },\\n        { key: 'Vertical label', value: <Tag style={{ margin: 0 }}>Docs</Tag> },\\n        { key: 'Certification', value: 'Verified' },\\n    ],\\n};\\n\\nfunction App() {\\n    const expandRowRender = (record, index) => {\\n        return <Descriptions align=\\\"justify\\\" data={expandData[index]} />;\\n    };\\n\\n    const rowSelection = {\\n        getCheckboxProps: record => ({\\n            disabled: record.name === 'Design docs', // Column configuration not to be checked\\n            name: record.name,\\n        }),\\n        onSelect: (record, selected) => {\\n            console.log(`select row: ${selected}`, record);\\n        },\\n        onSelectAll: (selected, selectedRows) => {\\n            console.log(`select all rows: ${selected}`, selectedRows);\\n        },\\n        onChange: (selectedRowKeys, selectedRows) => {\\n            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\\n        },\\n    };\\n\\n    return (\\n        <Table\\n            rowKey=\\\"name\\\"\\n            columns={columns}\\n            dataSource={data}\\n            expandedRowRender={expandRowRender}\\n            rowExpandable={record => record.name !== 'Design docs'}\\n            hideExpandedColumn={false}\\n            rowSelection={rowSelection}\\n            pagination={false}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Tree Data Display\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The table supports the display of tree data and is automatically displayed as a tree table when there are children fields in the data. If you do not need or use other fields, you can configure it with the childrenRecordName. In addition, you can control the indent width of each layer by setting indent Size.\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: Be sure to provide a \\\"key\\\" for each row of data that is different from the other row values, or use the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"rowKey\"), \" parameter to specify a property name as the primary key.\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Simple example of tree data\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table } from '@douyinfe/semi-ui';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Key',\\n            dataIndex: 'dataKey',\\n            key: 'dataKey',\\n        },\\n        {\\n            title: 'Name',\\n            dataIndex: 'name',\\n            key: 'name',\\n            width: 200,\\n        },\\n        {\\n            title: 'Data Type',\\n            dataIndex: 'type',\\n            key: 'type',\\n            width: 400,\\n        },\\n        {\\n            title: 'Description',\\n            dataIndex: 'description',\\n            key: 'description',\\n        },\\n        {\\n            title: 'Default',\\n            dataIndex: 'default',\\n            key: 'default',\\n            width: 100,\\n        },\\n    ];\\n\\n    const data = [\\n        {\\n            key: 1,\\n            dataKey: 'videos_info',\\n            name: 'Video Info',\\n            type: 'Object',\\n            description: 'Meta info of video',\\n            default: 'None',\\n            children: [\\n                {\\n                    key: 11,\\n                    dataKey: 'status',\\n                    name: 'Video Status',\\n                    type: 'Enum <Integer>',\\n                    description: 'Viewable and recommended status of the video',\\n                    default: '1',\\n                },\\n                {\\n                    key: 12,\\n                    dataKey: 'vid',\\n                    name: 'Video ID',\\n                    type: 'String',\\n                    description: 'Unique ID that identifies the video',\\n                    default: 'None',\\n                    children: [\\n                        {\\n                            dataKey: 'video_url',\\n                            name: 'Video url',\\n                            type: 'String',\\n                            description: 'Unique link to the video',\\n                            default: 'None',\\n                        },\\n                    ],\\n                },\\n            ],\\n        },\\n        {\\n            key: 2,\\n            dataKey: 'text_info',\\n            name: 'Text Info',\\n            type: 'Object',\\n            description: 'Meta info of video',\\n            default: 'None',\\n            children: [\\n                {\\n                    key: 21,\\n                    dataKey: 'title',\\n                    name: 'Video Title',\\n                    type: 'String',\\n                    description: 'Title of video',\\n                    default: 'None',\\n                },\\n                {\\n                    key: 22,\\n                    dataKey: 'video_description',\\n                    name: 'Video Description',\\n                    type: 'String',\\n                    description: 'Description of video',\\n                    default: 'None',\\n                },\\n            ],\\n        },\\n    ];\\n\\n    return <Table columns={columns} defaultExpandAllRows dataSource={data} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Rows of Interchangeable Tree Data\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"You can do row switching by changing the order of the dataSource elements.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState } from 'react';\\nimport { Table, Button } from '@douyinfe/semi-ui';\\nimport { IconArrowUp, IconArrowDown } from '@douyinfe/semi-icons';\\n\\nconst raw = [\\n    {\\n        key: 1,\\n        dataKey: 'videos_info',\\n        name: 'Video Info',\\n        type: 'Object',\\n        description: 'Meta info of video',\\n        default: 'None',\\n        children: [\\n            {\\n                key: 11,\\n                dataKey: 'status',\\n                name: 'Video Status',\\n                type: 'Enum <Integer>',\\n                description: 'Viewable and recommended status of the video',\\n                default: '1',\\n            },\\n            {\\n                key: 12,\\n                dataKey: 'vid',\\n                name: 'Video ID',\\n                type: 'String',\\n                description: 'Unique ID that identifies the video',\\n                default: 'None',\\n                children: [\\n                    {\\n                        dataKey: 'video_url',\\n                        name: 'Video url',\\n                        type: 'String',\\n                        description: 'Unique link to the video',\\n                        default: 'None',\\n                    },\\n                ],\\n            },\\n        ],\\n    },\\n    {\\n        key: 2,\\n        dataKey: 'text_info',\\n        name: 'Text Info',\\n        type: 'Object',\\n        description: 'Meta info of video',\\n        default: 'None',\\n        children: [\\n            {\\n                key: 21,\\n                dataKey: 'title',\\n                name: 'Video Title',\\n                type: 'String',\\n                description: 'Title of video',\\n                default: 'None',\\n            },\\n            {\\n                key: 22,\\n                dataKey: 'video_description',\\n                name: 'Video Description',\\n                type: 'String',\\n                description: 'Description of video',\\n                default: 'None',\\n            },\\n        ],\\n    },\\n];\\n\\nconst rowKey = 'key';\\nconst childrenRecordName = 'children';\\n\\nfunction App() {\\n    const [expandedRowKeys, setExpandedRowKeys] = useState([1, 2]);\\n    const [data, setData] = useState(raw);\\n\\n    const switchRecord = (key1, key2) => {\\n        const newData = [...data];\\n\\n        if (key1 != null && key2 != null) {\\n            const item1 = findRecordByKey(key1, newData);\\n            const item2 = findRecordByKey(key2, newData);\\n\\n            // you have to copy item1 and item2 first\\n            const copiedItem1 = { ...item1 };\\n            const copiedItem2 = { ...item2 };\\n\\n            coverRecord(item1, copiedItem2);\\n            coverRecord(item2, copiedItem1);\\n\\n            setData(newData);\\n        }\\n    };\\n\\n    const findRecordByKey = (key, data) => {\\n        if (Array.isArray(data) && data.length && key != null) {\\n            for (let item of data) {\\n                if (item[rowKey] === key) {\\n                    return item;\\n                }\\n\\n                const children = item[childrenRecordName];\\n                if (Array.isArray(children) && children.length) {\\n                    const item = findRecordByKey(key, children);\\n\\n                    if (item != null) {\\n                        return item;\\n                    }\\n                }\\n            }\\n        }\\n    };\\n\\n    const coverRecord = (obj, srcObj) => {\\n        if (obj && typeof obj === 'object' && srcObj && typeof srcObj === 'object') {\\n            const srcKeys = Object.keys(srcObj);\\n            const copied = { ...srcObj };\\n\\n            Object.assign(obj, copied);\\n\\n            Object.keys(obj).forEach(key => {\\n                if (!srcKeys.includes(key)) {\\n                    delete obj[key];\\n                }\\n            });\\n        }\\n\\n        return obj;\\n    };\\n\\n    const getSameLevelRecords = (key, data = []) => {\\n        if (key != null && Array.isArray(data) && data.length) {\\n            if (data.find(item => item[rowKey] === key)) {\\n                return data;\\n            }\\n            for (let item of data) {\\n                const records = getSameLevelRecords(key, item[childrenRecordName]);\\n\\n                if (records.length) {\\n                    return records;\\n                }\\n            }\\n        }\\n        return [];\\n    };\\n\\n    const columns = [\\n        {\\n            title: 'Key',\\n            dataIndex: 'dataKey',\\n            key: 'dataKey',\\n        },\\n        {\\n            title: 'Name',\\n            dataIndex: 'name',\\n            key: 'name',\\n            width: 200,\\n        },\\n        {\\n            title: 'Data Type',\\n            dataIndex: 'type',\\n            key: 'type',\\n        },\\n        {\\n            title: 'Description',\\n            dataIndex: 'description',\\n            key: 'description',\\n        },\\n        {\\n            title: 'Default',\\n            dataIndex: 'default',\\n            key: 'default',\\n            width: 100,\\n        },\\n        {\\n            key: 'operation',\\n            render: record => {\\n                const records = getSameLevelRecords(record[rowKey], data);\\n                const index = records.findIndex(item => item[rowKey] === record[rowKey]);\\n                const upProps = {};\\n                const downProps = {};\\n\\n                if (index > 0) {\\n                    const upRow = records[index - 1];\\n                    upProps.onClick = () => switchRecord(record[rowKey], upRow[rowKey]);\\n                } else {\\n                    upProps.disabled = true;\\n                }\\n\\n                if (index < records.length - 1) {\\n                    const downRow = records[index + 1];\\n                    downProps.onClick = () => switchRecord(record[rowKey], downRow[rowKey]);\\n                } else {\\n                    downProps.disabled = true;\\n                }\\n\\n                return (\\n                    <>\\n                        <Button icon={<IconArrowUp />} {...upProps} />\\n                        <Button icon={<IconArrowDown />} {...downProps} />\\n                    </>\\n                );\\n            },\\n        },\\n    ];\\n\\n    return (\\n        <Table\\n            columns={columns}\\n            dataSource={data}\\n            rowKey={rowKey}\\n            childrenRecordName={childrenRecordName}\\n            expandedRowKeys={expandedRowKeys}\\n            onExpandedRowsChange={rows => setExpandedRowKeys(rows.map(item => item[rowKey]))}\\n        />\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Tree Selection\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"By default, the row selection of the table is independent. You can simulate a tree selection by defining selectedRowKeys.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo, useState, useCallback } from 'react';\\nimport { get, union, pullAll } from 'lodash-es';\\nimport { Table } from '@douyinfe/semi-ui';\\n\\nconst childrenRecordName = 'children';\\nconst rowKey = 'key';\\nconst getKey = record => get(record, rowKey, 'key');\\n\\nconst ChildrenDataSelectedDemo = () => {\\n    const [selectedRowKeys, setSelectedRowKeys] = useState([]);\\n\\n    const columns = useMemo(\\n        () => [\\n            {\\n                title: 'Key',\\n                dataIndex: 'dataKey',\\n                key: 'dataKey',\\n            },\\n            {\\n                title: 'Name',\\n                dataIndex: 'name',\\n                key: 'name',\\n                width: 200,\\n            },\\n            {\\n                title: 'Data Type',\\n                dataIndex: 'type',\\n                key: 'type',\\n                width: 400,\\n            },\\n            {\\n                title: 'Description',\\n                dataIndex: 'description',\\n                key: 'description',\\n            },\\n            {\\n                title: 'Default',\\n                dataIndex: 'default',\\n                key: 'default',\\n                width: 100,\\n            },\\n        ],\\n        []\\n    );\\n\\n    const data = useMemo(\\n        () => [\\n            {\\n                key: 1,\\n                dataKey: 'videos_info',\\n                name: 'Video Info',\\n                type: 'Object',\\n                description: 'Meta info of video',\\n                default: 'None',\\n                children: [\\n                    {\\n                        key: 11,\\n                        dataKey: 'status',\\n                        name: 'Video Status',\\n                        type: 'Enum <Integer>',\\n                        description: 'Viewable and recommended status of the video',\\n                        default: '1',\\n                    },\\n                    {\\n                        key: 12,\\n                        dataKey: 'vid',\\n                        name: 'Video ID',\\n                        type: 'String',\\n                        description: 'Unique ID that identifies the video',\\n                        default: 'None',\\n                        children: [\\n                            {\\n                                key: 121,\\n                                dataKey: 'video_url',\\n                                name: 'Video url',\\n                                type: 'String',\\n                                description: 'Unique link to the video',\\n                                default: 'None',\\n                            },\\n                        ],\\n                    },\\n                ],\\n            },\\n            {\\n                key: 2,\\n                dataKey: 'text_info',\\n                name: 'Text Info',\\n                type: 'Object',\\n                description: 'Meta info of video',\\n                default: 'None',\\n                children: [\\n                    {\\n                        key: 21,\\n                        dataKey: 'title',\\n                        name: 'Video Title',\\n                        type: 'String',\\n                        description: 'Title of video',\\n                        default: 'None',\\n                    },\\n                    {\\n                        key: 22,\\n                        dataKey: 'video_description',\\n                        name: 'Video Description',\\n                        type: 'String',\\n                        description: 'Description of video',\\n                        default: 'None',\\n                    },\\n                ],\\n            },\\n        ],\\n        []\\n    );\\n\\n    const isRecordDisabled = record => {\\n        return false;\\n    };\\n\\n    const traverse = (data, res) => {\\n        for (let record of data) {\\n            const children = get(record, 'children');\\n            const disabled = isRecordDisabled(record);\\n            if (!disabled) {\\n                const key = getKey(record);\\n                res.push(key);\\n            }\\n            if (Array.isArray(children)) {\\n                traverse(children, res);\\n            }\\n        }\\n    };\\n\\n    const getAllRowKeys = data => {\\n        const allRowKeys = [];\\n        traverse(data, allRowKeys);\\n        console.log('allRowKeys', allRowKeys);\\n        return allRowKeys;\\n    };\\n\\n    const findShouldSelectRowKeys = (record, selected) => {\\n        let shouldSelectRowKeys;\\n        const children = get(record, 'children');\\n        let childrenRowKeys = [];\\n        if (Array.isArray(children)) {\\n            traverse(children, childrenRowKeys);\\n        }\\n\\n        const key = getKey(record);\\n        if (!selected) {\\n            shouldSelectRowKeys = [...selectedRowKeys];\\n            pullAll(shouldSelectRowKeys, [key, ...childrenRowKeys]);\\n        } else {\\n            shouldSelectRowKeys = union(selectedRowKeys, [key, ...childrenRowKeys]);\\n        }\\n        return shouldSelectRowKeys;\\n    };\\n\\n    const doSelect = useCallback(\\n        (record, selected) => {\\n            const rowKeys = findShouldSelectRowKeys(record, selected);\\n            setSelectedRowKeys(rowKeys);\\n            console.log('select', record, rowKeys);\\n        },\\n        [selectedRowKeys, rowKey, childrenRecordName]\\n    );\\n\\n    const doSelectAll = useCallback((selected, selectedRows) => {\\n        console.log(selected);\\n        let rowKeys = [];\\n        if (selected) {\\n            rowKeys = getAllRowKeys(data);\\n        }\\n        setSelectedRowKeys(rowKeys);\\n    }, []);\\n\\n    const rowSelection = useMemo(\\n        () => ({\\n            selectedRowKeys,\\n            onSelect: doSelect,\\n            onSelectAll: doSelectAll,\\n        }),\\n        [selectedRowKeys, doSelect, doSelectAll]\\n    );\\n\\n    return (\\n        <Table\\n            columns={columns}\\n            rowKey={rowKey}\\n            childrenRecordName={childrenRecordName}\\n            rowSelection={rowSelection}\\n            dataSource={data}\\n            pagination={false}\\n        />\\n    );\\n};\\n\\nrender(ChildrenDataSelectedDemo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Custom Row or Cell Events and Properties\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The incoming \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onRow\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onHeaderRow\"), \" can define the native event or property of a table or table header line.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The incoming \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Column.onCell\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Column.onHeaderCell\"), \" can define a table or header cell native event or property.\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"In principle, the properties or events supported on tr / td / th can be defined. For example:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The tr at the head of the watch defines onMouseEnter / onMouseLeave\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The tr of the table defines className\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The third line of the table defines onClick.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui/';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nfunction EventTable(props = {}) {\\n    const columns = useMemo(\\n        () => [\\n            {\\n                title: 'Title',\\n                dataIndex: 'name',\\n                width: 400,\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n                filters: [\\n                    {\\n                        text: 'Semi Design design draft',\\n                        value: 'Semi Design design draft',\\n                    },\\n                    {\\n                        text: 'Semi D2C design draft',\\n                        value: 'Semi D2C design draft',\\n                    },\\n                ],\\n                onFilter: (value, record) => record.name.includes(value),\\n            },\\n            {\\n                title: 'Size',\\n                dataIndex: 'size',\\n                sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n                render: text => `${text} KB`,\\n            },\\n            {\\n                title: 'Owner',\\n                dataIndex: 'owner',\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                                {typeof text === 'string' && text.slice(0, 1)}\\n                            </Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n            },\\n            {\\n                title: 'Update',\\n                dataIndex: 'updateTime',\\n                sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n                render: value => {\\n                    return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n                },\\n            },\\n        ],\\n        []\\n    );\\n\\n    const data = useMemo(() => {\\n        const _data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            _data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return _data;\\n    }, []);\\n\\n    const onRow = useMemo(\\n        () => (record, index) => {\\n            const props = {\\n                className: 'my-tr-class',\\n            };\\n\\n            if (index === 2) {\\n                return {\\n                    ...props,\\n                    onClick: e => console.log('mouse click: ', record, index),\\n                };\\n            } else {\\n                return {\\n                    ...props,\\n                };\\n            }\\n        },\\n        []\\n    );\\n    const onHeaderRow = useMemo(\\n        () => (columns, index) => {\\n            return {\\n                onMouseEnter: e => console.log('mouse enter: ', columns, index),\\n                onMouseLeave: e => console.log('mouse leave: ', columns, index),\\n            };\\n        },\\n        []\\n    );\\n\\n    return <Table columns={columns} dataSource={data} onRow={onRow} onHeaderRow={onHeaderRow} />;\\n}\\n\\nrender(EventTable);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Zebra Pattern Table\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"OnRow\"), \" to set a background color for each row to create a zebra stripped table.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar\\n                            size=\\\"small\\\"\\n                            shape=\\\"square\\\"\\n                            src={record.nameIconSrc}\\n                            style={{ marginRight: 12 }}\\n                        ></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ];\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Semi Design design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi Design share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            name: 'Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '4',\\n            name: 'Semi D2C design draft.fig',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Jiang Pengzhi',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '5',\\n            name: 'Semi D2C share docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Hao Xuan',\\n            updateTime: '2020-01-17 05:31',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '6',\\n            name: 'Semi D2C Design docs',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Zoey Edwards',\\n            updateTime: '2020-01-26 11:01',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    const handleRow = (record, index) => {\\n        if (index % 2 === 0) {\\n            return {\\n                style: {\\n                    background: 'var(--semi-color-fill-0)',\\n                },\\n            };\\n        } else {\\n            return {};\\n        }\\n    };\\n\\n    return <Table columns={columns} dataSource={data} onRow={handleRow} pagination={false} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Column Ellipsis\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ellipsis\"), \" to make cells automatically clipped. v2.34.0 support.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            fixed: true,\\n            width: 250,\\n            filters: [\\n                {\\n                    text: 'Semi Design',\\n                    value: 'Semi Design',\\n                },\\n                {\\n                    text: 'Semi D2C',\\n                    value: 'Semi D2C',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n            ellipsis: true,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            width: 200,\\n            ellipsis: true,\\n            filters: [\\n                {\\n                    text: 'Semi Design',\\n                    value: 'Semi Design',\\n                },\\n                {\\n                    text: 'Semi D2C',\\n                    value: 'Semi D2C',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n            ellipsis: true,\\n        },\\n        {\\n            title: 'Update time',\\n            dataIndex: 'updateTime',\\n            width: 200,\\n            ellipsis: true,\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            fixed: 'right',\\n            align: 'center',\\n            width: 100,\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ];\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Maintained by the Douyin front-end and UED teams, an easy-to-customize modern design system that helps designers and developers create high-quality products.',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi is designed based on FA architecture, and the main logic is extracted as Foundation package, which is easy to migrate to other frameworks',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            name: 'Maintained by the Douyin front-end and UED teams, an easy-to-customize modern design system that helps designers and developers create high-quality products.',\\n            size: '34KB',\\n            owner: 'Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '4',\\n            name: 'Semi is designed based on FA architecture, and the main logic is extracted as Foundation package, which is easy to migrate to other frameworks',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    return <Table scroll={{ x: 1200 }} columns={columns} dataSource={data} pagination={false} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Set \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ellipsis.showTitle\"), \" to false to hide the default native HTML title. With \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"column.render\"), \" you can customize the content prompt.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Typography } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\n\\nfunction App() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            fixed: true,\\n            width: 250,\\n            filters: [\\n                {\\n                    text: 'Semi Design',\\n                    value: 'Semi Design',\\n                },\\n                {\\n                    text: 'Semi D2C',\\n                    value: 'Semi D2C',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n            ellipsis: { showTitle: false },\\n            render: (text) => <Typography.Text ellipsis={{ showTooltip: true }}>{text}</Typography.Text>,\\n        },\\n        {\\n            title: 'Owner',\\n            dataIndex: 'owner',\\n            width: 200,\\n            filters: [\\n                {\\n                    text: 'Semi Design',\\n                    value: 'Semi Design',\\n                },\\n                {\\n                    text: 'Semi D2C',\\n                    value: 'Semi D2C',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n            ellipsis: { showTitle: false },\\n            render: (text) => <Typography.Text ellipsis={{ showTooltip: true }}>{text}</Typography.Text>,\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            sorter: (a, b) => (a.name.length - b.name.length > 0 ? 1 : -1),\\n            ellipsis: true,\\n        },\\n        {\\n            title: 'Update time',\\n            dataIndex: 'updateTime',\\n            width: 200,\\n            ellipsis: true,\\n        },\\n        {\\n            title: '',\\n            dataIndex: 'operate',\\n            fixed: 'right',\\n            align: 'center',\\n            width: 100,\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ];\\n    const data = [\\n        {\\n            key: '1',\\n            name: 'Maintained by the Douyin front-end and UED teams, an easy-to-customize modern design system that helps designers and developers create high-quality products.',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png',\\n            size: '2M',\\n            owner: 'Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'grey',\\n        },\\n        {\\n            key: '2',\\n            name: 'Semi is designed based on FA architecture, and the main logic is extracted as Foundation package, which is easy to migrate to other frameworks',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '2M',\\n            owner: 'Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'red',\\n        },\\n        {\\n            key: '3',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            name: 'Maintained by the Douyin front-end and UED teams, an easy-to-customize modern design system that helps designers and developers create high-quality products.',\\n            size: '34KB',\\n            owner: 'Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang Pengzhi Jiang',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'light-blue',\\n        },\\n        {\\n            key: '4',\\n            name: 'Semi is designed based on FA architecture, and the main logic is extracted as Foundation package, which is easy to migrate to other frameworks',\\n            nameIconSrc: 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/docs-icon.png',\\n            size: '34KB',\\n            owner: 'Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao Xuan Hao',\\n            updateTime: '2020-02-02 05:13',\\n            avatarBg: 'light-blue',\\n        },\\n    ];\\n\\n    return <Table scroll={{ x: 1200 }} columns={columns} dataSource={data} pagination={false} />;\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Resizable Column\"), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Basic Resizable Column\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"For some columns with more content, you can choose to turn on the telescopic column function and pull and pull at the head to realize the real-time change of column width.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"But you need to pay attention to some parameters:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"resizable\"), \" is set to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"true\"), \" or an \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"object\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Any column in \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"columns\"), \" that requires a telescopic function should specify the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"width\"), \"field (if not passed, the column does not have a telescopic function and its column width will be automatically adjusted by the browser)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"column.resize\"), \" can take effect after resizable is enabled. After setting to false, the column no longer supports scaling. v2.42 support\")), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"When used with fixed columns, you need to specify a column without setting the width\")), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"It is not recommended to use it with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"scroll.x\"), \" at the same time. scroll.x specifies that the table has a width range, and stretching columns will expand the column width, which may cause the table to be misaligned\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nfunction ResizableDemo() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 300,\\n            resize: false,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            filters: [\\n                {\\n                    text: 'Semi Design design draft',\\n                    value: 'Semi Design design draft',\\n                },\\n                {\\n                    text: 'Semi D2C design draft',\\n                    value: 'Semi D2C design draft',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            width: 200,\\n            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n            render: text => `${text} KB`,\\n        },\\n        {\\n            title: 'Owner',\\n            width: 200,\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n        {\\n            title: 'Operate',\\n            dataIndex: 'operate',\\n            fixed: 'right',\\n            width: 100,\\n            resize: false,\\n            render: () => {\\n                return <IconMore />;\\n            },\\n        },\\n    ];\\n\\n    const data = useMemo(() => {\\n        const _data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            _data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return _data;\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={data} resizable bordered />;\\n}\\n\\nrender(ResizableDemo);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Advanced Telescopic Columns\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"resizable\"), \" can also be an \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"object\"), \", including three event methods:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"onResize\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"onResizeStart\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"onResizeStop\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"These three callback will be triggered on \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"changing column width\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"start changing column width\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"stop changing column width\"), \" respectively. Developers can choose to modify the column at this time, such as adding a vertical line effect when dragging, as shown below.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\nconst pagination = { pageSize: 5 };\\n\\nfunction ResizableDemo() {\\n    const columns = [\\n        {\\n            title: 'Title',\\n            dataIndex: 'name',\\n            width: 400,\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n            filters: [\\n                {\\n                    text: 'Semi Design design draft',\\n                    value: 'Semi Design design draft',\\n                },\\n                {\\n                    text: 'Semi D2C design draft',\\n                    value: 'Semi D2C design draft',\\n                },\\n            ],\\n            onFilter: (value, record) => record.name.includes(value),\\n        },\\n        {\\n            title: 'Size',\\n            dataIndex: 'size',\\n            width: 200,\\n            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n            render: text => `${text} KB`,\\n        },\\n        {\\n            title: 'Owner',\\n            width: 200,\\n            dataIndex: 'owner',\\n            render: (text, record, index) => {\\n                return (\\n                    <div>\\n                        <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                            {typeof text === 'string' && text.slice(0, 1)}\\n                        </Avatar>\\n                        {text}\\n                    </div>\\n                );\\n            },\\n        },\\n        {\\n            title: 'Update',\\n            dataIndex: 'updateTime',\\n            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n            render: value => {\\n                return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            },\\n        },\\n    ];\\n\\n    const data = useMemo(() => {\\n        const _data = [];\\n        for (let i = 0; i < 46; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            _data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return _data;\\n    }, []);\\n\\n    const resizable = {\\n        onResizeStart: curColumn => {\\n            const className = addClass(curColumn.className, 'my-resizing');\\n\\n            return { className };\\n        },\\n        onResizeStop: curColumn => {\\n            const className = removeClass(curColumn.className, 'my-resizing');\\n\\n            return { className };\\n        },\\n    };\\n\\n    return (\\n        <div id=\\\"components-table-demo-resizable-column\\\">\\n            <Table columns={columns} dataSource={data} resizable={resizable} pagination={pagination} bordered />\\n        </div>\\n    );\\n}\\n\\nrender(ResizableDemo);\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The CSS style definition used in this example:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-css\"\n  }, \"#components-table-demo-resizable-column .my-resizing {\\n    border-right: 2px solid red;\\n}\\n\\n#components-table-demo-resizable-column .react-resizable-handle:hover {\\n    background-color: red;\\n}\\n\\n#components-table-demo-resizable-column .my-resizing:hover .react-resizable-handle {\\n    background-color: inherit;\\n}\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Drag Sorting\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Use \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/clauderic/dnd-kit/tree/master\"\n  }, \"dnd-kit\"), \" with the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/DouyinFE/semi-design/blob/340c93e4e1612a879be869c43ad7a9a85ab5a302/packages/semi-ui/table/interface.ts#L200\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"components\")), \" API to easily implement drag-and-drop sorting. Supported in version 2.58\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true dir=\\\"column\\\" noInline=true hideInDSM\",\n    \"live\": \"true\",\n    \"dir\": \"\\\"column\\\"\",\n    \"noInline\": \"true\",\n    \"hideInDSM\": true\n  }, \"import React, { useEffect, useMemo, useState } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\nimport { DndContext, PointerSensor, useSensors, useSensor } from '@dnd-kit/core'; // based on @dnd-kit/core v6\\nimport { SortableContext, arrayMove, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\\nimport { CSS as cssDndKit } from '@dnd-kit/utilities';\\nimport classNames from 'classnames';\\n\\nfunction App() {\\n    const pageSize = 10;\\n    const [dataSource, setData] = useState([]);\\n    const [pageData, setPageData] = useState([]);\\n    const columns = useMemo(\\n        () => [\\n            {\\n                title: 'Title',\\n                dataIndex: 'name',\\n                width: 400,\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar\\n                                size=\\\"small\\\"\\n                                shape=\\\"square\\\"\\n                                src=\\\"https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png\\\"\\n                                style={{ marginRight: 12 }}\\n                            ></Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n                filters: [\\n                    {\\n                        text: 'Semi Design Draft',\\n                        value: 'Semi Design Draft',\\n                    },\\n                    {\\n                        text: 'Semi D2C Draft',\\n                        value: 'Semi D2C Draft',\\n                    },\\n                ],\\n                onFilter: (value, record) => record.name.includes(value),\\n            },\\n            {\\n                title: 'Size',\\n                dataIndex: 'size',\\n                sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n                render: text => `${text} KB`,\\n            },\\n            {\\n                title: 'Owner',\\n                dataIndex: 'owner',\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                                {typeof text === 'string' && text.slice(0, 1)}\\n                            </Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n            },\\n            {\\n                title: 'Update',\\n                dataIndex: 'updateTime',\\n                sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n                render: value => {\\n                    return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n                },\\n            },\\n        ],\\n        []\\n    );\\n\\n    useEffect(() => {\\n        const getData = () => {\\n            const data = [];\\n            for (let i = 0; i < 46; i++) {\\n                const isSemiDesign = i % 2 === 0;\\n                const randomNumber = (i * 1000) % 199;\\n                data.push({\\n                    key: '' + i,\\n                    name: isSemiDesign ? `Semi Design Draft${i}.fig` : `Semi D2C Draft${i}.fig`,\\n                    owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                    size: randomNumber,\\n                    updateTime: new Date().valueOf() + randomNumber,\\n                    avatarBg: isSemiDesign ? 'grey' : 'red',\\n                });\\n            }\\n            return data;\\n        };\\n        const data = getData();\\n        setData(data);\\n    }, []);\\n    const [pageNum, setPageNum] = useState(1);\\n\\n    useEffect(() => {\\n        const currentPageData = dataSource.slice((pageNum - 1) * pageSize, pageNum * pageSize);\\n        setPageData(currentPageData);\\n    }, [dataSource, pageNum]);\\n\\n    const sensors = useSensors(\\n        useSensor(PointerSensor, {\\n            activationConstraint: { distance: 1 },\\n        })\\n    );\\n\\n    const handleDragEnd = event => {\\n        const { active, over } = event;\\n        if (active && over && active.id !== over.id) {\\n            setPageData(prev => {\\n                const activeIndex = prev.findIndex(data => data.key === active.id);\\n                const overIndex = prev.findIndex(data => data.key === over.id);\\n                return arrayMove(prev, activeIndex, overIndex);\\n            });\\n        }\\n    };\\n\\n    const handleChange = ({ pagination }) => {\\n        const { currentPage } = pagination;\\n        setPageNum(currentPage);\\n    };\\n\\n    const SortableRow = (props) => {\\n        const { attributes, listeners, setNodeRef, transform, transition, isDragging, isOver } = useSortable({\\n            id: props['data-row-key'],\\n        });\\n        const style = {\\n            ...props.style,\\n            transform: cssDndKit.Transform.toString(transform),\\n            transition,\\n            cursor: 'grabbing',\\n            ...(isDragging ? { zIndex: 999, position: 'relative' } : {}),\\n        };\\n        const rowCls = classNames(props.className,\\n            {\\n                ['isDragging']: isDragging,\\n                ['isOver']: isOver,\\n            }\\n        );\\n        const onPointerDown = (event) => {\\n            event.persist();\\n            console.log('props', event);\\n            listeners.onPointerDown(event);\\n        };\\n\\n        return <tr {...props} className={rowCls} ref={setNodeRef} style={style} {...attributes} {...listeners} onPointerDown={onPointerDown}></tr>;\\n    };\\n\\n    return (\\n        <DndContext\\n            // https://docs.dndkit.com/api-documentation/context-provider#autoscroll\\n            autoScroll={true}\\n            sensors={sensors}\\n            modifiers={[restrictToVerticalAxis]}\\n            onDragEnd={handleDragEnd}\\n        >\\n            <SortableContext items={pageData.map(data => data.key)} strategy={verticalListSortingStrategy}>\\n                <Table\\n                    components={{\\n                        body: {\\n                            row: SortableRow,\\n                        },\\n                    }}\\n                    rowKey=\\\"key\\\"\\n                    columns={columns}\\n                    dataSource={pageData}\\n                    pagination={{ currentPage: pageNum, pageSize: pageSize, total: dataSource.length }}\\n                    onChange={handleChange}\\n                />\\n            </SortableContext>\\n        </DndContext>\\n    );\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Table Grouping\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"For some tables whose data needs to be displayed in groups, you can pass in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"groupBy\"), \" to define the grouping rules, and use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"renderGroupSection\"), \" to define the rendering of the grouping table header.\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Note: Be sure to provide a \\\"key\\\" for each row of data that is different from other row values, or use the rowKey parameter to specify a property name as the primary key.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nconst getData = () => {\\n    const data = [];\\n    for (let i = 0; i < 46; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = ((i * 1000) % 19) + 100;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nconst data = getData();\\n\\nfunction Demo() {\\n    const rowKey = record =>\\n        `${record.owner && record.owner.toLowerCase()}-${record.name && record.name.toLowerCase()}`;\\n\\n    return (\\n        <div style={{ padding: '20px 0px' }}>\\n            <Table\\n                dataSource={data}\\n                rowKey={rowKey}\\n                groupBy={'size'}\\n                columns={columns}\\n                renderGroupSection={groupKey => <strong>Group by file size {groupKey} KB</strong>}\\n                onGroupedRow={(group, index) => {\\n                    return {\\n                        // onMouseEnter: () => {\\n                        //     console.log(`Grouped row mouse enter: `, group, index);\\n                        // },\\n                        // onMouseLeave: () => {\\n                        //     console.log(`Grouped row mouse leave: `, group, index);\\n                        // },\\n                        onClick: e => {\\n                            console.log(`Grouped row clicked: `, group, index);\\n                        },\\n                    };\\n                }}\\n                clickGroupedRowToExpand // if you want to click the entire row to expand\\n                scroll={{ y: 480 }}\\n            />\\n        </div>\\n    );\\n}\\n\\nrender(Demo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Virtualized Table\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Virtualization can be used for scenes that need to render large-scale data. You can enable this feature by configuring the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"virtualized\"), \" parameter. have to be aware of is:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Must pass \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"scroll.y\"), \" (number) and\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"style.width\"), \" (number);\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Need to pass the height of each line \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"virtualized.itemSize\"), \" (when not transmitting, the normal line height defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"56\"), \", and the group head line height defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"56\"), \"), can be of the following types:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"number\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"(index, { sectionRow?: boolean, expandedRow?: boolean }) => number\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Table grouping virtualization is supported.\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The following is an example of rendering 1000 pieces of data.\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useRef } from 'react';\\nimport { Table, Avatar, Button } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 200,\\n        fixed: true,\\n        render: (text, record, index) => {\\n            return <div>{text}</div>;\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        width: 150,\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        fixed: 'right',\\n        width: 150,\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nconst getData = () => {\\n    const data = [];\\n    for (let i = 0; i < 1000; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = (i * 1000) % 199;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nconst data = getData();\\n\\nfunction VirtualizedFixedDemo() {\\n    let virtualizedListRef = useRef();\\n    const scroll = { y: 400, x: 900 };\\n    const style = { width: 750, margin: '0 auto' };\\n\\n    return (\\n        <>\\n            <Button onClick={() => virtualizedListRef.current.scrollToItem(100)}>Scroll to 100</Button>\\n            <Table\\n                pagination={false}\\n                columns={columns}\\n                dataSource={data}\\n                scroll={scroll}\\n                style={style}\\n                virtualized\\n                getVirtualizedListRef={ref => (virtualizedListRef = ref)}\\n            />\\n        </>\\n    );\\n}\\n\\nrender(VirtualizedFixedDemo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Infinite Scroll\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Based on the virtualization feature, we can achieve infinite scroll loading data by passing in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"virtualized.onScroll\"), \".\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\" hideInDSM\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\",\n    \"hideInDSM\": true\n  }, \"import React, { useRef } from 'react';\\nimport { Table, Avatar, Button } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\n\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 200,\\n        fixed: true,\\n        render: (text, record, index) => {\\n            return <div>{text}</div>;\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        width: 150,\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        fixed: 'right',\\n        width: 150,\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nfunction InfiniteScrollDemo() {\\n    const [data, setData] = useState([]);\\n\\n    const scroll = { y: 600, x: 1000 };\\n    const style = { width: 750, margin: '0 auto' };\\n\\n    const loadMore = () => {\\n        const pageSize = 20; // load 20 records every time\\n        const newData = [...data];\\n        const currentLength = data.length;\\n        for (let i = currentLength; i < currentLength + pageSize; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            newData.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        setData(newData);\\n    };\\n\\n    const itemSize = 56;\\n    const virtualized = {\\n        itemSize,\\n        onScroll: ({ scrollDirection, scrollOffset, scrollUpdateWasRequested }) => {\\n            if (\\n                scrollDirection === 'forward' &&\\n                scrollOffset >= (data.length - Math.ceil(scroll.y / itemSize) * 1.5) * itemSize &&\\n                !scrollUpdateWasRequested\\n            ) {\\n                loadMore();\\n            }\\n        },\\n    };\\n\\n    useEffect(() => {\\n        loadMore();\\n    }, []);\\n\\n    return (\\n        <Table\\n            pagination={false}\\n            columns={columns}\\n            dataSource={data}\\n            scroll={scroll}\\n            style={style}\\n            virtualized={virtualized}\\n        />\\n    );\\n}\\n\\nrender(InfiniteScrollDemo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Controlled Dynamic Tables\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\" hideInDSM\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\",\n    \"hideInDSM\": true\n  }, \"import React from 'react';\\nimport { Table, Switch, ButtonGroup, Button, Avatar, Space } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nclass App extends React.Component {\\n    constructor(props) {\\n        super(props);\\n        const dataTotalSize = 46;\\n        const columns = [\\n            {\\n                title: 'Title',\\n                dataIndex: 'name',\\n                width: 400,\\n                render: (text, record, index) => {\\n                    return (\\n                        <span>\\n                            <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                            {text}\\n                        </span>\\n                    );\\n                },\\n                filters: [\\n                    {\\n                        text: 'Semi Design design draft',\\n                        value: 'Semi Design design draft',\\n                    },\\n                    {\\n                        text: 'Semi D2C design draft',\\n                        value: 'Semi D2C design draft',\\n                    },\\n                ],\\n                onFilter: (value, record) => record.name.includes(value),\\n            },\\n            {\\n                title: 'Size',\\n                dataIndex: 'size',\\n                sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n                render: text => `${text} KB`,\\n            },\\n            {\\n                title: 'Owner',\\n                dataIndex: 'owner',\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                                {typeof text === 'string' && text.slice(0, 1)}\\n                            </Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n            },\\n            {\\n                title: 'Update',\\n                dataIndex: 'updateTime',\\n                sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n                render: value => {\\n                    return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n                },\\n            },\\n        ];\\n\\n        this.getData = () => {\\n            const data = [];\\n            for (let i = 0; i < dataTotalSize; i++) {\\n                const isSemiDesign = i % 2 === 0;\\n                const randomNumber = (i * 1000) % 199;\\n                data.push({\\n                    key: '' + i,\\n                    name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                    owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                    size: randomNumber,\\n                    updateTime: new Date().valueOf() + randomNumber * DAY,\\n                    avatarBg: isSemiDesign ? 'grey' : 'red',\\n                });\\n            }\\n            return data;\\n        };\\n\\n        const data = this.getData();\\n        this.data = data;\\n\\n        this.mergeColumns = (column, columns, keys = ['dataIndex']) => {\\n            columns = [...columns];\\n            columns.forEach((curColumn, index) => {\\n                let isTarget = !!(keys && keys.length);\\n\\n                for (let key of keys) {\\n                    if (column[key] !== curColumn[key]) {\\n                        isTarget = false;\\n                        break;\\n                    }\\n                }\\n\\n                if (isTarget) {\\n                    columns[index] = { ...curColumn, ...column };\\n                }\\n            });\\n\\n            return columns;\\n        };\\n\\n        this.filterData = (filters, dataSource) => {\\n            dataSource = [...dataSource];\\n            filters.forEach(filter => {\\n                let filteredValue = filter.filteredValue;\\n                let dataIndex = filter.dataIndex;\\n                if (Array.isArray(filteredValue) && filteredValue.length && dataIndex) {\\n                    dataSource = dataSource.filter(\\n                        data => filteredValue.filter(value => String(data[dataIndex]).indexOf(value) > -1).length\\n                    );\\n                }\\n            });\\n\\n            return dataSource;\\n        };\\n\\n        this.getSelfSorterColumn = columns => {\\n            columns = columns || this.state.columns;\\n            return columns.filter(column => !!column.sorter)[0];\\n        };\\n\\n        this.getSelfFilterColumns = columns => {\\n            columns = columns || this.state.columns;\\n            return columns.filter(column => Array.isArray(column.filteredValue) && column.filteredValue.length);\\n        };\\n\\n        this.sortData = (sortObj, dataSource) => {\\n            let { sorter, sortOrder, dataIndex } = sortObj;\\n\\n            if (sorter && sortOrder && typeof sorter !== 'function') {\\n                sorter = (a, b) => (a[dataIndex] > b[dataIndex] ? 1 : -1);\\n            }\\n\\n            if (typeof sorter === 'function') {\\n                dataSource = [...dataSource].sort(sorter);\\n\\n                if (sortOrder === 'descend') {\\n                    dataSource = dataSource.reverse();\\n                }\\n            }\\n\\n            return dataSource;\\n        };\\n\\n        this.fetchData = (currentPage = 1, sorter = {}, filters = []) => {\\n            // console.log(`FetchData currentPage: `, currentPage);\\n            let pagination = { ...this.state.pagination, currentPage };\\n            return new Promise((res, rej) => {\\n                setTimeout(() => {\\n                    let data = [...this.data];\\n                    data = this.sortData(sorter, data);\\n                    data = this.filterData(filters, data);\\n                    let dataSource = data.slice(\\n                        (currentPage - 1) * pagination.pageSize,\\n                        currentPage * pagination.pageSize\\n                    );\\n                    pagination.total = data.length;\\n                    res({\\n                        dataSource,\\n                        pagination,\\n                        sorter,\\n                        filters,\\n                    });\\n                }, 1500);\\n            });\\n        };\\n\\n        this.setPage = (currentPage, sorter, filters) => {\\n            if (this.state.loading) {\\n                return;\\n            }\\n            if (typeof currentPage !== 'number') {\\n                currentPage = (this.state.pagination && this.state.pagination.currentPage) || 1;\\n            }\\n\\n            sorter = sorter || this.getSelfSorterColumn();\\n            filters = filters || this.getSelfFilterColumns();\\n\\n            this.setState({ loading: true });\\n            this.fetchData(currentPage, sorter, filters)\\n                .then(({ dataSource, pagination, sorter, filters }) => {\\n                    let columns = [...this.state.columns];\\n                    columns = this.mergeColumns(sorter, columns);\\n                    for (let filterObj of filters) {\\n                        columns = this.mergeColumns(filterObj, columns);\\n                    }\\n                    this.setState({\\n                        loading: false,\\n                        pagination,\\n                        dataSource,\\n                        columns,\\n                    });\\n                })\\n                .catch(err => {\\n                    console.error(err);\\n                    this.setState({ loading: false });\\n                });\\n        };\\n\\n        this.toggleFixHeader = checked => {\\n            let scroll = { ...this.state.scroll };\\n\\n            if (checked) {\\n                scroll.y = 300;\\n            } else {\\n                scroll.y = null;\\n            }\\n\\n            this.setState({ scroll });\\n        };\\n\\n        this.toggleFixColumns = checked => {\\n            let columns = [...this.state.columns];\\n            let scroll = { ...this.state.scroll };\\n            let expandCellFixed = this.state.expandCellFixed;\\n            let rowSelection = this.state.rowSelection;\\n\\n            if (checked) {\\n                columns[0].fixed = true;\\n\\n                if (rowSelection) {\\n                    rowSelection = { ...rowSelection, fixed: true };\\n                }\\n                if (columns.length > 1) {\\n                    columns[columns.length - 1].fixed = 'right';\\n                }\\n                scroll.x = '150%';\\n                expandCellFixed = true;\\n            } else {\\n                columns.forEach(column => {\\n                    column.fixed = false;\\n                });\\n                scroll.x = null;\\n                expandCellFixed = false;\\n\\n                if (rowSelection) {\\n                    rowSelection = { ...rowSelection, fixed: false };\\n                }\\n            }\\n\\n            this.setState({\\n                rowSelection,\\n                expandCellFixed,\\n                columns,\\n                scroll,\\n            });\\n        };\\n\\n        this.toggleRowSelection = checked => {\\n            let rowSelection = this.state.rowSelection;\\n            // const anyColumnFixed = this.state.columns.some(column => !!column.fixed);\\n\\n            if (checked) {\\n                rowSelection = {\\n                    width: 48,\\n                    fixed: true,\\n                    onChange: (selectedRowKeys, selectedRows) =>\\n                        console.log(\\n                            'Selection changed, selectedRowKeys: ',\\n                            selectedRowKeys,\\n                            'selectedRows: ',\\n                            selectedRows\\n                        ),\\n                };\\n            } else {\\n                rowSelection = null;\\n            }\\n\\n            this.setState({ rowSelection });\\n        };\\n\\n        this.toggleLoading = checked => {\\n            let loading = this.state.loading;\\n\\n            if (checked) {\\n                loading = true;\\n            } else {\\n                loading = false;\\n            }\\n\\n            this.setState({ loading });\\n        };\\n\\n        this.toggleExpandedRowRender = checked => {\\n            let expandedRowRender = this.state.expandedRowRender;\\n\\n            if (checked) {\\n                expandedRowRender = record => {\\n                    return {\\n                        children: <p>{record.description}</p>,\\n                        fixed: 'left',\\n                    };\\n                };\\n            } else {\\n                expandedRowRender = null;\\n            }\\n\\n            this.setState({ expandedRowRender });\\n        };\\n\\n        this.toggleShowSorter = checked => {\\n            let columns = [...this.state.columns];\\n\\n            if (checked) {\\n                columns.forEach(column => column.dataIndex === 'age' && (column.sorter = true));\\n            } else {\\n                columns.forEach(column => (column.sorter = null));\\n            }\\n\\n            this.setState({ columns });\\n        };\\n\\n        this.toggleShowFilter = checked => {\\n            let columns = [...this.state.columns];\\n\\n            if (checked) {\\n                columns.forEach(column => {\\n                    if (column.dataIndex === 'name') {\\n                        column.filters = [\\n                            {\\n                                text: 'Name contains 1',\\n                                value: '1',\\n                            },\\n                            {\\n                                text: 'Name contains 2',\\n                                value: '2',\\n                            },\\n                            {\\n                                text: 'Name contains 3',\\n                                value: '3',\\n                            },\\n                        ];\\n                        column.filteredValue = [];\\n                    }\\n                });\\n            } else {\\n                columns.forEach(column => {\\n                    column.filters = null;\\n                    column.filteredValue = null;\\n                });\\n            }\\n\\n            this.setState({ columns });\\n\\n            if (!checked) {\\n                this.setPage(null, null, []);\\n            }\\n        };\\n\\n        this.onChange = (data = {}) => {\\n            console.log('Table changed: ', data);\\n            let { pagination, sorter, filters } = data;\\n            this.setPage(pagination.currentPage, sorter, filters);\\n        };\\n\\n        this.onExpandedRowsChange = rows => {\\n            console.log('Expanded rows changed to: ', rows);\\n\\n            const expandedRowKeys = (Array.isArray(rows) && rows.map(row => row.key)) || [];\\n\\n            this.setState({ expandedRowKeys });\\n        };\\n\\n        this.toggleExpandedRowKeys = checked => {\\n            let expandedRowKeys = [];\\n\\n            if (checked) {\\n                let dataSource = [...this.state.dataSource];\\n                expandedRowKeys.push(\\n                    ...dataSource.reduce((arr, data) => {\\n                        if (data.key) {\\n                            arr.push(data.key);\\n                        }\\n                        return arr;\\n                    }, [])\\n                );\\n                this.toggleExpandedRowRender(true);\\n            }\\n            this.setState({ expandedRowKeys });\\n        };\\n\\n        this.toggleBordered = checked => {\\n            let bordered = false;\\n\\n            if (checked) {\\n                bordered = true;\\n            }\\n\\n            this.setState({ bordered });\\n        };\\n\\n        this.toggleResizable = checked => {\\n            let resizable = !!checked || false;\\n\\n            this.setState({ resizable, bordered: resizable });\\n        };\\n\\n        this.toggleHideHeader = checked => {\\n            let showHeader = true;\\n\\n            if (checked) {\\n                showHeader = false;\\n            }\\n\\n            this.setState({ showHeader });\\n        };\\n\\n        this.toggleFooter = checked => {\\n            const footer = checked ? dataSource => <p style={{ margin: 0 }}>This is footer.</p> : null;\\n\\n            this.setState({ footer });\\n        };\\n\\n        this.toggleTitle = checked => {\\n            const title = checked ? 'This is title.' : null;\\n\\n            this.setState({ title });\\n        };\\n\\n        this.toggleHidePagination = checked => {\\n            let pagination = checked\\n                ? false\\n                : {\\n                      currentPage: 1,\\n                      pageSize: 8,\\n                      total: data.length,\\n                      onPageChange: page => this.setPage(page),\\n                  };\\n\\n            this.setState({ pagination });\\n        };\\n\\n        this.toggleDataSource = checked => {\\n            if (checked) {\\n                this.setState({ dataSource: [] });\\n            } else {\\n                this.setPage();\\n            }\\n        };\\n\\n        this.switchPagination = position => {\\n            let pagination = this.state.pagination;\\n\\n            const defaultPagination = {\\n                currentPage: 1,\\n                pageSize: 8,\\n                total: data.length,\\n                onPageChange: page => this.setPage(page),\\n            };\\n\\n            const positions = ['bottom', 'top', 'both'];\\n\\n            if (position === true || position === false) {\\n                pagination = position ? { ...defaultPagination, ...pagination } : false;\\n            } else if (positions.includes(position)) {\\n                pagination = { ...defaultPagination, ...pagination, position };\\n            }\\n\\n            this.setState({ pagination });\\n        };\\n\\n        this.state = {\\n            loading: false,\\n            columns,\\n            scroll: {},\\n            rowSelection: null,\\n            expandedRowRender: null,\\n            expandCellFixed: false,\\n            defaultExpandedRowKeys: [],\\n            title: null,\\n            footer: null,\\n            expandedRowKeys: [],\\n            showHeader: true,\\n            resizable: false,\\n            pagination: {\\n                currentPage: 1,\\n                pageSize: 8,\\n                total: data.length,\\n                onPageChange: page => this.setPage(page),\\n            },\\n            dataSource: [],\\n        };\\n\\n        this.TableSwitch = function TableSwitch({\\n            text,\\n            children,\\n            checked,\\n            onChange,\\n            style = { display: 'inline-flex', alignItems: 'center', margin: 5 },\\n        }) {\\n            const switchProps = { onChange };\\n\\n            if (checked != null) {\\n                switchProps.checked = !!checked;\\n            }\\n            return (\\n                <span style={style}>\\n                    <span>{text}</span>\\n                    {children != null ? children : <Switch size=\\\"small\\\" {...switchProps} />}\\n                </span>\\n            );\\n        };\\n    }\\n\\n    componentDidMount() {\\n        this.setPage(1);\\n    }\\n\\n    render() {\\n        let {\\n            columns,\\n            dataSource,\\n            pagination,\\n            loading,\\n            scroll,\\n            rowSelection,\\n            expandedRowRender,\\n            expandCellFixed,\\n            expandedRowKeys,\\n            bordered,\\n            resizable,\\n            title,\\n            footer,\\n            showHeader,\\n            defaultExpandedRowKeys,\\n        } = this.state;\\n\\n        const wrapStyle = { marginBottom: 15, display: 'flex', justifyContent: 'space-around', flexWrap: 'wrap' };\\n\\n        const TableSwitch = this.TableSwitch;\\n\\n        return (\\n            <div>\\n                <Space style={wrapStyle} wrap>\\n                    <TableSwitch text=\\\"Fixed Header:\\\" checked={scroll && scroll.y} onChange={this.toggleFixHeader} />\\n                    <TableSwitch text=\\\"Hidden Header:\\\" onChange={this.toggleHideHeader} />\\n                    <TableSwitch text=\\\"Show Header:\\\" onChange={this.toggleTitle} />\\n                    <TableSwitch text=\\\"Show Footer:\\\" onChange={this.toggleFooter} />\\n                    <TableSwitch text=\\\"Fixed Column:\\\" onChange={this.toggleFixColumns} />\\n                    <TableSwitch text=\\\"Show Selection Column:\\\" onChange={this.toggleRowSelection} />\\n                    <TableSwitch text=\\\"Show Loading:\\\" onChange={this.toggleLoading} checked={loading} />\\n                    <TableSwitch\\n                        text=\\\"Empty Content:\\\"\\n                        onChange={this.toggleDataSource}\\n                        checked={!dataSource || !dataSource.length}\\n                    />\\n                    <TableSwitch text=\\\"Column Sorter:\\\" onChange={this.toggleShowSorter} />\\n                    <TableSwitch text=\\\"Column Filter:\\\" onChange={this.toggleShowFilter} />\\n                    <TableSwitch\\n                        text=\\\"Row Expandable:\\\"\\n                        onChange={this.toggleExpandedRowRender}\\n                        checked={typeof expandedRowRender === 'function'}\\n                    />\\n                    <TableSwitch text=\\\"Expand All Rows:\\\" onChange={this.toggleExpandedRowKeys} />\\n                    <TableSwitch text=\\\"Show Border:\\\" onChange={this.toggleBordered} checked={bordered} />\\n                    <TableSwitch text=\\\"Column Resizable:\\\" onChange={this.toggleResizable} />\\n                    <TableSwitch text=\\\"Show Pagination:\\\">\\n                        <ButtonGroup>\\n                            <Button onClick={() => this.switchPagination('bottom')}>Bottom</Button>\\n                            <Button onClick={() => this.switchPagination('top')}>Top</Button>\\n                            <Button onClick={() => this.switchPagination('both')}>Both</Button>\\n                            <Button onClick={() => this.switchPagination(false)}>None</Button>\\n                        </ButtonGroup>\\n                    </TableSwitch>\\n                </Space>\\n                <Table\\n                    defaultExpandedRowKeys={defaultExpandedRowKeys}\\n                    onExpandedRowsChange={this.onExpandedRowsChange}\\n                    title={title}\\n                    footer={footer}\\n                    showHeader={showHeader}\\n                    bordered={bordered}\\n                    onChange={this.onChange}\\n                    expandCellFixed={expandCellFixed}\\n                    expandedRowRender={expandedRowRender}\\n                    expandedRowKeys={expandedRowKeys}\\n                    rowSelection={rowSelection}\\n                    scroll={scroll}\\n                    columns={columns}\\n                    dataSource={dataSource}\\n                    pagination={pagination}\\n                    loading={loading}\\n                    resizable={resizable}\\n                />\\n            </div>\\n        );\\n    }\\n}\\n\\nrender(App);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Fully custom rendering\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Generally, you can use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.render\"), \", but you can also pass\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.useFullRender = true\"), \" to enable full custom rendering mode. At this time, the components such as checkbox button, expand button, indent will be Pass through to the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.title\"), \" and\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.render\"), \" methods, you can further define the rendering method of the header and cell content.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The input parameters accepted by \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.title\"), \" are:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-tsx\"\n  }, \"{\\n    filter: ReactNode, // Filter button\\n    sorter: ReactNode, // Sort button\\n    selection: ReactNode, // Select button\\n}\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Column.render\"), \" The fourth input parameter is:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-tsx\"\n  }, \"{\\n    expandIcon: ReactNode, // Expand button\\n    selection: ReactNode, // Select button\\n    indentTex: ReactNode, // Indentation\\n}\\n\")), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"The example below renders the checkbox and content into the same cell and header.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useEffect, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: ({ sorter, filter, selection }) => (\\n            <span style={{ display: 'inline-flex', alignItems: 'center', paddingLeft: 20 }}>\\n                {selection}\\n                <span style={{ marginLeft: 8 }}>Name</span>\\n                {sorter}\\n                {filter}\\n            </span>\\n        ),\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n        filters: [\\n            {\\n                text: 'Semi Design design draft',\\n                value: 'Semi Design design draft',\\n            },\\n            {\\n                text: 'Semi D2C design draft',\\n                value: 'Semi D2C design draft',\\n            },\\n        ],\\n        onFilter: (value, record) => record.name.includes(value),\\n        useFullRender: true,\\n        render: (text, record, index, { expandIcon, selection, indentText }) => {\\n            return (\\n                <span style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center' }}>\\n                    {indentText}\\n                    {expandIcon}\\n                    {selection}\\n                    <span style={{ marginLeft: 8 }}>\\n                        <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                        {text}\\n                    </span>\\n                </span>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n        render: text => `${text} KB`,\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            return (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: value => {\\n            return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n        },\\n    },\\n];\\n\\nconst getData = total => {\\n    const data = [];\\n    for (let i = 0; i < total; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = (i * 1000) % 199;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nfunction Demo() {\\n    const [dataSource, setDataSource] = useState([]);\\n    const total = 46;\\n    const pagination = useMemo(\\n        () => ({\\n            pageSize: 12,\\n        }),\\n        []\\n    );\\n\\n    const rowSelection = useMemo(() => {\\n        return {\\n            hidden: true,\\n            fixed: 'left',\\n        };\\n    }, []);\\n\\n    useEffect(() => {\\n        const data = getData(total);\\n        setDataSource(data);\\n    }, [total]);\\n\\n    return (\\n        <Table\\n            pagination={pagination}\\n            rowSelection={rowSelection}\\n            columns={columns}\\n            dataSource={dataSource}\\n            onChange={(...args) => console.log(...args)}\\n            expandedRowRender={record => <article>{record.name}</article>}\\n        />\\n    );\\n}\\n\\nrender(Demo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"Header Merge\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Users can use the header merge function to group the header. The header merge can be combined with fixed column, virtualization, data grouping, column scaling and other functions. It also supports JSX or configurable writing.\"), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Combined Header Configuration Writing\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\n\\nconst columns = [\\n    {\\n        title: 'Basic Info',\\n        fixed: 'left',\\n        children: [\\n            {\\n                title: 'Title',\\n                dataIndex: 'name',\\n                width: 300,\\n                fixed: true,\\n                render: (text, record, index) => {\\n                    return (\\n                        <span>\\n                            <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                            {text}\\n                        </span>\\n                    );\\n                },\\n                filters: [\\n                    {\\n                        text: 'Semi Design design draft',\\n                        value: 'Semi Design design draft',\\n                    },\\n                    {\\n                        text: 'Semi D2C design draft',\\n                        value: 'Semi D2C design draft',\\n                    },\\n                ],\\n                onFilter: (value, record) => record.name.includes(value),\\n            },\\n            {\\n                title: 'Size',\\n                dataIndex: 'size',\\n                width: 100,\\n                fixed: true,\\n                sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),\\n                render: text => `${text} KB`,\\n            },\\n        ],\\n    },\\n    {\\n        title: 'Others Info',\\n        children: [\\n            {\\n                title: 'Owner',\\n                dataIndex: 'owner',\\n                render: (text, record, index) => {\\n                    return (\\n                        <div>\\n                            <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                                {typeof text === 'string' && text.slice(0, 1)}\\n                            </Avatar>\\n                            {text}\\n                        </div>\\n                    );\\n                },\\n            },\\n            {\\n                title: 'Update',\\n                dataIndex: 'updateTime',\\n                sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n                render: value => {\\n                    return dateFns.format(new Date(value), 'yyyy-MM-dd');\\n                },\\n            },\\n        ],\\n    },\\n    {\\n        title: 'More',\\n        fixed: 'right',\\n        width: 100,\\n        align: 'center',\\n        dataIndex: 'operate',\\n        render: () => {\\n            return <IconMore />;\\n        },\\n    },\\n];\\n\\nconst getData = total => {\\n    const data = [];\\n    for (let i = 0; i < total; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = (i * 1000) % 199;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nfunction Demo() {\\n    const data = useMemo(() => {\\n        const _data = getData(46);\\n        return _data;\\n    }, []);\\n\\n    return (\\n        <Table\\n            rowSelection={{ fixed: true }}\\n            expandedRowRender={record => <article>{record.name}</article>}\\n            dataSource={data}\\n            scroll={{ y: 400 }}\\n            onChange={(...args) => console.log(...args)}\\n            columns={columns}\\n        />\\n    );\\n}\\n\\nrender(Demo);\\n\")), mdx(\"h4\", {\n    parentName: \"section\"\n  }, \"Merge Header JSX Writing\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport { IconMore } from '@douyinfe/semi-icons';\\nimport * as dateFns from 'date-fns';\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\nconst Column = Table.Column;\\n\\nconst getData = total => {\\n    const data = [];\\n    for (let i = 0; i < total; i++) {\\n        const isSemiDesign = i % 2 === 0;\\n        const randomNumber = (i * 1000) % 199;\\n        data.push({\\n            key: '' + i,\\n            name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n            owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n            size: randomNumber,\\n            updateTime: new Date().valueOf() + randomNumber * DAY,\\n            avatarBg: isSemiDesign ? 'grey' : 'red',\\n        });\\n    }\\n    return data;\\n};\\n\\nfunction Demo() {\\n    const data = useMemo(() => {\\n        const _data = getData(46);\\n        return _data;\\n    }, []);\\n\\n    const nameFilters = [\\n        {\\n            text: 'Semi Design design draft',\\n            value: 'Semi Design design draft',\\n        },\\n        {\\n            text: 'Semi D2C design draft',\\n            value: 'Semi D2C design draft',\\n        },\\n    ];\\n\\n    const renderName = (text, record, index) => {\\n        return (\\n            <span>\\n                <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                {text}\\n            </span>\\n        );\\n    };\\n\\n    const renderOwner = (text, record, index) => {\\n        return (\\n            <div>\\n                <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                    {typeof text === 'string' && text.slice(0, 1)}\\n                </Avatar>\\n                {text}\\n            </div>\\n        );\\n    };\\n\\n    return (\\n        <Table\\n            rowSelection={{ fixed: true }}\\n            expandedRowRender={record => <article>{record.name}</article>}\\n            dataSource={data}\\n            scroll={{ y: 400 }}\\n            onChange={(...args) => console.log(...args)}\\n        >\\n            <Column title=\\\"Basic Info\\\" fixed=\\\"left\\\">\\n                <Column\\n                    title=\\\"Title\\\"\\n                    dataIndex=\\\"name\\\"\\n                    width={300}\\n                    fixed\\n                    render={renderName}\\n                    filters={nameFilters}\\n                    onFilter={(value, record) => record.name.includes(value)}\\n                />\\n                <Column\\n                    title=\\\"Size\\\"\\n                    dataIndex=\\\"size\\\"\\n                    width={100}\\n                    fixed\\n                    render={text => `${text} KB`}\\n                    sorter={(a, b) => (a.size - b.size > 0 ? 1 : -1)}\\n                ></Column>\\n            </Column>\\n            <Column title=\\\"Others Info\\\">\\n                <Column title=\\\"Owner\\\" dataIndex=\\\"owner\\\" render={renderOwner} />\\n                <Column\\n                    title=\\\"Update\\\"\\n                    dataIndex=\\\"updateTime\\\"\\n                    sorter={(a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1)}\\n                    render={value => dateFns.format(new Date(value), 'yyyy-MM-dd')}\\n                ></Column>\\n            </Column>\\n            <Column\\n                title=\\\"More\\\"\\n                dataIndex=\\\"operate\\\"\\n                fixed=\\\"right\\\"\\n                width={100}\\n                align=\\\"center\\\"\\n                render={() => <IconMore />}\\n            />\\n        </Table>\\n    );\\n}\\n\\nrender(Demo);\\n\")), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"colSpan and rowSpan\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"In addition to merging the headers by writing children, you can merge the headers by setting column.colSpan.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Table supports row/column merging. When the cell attribute colSpan or rowSpan in render is set to 0, the set table will not be rendered.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-tsx\"\n  }, \"type Render = (\\n    text: string,\\n    record: Object,\\n    index: number,\\n    options?: RenderOptions\\n) => {\\n    children: React.ReactNode;\\n    props: {\\n        colSpan?: number;\\n        rowSpan?: number;\\n    };\\n    [x: string]: any;\\n};\\n\\ninterface RenderOptions {\\n    expandIcon?: React.ReactNode;\\n}\\n\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"live=true noInline=true dir=\\\"column\\\"\",\n    \"live\": \"true\",\n    \"noInline\": \"true\",\n    \"dir\": \"\\\"column\\\"\"\n  }, \"import React, { useState, useMemo } from 'react';\\nimport { Table, Avatar } from '@douyinfe/semi-ui';\\nimport * as dateFns from 'date-fns';\\n\\nconst figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';\\nconst columns = [\\n    {\\n        title: 'Title',\\n        dataIndex: 'name',\\n        width: 400,\\n        render: (text, record, index) => {\\n            const renderObject = {};\\n            const children = (\\n                <div>\\n                    <Avatar size=\\\"small\\\" shape=\\\"square\\\" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>\\n                    {text}\\n                </div>\\n            );\\n            renderObject.children = children;\\n            if (index === 0) {\\n                renderObject.props = {\\n                    colSpan: 4,\\n                };\\n            }\\n            if (index === 1) {\\n                renderObject.props = {\\n                    rowSpan: 2,\\n                };\\n            }\\n            if (index === 2) {\\n                renderObject.props = {\\n                    rowSpan: 0,\\n                };\\n            }\\n            return renderObject;\\n        },\\n    },\\n    {\\n        title: 'Size',\\n        dataIndex: 'size',\\n        render: (text, record, index) => {\\n            if (index === 0) {\\n                return {\\n                    children: `${text} KB`,\\n                    props: {\\n                        colSpan: 0,\\n                    },\\n                };\\n            }\\n            if (index === 1) {\\n                return {\\n                    children: `${text} KB`,\\n                    props: {\\n                        rowSpan: 2,\\n                    },\\n                };\\n            }\\n            if (index === 2) {\\n                return {\\n                    children: `${text} KB`,\\n                    props: {\\n                        rowSpan: 0,\\n                    },\\n                };\\n            }\\n            return `${text} KB`;\\n        },\\n    },\\n    {\\n        title: 'Owner',\\n        dataIndex: 'owner',\\n        render: (text, record, index) => {\\n            const children = (\\n                <div>\\n                    <Avatar size=\\\"small\\\" color={record.avatarBg} style={{ marginRight: 4 }}>\\n                        {typeof text === 'string' && text.slice(0, 1)}\\n                    </Avatar>\\n                    {text}\\n                </div>\\n            );\\n            if (index === 0) {\\n                return {\\n                    children,\\n                    props: {\\n                        colSpan: 0,\\n                    },\\n                };\\n            }\\n            return children;\\n        },\\n    },\\n    {\\n        title: 'Update',\\n        dataIndex: 'updateTime',\\n        sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),\\n        render: (value, record, index) => {\\n            const children = dateFns.format(new Date(value), 'yyyy-MM-dd');\\n            if (index === 0) {\\n                return {\\n                    children,\\n                    props: {\\n                        colSpan: 0,\\n                    },\\n                };\\n            }\\n            if (index === 1) {\\n                return {\\n                    children,\\n                    props: {\\n                        rowSpan: 2,\\n                    },\\n                };\\n            }\\n            if (index === 2) {\\n                return {\\n                    children,\\n                    props: {\\n                        rowSpan: 0,\\n                    },\\n                };\\n            }\\n            return children;\\n        },\\n    },\\n];\\n\\nconst DAY = 24 * 60 * 60 * 1000;\\n\\nfunction App() {\\n    const [dataSource, setData] = useState([]);\\n\\n    const getData = total => {\\n        const data = [];\\n        for (let i = 0; i < total; i++) {\\n            const isSemiDesign = i % 2 === 0;\\n            const randomNumber = (i * 1000) % 199;\\n            data.push({\\n                key: '' + i,\\n                name: isSemiDesign ? `Semi Design design draft${i}.fig` : `Semi D2C design draft${i}.fig`,\\n                owner: isSemiDesign ? 'Jiang Pengzhi' : 'Hao Xuan',\\n                size: randomNumber,\\n                updateTime: new Date().valueOf() + randomNumber * DAY,\\n                avatarBg: isSemiDesign ? 'grey' : 'red',\\n            });\\n        }\\n        return data;\\n    };\\n\\n    useEffect(() => {\\n        const data = getData(5);\\n        setData(data);\\n    }, []);\\n\\n    return <Table columns={columns} dataSource={dataSource} pagination={false} />;\\n}\\n\\nrender(App);\\n\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"API Reference\")), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Table\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Properties\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"bordered\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to display outer and column borders\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"className\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Outermost style name\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"clickGroupedRowToExpand\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Group content expands or collapses when the group header row is clicked\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"columns\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"For a configuration description of the table column, see \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Column []\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"components\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Override the elements of Table, such as table, body, row, td, th, etc.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    target: \"_blank\",\n    href: \"https://github.com/DouyinFE/semi-design/blob/340c93e4e1612a879be869c43ad7a9a85ab5a302/packages/semi-ui/table/interface.ts#L200\"\n  }, \"TableComponents\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"dataSource\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Data. \", mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"An independent key of each data record is need, or use rowKey to specify an attribute name as the primary key\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"RecordType[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultExpandAllRows\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All rows are expanded by default\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultExpandAllGroupRows\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All grouped rows are expanded by default\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultExpandedRowKeys\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default expansion of row key array\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Array <\", \"*\", \">\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"empty\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Content displayed when there is no data\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'No data yet. '\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandCellFixed\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether the column of the expansion icon is fixed or not, the same value as the fixed value in Column\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandIcon\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom expansion icon, hidden when it is \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"false\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean \", mdx(\"br\", null), \"|\", \"ReactNode \", mdx(\"br\", null), \"|\", \" (expanded: boolean) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandedRowKeys\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Expanded rows, the row expansion function will be controlled when this parameter is introduced.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(string \", \"|\", \" number)[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandedRowRender\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Extra unfolding lines. \", mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"An independent key of each data record is need\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: object, index: number, expanded: boolean) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandAllRows\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All rows are expanded\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandAllGroupRows\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"All grouped rows are expanded\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"expandRowByClick\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Expand row when click row\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"footer\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"End of form\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\", mdx(\"br\", null), \"|\", \"ReactNode\", mdx(\"br\", null), \"|\", \"(pageData: object) => string\", \"|\", \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"groupBy\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Grouping basis, generally a method of a key name or a return value of a string or number in the dataSource element\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\", \"|\", \"number\", mdx(\"br\", null), \"|\", \"(record: any) => string\", \"|\", \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"hideExpandedColumn\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to hide the expansion button column and turn off the rendering of the expansion button when it is turned on\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"indentSize\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"indent size of TableCell\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"20\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"keepDOM\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to not destroy the collapsed DOM when folding a row\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"loading\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Table is loading or not\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"pagination\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Paging component configuration\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \"TablePaginationProps\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"prefixCls\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Style name prefix\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"renderGroupSection\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Header rendering method\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(groupKey?: string \", \"|\", \" number, group?: string[] \", \"|\", \" number[]) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"renderPagination\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Customize the rendering method of pagination.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(paginationProps?: TablePaginationProps) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"resizable\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to turn on the telescopic column function, the column that needs to be telescopic must provide the value of width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Resizable\"\n  }, \"Resizable\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"rowExpandable\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether the row can be expanded, turning off the rendering of the expandable button when the value is false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType): => boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"() => true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"rowKey\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The value of the table row key, which can be a string or a function.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string \", \"|\", \" (record: RecordType) => string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'key'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"rowSelection\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"See \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#rowSelection\"\n  }, \"rowSelection\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"null\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"scroll\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether the table is scrollable, configure the width or height of the scroll area, see \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#scroll\"\n  }, \"scroll\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"showHeader\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Does it show the header?\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"size\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Table size, will effect the \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"padding\"), \" of the rows\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\\"default\\\"\", \"|\", \"\\\"middle\\\"\", \"|\", \"\\\"small\\\"\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\\"default\\\"\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"sticky\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"fixed header\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean \", \"|\", \" { top: number }\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.21.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"title\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Table Title\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\", mdx(\"br\", null), \"|\", \"ReactNode\", mdx(\"br\", null), \"|\", \"(pageData: RecordType[]) => string\", \"|\", \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"virtualized\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Virtualization settings\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Virtualized\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"virtualized.itemSize\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Row height\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\", \"|\", \"(index: number) => number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"56\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"virtualized.onScroll\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Virtualization scroll callback method\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"( scrollDirection?: 'forward' \", \"|\", \" 'backward', scrollOffset?: number, scrollUpdateWasRequested?: boolean ) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Trigger when paging, sorting, filtering changes. extra.changeType is supported in v2.72\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"({ pagination: TablePaginationProps, \", mdx(\"br\", null), \"filters: Array<\", \"*\", \">, sorter: object, extra: { changeType: 'sorter' \", \"|\", \" 'filter' \", \"|\", \" 'pagination' } }) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onExpand\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Trigger when clicking on the row expansion icon\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(expanded: boolean, record: RecordType, DOMEvent: MouseEvent) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onExpandedRowsChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Triggers when unfolding row changes\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(rows: RecordType[]) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onGroupedRow\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Similar to onRow, but this parameter is used to define the row attribute of the grouping header alone\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType, index: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onHeaderRow\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the header row property, and the returned object is merged to the header line\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(columns: Column[], index: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onRow\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the row property, and the returned object is merged to the table row\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType, index: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })))), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Some of the type definitions used above:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"// PaginationProps is the props supported by the Pagination component\\ninterface TablePaginationProps extends PaginationProps {\\n    position?: PaginationPosition;\\n    formatPageText?: FormatPageText;\\n}\\n\\ntype VirtualizedItemSizeFn = (index?: number) => number;\\ntype VirtualizedOnScrollArgs = {\\n    scrollDirection?: 'forward' | 'backward';\\n    scrollOffset?: number;\\n    scrollUpdateWasRequested?: boolean;\\n};\\ntype VirtualizedOnScroll = (object: VirtualizedOnScrollArgs) => void;\\n\\ntype Virtualized =\\n    | boolean\\n    | {\\n          itemSize?: number | VirtualizedItemSizeFn;\\n          onScroll?: VirtualizedOnScroll;\\n      };\\n\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"RecordType is a generic parameter of Table and Column, and the default is object type. You can use RecordType like this:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"import { ColumnProps } from 'table/interface';\\n\\ninterface Record {\\n    title?: string;\\n    dataIndex?: string;\\n    width?: number;\\n    render?: Function;\\n    key?: string;\\n    name?: string;\\n    age?: number;\\n    address?: string;\\n}\\n\\nconst columns: ColumnProps<Record>[] = [\\n    {\\n        title: 'Name',\\n        dataIndex: 'name',\\n        width: 200,\\n    },\\n    // ...\\n];\\n\\nconst data: Record[] = [\\n    {\\n        key: '1',\\n        name: 'John Brown',\\n        age: 32,\\n        address: 'New York No. 1 Lake Park, New York No. 1 Lake Park',\\n    },\\n    // ...\\n];\\n\\nfunction App() {\\n    return <Table<Record> columns={columns} dataSource={data} />;\\n}\\n\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"onRow/onHeaderRow Usage\"), mdx(\"blockquote\", {\n    parentName: \"section\"\n  }, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Also in \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"column.onCell\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"column.onHeaderCell\"), \" Properties or events supported by td / th can also be returned.\")), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"noInline=true\",\n    \"noInline\": \"true\"\n  }, \"import React from 'react';\\nimport { Table } from '@douyinfe/semi-ui';\\n\\n() => (\\n    <Table\\n        onRow={(record, index) => {\\n            return {\\n                onClick: event => {},\\n                onMouseEnter: event => {},\\n                onMouseLeave: event => {},\\n                className: '',\\n                // ...\\n                // Other attributes or events that can be applied to tr\\n            };\\n        }}\\n        onHeaderRow={(columns, index) => {\\n            return {\\n                onClick: event => {},\\n                onMouseEnter: event => {},\\n                onMouseLeave: event => {},\\n                className: '',\\n                // ...\\n                // Other attributes or events that can be applied to th\\n            };\\n        }}\\n    />\\n);\\n\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Column\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"align\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Setting the alignment of columns\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'left '\", \"|\", \" 'right '\", \"|\", \" 'center'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'left'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"children\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Settings for sub-columns when the header is merged\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Column[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"className\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Column style name\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"colSpan\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"When header columns merge, set to 0, do not render\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"dataIndex\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The key corresponding to the column data in the data item. It is required when using sorter or filter.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultFilteredValue\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default value of the filter, the filter state of the external control column with a value of the screened value array\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"any[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.5.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultSortOrder\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The default value of sortOrder, one of 'ascend'\", \"|\", \"'descend'\", \"|\", \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \" string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"direction\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"RTL, LTR direction, the default value is equal to ConfigProvider direction, you can configure the direction of the Table separately here\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'ltr' \", \"|\", \" 'rtl'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.31.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"ellipsis\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Ellipsis Text, table-layout will automatically switch to fixed after it is turned on\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \" { showTitle: boolean }\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.34.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterChildrenRecord\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether the child data needs to be filtered locally. If this function is enabled, if the child meets the filtering criteria, the parent will retain it even if it does not meet the criteria.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterDropdown\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"You can customize the filter menu. This function is only responsible for rendering the layer and needs to write a variety of interactions.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterDropdownProps\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Props passing to Dropdown, see more in \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https:/lf3-static.semi.design/obj/semi-tos/semi_main/en-US/show/dropdown#Dropdown\"\n  }, \"Dropdown API\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterDropdownVisible\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Visible of Dropdown, see more in \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https:/lf3-static.semi.design/obj/semi-tos/semi_main/en-US/show/dropdown#Dropdown\"\n  }, \"Dropdown API\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterIcon\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom filter icon\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \"ReactNode\", \"|\", \"(filtered: boolean) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterMultiple\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to choose more\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filterConfirmMode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Filter confirm mode. \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"immediate\"), \" means filter immediately when clicking option; \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"confirm\"), \" means filter after clicking confirm button, and the dropdown panel will show confirm and reset buttons at the bottom\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'immediate' \", \"|\", \" 'confirm'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'immediate'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filteredValue\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Controlled property of the filter, the filter state of the external control column with a value of the screened value array\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"any[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"filters\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Filter menu items for the header\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Filter[]\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"fixed\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether the column is fixed, optional true (equivalent to left) 'left' 'right'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"key\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The key required by React, if a unique dataIndex has been set, can ignore this property\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"render\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"A rendering function that generates complex data, the parameters are the value of the current row, the current row data, the row index, and the table row / column merge can be set in return object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(text: any, record: RecordType, index: number, { expandIcon?: ReactNode, selection?: ReactNode, indentText?: ReactNode }) => React\", \"|\", \"object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"renderFilterDropdown\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom filter dropdown panel, for usage details, see \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Custom-Filter-Rendering\"\n  }, \"Custom Filter Rendering\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(props?: RenderFilterDropdownProps) => React.ReactNode;\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.52.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"renderFilterDropdownItem\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Customize the rendering method of each filter item. For usage details, see \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Custom-Filter-Item-Rendering\"\n  }, \"Custom Filter Item Rendering\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"({ value: any, text: any, onChange: Function, level: number, ...otherProps }) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"resize\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to enable resize mode, this property will take effect only after Table resizable is enabled\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.42.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"showSortTip\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to display sorting tips, If sortOrder is set and sorting is controlled, this parameter will not take effect\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.65.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"sortChildrenRecord\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to sort child data locally\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"sortOrder\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The controlled property of the sorting, the sorting of this control column can be set to 'ascend'\", \"|\", \"'descended '\", \"|\", \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"sorter\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Sorting function, local sorting uses a function (refer to the compareFunction of Array.sort), requiring a server-side sorting can be set to true. \", mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"An independent dataIndex must be set for the sort column, and an independent key must be set for each data item in the dataSource\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \"(r1: RecordType, r2: RecordType, sortOrder: 'ascend' \", \"|\", \" 'descend') => number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"sortIcon\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Customize the sort icon. The returned node controls the entire sort button, including ascending and descending buttons. Need to control highlighting behavior based on sortOrder\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(props: { sortOrder }) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.50.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"shouldCellUpdate\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Self control whether cell should be updated\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(props: TableCellProps, prevProps: TableCellProps) => boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.71.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"title\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Column header displays text. When a function is passed in, title will use the return value of the function; when other types are passed in, they will be aggregated with sorter and filter. It needs to be used with useFullRender to obtain parameters such as filter in the function type\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string \", \"|\", \" ReactNode\", \"|\", \"({ filter: ReactNode, sorter: ReactNode, selection: ReactNode }) => ReactNode.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"useFullRender\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to completely customize the rendering, see \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Fully-custom-rendering\"\n  }, \"Full Custom Rendering\"), \" for usage details, enabling this feature will cause a certain performance loss\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Column width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string \", \"|\", \" number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onCell\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set cell properties\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType, rowIndex: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onFilter\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Determine the running function of the filter in local mode. \", mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"An independent dataIndex must be set for the filter column, and an independent key must be set for each data item in the dataSource\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(filteredValue: any, record: RecordType) => boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onFilterDropdownVisibleChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"A callback when a custom filter menu is visible\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(visible: boolean) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onHeaderCell\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the head cell property\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(column: RecordType, columnIndex: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })))), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Some of the type definitions used above:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"// RecordType is a generic parameter of Table and Column, the default is object type\\n\\ntype Filter = {\\n    value: any;\\n    text: React.ReactNode;\\n    children?: Filter[];\\n};\\n\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"rowSelection\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"className\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Style name listed\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"clickRow\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to enable click row to select. When enabled, clicking anywhere on the row will trigger selection/deselection, including fixed columns. Disabled rows (via getCheckboxProps) cannot be selected by clicking.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.94.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"disabled\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Disabled \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Checkbox\"), \" in \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Table\"), \" header or not.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"0.32.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"fixed\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Secure the selection box column to the left.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"getCheckboxProps\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default property configuration for the selection box\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"hidden\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Hide selection column or not\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"selectedRowKeys\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Specifies the key array of the selected item, which needs to work with onChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string []\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"shouldCellUpdate\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Self control whether cell should be updated\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(props: TableCellProps, prevProps: TableCellProps) => boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.71.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"renderCell\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom rendering checkbox\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"({ selected: boolean, record: RecordType, originNode: JSX.Element, inHeader: boolean, disabled: boolean, indeterminate: boolean, index?: number, selectRow?: (selected: boolean, e: Event) => void, selectAll?: (selected: boolean, e: Event) => void }) => ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"2.52.0\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom list selection box width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"A callback in the event of a change in the selected item. The first parameter will save the row keys selected last time, even if you do paging control or update the dataSource \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#faq\"\n  }, \"FAQ\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(selectedRowKeys: number[]\", \"|\", \"string[], selectedRows: RecordType[]) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onHeaderCell\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the head cell property\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(column: RecordType, columnIndex: number) => object\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onSelect\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Callback when the user manually clicks the selection box of a row\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(record: RecordType, selected: boolean, selectedRows: RecordType[], nativeEvent: MouseEvent) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onSelectAll\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"The user manually clicks the callback of the header selection box, and all optional rows in the dataSource will be selected/unselected\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(selected: boolean, selectedRows: RecordType[], changedRows: RecordType[]) => void\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }))))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"scroll\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"scrollToFirstRowOnChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to automatically scroll to the top of the table after paging, sorting, and filtering changes. When \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"scroll.y\"), \" is set, it scrolls the table body to the top; when \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"scroll.y\"), \" is not set, it scrolls the page to the table header position\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"x\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the width of the horizontal scroll area, which can be pixel value, percentage, or 'max-content'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"string\", \"|\", \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"y\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Set the height of the vertical scroll area, which can be a pixel value\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }))))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"pagination\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Page-turning component configuration. Pagination suggests not to use literal value.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Note: After pagination.onChange is set, Table onChange no longer responds to pagination changes.\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"currentPage\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Current page number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"defaultCurrentPage\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default current page number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"formatPageText\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Page-turning area copywriting custom formatting, pass false to close copywriting display; This item affects the copy display on the left of the page turning area of the form. It is different from the \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"showTotal\"), \" parameter of the\", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Pagination\"), \" component.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\", \"|\", \" ({ currentStart: number, currentEnd: number, total: number }) => string\", \"|\", \"ReactNode\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"true\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"pageSize\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Number of entries per page\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"10\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"position\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Location\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'bottom '\", \"|\", \"'top '\", \"|\", \"'both'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"'bottom'\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"total\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Total number of entries\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"0\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"preventPageChangeOnPageSizeChange\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Whether to prevent automatic adjustment of currentPage when pageSize changes. By default, when pageSize changes, the component automatically calculates the new currentPage to maintain the current data position. When set to true, the user controls the page change\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"boolean\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"false\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\")))), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"For other configurations, see \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https:/lf3-static.semi.design/obj/semi-tos/semi_main/en-US/navigation/pagination#API-Reference\"\n  }, \"Pagination\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Resizable\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The parameters of the resizable object type, which mainly include event methods when the table column is scaled. These event methods can return an object that merges with the final column.\"), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Default\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onResize\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Triggers when the table column changes its width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(column: \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\"), \") => \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onResizeStart\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Triggers when the table column starts to change the width.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(column: \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\"), \") => \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"onResizeStop\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Triggers when the table column stops changing the width\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"(column: \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\"), \") => \", mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"#Column\"\n  }, \"Column\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }))))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Methods\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Some internal methods provided by Table can be accessed through ref:\"), mdx(\"pre\", {\n    parentName: \"section\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-jsx\",\n    \"metastring\": \"noInline=true\",\n    \"noInline\": \"true\"\n  }, \"import React, { useRef, useEffect } from 'react';\\nimport { Table } from '@douyinfe/semi-ui';\\n\\nfunction Demo() {\\n    const ref = useRef();\\n\\n    useEffect(() => {\\n        ref.getCurrentPageData(); // => { dataSource: [/*...*/], groups: /*...*/ }\\n    }, []);\\n\\n    return (\\n        <Table\\n            columns={\\n                [\\n                    /*...*/\\n                ]\\n            }\\n            dataSource={\\n                [\\n                    /*...*/\\n                ]\\n            }\\n            ref={ref}\\n        />\\n    );\\n}\\n\")), mdx(\"table\", {\n    parentName: \"section\"\n  }, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Parameters\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Instructions\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Version\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"getCurrentPageData()\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Returns the data object of the current page: { dataSource: RecordType[], groups: Map<{groupKey: string, recordKeys: Set<string\", \">\", \"}> }\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"-\"))))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Accessibility\"), mdx(\"h3\", {\n    parentName: \"section\"\n  }, \"ARIA\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The role of the table is grid, and the role of the tree table is treegrid\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"the row's role is row, and the cell's role is gridcell\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Added aria-rowcount and aria-colcount attributes to the table to indicate the number of rows and columns\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The row has added aria-rowindex to indicate which row it currently belongs to, and the first row is 1\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The row of the tree table has aria-level representing the tree level of the current row, the first level is 1\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Expandable table rows have the aria-expanded attribute, indicating whether the current row is expanded\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The new aria-colindex of the cell indicates which column the current grid belongs to, and the first column is 1\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Added aria-label to column filter and sort buttons, and added aria-label attribute to row select buttons\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"RTL/LTR\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"RTL default value of Table is controlled by \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https:/lf3-static.semi.design/obj/semi-tos/semi_main/zh-CN/other/configprovider\"\n  }, \"ConfigProvider\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The align and fixed properties of the Table column will be automatically switched in RTL, left <-> right. The RTL function of fixed columns is supported in v2.31\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Table tree data does not support RTL (\", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://codesandbox.io/s/table-rtl-treedata-uy7gzl?file=/src/App.jsx\"\n  }, \"Chrome and Safari browsers behave differently from Firefox\"), \")\"))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Content Guidelines\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Table title\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The title of the table should clearly make the user perceive the purpose of the table;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Add descriptions to complex tables to provide users with more contextual information about the table;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"use sentence case;\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Column headers\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Keep column headings concise, it is recommended to use 1-2 words as column headings;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When the column header is long, it is recommended to display it in 2 lines, and the remaining text is abbreviated and displayed completely in the Tooltip;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Adopt the capitalization rules of Sentence case;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use sentence case for column headings;\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Table operation area\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You can follow \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https:/lf3-static.semi.design/obj/semi-tos/semi_main/en-US/input/button\"\n  }, \"Button's content Guidelines\")))))), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Design Tokens\"), mdx(DesignToken, {\n    mdxType: \"DesignToken\"\n  })), mdx(\"section\", null, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"FAQ\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Clicking the row selection button on the second page will jump to the first page? \")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"   After the Table's dataSource is updated, the page number will be reset to the initial state. Please check if the data source changed when the component was rendered.\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"function App() {\\n    const [dataSource, setDataSource] = useState([]);\\n\\n    useEffect(() => {\\n        // \\u2705 Correct\\n        const getData = () => {\\n            // fetch data\\n            const newData = fetch(/**/);\\n            // set data\\n            setDataSource(dataSource);\\n        };\\n\\n        getData();\\n    }, []);\\n\\n    // \\u274C Error\\n    const data = [];\\n\\n    return <Table dataSource={data} columns={[/*...*/]} />;\\n}\\n\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"The number of filtered data is wrong?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Please check that your filter columns and data sources are configured correctly.\"), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The filter column needs to set an independent \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"dataIndex\"), \", and the dataSource needs to set an independent \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"key\"), \". Please refer to the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"dataSource\"), \" API. Otherwise the filtering function will not work properly.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Why is the table data not updated?\"), mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"At present, all parameters of the table component are shallow comparison. That is to say, if the parameter value type is an array or object, you need to manually change its reference to trigger the update. Similarly, if you don't want to trigger additional updates, try not to use literal values when passing parameters directly or define reference parameter values in the render process:\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-text\"\n  }, \"// ...render() {\\n    <Table dataSource={[/*...*/]} columns={[/*...*/]} />\\n// }\\n\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The above writing method will trigger the update of data in the table every time render (the current selected row will be cleared and the row key array will be expanded, etc.). In order to improve performance and avoid some exceptions, please define some reference type parameters outside the render method as far as possible (if hooks are used, please use useMemo or useState for storage).\", \"*\", \"*\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Why can't my form line be selected and expanded?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Please specify a rowKey or set a different \\\"key\\\" attribute for each item of the dataSource. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"All rows related operations in the table need to be used.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"How to implement custom sorting or pass parameters to the server for sorting when clicking the sort button?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"The input parameters of the onChange method include pagination, filters, and sorter. Users can customize the sorting of the dataSource according to the sorter.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"How to add className to a row?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Use onRow or onHeaderRow.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"How to style the table cell?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"It can be controlled by column.onHeaderCell and column.onCell.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Why cache the previously selected keys for the first parameter of \", mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"rowSelection\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"onChange\"), \"?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"This is for the scenario where the selected row keys are lost when data is selected on the first page during paging, and then the data is selected on the second page. If you don't want to use the cached keys, you can filter it from the current dataSource or use the second parameter of \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"rowSelection\"), \" \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"onChange\"), \".\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Does it support single row selection?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Table currently does not support single-row selection function, and users can implement single selection in a custom way. Please check the FAQ.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"How is Table implemented, I want to know more details?\")), mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Please click \", mdx(\"a\", {\n    href: \"https://bytedance.feishu.cn/docs/doccnqLgNefWGMZHFz7j70GKqpY\",\n    target: \"_blank\"\n  }, \"Semi Table component design\")))), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"See more Table FAQ and demos, please click \", mdx(\"a\", {\n    href: \"https://bytedance.feishu.cn/docs/doccnsYk1qUmsIDP1ihJ9zjG0Ch\",\n    target: \"_blank\"\n  }, \"Table FAQ\"))));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"slug":"en-US/show/table","next":{"fields":{"slug":"zh-CN/show/table"},"id":"f617f90d-9746-5c22-8c9a-963d80b2be14","frontmatter":{"title":"Table 表格","localeCode":"zh-CN","icon":"doc-table","showNew":null}},"previous":{"fields":{"slug":"zh-CN/show/sidesheet"},"id":"56cda28c-c722-5f6f-a05a-545bcd4ff810","frontmatter":{"title":"SideSheet 滑动侧边栏","localeCode":"zh-CN","icon":"doc-sidesheet","showNew":null}}}},"staticQueryHashes":["1348983216108720","1477422646108720","3245198693108720","417590761108720","63159454108720"]}