chore: upgrade ant design to 5.24.2 (#6343)

* chore: upgrade ant design to 5.24.2

* chore: fix errors after upgrade ant design

* fix: ts errors

* fix: ts error

* fix: ts error

* chore: keep original code format

* chore: revert format changes

* chore: keep code format

* fix: unit tests error after upgrade ant design

* fix: style issues for variable inputs

* fix: inbox style issue

* fix: some buttons not showing in drawer

* chore: fix formily antd version

* fix: incorrect details block pagination style [skip ci]

* fix: incorrect cron style after upgrade ant design [skip ci]

* fix: unit tests errors after upgrading ant design

* fix: update unit tests for collection select and color picker components

* fix: e2e tests errors

* fix: e2e tests failing

* fix: tests error

* fix: e2e test cases

* fix: some e2e tests failing

* fix: e2e testing errors

* fix: e2e build failing

* fix: update yarn.lock to avoid comment ci timeout

* Revert "fix: update yarn.lock to avoid comment ci timeout"

This reverts commit 6f117f57a0fd1d605de7ef18022c5c3e658e24af.

* chore: comment ci timeout

* chore: e2e

* fix: workflow approval e2e testing

* fix: e2e stable for some tests
This commit is contained in:
gchust 2025-03-12 08:46:38 +08:00 committed by GitHub
parent c2786c1bee
commit 62f10d9c97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
95 changed files with 674 additions and 496 deletions

View File

@ -52,7 +52,9 @@
"react": "^18.0.0", "react": "^18.0.0",
"react-dom": "^18.0.0", "react-dom": "^18.0.0",
"nwsapi": "2.2.7", "nwsapi": "2.2.7",
"antd": "5.12.8", "antd": "5.24.2",
"@formily/antd-v5": "1.2.3",
"dayjs": "1.11.13",
"@ant-design/icons": "^5.6.1" "@ant-design/icons": "^5.6.1"
}, },
"config": { "config": {
@ -93,4 +95,4 @@
"yarn": "1.22.19" "yarn": "1.22.19"
}, },
"dependencies": {} "dependencies": {}
} }

View File

@ -17,7 +17,7 @@
"@dnd-kit/modifiers": "^6.0.0", "@dnd-kit/modifiers": "^6.0.0",
"@dnd-kit/sortable": "^6.0.0", "@dnd-kit/sortable": "^6.0.0",
"@emotion/css": "^11.7.1", "@emotion/css": "^11.7.1",
"@formily/antd-v5": "1.1.9", "@formily/antd-v5": "1.2.3",
"@formily/core": "^2.2.27", "@formily/core": "^2.2.27",
"@formily/grid": "^2.2.27", "@formily/grid": "^2.2.27",
"@formily/json-schema": "^2.2.27", "@formily/json-schema": "^2.2.27",
@ -31,7 +31,7 @@
"@nocobase/sdk": "1.7.0-alpha.1", "@nocobase/sdk": "1.7.0-alpha.1",
"@nocobase/utils": "1.7.0-alpha.1", "@nocobase/utils": "1.7.0-alpha.1",
"ahooks": "^3.7.2", "ahooks": "^3.7.2",
"antd": "5.12.8", "antd": "5.24.2",
"antd-style": "3.7.1", "antd-style": "3.7.1",
"axios": "^1.7.0", "axios": "^1.7.0",
"bignumber.js": "^9.1.2", "bignumber.js": "^9.1.2",

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement. * For more information, please refer to: https://www.nocobase.com/agreement.
*/ */
import { Checkbox, message, Table } from 'antd'; import { Checkbox, message, Table, TableProps } from 'antd';
import { omit } from 'lodash'; import { omit } from 'lodash';
import React, { createContext, useContext, useMemo, useState } from 'react'; import React, { createContext, useContext, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -139,7 +139,7 @@ export const SettingsCenterConfigure = () => {
return <Checkbox checked={checked} onChange={() => handleChange(checked, record)} />; return <Checkbox checked={checked} onChange={() => handleChange(checked, record)} />;
}, },
}, },
]} ] as TableProps['columns']}
dataSource={settings dataSource={settings
.filter((v) => { .filter((v) => {
return v.isTopLevel !== false; return v.isTopLevel !== false;

View File

@ -7,7 +7,7 @@
* For more information, please refer to: https://www.nocobase.com/agreement. * For more information, please refer to: https://www.nocobase.com/agreement.
*/ */
import { Checkbox, message, Table } from 'antd'; import { Checkbox, message, Table, TableProps } from 'antd';
import { uniq } from 'lodash'; import { uniq } from 'lodash';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -149,12 +149,12 @@ export const MenuConfigure = () => {
{t('Accessible')} {t('Accessible')}
</> </>
), ),
render: (_, schema) => { render: (_, schema: { uid: string }) => {
const checked = uids.includes(schema.uid); const checked = uids.includes(schema.uid);
return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />; return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />;
}, },
}, },
]} ] as TableProps['columns']}
dataSource={translateTitle(items)} dataSource={translateTitle(items)}
/> />
); );

View File

@ -10,7 +10,7 @@
import { FormItem, FormLayout } from '@formily/antd-v5'; import { FormItem, FormLayout } from '@formily/antd-v5';
import { ArrayField } from '@formily/core'; import { ArrayField } from '@formily/core';
import { connect, useField, useForm } from '@formily/react'; import { connect, useField, useForm } from '@formily/react';
import { Checkbox, Table, Tag } from 'antd'; import { Checkbox, Table, Tag, TableProps } from 'antd';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import React, { createContext } from 'react'; import React, { createContext } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -146,7 +146,7 @@ export const RolesResourcesActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let enabled = false; let enabled = false;
let scope = null; let scope = null;
@ -222,7 +222,7 @@ export const RolesResourcesActions = connect((props) => {
), ),
}; };
}), }),
]} ] as TableProps['columns']}
/> />
</FormItem> </FormItem>
</FormLayout> </FormLayout>

View File

@ -9,7 +9,7 @@
import { ArrayField } from '@formily/core'; import { ArrayField } from '@formily/core';
import { connect, useField } from '@formily/react'; import { connect, useField } from '@formily/react';
import { Checkbox, Select, Table, Tag } from 'antd'; import { Checkbox, Select, Table, Tag, TableProps } from 'antd';
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useCompile } from '../..'; import { useCompile } from '../..';
@ -110,7 +110,7 @@ export const StrategyActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let scope = 'all'; let scope = 'all';
let enabled = false; let enabled = false;

View File

