Release Colour Tools 0.2.0
Verify / verify (push) Canceled after 0s

This commit is contained in:
2026-09-02 07:11:11 +02:00
parent 0c1fc94b58
commit ed030cada6
34 changed files with 1446 additions and 74 deletions
+5 -1
View File
@@ -2,7 +2,11 @@
All notable changes are documented here.
## Unreleased
## 0.2.0 - 2026-09-02
- Added DTCG 2025.10 structured colour import/export with bounded local reference resolution and diagnostics.
- Added a bounded directional palette contrast matrix.
- Added linear, radial, conic and repeating gradient preview plus CSS and versioned recipe export.
## 0.1.0 - 2026-08-31
+2 -2
View File
@@ -1,5 +1,5 @@
==============================================================================
@add-ideas/toolbox-contract@0.2.3
@add-ideas/toolbox-contract@0.3.0
Declared licence: Apache-2.0
Installed from: node_modules/@add-ideas/toolbox-contract
==============================================================================
@@ -199,7 +199,7 @@ Installed from: node_modules/@add-ideas/toolbox-contract
==============================================================================
@add-ideas/toolbox-shell-react@0.2.3
@add-ideas/toolbox-shell-react@0.3.0
Declared licence: Apache-2.0
Installed from: node_modules/@add-ideas/toolbox-shell-react
==============================================================================
+13 -3
View File
@@ -24,7 +24,8 @@ has no analytics, accounts, advertisements or remote lookup feature.
- **Steps** builds multi-stop colour ramps in perceptual, RGB or cylindrical
colour spaces. It supports positioned stops, five hue routes, easing,
premultiplied-alpha interpolation by default with a straight-alpha option,
and copy-ready CSS and JSON output.
and a linear/radial/conic/repeating gradient editor with copy/download CSS
and a versioned JSON recipe.
- **Pick** provides a large keyboard- and pointer-operable HSV picker, alpha
control, exact CSS entry, browser-native colour input, recent picks and the
system EyeDropper API where the browser exposes it.
@@ -38,7 +39,9 @@ has no analytics, accounts, advertisements or remote lookup feature.
colour-vision deficiencies.
- **Palette** creates OKLCH harmonies, tints, shades and tones; keeps a named
palette in local browser storage; imports common text/JSON token forms; and
exports CSS, SCSS, JSON, Design Tokens JSON, JavaScript or CSV.
imports/exports DTCG 2025.10 structured colour tokens and local aliases;
displays a bounded directional WCAG contrast matrix; and exports CSS, SCSS,
JSON, Design Tokens JSON, JavaScript or CSV.
Adding a generated or sampled colour to the palette is always explicit. The
saved palette is device-local and can be cleared from the Palette workspace or
@@ -58,6 +61,13 @@ large text, 4.5:1 for normal AA text and 7:1 for normal AAA text. They are an
engineering aid, not a complete accessibility audit; typography, state,
context and non-colour cues still need human review.
DTCG import requires an explicit, inherited or reference-resolved `$type` and
does not guess token types. Supported colour-space components are validated
against the 2025.10 ranges; `none` components are reported as unsupported
because the current internal colour model is numeric. Imports are bounded to
2 MiB, 10,000 tokens and 32 group levels. Exact duplicate saved values are
reported and not added twice.
## Local image handling
Selecting an image decodes a bounded raster locally with `createImageBitmap`
@@ -117,7 +127,7 @@ npm run release:artifact
This command checks the manifest, types, lint, formatting, unit tests,
production build, Toolbox contract and browser workflows, then creates a
deterministic `release/colour-tools-0.1.0.zip` and matching SHA-256 sidecar.
deterministic `release/colour-tools-0.2.0.zip` and matching SHA-256 sidecar.
The archive is a ready-to-host static application and contains project and
third-party licence notices.
+3 -3
View File
@@ -1,8 +1,8 @@
# Corresponding source and provenance
The corresponding source for Colour Tools 0.1.0 is:
The corresponding source for Colour Tools 0.2.0 is:
https://git.add-ideas.de/lotobo/colour-tools/src/tag/v0.1.0
https://git.add-ideas.de/lotobo/colour-tools/src/tag/v0.2.0
Build that tag with Node.js 22 and the exact dependency graph recorded in
`package-lock.json`:
@@ -20,7 +20,7 @@ and the applicable third-party notices.
## Implementation provenance
- The application is original project code and uses the shared Toolbox SDK
packages at version 0.2.3 for its manifest contract, shell, and build checks.
packages at version 0.3.0 for its manifest contract, shell, and build checks.
- Colour conversion and adaptation use Color.js 0.7.1. Its MIT licence is
reproduced in `LICENSES/colorjs.io-MIT.txt`.
- The compositing, interpolation, palette, image-sampling, contrast, comparison,
+2 -2
View File
@@ -5,8 +5,8 @@ packages into `LICENSES/npm-runtime-licenses.txt` inside the static artifact.
| Package | Version | Licence | Role | Source |
| -------------------------------- | ------- | ---------- | ------------------------------------ | ------------------------------------------- |
| `@add-ideas/toolbox-contract` | 0.2.3 | Apache-2.0 | manifest and context contract | https://git.add-ideas.de/lotobo/toolbox-sdk |
| `@add-ideas/toolbox-shell-react` | 0.2.3 | Apache-2.0 | shared shell, theme and actions | https://git.add-ideas.de/lotobo/toolbox-sdk |
| `@add-ideas/toolbox-contract` | 0.3.0 | Apache-2.0 | manifest and context contract | https://git.add-ideas.de/lotobo/toolbox-sdk |
| `@add-ideas/toolbox-shell-react` | 0.3.0 | Apache-2.0 | shared shell, theme and actions | https://git.add-ideas.de/lotobo/toolbox-sdk |
| `colorjs.io` | 0.7.1 | MIT | parsing, conversion and colour maths | https://github.com/color-js/color.js |
| `react` | 19.2.8 | MIT | application UI | https://github.com/facebook/react |
| `react-dom` | 19.2.8 | MIT | browser rendering | https://github.com/facebook/react |
+17 -2
View File
@@ -9,8 +9,9 @@ last valid result while an input is incomplete.
1. `src/colour/` is the serialisable colour domain. It parses and formats
colours, converts gamuts, composites layers, interpolates stops, evaluates
contrast and Delta E, simulates colour-vision deficiencies, and builds or
exports palettes. Its public API is re-exported from `src/colour/index.ts`.
contrast and Delta E, simulates colour-vision deficiencies, builds CSS
gradients, imports DTCG tokens, and builds or exports palettes. Its public
API is re-exported from `src/colour/index.ts`.
2. `src/palette/` contains browser-independent raster bounds, sampling and
deterministic OKLab clustering. `src/workers/palette.worker.ts` exposes the
expensive extraction path to a dedicated worker.
@@ -35,6 +36,20 @@ Browser preview is a separate operation. It maps a value to sRGB and reports
whether mapping occurred. This keeps display limitations from mutating the
source colour used by later conversions or comparisons.
`dtcg.ts` walks at most 32 group levels/10,000 tokens, validates DTCG 2025.10
structured colour components, resolves local curly aliases and local JSON
Pointer `$ref` token/property references with cycle detection, and resolves token type from
the token, its nearest group or its reference. It does not infer a missing
type. Numeric `none` semantics cannot be represented by `ColourValue`, so such
tokens produce an explicit diagnostic. Imported wide-gamut coordinates are
stored as CSS rather than being destructively mapped to the preview gamut.
`accessibility.ts` parses a maximum of 64 palette colours once before its
bounded 64×64 directional contrast loop. Each foreground/background cell
reports WCAG ratio thresholds after flattening transparency against a stated
canvas. `gradient.ts` validates 264 ascending stops and exports inert CSS plus
a schema-versioned recipe for linear, radial, conic and repeating syntax.
## Raster pipeline
The image picker validates the selected file before decode, rejects excessive
+6
View File
@@ -14,6 +14,12 @@ icons and worker files on initial load and revalidation. Host logs, reverse
proxy logs and browser extension behaviour are outside the application's local
processing boundary.
DTCG documents and gradient recipes are parsed/generated in memory only. DTCG
references are restricted to the same pasted JSON document; no URI or remote
token resolver is used. Token/group depth, count and source size are bounded,
and cycles stop with diagnostics. Imported names/values and gradient CSS are
rendered as text or style values, never injected as HTML.
## Recommended headers
Serve the static artifact over HTTPS and apply a policy equivalent to:
+1 -1
View File
@@ -1,5 +1,5 @@
const CACHE_PREFIX = "colour-tools-shell-";
const CACHE_NAME = `${CACHE_PREFIX}0.1.0`;
const CACHE_NAME = `${CACHE_PREFIX}0.2.0`;
const CORE = ["./", "./manifest.webmanifest", "./favicon.svg"];
self.addEventListener("install", (event) => {
+20 -3
View File
@@ -3,7 +3,7 @@
"schemaVersion": 1,
"id": "de.add-ideas.colour-tools",
"name": "Colour Tools",
"version": "0.1.0",
"version": "0.2.0",
"description": "Convert, composite, compare and build colours locally in the browser.",
"entry": "./",
"icon": "./favicon.svg",
@@ -26,14 +26,31 @@
},
"requirements": {
"secureContext": false,
"workers": true,
"workers": false,
"indexedDb": false,
"crossOriginIsolated": false,
"topLevelContext": false
},
"io": {
"accepts": [
{
"mediaType": "image/*",
"extensions": [".png", ".jpg", ".jpeg", ".webp"]
},
{ "mediaType": "application/json", "extensions": [".json"] },
{ "mediaType": "text/plain", "extensions": [".txt", ".css", ".gpl"] }
],
"produces": [
{ "mediaType": "application/json", "extensions": [".json"] },
{ "mediaType": "text/csv", "extensions": [".csv"] },
{ "mediaType": "text/css", "extensions": [".css"] },
{ "mediaType": "text/plain", "extensions": [".txt", ".gpl"] }
]
},
"capabilities": { "required": [], "optional": ["eye-dropper", "workers"] },
"privacy": {
"processing": "local",
"fileUploads": false,
"fileUploads": true,
"telemetry": false,
"label": "Colours and images stay in this browser; nothing is uploaded."
},