Juan Denis
a4ea3fccbd
fix(frontend): mobile layout for intro strip, info tips and card headers
...
- IconStepStrip stays a compact horizontal row on narrow screens (smaller
tiles, label under icon, horizontal chevrons)
- tip-card-head stacks top-to-bottom with a smaller illustration
- InfoTip clamps to the viewport (collision padding clears the sticky
header, flips below when no room above, max-height scroll)
- card headers wrap on narrow screens; security subtitle gets its own line
2026-11-03 08:51:20 -05:00
Juan Denis
bddca28881
feat(frontend): less text, more icons - shared InfoTip, IconStepStrip and illustrations
...
Move prose into tap-friendly (i) tips and replace intro paragraphs with
icons, step strips and chips across settings, security, add-server,
server detail, proxy, backups, downloads, imports, marketplace and
templates.
2026-11-03 01:45:21 -05:00
Juan Denis
ffde9e851b
Merge pull request #194 from jhd3197/fix/lucide-react-1x
...
Bump lucide-react to 1.65 and replace removed brand icons
2026-11-02 21:11:46 -05:00
Juan Denis
ac61839459
fix(frontend): replace lucide brand icons removed in v1 with react-icons
2026-11-02 21:08:15 -05:00
dependabot[bot]
2bef5060ed
build(deps-dev): bump globals from 15.15.0 to 17.13.0 in /frontend
...
Bumps [globals](https://github.com/sindresorhus/globals ) from 15.15.0 to 17.13.0.
- [Release notes](https://github.com/sindresorhus/globals/releases )
- [Commits](https://github.com/sindresorhus/globals/compare/v15.15.0...v17.13.0 )
---
updated-dependencies:
- dependency-name: globals
dependency-version: 17.13.0
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-11-03 01:40:49 +00:00
dependabot[bot]
0f6a8b62c2
build(deps): bump lucide-react from 0.363.0 to 1.65.0 in /frontend
...
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react ) from 0.363.0 to 1.65.0.
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.65.0/packages/lucide-react )
---
updated-dependencies:
- dependency-name: lucide-react
dependency-version: 1.53.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-11-03 01:40:02 +00:00
Juan Denis
53639f7eae
fix(frontend): move non-component exports out of component files
...
Clears the new react-refresh/only-export-components warnings so the
frontend dependency group bump passes lint.
2026-11-02 20:35:56 -05:00
dependabot[bot]
7f77b1c239
build(deps): bump the frontend group across 1 directory with 26 updates
...
Bumps the frontend group with 26 updates in the /frontend directory:
| Package | From | To |
| --- | --- | --- |
| [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog ) | `1.1.15` | `1.2.1` |
| [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox ) | `1.3.3` | `1.4.1` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog ) | `1.1.15` | `1.3.1` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu ) | `2.1.16` | `2.2.1` |
| [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label ) | `2.1.8` | `2.1.17` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover ) | `1.1.15` | `1.3.1` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select ) | `2.2.6` | `2.4.1` |
| [@radix-ui/react-slot](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slot ) | `1.2.4` | `1.5.0` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch ) | `1.2.6` | `1.4.1` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs ) | `1.1.13` | `1.2.1` |
| [@xterm/addon-fit](https://github.com/xtermjs/xterm.js ) | `0.10.0` | `0.11.0` |
| [@xterm/addon-web-links](https://github.com/xtermjs/xterm.js ) | `0.11.0` | `0.12.0` |
| [@xyflow/react](https://github.com/xyflow/xyflow/tree/HEAD/packages/react ) | `12.10.0` | `12.12.0` |
| [i18next](https://github.com/i18next/i18next ) | `26.3.6` | `26.5.12` |
| [react-i18next](https://github.com/i18next/react-i18next ) | `17.0.11` | `17.1.9` |
| [react-icons](https://github.com/react-icons/react-icons ) | `5.6.0` | `5.7.0` |
| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom ) | `7.18.2` | `7.18.5` |
| [socket.io-client](https://github.com/socketio/socket.io ) | `4.8.3` | `4.8.4` |
| [sonner](https://github.com/emilkowalski/sonner ) | `2.0.7` | `2.0.8` |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react ) | `6.0.3` | `6.1.2` |
| [boneyard-js](https://github.com/0xGF/boneyard ) | `1.9.0` | `1.10.0` |
| [eslint-plugin-react-refresh](https://github.com/ArnaudBarre/eslint-plugin-react-refresh ) | `0.4.26` | `0.5.7` |
| [playwright](https://github.com/microsoft/playwright ) | `1.61.1` | `1.64.1` |
| [sass](https://github.com/sass/dart-sass ) | `1.98.0` | `1.107.1` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `8.1.4` | `8.3.5` |
| [@rollup/rollup-win32-x64-msvc](https://github.com/rollup/rollup ) | `4.62.2` | `4.67.2` |
Updates `@radix-ui/react-alert-dialog` from 1.1.15 to 1.2.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog )
Updates `@radix-ui/react-checkbox` from 1.3.3 to 1.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox )
Updates `@radix-ui/react-dialog` from 1.1.15 to 1.3.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog )
Updates `@radix-ui/react-dropdown-menu` from 2.1.16 to 2.2.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu )
Updates `@radix-ui/react-label` from 2.1.8 to 2.1.17
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label )
Updates `@radix-ui/react-popover` from 1.1.15 to 1.3.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover )
Updates `@radix-ui/react-select` from 2.2.6 to 2.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select )
Updates `@radix-ui/react-slot` from 1.2.4 to 1.5.0
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slot/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slot )
Updates `@radix-ui/react-switch` from 1.2.6 to 1.4.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch )
Updates `@radix-ui/react-tabs` from 1.1.13 to 1.2.1
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md )
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs )
Updates `@xterm/addon-fit` from 0.10.0 to 0.11.0
- [Release notes](https://github.com/xtermjs/xterm.js/releases )
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.10...0.11 )
Updates `@xterm/addon-web-links` from 0.11.0 to 0.12.0
- [Release notes](https://github.com/xtermjs/xterm.js/releases )
- [Commits](https://github.com/xtermjs/xterm.js/compare/0.11...0.12 )
Updates `@xyflow/react` from 12.10.0 to 12.12.0
- [Release notes](https://github.com/xyflow/xyflow/releases )
- [Changelog](https://github.com/xyflow/xyflow/blob/main/packages/react/CHANGELOG.md )
- [Commits](https://github.com/xyflow/xyflow/commits/@xyflow/react@12.12.0/packages/react )
Updates `i18next` from 26.3.6 to 26.5.12
- [Release notes](https://github.com/i18next/i18next/releases )
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md )
- [Commits](https://github.com/i18next/i18next/compare/v26.3.6...v26.5.12 )
Updates `react-i18next` from 17.0.11 to 17.1.9
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md )
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.11...v17.1.9 )
Updates `react-icons` from 5.6.0 to 5.7.0
- [Release notes](https://github.com/react-icons/react-icons/releases )
- [Commits](https://github.com/react-icons/react-icons/compare/v5.6.0...v5.7.0 )
Updates `react-router-dom` from 7.18.2 to 7.18.5
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@7.18.5/packages/react-router-dom/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.18.5/packages/react-router-dom )
Updates `socket.io-client` from 4.8.3 to 4.8.4
- [Release notes](https://github.com/socketio/socket.io/releases )
- [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md )
- [Commits](https://github.com/socketio/socket.io/compare/socket.io-client@4.8.3...socket.io-client@4.8.4 )
Updates `sonner` from 2.0.7 to 2.0.8
- [Release notes](https://github.com/emilkowalski/sonner/releases )
- [Commits](https://github.com/emilkowalski/sonner/compare/v2.0.7...v2.0.8 )
Updates `@vitejs/plugin-react` from 6.0.3 to 6.1.2
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases )
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.2/packages/plugin-react )
Updates `boneyard-js` from 1.9.0 to 1.10.0
- [Release notes](https://github.com/0xGF/boneyard/releases )
- [Commits](https://github.com/0xGF/boneyard/compare/v1.9.0...v1.10.0 )
Updates `eslint-plugin-react-refresh` from 0.4.26 to 0.5.7
- [Release notes](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/releases )
- [Changelog](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/blob/main/CHANGELOG.md )
- [Commits](https://github.com/ArnaudBarre/eslint-plugin-react-refresh/compare/v0.4.26...v0.5.7 )
Updates `playwright` from 1.61.1 to 1.64.1
- [Release notes](https://github.com/microsoft/playwright/releases )
- [Commits](https://github.com/microsoft/playwright/compare/v1.61.1...v1.64.1 )
Updates `sass` from 1.98.0 to 1.107.1
- [Release notes](https://github.com/sass/dart-sass/releases )
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md )
- [Commits](https://github.com/sass/dart-sass/compare/1.98.0...1.107.1 )
Updates `vite` from 8.1.4 to 8.3.5
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite )
Updates `@rollup/rollup-win32-x64-msvc` from 4.62.2 to 4.67.2
- [Release notes](https://github.com/rollup/rollup/releases )
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md )
- [Commits](https://github.com/rollup/rollup/compare/v4.62.2...v4.67.2 )
---
updated-dependencies:
- dependency-name: "@radix-ui/react-alert-dialog"
dependency-version: 1.1.24
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: "@radix-ui/react-checkbox"
dependency-version: 1.3.12
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: "@radix-ui/react-dialog"
dependency-version: 1.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@radix-ui/react-dropdown-menu"
dependency-version: 2.1.25
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: "@radix-ui/react-label"
dependency-version: 2.1.16
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: "@radix-ui/react-popover"
dependency-version: 1.2.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@radix-ui/react-select"
dependency-version: 2.3.8
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@radix-ui/react-slot"
dependency-version: 1.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@radix-ui/react-switch"
dependency-version: 1.3.8
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@radix-ui/react-tabs"
dependency-version: 1.1.22
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: "@rollup/rollup-win32-x64-msvc"
dependency-version: 4.64.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@vitejs/plugin-react"
dependency-version: 6.1.2
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@xterm/addon-fit"
dependency-version: 0.11.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@xterm/addon-web-links"
dependency-version: 0.12.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: "@xyflow/react"
dependency-version: 12.12.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: boneyard-js
dependency-version: 1.10.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: eslint-plugin-react-refresh
dependency-version: 0.5.7
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: i18next
dependency-version: 26.4.2
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: playwright
dependency-version: 1.64.0
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: react-i18next
dependency-version: 17.0.16
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: react-icons
dependency-version: 5.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: react-router-dom
dependency-version: 7.18.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: sass
dependency-version: 1.105.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
- dependency-name: socket.io-client
dependency-version: 4.8.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: sonner
dependency-version: 2.0.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: frontend
- dependency-name: vite
dependency-version: 8.3.4
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: frontend
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-11-03 01:21:14 +00:00
Juan Denis
a8fb879be8
Stop the speed-test poll when leaving Monitoring
...
The wait loop kept polling for up to 90s after unmount and toasted
'Speed test complete' on whatever page came next.
2026-10-26 01:04:25 -04:00
Juan Denis
f116accbb8
Map setup status in one place
...
checkSetupStatus and refreshSetupStatus kept separate copies of the
same mapping, and the refresh copy had already lost defaultLanguage.
2026-10-26 01:02:42 -04:00
Juan Denis
0704c42daa
Drop unused useLogs and logsSourceLabel
...
Nothing imports either; useServiceLogStream replaced the hook, which
also left loading stuck on a read error.
2026-10-26 01:02:37 -04:00
Juan Denis
cb1422f34f
Log out only when the refresh token is rejected
...
Any failed refresh (offline, 5xx, 429) cleared both tokens, and each
expired request started its own refresh, so a burst of 401s could
trip the refresh rate limit and log the tab out. Page load also wiped
tokens on any /auth/me failure. Share one in-flight refresh, end the
session only on a 401/422 from /auth/refresh or /auth/me, and let
transient failures surface as errors with the tokens intact.
2026-10-26 00:46:13 -04:00
Juan Denis
475add2674
Validate Postgres helper SQL and report user errors
...
pg_create_database/user and pg_grant/revoke built superuser SQL from
raw names and passwords, unlike the MySQL helpers beside them. A quote
in a password broke CREATE USER, and the create routes ignored that
and returned credentials for a user that did not exist. Validate
identifiers and privilege lists, escape the password, and surface a
failed user as user_error instead of fake credentials.
2026-10-26 00:43:13 -04:00
Juan Denis
8ab5ab1bfc
Stop SSO from auto-creating developer accounts
...
Auto-provision defaulted on with role developer and no domain filter,
so enabling GitHub login for yourself let any GitHub user sign up and
open remote terminals, while password registration stayed closed.
Default to off and viewer; turning it on stays an explicit choice.
2026-10-26 00:36:57 -04:00
Juan Denis
7249d2247b
Drop plan citations from the controls styles
2026-10-25 23:27:17 -04:00
Juan Denis
f2f9ec7267
Polish stepper rail and radio card selection
...
The vertical stepper rail floated between steps instead of joining the
markers, and the current step borrowed the focus ring. Radio cards
showed a radio dot beside the icon; the card already marks selection,
so the radio becomes a check badge in the corner.
2026-10-25 23:18:24 -04:00
Juan Denis
7c8519772f
Add accessible form controls and field wiring
...
FormField now hands its control the id, aria-describedby, aria-invalid
and aria-required through context, so every settings form announces
its hint and validation without per-call wiring. IconButton gets a real
tooltip instead of title=, ProgressBar is a labelled progressbar with
tones and an indeterminate state, and Button takes `loading` without
changing width.
New controls the panel lacked: NumberField, Combobox (single, multiple,
creatable), TagInput, Calendar with DatePicker and DateRangePicker,
PinInput, Slider, RadioGroup, Stepper, TreeView, and FileDropzone with
FileUploadList. Rounding, date and file-type rules live in lib/ with
unit tests. All of them render on /style-guide/controls.
2026-10-25 23:18:24 -04:00
darren
228cfbf92f
fix: show remote images by name, size and date on the server Docker tab ( #186 )
2026-10-25 23:18:07 -04:00
Juan Denis
d00c4a72ea
fix: bind file editor previews to their storage target
2026-10-24 15:00:57 -04:00
Juan Denis
e955134e41
feat: run approved assistant deployments through persistent recipe operations
2026-10-24 06:30:26 -04:00
Juan Denis
fd4795a376
fix: preserve search focus and ignore stale list responses
2026-10-24 06:29:24 -04:00
Juan Denis
ada1276d39
feat: add pinned preview deployment controls and queued lifecycle feedback
2026-10-24 06:23:06 -04:00
Juan Denis
355157856f
feat: add effective environment inspector with browser regression checks
2026-10-24 06:02:51 -04:00
Juan Denis
d4f6b2af55
feat: expose value-free effective environment provenance through app access boundary
2026-10-24 05:58:02 -04:00
Juan Denis
0894b8ff5b
fix: require provisioned runtime before advertising previews
2026-10-24 05:56:04 -04:00
Juan Denis
ac0871c016
fix: start agent maintenance only in the guarded runtime phase
2026-10-24 05:14:36 -04:00
Juan Denis
dd93f01fd6
refactor: keep File Manager download operations in the action hook
2026-10-24 05:02:47 -04:00
Juan Denis
a853c91d61
fix: preserve File Manager deep links on initial mount
2026-10-24 04:54:38 -04:00
Juan Denis
8bf9f4681c
test: cover File Manager tree races and listing failures
2026-10-24 04:51:50 -04:00
Juan Denis
3c5b948f2e
test: enforce core boundaries and document extension rules
2026-10-24 04:48:54 -04:00
Juan Denis
b534ee2baf
refactor: split File Manager state and views with regression guards
2026-10-24 04:44:18 -04:00
Juan Denis
e7ba1c2a89
refactor: route file operations through capability-checked adapters
2026-10-24 04:31:28 -04:00
Juan Denis
fe42d19048
Feature templates the registry marks as featured
...
The Templates page only featured a hard-coded list, so `featured: true`
in a template (Prompture Hub, Torre) never reached the Featured-first
view. The page now honors the flag alongside the list, and bundled
templates carry it into the catalog and the published index.
2026-10-11 16:41:38 -04:00
Juan Denis
e49c627640
Let memoized file rows skip unrelated re-renders
...
FileRow and FileCard were wrapped in memo, but every handler passed to
them was re-created on each render, so a keystroke or a selection
re-rendered every row of a large directory. useStableHandler gives the
rows fixed handler identities that still run the latest code.
2026-10-10 22:38:21 -04:00
Juan Denis
540b86c445
Give each schedule picker its own field ids
...
The picker hardcoded ids like sp-hour, so two on one page (one per
schedule card) produced duplicate ids and every label pointed at the
first picker's field.
2026-10-10 22:35:53 -04:00
Juan Denis
73a93a7b36
Let labels name the resource and server pickers
...
The pickers dropped an id, so the five labels above them named
nothing. They now put it on the trigger button; clicking the label
opens the picker. Ratchet 46 -> 41.
2026-10-10 22:35:28 -04:00
Juan Denis
f033edb70d
Use the shared uptime formatter on monitor pages
...
Monitors and MonitorDetail each carried a copy of formatUptimePercent.
2026-10-10 22:28:16 -04:00
Juan Denis
c7a50510c7
Format build and backup durations through intl
...
Three hand-rolled copies printed untranslated "3m 0s" and never
reached hours ("75m 0s"). They now use the intl formatter ("1h 15m",
in the panel language), keeping each caller's placeholder. The cron
and deploy-console formats with tenths of a second stay as they are.
2026-10-10 22:27:17 -04:00
Juan Denis
a636f2cdb1
Ratchet unassociated form labels at 46
...
The rest head a group of options, sit over read-only text, or label a
picker that does not forward an id yet. A new label must name its
field.
2026-10-10 22:25:44 -04:00
Juan Denis
0adb6bf752
Tie form labels to their fields
...
156 labels named no field: no htmlFor and no control inside, so
clicking one did not focus the input and screen readers announced the
input without a name. Each now points at its field through a useId()
id. The change is additive only (ids and htmlFor), checked by comparing
tokens with the previous version.
2026-10-10 22:25:37 -04:00
Juan Denis
adb9ae8fbb
Open clickable rows and cards from the keyboard
...
A row with onRowClick could only be opened with a mouse or the j/k
cursor: it took no Tab focus and ignored Enter. Clickable rows in the
tables, the grid and the card view are now focusable and open on Enter
or Space, with a focus ring. Keys on a button inside the row still
reach the button, and the cursor listener skips a key a row handled.
2026-10-10 22:17:18 -04:00
Juan Denis
ca4bdb2236
Drop a needless exhaustive-deps disable
...
load is a useCallback with no deps, so listing it is exact.
2026-10-10 22:01:34 -04:00
Juan Denis
95a9e227fc
Fix row deletes that read state from first render
...
The vault secret and variable-group columns were memoized without the
state their delete handlers read. Deleting a secret then refreshed a
null vault and reported failure; deleting a group variable sent group
null; deleting a group after a workspace switch reloaded the old
workspace's groups.
2026-10-10 22:01:16 -04:00
Juan Denis
89eb7fb2e3
Keep a server name typed during the pair lookup
...
The lookup's answer checked the name as it was when the code was
typed, so a name entered while it was in flight was overwritten with
the agent's hostname.
2026-10-10 22:01:08 -04:00
Juan Denis
ada4d49ea4
Reload the file listing when the source changes
...
The listing effect watched only the path. Switching to a remote agent
that advertises no allowed paths keeps the path, so the panel host's
files stayed on screen under the agent's header, and edits went to
the agent against the wrong host's entries.
2026-10-10 22:01:06 -04:00
Juan Denis
9d750a4f6f
Remove the /system process and service routes
...
Both used psutil without importing it, so every call has been a 500
since they were written. Nothing calls them: the process list and
service status come from /processes and /processes/services.
2026-10-10 21:51:15 -04:00
Juan Denis
c98952b907
Load two stylesheets nothing imported; lint for orphans
...
The Coexistence page and the extension crash card were written with
their own stylesheets, but neither file was ever imported, so both have
always rendered without their layout. A new lint step,
check-orphan-files, fails on any src file nothing imports (SCSS
included) unless it is kept with a reason; it is what found these two.
2026-10-10 20:40:35 -04:00
Juan Denis
48aed13d65
Delete four more frontend files nothing imports
...
An app-detail SettingsTab and its shared helper left behind when the
page merged into service detail, a re-export shim nobody imports, and
an unused utility; with their 13 strings in every locale.
2026-10-10 20:38:41 -04:00
Juan Denis
e0e1d271a4
Delete the dead query-runner stylesheet
...
420 lines styled a query runner component removed long ago. One of its
unscoped rules, .sidebar-section, was still sizing the File Manager
rail by accident; that rule moves into the File Manager stylesheet so
the compiled CSS for it is unchanged (compared before and after).
2026-10-10 20:36:51 -04:00
Juan Denis
c7ea877d88
Send the journal priority filter to the API
...
Picking a priority in the Terminal's journal view highlighted the level
but never sent it, so the list was unfiltered. The API already filtered
on ?priority=; the client now passes it, with the fresh value rather
than the previous render's.
2026-10-10 20:33:12 -04:00