@riverbankcms/sdk 0.60.9 → 0.60.12

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 (45) hide show
  1. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  2. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  3. package/dist/_dts/api/src/domains.d.ts +14 -13
  4. package/dist/_dts/api/src/endpoints.d.ts +32 -0
  5. package/dist/_dts/api/src/index.d.ts +4 -3
  6. package/dist/_dts/api/src/navigation/linkValue.d.ts +15 -2
  7. package/dist/_dts/api/src/navigation.d.ts +2 -0
  8. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  9. package/dist/_dts/blocks/src/index.d.ts +1 -1
  10. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -2
  11. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  12. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  13. package/dist/_dts/core/src/participant-identity.d.ts +72 -0
  14. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +96 -60
  15. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  16. package/dist/_dts/sdk/src/contracts/content.d.ts +7 -1
  17. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -1
  18. package/dist/_dts/sdk/src/version.d.ts +1 -1
  19. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +21 -0
  20. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  21. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -0
  22. package/dist/cli/index.mjs +188 -9
  23. package/dist/client/bookings.mjs +808 -149
  24. package/dist/client/client.mjs +553 -130
  25. package/dist/client/hooks.mjs +119 -0
  26. package/dist/client/rendering/client.mjs +412 -113
  27. package/dist/client/rendering/islands.mjs +4605 -4361
  28. package/dist/client/rendering.mjs +580 -157
  29. package/dist/preview-next/before-render.mjs +57 -0
  30. package/dist/preview-next/client/runtime.mjs +580 -151
  31. package/dist/preview-next/middleware.mjs +57 -0
  32. package/dist/server/components.mjs +293 -45
  33. package/dist/server/config-validation.mjs +119 -0
  34. package/dist/server/config.mjs +119 -0
  35. package/dist/server/data.mjs +119 -0
  36. package/dist/server/index.mjs +120 -1
  37. package/dist/server/next.mjs +300 -52
  38. package/dist/server/page-converter.mjs +62 -0
  39. package/dist/server/prebuild.mjs +1 -1
  40. package/dist/server/rendering/server.mjs +293 -45
  41. package/dist/server/rendering.mjs +293 -45
  42. package/dist/server/routing.mjs +159 -29
  43. package/dist/server/server.mjs +120 -1
  44. package/package.json +1 -1
  45. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +0 -11
@@ -86,7 +86,7 @@ function ze() {
86
86
  /* @__PURE__ */ Te(P)
87
87
  );
88
88
  }
