diff --git a/.env.example b/.env.example index 4de151f..0214eda 100644 --- a/.env.example +++ b/.env.example @@ -4,5 +4,5 @@ TRAEFIK_NETWORK=internal TRAEFIK_CERT_RESOLVER=netcup # Keep these two values paired when deploying a newer published toolbox release. -TOOLBOX_RELEASE_VERSION=0.9.1 -TOOLBOX_RELEASE_SHA256=e9dc6a949f1348694099baf62a7b86aa6fea1805bca794de7dfab5dd2040e062 +TOOLBOX_RELEASE_VERSION=0.9.2 +TOOLBOX_RELEASE_SHA256=60e4bd533d7e0087c627cb35f50fd97ca3a298fbcb71ae7bcb7045cae6a1f340 diff --git a/.npmrc b/.npmrc index 90e6041..7e977af 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -@add-ideas:registry=https://git.add-ideas.de/api/packages/zemion/npm/ +@add-ideas:registry=https://git.add-ideas.de/api/packages/lotobo/npm/ diff --git a/Containerfile.release b/Containerfile.release index 37bcce4..dbb1563 100644 --- a/Containerfile.release +++ b/Containerfile.release @@ -2,9 +2,9 @@ ARG NGINX_IMAGE=nginxinc/nginx-unprivileged:1.31.3-alpine@sha256:18d67281256ded3 FROM ${NGINX_IMAGE} AS release -ARG TOOLBOX_RELEASE_VERSION=0.9.1 -ARG TOOLBOX_RELEASE_SHA256=e9dc6a949f1348694099baf62a7b86aa6fea1805bca794de7dfab5dd2040e062 -ARG TOOLBOX_RELEASE_BASE_URL=https://git.add-ideas.de/zemion/toolbox-portal/releases/download +ARG TOOLBOX_RELEASE_VERSION=0.9.2 +ARG TOOLBOX_RELEASE_SHA256=60e4bd533d7e0087c627cb35f50fd97ca3a298fbcb71ae7bcb7045cae6a1f340 +ARG TOOLBOX_RELEASE_BASE_URL=https://git.add-ideas.de/lotobo/toolbox-portal/releases/download RUN set -eu; \ archive="add-ideas-toolbox-${TOOLBOX_RELEASE_VERSION}.zip"; \ diff --git a/README.md b/README.md index 119e903..858b806 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # add·ideas Toolbox Portal `toolbox-portal` is the static launcher and release assembler for the add·ideas -browser toolbox. Version `0.2.9` reads one same-origin catalogue, shows each app +browser toolbox. Version `0.2.10` reads one same-origin catalogue, shows each app as a compact launch tile, and keeps personal pins, drag-and-drop ordering, visibility, and appearance in the current browser. Pinned tools have their own section; search, category, and clickable tag filters stay close to the tool @@ -30,7 +30,7 @@ npm run build npm run dev ``` -The package lock resolves the `^0.2.2` SDK ranges to the published `0.2.2` +The package lock resolves the `^0.2.3` SDK ranges to the published `0.2.3` packages. A sibling SDK checkout is only needed when intentionally developing the SDK and portal together. @@ -69,7 +69,7 @@ privacy and executable-code warning. Light, dark, and system modes are supported ## Production deployment behind Traefik The committed `compose.yaml` is the shortest production path. Its release -container downloads the immutable Toolbox 0.9.1 ZIP during the image build, +container downloads the immutable Toolbox 0.9.2 ZIP during the image build, verifies SHA-256 before extracting it, and then copies only the verified static files into the pinned unprivileged nginx image. Node.js and a local portal assembly are not required on the deployment host. @@ -86,7 +86,7 @@ Prerequisites: Deploy a fresh clone with: ```sh -git clone https://git.add-ideas.de/zemion/toolbox-portal.git +git clone https://git.add-ideas.de/lotobo/toolbox-portal.git cd toolbox-portal docker compose up -d --build docker compose ps @@ -121,9 +121,9 @@ The app release should also publish a matching `.sha256` sidecar. The manifest must declare the pinned reverse-DNS id and version. Application and portal versions are independent. -`release/toolbox.lock.json` is the reviewed v0.9.1 lock. Its URLs and checksums -pin the published PDF Tools 0.4.3, XSLT Tools 0.4.2, OneNote Tools 0.3.3, -Audio & Video Tools 0.2.0, and Regex Tools 0.4.1 release bytes. Use +`release/toolbox.lock.json` is the reviewed v0.9.2 lock. Its URLs and checksums +pin the published PDF Tools 0.4.4, XSLT Tools 0.4.3, OneNote Tools 0.3.4, +Audio & Video Tools 0.2.1, and Regex Tools 0.4.2 release bytes. Use `release/toolbox.lock.example.json` as the template for a future release and verify every downloaded asset before committing updated values. Artifacts may be: @@ -144,7 +144,7 @@ npm run assemble -- \ --lock release/toolbox.lock.json \ --portal-dist dist \ --output build/toolbox \ - --archive build/add-ideas-toolbox-0.9.1.zip + --archive build/add-ideas-toolbox-0.9.2.zip ``` Existing output is refused. Pass `--force` only when replacing those exact @@ -166,8 +166,8 @@ build/toolbox/ ├── av/ └── regex/ -build/add-ideas-toolbox-0.9.1.zip -build/add-ideas-toolbox-0.9.1.zip.sha256 +build/add-ideas-toolbox-0.9.2.zip +build/add-ideas-toolbox-0.9.2.zip.sha256 ``` The assembler verifies SHA-256 before opening an artifact, validates every app @@ -188,7 +188,7 @@ directory separately: ```sh npm run package:static -- \ --input build/toolbox \ - --output artifacts/add-ideas-toolbox-0.9.1.zip + --output artifacts/add-ideas-toolbox-0.9.2.zip ``` This also emits a `.sha256` sidecar. @@ -207,9 +207,9 @@ normal local XML/XSLT transformations do not require that permission. ```sh podman build -f Containerfile \ - -t git.add-ideas.de/zemion/toolbox:0.9.1 . + -t git.add-ideas.de/lotobo/toolbox:0.9.2 . podman run --rm -p 8080:8080 \ - git.add-ideas.de/zemion/toolbox:0.9.1 + git.add-ideas.de/lotobo/toolbox:0.9.2 ``` For a direct-port local deployment after assembly, use the separate example: @@ -226,8 +226,8 @@ docker login git.add-ideas.de docker buildx build \ --platform linux/amd64,linux/arm64 \ --file Containerfile.release \ - --tag git.add-ideas.de/zemion/toolbox:0.9.1 \ - --tag git.add-ideas.de/zemion/toolbox:0.9 \ + --tag git.add-ideas.de/lotobo/toolbox:0.9.2 \ + --tag git.add-ideas.de/lotobo/toolbox:0.9 \ --push . ``` @@ -240,7 +240,7 @@ notes. No credentials belong in this repository. The publishing workstation or runner needs permission to push code, releases, and container packages to -`zemion/toolbox-portal`. +`lotobo/toolbox-portal`. 1. Run `npm ci`, `npm test`, `npm run lint`, and `npm run build` from a clean checkout of the intended portal tag. @@ -252,8 +252,8 @@ needs permission to push code, releases, and container packages to all five apps, switch between them, and confirm the encoded `toolbox` context. 5. Verify the distribution with - `(cd build && sha256sum -c add-ideas-toolbox-0.9.1.zip.sha256)`. -6. Commit the reviewed lock, tag the toolbox release (for example `v0.9.1`), and + `(cd build && sha256sum -c add-ideas-toolbox-0.9.2.zip.sha256)`. +6. Commit the reviewed lock, tag the toolbox release (for example `v0.9.2`), and push the branch and tag to Gitea. 7. In Gitea, open **Releases → New release**, select the tag, and upload the static ZIP plus its `.sha256` file. Do not use a mutable “latest” URL in a @@ -273,8 +273,8 @@ must not re-resolve app versions or substitute a newer release. | **`pdf-tools`** | Existing; dedicated repository | Merge, split, reorder, rotate and export PDF pages | Thumbnail workspace; multi-document operations; ZIP and PDF output; saved local workspace | Workers and IndexedDB; large-document memory control; future signature inspection through `crypto-tools`; metadata and safe-sharing through `privacy-tools` | | **`xslt-tools`** | Existing; dedicated repository | Develop, test and run XSLT transformations | XML/XSLT editors; transformation results; local files; saved projects; validation and diagnostics | Lazy SaxonJS loading; relocatable assets; useful handoffs to `data-tools`, `schema-tools` and `diff-tools` | | **`onenote-tools`** | Existing rich-reader release; dedicated repository | Open, browse, inspect and export OneNote sections and packages locally | Desktop/unfragmented FSSHTTPB `.one`/`.onetoc2`; none/LZX/MSZIP/Quantum and multi-cabinet `.onepkg`; trees, rich text, images, tables, ink, attachments and export | Native TypeScript worker with no Wasm; bounded parsing, rendering and export; fragmented FSSHTTP fails safely; no editing or pixel-perfect fidelity | -| **`av-tools`** | Existing local-first v0.2.0 release; dedicated repository | Convert and lightly edit audio and video locally in the browser | Quick conversion; trim, split and crossfade concatenate; crop, resize, normalize, fades, waveform, metadata, chapters, subtitles, scene thumbnails/contact sheets, presets and export | Reviewed ffmpeg.wasm 0.12.10 ST/MT build with verified Opus and bundled label font; bounded queue, temporary storage and resource policy; isolation enables MT with automatic ST fallback; versioned core assets are immutable | -| **`regex-tools`** | Current local-first v0.4.1 release; dedicated repository | Develop, explain, test and apply JavaScript, PCRE2, PHP, Perl, Python, Ruby, Java, C++, Go, .NET, Rust and Scala/JVM-compatible regular expressions | Deterministic syntax trees; engine-native matching, captures and bounded replacement; stable double-buffered live results; PCRE2 tracing and C17 generation; comparison; corpus apply; tests; risk/growth/benchmark analysis; generated cases; bounded minimization; validated ECMAScript formatting; project import/export and optional local persistence | Open-source regexpp and pinned local WebAssembly runtimes for PCRE2, PHP preg, legacy Perl, CPython, CRuby, TeaVM Java/Scala compatibility, libc++ C++, Go, .NET and Rust in killable workers; explicit source/licence inventories, resource limits and engine-specific offset semantics | +| **`av-tools`** | Existing local-first v0.2.1 release; dedicated repository | Convert and lightly edit audio and video locally in the browser | Quick conversion; trim, split and crossfade concatenate; crop, resize, normalize, fades, waveform, metadata, chapters, subtitles, scene thumbnails/contact sheets, presets and export | Reviewed ffmpeg.wasm 0.12.10 ST/MT build with verified Opus and bundled label font; bounded queue, temporary storage and resource policy; isolation enables MT with automatic ST fallback; versioned core assets are immutable | +| **`regex-tools`** | Current local-first v0.4.2 release; dedicated repository | Develop, explain, test and apply JavaScript, PCRE2, PHP, Perl, Python, Ruby, Java, C++, Go, .NET, Rust and Scala/JVM-compatible regular expressions | Deterministic syntax trees; engine-native matching, captures and bounded replacement; stable double-buffered live results; PCRE2 tracing and C17 generation; comparison; corpus apply; tests; risk/growth/benchmark analysis; generated cases; bounded minimization; validated ECMAScript formatting; project import/export and optional local persistence | Open-source regexpp and pinned local WebAssembly runtimes for PCRE2, PHP preg, legacy Perl, CPython, CRuby, TeaVM Java/Scala compatibility, libc++ C++, Go, .NET and Rust in killable workers; explicit source/licence inventories, resource limits and engine-specific offset semantics | ## Planned tools diff --git a/compose.example.yaml b/compose.example.yaml index 2143bcb..548ba53 100644 --- a/compose.example.yaml +++ b/compose.example.yaml @@ -3,7 +3,7 @@ services: build: context: . dockerfile: Containerfile - image: git.add-ideas.de/zemion/toolbox:0.9.1 + image: git.add-ideas.de/lotobo/toolbox:0.9.2 restart: unless-stopped read_only: true ports: diff --git a/compose.yaml b/compose.yaml index 55243d3..8f6b920 100644 --- a/compose.yaml +++ b/compose.yaml @@ -6,9 +6,9 @@ services: context: . dockerfile: Containerfile.release args: - TOOLBOX_RELEASE_VERSION: "${TOOLBOX_RELEASE_VERSION:-0.9.1}" - TOOLBOX_RELEASE_SHA256: "${TOOLBOX_RELEASE_SHA256:-e9dc6a949f1348694099baf62a7b86aa6fea1805bca794de7dfab5dd2040e062}" - image: "git.add-ideas.de/zemion/toolbox:${TOOLBOX_RELEASE_VERSION:-0.9.1}" + TOOLBOX_RELEASE_VERSION: "${TOOLBOX_RELEASE_VERSION:-0.9.2}" + TOOLBOX_RELEASE_SHA256: "${TOOLBOX_RELEASE_SHA256:-60e4bd533d7e0087c627cb35f50fd97ca3a298fbcb71ae7bcb7045cae6a1f340}" + image: "git.add-ideas.de/lotobo/toolbox:${TOOLBOX_RELEASE_VERSION:-0.9.2}" restart: unless-stopped read_only: true tmpfs: diff --git a/package-lock.json b/package-lock.json index 2015a74..bb55c5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@add-ideas/toolbox-portal", - "version": "0.2.9", + "version": "0.2.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@add-ideas/toolbox-portal", - "version": "0.2.9", + "version": "0.2.10", "license": "AGPL-3.0-only", "dependencies": { - "@add-ideas/toolbox-contract": "^0.2.2", - "@add-ideas/toolbox-shell-react": "^0.2.2", + "@add-ideas/toolbox-contract": "^0.2.3", + "@add-ideas/toolbox-shell-react": "^0.2.3", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -44,18 +44,18 @@ } }, "node_modules/@add-ideas/toolbox-contract": { - "version": "0.2.2", - "resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.2/toolbox-contract-0.2.2.tgz", - "integrity": "sha512-VcZ8j4O2PgFaIYgxs6r9u0uPxA+hHKwhCW+omfeVCtbjAAYhH2KhRlBGm0ERVVYcK5kchyzZLXrC4LKWRotVzg==", + "version": "0.2.3", + "resolved": "https://git.add-ideas.de/api/packages/lotobo/npm/%40add-ideas%2Ftoolbox-contract/-/0.2.3/toolbox-contract-0.2.3.tgz", + "integrity": "sha512-T0PVSuMT40GjTDfQJhEEY3ZawQq8zz1/ry95JdKI6W39CdLacaRXdGnEpDCMHt+jUbf1Jz7Nat/M5dFCgKVM9A==", "license": "Apache-2.0" }, "node_modules/@add-ideas/toolbox-shell-react": { - "version": "0.2.2", - "resolved": "https://git.add-ideas.de/api/packages/zemion/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.2/toolbox-shell-react-0.2.2.tgz", - "integrity": "sha512-w/xbLCd50a2Jq7vQ9Z9ygUOuqlOCRkIYlk4vSJx0mf4REJNeMYi3PE2MbaLUC4DkQWyrmatsa5HNT89o0l91BA==", + "version": "0.2.3", + "resolved": "https://git.add-ideas.de/api/packages/lotobo/npm/%40add-ideas%2Ftoolbox-shell-react/-/0.2.3/toolbox-shell-react-0.2.3.tgz", + "integrity": "sha512-DT5lQDH48BFkFcmFLZnQh7+Cm73JzBPcmp5WzUXypfkUXpEyDYHzaXgmW4kZ0edSwh4RK4sPmx+JPtK0X4aKCQ==", "license": "Apache-2.0", "dependencies": { - "@add-ideas/toolbox-contract": "0.2.2" + "@add-ideas/toolbox-contract": "0.2.3" }, "peerDependencies": { "react": ">=18 <20", diff --git a/package.json b/package.json index ff3165b..a13fde8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@add-ideas/toolbox-portal", - "version": "0.2.9", + "version": "0.2.10", "license": "AGPL-3.0-only", "private": true, "type": "module", @@ -21,8 +21,8 @@ "package:static": "node scripts/package-static.mjs" }, "dependencies": { - "@add-ideas/toolbox-contract": "^0.2.2", - "@add-ideas/toolbox-shell-react": "^0.2.2", + "@add-ideas/toolbox-contract": "^0.2.3", + "@add-ideas/toolbox-shell-react": "^0.2.3", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", @@ -53,5 +53,13 @@ }, "engines": { "node": ">=22" + }, + "repository": { + "type": "git", + "url": "git+https://git.add-ideas.de/lotobo/toolbox-portal.git" + }, + "homepage": "https://git.add-ideas.de/lotobo/toolbox-portal", + "bugs": { + "url": "https://git.add-ideas.de/lotobo/toolbox-portal/issues" } } diff --git a/public/SOURCE.md b/public/SOURCE.md index 926b038..a222add 100644 --- a/public/SOURCE.md +++ b/public/SOURCE.md @@ -1,8 +1,8 @@ # Corresponding source -The source code corresponding to add·ideas Toolbox Portal 0.2.9 is available at: +The source code corresponding to add·ideas Toolbox Portal 0.2.10 is available at: -https://git.add-ideas.de/zemion/toolbox-portal/src/tag/v0.9.1 +https://git.add-ideas.de/lotobo/toolbox-portal/src/tag/v0.9.2 Each bundled application contains its own `SOURCE.md`, license, and third-party license materials. The application sources are also linked from the portal. diff --git a/public/toolbox.catalog.json b/public/toolbox.catalog.json index 4ce1f34..e6f0be7 100644 --- a/public/toolbox.catalog.json +++ b/public/toolbox.catalog.json @@ -1,5 +1,5 @@ { - "$schema": "https://git.add-ideas.de/zemion/toolbox-sdk/raw/branch/main/schemas/toolbox-catalog.v1.schema.json", + "$schema": "https://git.add-ideas.de/lotobo/toolbox-sdk/raw/branch/main/schemas/toolbox-catalog.v1.schema.json", "schemaVersion": 1, "id": "de.add-ideas.toolbox", "name": "add·ideas Toolbox", diff --git a/release/toolbox-release-lock.schema.json b/release/toolbox-release-lock.schema.json index fa6ac84..271624e 100644 --- a/release/toolbox-release-lock.schema.json +++ b/release/toolbox-release-lock.schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://git.add-ideas.de/zemion/toolbox-portal/raw/branch/main/release/toolbox-release-lock.schema.json", + "$id": "https://git.add-ideas.de/lotobo/toolbox-portal/raw/branch/main/release/toolbox-release-lock.schema.json", "title": "add·ideas Toolbox release lock v1", "description": "Pins the exact portal and checksummed application archives used to assemble one static toolbox release.", "type": "object", diff --git a/release/toolbox.lock.example.json b/release/toolbox.lock.example.json index 53d1c3f..0dfb7a4 100644 --- a/release/toolbox.lock.example.json +++ b/release/toolbox.lock.example.json @@ -1,8 +1,8 @@ { "$schema": "./toolbox-release-lock.schema.json", "schemaVersion": 1, - "releaseVersion": "0.9.1", - "portalVersion": "0.2.9", + "releaseVersion": "0.9.2", + "portalVersion": "0.2.10", "catalogue": { "id": "de.add-ideas.toolbox", "name": "add·ideas Toolbox", @@ -15,37 +15,37 @@ "apps": [ { "id": "de.add-ideas.pdf-tools", - "version": "0.4.3", - "artifact": "https://git.add-ideas.de/zemion/pdf-tools/releases/download/v0.4.3/pdf-tools-0.4.3.zip", - "sha256": "f2dfd3bade49a4b8be9c0c54c6c2bf1bbb153fc0505a38af14de5ab52d5183cf", + "version": "0.4.4", + "artifact": "https://git.add-ideas.de/lotobo/pdf-tools/releases/download/v0.4.4/pdf-tools-0.4.4.zip", + "sha256": "fa93c4c004be74d6a1f68f62a0f64f44c99218f387441ca3630a7f5af3c09d7d", "target": "pdf" }, { "id": "de.add-ideas.xslt-tools", - "version": "0.4.2", - "artifact": "https://git.add-ideas.de/zemion/xslt-tools/releases/download/v0.4.2/xslt-tools-0.4.2.zip", - "sha256": "daaa821c10c6c6285f97128ba3d923e48efa24449f1fb0a21bf478abaf27499f", + "version": "0.4.3", + "artifact": "https://git.add-ideas.de/lotobo/xslt-tools/releases/download/v0.4.3/xslt-tools-0.4.3.zip", + "sha256": "e44012af214d24e3d97d10a6017fa3d9dbf063de36673ab04dd15a0a8643afcc", "target": "xslt" }, { "id": "de.add-ideas.onenote-tools", - "version": "0.3.3", - "artifact": "https://git.add-ideas.de/zemion/onenote-tools/releases/download/v0.3.3/onenote-tools-0.3.3.zip", - "sha256": "37c0ef7cdc7f435d0d4f5a341523f4e522118d5b258c374b5a7ef7b8e6c27cec", + "version": "0.3.4", + "artifact": "https://git.add-ideas.de/lotobo/onenote-tools/releases/download/v0.3.4/onenote-tools-0.3.4.zip", + "sha256": "c0ed791d1ae64fdf6a90bceebf97a7a3252989f2434204d009f87f5a2d1cc341", "target": "onenote" }, { "id": "de.add-ideas.av-tools", - "version": "0.2.0", - "artifact": "https://git.add-ideas.de/zemion/av-tools/releases/download/v0.2.0/av-tools-0.2.0.zip", - "sha256": "40f9e7f48617930ddcba25538bd12d0a24197c7c4824989f20fd23fd25349a54", + "version": "0.2.1", + "artifact": "https://git.add-ideas.de/lotobo/av-tools/releases/download/v0.2.1/av-tools-0.2.1.zip", + "sha256": "e9b7a8c387bffbf73c688fa8e88efe96cc6662e985b2a8446b4b6c7a8c490888", "target": "av" }, { "id": "de.add-ideas.regex-tools", - "version": "0.4.1", - "artifact": "https://git.add-ideas.de/zemion/regex-tools/releases/download/v0.4.1/regex-tools-0.4.1.zip", - "sha256": "a298d0c578ee5f3e80c036b1c6be308f0277052e770c000fdda8505e5a305815", + "version": "0.4.2", + "artifact": "https://git.add-ideas.de/lotobo/regex-tools/releases/download/v0.4.2/regex-tools-0.4.2.zip", + "sha256": "a3e7342d1f0746aa9c88e6568e7fbc04ab429c94604ba5fb1094ffdb096a54fe", "target": "regex" } ] diff --git a/release/toolbox.lock.json b/release/toolbox.lock.json index 53d1c3f..0dfb7a4 100644 --- a/release/toolbox.lock.json +++ b/release/toolbox.lock.json @@ -1,8 +1,8 @@ { "$schema": "./toolbox-release-lock.schema.json", "schemaVersion": 1, - "releaseVersion": "0.9.1", - "portalVersion": "0.2.9", + "releaseVersion": "0.9.2", + "portalVersion": "0.2.10", "catalogue": { "id": "de.add-ideas.toolbox", "name": "add·ideas Toolbox", @@ -15,37 +15,37 @@ "apps": [ { "id": "de.add-ideas.pdf-tools", - "version": "0.4.3", - "artifact": "https://git.add-ideas.de/zemion/pdf-tools/releases/download/v0.4.3/pdf-tools-0.4.3.zip", - "sha256": "f2dfd3bade49a4b8be9c0c54c6c2bf1bbb153fc0505a38af14de5ab52d5183cf", + "version": "0.4.4", + "artifact": "https://git.add-ideas.de/lotobo/pdf-tools/releases/download/v0.4.4/pdf-tools-0.4.4.zip", + "sha256": "fa93c4c004be74d6a1f68f62a0f64f44c99218f387441ca3630a7f5af3c09d7d", "target": "pdf" }, { "id": "de.add-ideas.xslt-tools", - "version": "0.4.2", - "artifact": "https://git.add-ideas.de/zemion/xslt-tools/releases/download/v0.4.2/xslt-tools-0.4.2.zip", - "sha256": "daaa821c10c6c6285f97128ba3d923e48efa24449f1fb0a21bf478abaf27499f", + "version": "0.4.3", + "artifact": "https://git.add-ideas.de/lotobo/xslt-tools/releases/download/v0.4.3/xslt-tools-0.4.3.zip", + "sha256": "e44012af214d24e3d97d10a6017fa3d9dbf063de36673ab04dd15a0a8643afcc", "target": "xslt" }, { "id": "de.add-ideas.onenote-tools", - "version": "0.3.3", - "artifact": "https://git.add-ideas.de/zemion/onenote-tools/releases/download/v0.3.3/onenote-tools-0.3.3.zip", - "sha256": "37c0ef7cdc7f435d0d4f5a341523f4e522118d5b258c374b5a7ef7b8e6c27cec", + "version": "0.3.4", + "artifact": "https://git.add-ideas.de/lotobo/onenote-tools/releases/download/v0.3.4/onenote-tools-0.3.4.zip", + "sha256": "c0ed791d1ae64fdf6a90bceebf97a7a3252989f2434204d009f87f5a2d1cc341", "target": "onenote" }, { "id": "de.add-ideas.av-tools", - "version": "0.2.0", - "artifact": "https://git.add-ideas.de/zemion/av-tools/releases/download/v0.2.0/av-tools-0.2.0.zip", - "sha256": "40f9e7f48617930ddcba25538bd12d0a24197c7c4824989f20fd23fd25349a54", + "version": "0.2.1", + "artifact": "https://git.add-ideas.de/lotobo/av-tools/releases/download/v0.2.1/av-tools-0.2.1.zip", + "sha256": "e9b7a8c387bffbf73c688fa8e88efe96cc6662e985b2a8446b4b6c7a8c490888", "target": "av" }, { "id": "de.add-ideas.regex-tools", - "version": "0.4.1", - "artifact": "https://git.add-ideas.de/zemion/regex-tools/releases/download/v0.4.1/regex-tools-0.4.1.zip", - "sha256": "a298d0c578ee5f3e80c036b1c6be308f0277052e770c000fdda8505e5a305815", + "version": "0.4.2", + "artifact": "https://git.add-ideas.de/lotobo/regex-tools/releases/download/v0.4.2/regex-tools-0.4.2.zip", + "sha256": "a3e7342d1f0746aa9c88e6568e7fbc04ab429c94604ba5fb1094ffdb096a54fe", "target": "regex" } ] diff --git a/scripts/assembler.test.ts b/scripts/assembler.test.ts index 84522d4..f3da2ee 100644 --- a/scripts/assembler.test.ts +++ b/scripts/assembler.test.ts @@ -83,7 +83,7 @@ function makeLock(artifact: string, sha256: string) { return { schemaVersion: 1, releaseVersion: '0.1.0', - portalVersion: '0.2.9', + portalVersion: '0.2.10', catalogue: { id: 'de.add-ideas.toolbox', name: 'Test Toolbox', diff --git a/scripts/deployment.test.ts b/scripts/deployment.test.ts index 4768a86..d750774 100644 --- a/scripts/deployment.test.ts +++ b/scripts/deployment.test.ts @@ -62,7 +62,7 @@ describe('production deployment', () => { /^TOOLBOX_RELEASE_SHA256=([a-f0-9]{64})$/mu )?.[1]; const localImageVersion = composeExample.match( - /^\s+image: git\.add-ideas\.de\/zemion\/toolbox:(\S+)$/mu + /^\s+image: git\.add-ideas\.de\/lotobo\/toolbox:(\S+)$/mu )?.[1]; expect(containerVersion).toBe(releaseLock.releaseVersion); diff --git a/scripts/release-lock.mjs b/scripts/release-lock.mjs index 9d57d91..1411e1a 100644 --- a/scripts/release-lock.mjs +++ b/scripts/release-lock.mjs @@ -131,7 +131,7 @@ export function buildCatalogue(lock) { }; return { $schema: - 'https://git.add-ideas.de/zemion/toolbox-sdk/raw/branch/main/schemas/toolbox-catalog.v1.schema.json', + 'https://git.add-ideas.de/lotobo/toolbox-sdk/raw/branch/main/schemas/toolbox-catalog.v1.schema.json', ...parseToolboxCatalog(catalogue), }; } diff --git a/src/App.test.tsx b/src/App.test.tsx index fb069c2..bc171a2 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -143,9 +143,7 @@ describe('portal UI', () => { expect(within(card).getByRole('heading', { level: 3 })).toHaveTextContent( 'Regex' ); - expect( - within(card).getByText('Explain and test regex locally.') - ).toBeVisible(); + expect(within(card).getByText('Explain and test locally.')).toBeVisible(); }); it('moves the full disclosure into an accessible modal', async () => { @@ -181,7 +179,7 @@ describe('portal UI', () => { }); expect(sourceLink).toHaveAttribute( 'href', - 'https://git.add-ideas.de/zemion/pdf-tools' + 'https://git.add-ideas.de/lotobo/pdf-tools' ); expect(sourceLink).toHaveAttribute('rel', 'noopener noreferrer'); expect( diff --git a/src/App.tsx b/src/App.tsx index 43d3a7f..8dd9f37 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -28,7 +28,7 @@ import type { LoadedCatalogue, ResolvedApp } from './types'; import { usePreferences } from './usePreferences'; const CATALOGUE_HREF = './toolbox.catalog.json'; -const PORTAL_SOURCE = 'https://git.add-ideas.de/zemion/toolbox-portal'; +const PORTAL_SOURCE = 'https://git.add-ideas.de/lotobo/toolbox-portal'; type LoadState = | { status: 'loading' } @@ -489,9 +489,9 @@ export default function App() {
- Portal v0.2.9 ·{' '} + Portal v0.2.10 ·{' '} diff --git a/src/catalogue.test.ts b/src/catalogue.test.ts index 7bfd366..a19de34 100644 --- a/src/catalogue.test.ts +++ b/src/catalogue.test.ts @@ -15,7 +15,7 @@ describe('catalogue loading', () => { id: 'de.add-ideas.pdf-tools', name: 'PDF Workbench', entryUrl: 'http://localhost:3000/apps/pdf/', - sourceUrl: 'https://git.add-ideas.de/zemion/pdf-tools', + sourceUrl: 'https://git.add-ideas.de/lotobo/pdf-tools', }); }); diff --git a/src/test/fixtures.ts b/src/test/fixtures.ts index a5f842f..6b6e162 100644 --- a/src/test/fixtures.ts +++ b/src/test/fixtures.ts @@ -30,7 +30,7 @@ export const pdfManifest: ToolboxAppManifest = { telemetry: false, }, source: { - repository: 'https://git.add-ideas.de/zemion/pdf-tools', + repository: 'https://git.add-ideas.de/lotobo/pdf-tools', license: 'AGPL-3.0-only', }, }; @@ -45,7 +45,7 @@ export const xsltManifest: ToolboxAppManifest = { categories: ['documents', 'developer'], tags: ['transform', 'xml'], source: { - repository: 'https://git.add-ideas.de/zemion/xslt-tools', + repository: 'https://git.add-ideas.de/lotobo/xslt-tools', license: 'AGPL-3.0-only', }, }; @@ -60,7 +60,7 @@ export const onenoteManifest: ToolboxAppManifest = { categories: ['documents', 'notes'], tags: ['onepkg', 'import'], source: { - repository: 'https://git.add-ideas.de/zemion/onenote-tools', + repository: 'https://git.add-ideas.de/lotobo/onenote-tools', license: 'AGPL-3.0-only', }, }; @@ -82,7 +82,7 @@ export const regexManifest: ToolboxAppManifest = { crossOriginIsolated: false, }, source: { - repository: 'https://git.add-ideas.de/zemion/regex-tools', + repository: 'https://git.add-ideas.de/lotobo/regex-tools', license: 'GPL-3.0-or-later', }, }; diff --git a/src/toolPresentation.test.ts b/src/toolPresentation.test.ts new file mode 100644 index 0000000..262d476 --- /dev/null +++ b/src/toolPresentation.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from 'vitest'; +import { shortToolDescription, shortToolTitle } from './toolPresentation'; +import type { ResolvedApp } from './types'; + +function app(id: string, name: string, description: string): ResolvedApp { + return { id, name, description } as ResolvedApp; +} + +describe('compact tool presentation', () => { + it('uses the requested Audio & Video tile copy', () => { + const audioVideo = app( + 'de.add-ideas.av-tools', + 'Audio & Video Tools', + 'Convert and lightly edit audio and video locally in the browser.' + ); + + expect(shortToolTitle(audioVideo)).toBe('Audio & Video'); + expect(shortToolDescription(audioVideo)).toBe('Convert and edit locally.'); + }); + + it('uses the requested Regex tile copy', () => { + const regex = app( + 'de.add-ideas.regex-tools', + 'Regex Tools', + 'Develop, explain, test and apply regular expressions locally in the browser.' + ); + + expect(shortToolTitle(regex)).toBe('Regex'); + expect(shortToolDescription(regex)).toBe('Explain and test locally.'); + }); +}); diff --git a/src/toolPresentation.ts b/src/toolPresentation.ts index 16719b7..4f4b652 100644 --- a/src/toolPresentation.ts +++ b/src/toolPresentation.ts @@ -13,9 +13,13 @@ const PRESENTATION: Record