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

Menu and action sheet

ActionMenu is Flowra's "•••" menu: a dropdown under the button on desktop, and an action sheet with finger-sized rows on phones.

In codecomponents/knowledge/ui.tsxapp/globals.css (.sheet-menu)

On this page

  1. Live example
  2. Row anatomy
  3. Bottom sheet
  4. Rules
  5. On desktop
  6. Row states
  7. Accessibility and behavior

Live example

Tap the button. If you shrink the window to phone width, the same menu rises from the bottom.

Live example
Current view: Contents

Row anatomy

  1. IconOptional, 15px.
  2. TagWhat the row does.
  3. AboutA quiet second line, when the meaning of the choice isn't obvious.
  4. Trailing noteA shortcut or "Soon".
  5. Divider and heading"sep" and { heading } separate groups.

Bottom sheet

Every phone menu in Flowra is a .sheet-menu: from the bottom, up to 72 percent of the screen height, 20px top corners, a 38 by 4 handle that says it's a sheet, and 48px rows with a 14 font. Its bottom leaves room for the device's safe area.

Max height72vh
Radius20px 20px 0 0
Handle38 × 4px
Rowmin-height 48px · 14px
Join0.24s cubic-bezier(0.32, 0.72, 0.25, 1)

Rules

Do

Dangerous actions go at the bottom, with danger, followed by a confirmation dialog.

Don't

Deleting from a menu row without confirmation.

Do

Show the current state with active.

Don't

A hand-made checkmark next to the label.

Do

A menu for infrequent actions on one thing.

Don't

Hiding the page's main action behind •••.

<ActionMenu
  title={tr("صفحه")}
  items={[
    { key: "copy", label: tr("کپی پیوند"), icon: paths.link, onSelect: copy },
    "sep",
    { key: "del", label: tr("حذف"), icon: paths.trash, danger: true, onSelect: ask },
  ]}
  trigger={({ open, ref }) => (
    <button ref={ref} className="icon-btn" onClick={open} aria-label={tr("بیشتر")}>
      <Icon d={paths.more} size={16} />
    </button>
  )}
/>

On desktop

Width232pxprop width
Max height360px
Gap from the button6px8px from the screen edges
OpeningdropIn 0.2s cubic-bezier(0.34, 1.56, 0.64, 1)
Rowpadding 10px 12px · radius 9px · 14px / 500Phone ≥ 46px
Row icon15px · opacity 0.8
About11px · --text-secondary
Trailing note11px · --text-tertiary
Heading10.5px / 700 · --text-tertiary
Divider1px --border · margin 4px 0
Layerz-index 1250

Row states

Hover--muted
active--accent on --accent-softWith desc: check 14px
dangercolor: var(--red)5.14 : 1 · 4.55 : 1 on card; AA
Inactiveopacity 0.45
Focus2px solid var(--accent) · offset 2px

Accessibility and behavior

  • The container is role="menu" with aria-label set to title; rows are role="menuitem", or role="menuitemradio" with aria-checked when they're active, and the divider is role="separator". The trigger button automatically gets aria-haspopup="menu" and aria-expanded.
  • When it opens, focus moves to the first enabled row. Up and down arrows move between rows, Home and End jump to the first and last, letters typed within 600 milliseconds jump to the next row that starts with them, and Enter or Space activates the row. Rows have tabIndex=-1 and focus is moved by script; Tab closes the menu.
  • Escape closes the menu and returns focus to the trigger button. A mousedown outside the menu and the button, and on desktop a page scroll, close the menu. Scrolling inside the menu itself doesn't close it.
  • When a row is selected, the menu closes first and then onSelect runs, so a confirmation dialog that opens doesn't sit on top of a leftover menu.
  • On phones the backdrop is rgba(0, 0, 0, 0.38) and tapping it closes the menu. The 38 by 4px handle is only a cue; the menu sheet isn't draggable.
  • In right-to-left the menu aligns with the button's right edge, and in left-to-right with its left edge.
  • The delete red on the card is 5.14 to 1 in light and 4.55 in dark, AA in both; the trash icon and the "Delete" label also convey the meaning without color.

Do

A title for every menu; on phones it's the sheet heading.

Don't

A sheet with no heading that doesn't say whose menu it is.

Do

About seven rows at most; beyond that, headings and dividers.

Don't

A long menu that goes past 360px on desktop and scrolls.

Related pages

PickerThe same menu look and the same sheet.Confirmation and irreversible actionsThe red delete row at the bottom of the menu, and the confirmation dialog after it.Phone layoutWhy menus become sheets on phones.IconsEvery row has its own icon.Radius and shadowThe menu's 14 radius and floating shadow.
PreviousSliderNextDialog

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