@visual-platform/contracts 0.0.0-stage → 0.1.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.
Files changed (58) hide show
  1. package/dist/classes.d.ts +11 -0
  2. package/dist/classes.d.ts.map +1 -0
  3. package/dist/classes.js +34 -0
  4. package/dist/classes.js.map +1 -0
  5. package/dist/component.d.ts +135 -0
  6. package/dist/component.d.ts.map +1 -0
  7. package/dist/component.js +176 -0
  8. package/dist/component.js.map +1 -0
  9. package/dist/data.d.ts +152 -0
  10. package/dist/data.d.ts.map +1 -0
  11. package/dist/data.js +336 -0
  12. package/dist/data.js.map +1 -0
  13. package/dist/design.d.ts +139 -0
  14. package/dist/design.d.ts.map +1 -0
  15. package/dist/design.js +226 -0
  16. package/dist/design.js.map +1 -0
  17. package/dist/events.d.ts +36 -0
  18. package/dist/events.d.ts.map +1 -0
  19. package/dist/events.js +46 -0
  20. package/dist/events.js.map +1 -0
  21. package/dist/index.d.ts +14 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +14 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/locales.d.ts +37 -0
  26. package/dist/locales.d.ts.map +1 -0
  27. package/dist/locales.js +36 -0
  28. package/dist/locales.js.map +1 -0
  29. package/dist/page-document.d.ts +202 -0
  30. package/dist/page-document.d.ts.map +1 -0
  31. package/dist/page-document.js +71 -0
  32. package/dist/page-document.js.map +1 -0
  33. package/dist/published.d.ts +353 -0
  34. package/dist/published.d.ts.map +1 -0
  35. package/dist/published.js +66 -0
  36. package/dist/published.js.map +1 -0
  37. package/dist/references.d.ts +51 -0
  38. package/dist/references.d.ts.map +1 -0
  39. package/dist/references.js +35 -0
  40. package/dist/references.js.map +1 -0
  41. package/dist/responsive.d.ts +19 -0
  42. package/dist/responsive.d.ts.map +1 -0
  43. package/dist/responsive.js +18 -0
  44. package/dist/responsive.js.map +1 -0
  45. package/dist/section.d.ts +33 -0
  46. package/dist/section.d.ts.map +1 -0
  47. package/dist/section.js +53 -0
  48. package/dist/section.js.map +1 -0
  49. package/dist/seo.d.ts +98 -0
  50. package/dist/seo.d.ts.map +1 -0
  51. package/dist/seo.js +71 -0
  52. package/dist/seo.js.map +1 -0
  53. package/dist/tables.d.ts +134 -0
  54. package/dist/tables.d.ts.map +1 -0
  55. package/dist/tables.js +438 -0
  56. package/dist/tables.js.map +1 -0
  57. package/package.json +31 -3
  58. package/README.md +0 -3
package/dist/data.js ADDED
@@ -0,0 +1,336 @@
1
+ import { z } from "zod";
2
+ import { walkNodes } from "./page-document.js";
3
+ import { matchFilter, parseFilter, TableQuerySchema } from "./tables.js";
4
+ /**
5
+ * Data binding (ADR-034). A block prop is either its static value (props) or bound to a field of a
6
+ * data input: node.bind = { title: { path: "item.name" } }. The static value stays as the fallback.
7
+ * Phase A source: "app" — the customer app passes the data when rendering.
8
+ */
9
+ export const REPEAT_TYPE = "Repeat";
10
+ /** "app": passed by the customer app; "table": a project data table query (ADR-041). */
11
+ export const DATA_SOURCES = ["app", "table"];
12
+ export const DATA_FIELD_TYPES = ["text", "number", "boolean", "image", "link", "date", "list", "object"];
13
+ export const BIND_FORMATS = ["number", "currency", "date", "datetime", "upper", "lower"];
14
+ const NAME = /^[A-Za-z_][A-Za-z0-9_]{0,39}$/;
15
+ /** products · products.0.name · item.price · item.variants — dotted names/indexes only, no expressions. */
16
+ export const DataPathSchema = z.string().max(200).regex(/^[A-Za-z_][A-Za-z0-9_]*(\.([A-Za-z0-9_]+|\{locale\})){0,9}$/, "paths look like products.0.name, item.price or item.name.{locale}");
17
+ export const DataFieldSchema = z.lazy(() => z.object({
18
+ name: z.string().regex(NAME),
19
+ type: z.enum(DATA_FIELD_TYPES),
20
+ label: z.string().max(60).optional(),
21
+ /** For list (item fields) and object. */
22
+ fields: z.array(DataFieldSchema).max(40).optional(),
23
+ /** One value per language: { vi: "…", en: "…" } — bind with `.{locale}` (ADR-040). */
24
+ localized: z.boolean().optional(),
25
+ }).strict());
26
+ export const DataInputSchema = z.object({
27
+ name: z.string().regex(/^[a-z][A-Za-z0-9]{0,39}$/, "data input names are camelCase, e.g. products"),
28
+ label: z.string().max(60).optional(),
29
+ source: z.enum(DATA_SOURCES).default("app"),
30
+ shape: z.enum(["list", "object"]),
31
+ /** Fields of one item (list) or of the object. */
32
+ fields: z.array(DataFieldSchema).max(40),
33
+ /** Sample used by the editor canvas and pickers only — never on the live site. */
34
+ sample: z.unknown().optional(),
35
+ /** source "table": the query run by the platform at render time (ADR-041). */
36
+ query: z.lazy(() => TableQuerySchema).optional(),
37
+ /** source "table": take the first row as an object instead of a list. */
38
+ single: z.boolean().optional(),
39
+ }).strict().superRefine((d, ctx) => {
40
+ if (d.source === "table" && !d.query)
41
+ ctx.addIssue({ code: "custom", path: ["query"], message: "choose a table" });
42
+ if (d.sample !== undefined && JSON.stringify(d.sample).length > 50_000)
43
+ ctx.addIssue({ code: "custom", path: ["sample"], message: "sample data is limited to 50 KB" });
44
+ });
45
+ export const DataInputsSchema = z.array(DataInputSchema).max(10).superRefine((list, ctx) => {
46
+ const seen = new Set();
47
+ for (const d of list) {
48
+ if (seen.has(d.name))
49
+ ctx.addIssue({ code: "custom", message: `duplicate data input "${d.name}"` });
50
+ seen.add(d.name);
51
+ }
52
+ });
53
+ export const BindingSchema = z.object({
54
+ path: DataPathSchema,
55
+ format: z.enum(BIND_FORMATS).optional(),
56
+ /** ISO 4217 code for format "currency", e.g. VND. */
57
+ currency: z.string().regex(/^[A-Z]{3}$/).optional(),
58
+ prefix: z.string().max(20).optional(),
59
+ suffix: z.string().max(20).optional(),
60
+ }).strict();
61
+ export const NodeBindingsSchema = z.record(z.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,59}$/), BindingSchema)
62
+ .refine((r) => Object.keys(r).length <= 30, "at most 30 bound props per block");
63
+ /** Field types a definition field can receive from data. */
64
+ export const BINDABLE_FIELD_TYPES = ["text", "textarea", "number", "boolean", "select", "image", "link"];
65
+ // ---------- schema inference (editor: paste a sample → fields) ----------
66
+ const LOCALE_KEY = /^[a-z]{2,3}(-[A-Z]{2})?$/;
67
+ /** { vi: "…", en: "…" } — every key a language code, every value a string. */
68
+ export const isLocalizedValue = (v) => !!v && typeof v === "object" && !Array.isArray(v) && Object.keys(v).length > 0 && Object.entries(v).every(([k, x]) => LOCALE_KEY.test(k) && typeof x === "string");
69
+ function typeOf(v) {
70
+ if (Array.isArray(v))
71
+ return "list";
72
+ if (typeof v === "number")
73
+ return "number";
74
+ if (typeof v === "boolean")
75
+ return "boolean";
76
+ if (v && typeof v === "object")
77
+ return "url" in v ? "image" : "href" in v ? "link" : "object";
78
+ if (typeof v === "string") {
79
+ if (/^\d{4}-\d{2}-\d{2}(T|$)/.test(v))
80
+ return "date";
81
+ if (/^https?:\/\/\S+\.(png|jpe?g|webp|gif|avif|svg)(\?\S*)?$/i.test(v))
82
+ return "image";
83
+ if (/^(https?:\/\/|\/)\S*$/.test(v))
84
+ return "link";
85
+ }
86
+ return "text";
87
+ }
88
+ /** Fields of an object (merging keys of several samples, e.g. all items of a list). */
89
+ export function inferFields(samples, depth = 0) {
90
+ const out = new Map();
91
+ for (const s of samples) {
92
+ if (!s || typeof s !== "object" || Array.isArray(s))
93
+ continue;
94
+ for (const [k, v] of Object.entries(s)) {
95
+ if (!NAME.test(k) || out.has(k) || v === null || v === undefined)
96
+ continue;
97
+ if (isLocalizedValue(v)) {
98
+ out.set(k, { name: k, type: "text", localized: true });
99
+ if (out.size >= 40)
100
+ break;
101
+ continue;
102
+ }
103
+ const t = typeOf(v);
104
+ const f = { name: k, type: t };
105
+ if (depth < 3 && t === "list")
106
+ f.fields = inferFields(v.slice(0, 20), depth + 1);
107
+ if (depth < 3 && t === "object")
108
+ f.fields = inferFields([v], depth + 1);
109
+ out.set(k, f);
110
+ if (out.size >= 40)
111
+ break;
112
+ }
113
+ }
114
+ return [...out.values()];
115
+ }
116
+ /** A data input from a pasted sample: a list (array) or an object. */
117
+ export function inferDataInput(name, sample) {
118
+ const list = Array.isArray(sample);
119
+ return { name, source: "app", shape: list ? "list" : "object", fields: inferFields(list ? sample.slice(0, 20) : [sample]), sample };
120
+ }
121
+ // ---------- resolution ----------
122
+ /** Read a dotted path from a scope ({ products, item, index }). Unknown segments → undefined. */
123
+ export function readPath(scope, path, locale) {
124
+ if (path.includes("{locale}")) {
125
+ // item.name.{locale} → the page language, then its base language (vi-VN → vi).
126
+ const exact = locale ? readPath(scope, path.replaceAll("{locale}", locale)) : undefined;
127
+ if (exact !== undefined || !locale?.includes("-"))
128
+ return exact;
129
+ return readPath(scope, path.replaceAll("{locale}", locale.split("-")[0]));
130
+ }
131
+ let cur = scope;
132
+ for (const seg of path.split(".")) {
133
+ if (cur === null || cur === undefined)
134
+ return undefined;
135
+ if (Array.isArray(cur))
136
+ cur = /^\d+$/.test(seg) ? cur[Number(seg)] : seg === "length" ? cur.length : undefined;
137
+ else if (typeof cur === "object")
138
+ cur = Object.prototype.hasOwnProperty.call(cur, seg) ? cur[seg] : undefined;
139
+ else
140
+ return undefined;
141
+ }
142
+ return cur;
143
+ }
144
+ const SAFE_HREF = /^(https?:\/\/|mailto:|tel:|\/(?!\/)|#)/i;
145
+ function formatValue(v, b, locale) {
146
+ const n = typeof v === "number" ? v : Number(v);
147
+ switch (b.format) {
148
+ case "number": return Number.isFinite(n) ? new Intl.NumberFormat(locale).format(n) : String(v);
149
+ case "currency": return Number.isFinite(n) ? new Intl.NumberFormat(locale, { style: "currency", currency: b.currency ?? "USD", maximumFractionDigits: b.currency === "VND" ? 0 : 2 }).format(n) : String(v);
150
+ case "date":
151
+ case "datetime": {
152
+ const d = new Date(String(v));
153
+ return Number.isNaN(d.getTime()) ? String(v) : new Intl.DateTimeFormat(locale, b.format === "date" ? { dateStyle: "medium", timeZone: "UTC" } : { dateStyle: "medium", timeStyle: "short", timeZone: "UTC" }).format(d);
154
+ }
155
+ case "upper": return String(v).toLocaleUpperCase(locale);
156
+ case "lower": return String(v).toLocaleLowerCase(locale);
157
+ default: return typeof v === "object" ? "" : String(v);
158
+ }
159
+ }
160
+ /**
161
+ * Convert a data value to what a definition field expects. Returns undefined when it does not fit
162
+ * (the static value is then kept).
163
+ */
164
+ export function coerceBound(v, fieldType, b, opts = {}) {
165
+ // A localized value bound without `.{locale}`: take the page language (then its base language).
166
+ if (isLocalizedValue(v) && opts.locale)
167
+ v = v[opts.locale] ?? v[opts.locale.split("-")[0]];
168
+ if (v === undefined || v === null)
169
+ return undefined;
170
+ switch (fieldType) {
171
+ case "text":
172
+ case "textarea": return `${b.prefix ?? ""}${formatValue(v, b, opts.locale)}${b.suffix ?? ""}`;
173
+ case "number": {
174
+ const n = typeof v === "number" ? v : Number(v);
175
+ return Number.isFinite(n) ? n : undefined;
176
+ }
177
+ case "boolean": return typeof v === "boolean" ? v : v === "true" || v === 1 ? true : v === "false" || v === 0 ? false : undefined;
178
+ case "select": {
179
+ const s = String(v);
180
+ return !opts.options || opts.options.includes(s) ? s : undefined;
181
+ }
182
+ case "image": {
183
+ const url = typeof v === "string" ? v : typeof v === "object" ? v.url : undefined;
184
+ if (typeof url !== "string" || !/^(https?:\/\/|\/(?!\/))/i.test(url))
185
+ return undefined;
186
+ const alt = typeof v === "object" ? v.alt : undefined;
187
+ return { url, alt: typeof alt === "string" ? alt : "" };
188
+ }
189
+ case "link": {
190
+ const href = typeof v === "string" ? v : typeof v === "object" ? v.href : undefined;
191
+ return typeof href === "string" && SAFE_HREF.test(href) ? { kind: "url", href } : undefined;
192
+ }
193
+ default: return undefined;
194
+ }
195
+ }
196
+ /** The list a Repeat iterates (props.source path); non-arrays → []. Honors props.limit. */
197
+ export function repeatItems(node, scope) {
198
+ const src = typeof node.props.source === "string" ? node.props.source : "";
199
+ const list = src ? readPath(scope, src) : undefined;
200
+ if (!Array.isArray(list))
201
+ return [];
202
+ let out = list;
203
+ // Filter and sort the items (ADR-043), same filter syntax as data tables, fields relative to the item.
204
+ if (typeof node.props.filter === "string" && node.props.filter.trim()) {
205
+ let f;
206
+ try {
207
+ f = parseFilter(node.props.filter);
208
+ }
209
+ catch {
210
+ f = undefined;
211
+ }
212
+ if (f)
213
+ out = out.filter((x) => matchFilter(x, f));
214
+ }
215
+ const sortBy = typeof node.props.sortBy === "string" ? node.props.sortBy.trim() : "";
216
+ if (sortBy) {
217
+ const dir = node.props.sortDir === "desc" ? -1 : 1;
218
+ const key = (x) => readPath({ item: x }, `item.${sortBy}`);
219
+ out = [...out].sort((a, b) => {
220
+ const x = key(a), y = key(b);
221
+ if (x === undefined || x === null)
222
+ return 1;
223
+ if (y === undefined || y === null)
224
+ return -1;
225
+ return (typeof x === "number" && typeof y === "number" ? x - y : String(x).localeCompare(String(y))) * dir;
226
+ });
227
+ }
228
+ const limit = Number(node.props.limit);
229
+ return Number.isFinite(limit) && limit > 0 ? out.slice(0, limit) : out;
230
+ }
231
+ /** Names of data inputs a set of nodes reads (first path segment, excluding item/index). */
232
+ export function usedDataInputs(nodes) {
233
+ const names = new Set();
234
+ const add = (p) => { if (typeof p === "string" && p) {
235
+ const root = p.split(".")[0];
236
+ if (root !== "item" && root !== "index")
237
+ names.add(root);
238
+ } };
239
+ for (const n of walkNodes(nodes)) {
240
+ for (const b of Object.values(n.bind ?? {}))
241
+ add(b.path);
242
+ if (n.type === REPEAT_TYPE)
243
+ add(n.props.source);
244
+ }
245
+ return [...names].sort();
246
+ }
247
+ export function dataPaths(inputs, itemFields) {
248
+ const out = [];
249
+ const walk = (prefix, fields, depth) => {
250
+ for (const f of fields ?? []) {
251
+ const p = `${prefix}.${f.name}`;
252
+ if (f.localized) {
253
+ out.push({ path: `${p}.{locale}`, type: f.type, list: false, localized: true });
254
+ continue;
255
+ }
256
+ out.push({ path: p, type: f.type, list: f.type === "list" });
257
+ if (f.type === "object" && depth < 3)
258
+ walk(p, f.fields, depth + 1);
259
+ }
260
+ };
261
+ if (itemFields) {
262
+ out.push({ path: "index", type: "number", list: false });
263
+ walk("item", itemFields, 0);
264
+ }
265
+ for (const d of inputs) {
266
+ if (d.shape === "list") {
267
+ out.push({ path: d.name, type: "list", list: true });
268
+ out.push({ path: `${d.name}.length`, type: "number", list: false });
269
+ walk(`${d.name}.0`, d.fields, 0);
270
+ }
271
+ else
272
+ walk(d.name, d.fields, 0);
273
+ }
274
+ return out;
275
+ }
276
+ /** Item fields of a list path (to type `item.*` inside a Repeat over it). */
277
+ export function listItemFields(inputs, path, outerItem) {
278
+ const [root, ...rest] = path.split(".");
279
+ let fields;
280
+ let isList = false;
281
+ if (root === "item") {
282
+ fields = outerItem;
283
+ }
284
+ else {
285
+ const d = inputs.find((x) => x.name === root);
286
+ if (!d)
287
+ return undefined;
288
+ fields = d.fields;
289
+ isList = d.shape === "list";
290
+ if (!rest.length)
291
+ return isList ? [...fields] : undefined;
292
+ }
293
+ for (let i = 0; i < rest.length; i++) {
294
+ const seg = rest[i];
295
+ if (/^\d+$/.test(seg))
296
+ continue;
297
+ const f = fields?.find((x) => x.name === seg);
298
+ if (!f)
299
+ return undefined;
300
+ if (i === rest.length - 1)
301
+ return f.type === "list" ? f.fields ?? [] : undefined;
302
+ fields = f.fields;
303
+ }
304
+ return undefined;
305
+ }
306
+ /** Can a data field of this type feed a definition field of that type? (pickers) */
307
+ export function bindingFits(fieldType, data) {
308
+ if (data === "list" || data === "object")
309
+ return false;
310
+ switch (fieldType) {
311
+ case "image": return data === "image" || data === "text" || data === "link";
312
+ case "link": return data === "link" || data === "text";
313
+ case "number": return data === "number";
314
+ case "boolean": return data === "boolean";
315
+ default: return true; // text, textarea, select
316
+ }
317
+ }
318
+ /** Example data for a set of fields (editor preview when the user defines fields by hand). */
319
+ export function sampleFromFields(fields, locales = ["vi"], depth = 0) {
320
+ const one = (f) => {
321
+ if (f.localized)
322
+ return Object.fromEntries(locales.map((l) => [l, `${f.label ?? f.name} (${l})`]));
323
+ switch (f.type) {
324
+ case "number": return 100;
325
+ case "boolean": return true;
326
+ case "image": return "https://images.unsplash.com/photo-1509042239860-f550ce710b93?w=800";
327
+ case "link": return "https://example.com";
328
+ case "date": return "2026-12-01";
329
+ case "list": return depth < 3 ? [sampleFromFields(f.fields ?? [], locales, depth + 1), sampleFromFields(f.fields ?? [], locales, depth + 1)] : [];
330
+ case "object": return depth < 3 ? sampleFromFields(f.fields ?? [], locales, depth + 1) : {};
331
+ default: return f.label ?? f.name;
332
+ }
333
+ };
334
+ return Object.fromEntries(fields.map((f) => [f.name, one(f)]));
335
+ }
336
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { z } from "zod";
2
+ export declare const FontRoleSchema: z.ZodObject<{
3
+ familyId: z.ZodNullable<z.ZodString>;
4
+ google: z.ZodOptional<z.ZodString>;
5
+ fallback: z.ZodString;
6
+ }, z.core.$strict>;
7
+ export declare const ThemeSchema: z.ZodObject<{
8
+ label: z.ZodString;
9
+ color: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
10
+ }, z.core.$strict>;
11
+ export declare const DesignSystemSchema: z.ZodObject<{
12
+ schemaVersion: z.ZodLiteral<1>;
13
+ global: z.ZodObject<{
14
+ palette: z.ZodRecord<z.ZodString, z.ZodString>;
15
+ spacing: z.ZodRecord<z.ZodString, z.ZodString>;
16
+ radius: z.ZodRecord<z.ZodString, z.ZodString>;
17
+ fontSize: z.ZodRecord<z.ZodString, z.ZodString>;
18
+ }, z.core.$strict>;
19
+ semantic: z.ZodObject<{
20
+ color: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
21
+ }, z.core.$strict>;
22
+ fonts: z.ZodObject<{
23
+ heading: z.ZodObject<{
24
+ familyId: z.ZodNullable<z.ZodString>;
25
+ google: z.ZodOptional<z.ZodString>;
26
+ fallback: z.ZodString;
27
+ }, z.core.$strict>;
28
+ body: z.ZodObject<{
29
+ familyId: z.ZodNullable<z.ZodString>;
30
+ google: z.ZodOptional<z.ZodString>;
31
+ fallback: z.ZodString;
32
+ }, z.core.$strict>;
33
+ }, z.core.$strict>;
34
+ themes: z.ZodRecord<z.ZodString, z.ZodObject<{
35
+ label: z.ZodString;
36
+ color: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
37
+ }, z.core.$strict>>;
38
+ icons: z.ZodOptional<z.ZodObject<{
39
+ set: z.ZodLiteral<"lucide">;
40
+ strokeWidth: z.ZodNumber;
41
+ }, z.core.$strict>>;
42
+ }, z.core.$strict>;
43
+ export type DesignSystem = z.infer<typeof DesignSystemSchema>;
44
+ /** Project override: replaces individual tokens of the workspace design system. */
45
+ export declare const DesignOverrideSchema: z.ZodObject<{
46
+ schemaVersion: z.ZodLiteral<1>;
47
+ global: z.ZodOptional<z.ZodObject<{
48
+ palette: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
49
+ spacing: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
50
+ radius: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
51
+ fontSize: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
52
+ }, z.core.$strict>>;
53
+ semantic: z.ZodOptional<z.ZodObject<{
54
+ color: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodString]>>;
55
+ }, z.core.$strict>>;
56
+ fonts: z.ZodOptional<z.ZodObject<{
57
+ heading: z.ZodOptional<z.ZodObject<{
58
+ familyId: z.ZodNullable<z.ZodString>;
59
+ google: z.ZodOptional<z.ZodString>;
60
+ fallback: z.ZodString;
61
+ }, z.core.$strict>>;
62
+ body: z.ZodOptional<z.ZodObject<{
63
+ familyId: z.ZodNullable<z.ZodString>;
64
+ google: z.ZodOptional<z.ZodString>;
65
+ fallback: z.ZodString;
66
+ }, z.core.$strict>>;
67
+ }, z.core.$strict>>;
68
+ designSystemId: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strict>;
70
+ export type DesignOverride = z.infer<typeof DesignOverrideSchema>;
71
+ export declare const FontFaceSchema: z.ZodObject<{
72
+ weight: z.ZodNumber;
73
+ style: z.ZodEnum<{
74
+ italic: "italic";
75
+ normal: "normal";
76
+ }>;
77
+ url: z.ZodString;
78
+ format: z.ZodEnum<{
79
+ opentype: "opentype";
80
+ truetype: "truetype";
81
+ woff: "woff";
82
+ woff2: "woff2";
83
+ }>;
84
+ unicodeRange: z.ZodOptional<z.ZodString>;
85
+ }, z.core.$strict>;
86
+ export type FontFace = z.infer<typeof FontFaceSchema>;
87
+ export type FontFamilyRef = {
88
+ id: string;
89
+ family: string;
90
+ faces: FontFace[];
91
+ };
92
+ /** What a release pins and the SDK renders: flat CSS variables per theme + @font-face rules. */
93
+ export declare const DesignSnapshotSchema: z.ZodObject<{
94
+ vars: z.ZodRecord<z.ZodString, z.ZodString>;
95
+ themes: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>;
96
+ fonts: z.ZodArray<z.ZodObject<{
97
+ family: z.ZodString;
98
+ faces: z.ZodArray<z.ZodObject<{
99
+ weight: z.ZodNumber;
100
+ style: z.ZodEnum<{
101
+ italic: "italic";
102
+ normal: "normal";
103
+ }>;
104
+ url: z.ZodString;
105
+ format: z.ZodEnum<{
106
+ opentype: "opentype";
107
+ truetype: "truetype";
108
+ woff: "woff";
109
+ woff2: "woff2";
110
+ }>;
111
+ unicodeRange: z.ZodOptional<z.ZodString>;
112
+ }, z.core.$strict>>;
113
+ }, z.core.$strip>>;
114
+ }, z.core.$strip>;
115
+ export type DesignSnapshot = z.infer<typeof DesignSnapshotSchema>;
116
+ export declare function mergeDesign(base: DesignSystem, o: DesignOverride | null | undefined): DesignSystem;
117
+ /**
118
+ * Design system → snapshot. Variable names stay compatible with the built-in library
119
+ * (--vp-color-*, --vp-spacing-*, --vp-radius-*, --vp-font-size-*), plus --vp-palette-* and
120
+ * --vp-font-heading / --vp-font-body.
121
+ */
122
+ export declare function resolveDesign(ds: DesignSystem, families: FontFamilyRef[]): DesignSnapshot;
123
+ /** Values an editor may offer for a token field (blueprint 31 §4 token picker). */
124
+ export declare function tokenOptions(ds: DesignSystem): Record<"spacing" | "radius" | "color" | "font.size", string[]>;
125
+ /** Starting point for a new workspace; mirrors the previous hard-coded tokens. */
126
+ export declare const DEFAULT_DESIGN_SYSTEM: DesignSystem;
127
+ /**
128
+ * shadcn/ui "neutral" (Tailwind 4, oklch) — the same values the Studio uses. Includes shadcn's own
129
+ * semantic names plus the aliases the built-in library reads (text, muted, surface, on-primary, accent).
130
+ */
131
+ export declare const SHADCN_DESIGN_SYSTEM: DesignSystem;
132
+ /** Read-only starting points; users clone one into an editable workspace design system. */
133
+ export declare const DESIGN_PRESETS: {
134
+ id: string;
135
+ name: string;
136
+ description: string;
137
+ system: DesignSystem;
138
+ }[];
139
+ //# sourceMappingURL=design.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.d.ts","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,cAAc;;;;kBAMhB,CAAC;AAEZ,eAAO,MAAM,WAAW;;;kBAGb,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0B7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,mFAAmF;AACnF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;kBAUtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;kBAMhB,CAAC;AACZ,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC;AAE9E,gGAAgG;AAChG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;iBAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAYlG;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,cAAc,CAoBzF;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,EAAE,MAAM,EAAE,CAAC,CAO7G;AAED,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,YAwBnC,CAAC;AAKF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAiDlC,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,EAGnG,CAAC"}