Skip to content

Release 1.6.0 — connection revamp, Hugeicons, trial gate & UI polish - #38

Merged
broisnees merged 24 commits into
masterfrom
feat/database-providerse
Jul 6, 2026
Merged

broisnees merged 24 commits into
masterfrom
feat/database-providerse

Conversation

@broisnees

@broisnees broisnees commented Jul 6, 2026 •

Copy link
Copy Markdown
Collaborator

Release 1.6.0. Builds on the database-provider sign-in work with a broad UI revamp, a switchable icon system, and a proper licensing/trial gate.

Connections

  • Full-window connection screen (replaces the floating dialog) — left-aligned form, no card, brand-mark type dropdown, SSH/SSL clarity.
  • Real monochrome brand marks for every engine via DbIcon (inlined from simple-icons, no runtime dep).
  • Provider sign-in (Neon/Supabase/PlanetScale/Prisma) + Cloudflare D1 panels rebuilt.

Icon system

  • Switchable Lucide ↔ Hugeicons via Settings (shared <Icon> wrapper + registry, Lucide fallback). Whole chrome migrated (Sidebar, TableToolbar, TabBar, CommandPalette, StatusBar) so the toggle applies app-wide.

UI polish

  • Onboarding revamp (feature grid, labeled stepper, brand strip); Settings rebuilt into a two-pane layout (nav + search + sectioned rows); refined empty state, LicenseActivation, shared Input.
  • Data Diff grid fills the pane (no empty "hole") + opaque sticky header.
  • DataTable: cell-edit font no longer grows; eye button for show/hide columns.
  • Sidebar/tab-bar divider alignment; grid-style table icon.

