@opensite/ui 3.12.1 → 3.13.0

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.
package/dist/registry.cjs CHANGED
@@ -45786,7 +45786,13 @@ function TestimonialsGridAddReview({
45786
45786
  const avatarSrc = getAvatarSrc(testimonial);
45787
45787
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
45788
45788
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
45789
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: 5, size: 20 }),
45789
+ /* @__PURE__ */ jsxRuntime.jsx(
45790
+ StarRating,
45791
+ {
45792
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
45793
+ size: 20
45794
+ }
45795
+ ),
45790
45796
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
45791
45797
  "p",
45792
45798
  {
@@ -46748,7 +46754,13 @@ function TestimonialsStatsHeader({
46748
46754
  ),
46749
46755
  children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
46750
46756
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
46751
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: 5, size: 20 }),
46757
+ /* @__PURE__ */ jsxRuntime.jsx(
46758
+ StarRating,
46759
+ {
46760
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
46761
+ size: 20
46762
+ }
46763
+ ),
46752
46764
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
46753
46765
  "p",
46754
46766
  {
@@ -113896,6 +113908,7 @@ var NAVBAR_BLOCK_CONTRACTS = {
113896
113908
  };
113897
113909
  var TESTIMONIALS_EXAMPLE_IMAGE_URL = "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp";
113898
113910
  var TESTIMONIALS_MEDIA_NOTE = "All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.";
113911
+ var TESTIMONIALS_FEED_NOTE = "Dynamic feeds (Phase 2): this block can carry a block-level dataSource of type 'testimonials_feed', hydrated at routing-build time into TestimonialItem[]. Bind target (dataSource.bindTo) defaults to 'testimonials'; use 'reviews' for testimonials-list-verified, testimonials-images-helpful, and testimonials-grid-add-review; single-item 'testimonial' (an object \u2014 the hydrator binds items[0]) for testimonials-company-logo, testimonials-large-quote, and testimonials-split-image. Wire mapping: content -> quote, reviewer_name -> author, rating -> rating (only when numeric; never fabricate), profile_url + platform -> linkConfig. Avatars are intentionally NOT mapped in Phase 2 because review avatar URLs are hotlinked and rot-prone. The reviews_or_testimonials capability is satisfied by live reviews OR authored static quotes, so octane does not hard-drop testimonials blocks on the capability alone.";
113899
113912
  var testimonialsCapabilities = (...capabilities) => capabilities;
113900
113913
  var img = TESTIMONIALS_EXAMPLE_IMAGE_URL;
113901
113914
  var TESTIMONIALS_BLOCK_CONTRACTS = {
@@ -115503,6 +115516,9 @@ var TESTIMONIALS_BLOCK_CONTRACTS = {
115503
115516
  }
115504
115517
  }
115505
115518
  };
115519
+ for (const contract of Object.values(TESTIMONIALS_BLOCK_CONTRACTS)) {
115520
+ contract.importantUsageNotes = contract.importantUsageNotes ? `${contract.importantUsageNotes} ${TESTIMONIALS_FEED_NOTE}` : TESTIMONIALS_FEED_NOTE;
115521
+ }
115506
115522
  var FEATURES_EXAMPLE_IMAGE_URL = "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp";
115507
115523
  var FEATURES_MEDIA_NOTE = "All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.";
115508
115524
  var featuresCapabilities = (...capabilities) => capabilities;
