Calendly-style booking scheduler — generated slots with capacity, reservations and disabled reasons, a paged week view, a month view with availability dots, and a user / event / timezone summary card.
Slot generation — slots are generated from startTime → endTime in slotSize steps (shared logic with web: lib/time-slot-utils.ts). Each slot gets a status: available, partial (some capacity used), full, unavailable (inside an unavailableSlots range), past, or disabled (outside minDate / maxDate), plus a disabledReason.
Columns mode — the week (Monday start, weekends only when showSaturday / showSunday) as a horizontally paged day list: 3 day columns per page in portrait, 5 in landscape, or columnsPerPage. The header navigates week by week and has a Today button.
Month mode — the native MiniCalendar with a dot on every day that still has an available or partial slot, and the picked day's slot list below it. Month navigation is handled by the calendar itself. The list always shows a day (the anchor date until another day is picked), unlike web which shows a "select a day" prompt.
Selecting — tap an enabled slot to select it (onSelect with an ISO SlotSelectPayload). In selectionMode="multiple" a tap toggles the slot and onSelectionChange receives the full selection.
Reservations — with showReservationDetail, long-press a slot to open a bottom sheet listing its reservations (web: popover). Tapping a disabled slot opens the same sheet with the disabled reason (web: tooltip).
Summary card — user, event and timezones render in a collapsible header card (web: sidebar). The timezone select only reports the value (onTimezoneChange); slot times are not converted, same as web.
Formatting — slot times use useDateFormat().formatTime when a DateFormatProvider / DocyrusTenantProvider is mounted, otherwise the web h:mm AM format. All copy goes through useUiTranslation() with the web ui.timeSlot.* keys.
ui.timeSlot.previousWeek, ui.timeSlot.nextWeek, ui.common.today, ui.timeSlot.columnsView, ui.timeSlot.monthView, ui.timeSlot.duration, ui.timeSlot.location, ui.timeSlot.timezone, ui.timeSlot.selectTimezone, ui.timeSlot.noSlotsAvailable, ui.timeSlot.of, ui.timeSlot.booked, ui.timeSlot.pastSlot, ui.timeSlot.full, ui.timeSlot.unavailable, ui.timeSlot.beforeMinDate, ui.timeSlot.afterMaxDate — the same keys as the web component.