Skip to content
UI

Calendar

A date picker component that allows users to select dates from a calendar view.

<script setup lang="ts">
import { Calendar } from '@destyler-ui/vue'
</script>

<template>
  <Calendar.Root>
    <Calendar.Label>Label</Calendar.Label>
    <Calendar.Control>
      <Calendar.Input />
      <Calendar.Trigger />
      <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      <Calendar.MonthSelect />
      <Calendar.YearSelect />
    </Calendar.Control>
    <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

    <Teleport to="body">
      <Calendar.Positioner class="calendar-basic" data-testid="positioner">
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                      {{ weekDay.short }}
                    </Calendar.TableHeader>
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
                    <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                      <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow
                    v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })"
                    :key="id"
                  >
                    <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                      <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
                    <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                      <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Teleport>

  </Calendar.Root>
</template>
import type { UsePresenceProps } from '@destyler-ui/react'

import { Calendar } from '@destyler-ui/react'

export interface BasicProps extends UsePresenceProps {}

export function Basic(props: BasicProps) {
  return (
    <Calendar.Root {...props}>
      <Calendar.Label>Label</Calendar.Label>
      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Context>
          {api => <Calendar.Trigger>{api.open ? 'Close calendar' : 'Open calendar'}</Calendar.Trigger>}
        </Calendar.Context>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>
      <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

      <Calendar.Positioner data-testid="positioner">
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableHead>
                      <Calendar.TableRow>
                        {api.weekDays.map((weekDay, id) => (
                          <Calendar.TableHeader key={id}>
                            {weekDay.short}
                          </Calendar.TableHeader>
                        ))}
                      </Calendar.TableRow>
                    </Calendar.TableHead>
                    <Calendar.TableBody>
                      {api.weeks.map((week, id) => (
                        <Calendar.TableRow key={id}>
                          {week.map((day, id) => (
                            <Calendar.TableCell key={id} value={day}>
                              <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                        <Calendar.TableRow key={id}>
                          {months.map((month, id) => (
                            <Calendar.TableCell key={id} value={month.value}>
                              <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                        <Calendar.TableRow key={id}>
                          {years.map((year, id) => (
                            <Calendar.TableCell key={id} value={year.value}>
                              <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Calendar.Root>
  )
}
import { Calendar } from '@destyler-ui/solid/calendar'
import { Index, Portal } from 'solid-js/web'

export function Basic() {
  return (
    <Calendar.Root>
      <Calendar.Label>Label</Calendar.Label>

      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>

      <Portal>
        <Calendar.Positioner>
          <Calendar.Content>
            <Calendar.YearSelect />
            <Calendar.MonthSelect />
            <Calendar.View view="day">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableHead>
                        <Calendar.TableRow>
                          <Index each={context().weekDays}>
                            {weekDay => (
                              <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                            )}
                          </Index>
                        </Calendar.TableRow>
                      </Calendar.TableHead>

                      <Calendar.TableBody>
                        <Index each={context().weeks}>
                          {week => (
                            <Calendar.TableRow>
                              <Index each={week()}>
                                {day => (
                                  <Calendar.TableCell value={day()}>
                                    <Calendar.TableCellTrigger>
                                      {day().day}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="month">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getMonthsGrid({ columns: 4, format: 'short' })}>
                          {months => (
                            <Calendar.TableRow>
                              <Index each={months()}>
                                {month => (
                                  <Calendar.TableCell value={month().value}>
                                    <Calendar.TableCellTrigger>
                                      {month().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="year">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getYearsGrid({ columns: 4 })}>
                          {years => (
                            <Calendar.TableRow>
                              <Index each={years()}>
                                {year => (
                                  <Calendar.TableCell value={year().value}>
                                    <Calendar.TableCellTrigger>
                                      {year().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
          </Calendar.Content>
        </Calendar.Positioner>
      </Portal>
    </Calendar.Root>
  )
}
<script module lang="ts">
  import type { UsePresenceProps } from '@destyler-ui/svelte'

  export interface BasicProps extends UsePresenceProps {}
</script>

<script lang="ts">
  import { Calendar } from '@destyler-ui/svelte'

  let { ...props }: BasicProps = $props()
</script>

{#snippet calendarViews()}
  <Calendar.YearSelect />
  <Calendar.MonthSelect />
  <Calendar.View view="day">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl>
          <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
          <Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
          <Calendar.NextTrigger>Next</Calendar.NextTrigger>
        </Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead><Calendar.TableRow>
            {#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}
          </Calendar.TableRow></Calendar.TableHead>
          <Calendar.TableBody>
            {#each calendar().weeks as week}<Calendar.TableRow>
              {#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
            </Calendar.TableRow>{/each}
          </Calendar.TableBody>
        </Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>
          {#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>
            {#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
          </Calendar.TableRow>{/each}
        </Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>
          {#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>
            {#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
          </Calendar.TableRow>{/each}
        </Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
{/snippet}

<Calendar.Root {...props}>
  <Calendar.Label>Label</Calendar.Label>
  <Calendar.Control>
    <Calendar.Input />
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.Trigger>{calendar().open ? 'Close calendar' : 'Open calendar'}</Calendar.Trigger>
      {/snippet}
    </Calendar.Context>
    <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
  </Calendar.Control>
  <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>
  <Calendar.Positioner data-testid="positioner">
    <Calendar.Content>
      {@render calendarViews()}
    </Calendar.Content>
  </Calendar.Positioner>
</Calendar.Root>
<script setup lang="ts">
import { Calendar } from '@destyler-ui/vue'
</script>
<template>
<Calendar.Root>
<Calendar.Label />
<Calendar.Control>
<Calendar.PrevTrigger />
<Calendar.ViewTrigger />
<Calendar.NextTrigger />
</Calendar.Control>
<Calendar.Content>
<Calendar.View>
<Calendar.ViewControl>
<Calendar.PrevTrigger />
<Calendar.ViewTrigger />
<Calendar.NextTrigger />
</Calendar.ViewControl>
<Calendar.RangeText />
<Calendar.Table>
<Calendar.TableHead>
<Calendar.TableRow>
<Calendar.TableHeader />
</Calendar.TableRow>
</Calendar.TableHead>
<Calendar.TableBody>
<Calendar.TableRow>
<Calendar.TableCell>
<Calendar.TableCellTrigger />
</Calendar.TableCell>
</Calendar.TableRow>
</Calendar.TableBody>
</Calendar.Table>
</Calendar.View>
</Calendar.Content>
</Calendar.Root>
</template>
import { Calendar } from '@destyler-ui/react'
export default function Basic() {
return (
<Calendar.Root>
<Calendar.Label />
<Calendar.Control>
<Calendar.PrevTrigger />
<Calendar.ViewTrigger />
<Calendar.NextTrigger />
</Calendar.Control>
<Calendar.Content>
<Calendar.View>
<Calendar.ViewControl>
<Calendar.PrevTrigger />
<Calendar.ViewTrigger />
<Calendar.NextTrigger />
</Calendar.ViewControl>
<Calendar.RangeText />
<Calendar.Table>
<Calendar.TableHead>
<Calendar.TableRow>
<Calendar.TableHeader />
</Calendar.TableRow>
</Calendar.TableHead>
<Calendar.TableBody>
<Calendar.TableRow>
<Calendar.TableCell>
<Calendar.TableCellTrigger />
</Calendar.TableCell>
</Calendar.TableRow>
</Calendar.TableBody>
</Calendar.Table>
</Calendar.View>
</Calendar.Content>
</Calendar.Root>
)
}
import { Calendar } from '@destyler-ui/solid'
import { Index } from 'solid-js'
export default function Basic() {
return (
<Calendar.Root>
<Calendar.Label>Date</Calendar.Label>
<Calendar.Control>
<Calendar.Trigger>Choose date</Calendar.Trigger>
</Calendar.Control>
<Calendar.Positioner>
<Calendar.Content>
<Calendar.View view="day">
<Calendar.Context>
{api => (
<>
<Calendar.ViewControl>
<Calendar.PrevTrigger>Previous</Calendar.PrevTrigger>
<Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
<Calendar.NextTrigger>Next</Calendar.NextTrigger>
</Calendar.ViewControl>
<Calendar.Table>
<Calendar.TableHead>
<Calendar.TableRow>
<Index each={api().weekDays}>
{weekDay => <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>}
</Index>
</Calendar.TableRow>
</Calendar.TableHead>
<Calendar.TableBody>
<Index each={api().weeks}>
{week => (
<Calendar.TableRow>
<Index each={week()}>
{day => (
<Calendar.TableCell value={day()}>
<Calendar.TableCellTrigger>{day().day}</Calendar.TableCellTrigger>
</Calendar.TableCell>
)}
</Index>
</Calendar.TableRow>
)}
</Index>
</Calendar.TableBody>
</Calendar.Table>
</>
)}
</Calendar.Context>
</Calendar.View>
</Calendar.Content>
</Calendar.Positioner>
</Calendar.Root>
)
}
<script module lang="ts">
import type { UsePresenceProps } from '@destyler-ui/svelte/presence'
export interface BasicProps extends UsePresenceProps {}
</script>
<script lang="ts">
import { Calendar } from '@destyler-ui/svelte'
let { ...props }: BasicProps = $props()
</script>
{#snippet calendarViews()}
<Calendar.YearSelect />
<Calendar.MonthSelect />
<Calendar.View view="day">
<Calendar.Context>
{#snippet render(calendar)}
<Calendar.ViewControl>
<Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
<Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
<Calendar.NextTrigger>Next</Calendar.NextTrigger>
</Calendar.ViewControl>
<Calendar.Table>
<Calendar.TableHead><Calendar.TableRow>
{#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}
</Calendar.TableRow></Calendar.TableHead>
<Calendar.TableBody>
{#each calendar().weeks as week}<Calendar.TableRow>
{#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
</Calendar.TableRow>{/each}
</Calendar.TableBody>
</Calendar.Table>
{/snippet}
</Calendar.Context>
</Calendar.View>
<Calendar.View view="month">
<Calendar.Context>
{#snippet render(calendar)}
<Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
<Calendar.Table><Calendar.TableBody>
{#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>
{#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
</Calendar.TableRow>{/each}
</Calendar.TableBody></Calendar.Table>
{/snippet}
</Calendar.Context>
</Calendar.View>
<Calendar.View view="year">
<Calendar.Context>
{#snippet render(calendar)}
<Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
<Calendar.Table><Calendar.TableBody>
{#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>
{#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
</Calendar.TableRow>{/each}
</Calendar.TableBody></Calendar.Table>
{/snippet}
</Calendar.Context>
</Calendar.View>
{/snippet}
<Calendar.Root {...props}>
<Calendar.Label>Label</Calendar.Label>
<Calendar.Control>
<Calendar.Input />
<Calendar.Context>
{#snippet render(calendar)}
<Calendar.Trigger>{calendar().open ? 'Close calendar' : 'Open calendar'}</Calendar.Trigger>
{/snippet}
</Calendar.Context>
<Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
</Calendar.Control>
<Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>
<Calendar.Positioner data-testid="positioner">
<Calendar.Content>
{@render calendarViews()}
</Calendar.Content>
</Calendar.Positioner>
</Calendar.Root>
<script setup lang="ts">
import { Calendar } from '@destyler-ui/vue'
</script>

<template>
  <Calendar.Root>
    <Calendar.Label>Label</Calendar.Label>
    <Calendar.Control>
      <Calendar.Input />
      <Calendar.Trigger />
      <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      <Calendar.MonthSelect />
      <Calendar.YearSelect />
    </Calendar.Control>
    <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

    <Teleport to="body">
      <Calendar.Positioner class="calendar-basic" data-testid="positioner">
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                      {{ weekDay.short }}
                    </Calendar.TableHeader>
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
                    <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                      <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow
                    v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })"
                    :key="id"
                  >
                    <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                      <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
                    <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                      <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Teleport>

  </Calendar.Root>
</template>
import type { UsePresenceProps } from '@destyler-ui/react'

import { Calendar } from '@destyler-ui/react'

export interface BasicProps extends UsePresenceProps {}

export function Basic(props: BasicProps) {
  return (
    <Calendar.Root {...props}>
      <Calendar.Label>Label</Calendar.Label>
      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Context>
          {api => <Calendar.Trigger>{api.open ? 'Close calendar' : 'Open calendar'}</Calendar.Trigger>}
        </Calendar.Context>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>
      <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

      <Calendar.Positioner data-testid="positioner">
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableHead>
                      <Calendar.TableRow>
                        {api.weekDays.map((weekDay, id) => (
                          <Calendar.TableHeader key={id}>
                            {weekDay.short}
                          </Calendar.TableHeader>
                        ))}
                      </Calendar.TableRow>
                    </Calendar.TableHead>
                    <Calendar.TableBody>
                      {api.weeks.map((week, id) => (
                        <Calendar.TableRow key={id}>
                          {week.map((day, id) => (
                            <Calendar.TableCell key={id} value={day}>
                              <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                        <Calendar.TableRow key={id}>
                          {months.map((month, id) => (
                            <Calendar.TableCell key={id} value={month.value}>
                              <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                        <Calendar.TableRow key={id}>
                          {years.map((year, id) => (
                            <Calendar.TableCell key={id} value={year.value}>
                              <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Calendar.Root>
  )
}
import { Calendar } from '@destyler-ui/solid/calendar'
import { Index, Portal } from 'solid-js/web'

export function Basic() {
  return (
    <Calendar.Root>
      <Calendar.Label>Label</Calendar.Label>

      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>

      <Portal>
        <Calendar.Positioner>
          <Calendar.Content>
            <Calendar.YearSelect />
            <Calendar.MonthSelect />
            <Calendar.View view="day">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableHead>
                        <Calendar.TableRow>
                          <Index each={context().weekDays}>
                            {weekDay => (
                              <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                            )}
                          </Index>
                        </Calendar.TableRow>
                      </Calendar.TableHead>

                      <Calendar.TableBody>
                        <Index each={context().weeks}>
                          {week => (
                            <Calendar.TableRow>
                              <Index each={week()}>
                                {day => (
                                  <Calendar.TableCell value={day()}>
                                    <Calendar.TableCellTrigger>
                                      {day().day}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="month">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getMonthsGrid({ columns: 4, format: 'short' })}>
                          {months => (
                            <Calendar.TableRow>
                              <Index each={months()}>
                                {month => (
                                  <Calendar.TableCell value={month().value}>
                                    <Calendar.TableCellTrigger>
                                      {month().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="year">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getYearsGrid({ columns: 4 })}>
                          {years => (
                            <Calendar.TableRow>
                              <Index each={years()}>
                                {year => (
                                  <Calendar.TableCell value={year().value}>
                                    <Calendar.TableCellTrigger>
                                      {year().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
          </Calendar.Content>
        </Calendar.Positioner>
      </Portal>
    </Calendar.Root>
  )
}
<script module lang="ts">
  import type { UsePresenceProps } from '@destyler-ui/svelte'

  export interface BasicProps extends UsePresenceProps {}
</script>

<script lang="ts">
  import { Calendar } from '@destyler-ui/svelte'

  let { ...props }: BasicProps = $props()
</script>

{#snippet calendarViews()}
  <Calendar.YearSelect />
  <Calendar.MonthSelect />
  <Calendar.View view="day">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl>
          <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
          <Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
          <Calendar.NextTrigger>Next</Calendar.NextTrigger>
        </Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead><Calendar.TableRow>
            {#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}
          </Calendar.TableRow></Calendar.TableHead>
          <Calendar.TableBody>
            {#each calendar().weeks as week}<Calendar.TableRow>
              {#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
            </Calendar.TableRow>{/each}
          </Calendar.TableBody>
        </Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>
          {#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>
            {#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
          </Calendar.TableRow>{/each}
        </Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>
          {#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>
            {#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}
          </Calendar.TableRow>{/each}
        </Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
{/snippet}

<Calendar.Root {...props}>
  <Calendar.Label>Label</Calendar.Label>
  <Calendar.Control>
    <Calendar.Input />
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.Trigger>{calendar().open ? 'Close calendar' : 'Open calendar'}</Calendar.Trigger>
      {/snippet}
    </Calendar.Context>
    <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
  </Calendar.Control>
  <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>
  <Calendar.Positioner data-testid="positioner">
    <Calendar.Content>
      {@render calendarViews()}
    </Calendar.Content>
  </Calendar.Positioner>
</Calendar.Root>

Use v-model / controlled state to manage the selected date programmatically.

<script setup lang="ts">
import { Calendar, parseDate } from '@destyler-ui/vue'
import { type Ref, ref } from 'vue'

const value = ref([parseDate('2022-01-01')]) as Ref<Calendar.DateValue[]>
</script>

<template>
  <Calendar.Root v-model="value">
    <Calendar.Label>Label</Calendar.Label>
    <Calendar.Control>
      <Calendar.Input />
      <Calendar.Trigger />
      <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
    </Calendar.Control>

    <Teleport to="body">
      <Calendar.Positioner class="calendar-controlled" data-testid="positioner">
        <Calendar.Content>
          <Calendar.View view="day">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                      {{ weekDay.short }}
                    </Calendar.TableHeader>
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
                    <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                      <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow
                    v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })"
                    :key="id"
                  >
                    <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                      <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
                    <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                      <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Teleport>

  </Calendar.Root>
</template>
import type { DateValue } from '@destyler-ui/react'
import { useState } from 'react'
import { Calendar, parseDate } from '@destyler-ui/react'

export function Controlled() {
  const [value, setValue] = useState<DateValue[]>([parseDate('2022-01-01')])

  return (
    <Calendar.Root
      value={value}
      onValueChange={details => setValue(details.value)}
    >
      <Calendar.Label>Label</Calendar.Label>
      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>
      <Calendar.Positioner>
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableHead>
                      <Calendar.TableRow>
                        {api.weekDays.map((weekDay, id) => (
                          <Calendar.TableHeader key={id}>
                            {weekDay.short}
                          </Calendar.TableHeader>
                        ))}
                      </Calendar.TableRow>
                    </Calendar.TableHead>
                    <Calendar.TableBody>
                      {api.weeks.map((week, id) => (
                        <Calendar.TableRow key={id}>
                          {week.map((day, id) => (
                            <Calendar.TableCell key={id} value={day}>
                              <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                        <Calendar.TableRow key={id}>
                          {months.map((month, id) => (
                            <Calendar.TableCell key={id} value={month.value}>
                              <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                        <Calendar.TableRow key={id}>
                          {years.map((year, id) => (
                            <Calendar.TableCell key={id} value={year.value}>
                              <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Calendar.Root>
  )
}
import { Calendar, parseDate } from '@destyler-ui/solid/calendar'
import { createSignal } from 'solid-js'
import { Index, Portal } from 'solid-js/web'

export function Controlled() {
  const [value, setValue] = createSignal<Calendar.DateValue[]>([parseDate('2022-01-01')])

  return (
    <Calendar.Root value={value()} onValueChange={e => setValue(e.value)}>
      <Calendar.Label>Label</Calendar.Label>

      <Calendar.Control>
        <Calendar.Input />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>

      <Portal>
        <Calendar.Positioner>
          <Calendar.Content>
            <Calendar.YearSelect />
            <Calendar.MonthSelect />
            <Calendar.View view="day">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableHead>
                        <Calendar.TableRow>
                          <Index each={context().weekDays}>
                            {weekDay => (
                              <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                            )}
                          </Index>
                        </Calendar.TableRow>
                      </Calendar.TableHead>

                      <Calendar.TableBody>
                        <Index each={context().weeks}>
                          {week => (
                            <Calendar.TableRow>
                              <Index each={week()}>
                                {day => (
                                  <Calendar.TableCell value={day()}>
                                    <Calendar.TableCellTrigger>
                                      {day().day}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="month">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getMonthsGrid({ columns: 4, format: 'short' })}>
                          {months => (
                            <Calendar.TableRow>
                              <Index each={months()}>
                                {month => (
                                  <Calendar.TableCell value={month().value}>
                                    <Calendar.TableCellTrigger>
                                      {month().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>

            <Calendar.View view="year">
              <Calendar.Context>
                {context => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>

                    <Calendar.Table>
                      <Calendar.TableBody>
                        <Index each={context().getYearsGrid({ columns: 4 })}>
                          {years => (
                            <Calendar.TableRow>
                              <Index each={years()}>
                                {year => (
                                  <Calendar.TableCell value={year().value}>
                                    <Calendar.TableCellTrigger>
                                      {year().label}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
          </Calendar.Content>
        </Calendar.Positioner>
      </Portal>
    </Calendar.Root>
  )
}
<script lang="ts">
  import type { DateValue } from '@destyler-ui/svelte'
  import { Calendar, parseDate } from '@destyler-ui/svelte'

  let value = $state<DateValue[]>([parseDate('2022-01-01')])
</script>

{#snippet calendarViews()}
  <Calendar.YearSelect />
  <Calendar.MonthSelect />
  <Calendar.View view="day">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead><Calendar.TableRow>{#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}</Calendar.TableRow></Calendar.TableHead>
          <Calendar.TableBody>{#each calendar().weeks as week}<Calendar.TableRow>{#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody>
        </Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>{#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>{#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
{/snippet}

<Calendar.Root bind:value>
  <Calendar.Label>Label</Calendar.Label>
  <Calendar.Control>
    <Calendar.Input />
    <Calendar.Trigger>📅</Calendar.Trigger>
    <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
  </Calendar.Control>
  <Calendar.Positioner>
    <Calendar.Content>
      {@render calendarViews()}
    </Calendar.Content>
  </Calendar.Positioner>
</Calendar.Root>

Select a date range with start and end dates.

<script setup lang="ts">
import { Calendar } from '@destyler-ui/vue'
</script>

<template>
  <Calendar.Root selectionMode="range">
    <Calendar.Label>Label</Calendar.Label>
    <Calendar.Control>
      <Calendar.Input :index="0" />
      <Calendar.Input :index="1" />
      <Calendar.Trigger />
      <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
    </Calendar.Control>
    <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

    <Teleport to="body">
      <Calendar.Positioner class="calendar-range" data-testid="positioner">
        <Calendar.Content>
          <Calendar.View view="day">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                      {{ weekDay.short }}
                    </Calendar.TableHeader>
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
                    <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                      <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow
                    v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })"
                    :key="id"
                  >
                    <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                      <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
                    <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                      <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Teleport>

  </Calendar.Root>
</template>
import { Calendar } from '@destyler-ui/react'

export function Range() {
  return (
    <Calendar.Root selectionMode="range">
      <Calendar.Label>Label</Calendar.Label>
      <Calendar.Control>
        <Calendar.Input index={0} />
        <Calendar.Input index={1} />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>
      <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>
      <Calendar.Positioner>
        <Calendar.Content>
          <Calendar.YearSelect />
          <Calendar.MonthSelect />
          <Calendar.View view="day">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableHead>
                      <Calendar.TableRow>
                        {api.weekDays.map((weekDay, id) => (
                          <Calendar.TableHeader key={id}>
                            {weekDay.short}
                          </Calendar.TableHeader>
                        ))}
                      </Calendar.TableRow>
                    </Calendar.TableHead>
                    <Calendar.TableBody>
                      {api.weeks.map((week, id) => (
                        <Calendar.TableRow key={id}>
                          {week.map((day, id) => (
                            <Calendar.TableCell key={id} value={day}>
                              <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                        <Calendar.TableRow key={id}>
                          {months.map((month, id) => (
                            <Calendar.TableCell key={id} value={month.value}>
                              <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context>
              {api => (
                <>
                  <Calendar.ViewControl>
                    <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                    <Calendar.ViewTrigger>
                      <Calendar.RangeText />
                    </Calendar.ViewTrigger>
                    <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                  </Calendar.ViewControl>
                  <Calendar.Table>
                    <Calendar.TableBody>
                      {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                        <Calendar.TableRow key={id}>
                          {years.map((year, id) => (
                            <Calendar.TableCell key={id} value={year.value}>
                              <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          ))}
                        </Calendar.TableRow>
                      ))}
                    </Calendar.TableBody>
                  </Calendar.Table>
                </>
              )}
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Calendar.Root>
  )
}
import { Calendar } from '@destyler-ui/solid/calendar'
import { createMemo, Index } from 'solid-js'
import { Portal } from 'solid-js/web'

export function Range() {
  return (
    <Calendar.Root selectionMode="range" numOfMonths={2}>
      <Calendar.Label>Label</Calendar.Label>

      <Calendar.Control>
        <Calendar.Input index={0} />
        <Calendar.Input index={1} />
        <Calendar.Trigger>📅</Calendar.Trigger>
        <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
      </Calendar.Control>

      <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>

      <Portal>
        <Calendar.Positioner>
          <Calendar.Content>
            <Calendar.YearSelect />
            <Calendar.MonthSelect />

            <div style={{ display: 'flex', gap: '10px' }}>
              <Calendar.Context>
                {context => (
                  <Calendar.Table>
                    <Calendar.TableHead>
                      <Calendar.TableRow>
                        <Index each={context().weekDays}>
                          {weekDay => (
                            <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                          )}
                        </Index>
                      </Calendar.TableRow>
                    </Calendar.TableHead>

                    <Calendar.TableBody>
                      <Index each={context().weeks}>
                        {week => (
                          <Calendar.TableRow>
                            <Index each={week()}>
                              {day => (
                                <Calendar.TableCell value={day()}>
                                  <Calendar.TableCellTrigger>
                                    {day().day}
                                  </Calendar.TableCellTrigger>
                                </Calendar.TableCell>
                              )}
                            </Index>
                          </Calendar.TableRow>
                        )}
                      </Index>
                    </Calendar.TableBody>
                  </Calendar.Table>
                )}
              </Calendar.Context>

              <Calendar.Context>
                {(context) => {
                  const offset = createMemo(() => context().getOffset({ months: 1 }))
                  return (
                    <Calendar.Table>
                      <Calendar.TableHead>
                        <Calendar.TableRow>
                          <Index each={context().weekDays}>
                            {weekDay => (
                              <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                            )}
                          </Index>
                        </Calendar.TableRow>
                      </Calendar.TableHead>

                      <Calendar.TableBody>
                        <Index each={offset().weeks}>
                          {week => (
                            <Calendar.TableRow>
                              <Index each={week()}>
                                {day => (
                                  <Calendar.TableCell
                                    value={day()}
                                    visibleRange={offset().visibleRange}
                                  >
                                    <Calendar.TableCellTrigger>
                                      {day().day}
                                    </Calendar.TableCellTrigger>
                                  </Calendar.TableCell>
                                )}
                              </Index>
                            </Calendar.TableRow>
                          )}
                        </Index>
                      </Calendar.TableBody>
                    </Calendar.Table>
                  )
                }}
              </Calendar.Context>
            </div>
          </Calendar.Content>
        </Calendar.Positioner>
      </Portal>
    </Calendar.Root>
  )
}
<script lang="ts">
  import { Calendar } from '@destyler-ui/svelte'
</script>

{#snippet calendarViews()}
  <Calendar.YearSelect />
  <Calendar.MonthSelect />
  <Calendar.View view="day">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead><Calendar.TableRow>{#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}</Calendar.TableRow></Calendar.TableHead>
          <Calendar.TableBody>{#each calendar().weeks as week}<Calendar.TableRow>{#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody>
        </Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>{#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>{#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
{/snippet}

<Calendar.Root selectionMode="range">
  <Calendar.Label>Label</Calendar.Label>
  <Calendar.Control>
    <Calendar.Input index={0} />
    <Calendar.Input index={1} />
    <Calendar.Trigger>📅</Calendar.Trigger>
    <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
  </Calendar.Control>
  <Calendar.PresetTrigger value="last7Days">Last 7 days</Calendar.PresetTrigger>
  <Calendar.Positioner>
    <Calendar.Content>
      {@render calendarViews()}
    </Calendar.Content>
  </Calendar.Positioner>
</Calendar.Root>

Display the calendar inline without a popover.

<script setup lang="ts">
import { Calendar } from '@destyler-ui/vue'
</script>

<template>
  <Calendar.Root open>
    <Calendar.View view="day">
      <Calendar.Context v-slot="api">
        <Calendar.ViewControl>
          <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
          <Calendar.ViewTrigger>
            <Calendar.RangeText />
          </Calendar.ViewTrigger>
          <Calendar.NextTrigger>Next</Calendar.NextTrigger>
        </Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead>
            <Calendar.TableRow>
              <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                {{ weekDay.short }}
              </Calendar.TableHeader>
            </Calendar.TableRow>
          </Calendar.TableHead>
          <Calendar.TableBody>
            <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
              <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
              </Calendar.TableCell>
            </Calendar.TableRow>
          </Calendar.TableBody>
        </Calendar.Table>
      </Calendar.Context>
    </Calendar.View>
    <Calendar.View view="month">
      <Calendar.Context v-slot="api">
        <Calendar.ViewControl>
          <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
          <Calendar.ViewTrigger>
            <Calendar.RangeText />
          </Calendar.ViewTrigger>
          <Calendar.NextTrigger>Next</Calendar.NextTrigger>
        </Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableBody>
            <Calendar.TableRow v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })" :key="id">
              <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
              </Calendar.TableCell>
            </Calendar.TableRow>
          </Calendar.TableBody>
        </Calendar.Table>
      </Calendar.Context>
    </Calendar.View>
    <Calendar.View view="year">
      <Calendar.Context v-slot="api">
        <Calendar.ViewControl>
          <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
          <Calendar.ViewTrigger>
            <Calendar.RangeText />
          </Calendar.ViewTrigger>
          <Calendar.NextTrigger>Next</Calendar.NextTrigger>
        </Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableBody>
            <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
              <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
              </Calendar.TableCell>
            </Calendar.TableRow>
          </Calendar.TableBody>
        </Calendar.Table>
      </Calendar.Context>
    </Calendar.View>
  </Calendar.Root>
</template>
import { Calendar } from '@destyler-ui/react'

export function Standalone() {
  return (
    <Calendar.Root open>
      <Calendar.View view="day">
        <Calendar.Context>
          {api => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    {api.weekDays.map((weekDay, id) => (
                      <Calendar.TableHeader key={id}>
                        {weekDay.short}
                      </Calendar.TableHeader>
                    ))}
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  {api.weeks.map((week, id) => (
                    <Calendar.TableRow key={id}>
                      {week.map((day, id) => (
                        <Calendar.TableCell key={id} value={day}>
                          <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                        </Calendar.TableCell>
                      ))}
                    </Calendar.TableRow>
                  ))}
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>
      <Calendar.View view="month">
        <Calendar.Context>
          {api => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                    <Calendar.TableRow key={id}>
                      {months.map((month, id) => (
                        <Calendar.TableCell key={id} value={month.value}>
                          <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                        </Calendar.TableCell>
                      ))}
                    </Calendar.TableRow>
                  ))}
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>
      <Calendar.View view="year">
        <Calendar.Context>
          {api => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                    <Calendar.TableRow key={id}>
                      {years.map((year, id) => (
                        <Calendar.TableCell key={id} value={year.value}>
                          <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                        </Calendar.TableCell>
                      ))}
                    </Calendar.TableRow>
                  ))}
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>
    </Calendar.Root>
  )
}
import { Calendar } from '@destyler-ui/solid/calendar'
import { Index } from 'solid-js'

export function Standalone() {
  return (
    <Calendar.Root open>
      <Calendar.View view="day">
        <Calendar.Context>
          {context => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>

              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Index each={context().weekDays}>
                      {weekDay => (
                        <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                      )}
                    </Index>
                  </Calendar.TableRow>
                </Calendar.TableHead>

                <Calendar.TableBody>
                  <Index each={context().weeks}>
                    {week => (
                      <Calendar.TableRow>
                        <Index each={week()}>
                          {day => (
                            <Calendar.TableCell value={day()}>
                              <Calendar.TableCellTrigger>{day().day}</Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          )}
                        </Index>
                      </Calendar.TableRow>
                    )}
                  </Index>
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>

      <Calendar.View view="month">
        <Calendar.Context>
          {context => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>

              <Calendar.Table>
                <Calendar.TableBody>
                  <Index each={context().getMonthsGrid({ columns: 4, format: 'short' })}>
                    {months => (
                      <Calendar.TableRow>
                        <Index each={months()}>
                          {month => (
                            <Calendar.TableCell value={month().value}>
                              <Calendar.TableCellTrigger>
                                {month().label}
                              </Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          )}
                        </Index>
                      </Calendar.TableRow>
                    )}
                  </Index>
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>

      <Calendar.View view="year">
        <Calendar.Context>
          {context => (
            <>
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>

              <Calendar.Table>
                <Calendar.TableBody>
                  <Index each={context().getYearsGrid({ columns: 4 })}>
                    {years => (
                      <Calendar.TableRow>
                        <Index each={years()}>
                          {year => (
                            <Calendar.TableCell value={year().value}>
                              <Calendar.TableCellTrigger>
                                {year().label}
                              </Calendar.TableCellTrigger>
                            </Calendar.TableCell>
                          )}
                        </Index>
                      </Calendar.TableRow>
                    )}
                  </Index>
                </Calendar.TableBody>
              </Calendar.Table>
            </>
          )}
        </Calendar.Context>
      </Calendar.View>
    </Calendar.Root>
  )
}
<script lang="ts">
  import { Calendar } from '@destyler-ui/svelte'
</script>

<Calendar.Root>
  <Calendar.View view="day">
      <Calendar.Context>
        {#snippet render(calendar)}
          <Calendar.ViewControl>
            <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
            <Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
            <Calendar.NextTrigger>Next</Calendar.NextTrigger>
          </Calendar.ViewControl>
          <Calendar.Table>
            <Calendar.TableHead>
              <Calendar.TableRow>
                {#each calendar().weekDays as weekDay}
                  <Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>
                {/each}
              </Calendar.TableRow>
            </Calendar.TableHead>
            <Calendar.TableBody>
              {#each calendar().weeks as week}
                <Calendar.TableRow>
                  {#each week as day}
                    <Calendar.TableCell value={day}>
                      <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  {/each}
                </Calendar.TableRow>
              {/each}
            </Calendar.TableBody>
          </Calendar.Table>
        {/snippet}
      </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
      <Calendar.Context>
        {#snippet render(calendar)}
          <Calendar.ViewControl>
            <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
            <Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
            <Calendar.NextTrigger>Next</Calendar.NextTrigger>
          </Calendar.ViewControl>
          <Calendar.Table>
            <Calendar.TableBody>
              {#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}
                <Calendar.TableRow>
                  {#each months as month}
                    <Calendar.TableCell value={month.value}>
                      <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  {/each}
                </Calendar.TableRow>
              {/each}
            </Calendar.TableBody>
          </Calendar.Table>
        {/snippet}
      </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
      <Calendar.Context>
        {#snippet render(calendar)}
          <Calendar.ViewControl>
            <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
            <Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger>
            <Calendar.NextTrigger>Next</Calendar.NextTrigger>
          </Calendar.ViewControl>
          <Calendar.Table>
            <Calendar.TableBody>
              {#each calendar().getYearsGrid({ columns: 4 }) as years}
                <Calendar.TableRow>
                  {#each years as year}
                    <Calendar.TableCell value={year.value}>
                      <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  {/each}
                </Calendar.TableRow>
              {/each}
            </Calendar.TableBody>
          </Calendar.Table>
        {/snippet}
      </Calendar.Context>
  </Calendar.View>
</Calendar.Root>
<script setup lang="ts">
import { Calendar, useCalendar } from '@destyler-ui/vue'

const datePicker = useCalendar()
</script>

<template>
  <button @click="datePicker.clearValue()">Clear</button>

  <Calendar.RootProvider :value="datePicker">
    <Calendar.Label>Label</Calendar.Label>
    <Calendar.Control>
      <Calendar.Input />
      <Calendar.Trigger />
      <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
    </Calendar.Control>

    <Teleport to="body">
      <Calendar.Positioner class="calendar-rootprovider" data-testid="positioner">
        <Calendar.Content>
          <Calendar.View view="day">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableHead>
                  <Calendar.TableRow>
                    <Calendar.TableHeader v-for="(weekDay, id) in api.weekDays" :key="id">
                      {{ weekDay.short }}
                    </Calendar.TableHeader>
                  </Calendar.TableRow>
                </Calendar.TableHead>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(week, id) in api.weeks" :key="id">
                    <Calendar.TableCell v-for="(day, id) in week" :key="id" :value="day">
                      <Calendar.TableCellTrigger>{{ day.day }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="month">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow
                    v-for="(months, id) in api.getMonthsGrid({ columns: 4, format: 'short' })"
                    :key="id"
                  >
                    <Calendar.TableCell v-for="(month, id) in months" :key="id" :value="month.value">
                      <Calendar.TableCellTrigger>{{ month.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
          <Calendar.View view="year">
            <Calendar.Context v-slot="api">
              <Calendar.ViewControl>
                <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                <Calendar.ViewTrigger>
                  <Calendar.RangeText />
                </Calendar.ViewTrigger>
                <Calendar.NextTrigger>Next</Calendar.NextTrigger>
              </Calendar.ViewControl>
              <Calendar.Table>
                <Calendar.TableBody>
                  <Calendar.TableRow v-for="(years, id) in api.getYearsGrid({ columns: 4 })" :key="id">
                    <Calendar.TableCell v-for="(year, id) in years" :key="id" :value="year.value">
                      <Calendar.TableCellTrigger>{{ year.label }}</Calendar.TableCellTrigger>
                    </Calendar.TableCell>
                  </Calendar.TableRow>
                </Calendar.TableBody>
              </Calendar.Table>
            </Calendar.Context>
          </Calendar.View>
        </Calendar.Content>
      </Calendar.Positioner>
    </Teleport>

  </Calendar.RootProvider>
</template>
import { Calendar, useCalendar } from '@destyler-ui/react'

export function RootProvider() {
  const datePicker = useCalendar()

  return (
    <>
      <button onClick={() => datePicker.clearValue()}>Clear</button>

      <Calendar.RootProvider value={datePicker}>
        <Calendar.Label>Label</Calendar.Label>
        <Calendar.Control>
          <Calendar.Input />
          <Calendar.Trigger>📅</Calendar.Trigger>
          <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
        </Calendar.Control>
        <Calendar.Positioner>
          <Calendar.Content>
            <Calendar.YearSelect />
            <Calendar.MonthSelect />
            <Calendar.View view="day">
              <Calendar.Context>
                {api => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>
                    <Calendar.Table>
                      <Calendar.TableHead>
                        <Calendar.TableRow>
                          {api.weekDays.map((weekDay, id) => (
                            <Calendar.TableHeader key={id}>
                              {weekDay.short}
                            </Calendar.TableHeader>
                          ))}
                        </Calendar.TableRow>
                      </Calendar.TableHead>
                      <Calendar.TableBody>
                        {api.weeks.map((week, id) => (
                          <Calendar.TableRow key={id}>
                            {week.map((day, id) => (
                              <Calendar.TableCell key={id} value={day}>
                                <Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger>
                              </Calendar.TableCell>
                            ))}
                          </Calendar.TableRow>
                        ))}
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
            <Calendar.View view="month">
              <Calendar.Context>
                {api => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>
                    <Calendar.Table>
                      <Calendar.TableBody>
                        {api.getMonthsGrid({ columns: 4, format: 'short' }).map((months, id) => (
                          <Calendar.TableRow key={id}>
                            {months.map((month, id) => (
                              <Calendar.TableCell key={id} value={month.value}>
                                <Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger>
                              </Calendar.TableCell>
                            ))}
                          </Calendar.TableRow>
                        ))}
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
            <Calendar.View view="year">
              <Calendar.Context>
                {api => (
                  <>
                    <Calendar.ViewControl>
                      <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                      <Calendar.ViewTrigger>
                        <Calendar.RangeText />
                      </Calendar.ViewTrigger>
                      <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                    </Calendar.ViewControl>
                    <Calendar.Table>
                      <Calendar.TableBody>
                        {api.getYearsGrid({ columns: 4 }).map((years, id) => (
                          <Calendar.TableRow key={id}>
                            {years.map((year, id) => (
                              <Calendar.TableCell key={id} value={year.value}>
                                <Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger>
                              </Calendar.TableCell>
                            ))}
                          </Calendar.TableRow>
                        ))}
                      </Calendar.TableBody>
                    </Calendar.Table>
                  </>
                )}
              </Calendar.Context>
            </Calendar.View>
          </Calendar.Content>
        </Calendar.Positioner>
      </Calendar.RootProvider>
    </>
  )
}
import { Calendar, useCalendar } from '@destyler-ui/solid/calendar'
import { Index, Portal } from 'solid-js/web'

export function RootProvider() {
  const calendar = useCalendar()

  return (
    <>
      <button onClick={() => calendar().clearValue()}>Clear</button>

      <Calendar.RootProvider value={calendar}>
        <Calendar.Label>Label</Calendar.Label>

        <Calendar.Control>
          <Calendar.Input />
          <Calendar.Trigger>📅</Calendar.Trigger>
          <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
        </Calendar.Control>

        <Portal>
          <Calendar.Positioner>
            <Calendar.Content>
              <Calendar.YearSelect />
              <Calendar.MonthSelect />
              <Calendar.View view="day">
                <Calendar.Context>
                  {context => (
                    <>
                      <Calendar.ViewControl>
                        <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                        <Calendar.ViewTrigger>
                          <Calendar.RangeText />
                        </Calendar.ViewTrigger>
                        <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                      </Calendar.ViewControl>

                      <Calendar.Table>
                        <Calendar.TableHead>
                          <Calendar.TableRow>
                            <Index each={context().weekDays}>
                              {weekDay => (
                                <Calendar.TableHeader>{weekDay().short}</Calendar.TableHeader>
                              )}
                            </Index>
                          </Calendar.TableRow>
                        </Calendar.TableHead>

                        <Calendar.TableBody>
                          <Index each={context().weeks}>
                            {week => (
                              <Calendar.TableRow>
                                <Index each={week()}>
                                  {day => (
                                    <Calendar.TableCell value={day()}>
                                      <Calendar.TableCellTrigger>
                                        {day().day}
                                      </Calendar.TableCellTrigger>
                                    </Calendar.TableCell>
                                  )}
                                </Index>
                              </Calendar.TableRow>
                            )}
                          </Index>
                        </Calendar.TableBody>
                      </Calendar.Table>
                    </>
                  )}
                </Calendar.Context>
              </Calendar.View>

              <Calendar.View view="month">
                <Calendar.Context>
                  {context => (
                    <>
                      <Calendar.ViewControl>
                        <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                        <Calendar.ViewTrigger>
                          <Calendar.RangeText />
                        </Calendar.ViewTrigger>
                        <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                      </Calendar.ViewControl>

                      <Calendar.Table>
                        <Calendar.TableBody>
                          <Index each={context().getMonthsGrid({ columns: 4, format: 'short' })}>
                            {months => (
                              <Calendar.TableRow>
                                <Index each={months()}>
                                  {month => (
                                    <Calendar.TableCell value={month().value}>
                                      <Calendar.TableCellTrigger>
                                        {month().label}
                                      </Calendar.TableCellTrigger>
                                    </Calendar.TableCell>
                                  )}
                                </Index>
                              </Calendar.TableRow>
                            )}
                          </Index>
                        </Calendar.TableBody>
                      </Calendar.Table>
                    </>
                  )}
                </Calendar.Context>
              </Calendar.View>

              <Calendar.View view="year">
                <Calendar.Context>
                  {context => (
                    <>
                      <Calendar.ViewControl>
                        <Calendar.PrevTrigger>Prev</Calendar.PrevTrigger>
                        <Calendar.ViewTrigger>
                          <Calendar.RangeText />
                        </Calendar.ViewTrigger>
                        <Calendar.NextTrigger>Next</Calendar.NextTrigger>
                      </Calendar.ViewControl>

                      <Calendar.Table>
                        <Calendar.TableBody>
                          <Index each={context().getYearsGrid({ columns: 4 })}>
                            {years => (
                              <Calendar.TableRow>
                                <Index each={years()}>
                                  {year => (
                                    <Calendar.TableCell value={year().value}>
                                      <Calendar.TableCellTrigger>
                                        {year().label}
                                      </Calendar.TableCellTrigger>
                                    </Calendar.TableCell>
                                  )}
                                </Index>
                              </Calendar.TableRow>
                            )}
                          </Index>
                        </Calendar.TableBody>
                      </Calendar.Table>
                    </>
                  )}
                </Calendar.Context>
              </Calendar.View>
            </Calendar.Content>
          </Calendar.Positioner>
        </Portal>
      </Calendar.RootProvider>
    </>
  )
}
<script lang="ts">
  import { Calendar, useCalendar } from '@destyler-ui/svelte'

  const id = $props.id()
  const calendar = useCalendar({ id })
</script>

{#snippet calendarViews()}
  <Calendar.YearSelect />
  <Calendar.MonthSelect />
  <Calendar.View view="day">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table>
          <Calendar.TableHead><Calendar.TableRow>{#each calendar().weekDays as weekDay}<Calendar.TableHeader>{weekDay.short}</Calendar.TableHeader>{/each}</Calendar.TableRow></Calendar.TableHead>
          <Calendar.TableBody>{#each calendar().weeks as week}<Calendar.TableRow>{#each week as day}<Calendar.TableCell value={day}><Calendar.TableCellTrigger>{day.day}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody>
        </Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="month">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getMonthsGrid({ columns: 4, format: 'short' }) as months}<Calendar.TableRow>{#each months as month}<Calendar.TableCell value={month.value}><Calendar.TableCellTrigger>{month.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
  <Calendar.View view="year">
    <Calendar.Context>
      {#snippet render(calendar)}
        <Calendar.ViewControl><Calendar.PrevTrigger>Prev</Calendar.PrevTrigger><Calendar.ViewTrigger><Calendar.RangeText /></Calendar.ViewTrigger><Calendar.NextTrigger>Next</Calendar.NextTrigger></Calendar.ViewControl>
        <Calendar.Table><Calendar.TableBody>{#each calendar().getYearsGrid({ columns: 4 }) as years}<Calendar.TableRow>{#each years as year}<Calendar.TableCell value={year.value}><Calendar.TableCellTrigger>{year.label}</Calendar.TableCellTrigger></Calendar.TableCell>{/each}</Calendar.TableRow>{/each}</Calendar.TableBody></Calendar.Table>
      {/snippet}
    </Calendar.Context>
  </Calendar.View>
{/snippet}

<button onclick={() => calendar().clearValue()}>Clear</button>
<Calendar.RootProvider value={calendar}>
  <Calendar.Label>Label</Calendar.Label>
  <Calendar.Control>
    <Calendar.Input />
    <Calendar.Trigger>📅</Calendar.Trigger>
    <Calendar.ClearTrigger>Clear</Calendar.ClearTrigger>
  </Calendar.Control>
  <Calendar.Positioner>
    <Calendar.Content>
      {@render calendarViews()}
    </Calendar.Content>
  </Calendar.Positioner>
</Calendar.RootProvider>

Root

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

closeOnSelecttruefalse | true

Whether the calendar should close after the date selection is complete. This is ignored when the selection mode is `multiple`.

defaultOpenfalse | true

The initial open state of the calendar when it is first rendered.

defaultValuecalendar.DateValue[]

The initial value of the calendar when it is first rendered.

defaultView"day" | "month" | "year"

The initial view of the calendar when it is first rendered.

disabledfalse | true

Whether the calendar is disabled.

fixedWeeksfalse | true

Whether the calendar should have a fixed number of weeks. This renders the calendar with 6 weeks instead of 5 or 6.

focusedValuecalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The focused date.

format(date: calendar.DateValue, details: calendar.LocaleDetails) => string

The format of the date to display in the input.

idstring

The unique identifier of the machine.

idsPartial<{ root: string; label: (index: number) => string; table: (id: string) => string; tableHeader: (id: string) => string; tableBody: (id: string) => string; tableRow: (id: string) => string; ... 11 more ...; positioner: string; }>

The ids of the elements in the calendar. Useful for composition.

isDateUnavailable(date: calendar.DateValue, locale: string) => boolean

Returns whether a date of the calendar is available.

lazyMountfalsefalse | true

Whether to enable lazy mounting

locale"en-US"string

The locale (BCP 47 language tag) to use when formatting the date.

maxcalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The maximum date that can be selected.

maxView"year""day" | "month" | "year"

The maximum view of the calendar

mincalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The minimum date that can be selected.

minView"day""day" | "month" | "year"

The minimum view of the calendar

modelValuecalendar.DateValue[]

The v-model value of the calendar

namestring

The `name` attribute of the input element.

numOfMonthsnumber

The number of months to display.

openfalse | true

Whether the calendar is open

placeholderstring

The placeholder text to display in the input.

positioningcalendar.PositioningOptions

The user provided options used to position the calendar content

readOnlyfalse | true

Whether the calendar is read-only.

selectionMode"single""single" | "multiple" | "range"

The selection mode of the calendar. - `single` - only one date can be selected - `multiple` - multiple dates can be selected - `range` - a range of dates can be selected

startOfWeeknumber

The first day of the week. `0` - Sunday `1` - Monday `2` - Tuesday `3` - Wednesday `4` - Thursday `5` - Friday `6` - Saturday

timeZone"UTC"string

The time zone to use

translationscalendar.IntlTranslations

The localized messages to use.

unmountOnExitfalsefalse | true

Whether to unmount on exit.

view"day""day" | "month" | "year"

The view of the calendar

EmitEvent
focusChange[details: FocusChangeDetails]

Function called when the focused date changes.

openChange[details: OpenChangeDetails]

Function called when the calendar opens or closes.

update:modelValue[value: DateValue[]]

The callback fired when the model value changes.

update:open[open: boolean]

The callback fired when the open state changes.

update:view[view: DateView]

The callback fired when the view changes.

valueChange[details: ValueChangeDetails]

Function called when the value changes.

viewChange[details: ViewChangeDetails]

Function called when the view changes.

ClearTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Content

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Context

No serializable props or emits are declared for this part.

Control

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Input

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

fixOnBlurtruefalse | true

Whether to fix the input value on blur.

indexnumber

The index of the input to focus.

Label

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

MonthSelect

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

NextTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Positioner

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

PresetTrigger

PropDefaultType
value*PresetTriggerValue
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

PrevTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

RangeText

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

RootProvider

PropDefaultType
value*MachineApi<PropTypes>
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

lazyMountfalsefalse | true

Whether to enable lazy mounting

unmountOnExitfalsefalse | true

Whether to unmount on exit.

Table

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber
idstring
view"day" | "month" | "year"

TableBody

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableCell

PropDefaultType
value*Reactive<number | DateValue>
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber
disabledfalse | true
visibleRangeRange<calendar.DateValue>

TableCellTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableHead

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableHeader

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableRow

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Trigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

View

PropDefaultType
view*DateView
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

ViewControl

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

ViewTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

YearSelect

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Root

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

closeOnSelecttruefalse | true

Whether the calendar should close after the date selection is complete. This is ignored when the selection mode is `multiple`.

defaultOpenfalse | true

The initial open state of the calendar when it is first rendered.

defaultValuecalendar.DateValue[]

The initial value of the calendar when it is first rendered.

defaultView"day" | "month" | "year"

The initial view of the calendar when it is first rendered.

disabledfalse | true

Whether the calendar is disabled.

fixedWeeksfalse | true

Whether the calendar should have a fixed number of weeks. This renders the calendar with 6 weeks instead of 5 or 6.

focusedValuecalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The focused date.

format(date: DateValue, details: calendar.LocaleDetails) => string

The format of the date to display in the input.

idstring

The unique identifier of the machine.

idsPartial<{ root: string; label: (index: number) => string; table: (id: string) => string; tableHeader: (id: string) => string; tableBody: (id: string) => string; tableRow: (id: string) => string; ... 11 more ...; positioner: string; }>

The ids of the elements in the date picker. Useful for composition.

immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

isDateUnavailable(date: DateValue, locale: string) => boolean

Returns whether a date of the calendar is available.

lazyMountfalsefalse | true

Whether to enable lazy mounting

locale"en-US"string

The locale (BCP 47 language tag) to use when formatting the date.

maxcalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The maximum date that can be selected.

maxView"year""day" | "month" | "year"

The maximum view of the calendar

mincalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The minimum date that can be selected.

minView"day""day" | "month" | "year"

The minimum view of the calendar

namestring

The `name` attribute of the input element.

numOfMonthsnumber

The number of months to display.

onExitComplete() => void

Function called when the animation ends in the closed state

onFocusChange(details: calendar.FocusChangeDetails) => void

Function called when the focused date changes.

onOpenChange(details: calendar.OpenChangeDetails) => void

Function called when the calendar opens or closes.

onValueChange(details: calendar.ValueChangeDetails) => void

Function called when the value changes.

onViewChange(details: ViewChangeDetails) => void

Function called when the view changes.

openfalse | true

Whether the calendar is open

parse(value: string, details: calendar.LocaleDetails) => DateValue | undefined

Function to parse the date from the input back to a DateValue.

placeholderstring

The placeholder text to display in the input.

positioningcalendar.PositioningOptions

The user provided options used to position the date picker content

presentfalse | true

Whether the node is present (controlled by the user)

readOnlyfalse | true

Whether the calendar is read-only.

selectionMode"single""multiple" | "single" | "range"

The selection mode of the calendar. - `single` - only one date can be selected - `multiple` - multiple dates can be selected - `range` - a range of dates can be selected

startOfWeeknumber

The first day of the week. `0` - Sunday `1` - Monday `2` - Tuesday `3` - Wednesday `4` - Thursday `5` - Friday `6` - Saturday

timeZone"UTC"string

The time zone to use

translationscalendar.IntlTranslations

The localized messages to use.

unmountOnExitfalsefalse | true

Whether to unmount on exit.

valuecalendar.DateValue[]

The selected date(s).

view"day""day" | "month" | "year"

The view of the calendar

ClearTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Content

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Context

PropDefaultType
children*(context: UseCalendarContext) => ReactNode

Control

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Input

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

fixOnBlurtruefalse | true

Whether to fix the input value on blur.

indexnumber

The index of the input to focus.

Label

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

MonthSelect

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

NextTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Positioner

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

PresetTrigger

PropDefaultType
value*PresetTriggerValue
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

PrevTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

RangeText

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

RootProvider

PropDefaultType
value*UseCalendarReturn
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

lazyMountfalsefalse | true

Whether to enable lazy mounting

onExitComplete() => void

Function called when the animation ends in the closed state

presentfalse | true

Whether the node is present (controlled by the user)

unmountOnExitfalsefalse | true

Whether to unmount on exit.

Table

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber

TableBody

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableCell

PropDefaultType
value*number | DateValue
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber
disabledfalse | true
visibleRangeRange<calendar.DateValue>

TableCellTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableHead

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableHeader

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

TableRow

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Trigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

View

PropDefaultType
view*DateView
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

ViewControl

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

ViewTrigger

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

YearSelect

PropDefaultType
asChildfalse | true

Use the provided child element as the default rendered element, combining their props and behavior.

Root

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

closeOnSelecttruefalse | true

Whether the calendar should close after the date selection is complete. This is ignored when the selection mode is `multiple`.

defaultOpenfalse | true

The initial open state of the date picker when it is first rendered.

defaultValuecalendar.DateValue[]

The initial value of the date picker when it is first rendered.

defaultView"day" | "month" | "year"

The initial view of the date picker when it is first rendered.

disabledfalse | true

Whether the calendar is disabled.

fixedWeeksfalse | true

Whether the calendar should have a fixed number of weeks. This renders the calendar with 6 weeks instead of 5 or 6.

focusedValuecalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The focused date.

format(date: DateValue, details: calendar.LocaleDetails) => string

The format of the date to display in the input.

idsPartial<{ root: string; label: (index: number) => string; table: (id: string) => string; tableHeader: (id: string) => string; tableBody: (id: string) => string; tableRow: (id: string) => string; ... 11 more ...; positioner: string; }>

The ids of the elements in the date picker. Useful for composition.

immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

isDateUnavailable(date: DateValue, locale: string) => boolean

Returns whether a date of the calendar is available.

lazyMountfalsefalse | true

Whether to enable lazy mounting

locale"en-US"string

The locale (BCP 47 language tag) to use when formatting the date.

maxcalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The maximum date that can be selected.

maxView"year""day" | "month" | "year"

The maximum view of the calendar

mincalendar.CalendarDate | calendar.CalendarDateTime | calendar.ZonedDateTime

The minimum date that can be selected.

minView"day""day" | "month" | "year"

The minimum view of the calendar

namestring

The `name` attribute of the input element.

numOfMonthsnumber

The number of months to display.

onExitComplete() => void

Function called when the animation ends in the closed state

onFocusChange(details: FocusChangeDetails) => void

Function called when the focused date changes.

onOpenChange(details: OpenChangeDetails) => void

Function called when the calendar opens or closes.

onValueChange(details: ValueChangeDetails) => void

Function called when the value changes.

onViewChange(details: ViewChangeDetails) => void

Function called when the view changes.

openfalse | true

Whether the calendar is open

parse(value: string, details: calendar.LocaleDetails) => DateValue | undefined

Function to parse the date from the input back to a DateValue.

placeholderstring

The placeholder text to display in the input.

positioningcalendar.PositioningOptions

The user provided options used to position the date picker content

presentfalse | true

Whether the node is present (controlled by the user)

readOnlyfalse | true

Whether the calendar is read-only.

selectionMode"single""single" | "multiple" | "range"

The selection mode of the calendar. - `single` - only one date can be selected - `multiple` - multiple dates can be selected - `range` - a range of dates can be selected

startOfWeeknumber

The first day of the week. `0` - Sunday `1` - Monday `2` - Tuesday `3` - Wednesday `4` - Thursday `5` - Friday `6` - Saturday

timeZone"UTC"string

The time zone to use

translationscalendar.IntlTranslations

The localized messages to use.

unmountOnExitfalsefalse | true

Whether to unmount on exit.

valuecalendar.DateValue[]

The selected date(s).

view"day""day" | "month" | "year"

The view of the calendar

ClearTrigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Content

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Context

PropDefaultType
children*(context: UseCalendarContext) => Element

Control

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Input

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.InputHTMLAttributes<HTMLInputElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

fixOnBlurtruefalse | true

Whether to fix the input value on blur.

indexnumber

The index of the input to focus.

Label

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.LabelHTMLAttributes<HTMLLabelElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

MonthSelect

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.SelectHTMLAttributes<HTMLSelectElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

NextTrigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Positioner

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

PresetTrigger

PropDefaultType
value*PresetTriggerValue
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

PrevTrigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

RangeText

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

RootProvider

PropDefaultType
value*UseCalendarReturn
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

lazyMountfalsefalse | true

Whether to enable lazy mounting

onExitComplete() => void

Function called when the animation ends in the closed state

presentfalse | true

Whether the node is present (controlled by the user)

unmountOnExitfalsefalse | true

Whether to unmount on exit.

Table

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLTableElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber

TableBody

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLTableSectionElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

TableCell

PropDefaultType
value*number | DateValue
asChild(props: (userProps?: solid_js243.JSX.TdHTMLAttributes<HTMLTableCellElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

columnsnumber
disabledfalse | true
visibleRangeRange<calendar.DateValue>

TableCellTrigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

TableHead

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLTableSectionElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

TableHeader

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ThHTMLAttributes<HTMLTableCellElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

TableRow

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLTableRowElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Trigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

View

PropDefaultType
view*DateView
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

ViewControl

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.HTMLAttributes<HTMLDivElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

ViewTrigger

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.ButtonHTMLAttributes<HTMLButtonElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

YearSelect

PropDefaultType
asChild(props: (userProps?: solid_js243.JSX.SelectHTMLAttributes<HTMLSelectElement> | undefined) => JSX.HTMLAttributes<any>) => JSX.Element

Use the provided child element as the default rendered element, combining their props and behavior.

Root

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined
closeOnSelecttruefalse | true

Whether the calendar should close after the date selection is complete. This is ignored when the selection mode is `multiple`.

defaultOpenfalse | true
defaultValueimport("/home/runner/work/ui/ui/packages/svelte/dist/index").DateValue[]
defaultView"day" | "month" | "year"
disabledfalse | true

Whether the calendar is disabled.

fixedWeeksfalse | true

Whether the calendar should have a fixed number of weeks. This renders the calendar with 6 weeks instead of 5 or 6.

focusedValueDateValue | undefined

The focused date.

format((date: DateValue, details: LocaleDetails) => string) | undefined

The format of the date to display in the input.

idstring
idsPartial<{ root: string; label: (index: number) => string; table: (id: string) => string; tableHeader: (id: string) => string; tableBody: (id: string) => string; tableRow: (id: string) => string; ... 11 more ...; positioner: string; }>

The ids of the elements in the date picker. Useful for composition.

immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

isDateUnavailable(date: import("/home/runner/work/ui/ui/packages/svelte/dist/index").DateValue, locale: string) => boolean

Returns whether a date of the calendar is available.

lazyMountfalsefalse | true

Whether to enable lazy mounting

locale"en-US"string

The locale (BCP 47 language tag) to use when formatting the date.

maxDateValue | undefined

The maximum date that can be selected.

maxView"year""day" | "month" | "year"

The maximum view of the calendar

minDateValue | undefined

The minimum date that can be selected.

minView"day""day" | "month" | "year"

The minimum view of the calendar

namestring

The `name` attribute of the input element.

numOfMonthsnumber

The number of months to display.

onExitComplete() => void

Function called when the animation ends in the closed state

onFocusChange(details: import("/home/runner/work/ui/ui/packages/svelte/dist/index").CalendarFocusChangeDetails) => void

Function called when the focused date changes.

onOpenChange(details: import("/home/runner/work/ui/ui/packages/svelte/dist/index").CalendarOpenChangeDetails) => void

Function called when the calendar opens or closes.

onValueChange(details: import("/home/runner/work/ui/ui/packages/svelte/dist/index").CalendarValueChangeDetails) => void

Function called when the value changes.

onViewChange(details: import("/home/runner/work/ui/ui/packages/svelte/dist/index").CalendarViewChangeDetails) => void

Function called when the view changes.

openfalse | true

Whether the calendar is open

parse((value: string, details: LocaleDetails) => DateValue | undefined) | undefined

Function to parse the date from the input back to a DateValue.

placeholderstring

The placeholder text to display in the input.

positioningPositioningOptions | undefined

The user provided options used to position the date picker content

presentfalse | true

Whether the node is present (controlled by the user)

readOnlyfalse | true

Whether the calendar is read-only.

selectionMode"single""multiple" | "single" | "range"

The selection mode of the calendar. - `single` - only one date can be selected - `multiple` - multiple dates can be selected - `range` - a range of dates can be selected

skipAnimationOnMountfalsefalse | true

Whether to allow the initial presence animation.

startOfWeeknumber

The first day of the week. `0` - Sunday `1` - Monday `2` - Tuesday `3` - Wednesday `4` - Thursday `5` - Friday `6` - Saturday

timeZone"UTC"string

The time zone to use

translationsIntlTranslations | undefined

The localized messages to use.

unmountOnExitfalsefalse | true

Whether to unmount on exit.

valueimport("/home/runner/work/ui/ui/packages/svelte/dist/index").DateValue[]

The selected date(s).

view"day""day" | "month" | "year"

The view of the calendar

ClearTrigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

Content

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

Context

PropDefaultType
render*Snippet<[UseCalendarContext]>

Control

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

Input

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"input">]>
childrenSnippet<[]> | undefined
fixOnBlurtruefalse | true

Whether to fix the input value on blur.

indexnumber

The index of the input to focus.

Label

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"label">]>
childrenSnippet<[]> | undefined

MonthSelect

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"select">]>
childrenSnippet<[]> | undefined

NextTrigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

Positioner

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

PresetTrigger

PropDefaultType
value*PresetTriggerValue
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

PrevTrigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

RangeText

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

RootProvider

PropDefaultType
value*UseCalendarReturn
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined
immediatefalse | true

Whether to synchronize the present change immediately or defer it to the next frame

lazyMountfalsefalse | true

Whether to enable lazy mounting

onExitComplete() => void

Function called when the animation ends in the closed state

presentfalse | true

Whether the node is present (controlled by the user)

skipAnimationOnMountfalsefalse | true

Whether to allow the initial presence animation.

unmountOnExitfalsefalse | true

Whether to unmount on exit.

Table

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"table">]>
childrenSnippet<[]> | undefined
columnsnumber

TableBody

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"tbody">]>
childrenSnippet<[]> | undefined

TableCell

PropDefaultType
value*number | DateValue
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"td">]>
childrenSnippet<[]> | undefined
columnsnumber
disabledfalse | true
visibleRangeRange<import("/home/runner/work/ui/ui/packages/svelte/dist/index").DateValue>

TableCellTrigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

TableHead

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"thead">]>
childrenSnippet<[]> | undefined

TableHeader

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"th">]>
childrenSnippet<[]> | undefined

TableRow

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"tr">]>
childrenSnippet<[]> | undefined

Trigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

View

PropDefaultType
view*DateView
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

ViewControl

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"div">]>
childrenSnippet<[]> | undefined

ViewTrigger

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"button">]>
childrenSnippet<[]> | undefined

YearSelect

PropDefaultType
asChildimport("svelte").Snippet<[import("/home/runner/work/ui/ui/packages/svelte/dist/types").PropsFn<"select">]>
childrenSnippet<[]> | undefined