feat: publish Toolbox 0.14.0 with Sudoku Tools
This commit is contained in:
+6
-3
@@ -335,12 +335,12 @@ describe('portal UI', () => {
|
||||
expect(
|
||||
screen.getByRole('heading', {
|
||||
level: 2,
|
||||
name: 'Your document tools, in one calm place.',
|
||||
name: 'Your local tools, in one calm place.',
|
||||
})
|
||||
).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getAllByRole('heading', {
|
||||
name: 'Your document tools, in one calm place.',
|
||||
name: 'Your local tools, in one calm place.',
|
||||
})
|
||||
).toHaveLength(1);
|
||||
|
||||
@@ -415,6 +415,7 @@ describe('portal UI', () => {
|
||||
'de.add-ideas.onenote-tools',
|
||||
'de.add-ideas.svg-tools',
|
||||
'de.add-ideas.auth-tools',
|
||||
'de.add-ideas.sudoku-tools',
|
||||
],
|
||||
hidden: [],
|
||||
theme: 'light',
|
||||
@@ -434,6 +435,7 @@ describe('portal UI', () => {
|
||||
screen.getByTestId('app-card-de.add-ideas.onenote-tools'),
|
||||
screen.getByTestId('app-card-de.add-ideas.svg-tools'),
|
||||
screen.getByTestId('app-card-de.add-ideas.auth-tools'),
|
||||
screen.getByTestId('app-card-de.add-ideas.sudoku-tools'),
|
||||
];
|
||||
cards.forEach((card, index) => {
|
||||
const rect = {
|
||||
@@ -464,7 +466,7 @@ describe('portal UI', () => {
|
||||
within(tools)
|
||||
.getAllByRole('heading', { level: 3 })
|
||||
.map((heading) => heading.textContent)
|
||||
).toEqual(['XSLT', 'PDF', 'OneNote', 'SVG', 'OTP & Passkeys']);
|
||||
).toEqual(['XSLT', 'PDF', 'OneNote', 'SVG', 'OTP & Passkeys', 'Sudoku']);
|
||||
});
|
||||
expect(
|
||||
JSON.parse(localStorage.getItem(PREFERENCES_KEY) ?? '{}').order
|
||||
@@ -474,6 +476,7 @@ describe('portal UI', () => {
|
||||
'de.add-ideas.onenote-tools',
|
||||
'de.add-ideas.svg-tools',
|
||||
'de.add-ideas.auth-tools',
|
||||
'de.add-ideas.sudoku-tools',
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
+3
-3
@@ -297,7 +297,7 @@ export default function App() {
|
||||
Privacy details up front · useful by default
|
||||
</p>
|
||||
<h2 id="page-title">
|
||||
Your document tools,
|
||||
Your local tools,
|
||||
<br /> <span>in one calm place.</span>
|
||||
</h2>
|
||||
<p className="hero-copy">
|
||||
@@ -489,9 +489,9 @@ export default function App() {
|
||||
</span>
|
||||
</p>
|
||||
<span>
|
||||
Portal v0.2.15 ·{' '}
|
||||
Portal v0.2.16 ·{' '}
|
||||
<a
|
||||
href="https://git.add-ideas.de/lotobo/toolbox-portal/src/tag/v0.13.0"
|
||||
href="https://git.add-ideas.de/lotobo/toolbox-portal/src/tag/v0.14.0"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
|
||||
@@ -10,7 +10,7 @@ describe('catalogue loading', () => {
|
||||
const loaded = await loadCatalogue('/toolbox.catalog.json');
|
||||
expect(loaded.catalogue.name).toBe('add·ideas Toolbox');
|
||||
expect(loaded.homeUrl).toBe('http://localhost:3000/');
|
||||
expect(loaded.apps).toHaveLength(5);
|
||||
expect(loaded.apps).toHaveLength(6);
|
||||
expect(loaded.apps[0]).toMatchObject({
|
||||
id: 'de.add-ideas.pdf-tools',
|
||||
name: 'PDF Workbench',
|
||||
@@ -42,6 +42,7 @@ describe('catalogue loading', () => {
|
||||
'de.add-ideas.onenote-tools',
|
||||
'de.add-ideas.svg-tools',
|
||||
'de.add-ideas.auth-tools',
|
||||
'de.add-ideas.sudoku-tools',
|
||||
]);
|
||||
expect(loaded.unavailable).toHaveLength(1);
|
||||
expect(loaded.unavailable[0]?.reason).toMatch(/HTTP 404/);
|
||||
|
||||
@@ -160,6 +160,48 @@ export const authManifest: ToolboxAppManifest = {
|
||||
},
|
||||
};
|
||||
|
||||
export const sudokuManifest: ToolboxAppManifest = {
|
||||
schemaVersion: 1,
|
||||
id: 'de.add-ideas.sudoku-tools',
|
||||
name: 'Sudoku Tools',
|
||||
version: '0.1.0',
|
||||
description:
|
||||
'Set, play, solve and analyse Sudoku puzzles locally in the browser.',
|
||||
entry: './',
|
||||
icon: './favicon.svg',
|
||||
categories: ['games', 'puzzles', 'logic'],
|
||||
tags: ['sudoku', 'killer', 'solver', 'setter', 'generator', 'candidates'],
|
||||
integration: {
|
||||
contextVersion: 1,
|
||||
launchModes: ['navigate', 'new-tab'],
|
||||
embedding: 'unsupported',
|
||||
},
|
||||
requirements: {
|
||||
secureContext: false,
|
||||
workers: true,
|
||||
indexedDb: true,
|
||||
crossOriginIsolated: false,
|
||||
topLevelContext: false,
|
||||
},
|
||||
privacy: {
|
||||
processing: 'local',
|
||||
fileUploads: false,
|
||||
telemetry: false,
|
||||
label: 'Puzzles and progress stay in this browser; nothing is uploaded.',
|
||||
},
|
||||
source: {
|
||||
repository: 'https://git.add-ideas.de/lotobo/sudoku-tools',
|
||||
license: 'GPL-3.0-or-later',
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
id: 'source',
|
||||
label: 'Source',
|
||||
url: 'https://git.add-ideas.de/lotobo/sudoku-tools',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const catalogue: ToolboxCatalog = {
|
||||
schemaVersion: 1,
|
||||
id: 'de.add-ideas.toolbox',
|
||||
@@ -172,6 +214,7 @@ export const catalogue: ToolboxCatalog = {
|
||||
{ manifest: './apps/onenote/toolbox-app.json', enabled: true },
|
||||
{ manifest: './apps/svg/toolbox-app.json', enabled: true },
|
||||
{ manifest: './apps/auth/toolbox-app.json', enabled: true },
|
||||
{ manifest: './apps/sudoku/toolbox-app.json', enabled: true },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -197,6 +240,8 @@ export function catalogueFetch(overrides: Record<string, Response> = {}) {
|
||||
return Response.json(svgManifest);
|
||||
if (url.pathname.endsWith('/apps/auth/toolbox-app.json'))
|
||||
return Response.json(authManifest);
|
||||
if (url.pathname.endsWith('/apps/sudoku/toolbox-app.json'))
|
||||
return Response.json(sudokuManifest);
|
||||
return new Response('Not found', { status: 404 });
|
||||
};
|
||||
}
|
||||
|
||||
@@ -52,4 +52,15 @@ describe('compact tool presentation', () => {
|
||||
'Inspect and test authentication locally.'
|
||||
);
|
||||
});
|
||||
|
||||
it('uses the compact Sudoku tile copy', () => {
|
||||
const sudoku = app(
|
||||
'de.add-ideas.sudoku-tools',
|
||||
'Sudoku Tools',
|
||||
'Set, play, solve and analyse Sudoku puzzles locally in the browser.'
|
||||
);
|
||||
|
||||
expect(shortToolTitle(sudoku)).toBe('Sudoku');
|
||||
expect(shortToolDescription(sudoku)).toBe('Set, play and solve locally.');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -29,6 +29,10 @@ const PRESENTATION: Record<string, { title: string; description: string }> = {
|
||||
title: 'OTP & Passkeys',
|
||||
description: 'Inspect and test authentication locally.',
|
||||
},
|
||||
'de.add-ideas.sudoku-tools': {
|
||||
title: 'Sudoku',
|
||||
description: 'Set, play and solve locally.',
|
||||
},
|
||||
};
|
||||
|
||||
export function shortToolTitle(app: ResolvedApp): string {
|
||||
|
||||
Reference in New Issue
Block a user