@visual-platform/contracts 0.0.0-stage → 0.2.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/dist/classes.d.ts +11 -0
- package/dist/classes.d.ts.map +1 -0
- package/dist/classes.js +34 -0
- package/dist/classes.js.map +1 -0
- package/dist/component.d.ts +135 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +176 -0
- package/dist/component.js.map +1 -0
- package/dist/data.d.ts +160 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +363 -0
- package/dist/data.js.map +1 -0
- package/dist/design.d.ts +139 -0
- package/dist/design.d.ts.map +1 -0
- package/dist/design.js +226 -0
- package/dist/design.js.map +1 -0
- package/dist/events.d.ts +36 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +46 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/locales.d.ts +37 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +36 -0
- package/dist/locales.js.map +1 -0
- package/dist/page-document.d.ts +203 -0
- package/dist/page-document.d.ts.map +1 -0
- package/dist/page-document.js +73 -0
- package/dist/page-document.js.map +1 -0
- package/dist/published.d.ts +353 -0
- package/dist/published.d.ts.map +1 -0
- package/dist/published.js +66 -0
- package/dist/published.js.map +1 -0
- package/dist/references.d.ts +51 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +35 -0
- package/dist/references.js.map +1 -0
- package/dist/responsive.d.ts +19 -0
- package/dist/responsive.d.ts.map +1 -0
- package/dist/responsive.js +18 -0
- package/dist/responsive.js.map +1 -0
- package/dist/section.d.ts +33 -0
- package/dist/section.d.ts.map +1 -0
- package/dist/section.js +53 -0
- package/dist/section.js.map +1 -0
- package/dist/seo.d.ts +98 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +71 -0
- package/dist/seo.js.map +1 -0
- package/dist/tables.d.ts +134 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +438 -0
- package/dist/tables.js.map +1 -0
- package/package.json +31 -3
- package/README.md +0 -3
package/dist/design.js
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Design system (blueprint 25, ADR-026): global tokens (raw values) → semantic tokens (meaning,
|
|
4
|
+
* referencing globals) → themes (semantic overrides) + font roles. Pure data; CSS is produced by
|
|
5
|
+
* runtime-core from the resolved snapshot.
|
|
6
|
+
*/
|
|
7
|
+
const KEY = z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "use lowercase-kebab keys, e.g. blue-600");
|
|
8
|
+
/** Hex or oklch() (shadcn/Tailwind 4 use oklch): #2563eb · oklch(0.205 0 0) · oklch(1 0 0 / 10%). */
|
|
9
|
+
const HEX = z.string().regex(/^(?:#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|oklch\((?:\d*\.)?\d+%? (?:\d*\.)?\d+ (?:\d*\.)?\d+(?: \/ (?:\d*\.)?\d+%?)?\))$/, "use a hex colour (#2563eb) or oklch(L C H)");
|
|
10
|
+
/** CSS length: 0, 16px, 1.5rem, 50%, clamp(2rem, 5vw, 3.5rem). No other functions or characters. */
|
|
11
|
+
const LENGTH = z.string().regex(/^(?:0|-?\d+(?:\.\d+)?(?:px|rem|em|%|vw|vh)|clamp\([0-9.]+(?:px|rem|em|vw|vh)?, ?[0-9.]+(?:px|rem|em|vw|vh|%), ?[0-9.]+(?:px|rem|em|vw|vh)\))$/, "use a CSS length, e.g. 16px or 1rem");
|
|
12
|
+
/** A colour value: a palette reference `{palette.blue-600}` or a hex colour. */
|
|
13
|
+
const COLOR_VALUE = z.union([z.string().regex(/^\{palette\.[a-z0-9]+(?:-[a-z0-9]+)*\}$/), HEX]);
|
|
14
|
+
const FAMILY_NAME = z.string().regex(/^[A-Za-z0-9 ]{1,60}$/);
|
|
15
|
+
const FALLBACK = z.string().regex(/^[A-Za-z0-9 ,"'-]{1,120}$/);
|
|
16
|
+
export const FontRoleSchema = z.object({
|
|
17
|
+
/** font_families.id in the workspace library; null → system font stack only. */
|
|
18
|
+
familyId: z.string().nullable(),
|
|
19
|
+
/** Wanted Google font (presets): the server downloads it into the library and sets familyId. */
|
|
20
|
+
google: FAMILY_NAME.optional(),
|
|
21
|
+
fallback: FALLBACK,
|
|
22
|
+
}).strict();
|
|
23
|
+
export const ThemeSchema = z.object({
|
|
24
|
+
label: z.string().min(1).max(40),
|
|
25
|
+
color: z.record(KEY, COLOR_VALUE),
|
|
26
|
+
}).strict();
|
|
27
|
+
export const DesignSystemSchema = z.object({
|
|
28
|
+
schemaVersion: z.literal(1),
|
|
29
|
+
global: z.object({
|
|
30
|
+
palette: z.record(KEY, HEX),
|
|
31
|
+
spacing: z.record(KEY, LENGTH),
|
|
32
|
+
radius: z.record(KEY, LENGTH),
|
|
33
|
+
fontSize: z.record(KEY, LENGTH),
|
|
34
|
+
}).strict(),
|
|
35
|
+
semantic: z.object({ color: z.record(KEY, COLOR_VALUE) }).strict(),
|
|
36
|
+
fonts: z.object({ heading: FontRoleSchema, body: FontRoleSchema }).strict(),
|
|
37
|
+
/** Extra themes override semantic colours; the base semantic set is the "default" theme. */
|
|
38
|
+
themes: z.record(KEY, ThemeSchema),
|
|
39
|
+
/** Icon set for icon fields (Lucide = shadcn's icon set) and its default stroke. */
|
|
40
|
+
icons: z.object({ set: z.literal("lucide"), strokeWidth: z.number().min(0.5).max(3) }).strict().optional(),
|
|
41
|
+
}).strict().superRefine((ds, ctx) => {
|
|
42
|
+
const check = (v, path) => {
|
|
43
|
+
const ref = /^\{palette\.(.+)\}$/.exec(v)?.[1];
|
|
44
|
+
if (ref && !(ref in ds.global.palette))
|
|
45
|
+
ctx.addIssue({ code: "custom", path, message: `unknown palette colour "${ref}"` });
|
|
46
|
+
};
|
|
47
|
+
for (const [k, v] of Object.entries(ds.semantic.color))
|
|
48
|
+
check(v, ["semantic", "color", k]);
|
|
49
|
+
for (const [t, theme] of Object.entries(ds.themes)) {
|
|
50
|
+
for (const [k, v] of Object.entries(theme.color)) {
|
|
51
|
+
check(v, ["themes", t, "color", k]);
|
|
52
|
+
if (!(k in ds.semantic.color))
|
|
53
|
+
ctx.addIssue({ code: "custom", path: ["themes", t, "color", k], message: `theme overrides unknown semantic colour "${k}"` });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
/** Project override: replaces individual tokens of the workspace design system. */
|
|
58
|
+
export const DesignOverrideSchema = z.object({
|
|
59
|
+
schemaVersion: z.literal(1),
|
|
60
|
+
global: z.object({
|
|
61
|
+
palette: z.record(KEY, HEX).optional(), spacing: z.record(KEY, LENGTH).optional(),
|
|
62
|
+
radius: z.record(KEY, LENGTH).optional(), fontSize: z.record(KEY, LENGTH).optional(),
|
|
63
|
+
}).strict().optional(),
|
|
64
|
+
semantic: z.object({ color: z.record(KEY, COLOR_VALUE) }).strict().optional(),
|
|
65
|
+
fonts: z.object({ heading: FontRoleSchema.optional(), body: FontRoleSchema.optional() }).strict().optional(),
|
|
66
|
+
/** Which design system the project uses: a workspace design system id or "preset:<id>". */
|
|
67
|
+
designSystemId: z.string().min(1).max(80).optional(),
|
|
68
|
+
}).strict();
|
|
69
|
+
export const FontFaceSchema = z.object({
|
|
70
|
+
weight: z.number().int().min(100).max(900),
|
|
71
|
+
style: z.enum(["normal", "italic"]),
|
|
72
|
+
url: z.string().regex(/^https:\/\/[^\s"'()\\]+$/),
|
|
73
|
+
format: z.enum(["woff2", "woff", "truetype", "opentype"]),
|
|
74
|
+
unicodeRange: z.string().regex(/^[U+0-9A-Fa-f?, -]+$/).optional(),
|
|
75
|
+
}).strict();
|
|
76
|
+
/** What a release pins and the SDK renders: flat CSS variables per theme + @font-face rules. */
|
|
77
|
+
export const DesignSnapshotSchema = z.object({
|
|
78
|
+
vars: z.record(z.string(), z.string()),
|
|
79
|
+
themes: z.record(z.string(), z.record(z.string(), z.string())),
|
|
80
|
+
fonts: z.array(z.object({ family: FAMILY_NAME, faces: z.array(FontFaceSchema) })),
|
|
81
|
+
});
|
|
82
|
+
export function mergeDesign(base, o) {
|
|
83
|
+
if (!o)
|
|
84
|
+
return base;
|
|
85
|
+
return {
|
|
86
|
+
...base,
|
|
87
|
+
global: {
|
|
88
|
+
palette: { ...base.global.palette, ...o.global?.palette }, spacing: { ...base.global.spacing, ...o.global?.spacing },
|
|
89
|
+
radius: { ...base.global.radius, ...o.global?.radius }, fontSize: { ...base.global.fontSize, ...o.global?.fontSize },
|
|
90
|
+
},
|
|
91
|
+
semantic: { color: { ...base.semantic.color, ...o.semantic?.color } },
|
|
92
|
+
...(base.icons ? { icons: base.icons } : {}),
|
|
93
|
+
fonts: { heading: o.fonts?.heading ?? base.fonts.heading, body: o.fonts?.body ?? base.fonts.body },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const colorCss = (v) => v.startsWith("{") ? `var(--vp-palette-${v.slice(9, -1)})` : v;
|
|
97
|
+
const quote = (f) => `"${f}"`;
|
|
98
|
+
/**
|
|
99
|
+
* Design system → snapshot. Variable names stay compatible with the built-in library
|
|
100
|
+
* (--vp-color-*, --vp-spacing-*, --vp-radius-*, --vp-font-size-*), plus --vp-palette-* and
|
|
101
|
+
* --vp-font-heading / --vp-font-body.
|
|
102
|
+
*/
|
|
103
|
+
export function resolveDesign(ds, families) {
|
|
104
|
+
const byId = new Map(families.map((f) => [f.id, f]));
|
|
105
|
+
const vars = {};
|
|
106
|
+
for (const [k, v] of Object.entries(ds.global.palette))
|
|
107
|
+
vars[`palette-${k}`] = v;
|
|
108
|
+
for (const [k, v] of Object.entries(ds.global.spacing))
|
|
109
|
+
vars[`spacing-${k}`] = v;
|
|
110
|
+
for (const [k, v] of Object.entries(ds.global.radius))
|
|
111
|
+
vars[`radius-${k}`] = v;
|
|
112
|
+
for (const [k, v] of Object.entries(ds.global.fontSize))
|
|
113
|
+
vars[`font-size-${k}`] = v;
|
|
114
|
+
for (const [k, v] of Object.entries(ds.semantic.color))
|
|
115
|
+
vars[`color-${k}`] = colorCss(v);
|
|
116
|
+
const used = [];
|
|
117
|
+
for (const role of ["heading", "body"]) {
|
|
118
|
+
const fam = ds.fonts[role].familyId ? byId.get(ds.fonts[role].familyId) : undefined;
|
|
119
|
+
if (fam && !used.includes(fam))
|
|
120
|
+
used.push(fam);
|
|
121
|
+
vars[`font-${role}`] = [fam ? quote(fam.family) : null, ds.fonts[role].fallback].filter(Boolean).join(", ");
|
|
122
|
+
}
|
|
123
|
+
vars["icon-stroke"] = String(ds.icons?.strokeWidth ?? 2);
|
|
124
|
+
const themes = {};
|
|
125
|
+
for (const [name, t] of Object.entries(ds.themes)) {
|
|
126
|
+
themes[name] = Object.fromEntries(Object.entries(t.color).map(([k, v]) => [`color-${k}`, colorCss(v)]));
|
|
127
|
+
}
|
|
128
|
+
return { vars, themes, fonts: used.map((f) => ({ family: f.family, faces: f.faces })) };
|
|
129
|
+
}
|
|
130
|
+
/** Values an editor may offer for a token field (blueprint 31 §4 token picker). */
|
|
131
|
+
export function tokenOptions(ds) {
|
|
132
|
+
return {
|
|
133
|
+
spacing: Object.keys(ds.global.spacing).map((k) => `spacing.${k}`),
|
|
134
|
+
radius: Object.keys(ds.global.radius).map((k) => `radius.${k}`),
|
|
135
|
+
"font.size": Object.keys(ds.global.fontSize).map((k) => `font.size.${k}`),
|
|
136
|
+
color: [...Object.keys(ds.semantic.color).map((k) => `semantic.color.${k}`), ...Object.keys(ds.global.palette).map((k) => `palette.${k}`)],
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/** Starting point for a new workspace; mirrors the previous hard-coded tokens. */
|
|
140
|
+
export const DEFAULT_DESIGN_SYSTEM = {
|
|
141
|
+
schemaVersion: 1,
|
|
142
|
+
global: {
|
|
143
|
+
palette: {
|
|
144
|
+
"white": "#ffffff", "gray-50": "#f9fafb", "gray-100": "#f3f4f6", "gray-300": "#d1d5db", "gray-600": "#4b5563", "gray-900": "#111827",
|
|
145
|
+
"blue-600": "#2563eb", "blue-700": "#1d4ed8", "orange-600": "#ea580c", "green-600": "#16a34a", "red-600": "#dc2626",
|
|
146
|
+
},
|
|
147
|
+
spacing: { "0": "0", "1": "4px", "2": "8px", "3": "12px", "4": "16px", "6": "24px", "8": "32px", "12": "48px", "16": "64px", "24": "96px" },
|
|
148
|
+
radius: { sm: "6px", md: "12px", lg: "20px" },
|
|
149
|
+
fontSize: { sm: "14px", md: "16px", lg: "20px", xl: "28px", display: "clamp(2rem, 5vw, 3.5rem)" },
|
|
150
|
+
},
|
|
151
|
+
semantic: {
|
|
152
|
+
color: {
|
|
153
|
+
primary: "{palette.blue-700}", "on-primary": "{palette.white}", text: "{palette.gray-900}", muted: "{palette.gray-600}",
|
|
154
|
+
background: "{palette.white}", surface: "{palette.gray-100}", accent: "{palette.orange-600}",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
fonts: {
|
|
158
|
+
heading: { familyId: null, fallback: "system-ui, -apple-system, Segoe UI, Roboto, sans-serif" },
|
|
159
|
+
body: { familyId: null, fallback: "system-ui, -apple-system, Segoe UI, Roboto, sans-serif" },
|
|
160
|
+
},
|
|
161
|
+
themes: {
|
|
162
|
+
dark: { label: "Dark", color: { text: "{palette.gray-50}", muted: "{palette.gray-300}", background: "{palette.gray-900}", surface: "#1f2937" } },
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
const ok = (v) => `oklch(${v})`;
|
|
166
|
+
const SHADCN_FALLBACK = "ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif";
|
|
167
|
+
/**
|
|
168
|
+
* shadcn/ui "neutral" (Tailwind 4, oklch) — the same values the Studio uses. Includes shadcn's own
|
|
169
|
+
* semantic names plus the aliases the built-in library reads (text, muted, surface, on-primary, accent).
|
|
170
|
+
*/
|
|
171
|
+
export const SHADCN_DESIGN_SYSTEM = {
|
|
172
|
+
schemaVersion: 1,
|
|
173
|
+
global: {
|
|
174
|
+
palette: {
|
|
175
|
+
"white": ok("1 0 0"), "neutral-50": ok("0.985 0 0"), "neutral-100": ok("0.97 0 0"), "neutral-200": ok("0.922 0 0"),
|
|
176
|
+
"neutral-300": ok("0.87 0 0"), "neutral-400": ok("0.708 0 0"), "neutral-500": ok("0.556 0 0"), "neutral-600": ok("0.439 0 0"),
|
|
177
|
+
"neutral-700": ok("0.371 0 0"), "neutral-800": ok("0.269 0 0"), "neutral-900": ok("0.205 0 0"), "neutral-950": ok("0.145 0 0"),
|
|
178
|
+
"red-600": ok("0.577 0.245 27.325"), "red-400": ok("0.704 0.191 22.216"),
|
|
179
|
+
"white-10": ok("1 0 0 / 10%"), "white-15": ok("1 0 0 / 15%"),
|
|
180
|
+
},
|
|
181
|
+
spacing: {
|
|
182
|
+
"0": "0", "1": "0.25rem", "2": "0.5rem", "3": "0.75rem", "4": "1rem", "5": "1.25rem", "6": "1.5rem", "8": "2rem",
|
|
183
|
+
"10": "2.5rem", "12": "3rem", "16": "4rem", "20": "5rem", "24": "6rem",
|
|
184
|
+
},
|
|
185
|
+
radius: { sm: "6px", md: "8px", lg: "10px", xl: "14px" },
|
|
186
|
+
fontSize: { xs: "0.75rem", sm: "0.875rem", md: "1rem", lg: "1.125rem", xl: "1.5rem", "2xl": "1.875rem", display: "clamp(2.25rem, 5vw, 3.75rem)" },
|
|
187
|
+
},
|
|
188
|
+
semantic: {
|
|
189
|
+
color: {
|
|
190
|
+
background: "{palette.white}", foreground: "{palette.neutral-950}",
|
|
191
|
+
card: "{palette.white}", "card-foreground": "{palette.neutral-950}",
|
|
192
|
+
popover: "{palette.white}", "popover-foreground": "{palette.neutral-950}",
|
|
193
|
+
primary: "{palette.neutral-900}", "primary-foreground": "{palette.neutral-50}",
|
|
194
|
+
secondary: "{palette.neutral-100}", "secondary-foreground": "{palette.neutral-900}",
|
|
195
|
+
"muted-foreground": "{palette.neutral-500}", "accent-foreground": "{palette.neutral-900}",
|
|
196
|
+
destructive: "{palette.red-600}", border: "{palette.neutral-200}", input: "{palette.neutral-200}", ring: "{palette.neutral-400}",
|
|
197
|
+
"chart-1": "{palette.neutral-300}", "chart-2": "{palette.neutral-500}", "chart-3": "{palette.neutral-600}", "chart-4": "{palette.neutral-700}", "chart-5": "{palette.neutral-800}",
|
|
198
|
+
// Aliases read by the built-in components.
|
|
199
|
+
text: "{palette.neutral-950}", muted: "{palette.neutral-500}", surface: "{palette.neutral-100}",
|
|
200
|
+
"on-primary": "{palette.neutral-50}", accent: "{palette.neutral-900}",
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
fonts: {
|
|
204
|
+
heading: { familyId: null, google: "Inter", fallback: SHADCN_FALLBACK },
|
|
205
|
+
body: { familyId: null, google: "Inter", fallback: SHADCN_FALLBACK },
|
|
206
|
+
},
|
|
207
|
+
themes: {
|
|
208
|
+
dark: {
|
|
209
|
+
label: "Dark",
|
|
210
|
+
color: {
|
|
211
|
+
background: "{palette.neutral-950}", foreground: "{palette.neutral-50}", card: "{palette.neutral-900}", "card-foreground": "{palette.neutral-50}",
|
|
212
|
+
popover: "{palette.neutral-900}", "popover-foreground": "{palette.neutral-50}", primary: "{palette.neutral-200}", "primary-foreground": "{palette.neutral-900}",
|
|
213
|
+
secondary: "{palette.neutral-800}", "secondary-foreground": "{palette.neutral-50}", "muted-foreground": "{palette.neutral-400}",
|
|
214
|
+
"accent-foreground": "{palette.neutral-50}", destructive: "{palette.red-400}", border: "{palette.white-10}", input: "{palette.white-15}", ring: "{palette.neutral-500}",
|
|
215
|
+
text: "{palette.neutral-50}", muted: "{palette.neutral-400}", surface: "{palette.neutral-800}", "on-primary": "{palette.neutral-900}", accent: "{palette.neutral-200}",
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
icons: { set: "lucide", strokeWidth: 2 },
|
|
220
|
+
};
|
|
221
|
+
/** Read-only starting points; users clone one into an editable workspace design system. */
|
|
222
|
+
export const DESIGN_PRESETS = [
|
|
223
|
+
{ id: "shadcn", name: "shadcn/ui (Neutral)", description: "shadcn/ui tokens (oklch), light + dark, Inter, Lucide icons", system: SHADCN_DESIGN_SYSTEM },
|
|
224
|
+
{ id: "visual-default", name: "Visual Platform default", description: "The original built-in look (blue primary, orange accent)", system: DEFAULT_DESIGN_SYSTEM },
|
|
225
|
+
];
|
|
226
|
+
//# sourceMappingURL=design.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design.js","sourceRoot":"","sources":["../src/design.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ComponentNode } from "./page-document.js";
|
|
3
|
+
/**
|
|
4
|
+
* Event props (ADR-032). An element type declares which events it can emit; a node binds each to an
|
|
5
|
+
* event name chosen in Studio (e.g. Form submit → "onSubscribe"). The app passes handlers by name.
|
|
6
|
+
*/
|
|
7
|
+
export declare const EVENT_KINDS: readonly ["click", "change", "blur", "enter", "submit", "reset", "toggle"];
|
|
8
|
+
export type EventKind = (typeof EVENT_KINDS)[number];
|
|
9
|
+
/** onSubscribe, onBuyNow… — a valid JS identifier starting with "on" + capital letter. */
|
|
10
|
+
export declare const EventNameSchema: z.ZodString;
|
|
11
|
+
export declare const EventBindingsSchema: z.ZodRecord<z.ZodEnum<{
|
|
12
|
+
blur: "blur";
|
|
13
|
+
change: "change";
|
|
14
|
+
click: "click";
|
|
15
|
+
enter: "enter";
|
|
16
|
+
reset: "reset";
|
|
17
|
+
submit: "submit";
|
|
18
|
+
toggle: "toggle";
|
|
19
|
+
}> & z.core.$partial, z.ZodString>;
|
|
20
|
+
export type EventBindings = z.infer<typeof EventBindingsSchema>;
|
|
21
|
+
export type EventUse = {
|
|
22
|
+
name: string;
|
|
23
|
+
kind: EventKind;
|
|
24
|
+
nodeId: string;
|
|
25
|
+
type: string;
|
|
26
|
+
};
|
|
27
|
+
/** Every event binding used in these documents (for Studio lists and `vp types pull`). */
|
|
28
|
+
export declare function collectEvents(documents: {
|
|
29
|
+
nodes: readonly ComponentNode[];
|
|
30
|
+
}[]): EventUse[];
|
|
31
|
+
/**
|
|
32
|
+
* TypeScript type of `e.value` per element and event (ADR-040), for `vp types pull`. Unknown
|
|
33
|
+
* (customer) elements → "unknown".
|
|
34
|
+
*/
|
|
35
|
+
export declare function eventValueType(elementType: string, kind: string): string;
|
|
36
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,WAAW,YAAI,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AACtG,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,0FAA0F;AAC1F,eAAO,MAAM,eAAe,aAAsF,CAAC;AACnH,eAAO,MAAM,mBAAmB;;;;;;;;kCAAwD,CAAC;AACzF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,SAAS,EAAE;IAAE,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,EAAE,GAAG,QAAQ,EAAE,CAM1F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYxE"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { walkNodes } from "./page-document.js";
|
|
3
|
+
/**
|
|
4
|
+
* Event props (ADR-032). An element type declares which events it can emit; a node binds each to an
|
|
5
|
+
* event name chosen in Studio (e.g. Form submit → "onSubscribe"). The app passes handlers by name.
|
|
6
|
+
*/
|
|
7
|
+
export const EVENT_KINDS = ["click", "change", "blur", "enter", "submit", "reset", "toggle"];
|
|
8
|
+
/** onSubscribe, onBuyNow… — a valid JS identifier starting with "on" + capital letter. */
|
|
9
|
+
export const EventNameSchema = z.string().regex(/^on[A-Z][A-Za-z0-9]{0,47}$/, "event names look like onSubscribe");
|
|
10
|
+
export const EventBindingsSchema = z.partialRecord(z.enum(EVENT_KINDS), EventNameSchema);
|
|
11
|
+
/** Every event binding used in these documents (for Studio lists and `vp types pull`). */
|
|
12
|
+
export function collectEvents(documents) {
|
|
13
|
+
const out = [];
|
|
14
|
+
for (const d of documents)
|
|
15
|
+
for (const n of walkNodes(d.nodes)) {
|
|
16
|
+
for (const [kind, name] of Object.entries(n.events ?? {}))
|
|
17
|
+
if (name)
|
|
18
|
+
out.push({ name, kind: kind, nodeId: n.id, type: n.type });
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* TypeScript type of `e.value` per element and event (ADR-040), for `vp types pull`. Unknown
|
|
24
|
+
* (customer) elements → "unknown".
|
|
25
|
+
*/
|
|
26
|
+
export function eventValueType(elementType, kind) {
|
|
27
|
+
if (kind === "click" || kind === "reset")
|
|
28
|
+
return "undefined";
|
|
29
|
+
if (kind === "submit")
|
|
30
|
+
return "Record<string, unknown>";
|
|
31
|
+
if (kind === "toggle")
|
|
32
|
+
return "boolean";
|
|
33
|
+
if (kind === "change") {
|
|
34
|
+
if (elementType === "Checkbox" || elementType === "Switch")
|
|
35
|
+
return "boolean";
|
|
36
|
+
if (elementType === "Tabs" || elementType === "Slider" || elementType === "Pagination")
|
|
37
|
+
return "number";
|
|
38
|
+
if (["Input", "Textarea", "Select", "RadioGroup", "DatePicker", "Combobox"].includes(elementType))
|
|
39
|
+
return "string";
|
|
40
|
+
return "unknown";
|
|
41
|
+
}
|
|
42
|
+
if (kind === "blur" || kind === "enter")
|
|
43
|
+
return ["Input", "Textarea", "Select", "Combobox"].includes(elementType) ? "string" : "unknown";
|
|
44
|
+
return "unknown";
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAsB,MAAM,oBAAoB,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAGtG,0FAA0F;AAC1F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,EAAE,mCAAmC,CAAC,CAAC;AACnH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;AAKzF,0FAA0F;AAC1F,MAAM,UAAU,aAAa,CAAC,SAAgD;IAC5E,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,SAAS;QAAE,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBAAE,IAAI,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/I,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAY;IAC9D,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAC7D,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,yBAAyB,CAAC;IACxD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,WAAW,KAAK,UAAU,IAAI,WAAW,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC7E,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,YAAY;YAAE,OAAO,QAAQ,CAAC;QACxG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YAAE,OAAO,QAAQ,CAAC;QACnH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACzI,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./responsive.js";
|
|
2
|
+
export * from "./references.js";
|
|
3
|
+
export * from "./seo.js";
|
|
4
|
+
export * from "./page-document.js";
|
|
5
|
+
export * from "./published.js";
|
|
6
|
+
export * from "./section.js";
|
|
7
|
+
export * from "./design.js";
|
|
8
|
+
export * from "./component.js";
|
|
9
|
+
export * from "./classes.js";
|
|
10
|
+
export * from "./events.js";
|
|
11
|
+
export * from "./data.js";
|
|
12
|
+
export * from "./locales.js";
|
|
13
|
+
export * from "./tables.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./responsive.js";
|
|
2
|
+
export * from "./references.js";
|
|
3
|
+
export * from "./seo.js";
|
|
4
|
+
export * from "./page-document.js";
|
|
5
|
+
export * from "./published.js";
|
|
6
|
+
export * from "./section.js";
|
|
7
|
+
export * from "./design.js";
|
|
8
|
+
export * from "./component.js";
|
|
9
|
+
export * from "./classes.js";
|
|
10
|
+
export * from "./events.js";
|
|
11
|
+
export * from "./data.js";
|
|
12
|
+
export * from "./locales.js";
|
|
13
|
+
export * from "./tables.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Languages (ADR-035). A platform-wide catalog (code, names, text direction) seeded with the 8
|
|
4
|
+
* languages of web-chat-smith + vi; projects pick their locales from it. A release pins the
|
|
5
|
+
* direction of each locale so the SDK renders `dir="rtl"` for Arabic etc.
|
|
6
|
+
*/
|
|
7
|
+
export declare const LocaleCodeSchema: z.ZodString;
|
|
8
|
+
export declare const TEXT_DIRECTIONS: readonly ["ltr", "rtl"];
|
|
9
|
+
export type TextDirection = (typeof TEXT_DIRECTIONS)[number];
|
|
10
|
+
export declare const LocaleSchema: z.ZodObject<{
|
|
11
|
+
code: z.ZodString;
|
|
12
|
+
name: z.ZodString;
|
|
13
|
+
nativeName: z.ZodString;
|
|
14
|
+
dir: z.ZodEnum<{
|
|
15
|
+
ltr: "ltr";
|
|
16
|
+
rtl: "rtl";
|
|
17
|
+
}>;
|
|
18
|
+
}, z.core.$strict>;
|
|
19
|
+
export type LocaleInfo = z.infer<typeof LocaleSchema>;
|
|
20
|
+
/** { [code]: { name, nativeName, dir } } pinned by a release. */
|
|
21
|
+
export declare const LocaleMapSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
22
|
+
name: z.ZodString;
|
|
23
|
+
nativeName: z.ZodString;
|
|
24
|
+
dir: z.ZodEnum<{
|
|
25
|
+
ltr: "ltr";
|
|
26
|
+
rtl: "rtl";
|
|
27
|
+
}>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
export type LocaleMap = z.infer<typeof LocaleMapSchema>;
|
|
30
|
+
/** Languages written right-to-left (used to suggest `dir` when adding a locale). */
|
|
31
|
+
export declare const RTL_LANGUAGES: readonly ["ar", "he", "fa", "ur", "ps", "sd", "ug", "yi", "dv", "ckb"];
|
|
32
|
+
export declare const guessDir: (code: string) => TextDirection;
|
|
33
|
+
/** Direction of a locale: release map → base language in the map → known RTL languages. */
|
|
34
|
+
export declare function dirOf(map: LocaleMap | null | undefined, locale: string): TextDirection;
|
|
35
|
+
/** The 8 languages of web-chat-smith (+ vi), also seeded by migration 0011. */
|
|
36
|
+
export declare const BUILTIN_LOCALES: readonly LocaleInfo[];
|
|
37
|
+
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../src/locales.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,aAAyF,CAAC;AACvH,eAAO,MAAM,eAAe,YAAI,KAAK,EAAE,KAAK,CAAU,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,YAAY;;;;;;;;kBAKd,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEtD,iEAAiE;AACjE,eAAO,MAAM,eAAe;;;;;;;kBAA6G,CAAC;AAC1I,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,oFAAoF;AACpF,eAAO,MAAM,aAAa,YAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAU,CAAC;AACpG,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,aAAqG,CAAC;AAE9I,2FAA2F;AAC3F,wBAAgB,KAAK,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAEtF;AAED,+EAA+E;AAC/E,eAAO,MAAM,eAAe,EAAE,SAAS,UAAU,EAUhD,CAAC"}
|
package/dist/locales.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Languages (ADR-035). A platform-wide catalog (code, names, text direction) seeded with the 8
|
|
4
|
+
* languages of web-chat-smith + vi; projects pick their locales from it. A release pins the
|
|
5
|
+
* direction of each locale so the SDK renders `dir="rtl"` for Arabic etc.
|
|
6
|
+
*/
|
|
7
|
+
export const LocaleCodeSchema = z.string().regex(/^[a-z]{2,3}(-[A-Z]{2})?$/, "locale codes look like vi, ar or en-SG");
|
|
8
|
+
export const TEXT_DIRECTIONS = ["ltr", "rtl"];
|
|
9
|
+
export const LocaleSchema = z.object({
|
|
10
|
+
code: LocaleCodeSchema,
|
|
11
|
+
name: z.string().trim().min(1).max(60),
|
|
12
|
+
nativeName: z.string().trim().min(1).max(60),
|
|
13
|
+
dir: z.enum(TEXT_DIRECTIONS),
|
|
14
|
+
}).strict();
|
|
15
|
+
/** { [code]: { name, nativeName, dir } } pinned by a release. */
|
|
16
|
+
export const LocaleMapSchema = z.record(z.string(), z.object({ name: z.string(), nativeName: z.string(), dir: z.enum(TEXT_DIRECTIONS) }));
|
|
17
|
+
/** Languages written right-to-left (used to suggest `dir` when adding a locale). */
|
|
18
|
+
export const RTL_LANGUAGES = ["ar", "he", "fa", "ur", "ps", "sd", "ug", "yi", "dv", "ckb"];
|
|
19
|
+
export const guessDir = (code) => (RTL_LANGUAGES.includes(code.split("-")[0]) ? "rtl" : "ltr");
|
|
20
|
+
/** Direction of a locale: release map → base language in the map → known RTL languages. */
|
|
21
|
+
export function dirOf(map, locale) {
|
|
22
|
+
return map?.[locale]?.dir ?? map?.[locale.split("-")[0]]?.dir ?? guessDir(locale);
|
|
23
|
+
}
|
|
24
|
+
/** The 8 languages of web-chat-smith (+ vi), also seeded by migration 0011. */
|
|
25
|
+
export const BUILTIN_LOCALES = [
|
|
26
|
+
{ code: "en", name: "English", nativeName: "English", dir: "ltr" },
|
|
27
|
+
{ code: "ar", name: "Arabic", nativeName: "العربية", dir: "rtl" },
|
|
28
|
+
{ code: "zh", name: "Chinese (Simplified)", nativeName: "简体中文", dir: "ltr" },
|
|
29
|
+
{ code: "es", name: "Spanish", nativeName: "Español", dir: "ltr" },
|
|
30
|
+
{ code: "th", name: "Thai", nativeName: "ไทย", dir: "ltr" },
|
|
31
|
+
{ code: "ko", name: "Korean", nativeName: "한국어", dir: "ltr" },
|
|
32
|
+
{ code: "ja", name: "Japanese", nativeName: "日本語", dir: "ltr" },
|
|
33
|
+
{ code: "hi", name: "Hindi", nativeName: "हिन्दी", dir: "ltr" },
|
|
34
|
+
{ code: "vi", name: "Vietnamese", nativeName: "Tiếng Việt", dir: "ltr" },
|
|
35
|
+
];
|
|
36
|
+
//# sourceMappingURL=locales.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../src/locales.ts"],"names":[],"mappings":"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"}
|