Mobile UX batch 1: clear buttons, tappable contacts, pipeline swipe + amounts, keyboard-safe sheets (v0.1.0:101)

Grant device feedback, frontend-only (CSS + React); no backend, schema,
migration, or dependency change.

- Clear (×) button on the Grid/Contacts search + reminder/quick-log investor
  pickers (shared ClearableInput; the × shows only when there's text).
- Grid investor-detail contact pills are tappable: name deep-links to the
  Contacts detail (new Grid→Contacts one-shot action, matched by email then
  name), email opens the mail app (mailto:).
- Grid contact-name search already surfaced the investor — verified, no change.
- Mobile Pipeline is a full-height flex column so the whole area above the now
  bottom-pinned dots is the swipe target; each stage page scrolls its cards.
- Expected-amount entry: optional amount when adding to the pipeline from the
  Grid detail (feeds pipeline/link), and an editable amount on the Pipeline
  card detail (PUT /api/opportunities/{id}).
- Bottom sheets lift above the on-screen keyboard (visualViewport) and cap
  their height to the visible area, so the reminder picker results stay visible.
This commit is contained in:
Keysat
2026-06-20 15:28:13 -05:00
parent 622d454461
commit b04f83e1d1
4 changed files with 204 additions and 21 deletions
+31
View File
@@ -0,0 +1,31 @@
import { VersionInfo } from '@start9labs/start-sdk'
// Mobile UX batch 1 — Grant device feedback. Frontend-only (CSS + React); no backend, schema,
// migration, or dependency change.
// - [1] Inline ✕ clear button on the Grid/Contacts search + the reminder/quick-log investor
// pickers (a shared ClearableInput; the ✕ shows only when there's text).
// - [2] Grid investor-detail contact pills are tappable: the name deep-links to the Contacts
// detail (a new Grid→Contacts one-shot action, matched by email then name), the email
// opens the mail app (mailto:).
// - [3] (already worked) Grid search already matches a contact's name/email, surfacing the
// investor — verified, no change.
// - [4a] Mobile Pipeline is a full-height flex column: the swipe area fills everything above the
// now bottom-pinned page dots, so a horizontal swipe anywhere switches stages; each stage
// page scrolls its own cards.
// - [4b] Expected-amount entry: an optional amount when adding an investor to the pipeline from
// the Grid detail (feeds pipeline/link), and an editable amount on the Pipeline card detail
// (PUT /api/opportunities/{id} — authenticated, expected_amount is in the field allowlist).
// - [5] Bottom sheets lift above the on-screen keyboard (visualViewport) and cap their height to
// the visible area, so the reminder investor-picker results are no longer hidden.
export const v_0_1_0_101 = VersionInfo.of({
version: '0.1.0:101',
releaseNotes: {
en_US: [
'Mobile polish: clear (✕) buttons on search fields, tappable contacts in the Grid detail',
'(name → contact, email → mail app), a full-screen swipe area on the Pipeline with the dots',
'pinned to the bottom, expected-amount entry when adding/viewing a pipeline deal, and',
'investor-picker suggestions that stay visible above the keyboard.',
].join(' '),
},
migrations: { up: async () => {}, down: async () => {} },
})