feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish (#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 #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>
feat(web): mobile dashboard UX polish (#28127)
* feat(web): mobile dashboard UX polish
Bottom sheets for sidebar theme/language pickers on narrow viewports with
enter/exit animation and drag-to-close; inline header badges beside titles;
bottom padding on the route outlet for scroll clearance; profiles loading uses a
unicode braille spinner; align profile/cron card actions to the top; viewport-fit
cover and supporting layout tweaks across dashboard pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix Nix web npm hash and mobile sheet accessibility.
Align fetchNpmDeps in nix/web.nix with web/package-lock.json for CI. Improve BottomPickSheet backdrop labeling, avoid aria-hidden on the dialog during exit animation, and wire theme/language sheets with listbox semantics and localized dismiss labels.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
feat(kanban): show dashboard cron jobs across profiles
Salvages #27568 by @SerenityTn. Dashboard cron page now lists cron
jobs from all profiles, with profile-aware filter UI and storage
routing. Includes test coverage for cross-profile listing, mutation,
deletion, and validation.
Also fixes orphan conflict markers in config.py left by an earlier
salvage merge (kanban.dispatch_stale_timeout_seconds was double-nested
in HEAD/PR markers from #28452 salvage of #23790).
feat(web): mobile dashboard UX polish (#28127)
* feat(web): mobile dashboard UX polish
Bottom sheets for sidebar theme/language pickers on narrow viewports with
enter/exit animation and drag-to-close; inline header badges beside titles;
bottom padding on the route outlet for scroll clearance; profiles loading uses a
unicode braille spinner; align profile/cron card actions to the top; viewport-fit
cover and supporting layout tweaks across dashboard pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix Nix web npm hash and mobile sheet accessibility.
Align fetchNpmDeps in nix/web.nix with web/package-lock.json for CI. Improve BottomPickSheet backdrop labeling, avoid aria-hidden on the dialog during exit animation, and wire theme/language sheets with listbox semantics and localized dismiss labels.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish (#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 #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>
feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish (#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 #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>
feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish (#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 #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>
feat(web): migrate dashboard checkboxes to @nous-research/ui + DS polish (#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 #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>
feat(web): mobile dashboard UX polish (#28127)
* feat(web): mobile dashboard UX polish
Bottom sheets for sidebar theme/language pickers on narrow viewports with
enter/exit animation and drag-to-close; inline header badges beside titles;
bottom padding on the route outlet for scroll clearance; profiles loading uses a
unicode braille spinner; align profile/cron card actions to the top; viewport-fit
cover and supporting layout tweaks across dashboard pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix Nix web npm hash and mobile sheet accessibility.
Align fetchNpmDeps in nix/web.nix with web/package-lock.json for CI. Improve BottomPickSheet backdrop labeling, avoid aria-hidden on the dialog during exit animation, and wire theme/language sheets with listbox semantics and localized dismiss labels.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
feat(web): mobile dashboard UX polish (#28127)
* feat(web): mobile dashboard UX polish
Bottom sheets for sidebar theme/language pickers on narrow viewports with
enter/exit animation and drag-to-close; inline header badges beside titles;
bottom padding on the route outlet for scroll clearance; profiles loading uses a
unicode braille spinner; align profile/cron card actions to the top; viewport-fit
cover and supporting layout tweaks across dashboard pages.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix Nix web npm hash and mobile sheet accessibility.
Align fetchNpmDeps in nix/web.nix with web/package-lock.json for CI. Improve BottomPickSheet backdrop labeling, avoid aria-hidden on the dialog during exit animation, and wire theme/language sheets with listbox semantics and localized dismiss labels.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>