Mixins / foldkit-mixins-ui

Calendar

namespace · packages/mixins-ui/src/calendar.ts:1

export * as Calendar from './calendar.js'

In the guides

Members

Calendar.CalendarSlots

const · packages/mixins-ui/src/calendar.ts:27

const CalendarSlots: Slots.Contract<{ readonly root: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly header: Slot.UnnamedSlot<Capability.Capability<"Container", readonly [Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>]>, readonly Slot.EventName[], readonly Slot.AttributeName[], readonly Slot.RequirementName[], boolean>; readonly previousMonthButton: Slot.UnnamedSlot<Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>, readonly [Event.EventToken<"click">], readonly [Attr.AttrToken<"role">, Attr.AttrToken<"disabled">, Attr.AttrToken<"aria-disabled">], readonly Slot.RequirementName[], boolean>; readonly nextMonthButton: Slot.UnnamedSlot<Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>, readonly [Event.EventToken<"click">], readonly [Attr.AttrToken<"role">, Attr.AttrToken<"disabled">, Attr.AttrToken<"aria-disabled">], readonly Slot.RequirementName[], boolean>; readonly headingButton: Slot.UnnamedSlot<Capability.Capability<"Interactive", readonly [Capability.Capability<"Base", readonly []>]>, readonly [Event.EventToken<"click">], readonly [Attr.AttrToken<"role">], readonly Slot.RequirementName[], boolean>; readonly previousPageButton: Slot.UnnamedSlot<Capabilit …;

Calendar is a nested Submodel whose shape depends on model.viewMode. The top-level groups (root, grid, the navigation buttons) and per-item groups (columnHeaders[], weeks[].attributes, the day/month/year cells and their buttons) are each resolved with SlotView.buildersFor, so a contribution to a cell slot applies to every cell while each cell's base keeps its own event ownership (a disabled day omits OnClick). header, the row of the heading and its paging buttons, has no upstream bundle: it is this package's, so the default drawing puts no markup outside a slot.

Calendar.draw

function · packages/mixins-ui/src/calendar.ts:207

function draw<Message>(
  calendar: ResolvedCalendar<Message>,
  h: HtmlBuilder<Message>,
): Html

The month grid in every mode, as upstream lays it out, with a header row of its own.

Calendar.resolve

function · packages/mixins-ui/src/calendar.ts:139

function resolve<Input, Message>(
  render: CalendarAttributes,
  mixins: MixinList<Message>,
  context: ResolveContext<Input, Message>,
): ResolvedCalendar<Message>

Resolves every mode's nested groups, preserving the _tag and heading data.

Calendar.ResolvedCalendar

type · packages/mixins-ui/src/calendar.ts:135

type ResolvedCalendar<Message> =
  ResolvedDays<Message> | ResolvedMonths<Message> | ResolvedYears<Message>

Calendar.ResolvedColumnHeader

type · packages/mixins-ui/src/calendar.ts:83

type ResolvedColumnHeader<Message> = Omit<ColumnHeader, 'attributes'> & {
  readonly attributes: SlotAttributes<Message>
}

Calendar.ResolvedDayCell

type · packages/mixins-ui/src/calendar.ts:86

type ResolvedDayCell<Message> = Omit<
  DayCell,
  'cellAttributes' | 'buttonAttributes'
> & {
  readonly cellAttributes: SlotAttributes<Message>
  readonly buttonAttributes: SlotAttributes<Message>
}

Calendar.ResolvedDays

interface · packages/mixins-ui/src/calendar.ts:103

interface ResolvedDays<Message> {
  readonly _tag: 'Days'
  readonly root: SlotAttributes<Message>
  readonly header: SlotAttributes<Message>
  readonly previousMonthButton: SlotAttributes<Message>
  readonly nextMonthButton: SlotAttributes<Message>
  readonly headingButton: SlotAttributes<Message>
  readonly heading: DaysModeAttributes['heading']
  readonly grid: SlotAttributes<Message>
  readonly headerRow: SlotAttributes<Message>
  readonly columnHeaders: ReadonlyArray<ResolvedColumnHeader<Message>>
  readonly weeks: ReadonlyArray<ResolvedWeek<Message>>
}

Calendar.ResolvedMonthCell

type · packages/mixins-ui/src/calendar.ts:94

type ResolvedMonthCell<Message> = Omit<
  MonthCell,
  'cellAttributes' | 'buttonAttributes'
> & {
  readonly cellAttributes: SlotAttributes<Message>
  readonly buttonAttributes: SlotAttributes<Message>
}

Calendar.ResolvedMonths

interface · packages/mixins-ui/src/calendar.ts:116

interface ResolvedMonths<Message> {
  readonly _tag: 'Months'
  readonly root: SlotAttributes<Message>
  readonly header: SlotAttributes<Message>
  readonly headingButton: SlotAttributes<Message>
  readonly heading: MonthsModeAttributes['heading']
  readonly grid: SlotAttributes<Message>
  readonly cells: ReadonlyArray<ResolvedMonthCell<Message>>
}

Calendar.ResolvedWeek

type · packages/mixins-ui/src/calendar.ts:90

type ResolvedWeek<Message> = Omit<Week, 'attributes' | 'cells'> & {
  readonly attributes: SlotAttributes<Message>
  readonly cells: ReadonlyArray<ResolvedDayCell<Message>>
}

Calendar.ResolvedYearCell

type · packages/mixins-ui/src/calendar.ts:98

type ResolvedYearCell<Message> = Omit<
  YearCell,
  'cellAttributes' | 'buttonAttributes'
> & {
  readonly cellAttributes: SlotAttributes<Message>
  readonly buttonAttributes: SlotAttributes<Message>
}

Calendar.ResolvedYears

interface · packages/mixins-ui/src/calendar.ts:125

interface ResolvedYears<Message> {
  readonly _tag: 'Years'
  readonly root: SlotAttributes<Message>
  readonly header: SlotAttributes<Message>
  readonly previousPageButton: SlotAttributes<Message>
  readonly nextPageButton: SlotAttributes<Message>
  readonly heading: YearsModeAttributes['heading']
  readonly grid: SlotAttributes<Message>
  readonly cells: ReadonlyArray<ResolvedYearCell<Message>>
}

Calendar.toView

function · packages/mixins-ui/src/calendar.ts:262

function toView<Message>(
  mixins: MixinList<Message>,
  context: ResolveContext<unknown, Message>,
  render?: (resolved: ResolvedCalendar<Message>) => Html,
): (attributes: CalendarAttributes) => Html

The calendar's toView: draw receives its bundles with mixins applied; without one, they are drawn by draw above. A Mixin that reads the mode needs resolve, whose input can be _tag.