diff --git a/packages/@core/base/icons/src/lucide.ts b/packages/@core/base/icons/src/lucide.ts index 2cb21b12..fe0e08fd 100644 --- a/packages/@core/base/icons/src/lucide.ts +++ b/packages/@core/base/icons/src/lucide.ts @@ -14,6 +14,8 @@ export { ChevronRight, ChevronsLeft, ChevronsRight, + Circle, + CircleCheckBig, CircleHelp, Copy, CornerDownLeft, diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue b/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue new file mode 100644 index 00000000..035e88c4 --- /dev/null +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/button-group.vue @@ -0,0 +1,98 @@ + + + + diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts b/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts index 7f519cfc..f91e9d05 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/button.ts @@ -22,3 +22,21 @@ export interface VbenButtonProps { size?: ButtonVariantSize; variant?: ButtonVariants; } + +export type CustomRenderType = (() => Component | string) | string; + +export type ValueType = boolean | number | string; + +export interface VbenButtonGroupProps + extends Pick { + beforeChange?: ( + value: ValueType, + isChecked: boolean, + ) => boolean | PromiseLike | undefined; + btnClass?: any; + gap?: number; + multiple?: boolean; + options?: { label: CustomRenderType; value: ValueType }[]; + showIcon?: boolean; + size?: 'large' | 'middle' | 'small'; +} diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue b/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue new file mode 100644 index 00000000..a7477f07 --- /dev/null +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/check-button-group.vue @@ -0,0 +1,163 @@ + + + diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts b/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts index 4afd1c25..aa3d9ef8 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts +++ b/packages/@core/ui-kit/shadcn-ui/src/components/button/index.ts @@ -1,3 +1,5 @@ export type * from './button'; +export { default as VbenButtonGroup } from './button-group.vue'; export { default as VbenButton } from './button.vue'; +export { default as VbenCheckButtonGroup } from './check-button-group.vue'; export { default as VbenIconButton } from './icon-button.vue'; diff --git a/packages/effects/common-ui/src/components/index.ts b/packages/effects/common-ui/src/components/index.ts index 9c883077..d1f0f937 100644 --- a/packages/effects/common-ui/src/components/index.ts +++ b/packages/effects/common-ui/src/components/index.ts @@ -15,6 +15,8 @@ export * from '@vben-core/popup-ui'; // 给文档用 export { VbenButton, + VbenButtonGroup, + VbenCheckButtonGroup, VbenCountToAnimator, VbenInputPassword, VbenLoading, diff --git a/playground/src/locales/langs/en-US/examples.json b/playground/src/locales/langs/en-US/examples.json index 91666158..1a25a983 100644 --- a/playground/src/locales/langs/en-US/examples.json +++ b/playground/src/locales/langs/en-US/examples.json @@ -63,5 +63,8 @@ }, "layout": { "col-page": "ColPage Layout" + }, + "button-group": { + "title": "Button Group" } } diff --git a/playground/src/locales/langs/zh-CN/examples.json b/playground/src/locales/langs/zh-CN/examples.json index 0c5fc19a..8f15d020 100644 --- a/playground/src/locales/langs/zh-CN/examples.json +++ b/playground/src/locales/langs/zh-CN/examples.json @@ -63,5 +63,8 @@ }, "layout": { "col-page": "双列布局" + }, + "button-group": { + "title": "按钮组" } } diff --git a/playground/src/router/routes/modules/examples.ts b/playground/src/router/routes/modules/examples.ts index e91c31ad..1e2461c5 100644 --- a/playground/src/router/routes/modules/examples.ts +++ b/playground/src/router/routes/modules/examples.ts @@ -299,6 +299,15 @@ const routes: RouteRecordRaw[] = [ title: 'Loading', }, }, + { + name: 'ButtonGroup', + path: '/examples/button-group', + component: () => import('#/views/examples/button-group/index.vue'), + meta: { + icon: 'mdi:check-circle', + title: $t('examples.button-group.title'), + }, + }, ], }, ]; diff --git a/playground/src/views/examples/button-group/index.vue b/playground/src/views/examples/button-group/index.vue new file mode 100644 index 00000000..47388963 --- /dev/null +++ b/playground/src/views/examples/button-group/index.vue @@ -0,0 +1,194 @@ + +