Skip to content

Picker

Picker lets people choose a date or a range of dates, a time, or a color, in three cards that share one surface.

On this page
  1. Preview
  2. Date selector
  3. Day cell states
  4. Time Picker
  5. Color Picker
  6. iOS and Material 3
  7. Properties
  8. Tokens
  9. When to use a calendar

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.

Date Picker, no properties340 x 400, radius 32, padding 20, dropShadow/2xl
January 2026MTUWETHFRSASU1234

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.

Date Selector300 x 44, padding 6, gap 8, radius full
January 2026

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, Pressed, Active, Disabled36 circle, 14/20 Semi Bold at ls .1
1111
The same four with Marked4 dot, centered, 5 up from the bottom
1111
Today, with and without Marked36 circle, number on brand/base, dot 4
11
Range Start, Range Middle, Range End36 circle, range band 22 and 44 wide
1234

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.

Time Picker, Format 12-hour340 x 426, radius 40, padding 20, gap 16
09:30 AM10:00 AM10:30 AM11:00 AM11:30 AM12:00 PM12:30 PM01:00 PM01:30 PM02:00 PM02:30 PM03:00 PM03:30 PM04:00 PM04:30 PM05:00 PM05:30 PM06:00 PM
Time Picker, Format 24-hour340 x 426, radius 40, padding 20, gap 16
09:3010:0010:3011:0011:3012:0012:3013:0013:3014:0014:3015:0015:3016:0016:3017:0017:3018:00

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.

Color Picker, Type Custom340 x 434, radius 40, spectrum 300 x 148, hue 16 tall
100%100%#145EFC at 100%
Color Picker, Type Palette340 x 326, radius 40, three rows of seven swatches at 32
100%100%#145EFC at 100%

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.

Picker against its iOS and Material 3 counterparts
Appetite UI componentiOS counterpartMaterial 3 counterpartWhat differs
Date Picker, 340 x 400, radius 32iOS / Date and time - Pickers, Compact 370 x 381 and Inline 370 x 388M3 / 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 40The time wheel inside iOS / Date and time - PickersM3 / Dial picker, 328 x 520, and M3 / Keyboard picker, 328 x 243Appetite 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 326None in the file. SwiftUI has a native ColorPicker.None in the fileAppetite 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.

Picker sets and building blocks, properties and options
ComponentPropertyTypeOptionsDefault
Date Pickernonenonenone340 x 400
Time PickerFormatVariant12-hour, 24-hour12-hour
Color PickerTypeVariantCustom, PaletteCustom
_Day CellStateVariantDefault, Active, Disabled, Pressed, Today, Range Start, Range Middle, Range EndDefault
_Day CellMarkedVariantFalse, TrueFalse
_Day CellTypeVariantBasicBasic
_Day CellDateTextany string1
_Day LabelTextTextany stringM
_Date SelectorEdit DateTextany stringJune 2026
_Time Picker ItemStateVariantDefault, ActiveDefault
_Time Picker ItemShow PeriodBooleanon, offon
_Time Picker ItemTime, PeriodTextany string10:30, AM
_Duration ChipStateVariantDefault, SelectedDefault
_Duration ChipLabelTextany string30 min
_Color SwatchStateVariantDefault, SelectedDefault

_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.

Tokens, token, light, dark, applied to
TokenLightDarkApplied to
bg/raised#FFFFFF#242427All three cards, and the duration chips
bg/white-0#FFFFFF#0E0E0FCaret buttons, header buttons, value field, Dismiss
border/soft-100#E9E9EA#2F2F31Duration chip edge and the Dismiss outline
bg/weak-50#F4F5F5#242427Selector, header and value pills, the pressed cell, the picked slot, scrollbar track
bg/sub-200#D1D1D6#636366Scrollbar thumb
text/sub-700#48484A#C7C7CCMonth label, day numbers, slot times, chip labels
text/soft-500#8E8E93#AEAEB2Day labels, AM and PM, the opacity
text/strong-950#0E0E0F#FFFFFFPressed cell number, picked slot, hex value
text/disabled-400#AEAEB2#8E8E93Spilled days, with fg/disabled-400 on their dot
fg/sub-700#48484A#C7C7CCCarets and header icons
brand/base#155DFC#2B7FFFSelected cell, Today, range ends, ticks, Submit
brand/alpha-10#2B7FFF at 10 percent#2B7FFF at 10 percentRange band, chosen duration
border/strong-950#0E0E0F#FFFFFFThe ring on the picked swatch
brand/lighter#EFF6FF#132150The dot inside a selected cell
static/static-white-0#FFFFFF#FFFFFFSelected 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.

15161718

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.

1516171819

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.