feat: approval summary and refactor antd-style (#1036)

![image](/attachments/3a106d40-0cec-4db9-88a2-9f6e08843907)

Co-authored-by: sealday <zhanglin@daoyoucloud.com>
Reviewed-on: daoyoucloud/tachybase#1036
Co-authored-by: bai.zixv <bai.zixv@foxmail.com>
Co-committed-by: bai.zixv <bai.zixv@foxmail.com>
This commit is contained in:
bai.zixv 2024-05-23 12:01:08 +08:00 committed by sealday
parent 0596c95e18
commit 4274d7ee4a
35 changed files with 443 additions and 130 deletions

View File

@ -0,0 +1,275 @@
import { CloseCircleFilled } from '@ant-design/icons';
import { Tag, TreeSelect } from 'antd';
import type { DefaultOptionType, TreeSelectProps } from 'rc-tree-select/es/TreeSelect';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
CollectionFieldOptions_deprecated,
parseCollectionName,
useCollectionManager_deprecated,
useCompile,
} from '../../..';
export type AppendsTreeSelectPropsV2 = {
value: string[] | string;
onChange: (value: string[] | string) => void;
title?: string;
multiple?: boolean;
filter?(field): boolean;
collection?: string;
needLeaf?: boolean;
useCollection?(props: Pick<AppendsTreeSelectPropsV2, 'collection'>): string;
rootOption?: {
label: string;
value: string;
};
};
type TreeOptionType = Omit<DefaultOptionType, 'value'> & { value: string };
function usePropsCollection({ collection }) {
return collection;
}
type CallScope = {
compile?(value: string): string;
getCollectionFields?(name: any, dataSource?: string): CollectionFieldOptions_deprecated[];
filter(field): boolean;
};
function loadChildren(this, option) {
const result = getCollectionFieldOptions.call(this, option.field.target, option);
if (result.length) {
if (!result.some((item) => isAssociation(item.field))) {
option.isLeaf = true;
}
} else {
option.isLeaf = true;
}
return result;
}
function isAssociation(field) {
return field.target && field.interface;
}
function trueFilter(field) {
return true;
}
function getCollectionFieldOptions(
this: CallScope,
collection,
parentNode?,
options = { needLeaf: false },
): TreeOptionType[] {
const { needLeaf } = options;
const [dataSourceName, collectionName] = parseCollectionName(collection);
const rawFields = this.getCollectionFields(collectionName, dataSourceName);
const fields = needLeaf ? rawFields : rawFields.filter(isAssociation);
const boundLoadChildren = loadChildren.bind(this);
return fields.filter(this.filter).map((field) => {
const key = parentNode ? `${parentNode.value ? `${parentNode.value}.` : ''}${field.name}` : field.name;
const fieldTitle = this.compile(field.uiSchema?.title) ?? field.name;
const isLeaf = !this.getCollectionFields(field.target).filter(isAssociation).filter(this.filter).length;
return {
pId: parentNode?.key ?? null,
id: key,
key,
value: key,
title: fieldTitle,
isLeaf,
loadChildren: isLeaf ? null : boundLoadChildren,
field,
fullTitle: parentNode ? [...parentNode.fullTitle, fieldTitle] : [fieldTitle],
};
});
}
// XXX: 目前 AppendsTreeSelectV2 和 AppendsTreeSelect 都有特化逻辑, 需要整理出一个通用组件
export const AppendsTreeSelectV2: React.FC<TreeSelectProps & AppendsTreeSelectPropsV2> = (props) => {
const {
title,
value: propsValue,
onChange,
collection,
useCollection = usePropsCollection,
filter = trueFilter,
rootOption,
loadData: propsLoadData,
needLeaf = false,
...restProps
} = props;
const compile = useCompile();
const { t } = useTranslation();
const [optionsMap, setOptionsMap] = useState({});
const collectionString = useCollection({ collection });
const [dataSourceName, collectionName] = parseCollectionName(collectionString);
const { getCollectionFields } = useCollectionManager_deprecated(dataSourceName);
const treeData = Object.values(optionsMap);
const value: string | DefaultOptionType[] = useMemo(() => {
if (props.multiple) {
return ((propsValue as string[]) || []).map((v) => optionsMap[v]).filter(Boolean);
}
return propsValue;
}, [propsValue, props.multiple, optionsMap]);
const loadData = useCallback(
async (option) => {
if (propsLoadData != null) {
return propsLoadData(option);
}
if (!option.isLeaf && option.loadChildren) {
const children = option.loadChildren(option);
setOptionsMap((prev) => {
return children.reduce((result, item) => Object.assign(result, { [item.value]: item }), { ...prev });
});
}
},
[propsLoadData],
);
// NOTE:
useEffect(() => {
const parentNode = rootOption
? {
...rootOption,
id: rootOption.value,
key: rootOption.value,
title: rootOption.label,
fullTitle: rootOption.label,
isLeaf: false,
}
: null;
const tData =
propsLoadData === null
? []
: getCollectionFieldOptions.call({ compile, getCollectionFields, filter }, collectionString, parentNode, {
needLeaf,
});
const map = tData.reduce((result, item) => Object.assign(result, { [item.value]: item }), {});
if (parentNode) {
map[parentNode.value] = parentNode;
}
setOptionsMap(map);
}, [collectionString, rootOption, filter, propsLoadData]);
// NOTE: preload options in value
useEffect(() => {
const arr = (props.multiple ? propsValue : propsValue ? [propsValue] : []) as string[];
console.log('%c Line:160 🍑 arr', 'font-size:18px;color:#4fff4B;background:#f5ce50', arr);
if (!arr?.length || arr.every((v) => Boolean(optionsMap[v]))) {
return;
}
const loaded = [];
arr.forEach((v) => {
if (typeof v !== 'string') {
v = v.value;
}
const paths = v.split('.');
let option = optionsMap[paths[0]];
for (let i = 1; i < paths.length; i++) {
if (!option) {
break;
}
const next = paths.slice(0, i + 1).join('.');
if (optionsMap[next]) {
option = optionsMap[next];
break;
}
if (!option.isLeaf && option.loadChildren) {
const children = option.loadChildren(option);
if (children?.length) {
loaded.push(...children);
option = children.find((item) => item.value === paths.slice(0, i + 1).join('.'));
}
}
}
});
setOptionsMap((prev) => {
return loaded.reduce((result, item) => Object.assign(result, { [item.value]: item }), { ...prev });
});
}, [propsValue, treeData.length, props.multiple]);
const handleChange = useCallback(
(next: DefaultOptionType[] | string) => {
console.log('%c Line:193 🥔 next', 'font-size:18px;color:#42b983;background:#f5ce50', next);
if (!props.multiple) {
onChange(next as string | Array<any>);
return;
}
const newValue = (next as DefaultOptionType[]).map((i) => i.value).filter(Boolean) as string[];
const valueSet = new Set(newValue);
const delValue = (value as DefaultOptionType[]).find((i) => !valueSet.has(i.value as string));
if (delValue) {
const prefix = `${delValue.value}.`;
Object.keys(optionsMap).forEach((key) => {
if (key.startsWith(prefix)) {
valueSet.delete(key);
}
});
} else {
newValue.forEach((v) => {
const paths = v.split('.');
if (paths.length) {
for (let i = 1; i <= paths.length; i++) {
valueSet.add(paths.slice(0, i).join('.'));
}
}
});
}
onChange(next);
},
[props.multiple, value, onChange, optionsMap],
);
const TreeTag = useCallback(
(props) => {
const { value, onClose, disabled, closable } = props;
if (!value) {
return null;
}
const { fullTitle } = optionsMap[value] ?? {};
return (
<Tag closable={closable && !disabled} onClose={onClose}>
{fullTitle?.join(' / ')}
</Tag>
);
},
[optionsMap],
);
const filteredValue = Array.isArray(value) ? value.filter((i) => i.value in optionsMap) : value;
console.log('%c Line:247 🥕 filteredValue', 'font-size:18px;color:#6ec1c2;background:#ea7e5c', filteredValue);
const valueKeys: string[] = props.multiple
? (propsValue as string[])
: propsValue != null
? [propsValue as string]
: [];
return (
<TreeSelect
// @ts-ignore
role="button"
data-testid={`select-field${title ? `-${title}` : ''}`}
value={filteredValue}
placeholder={t('Select field')}
showCheckedStrategy={TreeSelect.SHOW_ALL}
treeDefaultExpandedKeys={valueKeys}
allowClear={{
clearIcon: <CloseCircleFilled role="button" aria-label="icon-close" />,
}}
treeCheckStrictly={props.multiple}
treeCheckable={props.multiple}
tagRender={TreeTag}
onChange={handleChange as (next) => void}
treeDataSimpleMode
treeData={treeData}
loadData={loadData}
{...restProps}
/>
);
};

