From 36ba1ead2987113231033833fb2e75ee1b3a225e Mon Sep 17 00:00:00 2001 From: hisoka0728 <1399952343@qq.com> Date: Mon, 30 Sep 2024 17:29:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4element-plus=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/devtool/ibiz.config.ts | 1 - packages/devtool/package.json | 2 - .../devtool-collapse-panel.scss | 50 ++++++ .../devtool-collapse-panel.tsx | 76 +++++++++ .../devtool-collapse/devtool-collapse.scss | 3 + .../devtool-collapse/devtool-collapse.tsx | 44 +++++ .../devtool/src/components/collapse/index.ts | 5 + .../transition-height/transition-height.scss | 4 + .../transition-height/transition-height.tsx | 42 +++++ .../components/detail-info/detail-info.tsx | 23 ++- .../devtool-button/devtool-button.scss | 23 +++ .../devtool-button/devtool-button.tsx | 35 ++++ .../global-toolbar/global-toolbar.scss | 2 +- .../global-toolbar/global-toolbar.tsx | 122 ++++++++----- .../src/components/index-page/index-page.scss | 2 +- .../components/message-box/message-box.scss | 97 +++++++++++ .../components/message-box/message-box.tsx | 105 ++++++++++++ .../object-viewer/object-viewer.scss | 11 +- .../object-viewer/object-viewer.tsx | 10 +- .../devtool-select-option.scss | 20 +++ .../devtool-select-option.tsx | 45 +++++ .../select/devtool-select/devtool-select.scss | 52 ++++++ .../select/devtool-select/devtool-select.tsx | 161 ++++++++++++++++++ .../devtool/src/components/select/index.ts | 4 + .../user-config-edit/user-config-edit.scss | 34 +++- .../user-config-edit/user-config-edit.tsx | 32 +++- .../src/components/view-list/view-list.scss | 24 ++- .../src/components/view-list/view-list.tsx | 26 ++- .../src/controller/center.controller.ts | 2 - pnpm-lock.yaml | 121 +------------ 30 files changed, 951 insertions(+), 227 deletions(-) create mode 100644 packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.scss create mode 100644 packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.tsx create mode 100644 packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.scss create mode 100644 packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.tsx create mode 100644 packages/devtool/src/components/collapse/index.ts create mode 100644 packages/devtool/src/components/collapse/transition-height/transition-height.scss create mode 100644 packages/devtool/src/components/collapse/transition-height/transition-height.tsx create mode 100644 packages/devtool/src/components/devtool-button/devtool-button.scss create mode 100644 packages/devtool/src/components/devtool-button/devtool-button.tsx create mode 100644 packages/devtool/src/components/message-box/message-box.scss create mode 100644 packages/devtool/src/components/message-box/message-box.tsx create mode 100644 packages/devtool/src/components/select/devtool-select-option/devtool-select-option.scss create mode 100644 packages/devtool/src/components/select/devtool-select-option/devtool-select-option.tsx create mode 100644 packages/devtool/src/components/select/devtool-select/devtool-select.scss create mode 100644 packages/devtool/src/components/select/devtool-select/devtool-select.tsx create mode 100644 packages/devtool/src/components/select/index.ts diff --git a/packages/devtool/ibiz.config.ts b/packages/devtool/ibiz.config.ts index f406994..13b34a4 100644 --- a/packages/devtool/ibiz.config.ts +++ b/packages/devtool/ibiz.config.ts @@ -31,7 +31,6 @@ export default defineConfig({ 'vue', 'vue-router', 'vue-i18n', - 'element-plus', 'async-validator', 'dayjs', 'dayjs/plugin/minMax', diff --git a/packages/devtool/package.json b/packages/devtool/package.json index 263402c..ede66af 100644 --- a/packages/devtool/package.json +++ b/packages/devtool/package.json @@ -41,7 +41,6 @@ "async-validator": "^4.2.5", "axios": "^1.6.2", "dayjs": "^1.11.10", - "element-plus": "^2.4.2", "lodash-es": "^4.17.21", "pluralize": "^8.0.0", "qs": "^6.11.2", @@ -66,7 +65,6 @@ "async-validator": "^4.2.5", "axios": "^1.6.1", "dayjs": "^1.11.10", - "element-plus": "^2.4.2", "lodash-es": "^4.17.21", "pluralize": "^8.0.0", "qs": "^6.11.2", diff --git a/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.scss b/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.scss new file mode 100644 index 0000000..8500795 --- /dev/null +++ b/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.scss @@ -0,0 +1,50 @@ +/* stylelint-disable selector-class-pattern */ +@include b(devtool-collapse-panel) { + width: 100%; + height: auto; + border-bottom: 1px solid getCssVar(color, border); + + &:last-child .foldItemHeader { + border-bottom: none !important; + } + + &:last-child .transitionHeight .foldItemBody { + border-top: 1px solid getCssVar(color, border); + border-bottom: none !important; + } + @include e(header) { + box-sizing: border-box; + display: flex; + flex-flow: row nowrap; + place-content: center space-between; + align-items: center; + min-height: 50px; + padding: 0 12px; + padding-left: 8px; + cursor: pointer; + + // 展开折叠项时,小图标旋转效果 + + @include e(icon) { + transition: all 0.24s; + transform: rotate(0deg); + + > svg { + width: 13px; + height: 13px; + } + + &.rotate90deg { + transition: all 0.24s; + transform: rotate(90deg); + } + } + } + + @include e(body) { + box-sizing: border-box; + width: 100%; + height: auto; + padding: 0 12px 12px 8px; + } +} diff --git a/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.tsx b/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.tsx new file mode 100644 index 0000000..a2be8aa --- /dev/null +++ b/packages/devtool/src/components/collapse/devtool-collapse-panel/devtool-collapse-panel.tsx @@ -0,0 +1,76 @@ +import { defineComponent, inject, ref, watch } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import { createUUID } from 'qx-util'; +import { TransitionHeight } from '../transition-height/transition-height'; +import './devtool-collapse-panel.scss'; + +export const DevToolCollapsePanel = defineComponent({ + name: 'DevToolCollapsePanel', + component: [TransitionHeight], + props: { + title: String, // 折叠面板的标题 + name: String, // 折叠面板的名字,即为唯一标识符(不可与其他重复!) + // 是否隐藏小箭头,默认false,即展示小箭头 + hiddenArrow: { + type: Boolean, + default: false, + }, + }, + setup(props) { + const ns = useNamespace('devtool-collapse-panel'); + const transitionWrap = ref(); + const height = ref(0); + const collapse = inject('collapse') as IData; + const isOpen = ref(false); + watch( + () => [collapse.openArr.value, props.name], + () => { + isOpen.value = collapse.openArr.value.includes(props.name); + }, + { immediate: true, deep: true }, + ); + const handleHeaderClick = (event: MouseEvent) => { + event.stopPropagation(); + collapse.updateVModel(props.name, isOpen.value); + isOpen.value = !isOpen.value; // 内容依托于变量isOpen直接更新即可 + }; + + const renderSvg = () => { + return ( + + + + ); + }; + + return { ns, transitionWrap, height, handleHeaderClick, isOpen, renderSvg }; + }, + render() { + return ( +
+
this.handleHeaderClick(event)} + > + {this.title} + {!this.hiddenArrow ? ( +
+ {this.renderSvg()} +
+ ) : null} +
+ +
{this.$slots.default?.()}
+
+
+ ); + }, +}); +export default DevToolCollapsePanel; diff --git a/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.scss b/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.scss new file mode 100644 index 0000000..9e4b0a5 --- /dev/null +++ b/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.scss @@ -0,0 +1,3 @@ +@include b(devtool-collapse) { + border-top: 1px solid getCssVar(color, border); +} diff --git a/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.tsx b/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.tsx new file mode 100644 index 0000000..b4868a1 --- /dev/null +++ b/packages/devtool/src/components/collapse/devtool-collapse/devtool-collapse.tsx @@ -0,0 +1,44 @@ +/* eslint-disable no-unused-expressions */ +import { computed, defineComponent, provide } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './devtool-collapse.scss'; + +export const DevToolCollapse = defineComponent({ + name: 'DevToolCollapse', + props: { + accordion: { + type: Boolean, + default: false, // 默认不开启(可展开多个) + }, + // 父组件v-model传参,子组件props中key为'value'接收,'input'事件更改 + value: { + type: Array, // 手风琴模式的数组项只能有一个,反之可以有多个 + default() { + return []; + }, + }, + }, + emits: ['input', 'change'], + setup(props, { emit }) { + const ns = useNamespace('devtool-collapse'); + const openArr = computed(() => { + return props.value; + }); + const updateVModel = (name: string, isOpen: string) => { + const i = openArr.value.indexOf(name); + i > -1 ? openArr.value.splice(i, 1) : openArr.value.push(name); + emit('input', openArr.value); // input事件控制v-model的数据更改 + emit('change', name, isOpen); // change事件抛出去,供用户使用 + }; + + provide('collapse', { + updateVModel, + openArr, + }); + return { ns, openArr, updateVModel }; + }, + render() { + return
{this.$slots.default?.()}
; + }, +}); +export default DevToolCollapse; diff --git a/packages/devtool/src/components/collapse/index.ts b/packages/devtool/src/components/collapse/index.ts new file mode 100644 index 0000000..b56831e --- /dev/null +++ b/packages/devtool/src/components/collapse/index.ts @@ -0,0 +1,5 @@ +import TransitionHeight from './transition-height/transition-height'; +import DevToolCollapse from './devtool-collapse/devtool-collapse'; +import DevToolCollapsePanel from './devtool-collapse-panel/devtool-collapse-panel'; + +export { TransitionHeight, DevToolCollapse, DevToolCollapsePanel }; diff --git a/packages/devtool/src/components/collapse/transition-height/transition-height.scss b/packages/devtool/src/components/collapse/transition-height/transition-height.scss new file mode 100644 index 0000000..3623611 --- /dev/null +++ b/packages/devtool/src/components/collapse/transition-height/transition-height.scss @@ -0,0 +1,4 @@ +@include b('transition-height') { + overflow: hidden; + transition: height 0.2s linear; +} diff --git a/packages/devtool/src/components/collapse/transition-height/transition-height.tsx b/packages/devtool/src/components/collapse/transition-height/transition-height.tsx new file mode 100644 index 0000000..2d6bd59 --- /dev/null +++ b/packages/devtool/src/components/collapse/transition-height/transition-height.tsx @@ -0,0 +1,42 @@ +import { defineComponent, nextTick, onMounted, ref, watch } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './transition-height.scss'; + +export const TransitionHeight = defineComponent({ + name: 'TransitionHeight', + props: { + // 布尔值show标识关闭还是展开 + show: Boolean, + }, + setup(props) { + const ns = useNamespace('transition-height'); + const transitionWrap = ref(); + const height = ref(0); + onMounted(() => { + nextTick(() => { + height.value = transitionWrap.value.offsetHeight; + transitionWrap.value.style.height = props.show + ? `${height.value}px` + : 0; + }); + }); + + watch( + () => props.show, + newVal => { + if (transitionWrap.value) { + transitionWrap.value.style.height = newVal ? `${height.value}px` : 0; + } + }, + ); + return { ns, transitionWrap, height }; + }, + render() { + return ( +
+ {this.$slots.default?.()} +
+ ); + }, +}); +export default TransitionHeight; diff --git a/packages/devtool/src/components/detail-info/detail-info.tsx b/packages/devtool/src/components/detail-info/detail-info.tsx index b1d07d0..caf5304 100644 --- a/packages/devtool/src/components/detail-info/detail-info.tsx +++ b/packages/devtool/src/components/detail-info/detail-info.tsx @@ -1,11 +1,13 @@ import { PropType, defineComponent, ref } from 'vue'; import { useNamespace } from '@ibiz-template/vue3-util'; -import './detail-info.scss'; import { CenterController } from '../../controller/center.controller'; +import { DevToolCollapse, DevToolCollapsePanel } from '../collapse/index'; +import './detail-info.scss'; import { ObjectViewer } from '../object-viewer/object-viewer'; export const DetailInfo = defineComponent({ name: 'DevToolDetailInfo', + component: [DevToolCollapse, DevToolCollapsePanel], props: { center: { type: Object as PropType, @@ -15,7 +17,7 @@ export const DetailInfo = defineComponent({ setup() { const ns = useNamespace('detail-info'); - const expandItems = ref(['context', 'viewparams']); + const expandItems = ref(['context']); return { ns, expandItems }; }, @@ -36,19 +38,14 @@ export const DetailInfo = defineComponent({ return (
- { - e.stopPropagation(); - }} - > - + + - - + + {view.params && } - - + +
); }, diff --git a/packages/devtool/src/components/devtool-button/devtool-button.scss b/packages/devtool/src/components/devtool-button/devtool-button.scss new file mode 100644 index 0000000..2f1c352 --- /dev/null +++ b/packages/devtool/src/components/devtool-button/devtool-button.scss @@ -0,0 +1,23 @@ +@include b(devtool-button) { + box-sizing: border-box; + display: inline-flex; + align-items: center; + justify-content: center; + height: 24px; + padding: 5px 10px; + font-size: 12px; + font-weight: 500; + line-height: 1; + color: getCssVar(color, primary, text); + text-align: center; + white-space: nowrap; + vertical-align: middle; + appearance: none; + cursor: pointer; + user-select: none; + background-color: getCssVar(color, primary); + border: 1px solid getCssVar(color, border); + border-radius: 4px ; + outline: 0; + transition: 0.1s; +} diff --git a/packages/devtool/src/components/devtool-button/devtool-button.tsx b/packages/devtool/src/components/devtool-button/devtool-button.tsx new file mode 100644 index 0000000..bbf644b --- /dev/null +++ b/packages/devtool/src/components/devtool-button/devtool-button.tsx @@ -0,0 +1,35 @@ +import { defineComponent, PropType } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './devtool-button.scss'; + +const DevtoolButton = defineComponent({ + name: 'DevtoolButton', + props: { + title: { + type: String as PropType, + default: '', + }, + }, + emits: ['click'], + setup(props, { emit }) { + const ns = useNamespace('devtool-button'); + const click = (event: MouseEvent) => { + event.stopPropagation(); + emit('click', event); + }; + return { ns, click }; + }, + render() { + return ( + + ); + }, +}); + +export default DevtoolButton; diff --git a/packages/devtool/src/components/global-toolbar/global-toolbar.scss b/packages/devtool/src/components/global-toolbar/global-toolbar.scss index 1fe7b6b..98cc290 100644 --- a/packages/devtool/src/components/global-toolbar/global-toolbar.scss +++ b/packages/devtool/src/components/global-toolbar/global-toolbar.scss @@ -4,7 +4,7 @@ @include flex(row, space-between, center); @include b(global-toolbar-right) { - .el-button+.el-button{ + .ibiz-devtool-button+.ibiz-devtool-button{ margin-left: 6px; } } diff --git a/packages/devtool/src/components/global-toolbar/global-toolbar.tsx b/packages/devtool/src/components/global-toolbar/global-toolbar.tsx index 163bcac..deeb870 100644 --- a/packages/devtool/src/components/global-toolbar/global-toolbar.tsx +++ b/packages/devtool/src/components/global-toolbar/global-toolbar.tsx @@ -1,14 +1,23 @@ -import { PropType, Ref, defineComponent, h, ref, watch } from 'vue'; +import { PropType, Ref, defineComponent, ref, watch } from 'vue'; import { useNamespace } from '@ibiz-template/vue3-util'; import './global-toolbar.scss'; -import { ElMessageBox } from 'element-plus'; -import { IDevToolConfig } from '@ibiz-template/core'; import { LogLevelDesc } from 'loglevel'; -import { UserConfigEdit } from '../user-config-edit/user-config-edit'; +import { IDevToolConfig } from '@ibiz-template/core'; import { CenterController } from '../../controller/center.controller'; +import { DevtoolSelect, DevtoolSelectOption } from '../select/index'; +import DevtoolButton from '../devtool-button/devtool-button'; +import MessageBox from '../message-box/message-box'; +import UserConfigEdit from '../user-config-edit/user-config-edit'; export const GlobalToolbar = defineComponent({ name: 'DevToolGlobalToolbar', + component: [ + DevtoolSelect, + DevtoolSelectOption, + DevtoolButton, + MessageBox, + UserConfigEdit, + ], props: { center: { type: Object as PropType, @@ -18,33 +27,28 @@ export const GlobalToolbar = defineComponent({ setup(props) { const ns = useNamespace('global-toolbar'); - let isEditing = false; - const onConfigEditClick = async () => { - if (isEditing) { - return; - } - let changeData: Partial | undefined; - isEditing = true; - const result = await ElMessageBox({ - title: '编辑配置', - message: () => - h(UserConfigEdit, { - userConfig: props.center.userConfig || {}, - onChange: data => { - changeData = data; - }, - }), - showCancelButton: true, - cancelButtonText: '取消', - confirmButtonText: '保存', - }); + const dialog1 = ref(false); + + const result = ref(''); - if (result === 'confirm' && changeData) { - props.center.updateUserConfig(changeData); - } - isEditing = false; + const changeData = ref | undefined>(undefined); + const onConfigEditClick = () => { + changeData.value = undefined; + result.value = ''; + dialog1.value = true; }; + watch( + () => dialog1.value, + (newVal, oldVal) => { + if (newVal === false && oldVal === true) { + if (result.value === 'confirm' && changeData.value) { + props.center.updateUserConfig(changeData.value); + } + } + }, + ); + const close = () => { props.center.triggerVisible(false); }; @@ -76,6 +80,10 @@ export const GlobalToolbar = defineComponent({ { immediate: true }, ); + const hasClosed = (type: string) => { + result.value = type; + }; + return { ns, onConfigEditClick, @@ -83,6 +91,9 @@ export const GlobalToolbar = defineComponent({ logLevels, logLevel, handleLevelChange, + dialog1, + hasClosed, + changeData, }; }, render() { @@ -90,32 +101,53 @@ export const GlobalToolbar = defineComponent({
日志级别: - this.handleLevelChange(value)} + options={this.logLevels as string[]} > - {this.logLevels.map(level => { + {this.logLevels.map((level: LogLevelDesc) => { return ( - + ); })} - +
- + - - + + - +
+ this.hasClosed(type)} + mask={true} + title={'编辑配置'} + onChangeDialog={value => { + this.dialog1 = value; + }} + showCloseIcon={true} + > + {{ + default: () => { + return ( + { + this.changeData = data; + }} + > + ); + }, + }} +
); }, diff --git a/packages/devtool/src/components/index-page/index-page.scss b/packages/devtool/src/components/index-page/index-page.scss index 4890f4e..856b1b3 100644 --- a/packages/devtool/src/components/index-page/index-page.scss +++ b/packages/devtool/src/components/index-page/index-page.scss @@ -8,7 +8,7 @@ padding: 8px; overflow: auto; font-size: 13px; - background: #FFF; + background: getCssVar(color,bg,1); transition: all .5s; @include when(hidden) { diff --git a/packages/devtool/src/components/message-box/message-box.scss b/packages/devtool/src/components/message-box/message-box.scss new file mode 100644 index 0000000..73eca94 --- /dev/null +++ b/packages/devtool/src/components/message-box/message-box.scss @@ -0,0 +1,97 @@ +.animation-enter, +.animation-leave-to { + opacity: 0; +} + +.animation-enter-active, +.animation-leave-active { + transition: opacity 0.3s; +} + +@include b(devtool-dialog) { + position: fixed; + top: 0; + left: 0; + z-index: 9999999999; + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + + /* stylelint-disable-next-line selector-class-pattern */ + &.isShowMask { + background-color: rgba(var(#{getCssVarName(black)}),0.5); + } + @include e(wrapper) { + display: flex; + flex-direction: column; + width: 420px; + height: 162px; + background-color: getCssVar('color', 'bg', 1); + border-radius: 4px; + } + + @include e(icon) { + cursor: pointer; + + > svg { + width: 16px; + height: 16px; + } + } + + @include e(header) { + position: relative; + display: flex; + justify-content: space-between; + padding: 15px; + padding-bottom: 10px; + font-size: 18px; + line-height: 1; + } + + @include e(content) { + display: flex; + justify-content: flex-end; + height: 70px; + padding: 10px 15px; + font-size: 14px; + color: getCssVar(color, text, 0); + } + + @include e(footer) { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: 5px 15px 0; + } + + @include e(footer-button) { + box-sizing: border-box; + display: inline-flex; + align-items: center; + justify-content: center; + width: 58px; + height: 32px; + padding: 5px 11px; + margin-right: 10px; + font-size: 12px; + font-weight: 500; + line-height: 1; + color: getCssVar(color, primary, text); + text-align: center; + white-space: nowrap; + vertical-align: middle; + appearance: none; + cursor: pointer; + user-select: none; + background-color: getCssVar(color, primary); + border: 1px solid transparent; + border-color: getCssVar(color, border); + border-radius: 4px; + outline: 0; + transition: 0.1s; + } +} diff --git a/packages/devtool/src/components/message-box/message-box.tsx b/packages/devtool/src/components/message-box/message-box.tsx new file mode 100644 index 0000000..f81ddfa --- /dev/null +++ b/packages/devtool/src/components/message-box/message-box.tsx @@ -0,0 +1,105 @@ +import { defineComponent, Transition } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './message-box.scss'; + +export const MessageBox = defineComponent({ + name: 'MessageBox', + component: [Transition], + props: { + isShowDialog: { + type: Boolean, + default: false, + }, + title: { + type: String, + default: '', + }, + showCloseIcon: { + type: Boolean, + default: true, + }, + mask: { + type: Boolean, + default: true, + }, + isShowFoot: { + type: Boolean, + default: true, + }, + }, + emits: ['hasClosed', 'changeDialog'], + setup(props, { emit }) { + const ns = useNamespace('devtool-dialog'); + const closeDialog = (type: string = '') => { + emit('changeDialog', false); + emit('hasClosed', type); + }; + + const renderSvg = () => { + return ( + + + + ); + }; + + const clickMaskCloseFn = () => { + closeDialog(); + }; + + const clickButton = (type: string) => { + closeDialog(type); + }; + + return { ns, clickMaskCloseFn, closeDialog, renderSvg, clickButton }; + }, + render() { + return ( + + {this.isShowDialog && ( +
+
e.stopPropagation()} + > +
+ {this.title} + {this.showCloseIcon && ( +
this.closeDialog('')} + > + {this.renderSvg()} +
+ )} +
+
{this.$slots.default?.()}
+
+ + +
+
+
+ )} +
+ ); + }, +}); + +export default MessageBox; diff --git a/packages/devtool/src/components/object-viewer/object-viewer.scss b/packages/devtool/src/components/object-viewer/object-viewer.scss index 1ff2900..6521a41 100644 --- a/packages/devtool/src/components/object-viewer/object-viewer.scss +++ b/packages/devtool/src/components/object-viewer/object-viewer.scss @@ -1,13 +1,17 @@ @include b(object-viewer-item) { + font-size: 13px; + line-height: 1.7692; + color: getCssVar(color, text, 0); @include flex(row); - @include e(separator){ + @include e(separator) { margin-right: 10px; margin-left: 5px; } - .#{bem('object-viewer-item','key')},.#{bem('object-viewer-item','value')}{ + .#{bem('object-viewer-item','key')}, + .#{bem('object-viewer-item','value')} { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -17,5 +21,4 @@ color: getCssVar(color, primary); } } - -} \ No newline at end of file +} diff --git a/packages/devtool/src/components/object-viewer/object-viewer.tsx b/packages/devtool/src/components/object-viewer/object-viewer.tsx index eb28bab..7448cb4 100644 --- a/packages/devtool/src/components/object-viewer/object-viewer.tsx +++ b/packages/devtool/src/components/object-viewer/object-viewer.tsx @@ -1,9 +1,11 @@ import { defineComponent } from 'vue'; import { useNamespace } from '@ibiz-template/vue3-util'; +import { DevToolCollapse, DevToolCollapsePanel } from '../collapse/index'; import './object-viewer.scss'; export const ObjectViewer = defineComponent({ name: 'DevToolObjectViewer', + component: [DevToolCollapse, DevToolCollapsePanel], props: { obj: { type: Object, @@ -40,11 +42,11 @@ export const ObjectViewer = defineComponent({ const value = this.obj[key]; if (typeof value === 'object' && value !== null) { return ( - - + + - - + + ); } return ( diff --git a/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.scss b/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.scss new file mode 100644 index 0000000..d2c28b4 --- /dev/null +++ b/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.scss @@ -0,0 +1,20 @@ +@include b('devtool-select-option') { + width: 182px; + height: 34px; + padding: 0 32px 0 20px; + cursor: pointer; + + &:hover { + background: getCssVar(color, fill, 0); + } + @include e('content') { + height: inherit; + overflow: hidden; + font-size: 14px; + line-height: 34px; + color: getCssVar(color,text,0); + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; + } +} diff --git a/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.tsx b/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.tsx new file mode 100644 index 0000000..7206833 --- /dev/null +++ b/packages/devtool/src/components/select/devtool-select-option/devtool-select-option.tsx @@ -0,0 +1,45 @@ +import { defineComponent, PropType, inject } from 'vue'; +import { useNamespace } from '@ibiz-template/vue3-util'; +import './devtool-select-option.scss'; + +export const OptionComponent = defineComponent({ + props: { + label: { + type: String as PropType, + }, + value: { + type: String as PropType, + }, + }, + setup(props) { + const ns = useNamespace('devtool-select-option'); + + const select = inject('select') as IData; + + const clickItem = (event: MouseEvent) => { + event.stopPropagation(); + select.curValue.value = props.value; + select.curLabel.value = props.label; + select.showOption(); + }; + + return { + ns, + clickItem, + }; + }, + render() { + return ( +
+
this.clickItem(event)} + > + {this.label} +
+
+ ); + }, +}); + +export default OptionComponent; diff --git a/packages/devtool/src/components/select/devtool-select/devtool-select.scss b/packages/devtool/src/components/select/devtool-select/devtool-select.scss new file mode 100644 index 0000000..c07dfb7 --- /dev/null +++ b/packages/devtool/src/components/select/devtool-select/devtool-select.scss @@ -0,0 +1,52 @@ +@include b(devtool-select) { + position: relative; + display: inline-block; + color: getCssVar(color, text, 2); + + @include e(option) { + position: absolute; + top: 36px; + z-index: 2000; + padding: 6px 0; + background: getCssVar(color, bg, 3); + border-radius: 4px; + box-shadow: 0 0 12px getCssVar(color, border); + } + + @include e(title) { + display: flex; + justify-content: space-between; + padding: 3px 6px; + color: #666; + cursor: pointer; + border: 1px solid getCssVar(color, border); + border-radius: 4px; + + &:hover { + border-color: getCssVar(color,primary); + } + + span { + overflow: hidden; + text-overflow: ellipsis; + + /* 一行显示,超长省略号 */ + white-space: nowrap; + } + } + + @include e(placeholder) { + color: getCssVar(color, text, 2); + } + + @include e(icon) { + width: 14px; + height: 14px; + cursor: pointer; + transition: transform 0.3s; + + &.reverse { + transform: rotateZ(-180deg); + } + } +} diff --git a/packages/devtool/src/components/select/devtool-select/devtool-select.tsx b/packages/devtool/src/components/select/devtool-select/devtool-select.tsx new file mode 100644 index 0000000..5ccea4d --- /dev/null +++ b/packages/devtool/src/components/select/devtool-select/devtool-select.tsx @@ -0,0 +1,161 @@ +/* eslint-disable vue/no-dupe-keys */ +import { + defineComponent, + PropType, + ref, + provide, + watch, + onMounted, + onUnmounted, +} from 'vue'; +import { useNamespace, useClickOutside } from '@ibiz-template/vue3-util'; +import { OnClickOutsideResult } from '@ibiz-template/core'; +import './devtool-select.scss'; + +export const DevtoolSelect = defineComponent({ + name: 'DevtoolSelect', + props: { + placeholder: { + type: String as PropType, + default: '请选择', + }, + value: { + type: String as PropType, + }, + width: { + type: Number as PropType, + default: 182, + }, + options: { + type: Array as PropType, + }, + }, + emits: ['change'], + setup(props, { emit }) { + const ns = useNamespace('devtool-select'); + const isShow = ref(false); + const curLabel = ref(''); + const curValue = ref(''); + const options = ref([]); + + // 向插槽中的组件传入数据,传入当前组件的 this,在 option 组件中可以直接访问 + const provideData = { + isShow, + curLabel, + curValue, + options, + }; + + watch( + () => curValue.value, + () => { + emit('change', curValue.value); + }, + ); + + watch( + () => props.options, + () => { + if (props.options) { + options.value = props.options; + } + }, + { immediate: true, deep: true }, + ); + + const editorRef = ref(); + let funcs: OnClickOutsideResult; + const showOption = () => { + isShow.value = !isShow.value; + }; + + onMounted(() => { + if (editorRef.value) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + funcs = useClickOutside(editorRef, async (_evt: any) => { + if (isShow.value) { + showOption(); + } + }); + } + }); + + onUnmounted(() => { + if (funcs && funcs.stop) { + funcs.stop(); + } + }); + + provide('select', { + isShow, + curLabel, + curValue, + showOption, + }); + + watch( + () => props.value, + () => { + const curOption = options.value.filter(item => item === props.value); + if (curOption.length > 0) { + curLabel.value = curOption[0]; + curValue.value = curOption[0]; + } + }, + { immediate: true, deep: true }, + ); + + const renderSvg = () => { + return ( + + + + ); + }; + + return { + ns, + editorRef, + isShow, + curLabel, + curValue, + options, + showOption, + provideData, + renderSvg, + }; + }, + render() { + return ( +
+
+ {this.curLabel ? ( + {this.curLabel} + ) : ( + {this.placeholder} + )} + + {this.renderSvg()} + +
+
+ {this.$slots.default?.()} +
+
+ ); + }, +}); + +export default DevtoolSelect; diff --git a/packages/devtool/src/components/select/index.ts b/packages/devtool/src/components/select/index.ts new file mode 100644 index 0000000..049c556 --- /dev/null +++ b/packages/devtool/src/components/select/index.ts @@ -0,0 +1,4 @@ +import DevtoolSelect from './devtool-select/devtool-select'; +import DevtoolSelectOption from './devtool-select-option/devtool-select-option'; + +export { DevtoolSelect, DevtoolSelectOption }; diff --git a/packages/devtool/src/components/user-config-edit/user-config-edit.scss b/packages/devtool/src/components/user-config-edit/user-config-edit.scss index e4ef286..1cb3613 100644 --- a/packages/devtool/src/components/user-config-edit/user-config-edit.scss +++ b/packages/devtool/src/components/user-config-edit/user-config-edit.scss @@ -1,2 +1,34 @@ @include b(user-config-edit) { -} \ No newline at end of file + width: 100%; + height: 100%; + @include e(wrapper) { + display: flex; + flex-flow: row nowrap; + place-content: center center; + align-items: center; + } + @include e(wrapper-title) { + padding-right: 30px; + } + @include e(wrapper-input) { + width: 250px; + height: 30px; + padding: 0 3px; + color: getCssVar(color, text, 2); + background: transparent; + border: 1px solid getCssVar(color, border); + border-radius: 4px; + + &:hover { + border-color: getCssVar(color, primary); + } + + &.focus { + border: 1px solid getCssVar(color, primary); + } + + &:focus-visible { + outline: none; + } + } +} diff --git a/packages/devtool/src/components/user-config-edit/user-config-edit.tsx b/packages/devtool/src/components/user-config-edit/user-config-edit.tsx index a27d6f4..8a56adb 100644 --- a/packages/devtool/src/components/user-config-edit/user-config-edit.tsx +++ b/packages/devtool/src/components/user-config-edit/user-config-edit.tsx @@ -1,4 +1,4 @@ -import { PropType, defineComponent, reactive, watch } from 'vue'; +import { PropType, defineComponent, reactive, ref, watch } from 'vue'; import { useNamespace } from '@ibiz-template/vue3-util'; import './user-config-edit.scss'; import { IDevToolConfig } from '@ibiz-template/core'; @@ -29,17 +29,35 @@ export const UserConfigEdit = defineComponent({ }, ); - return { ns, formData }; + const changeValue = (event: Event) => { + const value = (event.target as HTMLInputElement).value; + formData.studioBaseUrl = value; + }; + const isFocus = ref(false); + + return { ns, formData, changeValue, isFocus }; }, render() { return (
- - - - - +
+ 平台地址 + this.changeValue(event)} + onBlur={() => { + this.isFocus = false; + }} + onFocus={() => { + this.isFocus = true; + }} + /> +
); }, }); + +export default UserConfigEdit; diff --git a/packages/devtool/src/components/view-list/view-list.scss b/packages/devtool/src/components/view-list/view-list.scss index e2b4332..11f9882 100644 --- a/packages/devtool/src/components/view-list/view-list.scss +++ b/packages/devtool/src/components/view-list/view-list.scss @@ -2,45 +2,43 @@ width: 100%; } - @include b(view-list-item) { margin: 8px; font-size: 12px; cursor: pointer; - border: 1px solid #ccc; + border: 1px solid getCssVar('color', border); border-radius: 6px; - @include e(caption){ + @include e(caption) { flex-grow: 1; width: 195px; @include utils-ellipsis; } - @include m(selected){ - border-color: #409eff; - box-shadow: 0 2px 12px 0 #409eff; + @include m(selected) { + border-color: getCssVar(color, primary); + box-shadow: 0 2px 12px 0 getCssVar(color, primary); - @include e(content){ + @include e(content) { display: block; } } - @include e(toolbar){ - .el-button+.el-button{ + @include e(toolbar) { + .ibiz-devtool-button + .ibiz-devtool-button { margin-left: 6px; } } - @include e(header){ + @include e(header) { @include flex(row, space-between, center); height: 26px; margin: 8px; } - @include e(content){ + @include e(content) { display: none; margin: 8px; } - -} \ No newline at end of file +} diff --git a/packages/devtool/src/components/view-list/view-list.tsx b/packages/devtool/src/components/view-list/view-list.tsx index e88020f..3709569 100644 --- a/packages/devtool/src/components/view-list/view-list.tsx +++ b/packages/devtool/src/components/view-list/view-list.tsx @@ -4,9 +4,11 @@ import './view-list.scss'; import { IViewController } from '@ibiz-template/runtime'; import { CenterController } from '../../controller/center.controller'; import { DetailInfo } from '../detail-info/detail-info'; +import DevtoolButton from '../devtool-button/devtool-button'; export const ViewList = defineComponent({ name: 'DevToolViewList', + component: [DevtoolButton], props: { center: { type: Object as PropType, @@ -72,28 +74,25 @@ export const ViewList = defineComponent({ {caption}
- { evt.stopPropagation(); this.center.copyCodeName(view); }} - title='拷贝代码名称' > - - + { evt.stopPropagation(); this.center.openStudioUrl(view); }} - title='打开配置平台' > - - + { evt.stopPropagation(); this.center.skimViewModel(view); @@ -101,9 +100,8 @@ export const ViewList = defineComponent({ title='查看视图模型' > - - + { evt.stopPropagation(); this.center.skimTempData(view); @@ -111,7 +109,7 @@ export const ViewList = defineComponent({ title='输出作用域下的临时数据到控制台' > - +
diff --git a/packages/devtool/src/controller/center.controller.ts b/packages/devtool/src/controller/center.controller.ts index d436886..4c5aeba 100644 --- a/packages/devtool/src/controller/center.controller.ts +++ b/packages/devtool/src/controller/center.controller.ts @@ -1,4 +1,3 @@ -import ElementPlus from 'element-plus'; import { createApp, reactive, toRaw } from 'vue'; import { IAppDEService, @@ -122,7 +121,6 @@ export class CenterController { const app = createApp(IndexPage, { center: this, }); - app.use(ElementPlus); app.mount(container); this.updateRootClass(); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a377c65..2362c02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -146,9 +146,6 @@ importers: dayjs: specifier: ^1.11.10 version: 1.11.10 - element-plus: - specifier: ^2.4.2 - version: 2.4.2(vue@3.3.8) interactjs: specifier: ^1.10.26 version: 1.10.26 @@ -1817,19 +1814,6 @@ packages: postcss-selector-parser: 6.0.13 dev: true - /@ctrl/tinycolor@3.5.0: - resolution: {integrity: sha512-tlJpwF40DEQcfR/QF+wNMVyGMaO9FQp6Z1Wahj4Gk3CJQYHwA2xVG7iKDFdW6zuxZY9XWOpGcfNCTsX4McOsOg==} - engines: {node: '>=10'} - dev: false - - /@element-plus/icons-vue@2.0.10(vue@3.3.8): - resolution: {integrity: sha512-ygEZ1mwPjcPo/OulhzLE7mtDrQBWI8vZzEWSNB2W/RNCRjoQGwbaK4N8lV4rid7Ts4qvySU3njMN7YCiSlSaTQ==} - peerDependencies: - vue: ^3.2.0 - dependencies: - vue: 3.3.8(typescript@5.3.3) - dev: false - /@esbuild/aix-ppc64@0.19.11: resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} engines: {node: '>=12'} @@ -2287,16 +2271,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@floating-ui/core@1.1.0: - resolution: {integrity: sha512-zbsLwtnHo84w1Kc8rScAo5GMk1GdecSlrflIbfnEBJwvTSj1SL6kkOYV+nHraMCPEy+RNZZUaZyL8JosDGCtGQ==} - dev: false - - /@floating-ui/dom@1.1.0: - resolution: {integrity: sha512-TSogMPVxbRe77QCj1dt8NmRiJasPvuc+eT5jnJ6YpLqgOD2zXc5UA3S1qwybN+GVCDNdKfpKy1oj8RpzLJvh6A==} - dependencies: - '@floating-ui/core': 1.1.0 - dev: false - /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -3641,10 +3615,6 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sxzz/popperjs-es@2.11.7: - resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} - dev: false - /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -3703,16 +3673,6 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/lodash-es@4.17.12: - resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - dependencies: - '@types/lodash': 4.14.191 - dev: false - - /@types/lodash@4.14.191: - resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} - dev: false - /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true @@ -3741,10 +3701,6 @@ packages: resolution: {integrity: sha512-PvgWCx1Lbgm88FdQ6S7OGvLIjWS66mudKPlfdrWil0TjsO5zmoZmzoKiiwRShs1dwPgrlkr0N4ewuy0/+QUXYQ==} dev: true - /@types/web-bluetooth@0.0.16: - resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} - dev: false - /@typescript-eslint/eslint-plugin@6.14.0(@typescript-eslint/parser@6.14.0)(eslint@8.55.0)(typescript@5.3.3): resolution: {integrity: sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4236,31 +4192,6 @@ packages: /@vue/shared@3.3.8: resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} - /@vueuse/core@9.9.0(vue@3.3.8): - resolution: {integrity: sha512-JdDb7TrE0imZnwBhMF4+0PCJqGD3AxzH8S2sfk54P0rqvklK+EAtAR/mPb1HwV/JPujQFQJhghQ190Yq03YpVw==} - dependencies: - '@types/web-bluetooth': 0.0.16 - '@vueuse/metadata': 9.9.0 - '@vueuse/shared': 9.9.0(vue@3.3.8) - vue-demi: 0.14.6(vue@3.3.8) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - - /@vueuse/metadata@9.9.0: - resolution: {integrity: sha512-pgxsUJv/d7IjKpLeB6TthggEsaBwM3ffc5jPrr5TmxAm/fup0mGR5VTzrdA/PSx85tpb+CIvP92D+55qBNc8ag==} - dev: false - - /@vueuse/shared@9.9.0(vue@3.3.8): - resolution: {integrity: sha512-+D0XFwHG0T+uaIbCSlROBwm1wzs71B7n3KyDOxnvfEMMHDOzl09rYKwaE2AENmYwYPXfHPbSBRDD2gBVHbvTcg==} - dependencies: - vue-demi: 0.14.6(vue@3.3.8) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: false - /@yarnpkg/lockfile@1.1.0: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} dev: true @@ -5974,31 +5905,6 @@ packages: resolution: {integrity: sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==} dev: true - /element-plus@2.4.2(vue@3.3.8): - resolution: {integrity: sha512-E/HwXX7JF1LPvQSjs0fZ8WblIoc0quoXsRXQZiL7QDq7xJdNGSUaXtdk7xiEv7axPmLfEFtxE5du9fFspDrmJw==} - peerDependencies: - vue: ^3.2.0 - dependencies: - '@ctrl/tinycolor': 3.5.0 - '@element-plus/icons-vue': 2.0.10(vue@3.3.8) - '@floating-ui/dom': 1.1.0 - '@popperjs/core': /@sxzz/popperjs-es@2.11.7 - '@types/lodash': 4.14.191 - '@types/lodash-es': 4.17.12 - '@vueuse/core': 9.9.0(vue@3.3.8) - async-validator: 4.2.5 - dayjs: 1.11.10 - escape-html: 1.0.3 - lodash: 4.17.21 - lodash-es: 4.17.21 - lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) - memoize-one: 6.0.0 - normalize-wheel-es: 1.2.0 - vue: 3.3.8(typescript@5.3.3) - transitivePeerDependencies: - - '@vue/composition-api' - dev: false - /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true @@ -6275,10 +6181,6 @@ packages: engines: {node: '>=6'} dev: true - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -7244,7 +7146,7 @@ packages: resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} engines: {node: '>= 4.0'} os: [darwin] - deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 + deprecated: Upgrade to fsevents v2 to mitigate potential security issues requiresBuild: true dependencies: bindings: 1.5.0 @@ -9016,18 +8918,6 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false - /lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): - resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} - peerDependencies: - '@types/lodash-es': '*' - lodash: '*' - lodash-es: '*' - dependencies: - '@types/lodash-es': 4.17.12 - lodash: 4.17.21 - lodash-es: 4.17.21 - dev: false - /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true @@ -9094,6 +8984,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -9292,10 +9183,6 @@ packages: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} dev: true - /memoize-one@6.0.0: - resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - dev: false - /meow@10.1.5: resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9820,10 +9707,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /normalize-wheel-es@1.2.0: - resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} - dev: false - /now-and-later@2.0.1: resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} engines: {node: '>= 0.10'} -- Gitee