Trailing "+" affordance shown at the end of PlanDayStrip when the host
allows the plan length to be extended. Tap adds one day. Sized to match
PlanDayChip so it feels like a continuation of the day list.
The unified calendar block of a plan surface: day identity ("Day 2 of 30"
with date and days-left), an integrated strip/grid toggle, true plan
progress, the day cells flanked by prev/next steppers (strip mode), and the
day-title row with a jump-to-today pill. Replaces the former scattered
header + progress bar + quick-jump chrome.
Owns selection + item state for a VooPlanCalendar. Works in day-relative
space (Day 1..N). When startDate is set the controller can additionally
compute the absolute date/weekday for any day in the plan.
A single Day chip used in PlanDayStrip and PlanDayGrid. Shows the day
number prominently, an optional weekday subtitle (when an absolute date
is known), and up to three indicator dots below the number when the day
has items.
Renders the selected day's items, grouped by morning/afternoon/evening for
scheduled items, with "Anytime today" at the bottom for items without a time.
Paginated grid of every day in the plan.
rowsPerPage × columns cells per page; prev/next pagination if the plan
extends beyond one page. Auto-advances to the page containing the
controller's selected day. Renders an "+ Add another week" button on the
last page that calls onExtend (or controller.extendBy(7) by default).
Set allowExtend to false to hide the button entirely (e.g. read-only
overview surfaces where extending the plan is not appropriate).
A modal bottom sheet that lets the user pick multiple day-offsets from a
paginated grid. Used by "Repeat on other days" flows in fitness/meal/workout
plan editors. The user can extend the visible range with "+ Add another
week" without ever scrolling a tall grid.
Horizontal scrollable strip of PlanDayChip cells. Auto-scrolls the
selected day into view when the controller's selection changes. When
onExtend is provided, renders a trailing PlanAddDayChip that lets the
user grow the plan by one day.
Compact inline editor for a plan-day's optional custom title (e.g.
"Push Day", "Recovery"). Display mode shows title ?? placeholder next to a
pencil icon; tapping flips to an inline TextField. Submitting an empty value
reports null to clear the title.
A calendar surface tuned for plans whose items are positioned by day-offset
(Day 1..N) rather than absolute date. Composes a progress header, a
togglable Day strip / Day grid, prev/next/today quick-jump controls, and a
detail panel that groups items by VooPlanItem.scheduledTime.
A scheduled item within a plan, positioned by day offset (1..N) rather than
an absolute calendar date. Optional scheduledTime orders items within a day.