View File

@ -1 +1,2 @@
export * from './AppendsTreeSelect'; export * from './AppendsTreeSelect';
export * from './AppendsTreeSelectV2';

View File

@ -96,7 +96,7 @@ export const CollectionApprovalTodos = {
}, },
{ {
type: 'string', type: 'string',
name: 'summaryString', name: 'summary',
interface: 'input', interface: 'input',
uiSchema: { uiSchema: {
type: 'string', type: 'string',

View File

@ -118,8 +118,7 @@ export class ApprovalTrigger extends Trigger {
type: 'array', type: 'array',
title: '{{t("Select fields to display in the approval summary", { ns: "workflow" })}}', title: '{{t("Select fields to display in the approval summary", { ns: "workflow" })}}',
'x-decorator': 'FormItem', 'x-decorator': 'FormItem',
// TODO: 需要更换为能支持同时选择普通字段和关联字段的组件.目前只能选择关联字段.走通业务逻辑为先 'x-component': 'AppendsTreeSelectV2',
'x-component': 'AppendsTreeSelect',
'x-component-props': { 'x-component-props': {
title: 'Preload associations', title: 'Preload associations',
multiple: true, multiple: true,

View File

@ -142,13 +142,13 @@ export const SchemaApprovalBlockLaunch = {
}, },
}, },
}, },
summaryString: { summary: {
type: 'void', type: 'void',
'x-decorator': 'TableV2.Column.Decorator', 'x-decorator': 'TableV2.Column.Decorator',
'x-component': 'TableV2.Column', 'x-component': 'TableV2.Column',
title: tval('Approval Summary'), title: tval('Approval Summary'),
properties: { properties: {
summaryString: { summary: {
type: 'string', type: 'string',
'x-component': 'CollectionField', 'x-component': 'CollectionField',
'x-read-pretty': true, 'x-read-pretty': true,

View File

@ -143,13 +143,13 @@ export const SchemaApprovalBlockTodos = {
}, },
}, },
}, },
summaryString: { summary: {
type: 'void', type: 'void',
'x-decorator': 'TableV2.Column.Decorator', 'x-decorator': 'TableV2.Column.Decorator',
'x-component': 'TableV2.Column', 'x-component': 'TableV2.Column',
title: tval('Approval Summary'), title: tval('Approval Summary'),
properties: { properties: {
summaryString: { summary: {
type: 'string', type: 'string',
'x-component': 'CollectionField', 'x-component': 'CollectionField',
'x-read-pretty': true, 'x-read-pretty': true,

View File

@ -73,7 +73,7 @@ export const CollectionApprovals = {
}, },
{ {
type: 'string', type: 'string',
name: 'summaryString', name: 'summary',
interface: 'input', interface: 'input',
uiSchema: { uiSchema: {
type: 'string', type: 'string',

View File

@ -1,14 +1,31 @@
import { useCollectionManager, useCollectionRecordData, useCompile } from '@tachybase/client';
import React from 'react'; import React from 'react';
import useStyles from './style';
export const ApprovalsSummary = (props) => { export const ApprovalsSummary = (props) => {
const { value = '', style } = props; const { value = '' } = props;
const valueArray = value.split(','); const record = useCollectionRecordData();
const cm = useCollectionManager();
const compile = useCompile();
const { styles } = useStyles();
const { collectionName } = record;
const results = Object.entries(value).map(([key, objValue]) => {
const field = cm.getCollectionField(`${collectionName}.${key}`);
return {
label: compile(field?.uiSchema?.title || key),
value: Object.prototype.toString.call(objValue) === '[object Object]' ? objValue?.['name'] : objValue,
};
});
// 展示结果要展示一个数组对象, 是 label 和 value 的形式
// label 放中文, value 放值
return ( return (
<div> <div className={styles.ApprovalsSummaryStyle}>
{valueArray.map((val) => ( {results.map((item) => (
<div style={style} key={val}> <div className={`${styles.ApprovalsSummaryStyle}-item`} key={item.label}>
{val} <div className={`${styles.ApprovalsSummaryStyle}-item-label`}>{`${item.label}:`}&nbsp;&nbsp;&nbsp;</div>
<div className={`${styles.ApprovalsSummaryStyle}-item-value`}>{item.value}</div>
</div> </div>
))} ))}
</div> </div>

View File

@ -0,0 +1,27 @@
import { createStyles } from '@tachybase/client';
const useStyles = createStyles(({ css }) => {
return {
ApprovalsSummaryStyle: css`
text-align: left;
&-item {
display: flex;
flex-direction: row;
align-items: baseline;
overflow: hidden;
&-label {
text-overflow: ellipsis;
white-space: nowrap;
color: #aaa;
}
&-value {
text-overflow: ellipsis;
white-space: nowrap;
}
}
`,
};
});
export default useStyles;

View File

@ -127,7 +127,7 @@ export default class ApprovalInstruction extends Instruction {
filter: { filter: {
'executions.id': processor.execution.id, 'executions.id': processor.execution.id,
}, },
fields: ['id', 'status', 'data', 'summaryString'], fields: ['id', 'status', 'data', 'summary', 'collectionName'],
appends: ['approvalExecutions'], appends: ['approvalExecutions'],
except: ['data'], except: ['data'],
}); });
@ -145,7 +145,8 @@ export default class ApprovalInstruction extends Instruction {
index, index,
status: node.config.order && index ? APPROVAL_ACTION_STATUS.ASSIGNED : APPROVAL_ACTION_STATUS.PENDING, status: node.config.order && index ? APPROVAL_ACTION_STATUS.ASSIGNED : APPROVAL_ACTION_STATUS.PENDING,
snapshot: approvalExecution.snapshot, snapshot: approvalExecution.snapshot,
summaryString: approval.summaryString, summary: approval.summary,
collectionName: approval.collectionName,
})), })),
{ {
transaction: processor.transaction, transaction: processor.transaction,

View File

@ -5,7 +5,7 @@ import { parseCollectionName } from '@tachybase/data-source-manager';
import { EXECUTION_STATUS, Trigger, toJSON, JOB_STATUS } from '@tachybase/plugin-workflow'; import { EXECUTION_STATUS, Trigger, toJSON, JOB_STATUS } from '@tachybase/plugin-workflow';
import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from './constants'; import { APPROVAL_ACTION_STATUS, APPROVAL_STATUS } from './constants';
import { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage'; import { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage';
import { getSummaryString } from './tools'; import { getSummary } from './tools';
const ExecutionStatusMap = { const ExecutionStatusMap = {
[EXECUTION_STATUS.RESOLVED]: APPROVAL_STATUS.APPROVED, [EXECUTION_STATUS.RESOLVED]: APPROVAL_STATUS.APPROVED,
@ -52,10 +52,11 @@ export default class ApprovalTrigger extends Trigger {
data: toJSON(data), data: toJSON(data),
approvalId: approval.id, approvalId: approval.id,
applicantRoleName: approval.applicantRoleName, applicantRoleName: approval.applicantRoleName,
summaryString: getSummaryString({ summary: getSummary({
summaryConfig: workflow.config.summary, summaryConfig: workflow.config.summary,
data, data,
}), }),
collectionName: approval.collectionName,
}, },
{ transaction }, { transaction },
); );
@ -65,14 +66,15 @@ export default class ApprovalTrigger extends Trigger {
if (workflow.type !== ApprovalTrigger.TYPE) { if (workflow.type !== ApprovalTrigger.TYPE) {
return; return;
} }
const { approvalId, data, summaryString } = execution.context; const { approvalId, data, summary, collectionName } = execution.context;
const approvalExecution = await this.workflow.db.getRepository('approvalExecutions').create({ const approvalExecution = await this.workflow.db.getRepository('approvalExecutions').create({
values: { values: {
approvalId, approvalId,
executionId: execution.id, executionId: execution.id,
status: execution.status, status: execution.status,
snapshot: data, snapshot: data,
summaryString: summaryString, summary,
collectionName,
}, },
transaction, transaction,
}); });
@ -198,7 +200,10 @@ export default class ApprovalTrigger extends Trigger {
// updatedById: currentUser.id, // updatedById: currentUser.id,
workflowId: workflow.id, workflowId: workflow.id,
workflowKey: workflow.key, workflowKey: workflow.key,
summaryString: '12,11,15', summary: getSummary({
summaryConfig: workflow.config.summary,
data,
}),
}, },
context, context,
}); });
@ -231,7 +236,6 @@ export default class ApprovalTrigger extends Trigger {
const { repository } = this.workflow.app.dataSourceManager.dataSources const { repository } = this.workflow.app.dataSourceManager.dataSources
.get(dataSourceName) .get(dataSourceName)
.collectionManager.getCollection(collectionName); .collectionManager.getCollection(collectionName);
const curretSummaryConfig = workflow.config?.summary || [];
dataCurrent = await repository.findOne({ dataCurrent = await repository.findOne({
filterByTk: data.id, filterByTk: data.id,
appends: [...workflow.config.appends], appends: [...workflow.config.appends],
@ -268,7 +272,7 @@ export default class ApprovalTrigger extends Trigger {
workflowId: workflow.id, workflowId: workflow.id,
workflowKey: workflow.key, workflowKey: workflow.key,
applicantRoleName: context.state.currentRole, applicantRoleName: context.state.currentRole,
summaryString: getSummaryString({ summary: getSummary({
summaryConfig: workflow.config.summary, summaryConfig: workflow.config.summary,
data: dataCurrent, data: dataCurrent,
}), }),

View File

@ -2,6 +2,7 @@ import actions, { utils } from '@tachybase/actions';
import WorkflowPlugin, { EXECUTION_STATUS, JOB_STATUS, toJSON } from '@tachybase/plugin-workflow'; import WorkflowPlugin, { EXECUTION_STATUS, JOB_STATUS, toJSON } from '@tachybase/plugin-workflow';
import { APPROVAL_STATUS, APPROVAL_ACTION_STATUS } from './constants'; import { APPROVAL_STATUS, APPROVAL_ACTION_STATUS } from './constants';
import { parseCollectionName } from '@tachybase/data-source-manager'; import { parseCollectionName } from '@tachybase/data-source-manager';
import { getSummary } from './tools';
const workflows = { const workflows = {
async listApprovalFlows(context, next) { async listApprovalFlows(context, next) {
@ -60,7 +61,10 @@ const approvals = {
dataKey: values[collection.filterTargetKey], dataKey: values[collection.filterTargetKey],
workflowKey: workflow.key, workflowKey: workflow.key,
applicantRoleName: context.state.currentRole, applicantRoleName: context.state.currentRole,
summary: toJSON(workflow.config?.summary ?? []), summary: getSummary({
summaryConfig: workflow.config.summary,
data: instance,
}),
}, },
}); });
return actions.create(context, next); return actions.create(context, next);
@ -238,7 +242,8 @@ const approvalRecords = {
status: values.status, status: values.status,
comment: values.comment, comment: values.comment,
snapshot: approvalRecord.approval.data, snapshot: approvalRecord.approval.data,
summaryString: approvalRecord.approval.summaryString, summary: approvalRecord.approval.summary,
collectionName: approvalRecord.approval.collectionName,
}); });
context.body = approvalRecord.get(); context.body = approvalRecord.get();
context.status = 202; context.status = 202;

View File

@ -6,6 +6,10 @@ export default defineCollection({
dumpRules: 'required', dumpRules: 'required',
name: 'approvalExecutions', name: 'approvalExecutions',
fields: [ fields: [
{
type: 'string',
name: 'collectionName',
},
{ {
type: 'bigInt', type: 'bigInt',
name: 'id', name: 'id',
@ -32,6 +36,11 @@ export default defineCollection({
type: 'jsonb', type: 'jsonb',
name: 'snapshot', name: 'snapshot',
}, },
{
type: 'jsonb',
name: 'summary',
defaultValue: {},
},
{ {
type: 'hasMany', type: 'hasMany',
name: 'records', name: 'records',

View File

@ -6,6 +6,10 @@ export default defineCollection({
dumpRules: 'required', dumpRules: 'required',
name: 'approvalRecords', name: 'approvalRecords',
fields: [ fields: [
{
type: 'string',
name: 'collectionName',
},
{ {
type: 'belongsTo', type: 'belongsTo',
name: 'approval', name: 'approval',
@ -51,9 +55,9 @@ export default defineCollection({
defaultValue: {}, defaultValue: {},
}, },
{ {
type: 'string', type: 'jsonb',
name: 'summaryString', name: 'summary',
defaultValue: '', defaultValue: {},
}, },
{ {
type: 'text', type: 'text',

View File

@ -62,9 +62,9 @@ export default defineCollection({
defaultValue: {}, defaultValue: {},
}, },
{ {
type: 'string', type: 'jsonb',
name: 'summaryString', name: 'summary',
defaultValue: '', defaultValue: {},
}, },
{ {
type: 'belongsTo', type: 'belongsTo',

View File

@ -5,17 +5,16 @@ interface ParamsType {
data: object; data: object;
} }
export function getSummaryString(params: ParamsType): string { export function getSummary(params: ParamsType): object {
const { summaryConfig = [], data } = params; const { summaryConfig = [], data } = params;
const result = summaryConfig
.map((key) => { const result = summaryConfig.reduce((summary, key) => {
const value = _.get(data, key); const value = _.get(data, key);
// XXX: 丑陋的实现, 不应该依赖具体字段, 应该从 summaryConfig, 拿到的就是最终的值, 走通优先 return {
if (Object.prototype.toString.call(value) === '[object Object]') { ...summary,
return _.get(value, 'name'); [key]: value,
} };
return _.get(data, key); }, {});
})
.join(',');
return result; return result;
} }

View File

@ -21,7 +21,6 @@
"@types/jsonwebtoken": "^8.5.8", "@types/jsonwebtoken": "^8.5.8",
"ahooks": "^3.7.2", "ahooks": "^3.7.2",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"async-mutex": "^0.3.2", "async-mutex": "^0.3.2",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"lodash": "4.17.21", "lodash": "4.17.21",

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
export const useStyles = createStyles(({ css }) => { export const useStyles = createStyles(({ css }) => {
return css` return css`

View File

@ -15,7 +15,6 @@
"devDependencies": { "devDependencies": {
"@ant-design/icons": "~5.3.6", "@ant-design/icons": "~5.3.6",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"react-i18next": "^11.15.1", "react-i18next": "^11.15.1",
"swagger-ui-dist": "^5.3.1" "swagger-ui-dist": "^5.3.1"
}, },

View File

@ -1,7 +1,7 @@
import { RightOutlined } from '@ant-design/icons'; import { RightOutlined } from '@ant-design/icons';
import { Plugin } from '@tachybase/client'; import { Plugin } from '@tachybase/client';
import { Button, Tooltip } from 'antd'; import { Button, Tooltip } from 'antd';
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
import React, { lazy } from 'react'; import React, { lazy } from 'react';
import { NAMESPACE } from '../locale'; import { NAMESPACE } from '../locale';

View File

@ -21,7 +21,6 @@
"@tachybase/components": "workspace:*", "@tachybase/components": "workspace:*",
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"cron-parser": "4.4.0", "cron-parser": "4.4.0",
"dayjs": "^1.11.8", "dayjs": "^1.11.8",
"lodash": "^4.17.21", "lodash": "^4.17.21",

View File

@ -1,4 +1,4 @@
import { createGlobalStyle } from 'antd-style'; import { createGlobalStyle } from '@tachybase/client';
const GlobalStyle = createGlobalStyle` const GlobalStyle = createGlobalStyle`
.rbc-overlay { .rbc-overlay {

View File

@ -16,7 +16,6 @@
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",
"ahooks": "^3.7.2", "ahooks": "^3.7.2",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"react-i18next": "^11.15.1", "react-i18next": "^11.15.1",

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
export const useStyles = createStyles(({ css }) => { export const useStyles = createStyles(({ css }) => {
return css` return css`

View File

@ -16,7 +16,6 @@
"@tachybase/components": "workspace:*", "@tachybase/components": "workspace:*",
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"lodash": "4.17.21", "lodash": "4.17.21",
"react-i18next": "^11.15.1" "react-i18next": "^11.15.1"
}, },

View File

@ -1,5 +1,5 @@
import { TinyColor } from '@ctrl/tinycolor'; import { TinyColor } from '@ctrl/tinycolor';
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
const useStyles = createStyles(({ token, css }) => { const useStyles = createStyles(({ token, css }) => {
const colorFillAlterSolid = new TinyColor(token.colorFillAlter) const colorFillAlterSolid = new TinyColor(token.colorFillAlter)

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
const useStyles = createStyles(({ token, css }) => { const useStyles = createStyles(({ token, css }) => {
return { return {

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
const useStyles = createStyles(({ token, css }) => { const useStyles = createStyles(({ token, css }) => {
return { return {
@ -60,7 +60,7 @@ const useStyles = createStyles(({ token, css }) => {
.horizontalScroll: { .horizontalScroll: {
height: 1 height: 1
} }
.verticalScroll: { .verticalScroll: {
overflow: hidden auto; overflow: hidden auto;
width: 1rem; width: 1rem;

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
const useStyles = createStyles(({ token, css }) => { const useStyles = createStyles(({ token, css }) => {
return { return {

View File

@ -15,7 +15,6 @@
"@tachybase/components": "workspace:*", "@tachybase/components": "workspace:*",
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.4.5",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"lodash": "4.17.21", "lodash": "4.17.21",
"react-beautiful-dnd": "^13.1.0", "react-beautiful-dnd": "^13.1.0",

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
export const useStyles = createStyles(({ css, token }) => { export const useStyles = createStyles(({ css, token }) => {
return { return {

View File

@ -15,7 +15,6 @@
"antd": "5.16.1", "antd": "5.16.1",
"antd-mobile": "^5.35.0", "antd-mobile": "^5.35.0",
"antd-mobile-icons": "^0.3.0", "antd-mobile-icons": "^0.3.0",
"antd-style": "3.x",
"classnames": "2.x", "classnames": "2.x",
"lodash": "4.17.21", "lodash": "4.17.21",
"react": "~18.2.0", "react": "~18.2.0",

View File

@ -11,7 +11,6 @@
"devDependencies": { "devDependencies": {
"@tachybase/schema": "workspace:*", "@tachybase/schema": "workspace:*",
"antd": "5.16.1", "antd": "5.16.1",
"antd-style": "3.x",
"async-mutex": "^0.3.2", "async-mutex": "^0.3.2",
"lodash": "4.17.21", "lodash": "4.17.21",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",

View File

@ -1,4 +1,4 @@
import { createStyles } from 'antd-style'; import { createStyles } from '@tachybase/client';
export const useStyles = createStyles(({ token }) => { export const useStyles = createStyles(({ token }) => {
return { return {

View File

@ -1811,9 +1811,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
async-mutex: async-mutex:
specifier: ^0.3.2 specifier: ^0.3.2
version: 0.3.2 version: 0.3.2
@ -1972,9 +1969,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
react-i18next: react-i18next:
specifier: ^11.15.1 specifier: ^11.15.1
version: 11.18.6(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0) version: 11.18.6(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0)
@ -2198,9 +2192,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
cron-parser: cron-parser:
specifier: 4.4.0 specifier: 4.4.0
version: 4.4.0 version: 4.4.0
@ -2459,9 +2450,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
classnames: classnames:
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.5.1 version: 2.5.1
@ -2773,9 +2761,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
lodash: lodash:
specifier: 4.17.21 specifier: 4.17.21
version: 4.17.21 version: 4.17.21
@ -2984,9 +2969,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.4.5
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
classnames: classnames:
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.5.1 version: 2.5.1
@ -3889,9 +3871,6 @@ importers:
antd-mobile-icons: antd-mobile-icons:
specifier: ^0.3.0 specifier: ^0.3.0
version: 0.3.0 version: 0.3.0
antd-style:
specifier: 3.x
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
classnames: classnames:
specifier: 2.x specifier: 2.x
version: 2.5.1 version: 2.5.1
@ -3935,9 +3914,6 @@ importers:
antd: antd:
specifier: 5.16.1 specifier: 5.16.1
version: 5.16.1(react-dom@18.2.0)(react@18.2.0) version: 5.16.1(react-dom@18.2.0)(react@18.2.0)
antd-style:
specifier: 3.x
version: 3.4.5(@types/react@18.2.79)(antd@5.16.1)(react-dom@18.2.0)(react@18.2.0)
async-mutex: async-mutex:
specifier: ^0.3.2 specifier: ^0.3.2
version: 0.3.2 version: 0.3.2
@ -6220,7 +6196,7 @@ packages:
'@babel/parser': 7.23.6 '@babel/parser': 7.23.6
'@babel/template': 7.22.15 '@babel/template': 7.22.15
'@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/traverse': 7.23.6(supports-color@5.5.0)
'@babel/types': 7.23.6 '@babel/types': 7.24.5
convert-source-map: 1.9.0 convert-source-map: 1.9.0
debug: 4.3.4(supports-color@5.5.0) debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
@ -6264,7 +6240,7 @@ packages:
'@babel/parser': 7.24.4 '@babel/parser': 7.24.4
'@babel/template': 7.24.0 '@babel/template': 7.24.0
'@babel/traverse': 7.24.1 '@babel/traverse': 7.24.1
'@babel/types': 7.24.0 '@babel/types': 7.24.5
convert-source-map: 2.0.0 convert-source-map: 2.0.0
debug: 4.3.4(supports-color@5.5.0) debug: 4.3.4(supports-color@5.5.0)
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
@ -6327,7 +6303,7 @@ packages:
resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
'@jridgewell/gen-mapping': 0.3.3 '@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20 '@jridgewell/trace-mapping': 0.3.20
jsesc: 2.5.2 jsesc: 2.5.2
@ -6336,7 +6312,7 @@ packages:
resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.24.0 '@babel/types': 7.24.5
'@jridgewell/gen-mapping': 0.3.5 '@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2 jsesc: 2.5.2
@ -6354,13 +6330,13 @@ packages:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
dev: false dev: false
/@babel/helper-compilation-targets@7.23.6: /@babel/helper-compilation-targets@7.23.6:
@ -6427,26 +6403,26 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/template': 7.22.15 '@babel/template': 7.22.15
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-hoist-variables@7.22.5: /@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-member-expression-to-functions@7.23.0: /@babel/helper-member-expression-to-functions@7.23.0:
resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
dev: false dev: false
/@babel/helper-module-imports@7.22.15: /@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-module-imports@7.24.3: /@babel/helper-module-imports@7.24.3:
resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==}
@ -6462,10 +6438,10 @@ packages:
dependencies: dependencies:
'@babel/core': 7.22.10 '@babel/core': 7.22.10
'@babel/helper-environment-visitor': 7.22.20 '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5 '@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.24.5
/@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
@ -6475,10 +6451,10 @@ packages:
dependencies: dependencies:
'@babel/core': 7.23.6 '@babel/core': 7.23.6
'@babel/helper-environment-visitor': 7.22.20 '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5 '@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.24.5
/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
@ -6488,10 +6464,10 @@ packages:
dependencies: dependencies:
'@babel/core': 7.24.4 '@babel/core': 7.24.4
'@babel/helper-environment-visitor': 7.22.20 '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.24.3
'@babel/helper-simple-access': 7.22.5 '@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.24.5
/@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5):
resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==}
@ -6510,7 +6486,7 @@ packages:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
dev: false dev: false
/@babel/helper-plugin-utils@7.22.5: /@babel/helper-plugin-utils@7.22.5:
@ -6549,7 +6525,7 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-simple-access@7.24.5: /@babel/helper-simple-access@7.24.5:
resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==}
@ -6561,14 +6537,14 @@ packages:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
dev: false dev: false
/@babel/helper-split-export-declaration@7.22.6: /@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@babel/helper-split-export-declaration@7.24.5: /@babel/helper-split-export-declaration@7.24.5:
resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==}
@ -6602,7 +6578,7 @@ packages:
dependencies: dependencies:
'@babel/helper-function-name': 7.23.0 '@babel/helper-function-name': 7.23.0
'@babel/template': 7.22.15 '@babel/template': 7.22.15
'@babel/types': 7.23.6 '@babel/types': 7.24.5
dev: false dev: false
/@babel/helpers@7.23.6: /@babel/helpers@7.23.6:
@ -6621,7 +6597,7 @@ packages:
dependencies: dependencies:
'@babel/template': 7.24.0 '@babel/template': 7.24.0
'@babel/traverse': 7.24.1 '@babel/traverse': 7.24.1
'@babel/types': 7.24.0 '@babel/types': 7.24.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -6639,7 +6615,7 @@ packages:
resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.24.5
chalk: 2.4.2 chalk: 2.4.2
js-tokens: 4.0.0 js-tokens: 4.0.0
picocolors: 1.0.0 picocolors: 1.0.0
@ -6656,7 +6632,7 @@ packages:
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
'@babel/types': 7.24.0 '@babel/types': 7.24.5
/@babel/parser@7.24.5: /@babel/parser@7.24.5:
resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==}
@ -7613,7 +7589,7 @@ packages:
dependencies: dependencies:
'@babel/code-frame': 7.24.2 '@babel/code-frame': 7.24.2
'@babel/parser': 7.24.4 '@babel/parser': 7.24.4
'@babel/types': 7.24.0 '@babel/types': 7.24.5
/@babel/traverse@7.23.6(supports-color@5.5.0): /@babel/traverse@7.23.6(supports-color@5.5.0):
resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==}
@ -7626,7 +7602,7 @@ packages:
'@babel/helper-hoist-variables': 7.22.5 '@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.6 '@babel/parser': 7.23.6
'@babel/types': 7.23.6 '@babel/types': 7.24.5
debug: 4.3.4(supports-color@5.5.0) debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
@ -7643,7 +7619,7 @@ packages:
'@babel/helper-hoist-variables': 7.22.5 '@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.24.4 '@babel/parser': 7.24.4
'@babel/types': 7.24.0 '@babel/types': 7.24.5
debug: 4.3.4(supports-color@5.5.0) debug: 4.3.4(supports-color@5.5.0)
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
@ -7674,14 +7650,6 @@ packages:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0 to-fast-properties: 2.0.0
/@babel/types@7.24.0:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.24.1
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
/@babel/types@7.24.5: /@babel/types@7.24.5:
resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@ -8340,6 +8308,7 @@ packages:
'@types/react': 18.2.79 '@types/react': 18.2.79
hoist-non-react-statics: 3.3.2 hoist-non-react-statics: 3.3.2
react: 18.2.0 react: 18.2.0
dev: false
/@emotion/serialize@1.1.2: /@emotion/serialize@1.1.2:
resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==}
@ -8363,6 +8332,7 @@ packages:
html-tokenize: 2.0.1 html-tokenize: 2.0.1
multipipe: 1.0.2 multipipe: 1.0.2
through: 2.3.8 through: 2.3.8
dev: false
/@emotion/sheet@1.2.2: /@emotion/sheet@1.2.2:
resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==}
@ -8383,6 +8353,7 @@ packages:
react: '>=16.8.0' react: '>=16.8.0'
dependencies: dependencies:
react: 18.2.0 react: 18.2.0
dev: false
/@emotion/utils@1.2.1: /@emotion/utils@1.2.1:
resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==}
@ -11906,7 +11877,7 @@ packages:
resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==}
engines: {node: '>=10'} engines: {node: '>=10'}
dependencies: dependencies:
'@babel/types': 7.24.0 '@babel/types': 7.24.5
entities: 4.5.0 entities: 4.5.0
/@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1): /@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1):
@ -12102,23 +12073,23 @@ packages:
/@types/babel__generator@7.6.7: /@types/babel__generator@7.6.7:
resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@types/babel__template@7.4.4: /@types/babel__template@7.4.4:
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
dependencies: dependencies:
'@babel/parser': 7.23.6 '@babel/parser': 7.23.6
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@types/babel__traverse@7.20.4: /@types/babel__traverse@7.20.4:
resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==}
dependencies: dependencies:
'@babel/types': 7.23.6 '@babel/types': 7.24.5
/@types/babel__traverse@7.20.5: /@types/babel__traverse@7.20.5:
resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
dependencies: dependencies:
'@babel/types': 7.24.0 '@babel/types': 7.24.5
/@types/body-parser@1.19.5: /@types/body-parser@1.19.5:
resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
@ -13863,7 +13834,7 @@ packages:
'@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4)
react-refresh: 0.14.0 react-refresh: 0.14.0
vite: 4.5.2(@types/node@20.12.2)(less@4.1.3) vite: 4.5.2(@types/node@20.12.8)(less@4.1.3)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -14457,6 +14428,7 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- react-dom - react-dom
dev: false
/antd@5.16.1(react-dom@18.2.0)(react@18.2.0): /antd@5.16.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-XAlLRrgYV+nj9FHnkXEPS6HNcKcluEa8v44e7Cixjlp8aOXRhUI6IfZaKpc2MPGjQ+06rp62/dsxOUNJW9kfLA==} resolution: {integrity: sha512-XAlLRrgYV+nj9FHnkXEPS6HNcKcluEa8v44e7Cixjlp8aOXRhUI6IfZaKpc2MPGjQ+06rp62/dsxOUNJW9kfLA==}
@ -15086,7 +15058,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies: dependencies:
'@babel/template': 7.24.0 '@babel/template': 7.24.0
'@babel/types': 7.24.0 '@babel/types': 7.24.5
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.5 '@types/babel__traverse': 7.20.5
@ -15140,7 +15112,7 @@ packages:
styled-components: '>= 2' styled-components: '>= 2'
dependencies: dependencies:
'@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.24.3
'@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.22.10) '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.22.10)
lodash: 4.17.21 lodash: 4.17.21
picomatch: 2.3.1 picomatch: 2.3.1
@ -15545,6 +15517,7 @@ packages:
/buffer-from@0.1.2: /buffer-from@0.1.2:
resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==}
dev: false
/buffer-from@1.1.2: /buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@ -20603,6 +20576,7 @@ packages:
minimist: 1.2.8 minimist: 1.2.8
readable-stream: 1.0.34 readable-stream: 1.0.34
through2: 0.4.2 through2: 0.4.2
dev: false
/html-webpack-plugin@5.5.0(webpack@5.91.0): /html-webpack-plugin@5.5.0(webpack@5.91.0):
resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==}
@ -23410,6 +23384,7 @@ packages:
dependencies: dependencies:
duplexer2: 0.1.4 duplexer2: 0.1.4
object-assign: 4.1.1 object-assign: 4.1.1
dev: false
/mute-stdout@1.0.1: /mute-stdout@1.0.1:
resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==} resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==}
@ -23857,6 +23832,7 @@ packages:
/object-keys@0.4.0: /object-keys@0.4.0:
resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==}
dev: false
/object-keys@1.1.1: /object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@ -27059,6 +27035,7 @@ packages:
inherits: 2.0.4 inherits: 2.0.4
isarray: 0.0.1 isarray: 0.0.1
string_decoder: 0.10.31 string_decoder: 0.10.31
dev: false
/readable-stream@1.1.14: /readable-stream@1.1.14:
resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
@ -28893,7 +28870,7 @@ packages:
react-dom: '>= 16.8.0' react-dom: '>= 16.8.0'
react-is: '>= 16.8.0' react-is: '>= 16.8.0'
dependencies: dependencies:
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.24.3
'@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/traverse': 7.23.6(supports-color@5.5.0)
'@emotion/is-prop-valid': 1.2.1 '@emotion/is-prop-valid': 1.2.1
'@emotion/stylis': 0.8.5 '@emotion/stylis': 0.8.5
@ -29375,6 +29352,7 @@ packages:
dependencies: dependencies:
readable-stream: 1.0.34 readable-stream: 1.0.34
xtend: 2.1.2 xtend: 2.1.2
dev: false
/through2@2.0.5: /through2@2.0.5:
resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
@ -30527,6 +30505,7 @@ packages:
react: '>= 16.x' react: '>= 16.x'
dependencies: dependencies:
react: 18.2.0 react: 18.2.0
dev: false
/use-sync-external-store@1.2.0(react@18.2.0): /use-sync-external-store@1.2.0(react@18.2.0):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
@ -30779,6 +30758,7 @@ packages:
rollup: 3.29.4 rollup: 3.29.4
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
dev: false
/vite@4.5.2(@types/node@20.12.8)(less@4.1.3): /vite@4.5.2(@types/node@20.12.8)(less@4.1.3):
resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==}
@ -30815,7 +30795,6 @@ packages:
rollup: 3.29.4 rollup: 3.29.4
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true
/vite@5.1.5(@types/node@20.12.8)(sass@1.75.0): /vite@5.1.5(@types/node@20.12.8)(sass@1.75.0):
resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==}
@ -31543,6 +31522,7 @@ packages:
engines: {node: '>=0.4'} engines: {node: '>=0.4'}
dependencies: dependencies:
object-keys: 0.4.0 object-keys: 0.4.0
dev: false
/xtend@4.0.2: /xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}