diff --git a/package.json b/package.json index b4ff50e1ce..ef5fe89a90 100644 --- a/package.json +++ b/package.json @@ -233,4 +233,4 @@ "framework", "ui-framework" ] -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e36ff3a4e..e3020f80bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15168,4 +15168,4 @@ snapshots: zod@4.1.11: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file diff --git a/src/runtime/components/Checkbox.vue b/src/runtime/components/Checkbox.vue index 1c6884ef0f..abe5259bbe 100644 --- a/src/runtime/components/Checkbox.vue +++ b/src/runtime/components/Checkbox.vue @@ -77,9 +77,9 @@ const modelValue = defineModel({ default: undefined } const appConfig = useAppConfig() as Checkbox['AppConfig'] -const rootProps = useForwardProps(reactivePick(props, 'required', 'value', 'defaultValue')) +const rootProps = useForwardProps(reactivePick(props, 'value', 'defaultValue')) -const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField(props) +const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, required, ariaAttrs } = useFormField(props) const id = _id.value ?? useId() const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.checkbox || {}) })({ @@ -109,6 +109,7 @@ function onUpdate(value: any) { v-bind="{ ...rootProps, ...$attrs, ...ariaAttrs }" v-model="modelValue" :name="name" + :required="required" :disabled="disabled" :class="ui.base({ class: props.ui?.base })" @update:model-value="onUpdate" diff --git a/src/runtime/components/CheckboxGroup.vue b/src/runtime/components/CheckboxGroup.vue index d89586a815..e485ff8fc7 100644 --- a/src/runtime/components/CheckboxGroup.vue +++ b/src/runtime/components/CheckboxGroup.vue @@ -97,11 +97,11 @@ const slots = defineSlots>() const appConfig = useAppConfig() as CheckboxGroup['AppConfig'] -const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'orientation', 'loop', 'required'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'orientation', 'loop'), emits) const checkboxProps = useForwardProps(reactivePick(props, 'variant', 'indicator', 'icon')) const getProxySlots = () => omit(slots, ['legend']) -const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, ariaAttrs } = useFormField>(props, { bind: false }) +const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, required, ariaAttrs } = useFormField>(props, { bind: false }) const id = _id.value ?? useId() const ui = computed(() => tv({ extend: theme, ...(appConfig.ui?.checkboxGroup || {}) })({ @@ -163,6 +163,7 @@ function onUpdate(value: any) { (props) +const { emitFormInput, emitFormChange, id, name, disabled, required, ariaAttrs } = useFormField>(props) const variant = computed(() => props.multiple ? 'area' : props.variant) const layout = computed(() => props.variant === 'button' && !props.multiple ? 'grid' : props.layout) diff --git a/src/runtime/components/FormField.vue b/src/runtime/components/FormField.vue index 87e523d996..fe7e4340db 100644 --- a/src/runtime/components/FormField.vue +++ b/src/runtime/components/FormField.vue @@ -88,6 +88,7 @@ provide(formFieldInjectionKey, computed(() => ({ name: props.name, size: props.size, eagerValidation: props.eagerValidation, + required: props.required, validateOnInputDelay: props.validateOnInputDelay, errorPattern: props.errorPattern, hint: props.hint, diff --git a/src/runtime/components/Input.vue b/src/runtime/components/Input.vue index aed1b12f1d..82e0242b7e 100644 --- a/src/runtime/components/Input.vue +++ b/src/runtime/components/Input.vue @@ -88,7 +88,7 @@ const modelValue = useVModel, 'modelValue', 'update:modelValue'>(p const appConfig = useAppConfig() as Input['AppConfig'] -const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, emitFormFocus, ariaAttrs } = useFormField>(props, { deferInputValidation: true }) +const { emitFormBlur, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, emitFormFocus, ariaAttrs, required } = useFormField>(props, { deferInputValidation: true }) const { orientation, size: fieldGroupSize } = useFieldGroup>(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props) diff --git a/src/runtime/components/InputMenu.vue b/src/runtime/components/InputMenu.vue index be0fb4bd3c..a5cb440e52 100644 --- a/src/runtime/components/InputMenu.vue +++ b/src/runtime/components/InputMenu.vue @@ -227,7 +227,7 @@ const { t } = useLocale() const appConfig = useAppConfig() as InputMenu['AppConfig'] const { contains } = useFilter({ sensitivity: 'base' }) -const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'required', 'multiple', 'resetSearchTermOnBlur', 'resetSearchTermOnSelect', 'highlightOnHover', 'openOnClick', 'openOnFocus'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'multiple', 'resetSearchTermOnBlur', 'resetSearchTermOnSelect', 'highlightOnHover', 'openOnClick', 'openOnFocus'), emits) const portalProps = usePortal(toRef(() => props.portal)) const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as ComboboxContentProps) const arrowProps = toRef(() => props.arrow as ComboboxArrowProps) @@ -241,7 +241,7 @@ const virtualizerProps = toRef(() => !!props.virtualize && defu(typeof props.vir })[props.size || 'md'] })) -const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs, required } = useFormField(props) const { orientation, size: fieldGroupSize } = useFieldGroup(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown }))) @@ -503,6 +503,7 @@ defineExpose({ v-slot="{ modelValue, open }" v-bind="rootProps" :name="name" + :required="required" :disabled="disabled" :class="ui.root({ class: [props.ui?.root, props.class] })" :as-child="!!multiple" diff --git a/src/runtime/components/InputNumber.vue b/src/runtime/components/InputNumber.vue index a865e9e039..b49270c409 100644 --- a/src/runtime/components/InputNumber.vue +++ b/src/runtime/components/InputNumber.vue @@ -104,7 +104,7 @@ const appConfig = useAppConfig() as InputNumber['AppConfig'] const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultValue', 'min', 'max', 'step', 'stepSnapping', 'formatOptions', 'disableWheelChange', 'invertWheelChange', 'readonly'), emits) -const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, id, color, size: formGroupSize, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, id, color, size: formGroupSize, name, highlight, disabled, ariaAttrs, required } = useFormField(props) const { orientation, size: fieldGroupSize } = useFieldGroup(props) const locale = computed(() => props.locale || codeLocale.value) @@ -166,6 +166,7 @@ defineExpose({ :model-value="modelValue" :class="ui.root({ class: [props.ui?.root, props.class] })" :name="name" + :required="required" :disabled="disabled" :locale="locale" @update:model-value="onUpdate" diff --git a/src/runtime/components/InputTags.vue b/src/runtime/components/InputTags.vue index a55e664de7..4450b65a1a 100644 --- a/src/runtime/components/InputTags.vue +++ b/src/runtime/components/InputTags.vue @@ -86,9 +86,9 @@ const slots = defineSlots>() const appConfig = useAppConfig() as InputTags['AppConfig'] -const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'addOnPaste', 'addOnTab', 'addOnBlur', 'duplicate', 'delimiter', 'max', 'convertValue', 'displayValue', 'required'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'addOnPaste', 'addOnTab', 'addOnBlur', 'duplicate', 'delimiter', 'max', 'convertValue', 'displayValue'), emits) -const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormBlur, emitFormFocus, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs, required } = useFormField(props) const { orientation, size: fieldGroupSize } = useFieldGroup(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props) @@ -154,6 +154,7 @@ defineExpose({ :default-value="defaultValue" :class="ui.root({ class: [ui.base({ class: props.ui?.base }), props.ui?.root, props.class] })" v-bind="rootProps" + :required="required" :name="name" :disabled="disabled" @update:model-value="onUpdate" diff --git a/src/runtime/components/PinInput.vue b/src/runtime/components/PinInput.vue index dd3e7a062a..1c49734219 100644 --- a/src/runtime/components/PinInput.vue +++ b/src/runtime/components/PinInput.vue @@ -66,9 +66,9 @@ const emits = defineEmits>() const appConfig = useAppConfig() as PinInput['AppConfig'] -const rootProps = useForwardPropsEmits(reactivePick(props, 'disabled', 'id', 'mask', 'name', 'otp', 'required', 'type'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'id', 'mask', 'name', 'otp', 'required', 'type'), emits) -const { emitFormInput, emitFormFocus, emitFormChange, emitFormBlur, size, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormInput, emitFormFocus, emitFormChange, emitFormBlur, size, color, id, name, highlight, disabled, required, ariaAttrs } = useFormField(props) const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.pinInput || {}) })({ color: color.value, @@ -116,6 +116,7 @@ defineExpose({ v-bind="{ ...rootProps, ...ariaAttrs }" :id="id" :name="name" + :required="required" :placeholder="placeholder" :model-value="(modelValue as PinInputValue)" :default-value="(defaultValue as PinInputValue[])" diff --git a/src/runtime/components/RadioGroup.vue b/src/runtime/components/RadioGroup.vue index f07b213a10..06ac03cb30 100644 --- a/src/runtime/components/RadioGroup.vue +++ b/src/runtime/components/RadioGroup.vue @@ -106,9 +106,9 @@ const slots = defineSlots>() const appConfig = useAppConfig() as RadioGroup['AppConfig'] -const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'loop', 'required'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'loop'), emits) -const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, ariaAttrs } = useFormField>(props, { bind: false }) +const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, required, ariaAttrs } = useFormField>(props, { bind: false }) const id = _id.value ?? useId() const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.radioGroup || {}) })({ @@ -175,6 +175,7 @@ function onUpdate(value: any) { :model-value="(modelValue as Exclude | Exclude[])" :default-value="(defaultValue as Exclude | Exclude[])" :orientation="orientation" + :required="required" :name="name" :disabled="disabled" :class="ui.root({ class: [props.ui?.root, props.class] })" diff --git a/src/runtime/components/Select.vue b/src/runtime/components/Select.vue index 96da5bacb5..84ca76ea5b 100644 --- a/src/runtime/components/Select.vue +++ b/src/runtime/components/Select.vue @@ -165,12 +165,12 @@ const slots = defineSlots>() const appConfig = useAppConfig() as Select['AppConfig'] -const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'disabled', 'autocomplete', 'required', 'multiple'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'open', 'defaultOpen', 'disabled', 'autocomplete', 'multiple'), emits) const portalProps = usePortal(toRef(() => props.portal)) const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as SelectContentProps) const arrowProps = toRef(() => props.arrow as SelectArrowProps) -const { emitFormChange, emitFormInput, emitFormBlur, emitFormFocus, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormChange, emitFormInput, emitFormBlur, emitFormFocus, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs, required } = useFormField(props) const { orientation, size: fieldGroupSize } = useFieldGroup(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown }))) @@ -266,6 +266,7 @@ defineExpose({ v-slot="{ modelValue, open }" :name="name" v-bind="rootProps" + :required="required" :autocomplete="autocomplete" :disabled="disabled" :default-value="(defaultValue as Exclude | Exclude[])" diff --git a/src/runtime/components/SelectMenu.vue b/src/runtime/components/SelectMenu.vue index 191b73f5cb..c18d2a4746 100644 --- a/src/runtime/components/SelectMenu.vue +++ b/src/runtime/components/SelectMenu.vue @@ -222,7 +222,7 @@ const { t } = useLocale() const appConfig = useAppConfig() as SelectMenu['AppConfig'] const { contains } = useFilter({ sensitivity: 'base' }) -const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'required', 'multiple', 'resetSearchTermOnBlur', 'resetSearchTermOnSelect', 'highlightOnHover'), emits) +const rootProps = useForwardPropsEmits(reactivePick(props, 'modelValue', 'defaultValue', 'open', 'defaultOpen', 'multiple', 'resetSearchTermOnBlur', 'resetSearchTermOnSelect', 'highlightOnHover'), emits) const portalProps = usePortal(toRef(() => props.portal)) const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, collisionPadding: 8, position: 'popper' }) as ComboboxContentProps) const arrowProps = toRef(() => props.arrow as ComboboxArrowProps) @@ -237,7 +237,7 @@ const virtualizerProps = toRef(() => !!props.virtualize && defu(typeof props.vir })) const searchInputProps = toRef(() => defu(props.searchInput, { placeholder: t('selectMenu.search'), variant: 'none' }) as InputProps) -const { emitFormBlur, emitFormFocus, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs } = useFormField(props) +const { emitFormBlur, emitFormFocus, emitFormInput, emitFormChange, size: formGroupSize, color, id, name, highlight, disabled, ariaAttrs, required } = useFormField(props) const { orientation, size: fieldGroupSize } = useFieldGroup(props) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown }))) @@ -487,6 +487,7 @@ defineExpose({ v-slot="{ modelValue, open }" v-bind="{ ...rootProps, ...$attrs, ...ariaAttrs }" ignore-filter + :required="required" as-child :name="name" :disabled="disabled" diff --git a/src/runtime/components/Slider.vue b/src/runtime/components/Slider.vue index 1e097762d2..bf799ef923 100644 --- a/src/runtime/components/Slider.vue +++ b/src/runtime/components/Slider.vue @@ -34,6 +34,7 @@ export interface SliderProps extends Pick(props) +const { id, emitFormChange, emitFormInput, size, color, name, disabled, required, ariaAttrs } = useFormField(props) const defaultSliderValue = computed(() => { if (typeof props.defaultValue === 'number') { @@ -111,6 +112,7 @@ function onChange(value: any) { v-model="sliderValue" :name="name" :disabled="disabled" + :required="required" :class="ui.root({ class: [props.ui?.root, props.class] })" :default-value="defaultSliderValue" @update:model-value="emitFormInput()" diff --git a/src/runtime/components/Switch.vue b/src/runtime/components/Switch.vue index ada4ae985f..0669d5c3e0 100644 --- a/src/runtime/components/Switch.vue +++ b/src/runtime/components/Switch.vue @@ -74,9 +74,9 @@ const modelValue = defineModel({ default: undefined }) const appConfig = useAppConfig() as Switch['AppConfig'] -const rootProps = useForwardProps(reactivePick(props, 'required', 'value', 'defaultValue')) +const rootProps = useForwardProps(reactivePick(props, 'value', 'defaultValue')) -const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField(props) +const { emitFormChange, emitFormInput, color, name, size, id: _id, disabled, required, ariaAttrs } = useFormField(props) const id = _id.value ?? useId() const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.switch || {}) })({ @@ -103,6 +103,7 @@ function onUpdate(value: any) { :id="id" v-bind="{ ...rootProps, ...$attrs, ...ariaAttrs }" v-model="modelValue" + :required="required" :name="name" :disabled="disabled || loading" :class="ui.base({ class: props.ui?.base })" diff --git a/src/runtime/components/Textarea.vue b/src/runtime/components/Textarea.vue index d65f8cd5fe..726c3d44c3 100644 --- a/src/runtime/components/Textarea.vue +++ b/src/runtime/components/Textarea.vue @@ -89,7 +89,7 @@ const modelValue = useVModel, 'modelValue', 'update:modelValue' const appConfig = useAppConfig() as Textarea['AppConfig'] -const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, size, color, id, name, highlight, disabled, ariaAttrs } = useFormField>(props, { deferInputValidation: true }) +const { emitFormFocus, emitFormBlur, emitFormInput, emitFormChange, size, color, id, name, highlight, disabled, required, ariaAttrs } = useFormField>(props, { deferInputValidation: true }) const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(props) const ui = computed(() => tv({ extend: tv(theme), ...(appConfig.ui?.textarea || {}) })({ diff --git a/src/runtime/composables/useFormField.ts b/src/runtime/composables/useFormField.ts index 354c6772ec..55dd20b05c 100644 --- a/src/runtime/composables/useFormField.ts +++ b/src/runtime/composables/useFormField.ts @@ -12,6 +12,7 @@ type Props = { size?: GetObjectField color?: GetObjectField highlight?: boolean + required?: boolean disabled?: boolean } @@ -74,6 +75,7 @@ export function useFormField(props?: Props, opts?: { bind?: boolean, defer size: computed(() => props?.size ?? formField?.value.size), color: computed(() => formField?.value.error ? 'error' : props?.color), highlight: computed(() => formField?.value.error ? true : props?.highlight), + required: computed(() => props?.required || formField?.value.required), disabled: computed(() => formOptions?.value.disabled || props?.disabled), emitFormBlur, emitFormInput, diff --git a/src/runtime/types/form.ts b/src/runtime/types/form.ts index e86f3e1b45..9f147c06a9 100644 --- a/src/runtime/types/form.ts +++ b/src/runtime/types/form.ts @@ -95,6 +95,7 @@ export interface FormFieldInjectedOptions { validateOnInputDelay?: number errorPattern?: RegExp hint?: string + required?: boolean description?: string help?: string ariaId: string diff --git a/test/components/FormField.spec.ts b/test/components/FormField.spec.ts index bab4f88c77..3a1fc7d8cd 100644 --- a/test/components/FormField.spec.ts +++ b/test/components/FormField.spec.ts @@ -18,6 +18,7 @@ import { USlider, UPinInput, UFormField, + UForm, UFileUpload } from '#components' @@ -27,18 +28,29 @@ async function renderFormField(options: { props: Partial inputComponent: typeof inputComponents[number] }) { - return await mountSuspended(UFormField, { - props: options.props, + let modelValue: any = '0' + if ((options.inputComponent as any).__name === 'FileUpload') { + modelValue = new File([''], 'test-file.txt', { type: 'text/plain' }) + } + + return await mountSuspended(UForm, { slots: { default: { // @ts-expect-error - Object literal may only specify known properties, and setup does not exist in type - setup: () => ({ inputComponent: options.inputComponent }), + setup: () => ({ + formFieldProps: options.props, + inputComponent: options.inputComponent, + modelValue + }), components: { UFormField, + UForm, ...inputComponents }, template: ` - + + + ` } } @@ -52,11 +64,12 @@ const FormFieldWrapper = defineComponent({ UFormField }, template: ` - - -` + + + + ` }) describe('FormField', () => { @@ -118,6 +131,18 @@ describe('FormField', () => { expect(input.exists()).toBe(true) }) } + test('binds required', async () => { + const wrapper = await renderFormField({ + props: { + required: true, + name + }, + inputComponent + }) + + const requiredInput = wrapper.find('[required], [aria-required=true]') + expect(requiredInput.exists()).toBe(true) + }) test('binds hints with aria-describedby', async () => { const wrapper = await renderFormField({ diff --git a/test/components/__snapshots__/Checkbox-vue.spec.ts.snap b/test/components/__snapshots__/Checkbox-vue.spec.ts.snap index 21d9bf26d6..5eecf2f366 100644 --- a/test/components/__snapshots__/Checkbox-vue.spec.ts.snap +++ b/test/components/__snapshots__/Checkbox-vue.spec.ts.snap @@ -2,7 +2,7 @@ exports[`Checkbox > renders with ariaLabel correctly 1`] = ` "
-
@@ -12,7 +12,7 @@ exports[`Checkbox > renders with ariaLabel correctly 1`] = ` exports[`Checkbox > renders with as correctly 1`] = ` "
-
@@ -22,7 +22,7 @@ exports[`Checkbox > renders with as correctly 1`] = ` exports[`Checkbox > renders with class correctly 1`] = ` "
-
@@ -32,7 +32,7 @@ exports[`Checkbox > renders with class correctly 1`] = ` exports[`Checkbox > renders with defaultValue correctly 1`] = ` "
-
@@ -41,7 +41,7 @@ exports[`Checkbox > renders with defaultValue correctly 1`] = ` exports[`Checkbox > renders with description correctly 1`] = ` "
-
@@ -53,7 +53,7 @@ exports[`Checkbox > renders with description correctly 1`] = ` exports[`Checkbox > renders with description slot correctly 1`] = ` "
-
@@ -65,7 +65,7 @@ exports[`Checkbox > renders with description slot correctly 1`] = ` exports[`Checkbox > renders with disabled correctly 1`] = ` "
-
@@ -75,7 +75,7 @@ exports[`Checkbox > renders with disabled correctly 1`] = ` exports[`Checkbox > renders with icon correctly 1`] = ` "
-
@@ -85,7 +85,7 @@ exports[`Checkbox > renders with icon correctly 1`] = ` exports[`Checkbox > renders with id correctly 1`] = ` "
-
@@ -95,7 +95,7 @@ exports[`Checkbox > renders with id correctly 1`] = ` exports[`Checkbox > renders with indeterminate correctly 1`] = ` "
-
@@ -104,7 +104,7 @@ exports[`Checkbox > renders with indeterminate correctly 1`] = ` exports[`Checkbox > renders with indeterminateIcon correctly 1`] = ` "
-
@@ -113,7 +113,7 @@ exports[`Checkbox > renders with indeterminateIcon correctly 1`] = ` exports[`Checkbox > renders with indicator end correctly 1`] = ` "
-
@@ -123,7 +123,7 @@ exports[`Checkbox > renders with indicator end correctly 1`] = ` exports[`Checkbox > renders with indicator hidden correctly 1`] = ` "
-
@@ -133,7 +133,7 @@ exports[`Checkbox > renders with indicator hidden correctly 1`] = ` exports[`Checkbox > renders with indicator start correctly 1`] = ` "
-
@@ -143,7 +143,7 @@ exports[`Checkbox > renders with indicator start correctly 1`] = ` exports[`Checkbox > renders with label correctly 1`] = ` "
-
@@ -155,7 +155,7 @@ exports[`Checkbox > renders with label correctly 1`] = ` exports[`Checkbox > renders with label slot correctly 1`] = ` "
-
@@ -167,7 +167,7 @@ exports[`Checkbox > renders with label slot correctly 1`] = ` exports[`Checkbox > renders with modelValue correctly 1`] = ` "
-
@@ -176,7 +176,7 @@ exports[`Checkbox > renders with modelValue correctly 1`] = ` exports[`Checkbox > renders with name correctly 1`] = ` "
-
@@ -186,7 +186,7 @@ exports[`Checkbox > renders with name correctly 1`] = ` exports[`Checkbox > renders with neutral variant card correctly 1`] = ` "