@riverbankcms/sdk 0.64.0 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/_dts/api/src/aiPlayground.d.ts +18 -11
  2. package/dist/_dts/api/src/apiEndpointTypes.d.ts +12 -0
  3. package/dist/_dts/api/src/bookingOperations.d.ts +1 -1
  4. package/dist/_dts/api/src/endpoints.d.ts +25 -0
  5. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +0 -40
  6. package/dist/_dts/api/src/sdkContracts.d.ts +1 -1
  7. package/dist/_dts/api/src/siteMembers.d.ts +1 -1
  8. package/dist/_dts/api/src/siteOperations.d.ts +1 -1
  9. package/dist/_dts/billing/src/plans/types.d.ts +1 -1
  10. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  11. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  12. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +1 -0
  13. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  14. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +81 -0
  15. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +7 -3
  16. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  17. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +33 -0
  18. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +2 -1
  19. package/dist/_dts/sdk/src/cli/env.d.ts +2 -1
  20. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -1
  21. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +13 -0
  22. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +114 -0
  23. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +26 -48
  24. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +50 -0
  25. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +57 -0
  26. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +5 -0
  27. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +57 -0
  28. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +83 -0
  29. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +67 -14
  30. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +10 -28
  31. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -1
  32. package/dist/_dts/sdk/src/config/dashboard-validation.d.ts +0 -48
  33. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  34. package/dist/_dts/sdk/src/version.d.ts +1 -1
  35. package/dist/_dts/site-commands/src/adapter.d.ts +2 -2
  36. package/dist/_dts/site-commands/src/commands.d.ts +410 -13
  37. package/dist/_dts/site-commands/src/domain.d.ts +3 -3
  38. package/dist/_dts/site-commands/src/exposure.d.ts +41 -0
  39. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  40. package/dist/_dts/site-commands/src/metadata.d.ts +93 -2
  41. package/dist/_dts/site-commands/src/planner.d.ts +13 -6
  42. package/dist/_dts/site-commands/src/refs.d.ts +13 -1
  43. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +1 -0
  44. package/dist/_dts/theme-core/src/palette/utils/onColor.d.ts +2 -0
  45. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +83 -0
  46. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  47. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +89 -12
  48. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +8 -2
  49. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  50. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +3 -2
  51. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -6
  52. package/dist/_dts/ui/src/callout.d.ts +1 -1
  53. package/dist/cli/index.mjs +4290 -2513
  54. package/dist/client/client.mjs +598 -372
  55. package/dist/client/hooks.mjs +311 -123
  56. package/dist/client/rendering/client.mjs +209 -68
  57. package/dist/client/rendering/islands.mjs +281 -150
  58. package/dist/client/rendering.mjs +416 -190
  59. package/dist/preview-next/before-render.mjs +61 -13
  60. package/dist/preview-next/client/runtime.mjs +930 -376
  61. package/dist/preview-next/middleware.mjs +61 -13
  62. package/dist/server/components.mjs +526 -325
  63. package/dist/server/config-validation.mjs +313 -125
  64. package/dist/server/config.mjs +313 -125
  65. package/dist/server/data.mjs +311 -123
  66. package/dist/server/index.mjs +78 -16
  67. package/dist/server/next.mjs +527 -326
  68. package/dist/server/page-converter.mjs +159 -41
  69. package/dist/server/prebuild.mjs +1 -1
  70. package/dist/server/rendering/server.mjs +526 -325
  71. package/dist/server/rendering.mjs +526 -325
  72. package/dist/server/routing.mjs +392 -131
  73. package/dist/server/server.mjs +312 -124
  74. package/dist/server/theme-bridge.mjs +155 -48
  75. package/package.json +1 -1
  76. package/dist/_dts/path-utils/src/index.d.ts +0 -8
  77. package/dist/_dts/path-utils/src/redirectPaths.d.ts +0 -26
  78. package/dist/_dts/path-utils/src/safeAppPath.d.ts +0 -26
@@ -2,6 +2,7 @@ export * from './adapter';
2
2
  export * from './capabilityGaps';
3
3
  export * from './commands';
4
4
  export * from './domain';
5
+ export * from './exposure';
5
6
  export * from './metadata';
6
7
  export * from './planner';
7
8
  export * from './refContributions';
@@ -69,7 +69,7 @@ export declare const siteCommandMetadata: {
69
69
  };
