@opensite/ui 3.5.7 → 3.5.8

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.
@@ -1132,16 +1132,22 @@ var FeaturedCardsGridDropdown = ({
1132
1132
  optixFlowConfig
1133
1133
  }) => {
1134
1134
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1135
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
1135
+ featuredLinks && featuredLinks?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
1136
1136
  FeaturedLink,
1137
1137
  {
1138
1138
  link,
1139
1139
  optixFlowConfig
1140
1140
  },
1141
1141
  `desktop-featured-link-${index}`
1142
- )) }),
1143
- /* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
1144
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 pt-8", children: links?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(NavLink, { link }, `default-nav-link-${index}`)) })
1142
+ )) }) : null,
1143
+ featuredLinks && featuredLinks?.length > 0 && links && links?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Separator, {}) : null,
1144
+ links && links?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
1145
+ "div",
1146
+ {
1147
+ className: `grid grid-cols-4 pt-${featuredLinks && featuredLinks?.length > 0 ? 8 : 0} gap-4`,
1148
+ children: links?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(NavLink, { link }, `default-nav-link-${index}`))
1149
+ }
1150
+ ) : null
1145
1151
  ] });
1146
1152
  };
1147
1153
  var GroupedLinksImageDropdown = ({
@@ -39,16 +39,16 @@ interface IMenuLink {
39
39
  */
40
40
  interface NavbarAnimatedPreviewProps {
41
41
  /**
42
- * Logo configuration
43
- */
42
+ * Logo configuration
43
+ */
44
44
  logo?: LogoConfig;
45
45
  /**
46
- * Navigation menu links with optional dropdown groups
47
- */
46
+ * Navigation menu links with optional dropdown groups
47
+ */
48
48
  menuLinks?: IMenuLink[];
49
49
  /**
50
- * Action configurations (e.g., Sign In, Get Started buttons)
51
- */
50
+ * Action configurations (e.g., Sign In, Get Started buttons)
51
+ */
52
52
  actions?: ActionConfig[];
53
53
  }
54
54
  interface NavbarAnimatedPreviewRuntimeProps {
@@ -39,16 +39,16 @@ interface IMenuLink {
39
39
  */
40
40
  interface NavbarAnimatedPreviewProps {
41
41
  /**
42
- * Logo configuration
43
- */
42
+ * Logo configuration
43
+ */
44
44
  logo?: LogoConfig;
45
45
  /**
46
- * Navigation menu links with optional dropdown groups
47
- */
46
+ * Navigation menu links with optional dropdown groups
47
+ */
48
48
  menuLinks?: IMenuLink[];
49
49
  /**
50
- * Action configurations (e.g., Sign In, Get Started buttons)
51
- */
50
+ * Action configurations (e.g., Sign In, Get Started buttons)
51
+ */
52
52
  actions?: ActionConfig[];
53
53
  }
54
54
  interface NavbarAnimatedPreviewRuntimeProps {
@@ -1107,16 +1107,22 @@ var FeaturedCardsGridDropdown = ({
1107
1107
  optixFlowConfig
1108
1108
  }) => {
1109
1109
  return /* @__PURE__ */ jsxs("div", { children: [
1110
- /* @__PURE__ */ jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsx(
1110
+ featuredLinks && featuredLinks?.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsx(
1111
1111
  FeaturedLink,
1112
1112
  {
1113
1113
  link,
1114
1114
  optixFlowConfig
1115
1115
  },
1116
1116
  `desktop-featured-link-${index}`
1117
- )) }),
1118
- /* @__PURE__ */ jsx(Separator, {}),
1119
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 pt-8", children: links?.map((link, index) => /* @__PURE__ */ jsx(NavLink, { link }, `default-nav-link-${index}`)) })
1117
+ )) }) : null,
1118
+ featuredLinks && featuredLinks?.length > 0 && links && links?.length > 0 ? /* @__PURE__ */ jsx(Separator, {}) : null,
1119
+ links && links?.length > 0 ? /* @__PURE__ */ jsx(
1120
+ "div",
1121
+ {
1122
+ className: `grid grid-cols-4 pt-${featuredLinks && featuredLinks?.length > 0 ? 8 : 0} gap-4`,
1123
+ children: links?.map((link, index) => /* @__PURE__ */ jsx(NavLink, { link }, `default-nav-link-${index}`))
1124
+ }
1125
+ ) : null
1120
1126
  ] });
