1 Commits

Author SHA1 Message Date
928cde60b4 fix: stabilize Toolbox navigation 2026-07-23 01:13:57 +02:00
8 changed files with 37 additions and 28 deletions

View File

@@ -1,5 +1,12 @@
# Changelog # Changelog
## 0.4.1
### Changed
- Upgraded Toolbox Contract, React Shell, and Testkit dependencies to 0.2.1.
- Adopted the stable shared top bar: the fixed left cluster contains Personalize, Apps, the XSLT-specific Gitea source link, and Help; the app title and one tagline remain centered; and the fixed far-right block contains the Toolbox icon and `add·ideas Toolbox` label.
## 0.4.0 ## 0.4.0
### Added ### Added

View File

@@ -104,7 +104,7 @@ An unavailable or invalid catalogue falls back to standalone operation.
## Appearance ## Appearance
Use **Personalize** in the shared top bar to select System, Light, or Dark. The choice is stored only in this browser using the same preference record as the Toolbox Portal, so it follows you between current Toolbox apps on the same origin. System mode follows the operating-system color preference. CodeMirror is reconfigured when the effective palette changes, including its editor background, gutters, active line, and XML syntax colors. The stable shared top bar keeps Personalize, Apps, the XSLT source link, and Help in a fixed left cluster, the app title and one tagline centered, and the Toolbox icon with the `add·ideas Toolbox` label in a fixed far-right block. Use **Personalize** to select System, Light, or Dark. The choice is stored only in this browser using the same preference record as the Toolbox Portal, so it follows you between current Toolbox apps on the same origin. System mode follows the operating-system color preference. CodeMirror is reconfigured when the effective palette changes, including its editor background, gutters, active line, and XML syntax colors.
## Release archive ## Release archive

View File

@@ -1,8 +1,8 @@
# Corresponding source # Corresponding source
The corresponding application source for XSLT tools 0.4.0 is available at: The corresponding application source for XSLT tools 0.4.1 is available at:
<https://git.add-ideas.de/zemion/xslt-tools/src/tag/v0.4.0> <https://git.add-ideas.de/zemion/xslt-tools/src/tag/v0.4.1>
The XSLT tools application source is licensed under AGPL-3.0-only. This release The XSLT tools application source is licensed under AGPL-3.0-only. This release
also contains third-party components under separate terms. See also contains third-party components under separate terms. See

32
package-lock.json generated
View File

