mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-02-01 20:57:57 +01:00
feat(RadioGroup): configurable label size (#881)
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user