@riverbankcms/sdk 0.60.3 → 0.60.6

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 (60) hide show
  1. package/dist/_dts/api/src/bookingVerticals.d.ts +1 -0
  2. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -39
  3. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +2 -0
  4. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
  5. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +11 -0
  6. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
  7. package/dist/_dts/core/src/participants.d.ts +32 -1
  8. package/dist/_dts/core/src/rectification.d.ts +79 -0
  9. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +6 -6
  10. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +17 -15
  11. package/dist/_dts/sdk/src/client/types.d.ts +1 -0
  12. package/dist/_dts/sdk/src/version.d.ts +1 -1
  13. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +7 -2
  14. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +7 -2
  15. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +7 -2
  16. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +86 -5
  17. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +7 -2
  18. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +7 -2
  19. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +7 -2
  20. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
  21. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +33 -9
  22. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +33 -9
  23. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +200 -4
  24. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +33 -9
  25. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +10 -10
  26. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +33 -9
  27. package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
  28. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -194
  29. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -1
  30. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +12 -14
  31. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
  32. package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
  33. package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
  34. package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
  35. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
  36. package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
  37. package/dist/_dts/ui/src/palette/index.d.ts +14 -0
  38. package/dist/cli/index.mjs +1023 -923
  39. package/dist/client/client.mjs +3410 -3221
  40. package/dist/client/hooks.mjs +1625 -1564
  41. package/dist/client/rendering/client.mjs +132 -37
  42. package/dist/client/rendering/islands.mjs +91 -30
  43. package/dist/client/rendering.mjs +1237 -1049
  44. package/dist/preview-next/client/runtime.mjs +3095 -2736
  45. package/dist/server/components.mjs +2381 -2255
  46. package/dist/server/config-validation.mjs +1625 -1564
  47. package/dist/server/config.mjs +1625 -1564
  48. package/dist/server/data.mjs +1625 -1564
  49. package/dist/server/index.mjs +4 -3
  50. package/dist/server/next.mjs +3233 -3106
  51. package/dist/server/page-converter.mjs +1625 -1564
  52. package/dist/server/prebuild.mjs +1 -1
  53. package/dist/server/rendering/server.mjs +2381 -2255
  54. package/dist/server/rendering.mjs +2381 -2255
  55. package/dist/server/routing.mjs +2340 -2271
  56. package/dist/server/server.mjs +1629 -1567
  57. package/dist/server/theme-bridge.mjs +130 -126
  58. package/dist/server/theme.mjs +131 -129
  59. package/package.json +1 -1
  60. package/dist/_dts/theme-core/src/site-styles/compatibility.d.ts +0 -109
@@ -1,31 +1,31 @@
1
1
  import { z } from 'zod';
2
2
  import { type ButtonSystem } from '../types';
3
- import { type StyleTags } from '../../site-styles/compatibility';
3
+ import { type StyleTags } from '../../site-styles/styleTags';
4
4
  /**
5
5
  * Branded ID for a button personality entry in the curated library.
6
6
  * Shape matches the `Brand<T, TBrand>` convention in `site-styles/types.ts`
7
7
  * (kept structurally compatible until that alias is hoisted to a shared file).
8
8
  * Use `asButtonPersonalityId` at the parse/construction boundary.
9
9
  */