Licensing & trial (1.6.0 headline)

  • 17-day trial (was 5); hard block on expiry (non-dismissible activation screen; only a valid key un-gates).
  • Reinstall-proof: trial start mirrored to app-data + home, earliest-wins; plus server-authoritative reconciliation via POST /api/license/trial keyed by device_id (see stroke-web PR adding cool features #1).

Platform

  • macOS Edit menu so undo/redo/cut/copy/paste/select-all/word-delete work in all inputs.

Notes

  • Rust cargo check + frontend vite build green. Requires stroke-web PR adding cool features #1 deployed for server-side trial enforcement.

@broisnees broisnees added the release:minor Bump minor version (0.x.0) label Jul 6, 2026
@changeset-bot

changeset-bot Bot commented Jul 6, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: eb86a63

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

broisnees added 21 commits July 6, 2026 21:08
- Replace the floating connection dialog with a full-window screen
  (fixed inset-0) built on the bits-ui Dialog primitive, keeping
  focus-trap / Escape / scroll-lock. Roomier, centered form column,
  no more Type-dropdown overflow.
- Add DbIcon.svelte + db-icons.js: real monochrome brand marks
  (Postgres, MySQL, MariaDB, SQLite, CockroachDB, ClickHouse, DuckDB,
  Cloudflare, BigQuery, Turso, Neon, Supabase, PlanetScale, Prisma)
  rendered with currentColor. SQL Server + unknowns fall back to a
  filled cylinder. Paths sourced from simple-icons, inlined so no
  runtime dependency.
- Use brand marks in the saved-connection list, the Type dropdown
  (trigger + items), and the provider sign-in panel.
- Revamp ProviderConnect idle/connected states with the brand mark
  and cleaner typography; drop the generic database glyph.
- Clarify MS SQL Server 'Encrypt' / 'Trust server certificate'
  options with helper text; gate Trust on Encrypt being enabled.
Fixes the asymmetric 'floating in a void' full-window layout — the
form now sits in a centered rounded card with the name/type as its
header, balanced in the canvas. Inputs go h-9 / rounded-lg with a
clearer focus ring; inline Parse/Browse buttons align to match.
- Add iconSet setting ('lucide' | 'hugeicons') to the settings store,
  persisted + applied (data-icon-set attribute + reactive appIconSet).
- New <Icon name=…> wrapper renders the active family via a shared
  icon-registry; falls back to Lucide when a name has no Hugeicons
  mapping, so switching sets never leaves a hole. ~45 common icons
  mapped so far — extend by adding registry entries.
- Add an 'Icon set' selector to Settings with a live per-family preview.
- Migrate the connection screen's chrome glyphs to <Icon> as the first
  fully-switchable surface.
- Deps: @hugeicons/svelte, @hugeicons/core-free-icons.
…ring

- Add ~20 more common glyphs (chevrons, cloud, server, command, sun/moon,
  wifi, lock-open, archive, etc.) to the shared icon registry so more
  surfaces can adopt <Icon> without name gaps.
- Bump the shared Input focus ring 1px → 2px to match the connection
  screen and read more intentional app-wide.
- Rebuild the 4-step onboarding to match the connection screen's
  language: refined ambient glow + faint dot grid, a labeled segmented
  stepper, balanced type, subtle fly/stagger motion.
- Step 1 shows real database brand marks (DbIcon) in the connect preview
  and a 'Works with' brand strip; preview panels get app-window chrome.
- Step 2 toolkit grid gets hover-lift cards; ⌘K hint in a kbd chip.
- Route all glyphs through <Icon>, so onboarding follows the icon-set
  toggle too; extend the registry with the onboarding glyphs.
- Same contract (open/onconnect/onsample, license step, stroke:onboarded).
- Connection form: drop the floating centered card. The form is now a
  left-aligned column (no border/bg), top-anchored with generous padding
  — reads as a real settings form, not an AI-vibe-coded card.
- Footer actions span to the window edge as a proper action bar.
- ProviderConnect (Neon/Supabase/PlanetScale/Prisma): remove the centered
  bordered card; left-aligned brand tile + heading + full-width sign-in.
- CloudflareLogin: drop the off-brand amber cards; neutral left-aligned
  layout, real D1 brand mark, primary-tinted selection, bigger search.
navRow now takes an icon name and renders through <Icon>, so the
Extensions / MCP / AI / License / About rows visibly change between
Lucide and Hugeicons — immediate feedback in the dialog where the
toggle lives. Adds 'info' to the registry.
…ar alignment

- Onboarding step 1: drop the two-column tablist + preview clutter for a
  clean 2x2 feature grid; remove now-dead carousel state.
- LicenseActivation: switch to <Icon>, premium h-11 input with focus ring,
  and fix the washed-out disabled button (intentional muted state, not a
  faded primary).
- Empty state (no connection): engine chips now use real brand marks; larger CTA.
- Sidebar header: split into two h-9 rows so its dividers line up with the
  tab bar + table toolbar on the right (fixes the subtle mismatch).
… app-wide

Migrate Sidebar, TableToolbar, TabBar, CommandPalette and StatusBar off
direct @Lucide imports onto the shared <Icon> wrapper, so flipping the
icon-set setting visibly changes icons across the whole working view.
Value-passed icons (connIcon(), tabIcon(), driverIcon(), command + tool
menu 'icon:' fields) now carry kebab name strings and render via <Icon>.
Registry extended (~38 new mappings) to cover every chrome glyph; all
names verified present, so nothing falls back unintentionally.
…, fix cell-edit font

- macOS: the frameless window had no app menu, so WKWebView text fields
  lost ⌘Z/⌘⇧Z/⌘X/C/V/⌘A and ⌥⌫ word-delete. Install the standard menu
  (Menu::default) so native editing works in every input/textarea/cell
  editor. (cargo check passes.)
- Input primitive: h-8 → h-9, px-3, subtle hover border, smoother
  transition — more refined across all forms/dialogs.
- DataTable: cell editor rendered at text-ui-sm while the grid draws
  text-ui-xs, so the font grew on edit. Match to text-ui-xs + leading-none.
…stgres case-fold error

- Map 'table-2' Hugeicons glyph to Table02Icon (data-grid look) instead of
  Table01Icon (which read as furniture) — Image #21.
- Sidebar header: drop the divider between the schema row and the filter
  row; only the header's bottom border remains — Image #22.
- SQL console: when a query fails with relation/column "does not exist",
  show a hint that Postgres folds unquoted names to lowercase and to quote
  mixed-case identifiers (autocomplete already inserts the quoted form) — Image #23.
Rebuild the Settings dialog to the Zed-style layout from the reference:
- Left rail: 'Search settings…' box + category nav (General, Appearance,
  Integrations, About) with active highlight.
- Right pane: section labels with a hairline underline, then full-width
  rows — bold title + muted description on the left, control on the right,
  hairline dividers between (no more bordered cards).
- Search filters rows live across every category (flat results).
- Toggles switch to the primary accent when on. Integrations/About use
  action-button rows (Open / Configure / Manage / View). Widened the
  dialog to a proper settings surface.
Hugeicons Table01/02/03 are all furniture-style (tabletop + legs). Map
'table-2' to GridTableIcon — a rounded rect with row/column lines — so
the sidebar table rows, tabs, and everywhere else read as a data table.
- TRIAL_DAYS 5 → 17.
- Trial start is mirrored to <app-data>/.trial AND <home>/.stroke/trial;
  the earliest timestamp wins and both are repaired on read. A reinstall
  wipes app-data but the home copy survives, so the trial can't be reset
  by uninstall/reinstall. (Server-side device registration remains the
  path for full-disk-wipe enforcement; API scaffolding already exists.)
- LicenseGate now hard-blocks: when the trial is over with no valid
  license, the entire app is replaced by a non-dismissible activation
  screen (activate or quit). Loads local status on first paint, then
  phones home. cargo check + frontend build pass.
…ader

- The results table was width:totalWidth, so with few columns it left a big
  empty 'hole' to the right. Now w-full + min-width + a flexible filler column
  so the grid always fills the pane; wide diffs still scroll horizontally.
- Sticky header cells were transparent, so scrolled rows bled through it.
  Give every header cell an opaque bg-background.
- Hide the junk 'null' column type label; subtle hover highlight on unchanged
  rows (status tints preserved).
On launch, when not licensed, phone home to POST device_id (+ local start)
to the trial endpoint. The server keeps the EARLIEST start per device and
returns it; we mirror that back to the local .trial files. So a reinstall
or disk wipe can't grant a fresh trial — the server remembers the device.
Offline is a silent no-op (local grace). cargo check passes.
The column visibility control used a furniture-ish 'columns-3' glyph in the
Hugeicons set. Give it a clear eye (eye when all visible, eye-off when some
columns are hidden) + a 'Show / hide columns' label. Keeps the hidden-count badge.
window.__TAURI__ isn't exposed (withGlobalTauri off), so add a dev-only
window.__stroke = { status, expireTrial(daysAgo), resetTrial } that invokes
the debug commands and refreshes the license store — so trial states can be
tested from the console without enabling the global Tauri bridge in prod.
TrialExpiredScreen wrapped the activation in a bordered card, giving a
box-in-a-box look. Render LicenseActivation 'naked' (just the key field +
button, no card), and match the naked button height to the input (h-11).
@broisnees broisnees changed the title feat: database provider sign-in (Neon/Supabase/PlanetScale/Prisma) + fixes Release 1.6.0 — connection revamp, Hugeicons, trial gate & UI polish Jul 6, 2026
# Conflicts:
#	package.json
#	src-tauri/tauri.conf.json
@broisnees broisnees self-assigned this Jul 6, 2026
@broisnees
broisnees merged commit bb40de1 into master Jul 6, 2026
1 check passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release:minor Bump minor version (0.x.0)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant