feat(RadioGroup): configurable label size (#881)

This commit is contained in:
Conner
2023-10-27 16:11:58 -05:00
committed by GitHub
parent 327c7769da
commit 5a2644b329
4 changed files with 19 additions and 6 deletions

View File

@@ -19,6 +19,10 @@ Alternatively, you can use individual Radio components:
:component-example{component="radio-example"} :component-example{component="radio-example"}
::callout{icon="i-heroicons-light-bulb"}
If using the RadioGroup component, you can customize the Radio options by using the `uiRadio` prop.
::
### Legend ### Legend
Use the `legend` prop to add a legend to the RadioGroup. Use the `legend` prop to add a legend to the RadioGroup.

View File

@@ -14,7 +14,7 @@
v-bind="attrs" v-bind="attrs"
> >
</div> </div>
<div v-if="label || $slots.label" class="ms-3 text-sm"> <div v-if="label || $slots.label" class="ms-3 inline-flex items-center">
<label :for="id" :class="ui.label"> <label :for="id" :class="ui.label">
<slot name="label">{{ label }}</slot> <slot name="label">{{ label }}</slot>
<span v-if="required" :class="ui.required">*</span> <span v-if="required" :class="ui.required">*</span>

View File

@@ -13,6 +13,7 @@
:model-value="modelValue" :model-value="modelValue"
:value="option.value" :value="option.value"
:disabled="disabled" :disabled="disabled"
:ui="uiRadio"
@change="onUpdate(option.value)" @change="onUpdate(option.value)"
> >
<template #label> <template #label>
@@ -33,10 +34,11 @@ import { mergeConfig, get } from '../../utils'
import type { Strategy } from '../../types' import type { Strategy } from '../../types'
// @ts-expect-error // @ts-expect-error
import appConfig from '#build/app.config' import appConfig from '#build/app.config'
import { radioGroup } from '#ui/ui.config' import { radioGroup, radio } from '#ui/ui.config'
import colors from '#ui-colors' import colors from '#ui-colors'
const config = mergeConfig<typeof radioGroup>(appConfig.ui.strategy, appConfig.ui.select, radioGroup) const config = mergeConfig<typeof radioGroup>(appConfig.ui.strategy, appConfig.ui.radioGroup, radioGroup)
const configRadio = mergeConfig<typeof radio>(appConfig.ui.strategy, appConfig.ui.radio, radio)
export default defineComponent({ export default defineComponent({
components: { components: {
@@ -86,11 +88,16 @@ export default defineComponent({
ui: { ui: {
type: Object as PropType<Partial<typeof config & { strategy?: Strategy }>>, type: Object as PropType<Partial<typeof config & { strategy?: Strategy }>>,
default: undefined default: undefined
},
uiRadio: {
type: Object as PropType<Partial<typeof configRadio & { strategy?: Strategy }>>,
default: undefined
} }
}, },
emits: ['update:modelValue', 'change'], emits: ['update:modelValue', 'change'],
setup (props, { emit }) { setup (props, { emit }) {
const { ui, attrs } = useUI('radioGroup', toRef(props, 'ui'), config, toRef(props, 'class')) const { ui, attrs } = useUI('radioGroup', toRef(props, 'ui'), config, toRef(props, 'class'))
const { ui: uiRadio } = useUI('radio', toRef(props, 'uiRadio'), configRadio)
const { emitFormChange, color, name } = useFormGroup(props, config) const { emitFormChange, color, name } = useFormGroup(props, config)
provide('radio-group', { color, name }) provide('radio-group', { color, name })
@@ -131,6 +138,8 @@ export default defineComponent({
return { return {
// eslint-disable-next-line vue/no-dupe-keys // eslint-disable-next-line vue/no-dupe-keys
ui, ui,
// eslint-disable-next-line vue/no-dupe-keys
uiRadio,
attrs, attrs,
normalizedOptions, normalizedOptions,
// eslint-disable-next-line vue/no-dupe-keys // eslint-disable-next-line vue/no-dupe-keys

View File

@@ -777,9 +777,9 @@ export const radio = {
background: 'bg-white dark:bg-gray-900', background: 'bg-white dark:bg-gray-900',
border: 'border border-gray-300 dark:border-gray-700', border: 'border border-gray-300 dark:border-gray-700',
ring: 'focus-visible:ring-2 focus-visible:ring-{color}-500 dark:focus-visible:ring-{color}-400 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900', ring: 'focus-visible:ring-2 focus-visible:ring-{color}-500 dark:focus-visible:ring-{color}-400 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900',
label: 'font-medium text-gray-700 dark:text-gray-200', label: 'text-sm font-medium text-gray-700 dark:text-gray-200',
required: 'text-red-500 dark:text-red-400', required: 'text-sm text-red-500 dark:text-red-400',
help: 'text-gray-500 dark:text-gray-400', help: 'text-sm text-gray-500 dark:text-gray-400',
default: { default: {
color: 'primary' color: 'primary'
} }