From 70a880f1c1fb0929cf249160ab7efe70bef62403 Mon Sep 17 00:00:00 2001 From: Youssef Idmoussi Date: Sat, 13 Sep 2025 18:41:01 +0200 Subject: [PATCH 1/3] Add selectable rows and filter button to model table - Add checkboxes to table rows and header for row selection - Implement 'Show Selected Only' filter button with toggle functionality - Add client-side JavaScript for selection state management and filtering - Style checkboxes, selected rows, and filter button to match existing design - Ensure accessibility with keyboard navigation and proper ARIA labels --- packages/web/src/index.css | 53 ++++++++++++++-- packages/web/src/render.tsx | 116 ++++++++++++++++++++++++++++++++++-- 2 files changed, 160 insertions(+), 9 deletions(-) diff --git a/packages/web/src/index.css b/packages/web/src/index.css index d8f66be6..17bb4060 100644 --- a/packages/web/src/index.css +++ b/packages/web/src/index.css @@ -266,10 +266,53 @@ td { white-space: nowrap; } -tbody { - td { - color: var(--color-text-tertiary); - } +tbody td { + color: var(--color-text-tertiary); +} + +/* Checkbox column */ +td:first-child, +th:first-child { + width: 36px; + text-align: center; + padding: 0.75rem 0.5rem; +} + +/* Row selection highlight */ +tr.selected-row { + background-color: var(--color-surface); + font-weight: 500; + border-left: 2px solid var(--color-brand); +} + +/* Checkbox style */ +input[type="checkbox"].row-checkbox, +#select-all { + accent-color: var(--color-brand); + width: 1.15em; + height: 1.15em; + cursor: pointer; + border-radius: 2px; +} + +/* Filter button style - matches "How to use" button */ +#filter-selected { + flex: 0 0 auto; + cursor: pointer; + border: none; + background-color: var(--color-brand); + color: var(--color-text-invert); + font-size: 0.8125rem; + line-height: 1.1; + height: 2rem; + padding: 0.5rem 0.75rem; + border-radius: 0.25rem; +} +#filter-selected:disabled { + opacity: 0.5; + cursor: not-allowed; +} + td:nth-child(1) { font-weight: 500; @@ -410,7 +453,7 @@ tbody { .modality-icon:hover::after { opacity: 1; } -} + dialog::backdrop { backdrop-filter: blur(8px); diff --git a/packages/web/src/render.tsx b/packages/web/src/render.tsx index fffd5bdc..32654124 100644 --- a/packages/web/src/render.tsx +++ b/packages/web/src/render.tsx @@ -203,15 +203,17 @@ export const Rendered = renderToString(
- - ⌘K -
+ + ⌘K + + + @@ -321,7 +323,10 @@ export const Rendered = renderToString( modelA.name.localeCompare(modelB.name) ) .map(([modelId, model]) => ( - + +
Provider
+ +
{renderProviderLogo(providerId)} @@ -520,5 +525,108 @@ export const Rendered = renderToString(
+