+5
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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,
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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 2–64 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
|
||||
|
||||
@@ -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
@@ -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
@@ -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."
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user