@windstream/react-shared-components 0.1.20 → 0.1.21

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 (160) hide show
  1. package/README.md +635 -635
  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 +1 -1
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/core.d.ts +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.esm.js +6 -6
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +6 -6
  11. package/dist/index.js.map +1 -1
  12. package/package.json +182 -182
  13. package/src/components/accordion/Accordion.stories.tsx +230 -230
  14. package/src/components/accordion/types.ts +11 -11
  15. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  16. package/src/components/alert-card/index.tsx +41 -41
  17. package/src/components/alert-card/types.ts +13 -13
  18. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  19. package/src/components/brand-button/helpers.ts +35 -35
  20. package/src/components/brand-button/index.tsx +115 -115
  21. package/src/components/brand-button/types.ts +37 -37
  22. package/src/components/button/Button.stories.tsx +108 -108
  23. package/src/components/button/index.tsx +27 -27
  24. package/src/components/button/types.ts +14 -14
  25. package/src/components/call-button/CallButton.stories.tsx +324 -324
  26. package/src/components/call-button/index.tsx +86 -86
  27. package/src/components/call-button/types.ts +11 -11
  28. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  29. package/src/components/checkbox/index.tsx +197 -197
  30. package/src/components/checkbox/types.ts +27 -27
  31. package/src/components/checklist/Checklist.stories.tsx +150 -150
  32. package/src/components/checklist/index.tsx +59 -59
  33. package/src/components/checklist/types.ts +16 -16
  34. package/src/components/collapse/Collapse.stories.tsx +255 -255
  35. package/src/components/collapse/index.tsx +46 -46
  36. package/src/components/collapse/types.ts +6 -6
  37. package/src/components/divider/Divider.stories.tsx +205 -205
  38. package/src/components/divider/index.tsx +22 -22
  39. package/src/components/divider/type.ts +3 -3
  40. package/src/components/image/Image.stories.tsx +113 -113
  41. package/src/components/image/index.tsx +25 -25
  42. package/src/components/image/types.ts +40 -40
  43. package/src/components/input/Input.stories.tsx +325 -325
  44. package/src/components/input/index.tsx +177 -177
  45. package/src/components/input/types.ts +37 -37
  46. package/src/components/link/Link.stories.tsx +163 -163
  47. package/src/components/link/index.tsx +14 -2
  48. package/src/components/link/types.ts +25 -25
  49. package/src/components/list/List.stories.tsx +272 -272
  50. package/src/components/list/index.tsx +88 -88
  51. package/src/components/list/list-item/index.tsx +38 -38
  52. package/src/components/list/list-item/types.ts +13 -13
  53. package/src/components/list/types.ts +29 -29
  54. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  55. package/src/components/material-icon/constants.ts +98 -98
  56. package/src/components/material-icon/index.tsx +47 -47
  57. package/src/components/material-icon/types.ts +31 -31
  58. package/src/components/modal/Modal.stories.tsx +171 -171
  59. package/src/components/modal/index.tsx +164 -164
  60. package/src/components/modal/types.ts +24 -24
  61. package/src/components/next-image/index.tsx +54 -54
  62. package/src/components/next-image/types.ts +1 -1
  63. package/src/components/pagination/index.tsx +100 -100
  64. package/src/components/pagination/types.ts +6 -6
  65. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  66. package/src/components/radio-button/index.tsx +75 -75
  67. package/src/components/radio-button/types.ts +21 -21
  68. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  69. package/src/components/see-more/index.tsx +44 -44
  70. package/src/components/see-more/types.ts +4 -4
  71. package/src/components/select/Select.stories.tsx +411 -411
  72. package/src/components/select/index.tsx +155 -155
  73. package/src/components/select/types.ts +36 -36
  74. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  75. package/src/components/select-plan-button/index.tsx +57 -57
  76. package/src/components/select-plan-button/types.ts +14 -14
  77. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  78. package/src/components/skeleton/index.tsx +61 -61
  79. package/src/components/skeleton/types.ts +4 -4
  80. package/src/components/spinner/Spinner.stories.tsx +335 -335
  81. package/src/components/spinner/index.tsx +44 -44
  82. package/src/components/spinner/types.ts +5 -5
  83. package/src/components/text/Text.stories.tsx +321 -321
  84. package/src/components/text/index.tsx +25 -25
  85. package/src/components/text/types.ts +45 -45
  86. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  87. package/src/components/tooltip/index.tsx +74 -74
  88. package/src/components/tooltip/types.ts +7 -7
  89. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  90. package/src/components/view-cart-button/index.tsx +42 -42
  91. package/src/components/view-cart-button/types.ts +5 -5
  92. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  93. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  94. package/src/contentful/blocks/blogs-grid/index.tsx +129 -129
  95. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  96. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  97. package/src/contentful/blocks/button/index.tsx +121 -121
  98. package/src/contentful/blocks/button/types.ts +36 -36
  99. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  100. package/src/contentful/blocks/callout/index.tsx +86 -86
  101. package/src/contentful/blocks/callout/types.ts +15 -15
  102. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  103. package/src/contentful/blocks/cards/blog-card/index.tsx +104 -104
  104. package/src/contentful/blocks/cards/blog-card/types.ts +15 -15
  105. package/src/contentful/blocks/cards/index.tsx +13 -13
  106. package/src/contentful/blocks/cards/product-card/index.tsx +208 -208
  107. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  108. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  109. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  110. package/src/contentful/blocks/cards/types.ts +1 -1
  111. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  112. package/src/contentful/blocks/carousel/helper.tsx +356 -356
  113. package/src/contentful/blocks/carousel/index.tsx +73 -73
  114. package/src/contentful/blocks/carousel/types.ts +143 -143
  115. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  116. package/src/contentful/blocks/cta-callout/index.tsx +60 -60
  117. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  118. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  119. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  120. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  121. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  122. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  123. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  124. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  125. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  126. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  127. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  128. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  129. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  130. package/src/contentful/blocks/modal/constants.ts +53 -53
  131. package/src/contentful/blocks/modal/index.tsx +91 -91
  132. package/src/contentful/blocks/modal/types.ts +12 -12
  133. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +113 -113
  134. package/src/contentful/blocks/navigation/index.tsx +394 -394
  135. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  136. package/src/contentful/blocks/navigation/types.ts +41 -41
  137. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  138. package/src/contentful/blocks/primary-hero/index.tsx +234 -234
  139. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  140. package/src/contentful/blocks/search-block/index.tsx +90 -90
  141. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  142. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  143. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  144. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  145. package/src/contentful/blocks/text/index.tsx +12 -12
  146. package/src/contentful/blocks/text/types.ts +1 -1
  147. package/src/contentful/index.ts +75 -75
  148. package/src/hooks/use-body-scroll-lock.ts +34 -34
  149. package/src/hooks/use-outside-click.ts +17 -17
  150. package/src/index.ts +96 -96
  151. package/src/next/index.ts +5 -5
  152. package/src/setupTests.ts +46 -46
  153. package/src/stories/DocsTemplate.tsx +24 -24
  154. package/src/styles/globals.css +343 -343
  155. package/src/types/global.d.ts +9 -9
  156. package/src/types/micro-components.ts +99 -99
  157. package/src/types/utm.ts +49 -49
  158. package/src/utils/cookie.ts +58 -58
  159. package/src/utils/index.ts +65 -65
  160. package/src/utils/utm.ts +221 -221
