@riverbankcms/sdk 0.60.16 → 0.62.2

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 (167) hide show
  1. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +41 -1
  2. package/dist/_dts/api/src/bookingRecords.d.ts +100 -3
  3. package/dist/_dts/api/src/bookings.d.ts +2 -1
  4. package/dist/_dts/api/src/endpoints.d.ts +96 -0
  5. package/dist/_dts/api/src/index.d.ts +5 -1
  6. package/dist/_dts/api/src/participantMessaging.d.ts +113 -0
  7. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +51 -47
  8. package/dist/_dts/api/src/types.d.ts +1 -0
  9. package/dist/_dts/blocks/src/index.d.ts +66 -62
  10. package/dist/_dts/blocks/src/lib/media.d.ts +60 -0
  11. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +2 -2
  12. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +2 -2
  13. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -2
  14. package/dist/_dts/blocks/src/system/blocks/blog-post.d.ts +0 -21
  15. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +2 -6
  16. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +2 -2
  17. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +2 -2
  18. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +0 -10
  19. package/dist/_dts/blocks/src/system/blocks/columns.d.ts +0 -10
  20. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -20
  21. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -20
  22. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +15 -15
  23. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +5 -10
  24. package/dist/_dts/blocks/src/system/blocks/embed.d.ts +0 -11
  25. package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +0 -20
  26. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +0 -20
  27. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +43 -27
  28. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +24 -15
  29. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -2
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +132 -12
  31. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -2
  32. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +2 -10
  33. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +2 -2
  34. package/dist/_dts/blocks/src/system/blocks/form.d.ts +2 -24
  35. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +2 -2
  36. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +2 -3
  37. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +2 -2
  38. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +0 -13
  39. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +17 -17
  40. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +2 -10
  41. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -2
  43. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  44. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
  45. package/dist/_dts/blocks/src/system/blocks/single-button.d.ts +16 -15
  46. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +2 -6
  47. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +0 -11
  48. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +2 -2
  51. package/dist/_dts/blocks/src/system/constants/events.d.ts +18 -0
  52. package/dist/_dts/blocks/src/system/customize/facets.d.ts +105 -0
  53. package/dist/_dts/blocks/src/system/defineBlock.d.ts +29 -5
  54. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  55. package/dist/_dts/blocks/src/system/fragments/library/blogFeaturedPost.d.ts +0 -24
  56. package/dist/_dts/blocks/src/system/fragments/library/bodyCopy.d.ts +0 -4
  57. package/dist/_dts/blocks/src/system/fragments/library/bookingForm.d.ts +0 -4
  58. package/dist/_dts/blocks/src/system/fragments/library/card.d.ts +0 -6
  59. package/dist/_dts/blocks/src/system/fragments/library/columnContent.d.ts +0 -6
  60. package/dist/_dts/blocks/src/system/fragments/library/ctaCopy.d.ts +0 -4
  61. package/dist/_dts/blocks/src/system/fragments/library/ctaRow.d.ts +0 -4
  62. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +0 -4
  63. package/dist/_dts/blocks/src/system/fragments/library/faqHeading.d.ts +0 -4
  64. package/dist/_dts/blocks/src/system/fragments/library/feedbackCallout.d.ts +0 -6
  65. package/dist/_dts/blocks/src/system/fragments/library/footerBottomText.d.ts +0 -4
  66. package/dist/_dts/blocks/src/system/fragments/library/formCopy.d.ts +0 -4
  67. package/dist/_dts/blocks/src/system/fragments/library/formEmbed.d.ts +0 -18
  68. package/dist/_dts/blocks/src/system/fragments/library/headerCta.d.ts +0 -4
  69. package/dist/_dts/blocks/src/system/fragments/library/heading.d.ts +0 -6
  70. package/dist/_dts/blocks/src/system/fragments/library/heroCopy.d.ts +0 -4
  71. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +0 -4
  72. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +0 -4
  73. package/dist/_dts/blocks/src/system/fragments/library/image.d.ts +0 -6
  74. package/dist/_dts/blocks/src/system/fragments/library/newsletterCopy.d.ts +0 -4
  75. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +0 -4
  76. package/dist/_dts/blocks/src/system/fragments/library/quote.d.ts +0 -6
  77. package/dist/_dts/blocks/src/system/fragments/library/richText.d.ts +0 -6
  78. package/dist/_dts/blocks/src/system/fragments/library/sectionState.d.ts +0 -6
  79. package/dist/_dts/blocks/src/system/fragments/library/singleButton.d.ts +0 -4
  80. package/dist/_dts/blocks/src/system/fragments/library/spinner.d.ts +0 -5
  81. package/dist/_dts/blocks/src/system/fragments/library/teamMember.d.ts +0 -6
  82. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +0 -31
  83. package/dist/_dts/blocks/src/system/fragments/library/testimonialsHeading.d.ts +0 -4
  84. package/dist/_dts/blocks/src/system/fragments/library/videoEmbed.d.ts +0 -6
  85. package/dist/_dts/blocks/src/system/fragments/types.d.ts +11 -3
  86. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +4 -0
  87. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  88. package/dist/_dts/blocks/src/system/manifest/derivedContent.d.ts +3 -3
  89. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +10 -10
  90. package/dist/_dts/blocks/src/system/media/constrainedVideoMedia.d.ts +13 -0
  91. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -0
  92. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +4 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +1 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -0
  96. package/dist/_dts/content-model/src/contentManifest.d.ts +2 -2
  97. package/dist/_dts/content-model/src/referenceFields.d.ts +7 -1
  98. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +34 -6
  99. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -0
  100. package/dist/_dts/editor-blocks/src/widgets/entry-picker/EntryPickerWidgetProvider.d.ts +3 -2
  101. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +2 -1
  102. package/dist/_dts/editor-blocks/src/widgets/entry-picker/types.d.ts +2 -1
  103. package/dist/_dts/editor-blocks/src/widgets/link/LinkPicker.d.ts +2 -1
  104. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +2 -1
  105. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidgetContext.d.ts +2 -1
  106. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +2 -1
  107. package/dist/_dts/editor-blocks/src/widgets/link/types.d.ts +3 -2
  108. package/dist/_dts/editor-blocks/src/widgets/reference/dynamicAdapters.d.ts +9 -0
  109. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +5 -1
  110. package/dist/_dts/media-core/src/index.d.ts +1 -0
  111. package/dist/_dts/media-core/src/videoSlotPolicy.d.ts +38 -0
  112. package/dist/_dts/media-editor/src/MediaEditor.d.ts +3 -1
  113. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +7 -0
  114. package/dist/_dts/preview-next/src/client/blocks/customizeFacetControls.d.ts +9 -0
  115. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +14 -0
  116. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +9 -7
  117. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -3
  118. package/dist/_dts/preview-next/src/client/widgets/widgetAdapters.d.ts +1 -1
  119. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -0
  120. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +1 -1
  121. package/dist/_dts/sdk/src/manifest/prompt/examples/features-grid.d.ts +1 -1
  122. package/dist/_dts/sdk/src/manifest/prompt/examples/pricing.d.ts +5 -5
  123. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +1 -0
  124. package/dist/_dts/sdk/src/version.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  126. package/dist/_dts/theme-core/src/index.d.ts +1 -0
  127. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -0
  128. package/dist/_dts/theme-core/src/schema.d.ts +25 -0
  129. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +515 -0
  130. package/dist/_dts/theme-core/src/site-styles/appearancePresetResolution.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +119 -0
  132. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +5 -563
  133. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +448 -0
  134. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +6 -0
  135. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +12 -0
  136. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -0
  137. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +8 -0
  138. package/dist/_dts/theme-core/src/site-styles/siteChromeAppearancePresets.d.ts +67 -0
  139. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +6 -6
  140. package/dist/_dts/theme-core/src/site-styles/types.d.ts +22 -3
  141. package/dist/_dts/theme-core/src/siteChrome.d.ts +11 -0
  142. package/dist/cli/index.mjs +4310 -3464
  143. package/dist/client/bookings.mjs +310 -310
  144. package/dist/client/client.mjs +61329 -60359
  145. package/dist/client/hooks.mjs +1254 -731
  146. package/dist/client/rendering/client.mjs +5959 -5226
  147. package/dist/client/rendering/islands.mjs +3842 -3275
  148. package/dist/client/rendering.mjs +7495 -6519
  149. package/dist/preview-next/before-render.mjs +118 -0
  150. package/dist/preview-next/client/runtime.mjs +4489 -2773
  151. package/dist/preview-next/middleware.mjs +136 -0
  152. package/dist/server/components.mjs +1342 -765
  153. package/dist/server/config-validation.mjs +1256 -733
  154. package/dist/server/config.mjs +1256 -733
  155. package/dist/server/data.mjs +1254 -731
  156. package/dist/server/index.mjs +191 -18
  157. package/dist/server/next.mjs +1339 -760
  158. package/dist/server/page-converter.mjs +1088 -734
  159. package/dist/server/prebuild.mjs +1 -1
  160. package/dist/server/rendering/server.mjs +1338 -762
  161. package/dist/server/rendering.mjs +1351 -770
  162. package/dist/server/routing.mjs +1340 -754
  163. package/dist/server/server.mjs +1260 -734
  164. package/dist/server/theme-bridge.mjs +198 -34
  165. package/dist/server/theme.mjs +6 -0
  166. package/dist/styles/index.css +28 -9
  167. package/package.json +1 -1
