From 0fecfc7b2470fe2dd60fa4d4cafdb1653726ff49 Mon Sep 17 00:00:00 2001 From: devin Date: Fri, 3 Mar 2023 20:22:35 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=9B=BE=E6=A0=87=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/_shared/export.ts | 6 +- .../src/components/_shared/icons.ts | 57 +++++---- .../src/components/_shared/init-icons.ts | 108 ++++++++++++++++++ .../components/breadcrumb/OBreadcrumbItem.vue | 2 +- packages/opendesign/src/components/index.ts | 30 ++++- .../components/input-number/OInputNumber.vue | 2 +- .../src/components/input/OInput.vue | 4 +- .../src/components/menu/OSubMenu.vue | 2 +- .../src/components/pagination/OPagination.vue | 2 +- .../opendesign/src/components/rate/ORate.vue | 2 +- .../src/components/select/OSelect.vue | 6 +- .../src/components/select/style/index.scss | 2 +- .../src/components/textarea/OTextarea.vue | 6 +- packages/portal/src/components/TheHeader.vue | 4 +- packages/portal/src/router.ts | 37 +++--- 15 files changed, 203 insertions(+), 67 deletions(-) create mode 100644 packages/opendesign/src/components/_shared/init-icons.ts diff --git a/packages/opendesign/src/components/_shared/export.ts b/packages/opendesign/src/components/_shared/export.ts index 03cc56910..28edaec14 100644 --- a/packages/opendesign/src/components/_shared/export.ts +++ b/packages/opendesign/src/components/_shared/export.ts @@ -1,7 +1,3 @@ export { initSize, initShape } from './global'; -export { - initLoadingIcon, - initLinkArrowIcon, - initLinkPrefixIcon -} from './icons'; \ No newline at end of file +export * from './init-icons'; \ No newline at end of file diff --git a/packages/opendesign/src/components/_shared/icons.ts b/packages/opendesign/src/components/_shared/icons.ts index cf6b6de14..317ef013a 100644 --- a/packages/opendesign/src/components/_shared/icons.ts +++ b/packages/opendesign/src/components/_shared/icons.ts @@ -10,60 +10,75 @@ import { IconAdd as _IconAdd, IconMinus as _IconMinus, IconDone as _IconDone, + IconChevronUp as _IconChevronUp, + IconChevronDown as _IconChevronDown, + IconChevronLeft as _IconChevronLeft, + IconChevronRight as _IconChevronRight, + IconEllipsis as _IconEllipsis, + IconStar as _IconStar } from '../icons'; /** * 全局loading图标 */ export const IconLoading = shallowRef(_IconLoading); -export function initLoadingIcon(icon: Component) { - IconLoading.value = icon; -} /** * link前缀图标 */ export const IconLinkPrefix = shallowRef(IconLink); -export function initLinkPrefixIcon(icon: Component) { - IconLinkPrefix.value = icon; -} /** * link箭头图标 */ export const IconLinkArrow = shallowRef(IconArrowRight); -export function initLinkArrowIcon(icon: Component) { - IconLinkArrow.value = icon; -} /** * close图标 */ export const IconClose = shallowRef(IconX); -export function initCloseIcon(icon: Component) { - IconClose.value = icon; -} /** * add图标 */ export const IconAdd = shallowRef(_IconAdd); -export function initAddIcon(icon: Component) { - IconAdd.value = icon; -} /** * minus图标 */ export const IconMinus = shallowRef(_IconMinus); -export function initMinusIcon(icon: Component) { - IconMinus.value = icon; -} + +/** + * up图标 + */ +export const IconChevronUp = shallowRef(_IconChevronUp); + +/** + * down图标 + */ +export const IconChevronDown = shallowRef(_IconChevronDown); + +/** + * left图标 + */ +export const IconChevronLeft = shallowRef(_IconChevronLeft); + +/** + * right图标 + */ +export const IconChevronRight = shallowRef(_IconChevronRight); /** * done图标 */ export const IconDone = shallowRef(_IconDone); -export function initDoneIcon(icon: Component) { - IconDone.value = icon; -} + +/** + * 更多...图标 + */ +export const IconEllipsis = shallowRef(_IconEllipsis); + +/** + * star图标 + */ +export const IconStar = shallowRef(_IconStar); diff --git a/packages/opendesign/src/components/_shared/init-icons.ts b/packages/opendesign/src/components/_shared/init-icons.ts new file mode 100644 index 000000000..bc9a6e4eb --- /dev/null +++ b/packages/opendesign/src/components/_shared/init-icons.ts @@ -0,0 +1,108 @@ +/** + * 定义全局图标,支持全局初始化自定义 + */ +import { Component } from 'vue'; +import { + IconLoading, + IconLinkPrefix, + IconLinkArrow, + IconClose, + IconAdd, + IconMinus, + IconDone, + IconChevronUp, + IconChevronDown, + IconChevronLeft, + IconChevronRight, + IconEllipsis, + IconStar +} from './icons'; + +/** + * 全局loading图标 + */ +export function initIconLoading(icon: Component) { + IconLoading.value = icon; +} + +/** + * link前缀图标 + */ +export function initIconLinkPrefix(icon: Component) { + IconLinkPrefix.value = icon; +} + +/** + * link箭头图标 + */ +export function initIconLinkArrow(icon: Component) { + IconLinkArrow.value = icon; +} + +/** + * close图标 + */ +export function initIconClose(icon: Component) { + IconClose.value = icon; +} + +/** + * add图标 + */ +export function initIconAdd(icon: Component) { + IconAdd.value = icon; +} + +/** + * minus图标 + */ +export function initIconMinus(icon: Component) { + IconMinus.value = icon; +} + +/** + * up图标 + */ +export function initIconChevronUp(icon: Component) { + IconChevronUp.value = icon; +} + +/** + * down图标 + */ +export function initIconChevronDown(icon: Component) { + IconChevronDown.value = icon; +} + +/** + * left图标 + */ +export function initIconChevronLeft(icon: Component) { + IconChevronLeft.value = icon; +} + +/** + * right图标 + */ +export function initIconChevronRight(icon: Component) { + IconChevronRight.value = icon; +} + +/** + * done图标 + */ +export function initIconDone(icon: Component) { + IconDone.value = icon; +} +/** + * 更多...图标 + */ +export function initIconEllipsis(icon: Component) { + IconEllipsis.value = icon; +} +/** + * star图标 + */ +export function initIconStar(icon: Component) { + IconStar.value = icon; +} diff --git a/packages/opendesign/src/components/breadcrumb/OBreadcrumbItem.vue b/packages/opendesign/src/components/breadcrumb/OBreadcrumbItem.vue index a22f2432e..957b0e971 100644 --- a/packages/opendesign/src/components/breadcrumb/OBreadcrumbItem.vue +++ b/packages/opendesign/src/components/breadcrumb/OBreadcrumbItem.vue @@ -3,7 +3,7 @@ import { inject } from 'vue'; import { breadcrumbItemProps } from './types'; import { breadcrumbInjectKey } from './provide'; -import { IconChevronRight } from '../icons'; +import { IconChevronRight } from '../_shared/icons'; defineProps(breadcrumbItemProps); diff --git a/packages/opendesign/src/components/index.ts b/packages/opendesign/src/components/index.ts index 3239aacdc..8ca317c60 100644 --- a/packages/opendesign/src/components/index.ts +++ b/packages/opendesign/src/components/index.ts @@ -1,15 +1,33 @@ export * from './_shared/export'; - export * from './hooks'; +export * from './directves'; export * from './button'; - export * from './switch'; - +export * from './link'; +export * from './popup'; +export * from './popover'; +export * from './input'; +export * from './input-number'; +export * from './textarea'; +export * from './select'; +export * from './tabs'; +export * from './table'; +export * from './pagination'; export * from './radio'; - export * from './radio-group'; - export * from './checkbox'; +export * from './checkbox-group'; +export * from './rate'; +export * from './tag'; +export * from './badge'; +export * from './divider'; +export * from './form'; +export * from './menu'; +export * from './breadcrumb'; +// export * from './dropdown'; +// export * from './scrollbar'; -export * from './checkbox-group'; \ No newline at end of file +export * from './intersection-observer'; +export * from './resize-observer'; +export * from './child-only'; \ No newline at end of file diff --git a/packages/opendesign/src/components/input-number/OInputNumber.vue b/packages/opendesign/src/components/input-number/OInputNumber.vue index 04fe8a061..6440ac3aa 100644 --- a/packages/opendesign/src/components/input-number/OInputNumber.vue +++ b/packages/opendesign/src/components/input-number/OInputNumber.vue @@ -1,7 +1,7 @@ diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts index 4f1533f3c..dd3f02df5 100644 --- a/packages/portal/src/router.ts +++ b/packages/portal/src/router.ts @@ -26,31 +26,12 @@ export const routes = [ label: '链接', component: () => import('@components/link/__demo__/IndexLink.vue'), }, - { path: '/switch', name: 'Switch', label: '开关', component: () => import('@components/switch/__demo__/IndexSwitch.vue'), }, - { - path: '/resize-observer', - name: 'ResizeObserver', - label: 'resize监听', - component: () => import('@components/resize-observer/__demo__/IndexResize.vue'), - }, - { - path: '/intersection-observer', - name: 'IntersectionObserver', - label: 'Intersection监听', - component: () => import('@components/intersection-observer/__demo__/IndexIntersection.vue'), - }, - { - path: '/child-only', - name: 'ChildOnly', - label: '只渲染一个子元素', - component: () => import('@components/child-only/__demo__/IndexChildOnly.vue'), - }, { path: '/popup', name: 'Popup', @@ -153,6 +134,24 @@ export const routes = [ label: '菜单', component: () => import('@components/menu/__demo__/IndexMenu.vue'), }, + { + path: '/resize-observer', + name: 'ResizeObserver', + label: 'resize监听', + component: () => import('@components/resize-observer/__demo__/IndexResize.vue'), + }, + { + path: '/intersection-observer', + name: 'IntersectionObserver', + label: 'Intersection监听', + component: () => import('@components/intersection-observer/__demo__/IndexIntersection.vue'), + }, + { + path: '/child-only', + name: 'ChildOnly', + label: '只渲染一个子元素', + component: () => import('@components/child-only/__demo__/IndexChildOnly.vue'), + }, ]; export const router = createRouter({ -- Gitee From 704c08ff7679b8bd762d824e2408da932fb2b4f4 Mon Sep 17 00:00:00 2001 From: devin Date: Fri, 3 Mar 2023 21:06:22 +0800 Subject: [PATCH 2/7] round --- .../src/components/_shared/global.ts | 8 ++--- .../src/components/_shared/style-class.ts | 31 +++++-------------- .../components/button/__demo__/BtnRound.vue | 2 +- .../src/components/button/style/index.scss | 9 ++---- .../src/components/button/style/var.scss | 3 ++ .../src/components/textarea/style/var.scss | 4 --- 6 files changed, 17 insertions(+), 40 deletions(-) diff --git a/packages/opendesign/src/components/_shared/global.ts b/packages/opendesign/src/components/_shared/global.ts index e09958d80..fe29689f7 100644 --- a/packages/opendesign/src/components/_shared/global.ts +++ b/packages/opendesign/src/components/_shared/global.ts @@ -9,12 +9,10 @@ export function initSize(val: SizeT) { // 圆角 export type RoundT = 'pill' | string; -export const defaultRound = ref<{ m: string, s: string, l: string } | null>(); +export const defaultRound = ref<'pill' | 'default'>('default'); -export function initRound(m: string, s: string, l: string) { - defaultRound.value = { - m, s, l - }; +export function initRound(type: 'pill' | 'default') { + defaultRound.value = type; } // 方向 diff --git a/packages/opendesign/src/components/_shared/style-class.ts b/packages/opendesign/src/components/_shared/style-class.ts index 14a0a193d..dd85fdad1 100644 --- a/packages/opendesign/src/components/_shared/style-class.ts +++ b/packages/opendesign/src/components/_shared/style-class.ts @@ -1,37 +1,22 @@ -import { computed, StyleValue } from 'vue'; +import { computed } from 'vue'; import { defaultRound } from '../_shared/global'; export function getRoundClass(props: any, name: string) { return { class: computed(() => { - - if (props.round) { - if (props.round === 'pill') { - return `o-${name}-round-pill`; - } else { - return `o-${name}-round-diy`; - } - } else { - if (defaultRound.value) { - return `o-${name}-round-diy`; - } + if (props.round === 'pill' || (!props.round && defaultRound.value === 'pill')) { + return `o-${name}-round-pill`; } return ''; }), style: computed(() => { - const rlt: StyleValue = {}; - - const round = props.round || defaultRound.value; - - if (round) { - if (round !== 'pill') { - return { - [`--${name}-radius`]: props.round - }; - } + if (props.round && props.round !== 'pill') { + return { + [`--${name}-radius`]: props.round + }; } - return rlt; + return {}; }) }; } \ No newline at end of file diff --git a/packages/opendesign/src/components/button/__demo__/BtnRound.vue b/packages/opendesign/src/components/button/__demo__/BtnRound.vue index 8305a2c9c..5b6fd47ce 100644 --- a/packages/opendesign/src/components/button/__demo__/BtnRound.vue +++ b/packages/opendesign/src/components/button/__demo__/BtnRound.vue @@ -40,7 +40,7 @@ const onClick = () => {
-