70
70
  readonly upsertBlockTree: {
71
71
  readonly scope: "block";
72
- readonly risk: "low";
72
+ readonly risk: "high";
73
73
  readonly writeSemantics: "replace";
74
74
  readonly lifecycleIntent: "mutation";
75
75
  readonly idempotencyStrategy: "recipe_ref";
@@ -80,6 +80,45 @@ export declare const siteCommandMetadata: {
80
80
  readonly capability: "pages.blocks.write";
81
81
  readonly support: "supported";
82
82
  };
83
+ readonly upsertPageBlock: {
84
+ readonly scope: "block";
85
+ readonly risk: "low";
86
+ readonly writeSemantics: "upsert";
87
+ readonly lifecycleIntent: "mutation";
88
+ readonly idempotencyStrategy: "recipe_ref";
89
+ readonly conflictPolicy: "update_existing";
90
+ readonly previewability: "static_preview";
91
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
92
+ readonly intendedExposure: readonly ["recipe", "sdk_cli", "onboarding_planner", "ai_proposal", "internal_apply"];
93
+ readonly capability: "pages.blocks.write";
94
+ readonly support: "supported";
95
+ };
96
+ readonly deletePageBlock: {
97
+ readonly scope: "block";
98
+ readonly risk: "medium";
99
+ readonly writeSemantics: "delete";
100
+ readonly lifecycleIntent: "mutation";
101
+ readonly idempotencyStrategy: "existing_id";
102
+ readonly conflictPolicy: "update_existing";
103
+ readonly previewability: "effect_required";
104
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
105
+ readonly intendedExposure: readonly ["sdk_cli", "internal_apply"];
106
+ readonly capability: "pages.blocks.delete";
107
+ readonly support: "supported";
108
+ };
109
+ readonly reorderPageBlocks: {
110
+ readonly scope: "block";
111
+ readonly risk: "medium";
112
+ readonly writeSemantics: "order_transition";
113
+ readonly lifecycleIntent: "mutation";
114
+ readonly idempotencyStrategy: "recipe_ref";
115
+ readonly conflictPolicy: "update_existing";
116
+ readonly previewability: "static_preview";
117
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
118
+ readonly intendedExposure: readonly ["recipe", "sdk_cli", "onboarding_planner", "ai_proposal", "internal_apply"];
119
+ readonly capability: "pages.blocks.reorder";
120
+ readonly support: "supported";
121
+ };
83
122
  readonly upsertNavigationMenu: {
84
123
  readonly scope: "navigation";
85
124
  readonly risk: "low";
@@ -93,6 +132,32 @@ export declare const siteCommandMetadata: {
93
132
  readonly capability: "navigation.write";
94
133
  readonly support: "supported";
95
134
  };
135
+ readonly upsertForm: {
136
+ readonly scope: "form";
137
+ readonly risk: "low";
138
+ readonly writeSemantics: "upsert";
139
+ readonly lifecycleIntent: "mutation";
140
+ readonly idempotencyStrategy: "natural_key";
141
+ readonly conflictPolicy: "update_existing";
142
+ readonly previewability: "static_preview";
143
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
144
+ readonly intendedExposure: readonly ["sdk_cli", "internal_apply"];
145
+ readonly capability: "forms.write";
146
+ readonly support: "supported";
147
+ };
148
+ readonly upsertFooterContent: {
149
+ readonly scope: "footer";
150
+ readonly risk: "low";
151
+ readonly writeSemantics: "upsert";
152
+ readonly lifecycleIntent: "mutation";
153
+ readonly idempotencyStrategy: "existing_id";
154
+ readonly conflictPolicy: "update_existing";
155
+ readonly previewability: "static_preview";
156
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
157
+ readonly intendedExposure: readonly ["sdk_cli", "internal_apply"];
158
+ readonly capability: "footer.write";
159
+ readonly support: "supported";
160
+ };
96
161
  readonly upsertContentEntry: {
97
162
  readonly scope: "content";
98
163
  readonly risk: "low";
@@ -119,6 +184,19 @@ export declare const siteCommandMetadata: {
119
184
  readonly capability: "pages.publish";
120
185
  readonly support: "supported";
121
186
  };
187
+ readonly unpublishPage: {
188
+ readonly scope: "publish";
189
+ readonly risk: "medium";
190
+ readonly writeSemantics: "status_transition";
191
+ readonly lifecycleIntent: "unpublish";
192
+ readonly idempotencyStrategy: "existing_id";
193
+ readonly conflictPolicy: "update_existing";
194
+ readonly previewability: "effect_required";
195
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
196
+ readonly intendedExposure: readonly ["sdk_cli", "internal_apply"];
197
+ readonly capability: "pages.unpublish";
198
+ readonly support: "supported";
199
+ };
122
200
  readonly publishContentEntry: {
123
201
  readonly scope: "publish";
124
202
  readonly risk: "medium";
@@ -136,7 +214,7 @@ export declare const siteCommandMetadata: {
136
214
  readonly scope: "publish";
137
215
  readonly risk: "medium";
138
216
  readonly writeSemantics: "status_transition";
139
- readonly lifecycleIntent: "publish";
217
+ readonly lifecycleIntent: "unpublish";
140
218
  readonly idempotencyStrategy: "existing_id";
141
219
  readonly conflictPolicy: "update_existing";
142
220
  readonly previewability: "effect_required";
@@ -353,6 +431,19 @@ export declare const siteCommandMetadata: {
353
431
  readonly capability: "bookings.pass_redemptions.write";
354
432
  readonly support: "supported";
355
433
  };
434
+ readonly seedPortalOrder: {
435
+ readonly scope: "order";
436
+ readonly risk: "medium";
437
+ readonly writeSemantics: "append";
438
+ readonly lifecycleIntent: "seed";
439
+ readonly idempotencyStrategy: "natural_key";
440
+ readonly conflictPolicy: "append_once";
441
+ readonly previewability: "dry_run_only";
442
+ readonly allowedRuntimes: readonly ["development", "staging", "demo", "production"];
443
+ readonly intendedExposure: readonly ["recipe", "onboarding_planner", "internal_apply"];
444
+ readonly capability: "commerce.orders.write";
445
+ readonly support: "supported";
446
+ };
356
447
  readonly upsertAppointmentService: {
357
448
  readonly scope: "appointment_service";
358
449
  readonly risk: "medium";
@@ -2,17 +2,17 @@ import { type Result } from '@riverbankcms/core';
2
2
  import { type SiteCommand, type SiteCommandBatch, type SiteCommandOf, type SiteCommandType } from './commands';
3
3
  import { type CommandRisk, type LifecycleIntent, type SiteCommandCapabilityGap, type SiteCommandIdempotencyKey, type SiteCommandMetadata, type SiteCommandValidationError } from './domain';
4
4
  import { type ResourceRef } from './refs';
5
- export type PlannedSiteCommandFor<TType extends SiteCommandType> = Readonly<{
6
- command: SiteCommandOf<TType>;
5
+ type PlannedSiteCommandCommon = Readonly<{
7
6
  metadata: SiteCommandMetadata;
8
7
  lifecycleIntent: LifecycleIntent;
9
8
  provides: readonly ResourceRef[];
10
9
  requires: readonly ResourceRef[];
11
10
  idempotencyKey: SiteCommandIdempotencyKey;
12
11
  }>;
13
- export type PlannedSiteCommand = {
14
- [TType in SiteCommandType]: PlannedSiteCommandFor<TType>;
15
- }[SiteCommandType];
12
+ export type PlannedSiteCommandFor<TType extends SiteCommandType> = PlannedSiteCommandCommon & Readonly<{
13
+ command: SiteCommandOf<TType>;
14
+ }>;
15
+ export type PlannedSiteCommand = PlannedSiteCommandFor<SiteCommandType>;
16
16
  export type SiteCommandPlan = Readonly<{
17
17
  batch: SiteCommandBatch;
18
18
  commands: readonly PlannedSiteCommand[];
@@ -24,8 +24,13 @@ export type PlannedSiteCommandOf<TType extends SiteCommandType> = {
24
24
  export type SiteCommandPlanFor<TType extends SiteCommandType> = Omit<SiteCommandPlan, 'commands'> & Readonly<{
25
25
  commands: readonly PlannedSiteCommandOf<TType>[];
26
26
  }>;
27
+ export type PlannedSiteCommandDispatcher<TResult> = <TType extends SiteCommandType>(plannedCommand: PlannedSiteCommandFor<TType>) => TResult;
28
+ export type SiteCommandMatcher<TResult> = <TType extends SiteCommandType>(command: SiteCommandOf<TType>) => TResult;
27
29
  export declare function parseCommandBatch(input: unknown): Result<SiteCommandBatch, readonly SiteCommandValidationError[]>;
28
30
  export declare function planCommandBatch(batch: SiteCommandBatch): Result<SiteCommandPlan, readonly SiteCommandValidationError[]>;
31
+ export declare function matchSiteCommand<TResult>(command: SiteCommand, match: SiteCommandMatcher<TResult>): TResult;
32
+ export declare function dispatchPlannedSiteCommand<TResult>(plannedCommand: PlannedSiteCommand, dispatch: PlannedSiteCommandDispatcher<TResult>): TResult;
33
+ export declare function matchPlannedSiteCommand<TResult>(plannedCommand: PlannedSiteCommand, match: PlannedSiteCommandDispatcher<TResult>): TResult;
29
34
  export declare function parseAndPlanCommandBatch(input: unknown): Result<SiteCommandPlan, readonly SiteCommandValidationError[]>;
30
35
  export declare function parseAndPlanCommandBatchForTypes<TType extends SiteCommandType>(input: unknown, allowedTypes: readonly TType[]): Result<SiteCommandPlanFor<TType>, readonly SiteCommandValidationError[]>;
31
36
  export declare function narrowSiteCommandPlan<TType extends SiteCommandType>(plan: SiteCommandPlan, allowedTypes: readonly TType[]): Result<SiteCommandPlanFor<TType>, readonly SiteCommandValidationError[]>;
@@ -39,6 +44,7 @@ export type DryRunReport = Readonly<{
39
44
  commandCount: number;
40
45
  mutationCount: number;
41
46
  publishCount: number;
47
+ unpublishCount: number;
42
48
  seedCount: number;
43
49
  riskSummary: Readonly<Record<CommandRisk, number>>;
44
50
  executionOrder: readonly Readonly<{
@@ -48,4 +54,5 @@ export type DryRunReport = Readonly<{
48
54
  resolvedRefs: readonly ResourceRef[];
49
55
  capabilityGaps: readonly SiteCommandCapabilityGap[];
50
56
  }>;
51
- export declare function createDryRunReport(plan: SiteCommandPlan): DryRunReport;
57
+ export declare function createDryRunReport<TType extends SiteCommandType>(plan: SiteCommandPlan | SiteCommandPlanFor<TType>): DryRunReport;
58
+ export {};
@@ -1,5 +1,5 @@
1
1
  import { type Brand, type Result } from '@riverbankcms/core';
2
- export declare const resourceKinds: readonly ["site-style", "media", "page", "block", "blocks", "nav", "content", "staff", "venue", "event", "course", "ticket", "pass", "membership", "customer", "customer-pass", "customer-membership", "appointment", "course-enrollment", "event-registration", "pass-redemption", "appointment-service", "appointment-resource", "availability"];
2
+ export declare const resourceKinds: readonly ["site-style", "media", "page", "block", "blocks", "nav", "form", "footer", "content", "staff", "venue", "event", "course", "ticket", "pass", "membership", "customer", "customer-pass", "customer-membership", "appointment", "course-enrollment", "event-registration", "pass-redemption", "order", "appointment-service", "appointment-resource", "availability"];
3
3
  export type ResourceKind = (typeof resourceKinds)[number];
4
4
  export type CommandRef = Brand<`${string}:${string}`, 'SiteCommandRef:command'>;
5
5
  export type SiteStyleRef = Brand<`site-style:${string}`, 'SiteCommandResourceRef:site-style'>;
@@ -8,6 +8,8 @@ export type PageRef = Brand<`page:${string}`, 'SiteCommandResourceRef:page'>;
8
8
  export type BlockRef = Brand<`block:${string}`, 'SiteCommandResourceRef:block'>;
9
9
  export type BlocksRef = Brand<`blocks:${string}`, 'SiteCommandResourceRef:blocks'>;
10
10
  export type NavigationRef = Brand<`nav:${string}`, 'SiteCommandResourceRef:nav'>;
11
+ export type FormRef = Brand<`form:${string}`, 'SiteCommandResourceRef:form'>;
12
+ export type FooterRef = Brand<`footer:${string}`, 'SiteCommandResourceRef:footer'>;
11
13
  export type ContentEntryRef = Brand<`content:${string}`, 'SiteCommandResourceRef:content'>;
12
14
  export type StaffRef = Brand<`staff:${string}`, 'SiteCommandResourceRef:staff'>;
13
15
  export type VenueRef = Brand<`venue:${string}`, 'SiteCommandResourceRef:venue'>;
@@ -23,6 +25,7 @@ export type AppointmentBookingRef = Brand<`appointment:${string}`, 'SiteCommandR
23
25
  export type CourseEnrollmentRef = Brand<`course-enrollment:${string}`, 'SiteCommandResourceRef:course-enrollment'>;
24
26
  export type EventRegistrationRef = Brand<`event-registration:${string}`, 'SiteCommandResourceRef:event-registration'>;
25
27
  export type PassRedemptionRef = Brand<`pass-redemption:${string}`, 'SiteCommandResourceRef:pass-redemption'>;
28
+ export type OrderRef = Brand<`order:${string}`, 'SiteCommandResourceRef:order'>;
26
29
  export type AppointmentServiceRef = Brand<`appointment-service:${string}`, 'SiteCommandResourceRef:appointment-service'>;
27
30
  export type AppointmentResourceRef = Brand<`appointment-resource:${string}`, 'SiteCommandResourceRef:appointment-resource'>;
28
31
  export type AppointmentAvailabilityRef = Brand<`availability:${string}`, 'SiteCommandResourceRef:availability'>;
@@ -34,6 +37,8 @@ export type ResourceRefByKind = Readonly<{
34
37
  block: BlockRef;
35
38
  blocks: BlocksRef;
36
39
  nav: NavigationRef;
40
+ form: FormRef;
41
+ footer: FooterRef;
37
42
  content: ContentEntryRef;
38
43
  staff: StaffRef;
39
44
  venue: VenueRef;
@@ -49,6 +54,7 @@ export type ResourceRefByKind = Readonly<{
49
54
  'course-enrollment': CourseEnrollmentRef;
50
55
  'event-registration': EventRegistrationRef;
51
56
  'pass-redemption': PassRedemptionRef;
57
+ order: OrderRef;
52
58
  'appointment-service': AppointmentServiceRef;
53
59
  'appointment-resource': AppointmentResourceRef;
54
60
  availability: AppointmentAvailabilityRef;
@@ -68,6 +74,12 @@ export type RefParseError = Readonly<{
68
74
  export declare function isCommandRef(value: string): boolean;
69
75
  export declare function createCommandRef(prefix: string, parts: readonly string[]): CommandRef;
70
76
  export declare function createContentEntryRef(parts: readonly string[]): ContentEntryRef;
77
+ export declare function createPageRef(parts: readonly string[]): PageRef;
78
+ export declare function createBlockRef(parts: readonly string[]): BlockRef;
79
+ export declare function createBlocksRef(parts: readonly string[]): BlocksRef;
80
+ export declare function createNavigationRef(parts: readonly string[]): NavigationRef;
81
+ export declare function createFormRef(parts: readonly string[]): FormRef;
82
+ export declare function createFooterRef(parts: readonly string[]): FooterRef;
71
83
  export declare function createSiteCommandSiteRef(parts: readonly string[]): SiteCommandSiteRef;
72
84
  export declare function refSlug(ref: SiteCommandRef | string): string;
73
85
  export declare function parseResourceRef(value: string): Result<ResourceRef, RefParseError>;
@@ -6,3 +6,4 @@ export * from './suggestRecipes';
6
6
  export * from './generatePalette';
7
7
  export * from './textColor';
8
8
  export * from './legibility';
9
+ export * from './onColor';
@@ -0,0 +1,2 @@
1
+ export declare function onColorTokenName(backgroundToken: string): string;
2
+ export declare function isOnColorBackgroundCandidateToken(token: string): boolean;
@@ -0,0 +1,83 @@
1
+ import type { ExpandedPalette } from '../palette/expandPalette';
2
+ import type { SiteStyleSurfaceIntent } from './types';
3
+ export type AccessibleColorSurfaceIntent = Exclude<SiteStyleSurfaceIntent, 'hero-image'>;
4
+ export type ContrastPolicy = 'body-aa' | 'large-text-aa' | 'decorative';
5
+ export type ForegroundRole = 'heading' | 'text' | 'supporting';
6
+ export type AccessibleSurfaceToken = string & {
7
+ readonly __brand: 'AccessibleSurfaceToken';
8
+ };
9
+ export type ForegroundFallbackReason = 'supporting-token-unsafe';
10
+ export type ResolvedForeground = Readonly<{
11
+ kind: 'safe-token';
12
+ role: ForegroundRole;
13
+ token: AccessibleSurfaceToken;
14
+ hex: string;
15
+ contrastRatio: number;
16
+ }> | Readonly<{
17
+ kind: 'fallback-to-text';
18
+ role: Extract<ForegroundRole, 'supporting'>;
19
+ token: AccessibleSurfaceToken;
20
+ hex: string;
21
+ contrastRatio: number;
22
+ reason: ForegroundFallbackReason;
23
+ }>;
24
+ export type RejectedBackgroundCandidate = Readonly<{
25
+ kind: 'background-candidate';
26
+ token: string;
27
+ reason: 'missing-token';
28
+ }>;
29
+ export type RejectedForegroundCandidate = Readonly<{
30
+ kind: 'foreground-candidate';
31
+ role: ForegroundRole;
32
+ token: string;
33
+ }> & (Readonly<{
34
+ reason: 'missing-token';
35
+ }> | Readonly<{
36
+ reason: 'contrast-too-low';
37
+ contrastRatio: number;
38
+ }>);
39
+ export type RejectedSurfaceCandidate = RejectedBackgroundCandidate | RejectedForegroundCandidate;
40
+ export type ResolvedAccessibleSurface = Readonly<{
41
+ kind: 'resolved-accessible-surface';
42
+ surface: AccessibleColorSurfaceIntent;
43
+ background: Readonly<{
44
+ token: AccessibleSurfaceToken;
45
+ hex: string;
46
+ inherited: boolean;
47
+ }>;
48
+ heading: Extract<ResolvedForeground, {
49
+ kind: 'safe-token';
50
+ }>;
51
+ text: Extract<ResolvedForeground, {
52
+ kind: 'safe-token';
53
+ }>;
54
+ supporting: ResolvedForeground;
55
+ rejectedCandidates: readonly RejectedSurfaceCandidate[];
56
+ }>;
57
+ export type AccessibleSurfaceResolutionFailure = Readonly<{
58
+ kind: 'accessible-surface-resolution-failure';
59
+ surface: AccessibleColorSurfaceIntent;
60
+ reason: 'no-background-candidate' | 'no-safe-foreground-candidate';
61
+ rejectedCandidates: readonly RejectedSurfaceCandidate[];
62
+ }>;
63
+ export declare const contrastThresholdByPolicy: {
64
+ readonly 'body-aa': 4.5;
65
+ readonly 'large-text-aa': 3;
66
+ readonly decorative: 1;
67
+ };
68
+ export declare function toAccessibleColorSurfaceIntent(surface: SiteStyleSurfaceIntent): AccessibleColorSurfaceIntent | null;
69
+ export declare function resolveAccessibleSurface(input: Readonly<{
70
+ surface: AccessibleColorSurfaceIntent;
71
+ palette: ExpandedPalette;
72
+ policy?: ContrastPolicy;
73
+ }>): ResolvedAccessibleSurface | AccessibleSurfaceResolutionFailure;
74
+ export declare function resolveAccessibleSurfaceOrTerminalFallback(input: Readonly<{
75
+ surface: AccessibleColorSurfaceIntent;
76
+ palette: ExpandedPalette;
77
+ policy?: ContrastPolicy;
78
+ }>): ResolvedAccessibleSurface;
79
+ export declare function requireResolvedAccessibleSurface(input: Readonly<{
80
+ surface: AccessibleColorSurfaceIntent;
81
+ palette: ExpandedPalette;
82
+ policy?: ContrastPolicy;
83
+ }>): ResolvedAccessibleSurface;
@@ -1,6 +1,6 @@
1
1
  import type { BlockDesignMetadata } from './blockFlow';
2
2
  import { type PageDesignEditorIssue } from './pageDesignEditorModel';
3
- import type { CompiledBlockRuntimeFields } from './runtimeCompiler';
3
+ import type { CompiledBlockRuntimeFields, SurfaceResolutionContext } from './runtimeCompiler';
4
4
  import { type ContentTemplateBlockScope, type ContentTemplateDesignBlockId, type ContentTemplateDesignIntent } from './contentTemplateDesignIntent';
5
5
  import type { LayoutVariantKey } from './types';
6
6
  export type ContentTemplateRuntimeBlockInput = Readonly<{
@@ -23,4 +23,5 @@ export type CompiledContentTemplateRuntime = Readonly<{
23
23
  export declare function compileContentTemplateRuntimeFields(input: Readonly<{
24
24
  intent: ContentTemplateDesignIntent;
25
25
  blocks: readonly ContentTemplateRuntimeBlockInput[];
26
+ surfaceResolutionContext: SurfaceResolutionContext;
26
27
  }>): CompiledContentTemplateRuntime;
@@ -5,7 +5,7 @@ import { type HeaderLookId } from './headerLooks';
5
5
  import { type FooterLookId } from './footerLooks';
6
6
  import { type CuratedChoice } from './curatedChoices';
7
7
  import { type AppearancePresetId, type DesignSystemTemplate, type NonEmptyReadonlyArray, type SiteStyleId } from './types';
8
- export declare const curatedSiteStyleIdValues: readonly ["site-style:calm-studio", "site-style:clear-professional", "site-style:warm-editorial", "site-style:bright-community", "site-style:quiet-luxury", "site-style:practical-services", "site-style:modern-wellness", "site-style:bold-launch", "site-style:south-west-twerk-school"];
8
+ export declare const curatedSiteStyleIdValues: readonly ["site-style:calm-studio", "site-style:clear-professional", "site-style:warm-editorial", "site-style:bright-community", "site-style:quiet-luxury", "site-style:practical-services", "site-style:quiet-practice", "site-style:personal-retreat-journal", "site-style:tactile-workshop", "site-style:modern-wellness", "site-style:bold-launch", "site-style:south-west-twerk-school"];
9
9
  export type CuratedSiteStyleIdValue = typeof curatedSiteStyleIdValues[number];
10
10
  type CuratedSiteStyleHeroOverrides = Readonly<{
11
11
  typography?: NonNullable<NonNullable<Theme['hero']>['typography']>;
@@ -32,12 +32,31 @@ export type CuratedSiteStyleThemeOverrides = Readonly<{
32
32
  }>;
33
33
  export type ButtonPersonalityChoice = CuratedChoice<KnownButtonPersonalityId>;
34
34
  export type PaletteVariantChoice = CuratedChoice<KnownPaletteVariantId>;
35
+ export type CuratedSiteStyleSelectionKeywordRule = Readonly<{
36
+ kind: 'phrase';
37
+ value: string;
38
+ }> | Readonly<{
39
+ kind: 'word';
40
+ value: string;
41
+ }> | Readonly<{
42
+ kind: 'substring';
43
+ value: string;
44
+ }>;
45
+ export type CuratedSiteStyleCreatorSelection = Readonly<{
46
+ kind: 'site_creator_keyword_heuristic';
47
+ priority: number;
48
+ }> | Readonly<{
49
+ kind: 'primary_goal_support';
50
+ }> | Readonly<{
51
+ kind: 'explicit_only';
52
+ }>;
35
53
  export type CuratedSiteStyle = Readonly<{
36
54
  id: SiteStyleId;
37
55
  name: string;
38
56
  description: string;
39
57
  generationBrief: string;
40
- selectionKeywords: readonly string[];
58
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
59
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
41
60
  template: DesignSystemTemplate;
42
61
  themeOverrides?: CuratedSiteStyleThemeOverrides;
43
62
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -60,7 +79,56 @@ export declare const curatedSiteStyles: readonly [Readonly<{
60
79
  name: string;
61
80
  description: string;
62
81
  generationBrief: string;
63
- selectionKeywords: readonly string[];
82
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
83
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
84
+ template: DesignSystemTemplate;
85
+ themeOverrides?: CuratedSiteStyleThemeOverrides;
86
+ recommendedAppearancePresetIds: readonly AppearancePresetId[];
87
+ recommendedHeaderLookIds: readonly HeaderLookId[];
88
+ recommendedFooterLookIds: readonly FooterLookId[];
89
+ /** Authored picker choices. First item is the default/fallback. */
90
+ buttonPersonalityChoices: NonEmptyReadonlyArray<ButtonPersonalityChoice>;
91
+ /** Authored picker choices. First item is the default/fallback. */
92
+ paletteVariantChoices: NonEmptyReadonlyArray<PaletteVariantChoice>;
93
+ }>, Readonly<{
94
+ id: SiteStyleId;
95
+ name: string;
96
+ description: string;
97
+ generationBrief: string;
98
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
99
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
100
+ template: DesignSystemTemplate;
101
+ themeOverrides?: CuratedSiteStyleThemeOverrides;
102
+ recommendedAppearancePresetIds: readonly AppearancePresetId[];
103
+ recommendedHeaderLookIds: readonly HeaderLookId[];
104
+ recommendedFooterLookIds: readonly FooterLookId[];
105
+ /** Authored picker choices. First item is the default/fallback. */
106
+ buttonPersonalityChoices: NonEmptyReadonlyArray<ButtonPersonalityChoice>;
107
+ /** Authored picker choices. First item is the default/fallback. */
108
+ paletteVariantChoices: NonEmptyReadonlyArray<PaletteVariantChoice>;
109
+ }>, Readonly<{
110
+ id: SiteStyleId;
111
+ name: string;
112
+ description: string;
113
+ generationBrief: string;
114
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
115
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
116
+ template: DesignSystemTemplate;
117
+ themeOverrides?: CuratedSiteStyleThemeOverrides;
118
+ recommendedAppearancePresetIds: readonly AppearancePresetId[];
119
+ recommendedHeaderLookIds: readonly HeaderLookId[];
120
+ recommendedFooterLookIds: readonly FooterLookId[];
121
+ /** Authored picker choices. First item is the default/fallback. */
122
+ buttonPersonalityChoices: NonEmptyReadonlyArray<ButtonPersonalityChoice>;
123
+ /** Authored picker choices. First item is the default/fallback. */
124
+ paletteVariantChoices: NonEmptyReadonlyArray<PaletteVariantChoice>;
125
+ }>, Readonly<{
126
+ id: SiteStyleId;
127
+ name: string;
128
+ description: string;
129
+ generationBrief: string;
130
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
131
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
64
132
  template: DesignSystemTemplate;
65
133
  themeOverrides?: CuratedSiteStyleThemeOverrides;
66
134
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -75,7 +143,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
75
143
  name: string;
76
144
  description: string;
77
145
  generationBrief: string;
78
- selectionKeywords: readonly string[];
146
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
147
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
79
148
  template: DesignSystemTemplate;
80
149
  themeOverrides?: CuratedSiteStyleThemeOverrides;
81
150
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -90,7 +159,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
90
159
  name: string;
91
160
  description: string;
92
161
  generationBrief: string;
93
- selectionKeywords: readonly string[];
162
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
163
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
94
164
  template: DesignSystemTemplate;
95
165
  themeOverrides?: CuratedSiteStyleThemeOverrides;
96
166
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -105,7 +175,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
105
175
  name: string;
106
176
  description: string;
107
177
  generationBrief: string;
108
- selectionKeywords: readonly string[];
178
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
179
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
109
180
  template: DesignSystemTemplate;
110
181
  themeOverrides?: CuratedSiteStyleThemeOverrides;
111
182
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -120,7 +191,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
120
191
  name: string;
121
192
  description: string;
122
193
  generationBrief: string;
123
- selectionKeywords: readonly string[];
194
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
195
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
124
196
  template: DesignSystemTemplate;
125
197
  themeOverrides?: CuratedSiteStyleThemeOverrides;
126
198
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -135,7 +207,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
135
207
  name: string;
136
208
  description: string;
137
209
  generationBrief: string;
138
- selectionKeywords: readonly string[];
210
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
211
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
139
212
  template: DesignSystemTemplate;
140
213
  themeOverrides?: CuratedSiteStyleThemeOverrides;
141
214
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -150,7 +223,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
150
223
  name: string;
151
224
  description: string;
152
225
  generationBrief: string;
153
- selectionKeywords: readonly string[];
226
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
227
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
154
228
  template: DesignSystemTemplate;
155
229
  themeOverrides?: CuratedSiteStyleThemeOverrides;
156
230
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -165,7 +239,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
165
239
  name: string;
166
240
  description: string;
167
241
  generationBrief: string;
168
- selectionKeywords: readonly string[];
242
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
243
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
169
244
  template: DesignSystemTemplate;
170
245
  themeOverrides?: CuratedSiteStyleThemeOverrides;
171
246
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -180,7 +255,8 @@ export declare const curatedSiteStyles: readonly [Readonly<{
180
255
  name: string;
181
256
  description: string;
182
257
  generationBrief: string;
183
- selectionKeywords: readonly string[];
258
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
259
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
184
260
  template: DesignSystemTemplate;
185
261
  themeOverrides?: CuratedSiteStyleThemeOverrides;
186
262
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -196,7 +272,8 @@ export declare const curatedSiteStylesById: Map<SiteStyleId, Readonly<{
196
272
  name: string;
197
273
  description: string;
198
274
  generationBrief: string;
199
- selectionKeywords: readonly string[];
275
+ selectionKeywordRules: readonly CuratedSiteStyleSelectionKeywordRule[];
276
+ siteCreatorSelection: CuratedSiteStyleCreatorSelection;
200
277
  template: DesignSystemTemplate;
201
278
  themeOverrides?: CuratedSiteStyleThemeOverrides;
202
279
  recommendedAppearancePresetIds: readonly AppearancePresetId[];
@@ -24,10 +24,13 @@ export declare const generatedSiteStyleIdSchema: z.ZodPipe<z.ZodEnum<{
24
24
  "site-style:bright-community": "site-style:bright-community";
25
25
  "site-style:quiet-luxury": "site-style:quiet-luxury";
26
26
  "site-style:practical-services": "site-style:practical-services";
27
+ "site-style:quiet-practice": "site-style:quiet-practice";
28
+ "site-style:personal-retreat-journal": "site-style:personal-retreat-journal";
29
+ "site-style:tactile-workshop": "site-style:tactile-workshop";
27
30
  "site-style:modern-wellness": "site-style:modern-wellness";
28
31
  "site-style:bold-launch": "site-style:bold-launch";
29
32
  "site-style:south-west-twerk-school": "site-style:south-west-twerk-school";
30
- }>, z.ZodTransform<SiteStyleId, "site-style:calm-studio" | "site-style:clear-professional" | "site-style:warm-editorial" | "site-style:bright-community" | "site-style:quiet-luxury" | "site-style:practical-services" | "site-style:modern-wellness" | "site-style:bold-launch" | "site-style:south-west-twerk-school">>;
33
+ }>, z.ZodTransform<SiteStyleId, "site-style:calm-studio" | "site-style:clear-professional" | "site-style:warm-editorial" | "site-style:bright-community" | "site-style:quiet-luxury" | "site-style:practical-services" | "site-style:quiet-practice" | "site-style:personal-retreat-journal" | "site-style:tactile-workshop" | "site-style:modern-wellness" | "site-style:bold-launch" | "site-style:south-west-twerk-school">>;
31
34
  export declare const generatedBlockDesignIntentSchema: z.ZodObject<{
32
35
  sectionSurface: z.ZodDiscriminatedUnion<[z.ZodObject<{
33
36
  source: z.ZodLiteral<"generated">;
@@ -163,10 +166,13 @@ export declare const generatedPageDesignIntentSchema: z.ZodObject<{
163
166
  "site-style:bright-community": "site-style:bright-community";
164
167
  "site-style:quiet-luxury": "site-style:quiet-luxury";
165
168
  "site-style:practical-services": "site-style:practical-services";
169
+ "site-style:quiet-practice": "site-style:quiet-practice";
170
+ "site-style:personal-retreat-journal": "site-style:personal-retreat-journal";
171
+ "site-style:tactile-workshop": "site-style:tactile-workshop";
166
172
  "site-style:modern-wellness": "site-style:modern-wellness";
167
173
  "site-style:bold-launch": "site-style:bold-launch";
168
174
  "site-style:south-west-twerk-school": "site-style:south-west-twerk-school";
169
- }>, z.ZodTransform<SiteStyleId, "site-style:calm-studio" | "site-style:clear-professional" | "site-style:warm-editorial" | "site-style:bright-community" | "site-style:quiet-luxury" | "site-style:practical-services" | "site-style:modern-wellness" | "site-style:bold-launch" | "site-style:south-west-twerk-school">>;
175
+ }>, z.ZodTransform<SiteStyleId, "site-style:calm-studio" | "site-style:clear-professional" | "site-style:warm-editorial" | "site-style:bright-community" | "site-style:quiet-luxury" | "site-style:practical-services" | "site-style:quiet-practice" | "site-style:personal-retreat-journal" | "site-style:tactile-workshop" | "site-style:modern-wellness" | "site-style:bold-launch" | "site-style:south-west-twerk-school">>;
170
176
  blocks: z.ZodArray<z.ZodObject<{
171
177
  blockId: z.ZodString;
172
178
  blockKind: z.ZodString;
@@ -1,3 +1,4 @@
1
+ export * from './accessibleSurfaces';
1
2
  export * from './appearancePresets';
2
3
  export * from './blockFlow';
3
4
  export * from './compositionBudget';
@@ -5,7 +5,7 @@ import { type PaletteOverrides, type PaletteVariantId } from '../palette/variant
5
5
  import { type CuratedSiteStyle } from './curatedSiteStyles';
6
6
  import { type FooterLookId, type FooterSelectionContext, type FooterSelectionResult } from './footerLooks';
7
7
  import { type HeaderSelectionContext, type HeaderLookId, type HeaderSelectionResult } from './headerLooks';
8
- import { type CompiledBlockRuntimeFields, type CompiledPageRuntime, type ComponentRuntimeRules, type DesignRuntimeRules, type SemanticSpacing } from './runtimeCompiler';
8
+ import { type CompiledBlockRuntimeFields, type CompiledPageRuntime, type ComponentRuntimeRules, type DesignRuntimeRules, type SemanticSpacing, type SurfaceResolutionContext } from './runtimeCompiler';
9
9
  import type { AppearancePresetId, DesignBlockId, SiteStyleId } from './types';
10
10
  /**
11
11
  * Browser-safe public API for Theme V2 live preview compilation.
@@ -20,7 +20,7 @@ export { buildPageDesignEditorReadModel, boundaryOptions, pageFlowPresets, type
20
20
  export { autoDesignChoice, reducePageDesignIntentForUserAction, resolvePageDesignBlockLookChoice, resolvePageDesignBoundaryChoice, userPinnedDesignChoice, type PageDesignChoice, type PageDesignIntent, type PageDesignUserAction, } from './pageDesignIntent';
21
21
  export { repairDesignIssue, resolveBlockDesignPlan } from './resolver';
22
22
  export { cycleableOptionsFromResolved, deriveDesignCustomizationScope, recommendedDesignOption, type CycleableDesignOption, type CycleableOptions, type DesignCustomizationAuthority, type DesignCustomizationScope, type DesignCustomizationSurface, type DesignCustomizationUnsupportedReason, type DesignOptionIssue, type ResolvedDesignOption, } from './previewCustomization';
23
- export { compileBlockRuntimeFields, compilePageRuntimeFields, compileTokenRecipes, compiledRuntimeStyleFieldNames, defaultComponentRuntimeRules, defaultDesignRuntimeRules, stripCompiledRuntimeStyleFields, type CompiledBlockRuntime, type CompiledBlockRuntimeFields, type CompiledPageRuntime, type CompileBlockRuntimeInput, type ComponentRuntimeRules, type DesignRuntimeRules, type SemanticSpacing, } from './runtimeCompiler';
23
+ export { compileBlockRuntimeFields, compilePageRuntimeFields, compileTokenRecipes, compiledRuntimeStyleFieldNames, defaultComponentRuntimeRules, defaultDesignRuntimeRules, surfaceResolutionContextFromPalette, surfaceResolutionContextFromTheme, stripCompiledRuntimeStyleFields, type CompiledBlockRuntime, type CompiledBlockRuntimeFields, type CompiledPageRuntime, type CompileBlockRuntimeInput, type ComponentRuntimeRules, type DesignRuntimeRules, type SemanticSpacing, type SurfaceResolutionContext, } from './runtimeCompiler';
24
24
  export { defaultCuratedChoice, requireEntriesForCuratedChoices, resolveCuratedChoice, type CuratedChoice, type CuratedChoiceResolution, } from './curatedChoices';
25
25
  export { curatedSiteStyles, defaultButtonPersonalityForSiteStyle, defaultPaletteVariantForSiteStyle, getCuratedSiteStyle, type CuratedSiteStyle, } from './curatedSiteStyles';
26
26
  export { asDesignBlockId, asSiteStyleId, makeBoundaryId, type AppearancePresetId, type BoundaryOptionId, type DesignBlockId, type DesignBoundaryId, type LayoutVariantKey, type NonEmptyReadonlyArray, type PageFlowPresetId, type ResolvedPageDesignPlan, type SiteStyleId, } from './types';
@@ -98,6 +98,7 @@ export type EditorModelRuntimeLookOverride<TBlockId extends DesignBlockId = Desi
98
98
  }>;
99
99
  export type CompileEditorModelRuntimeInput<TBlockId extends DesignBlockId = DesignBlockId> = Readonly<{
100
100
  editorModel: PageDesignEditorReadModel<TBlockId>;
101
+ surfaceResolutionContext: SurfaceResolutionContext;
101
102
  lookOverrides?: readonly EditorModelRuntimeLookOverride<TBlockId>[];
102
103
  designRules?: DesignRuntimeRules;
103
104
  componentRules?: ComponentRuntimeRules;