From def5f7c10bd28fbfea5fb8a3c7314ff8592c5335 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Fri, 26 Apr 2024 17:04:49 +0200 Subject: [PATCH] feat(AvatarGroup): new component (#71) Co-authored-by: Romain Hamel --- playground/pages/avatar.vue | 19 ++++- playground/pages/chip.vue | 2 +- src/runtime/components/Avatar.vue | 5 +- src/runtime/components/AvatarGroup.vue | 70 +++++++++++++++++ src/runtime/components/Chip.vue | 9 ++- src/runtime/composables/useAvatarGroup.ts | 12 +++ src/runtime/types/index.d.ts | 1 + src/theme/avatar-group.ts | 37 +++++++++ src/theme/index.ts | 1 + test/components/AvatarGroup.spec.ts | 38 +++++++++ test/components/Chip.spec.ts | 9 ++- test/components/FormField.spec.ts | 2 +- .../__snapshots__/AvatarGroup.spec.ts.snap | 77 +++++++++++++++++++ .../__snapshots__/Chip.spec.ts.snap | 8 ++ 14 files changed, 280 insertions(+), 10 deletions(-) create mode 100644 src/runtime/components/AvatarGroup.vue create mode 100644 src/runtime/composables/useAvatarGroup.ts create mode 100644 src/theme/avatar-group.ts create mode 100644 test/components/AvatarGroup.spec.ts create mode 100644 test/components/__snapshots__/AvatarGroup.spec.ts.snap diff --git a/playground/pages/avatar.vue b/playground/pages/avatar.vue index a35415d9..bfddab0d 100644 --- a/playground/pages/avatar.vue +++ b/playground/pages/avatar.vue @@ -5,7 +5,7 @@ const sizes = Object.keys(theme.variants.size) diff --git a/playground/pages/chip.vue b/playground/pages/chip.vue index 3066da1c..582bb4c6 100644 --- a/playground/pages/chip.vue +++ b/playground/pages/chip.vue @@ -31,7 +31,7 @@ const items = [{
- +
diff --git a/src/runtime/components/Avatar.vue b/src/runtime/components/Avatar.vue index 10060b32..52c8cb2f 100644 --- a/src/runtime/components/Avatar.vue +++ b/src/runtime/components/Avatar.vue @@ -28,6 +28,7 @@ import { computed } from 'vue' import { AvatarRoot, AvatarImage, AvatarFallback, useForwardProps } from 'radix-vue' import { reactivePick } from '@vueuse/core' import { UIcon } from '#components' +import { useAvatarGroup } from '#imports' const props = defineProps() @@ -35,7 +36,9 @@ const fallbackProps = useForwardProps(reactivePick(props, 'delayMs')) const fallback = computed(() => props.text || (props.alt || '').split(' ').map(word => word.charAt(0)).join('').substring(0, 2)) -const ui = computed(() => tv({ extend: avatar, slots: props.ui })({ size: props.size })) +const { size } = useAvatarGroup(props) + +const ui = computed(() => tv({ extend: avatar, slots: props.ui })({ size: size.value }))