Initial panel ui fixes - #150
Merged
Merged
Conversation
…matting - Merge current dev (incl. #148 modal-portal/channel-flow work) into the branch. Resolve the two conflicts: keep #150's Support/Notifications button hover styles (Layout), and keep dev's rewritten CloseChannelModal footer (its card-selector body replaced #150's old body, so the new footer matches). - Fix type-check breaks: restore missing `X` import in BackupModal, drop unused `bgColor` in Toolbar, prefix unused `_subtitle`/`_onBack` params in wallet-init renderStepLayout. - Run prettier (fixes the failing Check Formatting CI step). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
bitwalt
added a commit
that referenced
this pull request
Jul 8, 2026
…v→main) (#133) * chore(mind): bump runtime to mind-assets-v0.7.0 Release the KaleidoMind agent runtime as v0.7.0. The version marker now mismatches every installed runtime, so the version gate (current_runtime_base) treats stale trees as absent and re-downloads the corrected slim runtime on next launch. Built from the current npm pins (mind-provider ^0.6.0 → 0.6.1, kaleido-mcp ^0.2.0, @qvac/sdk ^0.13.5) by the build-mind-assets workflow when the mind-assets-v0.7.0 tag is pushed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(mind): pin mind-provider ^0.6.2 for the v0.7.0 runtime build mind-provider 0.6.2 is the first provider release whose pinned core resolves to @kaleidorg/mind 0.6.1 (on-device tool-output compression + atomic-recipe safety guards); provider 0.6.1 on npm predated the core 0.6.1 publish. The mind-assets-v0.7.0 runtime (ASSETS_TAG in mind_runtime.rs) builds from this pin, so bumping it here makes the downloaded runtime carry the new core. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * refactor(buy-channel): clean up channel summary + payment review UI Reduce visual noise on the Buy a Channel review/payment step while keeping all information intact: - Flatten the liquidity summary cards: drop the bordered corner badge box and show the per-section total inline - Hide the redundant per-section total when there's only one section (single-BTC channel), since it duplicates the header Total capacity - Use a neutral "Total" caption for the BTC section instead of repeating the "Confirmed Channel" title - Collapse the triple-nested QR container down to the white QR tile - Soften heavy shadows and borders on the summary panels Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Bundle kaleido-mcp 0.2.1 (chat-swap quote fix) (#130) Pins MCP_VERSION ^0.2.0 -> ^0.2.1 so the mind bundle picks up the fixed kaleidoswap_get_quote tool (optional layers + buy-side to_amount). Pairs with @kaleidorg/mind 0.6.2's corrected kaleidoswap-atomic recipe args, which the provider (^0.6.2) pulls transitively — no PROVIDER_VERSION change needed. Together these fix "buy 1 USDT" failing in chat with an MCP input-validation error. The bundle is regenerated by prepare-mind-bundle at build time, so this takes effect once both packages are published to npm. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * Add a stop button to the KaleidoMind chat (#131) While the model is responding the send button becomes a red stop button that cancels the in-flight turn (mind.cancelChat → sidecar cancel_chat → aborts the running inference). The chat() promise then resolves with whatever was produced so far and the turn ends cleanly. - mind.ts: chat() accepts a caller-supplied chatId; new cancelChat(chatId). - useMind.ts: expose cancelChat + thread chatId through chat(). - chat.tsx: track the in-flight chatId in a ref; Send↔Stop toggle; "tap ■ to stop" hint while responding. - prepare-mind-bundle: PROVIDER_VERSION ^0.6.2 -> ^0.6.3 (cancel_chat support; pulls @kaleidorg/mind 0.6.4 with the AbortSignal plumbing). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * docs(changelog): 0.5.0 release notes — KaleidoMind agent (hackathon submission) Documents the 0.5.0 release for the QVAC hackathon submission: the on-device KaleidoMind agent (chat, trade-by-chat atomic swaps, buy-channel-by-chat, autonomy tab, stop button) plus the mind-runtime v0.7.0 bump and the recent chat-swap quote + extraction-cancel fixes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(changelog): flag KaleidoMind as experimental in 0.5.0 Adds a prominent warning that the on-device agent and chat-based trading are an early preview — rough edges, possible incorrect responses, and review-before- approve guidance for spends. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * ci(mind-assets): build Windows (win-x64) agent runtime tarball The desktop app ships a Windows build and maps win → kaleidomind-win-x64.tar.gz, but the mind-assets matrix only built mac/linux, so Windows users hit a 404 downloading the agent runtime. Add a windows-latest matrix entry; all @Qvac engines the slim worker keeps (llm-llamacpp + bare-* addons) ship win32-x64 prebuilds in-package, and fetchNode() already handles node.exe. Force bash as the job's default shell so the Package/Upload steps (and tar/shasum/curl) work via Git Bash on the Windows runner. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(mind-bundle): resolve npm.cmd on Windows so staging works prepare-mind-bundle.mjs spawned bare `npm` via execFileSync (no shell). On Windows npm is npm.cmd and execFile won't resolve the .cmd extension, so the Windows mind-assets job failed with `spawnSync npm ENOENT`. Pick the platform-correct binary (npm.cmd on win32) while keeping the no-shell safety. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(mind-bundle): run npm.cmd via shell on Windows (Node 24 EINVAL) Node 24's CVE-2024-27980 hardening refuses to spawn a .cmd/.bat through execFile without a shell, so the previous npm.cmd fix traded ENOENT for EINVAL. Add an opt-in `shell` flag to run() and enable it only for the npm invocation on Windows. All args are static constants (no untrusted input), so the no-interpolation safety property holds. curl/tar stay shell-less. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(mind-bundle): use System32 bsdtar to extract Node zip on Windows Under Git Bash, MSYS GNU tar shadows System32 bsdtar on PATH. GNU tar can't extract the Windows Node .zip and misreads the `C:` drive prefix as a remote host ("tar: Cannot connect to C: resolve failed"). Point the extraction at System32's bsdtar (libarchive), which handles .zip and drive paths. Host-based selection so cross-builds from mac/linux keep using plain tar. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(mind-assets): compute sha256 with sha256sum-or-shasum fallback Git Bash on the Windows runner ships coreutils `sha256sum` but not the Perl `shasum`, so the Package step died with "shasum: command not found". Prefer sha256sum, fall back to `shasum -a 256` (macOS). Both emit `<hex> <file>`, the format the app's checksum verifier parses. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(splashscreen): update branding, copy and logos (#134) - Replace logo.svg references with kaleidoswap-pictogram in splashscreen and favicon - Update full logo reference in README to kaleidoswap-full-logo - Apply #15E99A → #6F32FF gradient to title and progress bar - Change tagline to "Trustless trading on Lightning Network" - Increase spacing between logo and tagline Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * Dashboard fixes (#135) * feat(splashscreen): update branding, copy and logos - Replace logo.svg references with kaleidoswap-pictogram in splashscreen and favicon - Update full logo reference in README to kaleidoswap-full-logo - Apply #15E99A → #6F32FF gradient to title and progress bar - Change tagline to "Trustless trading on Lightning Network" - Increase spacing between logo and tagline Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(dashboard): sidebar hover effects, channel panel UX, asset row fixes - Match sidebar nav item hover style to header icon buttons (primary color, scale) - Separate chevron click (toggle submenu) from label click (navigate) - Replace ArrowDownLeft/ArrowUpRight icons with Download/Upload in sidebar - Add 25px top padding above Deposit/Withdraw quick-action buttons - Rename "Create New Channel" to "Create Channel" (en.json + sidebar tooltip) - Fix RGB asset quick-action button colors to match BTC (green/violet) - Fix asset row tooltip clipping via React portal (position: fixed) - Remove liquidity info footer text from dashboard - Match Manage UTXOs border opacity to other outlined buttons - Remove lock/unlock icon next to OPEN badge in channel list - Move X/Y channel count next to Online chip, color it green Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(errors): distinguish RGB/SDK validation errors from connectivity failures categorizeError previously flagged any error whose message contained "network" as a connectivity failure — so the RGB node's "recipient ID is for a different network" (a 400 validation error) was reported as an unreachable node. Now: - 400 → VALIDATION (non-retryable); connectivity heuristics only apply when there is no HTTP status code. - transformSdkError forwards the kaleido-sdk KaleidoError statusCode/code so an explicit VALIDATION_ERROR/NETWORK_ERROR is trusted over the message heuristic. - Add rgbPaymentErrors util + tests to map RGB payment failures to user-facing copy; wire into the Withdraw modal and wallet dashboard, with en/it strings. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ui): clean up support modal and notification panel (#138) - Remove intro paragraph from support modal - Unify troubleshooting card style with other cards - Remove close button from support modal footer; center email link - Remove gray bell icon from empty notification panel state Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(assets): show all RGB asset schemas (NIA/CFA/UDA/IFA), not just NIA The dashboard and deposit asset picker only read listassets `.nia`, so a received collectible (CFA), unique (UDA) or inflatable (IFA) asset never appeared even though the node tracked it. Add getAllRgbAssets() to flatten all four schemas into one display-ready list (falling back ticker→name→asset_id since CFA has no ticker) and use it in the Deposit modal and wallet dashboard. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix: format rgbPaymentErrors + add missing getAllRgbAssets test The rgbPaymentErrors.ts committed in 6b77418 had malformed indentation that failed CI's `prettier --check`, turning dev red. Reformat it, and add the rgbUtils.test.ts that was left untracked when getAllRgbAssets landed (6414b90). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): redesign Deposit & Withdraw modals + global asset logo update (#137) - Withdraw modal: remove nested card, left-align header with Upload icon and divider, move submit button to bottom-right (green), equal padding, MAX button inside amount input, SAT→SATS, remove max from placeholder, inline BalanceDisplay, confirmation step green Confirm + Back buttons - Deposit modal: remove progress bar and nested card, left-align header with Download icon and divider, Continue button with ArrowRight - Deposit BTC: amount→Test Coins order, unit in label row, full-width input, MAX button inside, max text below, BTC/LN logos replace chips, icon-only refresh button, sticky X button - Deposit RGB: amount section matches BTC style, Lightning tab yellow when selected, green focus border, icon-only refresh button, RGB logo replaces address chip, Recipient ID borderless, remove gradient Generate Address button, remove zero-amount info card, no-channels warning as yellow banner - Global: replace rgb-symbol-color.svg with rgb-logo.svg across all components; add lightning-logo.svg asset; SATS in Total Balance card - Modal: X button moved outside scroll container (always visible) - pnpm-workspace.yaml: approve esbuild + unrs-resolver build scripts Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * Trade page fixes (#139) * First fixes to trade page UI * trade page fixes * fix(precision): respect explicit asset precision of 0 (|| → ??) A precision-0 asset (e.g. 200 units) displayed as 0.000002 and couldn't be sent, because `assetInfo.precision || 8` treats the falsy 0 as "missing" and falls back to 8 — so amounts were scaled by 10^8 (200/1e8 = 0.000002) for both the available-balance display and the send-amount conversion. Switch every `precision || N` fallback to `?? N` so an explicit 0 is honored, keeping the fallback only for genuinely missing asset info. Covers the Withdraw balance/amount path, StatusToast, swap history, channel creation, limit orders, AssetRow, and the asset-channel quote hook. The central getAssetPrecision / formatAssetAmountWithPrecision helpers already handled 0 correctly. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): migrate to Tailwind v4 + consume kaleido-ui design tokens (#141) Adopt kaleido-ui as the single source of truth for the design system and move the app onto Tailwind v4. - Tailwind v3 → v4 via @tailwindcss/vite; drop PostCSS config + autoprefixer - styles.css: @import "tailwindcss" + "kaleido-ui/css"; @config for the app-local legacy palette; @custom-variant dark for class-based dark mode - remove duplicated semantic token definitions from styles.css and tailwind.config.js (surface/content/border/status/primary/secondary/ divider + typography now come from kaleido-ui@^0.1.70 via @theme) - keep the app-specific legacy palette, spacing, and animations locally - rewrite the 22 raw `var(--color-*)` usages to the `--app-*` channel vars exposed by kaleido-ui (styles.css scrollbars + DcaHistoryChart SVG) - typography: Mulish -> self-hosted Satoshi (display) + Geist Mono; drop webfontloader and the Google-hosted Mulish load Visuals are preserved: the desktop's slate palette is now the canonical kaleido-ui semantic palette, and v4 opacity modifiers resolve via color-mix(in oklab, C, transparent), equivalent to the prior rgba() alpha. Verified: type-check, production build, lint (0 errors), 375/375 tests. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(history): redesign filters, sidebar nav, and UI consistency across all history sections (#140) * feat(history): redesign filters, sidebar nav, and UI consistency across all history sections - Add 4-column filter grid (Search / All Assets / All Types / All Statuses) to all history sections (assets, deposits, withdrawals, swaps, channel-orders) - Add new Select component with icon support and consistent dropdown styling - RGB Assets: default to "All Assets" view; fetch all transfers in parallel when no asset selected - Channel Orders: activate All Assets filter using listAssets for readable Name (TICKER) labels; add type filter (Bitcoin vs RGB Asset) - Sidebar: add History submenu with all sections (same accordion pattern as Liquidity) - Edit Columns panel: remove background, keep border only; rename button to "Edit Columns"; style with outline border - Reset to Default: remove border, render as plain clickable text with RotateCcw icon - Standardize refresh button style across all sections (outline, border-white/30, md size) - Use consistent icons: Coins (All Assets), LayoutGrid (All Types), Calendar (All Statuses) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(history): remove section titles, inline refresh button, add tooltips, fix TS6133 - Remove title header (icon + h2) from all wallet-history section cards - Move refresh button inline with filters row as rightmost element - Add 'Refresh data' tooltip to all refresh buttons (matching Lightning Channels card style) - Channel Orders: convert Edit Columns to icon-only button with tooltip - Channel Orders: move column selector panel below filters row - Channel Orders: rename panel title to 'Edit Columns' - fix(select): remove unused React default import resolving TS6133 CI failure Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(history): bound listTransfers concurrency + surface per-asset failures The All-Assets view fired one listTransfers per asset via unbounded Promise.all on every load/refresh (thundering-herd on the local RGB node, which serializes these). Cap concurrency at 5. Also, a per-asset failure was silently dropped (try/finally, no catch) leaving an incomplete list with no feedback; now surface a warning toast counting failed assets. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: bitwalt <walterm21@proton.me> * feat(ui): Buy Channel flow polish + Market Maker navigation (#142) * feat(ui): redesign Liquidity page to match Trade layout - Add ChannelsNav tab strip (Manage Channels / Open / Buy / Sell Channels coming-soon) matching TradeNav style - Restructure channels, create-new-channel and order-new-channel pages with shared nav wrapper - Update page title and icon to "Liquidity" + Droplets across all three routes - Unify filter controls (tabs + Filter + Sort by) into a single row inside the card - Replace StatCard icons with Wallet/ArrowDown/ArrowUp all in primary green style - Match "Your Channels" card bg to StatCards (surface-overlay/80) - Style Details button to match dashboard outline button; remove footer divider - Replace Public Unlock icon with Globe; rename "Sell" → "Sell Channels" in sidebar - Subtle channel card hover (bg-black/20); border on Filter/Sort by buttons Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * liquidity-page-fixes-#1 * feat(ui): Buy Channel flow polish + MM navigation - WalletConfirmationModal: selectable Lightning/Onchain cards, single Pay button, yellow insufficient-balance banner, Deposit-style container - BackConfirmationModal & LSP modal: match Deposit modal style, ghost/primary button patterns, inline X removed, spacing adjustments - Deposit/Withdraw modals: X button moved inline with title row (prop-drilled onClose through LayoutModal → Content → each Step) - Order status screens (Step5): full redesign — no cards, elements on bg, centered vertically; Expired/Failed use early-return branches with Return↔Action row; success uses one-shot confetti + ripple + checkmark animation with infinite green glow pulse; Expired gets scale+glow yellow pulse; Failed gets red glow pulse - OrderProcessingDisplay: wallet-unlock ring animation, Channel Details-style Card with Amount/Method/Type/Asset/Order ID rows - MarketMaker → Buy Channel: navigate to ORDER_CHANNEL_PATH with location.state { preselectedAssetId, returnTo }; Step2 locks asset dropdown when preselected; Step5 returns to returnTo on success/back - i18n: rename Payment Failed→Order Failed, Order Completed!→Order Completed, Payment received!→Payment received; update successMessage copy Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(ui): rename "Total Balance" to "Total Lightning Balance" in Channels Management Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: migrate pnpm overrides from package.json to pnpm-workspace.yaml pnpm v11 no longer reads the "pnpm" field from package.json. Moved all overrides to pnpm-workspace.yaml and regenerated lockfile. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: bitwalt <walterm21@proton.me> * feat(ui): general UI polish — buttons, channel cards, DCA, Limit Orders (#143) General UI polish: unified button radius, pending-channel dots, channel-card footer, DCA/Limit-Orders screens, Settings redesign. Security-sensitive features from the branch were DISABLED before merge (shown 'Coming soon') because they did not work correctly: - Change Password: only re-encrypted the local mnemonic copy without calling the node's /changepassword (which also requires the wallet to be locked), silently diverging the unlock password from the recovery-phrase password. Modal wiring removed; to be reimplemented as lock->changepassword->re-unlock. - Auto Time-Lock: selector was never persisted and no inactivity timer consumed it (locked nothing). Also: merged current dev (Tailwind v4 #141, history #140, buy-channel #142); kept dev's validated versions of Deposit/Step2, LayoutModal, MarketMaker and the history screens; removed dead imports so 'tsc && vite build' is green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(settings): implement Change Password via node lock→changepassword→unlock (#145) The prior modal only re-encrypted the local SQLite mnemonic copy and never changed the node's unlock password, so the two silently diverged (it was disabled in #143). This wires it to the node properly: - Add `changePassword` to NodeApiWrapper + a `changePassword` mutation/hook in nodeApi (SDK already exposes RlnClient.changePassword). - New flow: verify current password locally → lock the node (required by the node's /changepassword, which 403s while unlocked) → POST /changepassword → best-effort re-encrypt the local mnemonic copy with the new password so the recovery-phrase viewer stays in sync → route the user to the standard unlock screen to re-enter with the new password. - Recoverable failure paths: if lock fails the session is untouched; if the change fails the wallet is locked but the password is unchanged and the UI tells the user to unlock with their current password. - Drops the unvalidated seed-phrase fallback (not needed to change the node password; the local copy is only synced when it already exists). Auto Time-Lock remains 'Coming soon' (separate feature, issue #144). Refs #144. NEEDS ON-DEVICE VERIFICATION (node lock/unlock lifecycle). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * feat: docker-regtest connect preset, LN-only deposit max, pending-invoice history filter (#146) * feat: docker-regtest connect preset, LN-only deposit max, pending-invoice history filter Three additions: 1. Remote connect — 'Local Docker Regtest' preset. New regtestConnectionType 'docker' + NETWORK_DEFAULTS.LocalDockerRegtest that points the node's backends at the kaleidoswap-maker docker hostnames (bitcoind:18443, http://esplora:3000, myproxy.local:3000) — the node runs inside the compose network so it resolves those, not localhost — and prefills the fixed regtest wallet password. Lets you unlock a node from `make start-channels` on :3001 in one click. 2. BTC deposit max — use inbound_balance_msat (receivable liquidity) across usable channels instead of next_outbound_htlc_limit_msat (our send limit), and label it 'Max via Lightning' so it's clear the cap is LN-only; on-chain deposits stay unlimited. (Zero-amount invoice is already auto-generated on BTC select.) 3. Deposit history — add a 'Pending invoices' status filter that isolates unpaid zero-amount inbound Lightning invoices (off-chain, Pending, 0 sat, BTC). tsc + vite build green. NEEDS ON-DEVICE VERIFICATION (node connect/unlock, channel liquidity, invoice generation can't be exercised without a live node). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(wallet-remote): handle 'docker' regtest type in submit + node-url copy The submit handler and the node-url description/placeholder still treated the regtest connection type as binary (local vs bitfinex), so selecting 'Local Docker Regtest' fell through to the Bitfinex branch — wrong LSP/maker defaults on save and remote-flavored help text. Both now handle 'docker'. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(ui): drop 'make start-channels' reference from docker regtest card Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(wallet-remote): a locked node (403) is not an auth failure testConnection reported any 403 as 'Authentication failed', but rgb-lightning-node returns 403 for a LOCKED node and 401 for a genuine auth failure. Connecting to a not-yet-unlocked node (e.g. the docker regtest node) wrongly failed the connection test. Now: 401 -> auth error; 403 with name 'LockedNode' -> node reachable (success), unlock proceeds on the next step. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(wallet-remote): don't fail account creation on a locked node The account-creation path (handleTermsAccept) re-checked /nodeinfo with the same 403->'auth failed' logic, so creating an account against a reachable but locked node failed with 'Authentication failed'. Now it mirrors the connection test: 401 = auth error; 403 'LockedNode' = reachable, create the account and route to the unlock screen (instead of the dashboard) so the node can be unlocked with its password. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(deposit): open straight to generated BTC address, skip asset-pick step The deposit modal always opened on Step1 (asset picker), so a BTC deposit needed an extra asset-select + 'Continue' click before the address/invoice was generated. Now it opens directly on Step2 (which already auto-generates the on-chain address + zero-amount LN invoice), defaulting to BTC or the asset the deposit was launched for. Back returns to the picker to switch assets. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(history): hide zero-amount LN invoices from the deposits list by default Unpaid zero-amount BTC Lightning invoices (e.g. the one auto-created when the deposit screen opens) cluttered the deposits history. They're now excluded from the default list and only shown via the 'Pending invoices' filter. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(deposit): show auto-generated BTC address immediately (keep asset step) Reverts the skip-Step1 change: the asset picker (BTC vs RGB) stays. The real issue was that the BTC address/QR/invoice block was gated on `address` — the RGB-only field that is never set for BTC — so the auto-generated onchainAddress/lnInvoiceStr were produced on mount but never displayed, making it look like nothing generated. Gate the BTC block on onchainAddress||lnInvoiceStr instead, and show a spinner while generating. So: pick BTC -> address is generated and shown immediately, no extra click. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(deposit): 'Max via Lightning' = max HTLC limit across channels Use the largest next_outbound_htlc_limit_msat across all channels for the BTC Lightning deposit max, rather than max inbound_balance_msat. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(settings): remove the Auto Time-Lock feature Removed the (non-functional, 'Coming soon') Auto Time-Lock row and its now-unused Timer import from Security & Backup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): general UI polish — splash, channel flows, history, modals (#148) * feat(ui): general UI polish — splash, channel flows, history, modals - Splash screen: remove card-in-card double border; softer orbs with purple+green colors - Buy Channel (order-new-channel): fix LSP confirm modal clickability (pointer-events-auto); center modal; fee selector styled to match Withdraw modal; Channel Lock Duration selector matches settings style; Step5 status screens match Create Channel card pattern with particle animations - Open Channel (create-new-channel): fee selector styled to match Withdraw modal; fee rate label → "Fee Rate"; Step4 success screen adds particle animations, title → "Channel opening completed" - Deposit RGB modal: fix Lightning double-click (inline component anti-pattern); fix Onchain border clip; rename "On-chain" → "Onchain" - Channels list: replace Bitcoin logo img with Lucide Bitcoin icon (green) - History: redesigned filters and sidebar nav across all sections - Various modal and layout fixes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(ts): remove unused imports (ZapOff, IconButton) — fix CI type-check Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(ui): unblock content clicks, localize close-channel labels, surface LSP errors - Layout/styles: #modal-portal covered #content-area at z-50 and, being pointer-events:auto by default, blocked all clicks/scrolls on the page whenever no modal was open (all ~33 modals now portal into it). Add `#modal-portal:empty { pointer-events: none }` so the empty overlay is transparent to input but modals still work once portaled in — no need to touch every modal overlay. - i18n: forceClose / forceCloseChannel / closeChannel had raw English in de/es/fr/it/ja/zh; translate them (aligned with the cooperativeClose / forcedClose card labels). Restore Italian marketMaker.orders.activeTitle ("Ordini Limite Pianificati"). - order-new-channel: default-LSP auto-select failures were swallowed silently; show a toast with the reason while keeping the manual fallback. - styles: wire the zap-icon hover pulse to the actual `.close-channel-btn` (the `.zap-btn` selector matched nothing, so the animation never fired). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ui): stop tall modals from being clipped by the content area Modals now portal into #modal-portal, which is absolute inset-0 inside #content-area (a region shorter than the viewport whose overflow-hidden clips its children). The scroll wrappers cap their height in viewport units (max-h-[85vh]/[90vh]); on windows shorter than ~1000px that exceeds the available space below the sticky top bar, so the modal's header/footer got clipped. Cap the modal scroll region to `calc(100vh - 7rem)` — the space actually available below the top bar plus overlay padding — so tall modals scroll internally instead of overflowing. Scoped to `#modal-portal .overflow-y-scroll`, which is used only by the modal wrappers (nested lists use .overflow-y-auto), so it fixes all current and future modals in one place. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): restore step indicators + fix Peer Connection screen - Reintroduce the wizard step progress indicator (removed in #142) as a reusable, data-driven ChannelWizardSteps component, shown in both the Open Channel (4 steps) and Buy Channel (5 steps) flows. Labels reuse existing translated keys — no new i18n. - Open Channel → Peer Connection (Step1): the two flex-1 cards lacked min-w-0, so a 66-char peer pubkey (flex min-width:auto) blew the layout past the viewport and the existing `truncate` never took effect. Add min-w-0 so the cards shrink and the pubkey truncates. - Peer rows now show a middle-truncated pubkey (start…end) instead of a clipped left-anchored string, so peers stay recognizable. - Suggested-node button is now a labelled "KaleidoSwap LSP · Recommended" card with a chevron affordance instead of a bare logo tile. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * style: prettier-format Step1 (fix CI Check Formatting) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): restore slider+input outbound selection in Buy Channel (Step2) Since v0.5.0 the Buy Channel wizard's Step 2 replaced the shared LiquiditySlider with four hand-rolled slider blocks, and the RGB-asset outbound lost its numeric input entirely — you could only drag a slider, and since AssetQuoteDisplay keys off clientAssetAmount the quote rarely appeared. Restore the v0.5.0 pattern by reusing the existing LiquiditySlider (numeric input + slider + inbound/outbound readout + min/max) for both the BTC and asset outbound selections, matching what BuyChannelModal still uses. This: - brings back typing an exact outbound amount (BTC and asset), alongside the slider and the quick % / MAX chips; - makes the asset quote reachable again (type an amount -> quote shows); - collapses two bespoke slider blocks into the shared component, removing the duplicated markup. Bound to the same form fields (clientBalanceSat, clientAssetAmount) so order submission is unchanged. Money-path UI — needs on-device check against a live LSP before merge. The Market Maker "buy asset" path reroutes into this wizard, so it inherits the fix. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * refactor(ui): declutter LiquiditySlider — drop duplicated outbound/inbound row The widget showed the same values twice: the two summary cards ("Available to send now" = outbound, "Can receive" = inbound) already carry the numbers, then an "Outbound / Inbound" row above the bar repeated them. Remove that row and instead legend the slider bar with small color dots on the two card headers (outbound color on the send card, inbound color on the receive card). Shared component — also cleans up the BuyChannelModal. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): drop redundant per-step titles, enlarge step indicator The step progress indicator already names the current step, so the big centered <h3> title at the top of each wizard step was redundant. Remove it from Open Channel Step 1–3 and Buy Channel Step 1–3 (the Step 4/5 result screens keep their status headings). Bump the ChannelWizardSteps circles (h-10) and labels (text-sm) so the indicator reads as the step heading. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(ui): add InfoHint tooltips to Buy Channel fields Add a small reusable InfoHint (ⓘ trigger wrapping the shared Tooltip) and attach it to the jargon-heavy labels in Buy Channel Step 2 — Channel Capacity, Outbound Balance, and asset Amount — so users get plain-language context on hover without cluttering the form. The BTC/asset outbound LiquiditySliders already carry inline hints. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(ui): InfoHint tooltip collapsed to a narrow column The Tooltip popover only had a max-width, so its shrink-to-fit width was computed against the tiny icon wrapper and collapsed to ~1 word per line, shooting the tall column up over the step indicator. Give it a fixed width (w-64) and open it to the side (position="right") so it renders as a proper readable box beside the field instead of overlapping the stepper. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: bitwalt <walter@kaleidoswap.com> * wip: ... (#150) Co-authored-by: bitwalt <walter@kaleidoswap.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(kaleido-mind): style model pickers, fix modal race, restyle start screen (#149) * fix(kaleido-mind): style model pickers, drop redundant loading banner, fix modal race, restyle start screen - Restyle the model <select> pickers to match History's filter dropdowns (leading icon, chevron, focus ring) in brain-launcher and start-brain-modal. - Remove the duplicate "Loading model · X%" banner above the Outlet — Brain and BrainLauncher already show loading state inline. - Lift a shared `starting` flag into useMind() so any startProvider() caller suppresses the offline "Start KaleidoMind" nudge modal immediately, closing the race window before the first provider_loading event that made the modal flash open at random. - Drop the bordered card around the "Start your brain" screen and its loading state so it sits directly on the background, and restyle the loading state to match Market Maker's connecting animation (glow, glass icon panel, gradient text, splash progress bar) with brain-specific copy/icon. * chore: update pnpm-lock.yaml Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Emile <emile@kaleidoswap.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: bitwalt <walter@kaleidoswap.com> * fix(channel-orders): stop persisting empty/failed orders to history Skip saving channel orders that reached a failed/expired terminal state with no payment made, and always store a fallback access token from the BuyChannelModal so the history page can resolve status/amounts. Prevents empty "Unknown" rows from cluttering the Channel Orders history. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(onboarding): improve recovery phrase readability Render mnemonic words in high-contrast content-primary instead of the washed-out secondary/tertiary tokens, align numbers in a fixed-width mono column, and make the Copy button full-width. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(settings): consolidate Maker & LSP URL config, fix false restart prompt Merge the LSP URL field into the "Maker & LSP Settings" section (they usually point to the same endpoint), add a "Match default Maker URL" shortcut and hint, and default the LSP URL to the default maker URL. Also fix the save handler falsely reporting "node settings changed" on maker/LSP-only edits: the nodeSettingsChanged check now compares against the same normalized baselines used to seed the form, so it no longer prompts a node restart when only maker/LSP URLs change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(node): reconnect automatically and faster when the node drops The reachability monitor now polls adaptively: 10s while healthy, 3s while unreachable or unknown (startup), so the app reconnects on its own within a few seconds instead of waiting on a slow tick or a manual retry. The "Node is offline" modal shows a "reconnecting automatically" hint so users know it's actively retrying. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(channels): restore expanded channel card with BTC/RGB icons Bring the list-channels card back to the always-expanded layout: show outbound/inbound amounts and labels without hover, add a per-section header with the asset icon + ticker (BTC and RGB), and keep the footer actions always visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(changelog): comprehensive 0.5.0 release notes for dev→main promotion Expand the 0.5.0 entry beyond the KaleidoMind hackathon scope to cover the full dev promotion: Tailwind v4 migration, history redesign, deposit/withdraw modal redesign, Change Password, docker-regtest preset, all RGB asset schemas, node reconnection, locked-node handling, and the Windows agent runtime build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Emile Jellinek <emile.jellinek@outlook.it> Co-authored-by: mo_ <mo_harchegani@protonmail.com> Co-authored-by: bitwalt <walter@kaleidoswap.com> Co-authored-by: Emile <emile@kaleidoswap.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.