@windstream/react-shared-components 0.0.87 → 0.0.88

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 (141) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.d.ts +9 -5
  3. package/dist/contentful/index.esm.js +1 -1
  4. package/dist/contentful/index.esm.js.map +1 -1
  5. package/dist/contentful/index.js +1 -1
  6. package/dist/contentful/index.js.map +1 -1
  7. package/dist/core.d.ts +3 -3
  8. package/dist/index.d.ts +4 -4
  9. package/dist/index.js.map +1 -1
  10. package/package.json +177 -177
  11. package/src/components/accordion/Accordion.stories.tsx +230 -230
  12. package/src/components/accordion/types.ts +10 -10
  13. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  14. package/src/components/alert-card/index.tsx +32 -32
  15. package/src/components/alert-card/types.ts +9 -9
  16. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  17. package/src/components/brand-button/helpers.ts +35 -35
  18. package/src/components/brand-button/index.tsx +115 -115
  19. package/src/components/brand-button/types.ts +37 -37
  20. package/src/components/button/Button.stories.tsx +108 -108
  21. package/src/components/button/index.tsx +27 -27
  22. package/src/components/button/types.ts +14 -14
  23. package/src/components/call-button/CallButton.stories.tsx +324 -324
  24. package/src/components/call-button/index.tsx +86 -86
  25. package/src/components/call-button/types.ts +11 -11
  26. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  27. package/src/components/checkbox/index.tsx +197 -197
  28. package/src/components/checkbox/types.ts +27 -27
  29. package/src/components/checklist/Checklist.stories.tsx +150 -150
  30. package/src/components/checklist/index.tsx +54 -54
  31. package/src/components/checklist/types.ts +9 -9
  32. package/src/components/collapse/Collapse.stories.tsx +255 -255
  33. package/src/components/collapse/index.tsx +46 -46
  34. package/src/components/collapse/types.ts +6 -6
  35. package/src/components/divider/Divider.stories.tsx +205 -205
  36. package/src/components/divider/index.tsx +22 -22
  37. package/src/components/divider/type.ts +3 -3
  38. package/src/components/image/Image.stories.tsx +113 -113
  39. package/src/components/image/index.tsx +25 -25
  40. package/src/components/image/types.ts +40 -40
  41. package/src/components/input/Input.stories.tsx +325 -325
  42. package/src/components/input/index.tsx +177 -177
  43. package/src/components/input/types.ts +37 -37
  44. package/src/components/link/Link.stories.tsx +163 -163
  45. package/src/components/link/types.ts +25 -25
  46. package/src/components/list/List.stories.tsx +272 -272
  47. package/src/components/list/index.tsx +88 -88
  48. package/src/components/list/list-item/index.tsx +38 -38
  49. package/src/components/list/list-item/types.ts +13 -13
  50. package/src/components/list/types.ts +29 -29
  51. package/src/components/material-icon/MaterialIcon.stories.tsx +330 -330
  52. package/src/components/material-icon/constants.ts +97 -97
  53. package/src/components/material-icon/index.tsx +44 -44
  54. package/src/components/material-icon/types.ts +31 -31
  55. package/src/components/modal/Modal.stories.tsx +171 -171
  56. package/src/components/modal/index.tsx +164 -164
  57. package/src/components/modal/types.ts +24 -24
  58. package/src/components/next-image/index.tsx +32 -32
  59. package/src/components/next-image/types.ts +1 -1
  60. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  61. package/src/components/radio-button/index.tsx +75 -75
  62. package/src/components/radio-button/types.ts +21 -21
  63. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  64. package/src/components/see-more/index.tsx +44 -44
  65. package/src/components/see-more/types.ts +4 -4
  66. package/src/components/select/Select.stories.tsx +411 -411
  67. package/src/components/select/index.tsx +150 -150
  68. package/src/components/select/types.ts +35 -35
  69. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  70. package/src/components/select-plan-button/index.tsx +31 -31
  71. package/src/components/select-plan-button/types.ts +5 -5
  72. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  73. package/src/components/skeleton/index.tsx +61 -61
  74. package/src/components/skeleton/types.ts +4 -4
  75. package/src/components/spinner/Spinner.stories.tsx +335 -335
  76. package/src/components/spinner/index.tsx +44 -44
  77. package/src/components/spinner/types.ts +5 -5
  78. package/src/components/text/Text.stories.tsx +321 -321
  79. package/src/components/text/index.tsx +25 -25
  80. package/src/components/text/types.ts +45 -45
  81. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  82. package/src/components/tooltip/index.tsx +74 -74
  83. package/src/components/tooltip/types.ts +7 -7
  84. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  85. package/src/components/view-cart-button/index.tsx +44 -44
  86. package/src/components/view-cart-button/types.ts +5 -5
  87. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  88. package/src/contentful/blocks/button/index.tsx +99 -85
  89. package/src/contentful/blocks/button/types.ts +31 -26
  90. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  91. package/src/contentful/blocks/callout/index.tsx +66 -66
  92. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  93. package/src/contentful/blocks/cards/index.tsx +13 -13
  94. package/src/contentful/blocks/cards/product-card/index.tsx +199 -199
  95. package/src/contentful/blocks/cards/product-card/types.ts +20 -20
  96. package/src/contentful/blocks/cards/simple-card/index.tsx +77 -77
  97. package/src/contentful/blocks/cards/simple-card/types.ts +31 -31
  98. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  99. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  100. package/src/contentful/blocks/cards/types.ts +1 -1
  101. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  102. package/src/contentful/blocks/carousel/helper.tsx +314 -314
  103. package/src/contentful/blocks/carousel/index.tsx +52 -52
  104. package/src/contentful/blocks/carousel/types.ts +126 -126
  105. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  106. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  107. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  108. package/src/contentful/blocks/find-kinetic/index.tsx +124 -124
  109. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  110. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  111. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  112. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  113. package/src/contentful/blocks/image-promo-bar/index.tsx +11 -2
  114. package/src/contentful/blocks/image-promo-bar/types.ts +31 -27
  115. package/src/contentful/blocks/modal/constants.ts +53 -53
  116. package/src/contentful/blocks/modal/index.tsx +91 -91
  117. package/src/contentful/blocks/modal/types.ts +12 -12
  118. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -111
  119. package/src/contentful/blocks/navigation/index.tsx +385 -385
  120. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -80
  121. package/src/contentful/blocks/navigation/types.ts +41 -41
  122. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  123. package/src/contentful/blocks/primary-hero/index.tsx +228 -212
  124. package/src/contentful/blocks/primary-hero/types.ts +35 -30
  125. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  126. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  127. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  128. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  129. package/src/contentful/blocks/text/index.tsx +12 -12
  130. package/src/contentful/blocks/text/types.ts +1 -1
  131. package/src/contentful/index.ts +57 -57
  132. package/src/hooks/use-body-scroll-lock.ts +34 -34
  133. package/src/hooks/use-outside-click.ts +17 -17
  134. package/src/index.ts +96 -96
  135. package/src/next/index.ts +5 -5
  136. package/src/setupTests.ts +46 -46
  137. package/src/stories/DocsTemplate.tsx +24 -24
  138. package/src/styles/globals.css +307 -307
  139. package/src/types/global.d.ts +9 -9
  140. package/src/types/micro-components.ts +89 -80
  141. package/src/utils/index.ts +49 -49