1121
1127
  };
1122
1128
  var GroupedLinksImageDropdown = ({
package/dist/registry.cjs CHANGED
@@ -66975,16 +66975,22 @@ var FeaturedCardsGridDropdown = ({
66975
66975
  optixFlowConfig
66976
66976
  }) => {
66977
66977
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
66978
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
66978
+ featuredLinks && featuredLinks?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
66979
66979
  FeaturedLink,
66980
66980
  {
66981
66981
  link,
66982
66982
  optixFlowConfig
66983
66983
  },
66984
66984
  `desktop-featured-link-${index}`
66985
- )) }),
66986
- /* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
66987
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 pt-8", children: links?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(NavLink, { link }, `default-nav-link-${index}`)) })
66985
+ )) }) : null,
66986
+ featuredLinks && featuredLinks?.length > 0 && links && links?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Separator, {}) : null,
66987
+ links && links?.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
66988
+ "div",
66989
+ {
66990
+ className: `grid grid-cols-4 pt-${featuredLinks && featuredLinks?.length > 0 ? 8 : 0} gap-4`,
66991
+ children: links?.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(NavLink, { link }, `default-nav-link-${index}`))
66992
+ }
66993
+ ) : null
66988
66994
  ] });
66989
66995
  };
66990
66996
  var GroupedLinksImageDropdown = ({
@@ -112131,20 +112137,29 @@ var BLOCK_REGISTRY = {
112131
112137
  },
112132
112138
  requiresSiteCapabilities: ["reviews_or_testimonials", "media_library"]
112133
112139
  },
112134
- defaultProps: {
112140
+ exampleProps: {
112135
112141
  heading: "Compassionate care for your mental wellbeing",
112136
112142
  description: "Our team of experienced mental health professionals is dedicated to providing compassionate care and support to individuals in need.",
112137
112143
  smallImages: [
112138
- { src: "/images/team-1.jpg", alt: "Dr. Smith" },
112139
- { src: "/images/team-2.jpg", alt: "Dr. Johnson" }
112144
+ {
112145
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112146
+ alt: "Dr. Smith"
112147
+ },
112148
+ {
112149
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112150
+ alt: "Dr. Johnson"
112151
+ }
112140
112152
  ],
112141
112153
  testimonial: {
112142
112154
  quote: "The support I received changed my life. I'm so grateful for the compassionate care.",
112143
112155
  author: "Sarah M.",
112144
112156
  role: "Client",
112145
- avatarSrc: "/images/avatar.jpg"
112157
+ avatarSrc: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp"
112158
+ },
112159
+ featureImage: {
112160
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112161
+ alt: "Mental health support"
112146
112162
  },
112147
- featureImage: { src: "/images/feature.jpg", alt: "Mental health support" },
112148
112163
  actions: [
112149
112164
  { label: "Get Started", href: "#", variant: "default" },
112150
112165
  { label: "Talk to Sales", href: "#", variant: "outline" }
@@ -112169,7 +112184,101 @@ var BLOCK_REGISTRY = {
112169
112184
  category: "hero",
112170
112185
  component: HeroMentorshipVideoSplit,
112171
112186
  props: "HeroMentorshipVideoSplitProps",
112172
- exampleUsage: `<HeroMentorshipVideoSplit />`.trim()
112187
+ exampleUsage: `
112188
+ <HeroMentorshipVideoSplit
112189
+ heading="Reclaim Your Peace. Scale Sustainably."
112190
+ description="Somatic mindset coaching for high-achieving entrepreneurs ready to lead from strength \u2014 not survival mode."
112191
+ action={{ label: "Book Your Discovery Call", href: "/contact", variant: "default", size: "lg" }}
112192
+ videoLabel="Watch the Overview"
112193
+ videoTitle="Coaching Overview"
112194
+ modalVideo={{
112195
+ image: {
112196
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112197
+ alt: "Coaching overview poster",
112198
+ },
112199
+ video: {
112200
+ src: "https://toastability-production.s3.amazonaws.com/4kox2ux0ye1wlqkdwg03s08a67i1",
112201
+ },
112202
+ }}
112203
+ image={{
112204
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112205
+ alt: "Coach portrait",
112206
+ }}
112207
+ background="dark"
112208
+ />
112209
+ `.trim(),
112210
+ importantUsageNotes: "The 'image' prop is the main hero image and MUST be an image asset (poster/photo). The 'modalVideo' prop's nested 'video.src' MUST be a video asset (HLS playlist or MP4) and 'modalVideo.image.src' MUST be an image asset (video poster). NEVER swap these: do not put a video URL into the 'image' prop and do not put an image URL into 'modalVideo.video.src'. All media src values must be absolute URLs to real CDN assets \u2014 never relative paths or placeholder strings. Keep 'heading' concise (under 60 characters) for visual balance.",
112211
+ usageRequirements: {
112212
+ requiredProps: ["heading", "image"],
112213
+ propConstraints: {
112214
+ heading: { required: true, maxLength: 60 },
112215
+ description: { maxLength: 220 },
112216
+ image: {
112217
+ required: true,
112218
+ note: "Main hero image. Must be an image asset (jpg/png/webp), NOT a video URL."
112219
+ },
112220
+ "modalVideo.video.src": {
112221
+ note: "Must be a video asset URL (HLS .m3u8 master playlist or .mp4). Must NOT be an image URL."
112222
+ },
112223
+ "modalVideo.image.src": {
112224
+ note: "Video poster image. Must be an image asset, NOT a video URL."
112225
+ }
112226
+ },
112227
+ mediaSlots: {
112228
+ image: {
112229
+ path: "image",
112230
+ roles: ["hero", "feature", "profile"],
112231
+ disallowedRoles: ["logo", "favicon", "video-thumbnail"],
112232
+ minPixelClass: "large",
112233
+ required: true,
112234
+ note: "Main hero image slot. IMAGE MEDIA ONLY. Do not assign a video URL here."
112235
+ },
112236
+ "modalVideo.video.src": {
112237
+ path: "modalVideo.video.src",
112238
+ roles: [],
112239
+ disallowedRoles: ["logo", "favicon", "hero", "feature", "profile"],
112240
+ note: "VIDEO MEDIA ONLY (HLS master playlist or MP4). Do not assign an image URL here."
112241
+ },
112242
+ "modalVideo.image.src": {
112243
+ path: "modalVideo.image.src",
112244
+ roles: ["video-thumbnail", "hero", "feature"],
112245
+ disallowedRoles: ["logo", "favicon"],
112246
+ minPixelClass: "medium",
112247
+ note: "Poster image shown before the video plays. IMAGE MEDIA ONLY."
112248
+ }
112249
+ },
112250
+ requiresSiteCapabilities: ["media_library"],
112251
+ notes: [
112252
+ "Image and video media must never be swapped between the 'image' prop and the 'modalVideo' prop.",
112253
+ "All media src values must be absolute URLs to real assets; relative paths are not allowed."
112254
+ ]
112255
+ },
112256
+ exampleProps: {
112257
+ heading: "Reclaim Your Peace. Scale Sustainably.",
112258
+ description: "Somatic mindset coaching for high-achieving entrepreneurs ready to lead from strength \u2014 not survival mode.",
112259
+ action: {
112260
+ label: "Book Your Discovery Call",
112261
+ href: "/contact",
112262
+ variant: "default",
112263
+ size: "lg"
112264
+ },
112265
+ videoLabel: "Watch the Overview",
112266
+ videoTitle: "Coaching Overview",
112267
+ modalVideo: {
112268
+ image: {
112269
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112270
+ alt: "Coaching overview poster"
112271
+ },
112272
+ video: {
112273
+ src: "https://toastability-production.s3.amazonaws.com/4kox2ux0ye1wlqkdwg03s08a67i1"
112274
+ }
112275
+ },
112276
+ image: {
112277
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112278
+ alt: "Coach portrait"
112279
+ },
112280
+ background: "dark"
112281
+ }
112173
112282
  },
112174
112283
  "hero-business-operations-mosaic": {
112175
112284
  id: "hero-business-operations-mosaic",
@@ -120450,7 +120559,7 @@ function normalizeBlock(block, source) {
120450
120559
  },
120451
120560
  examples: {
120452
120561
  exampleUsage: block.exampleUsage || null,
120453
- defaultData: block.defaultProps ? JSON.parse(JSON.stringify(block.defaultProps)) : null
120562
+ exampleProps: block.exampleProps ? JSON.parse(JSON.stringify(block.exampleProps)) : null
120454
120563
  },
120455
120564
  source: source ?? null,
120456
120565
  importantUsageNotes: block.importantUsageNotes ?? null,
@@ -108,11 +108,18 @@ interface BlockContractFields {
108
108
  /** Structured, machine-readable usage requirements. */
109
109
  usageRequirements?: BlockUsageRequirements;
110
110
  /**
111
- * Canonical default / example payload for the block, matching the prop
112
- * shape. Optional. When supplied, consumers should prefer this over
113
- * parsing `exampleUsage` JSX.
111
+ * Canonical example payload for the block, matching the prop shape.
112
+ * Optional. When supplied, consumers should prefer this over parsing
113
+ * `exampleUsage` JSX.
114
+ *
115
+ * IMPORTANT: These are reference examples for AI prompting / preview
116
+ * tooling only. They are NOT runtime defaults — consumers MUST NOT
117
+ * substitute these values as fallback content on a real client site.
118
+ * The previous name (`defaultProps`) was renamed to make this explicit:
119
+ * AI agents had begun treating "default" values as safe runtime
120
+ * fallbacks for missing client data, which is incorrect.
114
121
  */
115
- defaultProps?: Record<string, unknown>;
122
+ exampleProps?: Record<string, unknown>;
116
123
  }
117
124
  /**
118
125
  * Metadata-only block registry entry (no component import)
@@ -164,12 +171,16 @@ interface BuilderContractPropsContract {
164
171
  interface BuilderContractExamples {
165
172
  exampleUsage: string | null;
166
173
  /**
167
- * Canonical default / example props payload. Populated from
168
- * BlockRegistryEntry.defaultProps when declared, otherwise null.
169
- * Older consumers that expected this to always be null should treat
170
- * an object value as advisory example data, not as a schema.
174
+ * Canonical example props payload. Populated from
175
+ * BlockRegistryEntry.exampleProps when declared, otherwise null.
176
+ *
177
+ * IMPORTANT: This is reference example data only, not a runtime
178
+ * fallback. Consumers MUST NOT substitute these values for missing
179
+ * client content. The previous name (`defaultData`) was renamed
180
+ * because downstream AI agents were treating it as safe runtime
181
+ * default content.
171
182
  */
