Updated
Picker
Picker lets people choose a date or a range of dates, a time, or a color, in three cards that share one surface.
Updated
On this page
Preview
A calendar grid for one date. Use it when the shape of the month matters and a scrolling wheel would hide it. Pick a day, then Submit to keep it or Dismiss to go back.
The card shows January 2026 with the 16th selected and the 2nd, 12th, 17th and a spilled 3rd marked. Seven 36 cells and six 8 gaps fill the 300 that the padding leaves.
Monday takes one letter, the other six take two. The card is bg/raised under dropShadow/2xl, with no stroke.
What does the Date selector do?
The month header is its own private component and the only control in the card that changes what the grid shows.
The selector is a bg/weak-50 pill holding two 32 Compact Buttons at Style White, with the month label centered between them.
Which states does the Day cell have?
The Day cell has eight states crossed with one boolean, and every one is a 36 pt circle. It is the private target behind every number.
Default has no fill and the number on text/sub-700. Pressed takes bg/weak-50 and lifts the number to text/strong-950.
Active is brand/base under a static white number. Today keeps the clear cell and sets the number in brand/base.
Disabled is a spilled day from the next month.
Range Start and Range End are a brand circle with a half band toward the middle, and Range Middle is the band alone, with the number on text/strong-950. The band is 22 wide at the ends and 44 wide in the middle, and it reaches 4 pt past the cell on every side it joins, so a run of cells reads as one band across the 8 pt gap between days.
The band is brand/alpha-10: 10 percent of the brand blue in both modes. The dot is absolutely placed, so it never moves the number.
How does the Time Picker work?
A list of time slots with three quick durations, in a card like the Date Picker's, at radius 40. Pick a slot, then Submit to keep it.
The header pill shows the picked time, with a clock on the left and a clear button on the right. Below it, three quick durations sit in a row: the chosen one is a brand tinted pill with a check.
The list holds half hour slots from 09:30, and its 4 pt scrollbar shows how much is left. The picked slot is bg/weak-50 with a brand tick.
Format only changes the list: in 12-hour each slot adds AM or PM, and in 24-hour the period disappears.
The arrow keys move through the durations and the slots, Dismiss puts the pick back on 10:30 and Submit keeps the slot you chose.
How does the Color Picker work?
A free color from the spectrum, or a pick from the product palette, in a card like the Date Picker's, at radius 40. Drag the spectrum, type a hex value or choose a swatch.
A small two tab Segmented Control, Custom and Palette, heads both types. Custom has a spectrum, a hue slider, a value row with an eyedropper and a hex field, and a row of saved swatches with an Add button.
Palette has three rows of seven swatches, and the value row follows the picked swatch. The swatches are the product's own state colors, so the palette changes with Light and Dark: the light shades of each color are translucent in Dark, and the opacity field shows it.
The spectrum is saturation across and brightness down on the hue you set with the slider. Both handles are sliders for the keyboard: the arrow keys move them, Shift moves ten times as far, and Home and End jump the hue to its ends.
The hex field takes six digits with or without the hash.
How does Picker differ on iOS and Material 3?
iOS draws date and time in one inline or compact picker, Material 3 splits them into modal, input, dial and keyboard pickers, and neither has a color picker in the file. Appetite UI draws three 340 wide cards.
| Appetite UI component | iOS counterpart | Material 3 counterpart | What differs |
|---|---|---|---|
Date Picker, 340 x 400, radius 32 | iOS / Date and time - Pickers, Compact 370 x 381 and Inline 370 x 388 | M3 / Modal date picker, 360 x 524 at radius 24, with Day, Year and Full-screen (range) | Appetite UI adds Today and a range band to the day cell and drops the year grid. |
Time Picker, 340 x 426, radius 40 | The time wheel inside iOS / Date and time - Pickers | M3 / Dial picker, 328 x 520, and M3 / Keyboard picker, 328 x 243 | Appetite UI picks from a list of slots with quick durations instead of a wheel or a dial. |
Color Picker, 340 x 434 and 340 x 326 | None in the file. SwiftUI has a native ColorPicker. | None in the file | Appetite UI draws its own spectrum and a palette of the product's state colors. |
In code, build the Date Picker as a DatePicker with the graphical style on iOS and a DatePicker on Android. For a compact inline choice, use the date selector instead.
The minimum touch target comes from platform/min-touch-target: 44 pt on iOS and 48 dp on Android. The day cells, the slots and the swatches are 36, 36 and 32 pt, below both, so in code give each target the platform minimum around the drawn shape.
Read Platform Bridge for how one screen switches between the platforms, and iOS and Material 3 for the platform mirrors.
Properties
The Date Picker has no properties of its own, the Time Picker has Format and the Color Picker has Type. Every other knob lives on a private block inside them.
| Component | Property | Type | Options | Default |
|---|---|---|---|---|
| Date Picker | none | none | none | 340 x 400 |
| Time Picker | Format | Variant | 12-hour, 24-hour | 12-hour |
| Color Picker | Type | Variant | Custom, Palette | Custom |
| _Day Cell | State | Variant | Default, Active, Disabled, Pressed, Today, Range Start, Range Middle, Range End | Default |
| _Day Cell | Marked | Variant | False, True | False |
| _Day Cell | Type | Variant | Basic | Basic |
| _Day Cell | Date | Text | any string | 1 |
| _Day Label | Text | Text | any string | M |
| _Date Selector | Edit Date | Text | any string | June 2026 |
| _Time Picker Item | State | Variant | Default, Active | Default |
| _Time Picker Item | Show Period | Boolean | on, off | on |
| _Time Picker Item | Time, Period | Text | any string | 10:30, AM |
| _Duration Chip | State | Variant | Default, Selected | Default |
| _Duration Chip | Label | Text | any string | 30 min |
| _Color Swatch | State | Variant | Default, Selected | Default |
_Day Cell 16 variants, Time Picker 2, Color Picker 2. Source: the Picker page of the Appetite UI Figma file, read on October 2, 2026.
Tokens
Every value the pickers read, resolved to its primitive.
| Token | Light | Dark | Applied to |
|---|---|---|---|
bg/raised | #FFFFFF | #242427 | All three cards, and the duration chips |
bg/white-0 | #FFFFFF | #0E0E0F | Caret buttons, header buttons, value field, Dismiss |
border/soft-100 | #E9E9EA | #2F2F31 | Duration chip edge and the Dismiss outline |
bg/weak-50 | #F4F5F5 | #242427 | Selector, header and value pills, the pressed cell, the picked slot, scrollbar track |
bg/sub-200 | #D1D1D6 | #636366 | Scrollbar thumb |
text/sub-700 | #48484A | #C7C7CC | Month label, day numbers, slot times, chip labels |
text/soft-500 | #8E8E93 | #AEAEB2 | Day labels, AM and PM, the opacity |
text/strong-950 | #0E0E0F | #FFFFFF | Pressed cell number, picked slot, hex value |
text/disabled-400 | #AEAEB2 | #8E8E93 | Spilled days, with fg/disabled-400 on their dot |
fg/sub-700 | #48484A | #C7C7CC | Carets and header icons |
brand/base | #155DFC | #2B7FFF | Selected cell, Today, range ends, ticks, Submit |
brand/alpha-10 | #2B7FFF at 10 percent | #2B7FFF at 10 percent | Range band, chosen duration |
border/strong-950 | #0E0E0F | #FFFFFF | The ring on the picked swatch |
brand/lighter | #EFF6FF | #132150 | The dot inside a selected cell |
static/static-white-0 | #FFFFFF | #FFFFFF | Selected cell number, Submit label, spectrum ring |
The palette swatches read the state tokens: state/error, state/warning, state/away, state/success, state/stable, state/feature, state/highlighted, state/verified and state/faded at base 500, their light 200 shades, and brand/base.
Geometry runs on dimensions/radius/3xl 32 for the Date Picker card and dimensions/radius/4xl 40 for the Time and Color Picker cards, with all three on dropShadow/2xl.
Day labels, AM and PM and the opacity read text/soft-500, which measures 3.26:1 on white and is a documented product choice.
In code the calendar is a grid whose cells take arrow-key focus with a visible ring, and every target needs the 44 pt iOS or 48 dp Android minimum.
When should I use the calendar?
Use the calendar when the shape of the month is part of the decision: a weekend, a deadline near the end, a run of marked days.
Do
Use Range Start, Range Middle and Range End for a span of dates. The band joins the cells into one shape and the two ends carry the only brand circles.
Don't
Do not fill a run of cells with Active to fake a range. Three brand circles read as three selections, not as one span.
When the answer is only a date and the month is irrelevant, a text field is faster and smaller. Let the dot mean one thing and say what it is, because it is the only mark on a day besides the selection.