@riverbankcms/sdk 0.60.9 → 0.60.11

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.
@@ -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
 
@@ -3166,8 +3753,8 @@ function addLocalScheduleDays(date, days) {
3166
3753
  }
3167
3754
 
3168
3755
  // ../theme-core/src/accordions/types.ts
3169
- import { z as z2 } from "zod";
3170
- var accordionIconSchema = z2.enum([
3756
+ import { z as z4 } from "zod";
3757
+ var accordionIconSchema = z4.enum([
3171
3758
  "plus-minus",
3172
3759
  // + becomes - (swap or rotate 90°)
3173
3760
  "chevron",
@@ -3179,49 +3766,49 @@ var accordionIconSchema = z2.enum([
3179
3766
  "circle-plus-minus"
3180
3767
  // ⊕ becomes ⊖ (swap with fade)
3181
3768
  ]);
3182
- var accordionSystemSchema = z2.object({
3769
+ var accordionSystemSchema = z4.object({
3183
3770
  // 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()
3771
+ background: z4.object({
3772
+ type: z4.literal("solid"),
3773
+ colorToken: z4.string()
3187
3774
  }),
3188
3775
  // Spacing (padding inside items)
3189
- spacing: z2.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
3776
+ spacing: z4.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
3190
3777
  // Border radius (null = inherit from theme.corners)
3191
- corners: z2.enum(["square", "soft", "rounded", "pill"]).nullable(),
3778
+ corners: z4.enum(["square", "soft", "rounded", "pill"]).nullable(),
3192
3779
  // Border styling (null = inherit from theme.border)
3193
- border: z2.object({
3194
- widthClass: z2.string(),
3780
+ border: z4.object({
3781
+ widthClass: z4.string(),
3195
3782
  // e.g., 'border', 'border-2', 'border-0'
3196
- colorToken: z2.string()
3783
+ colorToken: z4.string()
3197
3784
  }).nullable(),
3198
3785
  // 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"])
3786
+ shadow: z4.object({
3787
+ elevation: z4.enum(["none", "low", "medium", "high"]),
3788
+ softness: z4.enum(["soft", "crisp", "hard"]).nullable(),
3789
+ position: z4.enum(["bottom", "bottom-right"])
3203
3790
  }).nullable(),
3204
3791
  // Icon style and animation
3205
- icon: z2.object({
3792
+ icon: z4.object({
3206
3793
  style: accordionIconSchema,
3207
- position: z2.enum(["left", "right"]),
3208
- size: z2.enum(["sm", "md", "lg"])
3794
+ position: z4.enum(["left", "right"]),
3795
+ size: z4.enum(["sm", "md", "lg"])
3209
3796
  }),
3210
3797
  // Trigger (question) styling
3211
- trigger: z2.object({
3212
- textColorToken: z2.string(),
3213
- fontWeight: z2.enum(["regular", "medium", "semibold", "bold"]).nullable()
3798
+ trigger: z4.object({
3799
+ textColorToken: z4.string(),
3800
+ fontWeight: z4.enum(["regular", "medium", "semibold", "bold"]).nullable()
3214
3801
  // null = inherit from theme
3215
3802
  }),
3216
3803
  // Hover state styling
3217
- hover: z2.object({
3218
- backgroundColorToken: z2.string().optional(),
3219
- textColorToken: z2.string().optional(),
3220
- borderColorToken: z2.string().optional()
3804
+ hover: z4.object({
3805
+ backgroundColorToken: z4.string().optional(),
3806
+ textColorToken: z4.string().optional(),
3807
+ borderColorToken: z4.string().optional()
3221
3808
  }),
3222
3809
  // Content (answer) styling
3223
- content: z2.object({
3224
- textColorToken: z2.string()
3810
+ content: z4.object({
3811
+ textColorToken: z4.string()
3225
3812
  })
3226
3813
  });
3227
3814
 
@@ -4219,7 +4806,7 @@ function MultiStepForm({
4219
4806
  type: "button",
4220
4807
  onClick: goToPrevious,
4221
4808
  disabled: !canGoBack,
4222
- className: "outline btn-md",
4809
+ className: themeButtonClassName({ variant: "outline", size: "md" }),
4223
4810
  children: backButtonLabel
4224
4811
  }
4225
4812
  ),
@@ -4229,7 +4816,11 @@ function MultiStepForm({
4229
4816
  type: "button",
4230
4817
  onClick: goToNext,
4231
4818
  disabled: !canGoNext,
4232
- className: "primary btn-md rb-flex-1",
4819
+ className: themeButtonClassName({
4820
+ variant: "primary",
4821
+ size: "md",
4822
+ extraClassName: "rb-flex-1"
4823
+ }),
4233
4824
  children: [
4234
4825
  (isValidating || isSubmitting) && /* @__PURE__ */ jsx4(
4235
4826
  SpinnerNode,
@@ -5503,7 +6094,10 @@ function PaymentOptionSelectionStep({
5503
6094
  "button",
5504
6095
  {
5505
6096
  type: "button",
5506
- className: isSelected ? "primary btn-md" : "outline btn-md",
6097
+ className: themeButtonClassName({
6098
+ variant: isSelected ? "primary" : "outline",
6099
+ size: "md"
6100
+ }),
5507
6101
  style: paymentOptionLayoutStyle,
5508
6102
  onClick: () => updateData({
5509
6103
  selectedAppointmentPackageId: appointmentPackage.customerPassId,
@@ -5552,7 +6146,10 @@ function PaymentOptionSelectionStep({
5552
6146
  "button",
5553
6147
  {
5554
6148
  type: "button",
5555
- className: isSelected ? "primary btn-md" : "outline btn-md",
6149
+ className: themeButtonClassName({
6150
+ variant: isSelected ? "primary" : "outline",
6151
+ size: "md"
6152
+ }),
5556
6153
  style: paymentOptionLayoutStyle,
5557
6154
  onClick: () => updateData({
5558
6155
  selectedAppointmentPackageId: void 0,
@@ -6703,7 +7300,7 @@ var BookingFormClient = ({
6703
7300
  "button",
6704
7301
  {
6705
7302
  type: "button",
6706
- className: "secondary btn-sm",
7303
+ className: themeButtonClassName({ variant: "secondary", size: "sm" }),
6707
7304
  onClick: clearFeedback,
6708
7305
  children: "Dismiss"
6709
7306
  }
@@ -6723,116 +7320,116 @@ var BookingFormClient = ({
6723
7320
  import { useMemo as useMemo6 } from "react";
6724
7321
 
6725
7322
  // ../theme-core/src/inputs/types.ts
6726
- import { z as z4 } from "zod";
6727
- var inputSystemSchema = z4.object({
7323
+ import { z as z6 } from "zod";
7324
+ var inputSystemSchema = z6.object({
6728
7325
  // 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()
7326
+ base: z6.object({
7327
+ background: z6.union([
7328
+ z6.object({
7329
+ type: z6.literal("solid"),
7330
+ colorToken: z6.string()
6734
7331
  }),
6735
- z4.object({
6736
- type: z4.literal("transparent")
7332
+ z6.object({
7333
+ type: z6.literal("transparent")
6737
7334
  })
6738
7335
  ]),
6739
- textColorToken: z4.string(),
6740
- border: z4.object({
6741
- widthClass: z4.string(),
7336
+ textColorToken: z6.string(),
7337
+ border: z6.object({
7338
+ widthClass: z6.string(),
6742
7339
  // e.g., 'border', 'border-2'
6743
- colorToken: z4.string(),
6744
- style: z4.enum(["all", "underline"]).optional()
7340
+ colorToken: z6.string(),
7341
+ style: z6.enum(["all", "underline"]).optional()
6745
7342
  }),
6746
- corners: z4.enum(["square", "soft", "rounded", "pill"]).nullable(),
7343
+ corners: z6.enum(["square", "soft", "rounded", "pill"]).nullable(),
6747
7344
  // null = inherit from theme.corners
6748
- shadow: z4.object({
6749
- elevation: z4.enum(["none", "low", "medium"]),
6750
- softness: z4.enum(["soft", "crisp", "hard"]).nullable()
7345
+ shadow: z6.object({
7346
+ elevation: z6.enum(["none", "low", "medium"]),
7347
+ softness: z6.enum(["soft", "crisp", "hard"]).nullable()
6751
7348
  }).nullable(),
6752
- spacing: z4.enum(["compact", "cozy", "medium", "comfortable"]),
7349
+ spacing: z6.enum(["compact", "cozy", "medium", "comfortable"]),
6753
7350
  // padding inside inputs
6754
- fontSize: z4.enum(["sm", "base", "lg"])
7351
+ fontSize: z6.enum(["sm", "base", "lg"])
6755
7352
  }),
6756
7353
  // 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()
7354
+ label: z6.object({
7355
+ textColorToken: z6.string(),
7356
+ fontWeight: z6.enum(["regular", "medium", "semibold", "bold", "black"]),
7357
+ fontSize: z6.enum(["2xs", "xs", "sm", "base"]),
7358
+ textTransform: z6.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
7359
+ letterSpacing: z6.enum(["normal", "wide", "wider", "widest"]).optional(),
7360
+ opacity: z6.number().min(0.2).max(1).optional()
6764
7361
  }),
6765
7362
  // Focus state
6766
- focus: z4.object({
6767
- ringColorToken: z4.string(),
6768
- ringWidth: z4.enum(["0", "1", "2", "3"]),
6769
- borderColorToken: z4.string().optional()
7363
+ focus: z6.object({
7364
+ ringColorToken: z6.string(),
7365
+ ringWidth: z6.enum(["0", "1", "2", "3"]),
7366
+ borderColorToken: z6.string().optional()
6770
7367
  // Change border color on focus
6771
7368
  }),
6772
7369
  // Error state (for validation feedback)
6773
- error: z4.object({
6774
- borderColorToken: z4.string(),
6775
- textColorToken: z4.string()
7370
+ error: z6.object({
7371
+ borderColorToken: z6.string(),
7372
+ textColorToken: z6.string()
6776
7373
  }),
6777
7374
  // Disabled state
6778
- disabled: z4.object({
6779
- backgroundColorToken: z4.string(),
6780
- textColorToken: z4.string(),
6781
- opacity: z4.number().min(0.3).max(0.7)
7375
+ disabled: z6.object({
7376
+ backgroundColorToken: z6.string(),
7377
+ textColorToken: z6.string(),
7378
+ opacity: z6.number().min(0.3).max(0.7)
6782
7379
  })
6783
7380
  });
6784
7381
 
6785
7382
  // ../theme-core/src/navigation/types.ts
6786
- import { z as z6 } from "zod";
7383
+ import { z as z8 } from "zod";
6787
7384
 
6788
7385
  // ../theme-core/src/interactive/baseSchema.ts
6789
- import { z as z5 } from "zod";
6790
- var interactiveTypographySchema = z5.object({
7386
+ import { z as z7 } from "zod";
7387
+ var interactiveTypographySchema = z7.object({
6791
7388
  /** Font family source */
6792
- typography: z5.enum(["body", "heading"]).default("body"),
7389
+ typography: z7.enum(["body", "heading"]).default("body"),
6793
7390
  /** Font weight */
6794
- fontWeight: z5.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
7391
+ fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
6795
7392
  /** Text transform */
6796
- textTransform: z5.enum(["none", "uppercase", "capitalize"]).default("none"),
7393
+ textTransform: z7.enum(["none", "uppercase", "capitalize"]).default("none"),
6797
7394
  /** Italic style */
6798
- italic: z5.boolean().default(false)
7395
+ italic: z7.boolean().default(false)
6799
7396
  });
6800
- var effectApplicationSchema2 = z5.object({
7397
+ var effectApplicationSchema2 = z7.object({
6801
7398
  /** Effect preset ID */
6802
- effectId: z5.string(),
7399
+ effectId: z7.string(),
6803
7400
  /** User-provided customization options */
6804
- options: z5.record(z5.string(), z5.any()).optional()
7401
+ options: z7.record(z7.string(), z7.any()).optional()
6805
7402
  });
6806
- var effectCompositionSchema = z5.object({
7403
+ var effectCompositionSchema = z7.object({
6807
7404
  /** Effects always applied */
6808
- base: z5.array(effectApplicationSchema2).optional(),
7405
+ base: z7.array(effectApplicationSchema2).optional(),
6809
7406
  /** Effects applied on hover */
6810
- hover: z5.array(effectApplicationSchema2).optional(),
7407
+ hover: z7.array(effectApplicationSchema2).optional(),
6811
7408
  /** Effects applied on active/pressed */
6812
- active: z5.array(effectApplicationSchema2).optional(),
7409
+ active: z7.array(effectApplicationSchema2).optional(),
6813
7410
  /** Effects applied on focus */
6814
- focus: z5.array(effectApplicationSchema2).optional()
7411
+ focus: z7.array(effectApplicationSchema2).optional()
6815
7412
  });
6816
7413
 
6817
7414
  // ../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({
7415
+ var navLinkPaddingSchema = z8.enum(["none", "compact", "default"]);
7416
+ var navLinkPaddingXSchema = z8.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7417
+ var navLinkBorderRadiusSchema = z8.enum(["none", "sm", "md", "full"]);
7418
+ var navLinkTextSizeSchema = z8.enum(["xs", "sm", "base", "lg"]);
7419
+ var navLinkLetterSpacingSchema = z8.enum(["normal", "wide", "wider", "widest"]);
7420
+ var navLinkStyleSchema = z8.object({
6824
7421
  /** Display name for the style */
6825
- name: z6.string().min(1).max(30).optional(),
7422
+ name: z8.string().min(1).max(30).optional(),
6826
7423
  /** Typography settings (inherited from interactive base) */
6827
7424
  ...interactiveTypographySchema.shape,
6828
7425
  /** Text color token */
6829
- colorToken: z6.string().default("text"),
7426
+ colorToken: z8.string().default("text"),
6830
7427
  /** Optional text size override */
6831
7428
  textSize: navLinkTextSizeSchema.optional(),
6832
7429
  /** Optional letter spacing override */
6833
7430
  letterSpacing: navLinkLetterSpacingSchema.optional(),
6834
7431
  /** Hover/active color token (for color-change effects) */
6835
- hoverColorToken: z6.string().nullable().optional(),
7432
+ hoverColorToken: z8.string().nullable().optional(),
6836
7433
  /** Padding preset */
6837
7434
  padding: navLinkPaddingSchema.default("compact"),
6838
7435
  /** Horizontal padding override (overrides horizontal component of padding preset) */
@@ -6988,15 +7585,15 @@ var NAV_LINK_PRESETS = {
6988
7585
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
6989
7586
 
6990
7587
  // ../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()
7588
+ import { z as z9 } from "zod";
7589
+ var componentBorderSchema = z9.object({
7590
+ width: z9.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
7591
+ style: z9.enum(["solid", "dashed"]).default("solid"),
7592
+ colorToken: z9.string().optional()
6996
7593
  // defaults to "border" if not set
6997
7594
  });
6998
- var componentShadowSchema = z7.object({
6999
- elevation: z7.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
7595
+ var componentShadowSchema = z9.object({
7596
+ elevation: z9.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
7000
7597
  });
7001
7598
 
7002
7599
  // ../theme-core/src/blocks/vars/event-registration.ts
@@ -7450,7 +8047,7 @@ blockVarRegistry.set("course-details", generateCourseDetailsVars);
7450
8047
  blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
7451
8048
 
7452
8049
  // ../theme-core/src/customCss/validation.ts
7453
- import { z as z8 } from "zod";
8050
+ import { z as z10 } from "zod";
7454
8051
  var FORBIDDEN_SELECTORS = [":root", "html", "body"];
7455
8052
  var UNIVERSAL_SELECTOR = "*";
7456
8053
  var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
@@ -7492,7 +8089,7 @@ function containsForbiddenSelector(selector) {
7492
8089
  }
7493
8090
  return false;
7494
8091
  }
7495
- var selectorSchema = z8.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
8092
+ var selectorSchema = z10.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
7496
8093
  (s) => !containsForbiddenSelector(s),
7497
8094
  { message: "Global selectors (:root, html, body, *) are not allowed" }
7498
8095
  );
@@ -7502,38 +8099,38 @@ function containsRemoteUrl(value) {
7502
8099
  function containsJavascriptUrl(value) {
7503
8100
  return JAVASCRIPT_URL_PATTERN.test(value);
7504
8101
  }
7505
- var declarationValueSchema = z8.string().max(500, "Declaration value too long (max 500 characters)").refine(
8102
+ var declarationValueSchema = z10.string().max(500, "Declaration value too long (max 500 characters)").refine(
7506
8103
  (v) => !containsRemoteUrl(v),
7507
8104
  { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
7508
8105
  ).refine(
7509
8106
  (v) => !containsJavascriptUrl(v),
7510
8107
  { message: "javascript: URLs are not allowed" }
7511
8108
  );
7512
- var declarationsSchema = z8.record(
7513
- z8.string().min(1).max(100),
8109
+ var declarationsSchema = z10.record(
8110
+ z10.string().min(1).max(100),
7514
8111
  // property name
7515
8112
  declarationValueSchema
7516
8113
  // property value
7517
8114
  );
7518
- var customCssRuleSchema = z8.object({
7519
- id: z8.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
8115
+ var customCssRuleSchema = z10.object({
8116
+ id: z10.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
7520
8117
  selector: selectorSchema,
7521
8118
  declarations: declarationsSchema
7522
8119
  });
7523
8120
  var blockCustomCssRuleSchema = customCssRuleSchema.extend({
7524
- blockKind: z8.string().min(1, "Block kind is required").max(50, "Block kind too long")
8121
+ blockKind: z10.string().min(1, "Block kind is required").max(50, "Block kind too long")
7525
8122
  });
7526
- var customCssRulesSchema = z8.array(customCssRuleSchema).optional();
7527
- var blockCustomCssRulesSchema = z8.array(blockCustomCssRuleSchema).optional();
8123
+ var customCssRulesSchema = z10.array(customCssRuleSchema).optional();
8124
+ var blockCustomCssRulesSchema = z10.array(blockCustomCssRuleSchema).optional();
7528
8125
 
7529
8126
  // ../theme-core/src/customCss/atRuleValidation.ts
7530
- import { z as z9 } from "zod";
8127
+ import { z as z11 } from "zod";
7531
8128
  var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
7532
8129
  var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
7533
8130
  var BLOCKED_AT_RULES = ["@import", "@charset"];
7534
8131
  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({
8132
+ var ruleIdSchema = z11.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
8133
+ var nestedRuleSchema = z11.object({
7537
8134
  selector: selectorSchema,
7538
8135
  declarations: declarationsSchema
7539
8136
  });
@@ -7545,73 +8142,73 @@ function isValidKeyframeOffset(offset) {
7545
8142
  const value = parseInt(match[1], 10);
7546
8143
  return value >= 0 && value <= 100;
7547
8144
  }
7548
- var keyframeOffsetSchema = z9.string().transform((offset) => offset.trim()).refine(
8145
+ var keyframeOffsetSchema = z11.string().transform((offset) => offset.trim()).refine(
7549
8146
  (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
7550
8147
  { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
7551
8148
  ).refine(
7552
8149
  isValidKeyframeOffset,
7553
8150
  { message: "Keyframe offset must be between 0% and 100%" }
7554
8151
  );
7555
- var animationNameSchema = z9.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
8152
+ var animationNameSchema = z11.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
7556
8153
  (name) => ANIMATION_NAME_PATTERN.test(name),
7557
8154
  { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
7558
8155
  );
7559
- var keyframeSchema = z9.object({
8156
+ var keyframeSchema = z11.object({
7560
8157
  offset: keyframeOffsetSchema,
7561
8158
  declarations: declarationsSchema
7562
8159
  });
7563
- var keyframesAtRuleSchema = z9.object({
8160
+ var keyframesAtRuleSchema = z11.object({
7564
8161
  id: ruleIdSchema,
7565
- type: z9.literal("keyframes"),
8162
+ type: z11.literal("keyframes"),
7566
8163
  name: animationNameSchema,
7567
- frames: z9.array(keyframeSchema).min(1, "At least one keyframe is required")
8164
+ frames: z11.array(keyframeSchema).min(1, "At least one keyframe is required")
7568
8165
  });
7569
- var fontFaceDeclarationsSchema = z9.record(z9.string().min(1).max(100), declarationValueSchema).refine(
8166
+ var fontFaceDeclarationsSchema = z11.record(z11.string().min(1).max(100), declarationValueSchema).refine(
7570
8167
  (decls) => "fontFamily" in decls || "font-family" in decls,
7571
8168
  { message: "font-family is required in @font-face" }
7572
8169
  );
7573
- var fontFaceAtRuleSchema = z9.object({
8170
+ var fontFaceAtRuleSchema = z11.object({
7574
8171
  id: ruleIdSchema,
7575
- type: z9.literal("font-face"),
8172
+ type: z11.literal("font-face"),
7576
8173
  declarations: fontFaceDeclarationsSchema
7577
8174
  });
7578
- var mediaQuerySchema = z9.string().min(1, "Media query is required").max(200, "Media query too long");
7579
- var mediaAtRuleSchema = z9.object({
8175
+ var mediaQuerySchema = z11.string().min(1, "Media query is required").max(200, "Media query too long");
8176
+ var mediaAtRuleSchema = z11.object({
7580
8177
  id: ruleIdSchema,
7581
- type: z9.literal("media"),
8178
+ type: z11.literal("media"),
7582
8179
  query: mediaQuerySchema,
7583
- rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
8180
+ rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
7584
8181
  });
7585
- var supportsConditionSchema = z9.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
7586
- var supportsAtRuleSchema = z9.object({
8182
+ var supportsConditionSchema = z11.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
8183
+ var supportsAtRuleSchema = z11.object({
7587
8184
  id: ruleIdSchema,
7588
- type: z9.literal("supports"),
8185
+ type: z11.literal("supports"),
7589
8186
  condition: supportsConditionSchema,
7590
- rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
8187
+ rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
7591
8188
  });
7592
8189
  function containsBlockedAtRule(css) {
7593
8190
  return BLOCKED_AT_RULE_PATTERN.test(css);
7594
8191
  }
7595
- var rawCssSchema = z9.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
8192
+ var rawCssSchema = z11.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
7596
8193
  (css) => css.trim().startsWith("@"),
7597
8194
  { message: "Raw at-rule must start with @" }
7598
8195
  ).refine(
7599
8196
  (css) => !containsBlockedAtRule(css),
7600
8197
  { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
7601
8198
  );
7602
- var rawAtRuleSchema = z9.object({
8199
+ var rawAtRuleSchema = z11.object({
7603
8200
  id: ruleIdSchema,
7604
- type: z9.literal("raw"),
8201
+ type: z11.literal("raw"),
7605
8202
  css: rawCssSchema
7606
8203
  });
7607
- var customCssAtRuleSchema = z9.discriminatedUnion("type", [
8204
+ var customCssAtRuleSchema = z11.discriminatedUnion("type", [
7608
8205
  keyframesAtRuleSchema,
7609
8206
  fontFaceAtRuleSchema,
7610
8207
  mediaAtRuleSchema,
7611
8208
  supportsAtRuleSchema,
7612
8209
  rawAtRuleSchema
7613
8210
  ]);
7614
- var customCssAtRulesSchema = z9.array(customCssAtRuleSchema).optional();
8211
+ var customCssAtRulesSchema = z11.array(customCssAtRuleSchema).optional();
7615
8212
 
7616
8213
  // ../theme-core/src/responsiveMode.ts
7617
8214
  var THEME_RESPONSIVE_MODE_ATTR = "data-rb-responsive-mode";