Skip to main content
Flowra
PricingCommunityFAQ
JoinStart with Flowra
  • PricingPlans, seats and payment
  • Frequently asked questionsEverything you have asked, in one place
  • Contact usWrite to the right team
  • CommunityKaro Studio, who make Flowra

For your team

  • Marketing teamsCampaigns from brief to launch
  • Product and dev teamsFeatures and bugs with full context
  • Design and content teamsBrief, files and delivery side by side
  • Operations teamsWork, documents and costs you can track
  • Sales and services teamsFrom meeting to contract and payment
  • Remote teamsOnline meeting to delivery, on your time

For your role

  • Project managersAction stories instead of chasing the team
  • Freelancers and consultantsFrom brief to contract and settlement

For your workflow

  • Meeting to actionMeeting decisions as trackable work
  • Actions with financial contextCosts next to the work that caused them
  • Actions with contract contextEvery commitment as trackable work
  • Brief to project deliveryEvery project step, one complete action
See all solutionsStart with FlowraJoin
++
Flowra design system

Fundamentals

PrinciplesVoice and writingCopy rules for each surfaceGlossaryRTL and languagesNumbers and datesAccessibility

Foundations

ColorDark modePrintingTypographySpacing and layoutRadius and shadowLayersMotionNotification soundKeyboard shortcutsIconsService logos

Components

ButtonsText fieldPickerDate and timeCheckboxRadioKeySegmented controlSliderMenu and sheetDialogCard and listTables and data listsBadge, pill, and switchTabs and filtersAvatarEmpty and loading statesProgress and stepsToastFloating helpNavigationPage headerAssistants

Patterns

Connector pageList, filter, and searchForm layoutCreation flowUpgrade promptConfirmation and irreversible actionsPhone layoutFixed bars and scrolling

Brand

Flowra brandMark and logoBrand colorBrand typographyMisuse

Design system/Components

Picker

There's no native <select> in Flowra. The browser draws its list with the system font, Latin digits, and no dark mode, so every selection comes from one designed list that's a menu on desktop and a bottom sheet on phones.

In codecomponents/text-field.tsxcomponents/select-menu.tsxcomponents/floating.tsx

On this page

  1. Three shapes, one list
  2. Selection chip
  3. Floating panel
  4. Behavior
  5. Rules
  6. Code
  7. Sizes
  8. Row states
  9. Keyboard and roles

Three shapes, one list

DropdownField is for forms: a full floating field with a label and icon. SelectField is the same thing with a <select> interface, meaning <option> children and an event-based onChange, so a form written for a native select can switch without a rewrite; the value is sent in a hidden input with the same name. SelectMenu is a small chip, for places where a full field is too big, like the time at the bottom of the calendar.

Live example

Selection chip

SelectMenu is 30px tall, its digits are tabular, and its list is the same OptionList.

Live example
Get startedEnd

Floating panel

The list isn't inside the field; Floating moves it to body and positions it from the field with position: fixed: below if there's room, above if there's more room there, always within the screen, and it follows the field as you scroll. That way no dialog or card clips half the list with its own scroll.

On phones, the same content rises as a bottom sheet, with the field's label as its heading.

Why

In the calendar, the date picker in the "New action" form used to open inside the dialog, and its lower half got lost under the dialog's scroll. A portaled panel is no longer trapped by any parent.

Behavior

  • When it opens, the selected option is visible and highlighted.
  • Up and down arrows, Home and End, Enter or Space to select, Escape to close. Type a few letters in a row (within 600 milliseconds) to jump to the next option that starts with them.
  • Escape closes only the topmost panel and doesn't reach the dialog beneath it.
  • Groups sit under a heading; a disabled option is visible but can't be selected.
  • searchable adds a filter box above the list; the filter understands Persian digits too.
  • addNewLabel and onAddNew add an "Add new option" row at the bottom of the list.
  • After a selection, focus returns to the field.

Rules

Do

A long list, searchable.

Don't

A 50-item list with no filter.

Do

Three or four short options that should all be visible? Pills.

Don't

A dropdown for two options.

Do