@@ -1,73 +1,73 @@
1
- "use client";
2
-
3
- import React from "react";
4
- import { TabSwitch } from "../carousel/helper";
5
- import { ProductCardCarousel, TestimonialCarousel } from "./helper";
6
- import {
7
- CarouselProps,
8
- CarouselWithProductCards,
9
- CarouselWithTestimonialCards,
10
- } from "./types";
11
-
12
- import { Text } from "@shared/components/text";
13
-
14
- export const Carousel: React.FC<CarouselProps> = ({
15
- fields,
16
- hasTestimonialCards,
17
- hasProductCards,
18
- disclaimerText,
19
- backgroundColor,
20
- activeTab,
21
- setActiveTab,
22
- tabs,
23
- onModalButtonClick,
24
- renderCheckPlans,
25
- showSwitch = false,
26
- }) => {
27
- return (
28
- <div
29
- className={`${backgroundColor} mx-auto overflow-hidden py-9 md:px-5 md:py-20`}
30
- >
31
- <div className="relative mx-auto flex max-w-[1280px] flex-col gap-12 overflow-visible">
32
- <div>
33
- <Text
34
- as="h2"
35
- className="text-center text-4xl font-bold text-text md:text-5xl"
36
- >
37
- {fields?.title}
38
- </Text>
39
- {fields?.subTitle && (
40
- <Text as="h3" className="body1 px-4 pt-4 text-center">
41
- {fields?.subTitle}
42
- </Text>
43
- )}
44
- </div>
45
-
46
- {showSwitch && hasProductCards && tabs.length > 1 && (
47
- <TabSwitch
48
- tabs={tabs}
49
- activeTab={activeTab}
50
- onChange={setActiveTab}
51
- />
52
- )}
53
- {hasTestimonialCards && (
54
- <TestimonialCarousel
55
- fields={fields as CarouselWithTestimonialCards}
56
- />
57
- )}
58
- {hasProductCards && (
59
- <ProductCardCarousel
60
- onModalButtonClick={onModalButtonClick}
61
- renderCheckPlans={renderCheckPlans}
62
- fields={fields as CarouselWithProductCards}
63
- />
64
- )}
65
- <Text as="div" className="body1 mt-8 px-4 text-center text-neutral-600">
66
- {disclaimerText}
67
- </Text>
68
- </div>
69
- </div>
70
- );
71
- };
72
-
73
- export default Carousel;
1
+ "use client";
2
+
3
+ import React from "react";
4
+ import { TabSwitch } from "../carousel/helper";
5
+ import { ProductCardCarousel, TestimonialCarousel } from "./helper";
6
+ import {
7
+ CarouselProps,
8
+ CarouselWithProductCards,
9
+ CarouselWithTestimonialCards,
10
+ } from "./types";
11
+
12
+ import { Text } from "@shared/components/text";
13
+
14
+ export const Carousel: React.FC<CarouselProps> = ({
15
+ fields,
16
+ hasTestimonialCards,
17
+ hasProductCards,
18
+ disclaimerText,
19
+ backgroundColor,
20
+ activeTab,
21
+ setActiveTab,
22
+ tabs,
23
+ onModalButtonClick,
24
+ renderCheckPlans,
25
+ showSwitch = false,
26
+ }) => {
27
+ return (
28
+ <div
29
+ className={`${backgroundColor} mx-auto overflow-hidden py-9 md:px-5 md:py-20`}
30
+ >
31
+ <div className="relative mx-auto flex max-w-[1280px] flex-col gap-12 overflow-visible">
32
+ <div>
33
+ <Text
34
+ as="h2"
35
+ className="text-center text-4xl font-bold text-text md:text-5xl"
36
+ >
37
+ {fields?.title}
38
+ </Text>
39
+ {fields?.subTitle && (
40
+ <Text as="h3" className="body1 px-4 pt-4 text-center">
41
+ {fields?.subTitle}
42
+ </Text>
43
+ )}
44
+ </div>
45
+
46
+ {showSwitch && hasProductCards && tabs.length > 1 && (
47
+ <TabSwitch
48
+ tabs={tabs}
49
+ activeTab={activeTab}
50
+ onChange={setActiveTab}
51
+ />
52
+ )}
53
+ {hasTestimonialCards && (
54
+ <TestimonialCarousel
55
+ fields={fields as CarouselWithTestimonialCards}
56
+ />
57
+ )}
58
+ {hasProductCards && (
59
+ <ProductCardCarousel
60
+ onModalButtonClick={onModalButtonClick}
61
+ renderCheckPlans={renderCheckPlans}
62
+ fields={fields as CarouselWithProductCards}
63
+ />
64
+ )}
65
+ <Text as="div" className="body1 mt-8 px-4 text-center text-neutral-600">
66
+ {disclaimerText}
67
+ </Text>
68
+ </div>
69
+ </div>
70
+ );
71
+ };
72
+
73
+ export default Carousel;
@@ -1,143 +1,143 @@
1
- import React, { ReactNode } from "react";
2
-
3
- import { CheckPlansProps } from "@shared/types/micro-components";
4
-
5
- export interface carouselFieldsInterface {
6
- __typename: "ComponentCarousel";
7
- sys: {
8
- id: string;
9
- };
10
- entryName?: string;
11
- anchorId?: string;
12
- title?: string;
13
- subTitle?: string;
14
- rotationTiming?: number;
15
- showArrows?: boolean;
16
- autoRotate?: boolean;
17
- initialSlideIndex?: number;
18
- infiniteScroll?: boolean;
19
- mobileNavigationType?: boolean;
20
- disclaimerText?: {
21
- json: any;
22
- };
23
- backgroundColor?: "blue" | "green" | "orange" | "purple" | "white";
24
- items: {
25
- items: Array<CarouselItemsType>;
26
- };
27
- }
28
-
29
- export type CarouselItemsType =
30
- | TestimonialCardFields
31
- | ProductCardFields
32
- | CardFields;
33
-
34
- export interface TestimonialCardFields {
35
- __typename: "ComponentTestimonialCard";
36
- sys: {
37
- id: string;
38
- };
39
- title?: string;
40
- author?: string;
41
- role?: string;
42
- rating?: number;
43
- quote?: ReactNode;
44
- authorImage?: {
45
- url: string;
46
- title?: string;
47
- width?: number;
48
- height?: number;
49
- } | null;
50
- avatarurl?: string;
51
- }
52
-
53
- export interface ProductCardFields {
54
- __typename: "ComponentProductCard";
55
- sys: {
56
- id: string;
57
- };
58
- speed?: string;
59
- price?: string;
60
- priceSuffix?: string;
61
- techType?: string;
62
- highlighted?: boolean;
63
- productCardDescription?: string;
64
- benefitsTitle?: string;
65
- benefitsExpanded?: boolean;
66
- innerBadge?: string;
67
- // GraphQL patterns for nested references
68
- benefits?: {
69
- items: Array<any>;
70
- };
71
- giftRewards?: {
72
- list?: {
73
- items: Array<any>;
74
- };
75
- };
76
- cta?: {
77
- buttonLabel?: string;
78
- [key: string]: any;
79
- };
80
- innerBadgeIcon?: {
81
- url: string;
82
- [key: string]: any;
83
- };
84
- }
85
-
86
- export interface CardFields {
87
- __typename: "ComponentCard";
88
- sys: {
89
- id: string;
90
- };
91
- title?: string;
92
- subtitle?: string;
93
- eyebrow?: string;
94
- body?: { json: any };
95
- image?: { url: string; [key: string]: any };
96
- cta?: { buttonLabel?: string; [key: string]: any };
97
- ctaBottom?: { buttonLabel?: string; [key: string]: any };
98
- }
99
-
100
- export interface CarouselWithTestimonialCards
101
- extends Omit<carouselFieldsInterface, "items"> {
102
- items: {
103
- items: TestimonialCardFields[];
104
- };
105
- }
106
-
107
- export interface CarouselWithProductCards
108
- extends Omit<carouselFieldsInterface, "items"> {
109
- items: {
110
- items: ProductCardFields[];
111
- };
112
- }
113
-
114
- export const backgroundColorMap = {
115
- blue: "bg-bg-fill-inverse",
116
- green: "bg-border-success",
117
- orange: "bg-orange-500",
118
- purple: "bg-purple-500",
119
- white: "bg-white",
120
- };
121
-
122
- export type CarouselProps = {
123
- fields: carouselFieldsInterface;
124
- hasTestimonialCards: boolean;
125
- hasProductCards: boolean;
126
- disclaimerText: ReactNode;
127
- backgroundColor: string;
128
- activeTab: string;
129
- setActiveTab: (tab: string) => void;
130
- tabs: string[];
131
- showSwitch?: boolean;
132
- onModalButtonClick?: (id?: string) => void;
133
- renderCheckPlans?: (overrides?: CheckPlansProps) => React.ReactNode;
134
- };
135
-
136
- export interface TabSwitchProps {
137
- tabs: string[];
138
- activeTab: string;
139
- onChange: (tab: string) => void;
140
- className?: string;
141
- }
142
-
143
- export const DEFAULT_TABS = ["Business Ready", "Internet Only"];
1
+ import React, { ReactNode } from "react";
2
+
3
+ import { CheckPlansProps } from "@shared/types/micro-components";
4
+
5
+ export interface carouselFieldsInterface {
6
+ __typename: "ComponentCarousel";
7
+ sys: {
8
+ id: string;
9
+ };
10
+ entryName?: string;
11
+ anchorId?: string;
12
+ title?: string;
13
+ subTitle?: string;
14
+ rotationTiming?: number;
15
+ showArrows?: boolean;
16
+ autoRotate?: boolean;
17
+ initialSlideIndex?: number;
18
+ infiniteScroll?: boolean;
19
+ mobileNavigationType?: boolean;
20
+ disclaimerText?: {
21
+ json: any;
22
+ };
23
+ backgroundColor?: "blue" | "green" | "orange" | "purple" | "white";
24
+ items: {
25
+ items: Array<CarouselItemsType>;
26
+ };
27
+ }
28
+
29
+ export type CarouselItemsType =
30
+ | TestimonialCardFields
31
+ | ProductCardFields
32
+ | CardFields;
33
+
34
+ export interface TestimonialCardFields {
35
+ __typename: "ComponentTestimonialCard";
36
+ sys: {
37
+ id: string;
38
+ };
39
+ title?: string;
40
+ author?: string;
41
+ role?: string;
42
+ rating?: number;
43
+ quote?: ReactNode;
44
+ authorImage?: {
45
+ url: string;
46
+ title?: string;
47
+ width?: number;
48
+ height?: number;
49
+ } | null;
50
+ avatarurl?: string;
51
+ }
52
+
53
+ export interface ProductCardFields {
54
+ __typename: "ComponentProductCard";
55
+ sys: {
56
+ id: string;
57
+ };
58
+ speed?: string;
59
+ price?: string;
60
+ priceSuffix?: string;
61
+ techType?: string;
62
+ highlighted?: boolean;
63
+ productCardDescription?: string;
64
+ benefitsTitle?: string;
65
+ benefitsExpanded?: boolean;
66
+ innerBadge?: string;
67
+ // GraphQL patterns for nested references
68
+ benefits?: {
69
+ items: Array<any>;
70
+ };
71
+ giftRewards?: {
72
+ list?: {
73
+ items: Array<any>;
74
+ };
75
+ };
76
+ cta?: {
77
+ buttonLabel?: string;
78
+ [key: string]: any;
79
+ };
80
+ innerBadgeIcon?: {
81
+ url: string;
82
+ [key: string]: any;
83
+ };
84
+ }
85
+
86
+ export interface CardFields {
87
+ __typename: "ComponentCard";
88
+ sys: {
89
+ id: string;
90
+ };
91
+ title?: string;
92
+ subtitle?: string;
93
+ eyebrow?: string;
94
+ body?: { json: any };
95
+ image?: { url: string; [key: string]: any };
96
+ cta?: { buttonLabel?: string; [key: string]: any };
97
+ ctaBottom?: { buttonLabel?: string; [key: string]: any };
98
+ }
99
+
100
+ export interface CarouselWithTestimonialCards
101
+ extends Omit<carouselFieldsInterface, "items"> {
102
+ items: {
103
+ items: TestimonialCardFields[];
104
+ };
105
+ }
106
+
107
+ export interface CarouselWithProductCards
108
+ extends Omit<carouselFieldsInterface, "items"> {
109
+ items: {
110
+ items: ProductCardFields[];
111
+ };
112
+ }
113
+
114
+ export const backgroundColorMap = {
115
+ blue: "bg-bg-fill-inverse",
116
+ green: "bg-border-success",
117
+ orange: "bg-orange-500",
118
+ purple: "bg-purple-500",
119
+ white: "bg-white",
120
+ };
121
+
122
+ export type CarouselProps = {
123
+ fields: carouselFieldsInterface;
124
+ hasTestimonialCards: boolean;
125
+ hasProductCards: boolean;
126
+ disclaimerText: ReactNode;
127
+ backgroundColor: string;
128
+ activeTab: string;
129
+ setActiveTab: (tab: string) => void;
130
+ tabs: string[];
131
+ showSwitch?: boolean;
132
+ onModalButtonClick?: (id?: string) => void;
133
+ renderCheckPlans?: (overrides?: CheckPlansProps) => React.ReactNode;
134
+ };
135
+
136
+ export interface TabSwitchProps {
137
+ tabs: string[];
138
+ activeTab: string;
139
+ onChange: (tab: string) => void;
140
+ className?: string;
141
+ }
142
+
143
+ export const DEFAULT_TABS = ["Business Ready", "Internet Only"];
@@ -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,60 +1,60 @@
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
- onModalButtonClick,
19
- renderCheckPlans,
20
- }) => {
21
- const bgColorClasses: Record<ThemeKey, string> = {
22
- blue: "bg-[#07B2E2]",
23
- green: "bg-[#26B170]",
24
- yellow: "bg-[#F5FF1E]",
25
- purple: "bg-[#931D69]",
26
- white: "bg-white",
27
- navy: "bg-[#00002D]",
28
- };
29
- return (
30
- <div className={`${bgColorClasses[background]} component-container`}>
31
- <div
32
- 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`}
33
- >
34
- <Text
35
- as={enableHeading ? "h1" : "h2"}
36
- className={`heading2 lg:heading1 text-${contentAlignment}`}
37
- >
38
- {title}
39
- </Text>
40
- <Text
41
- as="h3"
42
- className={`subheading3 pt-2 lg:subheading1 lg:pt-3 text-${contentAlignment}`}
43
- >
44
- {subTitle}
45
- </Text>
46
- <div className={`pt-2 text-body1 lg:pt-3 text-${descriptionAlignment}`}>
47
- {description}
48
- </div>
49
- <div className="flex justify-center pt-5 lg:pt-14">
50
- <Button
51
- {...button}
52
- renderCheckPlans={renderCheckPlans}
53
- onModalButtonClick={onModalButtonClick}
54
- />
55
- </div>
56
- </div>
57
- </div>
58
- );
59
- };
60
- 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
+ onModalButtonClick,
19
+ renderCheckPlans,
20
+ }) => {
21
+ const bgColorClasses: Record<ThemeKey, string> = {
22
+ blue: "bg-[#07B2E2]",
23
+ green: "bg-[#26B170]",
24
+ yellow: "bg-[#F5FF1E]",
25
+ purple: "bg-[#931D69]",
26
+ white: "bg-white",
27
+ navy: "bg-[#00002D]",
28
+ };
29
+ return (
30
+ <div className={`${bgColorClasses[background]} component-container`}>
31
+ <div
32
+ 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`}
33
+ >
34
+ <Text
35
+ as={enableHeading ? "h1" : "h2"}
36
+ className={`heading2 lg:heading1 text-${contentAlignment}`}
37
+ >
38
+ {title}
39
+ </Text>
40
+ <Text
41
+ as="h3"
42
+ className={`subheading3 pt-2 lg:subheading1 lg:pt-3 text-${contentAlignment}`}
43
+ >
44
+ {subTitle}
45
+ </Text>
46
+ <div className={`pt-2 text-body1 lg:pt-3 text-${descriptionAlignment}`}>
47
+ {description}
48
+ </div>
49
+ <div className="flex justify-center pt-5 lg:pt-14">
50
+ <Button
51
+ {...button}
52
+ renderCheckPlans={renderCheckPlans}
53
+ onModalButtonClick={onModalButtonClick}
54
+ />
55
+ </div>
56
+ </div>
57
+ </div>
58
+ );
59
+ };
60
+ export default CtaCallout;