Skip to content

feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish#28814

Merged
austinpickett merged 5 commits into
mainfrom
feat/design-system-checkbox
May 20, 2026
Merged

feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish#28814
austinpickett merged 5 commits into
mainfrom
feat/design-system-checkbox

Conversation

@austinpickett

@austinpickett austinpickett commented May 19, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?

Replaces the hand-rolled shadcn-style Checkbox in web/src/components/ui/ with the Nous DS Checkbox (Radix-backed) from @nous-research/ui, bumps the DS to ^0.14.2, and picks up two regressions surfaced by the bump.

The unifying motivation is design-system cleanup: the dashboard's checkbox styling now tracks @nous-research/ui instead of drifting locally, and the kanban dashboard plugin gets the same component via the existing plugin SDK rather than continuing to render bare native <input type="checkbox"> controls.

Two regressions came along for the ride because they were the immediate fallout from poking at this area of the dashboard:

  1. Missing fonts after the 0.14.x bump — the DS split @font-face declarations out of globals.css into a new fonts.css in 0.14.x. The dashboard only imported globals.css, so after the bump all DS components silently fell back to a system font stack (Collapse / Mondwest / Rules Compressed / Rules Expanded never registered).
  2. Header toolbars not right-aligned on sm: viewports — PR feat(web): mobile dashboard UX polish #28127 ("mobile dashboard UX polish") flipped four pages' setEnd(...) wrappers to w-full ... justify-start so toolbars stack left on mobile, but the outer end slot in PageHeaderProvider already has sm:justify-end — which has no effect when its only child is w-full. The Analytics / Models / Logs / Plugins toolbars ended up pinned to the left of the right-side sm:max-w-md slot on desktop instead of flush against the right edge.

Related Issue

Fixes #

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

(Primarily a DS migration; also rolls up two fix: regressions.)

Changes Made

Checkbox migration

  • web/package.json / web/package-lock.json — bump @nous-research/ui from 0.14.0^0.14.2
  • web/src/components/ui/checkbox.tsxdeleted (replaced by DS Checkbox)
  • web/src/components/ModelPickerDialog.tsx — switch to DS Checkbox + paired <Label htmlFor>, use onCheckedChange
  • web/src/pages/ProfilesPage.tsx — same migration pattern as above
  • web/src/plugins/registry.ts — expose Checkbox on window.__HERMES_PLUGIN_SDK__.components
  • plugins/kanban/dashboard/dist/index.js — migrate the 7 native checkbox call sites (settings auto-decompose, create-board "switch to", "show archived", "lanes by profile", bulk "reclaim first", column-header select-all, per-card select) to the SDK Checkbox. Includes a fallback shim (const Checkbox = SDK.components.Checkbox || function (...) { return h("input", ...); }) so the bundle still renders against older hosts that don't yet expose Checkbox on the SDK

Fix: missing fonts after DS 0.14.x bump

  • web/src/index.css — add @import '@nous-research/ui/styles/fonts.css'; before globals.css. As of 0.14.x, globals.css only declares the --font-* variables — the @font-face rules live in the separate fonts.css, which the dashboard wasn't importing

Fix: right-align header toolbars on sm: and up

  • web/src/pages/AnalyticsPage.tsx, web/src/pages/LogsPage.tsx, web/src/pages/ModelsPage.tsx, web/src/pages/PluginsPage.tsx — add sm:justify-end on the setEnd(...) inner wrappers (which are w-full and therefore neutralise the outer sm:justify-end on PageHeaderProvider)

How to Test

  1. cd web && pnpm i (picks up @nous-research/ui@^0.14.2)
  2. Run python -m hermes_cli.main web --no-open and cd web && npm run dev in another terminal.
  3. Checkbox styling — Profiles page: click "Create profile". The "Clone from default" checkbox should render as the DS Radix-styled square (midground-bordered, fills with bg-midground/15 + check icon when active), not the old shadcn-style input.
  4. Checkbox styling — Model picker: open any model picker dialog. The "Persist globally" checkbox should be the DS variant; clicking the label text should also toggle (label is paired via htmlFor).
  5. Checkbox styling — Kanban: visit /kanban. All seven checkbox sites should be DS-styled: settings → "Auto-decompose triage tasks"; "+ New board" dialog → "Switch to this board"; toolbar → "Show archived" + "Lanes by profile"; bulk-actions bar → "Reclaim first"; per-column header select-all; per-card select. Toggling a card checkbox should NOT also open the card detail (click propagation stopped).
  6. Fonts: hard-reload (Cmd/Ctrl+Shift+R). Header titles, segmented controls, tabs, and DS buttons should render in Rules Expanded / Collapse / Mondwest — not in a system font. Open DevTools → Network → Fonts and confirm Collapse-*.woff2, RulesExpanded-*.woff2, Mondwest-Regular.woff2, etc. are loaded from node_modules/@nous-research/ui/dist/fonts/....
  7. Header right-alignment: on a wide viewport (≥ sm, 640px+), the action toolbars on Analytics (7D / 30D / 90D / Refresh), Models, Logs (Auto-refresh / Refresh), and Plugins (Rescan dashboard extensions) should sit flush against the right edge of the header, in line with the right edge of the body cards below.
  8. Mobile preservation: resize below sm (or open DevTools mobile emulator). The same toolbars should stack below the title and align to the LEFT of the row, as introduced in feat(web): mobile dashboard UX polish #28127.

Checklist

Code

  • I've read the Contributing Guide
  • My commit messages follow Conventional Commits (feat(web): for this PR)
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature (no unrelated commits)
  • I've run pytest tests/ -q and all tests pass — N/A, dashboard-only changes; ran cd web && npx tsc -b (passes) and npx eslint src/plugins/registry.ts src/pages/{Analytics,Logs,Models,Plugins}Page.tsx (clean). The pre-existing lint errors in PluginsPage (setLoading(true) in an effect, missing onRescan dep) and themes/context.tsx (mixed exports) are unrelated.
  • I've added tests for my changes — N/A (CSS/className tweaks and a like-for-like component swap)
  • I've tested on my platform: Ubuntu 24.04 / WSL2

Documentation & Housekeeping

  • I've updated relevant documentation — N/A
  • I've updated cli-config.yaml.example if I added/changed config keys — N/A
  • I've updated CONTRIBUTING.md or AGENTS.md if I changed architecture or workflows — N/A (the plugin SDK now exports Checkbox alongside the other DS components, no docs reference its surface yet)
  • I've considered cross-platform impact — N/A (browser-only changes)
  • I've updated tool descriptions/schemas if I changed tool behavior — N/A

Screenshots / Logs

Before (regression introduced by #28127 — toolbars floating mid-row on sm: and up): see screenshots attached in the originating issue/conversation for Analytics, Models, Logs, Plugins. After this PR, those toolbars sit flush against the right edge of the header, in line with the right edge of the body cards below.

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in #28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
@austinpickett austinpickett requested a review from a team May 19, 2026 15:54
@github-actions

github-actions Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

🔎 Lint report: feat/design-system-checkbox vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 8963 on HEAD, 8963 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 4719 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the dashboard’s checkbox usage to the Radix-backed Nous design-system Checkbox (@nous-research/ui) and polishes related UI regressions introduced by the DS bump and prior mobile header layout changes.

Changes:

  • Replace local shadcn-style checkbox with @nous-research/ui Checkbox across the dashboard and expose it via the plugin SDK (plus kanban plugin migration with a backwards-compatible shim).
  • Fix DS font loading regression by importing @nous-research/ui/styles/fonts.css before globals.css.
  • Restore right-aligned header toolbars on sm:+ viewports while preserving the mobile left-stacked layout.

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated no comments.

Show a summary per file
File Description
web/src/plugins/registry.ts Exposes DS Checkbox on the plugin SDK components surface.
web/src/pages/ProfilesPage.tsx Migrates “Clone from default” to DS Checkbox + Label htmlFor wiring.
web/src/components/ModelPickerDialog.tsx Migrates “Persist globally” to DS Checkbox + Label htmlFor wiring and onCheckedChange.
web/src/pages/AnalyticsPage.tsx Adds sm:justify-end to inner end-slot wrapper to re-enable desktop right alignment.
web/src/pages/LogsPage.tsx Same sm:justify-end header alignment fix for logs toolbar.
web/src/pages/ModelsPage.tsx Same sm:justify-end header alignment fix for models toolbar.
web/src/pages/PluginsPage.tsx Same sm:justify-end header alignment fix for plugins toolbar.
web/src/index.css Imports DS fonts.css before globals.css to restore custom font faces.
web/src/components/ui/checkbox.tsx Removes the local checkbox implementation now replaced by DS.
web/package.json Bumps @nous-research/ui dependency to ^0.14.2.
web/package-lock.json Lockfile update for @nous-research/ui@0.14.2 and transitive deps.
plugins/kanban/dashboard/dist/index.js Migrates kanban checkboxes to SDK Checkbox with fallback shim for older hosts.
Files not reviewed (1)
  • web/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@alt-glitch alt-glitch added type/refactor Code restructuring, no behavior change P3 Low — cosmetic, nice to have comp/plugins Plugin system and bundled plugins javascript Pull requests that update javascript code labels May 19, 2026
@austinpickett

Copy link
Copy Markdown
Collaborator Author

Applied nix lockfile hash fix for web/package-lock.json bump locally.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 13 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • web/package-lock.json: Language not supported

@austinpickett austinpickett marked this pull request as draft May 19, 2026 17:23
@austinpickett austinpickett marked this pull request as ready for review May 19, 2026 18:55
@austinpickett austinpickett merged commit edb2d91 into main May 20, 2026
12 of 13 checks passed
@austinpickett austinpickett deleted the feat/design-system-checkbox branch May 20, 2026 12:00
Lillard01 pushed a commit to Lillard01/hermes-agent that referenced this pull request May 21, 2026
…ish (NousResearch#28814)

* feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in NousResearch#28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): update web npmDeps hash for package-lock bump

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): refresh npm lockfile hashes

* chore(ci): re-trigger checks after nix lockfile hash fix

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Gpapas pushed a commit to Gpapas/hermes-agent that referenced this pull request May 23, 2026
…ish (NousResearch#28814)

* feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in NousResearch#28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): update web npmDeps hash for package-lock bump

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): refresh npm lockfile hashes

* chore(ci): re-trigger checks after nix lockfile hash fix

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Mucky010 pushed a commit to Mucky010/hermes-agent that referenced this pull request May 24, 2026
…ish (NousResearch#28814)

* feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in NousResearch#28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): update web npmDeps hash for package-lock bump

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): refresh npm lockfile hashes

* chore(ci): re-trigger checks after nix lockfile hash fix

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Bryce-huang pushed a commit to wbkunlun/hermes-agent that referenced this pull request May 29, 2026
…ish (NousResearch#28814)

* feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in NousResearch#28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): update web npmDeps hash for package-lock bump

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): refresh npm lockfile hashes

* chore(ci): re-trigger checks after nix lockfile hash fix

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
#AI commit#
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…ish (NousResearch#28814)

* feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish

Replaces the hand-rolled shadcn-style `Checkbox` in `web/src/components/ui/`
with the Nous DS `Checkbox` (Radix-backed) from `@nous-research/ui`, bumps
the DS to 0.14.2, and picks up two regressions surfaced by the bump.

Checkbox migration
- bump `@nous-research/ui` 0.14.0 → ^0.14.2 and remove
  `web/src/components/ui/checkbox.tsx`
- migrate `ProfilesPage` and `ModelPickerDialog` to the DS Checkbox API
  (`onCheckedChange`, paired `<Label htmlFor>`)
- expose `Checkbox` on the dashboard plugin SDK
  (`web/src/plugins/registry.ts`) so plugin bundles can use the same
  DS component
- migrate the kanban dashboard plugin's 7 native `<input type="checkbox">`
  call sites to the SDK `Checkbox`, with a native-input fallback shim so
  the bundle still renders against older hosts that predate the SDK export

Fix: missing font registrations after the 0.14.x split
- import `@nous-research/ui/styles/fonts.css` before `globals.css` in
  `web/src/index.css`. As of 0.14.x, `globals.css` only declares the
  `--font-*` variables (Collapse, Mondwest, Rules Compressed/Expanded);
  the `@font-face` registrations now live in a separate `fonts.css`, so
  without this import the DS components silently fall back to a system
  font stack and look unstyled.

Fix: right-align page header toolbars on sm+ viewports
- The mobile dashboard polish in NousResearch#28127 flipped four pages'
  `setEnd(...)` wrappers from `justify-end` to `w-full ... justify-start`
  so toolbars stack below the title and align left on small screens.
  But the outer `end` slot in `PageHeaderProvider` already has
  `sm:justify-end`, and that has no effect when its only child is
  `w-full` — once a flex child fills the row, the parent's `justify-*`
  can't move it. The toolbar pinned to the *left* of the right-side
  `sm:max-w-md` (~448px) slot, making the buttons appear to float a
  couple-hundred pixels off the right edge on Analytics, Models, Logs,
  and Plugins.
- Re-add `sm:justify-end` on the inner wrapper of each affected page,
  preserving the mobile stacked layout.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): update web npmDeps hash for package-lock bump

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(nix): refresh npm lockfile hashes

* chore(ci): re-trigger checks after nix lockfile hash fix

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/plugins Plugin system and bundled plugins javascript Pull requests that update javascript code P3 Low — cosmetic, nice to have type/refactor Code restructuring, no behavior change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants