@tasker-systems/temper-design 0.0.0-stage → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +330 -2
- package/brand/mark.svg +4 -0
- package/brand/wordmark.svg +5 -0
- package/contract/base.css +221 -0
- package/contract/graph.css +53 -0
- package/contract/markdown.css +279 -0
- package/contract/region.css +98 -0
- package/contract/shadcn-bridge.css +86 -0
- package/contract/tailwind-roles.css +67 -0
- package/contract/tailwind.css +70 -0
- package/contract/theme.schema.json +444 -0
- package/dist/graph.d.ts +191 -0
- package/dist/graph.js +293 -0
- package/dist/handoff.d.ts +22 -0
- package/dist/handoff.js +70 -0
- package/dist/highlight.d.ts +2 -0
- package/dist/highlight.js +48 -0
- package/dist/links.d.ts +32 -0
- package/dist/links.js +65 -0
- package/dist/markdown.d.ts +23 -0
- package/dist/markdown.js +61 -0
- package/dist/omission.d.ts +81 -0
- package/dist/omission.js +84 -0
- package/dist/region.d.ts +16 -0
- package/dist/region.js +59 -0
- package/dist/sanitize.d.ts +22 -0
- package/dist/sanitize.js +205 -0
- package/dist/theme.d.ts +29 -0
- package/dist/theme.js +37 -0
- package/dist/vocabulary.d.ts +35 -0
- package/dist/vocabulary.js +74 -0
- package/dist/ways-in.d.ts +36 -0
- package/dist/ways-in.js +35 -0
- package/guard/colours.mjs +347 -0
- package/package.json +97 -4
- package/quiet-instrument/theme.css +66 -0
- package/quiet-instrument/theme.json +85 -0
- package/quiet-instrument-paper/theme.css +66 -0
- package/quiet-instrument-paper/theme.json +85 -0
- package/themes.json +14 -0
- package/toolchain/check.mjs +76 -0
- package/toolchain/majors.json +18 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* Generated from quiet-instrument-paper/theme.json by themes/scripts/themes.sh build. Do not edit. */
|
|
2
|
+
[data-theme="quiet-instrument-paper"] {
|
|
3
|
+
color-scheme: light;
|
|
4
|
+
--tp-ground: #f5f3ee;
|
|
5
|
+
--tp-surface: #efece5;
|
|
6
|
+
--tp-surface-raised: #ffffff;
|
|
7
|
+
--tp-overlay: rgba(20, 20, 30, 0.35);
|
|
8
|
+
--tp-text: #1a1a2e;
|
|
9
|
+
--tp-text-muted: rgba(26, 26, 46, 0.78);
|
|
10
|
+
--tp-text-subtle: rgba(26, 26, 46, 0.64);
|
|
11
|
+
--tp-text-faint: rgba(26, 26, 46, 0.42);
|
|
12
|
+
--tp-rule: rgba(26, 26, 46, 0.08);
|
|
13
|
+
--tp-rule-strong: rgba(26, 26, 46, 0.16);
|
|
14
|
+
--tp-accent: #2c6a8f;
|
|
15
|
+
--tp-accent-muted: rgba(44, 106, 143, 0.55);
|
|
16
|
+
--tp-accent-line: rgba(44, 106, 143, 0.50);
|
|
17
|
+
--tp-accent-line-soft: rgba(44, 106, 143, 0.28);
|
|
18
|
+
--tp-accent-wash: rgba(44, 106, 143, 0.07);
|
|
19
|
+
--tp-accent-hover: rgba(44, 106, 143, 0.11);
|
|
20
|
+
--tp-on-accent: #ffffff;
|
|
21
|
+
--tp-focus: #1f6fb2;
|
|
22
|
+
--tp-notice: #8a5a00;
|
|
23
|
+
--tp-notice-wash: rgba(245, 158, 11, 0.10);
|
|
24
|
+
--tp-success: #1d6b3f;
|
|
25
|
+
--tp-success-wash: rgba(34, 139, 84, 0.08);
|
|
26
|
+
--tp-danger: #a23b24;
|
|
27
|
+
--tp-danger-wash: rgba(192, 72, 44, 0.08);
|
|
28
|
+
--tp-pending: #2c6a8f;
|
|
29
|
+
--tp-pending-wash: rgba(44, 106, 143, 0.06);
|
|
30
|
+
--tp-region-arriving: #2f5f9e;
|
|
31
|
+
--tp-region-arriving-wash: rgba(47, 95, 158, 0.06);
|
|
32
|
+
--tp-region-empty: #5c6470;
|
|
33
|
+
--tp-region-empty-wash: rgba(26, 26, 46, 0.03);
|
|
34
|
+
--tp-region-gave-up: #6a4fa3;
|
|
35
|
+
--tp-region-gave-up-wash: rgba(106, 79, 163, 0.07);
|
|
36
|
+
--tp-region-failed: #9a4a1c;
|
|
37
|
+
--tp-region-failed-wash: rgba(154, 74, 28, 0.08);
|
|
38
|
+
--tp-author-human: #1a1a2e;
|
|
39
|
+
--tp-author-agent: #4f5f99;
|
|
40
|
+
--tp-cat-1: #a83a5c;
|
|
41
|
+
--tp-cat-2: #0f7a54;
|
|
42
|
+
--tp-cat-3: #0d7680;
|
|
43
|
+
--tp-cat-4: #a44296;
|
|
44
|
+
--tp-cat-5: #3b3fbf;
|
|
45
|
+
--tp-cat-6: #6a6c00;
|
|
46
|
+
--tp-cat-7: #6d2e9e;
|
|
47
|
+
--tp-cat-8: #3f6f22;
|
|
48
|
+
--tp-cat-neutral: #71685f;
|
|
49
|
+
--tp-code-key: #1d6b3f;
|
|
50
|
+
--tp-code-string: #8a5a00;
|
|
51
|
+
--tp-code-number: #2f5f9e;
|
|
52
|
+
--tp-code-comment: rgba(26, 26, 46, 0.64);
|
|
53
|
+
--tp-font-reading: "Source Serif 4 Variable", "Source Serif 4", Georgia, "Times New Roman", serif;
|
|
54
|
+
--tp-font-doing: "JetBrains Mono Variable", "JetBrains Mono", "Fira Code", ui-monospace, monospace;
|
|
55
|
+
--tp-font-ui: "Inter Variable", Inter, system-ui, -apple-system, sans-serif;
|
|
56
|
+
--tp-radius-chip: 3px;
|
|
57
|
+
--tp-radius-panel: 0;
|
|
58
|
+
--tp-motion-quick: 150ms;
|
|
59
|
+
--tp-motion-settle: 240ms;
|
|
60
|
+
--tp-motion-easing: ease;
|
|
61
|
+
--tp-tracking-label: 0.20em;
|
|
62
|
+
--tp-tracking-strip: 0.22em;
|
|
63
|
+
--tp-tracking-eyebrow: 0.28em;
|
|
64
|
+
--tp-tracking-ui: 0.05em;
|
|
65
|
+
--tp-tracking-mark: 0.15em;
|
|
66
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../contract/theme.schema.json",
|
|
3
|
+
"kind": "theme",
|
|
4
|
+
"name": "quiet-instrument-paper",
|
|
5
|
+
"title": "Quiet Instrument \u2014 Paper",
|
|
6
|
+
"version": "0.1.0",
|
|
7
|
+
"description": "The light counterpart: warm paper ground, ink text, a deepened steel-blue accent. Same roles, same restraint.",
|
|
8
|
+
"appearance": "light",
|
|
9
|
+
"counterpart": "quiet-instrument",
|
|
10
|
+
"provenance": "Derived from Quiet Instrument for this repository; every colour re-chosen to clear the contract's contrast floors on a light ground.",
|
|
11
|
+
"tokens": {
|
|
12
|
+
"color": {
|
|
13
|
+
"ground": "#f5f3ee",
|
|
14
|
+
"surface": "#efece5",
|
|
15
|
+
"surface-raised": "#ffffff",
|
|
16
|
+
"overlay": "rgba(20, 20, 30, 0.35)",
|
|
17
|
+
"text": "#1a1a2e",
|
|
18
|
+
"text-muted": "rgba(26, 26, 46, 0.78)",
|
|
19
|
+
"text-subtle": "rgba(26, 26, 46, 0.64)",
|
|
20
|
+
"text-faint": "rgba(26, 26, 46, 0.42)",
|
|
21
|
+
"rule": "rgba(26, 26, 46, 0.08)",
|
|
22
|
+
"rule-strong": "rgba(26, 26, 46, 0.16)",
|
|
23
|
+
"accent": "#2c6a8f",
|
|
24
|
+
"accent-muted": "rgba(44, 106, 143, 0.55)",
|
|
25
|
+
"accent-line": "rgba(44, 106, 143, 0.50)",
|
|
26
|
+
"accent-line-soft": "rgba(44, 106, 143, 0.28)",
|
|
27
|
+
"accent-wash": "rgba(44, 106, 143, 0.07)",
|
|
28
|
+
"accent-hover": "rgba(44, 106, 143, 0.11)",
|
|
29
|
+
"on-accent": "#ffffff",
|
|
30
|
+
"focus": "#1f6fb2",
|
|
31
|
+
"notice": "#8a5a00",
|
|
32
|
+
"notice-wash": "rgba(245, 158, 11, 0.10)",
|
|
33
|
+
"success": "#1d6b3f",
|
|
34
|
+
"success-wash": "rgba(34, 139, 84, 0.08)",
|
|
35
|
+
"danger": "#a23b24",
|
|
36
|
+
"danger-wash": "rgba(192, 72, 44, 0.08)",
|
|
37
|
+
"pending": "#2c6a8f",
|
|
38
|
+
"pending-wash": "rgba(44, 106, 143, 0.06)",
|
|
39
|
+
"region-arriving": "#2f5f9e",
|
|
40
|
+
"region-arriving-wash": "rgba(47, 95, 158, 0.06)",
|
|
41
|
+
"region-empty": "#5c6470",
|
|
42
|
+
"region-empty-wash": "rgba(26, 26, 46, 0.03)",
|
|
43
|
+
"region-gave-up": "#6a4fa3",
|
|
44
|
+
"region-gave-up-wash": "rgba(106, 79, 163, 0.07)",
|
|
45
|
+
"region-failed": "#9a4a1c",
|
|
46
|
+
"region-failed-wash": "rgba(154, 74, 28, 0.08)",
|
|
47
|
+
"author-human": "#1a1a2e",
|
|
48
|
+
"author-agent": "#4f5f99",
|
|
49
|
+
"cat-1": "#a83a5c",
|
|
50
|
+
"cat-2": "#0f7a54",
|
|
51
|
+
"cat-3": "#0d7680",
|
|
52
|
+
"cat-4": "#a44296",
|
|
53
|
+
"cat-5": "#3b3fbf",
|
|
54
|
+
"cat-6": "#6a6c00",
|
|
55
|
+
"cat-7": "#6d2e9e",
|
|
56
|
+
"cat-8": "#3f6f22",
|
|
57
|
+
"cat-neutral": "#71685f",
|
|
58
|
+
"code-key": "#1d6b3f",
|
|
59
|
+
"code-string": "#8a5a00",
|
|
60
|
+
"code-number": "#2f5f9e",
|
|
61
|
+
"code-comment": "rgba(26, 26, 46, 0.64)"
|
|
62
|
+
},
|
|
63
|
+
"font": {
|
|
64
|
+
"reading": "\"Source Serif 4 Variable\", \"Source Serif 4\", Georgia, \"Times New Roman\", serif",
|
|
65
|
+
"doing": "\"JetBrains Mono Variable\", \"JetBrains Mono\", \"Fira Code\", ui-monospace, monospace",
|
|
66
|
+
"ui": "\"Inter Variable\", Inter, system-ui, -apple-system, sans-serif"
|
|
67
|
+
},
|
|
68
|
+
"radius": {
|
|
69
|
+
"chip": "3px",
|
|
70
|
+
"panel": "0"
|
|
71
|
+
},
|
|
72
|
+
"motion": {
|
|
73
|
+
"quick": "150ms",
|
|
74
|
+
"settle": "240ms",
|
|
75
|
+
"easing": "ease"
|
|
76
|
+
},
|
|
77
|
+
"tracking": {
|
|
78
|
+
"label": "0.20em",
|
|
79
|
+
"strip": "0.22em",
|
|
80
|
+
"eyebrow": "0.28em",
|
|
81
|
+
"ui": "0.05em",
|
|
82
|
+
"mark": "0.15em"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
package/themes.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "quiet-instrument",
|
|
4
|
+
"title": "Quiet Instrument",
|
|
5
|
+
"appearance": "dark",
|
|
6
|
+
"counterpart": "quiet-instrument-paper"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "quiet-instrument-paper",
|
|
10
|
+
"title": "Quiet Instrument — Paper",
|
|
11
|
+
"appearance": "light",
|
|
12
|
+
"counterpart": "quiet-instrument"
|
|
13
|
+
}
|
|
14
|
+
]
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Every temper surface builds on the same majors of one named toolchain: the language, the
|
|
3
|
+
// framework and its Vite plugin, the type-checker, the bundler, the test runner, the styling
|
|
4
|
+
// engine and the linter. A major upgrade of any of them reaches every surface together.
|
|
5
|
+
//
|
|
6
|
+
// toolchain/majors.json, beside this file, declares those majors. Each surface runs this check
|
|
7
|
+
// from its own directory and it fails when the surface resolves a different major of a named
|
|
8
|
+
// tool, or does not resolve one at all. Inside the temper repository the web reads the
|
|
9
|
+
// declaration from its working tree, so a web major cannot move unless the declaration moves in
|
|
10
|
+
// the same change. Outside it, a surface reads the declaration at the package version it pins,
|
|
11
|
+
// so the pin bump that carries a new major fails until that surface has taken it too.
|
|
12
|
+
//
|
|
13
|
+
// Adapters differ by surface; each surface names its own with --adapter, and that adapter must
|
|
14
|
+
// be declared.
|
|
15
|
+
//
|
|
16
|
+
// A tool is resolved the way Node resolves a bare import, by looking for
|
|
17
|
+
// node_modules/<tool>/package.json from the surface's directory upward. It does not read a
|
|
18
|
+
// lockfile, and it does not go through a package's `exports`, which may not expose
|
|
19
|
+
// package.json.
|
|
20
|
+
//
|
|
21
|
+
// node toolchain/check.mjs --adapter @sveltejs/adapter-vercel [--surface <dir>]
|
|
22
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
23
|
+
import { dirname, join, resolve } from 'node:path';
|
|
24
|
+
import { fileURLToPath } from 'node:url';
|
|
25
|
+
|
|
26
|
+
const USAGE = 'usage: check.mjs --adapter <adapter package> [--surface <dir>]';
|
|
27
|
+
|
|
28
|
+
function fail(message) {
|
|
29
|
+
console.error(`toolchain: ${message}`);
|
|
30
|
+
process.exit(2);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let adapter = null;
|
|
34
|
+
let surface = process.cwd();
|
|
35
|
+
const args = process.argv.slice(2);
|
|
36
|
+
for (let i = 0; i < args.length; i++) {
|
|
37
|
+
if (args[i] === '--adapter' && args[i + 1]) adapter = args[++i];
|
|
38
|
+
else if (args[i] === '--surface' && args[i + 1]) surface = resolve(args[++i]);
|
|
39
|
+
else fail(USAGE);
|
|
40
|
+
}
|
|
41
|
+
if (!adapter) fail(USAGE);
|
|
42
|
+
|
|
43
|
+
const declared = JSON.parse(
|
|
44
|
+
readFileSync(join(dirname(fileURLToPath(import.meta.url)), 'majors.json'), 'utf8')
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
function resolvedVersion(name) {
|
|
48
|
+
for (let dir = surface; ; dir = dirname(dir)) {
|
|
49
|
+
const manifest = join(dir, 'node_modules', name, 'package.json');
|
|
50
|
+
if (existsSync(manifest)) return JSON.parse(readFileSync(manifest, 'utf8')).version;
|
|
51
|
+
if (dirname(dir) === dir) return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const wanted = Object.entries(declared.majors);
|
|
56
|
+
const refusals = [];
|
|
57
|
+
if (Object.hasOwn(declared.adapters, adapter)) wanted.push([adapter, declared.adapters[adapter]]);
|
|
58
|
+
else refusals.push(`${adapter} — not a declared adapter (${Object.keys(declared.adapters).join(', ')})`);
|
|
59
|
+
|
|
60
|
+
for (const [name, major] of wanted) {
|
|
61
|
+
const version = resolvedVersion(name);
|
|
62
|
+
if (version === null) refusals.push(`${name} — not installed; declared major ${major}`);
|
|
63
|
+
else if (Number(version.split('.')[0]) !== major)
|
|
64
|
+
refusals.push(`${name} — resolves ${version}; declared major ${major}`);
|
|
65
|
+
else console.log(` ${name} ${version}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (refusals.length > 0) {
|
|
69
|
+
for (const refusal of refusals) console.error(` ${refusal}`);
|
|
70
|
+
console.error(
|
|
71
|
+
'toolchain: this surface is off the declared majors (above). A major moves on every surface\n' +
|
|
72
|
+
'together: change toolchain/majors.json in @tasker-systems/temper-design with the upgrade.'
|
|
73
|
+
);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
console.log(`toolchain: ${wanted.length} tools on the declared majors`);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"majors": {
|
|
3
|
+
"typescript": 6,
|
|
4
|
+
"svelte": 5,
|
|
5
|
+
"@sveltejs/kit": 2,
|
|
6
|
+
"@sveltejs/vite-plugin-svelte": 7,
|
|
7
|
+
"svelte-check": 4,
|
|
8
|
+
"vite": 8,
|
|
9
|
+
"vitest": 5,
|
|
10
|
+
"tailwindcss": 4,
|
|
11
|
+
"@tailwindcss/vite": 4,
|
|
12
|
+
"@biomejs/biome": 2
|
|
13
|
+
},
|
|
14
|
+
"adapters": {
|
|
15
|
+
"@sveltejs/adapter-vercel": 6,
|
|
16
|
+
"@sveltejs/adapter-static": 3
|
|
17
|
+
}
|
|
18
|
+
}
|