A value that's both displayed and compared gets tr() on both sides.

Don't

Comparing a translated label with a Persian value.

Code

<DropdownField
  label={tr("مسئول")}
  icon={paths.user}
  value={owner}
  options={members.map((m) => ({ value: m.id, label: m.name }))}
  onChange={setOwner}
  searchable
/>

<SelectMenu ariaLabel={tr("ساعت")} value={hour} options={HOURS} onChange={setHour} />

Sizes

DropdownField58px · 16px / 500The same floating field
Desktop panelradius 14px · padding 6pxWidth = field
List heightmax-height 248px.option-rows; sheet 52vh
Rowpadding 10px 12px · radius 9px · 14px / 500Phone min 46px · 14.5px; sheet 48px
Group heading10.5px / 700 · padding 8px 12px 4px
SelectMenu30px · min-width 46px · radius 10px · 13px / 600Time: min-width 86px
Arrow15px · rotate 180° · 0.22s springChip 12px · 0.2s
Gap from the field6px8px from the screen edge; at least 120px of room
Filter box in the sheet44px · 16px

Row states

Hoverbackground: var(--muted)
Active via keyboarddata-active · --muted
Selected--accent-text on --accent-soft · check 14px
Selected and activeinset 0 0 0 1px var(--accent)
Inactiveopacity 0.45 · cursor: default
Field button focus2px solid var(--accent) · offset 2px
Open chipBorder --accent · 0 0 0 3px var(--accent-soft)
  • The selected option is --accent-text on soft orange: 4.69 to 1 in light and 5.31 in dark, AA in both; it also has a checkmark, so selection isn't shown by color alone.

Keyboard and roles

OpenEnter · Space · ↑ · ↓
Motion↑ ↓ · PageUp/PageDown = 8
First and lastHome / EndWhen focus is on the list
SelectEnter · SpaceSpace while focus is on the list
Type-aheadtypeahead · 600msWhen focus is on the list
CloseEscape · click outside
Buttonaria-haspopup="listbox" · aria-expanded
Contentsrole="listbox" · aria-activedescendant
Rowrole="option" · aria-selected
  • On open, focus moves to the list, or to the filter box if it's searchable. On phones focus stays on the list so the keyboard doesn't cover the sheet.
  • In the filter box, Home and End move the cursor, not the row.
  • If the filter finds nothing, it shows “Nothing found” (12.5px, centered).

Do

SelectField when the form is submitted with name.

Don't

A native <select> next to floating fields.

Do

In right-to-left, the panel hangs from the field's right edge.

Don't

A fixed left for the panel; in Persian it sticks out from under the field.

Related pages

Text fieldDropdownField is the same floating field, with a list.Menu and sheetThe same floating panel and the same phone sheet.Date and timeThe calendar and time picker open with Floating too.AccessibilityFull keyboard support in OptionList.Phone layoutOn phones, the list becomes a bottom sheet.
PreviousText fieldNextDate and time

Related pages

  • PageBrand kitThe Flowra mark and logo, colors, typography, clear space and minimum size, and the brand kit files to download.
  • PageDocumentationThe complete Flowra guide: actions, calendar, meetings, knowledge, files, Folio, chat, network, finance, connectors, settings and AI, each with its connections.
  • PageChangelogWhat each release added to Flowra, what got better, and what’s coming next.
  • PageContact usReach the right team: support, sales and plans, partnerships, careers, or security and privacy.
Flowra

Flowra is an all-in-one workspace for managing tasks, projects, finances, meetings, and teamwork, powered by AI to keep everything organized in one place.

Solutions for teams

  • Marketing teams
  • Product and dev teams
  • Design and content teams
  • Operations teams
  • Sales and services teams
  • Remote teams

Roles and flows

  • Project managers
  • Freelancers and consultants
  • Meeting to action
  • Actions with financial context
  • Actions with contract context
  • Brief to project delivery

With Flowra

  • All solutions
  • Pricing
  • Frequently asked questions
  • Documentation
  • Contact us
  • Brand kit
  • Design system
Crafted by Karo Studio
SecurityPrivacyTermsCookies
Version 0.16.0