Tiempo de entrada
xph0000xUso
Utilice la directiva v-model para controlar el tiempo seleccionado.
<script setup lang="ts">
import { Time } from '@internationalized/date'
const value = shallowRef(new Time(12, 30, 0))
</script>
<template>
<UInputTime v-model="value" />
</template><script setup lang="ts">
import { shallowRef } from 'vue'
import { Time } from '@internationalized/date'
const value = shallowRef(new Time(12, 30, 0))
</script>
<template>
<UInputTime v-model="value" />
</template>Utilice el prop default-value para establecer el valor inicial cuando no necesite controlar su estado.
<script setup lang="ts">
import { Time } from '@internationalized/date'
const defaultValue = shallowRef(new Time(9, 45, 0))
</script>
<template>
<UInputTime :default-value="defaultValue" />
</template><script setup lang="ts">
import { shallowRef } from 'vue'
import { Time } from '@internationalized/date'
const defaultValue = shallowRef(new Time(9, 45, 0))
</script>
<template>
<UInputTime :default-value="defaultValue" />
</template>@internationalized/date para el formato local. El formato de tiempo está determinado por la prop locale del componente App.@internationalized/date para el formato local. El formato de tiempo está determinado por la prop locale del componente App.Rango en
Utilice el prop range para habilitar la selección de rango de tiempo con las horas de inicio y finalización.
<script setup lang="ts">
import { Time } from '@internationalized/date'
const value = shallowRef({ start: new Time(9, 0, 0), end: new Time(17, 30, 0) })
</script>
<template>
<UInputTime range v-model="value" />
</template><script setup lang="ts">
import { shallowRef } from 'vue'
import { Time } from '@internationalized/date'
const value = shallowRef({ start: new Time(9, 0, 0), end: new Time(17, 30, 0) })
</script>
<template>
<UInputTime range v-model="value" />
</template>Ciclo ### horas
Utilice el prop hour-cycle para cambiar el ciclo de hora del InputTime. Defaults a 12.
<script setup lang="ts">
import { Time } from '@internationalized/date'
const defaultValue = shallowRef(new Time(16, 30, 0))
</script>
<template>
<UInputTime :hour-cycle="24" :default-value="defaultValue" />
</template><script setup lang="ts">
import { shallowRef } from 'vue'
import { Time } from '@internationalized/date'
const defaultValue = shallowRef(new Time(16, 30, 0))
</script>
<template>
<UInputTime :hour-cycle="24" :default-value="defaultValue" />
</template>Color (Edición)
Utilice el accesorio color para cambiar el color del InputTime.
<template>
<UInputTime color="neutral" highlight />
</template>highlight se utiliza aquí para mostrar el estado de enfoque. Se utiliza internamente cuando se produce un error de validación.Variante
Utilice el prop variant para cambiar la variante de la InputTime.
<template>
<UInputTime variant="subtle" />
</template>Tamaño
Utilice el prop size para cambiar el tamaño del InputTime.
<template>
<UInputTime size="xl" />
</template>Icon
Utilice el prop icon para mostrar un Icon dentro del InputTime.
<template>
<UInputTime icon="i-lucide-clock" />
</template>leading y trailing para establecer la posición del icono o los accesorios leading-icon y trailing-icon para establecer un icono diferente para cada posición.Separador Icono
Utilice la prop separator-icon para cambiar el Icon del separador de rango.
<template>
<UInputTime range separator-icon="i-lucide-arrow-right" />
</template>Avatar en Español
Utilice el prop avatar para mostrar un Avatar dentro del InputTime.
<template>
<UInputTime
:avatar="{
src: 'https://github.com/vuejs.png',
loading: 'lazy'
}"
size="md"
variant="outline"
/>
</template>Desactivado
Utilice el accesorio disabled para desactivar el InputTime.
<template>
<UInputTime disabled />
</template>Ejemplos
Dentro de un campo de formulario
Puede utilizar el InputTime dentro de un componente FormField para mostrar una etiqueta, texto de ayuda, indicador requerido, etc.
<script setup lang="ts">
import { Time } from '@internationalized/date'
const time = shallowRef(new Time(12, 30, 0))
</script>
<template>
<UFormField label="Time" help="Specify the time" required>
<UInputTime v-model="time" />
</UFormField>
</template>
<script setup lang="ts">
import { shallowRef } from 'vue'
import { Time } from '@internationalized/date'
const time = shallowRef(new Time(12, 30, 0))
</script>
<template>
<UFormField label="Time" help="Specify the time" required>
<UInputTime v-model="time" />
</UFormField>
</template>
API (Edición española)
Props (accesorios)
| Prop | Default | Type |
|---|---|---|
as | 'div' | anyThe element or component this component should render as. |
color | 'primary' | "primary" | "secondary" | "success" | "info" | "warning" | "error" | "neutral" |
variant | 'outline' | "outline" | "soft" | "subtle" | "ghost" | "none" |
size | 'md' | "xs" | "sm" | "md" | "lg" | "xl" |
highlight | boolean Highlight the ring color like a focus state. | |
fixed | boolean Keep the mobile text size on all breakpoints. | |
autofocus | boolean | |
autofocusDelay | 0 | number |
separatorIcon | appConfig.ui.icons.minus | anyThe icon to use as a range separator. |
range | false | REnable time range selection. |
defaultValue | Time | CalendarDateTime | ZonedDateTime | |
modelValue | null | Time | CalendarDateTime | ZonedDateTime | |
icon | anyDisplay an icon based on the | |
avatar | AvatarPropsDisplay an avatar on the left side. | |
leading | boolean When | |
leadingIcon | anyDisplay an icon on the left side. | |
trailing | boolean When | |
trailingIcon | anyDisplay an icon on the right side. | |
loading | boolean When | |
loadingIcon | appConfig.ui.icons.loading | anyThe icon when the |
defaultPlaceholder | Time | CalendarDateTime | ZonedDateTime | |
placeholder | Time | CalendarDateTime | ZonedDateTime | |
hourCycle | 12 | 24The hour cycle used for formatting times. Defaults to the local preference | |
step | DateStepThe stepping interval for the time fields. Defaults to | |
stepSnapping | boolean Whether to enforce snapping the value to the nearest step increment after input. Defaults to | |
granularity | "hour" | "minute" | "second"The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity | |
hideTimeZone | boolean Whether or not to hide the time zone segment of the field | |
maxValue | Time | CalendarDateTime | ZonedDateTime | |
minValue | Time | CalendarDateTime | ZonedDateTime | |
locale | stringThe locale to use for formatting dates | |
disabled | boolean Whether or not the time field is disabled | |
readonly | boolean Whether or not the time field is readonly | |
id | stringId of the element | |
name | stringThe name of the field. Submitted with its owning form as part of a name/value pair. | |
required | boolean When | |
isTimeUnavailable | (date: DateValue): booleanA function that returns whether or not a time is unavailable | |
ui | { base?: SlotClass; leading?: SlotClass; leadingIcon?: SlotClass; leadingAvatar?: SlotClass; leadingAvatarSize?: SlotClass; trailing?: SlotClass; trailingIcon?: SlotClass; segment?: SlotClass; separatorIcon?: SlotClass; } |
Slots en línea
| Slot | Type |
|---|---|
leading | { ui: object; } |
default | { ui: object; } |
trailing | { ui: object; } |
separator | { ui: object; } |
Emisiones
| Event | Type |
|---|---|
update:modelValue | [value: InputTimeModelValue<R>] |
update:placeholder | [date: TimeValue] & [date: TimeValue] |
change | [event: Event] |
blur | [event: FocusEvent] |
focus | [event: FocusEvent] |
Temas
export default defineAppConfig({
ui: {
inputTime: {
slots: {
base: [
'group relative inline-flex items-center rounded-md select-none',
'transition-colors'
],
leading: 'absolute inset-y-0 start-0 flex items-center',
leadingIcon: 'shrink-0 text-dimmed',
leadingAvatar: 'shrink-0',
leadingAvatarSize: '',
trailing: 'absolute inset-y-0 end-0 flex items-center',
trailingIcon: 'shrink-0 text-dimmed',
segment: [
'rounded-sm text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75',
'transition-colors'
],
separatorIcon: 'shrink-0 size-4 text-muted'
},
variants: {
fieldGroup: {
horizontal: 'not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]',
vertical: 'not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]'
},
size: {
xs: {
base: [
'px-2 py-1 text-sm/4 gap-1',
'gap-0.25'
],
leading: 'ps-2',
trailing: 'pe-2',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4',
segment: 'not-data-[segment=literal]:w-8'
},
sm: {
base: [
'px-2.5 py-1.5 text-sm/4 gap-1.5',
'gap-0.5'
],
leading: 'ps-2.5',
trailing: 'pe-2.5',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4',
segment: 'not-data-[segment=literal]:w-8'
},
md: {
base: [
'px-2.5 py-1.5 text-base/5 gap-1.5',
'gap-0.5'
],
leading: 'ps-2.5',
trailing: 'pe-2.5',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5',
segment: 'not-data-[segment=literal]:w-9'
},
lg: {
base: [
'px-3 py-2 text-base/5 gap-2',
'gap-0.75'
],
leading: 'ps-3',
trailing: 'pe-3',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5',
segment: 'not-data-[segment=literal]:w-9'
},
xl: {
base: [
'px-3 py-2 text-base gap-2',
'gap-0.75'
],
leading: 'ps-3',
trailing: 'pe-3',
leadingIcon: 'size-6',
leadingAvatarSize: 'xs',
trailingIcon: 'size-6',
segment: 'not-data-[segment=literal]:w-10'
}
},
variant: {
outline: 'text-highlighted bg-default ring ring-inset ring-accented',
soft: 'text-highlighted bg-elevated/50 hover:bg-elevated has-focus:bg-elevated disabled:bg-elevated/50',
subtle: 'text-highlighted bg-elevated ring ring-inset ring-accented',
ghost: 'text-highlighted bg-transparent hover:bg-elevated has-focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent',
none: 'text-highlighted bg-transparent has-focus:outline-none'
},
color: {
primary: '',
secondary: '',
success: '',
info: '',
warning: '',
error: '',
neutral: ''
},
leading: {
true: ''
},
trailing: {
true: ''
},
loading: {
true: ''
},
highlight: {
true: ''
},
fixed: {
false: ''
},
type: {
file: 'file:me-1.5 file:font-medium file:text-muted file:outline-none'
}
},
compoundVariants: [
{
color: 'primary',
variant: [
'outline',
'subtle'
],
class: 'outline-primary/25 has-focus-visible:outline-3 has-focus-visible:ring-primary'
},
{
color: 'primary',
variant: [
'soft',
'ghost'
],
class: 'outline-primary/25 has-focus-visible:outline-3'
},
{
color: 'primary',
highlight: true,
class: 'ring ring-inset ring-primary'
},
{
color: 'neutral',
variant: [
'outline',
'subtle'
],
class: 'outline-inverted/25 has-focus-visible:outline-3 has-focus-visible:ring-inverted'
},
{
color: 'neutral',
variant: [
'soft',
'ghost'
],
class: 'outline-inverted/25 has-focus-visible:outline-3'
},
{
color: 'neutral',
highlight: true,
class: 'ring ring-inset ring-inverted'
},
{
leading: true,
size: 'xs',
class: 'ps-7'
},
{
leading: true,
size: 'sm',
class: 'ps-8'
},
{
leading: true,
size: 'md',
class: 'ps-9'
},
{
leading: true,
size: 'lg',
class: 'ps-10'
},
{
leading: true,
size: 'xl',
class: 'ps-11'
},
{
trailing: true,
size: 'xs',
class: 'pe-7'
},
{
trailing: true,
size: 'sm',
class: 'pe-8'
},
{
trailing: true,
size: 'md',
class: 'pe-9'
},
{
trailing: true,
size: 'lg',
class: 'pe-10'
},
{
trailing: true,
size: 'xl',
class: 'pe-11'
},
{
loading: true,
leading: true,
class: {
leadingIcon: 'animate-spin'
}
},
{
loading: true,
leading: false,
trailing: true,
class: {
trailingIcon: 'animate-spin'
}
},
{
fixed: false,
size: 'xs',
class: 'md:text-xs'
},
{
fixed: false,
size: 'sm',
class: 'md:text-xs'
},
{
fixed: false,
size: 'md',
class: 'md:text-sm'
},
{
fixed: false,
size: 'lg',
class: 'md:text-sm'
},
{
variant: 'outline',
class: {
segment: 'focus:bg-elevated'
}
},
{
variant: 'soft',
class: {
segment: 'focus:bg-accented/50 group-hover:focus:bg-accented'
}
},
{
variant: 'subtle',
class: {
segment: 'focus:bg-accented'
}
},
{
variant: 'ghost',
class: {
segment: 'focus:bg-elevated group-hover:focus:bg-accented'
}
},
{
variant: 'none',
class: {
segment: 'focus:bg-elevated'
}
}
],
defaultVariants: {
size: 'md',
color: 'primary',
variant: 'outline'
}
}
}
})import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
inputTime: {
slots: {
base: [
'group relative inline-flex items-center rounded-md select-none',
'transition-colors'
],
leading: 'absolute inset-y-0 start-0 flex items-center',
leadingIcon: 'shrink-0 text-dimmed',
leadingAvatar: 'shrink-0',
leadingAvatarSize: '',
trailing: 'absolute inset-y-0 end-0 flex items-center',
trailingIcon: 'shrink-0 text-dimmed',
segment: [
'rounded-sm text-center outline-hidden data-placeholder:text-dimmed data-[segment=literal]:text-muted data-invalid:text-error data-disabled:cursor-not-allowed data-disabled:opacity-75',
'transition-colors'
],
separatorIcon: 'shrink-0 size-4 text-muted'
},
variants: {
fieldGroup: {
horizontal: 'not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]',
vertical: 'not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]'
},
size: {
xs: {
base: [
'px-2 py-1 text-sm/4 gap-1',
'gap-0.25'
],
leading: 'ps-2',
trailing: 'pe-2',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4',
segment: 'not-data-[segment=literal]:w-8'
},
sm: {
base: [
'px-2.5 py-1.5 text-sm/4 gap-1.5',
'gap-0.5'
],
leading: 'ps-2.5',
trailing: 'pe-2.5',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4',
segment: 'not-data-[segment=literal]:w-8'
},
md: {
base: [
'px-2.5 py-1.5 text-base/5 gap-1.5',
'gap-0.5'
],
leading: 'ps-2.5',
trailing: 'pe-2.5',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5',
segment: 'not-data-[segment=literal]:w-9'
},
lg: {
base: [
'px-3 py-2 text-base/5 gap-2',
'gap-0.75'
],
leading: 'ps-3',
trailing: 'pe-3',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5',
segment: 'not-data-[segment=literal]:w-9'
},
xl: {
base: [
'px-3 py-2 text-base gap-2',
'gap-0.75'
],
leading: 'ps-3',
trailing: 'pe-3',
leadingIcon: 'size-6',
leadingAvatarSize: 'xs',
trailingIcon: 'size-6',
segment: 'not-data-[segment=literal]:w-10'
}
},
variant: {
outline: 'text-highlighted bg-default ring ring-inset ring-accented',
soft: 'text-highlighted bg-elevated/50 hover:bg-elevated has-focus:bg-elevated disabled:bg-elevated/50',
subtle: 'text-highlighted bg-elevated ring ring-inset ring-accented',
ghost: 'text-highlighted bg-transparent hover:bg-elevated has-focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent',
none: 'text-highlighted bg-transparent has-focus:outline-none'
},
color: {
primary: '',
secondary: '',
success: '',
info: '',
warning: '',
error: '',
neutral: ''
},
leading: {
true: ''
},
trailing: {
true: ''
},
loading: {
true: ''
},
highlight: {
true: ''
},
fixed: {
false: ''
},
type: {
file: 'file:me-1.5 file:font-medium file:text-muted file:outline-none'
}
},
compoundVariants: [
{
color: 'primary',
variant: [
'outline',
'subtle'
],
class: 'outline-primary/25 has-focus-visible:outline-3 has-focus-visible:ring-primary'
},
{
color: 'primary',
variant: [
'soft',
'ghost'
],
class: 'outline-primary/25 has-focus-visible:outline-3'
},
{
color: 'primary',
highlight: true,
class: 'ring ring-inset ring-primary'
},
{
color: 'neutral',
variant: [
'outline',
'subtle'
],
class: 'outline-inverted/25 has-focus-visible:outline-3 has-focus-visible:ring-inverted'
},
{
color: 'neutral',
variant: [
'soft',
'ghost'
],
class: 'outline-inverted/25 has-focus-visible:outline-3'
},
{
color: 'neutral',
highlight: true,
class: 'ring ring-inset ring-inverted'
},
{
leading: true,
size: 'xs',
class: 'ps-7'
},
{
leading: true,
size: 'sm',
class: 'ps-8'
},
{
leading: true,
size: 'md',
class: 'ps-9'
},
{
leading: true,
size: 'lg',
class: 'ps-10'
},
{
leading: true,
size: 'xl',
class: 'ps-11'
},
{
trailing: true,
size: 'xs',
class: 'pe-7'
},
{
trailing: true,
size: 'sm',
class: 'pe-8'
},
{
trailing: true,
size: 'md',
class: 'pe-9'
},
{
trailing: true,
size: 'lg',
class: 'pe-10'
},
{
trailing: true,
size: 'xl',
class: 'pe-11'
},
{
loading: true,
leading: true,
class: {
leadingIcon: 'animate-spin'
}
},
{
loading: true,
leading: false,
trailing: true,
class: {
trailingIcon: 'animate-spin'
}
},
{
fixed: false,
size: 'xs',
class: 'md:text-xs'
},
{
fixed: false,
size: 'sm',
class: 'md:text-xs'
},
{
fixed: false,
size: 'md',
class: 'md:text-sm'
},
{
fixed: false,
size: 'lg',
class: 'md:text-sm'
},
{
variant: 'outline',
class: {
segment: 'focus:bg-elevated'
}
},
{
variant: 'soft',
class: {
segment: 'focus:bg-accented/50 group-hover:focus:bg-accented'
}
},
{
variant: 'subtle',
class: {
segment: 'focus:bg-accented'
}
},
{
variant: 'ghost',
class: {
segment: 'focus:bg-elevated group-hover:focus:bg-accented'
}
},
{
variant: 'none',
class: {
segment: 'focus:bg-elevated'
}
}
],
defaultVariants: {
size: 'md',
color: 'primary',
variant: 'outline'
}
}
}
})
]
})