@windstream/react-shared-components 0.1.28 → 0.1.30

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 (33) hide show
  1. package/dist/contentful/index.d.ts +21 -4
  2. package/dist/contentful/index.esm.js +3 -3
  3. package/dist/contentful/index.esm.js.map +1 -1
  4. package/dist/contentful/index.js +3 -3
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/core.d.ts +2 -0
  7. package/dist/index.d.ts +7 -5
  8. package/dist/index.esm.js +1 -1
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/styles.css +1 -1
  13. package/package.json +1 -1
  14. package/src/components/checklist/index.tsx +4 -2
  15. package/src/components/checklist/types.ts +1 -0
  16. package/src/components/select-plan-button/index.tsx +4 -2
  17. package/src/components/select-plan-button/types.ts +3 -0
  18. package/src/contentful/blocks/accordion/index.tsx +1 -1
  19. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +65 -0
  20. package/src/contentful/blocks/anchored-bottom-banner/types.ts +9 -0
  21. package/src/contentful/blocks/button/index.tsx +9 -1
  22. package/src/contentful/blocks/button/types.ts +3 -0
  23. package/src/contentful/blocks/callout/index.tsx +4 -2
  24. package/src/contentful/blocks/cards/blog-card/index.tsx +23 -22
  25. package/src/contentful/blocks/cards/blog-card/types.ts +2 -0
  26. package/src/contentful/blocks/cards/product-card/index.tsx +79 -35
  27. package/src/contentful/blocks/cards/simple-card/index.tsx +5 -4
  28. package/src/contentful/blocks/cards/testimonial-card/index.tsx +34 -32
  29. package/src/contentful/blocks/carousel/helper.tsx +2 -2
  30. package/src/contentful/blocks/carousel/index.tsx +31 -25
  31. package/src/contentful/blocks/floating-banner/index.tsx +5 -1
  32. package/src/contentful/blocks/modal/index.tsx +4 -4
  33. package/src/contentful/index.ts +3 -0
@@ -3,7 +3,7 @@ import { BlogCardProps } from "./types";
3
3
  import Image from "next/image";
4
4
  import Link from "next/link";
5
5
 
6
- import { Button } from "@shared/components/button";
6
+ // import { Button } from "@shared/components/button";
7
7
  import { MaterialIcon } from "@shared/components/material-icon";
8
8
  import { Text } from "@shared/components/text";
9
9
 
