@riverbankcms/sdk 0.60.6 → 0.60.9
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/_dts/api/src/appointmentSetup.d.ts +2 -2
- package/dist/_dts/api/src/bookingConfig.d.ts +6 -0
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +45 -3
- package/dist/_dts/api/src/bookingOperations.d.ts +40 -3
- package/dist/_dts/api/src/courses.d.ts +1 -5
- package/dist/_dts/api/src/endpoints.d.ts +80 -1
- package/dist/_dts/api/src/index.d.ts +3 -2
- package/dist/_dts/api/src/navigation/contracts.d.ts +9 -9
- package/dist/_dts/api/src/navigation/linkValue.d.ts +1 -1
- package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -1
- package/dist/_dts/api/src/resources.d.ts +1 -1
- package/dist/_dts/api/src/siteBanner.d.ts +8 -8
- package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
- package/dist/_dts/api/src/teamMembers.d.ts +27 -0
- package/dist/_dts/blocks/src/index.d.ts +2 -1
- package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
- package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
- package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
- package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
- package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
- package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
- package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
- package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +185 -0
- package/dist/_dts/blocks/src/system/manifest/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
- package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -84
- package/dist/_dts/blocks/src/system/node/schema.d.ts +5 -5
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +4 -4
- package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
- package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
- package/dist/_dts/blocks/src/system/types/link.d.ts +93 -1
- package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
- package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
- package/dist/_dts/core/src/branded.d.ts +2 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +124 -8
- package/dist/_dts/db/src/schemas/forms.d.ts +85 -64
- package/dist/_dts/editor-blocks/src/widgets/link/LinkSummary.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/link/utils.d.ts +1 -1
- package/dist/_dts/sdk/src/client/types.d.ts +9 -2
- package/dist/_dts/sdk/src/config/typed-entries.d.ts +36 -1
- package/dist/_dts/sdk/src/config/types.d.ts +1 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +40 -37
- package/dist/_dts/sdk/src/contracts/content.d.ts +6 -1
- package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +18 -8
- package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
- package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
- package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
- package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
- package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
- package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
- package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
- package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
- package/dist/_dts/theme-core/src/palette/variants/types.d.ts +15 -15
- package/dist/_dts/theme-core/src/schema.d.ts +662 -662
- package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
- package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/button-group.d.ts +1 -1
- package/dist/_dts/ui/src/button.d.ts +2 -2
- package/dist/_dts/ui/src/callout.d.ts +1 -1
- package/dist/_dts/ui/src/card.d.ts +1 -1
- package/dist/_dts/ui/src/surface.d.ts +2 -2
- package/dist/_dts/ui/src/toggle.d.ts +4 -4
- package/dist/cli/index.mjs +951 -451
- package/dist/client/client.mjs +39490 -38952
- package/dist/client/hooks.mjs +1992 -1741
- package/dist/client/rendering/client.mjs +179 -130
- package/dist/client/rendering/islands.mjs +68 -43
- package/dist/client/rendering.mjs +1812 -1292
- package/dist/preview-next/before-render.mjs +147 -1
- package/dist/preview-next/client/runtime.mjs +1377 -829
- package/dist/preview-next/middleware.mjs +147 -1
- package/dist/server/components.mjs +3246 -2751
- package/dist/server/config-validation.mjs +2198 -1962
- package/dist/server/config.mjs +2198 -1962
- package/dist/server/data.mjs +1992 -1741
- package/dist/server/index.mjs +168 -2
- package/dist/server/next.mjs +3230 -2701
- package/dist/server/page-converter.mjs +345 -259
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +3274 -2763
- package/dist/server/rendering.mjs +3274 -2763
- package/dist/server/routing.mjs +530 -309
- package/dist/server/server.mjs +2011 -1742
- package/package.json +1 -1
|
@@ -45,16 +45,6 @@ function formatKeyAsLabel(key) {
|
|
|
45
45
|
return key.replace(/([A-Z])/g, " $1").replace(/[-_]/g, " ").trim().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
// ../blocks/src/system/manifest/registry.ts
|
|
49
|
-
var REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@riverbankcms/blocks/manifest-registry");
|
|
50
|
-
var isVitest = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.VITEST === "true";
|
|
51
|
-
var globalScope = globalThis;
|
|
52
|
-
var manifestStore = isVitest ? /* @__PURE__ */ new Map() : globalScope[REGISTRY_SYMBOL] ?? (globalScope[REGISTRY_SYMBOL] = /* @__PURE__ */ new Map());
|
|
53
|
-
function registerManifest(manifest) {
|
|
54
|
-
manifestStore.set(manifest.name, manifest);
|
|
55
|
-
return manifest;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
48
|
// ../blocks/src/system/manifest/schema.ts
|
|
59
49
|
import { z as z2 } from "zod";
|
|
60
50
|
|
|
@@ -904,6 +894,16 @@ var manifestSchema = z2.object({
|
|
|
904
894
|
icon: z2.string().optional()
|
|
905
895
|
});
|
|
906
896
|
|
|
897
|
+
// ../blocks/src/system/manifest/registry.ts
|
|
898
|
+
var REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@riverbankcms/blocks/manifest-registry");
|
|
899
|
+
var isVitest = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.VITEST === "true";
|
|
900
|
+
var globalScope = globalThis;
|
|
901
|
+
var manifestStore = isVitest ? /* @__PURE__ */ new Map() : globalScope[REGISTRY_SYMBOL] ?? (globalScope[REGISTRY_SYMBOL] = /* @__PURE__ */ new Map());
|
|
902
|
+
function registerManifest(manifest) {
|
|
903
|
+
manifestStore.set(manifest.name, manifest);
|
|
904
|
+
return manifest;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
907
|
// ../theme-core/src/site-styles/types.ts
|
|
908
908
|
function asDesignBlockId(value) {
|
|
909
909
|
return brandNonEmptyString(value, "DesignBlockId");
|
|
@@ -8273,7 +8273,19 @@ var teamMemberFragment = defineFragment({
|
|
|
8273
8273
|
bind("photo")
|
|
8274
8274
|
)
|
|
8275
8275
|
]),
|
|
8276
|
-
|
|
8276
|
+
link(
|
|
8277
|
+
{
|
|
8278
|
+
href: { $bind: { from: "profilePath" } },
|
|
8279
|
+
className: "rb-team-member-name-link"
|
|
8280
|
+
},
|
|
8281
|
+
[text({ as: "h3" }, bind("name"))],
|
|
8282
|
+
when("profilePath")
|
|
8283
|
+
),
|
|
8284
|
+
text(
|
|
8285
|
+
{ as: "h3" },
|
|
8286
|
+
when("profilePath", { not: true }),
|
|
8287
|
+
bind("name")
|
|
8288
|
+
),
|
|
8277
8289
|
text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
|
|
8278
8290
|
richText(
|
|
8279
8291
|
{ className: "rb-prose rb-max-w-none" },
|
|
@@ -11368,7 +11380,9 @@ var courseSessionSchema = z31.object({
|
|
|
11368
11380
|
var courseTeamMemberSummarySchema = z31.object({
|
|
11369
11381
|
id: z31.string(),
|
|
11370
11382
|
name: z31.string(),
|
|
11371
|
-
|
|
11383
|
+
roleLabel: z31.string().nullable(),
|
|
11384
|
+
summary: z31.string().nullable(),
|
|
11385
|
+
profilePath: z31.string().nullable()
|
|
11372
11386
|
});
|
|
11373
11387
|
var coursePricingOptionSchema = z31.object({
|
|
11374
11388
|
id: z31.string(),
|
|
@@ -11473,7 +11487,9 @@ var publicEventTicketTypeSchema = z32.object({
|
|
|
11473
11487
|
var publicTeamMemberSummarySchema = z32.object({
|
|
11474
11488
|
id: z32.string(),
|
|
11475
11489
|
name: z32.string(),
|
|
11476
|
-
|
|
11490
|
+
roleLabel: z32.string().nullable(),
|
|
11491
|
+
summary: z32.string().nullable(),
|
|
11492
|
+
profilePath: z32.string().nullable()
|
|
11477
11493
|
});
|
|
11478
11494
|
var publicEventSchema = z32.object({
|
|
11479
11495
|
kind: z32.enum(["event", "course_session"]).optional(),
|
|
@@ -17244,7 +17260,25 @@ var newsletterSignupBlockDefinition = {
|
|
|
17244
17260
|
};
|
|
17245
17261
|
|
|
17246
17262
|
// ../blocks/src/system/blocks/team-members.ts
|
|
17263
|
+
import { z as z50 } from "zod";
|
|
17247
17264
|
var ITEM_NAME2 = "member";
|
|
17265
|
+
var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
|
|
17266
|
+
message: "Team member photos must be image media"
|
|
17267
|
+
}).nullable();
|
|
17268
|
+
var teamMemberDataSchema = z50.object({
|
|
17269
|
+
_type: z50.literal("teamMember"),
|
|
17270
|
+
id: z50.string(),
|
|
17271
|
+
name: z50.string(),
|
|
17272
|
+
role: z50.string().nullable(),
|
|
17273
|
+
roleLabel: z50.string().nullable(),
|
|
17274
|
+
bio: z50.string().nullable(),
|
|
17275
|
+
summary: z50.string().nullable(),
|
|
17276
|
+
photo: teamMemberPhotoSchema,
|
|
17277
|
+
profilePath: z50.string().nullable()
|
|
17278
|
+
});
|
|
17279
|
+
var teamMembersDataSchema = z50.array(teamMemberDataSchema);
|
|
17280
|
+
var dynamicSourceWhen = { equals: "site_staff" };
|
|
17281
|
+
var manualSourceWhen = { equals: "site_staff", not: true };
|
|
17248
17282
|
var headingNode = text(
|
|
17249
17283
|
{ as: "h2" },
|
|
17250
17284
|
bind("content.heading"),
|
|
@@ -17334,7 +17368,15 @@ var teamMemberStackLayout = el(
|
|
|
17334
17368
|
]
|
|
17335
17369
|
),
|
|
17336
17370
|
stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
|
|
17337
|
-
|
|
17371
|
+
link(
|
|
17372
|
+
{
|
|
17373
|
+
href: { $bind: { from: "profilePath" } },
|
|
17374
|
+
className: "rb-team-member-name-link"
|
|
17375
|
+
},
|
|
17376
|
+
[text({ as: "h3" }, bind("name"))],
|
|
17377
|
+
when("profilePath")
|
|
17378
|
+
),
|
|
17379
|
+
text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
|
|
17338
17380
|
text(
|
|
17339
17381
|
{ as: "p", className: "rb-team-member-role" },
|
|
17340
17382
|
when("role"),
|
|
@@ -17348,12 +17390,18 @@ var teamMemberStackLayout = el(
|
|
|
17348
17390
|
])
|
|
17349
17391
|
]
|
|
17350
17392
|
);
|
|
17351
|
-
var
|
|
17393
|
+
var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
17352
17394
|
collectionPath: "content.members",
|
|
17353
17395
|
itemName: ITEM_NAME2,
|
|
17354
17396
|
fragments: { teamMember: teamMemberFragment },
|
|
17355
17397
|
itemGap: "sm"
|
|
17356
|
-
});
|
|
17398
|
+
}));
|
|
17399
|
+
var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
17400
|
+
collectionPath: "data.members",
|
|
17401
|
+
itemName: ITEM_NAME2,
|
|
17402
|
+
fragments: { teamMember: teamMemberFragment },
|
|
17403
|
+
itemGap: "sm"
|
|
17404
|
+
}));
|
|
17357
17405
|
var gridVariant = wrapVariant3(
|
|
17358
17406
|
el(
|
|
17359
17407
|
"grid",
|
|
@@ -17367,22 +17415,29 @@ var gridVariant = wrapVariant3(
|
|
|
17367
17415
|
},
|
|
17368
17416
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
17369
17417
|
},
|
|
17370
|
-
[
|
|
17418
|
+
[manualGridMembersNode, dynamicGridMembersNode]
|
|
17371
17419
|
)
|
|
17372
17420
|
);
|
|
17373
|
-
var
|
|
17421
|
+
var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
17374
17422
|
collectionPath: "content.members",
|
|
17375
17423
|
itemName: ITEM_NAME2,
|
|
17376
17424
|
fragments: { teamMember: teamMemberFragment },
|
|
17377
17425
|
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
17378
17426
|
itemGap: "sm"
|
|
17379
|
-
});
|
|
17427
|
+
}));
|
|
17428
|
+
var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
17429
|
+
collectionPath: "data.members",
|
|
17430
|
+
itemName: ITEM_NAME2,
|
|
17431
|
+
fragments: { teamMember: teamMemberFragment },
|
|
17432
|
+
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
17433
|
+
itemGap: "sm"
|
|
17434
|
+
}));
|
|
17380
17435
|
var stackVariant = wrapVariant3({
|
|
17381
17436
|
type: "stack",
|
|
17382
17437
|
props: {
|
|
17383
17438
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
17384
17439
|
},
|
|
17385
|
-
children: [
|
|
17440
|
+
children: [manualStackMembersNode, dynamicStackMembersNode]
|
|
17386
17441
|
});
|
|
17387
17442
|
var teamMembersManifest = createBlockManifest({
|
|
17388
17443
|
id: "block.team-members",
|
|
@@ -17397,6 +17452,18 @@ var teamMembersManifest = createBlockManifest({
|
|
|
17397
17452
|
required: false,
|
|
17398
17453
|
maxLength: 120
|
|
17399
17454
|
}),
|
|
17455
|
+
parseFieldDefinition({
|
|
17456
|
+
id: "source",
|
|
17457
|
+
type: "select",
|
|
17458
|
+
label: "Team members",
|
|
17459
|
+
description: "Choose whether to use the site-wide team or a hand-picked list.",
|
|
17460
|
+
defaultValue: "manual",
|
|
17461
|
+
options: [
|
|
17462
|
+
{ value: "manual", label: "Choose manually" },
|
|
17463
|
+
{ value: "site_staff", label: "Use all site team members" }
|
|
17464
|
+
],
|
|
17465
|
+
ui: { intent: "behavior" }
|
|
17466
|
+
}),
|
|
17400
17467
|
parseFieldDefinition({
|
|
17401
17468
|
id: "layoutAlign",
|
|
17402
17469
|
type: "select",
|
|
@@ -17499,18 +17566,24 @@ var teamMembersManifest = createBlockManifest({
|
|
|
17499
17566
|
],
|
|
17500
17567
|
ui: { intent: "display" }
|
|
17501
17568
|
}),
|
|
17502
|
-
|
|
17503
|
-
|
|
17504
|
-
|
|
17505
|
-
|
|
17506
|
-
|
|
17507
|
-
|
|
17508
|
-
|
|
17509
|
-
|
|
17510
|
-
|
|
17511
|
-
|
|
17569
|
+
{
|
|
17570
|
+
...fragmentsToRepeaterField(
|
|
17571
|
+
"members",
|
|
17572
|
+
"Team members",
|
|
17573
|
+
{ teamMember: teamMemberFragment },
|
|
17574
|
+
{
|
|
17575
|
+
minItems: 0,
|
|
17576
|
+
maxItems: 50,
|
|
17577
|
+
itemLabel: "Team member",
|
|
17578
|
+
itemLabelSource: "name",
|
|
17579
|
+
description: "Add people to this section."
|
|
17580
|
+
}
|
|
17581
|
+
),
|
|
17582
|
+
ui: {
|
|
17583
|
+
intent: "content",
|
|
17584
|
+
visibleWhen: { field: "source", equals: "manual" }
|
|
17512
17585
|
}
|
|
17513
|
-
|
|
17586
|
+
}
|
|
17514
17587
|
],
|
|
17515
17588
|
layout: gridVariant,
|
|
17516
17589
|
variants: {
|
|
@@ -17536,7 +17609,20 @@ var teamMembersManifest = createBlockManifest({
|
|
|
17536
17609
|
styleTokens: { spacing: "lg" }
|
|
17537
17610
|
});
|
|
17538
17611
|
var teamMembersBlockDefinition = {
|
|
17539
|
-
manifest: teamMembersManifest
|
|
17612
|
+
manifest: teamMembersManifest,
|
|
17613
|
+
dataSchemas: {
|
|
17614
|
+
members: teamMembersDataSchema
|
|
17615
|
+
},
|
|
17616
|
+
dataLoaders: {
|
|
17617
|
+
members: {
|
|
17618
|
+
endpoint: "listPublicTeamMembers",
|
|
17619
|
+
params: {
|
|
17620
|
+
siteId: { $bind: { from: "$root.siteId" } },
|
|
17621
|
+
stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
|
|
17622
|
+
},
|
|
17623
|
+
mode: "server"
|
|
17624
|
+
}
|
|
17625
|
+
}
|
|
17540
17626
|
};
|
|
17541
17627
|
|
|
17542
17628
|
// ../blocks/src/system/runtime/nodes/location-map.shared.ts
|
|
@@ -18514,11 +18600,11 @@ function resolveModelForPass(passId, tierOverrides, passOverrides, globalModel)
|
|
|
18514
18600
|
}
|
|
18515
18601
|
|
|
18516
18602
|
// src/page-converter/passes/pass1-segmentation-matching.ts
|
|
18517
|
-
import { z as
|
|
18603
|
+
import { z as z55 } from "zod";
|
|
18518
18604
|
|
|
18519
18605
|
// src/manifest/passes/pass1-fields.ts
|
|
18520
|
-
import { z as
|
|
18521
|
-
var simpleFieldTypeEnum =
|
|
18606
|
+
import { z as z51 } from "zod";
|
|
18607
|
+
var simpleFieldTypeEnum = z51.enum([
|
|
18522
18608
|
"text",
|
|
18523
18609
|
"richText",
|
|
18524
18610
|
"media",
|
|
@@ -18527,7 +18613,7 @@ var simpleFieldTypeEnum = z50.enum([
|
|
|
18527
18613
|
"select",
|
|
18528
18614
|
"number"
|
|
18529
18615
|
]);
|
|
18530
|
-
var fieldTypeEnum =
|
|
18616
|
+
var fieldTypeEnum = z51.enum([
|
|
18531
18617
|
"text",
|
|
18532
18618
|
"richText",
|
|
18533
18619
|
"media",
|
|
@@ -18538,109 +18624,109 @@ var fieldTypeEnum = z50.enum([
|
|
|
18538
18624
|
"repeater",
|
|
18539
18625
|
"group"
|
|
18540
18626
|
]);
|
|
18541
|
-
var linkDefaultValue =
|
|
18542
|
-
label:
|
|
18627
|
+
var linkDefaultValue = z51.object({
|
|
18628
|
+
label: z51.string().describe("The visible link text")
|
|
18543
18629
|
});
|
|
18544
|
-
var mediaDefaultValue =
|
|
18545
|
-
src:
|
|
18546
|
-
alt:
|
|
18630
|
+
var mediaDefaultValue = z51.object({
|
|
18631
|
+
src: z51.string().describe("Image/video source URL"),
|
|
18632
|
+
alt: z51.string().describe("Alt text for accessibility (empty string if none)")
|
|
18547
18633
|
});
|
|
18548
|
-
var nestedFieldSchema =
|
|
18549
|
-
id:
|
|
18634
|
+
var nestedFieldSchema = z51.object({
|
|
18635
|
+
id: z51.string().min(1).describe("camelCase field ID"),
|
|
18550
18636
|
type: simpleFieldTypeEnum,
|
|
18551
|
-
label:
|
|
18552
|
-
required:
|
|
18637
|
+
label: z51.string().min(1),
|
|
18638
|
+
required: z51.boolean().nullable()
|
|
18553
18639
|
});
|
|
18554
|
-
var simpleFieldSchema =
|
|
18555
|
-
id:
|
|
18640
|
+
var simpleFieldSchema = z51.object({
|
|
18641
|
+
id: z51.string().min(1).describe("camelCase field ID (e.g., headline, ctaButton)"),
|
|
18556
18642
|
type: simpleFieldTypeEnum,
|
|
18557
|
-
label:
|
|
18558
|
-
required:
|
|
18559
|
-
multiline:
|
|
18560
|
-
defaultValue:
|
|
18561
|
-
|
|
18562
|
-
|
|
18563
|
-
|
|
18643
|
+
label: z51.string().min(1),
|
|
18644
|
+
required: z51.boolean(),
|
|
18645
|
+
multiline: z51.boolean().nullable().describe("For text fields: true if multiple lines"),
|
|
18646
|
+
defaultValue: z51.union([
|
|
18647
|
+
z51.string(),
|
|
18648
|
+
z51.number(),
|
|
18649
|
+
z51.boolean(),
|
|
18564
18650
|
linkDefaultValue,
|
|
18565
18651
|
mediaDefaultValue,
|
|
18566
|
-
|
|
18652
|
+
z51.null()
|
|
18567
18653
|
]).describe("Default content extracted from HTML"),
|
|
18568
|
-
htmlContext:
|
|
18569
|
-
});
|
|
18570
|
-
var repeaterFieldSchema2 =
|
|
18571
|
-
id:
|
|
18572
|
-
type:
|
|
18573
|
-
label:
|
|
18574
|
-
required:
|
|
18575
|
-
itemLabel:
|
|
18576
|
-
itemFields:
|
|
18577
|
-
htmlContext:
|
|
18578
|
-
});
|
|
18579
|
-
var groupFieldSchema2 =
|
|
18580
|
-
id:
|
|
18581
|
-
type:
|
|
18582
|
-
label:
|
|
18583
|
-
required:
|
|
18584
|
-
groupFields:
|
|
18585
|
-
htmlContext:
|
|
18586
|
-
});
|
|
18587
|
-
var extractedFieldSchema =
|
|
18654
|
+
htmlContext: z51.string().describe("Brief description of where this appears in the HTML")
|
|
18655
|
+
});
|
|
18656
|
+
var repeaterFieldSchema2 = z51.object({
|
|
18657
|
+
id: z51.string().min(1).describe("camelCase field ID (e.g., socialLinks, features)"),
|
|
18658
|
+
type: z51.literal("repeater"),
|
|
18659
|
+
label: z51.string().min(1),
|
|
18660
|
+
required: z51.boolean(),
|
|
18661
|
+
itemLabel: z51.string().min(1).describe('Singular label for each item (e.g., "Link", "Feature")'),
|
|
18662
|
+
itemFields: z51.array(nestedFieldSchema).min(1).describe("Fields for each item in the repeater"),
|
|
18663
|
+
htmlContext: z51.string().describe("Brief description of where this appears in the HTML")
|
|
18664
|
+
});
|
|
18665
|
+
var groupFieldSchema2 = z51.object({
|
|
18666
|
+
id: z51.string().min(1).describe("camelCase field ID (e.g., contactInfo, seoSettings)"),
|
|
18667
|
+
type: z51.literal("group"),
|
|
18668
|
+
label: z51.string().min(1),
|
|
18669
|
+
required: z51.boolean(),
|
|
18670
|
+
groupFields: z51.array(nestedFieldSchema).min(1).describe("Fields within the group"),
|
|
18671
|
+
htmlContext: z51.string().describe("Brief description of where this appears in the HTML")
|
|
18672
|
+
});
|
|
18673
|
+
var extractedFieldSchema = z51.union([
|
|
18588
18674
|
simpleFieldSchema,
|
|
18589
18675
|
repeaterFieldSchema2,
|
|
18590
18676
|
groupFieldSchema2
|
|
18591
18677
|
]);
|
|
18592
|
-
var extractedEntrySchema =
|
|
18593
|
-
identifier:
|
|
18594
|
-
title:
|
|
18678
|
+
var extractedEntrySchema = z51.object({
|
|
18679
|
+
identifier: z51.string().regex(/^[a-z0-9-]+$/).describe("Unique slug-safe identifier (e.g., wine-tasting-evening)"),
|
|
18680
|
+
title: z51.string().min(1).describe("Entry title"),
|
|
18595
18681
|
// Use passthrough() instead of record() - generates additionalProperties:true without propertyNames
|
|
18596
18682
|
// which OpenAI's structured output accepts
|
|
18597
|
-
data:
|
|
18598
|
-
});
|
|
18599
|
-
var newContentTypeSchema =
|
|
18600
|
-
key:
|
|
18601
|
-
name:
|
|
18602
|
-
description:
|
|
18603
|
-
fields:
|
|
18604
|
-
id:
|
|
18605
|
-
type:
|
|
18606
|
-
label:
|
|
18607
|
-
required:
|
|
18608
|
-
description:
|
|
18683
|
+
data: z51.object({}).passthrough().describe("Entry data matching the content type schema")
|
|
18684
|
+
});
|
|
18685
|
+
var newContentTypeSchema = z51.object({
|
|
18686
|
+
key: z51.string().regex(/^[a-z][a-z0-9-]*$/).describe("Content type key (e.g., testimonial, team-member)"),
|
|
18687
|
+
name: z51.string().min(1).describe("Human-readable name"),
|
|
18688
|
+
description: z51.string().nullable().describe("Description of this content type"),
|
|
18689
|
+
fields: z51.array(z51.object({
|
|
18690
|
+
id: z51.string().min(1),
|
|
18691
|
+
type: z51.string().min(1),
|
|
18692
|
+
label: z51.string().min(1),
|
|
18693
|
+
required: z51.boolean().nullable(),
|
|
18694
|
+
description: z51.string().nullable()
|
|
18609
18695
|
})).min(1),
|
|
18610
|
-
isRouted:
|
|
18696
|
+
isRouted: z51.boolean().describe("Whether entries have their own pages")
|
|
18611
18697
|
});
|
|
18612
|
-
var contentTypeApproachSchema =
|
|
18698
|
+
var contentTypeApproachSchema = z51.discriminatedUnion("approach", [
|
|
18613
18699
|
// Use an existing content type
|
|
18614
|
-
|
|
18615
|
-
approach:
|
|
18616
|
-
contentTypeKey:
|
|
18617
|
-
entries:
|
|
18618
|
-
rationale:
|
|
18700
|
+
z51.object({
|
|
18701
|
+
approach: z51.literal("existingContentType"),
|
|
18702
|
+
contentTypeKey: z51.string().min(1).describe("Key of the existing content type to use"),
|
|
18703
|
+
entries: z51.array(extractedEntrySchema).min(1).describe("Extracted entries"),
|
|
18704
|
+
rationale: z51.string().describe("Why this content type fits")
|
|
18619
18705
|
}),
|
|
18620
18706
|
// Create a new content type
|
|
18621
|
-
|
|
18622
|
-
approach:
|
|
18707
|
+
z51.object({
|
|
18708
|
+
approach: z51.literal("newContentType"),
|
|
18623
18709
|
contentType: newContentTypeSchema,
|
|
18624
|
-
entries:
|
|
18625
|
-
rationale:
|
|
18710
|
+
entries: z51.array(extractedEntrySchema).min(1).describe("Extracted entries"),
|
|
18711
|
+
rationale: z51.string().describe("Why a new content type is needed")
|
|
18626
18712
|
}),
|
|
18627
18713
|
// Use repeater field (page-specific data)
|
|
18628
|
-
|
|
18629
|
-
approach:
|
|
18630
|
-
rationale:
|
|
18714
|
+
z51.object({
|
|
18715
|
+
approach: z51.literal("repeater"),
|
|
18716
|
+
rationale: z51.string().describe("Why repeater is preferred over content type")
|
|
18631
18717
|
}),
|
|
18632
18718
|
// No list data - standard field extraction
|
|
18633
|
-
|
|
18634
|
-
approach:
|
|
18635
|
-
rationale:
|
|
18719
|
+
z51.object({
|
|
18720
|
+
approach: z51.literal("none"),
|
|
18721
|
+
rationale: z51.string().describe("Why this is not list data")
|
|
18636
18722
|
})
|
|
18637
18723
|
]);
|
|
18638
|
-
var pass1OutputSchema =
|
|
18639
|
-
blockId:
|
|
18640
|
-
blockTitle:
|
|
18641
|
-
blockDescription:
|
|
18642
|
-
category:
|
|
18643
|
-
fields:
|
|
18724
|
+
var pass1OutputSchema = z51.object({
|
|
18725
|
+
blockId: z51.string().regex(/^custom\.[a-z][a-z0-9-]*$/).describe("Block ID like custom.hero-section"),
|
|
18726
|
+
blockTitle: z51.string().min(1),
|
|
18727
|
+
blockDescription: z51.string().nullable(),
|
|
18728
|
+
category: z51.enum(["marketing", "content", "blog", "media", "layout", "interactive"]),
|
|
18729
|
+
fields: z51.array(extractedFieldSchema).min(1),
|
|
18644
18730
|
/**
|
|
18645
18731
|
* Content type decision for list-like content.
|
|
18646
18732
|
* When content types are available, the LLM may decide to use content entries
|
|
@@ -18882,10 +18968,10 @@ async function getJsonFromAiText(ai, config, userMessage, schema) {
|
|
|
18882
18968
|
}
|
|
18883
18969
|
|
|
18884
18970
|
// src/manifest/passes/pass3-styling.ts
|
|
18885
|
-
import { z as
|
|
18971
|
+
import { z as z54 } from "zod";
|
|
18886
18972
|
|
|
18887
18973
|
// src/manifest/validation/output-schema.ts
|
|
18888
|
-
import { z as
|
|
18974
|
+
import { z as z53 } from "zod";
|
|
18889
18975
|
|
|
18890
18976
|
// src/manifest/validation/layout-utils.ts
|
|
18891
18977
|
function collectLayoutNodeInfos(node, path2 = "layout", out = []) {
|
|
@@ -18926,53 +19012,53 @@ function collectLayoutClassNames(node, out = /* @__PURE__ */ new Set()) {
|
|
|
18926
19012
|
}
|
|
18927
19013
|
|
|
18928
19014
|
// src/zod/titleSourceSchema.ts
|
|
18929
|
-
import { z as
|
|
18930
|
-
var titleSourceValueSchema =
|
|
18931
|
-
|
|
18932
|
-
|
|
19015
|
+
import { z as z52 } from "zod";
|
|
19016
|
+
var titleSourceValueSchema = z52.union([
|
|
19017
|
+
z52.string().min(1),
|
|
19018
|
+
z52.array(z52.string().min(1)).min(1)
|
|
18933
19019
|
]);
|
|
18934
19020
|
|
|
18935
19021
|
// src/manifest/validation/output-schema.ts
|
|
18936
|
-
var blockCategoryEnum2 =
|
|
18937
|
-
var llmColorValue =
|
|
18938
|
-
name:
|
|
18939
|
-
hex:
|
|
18940
|
-
});
|
|
18941
|
-
var llmThemePrimitive =
|
|
18942
|
-
|
|
18943
|
-
|
|
18944
|
-
|
|
18945
|
-
|
|
19022
|
+
var blockCategoryEnum2 = z53.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
|
|
19023
|
+
var llmColorValue = z53.object({
|
|
19024
|
+
name: z53.string(),
|
|
19025
|
+
hex: z53.string()
|
|
19026
|
+
});
|
|
19027
|
+
var llmThemePrimitive = z53.union([
|
|
19028
|
+
z53.string(),
|
|
19029
|
+
z53.number(),
|
|
19030
|
+
z53.boolean(),
|
|
19031
|
+
z53.null()
|
|
18946
19032
|
]);
|
|
18947
|
-
var llmThemePatchValue =
|
|
19033
|
+
var llmThemePatchValue = z53.union([
|
|
18948
19034
|
llmThemePrimitive,
|
|
18949
19035
|
llmColorValue,
|
|
18950
|
-
|
|
18951
|
-
|
|
19036
|
+
z53.array(llmColorValue),
|
|
19037
|
+
z53.array(llmThemePrimitive)
|
|
18952
19038
|
]);
|
|
18953
|
-
var llmThemePatchOpSchema =
|
|
18954
|
-
|
|
18955
|
-
|
|
18956
|
-
|
|
19039
|
+
var llmThemePatchOpSchema = z53.discriminatedUnion("op", [
|
|
19040
|
+
z53.object({ op: z53.literal("add"), path: z53.string().min(1), value: llmThemePatchValue }),
|
|
19041
|
+
z53.object({ op: z53.literal("replace"), path: z53.string().min(1), value: llmThemePatchValue }),
|
|
19042
|
+
z53.object({ op: z53.literal("remove"), path: z53.string().min(1) })
|
|
18957
19043
|
]);
|
|
18958
|
-
var llmCssDeclaration =
|
|
18959
|
-
property:
|
|
18960
|
-
value:
|
|
19044
|
+
var llmCssDeclaration = z53.object({
|
|
19045
|
+
property: z53.string(),
|
|
19046
|
+
value: z53.string()
|
|
18961
19047
|
});
|
|
18962
|
-
var llmCustomCssRuleSchema =
|
|
18963
|
-
id:
|
|
18964
|
-
selector:
|
|
18965
|
-
declarations:
|
|
19048
|
+
var llmCustomCssRuleSchema = z53.object({
|
|
19049
|
+
id: z53.string().min(1),
|
|
19050
|
+
selector: z53.string().min(1),
|
|
19051
|
+
declarations: z53.array(llmCssDeclaration)
|
|
18966
19052
|
});
|
|
18967
|
-
var llmNestedRuleSchema =
|
|
18968
|
-
selector:
|
|
18969
|
-
declarations:
|
|
19053
|
+
var llmNestedRuleSchema = z53.object({
|
|
19054
|
+
selector: z53.string().min(1),
|
|
19055
|
+
declarations: z53.array(llmCssDeclaration)
|
|
18970
19056
|
});
|
|
18971
|
-
var llmMediaAtRuleSchema =
|
|
18972
|
-
id:
|
|
18973
|
-
type:
|
|
18974
|
-
query:
|
|
18975
|
-
rules:
|
|
19057
|
+
var llmMediaAtRuleSchema = z53.object({
|
|
19058
|
+
id: z53.string().min(1),
|
|
19059
|
+
type: z53.literal("media"),
|
|
19060
|
+
query: z53.string().min(1),
|
|
19061
|
+
rules: z53.array(llmNestedRuleSchema)
|
|
18976
19062
|
});
|
|
18977
19063
|
function normalizeDeclarationsArrayToRecord(declarations) {
|
|
18978
19064
|
const record = {};
|
|
@@ -19002,79 +19088,79 @@ function normalizeLlmMediaAtRule(atRule) {
|
|
|
19002
19088
|
rules: atRule.rules.map(normalizeLlmNestedRule)
|
|
19003
19089
|
};
|
|
19004
19090
|
}
|
|
19005
|
-
var jsonPrimitiveSchema =
|
|
19006
|
-
|
|
19007
|
-
|
|
19008
|
-
|
|
19009
|
-
|
|
19091
|
+
var jsonPrimitiveSchema = z53.union([
|
|
19092
|
+
z53.string(),
|
|
19093
|
+
z53.number(),
|
|
19094
|
+
z53.boolean(),
|
|
19095
|
+
z53.null()
|
|
19010
19096
|
]);
|
|
19011
|
-
var jsonValueSchema =
|
|
19097
|
+
var jsonValueSchema = z53.union([
|
|
19012
19098
|
jsonPrimitiveSchema,
|
|
19013
|
-
|
|
19099
|
+
z53.array(jsonPrimitiveSchema)
|
|
19014
19100
|
]);
|
|
19015
|
-
var llmBaseFieldSchema =
|
|
19016
|
-
id:
|
|
19017
|
-
label:
|
|
19018
|
-
description:
|
|
19019
|
-
required:
|
|
19101
|
+
var llmBaseFieldSchema = z53.object({
|
|
19102
|
+
id: z53.string().min(1),
|
|
19103
|
+
label: z53.string().min(1),
|
|
19104
|
+
description: z53.string().nullable(),
|
|
19105
|
+
required: z53.boolean(),
|
|
19020
19106
|
defaultValue: jsonValueSchema.nullable()
|
|
19021
19107
|
});
|
|
19022
19108
|
var llmTextFieldSchema = llmBaseFieldSchema.extend({
|
|
19023
|
-
type:
|
|
19024
|
-
multiline:
|
|
19025
|
-
maxLength:
|
|
19109
|
+
type: z53.literal("text"),
|
|
19110
|
+
multiline: z53.boolean(),
|
|
19111
|
+
maxLength: z53.number().int().positive().nullable()
|
|
19026
19112
|
});
|
|
19027
19113
|
var llmRichTextFieldSchema = llmBaseFieldSchema.extend({
|
|
19028
|
-
type:
|
|
19114
|
+
type: z53.literal("richText")
|
|
19029
19115
|
});
|
|
19030
19116
|
var llmMediaFieldSchema = llmBaseFieldSchema.extend({
|
|
19031
|
-
type:
|
|
19032
|
-
mediaKinds:
|
|
19117
|
+
type: z53.literal("media"),
|
|
19118
|
+
mediaKinds: z53.array(z53.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).nullable()
|
|
19033
19119
|
});
|
|
19034
19120
|
var llmBooleanFieldSchema = llmBaseFieldSchema.extend({
|
|
19035
|
-
type:
|
|
19121
|
+
type: z53.literal("boolean")
|
|
19036
19122
|
});
|
|
19037
19123
|
var llmLinkFieldSchema = llmBaseFieldSchema.extend({
|
|
19038
|
-
type:
|
|
19124
|
+
type: z53.literal("link")
|
|
19039
19125
|
});
|
|
19040
19126
|
var llmSelectFieldSchema = llmBaseFieldSchema.extend({
|
|
19041
|
-
type:
|
|
19042
|
-
options:
|
|
19043
|
-
value:
|
|
19044
|
-
label:
|
|
19127
|
+
type: z53.literal("select"),
|
|
19128
|
+
options: z53.array(z53.object({
|
|
19129
|
+
value: z53.string(),
|
|
19130
|
+
label: z53.string()
|
|
19045
19131
|
})),
|
|
19046
|
-
multiple:
|
|
19132
|
+
multiple: z53.boolean().nullable()
|
|
19047
19133
|
});
|
|
19048
19134
|
var llmNumberFieldSchema = llmBaseFieldSchema.extend({
|
|
19049
|
-
type:
|
|
19050
|
-
});
|
|
19051
|
-
var llmNestedFieldSchema =
|
|
19052
|
-
id:
|
|
19053
|
-
type:
|
|
19054
|
-
label:
|
|
19055
|
-
required:
|
|
19056
|
-
multiline:
|
|
19135
|
+
type: z53.literal("number")
|
|
19136
|
+
});
|
|
19137
|
+
var llmNestedFieldSchema = z53.object({
|
|
19138
|
+
id: z53.string(),
|
|
19139
|
+
type: z53.string(),
|
|
19140
|
+
label: z53.string(),
|
|
19141
|
+
required: z53.boolean().nullable(),
|
|
19142
|
+
multiline: z53.boolean().nullable(),
|
|
19057
19143
|
defaultValue: jsonValueSchema.nullable()
|
|
19058
19144
|
}).passthrough();
|
|
19059
|
-
var llmNestedFieldsSchema =
|
|
19145
|
+
var llmNestedFieldsSchema = z53.array(llmNestedFieldSchema);
|
|
19060
19146
|
var llmGroupFieldSchema = llmBaseFieldSchema.extend({
|
|
19061
|
-
type:
|
|
19062
|
-
schema:
|
|
19147
|
+
type: z53.literal("group"),
|
|
19148
|
+
schema: z53.object({
|
|
19063
19149
|
fields: llmNestedFieldsSchema
|
|
19064
19150
|
})
|
|
19065
19151
|
});
|
|
19066
19152
|
var llmRepeaterFieldSchema = llmBaseFieldSchema.extend({
|
|
19067
|
-
type:
|
|
19068
|
-
itemLabel:
|
|
19069
|
-
itemLabelSource:
|
|
19070
|
-
minItems:
|
|
19071
|
-
maxItems:
|
|
19072
|
-
allowConversion:
|
|
19073
|
-
schema:
|
|
19153
|
+
type: z53.literal("repeater"),
|
|
19154
|
+
itemLabel: z53.string(),
|
|
19155
|
+
itemLabelSource: z53.string().nullable(),
|
|
19156
|
+
minItems: z53.number().int().min(0),
|
|
19157
|
+
maxItems: z53.number().int().positive().nullable(),
|
|
19158
|
+
allowConversion: z53.boolean(),
|
|
19159
|
+
schema: z53.object({
|
|
19074
19160
|
fields: llmNestedFieldsSchema
|
|
19075
19161
|
})
|
|
19076
19162
|
});
|
|
19077
|
-
var llmFieldSchema =
|
|
19163
|
+
var llmFieldSchema = z53.union([
|
|
19078
19164
|
llmTextFieldSchema,
|
|
19079
19165
|
llmRichTextFieldSchema,
|
|
19080
19166
|
llmMediaFieldSchema,
|
|
@@ -19085,64 +19171,64 @@ var llmFieldSchema = z52.union([
|
|
|
19085
19171
|
llmGroupFieldSchema,
|
|
19086
19172
|
llmRepeaterFieldSchema
|
|
19087
19173
|
]);
|
|
19088
|
-
var llmBindingSchema =
|
|
19089
|
-
from:
|
|
19090
|
-
fallback:
|
|
19091
|
-
transforms:
|
|
19092
|
-
id:
|
|
19174
|
+
var llmBindingSchema = z53.object({
|
|
19175
|
+
from: z53.string(),
|
|
19176
|
+
fallback: z53.string().nullable(),
|
|
19177
|
+
transforms: z53.array(z53.object({
|
|
19178
|
+
id: z53.string()
|
|
19093
19179
|
})).nullable()
|
|
19094
19180
|
});
|
|
19095
|
-
var llmRepeatSchema =
|
|
19096
|
-
collection:
|
|
19097
|
-
itemName:
|
|
19181
|
+
var llmRepeatSchema = z53.object({
|
|
19182
|
+
collection: z53.object({ from: z53.string() }),
|
|
19183
|
+
itemName: z53.string()
|
|
19098
19184
|
});
|
|
19099
|
-
var llmPropsSchema =
|
|
19185
|
+
var llmPropsSchema = z53.object({}).passthrough().nullable();
|
|
19100
19186
|
function buildLlmNodeSchema(maxDepth) {
|
|
19101
|
-
const nodeBase =
|
|
19102
|
-
type:
|
|
19187
|
+
const nodeBase = z53.object({
|
|
19188
|
+
type: z53.string(),
|
|
19103
19189
|
props: llmPropsSchema,
|
|
19104
19190
|
$bind: llmBindingSchema.nullable(),
|
|
19105
19191
|
$repeat: llmRepeatSchema.nullable(),
|
|
19106
|
-
$when:
|
|
19107
|
-
condition:
|
|
19192
|
+
$when: z53.object({
|
|
19193
|
+
condition: z53.object({ from: z53.string() })
|
|
19108
19194
|
}).nullable()
|
|
19109
19195
|
});
|
|
19110
|
-
let schema = nodeBase.extend({ children:
|
|
19196
|
+
let schema = nodeBase.extend({ children: z53.null() });
|
|
19111
19197
|
for (let i = 0; i < maxDepth; i++) {
|
|
19112
|
-
schema = nodeBase.extend({ children:
|
|
19198
|
+
schema = nodeBase.extend({ children: z53.array(schema).nullable() });
|
|
19113
19199
|
}
|
|
19114
19200
|
return schema;
|
|
19115
19201
|
}
|
|
19116
19202
|
var MAX_LAYOUT_DEPTH = 6;
|
|
19117
19203
|
var llmNodeSchema = buildLlmNodeSchema(MAX_LAYOUT_DEPTH);
|
|
19118
|
-
var llmCustomBlockSchema =
|
|
19119
|
-
id:
|
|
19204
|
+
var llmCustomBlockSchema = z53.object({
|
|
19205
|
+
id: z53.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
|
|
19120
19206
|
message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
|
|
19121
19207
|
}),
|
|
19122
|
-
title:
|
|
19208
|
+
title: z53.string().min(1, "Title is required"),
|
|
19123
19209
|
// Keep in sync with `sdkCustomBlockSchema` and the system manifest schema:
|
|
19124
19210
|
// - `null` used by OpenAI structured output for "optional" values
|
|
19125
19211
|
// - array allows multi-part titles (e.g. ["navLabel", "title"])
|
|
19126
19212
|
titleSource: titleSourceValueSchema.nullable(),
|
|
19127
|
-
description:
|
|
19213
|
+
description: z53.string().nullable(),
|
|
19128
19214
|
category: blockCategoryEnum2,
|
|
19129
|
-
icon:
|
|
19130
|
-
tags:
|
|
19215
|
+
icon: z53.string().nullable(),
|
|
19216
|
+
tags: z53.array(z53.string()).nullable(),
|
|
19131
19217
|
// Use LLM-specific field schema (no z.any() for OpenAI compatibility)
|
|
19132
19218
|
fields: llmFieldSchema.array().min(1, "Custom blocks must have at least one field"),
|
|
19133
19219
|
// Use LLM-specific node schema (no z.any() for OpenAI compatibility)
|
|
19134
19220
|
layout: llmNodeSchema
|
|
19135
19221
|
});
|
|
19136
|
-
var htmlToManifestOutputSchema =
|
|
19137
|
-
blocks:
|
|
19138
|
-
themePatch:
|
|
19139
|
-
customCssRules:
|
|
19140
|
-
customCssAtRules:
|
|
19222
|
+
var htmlToManifestOutputSchema = z53.object({
|
|
19223
|
+
blocks: z53.array(llmCustomBlockSchema).min(1, "At least one block is required").max(10, "Maximum 10 blocks per conversion"),
|
|
19224
|
+
themePatch: z53.array(llmThemePatchOpSchema).nullable(),
|
|
19225
|
+
customCssRules: z53.array(llmCustomCssRuleSchema).nullable(),
|
|
19226
|
+
customCssAtRules: z53.array(llmMediaAtRuleSchema).nullable(),
|
|
19141
19227
|
/**
|
|
19142
19228
|
* Explanation of fixes made when retrying after validation errors.
|
|
19143
19229
|
* Should explain what changes were made and why.
|
|
19144
19230
|
*/
|
|
19145
|
-
fixRationale:
|
|
19231
|
+
fixRationale: z53.string().nullable()
|
|
19146
19232
|
});
|
|
19147
19233
|
function collectValidationErrors(output) {
|
|
19148
19234
|
const errors = [];
|
|
@@ -19977,20 +20063,20 @@ function formatValidationFeedback(errors, output) {
|
|
|
19977
20063
|
}
|
|
19978
20064
|
|
|
19979
20065
|
// src/manifest/passes/pass3-styling.ts
|
|
19980
|
-
var pass3aOutputSchema =
|
|
19981
|
-
classNamePatches:
|
|
19982
|
-
|
|
19983
|
-
nodePath:
|
|
20066
|
+
var pass3aOutputSchema = z54.object({
|
|
20067
|
+
classNamePatches: z54.array(
|
|
20068
|
+
z54.object({
|
|
20069
|
+
nodePath: z54.string(),
|
|
19984
20070
|
// "" for root, "children[0]", "children[0].children[1]" etc.
|
|
19985
|
-
className:
|
|
20071
|
+
className: z54.string().min(1)
|
|
19986
20072
|
})
|
|
19987
20073
|
),
|
|
19988
|
-
rationale:
|
|
20074
|
+
rationale: z54.string()
|
|
19989
20075
|
});
|
|
19990
|
-
var pass3bOutputSchema =
|
|
19991
|
-
customCssRules:
|
|
19992
|
-
customCssAtRules:
|
|
19993
|
-
rationale:
|
|
20076
|
+
var pass3bOutputSchema = z54.object({
|
|
20077
|
+
customCssRules: z54.array(llmCustomCssRuleSchema).nullable(),
|
|
20078
|
+
customCssAtRules: z54.array(llmMediaAtRuleSchema).nullable(),
|
|
20079
|
+
rationale: z54.string()
|
|
19994
20080
|
});
|
|
19995
20081
|
function getNodeAtPath(layout, path2) {
|
|
19996
20082
|
if (path2 === "" || path2 === "root" || path2 === "layout") {
|
|
@@ -20297,38 +20383,38 @@ Do NOT include [data-block=...] in selectors - we add that automatically.
|
|
|
20297
20383
|
|
|
20298
20384
|
// src/page-converter/passes/pass1-segmentation-matching.ts
|
|
20299
20385
|
var SIZE_WARNING_BYTES = 100 * 1024;
|
|
20300
|
-
var sectionTypeEnum =
|
|
20301
|
-
var blockCategoryEnum3 =
|
|
20302
|
-
var baseSectionSchema =
|
|
20303
|
-
html:
|
|
20304
|
-
purpose:
|
|
20386
|
+
var sectionTypeEnum = z55.enum(["header", "content", "footer"]);
|
|
20387
|
+
var blockCategoryEnum3 = z55.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
|
|
20388
|
+
var baseSectionSchema = z55.object({
|
|
20389
|
+
html: z55.string().min(1),
|
|
20390
|
+
purpose: z55.string().min(1),
|
|
20305
20391
|
sectionType: sectionTypeEnum
|
|
20306
20392
|
});
|
|
20307
20393
|
var builtinMatchSchema = baseSectionSchema.extend({
|
|
20308
|
-
decision:
|
|
20309
|
-
matchedBlock:
|
|
20310
|
-
matchScore:
|
|
20311
|
-
matchRationale:
|
|
20394
|
+
decision: z55.literal("builtin"),
|
|
20395
|
+
matchedBlock: z55.string().min(1),
|
|
20396
|
+
matchScore: z55.number().min(0).max(100),
|
|
20397
|
+
matchRationale: z55.string().min(1)
|
|
20312
20398
|
});
|
|
20313
20399
|
var customMatchSchema = baseSectionSchema.extend({
|
|
20314
|
-
decision:
|
|
20315
|
-
customBlockSuggestion:
|
|
20316
|
-
title:
|
|
20400
|
+
decision: z55.literal("custom"),
|
|
20401
|
+
customBlockSuggestion: z55.object({
|
|
20402
|
+
title: z55.string().min(1),
|
|
20317
20403
|
category: blockCategoryEnum3
|
|
20318
20404
|
})
|
|
20319
20405
|
});
|
|
20320
|
-
var sectionMatchSchema =
|
|
20406
|
+
var sectionMatchSchema = z55.discriminatedUnion("decision", [
|
|
20321
20407
|
builtinMatchSchema,
|
|
20322
20408
|
customMatchSchema
|
|
20323
20409
|
]);
|
|
20324
|
-
var skippedContentSchema =
|
|
20325
|
-
description:
|
|
20326
|
-
reason:
|
|
20410
|
+
var skippedContentSchema = z55.object({
|
|
20411
|
+
description: z55.string(),
|
|
20412
|
+
reason: z55.string()
|
|
20327
20413
|
});
|
|
20328
|
-
var combinedPassSchema =
|
|
20329
|
-
sections:
|
|
20330
|
-
skippedContent:
|
|
20331
|
-
rationale:
|
|
20414
|
+
var combinedPassSchema = z55.object({
|
|
20415
|
+
sections: z55.array(sectionMatchSchema).min(1),
|
|
20416
|
+
skippedContent: z55.array(skippedContentSchema).nullable(),
|
|
20417
|
+
rationale: z55.string()
|
|
20332
20418
|
});
|
|
20333
20419
|
function buildSystemPrompt(availableBlocks, matchThreshold) {
|
|
20334
20420
|
const blockCatalog = availableBlocks.map((b) => {
|
|
@@ -20535,10 +20621,10 @@ async function segmentAndMatchBlocks(html, availableBlocks, ctx) {
|
|
|
20535
20621
|
}
|
|
20536
20622
|
|
|
20537
20623
|
// src/page-converter/passes/pass2-population.ts
|
|
20538
|
-
import { z as
|
|
20624
|
+
import { z as z57 } from "zod";
|
|
20539
20625
|
|
|
20540
20626
|
// src/manifest/three-pass-converter.ts
|
|
20541
|
-
import { z as
|
|
20627
|
+
import { z as z56 } from "zod";
|
|
20542
20628
|
|
|
20543
20629
|
// src/manifest/prompt/theme-summary.ts
|
|
20544
20630
|
var WEIGHT_MAP = {
|
|
@@ -20874,9 +20960,9 @@ function mapPass1FieldToOutputField(field) {
|
|
|
20874
20960
|
maxLength: null
|
|
20875
20961
|
};
|
|
20876
20962
|
}
|
|
20877
|
-
var pass2OutputSchema =
|
|
20963
|
+
var pass2OutputSchema = z56.object({
|
|
20878
20964
|
layout: llmNodeSchema,
|
|
20879
|
-
rationale:
|
|
20965
|
+
rationale: z56.string().describe("Explain which node binds to which field")
|
|
20880
20966
|
});
|
|
20881
20967
|
function buildPass2SystemPrompt(fields3, contentTypeApproach) {
|
|
20882
20968
|
const fieldList = fields3.map((f) => {
|
|
@@ -21736,9 +21822,9 @@ async function convertHtmlToManifest(input, options) {
|
|
|
21736
21822
|
}
|
|
21737
21823
|
|
|
21738
21824
|
// src/page-converter/passes/pass2-population.ts
|
|
21739
|
-
var builtinContentSchema =
|
|
21740
|
-
content:
|
|
21741
|
-
rationale:
|
|
21825
|
+
var builtinContentSchema = z57.object({
|
|
21826
|
+
content: z57.any(),
|
|
21827
|
+
rationale: z57.string()
|
|
21742
21828
|
});
|
|
21743
21829
|
var SECTION_STYLES_ALLOWED_KEYS = /* @__PURE__ */ new Set(["background", "spacing"]);
|
|
21744
21830
|
var BOX_STYLES_ALLOWED_KEYS = /* @__PURE__ */ new Set(["background", "spacing", "raised", "rounded", "border", "fullWidth"]);
|