172
- defaultData: Record<string, unknown> | null;
183
+ exampleProps: Record<string, unknown> | null;
173
184
  }
174
185
  interface BuilderContractBlock {
175
186
  componentId: string;
@@ -108,11 +108,18 @@ interface BlockContractFields {
108
108
  /** Structured, machine-readable usage requirements. */
109
109
  usageRequirements?: BlockUsageRequirements;
110
110
  /**
111
- * Canonical default / example payload for the block, matching the prop
112
- * shape. Optional. When supplied, consumers should prefer this over
113
- * parsing `exampleUsage` JSX.
111
+ * Canonical example payload for the block, matching the prop shape.
112
+ * Optional. When supplied, consumers should prefer this over parsing
113
+ * `exampleUsage` JSX.
114
+ *
115
+ * IMPORTANT: These are reference examples for AI prompting / preview
116
+ * tooling only. They are NOT runtime defaults — consumers MUST NOT
117
+ * substitute these values as fallback content on a real client site.
118
+ * The previous name (`defaultProps`) was renamed to make this explicit:
119
+ * AI agents had begun treating "default" values as safe runtime
120
+ * fallbacks for missing client data, which is incorrect.
114
121
  */
115
- defaultProps?: Record<string, unknown>;
122
+ exampleProps?: Record<string, unknown>;
116
123
  }
117
124
  /**
118
125
  * Metadata-only block registry entry (no component import)
@@ -164,12 +171,16 @@ interface BuilderContractPropsContract {
164
171
  interface BuilderContractExamples {
165
172
  exampleUsage: string | null;
166
173
  /**
167
- * Canonical default / example props payload. Populated from
168
- * BlockRegistryEntry.defaultProps when declared, otherwise null.
169
- * Older consumers that expected this to always be null should treat
170
- * an object value as advisory example data, not as a schema.
174
+ * Canonical example props payload. Populated from
175
+ * BlockRegistryEntry.exampleProps when declared, otherwise null.
176
+ *
177
+ * IMPORTANT: This is reference example data only, not a runtime
178
+ * fallback. Consumers MUST NOT substitute these values for missing
179
+ * client content. The previous name (`defaultData`) was renamed
180
+ * because downstream AI agents were treating it as safe runtime
181
+ * default content.
171
182
  */
172
- defaultData: Record<string, unknown> | null;
183
+ exampleProps: Record<string, unknown> | null;
173
184
  }
