@riverbankcms/sdk 0.60.0 → 0.60.3

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 (140) hide show
  1. package/README.md +20 -3
  2. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +1 -3
  3. package/dist/_dts/api/src/bookingRecords.d.ts +8 -0
  4. package/dist/_dts/api/src/communications.d.ts +1 -0
  5. package/dist/_dts/api/src/contentRuntime.d.ts +8 -0
  6. package/dist/_dts/api/src/endpoints.d.ts +18 -1
  7. package/dist/_dts/api/src/index.d.ts +1 -1
  8. package/dist/_dts/api/src/media.d.ts +1 -1
  9. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +45 -1
  10. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +24 -1
  11. package/dist/_dts/api/src/siteSettings.d.ts +7 -0
  12. package/dist/_dts/api/src/types.d.ts +1 -1
  13. package/dist/_dts/billing/src/plans/types.d.ts +27 -0
  14. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -0
  15. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -0
  16. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +1 -0
  17. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +173 -2
  18. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -2
  19. package/dist/_dts/blocks/src/system/runtime/header/shared.d.ts +1 -0
  20. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.client.d.ts +1 -0
  21. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.d.ts +2 -0
  22. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  23. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventDetailModal.d.ts +2 -1
  24. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -1
  25. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +1 -0
  26. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +1 -0
  27. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +16 -0
  28. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +2 -0
  29. package/dist/_dts/blocks/src/system/runtime/nodes/location-map.server.d.ts +4 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/location-map.shared.d.ts +38 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/location-map.view.d.ts +2 -1
  32. package/dist/_dts/content-editor/src/index.d.ts +2 -2
  33. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +9 -0
  34. package/dist/_dts/content-editor/src/primitives/shared/index.d.ts +1 -0
  35. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -0
  36. package/dist/_dts/core/src/business-address.d.ts +38 -0
  37. package/dist/_dts/core/src/index.d.ts +1 -0
  38. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +22 -0
  39. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  40. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +4 -0
  41. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +8 -5
  42. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +7 -5
  43. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +2 -0
  44. package/dist/_dts/editor-blocks/src/block-editor/reorderControlMode.d.ts +3 -0
  45. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +4 -0
  46. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +14 -0
  47. package/dist/_dts/media-react/src/index.d.ts +1 -1
  48. package/dist/_dts/preview-next/src/client/blocks/runOptimisticCustomizeAction.d.ts +43 -20
  49. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  50. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +11 -28
  51. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +7 -1
  52. package/dist/_dts/preview-next/src/client/preview/PreviewEditorUI.d.ts +1 -1
  53. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +12 -1
  54. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +6 -1
  55. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +20 -0
  56. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +99 -0
  57. package/dist/_dts/preview-next/src/client/preview/previewChromeSurface.d.ts +12 -0
  58. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +41 -0
  59. package/dist/_dts/preview-next/src/client/preview/previewCustomizeRuntimePatch.d.ts +15 -0
  60. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +106 -0
  61. package/dist/_dts/preview-next/src/client/preview/previewUndoDomains.d.ts +34 -0
  62. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +2 -1
  63. package/dist/_dts/preview-next/src/client/preview/useOnboardingConfirmationCheck.d.ts +4 -9
  64. package/dist/_dts/preview-next/src/constants.d.ts +0 -1
  65. package/dist/_dts/preview-next/src/index.d.ts +1 -0
  66. package/dist/_dts/preview-next/src/onboarding-preview-planner.d.ts +89 -0
  67. package/dist/_dts/preview-next/src/route-contract.d.ts +37 -0
  68. package/dist/_dts/sdk/src/public-api/contracts.d.ts +11 -1
  69. package/dist/_dts/sdk/src/rendering/components/Block.d.ts +7 -76
  70. package/dist/_dts/sdk/src/rendering/components/Block.server.d.ts +9 -0
  71. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +78 -0
  72. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +5 -5
  73. package/dist/_dts/sdk/src/rendering/server.d.ts +2 -2
  74. package/dist/_dts/sdk/src/version.d.ts +1 -1
  75. package/dist/_dts/theme-core/src/buttons/constants.d.ts +9 -1
  76. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +16 -11
  77. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +9 -16
  78. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  79. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +11 -0
  80. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +11 -0
  81. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +11 -0
  82. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +14 -0
  83. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +11 -0
  84. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +11 -0
  86. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +268 -0
  87. package/dist/_dts/theme-core/src/buttons/types.d.ts +253 -72
  88. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  89. package/dist/_dts/theme-core/src/index.d.ts +17 -16
  90. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +69 -15
  91. package/dist/_dts/theme-core/src/palette/index.d.ts +1 -0
  92. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +28 -0
  93. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +28 -0
  94. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +17 -0
  95. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +28 -0
  96. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +154 -0
  97. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +28 -0
  98. package/dist/_dts/theme-core/src/responsiveDisplay.d.ts +23 -0
  99. package/dist/_dts/theme-core/src/responsiveMode.d.ts +21 -0
  100. package/dist/_dts/theme-core/src/schema.d.ts +122 -10
  101. package/dist/_dts/theme-core/src/site-styles/compatibility.d.ts +109 -0
  102. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +193 -0
  103. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -0
  104. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorErrors.d.ts +1 -0
  105. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -0
  106. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +43 -2
  107. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +23 -1
  108. package/dist/_dts/ui/src/badge.d.ts +1 -1
  109. package/dist/_dts/ui/src/callout.d.ts +1 -1
  110. package/dist/_dts/ui/src/command-multi-select.d.ts +2 -2
  111. package/dist/cli/index.mjs +1590 -302
  112. package/dist/client/bookings.mjs +321 -144
  113. package/dist/client/client.mjs +4371 -2715
  114. package/dist/client/hooks.mjs +2826 -1675
  115. package/dist/client/rendering/client.mjs +3570 -2262
  116. package/dist/client/rendering/islands.mjs +1948 -756
  117. package/dist/client/rendering.mjs +42015 -40278
  118. package/dist/preview-next/before-render.mjs +5542 -0
  119. package/dist/preview-next/client/runtime.mjs +103364 -99924
  120. package/dist/preview-next/constants.mjs +0 -2
  121. package/dist/preview-next/index.mjs +0 -2
  122. package/dist/preview-next/middleware.mjs +5552 -1
  123. package/dist/server/components.mjs +11234 -9740
  124. package/dist/server/config-validation.mjs +3057 -1906
  125. package/dist/server/config.mjs +3057 -1906
  126. package/dist/server/data.mjs +2826 -1675
  127. package/dist/server/index.mjs +19 -2
  128. package/dist/server/next.mjs +3997 -2507
  129. package/dist/server/page-converter.mjs +2970 -1836
  130. package/dist/server/prebuild.mjs +1 -1
  131. package/dist/server/rendering/server.mjs +5960 -3200
  132. package/dist/server/rendering.mjs +12734 -11162
  133. package/dist/server/routing.mjs +3045 -1743
  134. package/dist/server/server.mjs +2827 -1676
  135. package/dist/server/theme-bridge.mjs +2074 -839
  136. package/dist/server/theme.mjs +1087 -492
  137. package/dist/styles/index.css +343 -299
  138. package/package.json +1 -1
  139. package/dist/_dts/preview-next/src/client/preview/PreviewSiteStyleSwitcher.d.ts +0 -11
  140. package/dist/_dts/preview-next/src/client/preview/PreviewSiteStyleSwitcher.state.d.ts +0 -43
@@ -628,6 +628,13 @@ var init_location = __esm({
628
628
  }
629
629
  });
630
630
 
631
+ // ../core/src/business-address.ts
632
+ var init_business_address = __esm({
633
+ "../core/src/business-address.ts"() {
634
+ "use strict";
635
+ }
636
+ });
637
+
631
638
  // ../core/src/assert-never.ts