@@ -16,11 +16,14 @@ export const BlogCard: React.FC<BlogCardProps> = ({
16
16
  image,
17
17
  readMoreText = "Read more",
18
18
  asGrid = true,
19
+ lgWidth,
20
+ mdWidth,
19
21
  index,
20
22
  }: BlogCardProps) => {
23
+ const basehwClass = "lg:w-[calc(33.3333%-1rem)] md:w-[calc(50%-1rem)]";
21
24
  const parentClassName = asGrid
22
- ? "flex h-full flex-col overflow-hidden rounded-xl bg-white shadow-[0_1px_4px_rgba(0,0,0,0.08),0_4px_16px_rgba(0,0,0,0.06)] transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_12px_rgba(0,0,0,0.12),0_8px_24px_rgba(0,0,0,0.10)]"
23
- : "callout-card lg:w-[calc(33.3333%-1rem)] md:w-[calc(50%-1rem)] w-full overflow-hidden rounded-xl bg-white shadow-[0_1px_4px_rgba(0,0,0,0.08),0_4px_16px_rgba(0,0,0,0.06)] transition-all duration-200 hover:-translate-y-0.5 hover:shadow-[0_4px_12px_rgba(0,0,0,0.12),0_8px_24px_rgba(0,0,0,0.10)]";
25
+ ? "flex h-full flex-col overflow-hidden rounded-card-lg bg-white shadow-drop transition-all duration-200 hover:-translate-y-0.5 hover:shadow-cardDrop"
26
+ : `callout-card ${basehwClass} ${lgWidth} ${mdWidth} w-full overflow-hidden rounded-card-lg bg-white shadow-drop transition-all duration-200 hover:-translate-y-0.5 hover:shadow-cardDrop`;
24
27
 
25
28
  return (
26
29
  <article
@@ -30,7 +33,7 @@ export const BlogCard: React.FC<BlogCardProps> = ({
30
33
  >
31
34
  {/* Image */}
32
35
  <Link href={href} tabIndex={-1} aria-hidden="true" className="block">
33
- <div className="aspect-video w-full flex-shrink-0 overflow-hidden bg-gray-100">
36
+ <div className="h-[232px] w-full flex-shrink-0 overflow-hidden bg-gray-100">
34
37
  {image ? (
35
38
  <Image
36
39
  src={image.src}
@@ -50,18 +53,16 @@ export const BlogCard: React.FC<BlogCardProps> = ({
50
53
  </Link>
51
54
 
52
55
  {/* Body */}
53
- <div className="flex flex-1 flex-col gap-5 p-5 pb-6">
56
+ <div className="flex flex-1 flex-col gap-5 p-6 md:p-8">
54
57
  {/* Meta: category + date */}
55
58
  <div className="flex items-center gap-2 text-[13px]">
56
- <span className="text-body2 font-semibold text-text-brand">
57
- {category}
58
- </span>
59
+ <span className="body2 text-text-brand">{category}</span>
59
60
  {date && (
60
61
  <>
61
- <span className="text-xs text-text" aria-hidden="true">
62
+ <span className="footnote text-text" aria-hidden="true">
62
63
 
63
64
  </span>
64
- <time className="text-body2 text-text">{date}</time>
65
+ <time className="body2 text-text">{date}</time>
65
66
  </>
66
67
  )}
67
68
  </div>
@@ -70,7 +71,7 @@ export const BlogCard: React.FC<BlogCardProps> = ({
70
71
  {title && (
71
72
  <Link
72
73
  href={href}
73
- className="m-0 line-clamp-3 text-heading6 font-black transition-colors duration-150 hover:text-text-brand"
74
+ className="heading6 m-0 line-clamp-3 font-black transition-colors duration-150 hover:text-text-brand"
74
75
  >
75
76
  {title}
76
77
  </Link>
@@ -78,7 +79,7 @@ export const BlogCard: React.FC<BlogCardProps> = ({
78
79
 
79
80
  {/* Excerpt */}
80
81
  {description && (
81
- <Text className="m-0 line-clamp-3 flex-1 text-body1">
82
+ <Text className="body1 m-0 line-clamp-3 flex-1 text-text">
82
83
  {description}
83
84
  </Text>
84
85
  )}
@@ -86,21 +87,21 @@ export const BlogCard: React.FC<BlogCardProps> = ({
86
87
  {/* Read more */}
87
88
  <Link
88
89
  href={href}
89
- className="group mt-auto inline-flex justify-between pt-3 text-sm text-text-brand no-underline transition-all duration-200 hover:gap-2.5 hover:text-[#007ab8]"
90
+ className="group mt-auto inline-flex items-center justify-start gap-2 pt-3 text-sm text-text-brand no-underline"
90
91
  aria-label={`${readMoreText} about ${title || "this article"}`}
91
92
  >
92
- <Button
93
+ <Text
93
94
  aria-label={`${readMoreText} about ${title || "this article"}`}
94
- className="flex w-36 justify-around text-nowrap text-label1 font-black"
95
+ className="label1 text-nowrap"
95
96
  >
96
97
  {readMoreText}
97
- <MaterialIcon
98
- name="expand_circle_right"
99
- fill={0}
100
- size={24}
101
- weight="600"
102
- />
103
- </Button>
98
+ </Text>
99
+ <MaterialIcon
100
+ name="expand_circle_right"
101
+ fill={1}
102
+ size={24}
103
+ weight="200"
104
+ />
104
105
  </Link>
105
106
  </div>
106
107
  </article>
@@ -12,5 +12,7 @@ export interface BlogCardProps {
12
12
  };
13
13
  readMoreText?: string;
14
14
  asGrid?: boolean;
15
+ lgWidth?: string;
16
+ mdWidth?: string;
15
17
  index?: number;
16
18
  }
@@ -51,12 +51,12 @@ export const ProductCard: React.FC<ProductCardProps> = ({
51
51
  <article
52
52
  className={cx(
53
53
  "relative flex h-full w-full max-w-[392px] flex-col",
54
- !bestValue && "pt-[28px]"
54
+ !bestValue && "md:pt-[38px]"
55
55
  )}
56
56
  >
57
57
  {/* Best Value Banner */}
58
58
  {bestValue && (
59
- <div className="rounded-t-[20px] bg-bg-fill-brand-accent px-4 py-1 text-center text-sm font-bold text-text">
59
+ <div className="label3 rounded-t-[20px] bg-bg-fill-brand-accent px-6 py-2 text-center text-text">
60
60
  {bestValueText}
61
61
  </div>
62
62
  )}
@@ -64,72 +64,103 @@ export const ProductCard: React.FC<ProductCardProps> = ({
64
64
  {/* Main Card */}
65
65
  <div
66
66
  className={cx(
67
- "flex flex-grow flex-col gap-6 rounded-[20px] px-5 shadow-cardDrop",
68
- isDark ? "bg-bg-fill-inverse text-white" : "bg-white text-text",
69
- bestValue ? "rounded-t-none" : ""
67
+ "flex flex-grow flex-col gap-5 rounded-card px-5 py-7 shadow-cardDrop",
68
+ isDark
69
+ ? "text-inverse border-2 border-border-accent bg-bg-fill-inverse"
70
+ : "bg-bg text-text",
71
+ bestValue ? "rounded-t-none border-t-0" : ""
70
72
  )}
71
73
  >
72
74
  {/* Plan Name & Price */}
73
- <header className="overflow-none flex items-start justify-between gap-4 pt-7">
75
+ <header className="overflow-none flex items-start justify-between gap-4">
74
76
  <div className="flex flex-col">
75
77
  <Text
76
78
  as="h3"
77
79
  className={cx(
78
- "subheading2 whitespace-nowrap font-black",
79
- isDark ? "text-bg-fill-brand-accent" : "text-text-brand"
80
+ "subheading2",
81
+ isDark ? "text-text-accent-on-bg-inverse" : "text-text-brand"
80
82
  )}
81
83
  >
82
84
  {planName}
83
85
  </Text>
84
86
  <Text
85
87
  as="p"
86
- className={`text-label3 font-black ${isDark ? "text-bg-fill-brand-accent" : "text-text-brand"} md:whitespace-nowrap`}
88
+ className={`label3 text-wrap ${isDark ? "text-text-accent-on-bg-inverse" : "text-text-brand"}`}
87
89
  >
88
90
  {planSubtext}
89
91
  </Text>
90
92
  </div>
91
93
  <div className="flex items-start">
92
- <span className="text-xl font-normal">$</span>
93
- <span className="text-subheading6 font-medium leading-none">
94
+ <Text
95
+ as="span"
96
+ className={cx(
97
+ "label2 mr-1 mt-[2px]",
98
+ isDark ? "text-text-inverse" : "text-text"
99
+ )}
100
+ >
101
+ $
102
+ </Text>
103
+ <Text
104
+ as="span"
105
+ className={cx(
106
+ "subheading6",
107
+ isDark ? "text-text-inverse" : "text-text"
108
+ )}
109
+ >
94
110
  {price.split(".")[0]}
95
- </span>
96
- <span className="text-sm font-black">{price.split(".")[1]}/mo</span>
111
+ </Text>
112
+ <Text
113
+ as="span"
114
+ className={cx(
115
+ "label2",
116
+ isDark ? "text-text-inverse" : "text-text"
117
+ )}
118
+ >
119
+ {price.split(".")[1]}/mo
120
+ </Text>
97
121
  </div>
98
122
  </header>
99
123
 
100
124
  {/* Description */}
101
125
  <section>
102
126
  <Text
103
- className={cx("text-base", isDark ? "text-white" : "text-text")}
127
+ className={cx("body2", isDark ? "text-text-inverse" : "text-text")}
104
128
  >
105
129
  {description}
106
130
  </Text>
107
131
  </section>
108
132
 
109
133
  {/* Gift Badge */}
110
- <div
111
- className={cx(
112
- "flex-col items-center rounded-xl p-2",
113
- isDark ? "bg-bg-surface-inverse" : "bg-gray-200"
114
- )}
115
- >
116
- {giftBadge &&
117
- giftBadge?.map((badge: any) => {
134
+ {giftBadge?.length ? (
135
+ <div
136
+ className={cx(
137
+ "flex-col items-center rounded-surface-sm p-2",
138
+ isDark ? "bg-bg-surface-inverse" : "bg-bg-surface-info"
139
+ )}
140
+ >
141
+ {giftBadge?.map((badge: any) => {
118
142
  return (
119
- <div key={badge.title} className="flex items-center gap-2 p-1">
143
+ <div key={badge.title} className="flex items-center gap-2">
120
144
  <Image
121
145
  src={badge.icon}
122
146
  alt={badge.title}
123
147
  width={24}
124
148
  height={24}
125
149
  />
126
- <Text as="div" className="text-sm font-bold">
150
+ <Text
151
+ as="div"
152
+ className={cx(
153
+ "body3",
154
+ isDark ? "text-text-inverse" : "text-text"
155
+ )}
156
+ >
127
157
  {badge.title}
128
158
  </Text>
129
159
  </div>
130
160
  );
131
161
  })}
132
- </div>
162
+ </div>
163
+ ) : null}
133
164
 
134
165
  {/* CTA */}
135
166
  <SelectPlanButton
@@ -138,40 +169,53 @@ export const ProductCard: React.FC<ProductCardProps> = ({
138
169
  isSelected={isDark}
139
170
  renderCheckPlans={renderCheckPlans}
140
171
  cta={cta}
172
+ iconSize={32}
173
+ iconClassName="!h-8 !w-8"
141
174
  techType={techType}
142
175
  isMax={ismaxSpeed}
143
176
  />
144
177
  {/* Features */}
145
178
  {features.length > 0 && (
146
- <section className="flex flex-col gap-6">
179
+ <section className="flex flex-col gap-3">
147
180
  <Button
148
181
  onClick={handleToggle}
149
- className="group flex w-full items-center justify-between text-left"
182
+ className="group flex w-full items-center gap-2 text-left"
150
183
  >
151
- <Text as="h4" className="text-base font-bold">
184
+ <Text
185
+ as="h4"
186
+ className={cx(
187
+ "label3",
188
+ isDark ? "text-text-inverse" : "text-text"
189
+ )}
190
+ >
152
191
  {featuresTitle}
153
192
  </Text>
154
193
  <MaterialIcon
155
- name="keyboard_arrow_up"
194
+ name="keyboard_arrow_down"
156
195
  fill={1}
157
196
  size={24}
158
197
  className={cx(
159
198
  "transition-transform duration-300",
160
- isExpanded && "rotate-180"
199
+ isExpanded && "rotate-180",
200
+ isDark ? "text-text-inverse" : "text-text"
161
201
  )}
162
202
  />
163
203
  </Button>
164
204
  <div
165
205
  className={cx(
166
- "overflow-hidden transition-all duration-300 ease-in-out",
167
- isExpanded ? "pb-7 opacity-100" : "max-h-0 opacity-0"
206
+ "overflow-hidden transition-all duration-200 ease-in-out",
207
+ isExpanded ? "opacity-100" : "max-h-0 opacity-0"
168
208
  )}
169
209
  >
170
- <div className="flex flex-col gap-3">
210
+ <div className="flex flex-col">
171
211
  <Checklist
172
212
  items={features}
213
+ iconSize={24}
214
+ iconPosition="top"
215
+ iconClassName="mt-0"
173
216
  iconColor={isDark ? "yellow" : "green"}
174
- listItemClassName={`${isDark ? "text-white" : "text-text"}`}
217
+ listContainerClassName="mt-0 space-y-0 flex flex-col gap-3"
218
+ listItemClassName={`${isDark ? "text-text-inverse" : "text-text"}`}
175
219
  />
176
220
  </div>
177
221
  {innerBadge?.badgeIcon ? (
@@ -182,7 +226,7 @@ export const ProductCard: React.FC<ProductCardProps> = ({
182
226
  width={12}
183
227
  height={12}
184
228
  />
185
- <span className="text-sm">
229
+ <span className="footnote text-text">
186
230
  {innerBadge.badgeText.includes("|") ? (
187
231
  <>
188
232
  <span className="font-bold">
@@ -54,18 +54,18 @@ export const SimpleCard: React.FC<SimpleCardProps> = ({
54
54
  className={`callout-card ${mdWidth} ${lgWidth} w-full ${backgroundColorMap[card.backgroundColor ?? ""] ?? ""}`}
55
55
  >
56
56
  <div
57
- className={`card-template flex h-full flex-col items-center gap-8 p-8 text-center ${imageAlignClass}`}
57
+ className={`card-template flex h-full flex-col gap-6 p-6 text-center md:gap-8 md:p-8 ${imageAlignClass}`}
58
58
  >
59
59
  <div className="card-header">{imageRenderer(card)}</div>
60
60
 
61
- <div className="card-body flex flex-col gap-3 text-start">
61
+ <div className="card-body flex flex-col gap-3 text-start md:gap-4">
62
62
  {card.title && (
63
- <Text as="h5" className="heading6 font-black md:heading5">
63
+ <Text as="h5" className="heading5 text-text">
64
64
  {card.title}
65
65
  </Text>
66
66
  )}
67
67
  {card.body && (
68
- <Text as="div" className="body1">
68
+ <Text as="div" className="body1 text-text">
69
69
  {card.body}
70
70
  </Text>
71
71
  )}
@@ -77,6 +77,7 @@ export const SimpleCard: React.FC<SimpleCardProps> = ({
77
77
  linkClassName="label1 flex items-center text-text gap-2"
78
78
  {...card.cta}
79
79
  iconName={"expand_circle_right"}
80
+ iconFill={1}
80
81
  />
81
82
  </div>
82
83
  )}
@@ -19,43 +19,45 @@ export const TestimonialCard: React.FC<TestimonialCardProps> = ({
19
19
  return (
20
20
  <figure
21
21
  className={clsx(
22
- "flex h-full w-full flex-col rounded-3xl p-6 font-sans transition-all duration-300 md:p-13",
23
- isActive ? "bg-white shadow-lg" : "bg-gray-50 opacity-40", // Active vs Inactive styles
22
+ "flex w-full flex-col gap-6 rounded-card-lg p-6 transition-all duration-300 md:gap-10 md:p-14",
23
+ isActive
24
+ ? "bg-bg-surface-secondary shadow-drop"
25
+ : "bg-gray-50 opacity-40", // Active vs Inactive styles
24
26
  className
25
27
  )}
26
28
  >
27
- <header>
28
- <Text as="h3" className="mb-4 text-xl font-black lowercase text-text">
29
- {title}
30
- </Text>
31
- </header>
32
- <blockquote className="mb-5 flex-grow text-xl leading-relaxed text-text">
33
- {quote}
34
- </blockquote>
29
+ <div className="flex flex-col justify-start gap-3 md:gap-5">
30
+ <header>
31
+ <Text as="h3" className="label1 text-text">
32
+ {title}
33
+ </Text>
34
+ </header>
35
+ <blockquote className="body1 text-text">{quote}</blockquote>
35
36
 
36
- {/* Rating Stars */}
37
- {rating ? (
38
- <div className="mb-5 flex gap-1">
39
- {[...Array(5)].map((_, i) => (
40
- <MaterialIcon
41
- key={i}
42
- size={24}
43
- name="star"
44
- fill={1}
45
- className={clsx(
46
- "h-5 w-5",
47
- i < rating ? "text-text" : "text-gray-300"
48
- )}
49
- aria-hidden="true"
50
- />
51
- ))}
52
- </div>
53
- ) : null}
37
+ {/* Rating Stars */}
38
+ {rating ? (
39
+ <div className="flex" aria-label={`Rating: ${rating} out of 5`}>
40
+ {[...Array(5)].map((_, i) => (
41
+ <MaterialIcon
42
+ key={i}
43
+ size={24}
44
+ name="star"
45
+ fill={1}
46
+ className={clsx(
47
+ "h-[21px] w-[21px]",
48
+ i < rating ? "text-text" : "text-gray-300"
49
+ )}
50
+ aria-hidden="true"
51
+ />
52
+ ))}
53
+ </div>
54
+ ) : null}
55
+ </div>
54
56
 
55
57
  {/* Author Block */}
56
58
  {author && (
57
- <figcaption className="flex items-center gap-3">
58
- <div className="relative h-10 w-10 shrink-0 overflow-hidden rounded-full bg-gray-300">
59
+ <figcaption className="flex gap-3 md:gap-5">
60
+ <div className="relative h-12 w-12 shrink-0 overflow-hidden rounded-full bg-gray-300">
59
61
  {avatarUrl ? (
60
62
  <Image
61
63
  src={avatarUrl}
@@ -72,10 +74,10 @@ export const TestimonialCard: React.FC<TestimonialCardProps> = ({
72
74
  </div>
73
75
 
74
76
  <div className="flex flex-col">
75
- <cite className="text-sm font-bold not-italic text-text">
77
+ <cite className="label3 font-bold not-italic text-text">
76
78
  {author}
77
79
  </cite>
78
- <Text as="p" className="text-xs text-text">
80
+ <Text as="p" className="body3 text-text">
79
81
  {role}
80
82
  </Text>
81
83
  </div>
@@ -129,7 +129,7 @@ export function ProductCardCarousel({
129
129
  className={cx(
130
130
  isMobileView
131
131
  ? "mx-auto w-full max-w-[392px]"
132
- : "w-[392px] flex-shrink-0"
132
+ : "flex-shrink-1 w-[392px]"
133
133
  )}
134
134
  >
135
135
  <ProductCard
@@ -164,7 +164,7 @@ export function ProductCardCarousel({
164
164
  const offset = items.length * 2;
165
165
 
166
166
  return !isCarousel ? (
167
- <div className="flex w-full max-w-[1280px] flex-wrap justify-center gap-8 px-4">
167
+ <div className="flex w-full max-w-[1280px] flex-wrap justify-center gap-4">
168
168
  {items.map((item, index) => renderCard(item, index))}
169
169
  </div>
170
170
  ) : (
@@ -23,10 +23,13 @@ export const Carousel: React.FC<CarouselProps> = ({
23
23
  testimonialAutoScroll = true,
24
24
  showSwitch = false,
25
25
  }) => {
26
+ const baseClass = hasProductCards
27
+ ? "px-3 py-9 md:py-20"
28
+ : hasTestimonialCards
29
+ ? "px-3 py-12 md:pt-20 md:pb-16"
30
+ : "";
26
31
  return (
27
- <div
28
- className={`${backgroundColor} mx-auto overflow-hidden px-5 py-12 md:pb-16 md:pt-20`}
29
- >
32
+ <div className={`${backgroundColor} ${baseClass} mx-auto overflow-hidden`}>
30
33
  <div className="relative mx-auto flex max-w-[1280px] flex-col gap-8 overflow-visible md:gap-12">
31
34
  <div>
32
35
  <Text
@@ -41,13 +44,23 @@ export const Carousel: React.FC<CarouselProps> = ({
41
44
  </Text>
42
45
  )}
43
46
  </div>
44
-
45
- {showSwitch && hasProductCards && tabs.length > 1 && (
46
- <TabSwitch
47
- tabs={tabs}
48
- activeTab={activeTab}
49
- onChange={setActiveTab}
50
- />
47
+ {showSwitch && hasProductCards && (
48
+ <div className="flex flex-col gap-8">
49
+ {showSwitch && hasProductCards && tabs.length > 1 && (
50
+ <TabSwitch
51
+ tabs={tabs}
52
+ activeTab={activeTab}
53
+ onChange={setActiveTab}
54
+ />
55
+ )}
56
+ {hasProductCards && (
57
+ <ProductCardCarousel
58
+ onModalButtonClick={onModalButtonClick}
59
+ renderCheckPlans={renderCheckPlans}
60
+ fields={fields as CarouselWithProductCards}
61
+ />
62
+ )}
63
+ </div>
51
64
  )}
52
65
  {hasTestimonialCards && (
53
66
  <TestimonialCarousel
@@ -56,22 +69,15 @@ export const Carousel: React.FC<CarouselProps> = ({
56
69
  autoScrollInterval={8000}
57
70
  />
58
71
  )}
59
- {hasProductCards && (
60
- <ProductCardCarousel
61
- onModalButtonClick={onModalButtonClick}
62
- renderCheckPlans={renderCheckPlans}
63
- fields={fields as CarouselWithProductCards}
64
- />
65
- )}
66
- {disclaimerText && (
67
- <Text
68
- as="div"
69
- className="body1 mt-8 px-4 text-center text-neutral-600"
70
- >
71
- {disclaimerText}
72
- </Text>
73
- )}
74
72
  </div>
73
+ {disclaimerText && (
74
+ <Text
75
+ as="div"
76
+ className="footnote mt-8 px-4 text-center text-text-secondary"
77
+ >
78
+ {disclaimerText}
79
+ </Text>
80
+ )}
75
81
  </div>
76
82
  );
77
83
  };
@@ -74,7 +74,11 @@ export const FloatingBanner: React.FC<FloatingBannerProps> = ({
74
74
  </div>
75
75
  {cta && (
76
76
  <div className="mt-5 flex flex-shrink-0 justify-center lg:mt-0 lg:items-center">
77
- <Button {...cta} buttonVariant="secondary" size={{ base: "medium", md: "large" }}></Button>
77
+ <Button
78
+ {...cta}
79
+ buttonVariant="secondary"
80
+ size={{ base: "medium", md: "large" }}
81
+ ></Button>
78
82
  </div>
79
83
  )}
80
84
  </div>
@@ -16,8 +16,8 @@ import { Button } from "@shared/contentful/blocks/button";
16
16
  import { cx } from "@shared/utils";
17
17
 
18
18
  type ExtendedModalProps = ModalProps & {
19
- type?: "modal";
20
- index?: 0;
19
+ type?: string;
20
+ index?: number;
21
21
  };
22
22
  export const Modal: React.FC<ExtendedModalProps> = props => {
23
23
  const {
@@ -29,8 +29,8 @@ export const Modal: React.FC<ExtendedModalProps> = props => {
29
29
  description,
30
30
  children,
31
31
  bodyClassName,
32
- type,
33
- index,
32
+ type = "modal",
33
+ index = 0,
34
34
  } = props;
35
35
 
36
36
  return (
@@ -73,3 +73,6 @@ export type { AddressInputBannerProps } from "./blocks/address-input-banner/type
73
73
 
74
74
  export { DynamicTabs } from "./blocks/dynamic-tabs";
75
75
  export type { DynamicTabsT } from "./blocks/dynamic-tabs/types";
76
+
77
+ export { AnchoredBottomBanner } from "./blocks/anchored-bottom-banner";
78
+ export type { AnchoredBottomBannerProps } from "./blocks/anchored-bottom-banner/types";