← Commit history

v1.4.3: Panel heading spans the panel; the demo button is filled again

John Lauer ·db4907e2eb ·1mo ago ·parent 5437bc6
6 files changed +30−106
Cargo.lock+1−1
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"  [[package]] name = "adom-parts-search"-version = "1.4.2"+version = "1.4.3" dependencies = [  "base64",  "clap",
Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "adom-parts-search"-version = "1.4.2"+version = "1.4.3" edition = "2021" description = "Parts Search Electronics component search — CLI, backend HTTP service, and Hydrogen webview app" license = "MIT"
VERSION+1−1
@@ -1 +1 @@-1.4.2+1.4.3
package.json+1−40
@@ -38,44 +38,5 @@     "SKILL.md",     "BUILD-SKILL.md",     "CHANGELOG.md"-  ],-  "changelog": "Panel heading spans the panel; the demo button is filled again",-  "discovery_triggers": [-    "parts search",-    "find part",-    "source component",-    "source part",-    "compare distributors",-    "compare vendors",-    "Mouser or DigiKey",-    "BOM sourcing",-    "price this part",-    "where can I get",-    "check stock",-    "parts availability",-    "fastest delivery",-    "cheapest part",-    "component search",-    "part lookup",-    "price breaks"-  ],-  "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.",-  "sample_prompts": [-    {-      "label": "source an STM32F103RBT6",-      "prompt": "source an STM32F103RBT6"-    },-    {-      "label": "where can I get an ESP32-S3-WROOM cheape",-      "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"-    },-    {-      "label": "compare Mouser, DigiKey and JLCPCB for a",-      "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"-    },-    {-      "label": "price this BOM across distributors",-      "prompt": "price this BOM across distributors"-    }   ]-}\ No newline at end of file+}
page.json+8−49
@@ -33,25 +33,13 @@   },   "hero": {     "type": "image",-    "path": "screenshots/hero.png"+    "path": "docs/hero.png"   },   "sample_prompts": [-    {-      "label": "source an STM32F103RBT6",-      "prompt": "source an STM32F103RBT6"-    },-    {-      "label": "where can I get an ESP32-S3-WROOM cheape",-      "prompt": "where can I get an ESP32-S3-WROOM cheapest and fastest"-    },-    {-      "label": "compare Mouser, DigiKey and JLCPCB for a",-      "prompt": "compare Mouser, DigiKey and JLCPCB for an LM555"-    },-    {-      "label": "price this BOM across distributors",-      "prompt": "price this BOM across distributors"-    }+    "source an STM32F103RBT6",+    "where can I get an ESP32-S3-WROOM cheapest and fastest",+    "compare Mouser, DigiKey and JLCPCB for an LM555",+    "price this BOM across distributors"   ],   "discovery_triggers": [     "parts search",@@ -66,41 +54,12 @@     "where can I get",     "check stock",     "parts availability",-    "fastest delivery",-    "cheapest part",-    "component search",-    "part lookup",-    "price breaks"+    "fastest delivery"   ],-  "discovery_pitch": "Search Mouser, DigiKey and JLCPCB in parallel with product photos; Mouser-preferred best-source pick. Say 'with parts search' to your AI.",+  "discovery_pitch": "Search Mouser + DigiKey + JLCPCB in parallel from one interface, with product photos and a Mouser-preferred best-source pick.",   "metadata": {     "platform": "linux"   },   "category": "tools",-  "org": "adom",-  "description": "One search box across Mouser, DigiKey and JLCPCB. Parallel queries, side-by-side product photos, and a Mouser-preferred recommendation that reasons around stock and lead time. Dock Bar ready: serve, health, settings, Say it.",-  "dependencies": {-    "adom/adom-mouser": "*",-    "adom/adom-digikey": "*",-    "adom/adom-jlcpcb": "*"-  },-  "needs_sudo": false,-  "scripts": {-    "install": "./install.sh",-    "uninstall": "./uninstall.sh"-  },-  "files": [-    "bin/**",-    "skills/**",-    "docs/icon.svg",-    "dockbar.json",-    "install.sh",-    "uninstall.sh",-    "package.json",-    "README.md",-    "SKILL.md",-    "BUILD-SKILL.md",-    "CHANGELOG.md"-  ],-  "changelog": "Panel heading spans the panel; the demo button is filled again"+  "org": "adom" }\ No newline at end of file
src/app/ui.html+18−14
@@ -94,20 +94,24 @@ main>:first-child{margin-top:0} /* The newbie panel: ONE full-width band, a SIBLING of the app body (never    inside the app grid, or it stays a column however wide you style it).    Two columns: the demo button alone on the left, the prompts table right. */-.say{margin:0 0 16px;position:relative;display:grid;grid-template-columns:clamp(180px,30%,220px) 1fr;gap:24px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 44px 16px 16px;animation:fadein .25s ease}+.say{margin:0 0 16px;position:relative;display:grid;grid-template-columns:clamp(180px,30%,220px) 1fr;grid-template-areas:"head head" "left right";gap:16px 24px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 44px 16px 16px;animation:fadein .25s ease} .say[hidden]{display:none}-.say-left{display:flex;align-items:flex-start;border-right:1px solid var(--border);padding-right:24px;margin-right:-24px}-.say-right{min-width:0}+.say-left{grid-area:left;display:flex;align-items:flex-start;border-right:1px solid var(--border);padding-right:24px;margin-right:-24px}+.say-right{grid-area:right;min-width:0}+.say-head{grid-area:head}+.say-head{grid-area:head;min-width:0} .say-head h2{font:600 15px var(--brand-heading);color:var(--text);margin:0}-.say-sub{color:var(--text-2);font-size:13.5px;margin:4px 0 10px;max-width:70ch}+.say-sub{color:var(--text-2);font-size:13.5px;margin:4px 0 0;max-width:70ch} .say-sub b{color:var(--text);font-weight:600} .say-close{position:absolute;top:10px;right:10px;width:28px;height:28px;color:var(--text-2)} .say-close svg{width:16px;height:16px} /* The demo button is the panel's ONLY filled button. */-.demo-btn{background:var(--accent);border-color:var(--accent);color:var(--on-accent);border-radius:8px;padding:10px 18px;font:600 14px var(--brand-heading);gap:8px;min-height:auto;box-shadow:none}-.demo-btn:hover{background:var(--accent-hover);border-color:var(--accent-hover)}-.demo-btn svg{width:16px;height:16px}-.demo-btn:disabled{opacity:.6;cursor:progress}+.say .say .demo-btn{background:var(--accent);border-color:var(--accent);color:var(--on-accent);border-radius:8px;padding:10px 18px;font:600 14px var(--brand-heading);gap:8px;min-height:auto;box-shadow:none}+.say .say .demo-btn:hover{background:var(--accent-hover);border-color:var(--accent-hover)}+.say .demo-btn:active{background:#009d97;border-color:#009d97}+.say .demo-btn:active{background:#009d97;border-color:#009d97}+.say .say .demo-btn svg{width:16px;height:16px}+.say .say .demo-btn:disabled{opacity:.6;cursor:progress} /* Prompts are a TABLE, not pills: phrases differ in length, so pills go ragged    and the eye reads the boxes instead of the words. The action cell tracks the    PHRASE (max-content), so the icons never strand at the window edge. */@@ -394,9 +398,9 @@ select.sel:disabled{opacity:.5;cursor:not-allowed}    pane band is ~744-853px, so collapsing any higher would hide the two-column    layout in the exact pane it exists for. 744px is in the test matrix. */ @media (max-width:620px){-  .say{grid-template-columns:1fr;gap:14px;padding:14px 40px 14px 14px}+  .say{grid-template-columns:1fr;grid-template-areas:"head" "left" "right";gap:14px;padding:14px 40px 14px 14px}   .say-left{border-right:none;border-bottom:1px solid var(--border);padding:0 0 14px;margin:0}-  .say-left .demo-btn{width:100%;justify-content:center;min-height:44px}+  .say .demo-btn{width:100%;justify-content:center;min-height:44px} }  /* ---- Responsive: reshape, do not shrink ---- */@@ -455,14 +459,14 @@ select.sel:disabled{opacity:.5;cursor:not-allowed}   <div class="app-body" id="appBody">     <main>       <section class="say" id="say" aria-labelledby="sayTitle" hidden>+        <div class="say-head">+          <h2 id="sayTitle">Say it</h2>+          <p class="say-sub">You never need this page's buttons: just tell your AI what you want, using the words <b>parts search</b>. Copy a phrase, or send it straight to a new AI thread.</p>+        </div>         <div class="say-left">           <button class="btn demo-btn" id="btnDemo" data-tooltip="A two-minute narrated walk through the whole page: the prompts, a live search across all three vendors, the best-source banner, Settings, and the health lights."><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 4.8v14.4a.6.6 0 0 0 .92.5l11.3-7.2a.6.6 0 0 0 0-1l-11.3-7.2a.6.6 0 0 0-.92.5z"/></svg>Play the 2-minute demo</button>         </div>         <div class="say-right">-          <div class="say-head">-            <h2 id="sayTitle">Say it</h2>-            <p class="say-sub">You never need this page's buttons: just tell your AI what you want, using the words <b>parts search</b>. Copy a phrase, or send it straight to a new AI thread.</p>-          </div>           <div class="say-table" id="sayList" role="list"></div>         </div>         <button class="iconbtn say-close" id="sayClose" aria-label="Close the prompts panel" data-tooltip="Close this panel. The question mark in the header brings it back, and your choice is remembered."><svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg></button>