Die CheckboxGroup
Bearbeiten
Verwenden Sie die v-model-Direktive, um den Wert der CheckboxGroup zu steuern, oder die default-value-Prop, um den Anfangswert festzulegen, wenn Sie den Zustand nicht steuern müssen.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
const value = ref(['System'])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
const value = ref(['System'])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template>Einträge
Verwenden Sie die items-prop als Array von Strings oder Zahlen:
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
const value = ref(['System'])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
const value = ref(['System'])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template>Sie können auch ein Array von Objekten mit den folgenden Eigenschaften übergeben:
label?: string(nicht vorhanden)description?: string(englisch) 04.04.2018 00:43:45 00:45:46 00:46:47:48disabled?: boolean(englisch) 05.05.2019 00:55:55 00:55:55 00:55:55:55 00:55:55:55:55class?: any(englisch)ui?: { item?: ClassNameValue, container?: ClassNameValue, base?: ClassNameValue, 'indicator'?: ClassNameValue, icon?: ClassNameValue, wrapper?: ClassNameValue, label?: ClassNameValue, description?: ClassNameValue }(nicht vorhanden)
<script setup lang="ts">
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
description: 'Matches your device settings.',
value: 'system'
},
{
label: 'Light',
description: 'Always uses the light theme.',
value: 'light'
},
{
label: 'Dark',
description: 'Always uses the dark theme.',
value: 'dark'
}
])
const value = ref([
'system'
])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
description: 'Matches your device settings.',
value: 'system'
},
{
label: 'Light',
description: 'Always uses the light theme.',
value: 'light'
},
{
label: 'Dark',
description: 'Always uses the dark theme.',
value: 'dark'
}
])
const value = ref([
'system'
])
</script>
<template>
<UCheckboxGroup v-model="value" :items="items" />
</template>value-Eigenschaft des Objekts in der v-model-Direktive oder der default-value-Prop verweisen.Value Key (englisch)
Sie können die Eigenschaft ändern, die zum Festlegen des Werts verwendet wird, indem Sie die Prop value-key verwenden.
<script setup lang="ts">
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
description: 'Matches your device settings.',
id: 'system'
},
{
label: 'Light',
description: 'Always uses the light theme.',
id: 'light'
},
{
label: 'Dark',
description: 'Always uses the dark theme.',
id: 'dark'
}
])
const value = ref([
'light'
])
</script>
<template>
<UCheckboxGroup v-model="value" value-key="id" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
description: 'Matches your device settings.',
id: 'system'
},
{
label: 'Light',
description: 'Always uses the light theme.',
id: 'light'
},
{
label: 'Dark',
description: 'Always uses the dark theme.',
id: 'dark'
}
])
const value = ref([
'light'
])
</script>
<template>
<UCheckboxGroup v-model="value" value-key="id" :items="items" />
</template>Legend Bearbeiten
Verwenden Sie die legend prop, um die Legende der CheckboxGroup zu setzen.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup legend="Theme" :default-value="['System']" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup legend="Theme" :default-value="['System']" :items="items" />
</template>Color (englisch)
Verwenden Sie die color-Prop, um die Farbe der CheckboxGroup zu ändern.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup color="neutral" :default-value="['System']" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup color="neutral" :default-value="['System']" :items="items" />
</template>Variant Bearbeiten
Verwenden Sie die variant-prop, um die Variante der CheckboxGroup zu ändern.
<script setup lang="ts">
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
value: 'system',
description: 'Matches your device settings.'
},
{
label: 'Light',
value: 'light',
description: 'Always uses the light theme.'
},
{
label: 'Dark',
value: 'dark',
description: 'Always uses the dark theme.'
}
])
</script>
<template>
<UCheckboxGroup color="primary" variant="card" :default-value="['system']" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
value: 'system',
description: 'Matches your device settings.'
},
{
label: 'Light',
value: 'light',
description: 'Always uses the light theme.'
},
{
label: 'Dark',
value: 'dark',
description: 'Always uses the dark theme.'
}
])
</script>
<template>
<UCheckboxGroup color="primary" variant="card" :default-value="['system']" :items="items" />
</template>Size
Verwenden Sie die size-prop, um die Größe der CheckboxGroup zu ändern.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup size="xl" variant="list" :default-value="['System']" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup size="xl" variant="list" :default-value="['System']" :items="items" />
</template>Orientierung
Verwenden Sie die orientation-prop, um die Ausrichtung der CheckboxGroup. Defaults auf vertical zu ändern.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup
orientation="horizontal"
variant="list"
:default-value="['System']"
:items="items"
/>
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup
orientation="horizontal"
variant="list"
:default-value="['System']"
:items="items"
/>
</template>Indicator (englisch)
Verwenden Sie die indicator-Stütze, um die Position zu ändern oder den Indikator auszublenden. Standardmäßig ist start.
icon eines Elements ersetzt das Häkchen, solange die Anzeige sichtbar ist, und wird über dem Etikett angezeigt, wenn es hidden ist.<script setup lang="ts">
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
icon: 'i-lucide-monitor',
value: 'System',
class: 'w-20'
},
{
label: 'Light',
icon: 'i-lucide-sun',
class: 'w-20',
value: 'Light'
},
{
label: 'Dark',
icon: 'i-lucide-moon',
class: 'w-20',
value: 'Dark'
}
])
</script>
<template>
<UCheckboxGroup
indicator="hidden"
orientation="horizontal"
variant="table"
:default-value="['System']"
:items="items"
/>
</template><script setup lang="ts">
import { ref } from 'vue'
import type { CheckboxGroupItem } from '@nuxt/ui'
const items = ref<CheckboxGroupItem[]>([
{
label: 'System',
icon: 'i-lucide-monitor',
value: 'System',
class: 'w-20'
},
{
label: 'Light',
icon: 'i-lucide-sun',
class: 'w-20',
value: 'Light'
},
{
label: 'Dark',
icon: 'i-lucide-moon',
class: 'w-20',
value: 'Dark'
}
])
</script>
<template>
<UCheckboxGroup
indicator="hidden"
orientation="horizontal"
variant="table"
:default-value="['System']"
:items="items"
/>
</template>Disabled (nicht verfügbar)
Verwenden Sie die disabled-Prop, um die CheckboxGroup zu deaktivieren.
<script setup lang="ts">
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup disabled :default-value="['System']" :items="items" />
</template><script setup lang="ts">
import { ref } from 'vue'
const items = ref(['System', 'Light', 'Dark'])
</script>
<template>
<UCheckboxGroup disabled :default-value="['System']" :items="items" />
</template>API
Props Bearbeiten
| Prop | Default | Type |
|---|---|---|
as | 'div' | anyThe element or component this component should render as. |
legend | string | |
valueKey | 'value' | VKWhen |
labelKey | 'label' | keyof Extract<NestedItem<T>, object> & string | DotPathKeys<Extract<NestedItem<T>, object>>When |
descriptionKey | 'description' | keyof Extract<NestedItem<T>, object> & string | DotPathKeys<Extract<NestedItem<T>, object>>When |
items | T | |
modelValue | GetItemValue<T, VK, undefined, NestedItem<T>>[]The controlled value of the CheckboxGroup. Can be bind as | |
defaultValue | GetItemValue<T, VK, undefined, NestedItem<T>>[]The value of the CheckboxGroup when initially rendered. Use when you do not need to control the state of the CheckboxGroup. | |
size | 'md' | "xs" | "sm" | "md" | "lg" | "xl" |
variant | 'list' | "table" | "list" | "card" |
orientation | 'vertical' | "horizontal" | "vertical"The orientation the checkbox buttons are laid out. |
disabled | boolean When | |
loop | false | boolean Whether keyboard navigation should loop around |
name | stringThe name of the field. Submitted with its owning form as part of a name/value pair. | |
required | boolean When | |
icon | appConfig.ui.icons.check | anyThe icon displayed when checked, or above the label when |
color | 'primary' | "primary" | "secondary" | "success" | "info" | "warning" | "error" | "neutral" |
highlight | boolean Highlight the ring color like a focus state. | |
indicator | 'start' | "start" | "end" | "hidden"Position of the indicator. |
ui | { root?: SlotClass; fieldset?: SlotClass; legend?: SlotClass; item?: SlotClass; } & { root?: SlotClass; container?: SlotClass; base?: SlotClass; indicator?: SlotClass; icon?: SlotClass; wrapper?: SlotClass; label?: SlotClass; description?: SlotClass; } |
Slots Bearbeiten
| Slot | Type |
|---|---|
legend | {} |
label | { item: T[number] & { id: string; }; } |
description | { item: T[number] & { id: string; }; } |
Emits Bearbeiten
| Event | Type |
|---|---|
update:modelValue | [value: GetItemValue<T, VK, undefined, NestedItem<T>>[]] |
change | [event: Event] |
Theme Bearbeiten
export default defineAppConfig({
ui: {
checkboxGroup: {
slots: {
root: 'relative',
fieldset: 'flex gap-x-2',
legend: 'mb-1 block font-medium text-default',
item: ''
},
variants: {
orientation: {
horizontal: {
fieldset: 'flex-row'
},
vertical: {
fieldset: 'flex-col'
}
},
color: {
primary: {},
secondary: {},
success: {},
info: {},
warning: {},
error: {},
neutral: {}
},
variant: {
list: {
fieldset: 'flex-wrap'
},
card: {
fieldset: 'flex-wrap'
},
table: {
item: [
'border border-default hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:bg-elevated/50',
'transition-colors'
]
}
},
size: {
xs: {
fieldset: 'gap-y-0.5',
legend: 'text-xs'
},
sm: {
fieldset: 'gap-y-0.5',
legend: 'text-xs'
},
md: {
fieldset: 'gap-y-1',
legend: 'text-sm'
},
lg: {
fieldset: 'gap-y-1',
legend: 'text-sm'
},
xl: {
fieldset: 'gap-y-1.5',
legend: 'text-base'
}
},
required: {
true: {
legend: "after:content-['*'] after:ms-0.5 after:text-error"
}
},
highlight: {
true: {},
false: {}
},
disabled: {
true: {}
}
},
compoundVariants: [
{
color: 'primary',
variant: 'table',
class: {
item: 'outline-primary/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-primary has-focus-visible:z-[1]'
}
},
{
color: 'neutral',
variant: 'table',
class: {
item: 'outline-inverted/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-inverted has-focus-visible:z-[1]'
}
},
{
variant: 'table',
highlight: false,
class: {
item: 'hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:border-accented'
}
},
{
size: 'xs',
variant: 'table',
class: {
item: 'p-2.5'
}
},
{
size: 'sm',
variant: 'table',
class: {
item: 'p-3'
}
},
{
size: 'md',
variant: 'table',
class: {
item: 'p-3.5'
}
},
{
size: 'lg',
variant: 'table',
class: {
item: 'p-4'
}
},
{
size: 'xl',
variant: 'table',
class: {
item: 'p-4.5'
}
},
{
orientation: 'horizontal',
variant: 'table',
class: {
item: 'first-of-type:rounded-s-lg last-of-type:rounded-e-lg',
fieldset: 'gap-0 -space-x-px'
}
},
{
orientation: 'vertical',
variant: 'table',
class: {
item: 'first-of-type:rounded-t-lg last-of-type:rounded-b-lg',
fieldset: 'gap-0 -space-y-px'
}
},
{
color: 'primary',
variant: 'table',
class: {
item: 'has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:border-primary/50 has-data-[state=checked]:z-[1]'
}
},
{
color: 'neutral',
variant: 'table',
class: {
item: 'has-data-[state=checked]:bg-elevated has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:z-[1]'
}
},
{
variant: 'table',
disabled: true,
class: {
item: 'cursor-not-allowed'
}
}
],
defaultVariants: {
highlight: false,
size: 'md',
variant: 'list',
color: 'primary'
}
}
}
})import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
checkboxGroup: {
slots: {
root: 'relative',
fieldset: 'flex gap-x-2',
legend: 'mb-1 block font-medium text-default',
item: ''
},
variants: {
orientation: {
horizontal: {
fieldset: 'flex-row'
},
vertical: {
fieldset: 'flex-col'
}
},
color: {
primary: {},
secondary: {},
success: {},
info: {},
warning: {},
error: {},
neutral: {}
},
variant: {
list: {
fieldset: 'flex-wrap'
},
card: {
fieldset: 'flex-wrap'
},
table: {
item: [
'border border-default hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:bg-elevated/50',
'transition-colors'
]
}
},
size: {
xs: {
fieldset: 'gap-y-0.5',
legend: 'text-xs'
},
sm: {
fieldset: 'gap-y-0.5',
legend: 'text-xs'
},
md: {
fieldset: 'gap-y-1',
legend: 'text-sm'
},
lg: {
fieldset: 'gap-y-1',
legend: 'text-sm'
},
xl: {
fieldset: 'gap-y-1.5',
legend: 'text-base'
}
},
required: {
true: {
legend: "after:content-['*'] after:ms-0.5 after:text-error"
}
},
highlight: {
true: {},
false: {}
},
disabled: {
true: {}
}
},
compoundVariants: [
{
color: 'primary',
variant: 'table',
class: {
item: 'outline-primary/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-primary has-focus-visible:z-[1]'
}
},
{
color: 'neutral',
variant: 'table',
class: {
item: 'outline-inverted/25 has-focus-visible:outline-3 not-has-disabled:has-focus-visible:border-inverted has-focus-visible:z-[1]'
}
},
{
variant: 'table',
highlight: false,
class: {
item: 'hover:not-has-disabled:not-has-focus-visible:not-has-data-[state=checked]:border-accented'
}
},
{
size: 'xs',
variant: 'table',
class: {
item: 'p-2.5'
}
},
{
size: 'sm',
variant: 'table',
class: {
item: 'p-3'
}
},
{
size: 'md',
variant: 'table',
class: {
item: 'p-3.5'
}
},
{
size: 'lg',
variant: 'table',
class: {
item: 'p-4'
}
},
{
size: 'xl',
variant: 'table',
class: {
item: 'p-4.5'
}
},
{
orientation: 'horizontal',
variant: 'table',
class: {
item: 'first-of-type:rounded-s-lg last-of-type:rounded-e-lg',
fieldset: 'gap-0 -space-x-px'
}
},
{
orientation: 'vertical',
variant: 'table',
class: {
item: 'first-of-type:rounded-t-lg last-of-type:rounded-b-lg',
fieldset: 'gap-0 -space-y-px'
}
},
{
color: 'primary',
variant: 'table',
class: {
item: 'has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:border-primary/50 has-data-[state=checked]:z-[1]'
}
},
{
color: 'neutral',
variant: 'table',
class: {
item: 'has-data-[state=checked]:bg-elevated has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:z-[1]'
}
},
{
variant: 'table',
disabled: true,
class: {
item: 'cursor-not-allowed'
}
}
],
defaultVariants: {
highlight: false,
size: 'md',
variant: 'list',
color: 'primary'
}
}
}
})
]
})