@@ -1,52 +1,52 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import { ProductCardCarousel, TestimonialCarousel } from "./helper";
5
- import {
6
- CarouselProps,
7
- CarouselWithProductCards,
8
- CarouselWithTestimonialCards,
9
- } from "./types";
10
-
11
- import { Text } from "@shared/components/text";
12
-
13
- export const Carousel: React.FC<CarouselProps> = ({
14
- fields,
15
- hasTestimonialCards,
16
- hasProductCards,
17
- disclaimerText,
18
- backgroundColor,
19
- }) => {
20
- return (
21
- <div
22
- className={`${backgroundColor} mx-auto overflow-hidden px-5 py-9 md:py-20`}
23
- >
24
- <div className="relative mx-auto flex max-w-[1280px] flex-col gap-12 overflow-visible">
25
- <Text
26
- as="h2"
27
- className="text-center text-4xl font-bold text-text md:text-5xl"
28
- >
29
- {fields?.title}
30
- </Text>
31
- {fields?.subTitle && (
32
- <Text as="h3" className="body1 px-4 pt-4 text-center">
33
- {fields?.subTitle}
34
- </Text>
35
- )}
36
- {hasTestimonialCards && (
37
- <TestimonialCarousel
38
- fields={fields as CarouselWithTestimonialCards}
39
- />
40
- )}
41
- {hasProductCards && (
42
- <ProductCardCarousel fields={fields as CarouselWithProductCards} />
43
- )}
44
- <Text as="div" className="body1 mt-8 px-4 text-center">
45
- {disclaimerText}
46
- </Text>
47
- </div>
48
- </div>
49
- );
50
- };
51
-
52
- export default Carousel;
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import { ProductCardCarousel, TestimonialCarousel } from "./helper";
5
+ import {
6
+ CarouselProps,
7
+ CarouselWithProductCards,
8
+ CarouselWithTestimonialCards,
9
+ } from "./types";
10
+
11
+ import { Text } from "@shared/components/text";
12
+
13
+ export const Carousel: React.FC<CarouselProps> = ({
14
+ fields,
15
+ hasTestimonialCards,
16
+ hasProductCards,
17
+ disclaimerText,
18
+ backgroundColor,
19
+ }) => {
20
+ return (
21
+ <div
22
+ className={`${backgroundColor} mx-auto overflow-hidden px-5 py-9 md:py-20`}
23
+ >
24
+ <div className="relative mx-auto flex max-w-[1280px] flex-col gap-12 overflow-visible">
25
+ <Text
26
+ as="h2"
27
+ className="text-center text-4xl font-bold text-text md:text-5xl"
28
+ >
29
+ {fields?.title}
30
+ </Text>
31
+ {fields?.subTitle && (
32
+ <Text as="h3" className="body1 px-4 pt-4 text-center">
33
+ {fields?.subTitle}
34
+ </Text>
35
+ )}
36
+ {hasTestimonialCards && (
37
+ <TestimonialCarousel
38
+ fields={fields as CarouselWithTestimonialCards}
39
+ />
40
+ )}
41
+ {hasProductCards && (
42
+ <ProductCardCarousel fields={fields as CarouselWithProductCards} />
43
+ )}
44
+ <Text as="div" className="body1 mt-8 px-4 text-center">
45
+ {disclaimerText}
46
+ </Text>
47
+ </div>
48
+ </div>
49
+ );
50
+ };
51
+
52
+ export default Carousel;
@@ -1,126 +1,126 @@
1
- import { ReactNode } from "react";
2
-
3
- export interface carouselFieldsInterface {
4
- __typename: "ComponentCarousel";
5
- sys: {
6
- id: string;
7
- };
8
- entryName?: string;
9
- anchorId?: string;
10
- title?: string;
11
- subTitle?: string;
12
- rotationTiming?: number;
13
- showArrows?: boolean;
14
- autoRotate?: boolean;
15
- initialSlideIndex?: number;
16
- infiniteScroll?: boolean;
17
- mobileNavigationType?: boolean;
18
- disclaimerText?: {
19
- json: any;
20
- };
21
- backgroundColor?: "blue" | "green" | "orange" | "purple" | "white";
22
- items: {
23
- items: Array<CarouselItemsType>;
24
- };
25
- }
26
-
27
- export type CarouselItemsType =
28
- | TestimonialCardFields
29
- | ProductCardFields
30
- | CardFields;
31
-
32
- export interface TestimonialCardFields {
33
- __typename: "ComponentTestimonialCard";
34
- sys: {
35
- id: string;
36
- };
37
- title?: string;
38
- author?: string;
39
- role?: string;
40
- rating?: number;
41
- quote?: ReactNode;
42
- authorImage?: {
43
- url: string;
44
- title?: string;
45
- width?: number;
46
- height?: number;
47
- } | null;
48
- avatarurl?: string;
49
- }
50
-
51
- export interface ProductCardFields {
52
- __typename: "ComponentProductCard";
53
- sys: {
54
- id: string;
55
- };
56
- speed?: string;
57
- price?: string;
58
- priceSuffix?: string;
59
- techType?: string;
60
- highlighted?: boolean;
61
- productCardDescription?: string;
62
- benefitsTitle?: string;
63
- benefitsExpanded?: boolean;
64
- innerBadge?: string;
65
- // GraphQL patterns for nested references
66
- benefits?: {
67
- items: Array<any>;
68
- };
69
- giftRewards?: {
70
- list?: {
71
- items: Array<any>;
72
- };
73
- };
74
- cta?: {
75
- buttonLabel?: string;
76
- [key: string]: any;
77
- };
78
- innerBadgeIcon?: {
79
- url: string;
80
- [key: string]: any;
81
- };
82
- }
83
-
84
- export interface CardFields {
85
- __typename: "ComponentCard";
86
- sys: {
87
- id: string;
88
- };
89
- title?: string;
90
- subtitle?: string;
91
- eyebrow?: string;
92
- body?: { json: any };
93
- image?: { url: string; [key: string]: any };
94
- cta?: { buttonLabel?: string; [key: string]: any };
95
- ctaBottom?: { buttonLabel?: string; [key: string]: any };
96
- }
97
-
98
- export interface CarouselWithTestimonialCards
99
- extends Omit<carouselFieldsInterface, "items"> {
100
- items: {
101
- items: TestimonialCardFields[];
102
- };
103
- }
104
-
105
- export interface CarouselWithProductCards
106
- extends Omit<carouselFieldsInterface, "items"> {
107
- items: {
108
- items: ProductCardFields[];
109
- };
110
- }
111
-
112
- export const backgroundColorMap = {
113
- blue: "bg-bg-fill-inverse",
114
- green: "bg-border-success",
115
- orange: "bg-orange-500",
116
- purple: "bg-purple-500",
117
- white: "bg-white",
118
- };
119
-
120
- export type CarouselProps = {
121
- fields: carouselFieldsInterface;
122
- hasTestimonialCards: boolean;
123
- hasProductCards: boolean;
124
- disclaimerText: ReactNode;
125
- backgroundColor: string;
126
- };
1
+ import { ReactNode } from "react";
2
+
3
+ export interface carouselFieldsInterface {
4
+ __typename: "ComponentCarousel";
5
+ sys: {
6
+ id: string;
7
+ };
8
+ entryName?: string;
9
+ anchorId?: string;
10
+ title?: string;
11
+ subTitle?: string;
12
+ rotationTiming?: number;
13
+ showArrows?: boolean;
14
+ autoRotate?: boolean;
15
+ initialSlideIndex?: number;
16
+ infiniteScroll?: boolean;
17
+ mobileNavigationType?: boolean;
18
+ disclaimerText?: {
19
+ json: any;
20
+ };
21
+ backgroundColor?: "blue" | "green" | "orange" | "purple" | "white";
22
+ items: {
23
+ items: Array<CarouselItemsType>;
24
+ };
25
+ }
26
+
27
+ export type CarouselItemsType =
28
+ | TestimonialCardFields
29
+ | ProductCardFields
30
+ | CardFields;
31
+
32
+ export interface TestimonialCardFields {
33
+ __typename: "ComponentTestimonialCard";
34
+ sys: {
35
+ id: string;
36
+ };
37
+ title?: string;
38
+ author?: string;
39
+ role?: string;
40
+ rating?: number;
41
+ quote?: ReactNode;
42
+ authorImage?: {
43
+ url: string;
44
+ title?: string;
45
+ width?: number;
46
+ height?: number;
47
+ } | null;
48
+ avatarurl?: string;
49
+ }
50
+
51
+ export interface ProductCardFields {
52
+ __typename: "ComponentProductCard";
53
+ sys: {
54
+ id: string;
55
+ };
56
+ speed?: string;
57
+ price?: string;
58
+ priceSuffix?: string;
59
+ techType?: string;
60
+ highlighted?: boolean;
61
+ productCardDescription?: string;
62
+ benefitsTitle?: string;
63
+ benefitsExpanded?: boolean;
64
+ innerBadge?: string;
65
+ // GraphQL patterns for nested references
66
+ benefits?: {
67
+ items: Array<any>;
68
+ };
69
+ giftRewards?: {
70
+ list?: {
71
+ items: Array<any>;
72
+ };
73
+ };
74
+ cta?: {
75
+ buttonLabel?: string;
76
+ [key: string]: any;
77
+ };
78
+ innerBadgeIcon?: {
79
+ url: string;
80
+ [key: string]: any;
81
+ };
82
+ }
83
+
84
+ export interface CardFields {
85
+ __typename: "ComponentCard";
86
+ sys: {
87
+ id: string;
88
+ };
89
+ title?: string;
90
+ subtitle?: string;
91
+ eyebrow?: string;
92
+ body?: { json: any };
93
+ image?: { url: string; [key: string]: any };
94
+ cta?: { buttonLabel?: string; [key: string]: any };
95
+ ctaBottom?: { buttonLabel?: string; [key: string]: any };
96
+ }
97
+
98
+ export interface CarouselWithTestimonialCards
99
+ extends Omit<carouselFieldsInterface, "items"> {
100
+ items: {
101
+ items: TestimonialCardFields[];
102
+ };
103
+ }
104
+
105
+ export interface CarouselWithProductCards
106
+ extends Omit<carouselFieldsInterface, "items"> {
107
+ items: {
108
+ items: ProductCardFields[];
109
+ };
110
+ }
111
+
112
+ export const backgroundColorMap = {
113
+ blue: "bg-bg-fill-inverse",
114
+ green: "bg-border-success",
115
+ orange: "bg-orange-500",
116
+ purple: "bg-purple-500",
117
+ white: "bg-white",
118
+ };
119
+
120
+ export type CarouselProps = {
121
+ fields: carouselFieldsInterface;
122
+ hasTestimonialCards: boolean;
123
+ hasProductCards: boolean;
124
+ disclaimerText: ReactNode;
125
+ backgroundColor: string;
126
+ };
@@ -1,46 +1,46 @@
1
- import { CtaCallout } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof CtaCallout> = {
7
- title: "Contentful Blocks/CtaCallout",
8
- component: CtaCallout,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component:
16
- "Contentful CTA callout block with title, description, and optional button.",
17
- },
18
- },
19
- },
20
- args: {
21
- title: "Call to Action",
22
- subTitle: "Subtitle",
23
- description: "Description text.",
24
- background: "white",
25
- button: {
26
- showButtonAs: "solid",
27
- buttonVariant: "primary_brand",
28
- buttonLabel: "Learn More",
29
- buttonPrefix: "",
30
- badge: "",
31
- badgeIcon: "",
32
- buttonIcon: "",
33
- buttonIconPosition: "left",
34
- href: "",
35
- target: "_self",
36
- anchorId: "",
37
- preserveQueryParameters: false,
38
- clickToOpen: "",
39
- tabmodalNameToOpen: "",
40
- preDefinedFunctionExecution: "",
41
- },
42
- },
43
- };
44
- export default meta;
45
- type Story = StoryObj<typeof meta>;
46
- export const Default: Story = {};
1
+ import { CtaCallout } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof CtaCallout> = {
7
+ title: "Contentful Blocks/CtaCallout",
8
+ component: CtaCallout,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component:
16
+ "Contentful CTA callout block with title, description, and optional button.",
17
+ },
18
+ },
19
+ },
20
+ args: {
21
+ title: "Call to Action",
22
+ subTitle: "Subtitle",
23
+ description: "Description text.",
24
+ background: "white",
25
+ button: {
26
+ showButtonAs: "solid",
27
+ buttonVariant: "primary_brand",
28
+ buttonLabel: "Learn More",
29
+ buttonPrefix: "",
30
+ badge: "",
31
+ badgeIcon: "",
32
+ buttonIcon: "",
33
+ buttonIconPosition: "left",
34
+ href: "",
35
+ target: "_self",
36
+ anchorId: "",
37
+ preserveQueryParameters: false,
38
+ clickToOpen: "",
39
+ tabmodalNameToOpen: "",
40
+ preDefinedFunctionExecution: "",
41
+ },
42
+ },
43
+ };
44
+ export default meta;
45
+ type Story = StoryObj<typeof meta>;
46
+ export const Default: Story = {};
@@ -1,54 +1,54 @@
1
- import React from "react";
2
- import { CtaCalloutProps, ThemeKey } from "./types";
3
-
4
- import { Text } from "@shared/components/text";
5
- import { Button } from "@shared/contentful/blocks/button";
6
-
7
- export const CtaCallout: React.FC<CtaCalloutProps> = ({
8
- title,
9
- background = "white",
10
- button,
11
- color,
12
- contentAlignment,
13
- description,
14
- descriptionAlignment,
15
- enableHeading,
16
- subTitle,
17
- maxWidth = true,
18
- }) => {
19
- const bgColorClasses: Record<ThemeKey, string> = {
20
- blue: "bg-[#07B2E2]",
21
- green: "bg-[#26B170]",
22
- yellow: "bg-[#F5FF1E]",
23
- purple: "bg-[#931D69]",
24
- white: "bg-white",
25
- navy: "bg-[#00002D]",
26
- };
27
- return (
28
- <div className={`${bgColorClasses[background]} component-container`}>
29
- <div
30
- className={`${maxWidth ? "mx-auto max-w-120" : ""} color-${color} flex flex-col ${color == "dark" ? "text-text" : "text-white"} px-5 py-16 lg:px-13 lg:py-24`}
31
- >
32
- <Text
33
- as={enableHeading ? "h1" : "h2"}
34
- className={`heading2 lg:heading1 text-${contentAlignment}`}
35
- >
36
- {title}
37
- </Text>
38
- <Text
39
- as="h3"
40
- className={`subheading3 pt-2 lg:subheading1 lg:pt-3 text-${contentAlignment}`}
41
- >
42
- {subTitle}
43
- </Text>
44
- <div className={`pt-2 text-body1 lg:pt-3 text-${descriptionAlignment}`}>
45
- {description}
46
- </div>
47
- <div className="flex justify-center pt-5 lg:pt-14">
48
- <Button {...button} />
49
- </div>
50
- </div>
51
- </div>
52
- );
53
- };
54
- export default CtaCallout;
1
+ import React from "react";
2
+ import { CtaCalloutProps, ThemeKey } from "./types";
3
+
4
+ import { Text } from "@shared/components/text";
5
+ import { Button } from "@shared/contentful/blocks/button";
6
+
7
+ export const CtaCallout: React.FC<CtaCalloutProps> = ({
8
+ title,
9
+ background = "white",
10
+ button,
11
+ color,
12
+ contentAlignment,
13
+ description,
14
+ descriptionAlignment,
15
+ enableHeading,
16
+ subTitle,
17
+ maxWidth = true,
18
+ }) => {
19
+ const bgColorClasses: Record<ThemeKey, string> = {
20
+ blue: "bg-[#07B2E2]",
21
+ green: "bg-[#26B170]",
22
+ yellow: "bg-[#F5FF1E]",
23
+ purple: "bg-[#931D69]",
24
+ white: "bg-white",
25
+ navy: "bg-[#00002D]",
26
+ };
27
+ return (
28
+ <div className={`${bgColorClasses[background]} component-container`}>
29
+ <div
30
+ className={`${maxWidth ? "mx-auto max-w-120" : ""} color-${color} flex flex-col ${color == "dark" ? "text-text" : "text-white"} px-5 py-16 lg:px-13 lg:py-24`}
31
+ >
32
+ <Text
33
+ as={enableHeading ? "h1" : "h2"}
34
+ className={`heading2 lg:heading1 text-${contentAlignment}`}
35
+ >
36
+ {title}
37
+ </Text>
38
+ <Text
39
+ as="h3"
40
+ className={`subheading3 pt-2 lg:subheading1 lg:pt-3 text-${contentAlignment}`}
41
+ >
42
+ {subTitle}
43
+ </Text>
44
+ <div className={`pt-2 text-body1 lg:pt-3 text-${descriptionAlignment}`}>
45
+ {description}
46
+ </div>
47
+ <div className="flex justify-center pt-5 lg:pt-14">
48
+ <Button {...button} />
49
+ </div>
50
+ </div>
51
+ </div>
52
+ );
53
+ };
54
+ export default CtaCallout;
@@ -1,22 +1,22 @@
1
- import React from "react";
2
-
3
- export type CtaCalloutProps = {
4
- title?: string;
5
- subTitle?: string;
6
- enableHeading?: boolean;
7
- color?: "dark" | "light";
8
- background?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
9
- description?: React.ReactNode;
10
- descriptionAlignment?: "center" | "left" | "right";
11
- contentAlignment?: "center" | "left" | "right";
12
- button?: any;
13
- maxWidth?: boolean;
14
- };
15
-
16
- export type ThemeKey =
17
- | "blue"
18
- | "green"
19
- | "yellow"
20
- | "purple"
21
- | "white"
22
- | "navy";
1
+ import React from "react";
2
+
3
+ export type CtaCalloutProps = {
4
+ title?: string;
5
+ subTitle?: string;
6
+ enableHeading?: boolean;
7
+ color?: "dark" | "light";
8
+ background?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
9
+ description?: React.ReactNode;
10
+ descriptionAlignment?: "center" | "left" | "right";
11
+ contentAlignment?: "center" | "left" | "right";
12
+ button?: any;
13
+ maxWidth?: boolean;
14
+ };
15
+
16
+ export type ThemeKey =
17
+ | "blue"
18
+ | "green"
19
+ | "yellow"
20
+ | "purple"
21
+ | "white"
22
+ | "navy";