89
- function z3(e) {
89
+ function z5(e) {
90
90
  if (L) {
91
91
  if (/* @__PURE__ */ Te(P) !== null)
92
92
  throw Tt(), Je;
@@ -2115,12 +2115,12 @@ function ha(e, t) {
2115
2115
  var mt = we(Dr, 2);
2116
2116
  let Pr;
2117
2117
  var We = X(mt);
2118
- en(We), We.__change = ui, z3(mt);
2118
+ en(We), We.__change = ui, z5(mt);
2119
2119
  var Ut = we(mt, 2), wi = X(Ut);
2120
2120
  {
2121
2121
  var pi = (n) => {
2122
2122
  var u = na(), _ = Gr(u), y = X(_);
2123
- Ge(y, () => c(re).verified), z3(_);
2123
+ Ge(y, () => c(re).verified), z5(_);
2124
2124
  var T = we(_, 2);
2125
2125
  en(T), Pe(() => {
2126
2126
  se(T, "name", V()), jo(T, c(Le));
@@ -2129,10 +2129,10 @@ function ha(e, t) {
2129
2129
  {
2130
2130
  var _ = (T) => {
2131
2131
  var E = ia(), p = X(E);
2132
- Ge(p, () => c(re).verifying), z3(E), ne(T, E);
2132
+ Ge(p, () => c(re).verifying), z5(E), ne(T, E);
2133
2133
  }, y = (T) => {
2134
2134
  var E = oa(), p = X(E);
2135
- Ge(p, () => c(re).label), z3(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2135
+ Ge(p, () => c(re).label), z5(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2136
2136
  };
2137
2137
  $e(
2138
2138
  n,
@@ -2147,18 +2147,18 @@ function ha(e, t) {
2147
2147
  c(C) === b.VERIFIED ? n(pi) : n(bi, false);
2148
2148
  });
2149
2149
  }
2150
- z3(Ut);
2150
+ z5(Ut);
2151
2151
  var yi = we(Ut, 2);
2152
2152
  {
2153
2153
  var Ei = (n) => {
2154
2154
  var u = aa(), _ = X(u);
2155
- se(_, "href", sr), z3(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2155
+ se(_, "href", sr), z5(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2156
2156
  };
2157
2157
  $e(yi, (n) => {
2158
2158
  (N() !== true || c(Dt)) && n(Ei);
2159
2159
  });
2160
2160
  }
2161
- z3(Mt);
2161
+ z5(Mt);
2162
2162
  var Or = we(Mt, 2);
2163
2163
  {
2164
2164
  var xi = (n) => {
@@ -2166,16 +2166,16 @@ function ha(e, t) {
2166
2166
  {
2167
2167
  var y = (E) => {
2168
2168
  var p = la(), x = X(p);
2169
- Ge(x, () => c(re).expired), z3(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2169
+ Ge(x, () => c(re).expired), z5(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2170
2170
  }, T = (E) => {
2171
2171
  var p = sa(), x = X(p);
2172
- Ge(x, () => c(re).error), z3(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2172
+ Ge(x, () => c(re).error), z5(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2173
2173
  };
2174
2174
  $e(_, (E) => {
2175
2175
  c(C) === b.EXPIRED ? E(y) : E(T, false);
2176
2176
  });
2177
2177
  }
2178
- z3(u), ne(n, u);
2178
+ z5(u), ne(n, u);
2179
2179
  };
2180
2180
  $e(Or, (n) => {
2181
2181
  (c(He) || c(C) === b.EXPIRED) && n(xi);
@@ -2185,7 +2185,7 @@ function ha(e, t) {
2185
2185
  {
2186
2186
  var $i = (n) => {
2187
2187
  var u = ua(), _ = X(u), y = X(_);
2188
- Ge(y, () => c(re).footer), z3(_), z3(u), ne(n, u);
2188
+ Ge(y, () => c(re).footer), z5(_), z5(u), ne(n, u);
2189
2189
  };
2190
2190
  $e(Fr, (n) => {
2191
2191
  c(re).footer && (k() !== true || c(Dt)) && n($i);
@@ -2201,7 +2201,7 @@ function ha(e, t) {
2201
2201
  v() && n(Ci);
2202
2202
  });
2203
2203
  }
2204
- return z3(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2204
+ return z5(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2205
2205
  (n) => {
2206
2206
  se(ot, "data-state", c(C)), se(ot, "data-floating", v()), Pr = Fo(mt, 1, "altcha-checkbox", null, Pr, n), se(We, "id", c(cr)), We.required = r2() !== "onsubmit" && (!v() || r2() !== "off");
2207
2207
  },
@@ -2817,6 +2817,7 @@ var VARIANT_ROLES = [
2817
2817
  "tertiary",
2818
2818
  "accent"
2819
2819
  ];
2820
+ var DEFAULT_VARIANT_ALIAS_ID = "default";
2820
2821
  var cornerStyleSchema = z.enum(["square", "rounded", "pill"]);
2821
2822
  var shadowSizeSchema = z.enum(["none", "low", "medium", "high"]);
2822
2823
  var textTransformSchema = z.enum(["none", "uppercase", "lowercase", "capitalize"]);
@@ -2953,9 +2954,595 @@ var buttonSystemSchema = z.object({
2953
2954
  sizes: buttonSizesSchema.optional()
2954
2955
  });
2955
2956
 
2957
+ // ../theme-core/src/buttons/classNames.ts
2958
+ function themeButtonVariantClassNames(variant) {
2959
+ if (variant === DEFAULT_VARIANT_ALIAS_ID) {
2960
+ return [variant];
2961
+ }
2962
+ return [variant, `button-${variant}`];
2963
+ }
2964
+ function themeButtonSizeClassName(size) {
2965
+ return `btn-${size}`;
2966
+ }
2967
+ function themeButtonClassName(spec) {
2968
+ const classes = [
2969
+ ...themeButtonVariantClassNames(spec.variant),
2970
+ themeButtonSizeClassName(spec.size),
2971
+ spec.extraClassName
2972
+ ];
2973
+ return classes.filter(Boolean).join(" ");
2974
+ }
2975
+
2956
2976
  // ../theme-core/src/buttons/generateButtonCss.ts
2957
2977
  var BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
2958
2978
 
2979
+ // ../theme-core/src/buttons/personalities/types.ts
2980
+ import { z as z3 } from "zod";
2981
+
2982
+ // ../theme-core/src/site-styles/styleTags.ts
2983
+ import { z as z2 } from "zod";
2984
+ var STYLE_AXIS_VALUES = {
2985
+ tone: ["minimal", "classic", "bold"],
2986
+ energy: ["calm", "vibrant"],
2987
+ motion: ["subtle", "standard", "expressive"],
2988
+ era: ["editorial", "modern", "organic", "technical", "retro"]
2989
+ };
2990
+ var styleTagsSchema = z2.object({
2991
+ tone: z2.enum(STYLE_AXIS_VALUES.tone).optional(),
2992
+ energy: z2.enum(STYLE_AXIS_VALUES.energy).optional(),
2993
+ motion: z2.enum(STYLE_AXIS_VALUES.motion).optional(),
2994
+ era: z2.enum(STYLE_AXIS_VALUES.era).optional()
2995
+ });
2996
+
2997
+ // ../theme-core/src/buttons/personalities/types.ts
2998
+ function asButtonPersonalityId(value) {
2999
+ if (value.length === 0) {
3000
+ throw new Error("ButtonPersonalityId must be a non-empty string");
3001
+ }
3002
+ return value;
3003
+ }
3004
+ var buttonPersonalityIdSchema = z3.string().min(1).transform((value) => asButtonPersonalityId(value));
3005
+ var buttonPersonalitySchema = z3.object({
3006
+ id: buttonPersonalityIdSchema,
3007
+ name: z3.string().min(1),
3008
+ description: z3.string().min(1),
3009
+ tags: styleTagsSchema,
3010
+ buttonSystem: buttonSystemSchema
3011
+ });
3012
+ function defineButtonPersonality(input) {
3013
+ return {
3014
+ id: asButtonPersonalityId(input.id),
3015
+ name: input.name,
3016
+ description: input.description,
3017
+ tags: input.tags,
3018
+ buttonSystem: input.buttonSystem
3019
+ };
3020
+ }
3021
+
3022
+ // ../theme-core/src/buttons/personalities/brushed-wash.ts
3023
+ var brushedWash = defineButtonPersonality({
3024
+ id: "brushed-wash",
3025
+ name: "Brushed Wash",
3026
+ description: "Watercolour-gradient buttons with soft shadows and generous padding.",
3027
+ tags: { tone: "classic", energy: "vibrant", motion: "standard", era: "organic" },
3028
+ buttonSystem: {
3029
+ global: {
3030
+ cornerStyle: "rounded",
3031
+ shadow: "low",
3032
+ textTransform: "none",
3033
+ fontWeight: 500,
3034
+ borderWidth: 1,
3035
+ hoverTransform: "none",
3036
+ hoverColor: "none"
3037
+ },
3038
+ sizes: {
3039
+ sm: { padding: "0.75rem 2rem", fontSize: "text-sm" },
3040
+ md: { padding: "1rem 2.5rem" },
3041
+ lg: { padding: "1.25rem 3rem", fontSize: "text-lg" },
3042
+ xl: { padding: "1.625rem 3.75rem", fontSize: "text-xl" }
3043
+ },
3044
+ variants: [
3045
+ {
3046
+ id: "primary",
3047
+ name: "Primary",
3048
+ enabled: true,
3049
+ priority: 1,
3050
+ background: {
3051
+ type: "gradient",
3052
+ stops: ["primary", "accent"],
3053
+ direction: "to-r"
3054
+ },
3055
+ textColorToken: "primaryForeground",
3056
+ borderRadius: "rounded-lg",
3057
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
3058
+ effects: {
3059
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
3060
+ }
3061
+ },
3062
+ {
3063
+ id: "secondary",
3064
+ name: "Secondary",
3065
+ enabled: true,
3066
+ priority: 2,
3067
+ background: {
3068
+ type: "gradient",
3069
+ stops: ["secondary", "accent"],
3070
+ direction: "to-br"
3071
+ },
3072
+ textColorToken: "primaryForeground",
3073
+ borderRadius: "rounded-lg",
3074
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
3075
+ effects: {
3076
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
3077
+ }
3078
+ },
3079
+ {
3080
+ id: "outline",
3081
+ name: "Outline",
3082
+ enabled: true,
3083
+ priority: 3,
3084
+ background: { type: "transparent" },
3085
+ textColorToken: "primary",
3086
+ borderRadius: "rounded-lg",
3087
+ border: { widthClass: "border", colorToken: "primary" },
3088
+ effects: {
3089
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3090
+ }
3091
+ },
3092
+ {
3093
+ id: "ghost",
3094
+ name: "Ghost",
3095
+ enabled: true,
3096
+ priority: 3,
3097
+ background: { type: "transparent" },
3098
+ textColorToken: "text",
3099
+ borderRadius: "rounded-lg",
3100
+ effects: {
3101
+ hover: [
3102
+ { effectId: "background-on-hover", options: { colorToken: "surface" } }
3103
+ ]
3104
+ }
3105
+ }
3106
+ ]
3107
+ }
3108
+ });
3109
+
3110
+ // ../theme-core/src/buttons/personalities/confident-chip.ts
3111
+ var confidentChip = defineButtonPersonality({
3112
+ id: "confident-chip",
3113
+ name: "Confident Chip",
3114
+ description: "Mid-radius solid buttons with a crisp hover.",
3115
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "modern" },
3116
+ buttonSystem: {
3117
+ global: {
3118
+ cornerStyle: "rounded",
3119
+ shadow: "medium",
3120
+ textTransform: "none",
3121
+ fontWeight: 600,
3122
+ borderWidth: 1,
3123
+ hoverTransform: "none",
3124
+ hoverColor: "none"
3125
+ },
3126
+ variants: [
3127
+ {
3128
+ id: "primary",
3129
+ name: "Primary",
3130
+ enabled: true,
3131
+ priority: 1,
3132
+ background: { type: "solid", colorToken: "primary" },
3133
+ textColorToken: "primaryForeground",
3134
+ borderRadius: "rounded-md",
3135
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" },
3136
+ effects: {
3137
+ hover: [{ effectId: "darken-background", options: { amount: 60 } }],
3138
+ active: [{ effectId: "scale-down", options: { scale: "0.97" } }]
3139
+ }
3140
+ },
3141
+ {
3142
+ id: "secondary",
3143
+ name: "Secondary",
3144
+ enabled: true,
3145
+ priority: 2,
3146
+ background: { type: "solid", colorToken: "surface" },
3147
+ textColorToken: "text",
3148
+ borderRadius: "rounded-md",
3149
+ border: { widthClass: "border", colorToken: "border" },
3150
+ effects: {
3151
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
3152
+ }
3153
+ },
3154
+ {
3155
+ id: "outline",
3156
+ name: "Outline",
3157
+ enabled: true,
3158
+ priority: 3,
3159
+ background: { type: "transparent" },
3160
+ textColorToken: "primary",
3161
+ borderRadius: "rounded-md",
3162
+ border: { widthClass: "border", colorToken: "primary" },
3163
+ effects: {
3164
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3165
+ }
3166
+ },
3167
+ {
3168
+ id: "ghost",
3169
+ name: "Ghost",
3170
+ enabled: true,
3171
+ priority: 3,
3172
+ background: { type: "transparent" },
3173
+ textColorToken: "primary",
3174
+ borderRadius: "rounded-md",
3175
+ effects: {
3176
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3177
+ }
3178
+ }
3179
+ ]
3180
+ }
3181
+ });
3182
+
3183
+ // ../theme-core/src/buttons/personalities/editorial-link.ts
3184
+ var editorialLink = defineButtonPersonality({
3185
+ id: "editorial-link",
3186
+ name: "Editorial Link",
3187
+ description: "Link-style with a growing underline. Refined, typographic.",
3188
+ tags: { tone: "minimal", energy: "calm", motion: "subtle", era: "editorial" },
3189
+ buttonSystem: {
3190
+ global: {
3191
+ cornerStyle: "square",
3192
+ shadow: "none",
3193
+ textTransform: "none",
3194
+ fontWeight: 500,
3195
+ borderWidth: 1,
3196
+ hoverTransform: "none",
3197
+ hoverColor: "none"
3198
+ },
3199
+ variants: [
3200
+ {
3201
+ id: "primary",
3202
+ name: "Primary",
3203
+ enabled: true,
3204
+ priority: 1,
3205
+ background: { type: "transparent" },
3206
+ textColorToken: "text",
3207
+ borderRadius: "rounded-none",
3208
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3209
+ sizes: {
3210
+ sm: { padding: "0.25rem 0" },
3211
+ md: { padding: "0.5rem 0" },
3212
+ lg: { padding: "0.625rem 0" },
3213
+ xl: { padding: "0.75rem 0" }
3214
+ },
3215
+ effects: {
3216
+ base: [
3217
+ { effectId: "border-bottom-grow", options: { height: 2, colorToken: "text", origin: "left" } }
3218
+ ]
3219
+ }
3220
+ },
3221
+ {
3222
+ id: "secondary",
3223
+ name: "Secondary",
3224
+ enabled: true,
3225
+ priority: 2,
3226
+ background: { type: "transparent" },
3227
+ textColorToken: "mutedText",
3228
+ borderRadius: "rounded-none",
3229
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3230
+ sizes: {
3231
+ sm: { padding: "0.25rem 0" },
3232
+ md: { padding: "0.5rem 0" },
3233
+ lg: { padding: "0.625rem 0" },
3234
+ xl: { padding: "0.75rem 0" }
3235
+ },
3236
+ effects: {
3237
+ base: [
3238
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "mutedText", origin: "left" } }
3239
+ ]
3240
+ }
3241
+ },
3242
+ {
3243
+ id: "outline",
3244
+ name: "Outline",
3245
+ enabled: true,
3246
+ priority: 3,
3247
+ background: { type: "transparent" },
3248
+ textColorToken: "accent",
3249
+ borderRadius: "rounded-none",
3250
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3251
+ sizes: {
3252
+ sm: { padding: "0.25rem 0" },
3253
+ md: { padding: "0.5rem 0" },
3254
+ lg: { padding: "0.625rem 0" },
3255
+ xl: { padding: "0.75rem 0" }
3256
+ },
3257
+ effects: {
3258
+ base: [
3259
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }
3260
+ ]
3261
+ }
3262
+ },
3263
+ {
3264
+ id: "ghost",
3265
+ name: "Ghost",
3266
+ enabled: true,
3267
+ priority: 3,
3268
+ background: { type: "transparent" },
3269
+ textColorToken: "mutedText",
3270
+ borderRadius: "rounded-none",
3271
+ shadow: { elevation: "none", softness: null, position: "bottom" },
3272
+ sizes: {
3273
+ sm: { padding: "0.25rem 0" },
3274
+ md: { padding: "0.5rem 0" },
3275
+ lg: { padding: "0.625rem 0" },
3276
+ xl: { padding: "0.75rem 0" }
3277
+ },
3278
+ effects: {
3279
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -20 } }]
3280
+ }
3281
+ }
3282
+ ]
3283
+ }
3284
+ });
3285
+
3286
+ // ../theme-core/src/buttons/personalities/ink-stamp.ts
3287
+ var inkStamp = defineButtonPersonality({
3288
+ id: "ink-stamp",
3289
+ name: "Ink Stamp",
3290
+ description: "Hand-stamped block-print buttons with a slight lift on hover.",
3291
+ tags: { tone: "bold", energy: "vibrant", motion: "standard", era: "organic" },
3292
+ buttonSystem: {
3293
+ global: {
3294
+ cornerStyle: "rounded",
3295
+ shadow: "none",
3296
+ textTransform: "uppercase",
3297
+ fontWeight: 600,
3298
+ borderWidth: 1,
3299
+ hoverTransform: "none",
3300
+ hoverColor: "none",
3301
+ letterSpacing: "loose"
3302
+ },
3303
+ sizes: {
3304
+ sm: { padding: "0.5rem 1.25rem", fontSize: "text-xs" },
3305
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-sm" },
3306
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-base" },
3307
+ xl: { padding: "1.125rem 2.75rem", fontSize: "text-lg" }
3308
+ },
3309
+ variants: [
3310
+ {
3311
+ id: "primary",
3312
+ name: "Primary",
3313
+ enabled: true,
3314
+ priority: 1,
3315
+ background: { type: "solid", colorToken: "primary" },
3316
+ textColorToken: "primaryForeground",
3317
+ borderRadius: "rounded-md",
3318
+ effects: {
3319
+ hover: [
3320
+ { effectId: "drop-shadow", options: { intensity: "medium" } },
3321
+ { effectId: "scale-up", options: { scale: "1.02" } }
3322
+ ],
3323
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
3324
+ }
3325
+ },
3326
+ {
3327
+ id: "secondary",
3328
+ name: "Secondary",
3329
+ enabled: true,
3330
+ priority: 2,
3331
+ background: { type: "transparent" },
3332
+ textColorToken: "primary",
3333
+ borderRadius: "rounded-md",
3334
+ border: { widthClass: "border-2", colorToken: "primary" },
3335
+ effects: {
3336
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3337
+ }
3338
+ },
3339
+ {
3340
+ id: "outline",
3341
+ name: "Outline",
3342
+ enabled: true,
3343
+ priority: 3,
3344
+ background: { type: "transparent" },
3345
+ textColorToken: "text",
3346
+ borderRadius: "rounded-md",
3347
+ border: { widthClass: "border-2", colorToken: "border" },
3348
+ effects: {
3349
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3350
+ }
3351
+ },
3352
+ {
3353
+ id: "ghost",
3354
+ name: "Ghost",
3355
+ enabled: true,
3356
+ priority: 3,
3357
+ background: { type: "transparent" },
3358
+ textColorToken: "accent",
3359
+ borderRadius: "rounded-none",
3360
+ sizes: {
3361
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
3362
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
3363
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
3364
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
3365
+ },
3366
+ effects: {
3367
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
3368
+ }
3369
+ }
3370
+ ]
3371
+ }
3372
+ });
3373
+
3374
+ // ../theme-core/src/buttons/personalities/pebble.ts
3375
+ var pebble = defineButtonPersonality({
3376
+ id: "pebble",
3377
+ name: "Pebble",
3378
+ description: "Generous pill buttons with a soft hover lift.",
3379
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "organic" },
3380
+ buttonSystem: {
3381
+ global: {
3382
+ cornerStyle: "pill",
3383
+ shadow: "none",
3384
+ textTransform: "none",
3385
+ fontWeight: 500,
3386
+ borderWidth: 2,
3387
+ hoverTransform: "none",
3388
+ hoverColor: "none"
3389
+ },
3390
+ sizes: {
3391
+ sm: { padding: "0.625rem 1.75rem", fontSize: "text-sm" },
3392
+ md: { padding: "0.875rem 2.25rem" },
3393
+ lg: { padding: "1.125rem 2.75rem", fontSize: "text-lg" },
3394
+ xl: { padding: "1.5rem 3.5rem", fontSize: "text-xl" }
3395
+ },
3396
+ variants: [
3397
+ {
3398
+ id: "primary",
3399
+ name: "Primary",
3400
+ enabled: true,
3401
+ priority: 1,
3402
+ background: { type: "solid", colorToken: "primary" },
3403
+ textColorToken: "primaryForeground",
3404
+ borderRadius: "rounded-full",
3405
+ effects: {
3406
+ hover: [
3407
+ { effectId: "scale-up", options: { scale: "1.03" } },
3408
+ { effectId: "drop-shadow", options: { intensity: "medium" } }
3409
+ ]
3410
+ }
3411
+ },
3412
+ {
3413
+ id: "secondary",
3414
+ name: "Secondary",
3415
+ enabled: true,
3416
+ priority: 2,
3417
+ background: { type: "transparent" },
3418
+ textColorToken: "primary",
3419
+ borderRadius: "rounded-full",
3420
+ border: { widthClass: "border-2", colorToken: "accent" },
3421
+ effects: {
3422
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "accent" } }]
3423
+ }
3424
+ },
3425
+ {
3426
+ id: "outline",
3427
+ name: "Outline",
3428
+ enabled: true,
3429
+ priority: 3,
3430
+ background: { type: "transparent" },
3431
+ textColorToken: "text",
3432
+ borderRadius: "rounded-full",
3433
+ border: { widthClass: "border", colorToken: "border" },
3434
+ effects: {
3435
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3436
+ }
3437
+ },
3438
+ {
3439
+ id: "ghost",
3440
+ name: "Ghost",
3441
+ enabled: true,
3442
+ priority: 3,
3443
+ background: { type: "transparent" },
3444
+ textColorToken: "primary",
3445
+ borderRadius: "rounded-full",
3446
+ sizes: {
3447
+ sm: { padding: "0.375rem 0.875rem", fontSize: "text-sm" },
3448
+ md: { padding: "0.5rem 1rem" },
3449
+ lg: { padding: "0.625rem 1.25rem", fontSize: "text-lg" },
3450
+ xl: { padding: "0.75rem 1.5rem", fontSize: "text-xl" }
3451
+ },
3452
+ effects: {
3453
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 30 } }]
3454
+ }
3455
+ }
3456
+ ]
3457
+ }
3458
+ });
3459
+
3460
+ // ../theme-core/src/buttons/personalities/soft-pill.ts
3461
+ var softPill = defineButtonPersonality({
3462
+ id: "soft-pill",
3463
+ name: "Soft Pill",
3464
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
3465
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
3466
+ buttonSystem: {
3467
+ global: {
3468
+ cornerStyle: "pill",
3469
+ shadow: "low",
3470
+ textTransform: "none",
3471
+ fontWeight: 500,
3472
+ borderWidth: 2,
3473
+ hoverTransform: "lift",
3474
+ hoverColor: "none"
3475
+ },
3476
+ variants: [
3477
+ {
3478
+ id: "primary",
3479
+ name: "Primary",
3480
+ enabled: true,
3481
+ priority: 1,
3482
+ background: { type: "solid", colorToken: "primary" },
3483
+ textColorToken: "primaryForeground",
3484
+ borderRadius: "rounded-full",
3485
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
3486
+ effects: {
3487
+ hover: [{ effectId: "lift", options: { translateY: "-1px" } }],
3488
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
3489
+ }
3490
+ },
3491
+ {
3492
+ id: "secondary",
3493
+ name: "Secondary",
3494
+ enabled: true,
3495
+ priority: 2,
3496
+ background: { type: "transparent" },
3497
+ textColorToken: "primary",
3498
+ borderRadius: "rounded-full",
3499
+ border: { widthClass: "border-2", colorToken: "primary" },
3500
+ effects: {
3501
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3502
+ }
3503
+ },
3504
+ {
3505
+ id: "outline",
3506
+ name: "Outline",
3507
+ enabled: true,
3508
+ priority: 3,
3509
+ background: { type: "transparent" },
3510
+ textColorToken: "text",
3511
+ borderRadius: "rounded-full",
3512
+ border: { widthClass: "border", colorToken: "border" },
3513
+ effects: {
3514
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3515
+ }
3516
+ },
3517
+ {
3518
+ id: "ghost",
3519
+ name: "Ghost",
3520
+ enabled: true,
3521
+ priority: 3,
3522
+ background: { type: "transparent" },
3523
+ textColorToken: "text",
3524
+ borderRadius: "rounded-full",
3525
+ effects: {
3526
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
3527
+ }
3528
+ }
3529
+ ]
3530
+ }
3531
+ });
3532
+
3533
+ // ../theme-core/src/buttons/personalities/index.ts
3534
+ var buttonPersonalities = [
3535
+ softPill,
3536
+ confidentChip,
3537
+ editorialLink,
3538
+ pebble,
3539
+ inkStamp,
3540
+ brushedWash
3541
+ ];
3542
+ var personalitiesById = new Map(
3543
+ buttonPersonalities.map((p) => [p.id, p])
3544
+ );
3545
+
2959
3546
  // ../core/src/branded.ts
2960
3547
  var asAppointmentResourceId = (id) => id;
2961
3548
 
@@ -3165,9 +3752,71 @@ function addLocalScheduleDays(date, days) {
3165
3752
  };
3166
3753
  }
3167
3754
 
3755
+ // ../core/src/participant-identity.ts
3756
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
3757
+ participant_id: {
3758
+ field: "participant_id",
3759
+ role: "canonical_link",
3760
+ canonicalSource: "booking_participants.id",
3761
+ contractAction: "tighten_in_839",
3762
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
3763
+ },
3764
+ display_name: {
3765
+ field: "display_name",
3766
+ role: "contextual_snapshot",
3767
+ canonicalSource: "booking_participants.display_name for live identity",
3768
+ contractAction: "retain_as_snapshot",
3769
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
3770
+ },
3771
+ email: {
3772
+ field: "email",
3773
+ role: "contextual_snapshot",
3774
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3775
+ contractAction: "retain_as_snapshot",
3776
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
3777
+ },
3778
+ email_normalized: {
3779
+ field: "email_normalized",
3780
+ role: "contextual_snapshot",
3781
+ canonicalSource: "booking_participants.email_normalized for live email identity",
3782
+ contractAction: "retain_as_snapshot",
3783
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
3784
+ },
3785
+ phone: {
3786
+ field: "phone",
3787
+ role: "contextual_snapshot",
3788
+ canonicalSource: "booking_participants.phone for live phone identity",
3789
+ contractAction: "retain_as_snapshot",
3790
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
3791
+ },
3792
+ identity_state: {
3793
+ field: "identity_state",
3794
+ role: "materialization_state",
3795
+ canonicalSource: "booking_participants.identity_state for subject state",
3796
+ contractAction: "review_for_later_contract_cleanup",
3797
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
3798
+ },
3799
+ event_attendee_guest_id: {
3800
+ field: "event_attendee_guest_id",
3801
+ role: "compatibility_projection",
3802
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
3803
+ contractAction: "retain_as_projection",
3804
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
3805
+ }
3806
+ };
3807
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
3808
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
3809
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
3810
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
3811
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
3812
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
3813
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
3814
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
3815
+ ];
3816
+
3168
3817
  // ../theme-core/src/accordions/types.ts
3169
- import { z as z2 } from "zod";
3170
- var accordionIconSchema = z2.enum([
3818
+ import { z as z4 } from "zod";
3819
+ var accordionIconSchema = z4.enum([
3171
3820
  "plus-minus",
3172
3821
  // + becomes - (swap or rotate 90°)
3173
3822
  "chevron",
@@ -3179,49 +3828,49 @@ var accordionIconSchema = z2.enum([
3179
3828
  "circle-plus-minus"
3180
3829
  // ⊕ becomes ⊖ (swap with fade)
3181
3830
  ]);
3182
- var accordionSystemSchema = z2.object({
3831
+ var accordionSystemSchema = z4.object({
3183
3832
  // Visual styling (solid color only - gradients can be added later if needed)
3184
- background: z2.object({
3185
- type: z2.literal("solid"),
3186
- colorToken: z2.string()
3833
+ background: z4.object({
3834
+ type: z4.literal("solid"),
3835
+ colorToken: z4.string()
3187
3836
  }),
3188
3837
  // Spacing (padding inside items)
3189
- spacing: z2.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
3838
+ spacing: z4.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
3190
3839
  // Border radius (null = inherit from theme.corners)
3191
- corners: z2.enum(["square", "soft", "rounded", "pill"]).nullable(),
3840
+ corners: z4.enum(["square", "soft", "rounded", "pill"]).nullable(),
3192
3841
  // Border styling (null = inherit from theme.border)
3193
- border: z2.object({
3194
- widthClass: z2.string(),
3842
+ border: z4.object({
3843
+ widthClass: z4.string(),
3195
3844
  // e.g., 'border', 'border-2', 'border-0'
3196
- colorToken: z2.string()
3845
+ colorToken: z4.string()
3197
3846
  }).nullable(),
3198
3847
  // Shadow (null = inherit from theme.shadow)
3199
- shadow: z2.object({
3200
- elevation: z2.enum(["none", "low", "medium", "high"]),
3201
- softness: z2.enum(["soft", "crisp", "hard"]).nullable(),
3202
- position: z2.enum(["bottom", "bottom-right"])
3848
+ shadow: z4.object({
3849
+ elevation: z4.enum(["none", "low", "medium", "high"]),
3850
+ softness: z4.enum(["soft", "crisp", "hard"]).nullable(),
3851
+ position: z4.enum(["bottom", "bottom-right"])
3203
3852
  }).nullable(),
3204
3853
  // Icon style and animation
3205
- icon: z2.object({
3854
+ icon: z4.object({
3206
3855
  style: accordionIconSchema,
3207
- position: z2.enum(["left", "right"]),
3208
- size: z2.enum(["sm", "md", "lg"])
3856
+ position: z4.enum(["left", "right"]),
3857
+ size: z4.enum(["sm", "md", "lg"])
3209
3858
  }),
3210
3859
  // Trigger (question) styling
3211
- trigger: z2.object({
3212
- textColorToken: z2.string(),
3213
- fontWeight: z2.enum(["regular", "medium", "semibold", "bold"]).nullable()
3860
+ trigger: z4.object({
3861
+ textColorToken: z4.string(),
3862
+ fontWeight: z4.enum(["regular", "medium", "semibold", "bold"]).nullable()
3214
3863
  // null = inherit from theme
3215
3864
  }),
3216
3865
  // Hover state styling
3217
- hover: z2.object({
3218
- backgroundColorToken: z2.string().optional(),
3219
- textColorToken: z2.string().optional(),
3220
- borderColorToken: z2.string().optional()
3866
+ hover: z4.object({
3867
+ backgroundColorToken: z4.string().optional(),
3868
+ textColorToken: z4.string().optional(),
3869
+ borderColorToken: z4.string().optional()
3221
3870
  }),
3222
3871
  // Content (answer) styling
3223
- content: z2.object({
3224
- textColorToken: z2.string()
3872
+ content: z4.object({
3873
+ textColorToken: z4.string()
3225
3874
  })
3226
3875
  });
3227
3876
 
@@ -4219,7 +4868,7 @@ function MultiStepForm({
4219
4868
  type: "button",
4220
4869
  onClick: goToPrevious,
4221
4870
  disabled: !canGoBack,
4222
- className: "outline btn-md",
4871
+ className: themeButtonClassName({ variant: "outline", size: "md" }),
4223
4872
  children: backButtonLabel
4224
4873
  }
4225
4874
  ),
@@ -4229,7 +4878,11 @@ function MultiStepForm({
4229
4878
  type: "button",
4230
4879
  onClick: goToNext,
4231
4880
  disabled: !canGoNext,
4232
- className: "primary btn-md rb-flex-1",
4881
+ className: themeButtonClassName({
4882
+ variant: "primary",
4883
+ size: "md",
4884
+ extraClassName: "rb-flex-1"
4885
+ }),
4233
4886
  children: [
4234
4887
  (isValidating || isSubmitting) && /* @__PURE__ */ jsx4(
4235
4888
  SpinnerNode,
@@ -5503,7 +6156,10 @@ function PaymentOptionSelectionStep({
5503
6156
  "button",
5504
6157
  {
5505
6158
  type: "button",
5506
- className: isSelected ? "primary btn-md" : "outline btn-md",
6159
+ className: themeButtonClassName({
6160
+ variant: isSelected ? "primary" : "outline",
6161
+ size: "md"
6162
+ }),
5507
6163
  style: paymentOptionLayoutStyle,
5508
6164
  onClick: () => updateData({
5509
6165
  selectedAppointmentPackageId: appointmentPackage.customerPassId,
@@ -5552,7 +6208,10 @@ function PaymentOptionSelectionStep({
5552
6208
  "button",
5553
6209
  {
5554
6210
  type: "button",
5555
- className: isSelected ? "primary btn-md" : "outline btn-md",
6211
+ className: themeButtonClassName({
6212
+ variant: isSelected ? "primary" : "outline",
6213
+ size: "md"
6214
+ }),
5556
6215
  style: paymentOptionLayoutStyle,
5557
6216
  onClick: () => updateData({
5558
6217
  selectedAppointmentPackageId: void 0,
@@ -6703,7 +7362,7 @@ var BookingFormClient = ({
6703
7362
  "button",
6704
7363
  {
6705
7364
  type: "button",
6706
- className: "secondary btn-sm",
7365
+ className: themeButtonClassName({ variant: "secondary", size: "sm" }),
6707
7366
  onClick: clearFeedback,
6708
7367
  children: "Dismiss"
6709
7368
  }
@@ -6723,116 +7382,116 @@ var BookingFormClient = ({
6723
7382
  import { useMemo as useMemo6 } from "react";
6724
7383
 
6725
7384
  // ../theme-core/src/inputs/types.ts
6726
- import { z as z4 } from "zod";
6727
- var inputSystemSchema = z4.object({
7385
+ import { z as z6 } from "zod";
7386
+ var inputSystemSchema = z6.object({
6728
7387
  // Base styling (applied to all inputs)
6729
- base: z4.object({
6730
- background: z4.union([
6731
- z4.object({
6732
- type: z4.literal("solid"),
6733
- colorToken: z4.string()
7388
+ base: z6.object({
7389
+ background: z6.union([
7390
+ z6.object({
7391
+ type: z6.literal("solid"),
7392
+ colorToken: z6.string()
6734
7393
  }),
6735
- z4.object({
6736
- type: z4.literal("transparent")
7394
+ z6.object({
7395
+ type: z6.literal("transparent")
6737
7396
  })
6738
7397
  ]),
6739
- textColorToken: z4.string(),
6740
- border: z4.object({
6741
- widthClass: z4.string(),
7398
+ textColorToken: z6.string(),
7399
+ border: z6.object({
7400
+ widthClass: z6.string(),
6742
7401
  // e.g., 'border', 'border-2'
6743
- colorToken: z4.string(),
6744
- style: z4.enum(["all", "underline"]).optional()
7402
+ colorToken: z6.string(),
7403
+ style: z6.enum(["all", "underline"]).optional()
6745
7404
  }),
6746
- corners: z4.enum(["square", "soft", "rounded", "pill"]).nullable(),
7405
+ corners: z6.enum(["square", "soft", "rounded", "pill"]).nullable(),
6747
7406
  // null = inherit from theme.corners
6748
- shadow: z4.object({
6749
- elevation: z4.enum(["none", "low", "medium"]),
6750
- softness: z4.enum(["soft", "crisp", "hard"]).nullable()
7407
+ shadow: z6.object({
7408
+ elevation: z6.enum(["none", "low", "medium"]),
7409
+ softness: z6.enum(["soft", "crisp", "hard"]).nullable()
6751
7410
  }).nullable(),
6752
- spacing: z4.enum(["compact", "cozy", "medium", "comfortable"]),
7411
+ spacing: z6.enum(["compact", "cozy", "medium", "comfortable"]),
6753
7412
  // padding inside inputs
6754
- fontSize: z4.enum(["sm", "base", "lg"])
7413
+ fontSize: z6.enum(["sm", "base", "lg"])
6755
7414
  }),
6756
7415
  // Label styling
6757
- label: z4.object({
6758
- textColorToken: z4.string(),
6759
- fontWeight: z4.enum(["regular", "medium", "semibold", "bold", "black"]),
6760
- fontSize: z4.enum(["2xs", "xs", "sm", "base"]),
6761
- textTransform: z4.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
6762
- letterSpacing: z4.enum(["normal", "wide", "wider", "widest"]).optional(),
6763
- opacity: z4.number().min(0.2).max(1).optional()
7416
+ label: z6.object({
7417
+ textColorToken: z6.string(),
7418
+ fontWeight: z6.enum(["regular", "medium", "semibold", "bold", "black"]),
7419
+ fontSize: z6.enum(["2xs", "xs", "sm", "base"]),
7420
+ textTransform: z6.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
7421
+ letterSpacing: z6.enum(["normal", "wide", "wider", "widest"]).optional(),
7422
+ opacity: z6.number().min(0.2).max(1).optional()
6764
7423
  }),
6765
7424
  // Focus state
6766
- focus: z4.object({
6767
- ringColorToken: z4.string(),
6768
- ringWidth: z4.enum(["0", "1", "2", "3"]),
6769
- borderColorToken: z4.string().optional()
7425
+ focus: z6.object({
7426
+ ringColorToken: z6.string(),
7427
+ ringWidth: z6.enum(["0", "1", "2", "3"]),
7428
+ borderColorToken: z6.string().optional()
6770
7429
  // Change border color on focus
6771
7430
  }),
6772
7431
  // Error state (for validation feedback)
6773
- error: z4.object({
6774
- borderColorToken: z4.string(),
6775
- textColorToken: z4.string()
7432
+ error: z6.object({
7433
+ borderColorToken: z6.string(),
7434
+ textColorToken: z6.string()
6776
7435
  }),
6777
7436
  // Disabled state
6778
- disabled: z4.object({
6779
- backgroundColorToken: z4.string(),
6780
- textColorToken: z4.string(),
6781
- opacity: z4.number().min(0.3).max(0.7)
7437
+ disabled: z6.object({
7438
+ backgroundColorToken: z6.string(),
7439
+ textColorToken: z6.string(),
7440
+ opacity: z6.number().min(0.3).max(0.7)
6782
7441
  })
6783
7442
  });
6784
7443
 
6785
7444
  // ../theme-core/src/navigation/types.ts
6786
- import { z as z6 } from "zod";
7445
+ import { z as z8 } from "zod";
6787
7446
 
6788
7447
  // ../theme-core/src/interactive/baseSchema.ts
6789
- import { z as z5 } from "zod";
6790
- var interactiveTypographySchema = z5.object({
7448
+ import { z as z7 } from "zod";
7449
+ var interactiveTypographySchema = z7.object({
6791
7450
  /** Font family source */
6792
- typography: z5.enum(["body", "heading"]).default("body"),
7451
+ typography: z7.enum(["body", "heading"]).default("body"),
6793
7452
  /** Font weight */
6794
- fontWeight: z5.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
7453
+ fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
6795
7454
  /** Text transform */
6796
- textTransform: z5.enum(["none", "uppercase", "capitalize"]).default("none"),
7455
+ textTransform: z7.enum(["none", "uppercase", "capitalize"]).default("none"),
6797
7456
  /** Italic style */
6798
- italic: z5.boolean().default(false)
7457
+ italic: z7.boolean().default(false)
6799
7458
  });
6800
- var effectApplicationSchema2 = z5.object({
7459
+ var effectApplicationSchema2 = z7.object({
6801
7460
  /** Effect preset ID */
6802
- effectId: z5.string(),
7461
+ effectId: z7.string(),
6803
7462
  /** User-provided customization options */
6804
- options: z5.record(z5.string(), z5.any()).optional()
7463
+ options: z7.record(z7.string(), z7.any()).optional()
6805
7464
  });
6806
- var effectCompositionSchema = z5.object({
7465
+ var effectCompositionSchema = z7.object({
6807
7466
  /** Effects always applied */
6808
- base: z5.array(effectApplicationSchema2).optional(),
7467
+ base: z7.array(effectApplicationSchema2).optional(),
6809
7468
  /** Effects applied on hover */
6810
- hover: z5.array(effectApplicationSchema2).optional(),
7469
+ hover: z7.array(effectApplicationSchema2).optional(),
6811
7470
  /** Effects applied on active/pressed */
6812
- active: z5.array(effectApplicationSchema2).optional(),
7471
+ active: z7.array(effectApplicationSchema2).optional(),
6813
7472
  /** Effects applied on focus */
6814
- focus: z5.array(effectApplicationSchema2).optional()
7473
+ focus: z7.array(effectApplicationSchema2).optional()
6815
7474
  });
6816
7475
 
6817
7476
  // ../theme-core/src/navigation/types.ts
6818
- var navLinkPaddingSchema = z6.enum(["none", "compact", "default"]);
6819
- var navLinkPaddingXSchema = z6.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
6820
- var navLinkBorderRadiusSchema = z6.enum(["none", "sm", "md", "full"]);
6821
- var navLinkTextSizeSchema = z6.enum(["xs", "sm", "base", "lg"]);
6822
- var navLinkLetterSpacingSchema = z6.enum(["normal", "wide", "wider", "widest"]);
6823
- var navLinkStyleSchema = z6.object({
7477
+ var navLinkPaddingSchema = z8.enum(["none", "compact", "default"]);
7478
+ var navLinkPaddingXSchema = z8.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7479
+ var navLinkBorderRadiusSchema = z8.enum(["none", "sm", "md", "full"]);
7480
+ var navLinkTextSizeSchema = z8.enum(["xs", "sm", "base", "lg"]);
7481
+ var navLinkLetterSpacingSchema = z8.enum(["normal", "wide", "wider", "widest"]);
7482
+ var navLinkStyleSchema = z8.object({
6824
7483
  /** Display name for the style */
6825
- name: z6.string().min(1).max(30).optional(),
7484
+ name: z8.string().min(1).max(30).optional(),
6826
7485
  /** Typography settings (inherited from interactive base) */
6827
7486
  ...interactiveTypographySchema.shape,
6828
7487
  /** Text color token */
6829
- colorToken: z6.string().default("text"),
7488
+ colorToken: z8.string().default("text"),
6830
7489
  /** Optional text size override */
6831
7490
  textSize: navLinkTextSizeSchema.optional(),
6832
7491
  /** Optional letter spacing override */
6833
7492
  letterSpacing: navLinkLetterSpacingSchema.optional(),
6834
7493
  /** Hover/active color token (for color-change effects) */
6835
- hoverColorToken: z6.string().nullable().optional(),
7494
+ hoverColorToken: z8.string().nullable().optional(),
6836
7495
  /** Padding preset */
6837
7496
  padding: navLinkPaddingSchema.default("compact"),
6838
7497
  /** Horizontal padding override (overrides horizontal component of padding preset) */
@@ -6988,15 +7647,15 @@ var NAV_LINK_PRESETS = {
6988
7647
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
6989
7648
 
6990
7649
  // ../theme-core/src/shared/componentStyles.ts
6991
- import { z as z7 } from "zod";
6992
- var componentBorderSchema = z7.object({
6993
- width: z7.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
6994
- style: z7.enum(["solid", "dashed"]).default("solid"),
6995
- colorToken: z7.string().optional()
7650
+ import { z as z9 } from "zod";
7651
+ var componentBorderSchema = z9.object({
7652
+ width: z9.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
7653
+ style: z9.enum(["solid", "dashed"]).default("solid"),
7654
+ colorToken: z9.string().optional()
6996
7655
  // defaults to "border" if not set
6997
7656
  });
6998
- var componentShadowSchema = z7.object({
6999
- elevation: z7.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
7657
+ var componentShadowSchema = z9.object({
7658
+ elevation: z9.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
7000
7659
  });
7001
7660
 
7002
7661
  // ../theme-core/src/blocks/vars/event-registration.ts
@@ -7450,7 +8109,7 @@ blockVarRegistry.set("course-details", generateCourseDetailsVars);
7450
8109
  blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
7451
8110
 
7452
8111
  // ../theme-core/src/customCss/validation.ts
7453
- import { z as z8 } from "zod";
8112
+ import { z as z10 } from "zod";
7454
8113
  var FORBIDDEN_SELECTORS = [":root", "html", "body"];
7455
8114
  var UNIVERSAL_SELECTOR = "*";
7456
8115
  var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
@@ -7492,7 +8151,7 @@ function containsForbiddenSelector(selector) {
7492
8151
  }
7493
8152
  return false;
7494
8153
  }
7495
- var selectorSchema = z8.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
8154
+ var selectorSchema = z10.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
7496
8155
  (s) => !containsForbiddenSelector(s),
7497
8156
  { message: "Global selectors (:root, html, body, *) are not allowed" }
7498
8157
  );
@@ -7502,38 +8161,38 @@ function containsRemoteUrl(value) {
7502
8161
  function containsJavascriptUrl(value) {
7503
8162
  return JAVASCRIPT_URL_PATTERN.test(value);
7504
8163
  }
7505
- var declarationValueSchema = z8.string().max(500, "Declaration value too long (max 500 characters)").refine(
8164
+ var declarationValueSchema = z10.string().max(500, "Declaration value too long (max 500 characters)").refine(
7506
8165
  (v) => !containsRemoteUrl(v),
7507
8166
  { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
7508
8167
  ).refine(
7509
8168
  (v) => !containsJavascriptUrl(v),
7510
8169
  { message: "javascript: URLs are not allowed" }
7511
8170
  );
7512
- var declarationsSchema = z8.record(
7513
- z8.string().min(1).max(100),
8171
+ var declarationsSchema = z10.record(
8172
+ z10.string().min(1).max(100),
7514
8173
  // property name
7515
8174
  declarationValueSchema
7516
8175
  // property value
7517
8176
  );
7518
- var customCssRuleSchema = z8.object({
7519
- id: z8.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
8177
+ var customCssRuleSchema = z10.object({
8178
+ id: z10.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
7520
8179
  selector: selectorSchema,
7521
8180
  declarations: declarationsSchema
7522
8181
  });
7523
8182
  var blockCustomCssRuleSchema = customCssRuleSchema.extend({
7524
- blockKind: z8.string().min(1, "Block kind is required").max(50, "Block kind too long")
8183
+ blockKind: z10.string().min(1, "Block kind is required").max(50, "Block kind too long")
7525
8184
  });
7526
- var customCssRulesSchema = z8.array(customCssRuleSchema).optional();
7527
- var blockCustomCssRulesSchema = z8.array(blockCustomCssRuleSchema).optional();
8185
+ var customCssRulesSchema = z10.array(customCssRuleSchema).optional();
8186
+ var blockCustomCssRulesSchema = z10.array(blockCustomCssRuleSchema).optional();
7528
8187
 
7529
8188
  // ../theme-core/src/customCss/atRuleValidation.ts
7530
- import { z as z9 } from "zod";
8189
+ import { z as z11 } from "zod";
7531
8190
  var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
7532
8191
  var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
7533
8192
  var BLOCKED_AT_RULES = ["@import", "@charset"];
7534
8193
  var BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
7535
- var ruleIdSchema = z9.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
7536
- var nestedRuleSchema = z9.object({
8194
+ var ruleIdSchema = z11.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
8195
+ var nestedRuleSchema = z11.object({
7537
8196
  selector: selectorSchema,
7538
8197
  declarations: declarationsSchema
7539
8198
  });
@@ -7545,73 +8204,73 @@ function isValidKeyframeOffset(offset) {
7545
8204
  const value = parseInt(match[1], 10);
7546
8205
  return value >= 0 && value <= 100;
7547
8206
  }
7548
- var keyframeOffsetSchema = z9.string().transform((offset) => offset.trim()).refine(
8207
+ var keyframeOffsetSchema = z11.string().transform((offset) => offset.trim()).refine(
7549
8208
  (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
7550
8209
  { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
7551
8210
  ).refine(
7552
8211
  isValidKeyframeOffset,
7553
8212
  { message: "Keyframe offset must be between 0% and 100%" }
7554
8213
  );
7555
- var animationNameSchema = z9.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
8214
+ var animationNameSchema = z11.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
7556
8215
  (name) => ANIMATION_NAME_PATTERN.test(name),
7557
8216
  { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
7558
8217
  );
7559
- var keyframeSchema = z9.object({
8218
+ var keyframeSchema = z11.object({
7560
8219
  offset: keyframeOffsetSchema,
7561
8220
  declarations: declarationsSchema
7562
8221
  });
7563
- var keyframesAtRuleSchema = z9.object({
8222
+ var keyframesAtRuleSchema = z11.object({
7564
8223
  id: ruleIdSchema,
7565
- type: z9.literal("keyframes"),
8224
+ type: z11.literal("keyframes"),
7566
8225
  name: animationNameSchema,
7567
- frames: z9.array(keyframeSchema).min(1, "At least one keyframe is required")
8226
+ frames: z11.array(keyframeSchema).min(1, "At least one keyframe is required")
7568
8227
  });
7569
- var fontFaceDeclarationsSchema = z9.record(z9.string().min(1).max(100), declarationValueSchema).refine(
8228
+ var fontFaceDeclarationsSchema = z11.record(z11.string().min(1).max(100), declarationValueSchema).refine(
7570
8229
  (decls) => "fontFamily" in decls || "font-family" in decls,
7571
8230
  { message: "font-family is required in @font-face" }
7572
8231
  );
7573
- var fontFaceAtRuleSchema = z9.object({
8232
+ var fontFaceAtRuleSchema = z11.object({
7574
8233
  id: ruleIdSchema,
7575
- type: z9.literal("font-face"),
8234
+ type: z11.literal("font-face"),
7576
8235
  declarations: fontFaceDeclarationsSchema
7577
8236
  });
7578
- var mediaQuerySchema = z9.string().min(1, "Media query is required").max(200, "Media query too long");
7579
- var mediaAtRuleSchema = z9.object({
8237
+ var mediaQuerySchema = z11.string().min(1, "Media query is required").max(200, "Media query too long");
8238
+ var mediaAtRuleSchema = z11.object({
7580
8239
  id: ruleIdSchema,
7581
- type: z9.literal("media"),
8240
+ type: z11.literal("media"),
7582
8241
  query: mediaQuerySchema,
7583
- rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
8242
+ rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
7584
8243
  });
7585
- var supportsConditionSchema = z9.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
7586
- var supportsAtRuleSchema = z9.object({
8244
+ var supportsConditionSchema = z11.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
8245
+ var supportsAtRuleSchema = z11.object({
7587
8246
  id: ruleIdSchema,
7588
- type: z9.literal("supports"),
8247
+ type: z11.literal("supports"),
7589
8248
  condition: supportsConditionSchema,
7590
- rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
8249
+ rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
7591
8250
  });
7592
8251
  function containsBlockedAtRule(css) {
7593
8252
  return BLOCKED_AT_RULE_PATTERN.test(css);
7594
8253
  }
7595
- var rawCssSchema = z9.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
8254
+ var rawCssSchema = z11.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
7596
8255
  (css) => css.trim().startsWith("@"),
7597
8256
  { message: "Raw at-rule must start with @" }
7598
8257
  ).refine(
7599
8258
  (css) => !containsBlockedAtRule(css),
7600
8259
  { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
7601
8260
  );
7602
- var rawAtRuleSchema = z9.object({
8261
+ var rawAtRuleSchema = z11.object({
7603
8262
  id: ruleIdSchema,
7604
- type: z9.literal("raw"),
8263
+ type: z11.literal("raw"),
7605
8264
  css: rawCssSchema
7606
8265
  });
7607
- var customCssAtRuleSchema = z9.discriminatedUnion("type", [
8266
+ var customCssAtRuleSchema = z11.discriminatedUnion("type", [
7608
8267
  keyframesAtRuleSchema,
7609
8268
  fontFaceAtRuleSchema,
7610
8269
  mediaAtRuleSchema,
7611
8270
  supportsAtRuleSchema,
7612
8271
  rawAtRuleSchema
7613
8272
  ]);
7614
- var customCssAtRulesSchema = z9.array(customCssAtRuleSchema).optional();
8273
+ var customCssAtRulesSchema = z11.array(customCssAtRuleSchema).optional();
7615
8274
 
7616
8275
  // ../theme-core/src/responsiveMode.ts
7617
8276
  var THEME_RESPONSIVE_MODE_ATTR = "data-rb-responsive-mode";