174
185
  interface BuilderContractBlock {
175
186
  componentId: string;
package/dist/registry.js CHANGED
@@ -66935,16 +66935,22 @@ var FeaturedCardsGridDropdown = ({
66935
66935
  optixFlowConfig
66936
66936
  }) => {
66937
66937
  return /* @__PURE__ */ jsxs("div", { children: [
66938
- /* @__PURE__ */ jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsx(
66938
+ featuredLinks && featuredLinks?.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex gap-4 pb-8", children: featuredLinks?.map((link, index) => /* @__PURE__ */ jsx(
66939
66939
  FeaturedLink,
66940
66940
  {
66941
66941
  link,
66942
66942
  optixFlowConfig
66943
66943
  },
66944
66944
  `desktop-featured-link-${index}`
66945
- )) }),
66946
- /* @__PURE__ */ jsx(Separator, {}),
66947
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-4 pt-8", children: links?.map((link, index) => /* @__PURE__ */ jsx(NavLink, { link }, `default-nav-link-${index}`)) })
66945
+ )) }) : null,
66946
+ featuredLinks && featuredLinks?.length > 0 && links && links?.length > 0 ? /* @__PURE__ */ jsx(Separator, {}) : null,
66947
+ links && links?.length > 0 ? /* @__PURE__ */ jsx(
66948
+ "div",
66949
+ {
66950
+ className: `grid grid-cols-4 pt-${featuredLinks && featuredLinks?.length > 0 ? 8 : 0} gap-4`,
66951
+ children: links?.map((link, index) => /* @__PURE__ */ jsx(NavLink, { link }, `default-nav-link-${index}`))
66952
+ }
66953
+ ) : null
66948
66954
  ] });
66949
66955
  };
