Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/workflows/core-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,27 @@ jobs:
npx vite build
cd ../..
done

ui:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: app/desktop-ui/package-lock.json
- name: Install frontend dependencies
working-directory: app/desktop-ui
run: npm ci --ignore-scripts --no-audit
- name: Check and build desktop frontend
working-directory: app/desktop-ui
run: |
npx tsc --noEmit
npx vite build
- name: Install Chromium
working-directory: app/desktop-ui
run: npx playwright-core install --with-deps chromium
- name: Exercise desktop UI
working-directory: app/desktop-ui
run: npm run test:ui
35 changes: 35 additions & 0 deletions app/desktop-ui/THIRD_PARTY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# UI asset notices

## GLOW Icons

- Source: https://github.com/glow-ui/glow-icons
- Revision: `37d226bbcf129e19883f2c4436c749cc78169db9`
- License: MIT, copyright 2025 glow-ui.
- License file: `ui/public/licenses/glow-icons.txt` (copied to `dist/licenses` by Vite).

`ui/src/shell/icons.tsx` embeds the outline SVG subset used by Monolith and the
solid favorite star. The adapter uses `currentColor`, removes redundant white
fills and removes the video icon's viewport-only clip path to avoid repeated
SVG IDs. Icon names remain compatible with the existing callers. GLOW has no
gamepad icon in this revision; game controls use its grid symbol.

## Inter

- Project: https://github.com/rsms/inter
- License: SIL Open Font License 1.1, copyright 2016 The Inter Project Authors.
- Asset: `ui/fonts/InterVariable.woff2`.
- License file: `ui/public/licenses/inter-font.txt` (copied to `dist/licenses` by Vite).
- Imported without modification from `fraa2a/Legio`, revision
`222afd3d56622d0514dbb1b666d27aedf62eb678`,
`src/assets/fonts/InterVariable.woff2`.

The font and icons are bundled locally and require no remote asset service.

## Button design

`ui/src/components/ui/button.tsx` is a native Preact implementation of the
shadcn Button variant API and visual conventions: default, secondary, outline,
ghost, destructive, small and icon controls. Reference:
https://ui.shadcn.com/docs/components/button.
It uses the existing Preact runtime and plain CSS; it does not install the React,
Radix or Tailwind runtime stacks. Legacy `.btn` callers share the same CSS.
14 changes: 14 additions & 0 deletions app/desktop-ui/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 7 additions & 5 deletions app/desktop-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@
"build:dev": "vite build && cargo build --features custom-protocol --manifest-path src-tauri/Cargo.toml",
"dev": "vite",
"tauri": "tauri",
"tauri:dev": "tauri dev"
"tauri:dev": "tauri dev",
"test:ui": "node tests/ui.mjs"
},
"dependencies": {
"preact": "^10.24.0",
"@preact/signals": "^1.3.0",
"@tauri-apps/api": "^2"
"@tauri-apps/api": "^2",
"preact": "^10.24.0"
},
"devDependencies": {
"vite": "^6.0.0",
"@preact/preset-vite": "^2.9.0",
"@tauri-apps/cli": "^2",
"playwright-core": "^1.64.0",
"typescript": "^5.7.0",
"@tauri-apps/cli": "^2"
"vite": "^6.0.0"
}
}
2 changes: 1 addition & 1 deletion app/desktop-ui/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/desktop-ui/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "monolith-ui"
version = "1.4.1"
version = "1.5.0"
edition = "2021"

[build-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion app/desktop-ui/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Monolith.UI",
"version": "1.4.1",
"version": "1.5.0",
"identifier": "dev.scatola.monolith.ui",
"build": {
"frontendDist": "../dist",
Expand Down
28 changes: 28 additions & 0 deletions app/desktop-ui/tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Frontend UI regression check

From `app/desktop-ui`:

```sh
npm ci --ignore-scripts --no-audit
npx tsc --noEmit
npx vite build
npx playwright-core install --with-deps chromium
npm run test:ui
```

The check starts its own Vite production preview on port 4173 and closes it on
completion. `UI_BROWSER_PATH` can select an existing Chromium executable.
`UI_SCREENSHOT_DIR` optionally saves screenshots outside the repository.

The fixture intercepts Tauri calls before loading the app. It exercises library
search and filters, favorite navigation, keyboard clip opening, returning from
collections, collection create/rename/delete, cancellation and focus containment,
all eight settings pages, settings search, debounced writes, hotkey capture and
refresh, recorder commands, errors and disconnected controls. It checks Library,
Collections and Capture settings for horizontal overflow at 1920, 1280, 960 and
800 pixels.

Fixture thumbnails are generated test data, not shipped app content. Media
requests return an empty response. This check does not validate decoding,
recording devices, Windows dialogs, native window behavior or WebView2. Those
still need a Windows runtime smoke test.
Loading
Loading