10
- export type ButtonPersonalityId = string & {
10
+ export type ButtonPersonalityId<T extends string = string> = T & {
11
11
  readonly __brand: 'ButtonPersonalityId';
12
12
  };
13
- export declare function asButtonPersonalityId(value: string): ButtonPersonalityId;
14
- export declare const buttonPersonalityIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId, string>>;
13
+ export declare function asButtonPersonalityId<const T extends string>(value: T): ButtonPersonalityId<T>;
14
+ export declare const buttonPersonalityIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId<string>, string>>;
15
15
  /**
16
16
  * A button personality is a complete `ButtonSystem` plus the tags that decide
17
17
  * which curated site styles will accept it. The `name` and `description` are
18
18
  * surfaced in the Style configurator UI.
19
19
  */
20
- export type ButtonPersonality = Readonly<{
21
- id: ButtonPersonalityId;
20
+ export type ButtonPersonality<TId extends ButtonPersonalityId = ButtonPersonalityId> = Readonly<{
21
+ id: TId;
22
22
  name: string;
23
23
  description: string;
24
24
  tags: StyleTags;
25
25
  buttonSystem: ButtonSystem;
26
26
  }>;
27
27
  export declare const buttonPersonalitySchema: z.ZodObject<{
28
- id: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId, string>>;
28
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<ButtonPersonalityId<string>, string>>;
29
29
  name: z.ZodString;
30
30
  description: z.ZodString;
31
31
  tags: z.ZodObject<{
@@ -259,10 +259,10 @@ export declare const buttonPersonalitySchema: z.ZodObject<{
259
259
  * type-safe. `as const satisfies ...` would also work but produces wider
260
260
  * types at use sites.
261
261
  */
262
- export declare function defineButtonPersonality(input: {
263
- id: string;
262
+ export declare function defineButtonPersonality<const TId extends string>(input: {
263
+ id: TId;
264
264
  name: string;
265
265
  description: string;
266
266
  tags: StyleTags;
267
267
  buttonSystem: ButtonSystem;
268
- }): ButtonPersonality;
268
+ }): ButtonPersonality<ButtonPersonalityId<TId>>;
@@ -3,26 +3,50 @@
3
3
  * with Clear Professional, Bright Community, Practical Services site styles.
4
4
  */
5
5
  export declare const brandLedCool: Readonly<{
6
- id: import("@riverbankcms/blocks").PaletteVariantId;
6
+ id: import("@riverbankcms/blocks").PaletteVariantId<"brand-led-cool">;
7
7
  name: string;
8
8
  description: string;
9
- tags: import("../../site-styles").StyleTags;
9
+ tags: Readonly<Partial<Readonly<{
10
+ tone: import("../../site-styles").StyleTone;
11
+ energy: import("../../site-styles").StyleEnergy;
12
+ motion: import("../../site-styles").StyleMotion;
13
+ era: import("../../site-styles").StyleEra;
14
+ }>>>;
10
15
  mode: "light" | "dark";
11
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
16
+ colors: readonly Readonly<{
17
+ name: import("@riverbankcms/blocks").PaletteTokenName;
18
+ hex: string;
19
+ }>[];
12
20
  }>;
13
21
  export declare const brandLedWarm: Readonly<{
14
- id: import("@riverbankcms/blocks").PaletteVariantId;
22
+ id: import("@riverbankcms/blocks").PaletteVariantId<"brand-led-warm">;
15
23
  name: string;
16
24
  description: string;
17
- tags: import("../../site-styles").StyleTags;
25
+ tags: Readonly<Partial<Readonly<{
26
+ tone: import("../../site-styles").StyleTone;
27
+ energy: import("../../site-styles").StyleEnergy;
28
+ motion: import("../../site-styles").StyleMotion;
29
+ era: import("../../site-styles").StyleEra;
30
+ }>>>;
18
31
  mode: "light" | "dark";
19
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
32
+ colors: readonly Readonly<{
33
+ name: import("@riverbankcms/blocks").PaletteTokenName;
34
+ hex: string;
35
+ }>[];
20
36
  }>;
21
37
  export declare const brandLedJewel: Readonly<{
22
- id: import("@riverbankcms/blocks").PaletteVariantId;
38
+ id: import("@riverbankcms/blocks").PaletteVariantId<"brand-led-jewel">;
23
39
  name: string;
24
40
  description: string;
25
- tags: import("../../site-styles").StyleTags;
41
+ tags: Readonly<Partial<Readonly<{
42
+ tone: import("../../site-styles").StyleTone;
43
+ energy: import("../../site-styles").StyleEnergy;
44
+ motion: import("../../site-styles").StyleMotion;
45
+ era: import("../../site-styles").StyleEra;
46
+ }>>>;
26
47
  mode: "light" | "dark";
27
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
48
+ colors: readonly Readonly<{
49
+ name: import("@riverbankcms/blocks").PaletteTokenName;
50
+ hex: string;
51
+ }>[];
28
52
  }>;
@@ -3,26 +3,50 @@
3
3
  * Pairs with Quiet Luxury, Bold Launch, Practical Services site styles.
4
4
  */
5
5
  export declare const highContrastInk: Readonly<{
6
- id: import("@riverbankcms/blocks").PaletteVariantId;
6
+ id: import("@riverbankcms/blocks").PaletteVariantId<"high-contrast-ink">;
7
7
  name: string;
8
8
  description: string;
9
- tags: import("../../site-styles").StyleTags;
9
+ tags: Readonly<Partial<Readonly<{
10
+ tone: import("../../site-styles").StyleTone;
11
+ energy: import("../../site-styles").StyleEnergy;
12
+ motion: import("../../site-styles").StyleMotion;
13
+ era: import("../../site-styles").StyleEra;
14
+ }>>>;
10
15
  mode: "light" | "dark";
11
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
16
+ colors: readonly Readonly<{
17
+ name: import("@riverbankcms/blocks").PaletteTokenName;
18
+ hex: string;
19
+ }>[];
12
20
  }>;
13
21
  export declare const highContrastCharcoal: Readonly<{
14
- id: import("@riverbankcms/blocks").PaletteVariantId;
22
+ id: import("@riverbankcms/blocks").PaletteVariantId<"high-contrast-charcoal">;
15
23
  name: string;
16
24
  description: string;
17
- tags: import("../../site-styles").StyleTags;
25
+ tags: Readonly<Partial<Readonly<{
26
+ tone: import("../../site-styles").StyleTone;
27
+ energy: import("../../site-styles").StyleEnergy;
28
+ motion: import("../../site-styles").StyleMotion;
29
+ era: import("../../site-styles").StyleEra;
30
+ }>>>;
18
31
  mode: "light" | "dark";
19
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
32
+ colors: readonly Readonly<{
33
+ name: import("@riverbankcms/blocks").PaletteTokenName;
34
+ hex: string;
35
+ }>[];
20
36
  }>;
21
37
  export declare const highContrastMonochrome: Readonly<{
22
- id: import("@riverbankcms/blocks").PaletteVariantId;
38
+ id: import("@riverbankcms/blocks").PaletteVariantId<"high-contrast-monochrome">;
23
39
  name: string;
24
40
  description: string;
25
- tags: import("../../site-styles").StyleTags;
41
+ tags: Readonly<Partial<Readonly<{
42
+ tone: import("../../site-styles").StyleTone;
43
+ energy: import("../../site-styles").StyleEnergy;
44
+ motion: import("../../site-styles").StyleMotion;
45
+ era: import("../../site-styles").StyleEra;
46
+ }>>>;
26
47
  mode: "light" | "dark";
27
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
48
+ colors: readonly Readonly<{
49
+ name: import("@riverbankcms/blocks").PaletteTokenName;
50
+ hex: string;
51
+ }>[];
28
52
  }>;
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * Each variant is a complete colour palette tagged on the four style axes
5
5
  * (tone / energy / motion / era — motion is rarely used for palettes).
6
- * Curated site styles declare a default palette + an acceptance region that
7
- * filters the picker; the Style configurator UI uses `compatibleEntries`
8
- * from `site-styles/compatibility.ts` to surface valid options.
6
+ * Curated site styles declare ordered palette choices for the picker. Tags
7
+ * stay available as authoring/audit metadata; they no longer drive the Style
8
+ * configurator's option shape.
9
9
  *
10
10
  * `paletteOverrides` carries per-token hex edits applied on top of the
11
11
  * chosen variant; see the merge semantics in `compileSiteThemeFromSelections`.
@@ -13,5 +13,201 @@
13
13
  import type { PaletteVariant, PaletteVariantId } from './types';
14
14
  export type { HexColor, PaletteColor, PaletteOverrides, PaletteTokenName, PaletteVariant, PaletteVariantId } from './types';
15
15
  export { PALETTE_TOKEN_NAMES, asPaletteVariantId, definePaletteVariant, hexColorSchema, paletteOverridesSchema, paletteTokenNameSchema, paletteVariantIdSchema, paletteVariantSchema, } from './types';
16
- export declare const paletteVariants: readonly PaletteVariant[];
16
+ export declare const paletteVariants: readonly [Readonly<{
17
+ id: PaletteVariantId<"brand-led-cool">;
18
+ name: string;
19
+ description: string;
20
+ tags: Readonly<Partial<Readonly<{
21
+ tone: import("../../site-styles").StyleTone;
22
+ energy: import("../../site-styles").StyleEnergy;
23
+ motion: import("../../site-styles").StyleMotion;
24
+ era: import("../../site-styles").StyleEra;
25
+ }>>>;
26
+ mode: "light" | "dark";
27
+ colors: readonly Readonly<{
28
+ name: import("@riverbankcms/blocks").PaletteTokenName;
29
+ hex: string;
30
+ }>[];
31
+ }>, Readonly<{
32
+ id: PaletteVariantId<"brand-led-warm">;
33
+ name: string;
34
+ description: string;
35
+ tags: Readonly<Partial<Readonly<{
36
+ tone: import("../../site-styles").StyleTone;
37
+ energy: import("../../site-styles").StyleEnergy;
38
+ motion: import("../../site-styles").StyleMotion;
39
+ era: import("../../site-styles").StyleEra;
40
+ }>>>;
41
+ mode: "light" | "dark";
42
+ colors: readonly Readonly<{
43
+ name: import("@riverbankcms/blocks").PaletteTokenName;
44
+ hex: string;
45
+ }>[];
46
+ }>, Readonly<{
47
+ id: PaletteVariantId<"brand-led-jewel">;
48
+ name: string;
49
+ description: string;
50
+ tags: Readonly<Partial<Readonly<{
51
+ tone: import("../../site-styles").StyleTone;
52
+ energy: import("../../site-styles").StyleEnergy;
53
+ motion: import("../../site-styles").StyleMotion;
54
+ era: import("../../site-styles").StyleEra;
55
+ }>>>;
56
+ mode: "light" | "dark";
57
+ colors: readonly Readonly<{
58
+ name: import("@riverbankcms/blocks").PaletteTokenName;
59
+ hex: string;
60
+ }>[];
61
+ }>, Readonly<{
62
+ id: PaletteVariantId<"warm-neutral-clay">;
63
+ name: string;
64
+ description: string;
65
+ tags: Readonly<Partial<Readonly<{
66
+ tone: import("../../site-styles").StyleTone;
67
+ energy: import("../../site-styles").StyleEnergy;
68
+ motion: import("../../site-styles").StyleMotion;
69
+ era: import("../../site-styles").StyleEra;
70
+ }>>>;
71
+ mode: "light" | "dark";
72
+ colors: readonly Readonly<{
73
+ name: import("@riverbankcms/blocks").PaletteTokenName;
74
+ hex: string;
75
+ }>[];
76
+ }>, Readonly<{
77
+ id: PaletteVariantId<"warm-neutral-cream">;
78
+ name: string;
79
+ description: string;
80
+ tags: Readonly<Partial<Readonly<{
81
+ tone: import("../../site-styles").StyleTone;
82
+ energy: import("../../site-styles").StyleEnergy;
83
+ motion: import("../../site-styles").StyleMotion;
84
+ era: import("../../site-styles").StyleEra;
85
+ }>>>;
86
+ mode: "light" | "dark";
87
+ colors: readonly Readonly<{
88
+ name: import("@riverbankcms/blocks").PaletteTokenName;
89
+ hex: string;
90
+ }>[];
91
+ }>, Readonly<{
92
+ id: PaletteVariantId<"warm-neutral-forest">;
93
+ name: string;
94
+ description: string;
95
+ tags: Readonly<Partial<Readonly<{
96
+ tone: import("../../site-styles").StyleTone;
97
+ energy: import("../../site-styles").StyleEnergy;
98
+ motion: import("../../site-styles").StyleMotion;
99
+ era: import("../../site-styles").StyleEra;
100
+ }>>>;
101
+ mode: "light" | "dark";
102
+ colors: readonly Readonly<{
103
+ name: import("@riverbankcms/blocks").PaletteTokenName;
104
+ hex: string;
105
+ }>[];
106
+ }>, Readonly<{
107
+ id: PaletteVariantId<"high-contrast-ink">;
108
+ name: string;
109
+ description: string;
110
+ tags: Readonly<Partial<Readonly<{
111
+ tone: import("../../site-styles").StyleTone;
112
+ energy: import("../../site-styles").StyleEnergy;
113
+ motion: import("../../site-styles").StyleMotion;
114
+ era: import("../../site-styles").StyleEra;
115
+ }>>>;
116
+ mode: "light" | "dark";
117
+ colors: readonly Readonly<{
118
+ name: import("@riverbankcms/blocks").PaletteTokenName;
119
+ hex: string;
120
+ }>[];
121
+ }>, Readonly<{
122
+ id: PaletteVariantId<"high-contrast-charcoal">;
123
+ name: string;
124
+ description: string;
125
+ tags: Readonly<Partial<Readonly<{
126
+ tone: import("../../site-styles").StyleTone;
127
+ energy: import("../../site-styles").StyleEnergy;
128
+ motion: import("../../site-styles").StyleMotion;
129
+ era: import("../../site-styles").StyleEra;
130
+ }>>>;
131
+ mode: "light" | "dark";
132
+ colors: readonly Readonly<{
133
+ name: import("@riverbankcms/blocks").PaletteTokenName;
134
+ hex: string;
135
+ }>[];
136
+ }>, Readonly<{
137
+ id: PaletteVariantId<"high-contrast-monochrome">;
138
+ name: string;
139
+ description: string;
140
+ tags: Readonly<Partial<Readonly<{
141
+ tone: import("../../site-styles").StyleTone;
142
+ energy: import("../../site-styles").StyleEnergy;
143
+ motion: import("../../site-styles").StyleMotion;
144
+ era: import("../../site-styles").StyleEra;
145
+ }>>>;
146
+ mode: "light" | "dark";
147
+ colors: readonly Readonly<{
148
+ name: import("@riverbankcms/blocks").PaletteTokenName;
149
+ hex: string;
150
+ }>[];
151
+ }>, Readonly<{
152
+ id: PaletteVariantId<"soft-natural-sage">;
153
+ name: string;
154
+ description: string;
155
+ tags: Readonly<Partial<Readonly<{
156
+ tone: import("../../site-styles").StyleTone;
157
+ energy: import("../../site-styles").StyleEnergy;
158
+ motion: import("../../site-styles").StyleMotion;
159
+ era: import("../../site-styles").StyleEra;
160
+ }>>>;
161
+ mode: "light" | "dark";
162
+ colors: readonly Readonly<{
163
+ name: import("@riverbankcms/blocks").PaletteTokenName;
164
+ hex: string;
165
+ }>[];
166
+ }>, Readonly<{
167
+ id: PaletteVariantId<"soft-natural-stone">;
168
+ name: string;
169
+ description: string;
170
+ tags: Readonly<Partial<Readonly<{
171
+ tone: import("../../site-styles").StyleTone;
172
+ energy: import("../../site-styles").StyleEnergy;
173
+ motion: import("../../site-styles").StyleMotion;
174
+ era: import("../../site-styles").StyleEra;
175
+ }>>>;
176
+ mode: "light" | "dark";
177
+ colors: readonly Readonly<{
178
+ name: import("@riverbankcms/blocks").PaletteTokenName;
179
+ hex: string;
180
+ }>[];
181
+ }>, Readonly<{
182
+ id: PaletteVariantId<"soft-natural-watercolor">;
183
+ name: string;
184
+ description: string;
185
+ tags: Readonly<Partial<Readonly<{
186
+ tone: import("../../site-styles").StyleTone;
187
+ energy: import("../../site-styles").StyleEnergy;
188
+ motion: import("../../site-styles").StyleMotion;
189
+ era: import("../../site-styles").StyleEra;
190
+ }>>>;
191
+ mode: "light" | "dark";
192
+ colors: readonly Readonly<{
193
+ name: import("@riverbankcms/blocks").PaletteTokenName;
194
+ hex: string;
195
+ }>[];
196
+ }>];
197
+ type UnbrandedPaletteVariantId<TValue> = TValue extends infer TRaw & {
198
+ readonly __brand: 'PaletteVariantId';
199
+ } ? TRaw extends string ? TRaw : never : never;
200
+ export type KnownPaletteVariantId = (typeof paletteVariants)[number]['id'];
201
+ export type KnownPaletteVariantIdValue = UnbrandedPaletteVariantId<KnownPaletteVariantId>;
17
202
  export declare function findPaletteVariant(id: PaletteVariantId): PaletteVariant | undefined;
203
+ export declare function isKnownPaletteVariantId(value: string): value is KnownPaletteVariantId;
204
+ export type PersistedPaletteVariantIdParseResult = Readonly<{
205
+ kind: 'known';
206
+ id: KnownPaletteVariantId;
207
+ }> | Readonly<{
208
+ kind: 'unknown';
209
+ raw: string;
210
+ }> | Readonly<{
211
+ kind: 'empty';
212
+ }>;
213
+ export declare function parsePersistedPaletteVariantId(value: string | null | undefined): PersistedPaletteVariantIdParseResult;
@@ -3,26 +3,50 @@
3
3
  * Studio, Modern Wellness, Warm Editorial site styles.
4
4
  */
5
5
  export declare const softNaturalSage: Readonly<{
6
- id: import("@riverbankcms/blocks").PaletteVariantId;
6
+ id: import("@riverbankcms/blocks").PaletteVariantId<"soft-natural-sage">;
7
7
  name: string;
8
8
  description: string;
9
- tags: import("../../site-styles").StyleTags;
9
+ tags: Readonly<Partial<Readonly<{
10
+ tone: import("../../site-styles").StyleTone;
11
+ energy: import("../../site-styles").StyleEnergy;
12
+ motion: import("../../site-styles").StyleMotion;
13
+ era: import("../../site-styles").StyleEra;
14
+ }>>>;
10
15
  mode: "light" | "dark";
11
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
16
+ colors: readonly Readonly<{
17
+ name: import("@riverbankcms/blocks").PaletteTokenName;
18
+ hex: string;
19
+ }>[];
12
20
  }>;
13
21
  export declare const softNaturalStone: Readonly<{
14
- id: import("@riverbankcms/blocks").PaletteVariantId;
22
+ id: import("@riverbankcms/blocks").PaletteVariantId<"soft-natural-stone">;
15
23
  name: string;
16
24
  description: string;
17
- tags: import("../../site-styles").StyleTags;
25
+ tags: Readonly<Partial<Readonly<{
26
+ tone: import("../../site-styles").StyleTone;
27
+ energy: import("../../site-styles").StyleEnergy;
28
+ motion: import("../../site-styles").StyleMotion;
29
+ era: import("../../site-styles").StyleEra;
30
+ }>>>;
18
31
  mode: "light" | "dark";
19
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
32
+ colors: readonly Readonly<{
33
+ name: import("@riverbankcms/blocks").PaletteTokenName;
34
+ hex: string;
35
+ }>[];
20
36
  }>;
21
37
  export declare const softNaturalWatercolor: Readonly<{
22
- id: import("@riverbankcms/blocks").PaletteVariantId;
38
+ id: import("@riverbankcms/blocks").PaletteVariantId<"soft-natural-watercolor">;
23
39
  name: string;
24
40
  description: string;
25
- tags: import("../../site-styles").StyleTags;
41
+ tags: Readonly<Partial<Readonly<{
42
+ tone: import("../../site-styles").StyleTone;
43
+ energy: import("../../site-styles").StyleEnergy;
44
+ motion: import("../../site-styles").StyleMotion;
45
+ era: import("../../site-styles").StyleEra;
46
+ }>>>;
26
47
  mode: "light" | "dark";
27
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
48
+ colors: readonly Readonly<{
49
+ name: import("@riverbankcms/blocks").PaletteTokenName;
50
+ hex: string;
51
+ }>[];
28
52
  }>;
@@ -1,15 +1,15 @@
1
1
  import { z } from 'zod';
2
- import { type StyleTags } from '../../site-styles/compatibility';
2
+ import { type StyleTags } from '../../site-styles/styleTags';
3
3
  /**
4
4
  * Branded ID for a palette variant in the curated library. Shape matches the
5
5
  * `Brand<T, TBrand>` convention in `site-styles/types.ts`. Use the helper at
6
6
  * the parse/construction boundary.
7
7
  */
8
- export type PaletteVariantId = string & {
8
+ export type PaletteVariantId<T extends string = string> = T & {
9
9
  readonly __brand: 'PaletteVariantId';
10
10
  };
11
- export declare function asPaletteVariantId(value: string): PaletteVariantId;
12
- export declare const paletteVariantIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<PaletteVariantId, string>>;
11
+ export declare function asPaletteVariantId<const T extends string>(value: T): PaletteVariantId<T>;
12
+ export declare const paletteVariantIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<PaletteVariantId<string>, string>>;
13
13
  /**
14
14
  * Known palette role token names. Closed union so unknown tokens can't be
15
15
  * persisted via `paletteOverrides`. Add a new role here intentionally.
@@ -45,8 +45,8 @@ export type PaletteColor = Readonly<{
45
45
  name: PaletteTokenName;
46
46
  hex: string;
47
47
  }>;
48
- export type PaletteVariant = Readonly<{
49
- id: PaletteVariantId;
48
+ export type PaletteVariant<TId extends PaletteVariantId = PaletteVariantId> = Readonly<{
49
+ id: TId;
50
50
  name: string;
51
51
  description: string;
52
52
  tags: StyleTags;
@@ -54,7 +54,7 @@ export type PaletteVariant = Readonly<{
54
54
  colors: ReadonlyArray<PaletteColor>;
55
55
  }>;
56
56
  export declare const paletteVariantSchema: z.ZodObject<{
57
- id: z.ZodPipe<z.ZodString, z.ZodTransform<PaletteVariantId, string>>;
57
+ id: z.ZodPipe<z.ZodString, z.ZodTransform<PaletteVariantId<string>, string>>;
58
58
  name: z.ZodString;
59
59
  description: z.ZodString;
60
60
  tags: z.ZodObject<{
@@ -103,14 +103,14 @@ export declare const paletteVariantSchema: z.ZodObject<{
103
103
  }>;
104
104
  }, z.core.$strip>>;
105
105
  }, z.core.$strip>;
106
- export declare function definePaletteVariant(input: {
107
- id: string;
106
+ export declare function definePaletteVariant<const TId extends string>(input: {
107
+ id: TId;
108
108
  name: string;
109
109
  description: string;
110
110
  tags: StyleTags;
111
111
  mode: 'light' | 'dark';
112
112
  colors: ReadonlyArray<PaletteColor>;
113
- }): PaletteVariant;
113
+ }): PaletteVariant<PaletteVariantId<TId>>;
114
114
  /**
115
115
  * Sparse per-token override map. Loaded from / persisted to
116
116
  * `site_theme_selections.palette_overrides`. Empty / null means "no overrides
@@ -3,26 +3,50 @@
3
3
  * Warm Editorial, Modern Wellness, Calm Studio site styles.
4
4
  */
5
5
  export declare const warmNeutralClay: Readonly<{
6
- id: import("@riverbankcms/blocks").PaletteVariantId;
6
+ id: import("@riverbankcms/blocks").PaletteVariantId<"warm-neutral-clay">;
7
7
  name: string;
8
8
  description: string;
9
- tags: import("../../site-styles").StyleTags;
9
+ tags: Readonly<Partial<Readonly<{
10
+ tone: import("../../site-styles").StyleTone;
11
+ energy: import("../../site-styles").StyleEnergy;
12
+ motion: import("../../site-styles").StyleMotion;
13
+ era: import("../../site-styles").StyleEra;
14
+ }>>>;
10
15
  mode: "light" | "dark";
11
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
16
+ colors: readonly Readonly<{
17
+ name: import("@riverbankcms/blocks").PaletteTokenName;
18
+ hex: string;
19
+ }>[];
12
20
  }>;
13
21
  export declare const warmNeutralCream: Readonly<{
14
- id: import("@riverbankcms/blocks").PaletteVariantId;
22
+ id: import("@riverbankcms/blocks").PaletteVariantId<"warm-neutral-cream">;
15
23
  name: string;
16
24
  description: string;
17
- tags: import("../../site-styles").StyleTags;
25
+ tags: Readonly<Partial<Readonly<{
26
+ tone: import("../../site-styles").StyleTone;
27
+ energy: import("../../site-styles").StyleEnergy;
28
+ motion: import("../../site-styles").StyleMotion;
29
+ era: import("../../site-styles").StyleEra;
30
+ }>>>;
18
31
  mode: "light" | "dark";
19
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
32
+ colors: readonly Readonly<{
33
+ name: import("@riverbankcms/blocks").PaletteTokenName;
34
+ hex: string;
35
+ }>[];
20
36
  }>;
21
37
  export declare const warmNeutralForest: Readonly<{
22
- id: import("@riverbankcms/blocks").PaletteVariantId;
38
+ id: import("@riverbankcms/blocks").PaletteVariantId<"warm-neutral-forest">;
23
39
  name: string;
24
40
  description: string;
25
- tags: import("../../site-styles").StyleTags;
41
+ tags: Readonly<Partial<Readonly<{
42
+ tone: import("../../site-styles").StyleTone;
43
+ energy: import("../../site-styles").StyleEnergy;
44
+ motion: import("../../site-styles").StyleMotion;
45
+ era: import("../../site-styles").StyleEra;
46
+ }>>>;
26
47
  mode: "light" | "dark";
27
- colors: ReadonlyArray<import("@riverbankcms/blocks").PaletteColor>;
48
+ colors: readonly Readonly<{
49
+ name: import("@riverbankcms/blocks").PaletteTokenName;
50
+ hex: string;
51
+ }>[];
28
52
  }>;
@@ -0,0 +1,27 @@
1
+ import type { NonEmptyReadonlyArray } from './types';
2
+ export type CuratedChoice<TId extends string> = Readonly<{
3
+ id: TId;
4
+ note?: string;
5
+ }>;
6
+ export type UnknownPersistedChoice = Readonly<{
7
+ kind: 'unknown';
8
+ raw: string;
9
+ }>;
10
+ export type CuratedChoiceRequest<TId extends string> = TId | UnknownPersistedChoice | null;
11
+ export type CuratedChoiceResolution<TId extends string> = Readonly<{
12
+ kind: 'accepted';
13
+ resolved: TId;
14
+ }> | Readonly<{
15
+ kind: 'defaulted-empty';
16
+ resolved: TId;
17
+ }> | Readonly<{
18
+ kind: 'defaulted-rejected';
19
+ requested: string;
20
+ resolved: TId;
21
+ reason: 'unknown' | 'not-curated-for-style';
22
+ }>;
23
+ export declare function defaultCuratedChoice<TId extends string>(choices: NonEmptyReadonlyArray<CuratedChoice<TId>>): TId;
24
+ export declare function resolveCuratedChoice<TId extends string>(requested: CuratedChoiceRequest<TId>, choices: NonEmptyReadonlyArray<CuratedChoice<TId>>): CuratedChoiceResolution<TId>;
25
+ export declare function requireEntriesForCuratedChoices<TEntry extends Readonly<{
26
+ id: string;
27
+ }>, TId extends TEntry['id']>(entries: readonly TEntry[], choices: NonEmptyReadonlyArray<CuratedChoice<TId>>): NonEmptyReadonlyArray<TEntry>;