@riverbankcms/sdk 0.60.1 → 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.
- package/dist/_dts/api/src/bookingRecords.d.ts +7 -0
- package/dist/_dts/api/src/bookingVerticals.d.ts +1 -0
- package/dist/_dts/api/src/communications.d.ts +1 -0
- package/dist/_dts/api/src/contentRuntime.d.ts +8 -0
- package/dist/_dts/api/src/endpoints.d.ts +17 -0
- package/dist/_dts/api/src/index.d.ts +1 -1
- package/dist/_dts/api/src/media.d.ts +1 -1
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +10 -2
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +26 -1
- package/dist/_dts/api/src/siteSettings.d.ts +7 -0
- package/dist/_dts/api/src/types.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -0
- package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -0
- package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/location-map.server.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/location-map.shared.d.ts +38 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/location-map.view.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +11 -0
- package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
- package/dist/_dts/core/src/business-address.d.ts +38 -0
- package/dist/_dts/core/src/index.d.ts +1 -0
- package/dist/_dts/core/src/participants.d.ts +32 -1
- package/dist/_dts/core/src/rectification.d.ts +79 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +28 -6
- package/dist/_dts/preview-next/src/client/blocks/runOptimisticCustomizeAction.d.ts +44 -0
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +7 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +12 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +6 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +20 -0
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +101 -0
- package/dist/_dts/sdk/src/client/types.d.ts +1 -0
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +11 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/constants.d.ts +9 -1
- package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +16 -11
- package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +9 -16
- package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +95 -0
- package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +268 -0
- package/dist/_dts/theme-core/src/buttons/types.d.ts +253 -72
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +69 -15
- package/dist/_dts/theme-core/src/palette/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +52 -0
- package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +52 -0
- package/dist/_dts/theme-core/src/palette/variants/index.d.ts +213 -0
- package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +52 -0
- package/dist/_dts/theme-core/src/palette/variants/types.d.ts +154 -0
- package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +52 -0
- package/dist/_dts/theme-core/src/schema.d.ts +122 -10
- package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -1
- package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
- package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -0
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +42 -3
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +23 -1
- package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/callout.d.ts +1 -1
- package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
- package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
- package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
- package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
- package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
- package/dist/_dts/ui/src/palette/index.d.ts +14 -0
- package/dist/cli/index.mjs +2255 -947
- package/dist/client/bookings.mjs +294 -144
- package/dist/client/client.mjs +4053 -2600
- package/dist/client/hooks.mjs +3248 -2076
- package/dist/client/rendering/client.mjs +3377 -2165
- package/dist/client/rendering/islands.mjs +1911 -736
- package/dist/client/rendering.mjs +41897 -40445
- package/dist/preview-next/before-render.mjs +17 -0
- package/dist/preview-next/client/runtime.mjs +13511 -11313
- package/dist/preview-next/middleware.mjs +17 -0
- package/dist/server/components.mjs +4434 -3172
- package/dist/server/config-validation.mjs +3479 -2307
- package/dist/server/config.mjs +3479 -2307
- package/dist/server/data.mjs +3248 -2076
- package/dist/server/index.mjs +21 -3
- package/dist/server/next.mjs +3989 -2726
- package/dist/server/page-converter.mjs +3393 -2238
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +4434 -3172
- package/dist/server/rendering.mjs +4434 -3172
- package/dist/server/routing.mjs +3582 -2274
- package/dist/server/server.mjs +3252 -2079
- package/dist/server/theme-bridge.mjs +1454 -496
- package/dist/server/theme.mjs +1102 -505
- package/package.json +1 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewSiteStyleSwitcher.d.ts +0 -11
- package/dist/_dts/preview-next/src/client/preview/PreviewSiteStyleSwitcher.state.d.ts +0 -43
package/dist/server/theme.mjs
CHANGED
|
@@ -15,215 +15,812 @@ function brandNonEmptyString(value, label) {
|
|
|
15
15
|
return value;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
// ../theme-core/src/
|
|
19
|
-
import { z as
|
|
20
|
-
|
|
21
|
-
// ../theme-core/src/lib/media.ts
|
|
22
|
-
import z from "zod";
|
|
23
|
-
var hotspotSchema = z.object({
|
|
24
|
-
x: z.number().min(0).max(1),
|
|
25
|
-
y: z.number().min(0).max(1),
|
|
26
|
-
radius: z.number().optional()
|
|
27
|
-
});
|
|
28
|
-
var rotationSchema = z.union([z.literal(0), z.literal(90), z.literal(180), z.literal(270)]);
|
|
29
|
-
var rectSchema = z.tuple([z.number(), z.number(), z.number(), z.number()]);
|
|
30
|
-
var aspectCropSchema = z.object({
|
|
31
|
-
aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
|
|
32
|
-
rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
|
|
33
|
-
hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
|
|
34
|
-
rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
|
|
35
|
-
});
|
|
36
|
-
var transformSchema = z.object({
|
|
37
|
-
aspectCrops: z.preprocess((value) => {
|
|
38
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
39
|
-
return void 0;
|
|
40
|
-
}
|
|
41
|
-
return value;
|
|
42
|
-
}, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
|
|
43
|
-
rect: rectSchema.optional(),
|
|
44
|
-
hotspot: hotspotSchema.optional(),
|
|
45
|
-
rotation: rotationSchema.optional()
|
|
46
|
-
});
|
|
47
|
-
var mediaSchema = z.object({
|
|
48
|
-
type: z.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
|
|
49
|
-
purpose: z.string().optional(),
|
|
50
|
-
placeholder: z.boolean().default(true).optional(),
|
|
51
|
-
assetId: z.string().optional(),
|
|
52
|
-
identifier: z.string().optional(),
|
|
53
|
-
src: z.string().optional(),
|
|
54
|
-
alt: z.string().optional(),
|
|
55
|
-
filename: z.string().optional(),
|
|
56
|
-
mimeType: z.string().optional(),
|
|
57
|
-
width: z.number().optional(),
|
|
58
|
-
height: z.number().optional(),
|
|
59
|
-
storageBucket: z.string().optional(),
|
|
60
|
-
storagePath: z.string().optional(),
|
|
61
|
-
transform: transformSchema.optional()
|
|
62
|
-
});
|
|
18
|
+
// ../theme-core/src/buttons/personalities/types.ts
|
|
19
|
+
import { z as z3 } from "zod";
|
|
63
20
|
|
|
64
21
|
// ../theme-core/src/buttons/types.ts
|
|
65
|
-
import { z
|
|
66
|
-
var
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
var
|
|
76
|
-
var
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var
|
|
22
|
+
import { z } from "zod";
|
|
23
|
+
var VARIANT_ROLES = [
|
|
24
|
+
"primary",
|
|
25
|
+
"secondary",
|
|
26
|
+
"outline",
|
|
27
|
+
"ghost",
|
|
28
|
+
"link",
|
|
29
|
+
"tertiary",
|
|
30
|
+
"accent"
|
|
31
|
+
];
|
|
32
|
+
var cornerStyleSchema = z.enum(["square", "rounded", "pill"]);
|
|
33
|
+
var shadowSizeSchema = z.enum(["none", "low", "medium", "high"]);
|
|
34
|
+
var textTransformSchema = z.enum(["none", "uppercase", "lowercase", "capitalize"]);
|
|
35
|
+
var fontWeightSchema = z.union([z.literal(500), z.literal(600), z.literal(700)]);
|
|
36
|
+
var buttonTypographySchema = z.enum(["body", "heading"]);
|
|
37
|
+
var letterSpacingSchema = z.enum(["tight", "normal", "loose"]);
|
|
38
|
+
var hoverTransformSchema = z.enum(["none", "lift", "scale", "press"]);
|
|
39
|
+
var hoverColorSchema = z.enum(["none", "brighten", "darken", "saturate", "token"]);
|
|
40
|
+
var buttonPaddingPresetSchema = z.enum(["compact", "default", "spacious"]);
|
|
41
|
+
var gradientStyleSchema = z.enum(["linear", "radial", "conic"]);
|
|
42
|
+
var gradientSharpnessSchema = z.enum(["smooth", "medium", "hard"]);
|
|
43
|
+
var prioritySchema = z.union([z.literal(1), z.literal(2), z.literal(3)]);
|
|
44
|
+
var variantRoleSchema = z.enum(VARIANT_ROLES);
|
|
45
|
+
var buttonSizeNameSchema = z.enum(["sm", "md", "lg", "xl"]);
|
|
46
|
+
var PADDING_TOKEN_PATTERN = /^(?:0|\d+(?:\.\d+)?(?:rem|em|px|%))$/;
|
|
47
|
+
var paddingShorthandSchema = z.string().refine(
|
|
48
|
+
(value) => {
|
|
49
|
+
const parts = value.split(/\s+/).filter(Boolean);
|
|
50
|
+
return parts.length === 2 && parts.every((token) => PADDING_TOKEN_PATTERN.test(token));
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
message: 'Padding must be two space-separated CSS length tokens (e.g. "0.5rem 1rem"). Use `0` for zero.'
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
var buttonSizeConfigSchema = z.object({
|
|
57
|
+
padding: paddingShorthandSchema,
|
|
58
|
+
fontSize: z.string().optional()
|
|
59
|
+
});
|
|
60
|
+
var buttonSizesSchema = z.object({
|
|
82
61
|
sm: buttonSizeConfigSchema,
|
|
83
62
|
md: buttonSizeConfigSchema,
|
|
84
63
|
lg: buttonSizeConfigSchema,
|
|
85
64
|
xl: buttonSizeConfigSchema.optional()
|
|
86
|
-
})
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
"border-trace"
|
|
94
|
-
]);
|
|
95
|
-
var buttonGlobalSettingsSchema = z2.object({
|
|
65
|
+
}).transform(({ sm, md, lg, xl }) => ({
|
|
66
|
+
sm,
|
|
67
|
+
md,
|
|
68
|
+
lg,
|
|
69
|
+
xl: xl ?? lg
|
|
70
|
+
}));
|
|
71
|
+
var buttonGlobalSettingsSchema = z.object({
|
|
96
72
|
cornerStyle: cornerStyleSchema,
|
|
97
|
-
cornerRadius:
|
|
73
|
+
cornerRadius: z.number().min(0).max(24).optional(),
|
|
98
74
|
shadow: shadowSizeSchema,
|
|
99
75
|
textTransform: textTransformSchema,
|
|
100
76
|
fontWeight: fontWeightSchema,
|
|
101
|
-
|
|
102
|
-
|
|
77
|
+
/**
|
|
78
|
+
* @deprecated Set per-variant via `variant.border.widthClass` instead.
|
|
79
|
+
* Schema field is preserved so existing presets parse; the value is unread
|
|
80
|
+
* by the current generator and will be removed once the legacy
|
|
81
|
+
* `primitives/content/components/Button.tsx` slot exports are deleted.
|
|
82
|
+
*/
|
|
83
|
+
borderWidth: z.union([z.literal(1), z.literal(2), z.literal(3)]),
|
|
84
|
+
// === Family-level typography ===
|
|
85
|
+
// Typography source (body or heading) — selects which theme typography pool to inherit
|
|
103
86
|
typography: buttonTypographySchema.optional(),
|
|
87
|
+
// Font size for all variants in the family (Tailwind token, e.g. "text-xs", "text-sm")
|
|
88
|
+
// Sized variants get this as default; fixed variants inherit unless they override.
|
|
89
|
+
// Size class CSS may still override at run time for sized variants.
|
|
90
|
+
fontSize: z.string().optional(),
|
|
91
|
+
// Letter spacing applied to all variants
|
|
92
|
+
letterSpacing: letterSpacingSchema.optional(),
|
|
104
93
|
// Italic style
|
|
105
|
-
italic:
|
|
106
|
-
// Padding preset (applies to
|
|
94
|
+
italic: z.boolean().optional(),
|
|
95
|
+
// Padding preset (applies to sized variants without a sizes config)
|
|
107
96
|
paddingPreset: buttonPaddingPresetSchema.optional(),
|
|
108
97
|
hoverTransform: hoverTransformSchema,
|
|
109
98
|
hoverColor: hoverColorSchema,
|
|
110
99
|
// When hoverColor is 'token', this specifies which token to use
|
|
111
|
-
hoverColorToken:
|
|
100
|
+
hoverColorToken: z.string().optional(),
|
|
112
101
|
// Gradient settings (if any variant uses gradients)
|
|
113
102
|
gradientStyle: gradientStyleSchema.optional(),
|
|
114
|
-
gradientAngle:
|
|
103
|
+
gradientAngle: z.number().min(0).max(360).optional(),
|
|
115
104
|
gradientSharpness: gradientSharpnessSchema.optional()
|
|
116
105
|
});
|
|
117
|
-
var gradientDirectionSchema =
|
|
118
|
-
var buttonBackgroundSchema =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
type:
|
|
122
|
-
stops:
|
|
106
|
+
var gradientDirectionSchema = z.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
|
|
107
|
+
var buttonBackgroundSchema = z.discriminatedUnion("type", [
|
|
108
|
+
z.object({ type: z.literal("solid"), colorToken: z.string() }),
|
|
109
|
+
z.object({
|
|
110
|
+
type: z.literal("gradient"),
|
|
111
|
+
stops: z.array(z.string()).min(2),
|
|
123
112
|
direction: gradientDirectionSchema
|
|
124
113
|
}),
|
|
125
|
-
|
|
114
|
+
z.object({ type: z.literal("transparent") })
|
|
126
115
|
]);
|
|
127
|
-
var effectApplicationSchema =
|
|
128
|
-
effectId:
|
|
129
|
-
options:
|
|
130
|
-
});
|
|
131
|
-
var buttonBorderSchema =
|
|
132
|
-
widthClass:
|
|
133
|
-
colorToken:
|
|
134
|
-
});
|
|
135
|
-
var
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
116
|
+
var effectApplicationSchema = z.object({
|
|
117
|
+
effectId: z.string(),
|
|
118
|
+
options: z.record(z.string(), z.any()).optional()
|
|
119
|
+
});
|
|
120
|
+
var buttonBorderSchema = z.object({
|
|
121
|
+
widthClass: z.string(),
|
|
122
|
+
colorToken: z.string()
|
|
123
|
+
});
|
|
124
|
+
var variantShadowSchema = z.object({
|
|
125
|
+
elevation: z.enum(["none", "low", "medium", "high"]),
|
|
126
|
+
softness: z.enum(["crisp", "soft", "hard"]).nullable(),
|
|
127
|
+
position: z.enum(["bottom", "bottom-right"]).default("bottom")
|
|
128
|
+
});
|
|
129
|
+
var variantEffectsSchema = z.object({
|
|
130
|
+
base: z.array(effectApplicationSchema).optional(),
|
|
131
|
+
hover: z.array(effectApplicationSchema).optional(),
|
|
132
|
+
active: z.array(effectApplicationSchema).optional(),
|
|
133
|
+
focus: z.array(effectApplicationSchema).optional()
|
|
134
|
+
});
|
|
135
|
+
var variantSizeOverridesSchema = z.object({
|
|
136
|
+
sm: buttonSizeConfigSchema.optional(),
|
|
137
|
+
md: buttonSizeConfigSchema.optional(),
|
|
138
|
+
lg: buttonSizeConfigSchema.optional(),
|
|
139
|
+
xl: buttonSizeConfigSchema.optional()
|
|
140
|
+
});
|
|
141
|
+
var buttonVariantSchema = z.object({
|
|
142
|
+
id: z.string(),
|
|
143
|
+
name: z.string().min(1).max(20),
|
|
144
|
+
enabled: z.boolean(),
|
|
145
|
+
priority: prioritySchema,
|
|
152
146
|
// Base appearance (token-based)
|
|
153
147
|
background: buttonBackgroundSchema,
|
|
154
|
-
textColorToken:
|
|
155
|
-
|
|
148
|
+
textColorToken: z.string(),
|
|
149
|
+
/** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
|
|
150
|
+
borderRadius: z.string().optional(),
|
|
156
151
|
// Optional shadow override (uses theme.shadow if not specified)
|
|
157
|
-
shadow:
|
|
158
|
-
elevation: z2.enum(["none", "low", "medium", "high"]),
|
|
159
|
-
softness: z2.enum(["crisp", "soft", "hard"]).nullable(),
|
|
160
|
-
position: z2.enum(["bottom", "bottom-right"]).default("bottom")
|
|
161
|
-
}).optional(),
|
|
152
|
+
shadow: variantShadowSchema.optional(),
|
|
162
153
|
// Border (optional)
|
|
163
154
|
border: buttonBorderSchema.optional(),
|
|
164
|
-
// Padding (optional, defaults to "0.5rem 1rem")
|
|
165
|
-
padding: z2.string().optional(),
|
|
166
|
-
// Font size (optional, Tailwind text size class)
|
|
167
|
-
fontSize: z2.string().optional(),
|
|
168
155
|
// Hover background token (per-variant override, takes precedence over global hoverColorToken)
|
|
169
|
-
hoverBackgroundToken:
|
|
156
|
+
hoverBackgroundToken: z.string().optional(),
|
|
170
157
|
// Effect composition
|
|
171
|
-
effects:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
active: z2.array(effectApplicationSchema).optional(),
|
|
175
|
-
focus: z2.array(effectApplicationSchema).optional()
|
|
176
|
-
}).optional()
|
|
158
|
+
effects: variantEffectsSchema.optional(),
|
|
159
|
+
// Per-variant size overrides — see VariantSizeOverrides
|
|
160
|
+
sizes: variantSizeOverridesSchema.optional()
|
|
177
161
|
});
|
|
178
|
-
var buttonSystemSchema =
|
|
162
|
+
var buttonSystemSchema = z.object({
|
|
179
163
|
global: buttonGlobalSettingsSchema,
|
|
180
|
-
variants:
|
|
164
|
+
variants: z.array(buttonVariantSchema).min(1).max(6),
|
|
181
165
|
sizes: buttonSizesSchema.optional()
|
|
182
166
|
});
|
|
183
167
|
|
|
168
|
+
// ../theme-core/src/site-styles/styleTags.ts
|
|
169
|
+
import { z as z2 } from "zod";
|
|
170
|
+
var STYLE_AXIS_VALUES = {
|
|
171
|
+
tone: ["minimal", "classic", "bold"],
|
|
172
|
+
energy: ["calm", "vibrant"],
|
|
173
|
+
motion: ["subtle", "standard", "expressive"],
|
|
174
|
+
era: ["editorial", "modern", "organic", "technical", "retro"]
|
|
175
|
+
};
|
|
176
|
+
var styleTagsSchema = z2.object({
|
|
177
|
+
tone: z2.enum(STYLE_AXIS_VALUES.tone).optional(),
|
|
178
|
+
energy: z2.enum(STYLE_AXIS_VALUES.energy).optional(),
|
|
179
|
+
motion: z2.enum(STYLE_AXIS_VALUES.motion).optional(),
|
|
180
|
+
era: z2.enum(STYLE_AXIS_VALUES.era).optional()
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// ../theme-core/src/buttons/personalities/types.ts
|
|
184
|
+
function asButtonPersonalityId(value) {
|
|
185
|
+
if (value.length === 0) {
|
|
186
|
+
throw new Error("ButtonPersonalityId must be a non-empty string");
|
|
187
|
+
}
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
var buttonPersonalityIdSchema = z3.string().min(1).transform((value) => asButtonPersonalityId(value));
|
|
191
|
+
var buttonPersonalitySchema = z3.object({
|
|
192
|
+
id: buttonPersonalityIdSchema,
|
|
193
|
+
name: z3.string().min(1),
|
|
194
|
+
description: z3.string().min(1),
|
|
195
|
+
tags: styleTagsSchema,
|
|
196
|
+
buttonSystem: buttonSystemSchema
|
|
197
|
+
});
|
|
198
|
+
function defineButtonPersonality(input) {
|
|
199
|
+
return {
|
|
200
|
+
id: asButtonPersonalityId(input.id),
|
|
201
|
+
name: input.name,
|
|
202
|
+
description: input.description,
|
|
203
|
+
tags: input.tags,
|
|
204
|
+
buttonSystem: input.buttonSystem
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// ../theme-core/src/buttons/personalities/brushed-wash.ts
|
|
209
|
+
var brushedWash = defineButtonPersonality({
|
|
210
|
+
id: "brushed-wash",
|
|
211
|
+
name: "Brushed Wash",
|
|
212
|
+
description: "Watercolour-gradient buttons with soft shadows and generous padding.",
|
|
213
|
+
tags: { tone: "classic", energy: "vibrant", motion: "standard", era: "organic" },
|
|
214
|
+
buttonSystem: {
|
|
215
|
+
global: {
|
|
216
|
+
cornerStyle: "rounded",
|
|
217
|
+
shadow: "low",
|
|
218
|
+
textTransform: "none",
|
|
219
|
+
fontWeight: 500,
|
|
220
|
+
borderWidth: 1,
|
|
221
|
+
hoverTransform: "none",
|
|
222
|
+
hoverColor: "none"
|
|
223
|
+
},
|
|
224
|
+
sizes: {
|
|
225
|
+
sm: { padding: "0.75rem 2rem", fontSize: "text-sm" },
|
|
226
|
+
md: { padding: "1rem 2.5rem" },
|
|
227
|
+
lg: { padding: "1.25rem 3rem", fontSize: "text-lg" },
|
|
228
|
+
xl: { padding: "1.625rem 3.75rem", fontSize: "text-xl" }
|
|
229
|
+
},
|
|
230
|
+
variants: [
|
|
231
|
+
{
|
|
232
|
+
id: "primary",
|
|
233
|
+
name: "Primary",
|
|
234
|
+
enabled: true,
|
|
235
|
+
priority: 1,
|
|
236
|
+
background: {
|
|
237
|
+
type: "gradient",
|
|
238
|
+
stops: ["primary", "accent"],
|
|
239
|
+
direction: "to-r"
|
|
240
|
+
},
|
|
241
|
+
textColorToken: "primaryForeground",
|
|
242
|
+
borderRadius: "rounded-lg",
|
|
243
|
+
shadow: { elevation: "low", softness: "soft", position: "bottom" },
|
|
244
|
+
effects: {
|
|
245
|
+
hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
id: "secondary",
|
|
250
|
+
name: "Secondary",
|
|
251
|
+
enabled: true,
|
|
252
|
+
priority: 2,
|
|
253
|
+
background: {
|
|
254
|
+
type: "gradient",
|
|
255
|
+
stops: ["secondary", "accent"],
|
|
256
|
+
direction: "to-br"
|
|
257
|
+
},
|
|
258
|
+
textColorToken: "primaryForeground",
|
|
259
|
+
borderRadius: "rounded-lg",
|
|
260
|
+
shadow: { elevation: "low", softness: "soft", position: "bottom" },
|
|
261
|
+
effects: {
|
|
262
|
+
hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
id: "outline",
|
|
267
|
+
name: "Outline",
|
|
268
|
+
enabled: true,
|
|
269
|
+
priority: 3,
|
|
270
|
+
background: { type: "transparent" },
|
|
271
|
+
textColorToken: "primary",
|
|
272
|
+
borderRadius: "rounded-lg",
|
|
273
|
+
border: { widthClass: "border", colorToken: "primary" },
|
|
274
|
+
effects: {
|
|
275
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
id: "ghost",
|
|
280
|
+
name: "Ghost",
|
|
281
|
+
enabled: true,
|
|
282
|
+
priority: 3,
|
|
283
|
+
background: { type: "transparent" },
|
|
284
|
+
textColorToken: "text",
|
|
285
|
+
borderRadius: "rounded-lg",
|
|
286
|
+
effects: {
|
|
287
|
+
hover: [
|
|
288
|
+
{ effectId: "background-on-hover", options: { colorToken: "surface" } }
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
// ../theme-core/src/buttons/personalities/confident-chip.ts
|
|
297
|
+
var confidentChip = defineButtonPersonality({
|
|
298
|
+
id: "confident-chip",
|
|
299
|
+
name: "Confident Chip",
|
|
300
|
+
description: "Mid-radius solid buttons with a crisp hover.",
|
|
301
|
+
tags: { tone: "classic", energy: "calm", motion: "standard", era: "modern" },
|
|
302
|
+
buttonSystem: {
|
|
303
|
+
global: {
|
|
304
|
+
cornerStyle: "rounded",
|
|
305
|
+
shadow: "medium",
|
|
306
|
+
textTransform: "none",
|
|
307
|
+
fontWeight: 600,
|
|
308
|
+
borderWidth: 1,
|
|
309
|
+
hoverTransform: "none",
|
|
310
|
+
hoverColor: "none"
|
|
311
|
+
},
|
|
312
|
+
variants: [
|
|
313
|
+
{
|
|
314
|
+
id: "primary",
|
|
315
|
+
name: "Primary",
|
|
316
|
+
enabled: true,
|
|
317
|
+
priority: 1,
|
|
318
|
+
background: { type: "solid", colorToken: "primary" },
|
|
319
|
+
textColorToken: "primaryForeground",
|
|
320
|
+
borderRadius: "rounded-md",
|
|
321
|
+
shadow: { elevation: "medium", softness: "soft", position: "bottom" },
|
|
322
|
+
effects: {
|
|
323
|
+
hover: [{ effectId: "darken-background", options: { amount: 60 } }],
|
|
324
|
+
active: [{ effectId: "scale-down", options: { scale: "0.97" } }]
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
id: "secondary",
|
|
329
|
+
name: "Secondary",
|
|
330
|
+
enabled: true,
|
|
331
|
+
priority: 2,
|
|
332
|
+
background: { type: "solid", colorToken: "surface" },
|
|
333
|
+
textColorToken: "text",
|
|
334
|
+
borderRadius: "rounded-md",
|
|
335
|
+
border: { widthClass: "border", colorToken: "border" },
|
|
336
|
+
effects: {
|
|
337
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
id: "outline",
|
|
342
|
+
name: "Outline",
|
|
343
|
+
enabled: true,
|
|
344
|
+
priority: 3,
|
|
345
|
+
background: { type: "transparent" },
|
|
346
|
+
textColorToken: "primary",
|
|
347
|
+
borderRadius: "rounded-md",
|
|
348
|
+
border: { widthClass: "border", colorToken: "primary" },
|
|
349
|
+
effects: {
|
|
350
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
id: "ghost",
|
|
355
|
+
name: "Ghost",
|
|
356
|
+
enabled: true,
|
|
357
|
+
priority: 3,
|
|
358
|
+
background: { type: "transparent" },
|
|
359
|
+
textColorToken: "primary",
|
|
360
|
+
borderRadius: "rounded-md",
|
|
361
|
+
effects: {
|
|
362
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
]
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
// ../theme-core/src/buttons/personalities/editorial-link.ts
|
|
370
|
+
var editorialLink = defineButtonPersonality({
|
|
371
|
+
id: "editorial-link",
|
|
372
|
+
name: "Editorial Link",
|
|
373
|
+
description: "Link-style with a growing underline. Refined, typographic.",
|
|
374
|
+
tags: { tone: "minimal", energy: "calm", motion: "subtle", era: "editorial" },
|
|
375
|
+
buttonSystem: {
|
|
376
|
+
global: {
|
|
377
|
+
cornerStyle: "square",
|
|
378
|
+
shadow: "none",
|
|
379
|
+
textTransform: "none",
|
|
380
|
+
fontWeight: 500,
|
|
381
|
+
borderWidth: 1,
|
|
382
|
+
hoverTransform: "none",
|
|
383
|
+
hoverColor: "none"
|
|
384
|
+
},
|
|
385
|
+
variants: [
|
|
386
|
+
{
|
|
387
|
+
id: "primary",
|
|
388
|
+
name: "Primary",
|
|
389
|
+
enabled: true,
|
|
390
|
+
priority: 1,
|
|
391
|
+
background: { type: "transparent" },
|
|
392
|
+
textColorToken: "text",
|
|
393
|
+
borderRadius: "rounded-none",
|
|
394
|
+
shadow: { elevation: "none", softness: null, position: "bottom" },
|
|
395
|
+
sizes: {
|
|
396
|
+
sm: { padding: "0.25rem 0" },
|
|
397
|
+
md: { padding: "0.5rem 0" },
|
|
398
|
+
lg: { padding: "0.625rem 0" },
|
|
399
|
+
xl: { padding: "0.75rem 0" }
|
|
400
|
+
},
|
|
401
|
+
effects: {
|
|
402
|
+
base: [
|
|
403
|
+
{ effectId: "border-bottom-grow", options: { height: 2, colorToken: "text", origin: "left" } }
|
|
404
|
+
]
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
id: "secondary",
|
|
409
|
+
name: "Secondary",
|
|
410
|
+
enabled: true,
|
|
411
|
+
priority: 2,
|
|
412
|
+
background: { type: "transparent" },
|
|
413
|
+
textColorToken: "mutedText",
|
|
414
|
+
borderRadius: "rounded-none",
|
|
415
|
+
shadow: { elevation: "none", softness: null, position: "bottom" },
|
|
416
|
+
sizes: {
|
|
417
|
+
sm: { padding: "0.25rem 0" },
|
|
418
|
+
md: { padding: "0.5rem 0" },
|
|
419
|
+
lg: { padding: "0.625rem 0" },
|
|
420
|
+
xl: { padding: "0.75rem 0" }
|
|
421
|
+
},
|
|
422
|
+
effects: {
|
|
423
|
+
base: [
|
|
424
|
+
{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "mutedText", origin: "left" } }
|
|
425
|
+
]
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
id: "outline",
|
|
430
|
+
name: "Outline",
|
|
431
|
+
enabled: true,
|
|
432
|
+
priority: 3,
|
|
433
|
+
background: { type: "transparent" },
|
|
434
|
+
textColorToken: "accent",
|
|
435
|
+
borderRadius: "rounded-none",
|
|
436
|
+
shadow: { elevation: "none", softness: null, position: "bottom" },
|
|
437
|
+
sizes: {
|
|
438
|
+
sm: { padding: "0.25rem 0" },
|
|
439
|
+
md: { padding: "0.5rem 0" },
|
|
440
|
+
lg: { padding: "0.625rem 0" },
|
|
441
|
+
xl: { padding: "0.75rem 0" }
|
|
442
|
+
},
|
|
443
|
+
effects: {
|
|
444
|
+
base: [
|
|
445
|
+
{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }
|
|
446
|
+
]
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
id: "ghost",
|
|
451
|
+
name: "Ghost",
|
|
452
|
+
enabled: true,
|
|
453
|
+
priority: 3,
|
|
454
|
+
background: { type: "transparent" },
|
|
455
|
+
textColorToken: "mutedText",
|
|
456
|
+
borderRadius: "rounded-none",
|
|
457
|
+
shadow: { elevation: "none", softness: null, position: "bottom" },
|
|
458
|
+
sizes: {
|
|
459
|
+
sm: { padding: "0.25rem 0" },
|
|
460
|
+
md: { padding: "0.5rem 0" },
|
|
461
|
+
lg: { padding: "0.625rem 0" },
|
|
462
|
+
xl: { padding: "0.75rem 0" }
|
|
463
|
+
},
|
|
464
|
+
effects: {
|
|
465
|
+
hover: [{ effectId: "opacity-reduce", options: { reduction: -20 } }]
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
]
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
// ../theme-core/src/buttons/personalities/ink-stamp.ts
|
|
473
|
+
var inkStamp = defineButtonPersonality({
|
|
474
|
+
id: "ink-stamp",
|
|
475
|
+
name: "Ink Stamp",
|
|
476
|
+
description: "Hand-stamped block-print buttons with a slight lift on hover.",
|
|
477
|
+
tags: { tone: "bold", energy: "vibrant", motion: "standard", era: "organic" },
|
|
478
|
+
buttonSystem: {
|
|
479
|
+
global: {
|
|
480
|
+
cornerStyle: "rounded",
|
|
481
|
+
shadow: "none",
|
|
482
|
+
textTransform: "uppercase",
|
|
483
|
+
fontWeight: 600,
|
|
484
|
+
borderWidth: 1,
|
|
485
|
+
hoverTransform: "none",
|
|
486
|
+
hoverColor: "none",
|
|
487
|
+
letterSpacing: "loose"
|
|
488
|
+
},
|
|
489
|
+
sizes: {
|
|
490
|
+
sm: { padding: "0.5rem 1.25rem", fontSize: "text-xs" },
|
|
491
|
+
md: { padding: "0.75rem 1.75rem", fontSize: "text-sm" },
|
|
492
|
+
lg: { padding: "0.875rem 2.25rem", fontSize: "text-base" },
|
|
493
|
+
xl: { padding: "1.125rem 2.75rem", fontSize: "text-lg" }
|
|
494
|
+
},
|
|
495
|
+
variants: [
|
|
496
|
+
{
|
|
497
|
+
id: "primary",
|
|
498
|
+
name: "Primary",
|
|
499
|
+
enabled: true,
|
|
500
|
+
priority: 1,
|
|
501
|
+
background: { type: "solid", colorToken: "primary" },
|
|
502
|
+
textColorToken: "primaryForeground",
|
|
503
|
+
borderRadius: "rounded-md",
|
|
504
|
+
effects: {
|
|
505
|
+
hover: [
|
|
506
|
+
{ effectId: "drop-shadow", options: { intensity: "medium" } },
|
|
507
|
+
{ effectId: "scale-up", options: { scale: "1.02" } }
|
|
508
|
+
],
|
|
509
|
+
active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
|
|
510
|
+
}
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
id: "secondary",
|
|
514
|
+
name: "Secondary",
|
|
515
|
+
enabled: true,
|
|
516
|
+
priority: 2,
|
|
517
|
+
background: { type: "transparent" },
|
|
518
|
+
textColorToken: "primary",
|
|
519
|
+
borderRadius: "rounded-md",
|
|
520
|
+
border: { widthClass: "border-2", colorToken: "primary" },
|
|
521
|
+
effects: {
|
|
522
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
523
|
+
}
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
id: "outline",
|
|
527
|
+
name: "Outline",
|
|
528
|
+
enabled: true,
|
|
529
|
+
priority: 3,
|
|
530
|
+
background: { type: "transparent" },
|
|
531
|
+
textColorToken: "text",
|
|
532
|
+
borderRadius: "rounded-md",
|
|
533
|
+
border: { widthClass: "border-2", colorToken: "border" },
|
|
534
|
+
effects: {
|
|
535
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
536
|
+
}
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
id: "ghost",
|
|
540
|
+
name: "Ghost",
|
|
541
|
+
enabled: true,
|
|
542
|
+
priority: 3,
|
|
543
|
+
background: { type: "transparent" },
|
|
544
|
+
textColorToken: "accent",
|
|
545
|
+
borderRadius: "rounded-none",
|
|
546
|
+
sizes: {
|
|
547
|
+
sm: { padding: "0.375rem 0", fontSize: "text-xs" },
|
|
548
|
+
md: { padding: "0.5rem 0", fontSize: "text-sm" },
|
|
549
|
+
lg: { padding: "0.625rem 0", fontSize: "text-base" },
|
|
550
|
+
xl: { padding: "0.75rem 0", fontSize: "text-lg" }
|
|
551
|
+
},
|
|
552
|
+
effects: {
|
|
553
|
+
base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
]
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
// ../theme-core/src/buttons/personalities/pebble.ts
|
|
561
|
+
var pebble = defineButtonPersonality({
|
|
562
|
+
id: "pebble",
|
|
563
|
+
name: "Pebble",
|
|
564
|
+
description: "Generous pill buttons with a soft hover lift.",
|
|
565
|
+
tags: { tone: "classic", energy: "calm", motion: "standard", era: "organic" },
|
|
566
|
+
buttonSystem: {
|
|
567
|
+
global: {
|
|
568
|
+
cornerStyle: "pill",
|
|
569
|
+
shadow: "none",
|
|
570
|
+
textTransform: "none",
|
|
571
|
+
fontWeight: 500,
|
|
572
|
+
borderWidth: 2,
|
|
573
|
+
hoverTransform: "none",
|
|
574
|
+
hoverColor: "none"
|
|
575
|
+
},
|
|
576
|
+
sizes: {
|
|
577
|
+
sm: { padding: "0.625rem 1.75rem", fontSize: "text-sm" },
|
|
578
|
+
md: { padding: "0.875rem 2.25rem" },
|
|
579
|
+
lg: { padding: "1.125rem 2.75rem", fontSize: "text-lg" },
|
|
580
|
+
xl: { padding: "1.5rem 3.5rem", fontSize: "text-xl" }
|
|
581
|
+
},
|
|
582
|
+
variants: [
|
|
583
|
+
{
|
|
584
|
+
id: "primary",
|
|
585
|
+
name: "Primary",
|
|
586
|
+
enabled: true,
|
|
587
|
+
priority: 1,
|
|
588
|
+
background: { type: "solid", colorToken: "primary" },
|
|
589
|
+
textColorToken: "primaryForeground",
|
|
590
|
+
borderRadius: "rounded-full",
|
|
591
|
+
effects: {
|
|
592
|
+
hover: [
|
|
593
|
+
{ effectId: "scale-up", options: { scale: "1.03" } },
|
|
594
|
+
{ effectId: "drop-shadow", options: { intensity: "medium" } }
|
|
595
|
+
]
|
|
596
|
+
}
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
id: "secondary",
|
|
600
|
+
name: "Secondary",
|
|
601
|
+
enabled: true,
|
|
602
|
+
priority: 2,
|
|
603
|
+
background: { type: "transparent" },
|
|
604
|
+
textColorToken: "primary",
|
|
605
|
+
borderRadius: "rounded-full",
|
|
606
|
+
border: { widthClass: "border-2", colorToken: "accent" },
|
|
607
|
+
effects: {
|
|
608
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "accent" } }]
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
id: "outline",
|
|
613
|
+
name: "Outline",
|
|
614
|
+
enabled: true,
|
|
615
|
+
priority: 3,
|
|
616
|
+
background: { type: "transparent" },
|
|
617
|
+
textColorToken: "text",
|
|
618
|
+
borderRadius: "rounded-full",
|
|
619
|
+
border: { widthClass: "border", colorToken: "border" },
|
|
620
|
+
effects: {
|
|
621
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
622
|
+
}
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
id: "ghost",
|
|
626
|
+
name: "Ghost",
|
|
627
|
+
enabled: true,
|
|
628
|
+
priority: 3,
|
|
629
|
+
background: { type: "transparent" },
|
|
630
|
+
textColorToken: "primary",
|
|
631
|
+
borderRadius: "rounded-full",
|
|
632
|
+
sizes: {
|
|
633
|
+
sm: { padding: "0.375rem 0.875rem", fontSize: "text-sm" },
|
|
634
|
+
md: { padding: "0.5rem 1rem" },
|
|
635
|
+
lg: { padding: "0.625rem 1.25rem", fontSize: "text-lg" },
|
|
636
|
+
xl: { padding: "0.75rem 1.5rem", fontSize: "text-xl" }
|
|
637
|
+
},
|
|
638
|
+
effects: {
|
|
639
|
+
hover: [{ effectId: "opacity-reduce", options: { reduction: 30 } }]
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
]
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
// ../theme-core/src/buttons/personalities/soft-pill.ts
|
|
647
|
+
var softPill = defineButtonPersonality({
|
|
648
|
+
id: "soft-pill",
|
|
649
|
+
name: "Soft Pill",
|
|
650
|
+
description: "Rounded pills with a gentle lift on hover. Quietly modern.",
|
|
651
|
+
tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
|
|
652
|
+
buttonSystem: {
|
|
653
|
+
global: {
|
|
654
|
+
cornerStyle: "pill",
|
|
655
|
+
shadow: "low",
|
|
656
|
+
textTransform: "none",
|
|
657
|
+
fontWeight: 500,
|
|
658
|
+
borderWidth: 2,
|
|
659
|
+
hoverTransform: "lift",
|
|
660
|
+
hoverColor: "none"
|
|
661
|
+
},
|
|
662
|
+
variants: [
|
|
663
|
+
{
|
|
664
|
+
id: "primary",
|
|
665
|
+
name: "Primary",
|
|
666
|
+
enabled: true,
|
|
667
|
+
priority: 1,
|
|
668
|
+
background: { type: "solid", colorToken: "primary" },
|
|
669
|
+
textColorToken: "primaryForeground",
|
|
670
|
+
borderRadius: "rounded-full",
|
|
671
|
+
shadow: { elevation: "low", softness: "soft", position: "bottom" },
|
|
672
|
+
effects: {
|
|
673
|
+
hover: [{ effectId: "lift", options: { translateY: "-1px" } }],
|
|
674
|
+
active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
id: "secondary",
|
|
679
|
+
name: "Secondary",
|
|
680
|
+
enabled: true,
|
|
681
|
+
priority: 2,
|
|
682
|
+
background: { type: "transparent" },
|
|
683
|
+
textColorToken: "primary",
|
|
684
|
+
borderRadius: "rounded-full",
|
|
685
|
+
border: { widthClass: "border-2", colorToken: "primary" },
|
|
686
|
+
effects: {
|
|
687
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
id: "outline",
|
|
692
|
+
name: "Outline",
|
|
693
|
+
enabled: true,
|
|
694
|
+
priority: 3,
|
|
695
|
+
background: { type: "transparent" },
|
|
696
|
+
textColorToken: "text",
|
|
697
|
+
borderRadius: "rounded-full",
|
|
698
|
+
border: { widthClass: "border", colorToken: "border" },
|
|
699
|
+
effects: {
|
|
700
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
701
|
+
}
|
|
702
|
+
},
|
|
703
|
+
{
|
|
704
|
+
id: "ghost",
|
|
705
|
+
name: "Ghost",
|
|
706
|
+
enabled: true,
|
|
707
|
+
priority: 3,
|
|
708
|
+
background: { type: "transparent" },
|
|
709
|
+
textColorToken: "text",
|
|
710
|
+
borderRadius: "rounded-full",
|
|
711
|
+
effects: {
|
|
712
|
+
hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
// ../theme-core/src/buttons/personalities/index.ts
|
|
720
|
+
var buttonPersonalities = [
|
|
721
|
+
softPill,
|
|
722
|
+
confidentChip,
|
|
723
|
+
editorialLink,
|
|
724
|
+
pebble,
|
|
725
|
+
inkStamp,
|
|
726
|
+
brushedWash
|
|
727
|
+
];
|
|
728
|
+
var personalitiesById = new Map(
|
|
729
|
+
buttonPersonalities.map((p) => [p.id, p])
|
|
730
|
+
);
|
|
731
|
+
|
|
732
|
+
// ../theme-core/src/schema.ts
|
|
733
|
+
import { z as z14 } from "zod";
|
|
734
|
+
|
|
735
|
+
// ../theme-core/src/lib/media.ts
|
|
736
|
+
import z4 from "zod";
|
|
737
|
+
var hotspotSchema = z4.object({
|
|
738
|
+
x: z4.number().min(0).max(1),
|
|
739
|
+
y: z4.number().min(0).max(1),
|
|
740
|
+
radius: z4.number().optional()
|
|
741
|
+
});
|
|
742
|
+
var rotationSchema = z4.union([z4.literal(0), z4.literal(90), z4.literal(180), z4.literal(270)]);
|
|
743
|
+
var rectSchema = z4.tuple([z4.number(), z4.number(), z4.number(), z4.number()]);
|
|
744
|
+
var aspectCropSchema = z4.object({
|
|
745
|
+
aspect: z4.preprocess((value) => value == null ? void 0 : value, z4.string().optional()),
|
|
746
|
+
rect: z4.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
|
|
747
|
+
hotspot: z4.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
|
|
748
|
+
rotation: z4.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
|
|
749
|
+
});
|
|
750
|
+
var transformSchema = z4.object({
|
|
751
|
+
aspectCrops: z4.preprocess((value) => {
|
|
752
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
753
|
+
return void 0;
|
|
754
|
+
}
|
|
755
|
+
return value;
|
|
756
|
+
}, z4.record(z4.string(), aspectCropSchema.catch({}))).optional(),
|
|
757
|
+
rect: rectSchema.optional(),
|
|
758
|
+
hotspot: hotspotSchema.optional(),
|
|
759
|
+
rotation: rotationSchema.optional()
|
|
760
|
+
});
|
|
761
|
+
var mediaSchema = z4.object({
|
|
762
|
+
type: z4.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
|
|
763
|
+
purpose: z4.string().optional(),
|
|
764
|
+
placeholder: z4.boolean().default(true).optional(),
|
|
765
|
+
assetId: z4.string().optional(),
|
|
766
|
+
identifier: z4.string().optional(),
|
|
767
|
+
src: z4.string().optional(),
|
|
768
|
+
alt: z4.string().optional(),
|
|
769
|
+
filename: z4.string().optional(),
|
|
770
|
+
mimeType: z4.string().optional(),
|
|
771
|
+
width: z4.number().optional(),
|
|
772
|
+
height: z4.number().optional(),
|
|
773
|
+
storageBucket: z4.string().optional(),
|
|
774
|
+
storagePath: z4.string().optional(),
|
|
775
|
+
transform: transformSchema.optional()
|
|
776
|
+
});
|
|
777
|
+
|
|
778
|
+
// ../theme-core/src/buttons/generateButtonCss.ts
|
|
779
|
+
var BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
|
|
780
|
+
|
|
184
781
|
// ../theme-core/src/cards/types.ts
|
|
185
|
-
import { z as
|
|
186
|
-
var cardSpacingSchema =
|
|
187
|
-
var gradientDirectionSchema2 =
|
|
188
|
-
var cardBackgroundSchema =
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
type:
|
|
192
|
-
fromToken:
|
|
193
|
-
toToken:
|
|
782
|
+
import { z as z5 } from "zod";
|
|
783
|
+
var cardSpacingSchema = z5.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
|
|
784
|
+
var gradientDirectionSchema2 = z5.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
|
|
785
|
+
var cardBackgroundSchema = z5.discriminatedUnion("type", [
|
|
786
|
+
z5.object({ type: z5.literal("solid"), colorToken: z5.string() }),
|
|
787
|
+
z5.object({
|
|
788
|
+
type: z5.literal("gradient"),
|
|
789
|
+
fromToken: z5.string(),
|
|
790
|
+
toToken: z5.string(),
|
|
194
791
|
direction: gradientDirectionSchema2
|
|
195
792
|
}),
|
|
196
|
-
|
|
793
|
+
z5.object({ type: z5.literal("transparent") })
|
|
197
794
|
]);
|
|
198
|
-
var cardBorderSchema =
|
|
199
|
-
widthClass:
|
|
200
|
-
colorToken:
|
|
201
|
-
});
|
|
202
|
-
var cardVariantSchema =
|
|
203
|
-
id:
|
|
204
|
-
name:
|
|
205
|
-
enabled:
|
|
206
|
-
priority:
|
|
795
|
+
var cardBorderSchema = z5.object({
|
|
796
|
+
widthClass: z5.string(),
|
|
797
|
+
colorToken: z5.string()
|
|
798
|
+
});
|
|
799
|
+
var cardVariantSchema = z5.object({
|
|
800
|
+
id: z5.string(),
|
|
801
|
+
name: z5.string().min(1).max(20),
|
|
802
|
+
enabled: z5.boolean(),
|
|
803
|
+
priority: z5.union([z5.literal(1), z5.literal(2), z5.literal(3)]),
|
|
207
804
|
// Appearance (token-based)
|
|
208
805
|
background: cardBackgroundSchema,
|
|
209
806
|
spacing: cardSpacingSchema,
|
|
210
807
|
// Optional overrides (uses theme defaults if not specified)
|
|
211
|
-
shadow:
|
|
212
|
-
elevation:
|
|
213
|
-
softness:
|
|
214
|
-
position:
|
|
808
|
+
shadow: z5.object({
|
|
809
|
+
elevation: z5.enum(["none", "low", "medium", "high"]),
|
|
810
|
+
softness: z5.enum(["crisp", "soft", "hard"]).nullable(),
|
|
811
|
+
position: z5.enum(["bottom", "bottom-right"]).default("bottom")
|
|
215
812
|
}).optional(),
|
|
216
|
-
corners:
|
|
813
|
+
corners: z5.enum(["square", "soft", "rounded", "pill"]).optional(),
|
|
217
814
|
// Border (optional)
|
|
218
815
|
border: cardBorderSchema.optional()
|
|
219
816
|
});
|
|
220
|
-
var cardSystemSchema =
|
|
221
|
-
variants:
|
|
817
|
+
var cardSystemSchema = z5.object({
|
|
818
|
+
variants: z5.array(cardVariantSchema).min(1).max(3)
|
|
222
819
|
});
|
|
223
820
|
|
|
224
821
|
// ../theme-core/src/accordions/types.ts
|
|
225
|
-
import { z as
|
|
226
|
-
var accordionIconSchema =
|
|
822
|
+
import { z as z6 } from "zod";
|
|
823
|
+
var accordionIconSchema = z6.enum([
|
|
227
824
|
"plus-minus",
|
|
228
825
|
// + becomes - (swap or rotate 90°)
|
|
229
826
|
"chevron",
|
|
@@ -235,180 +832,180 @@ var accordionIconSchema = z4.enum([
|
|
|
235
832
|
"circle-plus-minus"
|
|
236
833
|
// ⊕ becomes ⊖ (swap with fade)
|
|
237
834
|
]);
|
|
238
|
-
var accordionSystemSchema =
|
|
835
|
+
var accordionSystemSchema = z6.object({
|
|
239
836
|
// Visual styling (solid color only - gradients can be added later if needed)
|
|
240
|
-
background:
|
|
241
|
-
type:
|
|
242
|
-
colorToken:
|
|
837
|
+
background: z6.object({
|
|
838
|
+
type: z6.literal("solid"),
|
|
839
|
+
colorToken: z6.string()
|
|
243
840
|
}),
|
|
244
841
|
// Spacing (padding inside items)
|
|
245
|
-
spacing:
|
|
842
|
+
spacing: z6.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
|
|
246
843
|
// Border radius (null = inherit from theme.corners)
|
|
247
|
-
corners:
|
|
844
|
+
corners: z6.enum(["square", "soft", "rounded", "pill"]).nullable(),
|
|
248
845
|
// Border styling (null = inherit from theme.border)
|
|
249
|
-
border:
|
|
250
|
-
widthClass:
|
|
846
|
+
border: z6.object({
|
|
847
|
+
widthClass: z6.string(),
|
|
251
848
|
// e.g., 'border', 'border-2', 'border-0'
|
|
252
|
-
colorToken:
|
|
849
|
+
colorToken: z6.string()
|
|
253
850
|
}).nullable(),
|
|
254
851
|
// Shadow (null = inherit from theme.shadow)
|
|
255
|
-
shadow:
|
|
256
|
-
elevation:
|
|
257
|
-
softness:
|
|
258
|
-
position:
|
|
852
|
+
shadow: z6.object({
|
|
853
|
+
elevation: z6.enum(["none", "low", "medium", "high"]),
|
|
854
|
+
softness: z6.enum(["soft", "crisp", "hard"]).nullable(),
|
|
855
|
+
position: z6.enum(["bottom", "bottom-right"])
|
|
259
856
|
}).nullable(),
|
|
260
857
|
// Icon style and animation
|
|
261
|
-
icon:
|
|
858
|
+
icon: z6.object({
|
|
262
859
|
style: accordionIconSchema,
|
|
263
|
-
position:
|
|
264
|
-
size:
|
|
860
|
+
position: z6.enum(["left", "right"]),
|
|
861
|
+
size: z6.enum(["sm", "md", "lg"])
|
|
265
862
|
}),
|
|
266
863
|
// Trigger (question) styling
|
|
267
|
-
trigger:
|
|
268
|
-
textColorToken:
|
|
269
|
-
fontWeight:
|
|
864
|
+
trigger: z6.object({
|
|
865
|
+
textColorToken: z6.string(),
|
|
866
|
+
fontWeight: z6.enum(["regular", "medium", "semibold", "bold"]).nullable()
|
|
270
867
|
// null = inherit from theme
|
|
271
868
|
}),
|
|
272
869
|
// Hover state styling
|
|
273
|
-
hover:
|
|
274
|
-
backgroundColorToken:
|
|
275
|
-
textColorToken:
|
|
276
|
-
borderColorToken:
|
|
870
|
+
hover: z6.object({
|
|
871
|
+
backgroundColorToken: z6.string().optional(),
|
|
872
|
+
textColorToken: z6.string().optional(),
|
|
873
|
+
borderColorToken: z6.string().optional()
|
|
277
874
|
}),
|
|
278
875
|
// Content (answer) styling
|
|
279
|
-
content:
|
|
280
|
-
textColorToken:
|
|
876
|
+
content: z6.object({
|
|
877
|
+
textColorToken: z6.string()
|
|
281
878
|
})
|
|
282
879
|
});
|
|
283
880
|
|
|
284
881
|
// ../theme-core/src/inputs/types.ts
|
|
285
|
-
import { z as
|
|
286
|
-
var inputSystemSchema =
|
|
882
|
+
import { z as z7 } from "zod";
|
|
883
|
+
var inputSystemSchema = z7.object({
|
|
287
884
|
// Base styling (applied to all inputs)
|
|
288
|
-
base:
|
|
289
|
-
background:
|
|
290
|
-
|
|
291
|
-
type:
|
|
292
|
-
colorToken:
|
|
885
|
+
base: z7.object({
|
|
886
|
+
background: z7.union([
|
|
887
|
+
z7.object({
|
|
888
|
+
type: z7.literal("solid"),
|
|
889
|
+
colorToken: z7.string()
|
|
293
890
|
}),
|
|
294
|
-
|
|
295
|
-
type:
|
|
891
|
+
z7.object({
|
|
892
|
+
type: z7.literal("transparent")
|
|
296
893
|
})
|
|
297
894
|
]),
|
|
298
|
-
textColorToken:
|
|
299
|
-
border:
|
|
300
|
-
widthClass:
|
|
895
|
+
textColorToken: z7.string(),
|
|
896
|
+
border: z7.object({
|
|
897
|
+
widthClass: z7.string(),
|
|
301
898
|
// e.g., 'border', 'border-2'
|
|
302
|
-
colorToken:
|
|
303
|
-
style:
|
|
899
|
+
colorToken: z7.string(),
|
|
900
|
+
style: z7.enum(["all", "underline"]).optional()
|
|
304
901
|
}),
|
|
305
|
-
corners:
|
|
902
|
+
corners: z7.enum(["square", "soft", "rounded", "pill"]).nullable(),
|
|
306
903
|
// null = inherit from theme.corners
|
|
307
|
-
shadow:
|
|
308
|
-
elevation:
|
|
309
|
-
softness:
|
|
904
|
+
shadow: z7.object({
|
|
905
|
+
elevation: z7.enum(["none", "low", "medium"]),
|
|
906
|
+
softness: z7.enum(["soft", "crisp", "hard"]).nullable()
|
|
310
907
|
}).nullable(),
|
|
311
|
-
spacing:
|
|
908
|
+
spacing: z7.enum(["compact", "cozy", "medium", "comfortable"]),
|
|
312
909
|
// padding inside inputs
|
|
313
|
-
fontSize:
|
|
910
|
+
fontSize: z7.enum(["sm", "base", "lg"])
|
|
314
911
|
}),
|
|
315
912
|
// Label styling
|
|
316
|
-
label:
|
|
317
|
-
textColorToken:
|
|
318
|
-
fontWeight:
|
|
319
|
-
fontSize:
|
|
320
|
-
textTransform:
|
|
321
|
-
letterSpacing:
|
|
322
|
-
opacity:
|
|
913
|
+
label: z7.object({
|
|
914
|
+
textColorToken: z7.string(),
|
|
915
|
+
fontWeight: z7.enum(["regular", "medium", "semibold", "bold", "black"]),
|
|
916
|
+
fontSize: z7.enum(["2xs", "xs", "sm", "base"]),
|
|
917
|
+
textTransform: z7.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
|
|
918
|
+
letterSpacing: z7.enum(["normal", "wide", "wider", "widest"]).optional(),
|
|
919
|
+
opacity: z7.number().min(0.2).max(1).optional()
|
|
323
920
|
}),
|
|
324
921
|
// Focus state
|
|
325
|
-
focus:
|
|
326
|
-
ringColorToken:
|
|
327
|
-
ringWidth:
|
|
328
|
-
borderColorToken:
|
|
922
|
+
focus: z7.object({
|
|
923
|
+
ringColorToken: z7.string(),
|
|
924
|
+
ringWidth: z7.enum(["0", "1", "2", "3"]),
|
|
925
|
+
borderColorToken: z7.string().optional()
|
|
329
926
|
// Change border color on focus
|
|
330
927
|
}),
|
|
331
928
|
// Error state (for validation feedback)
|
|
332
|
-
error:
|
|
333
|
-
borderColorToken:
|
|
334
|
-
textColorToken:
|
|
929
|
+
error: z7.object({
|
|
930
|
+
borderColorToken: z7.string(),
|
|
931
|
+
textColorToken: z7.string()
|
|
335
932
|
}),
|
|
336
933
|
// Disabled state
|
|
337
|
-
disabled:
|
|
338
|
-
backgroundColorToken:
|
|
339
|
-
textColorToken:
|
|
340
|
-
opacity:
|
|
934
|
+
disabled: z7.object({
|
|
935
|
+
backgroundColorToken: z7.string(),
|
|
936
|
+
textColorToken: z7.string(),
|
|
937
|
+
opacity: z7.number().min(0.3).max(0.7)
|
|
341
938
|
})
|
|
342
939
|
});
|
|
343
940
|
|
|
344
941
|
// ../theme-core/src/gradients/types.ts
|
|
345
|
-
import { z as
|
|
346
|
-
var gradientStopSchema =
|
|
347
|
-
color:
|
|
942
|
+
import { z as z8 } from "zod";
|
|
943
|
+
var gradientStopSchema = z8.object({
|
|
944
|
+
color: z8.string(),
|
|
348
945
|
// Theme color token name (e.g., 'primary-500')
|
|
349
|
-
position:
|
|
946
|
+
position: z8.number().min(0).max(100)
|
|
350
947
|
// Percentage 0-100
|
|
351
948
|
});
|
|
352
|
-
var gradientConfigSchema =
|
|
353
|
-
type:
|
|
354
|
-
angle:
|
|
949
|
+
var gradientConfigSchema = z8.object({
|
|
950
|
+
type: z8.enum(["linear", "radial"]),
|
|
951
|
+
angle: z8.number().min(0).max(360).optional(),
|
|
355
952
|
// For linear gradients (degrees)
|
|
356
|
-
position:
|
|
953
|
+
position: z8.string().optional(),
|
|
357
954
|
// For radial gradients ('center', 'top left', etc.)
|
|
358
|
-
stops:
|
|
955
|
+
stops: z8.array(gradientStopSchema).min(2)
|
|
359
956
|
});
|
|
360
957
|
|
|
361
958
|
// ../theme-core/src/navigation/types.ts
|
|
362
|
-
import { z as
|
|
959
|
+
import { z as z10 } from "zod";
|
|
363
960
|
|
|
364
961
|
// ../theme-core/src/interactive/baseSchema.ts
|
|
365
|
-
import { z as
|
|
366
|
-
var interactiveTypographySchema =
|
|
962
|
+
import { z as z9 } from "zod";
|
|
963
|
+
var interactiveTypographySchema = z9.object({
|
|
367
964
|
/** Font family source */
|
|
368
|
-
typography:
|
|
965
|
+
typography: z9.enum(["body", "heading"]).default("body"),
|
|
369
966
|
/** Font weight */
|
|
370
|
-
fontWeight:
|
|
967
|
+
fontWeight: z9.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
|
|
371
968
|
/** Text transform */
|
|
372
|
-
textTransform:
|
|
969
|
+
textTransform: z9.enum(["none", "uppercase", "capitalize"]).default("none"),
|
|
373
970
|
/** Italic style */
|
|
374
|
-
italic:
|
|
971
|
+
italic: z9.boolean().default(false)
|
|
375
972
|
});
|
|
376
|
-
var effectApplicationSchema2 =
|
|
973
|
+
var effectApplicationSchema2 = z9.object({
|
|
377
974
|
/** Effect preset ID */
|
|
378
|
-
effectId:
|
|
975
|
+
effectId: z9.string(),
|
|
379
976
|
/** User-provided customization options */
|
|
380
|
-
options:
|
|
977
|
+
options: z9.record(z9.string(), z9.any()).optional()
|
|
381
978
|
});
|
|
382
|
-
var effectCompositionSchema =
|
|
979
|
+
var effectCompositionSchema = z9.object({
|
|
383
980
|
/** Effects always applied */
|
|
384
|
-
base:
|
|
981
|
+
base: z9.array(effectApplicationSchema2).optional(),
|
|
385
982
|
/** Effects applied on hover */
|
|
386
|
-
hover:
|
|
983
|
+
hover: z9.array(effectApplicationSchema2).optional(),
|
|
387
984
|
/** Effects applied on active/pressed */
|
|
388
|
-
active:
|
|
985
|
+
active: z9.array(effectApplicationSchema2).optional(),
|
|
389
986
|
/** Effects applied on focus */
|
|
390
|
-
focus:
|
|
987
|
+
focus: z9.array(effectApplicationSchema2).optional()
|
|
391
988
|
});
|
|
392
989
|
|
|
393
990
|
// ../theme-core/src/navigation/types.ts
|
|
394
|
-
var navLinkPaddingSchema =
|
|
395
|
-
var navLinkPaddingXSchema =
|
|
396
|
-
var navLinkBorderRadiusSchema =
|
|
397
|
-
var navLinkTextSizeSchema =
|
|
398
|
-
var navLinkLetterSpacingSchema =
|
|
399
|
-
var navLinkStyleSchema =
|
|
991
|
+
var navLinkPaddingSchema = z10.enum(["none", "compact", "default"]);
|
|
992
|
+
var navLinkPaddingXSchema = z10.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
|
|
993
|
+
var navLinkBorderRadiusSchema = z10.enum(["none", "sm", "md", "full"]);
|
|
994
|
+
var navLinkTextSizeSchema = z10.enum(["xs", "sm", "base", "lg"]);
|
|
995
|
+
var navLinkLetterSpacingSchema = z10.enum(["normal", "wide", "wider", "widest"]);
|
|
996
|
+
var navLinkStyleSchema = z10.object({
|
|
400
997
|
/** Display name for the style */
|
|
401
|
-
name:
|
|
998
|
+
name: z10.string().min(1).max(30).optional(),
|
|
402
999
|
/** Typography settings (inherited from interactive base) */
|
|
403
1000
|
...interactiveTypographySchema.shape,
|
|
404
1001
|
/** Text color token */
|
|
405
|
-
colorToken:
|
|
1002
|
+
colorToken: z10.string().default("text"),
|
|
406
1003
|
/** Optional text size override */
|
|
407
1004
|
textSize: navLinkTextSizeSchema.optional(),
|
|
408
1005
|
/** Optional letter spacing override */
|
|
409
1006
|
letterSpacing: navLinkLetterSpacingSchema.optional(),
|
|
410
1007
|
/** Hover/active color token (for color-change effects) */
|
|
411
|
-
hoverColorToken:
|
|
1008
|
+
hoverColorToken: z10.string().nullable().optional(),
|
|
412
1009
|
/** Padding preset */
|
|
413
1010
|
padding: navLinkPaddingSchema.default("compact"),
|
|
414
1011
|
/** Horizontal padding override (overrides horizontal component of padding preset) */
|
|
@@ -420,7 +1017,7 @@ var navLinkStyleSchema = z8.object({
|
|
|
420
1017
|
});
|
|
421
1018
|
|
|
422
1019
|
// ../theme-core/src/customCss/validation.ts
|
|
423
|
-
import { z as
|
|
1020
|
+
import { z as z11 } from "zod";
|
|
424
1021
|
var FORBIDDEN_SELECTORS = [":root", "html", "body"];
|
|
425
1022
|
var UNIVERSAL_SELECTOR = "*";
|
|
426
1023
|
var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
|
|
@@ -462,7 +1059,7 @@ function containsForbiddenSelector(selector) {
|
|
|
462
1059
|
}
|
|
463
1060
|
return false;
|
|
464
1061
|
}
|
|
465
|
-
var selectorSchema =
|
|
1062
|
+
var selectorSchema = z11.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
|
|
466
1063
|
(s) => !containsForbiddenSelector(s),
|
|
467
1064
|
{ message: "Global selectors (:root, html, body, *) are not allowed" }
|
|
468
1065
|
);
|
|
@@ -472,38 +1069,38 @@ function containsRemoteUrl(value) {
|
|
|
472
1069
|
function containsJavascriptUrl(value) {
|
|
473
1070
|
return JAVASCRIPT_URL_PATTERN.test(value);
|
|
474
1071
|
}
|
|
475
|
-
var declarationValueSchema =
|
|
1072
|
+
var declarationValueSchema = z11.string().max(500, "Declaration value too long (max 500 characters)").refine(
|
|
476
1073
|
(v) => !containsRemoteUrl(v),
|
|
477
1074
|
{ message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
|
|
478
1075
|
).refine(
|
|
479
1076
|
(v) => !containsJavascriptUrl(v),
|
|
480
1077
|
{ message: "javascript: URLs are not allowed" }
|
|
481
1078
|
);
|
|
482
|
-
var declarationsSchema =
|
|
483
|
-
|
|
1079
|
+
var declarationsSchema = z11.record(
|
|
1080
|
+
z11.string().min(1).max(100),
|
|
484
1081
|
// property name
|
|
485
1082
|
declarationValueSchema
|
|
486
1083
|
// property value
|
|
487
1084
|
);
|
|
488
|
-
var customCssRuleSchema =
|
|
489
|
-
id:
|
|
1085
|
+
var customCssRuleSchema = z11.object({
|
|
1086
|
+
id: z11.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
|
|
490
1087
|
selector: selectorSchema,
|
|
491
1088
|
declarations: declarationsSchema
|
|
492
1089
|
});
|
|
493
1090
|
var blockCustomCssRuleSchema = customCssRuleSchema.extend({
|
|
494
|
-
blockKind:
|
|
1091
|
+
blockKind: z11.string().min(1, "Block kind is required").max(50, "Block kind too long")
|
|
495
1092
|
});
|
|
496
|
-
var customCssRulesSchema =
|
|
497
|
-
var blockCustomCssRulesSchema =
|
|
1093
|
+
var customCssRulesSchema = z11.array(customCssRuleSchema).optional();
|
|
1094
|
+
var blockCustomCssRulesSchema = z11.array(blockCustomCssRuleSchema).optional();
|
|
498
1095
|
|
|
499
1096
|
// ../theme-core/src/customCss/atRuleValidation.ts
|
|
500
|
-
import { z as
|
|
1097
|
+
import { z as z12 } from "zod";
|
|
501
1098
|
var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
|
|
502
1099
|
var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
|
|
503
1100
|
var BLOCKED_AT_RULES = ["@import", "@charset"];
|
|
504
1101
|
var BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
|
|
505
|
-
var ruleIdSchema =
|
|
506
|
-
var nestedRuleSchema =
|
|
1102
|
+
var ruleIdSchema = z12.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
|
|
1103
|
+
var nestedRuleSchema = z12.object({
|
|
507
1104
|
selector: selectorSchema,
|
|
508
1105
|
declarations: declarationsSchema
|
|
509
1106
|
});
|
|
@@ -515,146 +1112,146 @@ function isValidKeyframeOffset(offset) {
|
|
|
515
1112
|
const value = parseInt(match[1], 10);
|
|
516
1113
|
return value >= 0 && value <= 100;
|
|
517
1114
|
}
|
|
518
|
-
var keyframeOffsetSchema =
|
|
1115
|
+
var keyframeOffsetSchema = z12.string().transform((offset) => offset.trim()).refine(
|
|
519
1116
|
(offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
|
|
520
1117
|
{ message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
|
|
521
1118
|
).refine(
|
|
522
1119
|
isValidKeyframeOffset,
|
|
523
1120
|
{ message: "Keyframe offset must be between 0% and 100%" }
|
|
524
1121
|
);
|
|
525
|
-
var animationNameSchema =
|
|
1122
|
+
var animationNameSchema = z12.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
|
|
526
1123
|
(name) => ANIMATION_NAME_PATTERN.test(name),
|
|
527
1124
|
{ message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
|
|
528
1125
|
);
|
|
529
|
-
var keyframeSchema =
|
|
1126
|
+
var keyframeSchema = z12.object({
|
|
530
1127
|
offset: keyframeOffsetSchema,
|
|
531
1128
|
declarations: declarationsSchema
|
|
532
1129
|
});
|
|
533
|
-
var keyframesAtRuleSchema =
|
|
1130
|
+
var keyframesAtRuleSchema = z12.object({
|
|
534
1131
|
id: ruleIdSchema,
|
|
535
|
-
type:
|
|
1132
|
+
type: z12.literal("keyframes"),
|
|
536
1133
|
name: animationNameSchema,
|
|
537
|
-
frames:
|
|
1134
|
+
frames: z12.array(keyframeSchema).min(1, "At least one keyframe is required")
|
|
538
1135
|
});
|
|
539
|
-
var fontFaceDeclarationsSchema =
|
|
1136
|
+
var fontFaceDeclarationsSchema = z12.record(z12.string().min(1).max(100), declarationValueSchema).refine(
|
|
540
1137
|
(decls) => "fontFamily" in decls || "font-family" in decls,
|
|
541
1138
|
{ message: "font-family is required in @font-face" }
|
|
542
1139
|
);
|
|
543
|
-
var fontFaceAtRuleSchema =
|
|
1140
|
+
var fontFaceAtRuleSchema = z12.object({
|
|
544
1141
|
id: ruleIdSchema,
|
|
545
|
-
type:
|
|
1142
|
+
type: z12.literal("font-face"),
|
|
546
1143
|
declarations: fontFaceDeclarationsSchema
|
|
547
1144
|
});
|
|
548
|
-
var mediaQuerySchema =
|
|
549
|
-
var mediaAtRuleSchema =
|
|
1145
|
+
var mediaQuerySchema = z12.string().min(1, "Media query is required").max(200, "Media query too long");
|
|
1146
|
+
var mediaAtRuleSchema = z12.object({
|
|
550
1147
|
id: ruleIdSchema,
|
|
551
|
-
type:
|
|
1148
|
+
type: z12.literal("media"),
|
|
552
1149
|
query: mediaQuerySchema,
|
|
553
|
-
rules:
|
|
1150
|
+
rules: z12.array(nestedRuleSchema).min(1, "At least one rule is required")
|
|
554
1151
|
});
|
|
555
|
-
var supportsConditionSchema =
|
|
556
|
-
var supportsAtRuleSchema =
|
|
1152
|
+
var supportsConditionSchema = z12.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
|
|
1153
|
+
var supportsAtRuleSchema = z12.object({
|
|
557
1154
|
id: ruleIdSchema,
|
|
558
|
-
type:
|
|
1155
|
+
type: z12.literal("supports"),
|
|
559
1156
|
condition: supportsConditionSchema,
|
|
560
|
-
rules:
|
|
1157
|
+
rules: z12.array(nestedRuleSchema).min(1, "At least one rule is required")
|
|
561
1158
|
});
|
|
562
1159
|
function containsBlockedAtRule(css) {
|
|
563
1160
|
return BLOCKED_AT_RULE_PATTERN.test(css);
|
|
564
1161
|
}
|
|
565
|
-
var rawCssSchema =
|
|
1162
|
+
var rawCssSchema = z12.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
|
|
566
1163
|
(css) => css.trim().startsWith("@"),
|
|
567
1164
|
{ message: "Raw at-rule must start with @" }
|
|
568
1165
|
).refine(
|
|
569
1166
|
(css) => !containsBlockedAtRule(css),
|
|
570
1167
|
{ message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
|
|
571
1168
|
);
|
|
572
|
-
var rawAtRuleSchema =
|
|
1169
|
+
var rawAtRuleSchema = z12.object({
|
|
573
1170
|
id: ruleIdSchema,
|
|
574
|
-
type:
|
|
1171
|
+
type: z12.literal("raw"),
|
|
575
1172
|
css: rawCssSchema
|
|
576
1173
|
});
|
|
577
|
-
var customCssAtRuleSchema =
|
|
1174
|
+
var customCssAtRuleSchema = z12.discriminatedUnion("type", [
|
|
578
1175
|
keyframesAtRuleSchema,
|
|
579
1176
|
fontFaceAtRuleSchema,
|
|
580
1177
|
mediaAtRuleSchema,
|
|
581
1178
|
supportsAtRuleSchema,
|
|
582
1179
|
rawAtRuleSchema
|
|
583
1180
|
]);
|
|
584
|
-
var customCssAtRulesSchema =
|
|
1181
|
+
var customCssAtRulesSchema = z12.array(customCssAtRuleSchema).optional();
|
|
585
1182
|
|
|
586
1183
|
// ../theme-core/src/shared/componentStyles.ts
|
|
587
|
-
import { z as
|
|
588
|
-
var componentBorderSchema =
|
|
589
|
-
width:
|
|
590
|
-
style:
|
|
591
|
-
colorToken:
|
|
1184
|
+
import { z as z13 } from "zod";
|
|
1185
|
+
var componentBorderSchema = z13.object({
|
|
1186
|
+
width: z13.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
|
|
1187
|
+
style: z13.enum(["solid", "dashed"]).default("solid"),
|
|
1188
|
+
colorToken: z13.string().optional()
|
|
592
1189
|
// defaults to "border" if not set
|
|
593
1190
|
});
|
|
594
|
-
var componentShadowSchema =
|
|
595
|
-
elevation:
|
|
1191
|
+
var componentShadowSchema = z13.object({
|
|
1192
|
+
elevation: z13.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
|
|
596
1193
|
});
|
|
597
1194
|
|
|
598
1195
|
// ../theme-core/src/schema.ts
|
|
599
|
-
var axesSchema =
|
|
600
|
-
tone:
|
|
601
|
-
energy:
|
|
602
|
-
density:
|
|
603
|
-
mediaBias:
|
|
604
|
-
conversionBias:
|
|
605
|
-
motion:
|
|
606
|
-
});
|
|
607
|
-
var colourHexString =
|
|
608
|
-
var paletteColorSchema =
|
|
609
|
-
name:
|
|
1196
|
+
var axesSchema = z14.object({
|
|
1197
|
+
tone: z14.enum(["minimal", "classic", "bold"]),
|
|
1198
|
+
energy: z14.enum(["calm", "vibrant"]),
|
|
1199
|
+
density: z14.enum(["airy", "regular", "compact"]),
|
|
1200
|
+
mediaBias: z14.enum(["text", "media", "mixed"]),
|
|
1201
|
+
conversionBias: z14.enum(["low", "med", "high"]),
|
|
1202
|
+
motion: z14.enum(["subtle", "standard", "expressive"])
|
|
1203
|
+
});
|
|
1204
|
+
var colourHexString = z14.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
|
|
1205
|
+
var paletteColorSchema = z14.object({
|
|
1206
|
+
name: z14.string().min(1),
|
|
610
1207
|
hex: colourHexString
|
|
611
1208
|
});
|
|
612
|
-
var paletteMetaSchema =
|
|
613
|
-
mode:
|
|
1209
|
+
var paletteMetaSchema = z14.object({
|
|
1210
|
+
mode: z14.enum(["light", "dark"])
|
|
614
1211
|
});
|
|
615
|
-
var paletteSchema =
|
|
616
|
-
colors:
|
|
1212
|
+
var paletteSchema = z14.object({
|
|
1213
|
+
colors: z14.array(paletteColorSchema),
|
|
617
1214
|
meta: paletteMetaSchema
|
|
618
1215
|
});
|
|
619
|
-
var typographyStyleSchema =
|
|
620
|
-
family:
|
|
621
|
-
weight:
|
|
622
|
-
letterSpacing:
|
|
623
|
-
lineHeight:
|
|
1216
|
+
var typographyStyleSchema = z14.object({
|
|
1217
|
+
family: z14.string().min(1),
|
|
1218
|
+
weight: z14.enum(["light", "regular", "medium", "semibold", "bold"]),
|
|
1219
|
+
letterSpacing: z14.enum(["tight", "normal", "loose"]),
|
|
1220
|
+
lineHeight: z14.enum(["normal", "relaxed", "loose"])
|
|
624
1221
|
});
|
|
625
1222
|
var bodyTypographyStyleSchema = typographyStyleSchema.extend({
|
|
626
|
-
size:
|
|
1223
|
+
size: z14.enum(["md", "lg", "xl"])
|
|
627
1224
|
});
|
|
628
|
-
var headingSizeSchema =
|
|
629
|
-
var headingTypographyOverridesSchema =
|
|
630
|
-
weight:
|
|
631
|
-
letterSpacing:
|
|
1225
|
+
var headingSizeSchema = z14.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
|
|
1226
|
+
var headingTypographyOverridesSchema = z14.object({
|
|
1227
|
+
weight: z14.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
|
|
1228
|
+
letterSpacing: z14.enum(["tight", "normal", "loose"]).nullable().optional(),
|
|
632
1229
|
size: headingSizeSchema.nullable().optional(),
|
|
633
|
-
lineHeight:
|
|
634
|
-
italic:
|
|
635
|
-
colorToken:
|
|
1230
|
+
lineHeight: z14.enum(["normal", "relaxed", "loose"]).nullable().optional(),
|
|
1231
|
+
italic: z14.boolean().nullable().optional(),
|
|
1232
|
+
colorToken: z14.string().min(1).nullable().optional()
|
|
636
1233
|
// Palette token name for heading color
|
|
637
1234
|
});
|
|
638
1235
|
var headingTypographyStyleSchema = typographyStyleSchema.extend({
|
|
639
|
-
case:
|
|
640
|
-
italic:
|
|
641
|
-
colorToken:
|
|
1236
|
+
case: z14.enum(["uppercase", "normal", "smallCaps"]).nullable(),
|
|
1237
|
+
italic: z14.boolean().nullable(),
|
|
1238
|
+
colorToken: z14.string().min(1).nullable().optional()
|
|
642
1239
|
// Palette token name for heading color
|
|
643
1240
|
});
|
|
644
|
-
var proseLinkUnderlineStyleSchema =
|
|
645
|
-
var proseLinkUnderlineThicknessSchema =
|
|
646
|
-
var proseLinkUnderlineOffsetSchema =
|
|
647
|
-
var proseLinkStyleSchema =
|
|
648
|
-
colorToken:
|
|
649
|
-
hoverColorToken:
|
|
650
|
-
underline:
|
|
651
|
-
decorationColorToken:
|
|
652
|
-
hoverDecorationColorToken:
|
|
1241
|
+
var proseLinkUnderlineStyleSchema = z14.enum(["solid", "dotted", "dashed"]);
|
|
1242
|
+
var proseLinkUnderlineThicknessSchema = z14.enum(["auto", "fromFont", "thin", "medium", "thick"]);
|
|
1243
|
+
var proseLinkUnderlineOffsetSchema = z14.enum(["auto", "tight", "normal", "loose"]);
|
|
1244
|
+
var proseLinkStyleSchema = z14.object({
|
|
1245
|
+
colorToken: z14.string().min(1).optional(),
|
|
1246
|
+
hoverColorToken: z14.string().min(1).optional(),
|
|
1247
|
+
underline: z14.boolean().optional(),
|
|
1248
|
+
decorationColorToken: z14.string().min(1).optional(),
|
|
1249
|
+
hoverDecorationColorToken: z14.string().min(1).optional(),
|
|
653
1250
|
underlineStyle: proseLinkUnderlineStyleSchema.optional(),
|
|
654
1251
|
underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
|
|
655
1252
|
underlineOffset: proseLinkUnderlineOffsetSchema.optional()
|
|
656
1253
|
});
|
|
657
|
-
var semanticSpacingSchema =
|
|
1254
|
+
var semanticSpacingSchema = z14.enum([
|
|
658
1255
|
"none",
|
|
659
1256
|
"compact",
|
|
660
1257
|
"cozy",
|
|
@@ -662,62 +1259,62 @@ var semanticSpacingSchema = z12.enum([
|
|
|
662
1259
|
"comfortable",
|
|
663
1260
|
"spacious"
|
|
664
1261
|
]);
|
|
665
|
-
var boxRoundedSchema =
|
|
666
|
-
var boxBackgroundOverlaySchema =
|
|
667
|
-
type:
|
|
668
|
-
color:
|
|
669
|
-
gradient:
|
|
670
|
-
opacity:
|
|
671
|
-
});
|
|
672
|
-
var boxBackgroundSchema =
|
|
673
|
-
type:
|
|
674
|
-
color:
|
|
675
|
-
gradient:
|
|
1262
|
+
var boxRoundedSchema = z14.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
|
|
1263
|
+
var boxBackgroundOverlaySchema = z14.object({
|
|
1264
|
+
type: z14.enum(["none", "color", "gradient"]).nullable().optional(),
|
|
1265
|
+
color: z14.string().nullable().optional(),
|
|
1266
|
+
gradient: z14.string().nullable().optional(),
|
|
1267
|
+
opacity: z14.number().min(0).max(1).nullable().optional()
|
|
1268
|
+
});
|
|
1269
|
+
var boxBackgroundSchema = z14.object({
|
|
1270
|
+
type: z14.enum(["color", "gradient", "image"]).optional(),
|
|
1271
|
+
color: z14.string().nullable().optional(),
|
|
1272
|
+
gradient: z14.string().nullable().optional(),
|
|
676
1273
|
image: mediaSchema.nullable().optional(),
|
|
677
|
-
objectFit:
|
|
678
|
-
scale:
|
|
679
|
-
position:
|
|
680
|
-
opacity:
|
|
1274
|
+
objectFit: z14.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
|
|
1275
|
+
scale: z14.string().nullable().optional(),
|
|
1276
|
+
position: z14.string().nullable().optional(),
|
|
1277
|
+
opacity: z14.number().min(0).max(1).nullable().optional(),
|
|
681
1278
|
overlay: boxBackgroundOverlaySchema.nullable().optional(),
|
|
682
|
-
textColor:
|
|
683
|
-
headingColor:
|
|
1279
|
+
textColor: z14.string().nullable().optional(),
|
|
1280
|
+
headingColor: z14.string().nullable().optional()
|
|
684
1281
|
});
|
|
685
|
-
var sectionStylesOverrideSchema =
|
|
1282
|
+
var sectionStylesOverrideSchema = z14.object({
|
|
686
1283
|
background: boxBackgroundSchema.nullable().optional(),
|
|
687
1284
|
spacing: semanticSpacingSchema.nullable().optional(),
|
|
688
|
-
minHeight:
|
|
1285
|
+
minHeight: z14.enum(["none", "hero", "immersive"]).nullable().optional()
|
|
689
1286
|
});
|
|
690
|
-
var containerStylesOverrideSchema =
|
|
1287
|
+
var containerStylesOverrideSchema = z14.object({
|
|
691
1288
|
background: boxBackgroundSchema.nullable().optional(),
|
|
692
1289
|
spacing: semanticSpacingSchema.nullable().optional(),
|
|
693
|
-
raised:
|
|
1290
|
+
raised: z14.boolean().nullable().optional(),
|
|
694
1291
|
rounded: boxRoundedSchema.nullable().optional(),
|
|
695
|
-
fullWidth:
|
|
1292
|
+
fullWidth: z14.boolean().nullable().optional()
|
|
696
1293
|
});
|
|
697
|
-
var cardBorderOverrideSchema =
|
|
698
|
-
enabled:
|
|
699
|
-
width:
|
|
700
|
-
colorToken:
|
|
1294
|
+
var cardBorderOverrideSchema = z14.object({
|
|
1295
|
+
enabled: z14.boolean().nullable().optional(),
|
|
1296
|
+
width: z14.enum(["none", "1", "2", "3"]).nullable().optional(),
|
|
1297
|
+
colorToken: z14.string().nullable().optional()
|
|
701
1298
|
});
|
|
702
|
-
var cardStylesOverrideSchema =
|
|
1299
|
+
var cardStylesOverrideSchema = z14.object({
|
|
703
1300
|
background: boxBackgroundSchema.nullable().optional(),
|
|
704
1301
|
border: cardBorderOverrideSchema.nullable().optional(),
|
|
705
1302
|
spacing: semanticSpacingSchema.nullable().optional(),
|
|
706
|
-
raised:
|
|
1303
|
+
raised: z14.boolean().nullable().optional(),
|
|
707
1304
|
rounded: boxRoundedSchema.nullable().optional()
|
|
708
1305
|
});
|
|
709
|
-
var blockStyleOverridesSchema =
|
|
1306
|
+
var blockStyleOverridesSchema = z14.object({
|
|
710
1307
|
sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
|
|
711
1308
|
containerStyles: containerStylesOverrideSchema.nullable().optional(),
|
|
712
1309
|
cardStyles: cardStylesOverrideSchema.nullable().optional()
|
|
713
1310
|
});
|
|
714
|
-
var blockThemeOverrideSchema =
|
|
715
|
-
typography:
|
|
1311
|
+
var blockThemeOverrideSchema = z14.object({
|
|
1312
|
+
typography: z14.object({
|
|
716
1313
|
proseLinkStyle: proseLinkStyleSchema.optional()
|
|
717
1314
|
}).optional(),
|
|
718
1315
|
styles: blockStyleOverridesSchema.optional()
|
|
719
1316
|
});
|
|
720
|
-
var typographyScaleSchema =
|
|
1317
|
+
var typographyScaleSchema = z14.enum([
|
|
721
1318
|
// New intuitive names
|
|
722
1319
|
"compact",
|
|
723
1320
|
// ratio 1.2 (was minorThird)
|
|
@@ -730,9 +1327,9 @@ var typographyScaleSchema = z12.enum([
|
|
|
730
1327
|
"majorThird",
|
|
731
1328
|
"perfectFourth"
|
|
732
1329
|
]);
|
|
733
|
-
var typographySchema =
|
|
1330
|
+
var typographySchema = z14.object({
|
|
734
1331
|
body: bodyTypographyStyleSchema,
|
|
735
|
-
headings:
|
|
1332
|
+
headings: z14.object({
|
|
736
1333
|
default: headingTypographyStyleSchema,
|
|
737
1334
|
h1: headingTypographyOverridesSchema,
|
|
738
1335
|
h2: headingTypographyOverridesSchema,
|
|
@@ -745,41 +1342,41 @@ var typographySchema = z12.object({
|
|
|
745
1342
|
scale: typographyScaleSchema,
|
|
746
1343
|
proseLinkStyle: proseLinkStyleSchema.optional()
|
|
747
1344
|
});
|
|
748
|
-
var spaceSchema =
|
|
749
|
-
var corners =
|
|
750
|
-
var shadow =
|
|
751
|
-
elevation:
|
|
752
|
-
softness:
|
|
753
|
-
position:
|
|
1345
|
+
var spaceSchema = z14.enum(["comfortable", "standard", "dense"]);
|
|
1346
|
+
var corners = z14.enum(["square", "soft", "rounded", "pill"]);
|
|
1347
|
+
var shadow = z14.object({
|
|
1348
|
+
elevation: z14.enum(["none", "low", "medium", "high"]),
|
|
1349
|
+
softness: z14.enum(["crisp", "soft", "hard"]).nullable(),
|
|
1350
|
+
position: z14.enum(["bottom", "bottom-right"]).default("bottom")
|
|
754
1351
|
});
|
|
755
|
-
var border =
|
|
756
|
-
width:
|
|
757
|
-
style:
|
|
1352
|
+
var border = z14.object({
|
|
1353
|
+
width: z14.enum(["none", "hairline", "thin", "thick"]),
|
|
1354
|
+
style: z14.enum(["solid", "dashed"])
|
|
758
1355
|
});
|
|
759
|
-
var motion =
|
|
760
|
-
level:
|
|
761
|
-
easing:
|
|
1356
|
+
var motion = z14.object({
|
|
1357
|
+
level: z14.enum(["off", "low", "medium", "high"]),
|
|
1358
|
+
easing: z14.enum(["standard", "snappy", "gentle"]).nullable()
|
|
762
1359
|
});
|
|
763
|
-
var buttonStyle =
|
|
1360
|
+
var buttonStyle = z14.object({
|
|
764
1361
|
shape: corners
|
|
765
1362
|
// Used for --radius-control CSS variable
|
|
766
1363
|
});
|
|
767
|
-
var cardStyle =
|
|
768
|
-
elevation:
|
|
769
|
-
border:
|
|
1364
|
+
var cardStyle = z14.object({
|
|
1365
|
+
elevation: z14.enum(["none", "low", "medium", "high"]),
|
|
1366
|
+
border: z14.enum(["none", "subtle", "defined"]),
|
|
770
1367
|
shape: corners,
|
|
771
|
-
headerStyle:
|
|
772
|
-
mediaTreatment:
|
|
1368
|
+
headerStyle: z14.enum(["plain", "accentBar", "subtleBg"]).nullable(),
|
|
1369
|
+
mediaTreatment: z14.enum(["square", "rounded", "bleed"]).nullable()
|
|
773
1370
|
});
|
|
774
|
-
var inputStyle =
|
|
1371
|
+
var inputStyle = z14.object({
|
|
775
1372
|
shape: corners,
|
|
776
|
-
border:
|
|
777
|
-
focus:
|
|
778
|
-
label:
|
|
1373
|
+
border: z14.enum(["subtle", "defined", "underline"]),
|
|
1374
|
+
focus: z14.enum(["glow", "ring", "underline"]),
|
|
1375
|
+
label: z14.enum(["inside", "above"])
|
|
779
1376
|
});
|
|
780
|
-
var headerVariant =
|
|
781
|
-
var headerPositioning =
|
|
782
|
-
var headerNavStyle =
|
|
1377
|
+
var headerVariant = z14.enum(["classic", "centered", "transparent", "floating", "editorial"]);
|
|
1378
|
+
var headerPositioning = z14.enum(["static", "sticky", "fixed"]);
|
|
1379
|
+
var headerNavStyle = z14.enum([
|
|
783
1380
|
"minimal",
|
|
784
1381
|
"underline",
|
|
785
1382
|
"underline-grow",
|
|
@@ -788,82 +1385,82 @@ var headerNavStyle = z12.enum([
|
|
|
788
1385
|
"frosted",
|
|
789
1386
|
"solid"
|
|
790
1387
|
]);
|
|
791
|
-
var navFontWeight =
|
|
792
|
-
var headerMaxWidth =
|
|
793
|
-
var headerContainerSchema =
|
|
794
|
-
rounded:
|
|
795
|
-
border:
|
|
796
|
-
shadow:
|
|
797
|
-
padding:
|
|
798
|
-
tint:
|
|
799
|
-
opacity:
|
|
1388
|
+
var navFontWeight = z14.enum(["regular", "medium", "semibold", "bold"]);
|
|
1389
|
+
var headerMaxWidth = z14.enum(["container", "full"]);
|
|
1390
|
+
var headerContainerSchema = z14.object({
|
|
1391
|
+
rounded: z14.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
|
|
1392
|
+
border: z14.boolean().default(true),
|
|
1393
|
+
shadow: z14.boolean().default(true),
|
|
1394
|
+
padding: z14.enum(["sm", "md", "lg"]).default("md"),
|
|
1395
|
+
tint: z14.string().nullable().optional(),
|
|
1396
|
+
opacity: z14.number().min(0).max(1).default(0.12)
|
|
800
1397
|
}).optional();
|
|
801
1398
|
var headerBorderSchema = componentBorderSchema.extend({
|
|
802
|
-
position:
|
|
1399
|
+
position: z14.enum(["bottom", "top", "both", "none"]).default("bottom")
|
|
803
1400
|
}).optional();
|
|
804
|
-
var logoStyleSchema =
|
|
805
|
-
fontFamily:
|
|
806
|
-
letterSpacing:
|
|
807
|
-
gradient:
|
|
1401
|
+
var logoStyleSchema = z14.object({
|
|
1402
|
+
fontFamily: z14.enum(["heading", "body"]).default("heading"),
|
|
1403
|
+
letterSpacing: z14.enum(["normal", "wide", "wider", "widest"]).default("normal"),
|
|
1404
|
+
gradient: z14.boolean().default(false)
|
|
808
1405
|
}).optional();
|
|
809
|
-
var headerLogoTextSchema =
|
|
810
|
-
mobileWrapLines:
|
|
811
|
-
mobileMaxWidth:
|
|
812
|
-
hideOnShrink:
|
|
1406
|
+
var headerLogoTextSchema = z14.object({
|
|
1407
|
+
mobileWrapLines: z14.union([z14.literal(1), z14.literal(2)]).optional(),
|
|
1408
|
+
mobileMaxWidth: z14.enum(["xs", "sm", "md"]).optional(),
|
|
1409
|
+
hideOnShrink: z14.boolean().optional()
|
|
813
1410
|
}).optional();
|
|
814
|
-
var navEffectsSchema =
|
|
815
|
-
underlineGradient:
|
|
816
|
-
glow:
|
|
817
|
-
glowColor:
|
|
818
|
-
neumorphic:
|
|
1411
|
+
var navEffectsSchema = z14.object({
|
|
1412
|
+
underlineGradient: z14.boolean().default(false),
|
|
1413
|
+
glow: z14.boolean().default(false),
|
|
1414
|
+
glowColor: z14.string().optional(),
|
|
1415
|
+
neumorphic: z14.boolean().default(false)
|
|
819
1416
|
}).optional();
|
|
820
|
-
var dropdownStyleSchema =
|
|
1417
|
+
var dropdownStyleSchema = z14.object({
|
|
821
1418
|
// Container styling
|
|
822
|
-
background:
|
|
1419
|
+
background: z14.string().default("surface"),
|
|
823
1420
|
// color token
|
|
824
|
-
textColor:
|
|
1421
|
+
textColor: z14.string().default("text"),
|
|
825
1422
|
// color token
|
|
826
|
-
borderColor:
|
|
1423
|
+
borderColor: z14.string().nullable().default("border"),
|
|
827
1424
|
// null = no border
|
|
828
|
-
shadow:
|
|
829
|
-
borderRadius:
|
|
1425
|
+
shadow: z14.enum(["none", "sm", "md", "lg"]).default("md"),
|
|
1426
|
+
borderRadius: z14.enum(["none", "sm", "md", "lg"]).default("md"),
|
|
830
1427
|
// Link hover states (explicit control)
|
|
831
|
-
hoverBackground:
|
|
1428
|
+
hoverBackground: z14.string().nullable().optional(),
|
|
832
1429
|
// color token, null = transparent
|
|
833
|
-
hoverTextColor:
|
|
1430
|
+
hoverTextColor: z14.string().nullable().optional(),
|
|
834
1431
|
// color token, null = inherit
|
|
835
1432
|
// Typography
|
|
836
|
-
textTransform:
|
|
837
|
-
letterSpacing:
|
|
838
|
-
fontWeight:
|
|
1433
|
+
textTransform: z14.enum(["none", "uppercase", "capitalize"]).default("none"),
|
|
1434
|
+
letterSpacing: z14.enum(["normal", "wide", "wider"]).default("normal"),
|
|
1435
|
+
fontWeight: z14.enum(["regular", "medium", "semibold", "bold"]).optional(),
|
|
839
1436
|
// optional = inherit from navWeight
|
|
840
|
-
textSize:
|
|
1437
|
+
textSize: z14.enum(["xs", "sm", "base", "lg"]).optional()
|
|
841
1438
|
// optional = no override (browser default)
|
|
842
1439
|
}).optional();
|
|
843
|
-
var headerCtaGapSchema =
|
|
844
|
-
var navContainerSchema =
|
|
845
|
-
type:
|
|
846
|
-
tint:
|
|
847
|
-
opacity:
|
|
1440
|
+
var headerCtaGapSchema = z14.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
|
|
1441
|
+
var navContainerSchema = z14.object({
|
|
1442
|
+
type: z14.enum(["none", "pill", "glass"]).default("none"),
|
|
1443
|
+
tint: z14.string().nullable().optional(),
|
|
1444
|
+
opacity: z14.number().min(0).max(1).default(0.15)
|
|
848
1445
|
}).default({ type: "none", tint: null, opacity: 0.15 });
|
|
849
|
-
var headerBackgroundSchema =
|
|
850
|
-
type:
|
|
851
|
-
color:
|
|
1446
|
+
var headerBackgroundSchema = z14.object({
|
|
1447
|
+
type: z14.enum(["color", "gradient", "image"]),
|
|
1448
|
+
color: z14.string().nullable().optional(),
|
|
852
1449
|
gradient: gradientConfigSchema.nullable().optional(),
|
|
853
1450
|
image: mediaSchema.nullable().optional(),
|
|
854
|
-
textColor:
|
|
1451
|
+
textColor: z14.string().nullable().optional()
|
|
855
1452
|
});
|
|
856
|
-
var headerSchema =
|
|
1453
|
+
var headerSchema = z14.object({
|
|
857
1454
|
variant: headerVariant,
|
|
858
1455
|
positioning: headerPositioning,
|
|
859
|
-
shrinkOnScroll:
|
|
1456
|
+
shrinkOnScroll: z14.boolean(),
|
|
860
1457
|
maxWidth: headerMaxWidth,
|
|
861
1458
|
logoOverride: mediaSchema.nullable().optional(),
|
|
862
1459
|
background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
|
|
863
|
-
textColor:
|
|
1460
|
+
textColor: z14.string().nullable().optional(),
|
|
864
1461
|
// Site title and general header text
|
|
865
1462
|
navStyle: headerNavStyle,
|
|
866
|
-
navColor:
|
|
1463
|
+
navColor: z14.string().nullable().optional(),
|
|
867
1464
|
// Nav links (inherits textColor if not set)
|
|
868
1465
|
navWeight: navFontWeight.default("medium"),
|
|
869
1466
|
// New fields for header system enhancement
|
|
@@ -882,50 +1479,50 @@ var headerSchema = z12.object({
|
|
|
882
1479
|
// Dropdown menu styling (nav dropdowns and mobile drawer)
|
|
883
1480
|
dropdownStyle: dropdownStyleSchema
|
|
884
1481
|
});
|
|
885
|
-
var footerVariant =
|
|
886
|
-
var footerMaxWidth =
|
|
887
|
-
var footerMode =
|
|
888
|
-
var footerNavLayoutMode =
|
|
889
|
-
var footerNavLayoutAlign =
|
|
890
|
-
var footerSpacing =
|
|
891
|
-
var footerLogoPlacement =
|
|
892
|
-
var footerLogoSize =
|
|
893
|
-
var footerLogoMaxHeight =
|
|
894
|
-
var footerBottomTextLinkStyleSchema =
|
|
895
|
-
colorToken:
|
|
896
|
-
hoverColorToken:
|
|
897
|
-
decorationColorToken:
|
|
898
|
-
underline:
|
|
899
|
-
});
|
|
900
|
-
var footerBottomBarSchema =
|
|
901
|
-
enabled:
|
|
902
|
-
fullBleed:
|
|
1482
|
+
var footerVariant = z14.enum(["simple", "columns", "split"]);
|
|
1483
|
+
var footerMaxWidth = z14.enum(["container", "full"]);
|
|
1484
|
+
var footerMode = z14.enum(["default", "blocks", "default+blocks", "none"]);
|
|
1485
|
+
var footerNavLayoutMode = z14.enum(["stack", "inline", "inline-wrap"]);
|
|
1486
|
+
var footerNavLayoutAlign = z14.enum(["start", "center", "end", "space-between"]);
|
|
1487
|
+
var footerSpacing = z14.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
|
|
1488
|
+
var footerLogoPlacement = z14.enum(["left", "right", "above", "below"]);
|
|
1489
|
+
var footerLogoSize = z14.enum(["sm", "md", "lg", "xl"]);
|
|
1490
|
+
var footerLogoMaxHeight = z14.enum(["sm", "md", "lg", "xl"]);
|
|
1491
|
+
var footerBottomTextLinkStyleSchema = z14.object({
|
|
1492
|
+
colorToken: z14.string().optional(),
|
|
1493
|
+
hoverColorToken: z14.string().nullable().optional(),
|
|
1494
|
+
decorationColorToken: z14.string().nullable().optional(),
|
|
1495
|
+
underline: z14.boolean().optional()
|
|
1496
|
+
});
|
|
1497
|
+
var footerBottomBarSchema = z14.object({
|
|
1498
|
+
enabled: z14.boolean().optional(),
|
|
1499
|
+
fullBleed: z14.boolean().optional(),
|
|
903
1500
|
background: headerBackgroundSchema.optional(),
|
|
904
|
-
textColor:
|
|
905
|
-
textAlign:
|
|
1501
|
+
textColor: z14.string().nullable().optional(),
|
|
1502
|
+
textAlign: z14.enum(["left", "center", "right"]).optional(),
|
|
906
1503
|
paddingY: footerSpacing.optional(),
|
|
907
1504
|
paddingX: footerSpacing.optional(),
|
|
908
|
-
borderTop:
|
|
909
|
-
colorToken:
|
|
910
|
-
width:
|
|
1505
|
+
borderTop: z14.object({
|
|
1506
|
+
colorToken: z14.string().nullable().optional(),
|
|
1507
|
+
width: z14.enum(["none", "thin", "medium", "thick"]).optional()
|
|
911
1508
|
}).optional()
|
|
912
1509
|
});
|
|
913
|
-
var footerNavLayoutSchema =
|
|
1510
|
+
var footerNavLayoutSchema = z14.object({
|
|
914
1511
|
layout: footerNavLayoutMode.optional(),
|
|
915
1512
|
align: footerNavLayoutAlign.optional(),
|
|
916
1513
|
gapX: footerSpacing.optional(),
|
|
917
1514
|
gapY: footerSpacing.optional(),
|
|
918
|
-
columns:
|
|
1515
|
+
columns: z14.number().int().min(1).max(6).optional()
|
|
919
1516
|
});
|
|
920
|
-
var footerLogoSchema =
|
|
921
|
-
showLogo:
|
|
922
|
-
showLogoText:
|
|
1517
|
+
var footerLogoSchema = z14.object({
|
|
1518
|
+
showLogo: z14.boolean().default(true),
|
|
1519
|
+
showLogoText: z14.boolean().optional(),
|
|
923
1520
|
placement: footerLogoPlacement.optional(),
|
|
924
1521
|
size: footerLogoSize.optional(),
|
|
925
1522
|
maxHeight: footerLogoMaxHeight.optional(),
|
|
926
|
-
align:
|
|
1523
|
+
align: z14.enum(["start", "center", "end"]).optional()
|
|
927
1524
|
});
|
|
928
|
-
var footerSchema =
|
|
1525
|
+
var footerSchema = z14.object({
|
|
929
1526
|
/**
|
|
930
1527
|
* SDK-only footer rendering mode.
|
|
931
1528
|
*
|
|
@@ -934,11 +1531,11 @@ var footerSchema = z12.object({
|
|
|
934
1531
|
mode: footerMode.optional(),
|
|
935
1532
|
variant: footerVariant,
|
|
936
1533
|
maxWidth: footerMaxWidth,
|
|
937
|
-
showLogoText:
|
|
1534
|
+
showLogoText: z14.boolean().optional(),
|
|
938
1535
|
background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
|
|
939
1536
|
// Footer nav styling (independent from header)
|
|
940
1537
|
navStyle: headerNavStyle.default("minimal"),
|
|
941
|
-
navColor:
|
|
1538
|
+
navColor: z14.string().nullable().optional(),
|
|
942
1539
|
navWeight: navFontWeight.default("medium"),
|
|
943
1540
|
// Full nav link customization (overrides navStyle if set)
|
|
944
1541
|
navLinkStyle: navLinkStyleSchema.optional(),
|
|
@@ -949,15 +1546,15 @@ var footerSchema = z12.object({
|
|
|
949
1546
|
logo: footerLogoSchema.optional(),
|
|
950
1547
|
bottomBar: footerBottomBarSchema.optional()
|
|
951
1548
|
});
|
|
952
|
-
var containerPaddingPresetSchema =
|
|
953
|
-
var layoutSchema =
|
|
954
|
-
containerPadding:
|
|
1549
|
+
var containerPaddingPresetSchema = z14.enum(["tight", "compact", "default", "relaxed"]);
|
|
1550
|
+
var layoutSchema = z14.object({
|
|
1551
|
+
containerPadding: z14.object({
|
|
955
1552
|
mobile: containerPaddingPresetSchema.optional(),
|
|
956
1553
|
tablet: containerPaddingPresetSchema.optional(),
|
|
957
1554
|
desktop: containerPaddingPresetSchema.optional()
|
|
958
1555
|
}).optional()
|
|
959
1556
|
}).optional();
|
|
960
|
-
var heroTypographySizeSchema =
|
|
1557
|
+
var heroTypographySizeSchema = z14.enum([
|
|
961
1558
|
"sm",
|
|
962
1559
|
"base",
|
|
963
1560
|
"lg",
|
|
@@ -968,14 +1565,14 @@ var heroTypographySizeSchema = z12.enum([
|
|
|
968
1565
|
"5xl",
|
|
969
1566
|
"6xl"
|
|
970
1567
|
]);
|
|
971
|
-
var heroTypographyLineHeightSchema =
|
|
972
|
-
var heroResponsiveTypographySchema =
|
|
1568
|
+
var heroTypographyLineHeightSchema = z14.enum(["tight", "snug", "normal", "relaxed"]);
|
|
1569
|
+
var heroResponsiveTypographySchema = z14.object({
|
|
973
1570
|
headlineSize: heroTypographySizeSchema.optional(),
|
|
974
1571
|
headlineLineHeight: heroTypographyLineHeightSchema.optional(),
|
|
975
1572
|
subheadlineSize: heroTypographySizeSchema.optional(),
|
|
976
1573
|
subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
|
|
977
1574
|
});
|
|
978
|
-
var heroTypographySchema =
|
|
1575
|
+
var heroTypographySchema = z14.object({
|
|
979
1576
|
headlineSize: heroTypographySizeSchema.optional(),
|
|
980
1577
|
headlineLineHeight: heroTypographyLineHeightSchema.optional(),
|
|
981
1578
|
subheadlineSize: heroTypographySizeSchema.optional(),
|
|
@@ -984,24 +1581,24 @@ var heroTypographySchema = z12.object({
|
|
|
984
1581
|
microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
|
|
985
1582
|
microSubheadlineSize: heroTypographySizeSchema.optional(),
|
|
986
1583
|
microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
|
|
987
|
-
responsive:
|
|
1584
|
+
responsive: z14.object({
|
|
988
1585
|
tablet: heroResponsiveTypographySchema.optional(),
|
|
989
1586
|
mobile: heroResponsiveTypographySchema.optional()
|
|
990
1587
|
}).optional()
|
|
991
1588
|
});
|
|
992
|
-
var heroSchema =
|
|
1589
|
+
var heroSchema = z14.object({
|
|
993
1590
|
typography: heroTypographySchema.optional()
|
|
994
1591
|
}).optional();
|
|
995
|
-
var gradientsSchema =
|
|
996
|
-
button:
|
|
997
|
-
hero:
|
|
998
|
-
background:
|
|
999
|
-
});
|
|
1000
|
-
var themeSchema =
|
|
1001
|
-
name:
|
|
1002
|
-
description:
|
|
1003
|
-
rationale:
|
|
1004
|
-
siteStyleId:
|
|
1592
|
+
var gradientsSchema = z14.object({
|
|
1593
|
+
button: z14.string().min(1).nullable().optional(),
|
|
1594
|
+
hero: z14.string().min(1).nullable().optional(),
|
|
1595
|
+
background: z14.string().min(1).nullable().optional()
|
|
1596
|
+
});
|
|
1597
|
+
var themeSchema = z14.object({
|
|
1598
|
+
name: z14.string().min(1).max(30),
|
|
1599
|
+
description: z14.string().min(1).max(400),
|
|
1600
|
+
rationale: z14.string().min(1).max(400),
|
|
1601
|
+
siteStyleId: z14.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
|
|
1005
1602
|
axes: axesSchema,
|
|
1006
1603
|
palette: paletteSchema,
|
|
1007
1604
|
typography: typographySchema,
|
|
@@ -1028,16 +1625,16 @@ var themeSchema = z12.object({
|
|
|
1028
1625
|
// Block-specific customization (Tier 3)
|
|
1029
1626
|
// blockCustomVars: Per-block CSS variable overrides as bare values
|
|
1030
1627
|
// Example: { "event-registration": { "--step-color": "#6d28d9" } }
|
|
1031
|
-
blockCustomVars:
|
|
1032
|
-
|
|
1628
|
+
blockCustomVars: z14.record(
|
|
1629
|
+
z14.string(),
|
|
1033
1630
|
// block kind (matches data-block attribute)
|
|
1034
|
-
|
|
1631
|
+
z14.record(z14.string(), z14.string())
|
|
1035
1632
|
// { '--var-name': 'value' }
|
|
1036
1633
|
).optional(),
|
|
1037
1634
|
// Structured block-kind theme overrides (v1: typography prose-link style only)
|
|
1038
1635
|
// Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
|
|
1039
|
-
blockOverrides:
|
|
1040
|
-
|
|
1636
|
+
blockOverrides: z14.record(
|
|
1637
|
+
z14.string(),
|
|
1041
1638
|
blockThemeOverrideSchema
|
|
1042
1639
|
).optional(),
|
|
1043
1640
|
// Structured custom CSS rules
|
|
@@ -1073,11 +1670,11 @@ var themeSchema = z12.object({
|
|
|
1073
1670
|
* }
|
|
1074
1671
|
* ```
|
|
1075
1672
|
*/
|
|
1076
|
-
styleGroups:
|
|
1673
|
+
styleGroups: z14.record(z14.string(), z14.array(z14.string())).optional()
|
|
1077
1674
|
});
|
|
1078
|
-
var themesTurnSchema =
|
|
1079
|
-
message:
|
|
1080
|
-
themes:
|
|
1675
|
+
var themesTurnSchema = z14.object({
|
|
1676
|
+
message: z14.string().min(1),
|
|
1677
|
+
themes: z14.array(themeSchema).length(3)
|
|
1081
1678
|
});
|
|
1082
1679
|
|
|
1083
1680
|
// src/theme/loader.ts
|