rtistree 0.5.0
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/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/THIRD_PARTY_NOTICES.md +25 -0
- package/dist/art-direction.d.ts +77 -0
- package/dist/art-direction.js +186 -0
- package/dist/art-direction.js.map +1 -0
- package/dist/artifacts.d.ts +24 -0
- package/dist/artifacts.js +49 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/assets.d.ts +16 -0
- package/dist/assets.js +96 -0
- package/dist/assets.js.map +1 -0
- package/dist/benchmark.d.ts +76 -0
- package/dist/benchmark.js +118 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +300 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +5315 -0
- package/dist/commands.js +591 -0
- package/dist/commands.js.map +1 -0
- package/dist/components.d.ts +20 -0
- package/dist/components.js +98 -0
- package/dist/components.js.map +1 -0
- package/dist/construction.d.ts +53 -0
- package/dist/construction.js +80 -0
- package/dist/construction.js.map +1 -0
- package/dist/critique.d.ts +44 -0
- package/dist/critique.js +45 -0
- package/dist/critique.js.map +1 -0
- package/dist/detail.d.ts +5 -0
- package/dist/detail.js +52 -0
- package/dist/detail.js.map +1 -0
- package/dist/document.d.ts +64 -0
- package/dist/document.js +56 -0
- package/dist/document.js.map +1 -0
- package/dist/export.d.ts +405 -0
- package/dist/export.js +344 -0
- package/dist/export.js.map +1 -0
- package/dist/font-inspection.d.ts +8 -0
- package/dist/font-inspection.js +34 -0
- package/dist/font-inspection.js.map +1 -0
- package/dist/graphics.d.ts +9 -0
- package/dist/graphics.js +72 -0
- package/dist/graphics.js.map +1 -0
- package/dist/history-storage.d.ts +10 -0
- package/dist/history-storage.js +59 -0
- package/dist/history-storage.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +18 -0
- package/dist/layout.js +155 -0
- package/dist/layout.js.map +1 -0
- package/dist/loader.d.ts +9 -0
- package/dist/loader.js +108 -0
- package/dist/loader.js.map +1 -0
- package/dist/mcp.d.ts +4 -0
- package/dist/mcp.js +223 -0
- package/dist/mcp.js.map +1 -0
- package/dist/merge.d.ts +6 -0
- package/dist/merge.js +49 -0
- package/dist/merge.js.map +1 -0
- package/dist/native.d.ts +3 -0
- package/dist/native.js +6 -0
- package/dist/native.js.map +1 -0
- package/dist/paint.d.ts +9 -0
- package/dist/paint.js +331 -0
- package/dist/paint.js.map +1 -0
- package/dist/path-edit.d.ts +20 -0
- package/dist/path-edit.js +30 -0
- package/dist/path-edit.js.map +1 -0
- package/dist/pdf-output.d.ts +21 -0
- package/dist/pdf-output.js +297 -0
- package/dist/pdf-output.js.map +1 -0
- package/dist/pipeline.d.ts +39 -0
- package/dist/pipeline.js +227 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/print-scene.d.ts +490 -0
- package/dist/print-scene.js +55 -0
- package/dist/print-scene.js.map +1 -0
- package/dist/production-workflow.d.ts +251 -0
- package/dist/production-workflow.js +335 -0
- package/dist/production-workflow.js.map +1 -0
- package/dist/program-worker.d.ts +1 -0
- package/dist/program-worker.js +31 -0
- package/dist/program-worker.js.map +1 -0
- package/dist/program.d.ts +85 -0
- package/dist/program.js +246 -0
- package/dist/program.js.map +1 -0
- package/dist/project-config.d.ts +91 -0
- package/dist/project-config.js +187 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project.d.ts +897 -0
- package/dist/project.js +347 -0
- package/dist/project.js.map +1 -0
- package/dist/raster-edit.d.ts +61 -0
- package/dist/raster-edit.js +91 -0
- package/dist/raster-edit.js.map +1 -0
- package/dist/raster-studio.d.ts +84 -0
- package/dist/raster-studio.js +236 -0
- package/dist/raster-studio.js.map +1 -0
- package/dist/render.d.ts +79 -0
- package/dist/render.js +437 -0
- package/dist/render.js.map +1 -0
- package/dist/rich-text.d.ts +10 -0
- package/dist/rich-text.js +56 -0
- package/dist/rich-text.js.map +1 -0
- package/dist/schema.d.ts +1912 -0
- package/dist/schema.js +571 -0
- package/dist/schema.js.map +1 -0
- package/dist/spatial.d.ts +10 -0
- package/dist/spatial.js +29 -0
- package/dist/spatial.js.map +1 -0
- package/dist/studio-reference.d.ts +153 -0
- package/dist/studio-reference.js +39 -0
- package/dist/studio-reference.js.map +1 -0
- package/dist/svg.d.ts +5 -0
- package/dist/svg.js +315 -0
- package/dist/svg.js.map +1 -0
- package/dist/techniques.d.ts +74 -0
- package/dist/techniques.js +164 -0
- package/dist/techniques.js.map +1 -0
- package/dist/verify.d.ts +36 -0
- package/dist/verify.js +277 -0
- package/dist/verify.js.map +1 -0
- package/dist/viewport.d.ts +3 -0
- package/dist/viewport.js +71 -0
- package/dist/viewport.js.map +1 -0
- package/dist/workflow.d.ts +53 -0
- package/dist/workflow.js +66 -0
- package/dist/workflow.js.map +1 -0
- package/docs/agent-art-workflow.md +201 -0
- package/docs/agent-setup.md +83 -0
- package/docs/atelier.md +117 -0
- package/docs/cli-reference.md +61 -0
- package/docs/decisions/001-runtime-and-renderer.md +35 -0
- package/docs/decisions/002-composable-scenes-and-history.md +28 -0
- package/docs/decisions/003-editing-refinement-and-agent-validation.md +45 -0
- package/docs/decisions/004-print-production-and-projects.md +19 -0
- package/docs/decisions/005-programmable-digital-art.md +15 -0
- package/docs/decisions/006-staged-2d-art-production.md +13 -0
- package/docs/decisions/007-foundation-first-art-direction.md +13 -0
- package/docs/decisions/008-agent-onboarding-and-trial-lessons.md +48 -0
- package/docs/engine-overview.md +174 -0
- package/docs/evolution.md +179 -0
- package/docs/getting-started.md +107 -0
- package/docs/next-milestone.md +61 -0
- package/docs/previews/a3-production.json +36 -0
- package/docs/previews/benchmark.json +42 -0
- package/docs/previews/landscape.png +0 -0
- package/docs/previews/performance.json +24 -0
- package/docs/previews/poster.png +0 -0
- package/docs/production.md +107 -0
- package/docs/releasing.md +60 -0
- package/docs/scene-format.md +126 -0
- package/docs/studio.md +108 -0
- package/examples/hello/README.md +14 -0
- package/examples/hello/refine.json +10 -0
- package/examples/hello/render.mjs +9 -0
- package/examples/hello/scene.json +19 -0
- package/licenses/DM-Serif-Display-OFL.txt +93 -0
- package/licenses/Inter-OFL.txt +93 -0
- package/package.json +84 -0
- package/schemas/authoring.schema.json +2177 -0
- package/schemas/brief.schema.json +57 -0
- package/schemas/command.schema.json +3154 -0
- package/schemas/construction.schema.json +159 -0
- package/schemas/critique.schema.json +101 -0
- package/schemas/document.schema.json +41 -0
- package/schemas/export.schema.json +89 -0
- package/schemas/fragment.schema.json +1861 -0
- package/schemas/patch.schema.json +3177 -0
- package/schemas/pipeline.schema.json +205 -0
- package/schemas/production.schema.json +452 -0
- package/schemas/program.schema.json +152 -0
- package/schemas/project.schema.json +115 -0
- package/schemas/raster-read.schema.json +42 -0
- package/schemas/raster-write.schema.json +75 -0
- package/schemas/scene.schema.json +2014 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const componentSchema = z.strictObject({
|
|
3
|
+
parameters: z.record(z.string(), z.json()).default({}),
|
|
4
|
+
layers: z.array(z.record(z.string(), z.unknown())).min(1),
|
|
5
|
+
});
|
|
6
|
+
export const componentsSchema = z.record(z.string(), componentSchema);
|
|
7
|
+
export const instanceSchema = z.strictObject({
|
|
8
|
+
use: z.string(),
|
|
9
|
+
id: z.string(),
|
|
10
|
+
params: z.record(z.string(), z.json()).default({}),
|
|
11
|
+
bounds: z
|
|
12
|
+
.tuple([z.number(), z.number(), z.number().positive(), z.number().positive()])
|
|
13
|
+
.optional(),
|
|
14
|
+
role: z.string().optional(),
|
|
15
|
+
z: z.number().optional(),
|
|
16
|
+
transform: z.unknown().optional(),
|
|
17
|
+
});
|
|
18
|
+
function substitute(value, params) {
|
|
19
|
+
if (typeof value === 'string') {
|
|
20
|
+
const exact = value.match(/^\{\{([\w-]+)\}\}$/);
|
|
21
|
+
if (exact) {
|
|
22
|
+
if (!Object.hasOwn(params, exact[1]))
|
|
23
|
+
throw new Error(`Missing component parameter: ${exact[1]}`);
|
|
24
|
+
return params[exact[1]];
|
|
25
|
+
}
|
|
26
|
+
return value.replace(/\{\{([\w-]+)\}\}/g, (_, key) => {
|
|
27
|
+
if (!Object.hasOwn(params, key))
|
|
28
|
+
throw new Error(`Missing component parameter: ${key}`);
|
|
29
|
+
const v = params[key];
|
|
30
|
+
if (typeof v === 'object')
|
|
31
|
+
throw new Error('Only scalar parameters can be interpolated');
|
|
32
|
+
return String(v);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (Array.isArray(value))
|
|
36
|
+
return value.map((v) => substitute(v, params));
|
|
37
|
+
if (value && typeof value === 'object')
|
|
38
|
+
return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, substitute(v, params)]));
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function namespace(layers, prefix) {
|
|
42
|
+
const ids = new Map();
|
|
43
|
+
const collect = (list) => {
|
|
44
|
+
for (const l of list) {
|
|
45
|
+
if (typeof l.id === 'string')
|
|
46
|
+
ids.set(l.id, `${prefix}-${l.id}`);
|
|
47
|
+
if (Array.isArray(l.children))
|
|
48
|
+
collect(l.children);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
collect(layers);
|
|
52
|
+
const walk = (v) => {
|
|
53
|
+
if (Array.isArray(v))
|
|
54
|
+
return v.map(walk);
|
|
55
|
+
if (v && typeof v === 'object')
|
|
56
|
+
return Object.fromEntries(Object.entries(v).map(([k, x]) => [
|
|
57
|
+
k,
|
|
58
|
+
(k === 'id' || k === 'target') && typeof x === 'string' && ids.has(x)
|
|
59
|
+
? ids.get(x)
|
|
60
|
+
: walk(x),
|
|
61
|
+
]));
|
|
62
|
+
return v;
|
|
63
|
+
};
|
|
64
|
+
return walk(layers);
|
|
65
|
+
}
|
|
66
|
+
export function expandComponents(input, definitions, stack = []) {
|
|
67
|
+
if (stack.length > 24)
|
|
68
|
+
throw new Error('Component expansion is too deep');
|
|
69
|
+
return input.map((raw) => {
|
|
70
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
71
|
+
throw new Error('Layer must be an object');
|
|
72
|
+
const layer = raw;
|
|
73
|
+
if ('use' in layer) {
|
|
74
|
+
const instance = instanceSchema.parse(layer), component = definitions[instance.use];
|
|
75
|
+
if (!component)
|
|
76
|
+
throw new Error(`Unknown component: ${instance.use}`);
|
|
77
|
+
if (stack.includes(instance.use))
|
|
78
|
+
throw new Error('Cyclic component use');
|
|
79
|
+
for (const key of Object.keys(instance.params))
|
|
80
|
+
if (!Object.hasOwn(component.parameters, key))
|
|
81
|
+
throw new Error(`Unknown component parameter: ${key}`);
|
|
82
|
+
const expanded = expandComponents(substitute(component.layers, { ...component.parameters, ...instance.params }), definitions, [...stack, instance.use]);
|
|
83
|
+
const { use, params, ...attrs } = instance;
|
|
84
|
+
return {
|
|
85
|
+
...attrs,
|
|
86
|
+
type: 'group',
|
|
87
|
+
children: namespace(expanded, instance.id),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
...layer,
|
|
92
|
+
...(Array.isArray(layer.children)
|
|
93
|
+
? { children: expandComponents(layer.children, definitions, stack) }
|
|
94
|
+
: {}),
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC;IAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAClD,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC7E,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AACH,SAAS,UAAU,CAAC,KAAc,EAAE,MAA+B;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;YAC3D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YACxF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACzF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACpC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,SAAS,CAAC,MAAiC,EAAE,MAAc;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,IAA+B,EAAE,EAAE;QAClD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,CAAU,EAAW,EAAE;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAC5B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;gBAChC,CAAC;gBACD,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACZ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACZ,CAAC,CACH,CAAC;QACJ,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,CAA8B,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,gBAAgB,CAC9B,KAAgB,EAChB,WAAsC,EACtC,KAAK,GAAa,EAAE;IAEpB,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,GAA8B,CAAC;QAC7C,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1C,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC1E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC;oBAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAc,EAC1F,WAAW,EACX,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CACzB,CAAC;YACF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC;YAC3C,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,SAAS,CAAC,QAAqC,EAAE,QAAQ,CAAC,EAAE,CAAC;aACxE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC/B,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE;gBACpE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const constructionSchema: z.ZodObject<{
|
|
3
|
+
points: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
4
|
+
anchor: z.ZodString;
|
|
5
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
6
|
+
}, z.core.$strict>]>>;
|
|
7
|
+
paths: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
8
|
+
op: z.ZodLiteral<"M">;
|
|
9
|
+
to: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
10
|
+
anchor: z.ZodString;
|
|
11
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
12
|
+
}, z.core.$strict>]>;
|
|
13
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
14
|
+
op: z.ZodLiteral<"L">;
|
|
15
|
+
to: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
16
|
+
anchor: z.ZodString;
|
|
17
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
18
|
+
}, z.core.$strict>]>;
|
|
19
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
20
|
+
op: z.ZodLiteral<"Q">;
|
|
21
|
+
control: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
22
|
+
anchor: z.ZodString;
|
|
23
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
24
|
+
}, z.core.$strict>]>;
|
|
25
|
+
to: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
26
|
+
anchor: z.ZodString;
|
|
27
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
28
|
+
}, z.core.$strict>]>;
|
|
29
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
30
|
+
op: z.ZodLiteral<"C">;
|
|
31
|
+
control1: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
32
|
+
anchor: z.ZodString;
|
|
33
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
34
|
+
}, z.core.$strict>]>;
|
|
35
|
+
control2: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
36
|
+
anchor: z.ZodString;
|
|
37
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
38
|
+
}, z.core.$strict>]>;
|
|
39
|
+
to: z.ZodUnion<readonly [z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodString, z.ZodObject<{
|
|
40
|
+
anchor: z.ZodString;
|
|
41
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
42
|
+
}, z.core.$strict>]>;
|
|
43
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
44
|
+
op: z.ZodLiteral<"Z">;
|
|
45
|
+
}, z.core.$strict>], "op">>>>;
|
|
46
|
+
}, z.core.$strict>;
|
|
47
|
+
/** Resolve a named 2D construction graph. Moving an anchor updates every dependent guide. */
|
|
48
|
+
export declare function resolveConstruction(raw: unknown): {
|
|
49
|
+
points: Record<string, [number, number]>;
|
|
50
|
+
paths: {
|
|
51
|
+
[k: string]: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const pair = z.tuple([
|
|
3
|
+
z.number().finite().min(-1e6).max(1e6),
|
|
4
|
+
z.number().finite().min(-1e6).max(1e6),
|
|
5
|
+
]);
|
|
6
|
+
const id = z.string().regex(/^[A-Za-z][A-Za-z0-9_-]{0,79}$/);
|
|
7
|
+
const point = z.union([pair, id, z.strictObject({ anchor: id, offset: pair })]);
|
|
8
|
+
export const constructionSchema = z.strictObject({
|
|
9
|
+
points: z.record(id, point),
|
|
10
|
+
paths: z
|
|
11
|
+
.record(id, z
|
|
12
|
+
.array(z.discriminatedUnion('op', [
|
|
13
|
+
z.strictObject({ op: z.literal('M'), to: point }),
|
|
14
|
+
z.strictObject({ op: z.literal('L'), to: point }),
|
|
15
|
+
z.strictObject({ op: z.literal('Q'), control: point, to: point }),
|
|
16
|
+
z.strictObject({ op: z.literal('C'), control1: point, control2: point, to: point }),
|
|
17
|
+
z.strictObject({ op: z.literal('Z') }),
|
|
18
|
+
]))
|
|
19
|
+
.min(1)
|
|
20
|
+
.max(4096))
|
|
21
|
+
.default({}),
|
|
22
|
+
});
|
|
23
|
+
/** Resolve a named 2D construction graph. Moving an anchor updates every dependent guide. */
|
|
24
|
+
export function resolveConstruction(raw) {
|
|
25
|
+
const spec = constructionSchema.parse(raw), points = Object.create(null), visiting = new Set();
|
|
26
|
+
if (Object.keys(spec.points).length > 4096 || Object.keys(spec.paths).length > 256)
|
|
27
|
+
throw new Error('Construction exceeds 4096 points / 256 paths');
|
|
28
|
+
const resolve = (ref) => {
|
|
29
|
+
if (Array.isArray(ref))
|
|
30
|
+
return [...ref];
|
|
31
|
+
if (typeof ref === 'object') {
|
|
32
|
+
const a = named(ref.anchor);
|
|
33
|
+
const value = [a[0] + ref.offset[0], a[1] + ref.offset[1]];
|
|
34
|
+
if (value.some((v) => !Number.isFinite(v) || Math.abs(v) > 1e6))
|
|
35
|
+
throw new Error('Resolved construction coordinate exceeds range');
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
return named(ref);
|
|
39
|
+
};
|
|
40
|
+
const named = (name) => {
|
|
41
|
+
if (Object.hasOwn(points, name))
|
|
42
|
+
return points[name];
|
|
43
|
+
if (visiting.has(name))
|
|
44
|
+
throw new Error(`Construction cycle at ${name}`);
|
|
45
|
+
if (!Object.hasOwn(spec.points, name))
|
|
46
|
+
throw new Error(`Unknown construction point ${name}`);
|
|
47
|
+
visiting.add(name);
|
|
48
|
+
const p = resolve(spec.points[name]);
|
|
49
|
+
visiting.delete(name);
|
|
50
|
+
if (p.some((v) => !Number.isFinite(v) || Math.abs(v) > 1e6))
|
|
51
|
+
throw new Error('Resolved construction coordinate exceeds range');
|
|
52
|
+
return (points[name] = p);
|
|
53
|
+
};
|
|
54
|
+
Object.keys(spec.points).forEach(named);
|
|
55
|
+
const xy = (ref) => resolve(ref).join(' ');
|
|
56
|
+
const paths = Object.fromEntries(Object.entries(spec.paths).map(([id, segments]) => {
|
|
57
|
+
if (segments[0].op !== 'M')
|
|
58
|
+
throw new Error('Construction paths must start with M');
|
|
59
|
+
return [
|
|
60
|
+
id,
|
|
61
|
+
segments
|
|
62
|
+
.map((s) => {
|
|
63
|
+
switch (s.op) {
|
|
64
|
+
case 'M':
|
|
65
|
+
case 'L':
|
|
66
|
+
return `${s.op}${xy(s.to)}`;
|
|
67
|
+
case 'Q':
|
|
68
|
+
return `Q${xy(s.control)} ${xy(s.to)}`;
|
|
69
|
+
case 'C':
|
|
70
|
+
return `C${xy(s.control1)} ${xy(s.control2)} ${xy(s.to)}`;
|
|
71
|
+
case 'Z':
|
|
72
|
+
return 'Z';
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
.join(' '),
|
|
76
|
+
];
|
|
77
|
+
}));
|
|
78
|
+
return { points, paths };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=construction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"construction.js","sourceRoot":"","sources":["../src/construction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Scene } from './schema.js';
|
|
3
|
+
import type { RenderResult } from './render.js';
|
|
4
|
+
import type { VerificationReport } from './verify.js';
|
|
5
|
+
export declare const critiqueSchema: z.ZodObject<{
|
|
6
|
+
scene_hash: z.ZodString;
|
|
7
|
+
png_hash: z.ZodString;
|
|
8
|
+
reviewer: z.ZodString;
|
|
9
|
+
method: z.ZodEnum<{
|
|
10
|
+
human: "human";
|
|
11
|
+
"vision-agent": "vision-agent";
|
|
12
|
+
}>;
|
|
13
|
+
summary: z.ZodString;
|
|
14
|
+
score: z.ZodNumber;
|
|
15
|
+
issues: z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
category: z.ZodEnum<{
|
|
18
|
+
coherence: "coherence";
|
|
19
|
+
composition: "composition";
|
|
20
|
+
lighting: "lighting";
|
|
21
|
+
semantic: "semantic";
|
|
22
|
+
texture: "texture";
|
|
23
|
+
typography: "typography";
|
|
24
|
+
}>;
|
|
25
|
+
severity: z.ZodEnum<{
|
|
26
|
+
high: "high";
|
|
27
|
+
low: "low";
|
|
28
|
+
medium: "medium";
|
|
29
|
+
}>;
|
|
30
|
+
target: z.ZodOptional<z.ZodString>;
|
|
31
|
+
region: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
32
|
+
message: z.ZodString;
|
|
33
|
+
suggestion: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strict>>;
|
|
35
|
+
}, z.core.$strict>;
|
|
36
|
+
export type VisualCritique = z.infer<typeof critiqueSchema>;
|
|
37
|
+
export type VisualCritic = (input: {
|
|
38
|
+
scene: Scene;
|
|
39
|
+
render: RenderResult;
|
|
40
|
+
verification: VerificationReport;
|
|
41
|
+
intent?: string;
|
|
42
|
+
signal?: AbortSignal;
|
|
43
|
+
}) => Promise<VisualCritique>;
|
|
44
|
+
export declare function validateCritique(raw: unknown, scene: Scene, render: RenderResult): VisualCritique;
|
package/dist/critique.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { boundsSchema, flattenLayers } from './schema.js';
|
|
3
|
+
export const critiqueSchema = z.strictObject({
|
|
4
|
+
scene_hash: z.string().regex(/^sha256:[a-f0-9]{64}$/),
|
|
5
|
+
png_hash: z.string().regex(/^sha256:[a-f0-9]{64}$/),
|
|
6
|
+
reviewer: z.string().min(1).max(200),
|
|
7
|
+
method: z.enum(['vision-agent', 'human']),
|
|
8
|
+
summary: z.string().min(1).max(4000),
|
|
9
|
+
score: z.number().min(0).max(1),
|
|
10
|
+
issues: z
|
|
11
|
+
.array(z.strictObject({
|
|
12
|
+
id: z.string(),
|
|
13
|
+
category: z.enum([
|
|
14
|
+
'composition',
|
|
15
|
+
'typography',
|
|
16
|
+
'lighting',
|
|
17
|
+
'texture',
|
|
18
|
+
'semantic',
|
|
19
|
+
'coherence',
|
|
20
|
+
]),
|
|
21
|
+
severity: z.enum(['high', 'medium', 'low']),
|
|
22
|
+
target: z.string().optional(),
|
|
23
|
+
region: boundsSchema.optional(),
|
|
24
|
+
message: z.string().min(1),
|
|
25
|
+
suggestion: z.string().optional(),
|
|
26
|
+
}))
|
|
27
|
+
.max(100),
|
|
28
|
+
});
|
|
29
|
+
export function validateCritique(raw, scene, render) {
|
|
30
|
+
const critique = critiqueSchema.parse(raw);
|
|
31
|
+
if (critique.scene_hash !== render.evidence.scene.hash ||
|
|
32
|
+
critique.png_hash !== render.evidence.render.png_hash)
|
|
33
|
+
throw new Error('Critique is stale: scene and PNG hashes must match the current render');
|
|
34
|
+
for (const issue of critique.issues) {
|
|
35
|
+
if (issue.target && !flattenLayers(scene.layers).some((l) => l.id === issue.target))
|
|
36
|
+
throw new Error('Unknown critique target');
|
|
37
|
+
if (issue.region) {
|
|
38
|
+
const [x, y, w, h] = issue.region;
|
|
39
|
+
if (x < 0 || y < 0 || x + w > scene.canvas.width || y + h > scene.canvas.height)
|
|
40
|
+
throw new Error('Critique issue lies outside the image');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return critique;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=critique.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"critique.js","sourceRoot":"","sources":["../src/critique.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAGtE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,YAAY,CAAC;QACb,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC;YACf,aAAa;YACb,YAAY;YACZ,UAAU;YACV,SAAS;YACT,UAAU;YACV,WAAW;SACZ,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC,CACH;SACA,GAAG,CAAC,GAAG,CAAC;CACZ,CAAC,CAAC;AASH,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,KAAY,EAAE,MAAoB;IAC/E,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,IACE,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;QAClD,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ;QAErD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;gBAC7E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/detail.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Canvas, type Image } from './native.js';
|
|
2
|
+
import { type ResolvedLayer, type Matrix } from './layout.js';
|
|
3
|
+
import type { RasterRegion } from './schema.js';
|
|
4
|
+
/** Supersample only promoted patches. The semantic surface stays the source. */
|
|
5
|
+
export declare function renderDetail(surface: Canvas, region: RasterRegion, node: ResolvedLayer, lookup: (id: string) => Canvas, images: Map<string, Image>, canvasTransform?: Matrix): void;
|
package/dist/detail.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createCanvas } from './native.js';
|
|
2
|
+
import { multiply } from './layout.js';
|
|
3
|
+
import { coordinateMatrix, inverse, worldScope } from './spatial.js';
|
|
4
|
+
import { applyRasterOperation, pixelBounds } from './paint.js';
|
|
5
|
+
/** Supersample only promoted patches. The semantic surface stays the source. */
|
|
6
|
+
export function renderDetail(surface, region, node, lookup, images, canvasTransform) {
|
|
7
|
+
if (!region.operations.length && !region.source)
|
|
8
|
+
return;
|
|
9
|
+
const [x, y, w, h] = region.bounds, scale = region.scale;
|
|
10
|
+
const matrix = multiply(region.space === 'layer'
|
|
11
|
+
? coordinateMatrix(region, node)
|
|
12
|
+
: (canvasTransform ?? coordinateMatrix(region, node)), [1, 0, 0, 1, x, y]);
|
|
13
|
+
const rw = Math.ceil(w * scale), rh = Math.ceil(h * scale);
|
|
14
|
+
if (rw * rh > 16 * 1024 * 1024)
|
|
15
|
+
throw new Error('Promoted region exceeds 16 megapixels');
|
|
16
|
+
const patch = createCanvas(rw, rh), ctx = patch.getContext('2d');
|
|
17
|
+
const toPatch = multiply([scale, 0, 0, scale, 0, 0], inverse(matrix));
|
|
18
|
+
ctx.setTransform(...toPatch);
|
|
19
|
+
ctx.drawImage(surface, 0, 0);
|
|
20
|
+
ctx.resetTransform();
|
|
21
|
+
if (region.source) {
|
|
22
|
+
if (region.composite !== 'over')
|
|
23
|
+
ctx.clearRect(0, 0, rw, rh);
|
|
24
|
+
ctx.drawImage(images.get(region.source), 0, 0, rw, rh);
|
|
25
|
+
}
|
|
26
|
+
const localLookup = (id) => {
|
|
27
|
+
const c = createCanvas(rw, rh), cc = c.getContext('2d');
|
|
28
|
+
cc.setTransform(...toPatch);
|
|
29
|
+
cc.drawImage(lookup(id), 0, 0);
|
|
30
|
+
return c;
|
|
31
|
+
};
|
|
32
|
+
for (const op of region.operations)
|
|
33
|
+
applyRasterOperation(patch, {
|
|
34
|
+
...op,
|
|
35
|
+
space: 'layer',
|
|
36
|
+
...(op.mask
|
|
37
|
+
? { mask: { ...op.mask, space: op.mask.type === 'semantic-object' ? 'canvas' : 'layer' } }
|
|
38
|
+
: {}),
|
|
39
|
+
}, localLookup, [scale, 0, 0, scale, 0, 0], [scale, 0, 0, scale, 0, 0]);
|
|
40
|
+
const edited = createCanvas(surface.width, surface.height), out = edited.getContext('2d');
|
|
41
|
+
out.drawImage(surface, 0, 0);
|
|
42
|
+
out.setTransform(...matrix);
|
|
43
|
+
out.beginPath();
|
|
44
|
+
out.rect(0, 0, w, h);
|
|
45
|
+
out.clip();
|
|
46
|
+
out.clearRect(0, 0, w, h);
|
|
47
|
+
out.drawImage(patch, 0, 0, w, h);
|
|
48
|
+
const bounds = pixelBounds(worldScope([0, 0, w, h], matrix), surface.width, surface.height);
|
|
49
|
+
if (bounds)
|
|
50
|
+
surface.getContext('2d').putImageData(out.getImageData(...bounds), bounds[0], bounds[1]);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detail.js","sourceRoot":"","sources":["../src/detail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const documentSchema: z.ZodObject<{
|
|
3
|
+
width: z.ZodNumber;
|
|
4
|
+
height: z.ZodNumber;
|
|
5
|
+
unit: z.ZodDefault<z.ZodEnum<{
|
|
6
|
+
in: "in";
|
|
7
|
+
mm: "mm";
|
|
8
|
+
pt: "pt";
|
|
9
|
+
}>>;
|
|
10
|
+
ppi: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
bleed: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
safe_margin: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
export type PhysicalDocument = z.infer<typeof documentSchema>;
|
|
15
|
+
export declare const mmPerUnit: {
|
|
16
|
+
mm: number;
|
|
17
|
+
in: number;
|
|
18
|
+
pt: number;
|
|
19
|
+
};
|
|
20
|
+
export declare function documentGeometry(document: PhysicalDocument): {
|
|
21
|
+
trim_mm: [number, number];
|
|
22
|
+
bleed_mm: number;
|
|
23
|
+
safe_mm: number;
|
|
24
|
+
full_mm: [number, number];
|
|
25
|
+
pixels: [number, number];
|
|
26
|
+
trim_pt: [number, number];
|
|
27
|
+
bleed_pt: number;
|
|
28
|
+
};
|
|
29
|
+
export declare function lengthMm(value: string): number;
|
|
30
|
+
export declare const exportPresetSchema: z.ZodObject<{
|
|
31
|
+
format: z.ZodDefault<z.ZodEnum<{
|
|
32
|
+
jpeg: "jpeg";
|
|
33
|
+
pdf: "pdf";
|
|
34
|
+
png: "png";
|
|
35
|
+
svg: "svg";
|
|
36
|
+
tiff: "tiff";
|
|
37
|
+
}>>;
|
|
38
|
+
colour_space: z.ZodDefault<z.ZodEnum<{
|
|
39
|
+
cmyk: "cmyk";
|
|
40
|
+
srgb: "srgb";
|
|
41
|
+
}>>;
|
|
42
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
43
|
+
profile_hash: z.ZodOptional<z.ZodString>;
|
|
44
|
+
intent: z.ZodDefault<z.ZodLiteral<"perceptual">>;
|
|
45
|
+
quality: z.ZodDefault<z.ZodNumber>;
|
|
46
|
+
chroma_subsampling: z.ZodDefault<z.ZodEnum<{
|
|
47
|
+
"4:2:0": "4:2:0";
|
|
48
|
+
"4:4:4": "4:4:4";
|
|
49
|
+
}>>;
|
|
50
|
+
background: z.ZodDefault<z.ZodString>;
|
|
51
|
+
crop_marks: z.ZodDefault<z.ZodBoolean>;
|
|
52
|
+
minimum_ppi: z.ZodDefault<z.ZodNumber>;
|
|
53
|
+
max_ink: z.ZodDefault<z.ZodNumber>;
|
|
54
|
+
black: z.ZodDefault<z.ZodEnum<{
|
|
55
|
+
"k-only": "k-only";
|
|
56
|
+
profile: "profile";
|
|
57
|
+
}>>;
|
|
58
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
59
|
+
hybrid: "hybrid";
|
|
60
|
+
raster: "raster";
|
|
61
|
+
}>>;
|
|
62
|
+
ppi: z.ZodOptional<z.ZodNumber>;
|
|
63
|
+
}, z.core.$strict>;
|
|
64
|
+
export type ExportPreset = z.infer<typeof exportPresetSchema>;
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const documentSchema = z.strictObject({
|
|
3
|
+
width: z.number().positive().max(2000),
|
|
4
|
+
height: z.number().positive().max(2000),
|
|
5
|
+
unit: z.enum(['mm', 'in', 'pt']).default('mm'),
|
|
6
|
+
ppi: z.number().min(36).max(1200).default(300),
|
|
7
|
+
bleed: z.number().min(0).max(100).default(0),
|
|
8
|
+
safe_margin: z.number().min(0).max(100).default(0),
|
|
9
|
+
});
|
|
10
|
+
export const mmPerUnit = { mm: 1, in: 25.4, pt: 25.4 / 72 };
|
|
11
|
+
export function documentGeometry(document) {
|
|
12
|
+
const d = documentSchema.parse(document), unit = mmPerUnit[d.unit];
|
|
13
|
+
const trim = [d.width * unit, d.height * unit];
|
|
14
|
+
const bleed = d.bleed * unit, safe = d.safe_margin * unit;
|
|
15
|
+
if (safe * 2 >= Math.min(...trim))
|
|
16
|
+
throw new Error('Safe margin consumes the trim area');
|
|
17
|
+
const full = trim.map((v) => v + bleed * 2);
|
|
18
|
+
return {
|
|
19
|
+
trim_mm: trim,
|
|
20
|
+
bleed_mm: bleed,
|
|
21
|
+
safe_mm: safe,
|
|
22
|
+
full_mm: full,
|
|
23
|
+
pixels: full.map((v) => Math.round((v * d.ppi) / 25.4)),
|
|
24
|
+
trim_pt: trim.map((v) => (v * 72) / 25.4),
|
|
25
|
+
bleed_pt: (bleed * 72) / 25.4,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function lengthMm(value) {
|
|
29
|
+
const m = /^(\d+(?:\.\d+)?)(mm|in|pt)?$/.exec(value);
|
|
30
|
+
if (!m)
|
|
31
|
+
throw new Error('Expected a length such as 3mm, 0.125in or 9pt');
|
|
32
|
+
return Number(m[1]) * mmPerUnit[(m[2] ?? 'mm')];
|
|
33
|
+
}
|
|
34
|
+
export const exportPresetSchema = z.strictObject({
|
|
35
|
+
format: z.enum(['png', 'jpeg', 'tiff', 'pdf', 'svg']).default('pdf'),
|
|
36
|
+
colour_space: z.enum(['srgb', 'cmyk']).default('srgb'),
|
|
37
|
+
profile: z.string().optional(),
|
|
38
|
+
profile_hash: z
|
|
39
|
+
.string()
|
|
40
|
+
.regex(/^sha256:[a-f0-9]{64}$/)
|
|
41
|
+
.optional(),
|
|
42
|
+
intent: z.literal('perceptual').default('perceptual'),
|
|
43
|
+
quality: z.number().int().min(1).max(100).default(90),
|
|
44
|
+
chroma_subsampling: z.enum(['4:4:4', '4:2:0']).default('4:4:4'),
|
|
45
|
+
background: z
|
|
46
|
+
.string()
|
|
47
|
+
.regex(/^#[a-fA-F0-9]{6}$/)
|
|
48
|
+
.default('#ffffff'),
|
|
49
|
+
crop_marks: z.boolean().default(false),
|
|
50
|
+
minimum_ppi: z.number().min(1).max(1200).default(150),
|
|
51
|
+
max_ink: z.number().min(100).max(400).default(300),
|
|
52
|
+
black: z.enum(['profile', 'k-only']).default('k-only'),
|
|
53
|
+
mode: z.enum(['hybrid', 'raster']).default('hybrid'),
|
|
54
|
+
ppi: z.number().min(36).max(1200).optional(),
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC5D,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EACtC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAqB,CAAC;IACnE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,EAC1B,IAAI,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAqB,CAAC;IAChE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAqB;QAC3E,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAqB;QAC7D,QAAQ,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI;KAC9B,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAA2B,CAAC,CAAC;AAC5E,CAAC;AACD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACpE,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,KAAK,CAAC,uBAAuB,CAAC;SAC9B,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC/D,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,KAAK,CAAC,mBAAmB,CAAC;SAC1B,OAAO,CAAC,SAAS,CAAC;IACrB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC"}
|