diff --git a/.changeset/tiny-starfishes-smash.md b/.changeset/tiny-starfishes-smash.md new file mode 100644 index 000000000..f16266304 --- /dev/null +++ b/.changeset/tiny-starfishes-smash.md @@ -0,0 +1,7 @@ +--- +"@nocobase/plugin-mobile-client": patch +"@hera/plugin-mobile": patch +"@nocobase/client": patch +--- + +collapse diff --git a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx index adce62eda..ab91dd137 100644 --- a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx @@ -1,4 +1,4 @@ -import Icon, { TableOutlined } from '@ant-design/icons'; +import { TableOutlined } from '@ant-design/icons'; import { Divider, Empty, Input, MenuProps, Spin } from 'antd'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -13,6 +13,7 @@ import { useCompile } from '../../schema-component'; import { useSchemaTemplateManager } from '../../schema-templates'; import { useCollectionDataSourceItems } from '../utils'; import { DataSource } from '../../data-source'; +import { Icon } from '../../icon'; const MENU_ITEM_HEIGHT = 40; const STEP = 15; diff --git a/packages/plugins/@hera/plugin-mobile/package.json b/packages/plugins/@hera/plugin-mobile/package.json index 2b2dc7192..9629bb13c 100644 --- a/packages/plugins/@hera/plugin-mobile/package.json +++ b/packages/plugins/@hera/plugin-mobile/package.json @@ -2,9 +2,16 @@ "name": "@hera/plugin-mobile", "version": "1.0.4", "main": "dist/server/index.js", - "dependencies": { + "devDependencies": { + "@ant-design/icons": "5.x", "@nocobase/schema": "workspace:*", - "antd-mobile": "^5.29.1" + "@types/lodash": "^4.17.0", + "antd": "^5.12.8", + "antd-mobile": "^5.33.1", + "antd-mobile-icons": "^0.3.0", + "classnames": "^2.3.1", + "lodash": "4.17.21", + "react-i18next": "^11.15.1" }, "peerDependencies": { "@nocobase/client": "workspace:*", diff --git a/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/index.tsx b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/index.tsx new file mode 100644 index 000000000..a227b73fd --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/index.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Icon } from '@nocobase/client'; + +import NoticeSvg from './notice.svg'; +import SwiperSvg from './swiper.svg'; +import TabSearchSvg from './tab-search.svg'; + +export const loadBase64Icon = (base64: string) => () => ( +
+); + +export const NoticeIcon = (props: any) => ; +export const SwiperIcon = (props: any) => ; +export const TabSearchIcon = (props: any) => ; + +Icon.register({ + 'notice-block': NoticeIcon, + 'swiper-block': SwiperIcon, + 'tab-search': TabSearchIcon, +}); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/notice.svg b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/notice.svg new file mode 100644 index 000000000..48ae1c7c1 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/notice.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/swiper.svg b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/swiper.svg new file mode 100644 index 000000000..795785af2 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/swiper.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/tab-search.svg b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/tab-search.svg new file mode 100644 index 000000000..82d14a722 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/assets/svg/tab-search.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/packages/plugins/@hera/plugin-mobile/src/client/index.tsx b/packages/plugins/@hera/plugin-mobile/src/client/index.tsx index bb895bdc1..735ee26d4 100644 --- a/packages/plugins/@hera/plugin-mobile/src/client/index.tsx +++ b/packages/plugins/@hera/plugin-mobile/src/client/index.tsx @@ -1,46 +1,16 @@ import { Plugin } from '@nocobase/client'; -import { SwiperBlock, SwiperBlockInitializer } from './schema-initializer/SwiperBlockInitializer'; -import { TabSearchBlock, TabSearchBlockInitializer } from './schema-initializer/TabSearchBlockInitializer'; -import { NoticeBlock, NoticeBlockInitializer } from './schema-initializer/NoticeBlockInitializer'; - -export class PluginMobileClient extends Plugin { - async afterAdd() {} +import PluginBlock from './schma-block'; +import PluginTabSearch from './schma-component/tab-search'; +import './assets/svg/index'; +class PluginMobileClient extends Plugin { async beforeLoad() {} - async load() { - this.app.addComponents({ - NoticeBlock, - NoticeBlockInitializer, - SwiperBlock, - SwiperBlockInitializer, - TabSearchBlock, - TabSearchBlockInitializer, - }); - this.app.schemaInitializerManager.addItem('MBlockInitializers', 'dataBlocks.swiper', { - title: 'swiper', - name: 'swiper', - type: 'item', - Component: 'SwiperBlockInitializer', - }); - this.app.schemaInitializerManager.addItem('MBlockInitializers', 'dataBlocks.notice', { - title: 'notice', - name: 'notice', - type: 'item', - Component: 'NoticeBlockInitializer', - }); + async load() {} - this.app.schemaInitializerManager.addItem('MBlockInitializers', 'filterBlocks', { - title: '{{t("Filter blocks")}}', - type: 'itemGroup', - children: [ - { - name: 'tabSearch', - title: 'tabSearch', - Component: 'TabSearchBlockInitializer', - }, - ], - }); + async afterAdd() { + this.pm.add(PluginBlock); + this.pm.add(PluginTabSearch); } } diff --git a/packages/plugins/@hera/plugin-mobile/src/client/locale.tsx b/packages/plugins/@hera/plugin-mobile/src/client/locale.tsx new file mode 100644 index 000000000..6941f42af --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/locale.tsx @@ -0,0 +1,15 @@ +import { useApp, tval as nTval, i18n } from '@nocobase/client'; + +const NAMESPACE = '@hera/plugin-mobile'; + +export const useTranslation = (): any => { + const { i18n } = useApp(); + const t = (key: string, props = {}) => i18n.t(key, { ns: NAMESPACE, ...props }); + return { t }; +}; + +export const tval = (key: string) => nTval(key, { ns: NAMESPACE }); + +export function lang(key: string) { + return i18n.t(key, { ns: NAMESPACE }); +} diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/NoticeBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/NoticeBlockInitializer.tsx deleted file mode 100644 index e67384741..000000000 --- a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/NoticeBlockInitializer.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { ISchema } from '@nocobase/schema'; -import { - Icon, - DataBlockInitializer, - useCollectionManager, - useSchemaInitializer, - useSchemaInitializerItem, -} from '@nocobase/client'; -import React from 'react'; -import { uid } from '@nocobase/utils/client'; -import { NoticeBar } from 'antd-mobile'; - -const NoticeSvg = () => ( - - - -); - -const NoticeIcon = (props: any) => ; - -export const NoticeBlock = () => { - return ; -}; - -export const NoticeBlockInitializer = () => { - const { insert } = useSchemaInitializer(); - const cm = useCollectionManager(); - const itemConfig = useSchemaInitializerItem(); - return ( - } - componentType={'Notice'} - onCreateBlockSchema={async ({ item }) => { - const collection = cm.getCollection(item.name); - const schema = createGridCardBlockSchema({ - collection: item.name, - dataSource: item.dataSource, - rowKey: collection.filterTargetKey || 'id', - settings: 'blockSettings:gridCard', - }); - insert(schema); - }} - /> - ); -}; - -export const createGridCardBlockSchema = (options) => { - const { - formItemInitializers = 'ReadPrettyFormItemInitializers', - actionInitializers = 'GridCardActionInitializers', - itemActionInitializers = 'GridCardItemActionInitializers', - collection, - association, - resource, - template, - dataSource, - settings, - ...others - } = options; - const resourceName = resource || association || collection; - const schema: ISchema = { - type: 'void', - 'x-acl-action': `${resourceName}:view`, - 'x-decorator': 'GridCard.Decorator', - 'x-decorator-props': { - resource: resourceName, - collection, - association, - dataSource, - readPretty: true, - action: 'list', - params: { - pageSize: 12, - }, - runWhenParamsChanged: true, - ...others, - }, - 'x-component': 'BlockItem', - 'x-component-props': { - useProps: '{{ useGridCardBlockItemProps }}', - }, - 'x-toolbar': 'BlockSchemaToolbar', - 'x-settings': settings, - properties: { - [uid()]: { - type: 'void', - 'x-component': 'NoticeBlock', - }, - }, - }; - return schema; -}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/SwiperBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/SwiperBlockInitializer.tsx deleted file mode 100644 index c9231839e..000000000 --- a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/SwiperBlockInitializer.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { ISchema } from '@nocobase/schema'; -import { - DataBlockInitializer, - css, - Icon, - useCollectionManager, - useSchemaInitializer, - useSchemaInitializerItem, -} from '@nocobase/client'; -import React from 'react'; -import { uid } from '@nocobase/utils/client'; -import { Swiper, Toast } from 'antd-mobile'; - -const SwiperSvg = () => ( - - - -); - -const SwiperIcon = (props: any) => ; - -export const SwiperBlock = () => { - const colors = ['#ace0ff', '#bcffbd', '#e4fabd', '#ffcfac']; - const items = colors.map((color, index) => ( - -
{ - Toast.show(`你点击了卡片 ${index + 1}`); - }} - > - {index + 1} -
-
- )); - return ( - - {items} - - ); -}; - -export const SwiperBlockInitializer = () => { - const { insert } = useSchemaInitializer(); - const cm = useCollectionManager(); - const itemConfig = useSchemaInitializerItem(); - return ( - } - componentType={'Swiper'} - onCreateBlockSchema={async ({ item }) => { - const collection = cm.getCollection(item.name); - const schema = createGridCardBlockSchema({ - collection: item.name, - dataSource: item.dataSource, - rowKey: collection.filterTargetKey || 'id', - settings: 'blockSettings:gridCard', - }); - insert(schema); - }} - /> - ); -}; - -const createGridCardBlockSchema = (options) => { - const { - formItemInitializers = 'ReadPrettyFormItemInitializers', - actionInitializers = 'GridCardActionInitializers', - itemActionInitializers = 'GridCardItemActionInitializers', - collection, - association, - resource, - template, - dataSource, - settings, - ...others - } = options; - const resourceName = resource || association || collection; - const schema: ISchema = { - type: 'void', - 'x-acl-action': `${resourceName}:view`, - 'x-decorator': 'GridCard.Decorator', - 'x-decorator-props': { - resource: resourceName, - collection, - association, - dataSource, - readPretty: true, - action: 'list', - params: { - pageSize: 12, - }, - runWhenParamsChanged: true, - ...others, - }, - 'x-component': 'BlockItem', - 'x-component-props': { - useProps: '{{ useGridCardBlockItemProps }}', - }, - 'x-toolbar': 'BlockSchemaToolbar', - 'x-settings': settings, - properties: { - [uid()]: { - type: 'void', - 'x-component': 'SwiperBlock', - }, - }, - }; - return schema; -}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/TabSearchBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/TabSearchBlockInitializer.tsx deleted file mode 100644 index d84da3a2d..000000000 --- a/packages/plugins/@hera/plugin-mobile/src/client/schema-initializer/TabSearchBlockInitializer.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { ISchema } from '@nocobase/schema'; -import { - DataBlockInitializer, - Icon, - css, - useCollectionManager, - useSchemaInitializer, - useSchemaInitializerItem, -} from '@nocobase/client'; -import React, { useState } from 'react'; -import { uid } from '@nocobase/utils/client'; -import { Button, SearchBar, Tabs, Picker } from 'antd-mobile'; - -const TabSearchSvg = () => ( - - - - - -); - -const TabSearchIcon = (props: any) => ; - -export const TabSearchBlock = () => { - const [visible, setVisible] = useState(false); - const basicColumns = [ - [ - { label: '福建', value: 'Mon' }, - { label: '上海', value: 'Wed' }, - ], - ]; - return ( - <> -
- - - - - - - { - setVisible(false); - }} - /> -
-
- - -
- - ); -}; - -export const TabSearchBlockInitializer = () => { - const { insert } = useSchemaInitializer(); - const cm = useCollectionManager(); - const itemConfig = useSchemaInitializerItem(); - return ( - } - componentType={'TabSearch'} - onCreateBlockSchema={async ({ item }) => { - const collection = cm.getCollection(item.name); - const schema = createGridCardBlockSchema({ - collection: item.name, - dataSource: item.dataSource, - rowKey: collection.filterTargetKey || 'id', - settings: 'blockSettings:gridCard', - }); - insert(schema); - }} - /> - ); -}; - -export const createGridCardBlockSchema = (options) => { - const { - formItemInitializers = 'ReadPrettyFormItemInitializers', - actionInitializers = 'GridCardActionInitializers', - itemActionInitializers = 'GridCardItemActionInitializers', - collection, - association, - resource, - template, - dataSource, - settings, - ...others - } = options; - const resourceName = resource || association || collection; - const schema: ISchema = { - type: 'void', - 'x-acl-action': `${resourceName}:view`, - 'x-decorator': 'GridCard.Decorator', - 'x-decorator-props': { - resource: resourceName, - collection, - association, - dataSource, - readPretty: true, - action: 'list', - params: { - pageSize: 12, - }, - runWhenParamsChanged: true, - ...others, - }, - 'x-component': 'CardItem', - 'x-component-props': { - useProps: '{{ useGridCardBlockItemProps }}', - }, - 'x-toolbar': 'BlockSchemaToolbar', - 'x-settings': settings, - properties: { - [uid()]: { - type: 'void', - 'x-component': 'TabSearchBlock', - }, - }, - }; - return schema; -}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-block/index.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/index.tsx new file mode 100644 index 000000000..adc037845 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/index.tsx @@ -0,0 +1,29 @@ +import { Plugin } from '@nocobase/client'; +import { NoticeBlock, NoticeBlockInitializer } from './schema-initializer/NoticeBlockInitializer'; +import { SwiperBlock, SwiperBlockInitializer } from './schema-initializer/SwiperBlockInitializer'; + +class PluginBlock extends Plugin { + async load() { + this.app.addComponents({ + NoticeBlock, + NoticeBlockInitializer, + SwiperBlock, + SwiperBlockInitializer, + }); + + this.app.schemaInitializerManager.addItem('MBlockInitializers', 'dataBlocks.swiper', { + title: 'swiper', + name: 'swiper', + type: 'item', + Component: 'SwiperBlockInitializer', + }); + this.app.schemaInitializerManager.addItem('MBlockInitializers', 'dataBlocks.notice', { + title: 'notice', + name: 'notice', + type: 'item', + Component: 'NoticeBlockInitializer', + }); + } +} + +export default PluginBlock; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-create/createGridCardBlockSchma.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-create/createGridCardBlockSchma.ts new file mode 100644 index 000000000..f04303724 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-create/createGridCardBlockSchma.ts @@ -0,0 +1,49 @@ +import { ISchema } from '@nocobase/schema'; +import { uid } from '@nocobase/utils/client'; + +export const createGridCardBlockSchema = (options, componentName) => { + const { + formItemInitializers = 'ReadPrettyFormItemInitializers', + actionInitializers = 'GridCardActionInitializers', + itemActionInitializers = 'GridCardItemActionInitializers', + collection, + association, + resource, + template, + dataSource, + settings, + ...others + } = options; + const resourceName = resource || association || collection; + const schema: ISchema = { + type: 'void', + 'x-acl-action': `${resourceName}:view`, + 'x-decorator': 'GridCard.Decorator', + 'x-decorator-props': { + resource: resourceName, + collection, + association, + dataSource, + readPretty: true, + action: 'list', + params: { + pageSize: 12, + }, + runWhenParamsChanged: true, + ...others, + }, + 'x-component': 'BlockItem', + 'x-component-props': { + useProps: '{{ useGridCardBlockItemProps }}', + }, + 'x-toolbar': 'BlockSchemaToolbar', + 'x-settings': settings, + properties: { + [uid()]: { + type: 'void', + 'x-component': componentName, + }, + }, + }; + return schema; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/NoticeBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/NoticeBlockInitializer.tsx new file mode 100644 index 000000000..0cbe3276a --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/NoticeBlockInitializer.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { + DataBlockInitializer, + Icon, + useCollectionManager, + useSchemaInitializer, + useSchemaInitializerItem, +} from '@nocobase/client'; +import { NoticeBar } from 'antd-mobile'; +import { createGridCardBlockSchema } from '../schema-create/createGridCardBlockSchma'; +import { NoticeIcon } from '../../assets/svg'; + +export const NoticeBlock = () => { + return ; +}; + +export const NoticeBlockInitializer = () => { + const { insert } = useSchemaInitializer(); + const cm = useCollectionManager(); + const itemConfig = useSchemaInitializerItem(); + const onCreateBlockSchema = async ({ item }) => { + const collection = cm.getCollection(item.name); + const schema = createGridCardBlockSchema( + { + collection: item.name, + dataSource: item.dataSource, + rowKey: collection.filterTargetKey || 'id', + settings: 'blockSettings:gridCard', + }, + 'NoticeBlock', + ); + insert(schema); + }; + return ( + } + componentType={'Notice'} + onCreateBlockSchema={onCreateBlockSchema} + /> + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/SwiperBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/SwiperBlockInitializer.tsx new file mode 100644 index 000000000..110855d44 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-block/schema-initializer/SwiperBlockInitializer.tsx @@ -0,0 +1,71 @@ +import { + DataBlockInitializer, + Icon, + css, + useCollectionManager, + useSchemaInitializer, + useSchemaInitializerItem, +} from '@nocobase/client'; +import React from 'react'; +import { Swiper, Toast } from 'antd-mobile'; +import { createGridCardBlockSchema } from '../schema-create/createGridCardBlockSchma'; +import { SwiperIcon } from '../../assets/svg'; + +export const SwiperBlock = () => { + const colors = ['#ace0ff', '#bcffbd', '#e4fabd', '#ffcfac']; + const items = colors.map((color, index) => ( + +
{ + Toast.show(`你点击了卡片 ${index + 1}`); + }} + > + {index + 1} +
+
+ )); + return ( + + {items} + + ); +}; + +export const SwiperBlockInitializer = () => { + const { insert } = useSchemaInitializer(); + const cm = useCollectionManager(); + const itemConfig = useSchemaInitializerItem(); + + const onCreateBlockSchema = async ({ item }) => { + const collection = cm.getCollection(item.name); + const schema = createGridCardBlockSchema( + { + collection: item.name, + dataSource: item.dataSource, + rowKey: collection.filterTargetKey || 'id', + settings: 'blockSettings:gridCard', + }, + 'SwiperBlock', + ); + insert(schema); + }; + + return ( + } + componentType={'Swiper'} + onCreateBlockSchema={onCreateBlockSchema} + /> + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearch.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearch.tsx new file mode 100644 index 000000000..fab9b9505 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearch.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { RecursionField } from '@nocobase/schema'; +import { useTabSearchAction } from './TabSearchAction'; + +export const TabSearch = () => { + const { fieldSchema, Designer, render, filterProperties } = useTabSearchAction(); + return ( + <> + + + {render()} + + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearchAction.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearchAction.ts new file mode 100644 index 000000000..8f398430d --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/TabSearchAction.ts @@ -0,0 +1,26 @@ +import { useDesigner, useSchemaInitializerRender } from '@nocobase/client'; +import { useFieldSchema } from '@nocobase/schema'; +import { isTabSearchCollapsibleInputItem } from '../utils'; + +export const useTabSearchAction = () => { + const Designer = useDesigner(); + const fieldSchema = useFieldSchema(); + const { render } = useSchemaInitializerRender(fieldSchema['x-initializer'], fieldSchema['x-initializer-props']); + + const filterProperties = (s) => { + if (!isTabSearchCollapsibleInputItem(s['x-component'])) { + return true; + } else { + // 保留第一个,如果进入这个判断一定有值,所以取0不会出错 + return ( + s === Object.values(s.parent.properties).filter((s) => isTabSearchCollapsibleInputItem(s['x-component']))[0] + ); + } + }; + return { + fieldSchema, + Designer, + render, + filterProperties, + }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItem.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItem.tsx new file mode 100644 index 000000000..67e5ad6ce --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItem.tsx @@ -0,0 +1,43 @@ +import { SortableItem, withDynamicSchemaProps } from '@nocobase/client'; +import { ConfigProvider, Row } from 'antd'; +import React from 'react'; +import { IButton, IInput, ISelect } from './TabSearchCollapsibleInputItemChild'; +import { useTabSearchCollapsibleInputItemAction } from './TabSearchCollapsibleInputItemAction'; + +export const TabSearchCollapsibleInputItem = withDynamicSchemaProps( + (props) => { + const { collectionField, Designer, options, value, onSelectChange, onInputChange, onButtonClick, customLabelKey } = + useTabSearchCollapsibleInputItemAction(props); + + if (!collectionField) { + return null; + } + + return ( + + + + + + + + + + + ); + }, + { displayName: 'TabSearchCollapsibleInputItem' }, +); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemAction.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemAction.ts new file mode 100644 index 000000000..956cf49ae --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemAction.ts @@ -0,0 +1,46 @@ +import { useMemo, useState } from 'react'; +import { useFieldSchema } from '@nocobase/schema'; +import { useTranslation } from '../../../../locale'; +import { useCollection, useDesigner } from '@nocobase/client'; +import { isTabSearchCollapsibleInputItem } from '../../utils'; +import { useTabSearchCollapsibleInputItem } from './hooks'; + +export const useTabSearchCollapsibleInputItemAction = (props) => { + const { onSelected } = useTabSearchCollapsibleInputItem(); + const fieldSchema = useFieldSchema(); + const collection = useCollection(); + const collectionField = useMemo(() => collection?.getField(fieldSchema.name as any), [collection, fieldSchema.name]); + const properties = fieldSchema.parent.properties; + const Designer = useDesigner(); + const [value, setValue] = useState(''); + const [customLabelKey, setCustomLabelKey] = useState(fieldSchema['name'] as string); + + const options = Object.values(properties) + .map((option) => { + if (isTabSearchCollapsibleInputItem(option['x-component'])) { + return { + label: option['title'], + value: option['name'], + }; + } + }) + .filter(Boolean); + + const onSelect = (value) => { + onSelected([value], customLabelKey); + }; + + const onSelectChange = (label) => setCustomLabelKey(label as string); + const onInputChange = (v) => { + const inputValue = v.target?.value || v; + setValue(inputValue); + if (inputValue === '') { + onSelect(inputValue); + } + }; + const onButtonClick = () => { + onSelect(value); + }; + + return { collectionField, Designer, options, value, onSelectChange, onInputChange, onButtonClick, customLabelKey }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemChild.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemChild.tsx new file mode 100644 index 000000000..cc085a8a6 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputItemChild.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { Button, Col, Divider, Input, Select } from 'antd'; +import { useTranslation } from '../../../../locale'; + +export const ISelect = (props) => { + const { options, onChange } = props; + return options.length > 1 ? ( + + + + ); +}; + +export const IButton = (props) => { + const { onClick } = props; + const { t } = useTranslation(); + + return ( + + + + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItem.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItem.tsx new file mode 100644 index 000000000..8081d0e8b --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItem.tsx @@ -0,0 +1,28 @@ +import { SortableItem, withDynamicSchemaProps } from '@nocobase/client'; +import { Grid } from 'antd-mobile'; +import React from 'react'; +import { useTabSearchCollapsibleInputItemAction } from './TabSearchCollapsibleInputItemAction'; +import { IButton, IInput, ISelect } from './TabSearchCollapsibleInputMItemChild'; + +export const TabSearchCollapsibleInputMItem = withDynamicSchemaProps( + (props) => { + const { collectionField, Designer, options, value, onSelectChange, onInputChange, onButtonClick, customLabelKey } = + useTabSearchCollapsibleInputItemAction(props); + + if (!collectionField) { + return null; + } + + return ( + + + + + + + + + ); + }, + { displayName: 'TabSearchCollapsibleInputItem' }, +); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItemChild.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItemChild.tsx new file mode 100644 index 000000000..60e092b51 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchCollapsibleInputMItemChild.tsx @@ -0,0 +1,60 @@ +import React, { useState } from 'react'; +import { useTranslation } from '../../../../locale'; +import { Grid, Divider, Picker, Input, Space } from 'antd-mobile'; +import { DownOutline } from 'antd-mobile-icons'; + +export const ISelect = (props) => { + const { options, onChange, customLabelKey } = props; + const [visible, setVisible] = useState(false); + return options.length > 1 ? ( + { + setVisible(true); + }} + > + + {options.find((option) => option.value === customLabelKey).label} + + + { + setVisible(false); + }} + defaultValue={customLabelKey} + onConfirm={(v) => { + onChange(v[0]); + }} + /> + + + ) : null; +}; + +export const IInput = (props) => { + const { options, value, onChange } = props; + const { t } = useTranslation(); + return ( + 1 ? 2 : 3}> + + + ); +}; + +export const IButton = (props) => { + const { onClick } = props; + const { t } = useTranslation(); + + return ( + + {t('Search')} + + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItem.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItem.tsx new file mode 100644 index 000000000..8f17f0597 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItem.tsx @@ -0,0 +1,30 @@ +import { SortableItem, withDynamicSchemaProps } from '@nocobase/client'; +import { ConfigProvider, Menu } from 'antd'; +import React from 'react'; +import { useTabSearchFieldItemAction } from './TabSearchFieldItemAction'; + +export const TabSearchFieldItem = withDynamicSchemaProps( + (props) => { + const { collectionField, Designer, items, onSelect } = useTabSearchFieldItemAction(props); + + if (!collectionField) { + return null; + } + + return ( + + + + + + + ); + }, + { displayName: 'TabSearchFieldItem' }, +); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemAction.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemAction.ts new file mode 100644 index 000000000..8025bfeae --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemAction.ts @@ -0,0 +1,45 @@ +import React from 'react'; +import { MenuProps } from 'antd'; +import { useCollection, useDesigner } from '@nocobase/client'; +import { useFieldSchema } from '@nocobase/schema'; +import { useTranslation } from '../../../../locale'; + +export const useTabSearchFieldItemAction = (props) => { + const { list, onSelected, valueKey: _valueKey, labelKey: _labelKey, filterKey } = props; + const { t } = useTranslation(); + const fieldSchema = useFieldSchema(); + const c = useCollection(); + const collectionField = React.useMemo(() => c?.getField(fieldSchema.name as any), [c, fieldSchema.name]); + const Designer = useDesigner(); + const valueKey = _valueKey || collectionField?.targetKey || 'id'; + const labelKey = _labelKey || fieldSchema['x-component-props']?.fieldNames?.label || valueKey; + const onSelect = (itemKey) => { + const key = itemKey.keyPath?.[0] || itemKey; + onSelected([key], null, filterKey); + }; + const fieldNames = { + title: labelKey || valueKey, + key: valueKey, + }; + const items: MenuProps['items'] = []; + + if (list?.length) { + list.forEach((value) => { + items.push({ + label: value[fieldNames.title], + key: value[fieldNames.key], + }); + }); + } + items?.unshift({ + label: t('all'), + key: 'all', + }); + + return { + collectionField, + Designer, + items, + onSelect, + }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemProps.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemProps.ts new file mode 100644 index 000000000..d6b9c79e6 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldItemProps.ts @@ -0,0 +1,47 @@ +import { useMemo } from 'react'; +import { useCollection, useCollectionManager } from '@nocobase/client'; +import { useFieldSchema } from '@nocobase/schema'; +import _ from 'lodash'; +import { useTabSearchCollapsibleInputItem } from './hooks'; +import { canBeOptionalField } from '../../utils'; + +export const useTabSearchFieldItemProps = () => { + const fieldSchema = useFieldSchema(); + const collection = useCollection(); + const optionalFieldList = useOptionalFieldList(); + const cm = useCollectionManager(); + const collectionField = useMemo(() => collection?.getField(fieldSchema.name as any), [collection, fieldSchema.name]); + const { onSelected } = useTabSearchCollapsibleInputItem(); + const result = { list: null, valueKey: '', labelKey: '', filterKey: '' }; + result.valueKey = collectionField?.target ? cm.getCollection(collectionField.target)?.getPrimaryKey() : 'id'; + result.labelKey = fieldSchema['x-component-props']?.fieldNames?.label || result.valueKey; + const fieldInterface = fieldSchema['x-component-props'].interface; + if (canBeOptionalField(fieldInterface)) { + const field = optionalFieldList.find((field) => field.name === fieldSchema.name); + const operatorMap = { + select: '$in', + multipleSelect: '$anyOf', + checkbox: '$in', + checkboxGroup: '$anyOf', + }; + const _list = field?.uiSchema?.enum || []; + result.valueKey = 'value'; + result.labelKey = 'label'; + result.list = _list; + result.filterKey = `${field.name}.${operatorMap[field.interface]}`; + } + + return { + list: result.list, + valueKey: result.valueKey, + labelKey: result.labelKey, + onSelected, + filterKey: result.filterKey, + }; +}; + +const useOptionalFieldList = () => { + const collection = useCollection(); + const currentFields = collection?.fields ?? []; + return currentFields.filter((field) => canBeOptionalField(field.interface) && field.uiSchema.enum); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldMItem.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldMItem.tsx new file mode 100644 index 000000000..3cddd521f --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSearchFieldMItem.tsx @@ -0,0 +1,26 @@ +import { SortableItem, withDynamicSchemaProps } from '@nocobase/client'; +import React from 'react'; +import { useTabSearchFieldItemAction } from './TabSearchFieldItemAction'; +import { Tabs } from 'antd-mobile'; + +export const TabSearchFieldMItem = withDynamicSchemaProps( + (props) => { + const { collectionField, Designer, items, onSelect } = useTabSearchFieldItemAction(props); + + if (!collectionField) { + return null; + } + + return ( + + + + {items.map((value) => ( + + ))} + + + ); + }, + { displayName: 'TabSearchFieldItem' }, +); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSerachFieldItemRelatedProps.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSerachFieldItemRelatedProps.tsx new file mode 100644 index 000000000..795854e12 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/TabSerachFieldItemRelatedProps.tsx @@ -0,0 +1,75 @@ +// 关系字段类型 +import { useEffect, useMemo } from 'react'; +import { + useCollection, + useCollectionManager, + useDataSourceHeaders, + useFilterBlock, + useRequest, +} from '@nocobase/client'; +import { useField, useFieldSchema } from '@nocobase/schema'; +import _ from 'lodash'; +import { useTabSearchCollapsibleInputItem } from './hooks'; +import { canBeRelatedField } from '../../utils'; + +export const useTabSearchFieldItemRelatedProps = () => { + const fieldSchema = useFieldSchema(); + const collection = useCollection(); + const field = useField(); + // TODO 这里需要替换成获取 source id 的方式,不过我们暂时没有用多数据源,就不着急 + const blockProps = { dataSource: 'main' }; + const headers = useDataSourceHeaders(blockProps?.dataSource); + const cm = useCollectionManager(); + const collectionField = useMemo(() => collection?.getField(fieldSchema.name as any), [collection, fieldSchema.name]); + const collectionFieldName = collectionField?.name; + const fieldInterface = fieldSchema['x-component-props'].interface; + const result = { list: null, valueKey: '', labelKey: '', filterKey: '' }; + const { onSelected } = useTabSearchCollapsibleInputItem(); + result.valueKey = collectionField?.target ? cm.getCollection(collectionField.target)?.getPrimaryKey() : 'id'; + result.labelKey = fieldSchema['x-component-props']?.fieldNames?.label || result.valueKey; + // eslint-disable-next-line prefer-const + const { data, run } = useRequest<{ + data: { [key: string]: any }[]; + }>( + { + headers, + resource: collectionField?.target, + action: 'list', + params: { + fields: [result.labelKey, result.valueKey], + pageSize: 200, + page: 1, + ...field.componentProps?.params, + }, + }, + { + manual: true, + debounceWait: 300, + }, + ); + useEffect(() => { + if (canBeRelatedField(fieldInterface) && collectionField?.target) { + run(); + } + }, [ + result.labelKey, + result.valueKey, + JSON.stringify(field.componentProps?.params || {}), + canBeRelatedField(fieldInterface), + ]); + + if (!collectionField) { + return {}; + } + + result.filterKey = `${collectionFieldName}.${result.valueKey}.$in`; + result.list = data?.data || []; + + return { + list: result.list, + valueKey: result.valueKey, + labelKey: result.labelKey, + onSelected, + filterKey: result.filterKey, + }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/hooks.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/hooks.tsx new file mode 100644 index 000000000..ba18fe794 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/components/field-item/hooks.tsx @@ -0,0 +1,76 @@ +import { findFilterTargets, mergeFilter, useApp, useCollection, useFilterBlock } from '@nocobase/client'; +import { useFieldSchema } from '@nocobase/schema'; +import { useMemo } from 'react'; +import _ from 'lodash'; + +export const useTabSearchCollapsibleInputItem = () => { + const fieldSchema = useFieldSchema(); + const collection = useCollection(); + const { getDataBlocks } = useFilterBlock(); + const collectionField = useMemo(() => collection?.getField(fieldSchema.name as any), [collection, fieldSchema.name]); + + const onSelected = (value, customLabelKey?, filterKey?) => { + const { targets, uid } = findFilterTargets(fieldSchema); + getDataBlocks().forEach((block) => { + const target = targets.find((target) => target.uid === block.uid); + if (!target) return; + const key = `${uid}${fieldSchema.name}`; + const param = block.service.params?.[0] || {}; + if (!collectionField?.target && customLabelKey) { + filterKey = `${customLabelKey}.$includes`; + } + // 保留原有的 filter + let storedFilter = block.service.params?.[1]?.filters || {}; + if (value.length) { + storedFilter[key] = { + [filterKey]: value, + }; + } else { + if (block.dataLoadingMode === 'manual') { + return block.clearData(); + } + delete storedFilter[key]; + } + const mergedFilter = mergeFilter([...Object.values(storedFilter), block.defaultFilter]); + if (value.length === 1 && value[0] === 'all') { + const currentKey = Object.keys(storedFilter[key]); + if (mergedFilter['$and']) { + currentKey.forEach((currentValue) => { + mergedFilter['$and'].forEach((value, index) => { + if (value[currentValue]) { + mergedFilter['$and'].splice(index, 1); + } + }); + }); + mergedFilter['$and'] = mergedFilter['$and'].filter(Boolean); + } else { + delete mergedFilter[currentKey[0]]; + } + storedFilter[key] = {}; + } + storedFilter = _.omitBy( + storedFilter, + (value) => value === null || value === undefined || (_.isObject(value) && _.isEmpty(value)), + ); + + return block.doFilter( + { + ...param, + page: 1, + filter: mergedFilter, + }, + { filters: storedFilter }, + ); + }); + }; + + return { + onSelected, + }; +}; + +export const useIsMobile = () => { + const fieldSchema = useFieldSchema(); + const isMobile = Object.values(fieldSchema.root.properties).find((value) => value['x-component'] === 'MContainer'); + return isMobile; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchBlockSchema.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchBlockSchema.ts new file mode 100644 index 000000000..3d7684d7b --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchBlockSchema.ts @@ -0,0 +1,33 @@ +import { ISchema } from '@nocobase/schema'; +import { uid } from '@nocobase/utils/client'; + +export const createTabSearchBlockSchema = (options: { + collectionName: string; + dataSource: string; + blockType: string; +}): ISchema => { + const { collectionName, dataSource, blockType } = options; + return { + type: 'void', + 'x-decorator': 'TabSearchProvider', + 'x-decorator-props': { + collection: collectionName, + dataSource, + blockType, + }, + // 这个工具栏本来就没什么特别的作用,就是用于显示名称、模板名称,用这个没问题 + 'x-toolbar': 'BlockSchemaToolbar', + // FIXME 模板在当前这个 provider 下是不支持的,要么添加相关的代码,要么这个 settings 用自己的 + 'x-settings': 'blockSettings:filterCollapse', + 'x-component': 'CardItem', + 'x-filter-targets': [], + properties: { + [uid()]: { + type: 'void', + 'x-action': 'tabSearch', + 'x-initializer': 'tabSearch:configureFields', + 'x-component': 'TabSearch', + }, + }, + }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchItemSchema.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchItemSchema.ts new file mode 100644 index 000000000..b9154a863 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/create/createTabSearchItemSchema.ts @@ -0,0 +1,24 @@ +export const createTabSearchItemSchema = (options) => { + const { field, itemComponent, label, itemUseProps } = options; + return { + name: field.key, + title: field.uiSchema?.title, + Component: 'TabSearchFieldSchemaInitializerGadget', + schema: { + name: field.name, + title: field.uiSchema?.title, + type: 'void', + 'x-toolbar': 'CollapseItemSchemaToolbar', + 'x-settings': 'fieldSettings:TabSearchItem', + 'x-component': itemComponent, + 'x-use-component-props': itemUseProps, + 'x-component-props': { + fieldNames: { + label, + }, + interface: field.interface, + }, + properties: {}, + }, + }; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/index.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/index.ts new file mode 100644 index 000000000..e88d3e7ab --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/index.ts @@ -0,0 +1,54 @@ +import { Plugin } from '@nocobase/client'; +import { TabSearch } from './components/TabSearch'; +import { TabSearchProvider } from './provider/TabSearchProvider'; +import { TabSearchBlockInitializer } from './initializer/TabSearchBlockInitializer'; +import { TabSearchFieldItem } from './components/field-item/TabSearchFieldItem'; +import { TabSearchCollapsibleInputItem } from './components/field-item/TabSearchCollapsibleInputItem'; +import { TabSearchFieldSchemaInitializerGadget } from './initializer/TabSearchFieldSchemaInitializerGadget'; +import { tval } from '../../locale'; +import { useTabSearchFieldItemRelatedProps } from './components/field-item/TabSerachFieldItemRelatedProps'; +import { useTabSearchFieldItemProps } from './components/field-item/TabSearchFieldItemProps'; +import { TabSearchFieldSchemaInitializer } from './initializer/TabSearchFieldSchemaInitializer'; +import { TabSearchItemFieldSettings } from './settings/TabSearchItemFieldSettings'; +import { TabSearchFieldMItem } from './components/field-item/TabSearchFieldMItem'; +import { TabSearchCollapsibleInputMItem } from './components/field-item/TabSearchCollapsibleInputMItem'; + +class PluginTabSearch extends Plugin { + async load() { + this.app.addScopes({ + useTabSearchFieldItemProps, + useTabSearchFieldItemRelatedProps, + }); + + this.app.addComponents({ + TabSearch, + TabSearchProvider, + TabSearchBlockInitializer, + TabSearchFieldItem, + TabSearchFieldMItem, + TabSearchCollapsibleInputItem, + TabSearchCollapsibleInputMItem, + TabSearchFieldSchemaInitializerGadget, + }); + this.app.schemaInitializerManager.add(TabSearchFieldSchemaInitializer); + this.schemaSettingsManager.add(TabSearchItemFieldSettings); + this.app.schemaInitializerManager.addItem('mobilePage:addBlock', 'filterBlocks', { + title: tval('Filter blocks'), + type: 'itemGroup', + children: [ + { + name: 'tabSearch', + title: 'tabSearch', + Component: 'TabSearchBlockInitializer', + }, + ], + }); + this.app.schemaInitializerManager.addItem('page:addBlock', 'filterBlocks.tabSearch', { + name: 'tabSearch', + title: 'tabSearch', + Component: 'TabSearchBlockInitializer', + }); + } +} + +export default PluginTabSearch; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchBlockInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchBlockInitializer.tsx new file mode 100644 index 000000000..08bebea8d --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchBlockInitializer.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import _ from 'lodash'; +import { DataBlockInitializer, Icon, useSchemaInitializer, useSchemaInitializerItem } from '@nocobase/client'; +import { createTabSearchBlockSchema } from '../create/createTabSearchBlockSchema'; + +export const TabSearchBlockInitializer = (props) => { + const { filterCollections, onlyCurrentDataSource, hideChildrenIfSingleCollection } = props; + const itemConfig = useSchemaInitializerItem(); + const { insert } = useSchemaInitializer(); + + const onCreateBlockSchema = async ({ item }) => { + const schema = createTabSearchBlockSchema({ + dataSource: item.dataSource, + collectionName: item.collectionName || item.name, + blockType: 'filter', + }); + insert(schema); + }; + + return ( + + ); +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializer.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializer.tsx new file mode 100644 index 000000000..a05ff722a --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializer.tsx @@ -0,0 +1,70 @@ +import { SchemaInitializer, SchemaInitializerItemType, useCollection, useCollectionManager } from '@nocobase/client'; +import _ from 'lodash'; +import { tval } from '../../../locale'; +import { canBeOptionalField, canBeRelatedField, canBeSearchField } from '../utils'; +import { createTabSearchItemSchema } from '../create/createTabSearchItemSchema'; +import { useIsMobile } from '../components/field-item/hooks'; + +const textFieldsItem: SchemaInitializerItemType = { + name: 'textFields', + type: 'itemGroup', + title: tval('Text fields'), + useChildren() { + const collection = useCollection(); + const associatedFields = collection.fields; + const isMobield = useIsMobile(); + const itemComponent = isMobield ? 'TabSearchCollapsibleInputMItem' : 'TabSearchCollapsibleInputItem'; + const children = associatedFields + .map((field) => { + if (canBeSearchField(field.interface) && !field['isForeignKey']) { + const label = field.name; + return createTabSearchItemSchema({ field, itemComponent, label }); + } + }) + .filter(Boolean); + return children; + }, +}; + +const choicesFieldsItem: SchemaInitializerItemType = { + name: 'choicesFields', + type: 'itemGroup', + title: tval('Choices fields'), + useChildren() { + const collection = useCollection(); + const optionalList = collection.fields; + const cm = useCollectionManager(); + const isMobield = useIsMobile(); + const itemComponent = isMobield ? 'TabSearchFieldMItem' : 'TabSearchFieldItem'; + const optionalChildren = optionalList + .map((field) => { + const label = cm.getCollection(field.target)?.getPrimaryKey() || 'id'; + if (canBeOptionalField(field.interface)) { + return createTabSearchItemSchema({ + field, + itemComponent, + label, + itemUseProps: 'useTabSearchFieldItemProps', + }); + } else if (canBeRelatedField(field.interface)) { + return createTabSearchItemSchema({ + field, + itemComponent, + label, + itemUseProps: 'useTabSearchFieldItemRelatedProps', + }); + } + }) + .filter(Boolean); + + return optionalChildren; + }, +}; + +export const TabSearchFieldSchemaInitializer = new SchemaInitializer({ + name: 'tabSearch:configureFields', + style: { marginTop: 16 }, + icon: 'SettingOutlined', + title: tval('Configure fields'), + items: [textFieldsItem, choicesFieldsItem], +}); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializerGadget.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializerGadget.tsx new file mode 100644 index 000000000..560d1d4ef --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/initializer/TabSearchFieldSchemaInitializerGadget.tsx @@ -0,0 +1,26 @@ +import { + SchemaInitializerSwitch, + useCurrentSchema, + useSchemaInitializer, + useSchemaInitializerItem, +} from '@nocobase/client'; +import { merge } from '@nocobase/schema'; +import React from 'react'; + +export const TabSearchFieldSchemaInitializerGadget = () => { + const itemConfig = useSchemaInitializerItem(); + const { schema } = itemConfig; + const { exists, remove } = useCurrentSchema(schema.name, 'name', itemConfig.find, itemConfig.remove); + const { insert } = useSchemaInitializer(); + + const onClick = () => { + if (exists) { + return remove(); + } + const s = merge(schema || {}, itemConfig.schema || {}); + itemConfig?.schemaInitialize?.(s); + insert(s); + }; + + return ; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/provider/TabSearchProvider.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/provider/TabSearchProvider.tsx new file mode 100644 index 000000000..9b75c2b4c --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/provider/TabSearchProvider.tsx @@ -0,0 +1,6 @@ +import { DataBlockProvider } from '@nocobase/client'; +import React from 'react'; + +export const TabSearchProvider = (props) => { + return {props.children}; +}; diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/settings/TabSearchItemFieldSettings.tsx b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/settings/TabSearchItemFieldSettings.tsx new file mode 100644 index 000000000..dbea2c112 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/settings/TabSearchItemFieldSettings.tsx @@ -0,0 +1,152 @@ +import { + SchemaSettings, + SchemaSettingsDataScope, + useCollection, + useCollectionManager, + useCompile, + useDesignable, + useFormBlockContext, +} from '@nocobase/client'; +import { useTranslation } from '../../../locale'; +import { useField, useFieldSchema } from '@nocobase/schema'; +import _ from 'lodash'; +import { isTabSearchCollapsibleInputItem } from '../utils'; + +export const TabSearchItemFieldSettings = new SchemaSettings({ + name: 'fieldSettings:TabSearchItem', + items: [ + { + name: 'decoratorOptions', + type: 'itemGroup', + hideIfNoChildren: true, + useComponentProps() { + const { t } = useTranslation(); + return { + title: t('Generic properties'), + }; + }, + useChildren() { + return [ + { + name: 'setTheDataScope', + Component: SchemaSettingsDataScope, + useComponentProps() { + const fieldSchema = useFieldSchema(); + const { form } = useFormBlockContext(); + const field = useField(); + const cm = useCollectionManager(); + const c = useCollection(); + const collectionField = + c.getField(fieldSchema['name']) || cm.getCollectionField(fieldSchema['x-collection-field']); + const { dn } = useDesignable(); + + return { + collectionName: collectionField?.target, + defaultFilter: fieldSchema?.['x-component-props']?.params?.filter || {}, + form: form, + onSubmit: ({ filter }) => { + _.set(field.componentProps, 'params', { + ...field.componentProps?.params, + filter, + }); + fieldSchema['x-component-props']['params'] = field.componentProps.params; + dn.emit('patch', { + schema: { + ['x-uid']: fieldSchema['x-uid'], + 'x-component-props': fieldSchema['x-component-props'], + }, + }); + }, + }; + }, + useVisible() { + const fieldSchema = useFieldSchema(); + return !isTabSearchCollapsibleInputItem(fieldSchema['x-component']); + }, + }, + { + name: 'titleField', + type: 'select', + useComponentProps() { + const fieldSchema = useFieldSchema(); + const { t } = useTranslation(); + const cm = useCollectionManager(); + const c = useCollection(); + const collectionField = + c.getField(fieldSchema['name']) || cm.getCollectionField(fieldSchema['x-collection-field']); + const compile = useCompile(); + const { dn } = useDesignable(); + const targetFields = collectionField?.target ? cm.getCollectionFields(collectionField?.target) : []; + const options = targetFields + .filter((field) => !field?.target && field.type !== 'boolean') + .map((field) => ({ + value: field?.name, + label: compile(field?.uiSchema?.title) || field?.name, + })); + const onTitleFieldChange = (label) => { + const schema = { + ['x-uid']: fieldSchema['x-uid'], + }; + const fieldNames = { + ...collectionField?.uiSchema?.['x-component-props']?.['fieldNames'], + ...fieldSchema['x-component-props']?.['fieldNames'], + label, + }; + fieldSchema['x-component-props'] = fieldSchema['x-component-props'] || {}; + fieldSchema['x-component-props']['fieldNames'] = fieldNames; + schema['x-component-props'] = fieldSchema['x-component-props']; + dn.emit('patch', { + schema, + }); + dn.refresh(); + }; + + return { + key: 'title-field', + title: t('Title field'), + options: options, + value: fieldSchema['x-component-props']?.fieldNames?.label, + onChange: onTitleFieldChange, + }; + }, + useVisible() { + const fieldSchema = useFieldSchema(); + return !isTabSearchCollapsibleInputItem(fieldSchema['x-component']); + }, + }, + ]; + }, + }, + { + name: 'divider', + type: 'divider', + }, + { + name: 'delete', + type: 'remove', + sort: 100, + useComponentProps() { + const { t } = useTranslation(); + const fieldSchema = useFieldSchema(); + const { dn } = useDesignable(); + return { + removeParentsIfNoChildren: true, + confirm: { + title: t('Delete field'), + }, + breakRemoveOn: (s) => { + if (isTabSearchCollapsibleInputItem(fieldSchema['x-component'])) { + Object.values(s.properties).forEach((value) => { + if (isTabSearchCollapsibleInputItem(value['x-component']) && value.name !== fieldSchema.name) { + delete s.properties[value.name]; + } + }); + dn.emit('patch', { schema: s }); + } + return s['x-component'] === 'TabSearch'; + }, + }; + }, + }, + ], +}); diff --git a/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/utils.ts b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/utils.ts new file mode 100644 index 000000000..a11f0eb09 --- /dev/null +++ b/packages/plugins/@hera/plugin-mobile/src/client/schma-component/tab-search/utils.ts @@ -0,0 +1,25 @@ +const canBeOptionalFields = ['select', 'multipleSelect', 'radioGroup', 'checkbox', 'checkboxGroup']; +const canBeRelatedFields = ['oho', 'obo', 'o2m', 'm2o', 'm2m']; + +const canBeSearchFields = [ + 'input', + 'textarea', + 'phone', + 'email', + 'url', + 'integer', + 'number', + 'percent', + 'password', + 'color', + 'icon', + 'formula', +]; + +export const isTabSearchCollapsibleInputItem = (component: string) => + component === 'TabSearchCollapsibleInputItem' || component === 'TabSearchCollapsibleInputMItem'; + +export const canBeOptionalField = (_interface: string) => canBeOptionalFields.includes(_interface); +export const canBeRelatedField = (_interface: string) => canBeRelatedFields.includes(_interface); + +export const canBeSearchField = (_interface: string) => canBeSearchFields.includes(_interface); diff --git a/packages/plugins/@nocobase/plugin-mobile-client/src/client/core/schema/components/page/Page.tsx b/packages/plugins/@nocobase/plugin-mobile-client/src/client/core/schema/components/page/Page.tsx index 4ab15b4a5..12282111a 100644 --- a/packages/plugins/@nocobase/plugin-mobile-client/src/client/core/schema/components/page/Page.tsx +++ b/packages/plugins/@nocobase/plugin-mobile-client/src/client/core/schema/components/page/Page.tsx @@ -1,5 +1,13 @@ import { RecursionField, useField, useFieldSchema } from '@nocobase/schema'; -import { ActionBarProvider, SortableItem, TabsContextProvider, css, cx, useDesigner } from '@nocobase/client'; +import { + ActionBarProvider, + FilterBlockProvider, + SortableItem, + TabsContextProvider, + css, + cx, + useDesigner, +} from '@nocobase/client'; import { TabsProps } from 'antd'; import React, { useCallback } from 'react'; import { useSearchParams } from 'react-router-dom'; @@ -131,7 +139,13 @@ const InternalPage: React.FC = (props) => { ); }; -export const MPage = InternalPage as unknown as typeof InternalPage & { +const InternalFilterablePage = (props) => ( + + + +); + +export const MPage = InternalFilterablePage as unknown as typeof InternalPage & { Designer: typeof PageDesigner; }; MPage.Designer = PageDesigner; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7466455e1..6d3a81db5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,7 +119,7 @@ importers: version: 5.4.3 umi: specifier: ^4.0.69 - version: 4.0.89(@babel/core@7.23.6)(@types/node@20.12.2)(@types/react@18.2.73)(eslint@8.57.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.91.0) + version: 4.0.89(@babel/core@7.22.10)(@types/node@20.12.2)(@types/react@18.2.73)(eslint@8.57.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(sass@1.69.5)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.91.0) packages/core/acl: dependencies: @@ -1433,9 +1433,6 @@ importers: '@nocobase/client': specifier: workspace:* version: link:../../../core/client - '@nocobase/schema': - specifier: workspace:* - version: link:../../../core/schema '@nocobase/server': specifier: workspace:* version: link:../../../core/server @@ -1445,9 +1442,34 @@ importers: '@nocobase/utils': specifier: workspace:* version: link:../../../core/utils + devDependencies: + '@ant-design/icons': + specifier: 5.x + version: 5.3.6(react-dom@18.2.0)(react@18.2.0) + '@nocobase/schema': + specifier: workspace:* + version: link:../../../core/schema + '@types/lodash': + specifier: ^4.17.0 + version: 4.17.0 + antd: + specifier: 5.16.0 + version: 5.16.0(react-dom@18.2.0)(react@18.2.0) antd-mobile: - specifier: ^5.29.1 + specifier: ^5.33.1 version: 5.33.1(react-dom@18.2.0)(react@18.2.0) + antd-mobile-icons: + specifier: ^0.3.0 + version: 0.3.0 + classnames: + specifier: ^2.3.1 + version: 2.5.1 + lodash: + specifier: 4.17.21 + version: 4.17.21 + react-i18next: + specifier: ^11.15.1 + version: 11.18.6(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0) packages/plugins/@hera/plugin-oidc: dependencies: @@ -4763,10 +4785,10 @@ packages: react-dom: 18.2.0 dependencies: '@ant-design/cssinjs': 1.18.2(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@ctrl/tinycolor': 3.6.1 antd: 5.16.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) swr: 2.2.4(react@18.2.0) @@ -4780,12 +4802,12 @@ packages: dependencies: '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) '@ant-design/pro-provider': 2.13.5(antd@5.16.0)(react-dom@18.2.0)(react@18.2.0) - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 antd: 5.16.0(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 dayjs: 1.11.10 lodash.merge: 4.6.2 - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) safe-stable-stringify: 2.4.3 @@ -5907,10 +5929,10 @@ packages: '@babel/helpers': 7.23.6 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 convert-source-map: 1.9.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5929,10 +5951,10 @@ packages: '@babel/helpers': 7.23.6 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5951,15 +5973,16 @@ packages: '@babel/helpers': 7.23.6 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: false /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.55.0): resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} @@ -6134,6 +6157,7 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: false /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} @@ -6215,7 +6239,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.23.6 + '@babel/traverse': 7.23.6(supports-color@5.5.0) '@babel/types': 7.23.6 transitivePeerDependencies: - supports-color @@ -6285,15 +6309,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: @@ -6302,15 +6317,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.10): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -6319,15 +6325,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.10): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -6383,15 +6380,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -6400,15 +6388,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.22.10): resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} @@ -6427,15 +6406,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -6444,15 +6414,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.10): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -6461,15 +6422,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -6478,15 +6430,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -6495,15 +6438,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.10): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -6512,15 +6446,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.10): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -6540,16 +6465,6 @@ packages: '@babel/core': 7.22.10 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.10): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -6830,18 +6745,6 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.6): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.22.10): resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} @@ -7297,23 +7200,6 @@ packages: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - /@babel/traverse@7.23.6: - resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.23.6(supports-color@5.5.0): resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} engines: {node: '>=6.9.0'} @@ -7330,7 +7216,6 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} @@ -7933,7 +7818,7 @@ packages: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 '@emotion/serialize': 1.1.2 @@ -7986,7 +7871,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.2 @@ -8810,7 +8695,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -8865,6 +8750,7 @@ packages: resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} dependencies: '@floating-ui/utils': 0.1.6 + dev: true /@floating-ui/dom@0.4.5: resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==} @@ -8876,6 +8762,7 @@ packages: dependencies: '@floating-ui/core': 1.5.2 '@floating-ui/utils': 0.1.6 + dev: true /@floating-ui/react-dom-interactions@0.3.1(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-tP2KEh7EHJr5hokSBHcPGojb+AorDNUf0NYfZGg/M+FsMvCOOsSEeEF0O1NDfETIzDnpbHnCs0DuvCFhSMSStg==} @@ -8905,6 +8792,7 @@ packages: /@floating-ui/utils@0.1.6: resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + dev: true /@formatjs/ecma402-abstract@1.18.0: resolution: {integrity: sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA==} @@ -9172,7 +9060,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -9199,7 +9087,7 @@ packages: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.7 '@iconify/types': 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) kolorist: 1.8.0 local-pkg: 0.4.3 transitivePeerDependencies: @@ -9394,7 +9282,7 @@ packages: peerDependencies: react: 18.2.0 dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.1 hoist-non-react-statics: 3.3.2 react: 18.2.0 react-is: 16.13.1 @@ -9411,7 +9299,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@types/node': 20.12.2 find-up: 4.1.0 fs-extra: 8.1.0 @@ -9682,7 +9570,7 @@ packages: async: 3.2.5 chalk: 3.0.0 dayjs: 1.8.36 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eventemitter2: 5.0.1 fast-json-patch: 3.1.1 fclone: 1.0.11 @@ -9705,7 +9593,7 @@ packages: '@opencensus/core': 0.0.9 '@opencensus/propagation-b3': 0.0.8 async: 2.6.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eventemitter2: 6.4.9 require-in-the-middle: 5.2.0 semver: 7.5.4 @@ -9722,7 +9610,7 @@ packages: dependencies: async: 2.6.4 axios: 0.21.4(debug@4.3.4) - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eventemitter2: 6.4.9 ws: 7.5.9 transitivePeerDependencies: @@ -9734,7 +9622,7 @@ packages: /@pm2/pm2-version-check@1.0.4: resolution: {integrity: sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -10193,23 +10081,6 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@rc-component/trigger@1.18.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-jRLYgFgjLEPq3MvS87fIhcfuywFSRDaDrYw1FLku7Cm4esszvzTbA0JBsyacAyLrK9rF3TiHFcvoEDMzoD3CTA==} - engines: {node: '>=8.x'} - peerDependencies: - react: 18.2.0 - react-dom: 18.2.0 - dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) - classnames: 2.5.1 - rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@rc-component/trigger@1.18.3(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Ksr25pXreYe1gX6ayZ1jLrOrl9OAUHUqnuhEx6MeHnNa1zVM5Y2Aj3Q35UrER0ns8D2cJYtmJtVli+i+4eKrvA==} engines: {node: '>=8.x'} @@ -10217,15 +10088,14 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - dev: true /@rc-component/trigger@2.0.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-niwKADPdY5dhdIblV6uwSayVivwo2uUISfJqri+/ovYQcH/omxDYBJKo755QKeoIIsWptxnRpgr7reEnNEZGFg==} @@ -10246,13 +10116,13 @@ packages: /@react-pdf/fns@2.2.1: resolution: {integrity: sha512-s78aDg0vDYaijU5lLOCsUD+qinQbfOvcNeaoX9AiE7+kZzzCo6B/nX+l48cmt9OosJmvZvE9DWR9cLhrhOi2pA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 dev: true /@react-pdf/font@2.4.4: resolution: {integrity: sha512-yjK5eSY+LcbxS0m+sOYln8GdgIbUgti4xjwf14kx8OSsOMJQJyHFALHMh2cLcKJR9yZeqVDo1FwCsY6gw1yCkg==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/types': 2.4.1 cross-fetch: 3.1.8 fontkit: 2.0.2 @@ -10264,7 +10134,7 @@ packages: /@react-pdf/image@2.3.4: resolution: {integrity: sha512-IE34l7gfTdaxXe3XR9240xMZsFdxF1myIwmEWK28XoeTaucUPAUyOiNcFSGRT59vNuZVBuakYz3BlGGrkvAPVQ==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/png-js': 2.3.1 cross-fetch: 3.1.8 jay-peg: 1.0.1 @@ -10275,7 +10145,7 @@ packages: /@react-pdf/layout@3.11.2: resolution: {integrity: sha512-5EiHJ+Eb0odqnkWll9pWbTp+dwH1QRm7mOXDMiklqIWK98eI7e3cEae5Dgr0TtdnB7KgPW9Tvul2CwRJTwq54A==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/fns': 2.2.1 '@react-pdf/image': 2.3.4 '@react-pdf/pdfkit': 3.1.6 @@ -10294,7 +10164,7 @@ packages: /@react-pdf/pdfkit@3.1.6: resolution: {integrity: sha512-U96VVhphniDBsLbmeJHgEml15nng8cr90mmEfPATh98gsqg6wev0avBr4k9XPjLdaN1f2xTXD4VdlaMYJZ+n7Q==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/png-js': 2.3.1 browserify-zlib: 0.2.0 crypto-js: 4.2.0 @@ -10316,7 +10186,7 @@ packages: /@react-pdf/render@3.4.3: resolution: {integrity: sha512-9LL059vfwrK1gA0uIA4utpQ/pUH9EW/yia4bb7pCoARs8IlupY5UP265jgax15ua0p+MdUwShZzQ9rilu7kGsw==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/fns': 2.2.1 '@react-pdf/primitives': 3.1.1 '@react-pdf/textkit': 4.4.1 @@ -10353,7 +10223,7 @@ packages: /@react-pdf/stylesheet@4.2.4: resolution: {integrity: sha512-CgRfDzeMtnV0GL7zSn381NubmgwqKhFKcK1YrWX3azl/KWVh52jjFd3HWi6dvcETNT862mjWz5MnExe4WOBJXA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/fns': 2.2.1 '@react-pdf/types': 2.4.1 color-string: 1.9.1 @@ -10365,7 +10235,7 @@ packages: /@react-pdf/textkit@4.4.1: resolution: {integrity: sha512-Jl9wdTqIvJ5pX+vAGz0EOhP7ut5Two9H6CzTKo/YYPeD79cM2yTXF3JzTERBC28y7LR0Waq9D2LHQjI+b/EYUQ==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@react-pdf/fns': 2.2.1 bidi-js: 1.0.3 hyphen: 1.10.4 @@ -10384,6 +10254,7 @@ packages: '@react-spring/shared': 9.6.1(react@18.2.0) '@react-spring/types': 9.6.1 react: 18.2.0 + dev: true /@react-spring/core@9.6.1(react@18.2.0): resolution: {integrity: sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==} @@ -10395,9 +10266,11 @@ packages: '@react-spring/shared': 9.6.1(react@18.2.0) '@react-spring/types': 9.6.1 react: 18.2.0 + dev: true /@react-spring/rafz@9.6.1: resolution: {integrity: sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==} + dev: true /@react-spring/shared@9.6.1(react@18.2.0): resolution: {integrity: sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==} @@ -10407,9 +10280,11 @@ packages: '@react-spring/rafz': 9.6.1 '@react-spring/types': 9.6.1 react: 18.2.0 + dev: true /@react-spring/types@9.6.1: resolution: {integrity: sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==} + dev: true /@react-spring/web@9.6.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw==} @@ -10423,6 +10298,7 @@ packages: '@react-spring/types': 9.6.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: true /@reactflow/background@11.3.6(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-06FPlSUOOMALEEs+2PqPAbpqmL7WDjrkbG2UsDr2d6mbcDDhHiV4tu9FYoz44SQvXo7ma9VRotlsaR4OiRcYsg==} @@ -12423,7 +12299,7 @@ packages: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.0 @@ -12499,7 +12375,7 @@ packages: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.4.3) '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 typescript: 5.4.3 transitivePeerDependencies: @@ -12552,7 +12428,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 @@ -12599,7 +12475,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 @@ -12619,7 +12495,7 @@ packages: dependencies: '@typescript-eslint/types': 6.14.0 '@typescript-eslint/visitor-keys': 6.14.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 @@ -12743,31 +12619,6 @@ packages: transitivePeerDependencies: - supports-color - /@umijs/bundler-vite@4.0.89(@types/node@20.12.2)(postcss@8.4.35): - resolution: {integrity: sha512-4dfBmVK44AqsJm1+YhFijKXcrHoM26vO9Ju5Us4+J0Ca3rDUtWQZJ9xFEkqsNsf7AMaJ7B8zDd422sThvvSXGQ==} - hasBin: true - dependencies: - '@svgr/core': 6.5.1 - '@umijs/bundler-utils': 4.0.89 - '@umijs/utils': 4.0.89 - '@vitejs/plugin-react': 4.0.0(vite@4.3.1) - core-js: 3.28.0 - less: 4.1.3 - postcss-preset-env: 7.5.0(postcss@8.4.35) - rollup-plugin-visualizer: 5.9.0 - systemjs: 6.14.2 - vite: 4.3.1(@types/node@20.12.2)(less@4.1.3) - transitivePeerDependencies: - - '@types/node' - - postcss - - rollup - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - /@umijs/bundler-vite@4.0.89(@types/node@20.12.2)(postcss@8.4.35)(sass@1.69.5): resolution: {integrity: sha512-4dfBmVK44AqsJm1+YhFijKXcrHoM26vO9Ju5Us4+J0Ca3rDUtWQZJ9xFEkqsNsf7AMaJ7B8zDd422sThvvSXGQ==} hasBin: true @@ -12946,7 +12797,7 @@ packages: /@umijs/history@5.3.1: resolution: {integrity: sha512-/e0cEGrR2bIWQD7pRl3dl9dcyRGeC9hoW0OCvUTT/hjY0EfUrkd6G8ZanVghPMpDuY5usxq9GVcvrT8KNXLWvA==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.1 query-string: 6.14.1 /@umijs/lint@4.0.89(eslint@8.55.0)(stylelint@14.16.1)(typescript@5.4.3): @@ -13077,63 +12928,6 @@ packages: - webpack-hot-middleware - webpack-plugin-serve - /@umijs/preset-umi@4.0.89(@types/node@20.12.2)(@types/react@18.2.73)(typescript@5.4.3)(webpack@5.91.0): - resolution: {integrity: sha512-S0dn0e9C5eD2IX8bGGrNEDd0EaQVGuAwyJw2ruIU/FCO9B1HwdjCdRMuEADCBOuXMzBRt4+wKToFgId5tz3gAA==} - dependencies: - '@iconify/utils': 2.1.1 - '@svgr/core': 6.5.1 - '@umijs/ast': 4.0.89 - '@umijs/babel-preset-umi': 4.0.89 - '@umijs/bundler-esbuild': 4.0.89 - '@umijs/bundler-utils': 4.0.89 - '@umijs/bundler-vite': 4.0.89(@types/node@20.12.2)(postcss@8.4.35) - '@umijs/bundler-webpack': 4.0.89(typescript@5.4.3)(webpack@5.91.0) - '@umijs/core': 4.0.89 - '@umijs/did-you-know': 1.0.3 - '@umijs/es-module-parser': 0.0.7 - '@umijs/history': 5.3.1 - '@umijs/mfsu': 4.0.89 - '@umijs/plugin-run': 4.0.89 - '@umijs/renderer-react': 4.0.89(react-dom@18.2.0)(react@18.2.0) - '@umijs/server': 4.0.89 - '@umijs/ui': 3.0.1 - '@umijs/utils': 4.0.89 - '@umijs/zod2ts': 4.0.89 - babel-plugin-dynamic-import-node: 2.3.3 - click-to-react-component: 1.1.0(@types/react@18.2.73)(react-dom@18.2.0)(react@18.2.0) - core-js: 3.28.0 - current-script-polyfill: 1.0.0 - enhanced-resolve: 5.9.3 - fast-glob: 3.2.12 - html-webpack-plugin: 5.5.0(webpack@5.91.0) - less-plugin-resolve: 1.0.2 - path-to-regexp: 1.7.0 - postcss: 8.4.35 - postcss-prefix-selector: 1.16.0(postcss@8.4.35) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.21.1(react@18.2.0) - react-router-dom: 6.21.0(react-dom@18.2.0)(react@18.2.0) - regenerator-runtime: 0.13.11 - transitivePeerDependencies: - - '@types/node' - - '@types/react' - - '@types/webpack' - - rollup - - sass - - sockjs-client - - stylus - - sugarss - - supports-color - - terser - - type-fest - - typescript - - webpack - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - /@umijs/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack@5.91.0): resolution: {integrity: sha512-RtFvB+/GmjRhpHcqNgnw8iWZpTlxOnmNxi8eDcecxMmxmSgeDj25LV0jr4Q6rOhv3GTIfVGBhkwz+khGT5tfmg==} engines: {node: '>= 10.13'} @@ -13215,22 +13009,6 @@ packages: - '@babel/core' - supports-color - /@umijs/test@4.0.89(@babel/core@7.23.6): - resolution: {integrity: sha512-eOVyk1zkCypEC0AtrnM1Kfp0+6DQK8FImXMTd3t3w8eSXTkh2v4Njy27qRC7soQeQhC/RieP3qpcs+k15rZYvg==} - dependencies: - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.6) - '@jest/types': 27.5.1 - '@umijs/bundler-utils': 4.0.89 - '@umijs/utils': 4.0.89 - babel-jest: 29.7.0(@babel/core@7.23.6) - esbuild: 0.17.19 - identity-obj-proxy: 3.0.0 - isomorphic-unfetch: 4.0.2 - transitivePeerDependencies: - - '@babel/core' - - supports-color - dev: true - /@umijs/ui@3.0.1: resolution: {integrity: sha512-zcz37AJH0xt/6XVVbyO/hmsK9Hq4vH23HZ4KYVi5A8rbM9KeJkJigTS7ELOdArawZhVNGe+h3a5Oixs4a2QsWw==} @@ -13261,6 +13039,7 @@ packages: /@use-gesture/core@10.3.0: resolution: {integrity: sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A==} + dev: true /@use-gesture/react@10.3.0(react@18.2.0): resolution: {integrity: sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA==} @@ -13269,6 +13048,7 @@ packages: dependencies: '@use-gesture/core': 10.3.0 react: 18.2.0 + dev: true /@vercel/ncc@0.36.1: resolution: {integrity: sha512-S4cL7Taa9yb5qbv+6wLgiKVZ03Qfkc4jGRuiUQMQ8HGBD5pcNRnHeYM33zBvJE4/zJGjJJ8GScB+WmTsn9mORw==} @@ -13285,7 +13065,7 @@ packages: '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.22.10) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.22.10) react-refresh: 0.14.0 - vite: 4.3.1(@types/node@20.12.2)(less@4.1.3) + vite: 4.3.1(@types/node@20.12.2)(less@4.1.3)(sass@1.69.5) transitivePeerDependencies: - supports-color @@ -13557,7 +13337,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -13827,9 +13607,11 @@ packages: /antd-mobile-icons@0.3.0: resolution: {integrity: sha512-rqINQpJWZWrva9moCd1Ye695MZYWmqLPE+bY8d2xLRy7iSQwPsinCdZYjpUPp2zL/LnKYSyXxP2ut2A+DC+whQ==} + dev: true /antd-mobile-v5-count@1.0.1: resolution: {integrity: sha512-YGsiEDCPUDz3SzfXi6gLZn/HpeSMW+jgPc4qiYUr1fSopg3hkUie2TnooJdExgfiETHefH3Ggs58He0OVfegLA==} + dev: true /antd-mobile@5.33.1(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-CVoLhVlqyoUYopv8ZqZW64m+c8Nyp1l+AxGsYV8cFhhshyXO4lNjWuLJ4xwL4+2VDy16TW21gCItboWLqWP7Mg==} @@ -13856,6 +13638,7 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) transitivePeerDependencies: - react-dom + dev: true /antd-style@3.4.5(@types/react@18.2.73)(antd@5.16.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-6aC4P9XyuVy0O7eZ+HZXd8GbbFX9HgzsXsJ341ihJhgqrfsQZNx8lDQvS2kCV6ao99QqtyTDphK9gWOgV2bHEw==} @@ -13908,14 +13691,14 @@ packages: react-dom: 18.2.0 dependencies: '@ant-design/colors': 6.0.0 - '@ant-design/cssinjs': 1.18.2(react-dom@18.2.0)(react@18.2.0) + '@ant-design/cssinjs': 1.19.0(react-dom@18.2.0)(react@18.2.0) '@ant-design/icons': 5.3.6(react-dom@18.2.0)(react@18.2.0) '@arvinxu/layout-kit': 1.4.0(@babel/core@7.22.10)(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@ctrl/tinycolor': 3.6.1 antd: 5.16.0(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) react-dom: 18.2.0(react@18.2.0) @@ -14525,24 +14308,6 @@ packages: transitivePeerDependencies: - supports-color - /babel-jest@29.7.0(@babel/core@7.23.6): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.6 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.6) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-dynamic-import-node@2.3.3: resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: @@ -14573,7 +14338,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -14647,26 +14412,6 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.10) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.10) - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) - dev: true - /babel-preset-jest@29.6.3(@babel/core@7.22.10): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14677,17 +14422,6 @@ packages: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.10) - /babel-preset-jest@29.6.3(@babel/core@7.23.6): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) - dev: true - /babel-runtime@6.26.0: resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} dependencies: @@ -17084,17 +16818,6 @@ packages: dependencies: ms: 2.1.3 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - /debug@4.3.4(supports-color@5.5.0): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -17526,7 +17249,7 @@ packages: /dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 csstype: 3.1.3 dev: true @@ -18718,7 +18441,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -19420,7 +19143,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) /follow-redirects@1.5.10: resolution: {integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==} @@ -19846,7 +19569,7 @@ packages: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -20553,7 +20276,7 @@ packages: /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.1 /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -20791,7 +20514,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -20832,7 +20555,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -22454,7 +22177,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) execa: 7.2.0 lilconfig: 2.1.0 listr2: 6.6.1 @@ -24896,7 +24619,7 @@ packages: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) get-uri: 6.0.2 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 @@ -25505,7 +25228,7 @@ packages: resolution: {integrity: sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==} engines: {node: '>=5'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -25516,7 +25239,7 @@ packages: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -25541,7 +25264,7 @@ packages: requiresBuild: true dependencies: async: 3.2.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) pidusage: 2.0.21 systeminformation: 5.21.20 tx2: 1.0.5 @@ -25567,7 +25290,7 @@ packages: commander: 2.15.1 croner: 4.1.97 dayjs: 1.11.10 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) enquirer: 2.3.6 eventemitter2: 5.0.1 fclone: 1.0.11 @@ -26326,7 +26049,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.2 lru-cache: 7.18.3 @@ -26559,10 +26282,10 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 dom-align: 1.12.4 - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) resize-observer-polyfill: 1.5.1 @@ -26628,11 +26351,11 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@rc-component/portal': 1.1.2(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -26657,10 +26380,10 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -26687,9 +26410,10 @@ packages: dependencies: '@babel/runtime': 7.24.1 async-validator: 4.2.5 - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + dev: true /rc-field-form@1.44.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-el7w87fyDUsca63Y/s8qJcq9kNkf/J5h+iTdqG5WsSHLH0e6Usl7QuYSmSVzJMgtp40mOVZIY/W/QP9zwrp1FA==} @@ -26767,12 +26491,12 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -26931,13 +26655,13 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) rc-trigger: 5.3.4(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) - rc-virtual-list: 3.11.3(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -26949,12 +26673,12 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 - '@rc-component/trigger': 1.18.2(react-dom@18.2.0)(react@18.2.0) + '@babel/runtime': 7.24.1 + '@rc-component/trigger': 1.18.3(react-dom@18.2.0)(react@18.2.0) classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-overflow: 1.3.2(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) rc-virtual-list: 3.11.3(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -27038,13 +26762,13 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-dropdown: 4.1.0(react-dom@18.2.0)(react@18.2.0) rc-menu: 9.12.4(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -27143,11 +26867,11 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) - rc-virtual-list: 3.11.3(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) + rc-virtual-list: 3.11.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -27159,10 +26883,10 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) rc-virtual-list: 3.11.3(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -27189,11 +26913,11 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-align: 4.0.15(react-dom@18.2.0)(react@18.2.0) rc-motion: 2.9.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true @@ -27239,10 +26963,10 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 classnames: 2.5.1 rc-resize-observer: 1.4.0(react-dom@18.2.0)(react@18.2.0) - rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) + rc-util: 5.39.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -27355,7 +27079,7 @@ packages: peerDependencies: react: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 react: 18.2.0 dev: false @@ -27379,7 +27103,7 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.1 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 @@ -27520,7 +27244,7 @@ packages: react: 18.2.0 react-dom: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@popperjs/core': 2.11.8 '@restart/hooks': 0.4.15(react@18.2.0) '@types/warning': 3.0.3 @@ -27584,7 +27308,7 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@types/react-redux': 7.1.33 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -27846,7 +27570,7 @@ packages: /redux@4.2.1: resolution: {integrity: sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==} dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 /reflect-metadata@0.1.14: resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} @@ -28159,7 +27883,7 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -28436,6 +28160,7 @@ packages: /runes2@1.1.3: resolution: {integrity: sha512-sJ/0iVFLne4f2S7cMB1OckBtC9lqkzP5a/wPnDIkbrWzgUsJ+JMQv6y7hk76U7zvbua+je5GltfpsZazUhG05w==} + dev: true /rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} @@ -29001,7 +28726,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -29177,7 +28902,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -29190,7 +28915,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -29323,6 +29048,7 @@ packages: react: 18.2.0 dependencies: react: 18.2.0 + dev: true /static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} @@ -29689,7 +29415,7 @@ packages: colord: 2.9.3 cosmiconfig: 7.1.0 css-functions-list: 3.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) fast-glob: 3.3.2 fastest-levenshtein: 1.0.16 file-entry-cache: 6.0.1 @@ -30875,56 +30601,6 @@ packages: - webpack-plugin-serve dev: true - /umi@4.0.89(@babel/core@7.23.6)(@types/node@20.12.2)(@types/react@18.2.73)(eslint@8.57.0)(prettier@3.2.5)(react-dom@18.2.0)(react@18.2.0)(stylelint@14.16.1)(typescript@5.4.3)(webpack@5.91.0): - resolution: {integrity: sha512-bC62ctJ3wnymADnhE5nU7IZz4+XQ3MPWwoVW150OJazyAqEioZdjIZEBgB9pVfQEM819xMc6+eslnyuCNOQV+g==} - engines: {node: '>=14'} - hasBin: true - dependencies: - '@babel/runtime': 7.23.2 - '@umijs/bundler-utils': 4.0.89 - '@umijs/bundler-webpack': 4.0.89(typescript@5.4.3)(webpack@5.91.0) - '@umijs/core': 4.0.89 - '@umijs/lint': 4.0.89(eslint@8.57.0)(stylelint@14.16.1)(typescript@5.4.3) - '@umijs/preset-umi': 4.0.89(@types/node@20.12.2)(@types/react@18.2.73)(typescript@5.4.3)(webpack@5.91.0) - '@umijs/renderer-react': 4.0.89(react-dom@18.2.0)(react@18.2.0) - '@umijs/server': 4.0.89 - '@umijs/test': 4.0.89(@babel/core@7.23.6) - '@umijs/utils': 4.0.89 - prettier-plugin-organize-imports: 3.2.4(prettier@3.2.5)(typescript@5.4.3) - prettier-plugin-packagejson: 2.4.3(prettier@3.2.5) - transitivePeerDependencies: - - '@babel/core' - - '@types/node' - - '@types/react' - - '@types/webpack' - - '@volar/vue-language-plugin-pug' - - '@volar/vue-typescript' - - eslint - - jest - - postcss-html - - postcss-jsx - - postcss-less - - postcss-markdown - - postcss-scss - - prettier - - react - - react-dom - - rollup - - sass - - sockjs-client - - stylelint - - stylus - - sugarss - - supports-color - - terser - - type-fest - - typescript - - webpack - - webpack-dev-server - - webpack-hot-middleware - - webpack-plugin-serve - dev: true - /umzug@3.5.0: resolution: {integrity: sha512-bL6JjH716l0kg7V2Acrw5UmUgeLxdAZv3drMhKrJCXxEfK/qyM+B5s3ai1BjG1NyEGeXTOkhFIUgkMFo6zqVBg==} engines: {node: '>=12'} @@ -30960,7 +30636,7 @@ packages: peerDependencies: react: 18.2.0 dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.24.1 '@types/react': 18.2.73 invariant: 2.2.4 react: 18.2.0 @@ -31656,39 +31332,6 @@ packages: vite: 5.1.5(@types/node@20.12.2) dev: false - /vite@4.3.1(@types/node@20.12.2)(less@4.1.3): - resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': ^20.12.2 - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.12.2 - esbuild: 0.17.19 - less: 4.1.3 - postcss: 8.4.35 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - /vite@4.3.1(@types/node@20.12.2)(less@4.1.3)(sass@1.69.5): resolution: {integrity: sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg==} engines: {node: ^14.18.0 || >=16.0.0}