round="{{ r }}"

+

round="{{ r }}px"

Round Button diff --git a/packages/opendesign/src/components/button/style/index.scss b/packages/opendesign/src/components/button/style/index.scss index 4db5cd030..5a9c33677 100644 --- a/packages/opendesign/src/components/button/style/index.scss +++ b/packages/opendesign/src/components/button/style/index.scss @@ -7,6 +7,8 @@ transition: all var(--o-duration-s) var(--o-easing-standard); white-space: nowrap; + border-radius: var(--btn-radius); + display: inline-flex; align-items: center; justify-content: center; @@ -80,7 +82,6 @@ height: var(--o-size-s); font-size: var(--o-font_size-tip1); line-height: var(--o-line_height-tip1); - border-radius: var(--btn-radius); &.o-btn-icon-only { width: var(--o-size-s); @@ -95,7 +96,6 @@ height: var(--o-size-m); font-size: var(--o-font_size-text); line-height: var(--o-line_height-text); - border-radius: var(--btn-radius); &.o-btn-icon-only { width: var(--o-size-m); @@ -107,17 +107,12 @@ height: var(--o-size-l); font-size: var(--o-font_size-h4); line-height: var(--o-line_height-h4); - border-radius: var(--btn-radius); &.o-btn-icon-only { width: var(--o-size-l); } } -.o-btn-round-pill { - border-radius: var(--o-size-l); -} - .o-btn-icon-only { padding: 0; } diff --git a/packages/opendesign/src/components/button/style/var.scss b/packages/opendesign/src/components/button/style/var.scss index 7617203b8..cce860267 100644 --- a/packages/opendesign/src/components/button/style/var.scss +++ b/packages/opendesign/src/components/button/style/var.scss @@ -167,6 +167,9 @@ } } +.o-btn-round-pill { + --btn-radius: var(--o-size-l); +} .o-btn-small { --btn-radius: var(--o-radius-s); } diff --git a/packages/opendesign/src/components/textarea/style/var.scss b/packages/opendesign/src/components/textarea/style/var.scss index ebb1365a4..4b668de72 100644 --- a/packages/opendesign/src/components/textarea/style/var.scss +++ b/packages/opendesign/src/components/textarea/style/var.scss @@ -2,10 +2,6 @@ --textarea-color: var(--o-color-info2); --textarea-color-disabled: var(--o-color-info4); - --textarea-radius-pill-s: 16px; - --textarea-radius-pill-m: 16px; - --textarea-radius-pill-l: 16px; - --textarea-bg-color: transparent; --textarea-bg-color-hover: transparent; --textarea-bg-color-focus: var(--o-color-control-light); -- Gitee From 589b44074a69d99b8817323d80297a20e1ce8640 Mon Sep 17 00:00:00 2001 From: devin Date: Fri, 3 Mar 2023 21:08:34 +0800 Subject: [PATCH 3/7] tudo --- packages/opendesign/src/components/_shared/global.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/opendesign/src/components/_shared/global.ts b/packages/opendesign/src/components/_shared/global.ts index fe29689f7..d6f0fe373 100644 --- a/packages/opendesign/src/components/_shared/global.ts +++ b/packages/opendesign/src/components/_shared/global.ts @@ -14,6 +14,8 @@ export const defaultRound = ref<'pill' | 'default'>('default'); export function initRound(type: 'pill' | 'default') { defaultRound.value = type; } +// TODO 全局变量增加 o-radius-control-s o-radius-control-m o-radius-control-l + // 方向 export type DirectionT = 'horizontal' | 'vertical'; -- Gitee From da973706281f199d918930e855253fcdd54466a6 Mon Sep 17 00:00:00 2001 From: devin Date: Mon, 6 Mar 2023 11:39:03 +0800 Subject: [PATCH 4/7] add radius vars --- .vscode/opendesign.token.code-snippets | 24 +++++++++++++++++ packages/docs/global.md | 2 ++ .../src/components/style/dark.token.css | 21 +++++++++++++++ .../components/style/default-light.token.css | 21 +++++++++++++++ .../src/tokens/opendesign-token.json | 27 +++++++++++++++++++ 5 files changed, 95 insertions(+) diff --git a/.vscode/opendesign.token.code-snippets b/.vscode/opendesign.token.code-snippets index a9a68ebf0..c0ab64b13 100644 --- a/.vscode/opendesign.token.code-snippets +++ b/.vscode/opendesign.token.code-snippets @@ -1359,6 +1359,30 @@ "description": "小尺寸圆角[light: 2px, dark: 2px]", "scope": "css,scss,less" }, + "--o-radius-control-l": { + "prefix": [ + "var(--o-radius-control-l)" + ], + "body": "var(--o-radius-control-l)", + "description": "大尺寸控件圆角[light: var(--o-radius-l), dark: var(--o-radius-l)]", + "scope": "css,scss,less" + }, + "--o-radius-control-m": { + "prefix": [ + "var(--o-radius-control-m)" + ], + "body": "var(--o-radius-control-m)", + "description": "中尺寸控件圆角[light: var(--o-radius-m), dark: var(--o-radius-m)]", + "scope": "css,scss,less" + }, + "--o-radius-control-s": { + "prefix": [ + "var(--o-radius-control-s)" + ], + "body": "var(--o-radius-control-s)", + "description": "小尺寸控件圆角[light: var(--o-radius-s), dark: var(--o-radius-s)]", + "scope": "css,scss,less" + }, "--o-duration-s": { "prefix": [ "var(--o-duration-s)" diff --git a/packages/docs/global.md b/packages/docs/global.md index 1e5d93e73..e3dd5322c 100644 --- a/packages/docs/global.md +++ b/packages/docs/global.md @@ -26,6 +26,8 @@ # 变量定义都在 var.scss 里,同时使用最外层内定义; +# 状态类 如果在最外层使用 o-[component]-[status],在内部可以使用 is-[status] + # 不同状态通过类改变变量值,而不是新定义多个变量; # 变量命名 diff --git a/packages/opendesign/src/components/style/dark.token.css b/packages/opendesign/src/components/style/dark.token.css index 978c7c178..4cf335c64 100644 --- a/packages/opendesign/src/components/style/dark.token.css +++ b/packages/opendesign/src/components/style/dark.token.css @@ -1190,6 +1190,27 @@ * @description 小尺寸圆角 */ --o-radius-s: 2px; + /** + * @name 大尺寸控件圆角 + * @type size + * @group radius + * @description 大尺寸控件圆角 + */ + --o-radius-control-l: var(--o-radius-l); + /** + * @name 中尺寸控件圆角 + * @type size + * @group radius + * @description 中尺寸控件圆角 + */ + --o-radius-control-m: var(--o-radius-m); + /** + * @name 小尺寸控件圆角 + * @type size + * @group radius + * @description 小尺寸控件圆角 + */ + --o-radius-control-s: var(--o-radius-s); /** * @name 持续时间 * @type animation diff --git a/packages/opendesign/src/components/style/default-light.token.css b/packages/opendesign/src/components/style/default-light.token.css index 1df9a2b33..2fc16391e 100644 --- a/packages/opendesign/src/components/style/default-light.token.css +++ b/packages/opendesign/src/components/style/default-light.token.css @@ -1191,6 +1191,27 @@ * @description 小尺寸圆角 */ --o-radius-s: 2px; + /** + * @name 大尺寸控件圆角 + * @type size + * @group radius + * @description 大尺寸控件圆角 + */ + --o-radius-control-l: var(--o-radius-l); + /** + * @name 中尺寸控件圆角 + * @type size + * @group radius + * @description 中尺寸控件圆角 + */ + --o-radius-control-m: var(--o-radius-m); + /** + * @name 小尺寸控件圆角 + * @type size + * @group radius + * @description 小尺寸控件圆角 + */ + --o-radius-control-s: var(--o-radius-s); /** * @name 持续时间 * @type animation diff --git a/packages/opendesign/src/tokens/opendesign-token.json b/packages/opendesign/src/tokens/opendesign-token.json index efa7b3b8d..d9908f257 100644 --- a/packages/opendesign/src/tokens/opendesign-token.json +++ b/packages/opendesign/src/tokens/opendesign-token.json @@ -1488,6 +1488,33 @@ "light": "2px", "dark": "2px" } + }, + { + "key": "radius-control-l", + "name": "大尺寸控件圆角", + "description": "大尺寸控件圆角", + "value": { + "light": "var(--o-radius-l)", + "dark": "var(--o-radius-l)" + } + }, + { + "key": "radius-control-m", + "name": "中尺寸控件圆角", + "description": "中尺寸控件圆角", + "value": { + "light": "var(--o-radius-m)", + "dark": "var(--o-radius-m)" + } + }, + { + "key": "radius-control-s", + "name": "小尺寸控件圆角", + "description": "小尺寸控件圆角", + "value": { + "light": "var(--o-radius-s)", + "dark": "var(--o-radius-s)" + } } ] }, -- Gitee From 25b8a0d6e8209746c96685982b6fd6daa5880be2 Mon Sep 17 00:00:00 2001 From: Bang <15622356989@163.com> Date: Sun, 5 Mar 2023 11:27:16 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Edropdown=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E8=8F=9C=E5=8D=95=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/dropdown/ODropdown.vue | 68 +++++++++--- .../src/components/dropdown/ODropdownItem.vue | 24 +++++ .../dropdown/__demo__/DropdownBasic.vue | 25 +++++ .../dropdown/__demo__/IndexDropdown.vue | 11 ++ .../src/components/dropdown/index.ts | 18 ++++ .../src/components/dropdown/provide.ts | 5 + .../src/components/dropdown/style/index.scss | 32 ++++++ .../src/components/dropdown/style/index.ts | 3 + .../src/components/dropdown/style/var.scss | 25 +++++ .../src/components/dropdown/types.ts | 100 ++++++++++++++++++ packages/portal/src/router.ts | 8 +- 11 files changed, 305 insertions(+), 14 deletions(-) create mode 100644 packages/opendesign/src/components/dropdown/ODropdownItem.vue create mode 100644 packages/opendesign/src/components/dropdown/__demo__/DropdownBasic.vue create mode 100644 packages/opendesign/src/components/dropdown/__demo__/IndexDropdown.vue create mode 100644 packages/opendesign/src/components/dropdown/index.ts create mode 100644 packages/opendesign/src/components/dropdown/provide.ts create mode 100644 packages/opendesign/src/components/dropdown/style/index.scss create mode 100644 packages/opendesign/src/components/dropdown/style/index.ts create mode 100644 packages/opendesign/src/components/dropdown/style/var.scss create mode 100644 packages/opendesign/src/components/dropdown/types.ts diff --git a/packages/opendesign/src/components/dropdown/ODropdown.vue b/packages/opendesign/src/components/dropdown/ODropdown.vue index ee5c145d1..cf48944f6 100644 --- a/packages/opendesign/src/components/dropdown/ODropdown.vue +++ b/packages/opendesign/src/components/dropdown/ODropdown.vue @@ -1,17 +1,59 @@ - + diff --git a/packages/opendesign/src/components/dropdown/ODropdownItem.vue b/packages/opendesign/src/components/dropdown/ODropdownItem.vue new file mode 100644 index 000000000..54c0ca1cc --- /dev/null +++ b/packages/opendesign/src/components/dropdown/ODropdownItem.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/packages/opendesign/src/components/dropdown/__demo__/DropdownBasic.vue b/packages/opendesign/src/components/dropdown/__demo__/DropdownBasic.vue new file mode 100644 index 000000000..3227b4dc8 --- /dev/null +++ b/packages/opendesign/src/components/dropdown/__demo__/DropdownBasic.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/opendesign/src/components/dropdown/__demo__/IndexDropdown.vue b/packages/opendesign/src/components/dropdown/__demo__/IndexDropdown.vue new file mode 100644 index 000000000..0408b4ca4 --- /dev/null +++ b/packages/opendesign/src/components/dropdown/__demo__/IndexDropdown.vue @@ -0,0 +1,11 @@ + + + diff --git a/packages/opendesign/src/components/dropdown/index.ts b/packages/opendesign/src/components/dropdown/index.ts new file mode 100644 index 000000000..b6ff5169a --- /dev/null +++ b/packages/opendesign/src/components/dropdown/index.ts @@ -0,0 +1,18 @@ +import type { App } from 'vue'; + +import _ODropdown from './ODropdown.vue'; +import _ODropdownItem from './ODropdownItem.vue'; + +const ODropdown = Object.assign(_ODropdown, { + install(app: App) { + app.component(_ODropdown.name, _ODropdown); + }, +}); + +const ODropdownItem = Object.assign(_ODropdownItem, { + install(app: App) { + app.component(_ODropdownItem.name, _ODropdownItem); + }, +}); + +export { ODropdown, ODropdownItem }; diff --git a/packages/opendesign/src/components/dropdown/provide.ts b/packages/opendesign/src/components/dropdown/provide.ts new file mode 100644 index 000000000..77ee794c3 --- /dev/null +++ b/packages/opendesign/src/components/dropdown/provide.ts @@ -0,0 +1,5 @@ +import { InjectionKey } from 'vue'; + +export const dropdownInjectKey: InjectionKey<{ + updateVisible: (val: boolean) => void; +}> = Symbol('provide-dropdown'); diff --git a/packages/opendesign/src/components/dropdown/style/index.scss b/packages/opendesign/src/components/dropdown/style/index.scss new file mode 100644 index 000000000..efd9d3489 --- /dev/null +++ b/packages/opendesign/src/components/dropdown/style/index.scss @@ -0,0 +1,32 @@ +@use './var.scss'; + +.o-dropdown-list { + list-style: none; + margin: 0; + padding: 0; + background-color: var(--dropdown-list-bg); + box-shadow: var(--dropdown-list-shadow); + border-radius: var(--dropdown-list-radius); + border: var(--dropdown-list-bd); +} + +.o-dropdown-item { + display: flex; + align-items: center; + padding: var(--dropdown-item-padding); + background-color: var(--dropdown-item-bg-color); + font-size: var(--dropdown-item-text-size); + line-height: var(--dropdown-item-text-height); + cursor: pointer; + + &:not(.o-dropdown-item-disabled) { + &:hover { + background-color: var(--dropdown-item-bg-color-hover); + color: var(--dropdown-item-color-hover); + } + &.active { + color: var(--dropdown-item-color-active); + background-color: var(--dropdown-item-bg-color-active); + } + } +} diff --git a/packages/opendesign/src/components/dropdown/style/index.ts b/packages/opendesign/src/components/dropdown/style/index.ts new file mode 100644 index 000000000..97806f75a --- /dev/null +++ b/packages/opendesign/src/components/dropdown/style/index.ts @@ -0,0 +1,3 @@ +import '../../style'; +import '../../popup/style'; +import './index.scss'; diff --git a/packages/opendesign/src/components/dropdown/style/var.scss b/packages/opendesign/src/components/dropdown/style/var.scss new file mode 100644 index 000000000..702a01358 --- /dev/null +++ b/packages/opendesign/src/components/dropdown/style/var.scss @@ -0,0 +1,25 @@ +.o-dropdown-list { + --dropdown-list-bg: var(--o-color-control-light); + --dropdown-list-shadow: none; + --dropdown-list-bd: 1px solid var(--o-color-primary2); + --dropdown-list-radius: var(--o-radius-s); +} + +.o-dropdown-item { + --dropdown-item-color: var(--o-color-info2); + --dropdown-item-color-hover: var(--o-color-info1-inverse); + --dropdown-item-color-active: var(--o-color-info1-inverse); + --dropdown-item-color-disabled: var(--o-color-info4); + + --dropdown-item-bg-color: transparent; + --dropdown-item-bg-color-hover: var(--o-color-primary3-light); + --dropdown-item-bg-color-active: var(--o-color-primary2-light); + --dropdown-item-bg-color-disabled: var(--o-color-control4-light); + + --dropdown-item-text-size: var(--o-font_size-text); + --dropdown-item-text-height: var(--o-line_height-text); + + --dropdown-item-padding: 5px 12px; + --dropdown-item-text-size: var(--o-font_size-text); + --dropdown-item-text-height: var(--o-line_height-text); +} diff --git a/packages/opendesign/src/components/dropdown/types.ts b/packages/opendesign/src/components/dropdown/types.ts new file mode 100644 index 000000000..6db69939c --- /dev/null +++ b/packages/opendesign/src/components/dropdown/types.ts @@ -0,0 +1,100 @@ +import { PopupPositionT, PopupTriggerT } from '../popup'; +import { ExtractPropTypes, PropType } from 'vue'; +import type { SizeT, RoundT } from '../_shared/global'; + +export const dropdownProps = { + /** + * 弹出框是否可见 + */ + visible: { + type: Boolean, + }, + /** + * 非受控模式,弹出框是否默认可见 + */ + defaultVisible: { + type: Boolean, + default: false, + }, + /** + * 大小 + */ + size: { + type: String as PropType, + }, + /** + * 圆角值 + */ + round: { + type: String as PropType, + }, + /** + * 下拉选项触发方式 + */ + trigger: { + type: String as PropType, + default: 'click', + }, + /** + * 下拉选项位置 + */ + optionPosition: { + type: String as PropType, + default: 'bl', + }, + /** + * 下拉选项宽度自适应规则 + * 'auto':自动 | 'min-width':最小宽度与选择框一致 | 'width': 宽度与选择框一致 + */ + optionWidthMode: { + type: String as PropType<'auto' | 'min-width' | 'width'>, + default: 'min-width', + }, + /** + * 下拉容器自定义类 + */ + optionWrapClass: { + type: String, + }, + /** + * 是否在结束选择时,卸载下拉选项 + * v-model + */ + unmountOnHide: { + type: Boolean, + default: true, + }, + /** + * 过渡名称 + */ + transition: { + type: String, + }, +}; + +export type DropdownPropsT = ExtractPropTypes; + +export const dropdownItemProps = { + /** + * 显示文本 + */ + label: { + type: String, + default: '', + }, + /** + * 选项值 + */ + value: { + type: [String, Number] as PropType, + default: '', + }, + /** + * 是否禁用 + */ + disabled: { + type: Boolean, + }, +}; + +export type DropdownItemPropsT = ExtractPropTypes; diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts index dd3f02df5..344277680 100644 --- a/packages/portal/src/router.ts +++ b/packages/portal/src/router.ts @@ -134,6 +134,12 @@ export const routes = [ label: '菜单', component: () => import('@components/menu/__demo__/IndexMenu.vue'), }, + { + path: '/dropdown', + name: 'ODropdown', + label: '下拉菜单', + component: () => import('@components/dropdown/__demo__/IndexDropdown.vue'), + }, { path: '/resize-observer', name: 'ResizeObserver', @@ -150,7 +156,7 @@ export const routes = [ path: '/child-only', name: 'ChildOnly', label: '只渲染一个子元素', - component: () => import('@components/child-only/__demo__/IndexChildOnly.vue'), + component: () => import('@components/child-only/__demo__/IndexChildOnly.vue') }, ]; -- Gitee From 2ca942db32ce684fc75c0c8fbe3ee11fc1a8bf48 Mon Sep 17 00:00:00 2001 From: devin Date: Fri, 3 Mar 2023 20:22:35 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=9B=BE=E6=A0=87=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/portal/src/router.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/portal/src/router.ts b/packages/portal/src/router.ts index 344277680..abcb9502d 100644 --- a/packages/portal/src/router.ts +++ b/packages/portal/src/router.ts @@ -138,7 +138,25 @@ export const routes = [ path: '/dropdown', name: 'ODropdown', label: '下拉菜单', - component: () => import('@components/dropdown/__demo__/IndexDropdown.vue'), + component: () => import('@components/dropdown/__demo__/IndexDropdown.vue') + }, + { + path: '/resize-observer', + name: 'ResizeObserver', + label: 'resize监听', + component: () => import('@components/resize-observer/__demo__/IndexResize.vue'), + }, + { + path: '/intersection-observer', + name: 'IntersectionObserver', + label: 'Intersection监听', + component: () => import('@components/intersection-observer/__demo__/IndexIntersection.vue'), + }, + { + path: '/child-only', + name: 'ChildOnly', + label: '只渲染一个子元素', + component: () => import('@components/child-only/__demo__/IndexChildOnly.vue'), }, { path: '/resize-observer', -- Gitee From 786143594bba7ccecee7ee8ef9046e312bca6665 Mon Sep 17 00:00:00 2001 From: devin Date: Mon, 6 Mar 2023 11:52:34 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=8E=A7=E4=BB=B6=E5=9C=86=E8=A7=92?= =?UTF-8?q?=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/opendesign/src/components/badge/style/var.scss | 2 +- packages/opendesign/src/components/button/style/var.scss | 6 +++--- .../opendesign/src/components/dropdown/style/var.scss | 2 +- packages/opendesign/src/components/input/style/var.scss | 6 +++--- .../opendesign/src/components/pagination/style/var.scss | 2 +- packages/opendesign/src/components/popover/style/var.scss | 2 +- .../src/components/popup/__demo__/IndexPopup.vue | 2 +- packages/opendesign/src/components/select/style/var.scss | 8 ++++---- packages/opendesign/src/components/style/dark.token.css | 6 +++--- .../src/components/style/default-light.token.css | 6 +++--- packages/opendesign/src/components/tag/style/var.scss | 6 +++--- .../opendesign/src/components/textarea/style/var.scss | 6 +++--- 12 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/opendesign/src/components/badge/style/var.scss b/packages/opendesign/src/components/badge/style/var.scss index 36566620e..664ae2eed 100644 --- a/packages/opendesign/src/components/badge/style/var.scss +++ b/packages/opendesign/src/components/badge/style/var.scss @@ -2,7 +2,7 @@ --badge-text-size: var(--o-font_size-tip1); --badge-text-height: var(--o-line_height-tip1); - --badge-border: var(--o-radius-l); + --badge-border: var(--o-radius-control-l); --badge-color: var(--o-color-info1); diff --git a/packages/opendesign/src/components/button/style/var.scss b/packages/opendesign/src/components/button/style/var.scss index cce860267..2b74b0bab 100644 --- a/packages/opendesign/src/components/button/style/var.scss +++ b/packages/opendesign/src/components/button/style/var.scss @@ -171,11 +171,11 @@ --btn-radius: var(--o-size-l); } .o-btn-small { - --btn-radius: var(--o-radius-s); + --btn-radius: var(--o-radius-control-s); } .o-btn-medium { - --btn-radius: var(--o-radius-m); + --btn-radius: var(--o-radius-control-m); } .o-btn-large { - --btn-radius: var(--o-radius-l); + --btn-radius: var(--o-radius-control-l); } diff --git a/packages/opendesign/src/components/dropdown/style/var.scss b/packages/opendesign/src/components/dropdown/style/var.scss index 702a01358..fb57ac284 100644 --- a/packages/opendesign/src/components/dropdown/style/var.scss +++ b/packages/opendesign/src/components/dropdown/style/var.scss @@ -2,7 +2,7 @@ --dropdown-list-bg: var(--o-color-control-light); --dropdown-list-shadow: none; --dropdown-list-bd: 1px solid var(--o-color-primary2); - --dropdown-list-radius: var(--o-radius-s); + --dropdown-list-radius: var(--o-radius-control-s); } .o-dropdown-item { diff --git a/packages/opendesign/src/components/input/style/var.scss b/packages/opendesign/src/components/input/style/var.scss index 798ccc51a..df5605d63 100644 --- a/packages/opendesign/src/components/input/style/var.scss +++ b/packages/opendesign/src/components/input/style/var.scss @@ -102,7 +102,7 @@ --input-padding: 0 8px; --input-append-padding: 0 4px; --input-prepend-padding: 0 4px; - --input-radius: var(--o-radius-s); + --input-radius: var(--o-radius-control-s); &.o-input-round-pill { --input-append-padding: 0 6px 0 4px; @@ -118,7 +118,7 @@ --input-padding: 0 12px; --input-append-padding: 0 8px; --input-prepend-padding: 0 8px; - --input-radius: var(--o-radius-m); + --input-radius: var(--o-radius-control-m); &.o-input-round-pill { --input-append-padding: 0 12px 0 8px; @@ -134,7 +134,7 @@ --input-padding: 0 16px; --input-append-padding: 0 12px; --input-prepend-padding: 0 12px; - --input-radius: var(--o-radius-l); + --input-radius: var(--o-radius-control-l); &.o-input-round-pill { --input-append-padding: 0 16px 0 12px; diff --git a/packages/opendesign/src/components/pagination/style/var.scss b/packages/opendesign/src/components/pagination/style/var.scss index 21e66eb43..d8806d06e 100644 --- a/packages/opendesign/src/components/pagination/style/var.scss +++ b/packages/opendesign/src/components/pagination/style/var.scss @@ -11,7 +11,7 @@ --pagination-item-bd-color-active: var(--o-color-control3-light); --pagination-item-bd-color-current: var(--o-color-primary1-light); --pagination-item-bd-color-disabled: var(--o-color-control4-light); - --pagination-radius: var(--o-radius-m); + --pagination-radius: var(--o-radius-control-m); } .o-pagination-solid { diff --git a/packages/opendesign/src/components/popover/style/var.scss b/packages/opendesign/src/components/popover/style/var.scss index fe214c260..70b085d81 100644 --- a/packages/opendesign/src/components/popover/style/var.scss +++ b/packages/opendesign/src/components/popover/style/var.scss @@ -1,6 +1,6 @@ .o-popover { --popover-bg-color: var(--o-color-fill2); --popover-shadow: var(--o-shadow-1); - --popover-radius: var(--o-radius-l); + --popover-radius: var(--o-radius-control-l); --popover-bd: none; } diff --git a/packages/opendesign/src/components/popup/__demo__/IndexPopup.vue b/packages/opendesign/src/components/popup/__demo__/IndexPopup.vue index 3d634ebf6..cb6658b5c 100644 --- a/packages/opendesign/src/components/popup/__demo__/IndexPopup.vue +++ b/packages/opendesign/src/components/popup/__demo__/IndexPopup.vue @@ -19,7 +19,7 @@ import PopupTarget from './PopupTarget.vue'; background-color: var(--o-color-fill2); box-shadow: var(--o-shadow-1); padding: 4px 8px; - border-radius: var(--o-radius-m); + border-radius: var(--o-radius-control-m); border: 1px solid red; } diff --git a/packages/opendesign/src/components/select/style/var.scss b/packages/opendesign/src/components/select/style/var.scss index 7b80cec80..3099018b9 100644 --- a/packages/opendesign/src/components/select/style/var.scss +++ b/packages/opendesign/src/components/select/style/var.scss @@ -18,7 +18,7 @@ --select-options-bg: var(--o-color-control-light); --select-options-shadow: none; --select-options-bd: 1px solid var(--o-color-primary2); - --select-options-radius: var(--o-radius-s); + --select-options-radius: var(--o-radius-control-s); } .o-select-normal { @@ -90,21 +90,21 @@ --select-text-size: var(--o-font_size-tip1); --select-text-height: var(--o-line_height-tip1); --select-padding: 0 6px 0 8px; - --select-radius: var(--o-radius-s); + --select-radius: var(--o-radius-control-s); } .o-select-size-medium { --select-height: var(--o-size-m); --select-text-size: var(--o-font_size-text); --select-text-height: var(--o-line_height-text); --select-padding: 4px 8px 4px 12px; - --select-radius: var(--o-radius-m); + --select-radius: var(--o-radius-control-m); } .o-select-size-large { --select-height: var(--o-size-l); --select-text-size: var(--o-font_size-h4); --select-text-height: var(--o-line_height-h4); --select-padding: 4px 12px 4px 16px; - --select-radius: var(--o-radius-l); + --select-radius: var(--o-radius-control-l); } .o-select-round-pill { --select-radius: var(--o-size-l); diff --git a/packages/opendesign/src/components/style/dark.token.css b/packages/opendesign/src/components/style/dark.token.css index 4cf335c64..816bc980d 100644 --- a/packages/opendesign/src/components/style/dark.token.css +++ b/packages/opendesign/src/components/style/dark.token.css @@ -1196,21 +1196,21 @@ * @group radius * @description 大尺寸控件圆角 */ - --o-radius-control-l: var(--o-radius-l); + --o-radius-control-l: var(--o-radius-control-l); /** * @name 中尺寸控件圆角 * @type size * @group radius * @description 中尺寸控件圆角 */ - --o-radius-control-m: var(--o-radius-m); + --o-radius-control-m: var(--o-radius-control-m); /** * @name 小尺寸控件圆角 * @type size * @group radius * @description 小尺寸控件圆角 */ - --o-radius-control-s: var(--o-radius-s); + --o-radius-control-s: var(--o-radius-control-s); /** * @name 持续时间 * @type animation diff --git a/packages/opendesign/src/components/style/default-light.token.css b/packages/opendesign/src/components/style/default-light.token.css index 2fc16391e..6ce10582f 100644 --- a/packages/opendesign/src/components/style/default-light.token.css +++ b/packages/opendesign/src/components/style/default-light.token.css @@ -1197,21 +1197,21 @@ * @group radius * @description 大尺寸控件圆角 */ - --o-radius-control-l: var(--o-radius-l); + --o-radius-control-l: var(--o-radius-control-l); /** * @name 中尺寸控件圆角 * @type size * @group radius * @description 中尺寸控件圆角 */ - --o-radius-control-m: var(--o-radius-m); + --o-radius-control-m: var(--o-radius-control-m); /** * @name 小尺寸控件圆角 * @type size * @group radius * @description 小尺寸控件圆角 */ - --o-radius-control-s: var(--o-radius-s); + --o-radius-control-s: var(--o-radius-control-s); /** * @name 持续时间 * @type animation diff --git a/packages/opendesign/src/components/tag/style/var.scss b/packages/opendesign/src/components/tag/style/var.scss index ff444ada4..5601dc939 100644 --- a/packages/opendesign/src/components/tag/style/var.scss +++ b/packages/opendesign/src/components/tag/style/var.scss @@ -21,7 +21,7 @@ --tag-height-m: var(--o-size-m); --tag-height-l: var(--o-size-l); - --tag-radius-s: var(--o-radius-s); - --tag-radius-m: var(--o-radius-s); - --tag-radius-l: var(--o-radius-s); + --tag-radius-s: var(--o-radius-control-s); + --tag-radius-m: var(--o-radius-control-s); + --tag-radius-l: var(--o-radius-control-s); } diff --git a/packages/opendesign/src/components/textarea/style/var.scss b/packages/opendesign/src/components/textarea/style/var.scss index 4b668de72..aff01d8d8 100644 --- a/packages/opendesign/src/components/textarea/style/var.scss +++ b/packages/opendesign/src/components/textarea/style/var.scss @@ -82,7 +82,7 @@ --textarea-text-height: var(--o-line_height-tip1); --textarea-padding-v: 2px; --textarea-padding-h: 8px; - --textarea-radius: var(--o-radius-s); + --textarea-radius: var(--o-radius-control-s); --textarea-radius-pill: 12px; } .o-textarea-size-medium { @@ -90,7 +90,7 @@ --textarea-text-height: var(--o-line_height-text); --textarea-padding-v: 4px; --textarea-padding-h: 12px; - --textarea-radius: var(--o-radius-m); + --textarea-radius: var(--o-radius-control-m); --textarea-radius-pill: 16px; } .o-textarea-size-large { @@ -98,6 +98,6 @@ --textarea-text-height: var(--o-line_height-h4); --textarea-padding-v: 6px; --textarea-padding-h: 12px; - --textarea-radius: var(--o-radius-l); + --textarea-radius: var(--o-radius-control-l); --textarea-radius-pill: 20px; } -- Gitee