Ir al contenido

WeekCalendar

Vista de calendario semanal con franjas horarias para mostrar y programar eventos.

import { WeekCalendar, type CalendarEvent, type CalendarLocale } from 'asterui'

Calendario Básico

Calendario semanal simple mostrando franjas horarias.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
9am
10am
11am
12pm
1pm
2pm
3pm
4pm
5pm
import { WeekCalendar, Card } from 'asterui'

function App() {
  return (
      <Card className="h-[500px]" bodyClassName="overflow-hidden">
        <WeekCalendar date={new Date()} />
      </Card>
    )
}

export default App

Con Eventos

Calendario mostrando eventos en sus horarios programados.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
9am
Standup
10am
Sprint Planning
11am
12pm
Lunch Meeting
1pm
2pm
Design Review
3pm
Demo
4pm
Team Sync
5pm
import { WeekCalendar, Card, message, type CalendarEvent } from 'asterui'
import { useState } from 'react'

function App() {
  const [date] = useState(new Date())
  
  // Create events for this week
  const weekStart = new Date(date)
  weekStart.setDate(date.getDate() - date.getDay())
  
  const events: CalendarEvent[] = [
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 1, 9, 0), title: 'Standup', color: '#3b82f6' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 1, 14, 0), title: 'Design Review', color: '#8b5cf6' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 2, 10, 0), title: 'Sprint Planning', color: '#10b981' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 3, 12, 0), title: 'Lunch Meeting', color: '#f59e0b' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 4, 15, 0), title: 'Demo', color: '#ef4444' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 5, 16, 0), title: 'Team Sync', color: '#06b6d4' },
  ]
  
  return (
      <Card className="h-[500px]" bodyClassName="overflow-hidden">
        <WeekCalendar
          date={date}
          events={events}
          onEventClick={(event) => message.info(`Clicked: ${event.title}`)}
        />
      </Card>
    )
}

export default App

Selección de Franja

Haz clic en franjas horarias vacías para seleccionarlas.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
9am
10am
11am
12pm
1pm
2pm
3pm
4pm
5pm
import { WeekCalendar, Card, message } from 'asterui'
import { useState } from 'react'

function App() {
  const [date] = useState(new Date())
  
  return (
      <Card className="h-[500px]" bodyClassName="overflow-hidden">
        <WeekCalendar
          date={date}
          onSelectSlot={(slot) => message.info(`Selected: ${slot.start.toLocaleString()} - ${slot.end.toLocaleTimeString()}`)}
        />
      </Card>
    )
}

export default App

Eventos Tachados

Muestra eventos cancelados con estilo tachado.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
9am
10am
Cancelled Meeting
11am
12pm
Postponed
1pm
2pm
Active Event
3pm
4pm
5pm
import { WeekCalendar, Card, type CalendarEvent } from 'asterui'
import { useState } from 'react'

function App() {
  const [date] = useState(new Date())
  
  const weekStart = new Date(date)
  weekStart.setDate(date.getDate() - date.getDay())
  
  const events: CalendarEvent[] = [
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 2, 10, 0), title: 'Cancelled Meeting', color: '#ef4444', strikethrough: true },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 2, 14, 0), title: 'Active Event', color: '#10b981' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 4, 12, 0), title: 'Postponed', color: '#f59e0b', strikethrough: true },
  ]
  
  return (
      <Card className="h-[500px]" bodyClassName="overflow-hidden">
        <WeekCalendar
          date={date}
          events={events}
        />
      </Card>
    )
}

export default App

Horas Personalizadas

Muestra solo horas de la mañana (6am-12pm) usando startHour y endHour.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
6am
Morning Run
7am
Early Sync
8am
Team Breakfast
9am
Standup
10am
Code Review
11am
12pm
import { WeekCalendar, Card, type CalendarEvent } from 'asterui'
import { useState } from 'react'

function App() {
  const [date] = useState(new Date())
  
  const weekStart = new Date(date)
  weekStart.setDate(date.getDate() - date.getDay())
  
  const events: CalendarEvent[] = [
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 1, 6, 0), title: 'Morning Run', color: '#10b981' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 2, 7, 0), title: 'Early Sync', color: '#8b5cf6' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 3, 8, 0), title: 'Team Breakfast', color: '#f59e0b' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 4, 9, 0), title: 'Standup', color: '#3b82f6' },
    { date: new Date(weekStart.getFullYear(), weekStart.getMonth(), weekStart.getDate() + 5, 10, 0), title: 'Code Review', color: '#ef4444' },
  ]
  
  return (
      <Card className="h-[400px]" bodyClassName="overflow-hidden">
        <WeekCalendar
          date={date}
          events={events}
          startHour={6}
          endHour={12}
        />
      </Card>
    )
}

export default App

Permitir Interacción Pasada

Habilita hacer clic en franjas horarias pasadas.

Sun
21
Mon
22
Tue
23
Wed
24
Thu
25
Fri
26
Sat
27
9am
10am
11am
12pm
1pm
2pm
3pm
4pm
5pm
import { WeekCalendar, Card, message } from 'asterui'
import { useState } from 'react'

function App() {
  const [date] = useState(new Date())
  
  return (
      <Card className="h-[500px]" bodyClassName="overflow-hidden">
        <WeekCalendar
          date={date}
          allowPastInteraction
          onDayClick={(date) => message.info(`Day clicked: ${date.toLocaleDateString()}`)}
          onSelectSlot={(slot) => message.info(`Slot: ${slot.start.toLocaleTimeString()}`)}
        />
      </Card>
    )
}

export default App
PropiedadDescripciónTipoPredeterminado
dateLa fecha a mostrar (determina qué semana se muestra)Datenew Date()
eventsArray de eventos del calendario a mostrarCalendarEvent[][]
startHourHora de inicio para la cuadrícula de tiempo (0-23)number9
endHourHora de fin para la cuadrícula de tiempo (0-23)number17
allowPastInteractionPermitir hacer clic en franjas horarias pasadasbooleanfalse
fitContainerAjustar filas a la altura del contenedor en lugar de desplazarbooleanfalse
localeConfiguración de localización para nombres de días y formato de horaCalendarLocale-
onDayClickManejador cuando se hace clic en un encabezado de día(date: Date) => void-
onEventClickManejador cuando se hace clic en un evento(event: CalendarEvent) => void-
onSelectSlotManejador cuando se hace clic en una franja horaria(slotInfo: { start: Date; end: Date }) => void-
data-testidID de prueba para pruebasstring-
PropiedadDescripciónTipoPredeterminado
dateFecha y hora del evento (la hora determina qué fila)Date-
titleTítulo del eventostring-
colorColor del punto del eventostring-
strikethroughMostrar evento con tachado (cancelado)boolean-
styleEstilos en línea personalizados para el eventoCSSProperties-
data-testidID de prueba para pruebasstring-