@ -1153,6 +1153,7 @@ export const useDetailsPaginationProps = () => {
current: ctx.service?.data?.meta?.page || 1, current: ctx.service?.data?.meta?.page || 1,
pageSize: 1, pageSize: 1,
showSizeChanger: false, showSizeChanger: false,
align: 'center',
async onChange(page) { async onChange(page) {
const params = ctx.service?.params?.[0]; const params = ctx.service?.params?.[0];
ctx.service.run({ ...params, page }); ctx.service.run({ ...params, page });
@ -1178,6 +1179,7 @@ export const useDetailsPaginationProps = () => {
total: count, total: count,
pageSize: 1, pageSize: 1,
showSizeChanger: false, showSizeChanger: false,
align: 'center',
async onChange(page) { async onChange(page) {
const params = ctx.service?.params?.[0]; const params = ctx.service?.params?.[0];
ctx.service.run({ ...params, page }); ctx.service.run({ ...params, page });

View File

@ -25,6 +25,7 @@ import { useCollectionManager_deprecated } from '../hooks';
import useDialect from '../hooks/useDialect'; import useDialect from '../hooks/useDialect';
import * as components from './components'; import * as components from './components';
import { useFieldInterfaceOptions } from './interfaces'; import { useFieldInterfaceOptions } from './interfaces';
import { ItemType, MenuItemType } from 'antd/es/menu/interface';
const getSchema = (schema: CollectionFieldInterface, record: any, compile) => { const getSchema = (schema: CollectionFieldInterface, record: any, compile) => {
if (!schema) { if (!schema) {
@ -231,7 +232,7 @@ export const AddFieldAction = (props) => {
}, [getTemplate, record]); }, [getTemplate, record]);
const items = useMemo<MenuProps['items']>(() => { const items = useMemo<MenuProps['items']>(() => {
return getFieldOptions() return getFieldOptions()
.map((option) => { .map((option): ItemType & { title: string; children?: ItemType[] } => {
if (option?.children?.length === 0) { if (option?.children?.length === 0) {
return null; return null;
} }

View File

@ -96,7 +96,7 @@ export const PresetFields = observer(
rowSelection={{ rowSelection={{
type: 'checkbox', type: 'checkbox',
selectedRowKeys, selectedRowKeys,
getCheckboxProps: (record) => ({ getCheckboxProps: (record: { name: string }) => ({
name: record.name, name: record.name,
disabled: props?.disabled || props?.presetFieldsDisabledIncludes?.includes?.(record.name), disabled: props?.disabled || props?.presetFieldsDisabledIncludes?.includes?.(record.name),
}), }),

View File

@ -29,7 +29,8 @@ const defaultTheme: ThemeConfig = {
// 动画相关 // 动画相关
motionUnit: 0.03, motionUnit: 0.03,
motion: !process.env.__E2E__, // ant design 升级到5.24.2后Modal.confirm在E2E中如果关闭动画会出现ant-modal-mask不销毁的问题
// motion: !process.env.__E2E__,
}, },
}; };

View File

@ -28,7 +28,7 @@ test.describe('bulk-destroy', () => {
// 3. 点击批量删除按钮Table 显示无数据 // 3. 点击批量删除按钮Table 显示无数据
await page.getByLabel('action-Action-Delete-destroy-').click(); await page.getByLabel('action-Action-Delete-destroy-').click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByLabel('block-item-CardItem-general-').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-general-').getByText('No data').last()).toBeVisible();
}); });
test('Secondary confirmation', async ({ page, mockPage, mockRecords }) => { test('Secondary confirmation', async ({ page, mockPage, mockRecords }) => {
@ -45,6 +45,7 @@ test.describe('bulk-destroy', () => {
await page.getByLabel('designer-schema-settings-Action-actionSettings:bulkDelete-general').hover(); await page.getByLabel('designer-schema-settings-Action-actionSettings:bulkDelete-general').hover();
await page.getByRole('menuitem', { name: 'Secondary confirmation' }).click(); await page.getByRole('menuitem', { name: 'Secondary confirmation' }).click();
await page.getByLabel('Enable secondary confirmation').uncheck(); await page.getByLabel('Enable secondary confirmation').uncheck();
await expect(page.getByRole('button', { name: 'OK' })).toHaveCount(1);
await page.getByRole('button', { name: 'OK' }).click(); await page.getByRole('button', { name: 'OK' }).click();
await page.mouse.move(500, 0); await page.mouse.move(500, 0);
@ -53,6 +54,6 @@ test.describe('bulk-destroy', () => {
// 3. 点击批量删除按钮Table 显示无数据 // 3. 点击批量删除按钮Table 显示无数据
await page.getByLabel('action-Action-Delete-destroy-').click(); await page.getByLabel('action-Action-Delete-destroy-').click();
await expect(page.getByLabel('block-item-CardItem-general-').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-general-').getByText('No data').last()).toBeVisible();
}); });
}); });

View File

@ -28,6 +28,9 @@ test.describe('Link', () => {
// 2. config the Link button // 2. config the Link button
await page.getByLabel('action-Action.Link-Link-customize:link-users-table-0').hover(); await page.getByLabel('action-Action.Link-Link-customize:link-users-table-0').hover();
await expect(
page.getByRole('button', { name: 'designer-schema-settings-Action.Link-actionSettings:link-users' }),
).toHaveCount(1);
await page.getByRole('button', { name: 'designer-schema-settings-Action.Link-actionSettings:link-users' }).hover(); await page.getByRole('button', { name: 'designer-schema-settings-Action.Link-actionSettings:link-users' }).hover();
await page.getByRole('menuitem', { name: 'Edit link' }).click(); await page.getByRole('menuitem', { name: 'Edit link' }).click();
await page await page

View File

@ -29,6 +29,7 @@ test('basic', async ({ page, mockPage, mockRecord }) => {
await expect(page.getByRole('tooltip').getByText('Disassociate')).toBeVisible(); await expect(page.getByRole('tooltip').getByText('Disassociate')).toBeVisible();
await page.getByLabel('block-item-CardItem-cc-table').hover(); await page.getByLabel('block-item-CardItem-cc-table').hover();
await page.getByRole('menuitem', { name: 'Associate' }).waitFor({ state: 'detached' });
await page.getByLabel('schema-initializer-ActionBar-table:configureActions-cc').hover(); await page.getByLabel('schema-initializer-ActionBar-table:configureActions-cc').hover();
await page.getByRole('menuitem', { name: 'Associate' }).click(); await page.getByRole('menuitem', { name: 'Associate' }).click();
//点击 associate 出现弹窗 //点击 associate 出现弹窗

View File

@ -18,7 +18,7 @@ test('basic', async ({ page, mockPage, mockRecord }) => {
await page.getByLabel('action-Action.Link-Edit record-update-collection1-table-0').click(); await page.getByLabel('action-Action.Link-Edit record-update-collection1-table-0').click();
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'manyToMany' }).click(); await page.getByRole('menuitem', { name: 'manyToMany' }).click();
// 2. Table 中显示 Role UID 字段 // 2. Table 中显示 Role UID 字段

View File

@ -12,6 +12,7 @@ import { oneEmptyTableWithUsers } from './templatesOfBug';
const deleteButton = async (page: Page, name: string) => { const deleteButton = async (page: Page, name: string) => {
await page.getByRole('button', { name }).hover(); await page.getByRole('button', { name }).hover();
await page.getByRole('menuitem', { name: 'Delete' }).waitFor({ state: 'detached' });
await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover(); await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover();
await page.getByRole('menuitem', { name: 'Delete' }).click(); await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
@ -31,6 +32,7 @@ test.describe('where multi data details block can be added', () => {
// 1. 打开弹窗,通过 Associated records 添加一个详情区块 // 1. 打开弹窗,通过 Associated records 添加一个详情区块
await page.getByLabel('action-Action.Link-View').click(); await page.getByLabel('action-Action.Link-View').click();
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Associated records right' }).waitFor({ state: 'detached' });
await page.getByRole('menuitem', { name: 'Details right' }).hover(); await page.getByRole('menuitem', { name: 'Details right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records right' }).hover(); await page.getByRole('menuitem', { name: 'Associated records right' }).hover();
await page.getByRole('menuitem', { name: 'Roles' }).click(); await page.getByRole('menuitem', { name: 'Roles' }).click();
@ -41,6 +43,7 @@ test.describe('where multi data details block can be added', () => {
await expect(page.getByLabel('block-item-CollectionField-').getByText('admin')).toBeVisible(); await expect(page.getByLabel('block-item-CollectionField-').getByText('admin')).toBeVisible();
// 2. 打开弹窗,通过 Other records 添加一个详情区块 // 2. 打开弹窗,通过 Other records 添加一个详情区块
await page.getByRole('menuitem', { name: 'Details right' }).waitFor({ state: 'detached' });
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Details right' }).hover(); await page.getByRole('menuitem', { name: 'Details right' }).hover();
await page.getByRole('menuitem', { name: 'Other records right' }).hover(); await page.getByRole('menuitem', { name: 'Other records right' }).hover();
@ -116,6 +119,7 @@ test.describe('configure actions', () => {
await page.getByText('Delete').click(); await page.getByText('Delete').click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
await expect(page.getByRole('button', { name: 'Edit' })).toHaveCount(1);
await expect(page.getByRole('button', { name: 'Edit' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Edit' })).toBeVisible();
await expect(page.getByRole('button', { name: 'Delete' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Delete' })).toBeVisible();

View File

@ -76,6 +76,7 @@ test.describe('actions schema settings', () => {
await expectSettingsMenu({ await expectSettingsMenu({
page, page,
showMenu: async () => { showMenu: async () => {
await expect(page.getByRole('button', { name: 'Edit' })).toHaveCount(1);
await page.getByRole('button', { name: 'Edit' }).hover(); await page.getByRole('button', { name: 'Edit' }).hover();
await page.getByRole('button', { name: 'designer-schema-settings-Action' }).hover(); await page.getByRole('button', { name: 'designer-schema-settings-Action' }).hover();
}, },

View File

@ -50,10 +50,10 @@ test.describe('setDataLoadingModeSettingsItem', () => {
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
// 所有区块应该显示 No data // 所有区块应该显示 No data
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-CardItem-users-details').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-details').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-CardItem-users-list').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-list').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-BlockItem-users-').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-BlockItem-users-').getByText('No data').last()).toBeVisible();
// 3. 在筛选表单中数据一个筛选条件,点击筛选按钮,区块内应该显示数据 // 3. 在筛选表单中数据一个筛选条件,点击筛选按钮,区块内应该显示数据
await page.getByLabel('block-item-CollectionField-').getByRole('textbox').click(); await page.getByLabel('block-item-CollectionField-').getByRole('textbox').click();
@ -67,10 +67,10 @@ test.describe('setDataLoadingModeSettingsItem', () => {
// 4. 点击筛选表单的 Reset 按钮,区块内应该显示 No data // 4. 点击筛选表单的 Reset 按钮,区块内应该显示 No data
await page.getByLabel('action-Action-Reset to empty-users-').click(); await page.getByLabel('action-Action-Reset to empty-users-').click();
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-CardItem-users-details').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-details').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-CardItem-users-list').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-list').getByText('No data').last()).toBeVisible();
await expect(page.getByLabel('block-item-BlockItem-users-').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-BlockItem-users-').getByText('No data').last()).toBeVisible();
}); });
test('When the data block has data scope settings and dataLoadingMode is manual, data should not be displayed after the first page load', async ({ test('When the data block has data scope settings and dataLoadingMode is manual, data should not be displayed after the first page load', async ({
@ -78,7 +78,7 @@ test.describe('setDataLoadingModeSettingsItem', () => {
mockPage, mockPage,
}) => { }) => {
await mockPage(TableBlockWithDataScope).goto(); await mockPage(TableBlockWithDataScope).goto();
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
// 此时点击 filter 按钮,应该还是没数据,因为表单没有值 // 此时点击 filter 按钮,应该还是没数据,因为表单没有值
await page.getByLabel('action-Action-Filter-submit-').click({ await page.getByLabel('action-Action-Filter-submit-').click({
@ -87,7 +87,7 @@ test.describe('setDataLoadingModeSettingsItem', () => {
y: 10, y: 10,
}, },
}); });
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
// 点击 Reset 按钮,也是一样 // 点击 Reset 按钮,也是一样
await page.getByLabel('action-Action-Reset-users-').click({ await page.getByLabel('action-Action-Reset-users-').click({
@ -96,6 +96,6 @@ test.describe('setDataLoadingModeSettingsItem', () => {
y: 10, y: 10,
}, },
}); });
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
}); });
}); });

View File

@ -69,7 +69,7 @@ test.describe('where single data details block can be added', () => {
// 3.通过 Associated records 创建一个详情区块 // 3.通过 Associated records 创建一个详情区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Details right' }).hover(); await page.getByRole('menuitem', { name: 'Details right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'manyToOne' }).hover(); await page.getByRole('menuitem', { name: 'manyToOne' }).hover();
await page.getByRole('menuitem', { name: 'Blank block' }).click(); await page.getByRole('menuitem', { name: 'Blank block' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -82,7 +82,7 @@ test.describe('where single data details block can be added', () => {
// 4.通过 Associated records 创建一个详情区块,使用模板 // 4.通过 Associated records 创建一个详情区块,使用模板
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Details right' }).hover(); await page.getByRole('menuitem', { name: 'Details right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'manyToOne' }).hover(); await page.getByRole('menuitem', { name: 'manyToOne' }).hover();
await page.getByRole('menuitem', { name: 'Duplicate template' }).hover(); await page.getByRole('menuitem', { name: 'Duplicate template' }).hover();
await page.getByRole('menuitem', { name: 'example_Details (Fields only)' }).click(); await page.getByRole('menuitem', { name: 'example_Details (Fields only)' }).click();

View File

@ -60,10 +60,10 @@ test.describe('configure fields', () => {
await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch')).toBeChecked(); await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch')).toBeChecked();
// add association fields // add association fields
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await page.getByRole('menuitem', { name: 'Nickname' }).click(); await page.getByRole('menuitem', { name: 'Nickname' }).click();
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).toBeChecked(); await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).toBeChecked();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -72,13 +72,14 @@ test.describe('configure fields', () => {
// delete fields // delete fields
await page.getByLabel('schema-initializer-Grid-form:configureFields-general').hover(); await page.getByLabel('schema-initializer-Grid-form:configureFields-general').hover();
await expect(page.getByRole('menuitem', { name: 'ID', exact: true })).toHaveCount(1);
await page.getByRole('menuitem', { name: 'ID', exact: true }).click(); await page.getByRole('menuitem', { name: 'ID', exact: true }).click();
await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch')).not.toBeChecked(); await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch')).not.toBeChecked();
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await page.getByRole('menuitem', { name: 'Nickname' }).click(); await page.getByRole('menuitem', { name: 'Nickname' }).click();
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).not.toBeChecked(); await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).not.toBeChecked();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -119,6 +120,7 @@ test.describe('configure actions', () => {
// add button // add button
await page.getByRole('menuitem', { name: 'Submit' }).click(); await page.getByRole('menuitem', { name: 'Submit' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
await expect(page.getByRole('button', { name: 'Submit' })).toHaveCount(1);
await expect(page.getByRole('button', { name: 'Submit' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Submit' })).toBeVisible();
// delete button // delete button

View File

@ -279,7 +279,7 @@ test.describe('set default value', () => {
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
// 2. 设置的 abcd 应该立即显示在 Nickname 字段的输入框中 // 2. 设置的 abcd 应该立即显示在 Nickname 字段的输入框中
await expect(page.getByLabel('block-item-CollectionField-').getByRole('textbox')).toHaveValue('abcd'); await expect(page.getByLabel('block-item-CollectionField-').getByRole('textbox').last()).toHaveValue('abcd');
}); });
test('Current popup record', async ({ page, mockPage }) => { test('Current popup record', async ({ page, mockPage }) => {

View File

@ -248,7 +248,7 @@ test.describe('creation form block schema settings', () => {
// 重新选择一下数据,字段值才会被填充 // 重新选择一下数据,字段值才会被填充
// TODO: 保存后,数据应该直接被填充上 // TODO: 保存后,数据应该直接被填充上
await page.getByLabel('icon-close-select').click(); await page.getByLabel('icon-close-select').last().click();
await page.getByTestId('select-object-single').click(); await page.getByTestId('select-object-single').click();
await page.getByRole('option', { name: '2' }).click(); await page.getByRole('option', { name: '2' }).click();

View File

@ -128,9 +128,14 @@ test.describe('linkage rules', () => {
// 增加一条规则:当 number 字段的值等于 123 时 // 增加一条规则:当 number 字段的值等于 123 时
await page.getByRole('button', { name: 'plus Add linkage rule' }).click(); await page.getByRole('button', { name: 'plus Add linkage rule' }).click();
await page.locator('.ant-collapse-header').nth(1).getByRole('img', { name: 'right' }).click(); await page.locator('.ant-collapse-header .ant-collapse-expand-icon').nth(1).click();
await page.getByLabel('Linkage rules').getByRole('tabpanel').getByText('Add condition', { exact: true }).click(); await page
.getByLabel('Linkage rules')
.getByRole('tabpanel')
.getByText('Add condition', { exact: true })
.last()
.click();
await page.getByRole('button', { name: 'Select field' }).click(); await page.getByRole('button', { name: 'Select field' }).click();
await page.getByRole('menuitemcheckbox', { name: 'number' }).click(); await page.getByRole('menuitemcheckbox', { name: 'number' }).click();
await page.getByLabel('Linkage rules').getByRole('spinbutton').click(); await page.getByLabel('Linkage rules').getByRole('spinbutton').click();
@ -146,19 +151,19 @@ test.describe('linkage rules', () => {
// action: 为 longText 字段赋上常量值 // action: 为 longText 字段赋上常量值
await page.getByLabel('Linkage rules').getByRole('tabpanel').getByText('Add property').click(); await page.getByLabel('Linkage rules').getByRole('tabpanel').getByText('Add property').click();
await page.getByRole('button', { name: 'Select field' }).click(); await page.getByRole('button', { name: 'Select field' }).click();
await page.getByRole('tree').getByText('longText').click(); await page.getByRole('tree').getByText('longText').last().click();
await page.getByRole('button', { name: 'action', exact: true }).click(); await page.getByRole('button', { name: 'action', exact: true }).click();
await page.getByRole('option', { name: 'Value', exact: true }).click(); await page.getByRole('option', { name: 'Value', exact: true }).last().click();
await page.getByLabel('dynamic-component-linkage-rules').getByRole('textbox').fill('456'); await page.getByLabel('dynamic-component-linkage-rules').getByRole('textbox').fill('456');
// action: 为 integer 字段附上一个表达式,使其值等于 number 字段的值 // action: 为 integer 字段附上一个表达式,使其值等于 number 字段的值
await page.getByLabel('Linkage rules').getByRole('tabpanel').getByText('Add property').click(); await page.getByLabel('Linkage rules').getByRole('tabpanel').getByText('Add property').click();
await page.getByRole('button', { name: 'Select field' }).click(); await page.getByRole('button', { name: 'Select field' }).click();
await page.getByRole('tree').getByText('integer').click(); await page.getByRole('tree').getByText('integer').last().click();
await page.getByRole('button', { name: 'action', exact: true }).click(); await page.getByRole('button', { name: 'action', exact: true }).click();
await page.getByRole('option', { name: 'Value', exact: true }).click(); await page.getByRole('option', { name: 'Value', exact: true }).last().click();
await page.getByTestId('select-linkage-value-type').nth(1).click(); await page.getByTestId('select-linkage-value-type').last().click();
await page.getByText('Expression').click(); await page.getByText('Expression').click();
await page.getByText('xSelect a variable').click(); await page.getByText('xSelect a variable').click();

View File

@ -33,6 +33,7 @@ test.describe('bulk edit form', () => {
await expect(page.getByLabel('block-item-BulkEditField-').getByText('*')).toBeVisible(); await expect(page.getByLabel('block-item-BulkEditField-').getByText('*')).toBeVisible();
// 3. 输入值,点击提交 // 3. 输入值,点击提交
await expect(page.getByLabel('block-item-BulkEditField-').getByRole('textbox')).toHaveCount(1);
await page.getByLabel('block-item-BulkEditField-').getByRole('textbox').fill('123'); await page.getByLabel('block-item-BulkEditField-').getByRole('textbox').fill('123');
await page.getByRole('button', { name: 'Submit' }).click(); await page.getByRole('button', { name: 'Submit' }).click();
@ -65,6 +66,7 @@ test.describe('bulk edit form', () => {
await expect(page.getByLabel('block-item-BulkEditField-').getByText('*')).toBeVisible(); await expect(page.getByLabel('block-item-BulkEditField-').getByText('*')).toBeVisible();
// 4. 点击提交按钮,应该提示一个错误 // 4. 点击提交按钮,应该提示一个错误
await expect(page.getByRole('button', { name: 'Submit' })).toHaveCount(1);
await page.getByRole('button', { name: 'Submit' }).click(); await page.getByRole('button', { name: 'Submit' }).click();
await expect(page.getByLabel('block-item-BulkEditField-').getByText('The field value is required')).toBeVisible(); await expect(page.getByLabel('block-item-BulkEditField-').getByText('The field value is required')).toBeVisible();

View File

@ -34,6 +34,7 @@ test.describe('deprecated variables', () => {
// 表达式输入框也是一样 // 表达式输入框也是一样
await page.getByText('xSelect a variable').click(); await page.getByText('xSelect a variable').click();
await expect(page.getByRole('menuitemcheckbox', { name: 'Current record right' })).toHaveCount(1);
await page.getByRole('menuitemcheckbox', { name: 'Current record right' }).hover({ position: { x: 40, y: 12 } }); await page.getByRole('menuitemcheckbox', { name: 'Current record right' }).hover({ position: { x: 40, y: 12 } });
await expect(page.getByRole('tooltip', { name: 'This variable has been deprecated' })).toBeVisible(); await expect(page.getByRole('tooltip', { name: 'This variable has been deprecated' })).toBeVisible();
await expect(page.getByRole('menuitemcheckbox', { name: 'Current record right' })).toHaveClass( await expect(page.getByRole('menuitemcheckbox', { name: 'Current record right' })).toHaveClass(
@ -45,6 +46,7 @@ test.describe('deprecated variables', () => {
// 3. 当设置为其它变量后,再次打开,变量列表中的弃用变量不再显示 // 3. 当设置为其它变量后,再次打开,变量列表中的弃用变量不再显示
await page.locator('button').filter({ hasText: /^x$/ }).click(); await page.locator('button').filter({ hasText: /^x$/ }).click();
await expect(page.getByRole('menuitemcheckbox', { name: 'Current form right' })).toHaveCount(1);
await page.getByRole('menuitemcheckbox', { name: 'Current form right' }).click(); await page.getByRole('menuitemcheckbox', { name: 'Current form right' }).click();
await page.getByRole('menuitemcheckbox', { name: 'Nickname' }).click(); await page.getByRole('menuitemcheckbox', { name: 'Nickname' }).click();
await expect(page.getByLabel('variable-tag').getByText('Current form / Nickname')).toBeVisible(); await expect(page.getByLabel('variable-tag').getByText('Current form / Nickname')).toBeVisible();

View File

@ -18,6 +18,7 @@ import {
import { T3825 } from './templatesOfBug'; import { T3825 } from './templatesOfBug';
const clickOption = async (page: Page, optionName: string) => { const clickOption = async (page: Page, optionName: string) => {
await page.getByLabel('block-item-CardItem-general-form').hover(); await page.getByLabel('block-item-CardItem-general-form').hover();
await page.getByRole('menuitem', { name: optionName }).waitFor({ state: 'detached' });
await page.getByLabel('designer-schema-settings-CardItem-FormV2.Designer-general').hover(); await page.getByLabel('designer-schema-settings-CardItem-FormV2.Designer-general').hover();
await page.getByRole('menuitem', { name: optionName }).click(); await page.getByRole('menuitem', { name: optionName }).click();
}; };

View File

@ -13,6 +13,7 @@ import { oneGridCardWithInheritFields } from './templatesOfBug';
const deleteButton = async (page: Page, name: string) => { const deleteButton = async (page: Page, name: string) => {
await page.getByRole('button', { name }).hover(); await page.getByRole('button', { name }).hover();
await page.getByRole('menuitem', { name: 'Delete' }).waitFor({ state: 'detached' });
await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover(); await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover();
await page.getByRole('menuitem', { name: 'Delete' }).click(); await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
@ -47,6 +48,7 @@ test.describe('where grid card block can be added', () => {
// 2. 通过 Other records 创建一个列表区块 // 2. 通过 Other records 创建一个列表区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Other records right' }).waitFor({ state: 'detached' });
await page.getByRole('menuitem', { name: 'Grid Card right' }).hover(); await page.getByRole('menuitem', { name: 'Grid Card right' }).hover();
await page.getByRole('menuitem', { name: 'Other records right' }).hover(); await page.getByRole('menuitem', { name: 'Other records right' }).hover();
await page.getByRole('menuitem', { name: 'Users' }).click(); await page.getByRole('menuitem', { name: 'Users' }).click();
@ -151,10 +153,10 @@ test.describe('configure fields', () => {
// add association fields // add association fields
await page.mouse.wheel(0, 300); await page.mouse.wheel(0, 300);
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await page.getByRole('menuitem', { name: 'Nickname' }).click(); await page.getByRole('menuitem', { name: 'Nickname' }).click();
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).toBeChecked(); await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).toBeChecked();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -165,14 +167,14 @@ test.describe('configure fields', () => {
// delete fields // delete fields
await formItemInitializer.hover(); await formItemInitializer.hover();
await page.getByRole('menuitem', { name: 'ID', exact: true }).click(); await page.getByRole('menuitem', { name: 'ID', exact: true }).first().click();
await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch')).not.toBeChecked(); await expect(page.getByRole('menuitem', { name: 'ID', exact: true }).getByRole('switch').first()).not.toBeChecked();
await page.mouse.wheel(0, 300); await page.mouse.wheel(0, 300);
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await page.getByRole('menuitem', { name: 'Nickname' }).click(); await page.getByRole('menuitem', { name: 'Nickname' }).click();
await page.getByRole('menuitem', { name: 'Many to one' }).nth(1).hover(); await page.getByRole('menuitem', { name: 'Many to one right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).not.toBeChecked(); await expect(page.getByRole('menuitem', { name: 'Nickname' }).getByRole('switch')).not.toBeChecked();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -185,7 +187,7 @@ test.describe('configure fields', () => {
// add markdown // add markdown
await formItemInitializer.hover(); await formItemInitializer.hover();
await page.getByRole('menuitem', { name: 'ID', exact: true }).hover(); await page.getByRole('menuitem', { name: 'ID', exact: true }).first().hover();
await page.mouse.wheel(0, 300); await page.mouse.wheel(0, 300);
await page.getByRole('menuitem', { name: 'Add Markdown' }).click(); await page.getByRole('menuitem', { name: 'Add Markdown' }).click();

View File

@ -18,6 +18,7 @@ test.describe('grid card block schema settings', () => {
page, page,
showMenu: async () => { showMenu: async () => {
await page.getByLabel('block-item-BlockItem-general-grid-card').hover(); await page.getByLabel('block-item-BlockItem-general-grid-card').hover();
await page.waitForTimeout(1000);
await page.getByLabel('designer-schema-settings-BlockItem-GridCard.Designer-general').hover(); await page.getByLabel('designer-schema-settings-BlockItem-GridCard.Designer-general').hover();
}, },
supportedOptions: [ supportedOptions: [

View File

@ -12,6 +12,7 @@ import { oneEmptyTableWithUsers } from '../../details-multi/__e2e__/templatesOfB
const deleteButton = async (page: Page, name: string) => { const deleteButton = async (page: Page, name: string) => {
await page.getByRole('button', { name }).hover(); await page.getByRole('button', { name }).hover();
await page.getByRole('menuitem', { name: 'Delete' }).waitFor({ state: 'detached' });
await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover(); await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover();
await page.getByRole('menuitem', { name: 'Delete' }).click(); await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
@ -71,6 +72,9 @@ test.describe('configure global actions', () => {
await page.getByRole('menuitem', { name: 'Refresh' }).click(); await page.getByRole('menuitem', { name: 'Refresh' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
await expect(page.getByRole('button', { name: 'Filter' })).toHaveCount(1);
await expect(page.getByRole('button', { name: 'Add new' })).toHaveCount(1);
await expect(page.getByRole('button', { name: 'Refresh' })).toHaveCount(1);
await expect(page.getByRole('button', { name: 'Filter' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Filter' })).toBeVisible();
await expect(page.getByRole('button', { name: 'Add new' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Add new' })).toBeVisible();
await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();

View File

@ -90,7 +90,7 @@ test.describe('configure actions column', () => {
// 列宽度默认为 100 // 列宽度默认为 100
await expectActionsColumnWidth(100); await expectActionsColumnWidth(100);
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-settings-TableV2.Column-fieldSettings:TableColumn-users').hover(); await page.getByLabel('designer-schema-settings-TableV2.Column-fieldSettings:TableColumn-users').hover();
await page.getByRole('menuitem', { name: 'Column width' }).click(); await page.getByRole('menuitem', { name: 'Column width' }).click();

View File

@ -25,6 +25,7 @@ test.describe('hide column', () => {
// 2. Sub table: hide column // 2. Sub table: hide column
await page.getByRole('button', { name: 'Role name' }).hover(); await page.getByRole('button', { name: 'Role name' }).hover();
await page.getByRole('menuitem', { name: 'Hide column question-circle' }).waitFor({ state: 'detached' });
await page await page
.getByRole('button', { name: 'designer-schema-settings-TableV2.Column-fieldSettings:TableColumn-roles' }) .getByRole('button', { name: 'designer-schema-settings-TableV2.Column-fieldSettings:TableColumn-roles' })
.hover(); .hover();

View File

@ -295,19 +295,19 @@ test.describe('configure actions column', () => {
await nocoPage.goto(); await nocoPage.goto();
// add view & Edit & Delete & Duplicate ------------------------------------------------------------ // add view & Edit & Delete & Duplicate ------------------------------------------------------------
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'View' }).click(); await page.getByRole('menuitem', { name: 'View' }).click();
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Edit' }).click(); await page.getByRole('menuitem', { name: 'Edit' }).click();
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Delete' }).click(); await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Duplicate' }).click(); await page.getByRole('menuitem', { name: 'Duplicate' }).click();
@ -330,11 +330,11 @@ test.describe('configure actions column', () => {
await expect(page.getByLabel('action-Action.Link-Duplicate-duplicate-t_unp4scqamw9-table-0')).not.toBeVisible(); await expect(page.getByLabel('action-Action.Link-Duplicate-duplicate-t_unp4scqamw9-table-0')).not.toBeVisible();
// add custom action ------------------------------------------------------------ // add custom action ------------------------------------------------------------
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Popup' }).click(); await page.getByRole('menuitem', { name: 'Popup' }).click();
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-initializer-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Update record' }).click(); await page.getByRole('menuitem', { name: 'Update record' }).click();
@ -351,7 +351,7 @@ test.describe('configure actions column', () => {
// 列宽度默认为 100 // 列宽度默认为 100
await expect(page.getByRole('columnheader', { name: 'Actions', exact: true })).toHaveJSProperty('offsetWidth', 100); await expect(page.getByRole('columnheader', { name: 'Actions', exact: true })).toHaveJSProperty('offsetWidth', 100);
await page.getByText('Actions', { exact: true }).hover(); await page.getByText('Actions', { exact: true }).hover({ force: true });
await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-').hover(); await page.getByLabel('designer-schema-settings-TableV2.Column-TableV2.ActionColumnDesigner-').hover();
await page.getByRole('menuitem', { name: 'Column width' }).click(); await page.getByRole('menuitem', { name: 'Column width' }).click();

View File

@ -12,6 +12,7 @@ import { T3686, T4005 } from './templatesOfBug';
const deleteButton = async (page: Page, name: string) => { const deleteButton = async (page: Page, name: string) => {
await page.getByRole('button', { name }).hover(); await page.getByRole('button', { name }).hover();
await page.getByRole('menuitem', { name: 'Delete' }).waitFor({ state: 'detached' });
await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover(); await page.getByRole('button', { name }).getByLabel('designer-schema-settings-').hover();
await page.getByRole('menuitem', { name: 'Delete' }).click(); await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
@ -37,7 +38,8 @@ test.describe('where table block can be added', () => {
// 添加当前表关系区块 // 添加当前表关系区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'childAssociationField' }).waitFor({ state: 'detached' });
await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'childAssociationField' }).click(); await page.getByRole('menuitem', { name: 'childAssociationField' }).click();
await page await page
.getByTestId('drawer-Action.Container-childCollection-View record') .getByTestId('drawer-Action.Container-childCollection-View record')
@ -46,9 +48,10 @@ test.describe('where table block can be added', () => {
await page.getByRole('menuitem', { name: 'childTargetText' }).click(); await page.getByRole('menuitem', { name: 'childTargetText' }).click();
// 添加父表关系区块 // 添加父表关系区块
await page.getByRole('menuitem', { name: 'Table right' }).waitFor({ state: 'detached' });
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'parentAssociationField' }).click(); await page.getByRole('menuitem', { name: 'parentAssociationField' }).click();
await page.getByLabel('schema-initializer-TableV2-table:configureColumns-parentTargetCollection').hover(); await page.getByLabel('schema-initializer-TableV2-table:configureColumns-parentTargetCollection').hover();
await page.getByRole('menuitem', { name: 'parentTargetText' }).click(); await page.getByRole('menuitem', { name: 'parentTargetText' }).click();

View File

@ -87,7 +87,7 @@ test.describe('actions schema settings', () => {
// 切换为 dialog // 切换为 dialog
await page.getByRole('menuitem', { name: 'Open mode' }).click(); await page.getByRole('menuitem', { name: 'Open mode' }).click();
await page.getByRole('option', { name: 'Dialog' }).click(); await page.getByRole('option', { name: 'Dialog' }).last().click();
await page.getByRole('button', { name: 'Add new' }).click(); await page.getByRole('button', { name: 'Add new' }).click();
await expect(page.getByTestId('modal-Action.Container-general-Add record')).toBeVisible(); await expect(page.getByTestId('modal-Action.Container-general-Add record')).toBeVisible();
@ -97,7 +97,7 @@ test.describe('actions schema settings', () => {
await page.getByLabel('action-Action-Add new-create-').hover(); await page.getByLabel('action-Action-Add new-create-').hover();
await page.getByRole('button', { name: 'designer-schema-settings-Action-Action.Designer-general' }).hover(); await page.getByRole('button', { name: 'designer-schema-settings-Action-Action.Designer-general' }).hover();
await page.getByRole('menuitem', { name: 'Open mode Dialog' }).click(); await page.getByRole('menuitem', { name: 'Open mode Dialog' }).click();
await page.getByRole('option', { name: 'Page' }).click(); await page.getByRole('option', { name: 'Page' }).last().click();
// 点击按钮后会跳转到一个页面 // 点击按钮后会跳转到一个页面
await page.getByLabel('action-Action-Add new-create-').click(); await page.getByLabel('action-Action-Add new-create-').click();
@ -116,7 +116,7 @@ test.describe('actions schema settings', () => {
// 创建一条数据后返回,列表中应该有这条数据 // 创建一条数据后返回,列表中应该有这条数据
await page.getByTestId('select-single').click(); await page.getByTestId('select-single').click();
await page.getByRole('option', { name: 'option3' }).click(); await page.getByRole('option', { name: 'option3' }).last().click();
// 提交后会自动返回 // 提交后会自动返回
await page.getByLabel('action-Action-Submit-submit-').click(); await page.getByLabel('action-Action-Submit-submit-').click();
@ -136,7 +136,7 @@ test.describe('actions schema settings', () => {
// 切换为 small // 切换为 small
await page.getByRole('menuitem', { name: 'Popup size' }).click(); await page.getByRole('menuitem', { name: 'Popup size' }).click();
await page.getByRole('option', { name: 'Small' }).click(); await page.getByRole('option', { name: 'Small' }).last().click();
await page.getByRole('button', { name: 'Add new' }).click(); await page.getByRole('button', { name: 'Add new' }).click();
const drawerWidth = const drawerWidth =
@ -148,7 +148,7 @@ test.describe('actions schema settings', () => {
// 切换为 large // 切换为 large
await showMenu(page); await showMenu(page);
await page.getByRole('menuitem', { name: 'Popup size' }).click(); await page.getByRole('menuitem', { name: 'Popup size' }).click();
await page.getByRole('option', { name: 'Large' }).click(); await page.getByRole('option', { name: 'Large' }).last().click();
await page.getByRole('button', { name: 'Add new' }).click(); await page.getByRole('button', { name: 'Add new' }).click();
const drawerWidth2 = const drawerWidth2 =
@ -325,7 +325,7 @@ test.describe('actions schema settings', () => {
await page.getByText('Add property').click(); await page.getByText('Add property').click();
await page.getByLabel('block-item-ArrayCollapse-general').click(); await page.getByLabel('block-item-ArrayCollapse-general').click();
await page.getByTestId('select-linkage-properties').click(); await page.getByTestId('select-linkage-properties').click();
await page.getByRole('option', { name: 'Disabled' }).click(); await page.getByRole('option', { name: 'Disabled' }).last().click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByLabel('action-Action.Link-View record-view-general-table-0')).toHaveAttribute( await expect(page.getByLabel('action-Action.Link-View record-view-general-table-0')).toHaveAttribute(
@ -336,10 +336,10 @@ test.describe('actions schema settings', () => {
// 设置第二组规则 -------------------------------------------------------------------------- // 设置第二组规则 --------------------------------------------------------------------------
await openLinkageRules(); await openLinkageRules();
await page.getByRole('button', { name: 'plus Add linkage rule' }).click(); await page.getByRole('button', { name: 'plus Add linkage rule' }).click();
await page.locator('.ant-collapse-header').nth(1).getByRole('img', { name: 'right' }).click(); await page.locator('.ant-collapse-header .ant-collapse-expand-icon').nth(1).click();
// 添加一个条件ID 等于 1 // 添加一个条件ID 等于 1
await page.getByRole('tabpanel').getByText('Add condition', { exact: true }).click(); await page.getByRole('tabpanel').getByText('Add condition', { exact: true }).last().click();
await page.getByRole('button', { name: 'Select field' }).click(); await page.getByRole('button', { name: 'Select field' }).click();
await page.getByRole('menuitemcheckbox', { name: 'ID', exact: true }).click(); await page.getByRole('menuitemcheckbox', { name: 'ID', exact: true }).click();
await page.getByRole('spinbutton').click(); await page.getByRole('spinbutton').click();
@ -348,7 +348,7 @@ test.describe('actions schema settings', () => {
// action: 使按钮可用 // action: 使按钮可用
await page.getByRole('tabpanel').getByText('Add property').click(); await page.getByRole('tabpanel').getByText('Add property').click();
await page.locator('.ant-select', { hasText: 'action' }).click(); await page.locator('.ant-select', { hasText: 'action' }).click();
await page.getByRole('option', { name: 'Enabled' }).click(); await page.getByRole('option', { name: 'Enabled' }).last().click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
// 后面的 action 会覆盖前面的 // 后面的 action 会覆盖前面的
@ -533,7 +533,7 @@ test.describe('actions schema settings', () => {
await page.getByLabel('action-Action.Link-View').hover(); await page.getByLabel('action-Action.Link-View').hover();
await page.getByLabel('designer-schema-settings-Action.Link-actionSettings:view-users').hover(); await page.getByLabel('designer-schema-settings-Action.Link-actionSettings:view-users').hover();
await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click(); await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click();
await page.getByRole('option', { name: 'Page' }).click(); await page.getByRole('option', { name: 'Page' }).last().click();
// 跳转到子页面后,其内容应该和弹窗中的内容一致 // 跳转到子页面后,其内容应该和弹窗中的内容一致
await page.getByLabel('action-Action.Link-View').click(); await page.getByLabel('action-Action.Link-View').click();
@ -706,7 +706,7 @@ test.describe('actions schema settings', () => {
.getByRole('button', { name: 'designer-schema-settings-Action.Link-actionSettings:view-roles' }) .getByRole('button', { name: 'designer-schema-settings-Action.Link-actionSettings:view-roles' })
.hover(); .hover();
await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click(); await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click();
await page.getByRole('option', { name: 'Page' }).click(); await page.getByRole('option', { name: 'Page' }).last().click();
// 点击按钮跳转到子页面 // 点击按钮跳转到子页面
await page.getByLabel('action-Action.Link-View role-view-roles-table-admin').click(); await page.getByLabel('action-Action.Link-View role-view-roles-table-admin').click();
@ -955,7 +955,7 @@ test.describe('actions schema settings', () => {
await page.getByLabel('action-Action.Link-Add child-').hover(); await page.getByLabel('action-Action.Link-Add child-').hover();
await page.getByLabel('designer-schema-settings-Action.Link-actionSettings:addChild-treeCollection').hover(); await page.getByLabel('designer-schema-settings-Action.Link-actionSettings:addChild-treeCollection').hover();
await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click(); await page.getByRole('menuitem', { name: 'Open mode Drawer' }).click();
await page.getByRole('option', { name: 'Page' }).click(); await page.getByRole('option', { name: 'Page' }).last().click();
// open popup with page mode // open popup with page mode
await page.getByLabel('action-Action.Link-Add child-').click(); await page.getByLabel('action-Action.Link-Add child-').click();
@ -994,7 +994,7 @@ test.describe('table column schema settings', () => {
// 1. 关系字段下拉框中应该有数据 // 1. 关系字段下拉框中应该有数据
await page.locator('.nb-sub-table-addNew').click(); await page.locator('.nb-sub-table-addNew').click();
await page.getByTestId('select-object-multiple').click(); await page.getByTestId('select-object-multiple').click();
await expect(page.getByRole('option', { name: record1.singleLineText, exact: true })).toBeVisible(); await expect(page.getByRole('option', { name: record1.singleLineText, exact: true }).last()).toBeVisible();
// 2. 为该关系字段设置一个数据范围后,下拉框中应该有一个匹配项 // 2. 为该关系字段设置一个数据范围后,下拉框中应该有一个匹配项
await page.getByRole('button', { name: 'manyToMany1', exact: true }).hover(); await page.getByRole('button', { name: 'manyToMany1', exact: true }).hover();
@ -1009,7 +1009,7 @@ test.describe('table column schema settings', () => {
await page.reload(); await page.reload();
await page.locator('.nb-sub-table-addNew').click(); await page.locator('.nb-sub-table-addNew').click();
await page.getByTestId('select-object-multiple').click(); await page.getByTestId('select-object-multiple').click();
await expect(page.getByRole('option', { name: record1.singleLineText, exact: true })).toBeVisible(); await expect(page.getByRole('option', { name: record1.singleLineText, exact: true }).last()).toBeVisible();
}); });
test('fixed column', async ({ page, mockPage }) => { test('fixed column', async ({ page, mockPage }) => {

View File

@ -35,7 +35,11 @@ test.describe('where filter block can be added', () => {
// 3. 与 Table、Details、List、GridCard 等区块建立连接 // 3. 与 Table、Details、List、GridCard 等区块建立连接
const connectByForm = async (name: string) => { const connectByForm = async (name: string) => {
await page
.getByLabel('designer-schema-settings-CardItem-blockSettings:filterForm-users')
.waitFor({ state: 'hidden' });
await page.getByLabel('block-item-CardItem-users-filter-form').hover(); await page.getByLabel('block-item-CardItem-users-filter-form').hover();
await page.getByRole('menuitem', { name: 'Connect data blocks right' }).waitFor({ state: 'detached' });
await page.getByLabel('designer-schema-settings-CardItem-blockSettings:filterForm-users').hover(); await page.getByLabel('designer-schema-settings-CardItem-blockSettings:filterForm-users').hover();
await page.getByRole('menuitem', { name: 'Connect data blocks right' }).hover(); await page.getByRole('menuitem', { name: 'Connect data blocks right' }).hover();
await page.getByRole('menuitem', { name }).click(); await page.getByRole('menuitem', { name }).click();
@ -43,6 +47,7 @@ test.describe('where filter block can be added', () => {
const connectByCollapse = async (name: string) => { const connectByCollapse = async (name: string) => {
await page.mouse.move(-500, 0); await page.mouse.move(-500, 0);
await page.getByLabel('block-item-CardItem-users-filter-collapse').hover(); await page.getByLabel('block-item-CardItem-users-filter-collapse').hover();
await page.getByRole('menuitem', { name: 'Connect data blocks right' }).waitFor({ state: 'detached' });
await page.getByLabel('designer-schema-settings-CardItem-blockSettings:filterCollapse-users').hover(); await page.getByLabel('designer-schema-settings-CardItem-blockSettings:filterCollapse-users').hover();
await page.getByRole('menuitem', { name: 'Connect data blocks right' }).hover(); await page.getByRole('menuitem', { name: 'Connect data blocks right' }).hover();
await page.getByRole('menuitem', { name }).click(); await page.getByRole('menuitem', { name }).click();
@ -150,7 +155,9 @@ test.describe('where filter block can be added', () => {
} }
// 2. 测试用表单筛选其它区块 // 2. 测试用表单筛选其它区块
await page.getByRole('menuitem', { name: 'Form right' }).waitFor({ state: 'detached' });
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Users' }).waitFor({ state: 'detached' });
await page.getByRole('menuitem', { name: 'Form right' }).hover(); await page.getByRole('menuitem', { name: 'Form right' }).hover();
await page.getByRole('menuitem', { name: 'Users' }).click(); await page.getByRole('menuitem', { name: 'Users' }).click();
await page.getByLabel('schema-initializer-Grid-filterForm:configureFields-users').hover(); await page.getByLabel('schema-initializer-Grid-filterForm:configureFields-users').hover();

View File

@ -46,7 +46,7 @@ test.describe('collapse schema settings', () => {
await page.getByRole('menuitem', { name: 'General' }).click(); await page.getByRole('menuitem', { name: 'General' }).click();
// 点击一个选项,进行筛选 // 点击一个选项,进行筛选
await page.getByRole('button', { name: 'right singleSelect search' }).click(); await page.getByRole('button', { name: 'collapsed singleSelect search' }).click();
await page.getByLabel('block-item-CardItem-general-filter-collapse').getByText('Option1').click(); await page.getByLabel('block-item-CardItem-general-filter-collapse').getByText('Option1').click();
// 注意:在本地运行时,由于运行结束后不会清空之前创建的数据,所以在第一次运行之后,下面会报错。如果遇到这种情况,可以先不管 // 注意:在本地运行时,由于运行结束后不会清空之前创建的数据,所以在第一次运行之后,下面会报错。如果遇到这种情况,可以先不管

View File

@ -126,7 +126,7 @@ test.describe('filter form', () => {
y: 10, y: 10,
}, },
}); });
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
// 4. 此时点击 Reset 按钮,应该只显示一条数据,因为会把 nickname 的值重置为 {{$user.nickname}} // 4. 此时点击 Reset 按钮,应该只显示一条数据,因为会把 nickname 的值重置为 {{$user.nickname}}
await page.getByLabel('action-Action-Reset-users-').click({ await page.getByLabel('action-Action-Reset-users-').click({
@ -152,6 +152,6 @@ test.describe('filter form', () => {
y: 10, y: 10,
}, },
}); });
await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-table').getByText('No data').last()).toBeVisible();
}); });
}); });

View File

@ -53,7 +53,7 @@ test.describe('AssociationSelect ', () => {
.getByLabel('block-item-CollectionField-test-form-test.b-b') .getByLabel('block-item-CollectionField-test-form-test.b-b')
.getByTestId('select-object-multiple') .getByTestId('select-object-multiple')
.click(); .click();
await expect(page.getByText('No data')).toBeVisible(); await expect(page.getByText('No data').last()).toBeVisible();
// 2. 当给字段 a 选择一个值后,字段 b 的下拉列表中会显示符合条件的值 // 2. 当给字段 a 选择一个值后,字段 b 的下拉列表中会显示符合条件的值
await page await page

View File

@ -34,6 +34,6 @@ test.describe('data scope of component Select', () => {
await page.getByTestId('select-object-multiple').click(); await page.getByTestId('select-object-multiple').click();
await expect(page.getByRole('option', { name: 'admin' })).toBeHidden(); await expect(page.getByRole('option', { name: 'admin' })).toBeHidden();
await expect(page.getByRole('option', { name: 'member' })).toBeHidden(); await expect(page.getByRole('option', { name: 'member' })).toBeHidden();
await expect(page.getByText('No data')).toBeVisible(); await expect(page.getByText('No data').last()).toBeVisible();
}); });
}); });

View File

@ -63,9 +63,11 @@ test.describe('page schema settings', () => {
await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').fill('new tab'); await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').fill('new tab');
// 选择一个图标 // 选择一个图标
await page.getByRole('button', { name: 'Select icon' }).click(); await page.getByRole('button', { name: 'Select icon' }).click();
await expect(page.getByLabel('account-book').locator('svg')).toHaveCount(1);
await page.getByLabel('account-book').locator('svg').click(); await page.getByLabel('account-book').locator('svg').click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByText('new tab')).toBeVisible(); await expect(page.getByText('new tab')).toBeVisible();
await expect(page.getByLabel('account-book').locator('svg')).toHaveCount(1);
await expect(page.getByLabel('account-book').locator('svg')).toBeVisible(); await expect(page.getByLabel('account-book').locator('svg')).toBeVisible();
}); });
}); });
@ -92,10 +94,12 @@ test.describe('tabs schema settings', () => {
await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').click(); await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').click();
await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').fill('new name of page tab'); await page.getByLabel('block-item-Input-Tab name').getByRole('textbox').fill('new name of page tab');
await page.getByRole('button', { name: 'Select icon' }).click(); await page.getByRole('button', { name: 'Select icon' }).click();
await expect(page.getByLabel('account-book').locator('svg')).toHaveCount(1);
await page.getByLabel('account-book').locator('svg').click(); await page.getByLabel('account-book').locator('svg').click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByText('new name of page tab')).toBeVisible(); await expect(page.getByText('new name of page tab')).toBeVisible();
await expect(page.getByLabel('account-book').locator('svg')).toHaveCount(1);
await expect(page.getByLabel('account-book').locator('svg')).toBeVisible(); await expect(page.getByLabel('account-book').locator('svg')).toBeVisible();
}); });

View File

@ -55,7 +55,7 @@ test.describe('add blocks to the popup', () => {
// 通过 Association records 创建一个关系区块 // 通过 Association records 创建一个关系区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Details right' }).hover(); await page.getByRole('menuitem', { name: 'Details right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'Roles' }).click(); await page.getByRole('menuitem', { name: 'Roles' }).click();
await page.getByLabel('schema-initializer-Grid-details:configureFields-roles').hover(); await page.getByLabel('schema-initializer-Grid-details:configureFields-roles').hover();
await page.getByRole('menuitem', { name: 'Role UID' }).click(); await page.getByRole('menuitem', { name: 'Role UID' }).click();
@ -87,7 +87,7 @@ test.describe('add blocks to the popup', () => {
// 通过 Association records 创建关系区块 // 通过 Association records 创建关系区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'manyToMany' }).click(); await page.getByRole('menuitem', { name: 'manyToMany' }).click();
await page.mouse.move(-300, 0); await page.mouse.move(-300, 0);
await page await page
@ -135,7 +135,7 @@ test.describe('add blocks to the popup', () => {
// 通过 Association records 创建一个关系区块 // 通过 Association records 创建一个关系区块
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'Roles' }).click(); await page.getByRole('menuitem', { name: 'Roles' }).click();
await page await page
.getByTestId('drawer-Action.Container-users-View record') .getByTestId('drawer-Action.Container-users-View record')

View File

@ -124,10 +124,13 @@ test.describe('where to open a popup and what can be added to it', () => {
async function addBlock(names: string[]) { async function addBlock(names: string[]) {
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.waitForTimeout(500);
for (let i = 0; i < names.length - 1; i++) { for (let i = 0; i < names.length - 1; i++) {
const name = names[i]; const name = names[i];
await page.getByRole('menuitem', { name }).hover(); await page.getByRole('menuitem', { name }).hover();
await page.waitForTimeout(500);
} }
await expect(page.getByRole('menuitem', { name: names[names.length - 1] })).toHaveCount(1);
await page.getByRole('menuitem', { name: names[names.length - 1] }).click(); await page.getByRole('menuitem', { name: names[names.length - 1] }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
} }
@ -206,13 +209,14 @@ test.describe('where to open a popup and what can be added to it', () => {
await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover(); await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover();
await page.getByRole('menuitem', { name: 'Details' }).hover(); await page.getByRole('menuitem', { name: 'Details' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'Many to one' }).click(); await page.getByRole('menuitem', { name: 'Many to one' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
await expect(page.getByLabel('block-item-CardItem-users-')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-')).toBeVisible();
await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover(); await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Associated records' })).toHaveCount(1);
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).hover();
await page.getByRole('menuitem', { name: 'One to many' }).click(); await page.getByRole('menuitem', { name: 'One to many' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
@ -272,13 +276,14 @@ test.describe('where to open a popup and what can be added to it', () => {
await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover(); await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover();
await page.getByRole('menuitem', { name: 'Details' }).hover(); await page.getByRole('menuitem', { name: 'Details' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'Many to one' }).click(); await page.getByRole('menuitem', { name: 'Many to one' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);
await expect(page.getByLabel('block-item-CardItem-users-')).toBeVisible(); await expect(page.getByLabel('block-item-CardItem-users-')).toBeVisible();
await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover(); await page.getByLabel('schema-initializer-Grid-popup:common:addBlock-general').hover();
await page.getByRole('menuitem', { name: 'Table right' }).hover(); await page.getByRole('menuitem', { name: 'Table right' }).hover();
await expect(page.getByRole('menuitem', { name: 'Associated records' })).toHaveCount(1);
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).hover();
await page.getByRole('menuitem', { name: 'One to many' }).click(); await page.getByRole('menuitem', { name: 'One to many' }).click();
await page.mouse.move(300, 0); await page.mouse.move(300, 0);

View File

@ -44,6 +44,7 @@ test.describe('tabs schema settings', () => {
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByText('Add new with new name')).toBeVisible(); await expect(page.getByText('Add new with new name')).toBeVisible();
await expect(page.getByLabel('account-book').locator('svg')).toHaveCount(1);
await expect(page.getByLabel('account-book').locator('svg')).toBeVisible(); await expect(page.getByLabel('account-book').locator('svg')).toBeVisible();
}); });

View File

@ -55,6 +55,7 @@ test.describe('variable: parent object', () => {
// 1. Use "Current form" and "Parent object" variables in nested subforms and subtables // 1. Use "Current form" and "Parent object" variables in nested subforms and subtables
await page.getByLabel('block-item-CollectionField-collection1-form-collection1.m2m1-m2m1').hover(); await page.getByLabel('block-item-CollectionField-collection1-form-collection1.m2m1-m2m1').hover();
await page.getByRole('menuitem', { name: 'Linkage rules' }).waitFor({ state: 'detached' });
await page await page
.getByLabel('designer-schema-settings-CollectionField-fieldSettings:FormItem-collection1-collection1.m2m1', { .getByLabel('designer-schema-settings-CollectionField-fieldSettings:FormItem-collection1-collection1.m2m1', {
exact: true, exact: true,

View File

@ -10,7 +10,7 @@
export * from './PluginManagerLink'; export * from './PluginManagerLink';
import { PageHeader } from '@ant-design/pro-layout'; import { PageHeader } from '@ant-design/pro-layout';
import { useDebounce } from 'ahooks'; import { useDebounce } from 'ahooks';
import { Button, Col, Divider, Input, List, Modal, Result, Row, Space, Spin, Table, Tabs } from 'antd'; import { Button, Col, Divider, Input, List, Modal, Result, Row, Space, Spin, Table, Tabs, TableProps } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -145,7 +145,7 @@ function BulkEnableButton({ plugins = [] }) {
width: 300, width: 300,
ellipsis: true, ellipsis: true,
}, },
]} ] as TableProps['columns']}
dataSource={items} dataSource={items}
/> />
</Modal> </Modal>

View File

@ -18,7 +18,7 @@ export function useSetAriaLabelForDrawer(visible: boolean) {
if (visible) { if (visible) {
// 因为 Action 是点击后渲染内容,所以需要延迟一下 // 因为 Action 是点击后渲染内容,所以需要延迟一下
setTimeout(() => { setTimeout(() => {
const wrappers = [...document.querySelectorAll('.ant-drawer-wrapper-body')]; const wrappers = [...document.querySelectorAll('.ant-drawer-body')];
const masks = [...document.querySelectorAll('.ant-drawer-mask')]; const masks = [...document.querySelectorAll('.ant-drawer-mask')];
// 如果存在多个 mask最后一个 mask 为当前打开的 maskwrapper 也是同理 // 如果存在多个 mask最后一个 mask 为当前打开的 maskwrapper 也是同理
const currentMask = masks[masks.length - 1]; const currentMask = masks[masks.length - 1];

View File

@ -7,12 +7,13 @@
* For more information, please refer to: https://www.nocobase.com/agreement. * For more information, please refer to: https://www.nocobase.com/agreement.
*/ */
import { CloseCircleFilled } from '@ant-design/icons'; import { CloseCircleFilled, DownOutlined } from '@ant-design/icons';
import { Tag, TreeSelect } from 'antd'; import { Tag, TreeSelect } from 'antd';
import type { DefaultOptionType, TreeSelectProps } from 'rc-tree-select/es/TreeSelect'; import type { TreeSelectProps } from 'rc-tree-select/es/TreeSelect';
import React, { useCallback, useEffect, useMemo, useState } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { CollectionFieldOptions_deprecated, parseCollectionName, useApp, useCompile } from '../../..'; import { CollectionFieldOptions_deprecated, parseCollectionName, useApp, useCompile } from '../../..';
import { DefaultOptionType } from 'antd/es/select';
export type AppendsTreeSelectProps = { export type AppendsTreeSelectProps = {
value: string[] | string; value: string[] | string;
@ -261,6 +262,7 @@ export const AppendsTreeSelect: React.FC<TreeSelectProps & AppendsTreeSelectProp
treeData={treeData} treeData={treeData}
loadData={loadData} loadData={loadData}
{...restProps} {...restProps}
suffixIcon={<DownOutlined />}
/> />
); );
}; };

View File

@ -116,6 +116,7 @@ export const Cascader = withDynamicSchemaProps(
<AntdCascader <AntdCascader
loading={loading} loading={loading}
{...others} {...others}
multiple={others.multiple}
options={field.dataSource} options={field.dataSource}
loadData={loadData} loadData={loadData}
changeOnSelect={isBoolean(changeOnSelectLast) ? !changeOnSelectLast : changeOnSelect} changeOnSelect={isBoolean(changeOnSelectLast) ? !changeOnSelectLast : changeOnSelect}

View File

@ -45,16 +45,16 @@ describe('CollectionSelect', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div
aria-label="block-item-demo title" aria-label="block-item-demo title"
class="nb-block-item nb-form-item css-1elzyjx ant-nb-block-item css-dev-only-do-not-override-1gopndx" class="nb-block-item nb-form-item css-1elzyjx ant-nb-block-item css-dev-only-do-not-override-1rquknz"
role="button" role="button"
> >
<div <div
class="css-1yh5po ant-formily-item ant-formily-item-layout-horizontal ant-formily-item-feedback-layout-loose ant-formily-item-label-align-right ant-formily-item-control-align-left css-dev-only-do-not-override-1gopndx" class="css-1yh5po ant-formily-item ant-formily-item-layout-horizontal ant-formily-item-feedback-layout-loose ant-formily-item-label-align-right ant-formily-item-control-align-left css-dev-only-do-not-override-1rquknz"
> >
<div <div
class="ant-formily-item-label" class="ant-formily-item-label"
@ -84,7 +84,7 @@ describe('CollectionSelect', () => {
class="ant-formily-item-control-content-component" class="ant-formily-item-control-content-component"
> >
<div <div
class="ant-select css-dev-only-do-not-override-1gopndx ant-select-focused ant-select-single ant-select-show-arrow ant-select-show-search" class="ant-select ant-select-outlined css-dev-only-do-not-override-1rquknz ant-select-focused ant-select-single ant-select-show-arrow ant-select-show-search"
data-testid="select-collection" data-testid="select-collection"
role="button" role="button"
> >
@ -98,27 +98,31 @@ describe('CollectionSelect', () => {
class="ant-select-selector" class="ant-select-selector"
> >
<span <span
class="ant-select-selection-search" class="ant-select-selection-wrap"
> >
<input <span
aria-autocomplete="list" class="ant-select-selection-search"
aria-controls="rc_select_TEST_OR_SSR_list" >
aria-expanded="false" <input
aria-haspopup="listbox" aria-autocomplete="list"
aria-owns="rc_select_TEST_OR_SSR_list" aria-controls="rc_select_TEST_OR_SSR_list"
autocomplete="off" aria-expanded="false"
class="ant-select-selection-search-input" aria-haspopup="listbox"
id="rc_select_TEST_OR_SSR" aria-owns="rc_select_TEST_OR_SSR_list"
role="button" autocomplete="off"
type="search" class="ant-select-selection-search-input"
value="" id="rc_select_TEST_OR_SSR"
/> role="button"
</span> type="search"
<span value=""
class="ant-select-selection-item" />
title="Users" </span>
> <span
Users class="ant-select-selection-item"
title="Users"
>
Users
</span>
</span> </span>
</div> </div>
<span <span
@ -182,16 +186,16 @@ describe('CollectionSelect', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div
aria-label="block-item-demo title" aria-label="block-item-demo title"
class="nb-block-item nb-form-item css-1elzyjx ant-nb-block-item css-dev-only-do-not-override-1gopndx" class="nb-block-item nb-form-item css-1elzyjx ant-nb-block-item css-dev-only-do-not-override-1rquknz"
role="button" role="button"
> >
<div <div
class="css-1yh5po ant-formily-item ant-formily-item-layout-horizontal ant-formily-item-feedback-layout-loose ant-formily-item-label-align-right ant-formily-item-control-align-left css-dev-only-do-not-override-1gopndx" class="css-1yh5po ant-formily-item ant-formily-item-layout-horizontal ant-formily-item-feedback-layout-loose ant-formily-item-label-align-right ant-formily-item-control-align-left css-dev-only-do-not-override-1rquknz"
> >
<div <div
class="ant-formily-item-label" class="ant-formily-item-label"
@ -222,7 +226,7 @@ describe('CollectionSelect', () => {
> >
<div> <div>
<span <span
class="ant-tag css-dev-only-do-not-override-1gopndx" class="ant-tag css-dev-only-do-not-override-1rquknz"
> >
Users Users
</span> </span>

View File

@ -26,7 +26,7 @@ describe('ColorPicker', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div
@ -35,7 +35,8 @@ describe('ColorPicker', () => {
style="display: inline-block;" style="display: inline-block;"
> >
<div <div
class="ant-color-picker-trigger css-dev-only-do-not-override-1gopndx" aria-describedby="test-id"
class="ant-color-picker-trigger css-dev-only-do-not-override-1rquknz"
> >
<div <div
class="ant-color-picker-color-block" class="ant-color-picker-color-block"
@ -90,7 +91,7 @@ describe('ColorPicker', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div
@ -99,7 +100,8 @@ describe('ColorPicker', () => {
role="button" role="button"
> >
<div <div
class="ant-color-picker-trigger ant-color-picker-sm css-dev-only-do-not-override-1gopndx ant-color-picker-trigger-disabled" aria-describedby="test-id"
class="ant-color-picker-trigger ant-color-picker-sm css-dev-only-do-not-override-1rquknz ant-color-picker-trigger-disabled"
> >
<div <div
class="ant-color-picker-color-block" class="ant-color-picker-color-block"

View File

@ -39,6 +39,10 @@ const Input = (props: CronProps) => {
> .react-js-cron-select { > .react-js-cron-select {
margin: 0 0.5em 0 0; margin: 0 0.5em 0 0;
.ant-select-selection-overflow {
align-items: center;
flex: initial;
}
} }
} }
} }

View File

@ -7,43 +7,27 @@
* For more information, please refer to: https://www.nocobase.com/agreement. * For more information, please refer to: https://www.nocobase.com/agreement.
*/ */
import { connect, mapProps, mapReadPretty, useField, useFieldSchema, observer } from '@formily/react'; import { connect, mapProps, mapReadPretty, useField, useFieldSchema } from '@formily/react';
import { DatePicker as AntdDatePicker, DatePickerProps as AntdDatePickerProps, Space, Select } from 'antd'; import { DatePicker as AntdDatePicker, Space, Select } from 'antd';
import { RangePickerProps } from 'antd/es/date-picker';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import React, { useState, useEffect, useRef } from 'react'; import React, { useState, useEffect, useRef } from 'react';
import { getPickerFormat, getDateTimeFormat } from '@nocobase/utils/client'; import { getPickerFormat, getDateTimeFormat } from '@nocobase/utils/client';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ReadPretty, ReadPrettyComposed } from './ReadPretty'; import { ReadPretty } from './ReadPretty';
import { getDateRanges, mapDatePicker, mapRangePicker, inferPickerType, isMobile } from './util'; import { getDateRanges, mapDatePicker, mapRangePicker, inferPickerType, isMobile } from './util';
import { useCompile } from '../../'; import { useCompile } from '../../';
import { useVariables, useLocalVariables, isVariable } from '../../../variables'; import { useVariables, useLocalVariables, isVariable } from '../../../variables';
import { autorun } from '@formily/reactive'; import { autorun } from '@formily/reactive';
import { log10 } from 'mathjs';
interface IDatePickerProps { interface IDatePickerProps {
utc?: boolean; utc?: boolean;
} }
type ComposedDatePicker = React.FC<AntdDatePickerProps> & {
ReadPretty?: ReadPrettyComposed['DatePicker'];
RangePicker?: ComposedRangePicker;
FilterWithPicker?: any;
};
type ComposedRangePicker = React.FC<RangePickerProps> & {
ReadPretty?: ReadPrettyComposed['DateRangePicker'];
};
const DatePickerContext = React.createContext<IDatePickerProps>({ utc: true }); const DatePickerContext = React.createContext<IDatePickerProps>({ utc: true });
export const useDatePickerContext = () => React.useContext(DatePickerContext); export const useDatePickerContext = () => React.useContext(DatePickerContext);
export const DatePickerProvider = DatePickerContext.Provider; export const DatePickerProvider = DatePickerContext.Provider;
const InternalDatePicker: ComposedDatePicker = connect( const InternalDatePicker = connect(AntdDatePicker, mapProps(mapDatePicker()), mapReadPretty(ReadPretty.DatePicker));
AntdDatePicker,
mapProps(mapDatePicker()),
mapReadPretty(ReadPretty.DatePicker),
);
const InternalRangePicker = connect( const InternalRangePicker = connect(
AntdDatePicker.RangePicker, AntdDatePicker.RangePicker,
@ -51,7 +35,7 @@ const InternalRangePicker = connect(
mapReadPretty(ReadPretty.DateRangePicker), mapReadPretty(ReadPretty.DateRangePicker),
); );
export const DatePicker: ComposedDatePicker = (props: any) => { export const DatePicker = (props: any) => {
const { utc = true } = useDatePickerContext(); const { utc = true } = useDatePickerContext();
const value = Array.isArray(props.value) ? props.value[0] : props.value; const value = Array.isArray(props.value) ? props.value[0] : props.value;
const { parseVariable } = useVariables() || {}; const { parseVariable } = useVariables() || {};

View File

@ -15,6 +15,6 @@ describe('Details', () => {
it('should render correctly', () => { it('should render correctly', () => {
render(<App1 />); render(<App1 />);
expect(screen.getByText('No data')).toBeInTheDocument(); expect(screen.getAllByText('No data')).toHaveLength(2);
}); });
}); });

View File

@ -56,7 +56,7 @@ describe('IconPicker', () => {
await userEvent.clear(searchInput); await userEvent.clear(searchInput);
await userEvent.type(searchInput, 'abcd'); await userEvent.type(searchInput, 'abcd');
await waitFor(() => { await waitFor(() => {
expect(screen.getByText('No data')).toBeInTheDocument(); expect(screen.getAllByText('No data')).toHaveLength(2);
}); });
}); });
}); });

View File

@ -21,12 +21,12 @@ describe('Pagination', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div> <div>
<ul <ul
class="ant-pagination css-dev-only-do-not-override-1gopndx" class="ant-pagination css-dev-only-do-not-override-1rquknz"
> >
<li <li
aria-disabled="true" aria-disabled="true"
@ -131,7 +131,7 @@ describe('Pagination', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
/> />
</div> </div>

View File

@ -14,7 +14,9 @@ import { TimePicker as AntdTimePicker } from 'antd';
import { TimePickerProps as AntdTimePickerProps, TimeRangePickerProps } from 'antd/es/time-picker'; import { TimePickerProps as AntdTimePickerProps, TimeRangePickerProps } from 'antd/es/time-picker';
import { ReadPretty } from './ReadPretty'; import { ReadPretty } from './ReadPretty';
type ComposedTimePicker = React.FC<AntdTimePickerProps> & { type ComposedTimePicker = React.ForwardRefExoticComponent<
React.PropsWithoutRef<Partial<AntdTimePickerProps>> & React.RefAttributes<unknown>
> & {
RangePicker?: React.FC<TimeRangePickerProps>; RangePicker?: React.FC<TimeRangePickerProps>;
ReadPretty?: React.FC<any>; ReadPretty?: React.FC<any>;
}; };

View File

@ -20,21 +20,20 @@ describe('UnixTimestamp', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div
class="ant-picker css-dev-only-do-not-override-1gopndx" class="ant-picker ant-picker-outlined css-dev-only-do-not-override-1rquknz"
> >
<div <div
class="ant-picker-input" class="ant-picker-input"
> >
<input <input
aria-invalid="false"
autocomplete="off" autocomplete="off"
placeholder="Select date" placeholder="Select date"
readonly=""
size="12" size="12"
title=""
value="" value=""
/> />
<span <span
@ -77,7 +76,7 @@ describe('UnixTimestamp', () => {
expect(container).toMatchInlineSnapshot(` expect(container).toMatchInlineSnapshot(`
<div> <div>
<div <div
class="css-dev-only-do-not-override-1gopndx ant-app" class="css-dev-only-do-not-override-1rquknz ant-app"
style="height: 100%;" style="height: 100%;"
> >
<div <div

View File

@ -432,7 +432,7 @@ export function Input(props: VariableInputProps) {
role="button" role="button"
aria-label="variable-tag" aria-label="variable-tag"
style={{ overflow: 'hidden' }} style={{ overflow: 'hidden' }}
className={cx('ant-input', { 'ant-input-disabled': disabled }, hashId)} className={cx('ant-input ant-input-outlined', { 'ant-input-disabled': disabled }, hashId)}
> >
<Tag color="blue"> <Tag color="blue">
{variableText.map((item, index) => { {variableText.map((item, index) => {

View File

@ -453,7 +453,7 @@ export function TextArea(props) {
style={style} style={style}
className={cx( className={cx(
hashId, hashId,
'ant-input', 'ant-input ant-input-outlined',
{ 'ant-input-disabled': disabled }, { 'ant-input-disabled': disabled },
// NOTE: `pre-wrap` here for avoid the `&nbsp;` (\x160) issue when paste content, we need normal space (\x32). // NOTE: `pre-wrap` here for avoid the `&nbsp;` (\x160) issue when paste content, we need normal space (\x32).
css` css`

View File

@ -65,7 +65,7 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => {
[mode, setValue], [mode, setValue],
); );
const expressStyle = useMemo(() => { const expressStyle = useMemo(() => {
return { minWidth: 150, maxWidth: 430, fontSize: 13 }; return { minWidth: 150, maxWidth: 430, fontSize: 13, display: 'inline-block', verticalAlign: 'middle' };
}, []); }, []);
const handleChangeOfExpress = useCallback( const handleChangeOfExpress = useCallback(
(value) => { (value) => {
@ -116,14 +116,14 @@ export const ValueDynamicComponent = (props: ValueDynamicComponentProps) => {
scope={compatScope} scope={compatScope}
style={textAreaStyle} style={textAreaStyle}
/> />
<> <div>
<span style={{ marginLeft: '.25em' }} className={'ant-formily-item-extra'}> <span style={{ marginLeft: '.25em' }} className={'ant-formily-item-extra'}>
{t('Syntax references')}: {t('Syntax references')}:
</span> </span>
<a href="https://formulajs.info/functions/" target="_blank" rel="noreferrer"> <a href="https://formulajs.info/functions/" target="_blank" rel="noreferrer">
Formula.js Formula.js
</a> </a>
</> </div>
</div> </div>
), ),
}; };

View File

@ -593,6 +593,7 @@ export const SchemaSettingsCascaderItem: FC<SchemaSettingsCascaderItemProps> = (
options={options} options={options}
style={{ textAlign: 'right', minWidth: 100 }} style={{ textAlign: 'right', minWidth: 100 }}
{...props} {...props}
multiple={props.multiple}
/> />
</div> </div>
</SchemaSettingsItem> </SchemaSettingsItem>

View File

@ -8,7 +8,7 @@
*/ */
import { error } from '@nocobase/utils/client'; import { error } from '@nocobase/utils/client';
import { ItemType } from 'antd/es/menu/hooks/useItems'; import { ItemType } from 'antd/es/menu/interface';
import React, { createContext, useCallback, useContext, useMemo, useRef } from 'react'; import React, { createContext, useCallback, useContext, useMemo, useRef } from 'react';
type menuItemsKey = type menuItemsKey =

View File

@ -16,6 +16,9 @@ import React, { useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { DropdownVisibleContext, usePlugin, useToken } from '..'; import { DropdownVisibleContext, usePlugin, useToken } from '..';
import { useCurrentAppInfo } from '../appInfo/CurrentAppInfoProvider'; import { useCurrentAppInfo } from '../appInfo/CurrentAppInfoProvider';
import { MenuItemType, MenuDividerType } from 'antd/es/menu/interface';
type SettingsMenuItemType = MenuItemType | MenuDividerType;
/** /**
* @note If you want to change here, Note the Setting block on the mobile side * @note If you want to change here, Note the Setting block on the mobile side
@ -30,7 +33,7 @@ const SettingsMenu: React.FC<{
// 是否是简体中文 // 是否是简体中文
const isSimplifiedChinese = data?.data?.lang === 'zh-CN'; const isSimplifiedChinese = data?.data?.lang === 'zh-CN';
const items = [ const items: SettingsMenuItemType[] = [
{ {
key: 'nocobase', key: 'nocobase',
disabled: true, disabled: true,

View File

@ -28,7 +28,7 @@
"@types/react-dom": "^18.0.0", "@types/react-dom": "^18.0.0",
"react-router-dom": "6.28.1", "react-router-dom": "6.28.1",
"react-router": "6.28.1", "react-router": "6.28.1",
"antd": "5.12.8", "antd": "5.24.2",
"rollup": "4.24.0" "rollup": "4.24.0"
}, },
"dependencies": { "dependencies": {

View File

@ -1395,6 +1395,7 @@ export async function expectSettingsMenu({
}: ExpectSettingsMenuParams) { }: ExpectSettingsMenuParams) {
await page.waitForTimeout(100); await page.waitForTimeout(100);
await showMenu(); await showMenu();
await page.waitForTimeout(2000);
for (const option of supportedOptions) { for (const option of supportedOptions) {
await expect(page.getByRole('menuitem', { name: option, exact: option === 'Edit' })).toBeVisible(); await expect(page.getByRole('menuitem', { name: option, exact: option === 'Edit' })).toBeVisible();
} }

View File

@ -134,7 +134,7 @@ test('plugin settings permissions', async ({ page, mockPage, mockRole, updateRol
await mockPage().goto(); await mockPage().goto();
//新建角色并切换到新角色 //新建角色并切换到新角色
const roleData = await mockRole({ const roleData = await mockRole({
snippets: ['pm', 'pm.*', '!pm.auth.authenticators', '!pm.collection-manager', '!pm.collection-manager.collections'], snippets: ['pm', 'pm.*', '!pm.data-source-manager*'],
}); });
await page.evaluate((roleData) => { await page.evaluate((roleData) => {
window.localStorage.setItem('NOCOBASE_ROLE', roleData.name); window.localStorage.setItem('NOCOBASE_ROLE', roleData.name);
@ -145,16 +145,15 @@ test('plugin settings permissions', async ({ page, mockPage, mockRole, updateRol
await expect(page.getByLabel('auth')).not.toBeVisible(); await expect(page.getByLabel('auth')).not.toBeVisible();
await expect(page.getByLabel('collection-manager')).not.toBeVisible(); await expect(page.getByLabel('collection-manager')).not.toBeVisible();
await page.getByRole('link', { name: 'Users & Permissions' }).click(); await page.getByRole('link', { name: 'Users & Permissions' }).click();
await expect(page.getByRole('menuitem', { name: 'login Authentication' })).not.toBeVisible(); await expect(page.getByRole('menuitem', { name: 'Data sources' })).not.toBeVisible();
await expect(page.getByRole('menuitem', { name: 'database Collection manager' })).not.toBeVisible();
await updateRole({ await updateRole({
name: roleData.name, name: roleData.name,
snippets: ['pm', 'pm.*', 'pm.auth.authenticators'], snippets: ['pm', 'pm.*'],
}); });
await page.reload(); await page.reload();
await page.getByTestId('plugin-settings-button').hover(); await page.getByTestId('plugin-settings-button').hover();
await expect(page.getByRole('link', { name: 'Users & Permissions' })).toBeVisible(); await expect(page.getByRole('link', { name: 'Users & Permissions' })).toBeVisible();
await expect(page.getByRole('link', { name: 'Authentication' })).toBeVisible(); await expect(page.getByRole('link', { name: 'Authentication' })).toBeVisible();
await page.getByRole('link', { name: 'Users & Permissions' }).click(); await page.getByRole('link', { name: 'Users & Permissions' }).click();
await expect(page.getByRole('menuitem', { name: 'login Authentication' })).toBeVisible(); await expect(page.getByRole('menuitem', { name: 'Data sources' })).toBeVisible();
}); });

View File

@ -18,7 +18,7 @@ import {
useRequest, useRequest,
} from '@nocobase/client'; } from '@nocobase/client';
import { useMemoizedFn } from 'ahooks'; import { useMemoizedFn } from 'ahooks';
import { Checkbox, message, Table } from 'antd'; import { Checkbox, message, Table, TableProps } from 'antd';
import { uniq } from 'lodash'; import { uniq } from 'lodash';
import React, { createContext, FC, useContext, useEffect, useMemo, useState } from 'react'; import React, { createContext, FC, useContext, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -310,7 +310,7 @@ export const MenuPermissions: React.FC<{
return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />; return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />;
}, },
}, },
]} ] as TableProps['columns']}
dataSource={translateTitle(items, t, compile)} dataSource={translateTitle(items, t, compile)}
/> />
</> </>

View File

@ -7,8 +7,8 @@
* For more information, please refer to: https://www.nocobase.com/agreement. * For more information, please refer to: https://www.nocobase.com/agreement.
*/ */
import { useAPIClient, useApp, useCompile, useCollectionRecord, useRequest } from '@nocobase/client'; import { useAPIClient, useApp, useCompile, useRequest } from '@nocobase/client';
import { Checkbox, message, Table } from 'antd'; import { Checkbox, message, Table, TableProps } from 'antd';
import React, { useContext, useMemo, useState } from 'react'; import React, { useContext, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { flatMap } from 'lodash'; import { flatMap } from 'lodash';
@ -150,7 +150,7 @@ export const PluginPermissions: React.FC<{
return <Checkbox checked={checked} onChange={() => handleChange(checked, record)} />; return <Checkbox checked={checked} onChange={() => handleChange(checked, record)} />;
}, },
}, },
]} ] as TableProps['columns']}
dataSource={settings dataSource={settings
.filter((v) => { .filter((v) => {
return v.isTopLevel !== false; return v.isTopLevel !== false;

View File

@ -10,14 +10,8 @@
import { FormItem, FormLayout } from '@formily/antd-v5'; import { FormItem, FormLayout } from '@formily/antd-v5';
import { ArrayField } from '@formily/core'; import { ArrayField } from '@formily/core';
import { connect, useField, useForm } from '@formily/react'; import { connect, useField, useForm } from '@formily/react';
import { import { useCollectionManager_deprecated, useCompile, useRecord } from '@nocobase/client';
useCollectionManager, import { Checkbox, Table, Tag, TableProps } from 'antd';
useCollectionManager_deprecated,
useCompile,
useCollectionRecord,
useRecord,
} from '@nocobase/client';
import { Checkbox, Table, Tag } from 'antd';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import React, { createContext } from 'react'; import React, { createContext } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -153,7 +147,7 @@ export const RolesResourcesActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let enabled = false; let enabled = false;
let scope = null; let scope = null;
@ -229,7 +223,7 @@ export const RolesResourcesActions = connect((props) => {
), ),
}; };
}), }),
]} ] as TableProps['columns']}
/> />
</FormItem> </FormItem>
</FormLayout> </FormLayout>

View File

@ -9,7 +9,7 @@
import { ArrayField } from '@formily/core'; import { ArrayField } from '@formily/core';
import { connect, useField } from '@formily/react'; import { connect, useField } from '@formily/react';
import { Checkbox, Select, Table, Tag } from 'antd'; import { Checkbox, Select, Table, Tag, TableProps } from 'antd';
import React from 'react'; import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useCompile } from '@nocobase/client'; import { useCompile } from '@nocobase/client';
@ -110,7 +110,7 @@ export const StrategyActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let scope = 'all'; let scope = 'all';
let enabled = false; let enabled = false;

View File

@ -34,8 +34,9 @@ test.describe('bulk edit action setting', () => {
await page.getByLabel('block-item-BulkEditField-general-form-general.singleLineText').click(); await page.getByLabel('block-item-BulkEditField-general-form-general.singleLineText').click();
await page.getByText('Clear').click(); await page.getByText('Clear').click();
await page.getByLabel('block-item-BulkEditField-general-form-general.startDatetime').click(); await page.getByLabel('block-item-BulkEditField-general-form-general.startDatetime').click();
await page.getByRole('option', { name: 'Remains the same' }).locator('div').click(); await page.getByRole('option', { name: 'Remains the same' }).locator('div').last().click();
await page.getByLabel('block-item-BulkEditField-general-form-general.percent').click(); await page.getByLabel('block-item-BulkEditField-general-form-general.percent').click();
await expect(page.getByRole('option', { name: 'Changed to' }).locator('div')).toHaveCount(1);
await page.getByRole('option', { name: 'Changed to' }).locator('div').click(); await page.getByRole('option', { name: 'Changed to' }).locator('div').click();
await page.getByRole('spinbutton').click(); await page.getByRole('spinbutton').click();
await page.getByRole('spinbutton').fill('0'); await page.getByRole('spinbutton').fill('0');

View File

@ -21,7 +21,7 @@ test.describe('popup of duplicate', () => {
await page.getByLabel('drawer-Action.Container-users-Duplicate-mask').click(); await page.getByLabel('drawer-Action.Container-users-Duplicate-mask').click();
// click other tab, then open the bulk edit drawer, the Add block in drawer should be visible // click other tab, then open the bulk edit drawer, the Add block in drawer should be visible
await page.getByText('new tab').click(); await page.getByText('new tab').last().click();
await page.getByLabel('action-Action.Link-Duplicate').click(); await page.getByLabel('action-Action.Link-Duplicate').click();
await expect(page.getByLabel('block-item-Markdown.Void-').getByText('Duplicate markdown 2.')).toBeVisible(); await expect(page.getByLabel('block-item-Markdown.Void-').getByText('Duplicate markdown 2.')).toBeVisible();
}); });

View File

@ -10,7 +10,22 @@
import { InboxOutlined, PlusOutlined, ReloadOutlined, UploadOutlined } from '@ant-design/icons'; import { InboxOutlined, PlusOutlined, ReloadOutlined, UploadOutlined } from '@ant-design/icons';
import { FormItem } from '@formily/antd-v5'; import { FormItem } from '@formily/antd-v5';
import { Checkbox, DatePicker, useAPIClient, useCompile } from '@nocobase/client'; import { Checkbox, DatePicker, useAPIClient, useCompile } from '@nocobase/client';
import { Alert, App, Button, Card, Divider, Modal, Space, Spin, Table, Tabs, Upload, UploadProps, message } from 'antd'; import {
Alert,
App,
Button,
Card,
Divider,
Modal,
Space,
Spin,
Table,
Tabs,
Upload,
UploadProps,
message,
TableProps,
} from 'antd';
import { saveAs } from 'file-saver'; import { saveAs } from 'file-saver';
import React, { useEffect, useMemo, useState } from 'react'; import React, { useEffect, useMemo, useState } from 'react';
import { useDuplicatorTranslation } from './locale'; import { useDuplicatorTranslation } from './locale';
@ -88,14 +103,14 @@ const LearnMore: any = (props: { collectionsData?: any; isBackup?: boolean }) =>
const handleCancel = () => { const handleCancel = () => {
setIsModalOpen(false); setIsModalOpen(false);
}; };
const columns = [ const columns: TableProps['columns'] = [
{ {
title: t('Collection'), title: t('Collection'),
dataIndex: 'collection', dataIndex: 'collection',
key: 'collection', key: 'collection',
render: (_, data) => { render: (_, data) => {
const title = compile(data.title); const title = compile(data.title);
const name = data.name const name = data.name;
return name === title ? title : ( return name === title ? title : (
<div> <div>
{data.name} {data.name}
@ -469,7 +484,7 @@ export const BackupAndRestoreList = () => {
</Space> </Space>
), ),
}, },
]} ] as TableProps['columns']}
/> />
</Card> </Card>
</div> </div>

View File

@ -33,7 +33,7 @@ test.describe('where can be added', () => {
await page.getByLabel('action-Action.Link-View-view-').first().click(); await page.getByLabel('action-Action.Link-View-view-').first().click();
await page.getByLabel('schema-initializer-Grid-popup').hover(); await page.getByLabel('schema-initializer-Grid-popup').hover();
await page.getByRole('menuitem', { name: 'Calendar right' }).hover(); await page.getByRole('menuitem', { name: 'Calendar right' }).hover();
await page.getByRole('menuitem', { name: 'Associated records' }).hover(); await page.getByRole('menuitem', { name: 'Associated records' }).last().hover();
await page.getByRole('menuitem', { name: 'manyToMany' }).click(); await page.getByRole('menuitem', { name: 'manyToMany' }).click();
await page.getByLabel('block-item-Select-Title field').getByTestId('select-single').click(); await page.getByLabel('block-item-Select-Title field').getByTestId('select-single').click();

View File

@ -62,12 +62,12 @@ test.describe('form item & edit form', () => {
expectEditable: async () => { expectEditable: async () => {
// 默认情况下显示颜色选择框 // 默认情况下显示颜色选择框
await page.getByLabel('color-picker-normal').hover(); await page.getByLabel('color-picker-normal').hover();
await expect(page.getByRole('button', { name: 'right Recommended', exact: true })).toBeVisible(); await expect(page.getByRole('button', { name: 'expanded Recommended', exact: true })).toBeVisible();
}, },
expectReadonly: async () => { expectReadonly: async () => {
// 只读模式下,不会显示颜色弹窗 // 只读模式下,不会显示颜色弹窗
await page.getByLabel('color-picker-normal').hover(); await page.getByLabel('color-picker-normal').hover();
await expect(page.getByRole('button', { name: 'right Recommended', exact: true })).not.toBeVisible(); await expect(page.getByRole('button', { name: 'expanded Recommended', exact: true })).not.toBeVisible();
}, },
expectEasyReading: async () => { expectEasyReading: async () => {
await expect(page.getByLabel('color-picker-read-pretty')).toBeVisible(); await expect(page.getByLabel('color-picker-read-pretty')).toBeVisible();

View File

@ -47,12 +47,12 @@ test.describe('form item & create form', () => {
expectEditable: async () => { expectEditable: async () => {
// 默认情况下显示颜色选择框 // 默认情况下显示颜色选择框
await page.getByLabel('color-picker-normal').hover(); await page.getByLabel('color-picker-normal').hover();
await expect(page.getByRole('button', { name: 'right Recommended', exact: true })).toBeVisible(); await expect(page.getByRole('button', { name: 'expanded Recommended', exact: true })).toBeVisible();
}, },
expectReadonly: async () => { expectReadonly: async () => {
// 只读模式下,不会显示颜色弹窗 // 只读模式下,不会显示颜色弹窗
await page.getByLabel('color-picker-normal').hover(); await page.getByLabel('color-picker-normal').hover();
await expect(page.getByRole('button', { name: 'right Recommended', exact: true })).not.toBeVisible(); await expect(page.getByRole('button', { name: 'expanded Recommended', exact: true })).not.toBeVisible();
}, },
expectEasyReading: async () => { expectEasyReading: async () => {
await expect(page.getByLabel('color-picker-read-pretty')).toBeVisible(); await expect(page.getByLabel('color-picker-read-pretty')).toBeVisible();

View File

@ -42,7 +42,7 @@ export async function testEditDescription(page: Page) {
await page.getByLabel('block-item-Input.TextArea-').getByRole('textbox').click(); await page.getByLabel('block-item-Input.TextArea-').getByRole('textbox').click();
await page.getByLabel('block-item-Input.TextArea-').getByRole('textbox').fill('testing edit description'); await page.getByLabel('block-item-Input.TextArea-').getByRole('textbox').fill('testing edit description');
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).click();
await expect(page.getByText('testing edit description')).toBeVisible(); await expect(page.getByText('testing edit description').last()).toBeVisible();
} }
export async function testRequired(page: Page) { export async function testRequired(page: Page) {

View File

@ -267,7 +267,7 @@ const AddFieldAction = (props) => {
} }
if (record.template === 'view') { if (record.template === 'view') {
return { return {
type: 'group', type: 'group' as const,
label: compile(option.label), label: compile(option.label),
title: compile(option.label), title: compile(option.label),
key: option.label, key: option.label,
@ -284,7 +284,7 @@ const AddFieldAction = (props) => {
}; };
} }
return { return {
type: 'group', type: 'group' as const,
label: compile(option.label), label: compile(option.label),
title: compile(option.label), title: compile(option.label),
key: option.label, key: option.label,

View File

@ -10,7 +10,7 @@
import { FormItem, FormLayout } from '@formily/antd-v5'; import { FormItem, FormLayout } from '@formily/antd-v5';
import { ArrayField } from '@formily/core'; import { ArrayField } from '@formily/core';
import { connect, useField } from '@formily/react'; import { connect, useField } from '@formily/react';
import { Checkbox, Table, Tag } from 'antd'; import { Checkbox, Table, Tag, TableProps } from 'antd';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import React, { createContext, useContext } from 'react'; import React, { createContext, useContext } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -142,7 +142,7 @@ export const RolesResourcesActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let enabled = false; let enabled = false;
let scope = null; let scope = null;
@ -217,7 +217,7 @@ export const RolesResourcesActions = connect((props) => {
), ),
}; };
}), }),
]} ] as TableProps['columns']}
/> />
</FormItem> </FormItem>
</FormLayout> </FormLayout>

View File

@ -14,6 +14,7 @@ import React from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useCompile } from '@nocobase/client'; import { useCompile } from '@nocobase/client';
import { useAvailableActions } from './DataSourceTable'; import { useAvailableActions } from './DataSourceTable';
import { TableProps } from 'antd/es/table';
const toScopes = (value) => { const toScopes = (value) => {
if (!value) { if (!value) {
@ -109,7 +110,7 @@ export const StrategyActions = connect((props) => {
/> />
), ),
}, },
]} ] as TableProps['columns']}
dataSource={availableActions?.map((item) => { dataSource={availableActions?.map((item) => {
let scope = 'all'; let scope = 'all';
let enabled = false; let enabled = false;

View File

@ -17,16 +17,16 @@ test('BlockInitializers should add gantt block', async ({ page, mockPage, mockCo
await page.getByRole('menuitem', { name: 'Gantt right' }).click(); await page.getByRole('menuitem', { name: 'Gantt right' }).click();
await page.getByRole('menuitem', { name: 'General' }).click(); await page.getByRole('menuitem', { name: 'General' }).click();
await page.getByLabel('block-item-Select-Title field').click(); await page.getByLabel('block-item-Select-Title field').click();
await page.getByRole('option', { name: 'Single line text2' }).click(); await page.getByRole('option', { name: 'Single line text2' }).last().click();
await page.getByLabel('block-item-Select-Start date field').click(); await page.getByLabel('block-item-Select-Start date field').click();
await page.getByRole('option', { name: 'Start date time2' }).click(); await page.getByRole('option', { name: 'Start date time2' }).click();
await page.getByLabel('block-item-Select-End date field').click(); await page.getByLabel('block-item-Select-End date field').click();
await page.getByRole('option', { name: 'End date time2' }).click(); await page.getByRole('option', { name: 'End date time2' }).last().click();
await page.getByLabel('block-item-Select-Progress field').click(); await page.getByLabel('block-item-Select-Progress field').click();
await page.getByRole('option', { name: 'Percent2' }).click(); await page.getByRole('option', { name: 'Percent2' }).last().click();
await page.getByLabel('block-item-Select-Time scale').click(); await page.getByLabel('block-item-Select-Time scale').click();
await page.getByRole('option', { name: 'Day', exact: true }).click(); await page.getByRole('option', { name: 'Day', exact: true }).last().click();
await page.getByRole('button', { name: 'OK', exact: true }).click(); await page.getByRole('button', { name: 'OK', exact: true }).last().click();
await expect(page.getByLabel('block-item-gantt')).toBeVisible(); await expect(page.getByLabel('block-item-gantt')).toBeVisible();
}); });

View File

@ -13,7 +13,7 @@ import { uid } from '@formily/shared';
import { SchemaComponent, useAPIClient, useCompile, useRequest } from '@nocobase/client'; import { SchemaComponent, useAPIClient, useCompile, useRequest } from '@nocobase/client';
import { RolesManagerContext } from '@nocobase/plugin-acl/client'; import { RolesManagerContext } from '@nocobase/plugin-acl/client';
import { useMemoizedFn } from 'ahooks'; import { useMemoizedFn } from 'ahooks';
import { Checkbox, message, Table } from 'antd'; import { Checkbox, message, Table, TableProps } from 'antd';
import _, { uniq } from 'lodash'; import _, { uniq } from 'lodash';
import React, { useContext, useEffect, useMemo, useState } from 'react'; import React, { useContext, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -258,7 +258,7 @@ export const MenuPermissions: React.FC<{
return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />; return <Checkbox checked={checked} onChange={() => handleChange(checked, schema)} />;
}, },
}, },
]} ] as TableProps['columns']}
dataSource={translateTitle(items, t, compile)} dataSource={translateTitle(items, t, compile)}
/> />
</> </>

View File

@ -40,6 +40,7 @@ test.describe('mobile permissions', () => {
await createNewPage('root', page); await createNewPage('root', page);
// expect: the new page should be visible // expect: the new page should be visible
await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'root' })).toHaveCount(1);
await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'root' })).toBeVisible(); await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'root' })).toBeVisible();
// change the user's role to admin // change the user's role to admin
@ -65,6 +66,7 @@ test.describe('mobile permissions', () => {
await page.getByRole('button', { name: 'Submit' }).click(); await page.getByRole('button', { name: 'Submit' }).click();
// expect: the new page should be visible // expect: the new page should be visible
await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'admin' })).toHaveCount(1);
await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'admin' })).toBeVisible(); await expect(page.getByLabel('block-item-MobileTabBar.Page').filter({ hasText: 'admin' })).toBeVisible();
// change the user's role to admin, and then change the menu permission // change the user's role to admin, and then change the menu permission

View File

@ -365,7 +365,7 @@ export const TableTransfer = connect((props) => {
dataSource={addedDataSource.dataSource} dataSource={addedDataSource.dataSource}
// dataSource={collections.filter((collection) => !selected.includes(collection.name))} // dataSource={collections.filter((collection) => !selected.includes(collection.name))}
scroll={{ y: 'calc(100vh - 260px)' }} scroll={{ y: 'calc(100vh - 260px)' }}
onRow={({ name }) => ({ onRow={({ name }: { name: string }) => ({
onClick: () => { onClick: () => {
const removing = findRemovable(name); const removing = findRemovable(name);
const change = () => { const change = () => {

View File

@ -18,7 +18,7 @@
import React, { useEffect, useCallback } from 'react'; import React, { useEffect, useCallback } from 'react';
import { reaction } from '@formily/reactive'; import { reaction } from '@formily/reactive';
import { Badge, Button, ConfigProvider, Drawer, Tooltip, notification } from 'antd'; import { Badge, Button, ConfigProvider, Drawer, Tooltip, notification, theme } from 'antd';
import { CloseOutlined } from '@ant-design/icons'; import { CloseOutlined } from '@ant-design/icons';
import { createStyles } from 'antd-style'; import { createStyles } from 'antd-style';
import { Icon } from '@nocobase/client'; import { Icon } from '@nocobase/client';
@ -51,6 +51,7 @@ const InnerInbox = (props) => {
const { styles } = useStyles(); const { styles } = useStyles();
const ctx = useCurrentUserContext(); const ctx = useCurrentUserContext();
const currUserId = ctx.data?.data?.id; const currUserId = ctx.data?.data?.id;
const { token } = theme.useToken();
useEffect(() => { useEffect(() => {
updateUnreadMsgsCount(); updateUnreadMsgsCount();
@ -88,12 +89,7 @@ const InnerInbox = (props) => {
document.removeEventListener('visibilitychange', onVisibilityChange); document.removeEventListener('visibilitychange', onVisibilityChange);
}; };
}, []); }, []);
const DrawerTitle = <div style={{ padding: '0' }}>{t('Message')}</div>; const DrawerTitle = <div style={{ padding: '0', paddingLeft: token.padding }}>{t('Message')}</div>;
const CloseIcon = (
<div style={{ marginLeft: '15px' }}>
<CloseOutlined />
</div>
);
useEffect(() => { useEffect(() => {
const dispose = reaction( const dispose = reaction(
() => liveSSEObs.value, () => liveSSEObs.value,
@ -145,11 +141,15 @@ const InnerInbox = (props) => {
<Drawer <Drawer
title={DrawerTitle} title={DrawerTitle}
open={inboxVisible.value} open={inboxVisible.value}
closeIcon={CloseIcon}
width={900} width={900}
onClose={() => { onClose={() => {
inboxVisible.value = false; inboxVisible.value = false;
}} }}
styles={{
header: {
paddingLeft: token.paddingMD,
},
}}
> >
<InboxContent /> <InboxContent />
</Drawer> </Drawer>

View File

@ -15,7 +15,6 @@
"@formily/react": "2.x", "@formily/react": "2.x",
"@formily/shared": "2.x", "@formily/shared": "2.x",
"antd": "5.x", "antd": "5.x",
"rc-tree-select": "5.20.0",
"react": "18.x", "react": "18.x",
"react-i18next": "^11.15.1" "react-i18next": "^11.15.1"
}, },
@ -30,4 +29,4 @@
"keywords": [ "keywords": [
"Collection fields" "Collection fields"
] ]
} }

View File

@ -8,7 +8,7 @@
*/ */
import { CloseOutlined, PlusOutlined } from '@ant-design/icons'; import { CloseOutlined, PlusOutlined } from '@ant-design/icons';
import { Button, Dropdown, Menu } from 'antd'; import { Button, Dropdown, Menu, MenuProps } from 'antd';
import classNames from 'classnames'; import classNames from 'classnames';
import type { FC, ReactNode } from 'react'; import type { FC, ReactNode } from 'react';
import React, { useMemo } from 'react'; import React, { useMemo } from 'react';
@ -208,7 +208,7 @@ const ThemeSelect: FC<ThemeSelectProps> = (props) => {
<Dropdown <Dropdown
placement="bottomRight" placement="bottomRight"
trigger={['click']} trigger={['click']}
overlay={<Menu items={dropdownItems} />} overlay={<Menu items={dropdownItems as MenuProps['items']} />}
overlayClassName={classNames('previewer-theme-select-dropdown', hashId)} overlayClassName={classNames('previewer-theme-select-dropdown', hashId)}
> >
<Button type="primary" shape="circle" className="previewer-theme-select-add-btn" icon={<PlusOutlined />} /> <Button type="primary" shape="circle" className="previewer-theme-select-add-btn" icon={<PlusOutlined />} />

View File

@ -18,7 +18,7 @@ const initialTargetKeys = mockData.filter((item) => +item.key > 10).map((item) =
const Demo = () => { const Demo = () => {
const [targetKeys, setTargetKeys] = useState(initialTargetKeys); const [targetKeys, setTargetKeys] = useState(initialTargetKeys);
const [selectedKeys, setSelectedKeys] = useState<string[]>([]); const [selectedKeys, setSelectedKeys] = useState<React.Key[]>([]);
const onScroll = () => {}; const onScroll = () => {};
return ( return (
<Transfer <Transfer

View File

@ -25,7 +25,7 @@ const initialTargetKeys = mockData.filter((item) => +item.key > 10).map((item) =
const Demo = () => { const Demo = () => {
const [targetKeys, setTargetKeys] = useState(initialTargetKeys); const [targetKeys, setTargetKeys] = useState(initialTargetKeys);
const [selectedKeys, setSelectedKeys] = useState<string[]>([]); const [selectedKeys, setSelectedKeys] = useState<React.Key[]>([]);
const onScroll = () => {}; const onScroll = () => {};
return ( return (
<Transfer <Transfer

View File

@ -17,7 +17,7 @@ const initialTargetKeys = mockData.filter((item) => +item.key > 10).map((item) =
const Demo = () => { const Demo = () => {
const [targetKeys, setTargetKeys] = useState(initialTargetKeys); const [targetKeys, setTargetKeys] = useState(initialTargetKeys);
const [selectedKeys, setSelectedKeys] = useState<string[]>(['1', '2']); const [selectedKeys, setSelectedKeys] = useState<React.Key[]>(['1', '2']);
const onScroll = () => {}; const onScroll = () => {};
return ( return (
<Transfer <Transfer

View File

@ -25,7 +25,7 @@ const initialTargetKeys = mockData.filter((item) => +item.key > 10).map((item) =
const Demo = () => { const Demo = () => {
const [targetKeys, setTargetKeys] = useState(initialTargetKeys); const [targetKeys, setTargetKeys] = useState(initialTargetKeys);
const [selectedKeys, setSelectedKeys] = useState<string[]>([]); const [selectedKeys, setSelectedKeys] = useState<React.Key[]>([]);
const onScroll = () => {}; const onScroll = () => {};
return ( return (
<Transfer <Transfer

View File

@ -605,7 +605,7 @@ const TokenContent: FC<ColorTokenContentProps> = ({
activeKey={activeGroup} activeKey={activeGroup}
expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 450 : 360} style={{ fontSize: 12 }} />} expandIcon={({ isActive }) => <CaretRightOutlined rotate={isActive ? 450 : 360} style={{ fontSize: 12 }} />}
onChange={(key) => { onChange={(key) => {
onActiveGroupChange(key as string); onActiveGroupChange(key as unknown as string);
}} }}
> >
{category.groups.map((group, index) => { {category.groups.map((group, index) => {

View File

@ -30,6 +30,7 @@ import { RadioWithTooltip } from './components';
import { uid } from '@nocobase/utils/client'; import { uid } from '@nocobase/utils/client';
import { Button, Dropdown } from 'antd'; import { Button, Dropdown } from 'antd';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import { MenuItemGroupType } from 'antd/es/menu/interface';
interface AddButtonProps { interface AddButtonProps {
upstream; upstream;
@ -49,7 +50,7 @@ export function AddButton(props: AddButtonProps) {
const groups = useMemo(() => { const groups = useMemo(() => {
return groupOptions return groupOptions
.map((group) => { .map((group): MenuItemGroupType => {
const groupInstructions = instructionList.filter( const groupInstructions = instructionList.filter(
(item) => (item) =>
item.group === group.key && item.group === group.key &&

View File

@ -560,6 +560,7 @@ test('Collection event add data trigger, determine trigger node integer variable
`Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}`, `Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}`,
); );
await page.getByLabel('variable-button').nth(1).click(); await page.getByLabel('variable-button').nth(1).click();
await expect(page.getByRole('menuitemcheckbox', { name: 'Node result' })).toHaveCount(1);
await page.getByRole('menuitemcheckbox', { name: 'Node result' }).click(); await page.getByRole('menuitemcheckbox', { name: 'Node result' }).click();
await page.getByRole('menuitemcheckbox', { name: preQueryRecordNodeTitle }).click(); await page.getByRole('menuitemcheckbox', { name: preQueryRecordNodeTitle }).click();
await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click(); await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click();

View File

@ -191,6 +191,8 @@ test('Collection event add data trigger, filter single line text field is trigge
await page.getByLabel('variable-button').click(); await page.getByLabel('variable-button').click();
await page.getByRole('menuitemcheckbox', { name: 'Trigger variables' }).click(); await page.getByRole('menuitemcheckbox', { name: 'Trigger variables' }).click();
await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click(); await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click();
await page.getByRole('menuitemcheckbox', { name: 'Trigger variables' }).click();
await page.getByRole('menuitemcheckbox', { name: 'Trigger data' }).click();
await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click(); await page.getByRole('menuitemcheckbox', { name: triggerNodeFieldDisplayName }).click();
await expect(page.getByLabel('block-item-Filter-workflows-Filter').getByLabel('variable-tag')).toHaveText( await expect(page.getByLabel('block-item-Filter-workflows-Filter').getByLabel('variable-tag')).toHaveText(
`Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}`, `Trigger variables / Trigger data / ${triggerNodeFieldDisplayName}`,

635
yarn.lock
View File

@ -210,14 +210,23 @@
dependencies: dependencies:
"@ctrl/tinycolor" "^3.4.0" "@ctrl/tinycolor" "^3.4.0"
"@ant-design/colors@^7.0.2": "@ant-design/colors@^7.2.0":
version "7.0.2" version "7.2.0"
resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.0.2.tgz#c5c753a467ce8d86ba7ca4736d2c01f599bb5492" resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.0.tgz#80d7325d20463f09c7839d28da630043dd5c263a"
integrity sha512-7KJkhTiPiLHSu+LmMJnehfJ6242OCxSlR3xHVBecYxnMW8MS/878NXct1GqYARyL59fyeFdKRxXTfvR9SnDgJg== integrity sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==
dependencies: dependencies:
"@ctrl/tinycolor" "^3.6.1" "@ant-design/fast-color" "^2.0.6"
"@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.18.2", "@ant-design/cssinjs@^1.21.1", "@ant-design/cssinjs@^1.3.1": "@ant-design/cssinjs-utils@^1.1.3":
version "1.1.3"
resolved "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz#5dd79126057920a6992d57b38dd84e2c0b707977"
integrity sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==
dependencies:
"@ant-design/cssinjs" "^1.21.0"
"@babel/runtime" "^7.23.2"
rc-util "^5.38.0"
"@ant-design/cssinjs@^1", "@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.21.1", "@ant-design/cssinjs@^1.3.1":
version "1.21.1" version "1.21.1"
resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230" resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230"
integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg== integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==
@ -230,6 +239,26 @@
rc-util "^5.35.0" rc-util "^5.35.0"
stylis "^4.3.3" stylis "^4.3.3"
"@ant-design/cssinjs@^1.21.0", "@ant-design/cssinjs@^1.23.0":
version "1.23.0"
resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.23.0.tgz#492efba9b15d64f42a4cb5d568cab0607d0c2b16"
integrity sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==
dependencies:
"@babel/runtime" "^7.11.1"
"@emotion/hash" "^0.8.0"
"@emotion/unitless" "^0.7.5"
classnames "^2.3.1"
csstype "^3.1.3"
rc-util "^5.35.0"
stylis "^4.3.4"
"@ant-design/fast-color@^2.0.6":
version "2.0.6"
resolved "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz#ab4d4455c1542c9017d367c2fa8ca3e4215d0ba2"
integrity sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==
dependencies:
"@babel/runtime" "^7.24.7"
"@ant-design/icons-svg@^4.2.1": "@ant-design/icons-svg@^4.2.1":
version "4.3.1" version "4.3.1"
resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz#4b2f65a17d4d32b526baa6414aca2117382bf8da" resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz#4b2f65a17d4d32b526baa6414aca2117382bf8da"
@ -240,7 +269,7 @@
resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6"
integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==
"@ant-design/icons@5.x", "@ant-design/icons@^5.0.0", "@ant-design/icons@^5.1.3", "@ant-design/icons@^5.1.4", "@ant-design/icons@^5.2.5", "@ant-design/icons@^5.2.6", "@ant-design/icons@^5.6.1", "@ant-design/icons@^5.x": "@ant-design/icons@5.x", "@ant-design/icons@^5.0.0", "@ant-design/icons@^5.1.3", "@ant-design/icons@^5.1.4", "@ant-design/icons@^5.2.5", "@ant-design/icons@^5.6.1", "@ant-design/icons@^5.x":
version "5.6.1" version "5.6.1"
resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.6.1.tgz#7290fcdc3d96ff3fca793ed399053cd29ad5dbd3" resolved "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.6.1.tgz#7290fcdc3d96ff3fca793ed399053cd29ad5dbd3"
integrity sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg== integrity sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==
@ -311,10 +340,10 @@
safe-stable-stringify "^2.4.3" safe-stable-stringify "^2.4.3"
swr "^2.0.0" swr "^2.0.0"
"@ant-design/react-slick@~1.0.2": "@ant-design/react-slick@~1.1.2":
version "1.0.2" version "1.1.2"
resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.0.2.tgz#241bb412aeacf7ff5d50c61fa5db66773fde6b56" resolved "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz#f84ce3e4d0dc941f02b16f1d1d6d7a371ffbb4f1"
integrity sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ== integrity sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==
dependencies: dependencies:
"@babel/runtime" "^7.10.4" "@babel/runtime" "^7.10.4"
classnames "^2.2.5" classnames "^2.2.5"
@ -3341,7 +3370,7 @@
dependencies: dependencies:
regenerator-runtime "^0.14.0" regenerator-runtime "^0.14.0"
"@babel/runtime@^7.24.8": "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0":
version "7.26.9" version "7.26.9"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.9.tgz#aa4c6facc65b9cb3f87d75125ffd47781b475433" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.9.tgz#aa4c6facc65b9cb3f87d75125ffd47781b475433"
integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg== integrity sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==
@ -4166,7 +4195,7 @@
resolved "https://registry.npmmirror.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" resolved "https://registry.npmmirror.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb"
integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==
"@ctrl/tinycolor@^3.4.0", "@ctrl/tinycolor@^3.6.0", "@ctrl/tinycolor@^3.6.1": "@ctrl/tinycolor@^3.4.0", "@ctrl/tinycolor@^3.6.0":
version "3.6.1" version "3.6.1"
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31" resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
@ -5142,29 +5171,10 @@
intl-messageformat "10.5.8" intl-messageformat "10.5.8"
tslib "^2.4.0" tslib "^2.4.0"
"@formily/antd-v5@1.1.9", "@formily/antd-v5@1.x": "@formily/antd-v5@1.2.3", "@formily/antd-v5@1.x", "@formily/antd-v5@^1.x":
version "1.1.9" version "1.2.3"
resolved "https://registry.npmmirror.com/@formily/antd-v5/-/antd-v5-1.1.9.tgz#bdfedb1ec98f48d372cad9ab1faceff6b4e3e2f6" resolved "https://registry.npmmirror.com/@formily/antd-v5/-/antd-v5-1.2.3.tgz#4766bf13bec49cb74683234d043664072e8428c0"
integrity sha512-Gw0wx6zERLJS8GvmTizV6UPNyxNrg2svbV1Dr38jwsw+dkEef7ZANNERfEpsl2TvCEDl4W3QVFNPws5woLGl8g== integrity sha512-QH9x1vNyMtXGuWAkZ8z0qu7akpp8NoOLsM3onKMPAdvSEHBbZDbc6xtdODSmOuhRtzcN0rjXf29oumyidaoeFQ==
dependencies:
"@ant-design/cssinjs" "^1.3.1"
"@ant-design/icons" "^5.0.0"
"@dnd-kit/core" "^6.0.0"
"@dnd-kit/sortable" "^7.0.0"
"@formily/core" "^2.2.0"
"@formily/grid" "^2.2.0"
"@formily/json-schema" "^2.2.0"
"@formily/react" "^2.2.0"
"@formily/reactive" "^2.2.0"
"@formily/reactive-react" "^2.2.0"
"@formily/shared" "^2.2.0"
classnames "^2.2.6"
react-sticky-box "^1.0.2"
"@formily/antd-v5@^1.x":
version "1.2.2"
resolved "https://registry.npmmirror.com/@formily/antd-v5/-/antd-v5-1.2.2.tgz#7c26871bd120585f7ffcde042bc23f095fe530a0"
integrity sha512-vlEL8gme9dp9fJ70Cpo+iY3+YGZyd6uTMoAmRiGg0jug+g+CLbten3GGe7vEuxWvOiHkV4s6XkS2SpmyNMjvjA==
dependencies: dependencies:
"@ant-design/cssinjs" "^1.3.1" "@ant-design/cssinjs" "^1.3.1"
"@ant-design/icons" "^5.0.0" "@ant-design/icons" "^5.0.0"
@ -6972,13 +6982,20 @@
resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
"@rc-component/color-picker@~1.5.1": "@rc-component/async-validator@^5.0.3":
version "1.5.1" version "5.0.4"
resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.5.1.tgz#5d41a10f96aab8eb020999bd397fb4419431814c" resolved "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz#5291ad92f00a14b6766fc81735c234277f83e948"
integrity sha512-onyAFhWKXuG4P162xE+7IgaJkPkwM94XlOYnQuu69XdXWMfxpeFi6tpJBsieIMV7EnyLV5J3lDzdLiFeK0iEBA== integrity sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==
dependencies: dependencies:
"@babel/runtime" "^7.24.4"
"@rc-component/color-picker@~2.0.1":
version "2.0.1"
resolved "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz#6b9b96152466a9d4475cbe72b40b594bfda164be"
integrity sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==
dependencies:
"@ant-design/fast-color" "^2.0.6"
"@babel/runtime" "^7.23.6" "@babel/runtime" "^7.23.6"
"@ctrl/tinycolor" "^3.6.1"
classnames "^2.2.6" classnames "^2.2.6"
rc-util "^5.38.1" rc-util "^5.38.1"
@ -7015,18 +7032,27 @@
classnames "^2.3.2" classnames "^2.3.2"
rc-util "^5.24.4" rc-util "^5.24.4"
"@rc-component/tour@~1.11.1": "@rc-component/qrcode@~1.0.0":
version "1.11.1" version "1.0.0"
resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.11.1.tgz#bb47af908fb6fcaf395402901a1fb505ef8fb1e6" resolved "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.0.0.tgz#48a8de5eb11d0e65926f1377c4b1ef4c888997f5"
integrity sha512-c9Lw3/oVinj5D64Rsp8aDLOXcgdViE+hq7bj0Qoo8fTuQEh9sSpUw5OZcum943JkjeIE4hLcc5FD4a5ANtMJ4w== integrity sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==
dependencies:
"@babel/runtime" "^7.24.7"
classnames "^2.3.2"
rc-util "^5.38.0"
"@rc-component/tour@~1.15.1":
version "1.15.1"
resolved "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.15.1.tgz#9b79808254185fc19e964172d99e25e8c6800ded"
integrity sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==
dependencies: dependencies:
"@babel/runtime" "^7.18.0" "@babel/runtime" "^7.18.0"
"@rc-component/portal" "^1.0.0-9" "@rc-component/portal" "^1.0.0-9"
"@rc-component/trigger" "^1.3.6" "@rc-component/trigger" "^2.0.0"
classnames "^2.3.2" classnames "^2.3.2"
rc-util "^5.24.4" rc-util "^5.24.4"
"@rc-component/trigger@^1.17.0", "@rc-component/trigger@^1.18.0", "@rc-component/trigger@^1.18.2", "@rc-component/trigger@^1.3.6", "@rc-component/trigger@^1.5.0", "@rc-component/trigger@^1.7.0": "@rc-component/trigger@^1.17.0", "@rc-component/trigger@^1.7.0":
version "1.18.2" version "1.18.2"
resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-1.18.2.tgz#dc52c4c66fa8aaccaf0710498f2429fc05454e3b" resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-1.18.2.tgz#dc52c4c66fa8aaccaf0710498f2429fc05454e3b"
integrity sha512-jRLYgFgjLEPq3MvS87fIhcfuywFSRDaDrYw1FLku7Cm4esszvzTbA0JBsyacAyLrK9rF3TiHFcvoEDMzoD3CTA== integrity sha512-jRLYgFgjLEPq3MvS87fIhcfuywFSRDaDrYw1FLku7Cm4esszvzTbA0JBsyacAyLrK9rF3TiHFcvoEDMzoD3CTA==
@ -7038,6 +7064,18 @@
rc-resize-observer "^1.3.1" rc-resize-observer "^1.3.1"
rc-util "^5.38.0" rc-util "^5.38.0"
"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.2.6":
version "2.2.6"
resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.6.tgz#bfe6602313b3fadd659687746511f813299d5ea4"
integrity sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==
dependencies:
"@babel/runtime" "^7.23.2"
"@rc-component/portal" "^1.1.0"
classnames "^2.3.2"
rc-motion "^2.0.0"
rc-resize-observer "^1.3.1"
rc-util "^5.44.0"
"@rc-component/trigger@^2.1.1": "@rc-component/trigger@^2.1.1":
version "2.1.1" version "2.1.1"
resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.1.1.tgz#47973f1156ba63810c913eb46cbaedeba913874b" resolved "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.1.1.tgz#47973f1156ba63810c913eb46cbaedeba913874b"
@ -11021,58 +11059,60 @@ antd-token-previewer@^2.0.0-alpha.6:
use-debouncy "~4.3.0" use-debouncy "~4.3.0"
vanilla-jsoneditor "^0.16.1" vanilla-jsoneditor "^0.16.1"
antd@5.12.8, antd@5.x, antd@^5.5.1, antd@^5.x: antd@5.24.2, antd@5.x, antd@^5.5.1, antd@^5.x:
version "5.12.8" version "5.24.2"
resolved "https://registry.npmmirror.com/antd/-/antd-5.12.8.tgz#94fea825e9bae535af7adf70417fa1f0dadc4c98" resolved "https://registry.npmmirror.com/antd/-/antd-5.24.2.tgz#df28583b68279821096234920584dadea6f9b283"
integrity sha512-R2CRcB+aaVZurb3J0IKpBRWq5kW4CLcSqDF58/QBsqYdzK7XjSvM8+eF3rWVRUDbSJfGmyW7I80ywNRYpW1+vA== integrity sha512-7Z9HsE3ZIK3sE/WuUqii3w7Gl1IJuRL21sDUTtkN95JS5KhRYP8ISv7m/HxsJ3Mn/yxgojBCgLPJ212+Dn+aPw==
dependencies: dependencies:
"@ant-design/colors" "^7.0.2" "@ant-design/colors" "^7.2.0"
"@ant-design/cssinjs" "^1.18.2" "@ant-design/cssinjs" "^1.23.0"
"@ant-design/icons" "^5.2.6" "@ant-design/cssinjs-utils" "^1.1.3"
"@ant-design/react-slick" "~1.0.2" "@ant-design/fast-color" "^2.0.6"
"@ctrl/tinycolor" "^3.6.1" "@ant-design/icons" "^5.6.1"
"@rc-component/color-picker" "~1.5.1" "@ant-design/react-slick" "~1.1.2"
"@babel/runtime" "^7.26.0"
"@rc-component/color-picker" "~2.0.1"
"@rc-component/mutate-observer" "^1.1.0" "@rc-component/mutate-observer" "^1.1.0"
"@rc-component/tour" "~1.11.1" "@rc-component/qrcode" "~1.0.0"
"@rc-component/trigger" "^1.18.2" "@rc-component/tour" "~1.15.1"
"@rc-component/trigger" "^2.2.6"
classnames "^2.5.1" classnames "^2.5.1"
copy-to-clipboard "^3.3.3" copy-to-clipboard "^3.3.3"
dayjs "^1.11.10" dayjs "^1.11.11"
qrcode.react "^3.1.0" rc-cascader "~3.33.0"
rc-cascader "~3.20.0" rc-checkbox "~3.5.0"
rc-checkbox "~3.1.0" rc-collapse "~3.9.0"
rc-collapse "~3.7.2" rc-dialog "~9.6.0"
rc-dialog "~9.3.4" rc-drawer "~7.2.0"
rc-drawer "~6.5.2" rc-dropdown "~4.2.1"
rc-dropdown "~4.1.0" rc-field-form "~2.7.0"
rc-field-form "~1.41.0" rc-image "~7.11.0"
rc-image "~7.5.1" rc-input "~1.7.2"
rc-input "~1.3.11" rc-input-number "~9.4.0"
rc-input-number "~8.4.0" rc-mentions "~2.19.1"
rc-mentions "~2.9.1" rc-menu "~9.16.1"
rc-menu "~9.12.4" rc-motion "^2.9.5"
rc-motion "^2.9.0" rc-notification "~5.6.3"
rc-notification "~5.3.0" rc-pagination "~5.1.0"
rc-pagination "~4.0.4" rc-picker "~4.11.2"
rc-picker "~3.14.6" rc-progress "~4.0.0"
rc-progress "~3.5.1" rc-rate "~2.13.1"
rc-rate "~2.12.0" rc-resize-observer "^1.4.3"
rc-resize-observer "^1.4.0" rc-segmented "~2.7.0"
rc-segmented "~2.2.2" rc-select "~14.16.6"
rc-select "~14.10.0" rc-slider "~11.1.8"
rc-slider "~10.5.0"
rc-steps "~6.0.1" rc-steps "~6.0.1"
rc-switch "~4.1.0" rc-switch "~4.1.0"
rc-table "~7.36.1" rc-table "~7.50.3"
rc-tabs "~12.14.1" rc-tabs "~15.5.1"
rc-textarea "~1.5.3" rc-textarea "~1.9.0"
rc-tooltip "~6.1.3" rc-tooltip "~6.4.0"
rc-tree "~5.8.2" rc-tree "~5.13.0"
rc-tree-select "~5.15.0" rc-tree-select "~5.27.0"
rc-upload "~4.5.2" rc-upload "~4.8.1"
rc-util "^5.38.1" rc-util "^5.44.4"
scroll-into-view-if-needed "^3.1.0" scroll-into-view-if-needed "^3.1.0"
throttle-debounce "^5.0.0" throttle-debounce "^5.0.2"
any-promise@^1.0.0, any-promise@^1.3.0: any-promise@^1.0.0, any-promise@^1.3.0:
version "1.3.0" version "1.3.0"
@ -11375,11 +11415,6 @@ array-sort@^1.0.0:
get-value "^2.0.6" get-value "^2.0.6"
kind-of "^5.0.2" kind-of "^5.0.2"
array-tree-filter@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
array-union@^2.1.0: array-union@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
@ -14869,26 +14904,11 @@ dayjs-timezone-iana-plugin@=0.1.0:
resolved "https://registry.npmmirror.com/dayjs-timezone-iana-plugin/-/dayjs-timezone-iana-plugin-0.1.0.tgz#216613f6ec80106ab8be025cf5935018c901e997" resolved "https://registry.npmmirror.com/dayjs-timezone-iana-plugin/-/dayjs-timezone-iana-plugin-0.1.0.tgz#216613f6ec80106ab8be025cf5935018c901e997"
integrity sha512-xc8cIZmi4oKr2nfu41I/FDWZKa8n8YaRMxSz9MrpXTNo8c6ZsjZuIoy5RPNmLXPqntFuITWI8obB7lUA+CdzGQ== integrity sha512-xc8cIZmi4oKr2nfu41I/FDWZKa8n8YaRMxSz9MrpXTNo8c6ZsjZuIoy5RPNmLXPqntFuITWI8obB7lUA+CdzGQ==
dayjs@1.11.13, dayjs@^1.8.34: dayjs@1.11.13, dayjs@=1.11.11, dayjs@^1.11.10, dayjs@^1.11.11, dayjs@^1.11.7, dayjs@^1.11.8, dayjs@^1.11.9, dayjs@^1.8.34, dayjs@^1.9.1, dayjs@~1.11.5, dayjs@~1.8.24:
version "1.11.13" version "1.11.13"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
dayjs@=1.11.11:
version "1.11.11"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e"
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
dayjs@^1.11.10, dayjs@^1.11.7, dayjs@^1.11.8, dayjs@^1.11.9, dayjs@^1.9.1, dayjs@~1.11.5:
version "1.11.10"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
dayjs@~1.8.24:
version "1.8.36"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50"
integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==
debounce-fn@^4.0.0: debounce-fn@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" resolved "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7"
@ -26656,10 +26676,14 @@ q@^1.1.2, q@^1.5.1:
resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==
qrcode.react@^3.1.0: qrcode@^1.5.4:
version "3.1.0" version "1.5.4"
resolved "https://registry.npmmirror.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" resolved "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88"
integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==
dependencies:
dijkstrajs "^1.0.1"
pngjs "^5.0.0"
yargs "^15.3.1"
qrcode@^1.5.4: qrcode@^1.5.4:
version "1.5.4" version "1.5.4"
@ -26834,41 +26858,40 @@ rbush@^3.0.1:
dependencies: dependencies:
quickselect "^2.0.0" quickselect "^2.0.0"
rc-cascader@~3.20.0: rc-cascader@~3.33.0:
version "3.20.0" version "3.33.1"
resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.20.0.tgz#b270f9d84ed83417ee7309ef5e56e415f1586076" resolved "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.33.1.tgz#19e01462ef5ef51b723c1f562c7b9cde4691e7ee"
integrity sha512-lkT9EEwOcYdjZ/jvhLoXGzprK1sijT3/Tp4BLxQQcHDZkkOzzwYQC9HgmKoJz0K7CukMfgvO9KqHeBdgE+pELw== integrity sha512-Kyl4EJ7ZfCBuidmZVieegcbFw0RcU5bHHSbtEdmuLYd0fYHCAiYKZ6zon7fWAVyC6rWWOOib0XKdTSf7ElC9rg==
dependencies: dependencies:
"@babel/runtime" "^7.12.5" "@babel/runtime" "^7.25.7"
array-tree-filter "^2.1.0"
classnames "^2.3.1" classnames "^2.3.1"
rc-select "~14.10.0" rc-select "~14.16.2"
rc-tree "~5.8.1" rc-tree "~5.13.0"
rc-util "^5.37.0" rc-util "^5.43.0"
rc-checkbox@~3.1.0: rc-checkbox@~3.5.0:
version "3.1.0" version "3.5.0"
resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.1.0.tgz#6be0d9d8de2cc96fb5e37f9036a1c3e360d0a42d" resolved "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz#3ae2441e3a321774d390f76539e706864fcf5ff0"
integrity sha512-PAwpJFnBa3Ei+5pyqMMXdcKYKNBMS+TvSDiLdDnARnMJHC8ESxwPfm4Ao1gJiKtWLdmGfigascnCpwrHFgoOBQ== integrity sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.3.2" classnames "^2.3.2"
rc-util "^5.25.2" rc-util "^5.25.2"
rc-collapse@~3.7.2: rc-collapse@~3.9.0:
version "3.7.2" version "3.9.0"
resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.7.2.tgz#d11538ff9c705a5c988d9a4dfcc051a919692fe3" resolved "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.9.0.tgz#972404ce7724e1c9d1d2476543e1175404a36806"
integrity sha512-ZRw6ipDyOnfLFySxAiCMdbHtb5ePAsB9mT17PA6y1mRD/W6KHRaZeb5qK/X9xDV1CqgyxMpzw0VdS74PCcUk4A== integrity sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "2.x" classnames "2.x"
rc-motion "^2.3.4" rc-motion "^2.3.4"
rc-util "^5.27.0" rc-util "^5.27.0"
rc-dialog@~9.3.4: rc-dialog@~9.6.0:
version "9.3.4" version "9.6.0"
resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.3.4.tgz#e0decb3d4a0dbe36524a67ed2f8fe2daa4b7b73c" resolved "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.6.0.tgz#dc7a255c6ad1cb56021c3a61c7de86ee88c7c371"
integrity sha512-975X3018GhR+EjZFbxA2Z57SX5rnu0G0/OxFgMMvZK4/hQWEm3MHaNvP4wXpxYDoJsp+xUvVW+GB9CMMCm81jA== integrity sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
"@rc-component/portal" "^1.0.0-8" "@rc-component/portal" "^1.0.0-8"
@ -26876,7 +26899,7 @@ rc-dialog@~9.3.4:
rc-motion "^2.3.0" rc-motion "^2.3.0"
rc-util "^5.21.0" rc-util "^5.21.0"
rc-drawer@^6.1.2, rc-drawer@~6.5.2: rc-drawer@^6.1.2:
version "6.5.2" version "6.5.2"
resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-6.5.2.tgz#49c1f279261992f6d4653d32a03b14acd436d610" resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-6.5.2.tgz#49c1f279261992f6d4653d32a03b14acd436d610"
integrity sha512-QckxAnQNdhh4vtmKN0ZwDf3iakO83W9eZcSKWYYTDv4qcD2fHhRAZJJ/OE6v2ZlQ2kSqCJX5gYssF4HJFvsEPQ== integrity sha512-QckxAnQNdhh4vtmKN0ZwDf3iakO83W9eZcSKWYYTDv4qcD2fHhRAZJJ/OE6v2ZlQ2kSqCJX5gYssF4HJFvsEPQ==
@ -26887,6 +26910,17 @@ rc-drawer@^6.1.2, rc-drawer@~6.5.2:
rc-motion "^2.6.1" rc-motion "^2.6.1"
rc-util "^5.36.0" rc-util "^5.36.0"
rc-drawer@~7.2.0:
version "7.2.0"
resolved "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.2.0.tgz#8d7de2f1fd52f3ac5a25f54afbb8ac14c62e5663"
integrity sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==
dependencies:
"@babel/runtime" "^7.23.9"
"@rc-component/portal" "^1.1.1"
classnames "^2.2.6"
rc-motion "^2.6.1"
rc-util "^5.38.1"
rc-dropdown@~4.1.0: rc-dropdown@~4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.1.0.tgz#418a68939631520de80d0865d02b440eeeb4168e" resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.1.0.tgz#418a68939631520de80d0865d02b440eeeb4168e"
@ -26897,6 +26931,16 @@ rc-dropdown@~4.1.0:
classnames "^2.2.6" classnames "^2.2.6"
rc-util "^5.17.0" rc-util "^5.17.0"
rc-dropdown@~4.2.0, rc-dropdown@~4.2.1:
version "4.2.1"
resolved "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz#44729eb2a4272e0353d31ac060da21e606accb1c"
integrity sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==
dependencies:
"@babel/runtime" "^7.18.3"
"@rc-component/trigger" "^2.0.0"
classnames "^2.2.6"
rc-util "^5.44.1"
rc-field-form@^1.34.2: rc-field-form@^1.34.2:
version "1.44.0" version "1.44.0"
resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.44.0.tgz#a66548790fbcee8c5432e9f2efcd1b46b090984b" resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.44.0.tgz#a66548790fbcee8c5432e9f2efcd1b46b090984b"
@ -26906,61 +26950,61 @@ rc-field-form@^1.34.2:
async-validator "^4.1.0" async-validator "^4.1.0"
rc-util "^5.32.2" rc-util "^5.32.2"
rc-field-form@~1.41.0: rc-field-form@~2.7.0:
version "1.41.0" version "2.7.0"
resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-1.41.0.tgz#660ed8691fdabbc1e5b1ee6b5e0e4f534b295cf0" resolved "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.0.tgz#22413e793f35bfc1f35b0ec462774d7277f5a399"
integrity sha512-k9AS0wmxfJfusWDP/YXWTpteDNaQ4isJx9UKxx4/e8Dub4spFeZ54/EuN2sYrMRID/+hUznPgVZeg+Gf7XSYCw== integrity sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==
dependencies: dependencies:
"@babel/runtime" "^7.18.0" "@babel/runtime" "^7.18.0"
async-validator "^4.1.0" "@rc-component/async-validator" "^5.0.3"
rc-util "^5.32.2" rc-util "^5.32.2"
rc-image@~7.5.1: rc-image@~7.11.0:
version "7.5.1" version "7.11.0"
resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.5.1.tgz#39a93354e14fe3e5eaafd9c9464e8fe3c6c171a0" resolved "https://registry.npmmirror.com/rc-image/-/rc-image-7.11.0.tgz#18c77ea557a6fdbe26856c688a9aace1505c0e77"
integrity sha512-Z9loECh92SQp0nSipc0MBuf5+yVC05H/pzC+Nf8xw1BKDFUJzUeehYBjaWlxly8VGBZJcTHYri61Fz9ng1G3Ag== integrity sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==
dependencies: dependencies:
"@babel/runtime" "^7.11.2" "@babel/runtime" "^7.11.2"
"@rc-component/portal" "^1.0.2" "@rc-component/portal" "^1.0.2"
classnames "^2.2.6" classnames "^2.2.6"
rc-dialog "~9.3.4" rc-dialog "~9.6.0"
rc-motion "^2.6.2" rc-motion "^2.6.2"
rc-util "^5.34.1" rc-util "^5.34.1"
rc-input-number@~8.4.0: rc-input-number@~9.4.0:
version "8.4.0" version "9.4.0"
resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-8.4.0.tgz#f0d0caa2ce3a4e37f062556f9cb4c08c8c23322d" resolved "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.4.0.tgz#65caf04f1b6d05f47e141b1f5f484724c1f7fd5a"
integrity sha512-B6rziPOLRmeP7kcS5qbdC5hXvvDHYKV4vUxmahevYx2E6crS2bRi0xLDjhJ0E1HtOWo8rTmaE2EBJAkTCZOLdA== integrity sha512-Tiy4DcXcFXAf9wDhN8aUAyMeCLHJUHA/VA/t7Hj8ZEx5ETvxG7MArDOSE6psbiSCo+vJPm4E3fGN710ITVn6GA==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
"@rc-component/mini-decimal" "^1.0.1" "@rc-component/mini-decimal" "^1.0.1"
classnames "^2.2.5" classnames "^2.2.5"
rc-input "~1.3.5" rc-input "~1.7.1"
rc-util "^5.28.0" rc-util "^5.40.1"
rc-input@~1.3.11, rc-input@~1.3.5: rc-input@~1.7.1, rc-input@~1.7.2:
version "1.3.11" version "1.7.3"
resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.3.11.tgz#08f25d6d65b418dc9001e8f36432fe323bde37fa" resolved "https://registry.npmmirror.com/rc-input/-/rc-input-1.7.3.tgz#cb334a17b93ce985bceb243b4c111a5ed641e0e3"
integrity sha512-jhH7QP5rILanSHCGSUkdoFE5DEtpv8FIseYhuYkOZzUBeiVAiwM3q26YqZ6xBB0QFEZ/yUAgms4xW4iuub3xFQ== integrity sha512-A5w4egJq8+4JzlQ55FfQjDnPvOaAbzwC3VLOAdOytyek3TboSOP9qxN+Gifup+shVXfvecBLBbWBpWxmk02SWQ==
dependencies: dependencies:
"@babel/runtime" "^7.11.1" "@babel/runtime" "^7.11.1"
classnames "^2.2.1" classnames "^2.2.1"
rc-util "^5.18.1" rc-util "^5.18.1"
rc-mentions@~2.9.1: rc-mentions@~2.19.1:
version "2.9.1" version "2.19.1"
resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.9.1.tgz#cfe55913fd5bc156ef9814f38c1a2ceefee032ce" resolved "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.19.1.tgz#3fd0dd0bf3dd63afdb6a21750cbae81f3824b9c4"
integrity sha512-cZuElWr/5Ws0PXx1uxobxfYh4mqUw2FitfabR62YnWgm+WAfDyXZXqZg5DxXW+M1cgVvntrQgDDd9LrihrXzew== integrity sha512-KK3bAc/bPFI993J3necmaMXD2reZTzytZdlTvkeBbp50IGH1BDPDvxLdHDUrpQx2b2TGaVJsn+86BvYa03kGqA==
dependencies: dependencies:
"@babel/runtime" "^7.22.5" "@babel/runtime" "^7.22.5"
"@rc-component/trigger" "^1.5.0" "@rc-component/trigger" "^2.0.0"
classnames "^2.2.6" classnames "^2.2.6"
rc-input "~1.3.5" rc-input "~1.7.1"
rc-menu "~9.12.0" rc-menu "~9.16.0"
rc-textarea "~1.5.0" rc-textarea "~1.9.0"
rc-util "^5.34.1" rc-util "^5.34.1"
rc-menu@~9.12.0, rc-menu@~9.12.4: rc-menu@~9.12.0:
version "9.12.4" version "9.12.4"
resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.12.4.tgz#4959b5eeb780be7ff52aac31952b35efca46b9a3" resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.12.4.tgz#4959b5eeb780be7ff52aac31952b35efca46b9a3"
integrity sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg== integrity sha512-t2NcvPLV1mFJzw4F21ojOoRVofK2rWhpKPx69q2raUsiHPDP6DDevsBILEYdsIegqBeSXoWs2bf6CueBKg3BFg==
@ -26972,6 +27016,18 @@ rc-menu@~9.12.0, rc-menu@~9.12.4:
rc-overflow "^1.3.1" rc-overflow "^1.3.1"
rc-util "^5.27.0" rc-util "^5.27.0"
rc-menu@~9.16.0, rc-menu@~9.16.1:
version "9.16.1"
resolved "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.1.tgz#9df1168e41d87dc7164c582173e1a1d32011899f"
integrity sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==
dependencies:
"@babel/runtime" "^7.10.1"
"@rc-component/trigger" "^2.0.0"
classnames "2.x"
rc-motion "^2.4.3"
rc-overflow "^1.3.1"
rc-util "^5.27.0"
rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.7.3, rc-motion@^2.9.0: rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.7.3, rc-motion@^2.9.0:
version "2.9.0" version "2.9.0"
resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710" resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710"
@ -26981,10 +27037,19 @@ rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motio
classnames "^2.2.1" classnames "^2.2.1"
rc-util "^5.21.0" rc-util "^5.21.0"
rc-notification@~5.3.0: rc-motion@^2.9.5:
version "5.3.0" version "2.9.5"
resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.3.0.tgz#e31c86fe2350598ade8cff383babd1befa7a94fe" resolved "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz#12c6ead4fd355f94f00de9bb4f15df576d677e0c"
integrity sha512-WCf0uCOkZ3HGfF0p1H4Sgt7aWfipxORWTPp7o6prA3vxwtWhtug3GfpYls1pnBp4WA+j8vGIi5c2/hQRpGzPcQ== integrity sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==
dependencies:
"@babel/runtime" "^7.11.1"
classnames "^2.2.1"
rc-util "^5.44.0"
rc-notification@~5.6.3:
version "5.6.3"
resolved "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.6.3.tgz#5aca122b7e2fb73ae4ba77238a90e6e8c9c12b8d"
integrity sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "2.x" classnames "2.x"
@ -27001,38 +27066,50 @@ rc-overflow@^1.3.1:
rc-resize-observer "^1.0.0" rc-resize-observer "^1.0.0"
rc-util "^5.37.0" rc-util "^5.37.0"
rc-pagination@~4.0.4: rc-overflow@^1.3.2:
version "4.0.4" version "1.4.1"
resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-4.0.4.tgz#ea401388ae86eac17ed5b41212d487f12b65b773" resolved "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.4.1.tgz#e1bcf0375979c24cffa2d87bf83a19ded5fcdf45"
integrity sha512-GGrLT4NgG6wgJpT/hHIpL9nELv27A1XbSZzECIuQBQTVSf4xGKxWr6I/jhpRPauYEWEbWVw22ObG6tJQqwJqWQ== integrity sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==
dependencies:
"@babel/runtime" "^7.11.1"
classnames "^2.2.1"
rc-resize-observer "^1.0.0"
rc-util "^5.37.0"
rc-pagination@~5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.1.0.tgz#a6e63a2c5db29e62f991282eb18a2d3ee725ba8b"
integrity sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.3.2" classnames "^2.3.2"
rc-util "^5.38.0" rc-util "^5.38.0"
rc-picker@~3.14.6: rc-picker@~4.11.2:
version "3.14.6" version "4.11.3"
resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-3.14.6.tgz#60fc34f9883272e10f6c593fa6d82e7e7a70781b" resolved "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.11.3.tgz#7e7e3ad83aa461c284b8391c697492d1c34d2cb8"
integrity sha512-AdKKW0AqMwZsKvIpwUWDUnpuGKZVrbxVTZTNjcO+pViGkjC1EBcjMgxVe8tomOEaIHJL5Gd13vS8Rr3zzxWmag== integrity sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.24.7"
"@rc-component/trigger" "^1.5.0" "@rc-component/trigger" "^2.0.0"
classnames "^2.2.1" classnames "^2.2.1"
rc-util "^5.30.0" rc-overflow "^1.3.2"
rc-resize-observer "^1.4.0"
rc-util "^5.43.0"
rc-progress@~3.5.1: rc-progress@~4.0.0:
version "3.5.1" version "4.0.0"
resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-3.5.1.tgz#a3cdfd2fe04eb5c3d43fa1c69e7dd70c73b102ae" resolved "https://registry.npmmirror.com/rc-progress/-/rc-progress-4.0.0.tgz#5382147d9add33d3a5fbd264001373df6440e126"
integrity sha512-V6Amx6SbLRwPin/oD+k1vbPrO8+9Qf8zW1T8A7o83HdNafEVvAxPV5YsgtKFP+Ud5HghLj33zKOcEHrcrUGkfw== integrity sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.2.6" classnames "^2.2.6"
rc-util "^5.16.1" rc-util "^5.16.1"
rc-rate@~2.12.0: rc-rate@~2.13.1:
version "2.12.0" version "2.13.1"
resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.12.0.tgz#0182deffed3b009cdcc61660da8746c39ed91ed5" resolved "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.13.1.tgz#29af7a3d4768362e9d4388f955a8b6389526b7fd"
integrity sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg== integrity sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.2.5" classnames "^2.2.5"
@ -27048,15 +27125,15 @@ rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1,
rc-util "^5.38.0" rc-util "^5.38.0"
resize-observer-polyfill "^1.5.1" resize-observer-polyfill "^1.5.1"
rc-segmented@~2.2.2: rc-resize-observer@^1.4.3:
version "2.2.2" version "1.4.3"
resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.2.2.tgz#a34f12ce6c0975fc3042ae7656bcd18e1744798e" resolved "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz#4fd41fa561ba51362b5155a07c35d7c89a1ea569"
integrity sha512-Mq52M96QdHMsNdE/042ibT5vkcGcD5jxKp7HgPC2SRofpia99P5fkfHy1pEaajLMF/kj0+2Lkq1UZRvqzo9mSA== integrity sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==
dependencies: dependencies:
"@babel/runtime" "^7.11.1" "@babel/runtime" "^7.20.7"
classnames "^2.2.1" classnames "^2.2.1"
rc-motion "^2.4.4" rc-util "^5.44.1"
rc-util "^5.17.0" resize-observer-polyfill "^1.5.1"
rc-segmented@~2.4.1: rc-segmented@~2.4.1:
version "2.4.1" version "2.4.1"
@ -27068,23 +27145,20 @@ rc-segmented@~2.4.1:
rc-motion "^2.4.4" rc-motion "^2.4.4"
rc-util "^5.17.0" rc-util "^5.17.0"
rc-select@~14.10.0: rc-segmented@~2.7.0:
version "14.10.0" version "2.7.0"
resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.10.0.tgz#5f60e61ed7c9a83c8591616b1174a1c4ab2de0cd" resolved "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.0.tgz#f56c2044abf8f03958b3a9a9d32987f10dcc4fc4"
integrity sha512-TsIJTYafTTapCA32LLNpx/AD6ntepR1TG8jEVx35NiAAWCPymhUfuca8kRcUNd3WIGVMDcMKn9kkphoxEz+6Ag== integrity sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.11.1"
"@rc-component/trigger" "^1.5.0" classnames "^2.2.1"
classnames "2.x" rc-motion "^2.4.4"
rc-motion "^2.0.1" rc-util "^5.17.0"
rc-overflow "^1.3.1"
rc-util "^5.16.1"
rc-virtual-list "^3.5.2"
rc-select@~14.13.0: rc-select@~14.16.2, rc-select@~14.16.6:
version "14.13.3" version "14.16.6"
resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.13.3.tgz#51d62d68464874fdbbb976fb0462b81ab8043817" resolved "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.6.tgz#1c57a9aa97248b3fd9a830d9bf5df6e9d2ad2c69"
integrity sha512-AMEfdE40RhlqahMGN3Q7OKVd1txNph0zIn2Xpvn0ZJiUYafCsqoGv+Rj6v1umgm8ZOEAJ3LefnkznAYNMMzACg== integrity sha512-YPMtRPqfZWOm2XGTbx5/YVr1HT0vn//8QS77At0Gjb3Lv+Lbut0IORJPKLWu1hQ3u4GsA0SrDzs7nI8JG7Zmyg==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
"@rc-component/trigger" "^2.1.1" "@rc-component/trigger" "^2.1.1"
@ -27094,14 +27168,14 @@ rc-select@~14.13.0:
rc-util "^5.16.1" rc-util "^5.16.1"
rc-virtual-list "^3.5.2" rc-virtual-list "^3.5.2"
rc-slider@~10.5.0: rc-slider@~11.1.8:
version "10.5.0" version "11.1.8"
resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-10.5.0.tgz#1bd4853d114cb3403b67c485125887adb6a2a117" resolved "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.8.tgz#cf3b30dacac8f98d44f7685f733f6f7da146fc06"
integrity sha512-xiYght50cvoODZYI43v3Ylsqiw14+D7ELsgzR40boDZaya1HFa1Etnv9MDkQE8X/UrXAffwv2AcNAhslgYuDTw== integrity sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.2.5" classnames "^2.2.5"
rc-util "^5.27.0" rc-util "^5.36.0"
rc-steps@~6.0.1: rc-steps@~6.0.1:
version "6.0.1" version "6.0.1"
@ -27121,17 +27195,17 @@ rc-switch@~4.1.0:
classnames "^2.2.1" classnames "^2.2.1"
rc-util "^5.30.0" rc-util "^5.30.0"
rc-table@~7.36.1: rc-table@~7.50.3:
version "7.36.1" version "7.50.3"
resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.36.1.tgz#4a1a6d7e9797d553845bfa62571720cc613ecc94" resolved "https://registry.npmmirror.com/rc-table/-/rc-table-7.50.3.tgz#3016084e34cd834965eb3fa6a1b30a14926b7706"
integrity sha512-9qMxEm/3Y8ukdW8I8ZvmhX0QImfNKzH0JEUlSbyaUlsYTB+/tQEbfaB8YkG4sHVZ1io4pxqK/BXoZYqebi/TIQ== integrity sha512-Z4/zNCzjv7f/XzPRecb+vJU0DJKdsYt4YRkDzNl4G05m7JmxrKGYC2KqN1Ew6jw2zJq7cxVv3z39qyZOHMuf7A==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
"@rc-component/context" "^1.4.0" "@rc-component/context" "^1.4.0"
classnames "^2.2.5" classnames "^2.2.5"
rc-resize-observer "^1.1.0" rc-resize-observer "^1.1.0"
rc-util "^5.37.0" rc-util "^5.44.3"
rc-virtual-list "^3.11.1" rc-virtual-list "^3.14.2"
rc-tabs@^12.10.0: rc-tabs@^12.10.0:
version "12.15.0" version "12.15.0"
@ -27146,62 +27220,52 @@ rc-tabs@^12.10.0:
rc-resize-observer "^1.0.0" rc-resize-observer "^1.0.0"
rc-util "^5.34.1" rc-util "^5.34.1"
rc-tabs@~12.14.1: rc-tabs@~15.5.1:
version "12.14.1" version "15.5.1"
resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-12.14.1.tgz#1fe4c0bd54550c216f9612b76eff7fbe750f4d2b" resolved "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.5.1.tgz#9460ae1fd75e2a217e30e596c26425a661a2a4c6"
integrity sha512-1xlE7JQNYxD5RwBsM7jf2xSdUrkmTSDFLFEm2gqAgnsRlOGydEzXXNAVTOT6QcgM1G/gCm+AgG+FYPUGb4Hs4g== integrity sha512-yiWivLAjEo5d1v2xlseB2dQocsOhkoVSfo1krS8v8r+02K+TBUjSjXIf7dgyVSxp6wRIPv5pMi5hanNUlQMgUA==
dependencies: dependencies:
"@babel/runtime" "^7.11.2" "@babel/runtime" "^7.11.2"
classnames "2.x" classnames "2.x"
rc-dropdown "~4.1.0" rc-dropdown "~4.2.0"
rc-menu "~9.12.0" rc-menu "~9.16.0"
rc-motion "^2.6.2" rc-motion "^2.6.2"
rc-resize-observer "^1.0.0" rc-resize-observer "^1.0.0"
rc-util "^5.34.1" rc-util "^5.34.1"
rc-textarea@~1.5.0, rc-textarea@~1.5.3: rc-textarea@~1.9.0:
version "1.5.3" version "1.9.0"
resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.5.3.tgz#513e837d308584996c05f540f4f58645a3a8c89a" resolved "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.9.0.tgz#d807194ebef90f25f0b9501cddf5e8f2968d598a"
integrity sha512-oH682ghHx++stFNYrosPRBfwsypywrTXpaD0/5Z8MPkUOnyOQUaY9ueL9tMu6BP1LfsuYQ1VLpg5OtshViLNgA== integrity sha512-dQW/Bc/MriPBTugj2Kx9PMS5eXCCGn2cxoIaichjbNvOiARlaHdI99j4DTxLl/V8+PIfW06uFy7kjfUIDDKyxQ==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.10.1"
classnames "^2.2.1" classnames "^2.2.1"
rc-input "~1.3.5" rc-input "~1.7.1"
rc-resize-observer "^1.0.0" rc-resize-observer "^1.0.0"
rc-util "^5.27.0" rc-util "^5.27.0"
rc-tooltip@~6.1.3: rc-tooltip@~6.4.0:
version "6.1.3" version "6.4.0"
resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.1.3.tgz#83b97004a1ab918ed4936bbf089bc754254efd1b" resolved "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.4.0.tgz#e832ed0392872025e59928cfc1ad9045656467fd"
integrity sha512-HMSbSs5oieZ7XddtINUddBLSVgsnlaSb3bZrzzGWjXa7/B7nNedmsuz72s7EWFEro9mNa7RyF3gOXKYqvJiTcQ== integrity sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==
dependencies: dependencies:
"@babel/runtime" "^7.11.2" "@babel/runtime" "^7.11.2"
"@rc-component/trigger" "^1.18.0" "@rc-component/trigger" "^2.0.0"
classnames "^2.3.1" classnames "^2.3.1"
rc-util "^5.44.3"
rc-tree-select@5.20.0: rc-tree-select@~5.27.0:
version "5.20.0" version "5.27.0"
resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.20.0.tgz#b8f9f5ea08c673c77131a514e1f7d2b2e516449d" resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz#3daa62972ae80846dac96bf4776d1a9dc9c7c4c6"
integrity sha512-zFtkHx5/6PnXSi3oSbBSFbIPiJJQdpSU3qz/joLe75URgvxmTHi989O8MtMgpwyZwrCMOJpGi6L1uy+13uzZPw== integrity sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==
dependencies: dependencies:
"@babel/runtime" "^7.10.1" "@babel/runtime" "^7.25.7"
classnames "2.x" classnames "2.x"
rc-select "~14.13.0" rc-select "~14.16.2"
rc-tree "~5.8.1" rc-tree "~5.13.0"
rc-util "^5.16.1" rc-util "^5.43.0"
rc-tree-select@~5.15.0: rc-tree@^5.7.9:
version "5.15.0"
resolved "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.15.0.tgz#8591f1dd28b043dde6fa1ca30c7acb198b160a42"
integrity sha512-YJHfdO6azFnR0/JuNBZLDptGE4/RGfVeHAafUIYcm2T3RBkL1O8aVqiHvwIyLzdK59ry0NLrByd+3TkfpRM+9Q==
dependencies:
"@babel/runtime" "^7.10.1"
classnames "2.x"
rc-select "~14.10.0"
rc-tree "~5.8.1"
rc-util "^5.16.1"
rc-tree@^5.7.9, rc-tree@~5.8.1, rc-tree@~5.8.2:
version "5.8.2" version "5.8.2"
resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.8.2.tgz#ed3a3f7c56597bbeab3303407a9e1739bbf15621" resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.8.2.tgz#ed3a3f7c56597bbeab3303407a9e1739bbf15621"
integrity sha512-xH/fcgLHWTLmrSuNphU8XAqV7CdaOQgm4KywlLGNoTMhDAcNR3GVNP6cZzb0GrKmIZ9yae+QLot/cAgUdPRMzg== integrity sha512-xH/fcgLHWTLmrSuNphU8XAqV7CdaOQgm4KywlLGNoTMhDAcNR3GVNP6cZzb0GrKmIZ9yae+QLot/cAgUdPRMzg==
@ -27212,16 +27276,27 @@ rc-tree@^5.7.9, rc-tree@~5.8.1, rc-tree@~5.8.2:
rc-util "^5.16.1" rc-util "^5.16.1"
rc-virtual-list "^3.5.1" rc-virtual-list "^3.5.1"
rc-upload@~4.5.2: rc-tree@~5.13.0:
version "4.5.2" version "5.13.1"
resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.5.2.tgz#ea493fbaaf57d9369ee954b20e1d8bc35c818a1a" resolved "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.1.tgz#f36a33a94a1282f4b09685216c01487089748910"
integrity sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA== integrity sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==
dependencies:
"@babel/runtime" "^7.10.1"
classnames "2.x"
rc-motion "^2.0.1"
rc-util "^5.16.1"
rc-virtual-list "^3.5.1"
rc-upload@~4.8.1:
version "4.8.1"
resolved "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.8.1.tgz#ac55f2bc101b95b52a6e47f3c18f0f55b54e16d2"
integrity sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==
dependencies: dependencies:
"@babel/runtime" "^7.18.3" "@babel/runtime" "^7.18.3"
classnames "^2.2.5" classnames "^2.2.5"
rc-util "^5.2.0" rc-util "^5.2.0"
rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.5, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.0, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1: rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.5, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.0, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1:
version "5.38.1" version "5.38.1"
resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.38.1.tgz#4915503b89855f5c5cd9afd4c72a7a17568777bb" resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.38.1.tgz#4915503b89855f5c5cd9afd4c72a7a17568777bb"
integrity sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng== integrity sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==
@ -27229,7 +27304,25 @@ rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.
"@babel/runtime" "^7.18.3" "@babel/runtime" "^7.18.3"
react-is "^18.2.0" react-is "^18.2.0"
rc-virtual-list@^3.11.1, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: rc-util@^5.40.1, rc-util@^5.43.0, rc-util@^5.44.0, rc-util@^5.44.1, rc-util@^5.44.3, rc-util@^5.44.4:
version "5.44.4"
resolved "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.4.tgz#89ee9037683cca01cd60f1a6bbda761457dd6ba5"
integrity sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==
dependencies:
"@babel/runtime" "^7.18.3"
react-is "^18.2.0"
rc-virtual-list@^3.14.2:
version "3.18.3"
resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.18.3.tgz#2433851632b79a65dd1693db18d41a73f62168f0"
integrity sha512-s1/bZQY2uwnmgXYeXxJkk2cSTz1cdUPDCrxAq/y1WQM115HilFFIvLi+JVFfkD4xCq3TZxGM17FQH4NLesWfwg==
dependencies:
"@babel/runtime" "^7.20.0"
classnames "^2.2.6"
rc-resize-observer "^1.0.0"
rc-util "^5.36.0"
rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2:
version "3.11.3" version "3.11.3"
resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.11.3.tgz#77d4e12e20c1ba314b43c0e37e118296674c5401" resolved "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.11.3.tgz#77d4e12e20c1ba314b43c0e37e118296674c5401"
integrity sha512-tu5UtrMk/AXonHwHxUogdXAWynaXsrx1i6dsgg+lOo/KJSF8oBAcprh1z5J3xgnPJD5hXxTL58F8s8onokdt0Q== integrity sha512-tu5UtrMk/AXonHwHxUogdXAWynaXsrx1i6dsgg+lOo/KJSF8oBAcprh1z5J3xgnPJD5hXxTL58F8s8onokdt0Q==
@ -30181,6 +30274,11 @@ stylis@^4.3.3:
resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4" resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4"
integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now== integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==
stylis@^4.3.4:
version "4.3.6"
resolved "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz#7c7b97191cb4f195f03ecab7d52f7902ed378320"
integrity sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==
sucrase@^3.35.0: sucrase@^3.35.0:
version "3.35.0" version "3.35.0"
resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" resolved "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
@ -30640,6 +30738,11 @@ throttle-debounce@^5.0.0:
resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933"
integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg== integrity sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==
throttle-debounce@^5.0.2:
version "5.0.2"
resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1"
integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==
through2-filter@^3.0.0: through2-filter@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmmirror.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" resolved "https://registry.npmmirror.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"