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
4 changes: 4 additions & 0 deletions e2e/sharing.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ test('two peers exchange keys, share a sealed diff, and import it', async () =>
await mgr.locator('input.rename').fill('Bob — laptop')
await mgr.locator('input.rename').press('Enter')
await expect(mgr.getByText('Bob — laptop')).toBeVisible()
// Removal is guarded by a confirmation dialog.
await mgr.getByTitle('Remove').click()
const confirm = pageA.getByRole('dialog', { name: 'Remove trusted key?' })
await expect(confirm).toBeVisible()
await confirm.getByRole('button', { name: 'Remove' }).click()
await expect(mgr.getByText(/No trusted keys yet/i)).toBeVisible()
} finally {
await appA.close()
Expand Down
11 changes: 9 additions & 2 deletions e2e/trusted-keys.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,18 @@ test('the trusted-keys manager stays stable with 15 keys', async () => {
await expect(mgr.getByText('Teammate 08 — laptop')).toBeVisible()
await expect(mgr.locator('li.key')).toHaveCount(N)

// Remove two different rows: the count drops, the removed ones vanish, the
// rest are untouched.
// Remove two different rows (each behind a confirmation): the count drops,
// the removed ones vanish, the rest are untouched.
const confirmRemove = () =>
page
.getByRole('dialog', { name: 'Remove trusted key?' })
.getByRole('button', { name: 'Remove' })
.click()
await mgr.locator('li.key', { hasText: 'Teammate 03' }).getByTitle('Remove').click()
await confirmRemove()
await expect(mgr.locator('li.key')).toHaveCount(N - 1)
await mgr.locator('li.key', { hasText: 'Teammate 12' }).getByTitle('Remove').click()
await confirmRemove()
await expect(mgr.locator('li.key')).toHaveCount(N - 2)
await expect(mgr.getByText('Teammate 03', { exact: true })).toBeHidden()
await expect(mgr.getByText('Teammate 12', { exact: true })).toBeHidden()
Expand Down
12 changes: 12 additions & 0 deletions electron-builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,15 @@ dmg:
nsis:
oneClick: false
allowToChangeInstallationDirectory: true
# Assisted-installer branding. Set explicitly rather than relying on
# buildResources auto-detection, for the same reason dmg.background is (a
# silent fallback to NSIS's stock art ships a wrong-looking installer). Both
# are 24-bit BMPs rendered from the SVGs in resources/ — regenerate with
# `npm run render:brand` (scripts/render-brand-assets.mjs), never hand-edit
# the .bmp (it also re-renders icon.png from logo.svg). installerHeader
# (150x57) rides the inner-page header; installerSidebar (164x314) is the
# welcome/finish panel. The installer/uninstaller and header icons default to
# the app icon (icon.png), which is correct — no need to restate them.
installerHeader: resources/installerHeader.bmp
installerSidebar: resources/installerSidebar.bmp
uninstallerSidebar: resources/installerSidebar.bmp
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@
"build:linux": "npm run build && electron-builder --linux --publish never",
"docker:up": "docker compose up --build",
"docker:down": "docker compose down",
"render:dmg-bg": "electron scripts/render-dmg-background.mjs"
"render:dmg-bg": "electron scripts/render-dmg-background.mjs",
"render:brand": "electron scripts/render-brand-assets.mjs"
},
"dependencies": {
"chardet": "^2.0.0",
Expand Down
Binary file modified resources/background.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified resources/background@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
71 changes: 33 additions & 38 deletions resources/dmg-background.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified resources/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions resources/installer-header.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions resources/installer-sidebar.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/installerHeader.bmp
Binary file not shown.
Binary file added resources/installerSidebar.bmp
Binary file not shown.
56 changes: 21 additions & 35 deletions resources/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 16 additions & 1 deletion scripts/check-theme-depth.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,22 @@ const tokenBlocks = blocks(tokensCss)
const themeBlocks = blocks(themesCss)
const structuralDefaults = tokenBlocks[':root'] || {}

const THEMES = ['light', 'dark', 'solar', 'neon', 'nord', 'sepia', 'nyan', 'matrix', 'contrast']
const THEMES = [
'light',
'dark',
'solar',
'neon',
'nord',
'sepia',
'dim',
'beacon',
'meridian',
'linen',
'bloom',
'nyan',
'matrix',
'contrast'
]

// Effective token map for a theme: structural defaults (tokens.css) < the light
// palette on the bare :root < the theme's own overrides. Light additionally
Expand Down
Loading
Loading