@visual-platform/define 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.
@@ -0,0 +1,101 @@
1
+ /**
2
+ * What a field is about (ADR-046): "content" = what the block shows (texts, images, links, icons) —
3
+ * edited in Settings → Content, exposable as component props, translated; "layout" = how it looks or
4
+ * behaves (sizes, alignment, variants, columns, data wiring) — edited only in Edit layout.
5
+ * Default: text/textarea/image/link/icon → content, everything else → layout.
6
+ */
7
+ export type FieldRole = "content" | "layout";
8
+ type Common = {
9
+ label?: string;
10
+ role?: FieldRole;
11
+ };
12
+ /** Field kinds understood by the editor (blueprint 23, 32) and the runtime (style bindings). */
13
+ export type FieldDef = Common & ({
14
+ type: "text" | "textarea";
15
+ label?: string;
16
+ required?: boolean;
17
+ maxLength?: number;
18
+ responsive?: false;
19
+ inline?: boolean;
20
+ } | {
21
+ type: "number";
22
+ label?: string;
23
+ min?: number;
24
+ max?: number;
25
+ responsive?: boolean;
26
+ styleBinding?: string;
27
+ } | {
28
+ type: "boolean";
29
+ label?: string;
30
+ responsive?: boolean;
31
+ styleBinding?: string;
32
+ } | {
33
+ type: "select";
34
+ label?: string;
35
+ options: readonly string[];
36
+ responsive?: boolean;
37
+ styleBinding?: string;
38
+ cssValues?: Record<string, string>;
39
+ } | {
40
+ type: "token";
41
+ label?: string;
42
+ tokenType: "spacing" | "color" | "radius" | "font.size";
43
+ responsive?: boolean;
44
+ styleBinding?: string;
45
+ } | {
46
+ type: "link";
47
+ label?: string;
48
+ required?: boolean;
49
+ } | {
50
+ type: "image";
51
+ label?: string;
52
+ required?: boolean;
53
+ } | {
54
+ type: "icon";
55
+ label?: string;
56
+ required?: boolean;
57
+ } | {
58
+ type: "slot";
59
+ label?: string;
60
+ allow?: readonly string[];
61
+ });
62
+ /** Role of a field: explicit `role`, else content for text/textarea/image/link/icon, layout otherwise. */
63
+ export declare function fieldRole(f: {
64
+ type: string;
65
+ role?: FieldRole | undefined;
66
+ }): FieldRole;
67
+ export type ComponentDefinition<F extends Record<string, FieldDef> = Record<string, FieldDef>> = {
68
+ /** Stable PascalCase type stored in PageDocument nodes. */
69
+ type: string;
70
+ label: string;
71
+ category: string;
72
+ description?: string;
73
+ definitionVersion: number;
74
+ fields: F;
75
+ defaultProps: Partial<Record<NoInfer<keyof F & string>, unknown>>;
76
+ /** Editor canvas hints for customer components (blueprint 31 §6). */
77
+ schematic?: {
78
+ layout?: "banner" | "media-left" | "stack";
79
+ primaryField?: NoInfer<keyof F & string>;
80
+ imageField?: NoInfer<keyof F & string>;
81
+ };
82
+ /** AI usage hint (blueprint 34). */
83
+ ai?: {
84
+ enabled: boolean;
85
+ description: string;
86
+ };
87
+ /** Events this element can emit, bindable to app event names in Studio (ADR-032). */
88
+ events?: Partial<Record<"click" | "change" | "blur" | "enter" | "submit" | "reset" | "toggle", {
89
+ label: string;
90
+ payload?: string;
91
+ }>>;
92
+ };
93
+ export declare function defineComponent<const F extends Record<string, FieldDef>>(def: ComponentDefinition<F>): ComponentDefinition<F>;
94
+ export type StyleBinding = {
95
+ cssVar: string;
96
+ values?: Record<string, string>;
97
+ };
98
+ /** Fields that may carry `$responsive` values and map to CSS custom properties at runtime. */
99
+ export declare function styleBindings(def: ComponentDefinition<Record<string, FieldDef>>): Record<string, StyleBinding>;
100
+ export * from "./schema.js";
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ const CONTENT_TYPES = new Set(["text", "textarea", "image", "link", "icon"]);
2
+ /** Role of a field: explicit `role`, else content for text/textarea/image/link/icon, layout otherwise. */
3
+ export function fieldRole(f) {
4
+ if (f.type === "slot")
5
+ return "layout";
6
+ return f.role ?? (CONTENT_TYPES.has(f.type) ? "content" : "layout");
7
+ }
8
+ export function defineComponent(def) {
9
+ if (!/^[A-Z][A-Za-z0-9]*$/.test(def.type))
10
+ throw new Error(`component type must be PascalCase: ${def.type}`);
11
+ return def;
12
+ }
13
+ /** Fields that may carry `$responsive` values and map to CSS custom properties at runtime. */
14
+ export function styleBindings(def) {
15
+ const out = {};
16
+ for (const [name, f] of Object.entries(def.fields)) {
17
+ if ("styleBinding" in f && f.styleBinding) {
18
+ out[name] = { cssVar: f.styleBinding, ...("cssValues" in f && f.cssValues ? { values: f.cssValues } : {}) };
19
+ }
20
+ }
21
+ return out;
22
+ }
23
+ export * from "./schema.js";
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7E,0GAA0G;AAC1G,MAAM,UAAU,SAAS,CAAC,CAAiD;IACzE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACtE,CAAC;AAmBD,MAAM,UAAU,eAAe,CAA2C,GAA2B;IACnG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7G,OAAO,GAAG,CAAC;AACb,CAAC;AAID,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,GAAkD;IAC9E,MAAM,GAAG,GAAiC,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAyB,EAAE,CAAC;QAC3E,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9G,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AACD,cAAc,aAAa,CAAC"}
@@ -0,0 +1,232 @@
1
+ import { z } from "zod";
2
+ /** Runtime schema for FieldDef — the server validates every pushed definition (blueprint 23 §4). */
3
+ export declare const FieldDefSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4
+ label: z.ZodOptional<z.ZodString>;
5
+ role: z.ZodOptional<z.ZodEnum<{
6
+ content: "content";
7
+ layout: "layout";
8
+ }>>;
9
+ type: z.ZodEnum<{
10
+ text: "text";
11
+ textarea: "textarea";
12
+ }>;
13
+ required: z.ZodOptional<z.ZodBoolean>;
14
+ maxLength: z.ZodOptional<z.ZodNumber>;
15
+ responsive: z.ZodOptional<z.ZodLiteral<false>>;
16
+ inline: z.ZodOptional<z.ZodBoolean>;
17
+ }, z.core.$strict>, z.ZodObject<{
18
+ label: z.ZodOptional<z.ZodString>;
19
+ role: z.ZodOptional<z.ZodEnum<{
20
+ content: "content";
21
+ layout: "layout";
22
+ }>>;
23
+ type: z.ZodLiteral<"number">;
24
+ min: z.ZodOptional<z.ZodNumber>;
25
+ max: z.ZodOptional<z.ZodNumber>;
26
+ responsive: z.ZodOptional<z.ZodBoolean>;
27
+ styleBinding: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strict>, z.ZodObject<{
29
+ label: z.ZodOptional<z.ZodString>;
30
+ role: z.ZodOptional<z.ZodEnum<{
31
+ content: "content";
32
+ layout: "layout";
33
+ }>>;
34
+ type: z.ZodLiteral<"boolean">;
35
+ responsive: z.ZodOptional<z.ZodBoolean>;
36
+ styleBinding: z.ZodOptional<z.ZodString>;
37
+ }, z.core.$strict>, z.ZodObject<{
38
+ label: z.ZodOptional<z.ZodString>;
39
+ role: z.ZodOptional<z.ZodEnum<{
40
+ content: "content";
41
+ layout: "layout";
42
+ }>>;
43
+ type: z.ZodLiteral<"select">;
44
+ options: z.ZodArray<z.ZodString>;
45
+ responsive: z.ZodOptional<z.ZodBoolean>;
46
+ styleBinding: z.ZodOptional<z.ZodString>;
47
+ cssValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
48
+ }, z.core.$strict>, z.ZodObject<{
49
+ label: z.ZodOptional<z.ZodString>;
50
+ role: z.ZodOptional<z.ZodEnum<{
51
+ content: "content";
52
+ layout: "layout";
53
+ }>>;
54
+ type: z.ZodLiteral<"token">;
55
+ tokenType: z.ZodEnum<{
56
+ color: "color";
57
+ "font.size": "font.size";
58
+ radius: "radius";
59
+ spacing: "spacing";
60
+ }>;
61
+ responsive: z.ZodOptional<z.ZodBoolean>;
62
+ styleBinding: z.ZodOptional<z.ZodString>;
63
+ }, z.core.$strict>, z.ZodObject<{
64
+ label: z.ZodOptional<z.ZodString>;
65
+ role: z.ZodOptional<z.ZodEnum<{
66
+ content: "content";
67
+ layout: "layout";
68
+ }>>;
69
+ type: z.ZodLiteral<"link">;
70
+ required: z.ZodOptional<z.ZodBoolean>;
71
+ }, z.core.$strict>, z.ZodObject<{
72
+ label: z.ZodOptional<z.ZodString>;
73
+ role: z.ZodOptional<z.ZodEnum<{
74
+ content: "content";
75
+ layout: "layout";
76
+ }>>;
77
+ type: z.ZodLiteral<"image">;
78
+ required: z.ZodOptional<z.ZodBoolean>;
79
+ }, z.core.$strict>, z.ZodObject<{
80
+ label: z.ZodOptional<z.ZodString>;
81
+ role: z.ZodOptional<z.ZodEnum<{
82
+ content: "content";
83
+ layout: "layout";
84
+ }>>;
85
+ type: z.ZodLiteral<"icon">;
86
+ required: z.ZodOptional<z.ZodBoolean>;
87
+ }, z.core.$strict>, z.ZodObject<{
88
+ label: z.ZodOptional<z.ZodString>;
89
+ role: z.ZodOptional<z.ZodEnum<{
90
+ content: "content";
91
+ layout: "layout";
92
+ }>>;
93
+ type: z.ZodLiteral<"slot">;
94
+ allow: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
+ }, z.core.$strict>], "type">;
96
+ export declare const ComponentDefinitionSchema: z.ZodObject<{
97
+ type: z.ZodString;
98
+ label: z.ZodString;
99
+ category: z.ZodString;
100
+ description: z.ZodOptional<z.ZodString>;
101
+ definitionVersion: z.ZodNumber;
102
+ fields: z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
103
+ label: z.ZodOptional<z.ZodString>;
104
+ role: z.ZodOptional<z.ZodEnum<{
105
+ content: "content";
106
+ layout: "layout";
107
+ }>>;
108
+ type: z.ZodEnum<{
109
+ text: "text";
110
+ textarea: "textarea";
111
+ }>;
112
+ required: z.ZodOptional<z.ZodBoolean>;
113
+ maxLength: z.ZodOptional<z.ZodNumber>;
114
+ responsive: z.ZodOptional<z.ZodLiteral<false>>;
115
+ inline: z.ZodOptional<z.ZodBoolean>;
116
+ }, z.core.$strict>, z.ZodObject<{
117
+ label: z.ZodOptional<z.ZodString>;
118
+ role: z.ZodOptional<z.ZodEnum<{
119
+ content: "content";
120
+ layout: "layout";
121
+ }>>;
122
+ type: z.ZodLiteral<"number">;
123
+ min: z.ZodOptional<z.ZodNumber>;
124
+ max: z.ZodOptional<z.ZodNumber>;
125
+ responsive: z.ZodOptional<z.ZodBoolean>;
126
+ styleBinding: z.ZodOptional<z.ZodString>;
127
+ }, z.core.$strict>, z.ZodObject<{
128
+ label: z.ZodOptional<z.ZodString>;
129
+ role: z.ZodOptional<z.ZodEnum<{
130
+ content: "content";
131
+ layout: "layout";
132
+ }>>;
133
+ type: z.ZodLiteral<"boolean">;
134
+ responsive: z.ZodOptional<z.ZodBoolean>;
135
+ styleBinding: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strict>, z.ZodObject<{
137
+ label: z.ZodOptional<z.ZodString>;
138
+ role: z.ZodOptional<z.ZodEnum<{
139
+ content: "content";
140
+ layout: "layout";
141
+ }>>;
142
+ type: z.ZodLiteral<"select">;
143
+ options: z.ZodArray<z.ZodString>;
144
+ responsive: z.ZodOptional<z.ZodBoolean>;
145
+ styleBinding: z.ZodOptional<z.ZodString>;
146
+ cssValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
147
+ }, z.core.$strict>, z.ZodObject<{
148
+ label: z.ZodOptional<z.ZodString>;
149
+ role: z.ZodOptional<z.ZodEnum<{
150
+ content: "content";
151
+ layout: "layout";
152
+ }>>;
153
+ type: z.ZodLiteral<"token">;
154
+ tokenType: z.ZodEnum<{
155
+ color: "color";
156
+ "font.size": "font.size";
157
+ radius: "radius";
158
+ spacing: "spacing";
159
+ }>;
160
+ responsive: z.ZodOptional<z.ZodBoolean>;
161
+ styleBinding: z.ZodOptional<z.ZodString>;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ label: z.ZodOptional<z.ZodString>;
164
+ role: z.ZodOptional<z.ZodEnum<{
165
+ content: "content";
166
+ layout: "layout";
167
+ }>>;
168
+ type: z.ZodLiteral<"link">;
169
+ required: z.ZodOptional<z.ZodBoolean>;
170
+ }, z.core.$strict>, z.ZodObject<{
171
+ label: z.ZodOptional<z.ZodString>;
172
+ role: z.ZodOptional<z.ZodEnum<{
173
+ content: "content";
174
+ layout: "layout";
175
+ }>>;
176
+ type: z.ZodLiteral<"image">;
177
+ required: z.ZodOptional<z.ZodBoolean>;
178
+ }, z.core.$strict>, z.ZodObject<{
179
+ label: z.ZodOptional<z.ZodString>;
180
+ role: z.ZodOptional<z.ZodEnum<{
181
+ content: "content";
182
+ layout: "layout";
183
+ }>>;
184
+ type: z.ZodLiteral<"icon">;
185
+ required: z.ZodOptional<z.ZodBoolean>;
186
+ }, z.core.$strict>, z.ZodObject<{
187
+ label: z.ZodOptional<z.ZodString>;
188
+ role: z.ZodOptional<z.ZodEnum<{
189
+ content: "content";
190
+ layout: "layout";
191
+ }>>;
192
+ type: z.ZodLiteral<"slot">;
193
+ allow: z.ZodOptional<z.ZodArray<z.ZodString>>;
194
+ }, z.core.$strict>], "type">>;
195
+ defaultProps: z.ZodRecord<z.ZodString, z.ZodUnknown>;
196
+ schematic: z.ZodOptional<z.ZodObject<{
197
+ layout: z.ZodOptional<z.ZodEnum<{
198
+ banner: "banner";
199
+ "media-left": "media-left";
200
+ stack: "stack";
201
+ }>>;
202
+ primaryField: z.ZodOptional<z.ZodString>;
203
+ imageField: z.ZodOptional<z.ZodString>;
204
+ }, z.core.$strict>>;
205
+ ai: z.ZodOptional<z.ZodObject<{
206
+ enabled: z.ZodBoolean;
207
+ description: z.ZodString;
208
+ }, z.core.$strict>>;
209
+ events: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
210
+ blur: "blur";
211
+ change: "change";
212
+ click: "click";
213
+ enter: "enter";
214
+ reset: "reset";
215
+ submit: "submit";
216
+ toggle: "toggle";
217
+ }> & z.core.$partial, z.ZodObject<{
218
+ label: z.ZodString;
219
+ payload: z.ZodOptional<z.ZodString>;
220
+ }, z.core.$strict>>>;
221
+ }, z.core.$strict>;
222
+ export type ComponentDefinitionInput = z.infer<typeof ComponentDefinitionSchema>;
223
+ /** Validate a set of definitions together (unique types, no clash with reserved built-ins). */
224
+ export declare function validateDefinitions(defs: unknown[], reservedTypes?: readonly string[]): {
225
+ ok: boolean;
226
+ errors: {
227
+ type?: string | undefined;
228
+ path: string;
229
+ message: string;
230
+ }[];
231
+ };
232
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,oGAAoG;AACpG,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAUzB,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBlC,CAAC;AAEL,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,aAAa,GAAE,SAAS,MAAM,EAAO;;;eACjE,MAAM,GAAG,SAAS;cAAQ,MAAM;iBAAW,MAAM;;EAazE"}
package/dist/schema.js ADDED
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ const base = { label: z.string().max(60).optional(), role: z.enum(["content", "layout"]).optional() };
3
+ const cssVar = z.string().regex(/^--[a-z0-9-]+$/, "styleBinding must be a CSS custom property like --card-gap");
4
+ /** Runtime schema for FieldDef — the server validates every pushed definition (blueprint 23 §4). */
5
+ export const FieldDefSchema = z.discriminatedUnion("type", [
6
+ z.object({ type: z.enum(["text", "textarea"]), ...base, required: z.boolean().optional(), maxLength: z.number().int().positive().optional(), responsive: z.literal(false).optional(), inline: z.boolean().optional() }).strict(),
7
+ z.object({ type: z.literal("number"), ...base, min: z.number().optional(), max: z.number().optional(), responsive: z.boolean().optional(), styleBinding: cssVar.optional() }).strict(),
8
+ z.object({ type: z.literal("boolean"), ...base, responsive: z.boolean().optional(), styleBinding: cssVar.optional() }).strict(),
9
+ z.object({ type: z.literal("select"), ...base, options: z.array(z.string().min(1)).min(1).max(50), responsive: z.boolean().optional(), styleBinding: cssVar.optional(), cssValues: z.record(z.string(), z.string().regex(/^[#a-zA-Z0-9.%()\s,-]+$/)).optional() }).strict(),
10
+ z.object({ type: z.literal("token"), ...base, tokenType: z.enum(["spacing", "color", "radius", "font.size"]), responsive: z.boolean().optional(), styleBinding: cssVar.optional() }).strict(),
11
+ z.object({ type: z.literal("link"), ...base, required: z.boolean().optional() }).strict(),
12
+ z.object({ type: z.literal("image"), ...base, required: z.boolean().optional() }).strict(),
13
+ z.object({ type: z.literal("icon"), ...base, required: z.boolean().optional() }).strict(),
14
+ z.object({ type: z.literal("slot"), ...base, allow: z.array(z.string()).optional() }).strict(),
15
+ ]);
16
+ export const ComponentDefinitionSchema = z
17
+ .object({
18
+ type: z.string().regex(/^[A-Z][A-Za-z0-9]*$/, "type must be PascalCase"),
19
+ label: z.string().min(1).max(60),
20
+ category: z.string().min(1).max(40),
21
+ description: z.string().max(500).optional(),
22
+ definitionVersion: z.number().int().positive(),
23
+ fields: z.record(z.string().regex(/^[a-z][A-Za-z0-9]*$/, "field names are camelCase"), FieldDefSchema).refine((f) => Object.keys(f).length <= 40, "at most 40 fields"),
24
+ defaultProps: z.record(z.string(), z.unknown()),
25
+ schematic: z.object({ layout: z.enum(["banner", "media-left", "stack"]).optional(), primaryField: z.string().optional(), imageField: z.string().optional() }).strict().optional(),
26
+ ai: z.object({ enabled: z.boolean(), description: z.string().max(500) }).strict().optional(),
27
+ events: z.partialRecord(z.enum(["click", "change", "blur", "enter", "submit", "reset", "toggle"]), z.object({ label: z.string().min(1).max(60), payload: z.string().max(200).optional() }).strict()).optional(),
28
+ })
29
+ .strict()
30
+ .superRefine((d, ctx) => {
31
+ for (const k of Object.keys(d.defaultProps))
32
+ if (!(k in d.fields))
33
+ ctx.addIssue({ code: "custom", path: ["defaultProps", k], message: `default for unknown field "${k}"` });
34
+ for (const k of ["primaryField", "imageField"]) {
35
+ const f = d.schematic?.[k];
36
+ if (f && !(f in d.fields))
37
+ ctx.addIssue({ code: "custom", path: ["schematic", k], message: `unknown field "${f}"` });
38
+ }
39
+ for (const [name, f] of Object.entries(d.fields)) {
40
+ if ("styleBinding" in f && f.styleBinding && !("responsive" in f))
41
+ continue;
42
+ if (f.type === "select" && f.cssValues)
43
+ for (const o of Object.keys(f.cssValues))
44
+ if (!f.options.includes(o))
45
+ ctx.addIssue({ code: "custom", path: ["fields", name, "cssValues", o], message: `"${o}" is not an option` });
46
+ }
47
+ });
48
+ /** Validate a set of definitions together (unique types, no clash with reserved built-ins). */
49
+ export function validateDefinitions(defs, reservedTypes = []) {
50
+ const errors = [];
51
+ const seen = new Set();
52
+ defs.forEach((d, i) => {
53
+ const r = ComponentDefinitionSchema.safeParse(d);
54
+ if (!r.success) {
55
+ for (const issue of r.error.issues)
56
+ errors.push({ type: d?.type, path: `[${i}].${issue.path.join(".")}`, message: issue.message });
57
+ return;
58
+ }
59
+ if (seen.has(r.data.type))
60
+ errors.push({ type: r.data.type, path: `[${i}].type`, message: "duplicate type" });
61
+ if (reservedTypes.includes(r.data.type))
62
+ errors.push({ type: r.data.type, path: `[${i}].type`, message: "type is reserved by a built-in component" });
63
+ seen.add(r.data.type);
64
+ });
65
+ return { ok: errors.length === 0, errors };
66
+ }
67
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,35 @@
1
1
  {
2
2
  "name": "@visual-platform/define",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Visual Page Platform — define your own components (fields, slots, events) for the editor.",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "dependencies": {
21
+ "@visual-platform/contracts": "^0.2.0",
22
+ "zod": "^4.6.7"
23
+ },
24
+ "devDependencies": {
25
+ "@visual-platform/typescript-config": "0.0.0",
26
+ "typescript": "^7.0.2",
27
+ "vitest": "^5.1.0"
28
+ },
29
+ "scripts": {
30
+ "build": "tsc -p tsconfig.build.json",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit",
32
+ "test": "vitest run --passWithNoTests",
33
+ "clean": "rm -rf dist .turbo"
34
+ }
6
35
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.