@@ -135807,7 +135823,7 @@ function createBuilderContractBundle({
135807
135823
  symbolic: true,
135808
135824
  hydrationOwner: "dashtrack-ai",
135809
135825
  hydrationPhase: "routing-build",
135810
- canonicalPayloadExpectation: "Keep testimonials feed requests symbolic in canonical page JSON until routing-build hydration resolves them.",
135826
+ canonicalPayloadExpectation: "Keep testimonials feed requests symbolic in canonical page JSON until routing-build hydration resolves them into TestimonialItem[] (or a single TestimonialItem for single-bind blocks). Wire mapping: content -> quote, reviewer_name -> author, rating -> rating (only when numeric; never fabricated), profile_url + platform -> linkConfig; avatars are intentionally left unmapped in Phase 2 because review avatar URLs are hotlinked and rot-prone.",
135811
135827
  requiredFields: ["type"],
135812
135828
  optionalFields: ["limit", "minRating", "platforms", "locationId", "bindTo"]
135813
135829
  },
package/dist/registry.js CHANGED
@@ -45746,7 +45746,13 @@ function TestimonialsGridAddReview({
45746
45746
  const avatarSrc = getAvatarSrc(testimonial);
45747
45747
  return /* @__PURE__ */ jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
45748
45748
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
45749
- /* @__PURE__ */ jsx(StarRating, { rating: 5, size: 20 }),
45749
+ /* @__PURE__ */ jsx(
45750
+ StarRating,
45751
+ {
45752
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
45753
+ size: 20
45754
+ }
45755
+ ),
45750
45756
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
45751
45757
  "p",
45752
45758
  {
@@ -46708,7 +46714,13 @@ function TestimonialsStatsHeader({
46708
46714
  ),
46709
46715
  children: /* @__PURE__ */ jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
46710
46716
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
46711
- /* @__PURE__ */ jsx(StarRating, { rating: 5, size: 20 }),
46717
+ /* @__PURE__ */ jsx(
46718
+ StarRating,
46719
+ {
46720
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
46721
+ size: 20
46722
+ }
46723
+ ),
46712
46724
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
46713
46725
  "p",
46714
46726
  {
@@ -113856,6 +113868,7 @@ var NAVBAR_BLOCK_CONTRACTS = {
113856
113868
  };
113857
113869
  var TESTIMONIALS_EXAMPLE_IMAGE_URL = "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp";
113858
113870
  var TESTIMONIALS_MEDIA_NOTE = "All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.";
113871
+ var TESTIMONIALS_FEED_NOTE = "Dynamic feeds (Phase 2): this block can carry a block-level dataSource of type 'testimonials_feed', hydrated at routing-build time into TestimonialItem[]. Bind target (dataSource.bindTo) defaults to 'testimonials'; use 'reviews' for testimonials-list-verified, testimonials-images-helpful, and testimonials-grid-add-review; single-item 'testimonial' (an object \u2014 the hydrator binds items[0]) for testimonials-company-logo, testimonials-large-quote, and testimonials-split-image. Wire mapping: content -> quote, reviewer_name -> author, rating -> rating (only when numeric; never fabricate), profile_url + platform -> linkConfig. Avatars are intentionally NOT mapped in Phase 2 because review avatar URLs are hotlinked and rot-prone. The reviews_or_testimonials capability is satisfied by live reviews OR authored static quotes, so octane does not hard-drop testimonials blocks on the capability alone.";
113859
113872
  var testimonialsCapabilities = (...capabilities) => capabilities;
113860
113873
  var img = TESTIMONIALS_EXAMPLE_IMAGE_URL;
113861
113874
  var TESTIMONIALS_BLOCK_CONTRACTS = {
@@ -115463,6 +115476,9 @@ var TESTIMONIALS_BLOCK_CONTRACTS = {
115463
115476
  }
115464
115477
  }
115465
115478
  };
115479
+ for (const contract of Object.values(TESTIMONIALS_BLOCK_CONTRACTS)) {
115480
+ contract.importantUsageNotes = contract.importantUsageNotes ? `${contract.importantUsageNotes} ${TESTIMONIALS_FEED_NOTE}` : TESTIMONIALS_FEED_NOTE;
115481
+ }
115466
115482
  var FEATURES_EXAMPLE_IMAGE_URL = "https://cdn.ing/assets/i/r/308196/g6bbn73f7gxal82uu49m9prfd0u8/workplace-in-cafe.webp";
115467
115483
  var FEATURES_MEDIA_NOTE = "All media src values must be absolute URLs to real assets; relative paths and placeholder media variables are not allowed.";
115468
115484
  var featuresCapabilities = (...capabilities) => capabilities;
@@ -135767,7 +135783,7 @@ function createBuilderContractBundle({
135767
135783
  symbolic: true,
135768
135784
  hydrationOwner: "dashtrack-ai",
135769
135785
  hydrationPhase: "routing-build",
135770
- canonicalPayloadExpectation: "Keep testimonials feed requests symbolic in canonical page JSON until routing-build hydration resolves them.",
135786
+ canonicalPayloadExpectation: "Keep testimonials feed requests symbolic in canonical page JSON until routing-build hydration resolves them into TestimonialItem[] (or a single TestimonialItem for single-bind blocks). Wire mapping: content -> quote, reviewer_name -> author, rating -> rating (only when numeric; never fabricated), profile_url + platform -> linkConfig; avatars are intentionally left unmapped in Phase 2 because review avatar URLs are hotlinked and rot-prone.",
135771
135787
  requiredFields: ["type"],
135772
135788
  optionalFields: ["limit", "minRating", "platforms", "locationId", "bindTo"]
135773
135789
  },
@@ -669,7 +669,13 @@ function TestimonialsGridAddReview({
669
669
  const avatarSrc = getAvatarSrc(testimonial);
670
670
  return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
671
671
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
672
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: 5, size: 20 }),
672
+ /* @__PURE__ */ jsxRuntime.jsx(
673
+ StarRating,
674
+ {
675
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
676
+ size: 20
677
+ }
678
+ ),
673
679
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
674
680
  "p",
675
681
  {
@@ -647,7 +647,13 @@ function TestimonialsGridAddReview({
647
647
  const avatarSrc = getAvatarSrc(testimonial);
648
648
  return /* @__PURE__ */ jsx(Card, { className: cardClassName, children: /* @__PURE__ */ jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
649
649
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
650
- /* @__PURE__ */ jsx(StarRating, { rating: 5, size: 20 }),
650
+ /* @__PURE__ */ jsx(
651
+ StarRating,
652
+ {
653
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
654
+ size: 20
655
+ }
656
+ ),
651
657
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
652
658
  "p",
653
659
  {
@@ -689,7 +689,13 @@ function TestimonialsStatsHeader({
689
689
  ),
690
690
  children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
691
691
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start gap-4", children: [
692
- /* @__PURE__ */ jsxRuntime.jsx(StarRating, { rating: 5, size: 20 }),
692
+ /* @__PURE__ */ jsxRuntime.jsx(
693
+ StarRating,
694
+ {
695
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
696
+ size: 20
697
+ }
698
+ ),
693
699
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxRuntime.jsxs(
694
700
  "p",
695
701
  {
@@ -667,7 +667,13 @@ function TestimonialsStatsHeader({
667
667
  ),
668
668
  children: /* @__PURE__ */ jsx(CardContent, { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-12 justify-between", children: [
669
669
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-start gap-4", children: [
670
- /* @__PURE__ */ jsx(StarRating, { rating: 5, size: 20 }),
670
+ /* @__PURE__ */ jsx(
671
+ StarRating,
672
+ {
673
+ rating: typeof testimonial.rating === "number" ? testimonial.rating : 5,
674
+ size: 20
675
+ }
676
+ ),
671
677
  testimonial.quote && (typeof testimonial.quote === "string" ? /* @__PURE__ */ jsxs(
672
678
  "p",
673
679
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensite/ui",
3
- "version": "3.12.1",
3
+ "version": "3.13.0",
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",
@@ -3437,7 +3437,7 @@
3437
3437
  "@page-speed/lightbox": "^0.2.1",
3438
3438
  "@page-speed/maps": "0.2.4",
3439
3439
  "@page-speed/markdown-to-jsx": "^0.0.7",
3440
- "@page-speed/media-immersive": "0.5.0",
3440
+ "@page-speed/media-immersive": "0.5.1",
3441
3441
  "@page-speed/pdf-viewer": ">=0.1.9",
3442
3442
  "@page-speed/skins": "0.1.2",
3443
3443
  "@page-speed/social-share": "0.1.7",