632
639
  var init_assert_never = __esm({
633
640
  "../core/src/assert-never.ts"() {
@@ -712,6 +719,7 @@ var init_src = __esm({
712
719
  init_person_records();
713
720
  init_rectification();
714
721
  init_location();
722
+ init_business_address();
715
723
  init_result();
716
724
  init_assert_never();
717
725
  init_try_async();
@@ -2854,6 +2862,23 @@ var init_shared2 = __esm({
2854
2862
  }
2855
2863
  });
2856
2864
 
2865
+ // ../blocks/src/system/runtime/nodes/events/shared/eventCapacity.ts
2866
+ function getEventAvailability(event) {
2867
+ if (event.capacity == null) {
2868
+ return { available: null, isFull: false };
2869
+ }
2870
+ const available = event.availableSpots ?? event.capacity - event.registeredCount;
2871
+ if (available <= 0) {
2872
+ return { available: 0, isFull: true };
2873
+ }
2874
+ return { available, isFull: false };
2875
+ }
2876
+ var init_eventCapacity = __esm({
2877
+ "../blocks/src/system/runtime/nodes/events/shared/eventCapacity.ts"() {
2878
+ "use strict";
2879
+ }
2880
+ });
2881
+
2857
2882
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
2858
2883
  function getContainerClass(layout, columns) {
2859
2884
  if (layout === "compact") {
@@ -3078,7 +3103,7 @@ function formatEventPrice(event) {
3078
3103
  }
3079
3104
  }
3080
3105
  function resolveEventCta(event, buttonText) {
3081
- const isSoldOut = event.capacity !== null && event.availableSpots === 0;
3106
+ const { isFull: isSoldOut } = getEventAvailability(event);
3082
3107
  const defaultButtonText = event.kind === "course_session" ? "View course" : "View event";
3083
3108
  const effectiveButtonText = buttonText ?? defaultButtonText;
3084
3109
  if (isSoldOut) {
@@ -3094,6 +3119,7 @@ var init_utils = __esm({
3094
3119
  "use strict";
3095
3120
  init_src();
3096
3121
  init_shared2();
3122
+ init_eventCapacity();
3097
3123
  COLUMN_CLASSES = {
3098
3124
  "2": "rb-sm-grid-cols-2",
3099
3125
  "3": "rb-sm-grid-cols-2 rb-lg-grid-cols-3",
@@ -4633,6 +4659,7 @@ var init_EventCard = __esm({
4633
4659
  init_media2();
4634
4660
  init_media_server();
4635
4661
  init_EventCardIcons();
4662
+ init_eventCapacity();
4636
4663
  init_utils();
4637
4664
  EventCard = ({
4638
4665
  event,
@@ -4657,7 +4684,7 @@ var init_EventCard = __esm({
4657
4684
  )}`;
4658
4685
  const cta = resolveEventCta(event, buttonText);
4659
4686
  const isSoldOut = cta.hidden;
4660
- const spotsLeft = event.availableSpots;
4687
+ const { available: spotsLeft } = getEventAvailability(event);
4661
4688
  const cardClass = `card-${cardVariant}`;
4662
4689
  const buttonClass = `${buttonVariant} button-${buttonVariant}`;
4663
4690
  const title = event.title;
@@ -8116,6 +8143,978 @@ var init_api = __esm({
8116
8143
  }
8117
8144
  });
8118
8145
 
8146
+ // ../theme-core/src/buttons/types.ts
8147
+ import { z as z21 } from "zod";
8148
+ var VARIANT_ROLES, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, variantRoleSchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsSchema, gradientDirectionSchema, buttonBackgroundSchema, effectApplicationSchema, buttonBorderSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
8149
+ var init_types4 = __esm({
8150
+ "../theme-core/src/buttons/types.ts"() {
8151
+ "use strict";
8152
+ VARIANT_ROLES = [
8153
+ "primary",
8154
+ "secondary",
8155
+ "outline",
8156
+ "ghost",
8157
+ "link",
8158
+ "tertiary",
8159
+ "accent"
8160
+ ];
8161
+ cornerStyleSchema = z21.enum(["square", "rounded", "pill"]);
8162
+ shadowSizeSchema = z21.enum(["none", "low", "medium", "high"]);
8163
+ textTransformSchema = z21.enum(["none", "uppercase", "lowercase", "capitalize"]);
8164
+ fontWeightSchema = z21.union([z21.literal(500), z21.literal(600), z21.literal(700)]);
8165
+ buttonTypographySchema = z21.enum(["body", "heading"]);
8166
+ letterSpacingSchema = z21.enum(["tight", "normal", "loose"]);
8167
+ hoverTransformSchema = z21.enum(["none", "lift", "scale", "press"]);
8168
+ hoverColorSchema = z21.enum(["none", "brighten", "darken", "saturate", "token"]);
8169
+ buttonPaddingPresetSchema = z21.enum(["compact", "default", "spacious"]);
8170
+ gradientStyleSchema = z21.enum(["linear", "radial", "conic"]);
8171
+ gradientSharpnessSchema = z21.enum(["smooth", "medium", "hard"]);
8172
+ prioritySchema = z21.union([z21.literal(1), z21.literal(2), z21.literal(3)]);
8173
+ variantRoleSchema = z21.enum(VARIANT_ROLES);
8174
+ buttonSizeNameSchema = z21.enum(["sm", "md", "lg", "xl"]);
8175
+ PADDING_TOKEN_PATTERN = /^(?:0|\d+(?:\.\d+)?(?:rem|em|px|%))$/;
8176
+ paddingShorthandSchema = z21.string().refine(
8177
+ (value) => {
8178
+ const parts = value.split(/\s+/).filter(Boolean);
8179
+ return parts.length === 2 && parts.every((token) => PADDING_TOKEN_PATTERN.test(token));
8180
+ },
8181
+ {
8182
+ message: 'Padding must be two space-separated CSS length tokens (e.g. "0.5rem 1rem"). Use `0` for zero.'
8183
+ }
8184
+ );
8185
+ buttonSizeConfigSchema = z21.object({
8186
+ padding: paddingShorthandSchema,
8187
+ fontSize: z21.string().optional()
8188
+ });
8189
+ buttonSizesSchema = z21.object({
8190
+ sm: buttonSizeConfigSchema,
8191
+ md: buttonSizeConfigSchema,
8192
+ lg: buttonSizeConfigSchema,
8193
+ xl: buttonSizeConfigSchema.optional()
8194
+ }).transform(({ sm, md, lg, xl }) => ({
8195
+ sm,
8196
+ md,
8197
+ lg,
8198
+ xl: xl ?? lg
8199
+ }));
8200
+ buttonGlobalSettingsSchema = z21.object({
8201
+ cornerStyle: cornerStyleSchema,
8202
+ cornerRadius: z21.number().min(0).max(24).optional(),
8203
+ shadow: shadowSizeSchema,
8204
+ textTransform: textTransformSchema,
8205
+ fontWeight: fontWeightSchema,
8206
+ /**
8207
+ * @deprecated Set per-variant via `variant.border.widthClass` instead.
8208
+ * Schema field is preserved so existing presets parse; the value is unread
8209
+ * by the current generator and will be removed once the legacy
8210
+ * `primitives/content/components/Button.tsx` slot exports are deleted.
8211
+ */
8212
+ borderWidth: z21.union([z21.literal(1), z21.literal(2), z21.literal(3)]),
8213
+ // === Family-level typography ===
8214
+ // Typography source (body or heading) — selects which theme typography pool to inherit
8215
+ typography: buttonTypographySchema.optional(),
8216
+ // Font size for all variants in the family (Tailwind token, e.g. "text-xs", "text-sm")
8217
+ // Sized variants get this as default; fixed variants inherit unless they override.
8218
+ // Size class CSS may still override at run time for sized variants.
8219
+ fontSize: z21.string().optional(),
8220
+ // Letter spacing applied to all variants
8221
+ letterSpacing: letterSpacingSchema.optional(),
8222
+ // Italic style
8223
+ italic: z21.boolean().optional(),
8224
+ // Padding preset (applies to sized variants without a sizes config)
8225
+ paddingPreset: buttonPaddingPresetSchema.optional(),
8226
+ hoverTransform: hoverTransformSchema,
8227
+ hoverColor: hoverColorSchema,
8228
+ // When hoverColor is 'token', this specifies which token to use
8229
+ hoverColorToken: z21.string().optional(),
8230
+ // Gradient settings (if any variant uses gradients)
8231
+ gradientStyle: gradientStyleSchema.optional(),
8232
+ gradientAngle: z21.number().min(0).max(360).optional(),
8233
+ gradientSharpness: gradientSharpnessSchema.optional()
8234
+ });
8235
+ gradientDirectionSchema = z21.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
8236
+ buttonBackgroundSchema = z21.discriminatedUnion("type", [
8237
+ z21.object({ type: z21.literal("solid"), colorToken: z21.string() }),
8238
+ z21.object({
8239
+ type: z21.literal("gradient"),
8240
+ stops: z21.array(z21.string()).min(2),
8241
+ direction: gradientDirectionSchema
8242
+ }),
8243
+ z21.object({ type: z21.literal("transparent") })
8244
+ ]);
8245
+ effectApplicationSchema = z21.object({
8246
+ effectId: z21.string(),
8247
+ options: z21.record(z21.string(), z21.any()).optional()
8248
+ });
8249
+ buttonBorderSchema = z21.object({
8250
+ widthClass: z21.string(),
8251
+ colorToken: z21.string()
8252
+ });
8253
+ variantShadowSchema = z21.object({
8254
+ elevation: z21.enum(["none", "low", "medium", "high"]),
8255
+ softness: z21.enum(["crisp", "soft", "hard"]).nullable(),
8256
+ position: z21.enum(["bottom", "bottom-right"]).default("bottom")
8257
+ });
8258
+ variantEffectsSchema = z21.object({
8259
+ base: z21.array(effectApplicationSchema).optional(),
8260
+ hover: z21.array(effectApplicationSchema).optional(),
8261
+ active: z21.array(effectApplicationSchema).optional(),
8262
+ focus: z21.array(effectApplicationSchema).optional()
8263
+ });
8264
+ variantSizeOverridesSchema = z21.object({
8265
+ sm: buttonSizeConfigSchema.optional(),
8266
+ md: buttonSizeConfigSchema.optional(),
8267
+ lg: buttonSizeConfigSchema.optional(),
8268
+ xl: buttonSizeConfigSchema.optional()
8269
+ });
8270
+ buttonVariantSchema = z21.object({
8271
+ id: z21.string(),
8272
+ name: z21.string().min(1).max(20),
8273
+ enabled: z21.boolean(),
8274
+ priority: prioritySchema,
8275
+ // Base appearance (token-based)
8276
+ background: buttonBackgroundSchema,
8277
+ textColorToken: z21.string(),
8278
+ /** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
8279
+ borderRadius: z21.string().optional(),
8280
+ // Optional shadow override (uses theme.shadow if not specified)
8281
+ shadow: variantShadowSchema.optional(),
8282
+ // Border (optional)
8283
+ border: buttonBorderSchema.optional(),
8284
+ // Hover background token (per-variant override, takes precedence over global hoverColorToken)
8285
+ hoverBackgroundToken: z21.string().optional(),
8286
+ // Effect composition
8287
+ effects: variantEffectsSchema.optional(),
8288
+ // Per-variant size overrides — see VariantSizeOverrides
8289
+ sizes: variantSizeOverridesSchema.optional()
8290
+ });
8291
+ buttonSystemSchema = z21.object({
8292
+ global: buttonGlobalSettingsSchema,
8293
+ variants: z21.array(buttonVariantSchema).min(1).max(6),
8294
+ sizes: buttonSizesSchema.optional()
8295
+ });
8296
+ }
8297
+ });
8298
+
8299
+ // ../theme-core/src/tokens/resolver.ts
8300
+ var init_resolver = __esm({
8301
+ "../theme-core/src/tokens/resolver.ts"() {
8302
+ "use strict";
8303
+ }
8304
+ });
8305
+
8306
+ // ../theme-core/src/buttons/effects/presets/background.ts
8307
+ var init_background = __esm({
8308
+ "../theme-core/src/buttons/effects/presets/background.ts"() {
8309
+ "use strict";
8310
+ }
8311
+ });
8312
+
8313
+ // ../theme-core/src/buttons/effects/cssUtils.ts
8314
+ var init_cssUtils = __esm({
8315
+ "../theme-core/src/buttons/effects/cssUtils.ts"() {
8316
+ "use strict";
8317
+ }
8318
+ });
8319
+
8320
+ // ../theme-core/src/buttons/effects/presets/shadow.ts
8321
+ var init_shadow = __esm({
8322
+ "../theme-core/src/buttons/effects/presets/shadow.ts"() {
8323
+ "use strict";
8324
+ init_cssUtils();
8325
+ }
8326
+ });
8327
+
8328
+ // ../theme-core/src/buttons/effects/presets/transform.ts
8329
+ var init_transform = __esm({
8330
+ "../theme-core/src/buttons/effects/presets/transform.ts"() {
8331
+ "use strict";
8332
+ init_cssUtils();
8333
+ }
8334
+ });
8335
+
8336
+ // ../theme-core/src/buttons/effects/presets/overlay.ts
8337
+ var init_overlay = __esm({
8338
+ "../theme-core/src/buttons/effects/presets/overlay.ts"() {
8339
+ "use strict";
8340
+ }
8341
+ });
8342
+
8343
+ // ../theme-core/src/buttons/effects/presets/text.ts
8344
+ var init_text = __esm({
8345
+ "../theme-core/src/buttons/effects/presets/text.ts"() {
8346
+ "use strict";
8347
+ }
8348
+ });
8349
+
8350
+ // ../theme-core/src/buttons/effects/presets/border.ts
8351
+ var init_border = __esm({
8352
+ "../theme-core/src/buttons/effects/presets/border.ts"() {
8353
+ "use strict";
8354
+ }
8355
+ });
8356
+
8357
+ // ../theme-core/src/buttons/effects/presets/animation.ts
8358
+ var init_animation = __esm({
8359
+ "../theme-core/src/buttons/effects/presets/animation.ts"() {
8360
+ "use strict";
8361
+ }
8362
+ });
8363
+
8364
+ // ../theme-core/src/interactive/effects/nav-underline.ts
8365
+ var init_nav_underline = __esm({
8366
+ "../theme-core/src/interactive/effects/nav-underline.ts"() {
8367
+ "use strict";
8368
+ }
8369
+ });
8370
+
8371
+ // ../theme-core/src/interactive/effects/nav-frosted.ts
8372
+ var init_nav_frosted = __esm({
8373
+ "../theme-core/src/interactive/effects/nav-frosted.ts"() {
8374
+ "use strict";
8375
+ }
8376
+ });
8377
+
8378
+ // ../theme-core/src/interactive/effects/index.ts
8379
+ var init_effects = __esm({
8380
+ "../theme-core/src/interactive/effects/index.ts"() {
8381
+ "use strict";
8382
+ init_nav_underline();
8383
+ init_nav_frosted();
8384
+ }
8385
+ });
8386
+
8387
+ // ../theme-core/src/buttons/effects/registry.ts
8388
+ var init_registry = __esm({
8389
+ "../theme-core/src/buttons/effects/registry.ts"() {
8390
+ "use strict";
8391
+ init_background();
8392
+ init_shadow();
8393
+ init_transform();
8394
+ init_overlay();
8395
+ init_text();
8396
+ init_border();
8397
+ init_animation();
8398
+ init_effects();
8399
+ }
8400
+ });
8401
+
8402
+ // ../theme-core/src/interactive/generateEffectsCSS.ts
8403
+ var init_generateEffectsCSS = __esm({
8404
+ "../theme-core/src/interactive/generateEffectsCSS.ts"() {
8405
+ "use strict";
8406
+ init_registry();
8407
+ }
8408
+ });
8409
+
8410
+ // ../theme-core/src/buttons/constants.ts
8411
+ var init_constants = __esm({
8412
+ "../theme-core/src/buttons/constants.ts"() {
8413
+ "use strict";
8414
+ }
8415
+ });
8416
+
8417
+ // ../theme-core/src/buttons/utils/contrast.ts
8418
+ var init_contrast2 = __esm({
8419
+ "../theme-core/src/buttons/utils/contrast.ts"() {
8420
+ "use strict";
8421
+ }
8422
+ });
8423
+
8424
+ // ../theme-core/src/buttons/generateDefaultButtonSystem.ts
8425
+ var init_generateDefaultButtonSystem = __esm({
8426
+ "../theme-core/src/buttons/generateDefaultButtonSystem.ts"() {
8427
+ "use strict";
8428
+ init_contrast2();
8429
+ }
8430
+ });
8431
+
8432
+ // ../theme-core/src/buttons/generateButtonCss.ts
8433
+ var BUTTON_SIZE_NAMES;
8434
+ var init_generateButtonCss = __esm({
8435
+ "../theme-core/src/buttons/generateButtonCss.ts"() {
8436
+ "use strict";
8437
+ init_types4();
8438
+ init_resolver();
8439
+ init_generateEffectsCSS();
8440
+ init_constants();
8441
+ init_generateDefaultButtonSystem();
8442
+ BUTTON_SIZE_NAMES = buttonSizeNameSchema.options;
8443
+ }
8444
+ });
8445
+
8446
+ // ../theme-core/src/buttons/presets.ts
8447
+ var init_presets = __esm({
8448
+ "../theme-core/src/buttons/presets.ts"() {
8449
+ "use strict";
8450
+ }
8451
+ });
8452
+
8453
+ // ../theme-core/src/site-styles/compatibility.ts
8454
+ import { z as z22 } from "zod";
8455
+ var STYLE_AXIS_VALUES, styleTagsSchema;
8456
+ var init_compatibility = __esm({
8457
+ "../theme-core/src/site-styles/compatibility.ts"() {
8458
+ "use strict";
8459
+ STYLE_AXIS_VALUES = {
8460
+ tone: ["minimal", "classic", "bold"],
8461
+ energy: ["calm", "vibrant"],
8462
+ motion: ["subtle", "standard", "expressive"],
8463
+ era: ["editorial", "modern", "organic", "technical", "retro"]
8464
+ };
8465
+ styleTagsSchema = z22.object({
8466
+ tone: z22.enum(STYLE_AXIS_VALUES.tone).optional(),
8467
+ energy: z22.enum(STYLE_AXIS_VALUES.energy).optional(),
8468
+ motion: z22.enum(STYLE_AXIS_VALUES.motion).optional(),
8469
+ era: z22.enum(STYLE_AXIS_VALUES.era).optional()
8470
+ });
8471
+ }
8472
+ });
8473
+
8474
+ // ../theme-core/src/buttons/personalities/types.ts
8475
+ import { z as z23 } from "zod";
8476
+ function asButtonPersonalityId(value) {
8477
+ if (value.length === 0) {
8478
+ throw new Error("ButtonPersonalityId must be a non-empty string");
8479
+ }
8480
+ return value;
8481
+ }
8482
+ function defineButtonPersonality(input) {
8483
+ return {
8484
+ id: asButtonPersonalityId(input.id),
8485
+ name: input.name,
8486
+ description: input.description,
8487
+ tags: input.tags,
8488
+ buttonSystem: input.buttonSystem
8489
+ };
8490
+ }
8491
+ var buttonPersonalityIdSchema, buttonPersonalitySchema;
8492
+ var init_types5 = __esm({
8493
+ "../theme-core/src/buttons/personalities/types.ts"() {
8494
+ "use strict";
8495
+ init_types4();
8496
+ init_compatibility();
8497
+ buttonPersonalityIdSchema = z23.string().min(1).transform((value) => asButtonPersonalityId(value));
8498
+ buttonPersonalitySchema = z23.object({
8499
+ id: buttonPersonalityIdSchema,
8500
+ name: z23.string().min(1),
8501
+ description: z23.string().min(1),
8502
+ tags: styleTagsSchema,
8503
+ buttonSystem: buttonSystemSchema
8504
+ });
8505
+ }
8506
+ });
8507
+
8508
+ // ../theme-core/src/buttons/personalities/brushed-wash.ts
8509
+ var brushedWash;
8510
+ var init_brushed_wash = __esm({
8511
+ "../theme-core/src/buttons/personalities/brushed-wash.ts"() {
8512
+ "use strict";
8513
+ init_types5();
8514
+ brushedWash = defineButtonPersonality({
8515
+ id: "brushed-wash",
8516
+ name: "Brushed Wash",
8517
+ description: "Watercolour-gradient buttons with soft shadows and generous padding.",
8518
+ tags: { tone: "classic", energy: "vibrant", motion: "standard", era: "organic" },
8519
+ buttonSystem: {
8520
+ global: {
8521
+ cornerStyle: "rounded",
8522
+ shadow: "low",
8523
+ textTransform: "none",
8524
+ fontWeight: 500,
8525
+ borderWidth: 1,
8526
+ hoverTransform: "none",
8527
+ hoverColor: "none"
8528
+ },
8529
+ sizes: {
8530
+ sm: { padding: "0.75rem 2rem", fontSize: "text-sm" },
8531
+ md: { padding: "1rem 2.5rem" },
8532
+ lg: { padding: "1.25rem 3rem", fontSize: "text-lg" },
8533
+ xl: { padding: "1.625rem 3.75rem", fontSize: "text-xl" }
8534
+ },
8535
+ variants: [
8536
+ {
8537
+ id: "primary",
8538
+ name: "Primary",
8539
+ enabled: true,
8540
+ priority: 1,
8541
+ background: {
8542
+ type: "gradient",
8543
+ stops: ["primary", "accent"],
8544
+ direction: "to-r"
8545
+ },
8546
+ textColorToken: "primaryForeground",
8547
+ borderRadius: "rounded-lg",
8548
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8549
+ effects: {
8550
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
8551
+ }
8552
+ },
8553
+ {
8554
+ id: "secondary",
8555
+ name: "Secondary",
8556
+ enabled: true,
8557
+ priority: 2,
8558
+ background: {
8559
+ type: "gradient",
8560
+ stops: ["secondary", "accent"],
8561
+ direction: "to-br"
8562
+ },
8563
+ textColorToken: "primaryForeground",
8564
+ borderRadius: "rounded-lg",
8565
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
8566
+ effects: {
8567
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -15 } }]
8568
+ }
8569
+ },
8570
+ {
8571
+ id: "outline",
8572
+ name: "Outline",
8573
+ enabled: true,
8574
+ priority: 3,
8575
+ background: { type: "transparent" },
8576
+ textColorToken: "primary",
8577
+ borderRadius: "rounded-lg",
8578
+ border: { widthClass: "border", colorToken: "primary" },
8579
+ effects: {
8580
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8581
+ }
8582
+ },
8583
+ {
8584
+ id: "ghost",
8585
+ name: "Ghost",
8586
+ enabled: true,
8587
+ priority: 3,
8588
+ background: { type: "transparent" },
8589
+ textColorToken: "text",
8590
+ borderRadius: "rounded-lg",
8591
+ effects: {
8592
+ hover: [
8593
+ { effectId: "background-on-hover", options: { colorToken: "surface" } }
8594
+ ]
8595
+ }
8596
+ }
8597
+ ]
8598
+ }
8599
+ });
8600
+ }
8601
+ });
8602
+
8603
+ // ../theme-core/src/buttons/personalities/confident-chip.ts
8604
+ var confidentChip;
8605
+ var init_confident_chip = __esm({
8606
+ "../theme-core/src/buttons/personalities/confident-chip.ts"() {
8607
+ "use strict";
8608
+ init_types5();
8609
+ confidentChip = defineButtonPersonality({
8610
+ id: "confident-chip",
8611
+ name: "Confident Chip",
8612
+ description: "Mid-radius solid buttons with a crisp hover.",
8613
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "modern" },
8614
+ buttonSystem: {
8615
+ global: {
8616
+ cornerStyle: "rounded",
8617
+ shadow: "medium",
8618
+ textTransform: "none",
8619
+ fontWeight: 600,
8620
+ borderWidth: 1,
8621
+ hoverTransform: "none",
8622
+ hoverColor: "none"
8623
+ },
8624
+ variants: [
8625
+ {
8626
+ id: "primary",
8627
+ name: "Primary",
8628
+ enabled: true,
8629
+ priority: 1,
8630
+ background: { type: "solid", colorToken: "primary" },
8631
+ textColorToken: "primaryForeground",
8632
+ borderRadius: "rounded-md",
8633
+ shadow: { elevation: "medium", softness: "soft", position: "bottom" },
8634
+ effects: {
8635
+ hover: [{ effectId: "darken-background", options: { amount: 60 } }],
8636
+ active: [{ effectId: "scale-down", options: { scale: "0.97" } }]
8637
+ }
8638
+ },
8639
+ {
8640
+ id: "secondary",
8641
+ name: "Secondary",
8642
+ enabled: true,
8643
+ priority: 2,
8644
+ background: { type: "solid", colorToken: "surface" },
8645
+ textColorToken: "text",
8646
+ borderRadius: "rounded-md",
8647
+ border: { widthClass: "border", colorToken: "border" },
8648
+ effects: {
8649
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "background" } }]
8650
+ }
8651
+ },
8652
+ {
8653
+ id: "outline",
8654
+ name: "Outline",
8655
+ enabled: true,
8656
+ priority: 3,
8657
+ background: { type: "transparent" },
8658
+ textColorToken: "primary",
8659
+ borderRadius: "rounded-md",
8660
+ border: { widthClass: "border", colorToken: "primary" },
8661
+ effects: {
8662
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8663
+ }
8664
+ },
8665
+ {
8666
+ id: "ghost",
8667
+ name: "Ghost",
8668
+ enabled: true,
8669
+ priority: 3,
8670
+ background: { type: "transparent" },
8671
+ textColorToken: "primary",
8672
+ borderRadius: "rounded-md",
8673
+ effects: {
8674
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8675
+ }
8676
+ }
8677
+ ]
8678
+ }
8679
+ });
8680
+ }
8681
+ });
8682
+
8683
+ // ../theme-core/src/buttons/personalities/editorial-link.ts
8684
+ var editorialLink;
8685
+ var init_editorial_link = __esm({
8686
+ "../theme-core/src/buttons/personalities/editorial-link.ts"() {
8687
+ "use strict";
8688
+ init_types5();
8689
+ editorialLink = defineButtonPersonality({
8690
+ id: "editorial-link",
8691
+ name: "Editorial Link",
8692
+ description: "Link-style with a growing underline. Refined, typographic.",
8693
+ tags: { tone: "minimal", energy: "calm", motion: "subtle", era: "editorial" },
8694
+ buttonSystem: {
8695
+ global: {
8696
+ cornerStyle: "square",
8697
+ shadow: "none",
8698
+ textTransform: "none",
8699
+ fontWeight: 500,
8700
+ borderWidth: 1,
8701
+ hoverTransform: "none",
8702
+ hoverColor: "none"
8703
+ },
8704
+ variants: [
8705
+ {
8706
+ id: "primary",
8707
+ name: "Primary",
8708
+ enabled: true,
8709
+ priority: 1,
8710
+ background: { type: "transparent" },
8711
+ textColorToken: "text",
8712
+ borderRadius: "rounded-none",
8713
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8714
+ sizes: {
8715
+ sm: { padding: "0.25rem 0" },
8716
+ md: { padding: "0.5rem 0" },
8717
+ lg: { padding: "0.625rem 0" },
8718
+ xl: { padding: "0.75rem 0" }
8719
+ },
8720
+ effects: {
8721
+ base: [
8722
+ { effectId: "border-bottom-grow", options: { height: 2, colorToken: "text", origin: "left" } }
8723
+ ]
8724
+ }
8725
+ },
8726
+ {
8727
+ id: "secondary",
8728
+ name: "Secondary",
8729
+ enabled: true,
8730
+ priority: 2,
8731
+ background: { type: "transparent" },
8732
+ textColorToken: "mutedText",
8733
+ borderRadius: "rounded-none",
8734
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8735
+ sizes: {
8736
+ sm: { padding: "0.25rem 0" },
8737
+ md: { padding: "0.5rem 0" },
8738
+ lg: { padding: "0.625rem 0" },
8739
+ xl: { padding: "0.75rem 0" }
8740
+ },
8741
+ effects: {
8742
+ base: [
8743
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "mutedText", origin: "left" } }
8744
+ ]
8745
+ }
8746
+ },
8747
+ {
8748
+ id: "outline",
8749
+ name: "Outline",
8750
+ enabled: true,
8751
+ priority: 3,
8752
+ background: { type: "transparent" },
8753
+ textColorToken: "accent",
8754
+ borderRadius: "rounded-none",
8755
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8756
+ sizes: {
8757
+ sm: { padding: "0.25rem 0" },
8758
+ md: { padding: "0.5rem 0" },
8759
+ lg: { padding: "0.625rem 0" },
8760
+ xl: { padding: "0.75rem 0" }
8761
+ },
8762
+ effects: {
8763
+ base: [
8764
+ { effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }
8765
+ ]
8766
+ }
8767
+ },
8768
+ {
8769
+ id: "ghost",
8770
+ name: "Ghost",
8771
+ enabled: true,
8772
+ priority: 3,
8773
+ background: { type: "transparent" },
8774
+ textColorToken: "mutedText",
8775
+ borderRadius: "rounded-none",
8776
+ shadow: { elevation: "none", softness: null, position: "bottom" },
8777
+ sizes: {
8778
+ sm: { padding: "0.25rem 0" },
8779
+ md: { padding: "0.5rem 0" },
8780
+ lg: { padding: "0.625rem 0" },
8781
+ xl: { padding: "0.75rem 0" }
8782
+ },
8783
+ effects: {
8784
+ hover: [{ effectId: "opacity-reduce", options: { reduction: -20 } }]
8785
+ }
8786
+ }
8787
+ ]
8788
+ }
8789
+ });
8790
+ }
8791
+ });
8792
+
8793
+ // ../theme-core/src/buttons/personalities/ink-stamp.ts
8794
+ var inkStamp;
8795
+ var init_ink_stamp = __esm({
8796
+ "../theme-core/src/buttons/personalities/ink-stamp.ts"() {
8797
+ "use strict";
8798
+ init_types5();
8799
+ inkStamp = defineButtonPersonality({
8800
+ id: "ink-stamp",
8801
+ name: "Ink Stamp",
8802
+ description: "Hand-stamped block-print buttons with a slight lift on hover.",
8803
+ tags: { tone: "bold", energy: "vibrant", motion: "standard", era: "organic" },
8804
+ buttonSystem: {
8805
+ global: {
8806
+ cornerStyle: "rounded",
8807
+ shadow: "none",
8808
+ textTransform: "uppercase",
8809
+ fontWeight: 600,
8810
+ borderWidth: 1,
8811
+ hoverTransform: "none",
8812
+ hoverColor: "none",
8813
+ letterSpacing: "loose"
8814
+ },
8815
+ sizes: {
8816
+ sm: { padding: "0.5rem 1.25rem", fontSize: "text-xs" },
8817
+ md: { padding: "0.75rem 1.75rem", fontSize: "text-sm" },
8818
+ lg: { padding: "0.875rem 2.25rem", fontSize: "text-base" },
8819
+ xl: { padding: "1.125rem 2.75rem", fontSize: "text-lg" }
8820
+ },
8821
+ variants: [
8822
+ {
8823
+ id: "primary",
8824
+ name: "Primary",
8825
+ enabled: true,
8826
+ priority: 1,
8827
+ background: { type: "solid", colorToken: "primary" },
8828
+ textColorToken: "primaryForeground",
8829
+ borderRadius: "rounded-md",
8830
+ effects: {
8831
+ hover: [
8832
+ { effectId: "drop-shadow", options: { intensity: "medium" } },
8833
+ { effectId: "scale-up", options: { scale: "1.02" } }
8834
+ ],
8835
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
8836
+ }
8837
+ },
8838
+ {
8839
+ id: "secondary",
8840
+ name: "Secondary",
8841
+ enabled: true,
8842
+ priority: 2,
8843
+ background: { type: "transparent" },
8844
+ textColorToken: "primary",
8845
+ borderRadius: "rounded-md",
8846
+ border: { widthClass: "border-2", colorToken: "primary" },
8847
+ effects: {
8848
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8849
+ }
8850
+ },
8851
+ {
8852
+ id: "outline",
8853
+ name: "Outline",
8854
+ enabled: true,
8855
+ priority: 3,
8856
+ background: { type: "transparent" },
8857
+ textColorToken: "text",
8858
+ borderRadius: "rounded-md",
8859
+ border: { widthClass: "border-2", colorToken: "border" },
8860
+ effects: {
8861
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8862
+ }
8863
+ },
8864
+ {
8865
+ id: "ghost",
8866
+ name: "Ghost",
8867
+ enabled: true,
8868
+ priority: 3,
8869
+ background: { type: "transparent" },
8870
+ textColorToken: "accent",
8871
+ borderRadius: "rounded-none",
8872
+ sizes: {
8873
+ sm: { padding: "0.375rem 0", fontSize: "text-xs" },
8874
+ md: { padding: "0.5rem 0", fontSize: "text-sm" },
8875
+ lg: { padding: "0.625rem 0", fontSize: "text-base" },
8876
+ xl: { padding: "0.75rem 0", fontSize: "text-lg" }
8877
+ },
8878
+ effects: {
8879
+ base: [{ effectId: "border-bottom-grow", options: { height: 1, colorToken: "accent", origin: "left" } }]
8880
+ }
8881
+ }
8882
+ ]
8883
+ }
8884
+ });
8885
+ }
8886
+ });
8887
+
8888
+ // ../theme-core/src/buttons/personalities/pebble.ts
8889
+ var pebble;
8890
+ var init_pebble = __esm({
8891
+ "../theme-core/src/buttons/personalities/pebble.ts"() {
8892
+ "use strict";
8893
+ init_types5();
8894
+ pebble = defineButtonPersonality({
8895
+ id: "pebble",
8896
+ name: "Pebble",
8897
+ description: "Generous pill buttons with a soft hover lift.",
8898
+ tags: { tone: "classic", energy: "calm", motion: "standard", era: "organic" },
8899
+ buttonSystem: {
8900
+ global: {
8901
+ cornerStyle: "pill",
8902
+ shadow: "none",
8903
+ textTransform: "none",
8904
+ fontWeight: 500,
8905
+ borderWidth: 2,
8906
+ hoverTransform: "none",
8907
+ hoverColor: "none"
8908
+ },
8909
+ sizes: {
8910
+ sm: { padding: "0.625rem 1.75rem", fontSize: "text-sm" },
8911
+ md: { padding: "0.875rem 2.25rem" },
8912
+ lg: { padding: "1.125rem 2.75rem", fontSize: "text-lg" },
8913
+ xl: { padding: "1.5rem 3.5rem", fontSize: "text-xl" }
8914
+ },
8915
+ variants: [
8916
+ {
8917
+ id: "primary",
8918
+ name: "Primary",
8919
+ enabled: true,
8920
+ priority: 1,
8921
+ background: { type: "solid", colorToken: "primary" },
8922
+ textColorToken: "primaryForeground",
8923
+ borderRadius: "rounded-full",
8924
+ effects: {
8925
+ hover: [
8926
+ { effectId: "scale-up", options: { scale: "1.03" } },
8927
+ { effectId: "drop-shadow", options: { intensity: "medium" } }
8928
+ ]
8929
+ }
8930
+ },
8931
+ {
8932
+ id: "secondary",
8933
+ name: "Secondary",
8934
+ enabled: true,
8935
+ priority: 2,
8936
+ background: { type: "transparent" },
8937
+ textColorToken: "primary",
8938
+ borderRadius: "rounded-full",
8939
+ border: { widthClass: "border-2", colorToken: "accent" },
8940
+ effects: {
8941
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "accent" } }]
8942
+ }
8943
+ },
8944
+ {
8945
+ id: "outline",
8946
+ name: "Outline",
8947
+ enabled: true,
8948
+ priority: 3,
8949
+ background: { type: "transparent" },
8950
+ textColorToken: "text",
8951
+ borderRadius: "rounded-full",
8952
+ border: { widthClass: "border", colorToken: "border" },
8953
+ effects: {
8954
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
8955
+ }
8956
+ },
8957
+ {
8958
+ id: "ghost",
8959
+ name: "Ghost",
8960
+ enabled: true,
8961
+ priority: 3,
8962
+ background: { type: "transparent" },
8963
+ textColorToken: "primary",
8964
+ borderRadius: "rounded-full",
8965
+ sizes: {
8966
+ sm: { padding: "0.375rem 0.875rem", fontSize: "text-sm" },
8967
+ md: { padding: "0.5rem 1rem" },
8968
+ lg: { padding: "0.625rem 1.25rem", fontSize: "text-lg" },
8969
+ xl: { padding: "0.75rem 1.5rem", fontSize: "text-xl" }
8970
+ },
8971
+ effects: {
8972
+ hover: [{ effectId: "opacity-reduce", options: { reduction: 30 } }]
8973
+ }
8974
+ }
8975
+ ]
8976
+ }
8977
+ });
8978
+ }
8979
+ });
8980
+
8981
+ // ../theme-core/src/buttons/personalities/soft-pill.ts
8982
+ var softPill;
8983
+ var init_soft_pill = __esm({
8984
+ "../theme-core/src/buttons/personalities/soft-pill.ts"() {
8985
+ "use strict";
8986
+ init_types5();
8987
+ softPill = defineButtonPersonality({
8988
+ id: "soft-pill",
8989
+ name: "Soft Pill",
8990
+ description: "Rounded pills with a gentle lift on hover. Quietly modern.",
8991
+ tags: { tone: "classic", energy: "calm", motion: "subtle", era: "organic" },
8992
+ buttonSystem: {
8993
+ global: {
8994
+ cornerStyle: "pill",
8995
+ shadow: "low",
8996
+ textTransform: "none",
8997
+ fontWeight: 500,
8998
+ borderWidth: 2,
8999
+ hoverTransform: "lift",
9000
+ hoverColor: "none"
9001
+ },
9002
+ variants: [
9003
+ {
9004
+ id: "primary",
9005
+ name: "Primary",
9006
+ enabled: true,
9007
+ priority: 1,
9008
+ background: { type: "solid", colorToken: "primary" },
9009
+ textColorToken: "primaryForeground",
9010
+ borderRadius: "rounded-full",
9011
+ shadow: { elevation: "low", softness: "soft", position: "bottom" },
9012
+ effects: {
9013
+ hover: [{ effectId: "lift", options: { translateY: "-1px" } }],
9014
+ active: [{ effectId: "scale-down", options: { scale: "0.98" } }]
9015
+ }
9016
+ },
9017
+ {
9018
+ id: "secondary",
9019
+ name: "Secondary",
9020
+ enabled: true,
9021
+ priority: 2,
9022
+ background: { type: "transparent" },
9023
+ textColorToken: "primary",
9024
+ borderRadius: "rounded-full",
9025
+ border: { widthClass: "border-2", colorToken: "primary" },
9026
+ effects: {
9027
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9028
+ }
9029
+ },
9030
+ {
9031
+ id: "outline",
9032
+ name: "Outline",
9033
+ enabled: true,
9034
+ priority: 3,
9035
+ background: { type: "transparent" },
9036
+ textColorToken: "text",
9037
+ borderRadius: "rounded-full",
9038
+ border: { widthClass: "border", colorToken: "border" },
9039
+ effects: {
9040
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9041
+ }
9042
+ },
9043
+ {
9044
+ id: "ghost",
9045
+ name: "Ghost",
9046
+ enabled: true,
9047
+ priority: 3,
9048
+ background: { type: "transparent" },
9049
+ textColorToken: "text",
9050
+ borderRadius: "rounded-full",
9051
+ effects: {
9052
+ hover: [{ effectId: "background-on-hover", options: { colorToken: "surface" } }]
9053
+ }
9054
+ }
9055
+ ]
9056
+ }
9057
+ });
9058
+ }
9059
+ });
9060
+
9061
+ // ../theme-core/src/buttons/personalities/index.ts
9062
+ var buttonPersonalities, personalitiesById;
9063
+ var init_personalities = __esm({
9064
+ "../theme-core/src/buttons/personalities/index.ts"() {
9065
+ "use strict";
9066
+ init_brushed_wash();
9067
+ init_confident_chip();
9068
+ init_editorial_link();
9069
+ init_ink_stamp();
9070
+ init_pebble();
9071
+ init_soft_pill();
9072
+ init_types5();
9073
+ buttonPersonalities = [
9074
+ softPill,
9075
+ confidentChip,
9076
+ editorialLink,
9077
+ pebble,
9078
+ inkStamp,
9079
+ brushedWash
9080
+ ];
9081
+ personalitiesById = new Map(
9082
+ buttonPersonalities.map((p) => [p.id, p])
9083
+ );
9084
+ }
9085
+ });
9086
+
9087
+ // ../theme-core/src/buttons/effects/types.ts
9088
+ var init_types6 = __esm({
9089
+ "../theme-core/src/buttons/effects/types.ts"() {
9090
+ "use strict";
9091
+ }
9092
+ });
9093
+
9094
+ // ../theme-core/src/buttons/core.ts
9095
+ var init_core = __esm({
9096
+ "../theme-core/src/buttons/core.ts"() {
9097
+ "use strict";
9098
+ }
9099
+ });
9100
+
9101
+ // ../theme-core/src/buttons/index.ts
9102
+ var init_buttons = __esm({
9103
+ "../theme-core/src/buttons/index.ts"() {
9104
+ "use strict";
9105
+ init_types4();
9106
+ init_generateButtonCss();
9107
+ init_generateDefaultButtonSystem();
9108
+ init_constants();
9109
+ init_presets();
9110
+ init_personalities();
9111
+ init_types6();
9112
+ init_registry();
9113
+ init_transform();
9114
+ init_core();
9115
+ }
9116
+ });
9117
+
8119
9118
  // ../blocks/src/primitives/content/utils/sanitizeHref.ts
8120
9119
  function normalizeInput(value) {
8121
9120
  return value.replace(CONTROL_CHARS_PATTERN, "").trim();
@@ -8656,12 +9655,12 @@ var init_carousel_shared = __esm({
8656
9655
  });
8657
9656
 
8658
9657
  // ../theme-core/src/accordions/types.ts
8659
- import { z as z21 } from "zod";
9658
+ import { z as z24 } from "zod";
8660
9659
  var accordionIconSchema, accordionSystemSchema;
8661
- var init_types4 = __esm({
9660
+ var init_types7 = __esm({
8662
9661
  "../theme-core/src/accordions/types.ts"() {
8663
9662
  "use strict";
8664
- accordionIconSchema = z21.enum([
9663
+ accordionIconSchema = z24.enum([
8665
9664
  "plus-minus",
8666
9665
  // + becomes - (swap or rotate 90°)
8667
9666
  "chevron",
@@ -8673,49 +9672,49 @@ var init_types4 = __esm({
8673
9672
  "circle-plus-minus"
8674
9673
  // ⊕ becomes ⊖ (swap with fade)
8675
9674
  ]);
8676
- accordionSystemSchema = z21.object({
9675
+ accordionSystemSchema = z24.object({
8677
9676
  // Visual styling (solid color only - gradients can be added later if needed)
8678
- background: z21.object({
8679
- type: z21.literal("solid"),
8680
- colorToken: z21.string()
9677
+ background: z24.object({
9678
+ type: z24.literal("solid"),
9679
+ colorToken: z24.string()
8681
9680
  }),
8682
9681
  // Spacing (padding inside items)
8683
- spacing: z21.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
9682
+ spacing: z24.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]),
8684
9683
  // Border radius (null = inherit from theme.corners)
8685
- corners: z21.enum(["square", "soft", "rounded", "pill"]).nullable(),
9684
+ corners: z24.enum(["square", "soft", "rounded", "pill"]).nullable(),
8686
9685
  // Border styling (null = inherit from theme.border)
8687
- border: z21.object({
8688
- widthClass: z21.string(),
9686
+ border: z24.object({
9687
+ widthClass: z24.string(),
8689
9688
  // e.g., 'border', 'border-2', 'border-0'
8690
- colorToken: z21.string()
9689
+ colorToken: z24.string()
8691
9690
  }).nullable(),
8692
9691
  // Shadow (null = inherit from theme.shadow)
8693
- shadow: z21.object({
8694
- elevation: z21.enum(["none", "low", "medium", "high"]),
8695
- softness: z21.enum(["soft", "crisp", "hard"]).nullable(),
8696
- position: z21.enum(["bottom", "bottom-right"])
9692
+ shadow: z24.object({
9693
+ elevation: z24.enum(["none", "low", "medium", "high"]),
9694
+ softness: z24.enum(["soft", "crisp", "hard"]).nullable(),
9695
+ position: z24.enum(["bottom", "bottom-right"])
8697
9696
  }).nullable(),
8698
9697
  // Icon style and animation
8699
- icon: z21.object({
9698
+ icon: z24.object({
8700
9699
  style: accordionIconSchema,
8701
- position: z21.enum(["left", "right"]),
8702
- size: z21.enum(["sm", "md", "lg"])
9700
+ position: z24.enum(["left", "right"]),
9701
+ size: z24.enum(["sm", "md", "lg"])
8703
9702
  }),
8704
9703
  // Trigger (question) styling
8705
- trigger: z21.object({
8706
- textColorToken: z21.string(),
8707
- fontWeight: z21.enum(["regular", "medium", "semibold", "bold"]).nullable()
9704
+ trigger: z24.object({
9705
+ textColorToken: z24.string(),
9706
+ fontWeight: z24.enum(["regular", "medium", "semibold", "bold"]).nullable()
8708
9707
  // null = inherit from theme
8709
9708
  }),
8710
9709
  // Hover state styling
8711
- hover: z21.object({
8712
- backgroundColorToken: z21.string().optional(),
8713
- textColorToken: z21.string().optional(),
8714
- borderColorToken: z21.string().optional()
9710
+ hover: z24.object({
9711
+ backgroundColorToken: z24.string().optional(),
9712
+ textColorToken: z24.string().optional(),
9713
+ borderColorToken: z24.string().optional()
8715
9714
  }),
8716
9715
  // Content (answer) styling
8717
- content: z21.object({
8718
- textColorToken: z21.string()
9716
+ content: z24.object({
9717
+ textColorToken: z24.string()
8719
9718
  })
8720
9719
  });
8721
9720
  }
@@ -9091,8 +10090,9 @@ function normalizeBoolean(value, fallback) {
9091
10090
  return fallback;
9092
10091
  }
9093
10092
  function normalizeLocationMapValueRecord(record) {
10093
+ const addressText = typeof record.addressText === "string" ? record.addressText : typeof record.displayAddress === "string" ? record.displayAddress : null;
9094
10094
  const normalized = {
9095
- addressText: normalizeLocationAddressText(typeof record.addressText === "string" ? record.addressText : null),
10095
+ addressText: normalizeLocationAddressText(addressText),
9096
10096
  lat: normalizeOptionalNumber(record.lat),
9097
10097
  lng: normalizeOptionalNumber(record.lng)
9098
10098
  };
@@ -9107,11 +10107,49 @@ function normalizeLocationMapValue(value) {
9107
10107
  }
9108
10108
  return normalizeLocationMapValueRecord(value);
9109
10109
  }
9110
- function normalizeLocationMapProps(input) {
10110
+ function normalizeLocationMapSource(value) {
10111
+ return value === "business_address" || value === "venue" ? value : "custom";
10112
+ }
10113
+ function resolveLocationMapLocation(input) {
10114
+ const source = normalizeLocationMapSource(input.locationSource);
10115
+ if (source === "business_address") {
10116
+ const locationValue2 = normalizeLocationMapValue(input.businessAddress ?? input.location);
10117
+ return locationValue2 ? { kind: "business_address", locationValue: locationValue2 } : { kind: "unresolved", source, reason: "missing_business_address" };
10118
+ }
10119
+ if (source === "venue") {
10120
+ const venueId = typeof input.venueId === "string" && input.venueId.trim() ? input.venueId.trim() : null;
10121
+ if (!venueId) {
10122
+ return { kind: "unresolved", source, reason: "missing_venue_id" };
10123
+ }
10124
+ const locationValue2 = input.venuesById ? normalizeLocationMapValue(input.venuesById[venueId] ?? null) : null;
10125
+ return locationValue2 ? { kind: "venue", venueId, locationValue: locationValue2 } : { kind: "unresolved", source, reason: "missing_venue_location" };
10126
+ }
9111
10127
  const locationValue = normalizeLocationMapValue(input.location);
10128
+ return locationValue ? { kind: "custom", locationValue } : { kind: "unresolved", source, reason: "missing_custom_location" };
10129
+ }
10130
+ function describeUnresolvedLocationMapLocation(resolvedLocation) {
10131
+ if (resolvedLocation.kind !== "unresolved") {
10132
+ return null;
10133
+ }
10134
+ switch (resolvedLocation.reason) {
10135
+ case "missing_business_address":
10136
+ return "Business address details are not configured yet.";
10137
+ case "missing_venue_id":
10138
+ return "Choose a venue to show this map.";
10139
+ case "missing_venue_location":
10140
+ return "The selected venue does not have location details yet.";
10141
+ case "missing_custom_location":
10142
+ return "Location details coming soon.";
10143
+ }
10144
+ }
10145
+ function normalizeLocationMapProps(input) {
10146
+ const resolvedLocation = resolveLocationMapLocation(input);
10147
+ const locationValue = resolvedLocation.kind === "unresolved" ? null : resolvedLocation.locationValue;
9112
10148
  const directionsLabel = normalizeLocationAddressText(input.directionsLabel) ?? LOCATION_MAP_DEFAULTS.directionsLabel;
9113
10149
  return {
10150
+ resolvedLocation,
9114
10151
  locationValue,
10152
+ unresolvedMessage: describeUnresolvedLocationMapLocation(resolvedLocation),
9115
10153
  addressText: locationValue?.addressText ?? null,
9116
10154
  location: toLocationCoordinates(locationValue),
9117
10155
  zoom: Math.min(
@@ -9173,11 +10211,12 @@ function LocationMapView({
9173
10211
  showAddressText,
9174
10212
  showDirections,
9175
10213
  directionsLabel,
10214
+ unresolvedMessage,
9176
10215
  renderMap
9177
10216
  }) {
9178
10217
  const directionsUrl = buildGoogleMapsDirectionsUrl({ addressText, location: location2 });
9179
10218
  if (!location2 && !addressText && !directionsUrl) {
9180
- return /* @__PURE__ */ jsx13("p", { className: "rb-caption", style: textColorStyle("mutedText"), children: "Location details coming soon." });
10219
+ return /* @__PURE__ */ jsx13("p", { className: "rb-caption", style: textColorStyle("mutedText"), children: unresolvedMessage ?? "Location details coming soon." });
9181
10220
  }
9182
10221
  return /* @__PURE__ */ jsxs9("div", { className: "rb-flex rb-flex-col rb-gap-4 rb-text-left", children: [
9183
10222
  location2 && renderMap ? renderMap({
@@ -9525,21 +10564,26 @@ function buildTimetableModel(input) {
9525
10564
  for (const [dateKey, dayDrafts] of groupDraftsByDate(drafts)) {
9526
10565
  cellsByDate.set(
9527
10566
  dateKey,
9528
- assignTimetableLanes(dayDrafts).map((draft) => ({
9529
- event: draft.event,
9530
- startsAtMinutes: draft.startsAtMinutes,
9531
- endsAtMinutes: draft.endsAtMinutes,
9532
- topPercent: toRangePercent(draft.startsAtMinutes - rangeStartMinutes, rangeMinutes),
9533
- heightPercent: Math.max(
9534
- MIN_EVENT_HEIGHT_PERCENT,
9535
- toRangePercent(draft.endsAtMinutes - draft.startsAtMinutes, rangeMinutes)
9536
- ),
9537
- laneIndex: draft.laneIndex,
9538
- laneCount: draft.laneCount,
9539
- categoryColor: draft.event.eventCategory?.color || "rgb(var(--tb-accent))",
9540
- timeLabel: formatEventTimeRange(draft.event),
9541
- teacherLine: formatEventTeacherLine(draft.event)
9542
- }))
10567
+ assignTimetableLanes(dayDrafts).map((draft) => {
10568
+ const capacity = formatTimetableCapacity(draft.event);
10569
+ return {
10570
+ event: draft.event,
10571
+ startsAtMinutes: draft.startsAtMinutes,
10572
+ endsAtMinutes: draft.endsAtMinutes,
10573
+ topPercent: toRangePercent(draft.startsAtMinutes - rangeStartMinutes, rangeMinutes),
10574
+ heightPercent: Math.max(
10575
+ MIN_EVENT_HEIGHT_PERCENT,
10576
+ toRangePercent(draft.endsAtMinutes - draft.startsAtMinutes, rangeMinutes)
10577
+ ),
10578
+ laneIndex: draft.laneIndex,
10579
+ laneCount: draft.laneCount,
10580
+ categoryColor: draft.event.eventCategory?.color || "rgb(var(--tb-accent))",
10581
+ timeLabel: formatEventTimeRange(draft.event),
10582
+ teacherLine: formatEventTeacherLine(draft.event),
10583
+ capacityLabel: capacity.label,
10584
+ isFull: capacity.isFull
10585
+ };
10586
+ })
9543
10587
  );
9544
10588
  }
9545
10589
  return {
@@ -9672,6 +10716,12 @@ function formatShortDayLabel(date) {
9672
10716
  const dayName = FULL_DAY_NAMES[date.getDay()] ?? "";
9673
10717
  return `${dayName.slice(0, 3)} ${date.getDate()}`;
9674
10718
  }
10719
+ function formatTimetableCapacity(event) {
10720
+ const { available, isFull } = getEventAvailability(event);
10721
+ if (available == null) return { label: null, isFull: false };
10722
+ if (isFull) return { label: "Full", isFull: true };
10723
+ return { label: `${available} spots left`, isFull: false };
10724
+ }
9675
10725
  function formatEventTimeRange(event) {
9676
10726
  const timeZone = event.timeZone ?? null;
9677
10727
  return `${formatTime(event.startsAt, { timeZone })} - ${formatTime(event.endsAt, { timeZone })}`;
@@ -9684,6 +10734,7 @@ var init_timetableModel = __esm({
9684
10734
  "../blocks/src/system/runtime/nodes/events/shared/timetableModel.ts"() {
9685
10735
  "use strict";
9686
10736
  init_src();
10737
+ init_eventCapacity();
9687
10738
  init_utils();
9688
10739
  DEFAULT_START_HOUR = 6;
9689
10740
  DEFAULT_END_HOUR = 21;
@@ -9788,7 +10839,7 @@ function ze() {
9788
10839
  /* @__PURE__ */ Te(P)
9789
10840
  );
9790
10841
  }
9791
- function z22(e) {
10842
+ function z25(e) {
9792
10843
  if (L) {
9793
10844
  if (/* @__PURE__ */ Te(P) !== null)
9794
10845
  throw Tt(), Je;
@@ -11817,12 +12868,12 @@ function ha(e, t) {
11817
12868
  var mt = we(Dr, 2);
11818
12869
  let Pr;
11819
12870
  var We = X(mt);
11820
- en(We), We.__change = ui, z22(mt);
12871
+ en(We), We.__change = ui, z25(mt);
11821
12872
  var Ut = we(mt, 2), wi = X(Ut);
11822
12873
  {
11823
12874
  var pi = (n) => {
11824
12875
  var u = na(), _ = Gr(u), y = X(_);
11825
- Ge(y, () => c(re).verified), z22(_);
12876
+ Ge(y, () => c(re).verified), z25(_);
11826
12877
  var T = we(_, 2);
11827
12878
  en(T), Pe(() => {
11828
12879
  se(T, "name", V()), jo(T, c(Le));
@@ -11831,10 +12882,10 @@ function ha(e, t) {
11831
12882
  {
11832
12883
  var _ = (T) => {
11833
12884
  var E = ia(), p = X(E);
11834
- Ge(p, () => c(re).verifying), z22(E), ne(T, E);
12885
+ Ge(p, () => c(re).verifying), z25(E), ne(T, E);
11835
12886
  }, y = (T) => {
11836
12887
  var E = oa(), p = X(E);
11837
- Ge(p, () => c(re).label), z22(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
12888
+ Ge(p, () => c(re).label), z25(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
11838
12889
  };
11839
12890
  $e(
11840
12891
  n,
@@ -11849,18 +12900,18 @@ function ha(e, t) {
11849
12900
  c(C) === b.VERIFIED ? n(pi) : n(bi, false);
11850
12901
  });
11851
12902
  }
11852
- z22(Ut);
12903
+ z25(Ut);
11853
12904
  var yi = we(Ut, 2);
11854
12905
  {
11855
12906
  var Ei = (n) => {
11856
12907
  var u = aa(), _ = X(u);
11857
- se(_, "href", sr), z22(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
12908
+ se(_, "href", sr), z25(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
11858
12909
  };
11859
12910
  $e(yi, (n) => {
11860
12911
  (N() !== true || c(Dt)) && n(Ei);
11861
12912
  });
11862
12913
  }
11863
- z22(Mt);
12914
+ z25(Mt);
11864
12915
  var Or = we(Mt, 2);
11865
12916
  {
11866
12917
  var xi = (n) => {
@@ -11868,16 +12919,16 @@ function ha(e, t) {
11868
12919
  {
11869
12920
  var y = (E) => {
11870
12921
  var p = la(), x = X(p);
11871
- Ge(x, () => c(re).expired), z22(p), Pe(() => se(p, "title", c(He))), ne(E, p);
12922
+ Ge(x, () => c(re).expired), z25(p), Pe(() => se(p, "title", c(He))), ne(E, p);
11872
12923
  }, T = (E) => {
11873
12924
  var p = sa(), x = X(p);
11874
- Ge(x, () => c(re).error), z22(p), Pe(() => se(p, "title", c(He))), ne(E, p);
12925
+ Ge(x, () => c(re).error), z25(p), Pe(() => se(p, "title", c(He))), ne(E, p);
11875
12926
  };
11876
12927
  $e(_, (E) => {
11877
12928
  c(C) === b.EXPIRED ? E(y) : E(T, false);
11878
12929
  });
11879
12930
  }
11880
- z22(u), ne(n, u);
12931
+ z25(u), ne(n, u);
11881
12932
  };
11882
12933
  $e(Or, (n) => {
11883
12934
  (c(He) || c(C) === b.EXPIRED) && n(xi);
@@ -11887,7 +12938,7 @@ function ha(e, t) {
11887
12938
  {
11888
12939
  var $i = (n) => {
11889
12940
  var u = ua(), _ = X(u), y = X(_);
11890
- Ge(y, () => c(re).footer), z22(_), z22(u), ne(n, u);
12941
+ Ge(y, () => c(re).footer), z25(_), z25(u), ne(n, u);
11891
12942
  };
11892
12943
  $e(Fr, (n) => {
11893
12944
  c(re).footer && (k() !== true || c(Dt)) && n($i);
@@ -11903,7 +12954,7 @@ function ha(e, t) {
11903
12954
  v() && n(Ci);
11904
12955
  });
11905
12956
  }
11906
- return z22(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
12957
+ return z25(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
11907
12958
  (n) => {
11908
12959
  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");
11909
12960
  },
@@ -14002,7 +15053,7 @@ var init_bookingPaymentOptionCopy = __esm({
14002
15053
 
14003
15054
  // ../blocks/src/system/runtime/shared/types.ts
14004
15055
  var DEFAULT_CURRENCY;
14005
- var init_types5 = __esm({
15056
+ var init_types8 = __esm({
14006
15057
  "../blocks/src/system/runtime/shared/types.ts"() {
14007
15058
  "use strict";
14008
15059
  DEFAULT_CURRENCY = "GBP";
@@ -14019,7 +15070,7 @@ function formatPrice(cents, currency = DEFAULT_CURRENCY, locale) {
14019
15070
  var init_formatting = __esm({
14020
15071
  "../blocks/src/system/runtime/shared/utils/formatting.ts"() {
14021
15072
  "use strict";
14022
- init_types5();
15073
+ init_types8();
14023
15074
  }
14024
15075
  });
14025
15076
 
@@ -16502,7 +17553,7 @@ var init_registrationStateMachine = __esm({
16502
17553
  });
16503
17554
 
16504
17555
  // ../blocks/src/system/runtime/nodes/event-registration/types.ts
16505
- var init_types6 = __esm({
17556
+ var init_types9 = __esm({
16506
17557
  "../blocks/src/system/runtime/nodes/event-registration/types.ts"() {
16507
17558
  "use strict";
16508
17559
  }
@@ -18016,7 +19067,7 @@ var init_VerifyingTimeoutStep = __esm({
18016
19067
  var init_event_registration = __esm({
18017
19068
  "../blocks/src/system/runtime/nodes/event-registration/index.ts"() {
18018
19069
  "use strict";
18019
- init_types6();
19070
+ init_types9();
18020
19071
  init_utils3();
18021
19072
  init_hooks();
18022
19073
  init_sessionStorage();
@@ -21813,6 +22864,7 @@ function LocationMapClient(props) {
21813
22864
  showAddressText: normalized.showAddressText,
21814
22865
  showDirections: normalized.showDirections,
21815
22866
  directionsLabel: normalized.directionsLabel,
22867
+ unresolvedMessage: normalized.unresolvedMessage,
21816
22868
  renderMap: ({ addressText, className, height, location: location2, zoom }) => /* @__PURE__ */ jsx75(
21817
22869
  LeafletStaticMap,
21818
22870
  {
@@ -26970,30 +28022,22 @@ var init_CalendarDayCell = __esm({
26970
28022
 
26971
28023
  // ../blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.tsx
26972
28024
  import { Fragment as Fragment20, jsx as jsx94, jsxs as jsxs68 } from "react/jsx-runtime";
26973
- function formatCapacity(event) {
26974
- if (event.capacity == null) {
26975
- return null;
26976
- }
26977
- const available = event.availableSpots ?? event.capacity - event.registeredCount;
26978
- if (available <= 0) {
26979
- return "Full";
26980
- }
26981
- return `${available} spots left`;
26982
- }
26983
28025
  var AgendaEventCard;
26984
28026
  var init_AgendaEventCard = __esm({
26985
28027
  "../blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.tsx"() {
26986
28028
  "use strict";
28029
+ init_eventCapacity();
26987
28030
  init_utils();
26988
28031
  AgendaEventCard = ({
26989
28032
  event,
28033
+ showCapacity,
26990
28034
  onClick
26991
28035
  }) => {
26992
28036
  const eventUrl = event.path;
26993
28037
  const categoryColor = event.eventCategory?.color || "rgb(var(--tb-accent))";
26994
28038
  const price = formatEventPrice(event);
26995
- const capacity = formatCapacity(event);
26996
- const isFull = capacity === "Full";
28039
+ const { available, isFull } = getEventAvailability(event);
28040
+ const capacity = showCapacity && available != null ? isFull ? "Full" : `${available} spots left` : null;
26997
28041
  const title = event.title;
26998
28042
  const timeZone = event.timeZone ?? null;
26999
28043
  const teacherLine = formatEventTeacherLine(event);
@@ -27073,6 +28117,7 @@ var init_WeekAgendaView = __esm({
27073
28117
  viewDate,
27074
28118
  events,
27075
28119
  startOfWeek,
28120
+ showCapacity,
27076
28121
  emptyMessage = "No events scheduled"
27077
28122
  }) => {
27078
28123
  const weekDays = getWeekCalendarDays(viewDate, startOfWeek);
@@ -27093,7 +28138,8 @@ var init_WeekAgendaView = __esm({
27093
28138
  /* @__PURE__ */ jsx95("div", { className: "event-agenda-day-content", children: dayEvents.length === 0 ? /* @__PURE__ */ jsx95("p", { className: "event-agenda-day-empty", children: emptyMessage }) : /* @__PURE__ */ jsx95("div", { className: "event-agenda-day-events", children: dayEvents.map((event) => /* @__PURE__ */ jsx95(
27094
28139
  AgendaEventCard,
27095
28140
  {
27096
- event
28141
+ event,
28142
+ showCapacity
27097
28143
  },
27098
28144
  event.occurrenceId || event.id
27099
28145
  )) }) })
@@ -27110,6 +28156,7 @@ var init_WeekAgendaView = __esm({
27110
28156
  import { jsx as jsx96 } from "react/jsx-runtime";
27111
28157
  function EventDetailModal({
27112
28158
  event,
28159
+ showCapacity,
27113
28160
  onClose,
27114
28161
  cardVariant = "default",
27115
28162
  buttonVariant = "primary",
@@ -27150,7 +28197,7 @@ function EventDetailModal({
27150
28197
  showVenue: true,
27151
28198
  showMap,
27152
28199
  allowMap: true,
27153
- showCapacity: true
28200
+ showCapacity
27154
28201
  }
27155
28202
  ) })
27156
28203
  }
@@ -27170,6 +28217,7 @@ import { jsx as jsx97, jsxs as jsxs70 } from "react/jsx-runtime";
27170
28217
  function DayEventsModal({
27171
28218
  date,
27172
28219
  events,
28220
+ showCapacity,
27173
28221
  onClose,
27174
28222
  onSelectEvent
27175
28223
  }) {
@@ -27206,7 +28254,8 @@ function DayEventsModal({
27206
28254
  AgendaEventCard,
27207
28255
  {
27208
28256
  event,
27209
- onClick: onSelectEvent
28257
+ onClick: onSelectEvent,
28258
+ showCapacity
27210
28259
  },
27211
28260
  event.occurrenceId || event.id
27212
28261
  )) })
@@ -27227,6 +28276,7 @@ var init_DayEventsModal = __esm({
27227
28276
  // ../blocks/src/system/runtime/nodes/events/shared/EventModals.tsx
27228
28277
  import { jsx as jsx98 } from "react/jsx-runtime";
27229
28278
  function EventModals({
28279
+ showCapacity,
27230
28280
  cardVariant,
27231
28281
  buttonVariant,
27232
28282
  buttonText
@@ -27243,7 +28293,8 @@ function EventModals({
27243
28293
  onClose: closeModal,
27244
28294
  cardVariant,
27245
28295
  buttonVariant,
27246
- buttonText
28296
+ buttonText,
28297
+ showCapacity
27247
28298
  }
27248
28299
  );
27249
28300
  }
@@ -27256,7 +28307,8 @@ function EventModals({
27256
28307
  onClose: closeModal,
27257
28308
  onSelectEvent: (event) => {
27258
28309
  openEventModal(event);
27259
- }
28310
+ },
28311
+ showCapacity
27260
28312
  }
27261
28313
  );
27262
28314
  }
@@ -27659,7 +28711,8 @@ var init_EventCombined_client = __esm({
27659
28711
  viewDate,
27660
28712
  events: calendarEventsRaw,
27661
28713
  startOfWeek,
27662
- emptyMessage: "No events scheduled"
28714
+ emptyMessage: "No events scheduled",
28715
+ showCapacity: resolvedShowCapacity
27663
28716
  }
27664
28717
  ) : /* @__PURE__ */ jsxs71("div", { className: "event-calendar-container", children: [
27665
28718
  /* @__PURE__ */ jsx99("div", { className: "event-calendar-day-headers", children: dayNames.map((day) => /* @__PURE__ */ jsx99("div", { className: "event-calendar-day-header", children: day }, day)) }),
@@ -27679,7 +28732,14 @@ var init_EventCombined_client = __esm({
27679
28732
  ] }),
27680
28733
  calendarEventsRaw.length === 0 && !calendarLoading && /* @__PURE__ */ jsx99("p", { className: "event-calendar-empty", children: emptyMessage })
27681
28734
  ] }),
27682
- /* @__PURE__ */ jsx99(EventModals, { buttonVariant, buttonText })
28735
+ /* @__PURE__ */ jsx99(
28736
+ EventModals,
28737
+ {
28738
+ buttonVariant,
28739
+ buttonText,
28740
+ showCapacity: resolvedShowCapacity
28741
+ }
28742
+ )
27683
28743
  ] })
27684
28744
  ]
27685
28745
  }
@@ -27714,6 +28774,7 @@ var init_WeekTimetableView = __esm({
27714
28774
  viewDate,
27715
28775
  events,
27716
28776
  startOfWeek,
28777
+ showCapacity,
27717
28778
  emptyMessage = "No classes scheduled"
27718
28779
  }) => {
27719
28780
  const { openEventModal } = useEventModal();
@@ -27746,7 +28807,8 @@ var init_WeekTimetableView = __esm({
27746
28807
  hours: model.hourTicks,
27747
28808
  rangeMinutes: model.rangeMinutes,
27748
28809
  selected: day.dateKey === selectedDayKey,
27749
- onEventClick: openEventModal
28810
+ onEventClick: openEventModal,
28811
+ showCapacity
27750
28812
  },
27751
28813
  day.dateKey
27752
28814
  ))
@@ -27766,7 +28828,7 @@ var init_WeekTimetableView = __esm({
27766
28828
  hour
27767
28829
  )) })
27768
28830
  ] });
27769
- TimetableDayColumn = ({ day, hours, rangeMinutes, selected, onEventClick }) => /* @__PURE__ */ jsxs72(
28831
+ TimetableDayColumn = ({ day, hours, rangeMinutes, selected, onEventClick, showCapacity }) => /* @__PURE__ */ jsxs72(
27770
28832
  "section",
27771
28833
  {
27772
28834
  className: `event-timetable-day ${day.isToday ? "event-timetable-day--today" : ""}`,
@@ -27795,7 +28857,8 @@ var init_WeekTimetableView = __esm({
27795
28857
  TimetableEventButton,
27796
28858
  {
27797
28859
  cell,
27798
- onClick: onEventClick
28860
+ onClick: onEventClick,
28861
+ showCapacity
27799
28862
  },
27800
28863
  cell.event.occurrenceId || cell.event.id
27801
28864
  ))
@@ -27805,7 +28868,7 @@ var init_WeekTimetableView = __esm({
27805
28868
  ]
27806
28869
  }
27807
28870
  );
27808
- TimetableEventButton = ({ cell, onClick }) => /* @__PURE__ */ jsxs72(
28871
+ TimetableEventButton = ({ cell, onClick, showCapacity }) => /* @__PURE__ */ jsxs72(
27809
28872
  "button",
27810
28873
  {
27811
28874
  type: "button",
@@ -27823,7 +28886,14 @@ var init_WeekTimetableView = __esm({
27823
28886
  /* @__PURE__ */ jsx100("span", { className: "event-timetable-event-time", children: cell.timeLabel }),
27824
28887
  /* @__PURE__ */ jsx100("span", { className: "event-timetable-event-title", children: cell.event.title }),
27825
28888
  cell.teacherLine ? /* @__PURE__ */ jsx100("span", { className: "event-timetable-event-teacher", children: cell.teacherLine }) : null,
27826
- cell.event.venue ? /* @__PURE__ */ jsx100("span", { className: "event-timetable-event-meta", children: cell.event.venue.name }) : null
28889
+ cell.event.venue ? /* @__PURE__ */ jsx100("span", { className: "event-timetable-event-meta", children: cell.event.venue.name }) : null,
28890
+ showCapacity && cell.capacityLabel ? /* @__PURE__ */ jsx100(
28891
+ "span",
28892
+ {
28893
+ className: cell.isFull ? "event-timetable-event-capacity event-timetable-event-capacity--full" : "event-timetable-event-capacity",
28894
+ children: cell.capacityLabel
28895
+ }
28896
+ ) : null
27827
28897
  ]
27828
28898
  }
27829
28899
  );
@@ -28045,7 +29115,8 @@ var init_EventCalendar_client = __esm({
28045
29115
  viewDate,
28046
29116
  events,
28047
29117
  startOfWeek: display.startOfWeek,
28048
- emptyMessage: display.emptyMessage
29118
+ emptyMessage: display.emptyMessage,
29119
+ showCapacity: display.showCapacity
28049
29120
  }
28050
29121
  )
28051
29122
  }
@@ -28054,7 +29125,8 @@ var init_EventCalendar_client = __esm({
28054
29125
  EventModals,
28055
29126
  {
28056
29127
  buttonVariant: display.buttonVariant,
28057
- buttonText: display.buttonText
29128
+ buttonText: display.buttonText,
29129
+ showCapacity: display.showCapacity
28058
29130
  }
28059
29131
  )
28060
29132
  ] });
@@ -28136,7 +29208,8 @@ var init_EventCalendar_client = __esm({
28136
29208
  EventModals,
28137
29209
  {
28138
29210
  buttonVariant: display.buttonVariant,
28139
- buttonText: display.buttonText
29211
+ buttonText: display.buttonText,
29212
+ showCapacity: display.showCapacity
28140
29213
  }
28141
29214
  )
28142
29215
  ] });
@@ -28660,153 +29733,9 @@ var init_generateCssVars = __esm({
28660
29733
  });
28661
29734
 
28662
29735
  // ../theme-core/src/styles/shadow.ts
28663
- var init_shadow = __esm({
28664
- "../theme-core/src/styles/shadow.ts"() {
28665
- "use strict";
28666
- }
28667
- });
28668
-
28669
- // ../theme-core/src/tokens/resolver.ts
28670
- var init_resolver = __esm({
28671
- "../theme-core/src/tokens/resolver.ts"() {
28672
- "use strict";
28673
- }
28674
- });
28675
-
28676
- // ../theme-core/src/buttons/effects/presets/background.ts
28677
- var init_background = __esm({
28678
- "../theme-core/src/buttons/effects/presets/background.ts"() {
28679
- "use strict";
28680
- }
28681
- });
28682
-
28683
- // ../theme-core/src/buttons/effects/cssUtils.ts
28684
- var init_cssUtils = __esm({
28685
- "../theme-core/src/buttons/effects/cssUtils.ts"() {
28686
- "use strict";
28687
- }
28688
- });
28689
-
28690
- // ../theme-core/src/buttons/effects/presets/shadow.ts
28691
29736
  var init_shadow2 = __esm({
28692
- "../theme-core/src/buttons/effects/presets/shadow.ts"() {
28693
- "use strict";
28694
- init_cssUtils();
28695
- }
28696
- });
28697
-
28698
- // ../theme-core/src/buttons/effects/presets/transform.ts
28699
- var init_transform = __esm({
28700
- "../theme-core/src/buttons/effects/presets/transform.ts"() {
28701
- "use strict";
28702
- init_cssUtils();
28703
- }
28704
- });
28705
-
28706
- // ../theme-core/src/buttons/effects/presets/overlay.ts
28707
- var init_overlay = __esm({
28708
- "../theme-core/src/buttons/effects/presets/overlay.ts"() {
28709
- "use strict";
28710
- }
28711
- });
28712
-
28713
- // ../theme-core/src/buttons/effects/presets/text.ts
28714
- var init_text = __esm({
28715
- "../theme-core/src/buttons/effects/presets/text.ts"() {
28716
- "use strict";
28717
- }
28718
- });
28719
-
28720
- // ../theme-core/src/buttons/effects/presets/border.ts
28721
- var init_border = __esm({
28722
- "../theme-core/src/buttons/effects/presets/border.ts"() {
28723
- "use strict";
28724
- }
28725
- });
28726
-
28727
- // ../theme-core/src/buttons/effects/presets/animation.ts
28728
- var init_animation = __esm({
28729
- "../theme-core/src/buttons/effects/presets/animation.ts"() {
28730
- "use strict";
28731
- }
28732
- });
28733
-
28734
- // ../theme-core/src/interactive/effects/nav-underline.ts
28735
- var init_nav_underline = __esm({
28736
- "../theme-core/src/interactive/effects/nav-underline.ts"() {
28737
- "use strict";
28738
- }
28739
- });
28740
-
28741
- // ../theme-core/src/interactive/effects/nav-frosted.ts
28742
- var init_nav_frosted = __esm({
28743
- "../theme-core/src/interactive/effects/nav-frosted.ts"() {
28744
- "use strict";
28745
- }
28746
- });
28747
-
28748
- // ../theme-core/src/interactive/effects/index.ts
28749
- var init_effects = __esm({
28750
- "../theme-core/src/interactive/effects/index.ts"() {
28751
- "use strict";
28752
- init_nav_underline();
28753
- init_nav_frosted();
28754
- }
28755
- });
28756
-
28757
- // ../theme-core/src/buttons/effects/registry.ts
28758
- var init_registry = __esm({
28759
- "../theme-core/src/buttons/effects/registry.ts"() {
28760
- "use strict";
28761
- init_background();
28762
- init_shadow2();
28763
- init_transform();
28764
- init_overlay();
28765
- init_text();
28766
- init_border();
28767
- init_animation();
28768
- init_effects();
28769
- }
28770
- });
28771
-
28772
- // ../theme-core/src/interactive/generateEffectsCSS.ts
28773
- var init_generateEffectsCSS = __esm({
28774
- "../theme-core/src/interactive/generateEffectsCSS.ts"() {
28775
- "use strict";
28776
- init_registry();
28777
- }
28778
- });
28779
-
28780
- // ../theme-core/src/buttons/constants.ts
28781
- var init_constants = __esm({
28782
- "../theme-core/src/buttons/constants.ts"() {
28783
- "use strict";
28784
- }
28785
- });
28786
-
28787
- // ../theme-core/src/buttons/utils/contrast.ts
28788
- var init_contrast2 = __esm({
28789
- "../theme-core/src/buttons/utils/contrast.ts"() {
28790
- "use strict";
28791
- }
28792
- });
28793
-
28794
- // ../theme-core/src/buttons/generateDefaultButtonSystem.ts
28795
- var init_generateDefaultButtonSystem = __esm({
28796
- "../theme-core/src/buttons/generateDefaultButtonSystem.ts"() {
28797
- "use strict";
28798
- init_contrast2();
28799
- }
28800
- });
28801
-
28802
- // ../theme-core/src/buttons/generateButtonCss.ts
28803
- var init_generateButtonCss = __esm({
28804
- "../theme-core/src/buttons/generateButtonCss.ts"() {
29737
+ "../theme-core/src/styles/shadow.ts"() {
28805
29738
  "use strict";
28806
- init_resolver();
28807
- init_generateEffectsCSS();
28808
- init_constants();
28809
- init_generateDefaultButtonSystem();
28810
29739
  }
28811
29740
  });
28812
29741
 
@@ -28845,7 +29774,7 @@ var init_border2 = __esm({
28845
29774
  var init_generateAccordionCss = __esm({
28846
29775
  "../theme-core/src/accordions/generateAccordionCss.ts"() {
28847
29776
  "use strict";
28848
- init_types4();
29777
+ init_types7();
28849
29778
  init_constants2();
28850
29779
  init_border2();
28851
29780
  }
@@ -28859,66 +29788,66 @@ var init_defaults = __esm({
28859
29788
  });
28860
29789
 
28861
29790
  // ../theme-core/src/inputs/types.ts
28862
- import { z as z23 } from "zod";
29791
+ import { z as z26 } from "zod";
28863
29792
  var inputSystemSchema;
28864
- var init_types7 = __esm({
29793
+ var init_types10 = __esm({
28865
29794
  "../theme-core/src/inputs/types.ts"() {
28866
29795
  "use strict";
28867
- inputSystemSchema = z23.object({
29796
+ inputSystemSchema = z26.object({
28868
29797
  // Base styling (applied to all inputs)
28869
- base: z23.object({
28870
- background: z23.union([
28871
- z23.object({
28872
- type: z23.literal("solid"),
28873
- colorToken: z23.string()
29798
+ base: z26.object({
29799
+ background: z26.union([
29800
+ z26.object({
29801
+ type: z26.literal("solid"),
29802
+ colorToken: z26.string()
28874
29803
  }),
28875
- z23.object({
28876
- type: z23.literal("transparent")
29804
+ z26.object({
29805
+ type: z26.literal("transparent")
28877
29806
  })
28878
29807
  ]),
28879
- textColorToken: z23.string(),
28880
- border: z23.object({
28881
- widthClass: z23.string(),
29808
+ textColorToken: z26.string(),
29809
+ border: z26.object({
29810
+ widthClass: z26.string(),
28882
29811
  // e.g., 'border', 'border-2'
28883
- colorToken: z23.string(),
28884
- style: z23.enum(["all", "underline"]).optional()
29812
+ colorToken: z26.string(),
29813
+ style: z26.enum(["all", "underline"]).optional()
28885
29814
  }),
28886
- corners: z23.enum(["square", "soft", "rounded", "pill"]).nullable(),
29815
+ corners: z26.enum(["square", "soft", "rounded", "pill"]).nullable(),
28887
29816
  // null = inherit from theme.corners
28888
- shadow: z23.object({
28889
- elevation: z23.enum(["none", "low", "medium"]),
28890
- softness: z23.enum(["soft", "crisp", "hard"]).nullable()
29817
+ shadow: z26.object({
29818
+ elevation: z26.enum(["none", "low", "medium"]),
29819
+ softness: z26.enum(["soft", "crisp", "hard"]).nullable()
28891
29820
  }).nullable(),
28892
- spacing: z23.enum(["compact", "cozy", "medium", "comfortable"]),
29821
+ spacing: z26.enum(["compact", "cozy", "medium", "comfortable"]),
28893
29822
  // padding inside inputs
28894
- fontSize: z23.enum(["sm", "base", "lg"])
29823
+ fontSize: z26.enum(["sm", "base", "lg"])
28895
29824
  }),
28896
29825
  // Label styling
28897
- label: z23.object({
28898
- textColorToken: z23.string(),
28899
- fontWeight: z23.enum(["regular", "medium", "semibold", "bold", "black"]),
28900
- fontSize: z23.enum(["2xs", "xs", "sm", "base"]),
28901
- textTransform: z23.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
28902
- letterSpacing: z23.enum(["normal", "wide", "wider", "widest"]).optional(),
28903
- opacity: z23.number().min(0.2).max(1).optional()
29826
+ label: z26.object({
29827
+ textColorToken: z26.string(),
29828
+ fontWeight: z26.enum(["regular", "medium", "semibold", "bold", "black"]),
29829
+ fontSize: z26.enum(["2xs", "xs", "sm", "base"]),
29830
+ textTransform: z26.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
29831
+ letterSpacing: z26.enum(["normal", "wide", "wider", "widest"]).optional(),
29832
+ opacity: z26.number().min(0.2).max(1).optional()
28904
29833
  }),
28905
29834
  // Focus state
28906
- focus: z23.object({
28907
- ringColorToken: z23.string(),
28908
- ringWidth: z23.enum(["0", "1", "2", "3"]),
28909
- borderColorToken: z23.string().optional()
29835
+ focus: z26.object({
29836
+ ringColorToken: z26.string(),
29837
+ ringWidth: z26.enum(["0", "1", "2", "3"]),
29838
+ borderColorToken: z26.string().optional()
28910
29839
  // Change border color on focus
28911
29840
  }),
28912
29841
  // Error state (for validation feedback)
28913
- error: z23.object({
28914
- borderColorToken: z23.string(),
28915
- textColorToken: z23.string()
29842
+ error: z26.object({
29843
+ borderColorToken: z26.string(),
29844
+ textColorToken: z26.string()
28916
29845
  }),
28917
29846
  // Disabled state
28918
- disabled: z23.object({
28919
- backgroundColorToken: z23.string(),
28920
- textColorToken: z23.string(),
28921
- opacity: z23.number().min(0.3).max(0.7)
29847
+ disabled: z26.object({
29848
+ backgroundColorToken: z26.string(),
29849
+ textColorToken: z26.string(),
29850
+ opacity: z26.number().min(0.3).max(0.7)
28922
29851
  })
28923
29852
  });
28924
29853
  }
@@ -28928,7 +29857,7 @@ var init_types7 = __esm({
28928
29857
  var init_generateInputCss = __esm({
28929
29858
  "../theme-core/src/inputs/generateInputCss.ts"() {
28930
29859
  "use strict";
28931
- init_types7();
29860
+ init_types10();
28932
29861
  init_constants();
28933
29862
  init_border2();
28934
29863
  }
@@ -28942,65 +29871,65 @@ var init_defaults2 = __esm({
28942
29871
  });
28943
29872
 
28944
29873
  // ../theme-core/src/interactive/baseSchema.ts
28945
- import { z as z24 } from "zod";
28946
- var interactiveTypographySchema, effectApplicationSchema, effectCompositionSchema;
29874
+ import { z as z27 } from "zod";
29875
+ var interactiveTypographySchema, effectApplicationSchema2, effectCompositionSchema;
28947
29876
  var init_baseSchema = __esm({
28948
29877
  "../theme-core/src/interactive/baseSchema.ts"() {
28949
29878
  "use strict";
28950
- interactiveTypographySchema = z24.object({
29879
+ interactiveTypographySchema = z27.object({
28951
29880
  /** Font family source */
28952
- typography: z24.enum(["body", "heading"]).default("body"),
29881
+ typography: z27.enum(["body", "heading"]).default("body"),
28953
29882
  /** Font weight */
28954
- fontWeight: z24.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
29883
+ fontWeight: z27.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
28955
29884
  /** Text transform */
28956
- textTransform: z24.enum(["none", "uppercase", "capitalize"]).default("none"),
29885
+ textTransform: z27.enum(["none", "uppercase", "capitalize"]).default("none"),
28957
29886
  /** Italic style */
28958
- italic: z24.boolean().default(false)
29887
+ italic: z27.boolean().default(false)
28959
29888
  });
28960
- effectApplicationSchema = z24.object({
29889
+ effectApplicationSchema2 = z27.object({
28961
29890
  /** Effect preset ID */
28962
- effectId: z24.string(),
29891
+ effectId: z27.string(),
28963
29892
  /** User-provided customization options */
28964
- options: z24.record(z24.string(), z24.any()).optional()
29893
+ options: z27.record(z27.string(), z27.any()).optional()
28965
29894
  });
28966
- effectCompositionSchema = z24.object({
29895
+ effectCompositionSchema = z27.object({
28967
29896
  /** Effects always applied */
28968
- base: z24.array(effectApplicationSchema).optional(),
29897
+ base: z27.array(effectApplicationSchema2).optional(),
28969
29898
  /** Effects applied on hover */
28970
- hover: z24.array(effectApplicationSchema).optional(),
29899
+ hover: z27.array(effectApplicationSchema2).optional(),
28971
29900
  /** Effects applied on active/pressed */
28972
- active: z24.array(effectApplicationSchema).optional(),
29901
+ active: z27.array(effectApplicationSchema2).optional(),
28973
29902
  /** Effects applied on focus */
28974
- focus: z24.array(effectApplicationSchema).optional()
29903
+ focus: z27.array(effectApplicationSchema2).optional()
28975
29904
  });
28976
29905
  }
28977
29906
  });
28978
29907
 
28979
29908
  // ../theme-core/src/navigation/types.ts
28980
- import { z as z25 } from "zod";
29909
+ import { z as z28 } from "zod";
28981
29910
  var navLinkPaddingSchema, navLinkPaddingXSchema, navLinkBorderRadiusSchema, navLinkTextSizeSchema, navLinkLetterSpacingSchema, navLinkStyleSchema;
28982
- var init_types8 = __esm({
29911
+ var init_types11 = __esm({
28983
29912
  "../theme-core/src/navigation/types.ts"() {
28984
29913
  "use strict";
28985
29914
  init_baseSchema();
28986
- navLinkPaddingSchema = z25.enum(["none", "compact", "default"]);
28987
- navLinkPaddingXSchema = z25.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
28988
- navLinkBorderRadiusSchema = z25.enum(["none", "sm", "md", "full"]);
28989
- navLinkTextSizeSchema = z25.enum(["xs", "sm", "base", "lg"]);
28990
- navLinkLetterSpacingSchema = z25.enum(["normal", "wide", "wider", "widest"]);
28991
- navLinkStyleSchema = z25.object({
29915
+ navLinkPaddingSchema = z28.enum(["none", "compact", "default"]);
29916
+ navLinkPaddingXSchema = z28.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
29917
+ navLinkBorderRadiusSchema = z28.enum(["none", "sm", "md", "full"]);
29918
+ navLinkTextSizeSchema = z28.enum(["xs", "sm", "base", "lg"]);
29919
+ navLinkLetterSpacingSchema = z28.enum(["normal", "wide", "wider", "widest"]);
29920
+ navLinkStyleSchema = z28.object({
28992
29921
  /** Display name for the style */
28993
- name: z25.string().min(1).max(30).optional(),
29922
+ name: z28.string().min(1).max(30).optional(),
28994
29923
  /** Typography settings (inherited from interactive base) */
28995
29924
  ...interactiveTypographySchema.shape,
28996
29925
  /** Text color token */
28997
- colorToken: z25.string().default("text"),
29926
+ colorToken: z28.string().default("text"),
28998
29927
  /** Optional text size override */
28999
29928
  textSize: navLinkTextSizeSchema.optional(),
29000
29929
  /** Optional letter spacing override */
29001
29930
  letterSpacing: navLinkLetterSpacingSchema.optional(),
29002
29931
  /** Hover/active color token (for color-change effects) */
29003
- hoverColorToken: z25.string().nullable().optional(),
29932
+ hoverColorToken: z28.string().nullable().optional(),
29004
29933
  /** Padding preset */
29005
29934
  padding: navLinkPaddingSchema.default("compact"),
29006
29935
  /** Horizontal padding override (overrides horizontal component of padding preset) */
@@ -29024,7 +29953,7 @@ var init_generateBaseCSS = __esm({
29024
29953
  var init_generateNavLinkCSS = __esm({
29025
29954
  "../theme-core/src/navigation/generateNavLinkCSS.ts"() {
29026
29955
  "use strict";
29027
- init_types8();
29956
+ init_types11();
29028
29957
  init_generateBaseCSS();
29029
29958
  init_generateEffectsCSS();
29030
29959
  }
@@ -29032,7 +29961,7 @@ var init_generateNavLinkCSS = __esm({
29032
29961
 
29033
29962
  // ../theme-core/src/navigation/presets.ts
29034
29963
  var NAV_LINK_PRESETS, NAV_LINK_PRESET_IDS;
29035
- var init_presets = __esm({
29964
+ var init_presets2 = __esm({
29036
29965
  "../theme-core/src/navigation/presets.ts"() {
29037
29966
  "use strict";
29038
29967
  NAV_LINK_PRESETS = {
@@ -29181,19 +30110,19 @@ var init_presets = __esm({
29181
30110
  });
29182
30111
 
29183
30112
  // ../theme-core/src/shared/componentStyles.ts
29184
- import { z as z26 } from "zod";
30113
+ import { z as z29 } from "zod";
29185
30114
  var componentBorderSchema, componentShadowSchema;
29186
30115
  var init_componentStyles = __esm({
29187
30116
  "../theme-core/src/shared/componentStyles.ts"() {
29188
30117
  "use strict";
29189
- componentBorderSchema = z26.object({
29190
- width: z26.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
29191
- style: z26.enum(["solid", "dashed"]).default("solid"),
29192
- colorToken: z26.string().optional()
30118
+ componentBorderSchema = z29.object({
30119
+ width: z29.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
30120
+ style: z29.enum(["solid", "dashed"]).default("solid"),
30121
+ colorToken: z29.string().optional()
29193
30122
  // defaults to "border" if not set
29194
30123
  });
29195
- componentShadowSchema = z26.object({
29196
- elevation: z26.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
30124
+ componentShadowSchema = z29.object({
30125
+ elevation: z29.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
29197
30126
  });
29198
30127
  }
29199
30128
  });
@@ -29212,7 +30141,7 @@ var init_generateHeaderCss = __esm({
29212
30141
  "use strict";
29213
30142
  init_resolver();
29214
30143
  init_generateNavLinkCSS();
29215
- init_presets();
30144
+ init_presets2();
29216
30145
  init_shared6();
29217
30146
  init_breakpoints();
29218
30147
  }
@@ -29232,7 +30161,7 @@ var init_generateFooterCss = __esm({
29232
30161
  "use strict";
29233
30162
  init_resolver();
29234
30163
  init_generateNavLinkCSS();
29235
- init_presets();
30164
+ init_presets2();
29236
30165
  }
29237
30166
  });
29238
30167
 
@@ -29886,7 +30815,7 @@ var init_blockOverrides = __esm({
29886
30815
  });
29887
30816
 
29888
30817
  // ../theme-core/src/customCss/validation.ts
29889
- import { z as z27 } from "zod";
30818
+ import { z as z30 } from "zod";
29890
30819
  function isForbiddenSelectorPart(part) {
29891
30820
  const normalized = part.toLowerCase().trim();
29892
30821
  if (!normalized) return true;
@@ -29938,38 +30867,38 @@ var init_validation3 = __esm({
29938
30867
  UNIVERSAL_SELECTOR = "*";
29939
30868
  REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
29940
30869
  JAVASCRIPT_URL_PATTERN = /javascript\s*:/i;
29941
- selectorSchema = z27.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
30870
+ selectorSchema = z30.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
29942
30871
  (s) => !containsForbiddenSelector(s),
29943
30872
  { message: "Global selectors (:root, html, body, *) are not allowed" }
29944
30873
  );
29945
- declarationValueSchema = z27.string().max(500, "Declaration value too long (max 500 characters)").refine(
30874
+ declarationValueSchema = z30.string().max(500, "Declaration value too long (max 500 characters)").refine(
29946
30875
  (v) => !containsRemoteUrl(v),
29947
30876
  { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
29948
30877
  ).refine(
29949
30878
  (v) => !containsJavascriptUrl(v),
29950
30879
  { message: "javascript: URLs are not allowed" }
29951
30880
  );
29952
- declarationsSchema = z27.record(
29953
- z27.string().min(1).max(100),
30881
+ declarationsSchema = z30.record(
30882
+ z30.string().min(1).max(100),
29954
30883
  // property name
29955
30884
  declarationValueSchema
29956
30885
  // property value
29957
30886
  );
29958
- customCssRuleSchema = z27.object({
29959
- id: z27.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
30887
+ customCssRuleSchema = z30.object({
30888
+ id: z30.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
29960
30889
  selector: selectorSchema,
29961
30890
  declarations: declarationsSchema
29962
30891
  });
29963
30892
  blockCustomCssRuleSchema = customCssRuleSchema.extend({
29964
- blockKind: z27.string().min(1, "Block kind is required").max(50, "Block kind too long")
30893
+ blockKind: z30.string().min(1, "Block kind is required").max(50, "Block kind too long")
29965
30894
  });
29966
- customCssRulesSchema = z27.array(customCssRuleSchema).optional();
29967
- blockCustomCssRulesSchema = z27.array(blockCustomCssRuleSchema).optional();
30895
+ customCssRulesSchema = z30.array(customCssRuleSchema).optional();
30896
+ blockCustomCssRulesSchema = z30.array(blockCustomCssRuleSchema).optional();
29968
30897
  }
29969
30898
  });
29970
30899
 
29971
30900
  // ../theme-core/src/customCss/atRuleValidation.ts
29972
- import { z as z28 } from "zod";
30901
+ import { z as z31 } from "zod";
29973
30902
  function isValidKeyframeOffset(offset) {
29974
30903
  const trimmed = offset.trim().toLowerCase();
29975
30904
  if (trimmed === "from" || trimmed === "to") return true;
@@ -29990,75 +30919,75 @@ var init_atRuleValidation = __esm({
29990
30919
  ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
29991
30920
  BLOCKED_AT_RULES = ["@import", "@charset"];
29992
30921
  BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
29993
- ruleIdSchema = z28.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
29994
- nestedRuleSchema = z28.object({
30922
+ ruleIdSchema = z31.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
30923
+ nestedRuleSchema = z31.object({
29995
30924
  selector: selectorSchema,
29996
30925
  declarations: declarationsSchema
29997
30926
  });
29998
- keyframeOffsetSchema = z28.string().transform((offset) => offset.trim()).refine(
30927
+ keyframeOffsetSchema = z31.string().transform((offset) => offset.trim()).refine(
29999
30928
  (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
30000
30929
  { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
30001
30930
  ).refine(
30002
30931
  isValidKeyframeOffset,
30003
30932
  { message: "Keyframe offset must be between 0% and 100%" }
30004
30933
  );
30005
- animationNameSchema = z28.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
30934
+ animationNameSchema = z31.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
30006
30935
  (name) => ANIMATION_NAME_PATTERN.test(name),
30007
30936
  { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
30008
30937
  );
30009
- keyframeSchema = z28.object({
30938
+ keyframeSchema = z31.object({
30010
30939
  offset: keyframeOffsetSchema,
30011
30940
  declarations: declarationsSchema
30012
30941
  });
30013
- keyframesAtRuleSchema = z28.object({
30942
+ keyframesAtRuleSchema = z31.object({
30014
30943
  id: ruleIdSchema,
30015
- type: z28.literal("keyframes"),
30944
+ type: z31.literal("keyframes"),
30016
30945
  name: animationNameSchema,
30017
- frames: z28.array(keyframeSchema).min(1, "At least one keyframe is required")
30946
+ frames: z31.array(keyframeSchema).min(1, "At least one keyframe is required")
30018
30947
  });
30019
- fontFaceDeclarationsSchema = z28.record(z28.string().min(1).max(100), declarationValueSchema).refine(
30948
+ fontFaceDeclarationsSchema = z31.record(z31.string().min(1).max(100), declarationValueSchema).refine(
30020
30949
  (decls) => "fontFamily" in decls || "font-family" in decls,
30021
30950
  { message: "font-family is required in @font-face" }
30022
30951
  );
30023
- fontFaceAtRuleSchema = z28.object({
30952
+ fontFaceAtRuleSchema = z31.object({
30024
30953
  id: ruleIdSchema,
30025
- type: z28.literal("font-face"),
30954
+ type: z31.literal("font-face"),
30026
30955
  declarations: fontFaceDeclarationsSchema
30027
30956
  });
30028
- mediaQuerySchema = z28.string().min(1, "Media query is required").max(200, "Media query too long");
30029
- mediaAtRuleSchema = z28.object({
30957
+ mediaQuerySchema = z31.string().min(1, "Media query is required").max(200, "Media query too long");
30958
+ mediaAtRuleSchema = z31.object({
30030
30959
  id: ruleIdSchema,
30031
- type: z28.literal("media"),
30960
+ type: z31.literal("media"),
30032
30961
  query: mediaQuerySchema,
30033
- rules: z28.array(nestedRuleSchema).min(1, "At least one rule is required")
30962
+ rules: z31.array(nestedRuleSchema).min(1, "At least one rule is required")
30034
30963
  });
30035
- supportsConditionSchema = z28.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
30036
- supportsAtRuleSchema = z28.object({
30964
+ supportsConditionSchema = z31.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
30965
+ supportsAtRuleSchema = z31.object({
30037
30966
  id: ruleIdSchema,
30038
- type: z28.literal("supports"),
30967
+ type: z31.literal("supports"),
30039
30968
  condition: supportsConditionSchema,
30040
- rules: z28.array(nestedRuleSchema).min(1, "At least one rule is required")
30969
+ rules: z31.array(nestedRuleSchema).min(1, "At least one rule is required")
30041
30970
  });
30042
- rawCssSchema = z28.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
30971
+ rawCssSchema = z31.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
30043
30972
  (css) => css.trim().startsWith("@"),
30044
30973
  { message: "Raw at-rule must start with @" }
30045
30974
  ).refine(
30046
30975
  (css) => !containsBlockedAtRule(css),
30047
30976
  { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
30048
30977
  );
30049
- rawAtRuleSchema = z28.object({
30978
+ rawAtRuleSchema = z31.object({
30050
30979
  id: ruleIdSchema,
30051
- type: z28.literal("raw"),
30980
+ type: z31.literal("raw"),
30052
30981
  css: rawCssSchema
30053
30982
  });
30054
- customCssAtRuleSchema = z28.discriminatedUnion("type", [
30983
+ customCssAtRuleSchema = z31.discriminatedUnion("type", [
30055
30984
  keyframesAtRuleSchema,
30056
30985
  fontFaceAtRuleSchema,
30057
30986
  mediaAtRuleSchema,
30058
30987
  supportsAtRuleSchema,
30059
30988
  rawAtRuleSchema
30060
30989
  ]);
30061
- customCssAtRulesSchema = z28.array(customCssAtRuleSchema).optional();
30990
+ customCssAtRulesSchema = z31.array(customCssAtRuleSchema).optional();
30062
30991
  }
30063
30992
  });
30064
30993
 
@@ -30078,9 +31007,35 @@ var init_compile = __esm({
30078
31007
  });
30079
31008
 
30080
31009
  // ../theme-core/src/responsiveMode.ts
31010
+ function escapeRegExp(value) {
31011
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
31012
+ }
31013
+ function buildResponsiveScopeRulePatternSource() {
31014
+ return [
31015
+ "@scope",
31016
+ "\\(\\[",
31017
+ escapeRegExp(THEME_RESPONSIVE_MODE_ATTR),
31018
+ '="(?:viewport|container)"\\]\\)',
31019
+ "to",
31020
+ "\\((?::scope )?\\[",
31021
+ escapeRegExp(THEME_RESPONSIVE_MODE_ATTR),
31022
+ "\\]\\)",
31023
+ "\\{"
31024
+ ].join("\\s*");
31025
+ }
31026
+ var THEME_RESPONSIVE_MODE_ATTR, RESPONSIVE_SCOPE_RULE_PATTERN, RESPONSIVE_SCOPE_RULE_AT_PATTERN;
30081
31027
  var init_responsiveMode = __esm({
30082
31028
  "../theme-core/src/responsiveMode.ts"() {
30083
31029
  "use strict";
31030
+ THEME_RESPONSIVE_MODE_ATTR = "data-rb-responsive-mode";
31031
+ RESPONSIVE_SCOPE_RULE_PATTERN = new RegExp(
31032
+ buildResponsiveScopeRulePatternSource(),
31033
+ "g"
31034
+ );
31035
+ RESPONSIVE_SCOPE_RULE_AT_PATTERN = new RegExp(
31036
+ buildResponsiveScopeRulePatternSource(),
31037
+ "y"
31038
+ );
30084
31039
  }
30085
31040
  });
30086
31041
 
@@ -30127,7 +31082,7 @@ var init_buildThemeRuntime = __esm({
30127
31082
  init_expandPalette();
30128
31083
  init_fontFamily();
30129
31084
  init_generateCssVars();
30130
- init_shadow();
31085
+ init_shadow2();
30131
31086
  init_generateButtonCss();
30132
31087
  init_generateCardCss();
30133
31088
  init_generateAccordionCss();
@@ -31166,216 +32121,92 @@ function brandNonEmptyString(value, label) {
31166
32121
  }
31167
32122
 
31168
32123
  // ../theme-core/src/schema.ts
31169
- import { z as z33 } from "zod";
32124
+ import { z as z35 } from "zod";
31170
32125
 
31171
32126
  // ../theme-core/src/lib/media.ts
31172
- import z29 from "zod";
31173
- var hotspotSchema2 = z29.object({
31174
- x: z29.number().min(0).max(1),
31175
- y: z29.number().min(0).max(1),
31176
- radius: z29.number().optional()
31177
- });
31178
- var rotationSchema2 = z29.union([z29.literal(0), z29.literal(90), z29.literal(180), z29.literal(270)]);
31179
- var rectSchema2 = z29.tuple([z29.number(), z29.number(), z29.number(), z29.number()]);
31180
- var aspectCropSchema2 = z29.object({
31181
- aspect: z29.preprocess((value) => value == null ? void 0 : value, z29.string().optional()),
31182
- rect: z29.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
31183
- hotspot: z29.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
31184
- rotation: z29.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
31185
- });
31186
- var transformSchema2 = z29.object({
31187
- aspectCrops: z29.preprocess((value) => {
32127
+ import z32 from "zod";
32128
+ var hotspotSchema2 = z32.object({
32129
+ x: z32.number().min(0).max(1),
32130
+ y: z32.number().min(0).max(1),
32131
+ radius: z32.number().optional()
32132
+ });
32133
+ var rotationSchema2 = z32.union([z32.literal(0), z32.literal(90), z32.literal(180), z32.literal(270)]);
32134
+ var rectSchema2 = z32.tuple([z32.number(), z32.number(), z32.number(), z32.number()]);
32135
+ var aspectCropSchema2 = z32.object({
32136
+ aspect: z32.preprocess((value) => value == null ? void 0 : value, z32.string().optional()),
32137
+ rect: z32.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
32138
+ hotspot: z32.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
32139
+ rotation: z32.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
32140
+ });
32141
+ var transformSchema2 = z32.object({
32142
+ aspectCrops: z32.preprocess((value) => {
31188
32143
  if (!value || typeof value !== "object" || Array.isArray(value)) {
31189
32144
  return void 0;
31190
32145
  }
31191
32146
  return value;
31192
- }, z29.record(z29.string(), aspectCropSchema2.catch({}))).optional(),
32147
+ }, z32.record(z32.string(), aspectCropSchema2.catch({}))).optional(),
31193
32148
  rect: rectSchema2.optional(),
31194
32149
  hotspot: hotspotSchema2.optional(),
31195
32150
  rotation: rotationSchema2.optional()
31196
32151
  });
31197
- var mediaSchema2 = z29.object({
31198
- type: z29.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
31199
- purpose: z29.string().optional(),
31200
- placeholder: z29.boolean().default(true).optional(),
31201
- assetId: z29.string().optional(),
31202
- identifier: z29.string().optional(),
31203
- src: z29.string().optional(),
31204
- alt: z29.string().optional(),
31205
- filename: z29.string().optional(),
31206
- mimeType: z29.string().optional(),
31207
- width: z29.number().optional(),
31208
- height: z29.number().optional(),
31209
- storageBucket: z29.string().optional(),
31210
- storagePath: z29.string().optional(),
32152
+ var mediaSchema2 = z32.object({
32153
+ type: z32.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
32154
+ purpose: z32.string().optional(),
32155
+ placeholder: z32.boolean().default(true).optional(),
32156
+ assetId: z32.string().optional(),
32157
+ identifier: z32.string().optional(),
32158
+ src: z32.string().optional(),
32159
+ alt: z32.string().optional(),
32160
+ filename: z32.string().optional(),
32161
+ mimeType: z32.string().optional(),
32162
+ width: z32.number().optional(),
32163
+ height: z32.number().optional(),
32164
+ storageBucket: z32.string().optional(),
32165
+ storagePath: z32.string().optional(),
31211
32166
  transform: transformSchema2.optional()
31212
32167
  });
31213
32168
 
31214
- // ../theme-core/src/buttons/types.ts
31215
- import { z as z30 } from "zod";
31216
- var cornerStyleSchema = z30.enum(["square", "rounded", "pill"]);
31217
- var shadowSizeSchema = z30.enum(["none", "low", "medium", "high"]);
31218
- var textTransformSchema = z30.enum(["none", "uppercase", "lowercase", "capitalize"]);
31219
- var fontWeightSchema = z30.union([z30.literal(500), z30.literal(600), z30.literal(700)]);
31220
- var buttonTypographySchema = z30.enum(["body", "heading"]);
31221
- var hoverTransformSchema = z30.enum(["none", "lift", "scale", "press"]);
31222
- var hoverColorSchema = z30.enum(["none", "brighten", "darken", "saturate", "token"]);
31223
- var buttonPaddingPresetSchema = z30.enum(["compact", "default", "spacious"]);
31224
- var gradientStyleSchema = z30.enum(["linear", "radial", "conic"]);
31225
- var gradientSharpnessSchema = z30.enum(["smooth", "medium", "hard"]);
31226
- var buttonSizeNameSchema = z30.enum(["sm", "md", "lg", "xl"]);
31227
- var buttonSizeConfigSchema = z30.object({
31228
- padding: z30.string(),
31229
- fontSize: z30.string().optional()
31230
- });
31231
- var buttonSizesSchema = z30.object({
31232
- sm: buttonSizeConfigSchema,
31233
- md: buttonSizeConfigSchema,
31234
- lg: buttonSizeConfigSchema,
31235
- xl: buttonSizeConfigSchema.optional()
31236
- });
31237
- var backgroundTreatmentSchema = z30.enum(["solid", "gradient", "outline", "ghost"]);
31238
- var outlineHoverEffectSchema = z30.enum([
31239
- "border-glow",
31240
- "border-shift",
31241
- "border-grow",
31242
- "fill-transition",
31243
- "border-trace"
31244
- ]);
31245
- var buttonGlobalSettingsSchema = z30.object({
31246
- cornerStyle: cornerStyleSchema,
31247
- cornerRadius: z30.number().min(0).max(24).optional(),
31248
- shadow: shadowSizeSchema,
31249
- textTransform: textTransformSchema,
31250
- fontWeight: fontWeightSchema,
31251
- borderWidth: z30.union([z30.literal(1), z30.literal(2), z30.literal(3)]),
31252
- // Typography source (body or heading)
31253
- typography: buttonTypographySchema.optional(),
31254
- // Italic style
31255
- italic: z30.boolean().optional(),
31256
- // Padding preset (applies to all variants unless overridden)
31257
- paddingPreset: buttonPaddingPresetSchema.optional(),
31258
- hoverTransform: hoverTransformSchema,
31259
- hoverColor: hoverColorSchema,
31260
- // When hoverColor is 'token', this specifies which token to use
31261
- hoverColorToken: z30.string().optional(),
31262
- // Gradient settings (if any variant uses gradients)
31263
- gradientStyle: gradientStyleSchema.optional(),
31264
- gradientAngle: z30.number().min(0).max(360).optional(),
31265
- gradientSharpness: gradientSharpnessSchema.optional()
31266
- });
31267
- var gradientDirectionSchema = z30.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
31268
- var buttonBackgroundSchema = z30.discriminatedUnion("type", [
31269
- z30.object({ type: z30.literal("solid"), colorToken: z30.string() }),
31270
- z30.object({
31271
- type: z30.literal("gradient"),
31272
- stops: z30.array(z30.string()).min(2),
31273
- direction: gradientDirectionSchema
31274
- }),
31275
- z30.object({ type: z30.literal("transparent") })
31276
- ]);
31277
- var effectApplicationSchema2 = z30.object({
31278
- effectId: z30.string(),
31279
- options: z30.record(z30.string(), z30.any()).optional()
31280
- });
31281
- var buttonBorderSchema = z30.object({
31282
- widthClass: z30.string(),
31283
- colorToken: z30.string()
31284
- });
31285
- var buttonVariantLegacySchema = z30.object({
31286
- id: z30.string(),
31287
- name: z30.string().min(1).max(20),
31288
- enabled: z30.boolean(),
31289
- priority: z30.union([z30.literal(1), z30.literal(2), z30.literal(3)]),
31290
- backgroundTreatment: backgroundTreatmentSchema,
31291
- color: z30.string().optional(),
31292
- gradientColors: z30.tuple([z30.string(), z30.string()]).optional(),
31293
- borderColor: z30.string().optional(),
31294
- outlineHoverEffect: outlineHoverEffectSchema.optional(),
31295
- effectPreset: z30.string().optional()
31296
- });
31297
- var buttonVariantSchema = z30.object({
31298
- id: z30.string(),
31299
- name: z30.string().min(1).max(20),
31300
- enabled: z30.boolean(),
31301
- priority: z30.union([z30.literal(1), z30.literal(2), z30.literal(3)]),
31302
- // Base appearance (token-based)
31303
- background: buttonBackgroundSchema,
31304
- textColorToken: z30.string(),
31305
- borderRadius: z30.string(),
31306
- // Optional shadow override (uses theme.shadow if not specified)
31307
- shadow: z30.object({
31308
- elevation: z30.enum(["none", "low", "medium", "high"]),
31309
- softness: z30.enum(["crisp", "soft", "hard"]).nullable(),
31310
- position: z30.enum(["bottom", "bottom-right"]).default("bottom")
31311
- }).optional(),
31312
- // Border (optional)
31313
- border: buttonBorderSchema.optional(),
31314
- // Padding (optional, defaults to "0.5rem 1rem")
31315
- padding: z30.string().optional(),
31316
- // Font size (optional, Tailwind text size class)
31317
- fontSize: z30.string().optional(),
31318
- // Hover background token (per-variant override, takes precedence over global hoverColorToken)
31319
- hoverBackgroundToken: z30.string().optional(),
31320
- // Effect composition
31321
- effects: z30.object({
31322
- base: z30.array(effectApplicationSchema2).optional(),
31323
- hover: z30.array(effectApplicationSchema2).optional(),
31324
- active: z30.array(effectApplicationSchema2).optional(),
31325
- focus: z30.array(effectApplicationSchema2).optional()
31326
- }).optional()
31327
- });
31328
- var buttonSystemSchema = z30.object({
31329
- global: buttonGlobalSettingsSchema,
31330
- variants: z30.array(buttonVariantSchema).min(1).max(6),
31331
- sizes: buttonSizesSchema.optional()
31332
- });
31333
-
31334
- // ../theme-core/src/buttons/index.ts
31335
- init_generateButtonCss();
31336
- init_generateDefaultButtonSystem();
31337
- init_constants();
31338
- init_registry();
31339
- init_transform();
32169
+ // ../theme-core/src/schema.ts
32170
+ init_buttons();
31340
32171
 
31341
32172
  // ../theme-core/src/cards/types.ts
31342
- import { z as z31 } from "zod";
31343
- var cardSpacingSchema = z31.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
31344
- var gradientDirectionSchema2 = z31.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
31345
- var cardBackgroundSchema = z31.discriminatedUnion("type", [
31346
- z31.object({ type: z31.literal("solid"), colorToken: z31.string() }),
31347
- z31.object({
31348
- type: z31.literal("gradient"),
31349
- fromToken: z31.string(),
31350
- toToken: z31.string(),
32173
+ import { z as z33 } from "zod";
32174
+ var cardSpacingSchema = z33.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
32175
+ var gradientDirectionSchema2 = z33.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
32176
+ var cardBackgroundSchema = z33.discriminatedUnion("type", [
32177
+ z33.object({ type: z33.literal("solid"), colorToken: z33.string() }),
32178
+ z33.object({
32179
+ type: z33.literal("gradient"),
32180
+ fromToken: z33.string(),
32181
+ toToken: z33.string(),
31351
32182
  direction: gradientDirectionSchema2
31352
32183
  }),
31353
- z31.object({ type: z31.literal("transparent") })
32184
+ z33.object({ type: z33.literal("transparent") })
31354
32185
  ]);
31355
- var cardBorderSchema = z31.object({
31356
- widthClass: z31.string(),
31357
- colorToken: z31.string()
31358
- });
31359
- var cardVariantSchema2 = z31.object({
31360
- id: z31.string(),
31361
- name: z31.string().min(1).max(20),
31362
- enabled: z31.boolean(),
31363
- priority: z31.union([z31.literal(1), z31.literal(2), z31.literal(3)]),
32186
+ var cardBorderSchema = z33.object({
32187
+ widthClass: z33.string(),
32188
+ colorToken: z33.string()
32189
+ });
32190
+ var cardVariantSchema2 = z33.object({
32191
+ id: z33.string(),
32192
+ name: z33.string().min(1).max(20),
32193
+ enabled: z33.boolean(),
32194
+ priority: z33.union([z33.literal(1), z33.literal(2), z33.literal(3)]),
31364
32195
  // Appearance (token-based)
31365
32196
  background: cardBackgroundSchema,
31366
32197
  spacing: cardSpacingSchema,
31367
32198
  // Optional overrides (uses theme defaults if not specified)
31368
- shadow: z31.object({
31369
- elevation: z31.enum(["none", "low", "medium", "high"]),
31370
- softness: z31.enum(["crisp", "soft", "hard"]).nullable(),
31371
- position: z31.enum(["bottom", "bottom-right"]).default("bottom")
32199
+ shadow: z33.object({
32200
+ elevation: z33.enum(["none", "low", "medium", "high"]),
32201
+ softness: z33.enum(["crisp", "soft", "hard"]).nullable(),
32202
+ position: z33.enum(["bottom", "bottom-right"]).default("bottom")
31372
32203
  }).optional(),
31373
- corners: z31.enum(["square", "soft", "rounded", "pill"]).optional(),
32204
+ corners: z33.enum(["square", "soft", "rounded", "pill"]).optional(),
31374
32205
  // Border (optional)
31375
32206
  border: cardBorderSchema.optional()
31376
32207
  });
31377
- var cardSystemSchema = z31.object({
31378
- variants: z31.array(cardVariantSchema2).min(1).max(3)
32208
+ var cardSystemSchema = z33.object({
32209
+ variants: z33.array(cardVariantSchema2).min(1).max(3)
31379
32210
  });
31380
32211
 
31381
32212
  // ../theme-core/src/cards/index.ts
@@ -31384,90 +32215,90 @@ init_generateCardCss();
31384
32215
  init_generateDefaultCardSystem();
31385
32216
 
31386
32217
  // ../theme-core/src/schema.ts
31387
- init_types4();
31388
32218
  init_types7();
32219
+ init_types10();
31389
32220
 
31390
32221
  // ../theme-core/src/gradients/types.ts
31391
- import { z as z32 } from "zod";
31392
- var gradientStopSchema = z32.object({
31393
- color: z32.string(),
32222
+ import { z as z34 } from "zod";
32223
+ var gradientStopSchema = z34.object({
32224
+ color: z34.string(),
31394
32225
  // Theme color token name (e.g., 'primary-500')
31395
- position: z32.number().min(0).max(100)
32226
+ position: z34.number().min(0).max(100)
31396
32227
  // Percentage 0-100
31397
32228
  });
31398
- var gradientConfigSchema = z32.object({
31399
- type: z32.enum(["linear", "radial"]),
31400
- angle: z32.number().min(0).max(360).optional(),
32229
+ var gradientConfigSchema = z34.object({
32230
+ type: z34.enum(["linear", "radial"]),
32231
+ angle: z34.number().min(0).max(360).optional(),
31401
32232
  // For linear gradients (degrees)
31402
- position: z32.string().optional(),
32233
+ position: z34.string().optional(),
31403
32234
  // For radial gradients ('center', 'top left', etc.)
31404
- stops: z32.array(gradientStopSchema).min(2)
32235
+ stops: z34.array(gradientStopSchema).min(2)
31405
32236
  });
31406
32237
 
31407
32238
  // ../theme-core/src/schema.ts
31408
- init_types8();
32239
+ init_types11();
31409
32240
  init_validation3();
31410
32241
  init_atRuleValidation();
31411
32242
  init_shared6();
31412
- var axesSchema = z33.object({
31413
- tone: z33.enum(["minimal", "classic", "bold"]),
31414
- energy: z33.enum(["calm", "vibrant"]),
31415
- density: z33.enum(["airy", "regular", "compact"]),
31416
- mediaBias: z33.enum(["text", "media", "mixed"]),
31417
- conversionBias: z33.enum(["low", "med", "high"]),
31418
- motion: z33.enum(["subtle", "standard", "expressive"])
31419
- });
31420
- var colourHexString = z33.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
31421
- var paletteColorSchema = z33.object({
31422
- name: z33.string().min(1),
32243
+ var axesSchema = z35.object({
32244
+ tone: z35.enum(["minimal", "classic", "bold"]),
32245
+ energy: z35.enum(["calm", "vibrant"]),
32246
+ density: z35.enum(["airy", "regular", "compact"]),
32247
+ mediaBias: z35.enum(["text", "media", "mixed"]),
32248
+ conversionBias: z35.enum(["low", "med", "high"]),
32249
+ motion: z35.enum(["subtle", "standard", "expressive"])
32250
+ });
32251
+ var colourHexString = z35.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
32252
+ var paletteColorSchema = z35.object({
32253
+ name: z35.string().min(1),
31423
32254
  hex: colourHexString
31424
32255
  });
31425
- var paletteMetaSchema = z33.object({
31426
- mode: z33.enum(["light", "dark"])
32256
+ var paletteMetaSchema = z35.object({
32257
+ mode: z35.enum(["light", "dark"])
31427
32258
  });
31428
- var paletteSchema = z33.object({
31429
- colors: z33.array(paletteColorSchema),
32259
+ var paletteSchema = z35.object({
32260
+ colors: z35.array(paletteColorSchema),
31430
32261
  meta: paletteMetaSchema
31431
32262
  });
31432
- var typographyStyleSchema = z33.object({
31433
- family: z33.string().min(1),
31434
- weight: z33.enum(["light", "regular", "medium", "semibold", "bold"]),
31435
- letterSpacing: z33.enum(["tight", "normal", "loose"]),
31436
- lineHeight: z33.enum(["normal", "relaxed", "loose"])
32263
+ var typographyStyleSchema = z35.object({
32264
+ family: z35.string().min(1),
32265
+ weight: z35.enum(["light", "regular", "medium", "semibold", "bold"]),
32266
+ letterSpacing: z35.enum(["tight", "normal", "loose"]),
32267
+ lineHeight: z35.enum(["normal", "relaxed", "loose"])
31437
32268
  });
31438
32269
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
31439
- size: z33.enum(["md", "lg", "xl"])
32270
+ size: z35.enum(["md", "lg", "xl"])
31440
32271
  });
31441
- var headingSizeSchema = z33.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
31442
- var headingTypographyOverridesSchema = z33.object({
31443
- weight: z33.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
31444
- letterSpacing: z33.enum(["tight", "normal", "loose"]).nullable().optional(),
32272
+ var headingSizeSchema = z35.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
32273
+ var headingTypographyOverridesSchema = z35.object({
32274
+ weight: z35.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
32275
+ letterSpacing: z35.enum(["tight", "normal", "loose"]).nullable().optional(),
31445
32276
  size: headingSizeSchema.nullable().optional(),
31446
- lineHeight: z33.enum(["normal", "relaxed", "loose"]).nullable().optional(),
31447
- italic: z33.boolean().nullable().optional(),
31448
- colorToken: z33.string().min(1).nullable().optional()
32277
+ lineHeight: z35.enum(["normal", "relaxed", "loose"]).nullable().optional(),
32278
+ italic: z35.boolean().nullable().optional(),
32279
+ colorToken: z35.string().min(1).nullable().optional()
31449
32280
  // Palette token name for heading color
31450
32281
  });
31451
32282
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
31452
- case: z33.enum(["uppercase", "normal", "smallCaps"]).nullable(),
31453
- italic: z33.boolean().nullable(),
31454
- colorToken: z33.string().min(1).nullable().optional()
32283
+ case: z35.enum(["uppercase", "normal", "smallCaps"]).nullable(),
32284
+ italic: z35.boolean().nullable(),
32285
+ colorToken: z35.string().min(1).nullable().optional()
31455
32286
  // Palette token name for heading color
31456
32287
  });
31457
- var proseLinkUnderlineStyleSchema = z33.enum(["solid", "dotted", "dashed"]);
31458
- var proseLinkUnderlineThicknessSchema = z33.enum(["auto", "fromFont", "thin", "medium", "thick"]);
31459
- var proseLinkUnderlineOffsetSchema = z33.enum(["auto", "tight", "normal", "loose"]);
31460
- var proseLinkStyleSchema = z33.object({
31461
- colorToken: z33.string().min(1).optional(),
31462
- hoverColorToken: z33.string().min(1).optional(),
31463
- underline: z33.boolean().optional(),
31464
- decorationColorToken: z33.string().min(1).optional(),
31465
- hoverDecorationColorToken: z33.string().min(1).optional(),
32288
+ var proseLinkUnderlineStyleSchema = z35.enum(["solid", "dotted", "dashed"]);
32289
+ var proseLinkUnderlineThicknessSchema = z35.enum(["auto", "fromFont", "thin", "medium", "thick"]);
32290
+ var proseLinkUnderlineOffsetSchema = z35.enum(["auto", "tight", "normal", "loose"]);
32291
+ var proseLinkStyleSchema = z35.object({
32292
+ colorToken: z35.string().min(1).optional(),
32293
+ hoverColorToken: z35.string().min(1).optional(),
32294
+ underline: z35.boolean().optional(),
32295
+ decorationColorToken: z35.string().min(1).optional(),
32296
+ hoverDecorationColorToken: z35.string().min(1).optional(),
31466
32297
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
31467
32298
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
31468
32299
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
31469
32300
  });
31470
- var semanticSpacingSchema = z33.enum([
32301
+ var semanticSpacingSchema = z35.enum([
31471
32302
  "none",
31472
32303
  "compact",
31473
32304
  "cozy",
@@ -31475,62 +32306,62 @@ var semanticSpacingSchema = z33.enum([
31475
32306
  "comfortable",
31476
32307
  "spacious"
31477
32308
  ]);
31478
- var boxRoundedSchema = z33.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
31479
- var boxBackgroundOverlaySchema = z33.object({
31480
- type: z33.enum(["none", "color", "gradient"]).nullable().optional(),
31481
- color: z33.string().nullable().optional(),
31482
- gradient: z33.string().nullable().optional(),
31483
- opacity: z33.number().min(0).max(1).nullable().optional()
31484
- });
31485
- var boxBackgroundSchema = z33.object({
31486
- type: z33.enum(["color", "gradient", "image"]).optional(),
31487
- color: z33.string().nullable().optional(),
31488
- gradient: z33.string().nullable().optional(),
32309
+ var boxRoundedSchema = z35.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
32310
+ var boxBackgroundOverlaySchema = z35.object({
32311
+ type: z35.enum(["none", "color", "gradient"]).nullable().optional(),
32312
+ color: z35.string().nullable().optional(),
32313
+ gradient: z35.string().nullable().optional(),
32314
+ opacity: z35.number().min(0).max(1).nullable().optional()
32315
+ });
32316
+ var boxBackgroundSchema = z35.object({
32317
+ type: z35.enum(["color", "gradient", "image"]).optional(),
32318
+ color: z35.string().nullable().optional(),
32319
+ gradient: z35.string().nullable().optional(),
31489
32320
  image: mediaSchema2.nullable().optional(),
31490
- objectFit: z33.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
31491
- scale: z33.string().nullable().optional(),
31492
- position: z33.string().nullable().optional(),
31493
- opacity: z33.number().min(0).max(1).nullable().optional(),
32321
+ objectFit: z35.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
32322
+ scale: z35.string().nullable().optional(),
32323
+ position: z35.string().nullable().optional(),
32324
+ opacity: z35.number().min(0).max(1).nullable().optional(),
31494
32325
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
31495
- textColor: z33.string().nullable().optional(),
31496
- headingColor: z33.string().nullable().optional()
32326
+ textColor: z35.string().nullable().optional(),
32327
+ headingColor: z35.string().nullable().optional()
31497
32328
  });
31498
- var sectionStylesOverrideSchema = z33.object({
32329
+ var sectionStylesOverrideSchema = z35.object({
31499
32330
  background: boxBackgroundSchema.nullable().optional(),
31500
32331
  spacing: semanticSpacingSchema.nullable().optional(),
31501
- minHeight: z33.enum(["none", "hero", "immersive"]).nullable().optional()
32332
+ minHeight: z35.enum(["none", "hero", "immersive"]).nullable().optional()
31502
32333
  });
31503
- var containerStylesOverrideSchema = z33.object({
32334
+ var containerStylesOverrideSchema = z35.object({
31504
32335
  background: boxBackgroundSchema.nullable().optional(),
31505
32336
  spacing: semanticSpacingSchema.nullable().optional(),
31506
- raised: z33.boolean().nullable().optional(),
32337
+ raised: z35.boolean().nullable().optional(),
31507
32338
  rounded: boxRoundedSchema.nullable().optional(),
31508
- fullWidth: z33.boolean().nullable().optional()
32339
+ fullWidth: z35.boolean().nullable().optional()
31509
32340
  });
31510
- var cardBorderOverrideSchema = z33.object({
31511
- enabled: z33.boolean().nullable().optional(),
31512
- width: z33.enum(["none", "1", "2", "3"]).nullable().optional(),
31513
- colorToken: z33.string().nullable().optional()
32341
+ var cardBorderOverrideSchema = z35.object({
32342
+ enabled: z35.boolean().nullable().optional(),
32343
+ width: z35.enum(["none", "1", "2", "3"]).nullable().optional(),
32344
+ colorToken: z35.string().nullable().optional()
31514
32345
  });
31515
- var cardStylesOverrideSchema = z33.object({
32346
+ var cardStylesOverrideSchema = z35.object({
31516
32347
  background: boxBackgroundSchema.nullable().optional(),
31517
32348
  border: cardBorderOverrideSchema.nullable().optional(),
31518
32349
  spacing: semanticSpacingSchema.nullable().optional(),
31519
- raised: z33.boolean().nullable().optional(),
32350
+ raised: z35.boolean().nullable().optional(),
31520
32351
  rounded: boxRoundedSchema.nullable().optional()
31521
32352
  });
31522
- var blockStyleOverridesSchema = z33.object({
32353
+ var blockStyleOverridesSchema = z35.object({
31523
32354
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
31524
32355
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
31525
32356
  cardStyles: cardStylesOverrideSchema.nullable().optional()
31526
32357
  });
31527
- var blockThemeOverrideSchema = z33.object({
31528
- typography: z33.object({
32358
+ var blockThemeOverrideSchema = z35.object({
32359
+ typography: z35.object({
31529
32360
  proseLinkStyle: proseLinkStyleSchema.optional()
31530
32361
  }).optional(),
31531
32362
  styles: blockStyleOverridesSchema.optional()
31532
32363
  });
31533
- var typographyScaleSchema = z33.enum([
32364
+ var typographyScaleSchema = z35.enum([
31534
32365
  // New intuitive names
31535
32366
  "compact",
31536
32367
  // ratio 1.2 (was minorThird)
@@ -31543,9 +32374,9 @@ var typographyScaleSchema = z33.enum([
31543
32374
  "majorThird",
31544
32375
  "perfectFourth"
31545
32376
  ]);
31546
- var typographySchema = z33.object({
32377
+ var typographySchema = z35.object({
31547
32378
  body: bodyTypographyStyleSchema,
31548
- headings: z33.object({
32379
+ headings: z35.object({
31549
32380
  default: headingTypographyStyleSchema,
31550
32381
  h1: headingTypographyOverridesSchema,
31551
32382
  h2: headingTypographyOverridesSchema,
@@ -31558,41 +32389,41 @@ var typographySchema = z33.object({
31558
32389
  scale: typographyScaleSchema,
31559
32390
  proseLinkStyle: proseLinkStyleSchema.optional()
31560
32391
  });
31561
- var spaceSchema = z33.enum(["comfortable", "standard", "dense"]);
31562
- var corners = z33.enum(["square", "soft", "rounded", "pill"]);
31563
- var shadow = z33.object({
31564
- elevation: z33.enum(["none", "low", "medium", "high"]),
31565
- softness: z33.enum(["crisp", "soft", "hard"]).nullable(),
31566
- position: z33.enum(["bottom", "bottom-right"]).default("bottom")
32392
+ var spaceSchema = z35.enum(["comfortable", "standard", "dense"]);
32393
+ var corners = z35.enum(["square", "soft", "rounded", "pill"]);
32394
+ var shadow = z35.object({
32395
+ elevation: z35.enum(["none", "low", "medium", "high"]),
32396
+ softness: z35.enum(["crisp", "soft", "hard"]).nullable(),
32397
+ position: z35.enum(["bottom", "bottom-right"]).default("bottom")
31567
32398
  });
31568
- var border = z33.object({
31569
- width: z33.enum(["none", "hairline", "thin", "thick"]),
31570
- style: z33.enum(["solid", "dashed"])
32399
+ var border = z35.object({
32400
+ width: z35.enum(["none", "hairline", "thin", "thick"]),
32401
+ style: z35.enum(["solid", "dashed"])
31571
32402
  });
31572
- var motion = z33.object({
31573
- level: z33.enum(["off", "low", "medium", "high"]),
31574
- easing: z33.enum(["standard", "snappy", "gentle"]).nullable()
32403
+ var motion = z35.object({
32404
+ level: z35.enum(["off", "low", "medium", "high"]),
32405
+ easing: z35.enum(["standard", "snappy", "gentle"]).nullable()
31575
32406
  });
31576
- var buttonStyle = z33.object({
32407
+ var buttonStyle = z35.object({
31577
32408
  shape: corners
31578
32409
  // Used for --radius-control CSS variable
31579
32410
  });
31580
- var cardStyle = z33.object({
31581
- elevation: z33.enum(["none", "low", "medium", "high"]),
31582
- border: z33.enum(["none", "subtle", "defined"]),
32411
+ var cardStyle = z35.object({
32412
+ elevation: z35.enum(["none", "low", "medium", "high"]),
32413
+ border: z35.enum(["none", "subtle", "defined"]),
31583
32414
  shape: corners,
31584
- headerStyle: z33.enum(["plain", "accentBar", "subtleBg"]).nullable(),
31585
- mediaTreatment: z33.enum(["square", "rounded", "bleed"]).nullable()
32415
+ headerStyle: z35.enum(["plain", "accentBar", "subtleBg"]).nullable(),
32416
+ mediaTreatment: z35.enum(["square", "rounded", "bleed"]).nullable()
31586
32417
  });
31587
- var inputStyle = z33.object({
32418
+ var inputStyle = z35.object({
31588
32419
  shape: corners,
31589
- border: z33.enum(["subtle", "defined", "underline"]),
31590
- focus: z33.enum(["glow", "ring", "underline"]),
31591
- label: z33.enum(["inside", "above"])
32420
+ border: z35.enum(["subtle", "defined", "underline"]),
32421
+ focus: z35.enum(["glow", "ring", "underline"]),
32422
+ label: z35.enum(["inside", "above"])
31592
32423
  });
31593
- var headerVariant = z33.enum(["classic", "centered", "transparent", "floating", "editorial"]);
31594
- var headerPositioning = z33.enum(["static", "sticky", "fixed"]);
31595
- var headerNavStyle = z33.enum([
32424
+ var headerVariant = z35.enum(["classic", "centered", "transparent", "floating", "editorial"]);
32425
+ var headerPositioning = z35.enum(["static", "sticky", "fixed"]);
32426
+ var headerNavStyle = z35.enum([
31596
32427
  "minimal",
31597
32428
  "underline",
31598
32429
  "underline-grow",
@@ -31601,82 +32432,82 @@ var headerNavStyle = z33.enum([
31601
32432
  "frosted",
31602
32433
  "solid"
31603
32434
  ]);
31604
- var navFontWeight = z33.enum(["regular", "medium", "semibold", "bold"]);
31605
- var headerMaxWidth = z33.enum(["container", "full"]);
31606
- var headerContainerSchema = z33.object({
31607
- rounded: z33.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
31608
- border: z33.boolean().default(true),
31609
- shadow: z33.boolean().default(true),
31610
- padding: z33.enum(["sm", "md", "lg"]).default("md"),
31611
- tint: z33.string().nullable().optional(),
31612
- opacity: z33.number().min(0).max(1).default(0.12)
32435
+ var navFontWeight = z35.enum(["regular", "medium", "semibold", "bold"]);
32436
+ var headerMaxWidth = z35.enum(["container", "full"]);
32437
+ var headerContainerSchema = z35.object({
32438
+ rounded: z35.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
32439
+ border: z35.boolean().default(true),
32440
+ shadow: z35.boolean().default(true),
32441
+ padding: z35.enum(["sm", "md", "lg"]).default("md"),
32442
+ tint: z35.string().nullable().optional(),
32443
+ opacity: z35.number().min(0).max(1).default(0.12)
31613
32444
  }).optional();
31614
32445
  var headerBorderSchema = componentBorderSchema.extend({
31615
- position: z33.enum(["bottom", "top", "both", "none"]).default("bottom")
32446
+ position: z35.enum(["bottom", "top", "both", "none"]).default("bottom")
31616
32447
  }).optional();
31617
- var logoStyleSchema = z33.object({
31618
- fontFamily: z33.enum(["heading", "body"]).default("heading"),
31619
- letterSpacing: z33.enum(["normal", "wide", "wider", "widest"]).default("normal"),
31620
- gradient: z33.boolean().default(false)
32448
+ var logoStyleSchema = z35.object({
32449
+ fontFamily: z35.enum(["heading", "body"]).default("heading"),
32450
+ letterSpacing: z35.enum(["normal", "wide", "wider", "widest"]).default("normal"),
32451
+ gradient: z35.boolean().default(false)
31621
32452
  }).optional();
31622
- var headerLogoTextSchema = z33.object({
31623
- mobileWrapLines: z33.union([z33.literal(1), z33.literal(2)]).optional(),
31624
- mobileMaxWidth: z33.enum(["xs", "sm", "md"]).optional(),
31625
- hideOnShrink: z33.boolean().optional()
32453
+ var headerLogoTextSchema = z35.object({
32454
+ mobileWrapLines: z35.union([z35.literal(1), z35.literal(2)]).optional(),
32455
+ mobileMaxWidth: z35.enum(["xs", "sm", "md"]).optional(),
32456
+ hideOnShrink: z35.boolean().optional()
31626
32457
  }).optional();
31627
- var navEffectsSchema = z33.object({
31628
- underlineGradient: z33.boolean().default(false),
31629
- glow: z33.boolean().default(false),
31630
- glowColor: z33.string().optional(),
31631
- neumorphic: z33.boolean().default(false)
32458
+ var navEffectsSchema = z35.object({
32459
+ underlineGradient: z35.boolean().default(false),
32460
+ glow: z35.boolean().default(false),
32461
+ glowColor: z35.string().optional(),
32462
+ neumorphic: z35.boolean().default(false)
31632
32463
  }).optional();
31633
- var dropdownStyleSchema = z33.object({
32464
+ var dropdownStyleSchema = z35.object({
31634
32465
  // Container styling
31635
- background: z33.string().default("surface"),
32466
+ background: z35.string().default("surface"),
31636
32467
  // color token
31637
- textColor: z33.string().default("text"),
32468
+ textColor: z35.string().default("text"),
31638
32469
  // color token
31639
- borderColor: z33.string().nullable().default("border"),
32470
+ borderColor: z35.string().nullable().default("border"),
31640
32471
  // null = no border
31641
- shadow: z33.enum(["none", "sm", "md", "lg"]).default("md"),
31642
- borderRadius: z33.enum(["none", "sm", "md", "lg"]).default("md"),
32472
+ shadow: z35.enum(["none", "sm", "md", "lg"]).default("md"),
32473
+ borderRadius: z35.enum(["none", "sm", "md", "lg"]).default("md"),
31643
32474
  // Link hover states (explicit control)
31644
- hoverBackground: z33.string().nullable().optional(),
32475
+ hoverBackground: z35.string().nullable().optional(),
31645
32476
  // color token, null = transparent
31646
- hoverTextColor: z33.string().nullable().optional(),
32477
+ hoverTextColor: z35.string().nullable().optional(),
31647
32478
  // color token, null = inherit
31648
32479
  // Typography
31649
- textTransform: z33.enum(["none", "uppercase", "capitalize"]).default("none"),
31650
- letterSpacing: z33.enum(["normal", "wide", "wider"]).default("normal"),
31651
- fontWeight: z33.enum(["regular", "medium", "semibold", "bold"]).optional(),
32480
+ textTransform: z35.enum(["none", "uppercase", "capitalize"]).default("none"),
32481
+ letterSpacing: z35.enum(["normal", "wide", "wider"]).default("normal"),
32482
+ fontWeight: z35.enum(["regular", "medium", "semibold", "bold"]).optional(),
31652
32483
  // optional = inherit from navWeight
31653
- textSize: z33.enum(["xs", "sm", "base", "lg"]).optional()
32484
+ textSize: z35.enum(["xs", "sm", "base", "lg"]).optional()
31654
32485
  // optional = no override (browser default)
31655
32486
  }).optional();
31656
- var headerCtaGapSchema = z33.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
31657
- var navContainerSchema = z33.object({
31658
- type: z33.enum(["none", "pill", "glass"]).default("none"),
31659
- tint: z33.string().nullable().optional(),
31660
- opacity: z33.number().min(0).max(1).default(0.15)
32487
+ var headerCtaGapSchema = z35.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
32488
+ var navContainerSchema = z35.object({
32489
+ type: z35.enum(["none", "pill", "glass"]).default("none"),
32490
+ tint: z35.string().nullable().optional(),
32491
+ opacity: z35.number().min(0).max(1).default(0.15)
31661
32492
  }).default({ type: "none", tint: null, opacity: 0.15 });
31662
- var headerBackgroundSchema = z33.object({
31663
- type: z33.enum(["color", "gradient", "image"]),
31664
- color: z33.string().nullable().optional(),
32493
+ var headerBackgroundSchema = z35.object({
32494
+ type: z35.enum(["color", "gradient", "image"]),
32495
+ color: z35.string().nullable().optional(),
31665
32496
  gradient: gradientConfigSchema.nullable().optional(),
31666
32497
  image: mediaSchema2.nullable().optional(),
31667
- textColor: z33.string().nullable().optional()
32498
+ textColor: z35.string().nullable().optional()
31668
32499
  });
31669
- var headerSchema = z33.object({
32500
+ var headerSchema = z35.object({
31670
32501
  variant: headerVariant,
31671
32502
  positioning: headerPositioning,
31672
- shrinkOnScroll: z33.boolean(),
32503
+ shrinkOnScroll: z35.boolean(),
31673
32504
  maxWidth: headerMaxWidth,
31674
32505
  logoOverride: mediaSchema2.nullable().optional(),
31675
32506
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
31676
- textColor: z33.string().nullable().optional(),
32507
+ textColor: z35.string().nullable().optional(),
31677
32508
  // Site title and general header text
31678
32509
  navStyle: headerNavStyle,
31679
- navColor: z33.string().nullable().optional(),
32510
+ navColor: z35.string().nullable().optional(),
31680
32511
  // Nav links (inherits textColor if not set)
31681
32512
  navWeight: navFontWeight.default("medium"),
31682
32513
  // New fields for header system enhancement
@@ -31695,50 +32526,50 @@ var headerSchema = z33.object({
31695
32526
  // Dropdown menu styling (nav dropdowns and mobile drawer)
31696
32527
  dropdownStyle: dropdownStyleSchema
31697
32528
  });
31698
- var footerVariant = z33.enum(["simple", "columns", "split"]);
31699
- var footerMaxWidth = z33.enum(["container", "full"]);
31700
- var footerMode = z33.enum(["default", "blocks", "default+blocks", "none"]);
31701
- var footerNavLayoutMode = z33.enum(["stack", "inline", "inline-wrap"]);
31702
- var footerNavLayoutAlign = z33.enum(["start", "center", "end", "space-between"]);
31703
- var footerSpacing = z33.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
31704
- var footerLogoPlacement = z33.enum(["left", "right", "above", "below"]);
31705
- var footerLogoSize = z33.enum(["sm", "md", "lg", "xl"]);
31706
- var footerLogoMaxHeight = z33.enum(["sm", "md", "lg", "xl"]);
31707
- var footerBottomTextLinkStyleSchema = z33.object({
31708
- colorToken: z33.string().optional(),
31709
- hoverColorToken: z33.string().nullable().optional(),
31710
- decorationColorToken: z33.string().nullable().optional(),
31711
- underline: z33.boolean().optional()
31712
- });
31713
- var footerBottomBarSchema = z33.object({
31714
- enabled: z33.boolean().optional(),
31715
- fullBleed: z33.boolean().optional(),
32529
+ var footerVariant = z35.enum(["simple", "columns", "split"]);
32530
+ var footerMaxWidth = z35.enum(["container", "full"]);
32531
+ var footerMode = z35.enum(["default", "blocks", "default+blocks", "none"]);
32532
+ var footerNavLayoutMode = z35.enum(["stack", "inline", "inline-wrap"]);
32533
+ var footerNavLayoutAlign = z35.enum(["start", "center", "end", "space-between"]);
32534
+ var footerSpacing = z35.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
32535
+ var footerLogoPlacement = z35.enum(["left", "right", "above", "below"]);
32536
+ var footerLogoSize = z35.enum(["sm", "md", "lg", "xl"]);
32537
+ var footerLogoMaxHeight = z35.enum(["sm", "md", "lg", "xl"]);
32538
+ var footerBottomTextLinkStyleSchema = z35.object({
32539
+ colorToken: z35.string().optional(),
32540
+ hoverColorToken: z35.string().nullable().optional(),
32541
+ decorationColorToken: z35.string().nullable().optional(),
32542
+ underline: z35.boolean().optional()
32543
+ });
32544
+ var footerBottomBarSchema = z35.object({
32545
+ enabled: z35.boolean().optional(),
32546
+ fullBleed: z35.boolean().optional(),
31716
32547
  background: headerBackgroundSchema.optional(),
31717
- textColor: z33.string().nullable().optional(),
31718
- textAlign: z33.enum(["left", "center", "right"]).optional(),
32548
+ textColor: z35.string().nullable().optional(),
32549
+ textAlign: z35.enum(["left", "center", "right"]).optional(),
31719
32550
  paddingY: footerSpacing.optional(),
31720
32551
  paddingX: footerSpacing.optional(),
31721
- borderTop: z33.object({
31722
- colorToken: z33.string().nullable().optional(),
31723
- width: z33.enum(["none", "thin", "medium", "thick"]).optional()
32552
+ borderTop: z35.object({
32553
+ colorToken: z35.string().nullable().optional(),
32554
+ width: z35.enum(["none", "thin", "medium", "thick"]).optional()
31724
32555
  }).optional()
31725
32556
  });
31726
- var footerNavLayoutSchema = z33.object({
32557
+ var footerNavLayoutSchema = z35.object({
31727
32558
  layout: footerNavLayoutMode.optional(),
31728
32559
  align: footerNavLayoutAlign.optional(),
31729
32560
  gapX: footerSpacing.optional(),
31730
32561
  gapY: footerSpacing.optional(),
31731
- columns: z33.number().int().min(1).max(6).optional()
32562
+ columns: z35.number().int().min(1).max(6).optional()
31732
32563
  });
31733
- var footerLogoSchema = z33.object({
31734
- showLogo: z33.boolean().default(true),
31735
- showLogoText: z33.boolean().optional(),
32564
+ var footerLogoSchema = z35.object({
32565
+ showLogo: z35.boolean().default(true),
32566
+ showLogoText: z35.boolean().optional(),
31736
32567
  placement: footerLogoPlacement.optional(),
31737
32568
  size: footerLogoSize.optional(),
31738
32569
  maxHeight: footerLogoMaxHeight.optional(),
31739
- align: z33.enum(["start", "center", "end"]).optional()
32570
+ align: z35.enum(["start", "center", "end"]).optional()
31740
32571
  });
31741
- var footerSchema = z33.object({
32572
+ var footerSchema = z35.object({
31742
32573
  /**
31743
32574
  * SDK-only footer rendering mode.
31744
32575
  *
@@ -31747,11 +32578,11 @@ var footerSchema = z33.object({
31747
32578
  mode: footerMode.optional(),
31748
32579
  variant: footerVariant,
31749
32580
  maxWidth: footerMaxWidth,
31750
- showLogoText: z33.boolean().optional(),
32581
+ showLogoText: z35.boolean().optional(),
31751
32582
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
31752
32583
  // Footer nav styling (independent from header)
31753
32584
  navStyle: headerNavStyle.default("minimal"),
31754
- navColor: z33.string().nullable().optional(),
32585
+ navColor: z35.string().nullable().optional(),
31755
32586
  navWeight: navFontWeight.default("medium"),
31756
32587
  // Full nav link customization (overrides navStyle if set)
31757
32588
  navLinkStyle: navLinkStyleSchema.optional(),
@@ -31762,15 +32593,15 @@ var footerSchema = z33.object({
31762
32593
  logo: footerLogoSchema.optional(),
31763
32594
  bottomBar: footerBottomBarSchema.optional()
31764
32595
  });
31765
- var containerPaddingPresetSchema = z33.enum(["tight", "compact", "default", "relaxed"]);
31766
- var layoutSchema = z33.object({
31767
- containerPadding: z33.object({
32596
+ var containerPaddingPresetSchema = z35.enum(["tight", "compact", "default", "relaxed"]);
32597
+ var layoutSchema = z35.object({
32598
+ containerPadding: z35.object({
31768
32599
  mobile: containerPaddingPresetSchema.optional(),
31769
32600
  tablet: containerPaddingPresetSchema.optional(),
31770
32601
  desktop: containerPaddingPresetSchema.optional()
31771
32602
  }).optional()
31772
32603
  }).optional();
31773
- var heroTypographySizeSchema = z33.enum([
32604
+ var heroTypographySizeSchema = z35.enum([
31774
32605
  "sm",
31775
32606
  "base",
31776
32607
  "lg",
@@ -31781,14 +32612,14 @@ var heroTypographySizeSchema = z33.enum([
31781
32612
  "5xl",
31782
32613
  "6xl"
31783
32614
  ]);
31784
- var heroTypographyLineHeightSchema = z33.enum(["tight", "snug", "normal", "relaxed"]);
31785
- var heroResponsiveTypographySchema = z33.object({
32615
+ var heroTypographyLineHeightSchema = z35.enum(["tight", "snug", "normal", "relaxed"]);
32616
+ var heroResponsiveTypographySchema = z35.object({
31786
32617
  headlineSize: heroTypographySizeSchema.optional(),
31787
32618
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
31788
32619
  subheadlineSize: heroTypographySizeSchema.optional(),
31789
32620
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
31790
32621
  });
31791
- var heroTypographySchema = z33.object({
32622
+ var heroTypographySchema = z35.object({
31792
32623
  headlineSize: heroTypographySizeSchema.optional(),
31793
32624
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
31794
32625
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -31797,24 +32628,24 @@ var heroTypographySchema = z33.object({
31797
32628
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
31798
32629
  microSubheadlineSize: heroTypographySizeSchema.optional(),
31799
32630
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
31800
- responsive: z33.object({
32631
+ responsive: z35.object({
31801
32632
  tablet: heroResponsiveTypographySchema.optional(),
31802
32633
  mobile: heroResponsiveTypographySchema.optional()
31803
32634
  }).optional()
31804
32635
  });
31805
- var heroSchema = z33.object({
32636
+ var heroSchema = z35.object({
31806
32637
  typography: heroTypographySchema.optional()
31807
32638
  }).optional();
31808
- var gradientsSchema = z33.object({
31809
- button: z33.string().min(1).nullable().optional(),
31810
- hero: z33.string().min(1).nullable().optional(),
31811
- background: z33.string().min(1).nullable().optional()
31812
- });
31813
- var themeSchema = z33.object({
31814
- name: z33.string().min(1).max(30),
31815
- description: z33.string().min(1).max(400),
31816
- rationale: z33.string().min(1).max(400),
31817
- siteStyleId: z33.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
32639
+ var gradientsSchema = z35.object({
32640
+ button: z35.string().min(1).nullable().optional(),
32641
+ hero: z35.string().min(1).nullable().optional(),
32642
+ background: z35.string().min(1).nullable().optional()
32643
+ });
32644
+ var themeSchema = z35.object({
32645
+ name: z35.string().min(1).max(30),
32646
+ description: z35.string().min(1).max(400),
32647
+ rationale: z35.string().min(1).max(400),
32648
+ siteStyleId: z35.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
31818
32649
  axes: axesSchema,
31819
32650
  palette: paletteSchema,
31820
32651
  typography: typographySchema,
@@ -31841,16 +32672,16 @@ var themeSchema = z33.object({
31841
32672
  // Block-specific customization (Tier 3)
31842
32673
  // blockCustomVars: Per-block CSS variable overrides as bare values
31843
32674
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
31844
- blockCustomVars: z33.record(
31845
- z33.string(),
32675
+ blockCustomVars: z35.record(
32676
+ z35.string(),
31846
32677
  // block kind (matches data-block attribute)
31847
- z33.record(z33.string(), z33.string())
32678
+ z35.record(z35.string(), z35.string())
31848
32679
  // { '--var-name': 'value' }
31849
32680
  ).optional(),
31850
32681
  // Structured block-kind theme overrides (v1: typography prose-link style only)
31851
32682
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
31852
- blockOverrides: z33.record(
31853
- z33.string(),
32683
+ blockOverrides: z35.record(
32684
+ z35.string(),
31854
32685
  blockThemeOverrideSchema
31855
32686
  ).optional(),
31856
32687
  // Structured custom CSS rules
@@ -31886,13 +32717,373 @@ var themeSchema = z33.object({
31886
32717
  * }
31887
32718
  * ```
31888
32719
  */
31889
- styleGroups: z33.record(z33.string(), z33.array(z33.string())).optional()
32720
+ styleGroups: z35.record(z35.string(), z35.array(z35.string())).optional()
31890
32721
  });
31891
- var themesTurnSchema = z33.object({
31892
- message: z33.string().min(1),
31893
- themes: z33.array(themeSchema).length(3)
32722
+ var themesTurnSchema = z35.object({
32723
+ message: z35.string().min(1),
32724
+ themes: z35.array(themeSchema).length(3)
31894
32725
  });
31895
32726
 
32727
+ // ../theme-core/src/palette/variants/types.ts
32728
+ init_compatibility();
32729
+ import { z as z36 } from "zod";
32730
+ function asPaletteVariantId(value) {
32731
+ if (value.length === 0) {
32732
+ throw new Error("PaletteVariantId must be a non-empty string");
32733
+ }
32734
+ return value;
32735
+ }
32736
+ var paletteVariantIdSchema = z36.string().min(1).transform((value) => asPaletteVariantId(value));
32737
+ var PALETTE_TOKEN_NAMES = [
32738
+ "primary",
32739
+ "primaryForeground",
32740
+ "secondary",
32741
+ "accent",
32742
+ "success",
32743
+ "warning",
32744
+ "destructive",
32745
+ "background",
32746
+ "surface",
32747
+ "surfaceAlt",
32748
+ "muted",
32749
+ "text",
32750
+ "border"
32751
+ ];
32752
+ var paletteTokenNameSchema = z36.enum(PALETTE_TOKEN_NAMES);
32753
+ var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
32754
+ var hexColorSchema = z36.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
32755
+ var variantPaletteColorSchema = paletteColorSchema.extend({
32756
+ name: paletteTokenNameSchema
32757
+ });
32758
+ var paletteVariantSchema = z36.object({
32759
+ id: paletteVariantIdSchema,
32760
+ name: z36.string().min(1),
32761
+ description: z36.string().min(1),
32762
+ tags: styleTagsSchema,
32763
+ mode: z36.enum(["light", "dark"]),
32764
+ colors: z36.array(variantPaletteColorSchema).min(1)
32765
+ });
32766
+ function definePaletteVariant(input) {
32767
+ return {
32768
+ id: asPaletteVariantId(input.id),
32769
+ name: input.name,
32770
+ description: input.description,
32771
+ tags: input.tags,
32772
+ mode: input.mode,
32773
+ colors: input.colors
32774
+ };
32775
+ }
32776
+ var paletteOverridesSchema = z36.object({
32777
+ primary: hexColorSchema.optional(),
32778
+ primaryForeground: hexColorSchema.optional(),
32779
+ secondary: hexColorSchema.optional(),
32780
+ accent: hexColorSchema.optional(),
32781
+ success: hexColorSchema.optional(),
32782
+ warning: hexColorSchema.optional(),
32783
+ destructive: hexColorSchema.optional(),
32784
+ background: hexColorSchema.optional(),
32785
+ surface: hexColorSchema.optional(),
32786
+ surfaceAlt: hexColorSchema.optional(),
32787
+ muted: hexColorSchema.optional(),
32788
+ text: hexColorSchema.optional(),
32789
+ border: hexColorSchema.optional()
32790
+ }).strict().transform((value) => value);
32791
+
32792
+ // ../theme-core/src/palette/variants/brand-led.ts
32793
+ var brandLedCool = definePaletteVariant({
32794
+ id: "brand-led-cool",
32795
+ name: "Brand-led \u2014 Cool",
32796
+ description: "Confident blue primary with slate neutrals.",
32797
+ tags: { tone: "classic", energy: "calm", era: "modern" },
32798
+ mode: "light",
32799
+ colors: [
32800
+ { name: "primary", hex: "#2563eb" },
32801
+ { name: "secondary", hex: "#64748b" },
32802
+ { name: "accent", hex: "#0f766e" },
32803
+ { name: "success", hex: "#16a34a" },
32804
+ { name: "warning", hex: "#d97706" },
32805
+ { name: "destructive", hex: "#dc2626" },
32806
+ { name: "background", hex: "#ffffff" },
32807
+ { name: "surface", hex: "#ffffff" },
32808
+ { name: "surfaceAlt", hex: "#f8fafc" },
32809
+ { name: "muted", hex: "#f1f5f9" },
32810
+ { name: "text", hex: "#0f172a" },
32811
+ { name: "primaryForeground", hex: "#ffffff" },
32812
+ { name: "border", hex: "#cbd5e1" }
32813
+ ]
32814
+ });
32815
+ var brandLedWarm = definePaletteVariant({
32816
+ id: "brand-led-warm",
32817
+ name: "Brand-led \u2014 Warm",
32818
+ description: "Sunset orange primary with warm grey neutrals.",
32819
+ tags: { tone: "classic", energy: "vibrant", era: "modern" },
32820
+ mode: "light",
32821
+ colors: [
32822
+ { name: "primary", hex: "#ea580c" },
32823
+ { name: "secondary", hex: "#78716c" },
32824
+ { name: "accent", hex: "#a16207" },
32825
+ { name: "success", hex: "#16a34a" },
32826
+ { name: "warning", hex: "#d97706" },
32827
+ { name: "destructive", hex: "#b91c1c" },
32828
+ { name: "background", hex: "#fffaf3" },
32829
+ { name: "surface", hex: "#ffffff" },
32830
+ { name: "surfaceAlt", hex: "#fbeee0" },
32831
+ { name: "muted", hex: "#f4e2cd" },
32832
+ { name: "text", hex: "#1c1917" },
32833
+ { name: "primaryForeground", hex: "#fffaf3" },
32834
+ { name: "border", hex: "#d6c4ad" }
32835
+ ]
32836
+ });
32837
+ var brandLedJewel = definePaletteVariant({
32838
+ id: "brand-led-jewel",
32839
+ name: "Brand-led \u2014 Jewel",
32840
+ description: "Deep emerald primary with rich neutrals.",
32841
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
32842
+ mode: "light",
32843
+ colors: [
32844
+ { name: "primary", hex: "#047857" },
32845
+ { name: "secondary", hex: "#4b5563" },
32846
+ { name: "accent", hex: "#7c3aed" },
32847
+ { name: "success", hex: "#15803d" },
32848
+ { name: "warning", hex: "#b45309" },
32849
+ { name: "destructive", hex: "#b91c1c" },
32850
+ { name: "background", hex: "#ffffff" },
32851
+ { name: "surface", hex: "#ffffff" },
32852
+ { name: "surfaceAlt", hex: "#f5f5f4" },
32853
+ { name: "muted", hex: "#e7e5e4" },
32854
+ { name: "text", hex: "#0c0a09" },
32855
+ { name: "primaryForeground", hex: "#ffffff" },
32856
+ { name: "border", hex: "#a8a29e" }
32857
+ ]
32858
+ });
32859
+
32860
+ // ../theme-core/src/palette/variants/high-contrast.ts
32861
+ var highContrastInk = definePaletteVariant({
32862
+ id: "high-contrast-ink",
32863
+ name: "High Contrast \u2014 Ink",
32864
+ description: "Near-black primary with cool greys.",
32865
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
32866
+ mode: "light",
32867
+ colors: [
32868
+ { name: "primary", hex: "#111827" },
32869
+ { name: "secondary", hex: "#374151" },
32870
+ { name: "accent", hex: "#1d4ed8" },
32871
+ { name: "success", hex: "#047857" },
32872
+ { name: "warning", hex: "#b45309" },
32873
+ { name: "destructive", hex: "#b91c1c" },
32874
+ { name: "background", hex: "#ffffff" },
32875
+ { name: "surface", hex: "#ffffff" },
32876
+ { name: "surfaceAlt", hex: "#f3f4f6" },
32877
+ { name: "muted", hex: "#e5e7eb" },
32878
+ { name: "text", hex: "#030712" },
32879
+ { name: "primaryForeground", hex: "#ffffff" },
32880
+ { name: "border", hex: "#6b7280" }
32881
+ ]
32882
+ });
32883
+ var highContrastCharcoal = definePaletteVariant({
32884
+ id: "high-contrast-charcoal",
32885
+ name: "High Contrast \u2014 Charcoal",
32886
+ description: "Warm charcoal primary on a soft cream ground.",
32887
+ tags: { tone: "minimal", energy: "calm", era: "editorial" },
32888
+ mode: "light",
32889
+ colors: [
32890
+ { name: "primary", hex: "#1f2937" },
32891
+ { name: "secondary", hex: "#52525b" },
32892
+ { name: "accent", hex: "#a16207" },
32893
+ { name: "success", hex: "#15803d" },
32894
+ { name: "warning", hex: "#b45309" },
32895
+ { name: "destructive", hex: "#991b1b" },
32896
+ { name: "background", hex: "#fafaf9" },
32897
+ { name: "surface", hex: "#ffffff" },
32898
+ { name: "surfaceAlt", hex: "#f5f5f4" },
32899
+ { name: "muted", hex: "#e7e5e4" },
32900
+ { name: "text", hex: "#0c0a09" },
32901
+ { name: "primaryForeground", hex: "#fafaf9" },
32902
+ { name: "border", hex: "#a8a29e" }
32903
+ ]
32904
+ });
32905
+ var highContrastMonochrome = definePaletteVariant({
32906
+ id: "high-contrast-monochrome",
32907
+ name: "High Contrast \u2014 Monochrome",
32908
+ description: "Pure black-on-white with a single saturated accent.",
32909
+ tags: { tone: "bold", energy: "vibrant", era: "editorial" },
32910
+ mode: "light",
32911
+ colors: [
32912
+ { name: "primary", hex: "#000000" },
32913
+ { name: "secondary", hex: "#404040" },
32914
+ { name: "accent", hex: "#dc2626" },
32915
+ { name: "success", hex: "#000000" },
32916
+ { name: "warning", hex: "#000000" },
32917
+ { name: "destructive", hex: "#dc2626" },
32918
+ { name: "background", hex: "#ffffff" },
32919
+ { name: "surface", hex: "#ffffff" },
32920
+ { name: "surfaceAlt", hex: "#f5f5f5" },
32921
+ { name: "muted", hex: "#e5e5e5" },
32922
+ { name: "text", hex: "#000000" },
32923
+ { name: "primaryForeground", hex: "#ffffff" },
32924
+ { name: "border", hex: "#525252" }
32925
+ ]
32926
+ });
32927
+
32928
+ // ../theme-core/src/palette/variants/soft-natural.ts
32929
+ var softNaturalSage = definePaletteVariant({
32930
+ id: "soft-natural-sage",
32931
+ name: "Soft Natural \u2014 Sage",
32932
+ description: "Olive sage primary on an off-white ground.",
32933
+ tags: { tone: "classic", energy: "calm", era: "organic" },
32934
+ mode: "light",
32935
+ colors: [
32936
+ { name: "primary", hex: "#3f6212" },
32937
+ { name: "secondary", hex: "#6b7280" },
32938
+ { name: "accent", hex: "#0f766e" },
32939
+ { name: "success", hex: "#15803d" },
32940
+ { name: "warning", hex: "#a16207" },
32941
+ { name: "destructive", hex: "#b91c1c" },
32942
+ { name: "background", hex: "#fbfdf7" },
32943
+ { name: "surface", hex: "#ffffff" },
32944
+ { name: "surfaceAlt", hex: "#eef5e8" },
32945
+ { name: "muted", hex: "#e7efdf" },
32946
+ { name: "text", hex: "#1f2a1d" },
32947
+ { name: "primaryForeground", hex: "#ffffff" },
32948
+ { name: "border", hex: "#cbd8c0" }
32949
+ ]
32950
+ });
32951
+ var softNaturalStone = definePaletteVariant({
32952
+ id: "soft-natural-stone",
32953
+ name: "Soft Natural \u2014 Stone",
32954
+ description: "River-stone grey-green primary with cool neutrals.",
32955
+ tags: { tone: "minimal", energy: "calm", era: "organic" },
32956
+ mode: "light",
32957
+ colors: [
32958
+ { name: "primary", hex: "#5a7a5d" },
32959
+ { name: "secondary", hex: "#8a9a8c" },
32960
+ { name: "accent", hex: "#c9b88f" },
32961
+ { name: "success", hex: "#5a7a5d" },
32962
+ { name: "warning", hex: "#a89466" },
32963
+ { name: "destructive", hex: "#a3503e" },
32964
+ { name: "background", hex: "#faf6ec" },
32965
+ { name: "surface", hex: "#ffffff" },
32966
+ { name: "surfaceAlt", hex: "#f0ecdf" },
32967
+ { name: "muted", hex: "#e6e1d0" },
32968
+ { name: "text", hex: "#2f3d31" },
32969
+ { name: "primaryForeground", hex: "#faf6ec" },
32970
+ { name: "border", hex: "#c9c1ad" }
32971
+ ]
32972
+ });
32973
+ var softNaturalWatercolor = definePaletteVariant({
32974
+ id: "soft-natural-watercolor",
32975
+ name: "Soft Natural \u2014 Watercolor",
32976
+ description: "Soft sand primary with watercolour sage accents.",
32977
+ tags: { tone: "classic", energy: "vibrant", era: "organic" },
32978
+ mode: "light",
32979
+ colors: [
32980
+ { name: "primary", hex: "#a8825f" },
32981
+ { name: "secondary", hex: "#88a888" },
32982
+ { name: "accent", hex: "#c8a78e" },
32983
+ { name: "success", hex: "#7d8a5f" },
32984
+ { name: "warning", hex: "#c89a4d" },
32985
+ { name: "destructive", hex: "#a3503e" },
32986
+ { name: "background", hex: "#fefdfa" },
32987
+ { name: "surface", hex: "#ffffff" },
32988
+ { name: "surfaceAlt", hex: "#f6f1e6" },
32989
+ { name: "muted", hex: "#eee7d1" },
32990
+ { name: "text", hex: "#4a3d30" },
32991
+ { name: "primaryForeground", hex: "#fefdfa" },
32992
+ { name: "border", hex: "#d8c9a8" }
32993
+ ]
32994
+ });
32995
+
32996
+ // ../theme-core/src/palette/variants/warm-neutral.ts
32997
+ var warmNeutralClay = definePaletteVariant({
32998
+ id: "warm-neutral-clay",
32999
+ name: "Warm Neutral \u2014 Clay",
33000
+ description: "Terracotta primary on a cream ground.",
33001
+ tags: { tone: "classic", energy: "calm", era: "organic" },
33002
+ mode: "light",
33003
+ colors: [
33004
+ { name: "primary", hex: "#8b5e34" },
33005
+ { name: "secondary", hex: "#7c6f64" },
33006
+ { name: "accent", hex: "#a15c38" },
33007
+ { name: "success", hex: "#527853" },
33008
+ { name: "warning", hex: "#b7791f" },
33009
+ { name: "destructive", hex: "#b91c1c" },
33010
+ { name: "background", hex: "#fffaf3" },
33011
+ { name: "surface", hex: "#ffffff" },
33012
+ { name: "surfaceAlt", hex: "#f5eadc" },
33013
+ { name: "muted", hex: "#efe2d0" },
33014
+ { name: "text", hex: "#2f241c" },
33015
+ { name: "primaryForeground", hex: "#fffaf3" },
33016
+ { name: "border", hex: "#d8c6b3" }
33017
+ ]
33018
+ });
33019
+ var warmNeutralCream = definePaletteVariant({
33020
+ id: "warm-neutral-cream",
33021
+ name: "Warm Neutral \u2014 Cream",
33022
+ description: "Soft sand primary with pale cream surfaces.",
33023
+ tags: { tone: "minimal", energy: "calm", era: "organic" },
33024
+ mode: "light",
33025
+ colors: [
33026
+ { name: "primary", hex: "#b08864" },
33027
+ { name: "secondary", hex: "#9a8c7e" },
33028
+ { name: "accent", hex: "#c2956a" },
33029
+ { name: "success", hex: "#7d8a5f" },
33030
+ { name: "warning", hex: "#c89a4d" },
33031
+ { name: "destructive", hex: "#a3503e" },
33032
+ { name: "background", hex: "#fdf8ee" },
33033
+ { name: "surface", hex: "#ffffff" },
33034
+ { name: "surfaceAlt", hex: "#f4ebd9" },
33035
+ { name: "muted", hex: "#ede3cf" },
33036
+ { name: "text", hex: "#3b2f24" },
33037
+ { name: "primaryForeground", hex: "#fdf8ee" },
33038
+ { name: "border", hex: "#e0d2b8" }
33039
+ ]
33040
+ });
33041
+ var warmNeutralForest = definePaletteVariant({
33042
+ id: "warm-neutral-forest",
33043
+ name: "Warm Neutral \u2014 Forest",
33044
+ description: "Deep forest green primary with earthy neutrals.",
33045
+ tags: { tone: "classic", energy: "calm", era: "organic" },
33046
+ mode: "light",
33047
+ colors: [
33048
+ { name: "primary", hex: "#3d5840" },
33049
+ { name: "secondary", hex: "#7a6f5d" },
33050
+ { name: "accent", hex: "#b06b50" },
33051
+ { name: "success", hex: "#5a7a5d" },
33052
+ { name: "warning", hex: "#b7791f" },
33053
+ { name: "destructive", hex: "#b91c1c" },
33054
+ { name: "background", hex: "#fbf8f0" },
33055
+ { name: "surface", hex: "#ffffff" },
33056
+ { name: "surfaceAlt", hex: "#f2ecdb" },
33057
+ { name: "muted", hex: "#ebe3cc" },
33058
+ { name: "text", hex: "#2a2a2a" },
33059
+ { name: "primaryForeground", hex: "#fbf8f0" },
33060
+ { name: "border", hex: "#cdc1a4" }
33061
+ ]
33062
+ });
33063
+
33064
+ // ../theme-core/src/palette/variants/index.ts
33065
+ var paletteVariants = [
33066
+ // Brand-led family
33067
+ brandLedCool,
33068
+ brandLedWarm,
33069
+ brandLedJewel,
33070
+ // Warm-neutral family
33071
+ warmNeutralClay,
33072
+ warmNeutralCream,
33073
+ warmNeutralForest,
33074
+ // High-contrast family
33075
+ highContrastInk,
33076
+ highContrastCharcoal,
33077
+ highContrastMonochrome,
33078
+ // Soft-natural family
33079
+ softNaturalSage,
33080
+ softNaturalStone,
33081
+ softNaturalWatercolor
33082
+ ];
33083
+ var paletteVariantsById = new Map(
33084
+ paletteVariants.map((v) => [v.id, v])
33085
+ );
33086
+
31896
33087
  // ../theme-core/src/palette/utils/paletteAccess.ts
31897
33088
  init_colorConversion();
31898
33089
 
@@ -33170,7 +34361,7 @@ var pipeline = new BasicPipeline().filter.register(
33170
34361
  Vibrant.use(pipeline);
33171
34362
 
33172
34363
  // ../theme-core/src/styles/buttons.ts
33173
- init_shadow();
34364
+ init_shadow2();
33174
34365
  init_colorStyles();
33175
34366
 
33176
34367
  // ../blocks/src/index.ts
@@ -33180,6 +34371,7 @@ init_generateShades();
33180
34371
  init_expandPalette();
33181
34372
 
33182
34373
  // ../blocks/src/index.ts
34374
+ init_buttons();
33183
34375
  init_tokens2();
33184
34376
 
33185
34377
  // ../theme-core/src/ThemeScope.tsx
@@ -33201,7 +34393,7 @@ init_buildThemeRuntime();
33201
34393
 
33202
34394
  // ../theme-core/src/runtime/buildThemeRuntimeFromBridge.ts
33203
34395
  init_colorConversion();
33204
- init_shadow();
34396
+ init_shadow2();
33205
34397
 
33206
34398
  // ../blocks/src/index.ts
33207
34399
  init_blocks();