RadioGroup.vue 676 B

1234567891011121314151617181920212223242526272829303132333435
  1. <template>
  2. <ButtonGroup class="radio-group">
  3. <slot></slot>
  4. </ButtonGroup>
  5. </template>
  6. <script lang="ts" setup>
  7. import { computed, provide } from 'vue'
  8. import { injectKeyRadioGroupValue } from '@/types/injectKey'
  9. import ButtonGroup from './ButtonGroup.vue'
  10. const props = withDefaults(defineProps<{
  11. value: string
  12. disabled?: boolean
  13. }>(), {
  14. disabled: false,
  15. })
  16. const emit = defineEmits<{
  17. (event: 'update:value', payload: string): void
  18. }>()
  19. const updateValue = (value: string) => {
  20. if (props.disabled) return
  21. emit('update:value', value)
  22. }
  23. const value = computed(() => props.value)
  24. provide(injectKeyRadioGroupValue, {
  25. value,
  26. updateValue,
  27. })
  28. </script>