@@ -1,16 +1,16 @@
{ {
"name": "xsl-tools", "name": "xsl-tools",
"version": "0.4.0", "version": "0.4.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "xsl-tools", "name": "xsl-tools",
"version": "0.4.0", "version": "0.4.1",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"dependencies": { "dependencies": {
"@add-ideas/toolbox-contract": "0.2.0", "@add-ideas/toolbox-contract": "0.2.1",
"@add-ideas/toolbox-shell-react": "0.2.0", "@add-ideas/toolbox-shell-react": "0.2.1",
"@codemirror/commands": "^6.8.1", "@codemirror/commands": "^6.8.1",
"@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-xml": "^6.1.0",
"@codemirror/lint": "^6.8.5", "@codemirror/lint": "^6.8.5",
@@ -24,7 +24,7 @@
"react-dom": "^19.2.6" "react-dom": "^19.2.6"
}, },
"devDependencies": { "devDependencies": {
"@add-ideas/toolbox-testkit": "0.2.0", "@add-ideas/toolbox-testkit": "0.2.1",
"@eslint/js": "^10.0.1", "@eslint/js": "^10.0.1",
"@testing-library/react": "^16.3.2", "@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",
@@ -46,18 +46,18 @@
} }
}, },
"node_modules/@add-ideas/toolbox-contract": { "node_modules/@add-ideas/toolbox-contract": {
"version": "0.2.0", "version": "0.2.1",
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.0/toolbox-contract-0.2.0.tgz", "resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.1/toolbox-contract-0.2.1.tgz",
"integrity": "sha512-up+wY+ft1L7TbXrflcTeTOwEdcFwHBWFlGFj8skQvcLy5z2mDBpd6/7PVQKDvDTkiODu2npviHm6AFglFw+17Q==", "integrity": "sha512-NmwV41+ZS0qBWUnI9vflm0PcsiqITmxpSQQ5vMVaToFZuSSIJupgM43tuV9G4OJ1En0eTdYNxbsd3nsYhju2kw==",
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@add-ideas/toolbox-shell-react": { "node_modules/@add-ideas/toolbox-shell-react": {
"version": "0.2.0", "version": "0.2.1",
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.0/toolbox-shell-react-0.2.0.tgz", "resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.1/toolbox-shell-react-0.2.1.tgz",
"integrity": "sha512-qYR+OBXX8rfB+BYCsUbpiCzo2xK12SIPWVNXHre158Da5uT6usr8rRvp5qa5u2oQJ50PNzlXyXMyTeRp0Vz5wg==", "integrity": "sha512-slpz9ODVbk27b+uvG3WeCmNa71Q6guabyVHT+jyGLT6ENLSbwmoEFZ0mKNJDxemltpt9KY8I7z47uNBsQ7yKYg==",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@add-ideas/toolbox-contract": "0.2.0" "@add-ideas/toolbox-contract": "0.2.1"
}, },
"peerDependencies": { "peerDependencies": {
"react": ">=18 <20", "react": ">=18 <20",
@@ -65,13 +65,13 @@
} }
}, },
"node_modules/@add-ideas/toolbox-testkit": { "node_modules/@add-ideas/toolbox-testkit": {
"version": "0.2.0", "version": "0.2.1",
"resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-testkit/-/0.2.0/toolbox-testkit-0.2.0.tgz", "resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-testkit/-/0.2.1/toolbox-testkit-0.2.1.tgz",
"integrity": "sha512-+BSiWgS0F3vpjPgty9B4UtfdZTRbo97ZElb2BSb0ry57fS3cE7w7pfJW1Mzk/gV1/JChspw3JBY+4ZJDBhkiFw==", "integrity": "sha512-0Nfs92r2M5I6hvP8TM776XG08StCBNS40sWt+t4wiMroRMS0aWk/hYqU6+I/VK1lzTLbtxSi0k33trJat3io6Q==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@add-ideas/toolbox-contract": "0.2.0" "@add-ideas/toolbox-contract": "0.2.1"
}, },
"bin": { "bin": {
"toolbox-check": "dist/cli.js" "toolbox-check": "dist/cli.js"

View File

@@ -1,6 +1,6 @@
{ {
"name": "xsl-tools", "name": "xsl-tools",
"version": "0.4.0", "version": "0.4.1",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
@@ -28,8 +28,8 @@
"clean": "rm -rf dist node_modules/.vite coverage" "clean": "rm -rf dist node_modules/.vite coverage"
}, },
"dependencies": { "dependencies": {
"@add-ideas/toolbox-contract": "0.2.0", "@add-ideas/toolbox-contract": "0.2.1",
"@add-ideas/toolbox-shell-react": "0.2.0", "@add-ideas/toolbox-shell-react": "0.2.1",
"@codemirror/commands": "^6.8.1", "@codemirror/commands": "^6.8.1",
"@codemirror/lang-xml": "^6.1.0", "@codemirror/lang-xml": "^6.1.0",
"@codemirror/lint": "^6.8.5", "@codemirror/lint": "^6.8.5",
@@ -43,7 +43,7 @@
"react-dom": "^19.2.6" "react-dom": "^19.2.6"
}, },
"devDependencies": { "devDependencies": {
"@add-ideas/toolbox-testkit": "0.2.0", "@add-ideas/toolbox-testkit": "0.2.1",
"@eslint/js": "^10.0.1", "@eslint/js": "^10.0.1",
"@testing-library/react": "^16.3.2", "@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",

View File

@@ -3,7 +3,7 @@
"schemaVersion": 1, "schemaVersion": 1,
"id": "de.add-ideas.xslt-tools", "id": "de.add-ideas.xslt-tools",
"name": "XSLT tools", "name": "XSLT tools",
"version": "0.4.0", "version": "0.4.1",
"description": "Browser-based XML and XSLT transformations with executable-stylesheet trust controls.", "description": "Browser-based XML and XSLT transformations with executable-stylesheet trust controls.",
"entry": "./", "entry": "./",
"icon": "./favicon.svg", "icon": "./favicon.svg",

View File

@@ -1 +1 @@
export const APP_VERSION = '0.4.0'; export const APP_VERSION = '0.4.1';

View File

@@ -86,7 +86,7 @@ describe('toolbox shell integration', () => {
const shell = container.firstElementChild; const shell = container.firstElementChild;
expect(shell?.getAttribute('data-toolbox-theme')).toBe('system'); expect(shell?.getAttribute('data-toolbox-theme')).toBe('system');
fireEvent.click(screen.getByText('Personalize').closest('summary')!); fireEvent.click(screen.getByRole('button', { name: 'Personalize' }));
fireEvent.click(screen.getByRole('button', { name: 'Dark' })); fireEvent.click(screen.getByRole('button', { name: 'Dark' }));
expect(shell?.getAttribute('data-toolbox-theme')).toBe('dark'); expect(shell?.getAttribute('data-toolbox-theme')).toBe('dark');
@@ -114,7 +114,7 @@ describe('toolbox shell integration', () => {
</AppShell> </AppShell>
); );
fireEvent.click(screen.getByText('Apps').closest('summary')!); fireEvent.click(screen.getByRole('button', { name: 'Apps' }));
const navigation = await screen.findByRole('navigation', { const navigation = await screen.findByRole('navigation', {
name: 'Toolbox applications', name: 'Toolbox applications',
}); });
@@ -123,7 +123,9 @@ describe('toolbox shell integration', () => {
container.firstElementChild?.getAttribute('data-toolbox-context') container.firstElementChild?.getAttribute('data-toolbox-context')
).toBe('connected'); ).toBe('connected');
expect( expect(
screen.getByRole('link', { name: 'Test Toolbox' }).getAttribute('href') screen
.getByRole('link', { name: 'add·ideas Toolbox' })
.getAttribute('href')
).toBe('https://example.test/'); ).toBe('https://example.test/');
const pdfLink = screen.getByRole('link', { name: 'PDF Workbench' }); const pdfLink = screen.getByRole('link', { name: 'PDF Workbench' });