@@ -86,7 +86,7 @@ function ze() {
86
86
  /* @__PURE__ */ Te(P)
87
87
  );
88
88
  }
89
- function z5(e) {
89
+ function z11(e) {
90
90
  if (L) {
91
91
  if (/* @__PURE__ */ Te(P) !== null)
92
92
  throw Tt(), Je;
@@ -2115,12 +2115,12 @@ function ha(e, t) {
2115
2115
  var mt = we(Dr, 2);
2116
2116
  let Pr;
2117
2117
  var We = X(mt);
2118
- en(We), We.__change = ui, z5(mt);
2118
+ en(We), We.__change = ui, z11(mt);
2119
2119
  var Ut = we(mt, 2), wi = X(Ut);
2120
2120
  {
2121
2121
  var pi = (n) => {
2122
2122
  var u = na(), _ = Gr(u), y = X(_);
2123
- Ge(y, () => c(re).verified), z5(_);
2123
+ Ge(y, () => c(re).verified), z11(_);
2124
2124
  var T = we(_, 2);
2125
2125
  en(T), Pe(() => {
2126
2126
  se(T, "name", V()), jo(T, c(Le));
@@ -2129,10 +2129,10 @@ function ha(e, t) {
2129
2129
  {
2130
2130
  var _ = (T) => {
2131
2131
  var E = ia(), p = X(E);
2132
- Ge(p, () => c(re).verifying), z5(E), ne(T, E);
2132
+ Ge(p, () => c(re).verifying), z11(E), ne(T, E);
2133
2133
  }, y = (T) => {
2134
2134
  var E = oa(), p = X(E);
2135
- Ge(p, () => c(re).label), z5(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2135
+ Ge(p, () => c(re).label), z11(E), Pe(() => se(E, "for", c(cr))), ne(T, E);
2136
2136
  };
2137
2137
  $e(
2138
2138
  n,
@@ -2147,18 +2147,18 @@ function ha(e, t) {
2147
2147
  c(C) === b.VERIFIED ? n(pi) : n(bi, false);
2148
2148
  });
2149
2149
  }
2150
- z5(Ut);
2150
+ z11(Ut);
2151
2151
  var yi = we(Ut, 2);
2152
2152
  {
2153
2153
  var Ei = (n) => {
2154
2154
  var u = aa(), _ = X(u);
2155
- se(_, "href", sr), z5(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2155
+ se(_, "href", sr), z11(u), Pe(() => se(_, "aria-label", c(re).ariaLinkLabel)), ne(n, u);
2156
2156
  };
2157
2157
  $e(yi, (n) => {
2158
2158
  (N() !== true || c(Dt)) && n(Ei);
2159
2159
  });
2160
2160
  }
2161
- z5(Mt);
2161
+ z11(Mt);
2162
2162
  var Or = we(Mt, 2);
2163
2163
  {
2164
2164
  var xi = (n) => {
@@ -2166,16 +2166,16 @@ function ha(e, t) {
2166
2166
  {
2167
2167
  var y = (E) => {
2168
2168
  var p = la(), x = X(p);
2169
- Ge(x, () => c(re).expired), z5(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2169
+ Ge(x, () => c(re).expired), z11(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2170
2170
  }, T = (E) => {
2171
2171
  var p = sa(), x = X(p);
2172
- Ge(x, () => c(re).error), z5(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2172
+ Ge(x, () => c(re).error), z11(p), Pe(() => se(p, "title", c(He))), ne(E, p);
2173
2173
  };
2174
2174
  $e(_, (E) => {
2175
2175
  c(C) === b.EXPIRED ? E(y) : E(T, false);
2176
2176
  });
2177
2177
  }
2178
- z5(u), ne(n, u);
2178
+ z11(u), ne(n, u);
2179
2179
  };
2180
2180
  $e(Or, (n) => {
2181
2181
  (c(He) || c(C) === b.EXPIRED) && n(xi);
@@ -2185,7 +2185,7 @@ function ha(e, t) {
2185
2185
  {
2186
2186
  var $i = (n) => {
2187
2187
  var u = ua(), _ = X(u), y = X(_);
2188
- Ge(y, () => c(re).footer), z5(_), z5(u), ne(n, u);
2188
+ Ge(y, () => c(re).footer), z11(_), z11(u), ne(n, u);
2189
2189
  };
2190
2190
  $e(Fr, (n) => {
2191
2191
  c(re).footer && (k() !== true || c(Dt)) && n($i);
@@ -2201,7 +2201,7 @@ function ha(e, t) {
2201
2201
  v() && n(Ci);
2202
2202
  });
2203
2203
  }
2204
- return z5(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2204
+ return z11(ot), nn(ot, (n) => D(B, n), () => c(B)), Pe(
2205
2205
  (n) => {
2206
2206
  se(ot, "data-state", c(C)), se(ot, "data-floating", v()), Pr = Fo(mt, 1, "altcha-checkbox", null, Pr, n), se(We, "id", c(cr)), We.required = r2() !== "onsubmit" && (!v() || r2() !== "off");
2207
2207
  },
@@ -4397,6 +4397,303 @@ function getBookingSuccessMessage(successMessage) {
4397
4397
  return successMessage?.trim() || "Your appointment has been booked! Check your email for confirmation.";
4398
4398
  }
4399
4399
 
4400
+ // ../theme-core/src/inputs/types.ts
4401
+ import { z as z5 } from "zod";
4402
+ var inputSystemSchema = z5.object({
4403
+ // Base styling (applied to all inputs)
4404
+ base: z5.object({
4405
+ background: z5.union([
4406
+ z5.object({
4407
+ type: z5.literal("solid"),
4408
+ colorToken: z5.string()
4409
+ }),
4410
+ z5.object({
4411
+ type: z5.literal("transparent")
4412
+ })
4413
+ ]),
4414
+ textColorToken: z5.string(),
4415
+ border: z5.object({
4416
+ widthClass: z5.string(),
4417
+ // e.g., 'border', 'border-2'
4418
+ colorToken: z5.string(),
4419
+ style: z5.enum(["all", "underline"]).optional()
4420
+ }),
4421
+ corners: z5.enum(["square", "soft", "rounded", "pill"]).nullable(),
4422
+ // null = inherit from theme.corners
4423
+ shadow: z5.object({
4424
+ elevation: z5.enum(["none", "low", "medium"]),
4425
+ softness: z5.enum(["soft", "crisp", "hard"]).nullable()
4426
+ }).nullable(),
4427
+ spacing: z5.enum(["compact", "cozy", "medium", "comfortable"]),
4428
+ // padding inside inputs
4429
+ fontSize: z5.enum(["sm", "base", "lg"])
4430
+ }),
4431
+ // Label styling
4432
+ label: z5.object({
4433
+ textColorToken: z5.string(),
4434
+ fontWeight: z5.enum(["regular", "medium", "semibold", "bold", "black"]),
4435
+ fontSize: z5.enum(["2xs", "xs", "sm", "base"]),
4436
+ textTransform: z5.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
4437
+ letterSpacing: z5.enum(["normal", "wide", "wider", "widest"]).optional(),
4438
+ opacity: z5.number().min(0.2).max(1).optional()
4439
+ }),
4440
+ // Focus state
4441
+ focus: z5.object({
4442
+ ringColorToken: z5.string(),
4443
+ ringWidth: z5.enum(["0", "1", "2", "3"]),
4444
+ borderColorToken: z5.string().optional()
4445
+ // Change border color on focus
4446
+ }),
4447
+ // Error state (for validation feedback)
4448
+ error: z5.object({
4449
+ borderColorToken: z5.string(),
4450
+ textColorToken: z5.string()
4451
+ }),
4452
+ // Disabled state
4453
+ disabled: z5.object({
4454
+ backgroundColorToken: z5.string(),
4455
+ textColorToken: z5.string(),
4456
+ opacity: z5.number().min(0.3).max(0.7)
4457
+ })
4458
+ });
4459
+
4460
+ // ../theme-core/src/navigation/types.ts
4461
+ import { z as z7 } from "zod";
4462
+
4463
+ // ../theme-core/src/interactive/baseSchema.ts
4464
+ import { z as z6 } from "zod";
4465
+ var interactiveTypographySchema = z6.object({
4466
+ /** Font family source */
4467
+ typography: z6.enum(["body", "heading"]).default("body"),
4468
+ /** Font weight */
4469
+ fontWeight: z6.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
4470
+ /** Text transform */
4471
+ textTransform: z6.enum(["none", "uppercase", "capitalize"]).default("none"),
4472
+ /** Italic style */
4473
+ italic: z6.boolean().default(false)
4474
+ });
4475
+ var effectApplicationSchema2 = z6.object({
4476
+ /** Effect preset ID */
4477
+ effectId: z6.string(),
4478
+ /** User-provided customization options */
4479
+ options: z6.record(z6.string(), z6.any()).optional()
4480
+ });
4481
+ var effectCompositionSchema = z6.object({
4482
+ /** Effects always applied */
4483
+ base: z6.array(effectApplicationSchema2).optional(),
4484
+ /** Effects applied on hover */
4485
+ hover: z6.array(effectApplicationSchema2).optional(),
4486
+ /** Effects applied on active/pressed */
4487
+ active: z6.array(effectApplicationSchema2).optional(),
4488
+ /** Effects applied on focus */
4489
+ focus: z6.array(effectApplicationSchema2).optional()
4490
+ });
4491
+
4492
+ // ../theme-core/src/navigation/types.ts
4493
+ var navLinkPaddingSchema = z7.enum(["none", "compact", "default"]);
4494
+ var navLinkPaddingXSchema = z7.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
4495
+ var navLinkBorderRadiusSchema = z7.enum(["none", "sm", "md", "full"]);
4496
+ var navLinkTextSizeSchema = z7.enum(["xs", "sm", "base", "lg"]);
4497
+ var navLinkLetterSpacingSchema = z7.enum(["normal", "wide", "wider", "widest"]);
4498
+ var navLinkStyleSchema = z7.object({
4499
+ /** Display name for the style */
4500
+ name: z7.string().min(1).max(30).optional(),
4501
+ /** Typography settings (inherited from interactive base) */
4502
+ ...interactiveTypographySchema.shape,
4503
+ /** Text color token */
4504
+ colorToken: z7.string().default("text"),
4505
+ /** Optional text size override */
4506
+ textSize: navLinkTextSizeSchema.optional(),
4507
+ /** Optional letter spacing override */
4508
+ letterSpacing: navLinkLetterSpacingSchema.optional(),
4509
+ /** Hover/active color token (for color-change effects) */
4510
+ hoverColorToken: z7.string().nullable().optional(),
4511
+ /** Padding preset */
4512
+ padding: navLinkPaddingSchema.default("compact"),
4513
+ /** Horizontal padding override (overrides horizontal component of padding preset) */
4514
+ paddingX: navLinkPaddingXSchema.optional(),
4515
+ /** Border radius (for capsule/pill styles) */
4516
+ borderRadius: navLinkBorderRadiusSchema.default("none"),
4517
+ /** Composable effects */
4518
+ effects: effectCompositionSchema.optional()
4519
+ });
4520
+
4521
+ // ../theme-core/src/customCss/validation.ts
4522
+ import { z as z8 } from "zod";
4523
+ var FORBIDDEN_SELECTORS = [":root", "html", "body"];
4524
+ var UNIVERSAL_SELECTOR = "*";
4525
+ var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
4526
+ var JAVASCRIPT_URL_PATTERN = /javascript\s*:/i;
4527
+ function isForbiddenSelectorPart(part) {
4528
+ const normalized = part.toLowerCase().trim();
4529
+ if (!normalized) return true;
4530
+ if (normalized === UNIVERSAL_SELECTOR || normalized.startsWith("* ") || normalized.endsWith(" *") || normalized.includes(" * ")) {
4531
+ return true;
4532
+ }
4533
+ for (const forbidden of FORBIDDEN_SELECTORS) {
4534
+ if (normalized === forbidden) return true;
4535
+ if (normalized.startsWith(forbidden + " ")) return true;
4536
+ if (normalized.startsWith(forbidden + ">")) return true;
4537
+ if (normalized.startsWith(forbidden + "+")) return true;
4538
+ if (normalized.startsWith(forbidden + "~")) return true;
4539
+ if (normalized.startsWith(forbidden + ".")) return true;
4540
+ if (normalized.startsWith(forbidden + "#")) return true;
4541
+ if (normalized.startsWith(forbidden + "[")) return true;
4542
+ if (normalized.startsWith(forbidden + ":") && !normalized.startsWith(forbidden + "::")) return true;
4543
+ }
4544
+ return false;
4545
+ }
4546
+ function hasScopeEscapingSiblingCombinator(selector) {
4547
+ const normalized = selector.trim();
4548
+ return /&\s*[+~]/.test(normalized);
4549
+ }
4550
+ function containsForbiddenSelector(selector) {
4551
+ const normalized = selector.toLowerCase().trim();
4552
+ if (!normalized) return true;
4553
+ if (hasScopeEscapingSiblingCombinator(selector)) {
4554
+ return true;
4555
+ }
4556
+ const parts = normalized.split(",");
4557
+ for (const part of parts) {
4558
+ if (isForbiddenSelectorPart(part)) {
4559
+ return true;
4560
+ }
4561
+ }
4562
+ return false;
4563
+ }
4564
+ var selectorSchema = z8.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
4565
+ (s) => !containsForbiddenSelector(s),
4566
+ { message: "Global selectors (:root, html, body, *) are not allowed" }
4567
+ );
4568
+ function containsRemoteUrl(value) {
4569
+ return REMOTE_URL_PATTERN.test(value);
4570
+ }
4571
+ function containsJavascriptUrl(value) {
4572
+ return JAVASCRIPT_URL_PATTERN.test(value);
4573
+ }
4574
+ var declarationValueSchema = z8.string().max(500, "Declaration value too long (max 500 characters)").refine(
4575
+ (v) => !containsRemoteUrl(v),
4576
+ { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
4577
+ ).refine(
4578
+ (v) => !containsJavascriptUrl(v),
4579
+ { message: "javascript: URLs are not allowed" }
4580
+ );
4581
+ var declarationsSchema = z8.record(
4582
+ z8.string().min(1).max(100),
4583
+ // property name
4584
+ declarationValueSchema
4585
+ // property value
4586
+ );
4587
+ var customCssRuleSchema = z8.object({
4588
+ id: z8.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
4589
+ selector: selectorSchema,
4590
+ declarations: declarationsSchema
4591
+ });
4592
+ var blockCustomCssRuleSchema = customCssRuleSchema.extend({
4593
+ blockKind: z8.string().min(1, "Block kind is required").max(50, "Block kind too long")
4594
+ });
4595
+ var customCssRulesSchema = z8.array(customCssRuleSchema).optional();
4596
+ var blockCustomCssRulesSchema = z8.array(blockCustomCssRuleSchema).optional();
4597
+
4598
+ // ../theme-core/src/customCss/atRuleValidation.ts
4599
+ import { z as z9 } from "zod";
4600
+ var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
4601
+ var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
4602
+ var BLOCKED_AT_RULES = ["@import", "@charset"];
4603
+ var BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
4604
+ var ruleIdSchema = z9.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
4605
+ var nestedRuleSchema = z9.object({
4606
+ selector: selectorSchema,
4607
+ declarations: declarationsSchema
4608
+ });
4609
+ function isValidKeyframeOffset(offset) {
4610
+ const trimmed = offset.trim().toLowerCase();
4611
+ if (trimmed === "from" || trimmed === "to") return true;
4612
+ const match = trimmed.match(/^(\d{1,3})%$/);
4613
+ if (!match || match[1] === void 0) return false;
4614
+ const value = parseInt(match[1], 10);
4615
+ return value >= 0 && value <= 100;
4616
+ }
4617
+ var keyframeOffsetSchema = z9.string().transform((offset) => offset.trim()).refine(
4618
+ (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
4619
+ { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
4620
+ ).refine(
4621
+ isValidKeyframeOffset,
4622
+ { message: "Keyframe offset must be between 0% and 100%" }
4623
+ );
4624
+ var animationNameSchema = z9.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
4625
+ (name) => ANIMATION_NAME_PATTERN.test(name),
4626
+ { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
4627
+ );
4628
+ var keyframeSchema = z9.object({
4629
+ offset: keyframeOffsetSchema,
4630
+ declarations: declarationsSchema
4631
+ });
4632
+ var keyframesAtRuleSchema = z9.object({
4633
+ id: ruleIdSchema,
4634
+ type: z9.literal("keyframes"),
4635
+ name: animationNameSchema,
4636
+ frames: z9.array(keyframeSchema).min(1, "At least one keyframe is required")
4637
+ });
4638
+ var fontFaceDeclarationsSchema = z9.record(z9.string().min(1).max(100), declarationValueSchema).refine(
4639
+ (decls) => "fontFamily" in decls || "font-family" in decls,
4640
+ { message: "font-family is required in @font-face" }
4641
+ );
4642
+ var fontFaceAtRuleSchema = z9.object({
4643
+ id: ruleIdSchema,
4644
+ type: z9.literal("font-face"),
4645
+ declarations: fontFaceDeclarationsSchema
4646
+ });
4647
+ var mediaQuerySchema = z9.string().min(1, "Media query is required").max(200, "Media query too long");
4648
+ var mediaAtRuleSchema = z9.object({
4649
+ id: ruleIdSchema,
4650
+ type: z9.literal("media"),
4651
+ query: mediaQuerySchema,
4652
+ rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
4653
+ });
4654
+ var supportsConditionSchema = z9.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
4655
+ var supportsAtRuleSchema = z9.object({
4656
+ id: ruleIdSchema,
4657
+ type: z9.literal("supports"),
4658
+ condition: supportsConditionSchema,
4659
+ rules: z9.array(nestedRuleSchema).min(1, "At least one rule is required")
4660
+ });
4661
+ function containsBlockedAtRule(css) {
4662
+ return BLOCKED_AT_RULE_PATTERN.test(css);
4663
+ }
4664
+ var rawCssSchema = z9.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
4665
+ (css) => css.trim().startsWith("@"),
4666
+ { message: "Raw at-rule must start with @" }
4667
+ ).refine(
4668
+ (css) => !containsBlockedAtRule(css),
4669
+ { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
4670
+ );
4671
+ var rawAtRuleSchema = z9.object({
4672
+ id: ruleIdSchema,
4673
+ type: z9.literal("raw"),
4674
+ css: rawCssSchema
4675
+ });
4676
+ var customCssAtRuleSchema = z9.discriminatedUnion("type", [
4677
+ keyframesAtRuleSchema,
4678
+ fontFaceAtRuleSchema,
4679
+ mediaAtRuleSchema,
4680
+ supportsAtRuleSchema,
4681
+ rawAtRuleSchema
4682
+ ]);
4683
+ var customCssAtRulesSchema = z9.array(customCssAtRuleSchema).optional();
4684
+
4685
+ // ../theme-core/src/shared/componentStyles.ts
4686
+ import { z as z10 } from "zod";
4687
+ var componentBorderSchema = z10.object({
4688
+ width: z10.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
4689
+ style: z10.enum(["solid", "dashed"]).default("solid"),
4690
+ colorToken: z10.string().optional()
4691
+ // defaults to "border" if not set
4692
+ });
4693
+ var componentShadowSchema = z10.object({
4694
+ elevation: z10.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
4695
+ });
4696
+
4400
4697
  // ../theme-core/src/tokens/blockColorTokens.ts
4401
4698
  var blockColorTokenNames = [
4402
4699
  "text",
@@ -7425,127 +7722,6 @@ var BookingFormClient = ({
7425
7722
  // ../theme-core/src/ClientThemeScope.tsx
7426
7723
  import { useMemo as useMemo6 } from "react";
7427
7724
 
7428
- // ../theme-core/src/inputs/types.ts
7429
- import { z as z6 } from "zod";
7430
- var inputSystemSchema = z6.object({
7431
- // Base styling (applied to all inputs)
7432
- base: z6.object({
7433
- background: z6.union([
7434
- z6.object({
7435
- type: z6.literal("solid"),
7436
- colorToken: z6.string()
7437
- }),
7438
- z6.object({
7439
- type: z6.literal("transparent")
7440
- })
7441
- ]),
7442
- textColorToken: z6.string(),
7443
- border: z6.object({
7444
- widthClass: z6.string(),
7445
- // e.g., 'border', 'border-2'
7446
- colorToken: z6.string(),
7447
- style: z6.enum(["all", "underline"]).optional()
7448
- }),
7449
- corners: z6.enum(["square", "soft", "rounded", "pill"]).nullable(),
7450
- // null = inherit from theme.corners
7451
- shadow: z6.object({
7452
- elevation: z6.enum(["none", "low", "medium"]),
7453
- softness: z6.enum(["soft", "crisp", "hard"]).nullable()
7454
- }).nullable(),
7455
- spacing: z6.enum(["compact", "cozy", "medium", "comfortable"]),
7456
- // padding inside inputs
7457
- fontSize: z6.enum(["sm", "base", "lg"])
7458
- }),
7459
- // Label styling
7460
- label: z6.object({
7461
- textColorToken: z6.string(),
7462
- fontWeight: z6.enum(["regular", "medium", "semibold", "bold", "black"]),
7463
- fontSize: z6.enum(["2xs", "xs", "sm", "base"]),
7464
- textTransform: z6.enum(["none", "uppercase", "lowercase", "capitalize"]).optional(),
7465
- letterSpacing: z6.enum(["normal", "wide", "wider", "widest"]).optional(),
7466
- opacity: z6.number().min(0.2).max(1).optional()
7467
- }),
7468
- // Focus state
7469
- focus: z6.object({
7470
- ringColorToken: z6.string(),
7471
- ringWidth: z6.enum(["0", "1", "2", "3"]),
7472
- borderColorToken: z6.string().optional()
7473
- // Change border color on focus
7474
- }),
7475
- // Error state (for validation feedback)
7476
- error: z6.object({
7477
- borderColorToken: z6.string(),
7478
- textColorToken: z6.string()
7479
- }),
7480
- // Disabled state
7481
- disabled: z6.object({
7482
- backgroundColorToken: z6.string(),
7483
- textColorToken: z6.string(),
7484
- opacity: z6.number().min(0.3).max(0.7)
7485
- })
7486
- });
7487
-
7488
- // ../theme-core/src/navigation/types.ts
7489
- import { z as z8 } from "zod";
7490
-
7491
- // ../theme-core/src/interactive/baseSchema.ts
7492
- import { z as z7 } from "zod";
7493
- var interactiveTypographySchema = z7.object({
7494
- /** Font family source */
7495
- typography: z7.enum(["body", "heading"]).default("body"),
7496
- /** Font weight */
7497
- fontWeight: z7.enum(["regular", "medium", "semibold", "bold"]).default("medium"),
7498
- /** Text transform */
7499
- textTransform: z7.enum(["none", "uppercase", "capitalize"]).default("none"),
7500
- /** Italic style */
7501
- italic: z7.boolean().default(false)
7502
- });
7503
- var effectApplicationSchema2 = z7.object({
7504
- /** Effect preset ID */
7505
- effectId: z7.string(),
7506
- /** User-provided customization options */
7507
- options: z7.record(z7.string(), z7.any()).optional()
7508
- });
7509
- var effectCompositionSchema = z7.object({
7510
- /** Effects always applied */
7511
- base: z7.array(effectApplicationSchema2).optional(),
7512
- /** Effects applied on hover */
7513
- hover: z7.array(effectApplicationSchema2).optional(),
7514
- /** Effects applied on active/pressed */
7515
- active: z7.array(effectApplicationSchema2).optional(),
7516
- /** Effects applied on focus */
7517
- focus: z7.array(effectApplicationSchema2).optional()
7518
- });
7519
-
7520
- // ../theme-core/src/navigation/types.ts
7521
- var navLinkPaddingSchema = z8.enum(["none", "compact", "default"]);
7522
- var navLinkPaddingXSchema = z8.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
7523
- var navLinkBorderRadiusSchema = z8.enum(["none", "sm", "md", "full"]);
7524
- var navLinkTextSizeSchema = z8.enum(["xs", "sm", "base", "lg"]);
7525
- var navLinkLetterSpacingSchema = z8.enum(["normal", "wide", "wider", "widest"]);
7526
- var navLinkStyleSchema = z8.object({
7527
- /** Display name for the style */
7528
- name: z8.string().min(1).max(30).optional(),
7529
- /** Typography settings (inherited from interactive base) */
7530
- ...interactiveTypographySchema.shape,
7531
- /** Text color token */
7532
- colorToken: z8.string().default("text"),
7533
- /** Optional text size override */
7534
- textSize: navLinkTextSizeSchema.optional(),
7535
- /** Optional letter spacing override */
7536
- letterSpacing: navLinkLetterSpacingSchema.optional(),
7537
- /** Hover/active color token (for color-change effects) */
7538
- hoverColorToken: z8.string().nullable().optional(),
7539
- /** Padding preset */
7540
- padding: navLinkPaddingSchema.default("compact"),
7541
- /** Horizontal padding override (overrides horizontal component of padding preset) */
7542
- paddingX: navLinkPaddingXSchema.optional(),
7543
- /** Border radius (for capsule/pill styles) */
7544
- borderRadius: navLinkBorderRadiusSchema.default("none"),
7545
- /** Composable effects */
7546
- effects: effectCompositionSchema.optional()
7547
- });
7548
-
7549
7725
  // ../theme-core/src/navigation/presets.ts
7550
7726
  var NAV_LINK_PRESETS = {
7551
7727
  /**
@@ -7690,18 +7866,6 @@ var NAV_LINK_PRESETS = {
7690
7866
  };
7691
7867
  var NAV_LINK_PRESET_IDS = Object.keys(NAV_LINK_PRESETS);
7692
7868
 
7693
- // ../theme-core/src/shared/componentStyles.ts
7694
- import { z as z9 } from "zod";
7695
- var componentBorderSchema = z9.object({
7696
- width: z9.enum(["none", "hairline", "thin", "medium", "thick"]).default("none"),
7697
- style: z9.enum(["solid", "dashed"]).default("solid"),
7698
- colorToken: z9.string().optional()
7699
- // defaults to "border" if not set
7700
- });
7701
- var componentShadowSchema = z9.object({
7702
- elevation: z9.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("sm")
7703
- });
7704
-
7705
7869
  // ../theme-core/src/layout/generateLayoutCss.ts
7706
7870
  var waveTransitionMask = svgDataUrl(
7707
7871
  "<svg viewBox='0 0 1440 72' xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='none'><path d='M0 72V46C130 55 260 24 420 30C590 36 690 62 860 42C1035 21 1160 47 1305 36C1365 31 1415 33 1440 38V72H0Z' fill='white'/></svg>"
@@ -8159,170 +8323,6 @@ blockVarRegistry.set("testimonials", generateTestimonialsVars);
8159
8323
  blockVarRegistry.set("course-details", generateCourseDetailsVars);
8160
8324
  blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
8161
8325
 
8162
- // ../theme-core/src/customCss/validation.ts
8163
- import { z as z10 } from "zod";
8164
- var FORBIDDEN_SELECTORS = [":root", "html", "body"];
8165
- var UNIVERSAL_SELECTOR = "*";
8166
- var REMOTE_URL_PATTERN = /url\s*\(\s*['"]?(https?:|\/\/)/i;
8167
- var JAVASCRIPT_URL_PATTERN = /javascript\s*:/i;
8168
- function isForbiddenSelectorPart(part) {
8169
- const normalized = part.toLowerCase().trim();
8170
- if (!normalized) return true;
8171
- if (normalized === UNIVERSAL_SELECTOR || normalized.startsWith("* ") || normalized.endsWith(" *") || normalized.includes(" * ")) {
8172
- return true;
8173
- }
8174
- for (const forbidden of FORBIDDEN_SELECTORS) {
8175
- if (normalized === forbidden) return true;
8176
- if (normalized.startsWith(forbidden + " ")) return true;
8177
- if (normalized.startsWith(forbidden + ">")) return true;
8178
- if (normalized.startsWith(forbidden + "+")) return true;
8179
- if (normalized.startsWith(forbidden + "~")) return true;
8180
- if (normalized.startsWith(forbidden + ".")) return true;
8181
- if (normalized.startsWith(forbidden + "#")) return true;
8182
- if (normalized.startsWith(forbidden + "[")) return true;
8183
- if (normalized.startsWith(forbidden + ":") && !normalized.startsWith(forbidden + "::")) return true;
8184
- }
8185
- return false;
8186
- }
8187
- function hasScopeEscapingSiblingCombinator(selector) {
8188
- const normalized = selector.trim();
8189
- return /&\s*[+~]/.test(normalized);
8190
- }
8191
- function containsForbiddenSelector(selector) {
8192
- const normalized = selector.toLowerCase().trim();
8193
- if (!normalized) return true;
8194
- if (hasScopeEscapingSiblingCombinator(selector)) {
8195
- return true;
8196
- }
8197
- const parts = normalized.split(",");
8198
- for (const part of parts) {
8199
- if (isForbiddenSelectorPart(part)) {
8200
- return true;
8201
- }
8202
- }
8203
- return false;
8204
- }
8205
- var selectorSchema = z10.string().min(1, "Selector cannot be empty").max(200, "Selector too long (max 200 characters)").refine(
8206
- (s) => !containsForbiddenSelector(s),
8207
- { message: "Global selectors (:root, html, body, *) are not allowed" }
8208
- );
8209
- function containsRemoteUrl(value) {
8210
- return REMOTE_URL_PATTERN.test(value);
8211
- }
8212
- function containsJavascriptUrl(value) {
8213
- return JAVASCRIPT_URL_PATTERN.test(value);
8214
- }
8215
- var declarationValueSchema = z10.string().max(500, "Declaration value too long (max 500 characters)").refine(
8216
- (v) => !containsRemoteUrl(v),
8217
- { message: "Remote url() references are not allowed. Use local paths, data URIs, or fragment IDs." }
8218
- ).refine(
8219
- (v) => !containsJavascriptUrl(v),
8220
- { message: "javascript: URLs are not allowed" }
8221
- );
8222
- var declarationsSchema = z10.record(
8223
- z10.string().min(1).max(100),
8224
- // property name
8225
- declarationValueSchema
8226
- // property value
8227
- );
8228
- var customCssRuleSchema = z10.object({
8229
- id: z10.string().min(1, "Rule ID is required").max(50, "Rule ID too long"),
8230
- selector: selectorSchema,
8231
- declarations: declarationsSchema
8232
- });
8233
- var blockCustomCssRuleSchema = customCssRuleSchema.extend({
8234
- blockKind: z10.string().min(1, "Block kind is required").max(50, "Block kind too long")
8235
- });
8236
- var customCssRulesSchema = z10.array(customCssRuleSchema).optional();
8237
- var blockCustomCssRulesSchema = z10.array(blockCustomCssRuleSchema).optional();
8238
-
8239
- // ../theme-core/src/customCss/atRuleValidation.ts
8240
- import { z as z11 } from "zod";
8241
- var KEYFRAME_OFFSET_PATTERN = /^(from|to|\d{1,3}%)$/i;
8242
- var ANIMATION_NAME_PATTERN = /^[a-zA-Z_-][a-zA-Z0-9_-]*$/;
8243
- var BLOCKED_AT_RULES = ["@import", "@charset"];
8244
- var BLOCKED_AT_RULE_PATTERN = /@(?:import|charset)\b/i;
8245
- var ruleIdSchema = z11.string().min(1, "Rule ID is required").max(50, "Rule ID too long");
8246
- var nestedRuleSchema = z11.object({
8247
- selector: selectorSchema,
8248
- declarations: declarationsSchema
8249
- });
8250
- function isValidKeyframeOffset(offset) {
8251
- const trimmed = offset.trim().toLowerCase();
8252
- if (trimmed === "from" || trimmed === "to") return true;
8253
- const match = trimmed.match(/^(\d{1,3})%$/);
8254
- if (!match || match[1] === void 0) return false;
8255
- const value = parseInt(match[1], 10);
8256
- return value >= 0 && value <= 100;
8257
- }
8258
- var keyframeOffsetSchema = z11.string().transform((offset) => offset.trim()).refine(
8259
- (offset) => KEYFRAME_OFFSET_PATTERN.test(offset),
8260
- { message: 'Invalid keyframe offset. Use percentages (0%, 50%, 100%) or "from"/"to"' }
8261
- ).refine(
8262
- isValidKeyframeOffset,
8263
- { message: "Keyframe offset must be between 0% and 100%" }
8264
- );
8265
- var animationNameSchema = z11.string().min(1, "Animation name is required").max(50, "Animation name too long").refine(
8266
- (name) => ANIMATION_NAME_PATTERN.test(name),
8267
- { message: "Invalid animation name. Use letters, numbers, dashes, underscores (start with letter, dash, or underscore)" }
8268
- );
8269
- var keyframeSchema = z11.object({
8270
- offset: keyframeOffsetSchema,
8271
- declarations: declarationsSchema
8272
- });
8273
- var keyframesAtRuleSchema = z11.object({
8274
- id: ruleIdSchema,
8275
- type: z11.literal("keyframes"),
8276
- name: animationNameSchema,
8277
- frames: z11.array(keyframeSchema).min(1, "At least one keyframe is required")
8278
- });
8279
- var fontFaceDeclarationsSchema = z11.record(z11.string().min(1).max(100), declarationValueSchema).refine(
8280
- (decls) => "fontFamily" in decls || "font-family" in decls,
8281
- { message: "font-family is required in @font-face" }
8282
- );
8283
- var fontFaceAtRuleSchema = z11.object({
8284
- id: ruleIdSchema,
8285
- type: z11.literal("font-face"),
8286
- declarations: fontFaceDeclarationsSchema
8287
- });
8288
- var mediaQuerySchema = z11.string().min(1, "Media query is required").max(200, "Media query too long");
8289
- var mediaAtRuleSchema = z11.object({
8290
- id: ruleIdSchema,
8291
- type: z11.literal("media"),
8292
- query: mediaQuerySchema,
8293
- rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
8294
- });
8295
- var supportsConditionSchema = z11.string().min(1, "Supports condition is required").max(200, "Supports condition too long");
8296
- var supportsAtRuleSchema = z11.object({
8297
- id: ruleIdSchema,
8298
- type: z11.literal("supports"),
8299
- condition: supportsConditionSchema,
8300
- rules: z11.array(nestedRuleSchema).min(1, "At least one rule is required")
8301
- });
8302
- function containsBlockedAtRule(css) {
8303
- return BLOCKED_AT_RULE_PATTERN.test(css);
8304
- }
8305
- var rawCssSchema = z11.string().min(1, "CSS is required").max(5e3, "Raw CSS too long (max 5000 characters)").refine(
8306
- (css) => css.trim().startsWith("@"),
8307
- { message: "Raw at-rule must start with @" }
8308
- ).refine(
8309
- (css) => !containsBlockedAtRule(css),
8310
- { message: `Blocked at-rules: ${BLOCKED_AT_RULES.join(", ")}. Use typed at-rules or local assets instead.` }
8311
- );
8312
- var rawAtRuleSchema = z11.object({
8313
- id: ruleIdSchema,
8314
- type: z11.literal("raw"),
8315
- css: rawCssSchema
8316
- });
8317
- var customCssAtRuleSchema = z11.discriminatedUnion("type", [
8318
- keyframesAtRuleSchema,
8319
- fontFaceAtRuleSchema,
8320
- mediaAtRuleSchema,
8321
- supportsAtRuleSchema,
8322
- rawAtRuleSchema
8323
- ]);
8324
- var customCssAtRulesSchema = z11.array(customCssAtRuleSchema).optional();
8325
-
8326
8326
  // ../theme-core/src/responsiveMode.ts
8327
8327
  var THEME_RESPONSIVE_MODE_ATTR = "data-rb-responsive-mode";
8328
8328
  function escapeRegExp(value) {