66950
66956
  var GroupedLinksImageDropdown = ({
@@ -112091,20 +112097,29 @@ var BLOCK_REGISTRY = {
112091
112097
  },
112092
112098
  requiresSiteCapabilities: ["reviews_or_testimonials", "media_library"]
112093
112099
  },
112094
- defaultProps: {
112100
+ exampleProps: {
112095
112101
  heading: "Compassionate care for your mental wellbeing",
112096
112102
  description: "Our team of experienced mental health professionals is dedicated to providing compassionate care and support to individuals in need.",
112097
112103
  smallImages: [
112098
- { src: "/images/team-1.jpg", alt: "Dr. Smith" },
112099
- { src: "/images/team-2.jpg", alt: "Dr. Johnson" }
112104
+ {
112105
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112106
+ alt: "Dr. Smith"
112107
+ },
112108
+ {
112109
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112110
+ alt: "Dr. Johnson"
112111
+ }
112100
112112
  ],
112101
112113
  testimonial: {
112102
112114
  quote: "The support I received changed my life. I'm so grateful for the compassionate care.",
112103
112115
  author: "Sarah M.",
112104
112116
  role: "Client",
112105
- avatarSrc: "/images/avatar.jpg"
112117
+ avatarSrc: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp"
112118
+ },
112119
+ featureImage: {
112120
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112121
+ alt: "Mental health support"
112106
112122
  },
112107
- featureImage: { src: "/images/feature.jpg", alt: "Mental health support" },
112108
112123
  actions: [
112109
112124
  { label: "Get Started", href: "#", variant: "default" },
112110
112125
  { label: "Talk to Sales", href: "#", variant: "outline" }
@@ -112129,7 +112144,101 @@ var BLOCK_REGISTRY = {
112129
112144
  category: "hero",
112130
112145
  component: HeroMentorshipVideoSplit,
112131
112146
  props: "HeroMentorshipVideoSplitProps",
112132
- exampleUsage: `<HeroMentorshipVideoSplit />`.trim()
112147
+ exampleUsage: `
112148
+ <HeroMentorshipVideoSplit
112149
+ heading="Reclaim Your Peace. Scale Sustainably."
112150
+ description="Somatic mindset coaching for high-achieving entrepreneurs ready to lead from strength \u2014 not survival mode."
112151
+ action={{ label: "Book Your Discovery Call", href: "/contact", variant: "default", size: "lg" }}
112152
+ videoLabel="Watch the Overview"
112153
+ videoTitle="Coaching Overview"
112154
+ modalVideo={{
112155
+ image: {
112156
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112157
+ alt: "Coaching overview poster",
112158
+ },
112159
+ video: {
112160
+ src: "https://toastability-production.s3.amazonaws.com/4kox2ux0ye1wlqkdwg03s08a67i1",
112161
+ },
112162
+ }}
112163
+ image={{
112164
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112165
+ alt: "Coach portrait",
112166
+ }}
112167
+ background="dark"
112168
+ />
112169
+ `.trim(),
112170
+ importantUsageNotes: "The 'image' prop is the main hero image and MUST be an image asset (poster/photo). The 'modalVideo' prop's nested 'video.src' MUST be a video asset (HLS playlist or MP4) and 'modalVideo.image.src' MUST be an image asset (video poster). NEVER swap these: do not put a video URL into the 'image' prop and do not put an image URL into 'modalVideo.video.src'. All media src values must be absolute URLs to real CDN assets \u2014 never relative paths or placeholder strings. Keep 'heading' concise (under 60 characters) for visual balance.",
112171
+ usageRequirements: {
112172
+ requiredProps: ["heading", "image"],
112173
+ propConstraints: {
112174
+ heading: { required: true, maxLength: 60 },
112175
+ description: { maxLength: 220 },
112176
+ image: {
112177
+ required: true,
112178
+ note: "Main hero image. Must be an image asset (jpg/png/webp), NOT a video URL."
112179
+ },
112180
+ "modalVideo.video.src": {
112181
+ note: "Must be a video asset URL (HLS .m3u8 master playlist or .mp4). Must NOT be an image URL."
112182
+ },
112183
+ "modalVideo.image.src": {
112184
+ note: "Video poster image. Must be an image asset, NOT a video URL."
112185
+ }
112186
+ },
112187
+ mediaSlots: {
112188
+ image: {
112189
+ path: "image",
112190
+ roles: ["hero", "feature", "profile"],
112191
+ disallowedRoles: ["logo", "favicon", "video-thumbnail"],
112192
+ minPixelClass: "large",
112193
+ required: true,
112194
+ note: "Main hero image slot. IMAGE MEDIA ONLY. Do not assign a video URL here."
112195
+ },
112196
+ "modalVideo.video.src": {
112197
+ path: "modalVideo.video.src",
112198
+ roles: [],
112199
+ disallowedRoles: ["logo", "favicon", "hero", "feature", "profile"],
112200
+ note: "VIDEO MEDIA ONLY (HLS master playlist or MP4). Do not assign an image URL here."
112201
+ },
112202
+ "modalVideo.image.src": {
112203
+ path: "modalVideo.image.src",
112204
+ roles: ["video-thumbnail", "hero", "feature"],
112205
+ disallowedRoles: ["logo", "favicon"],
112206
+ minPixelClass: "medium",
112207
+ note: "Poster image shown before the video plays. IMAGE MEDIA ONLY."
112208
+ }
112209
+ },
112210
+ requiresSiteCapabilities: ["media_library"],
112211
+ notes: [
112212
+ "Image and video media must never be swapped between the 'image' prop and the 'modalVideo' prop.",
112213
+ "All media src values must be absolute URLs to real assets; relative paths are not allowed."
112214
+ ]
112215
+ },
112216
+ exampleProps: {
112217
+ heading: "Reclaim Your Peace. Scale Sustainably.",
112218
+ description: "Somatic mindset coaching for high-achieving entrepreneurs ready to lead from strength \u2014 not survival mode.",
112219
+ action: {
112220
+ label: "Book Your Discovery Call",
112221
+ href: "/contact",
112222
+ variant: "default",
112223
+ size: "lg"
112224
+ },
112225
+ videoLabel: "Watch the Overview",
112226
+ videoTitle: "Coaching Overview",
112227
+ modalVideo: {
112228
+ image: {
112229
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112230
+ alt: "Coaching overview poster"
112231
+ },
112232
+ video: {
112233
+ src: "https://toastability-production.s3.amazonaws.com/4kox2ux0ye1wlqkdwg03s08a67i1"
112234
+ }
112235
+ },
112236
+ image: {
112237
+ src: "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp",
112238
+ alt: "Coach portrait"
112239
+ },
112240
+ background: "dark"
112241
+ }
112133
112242
  },
112134
112243
  "hero-business-operations-mosaic": {
112135
112244
  id: "hero-business-operations-mosaic",
@@ -120410,7 +120519,7 @@ function normalizeBlock(block, source) {
120410
120519
  },
120411
120520
  examples: {
120412
120521
  exampleUsage: block.exampleUsage || null,
120413
- defaultData: block.defaultProps ? JSON.parse(JSON.stringify(block.defaultProps)) : null
120522
+ exampleProps: block.exampleProps ? JSON.parse(JSON.stringify(block.exampleProps)) : null
120414
120523
  },
120415
120524
  source: source ?? null,
120416
120525
  importantUsageNotes: block.importantUsageNotes ?? null,
@@ -77,6 +77,6 @@ interface SocialLinkIconProps extends Omit<PressableProps, "children">, SocialLi
77
77
  * />
78
78
  * ```
79
79
  */
80
- declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
80
+ declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>>;
81
81
 
82
82
  export { SocialLinkIcon, type SocialLinkIconDynamicIconProps, type SocialLinkIconProps };
@@ -77,6 +77,6 @@ interface SocialLinkIconProps extends Omit<PressableProps, "children">, SocialLi
77
77
  * />
78
78
  * ```
79
79
  */
80
- declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement | HTMLSpanElement>>;
80
+ declare const SocialLinkIcon: React.ForwardRefExoticComponent<SocialLinkIconProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement | HTMLSpanElement>>;
81
81
 
82
82
  export { SocialLinkIcon, type SocialLinkIconDynamicIconProps, type SocialLinkIconProps };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensite/ui",
3
- "version": "3.5.7",
3
+ "version": "3.5.8",
4
4
  "description": "Foundational UI component library for OpenSite Semantic Site Builder with tree-shakable exports and abstract styling",
5
5
  "keywords": [
6
6
  "react",