@windstream/react-shared-components 0.0.38 → 0.0.40

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 (129) hide show
  1. package/dist/contentful/index.d.ts +31 -7
  2. package/dist/contentful/index.esm.js +1 -1
  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 +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/next/index.esm.js +1 -1
  13. package/dist/next/index.esm.js.map +1 -1
  14. package/dist/next/index.js +1 -1
  15. package/dist/next/index.js.map +1 -1
  16. package/dist/styles.css +1 -1
  17. package/package.json +1 -1
  18. package/src/components/accordion/Accordion.stories.tsx +230 -230
  19. package/src/components/accordion/types.ts +9 -9
  20. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  21. package/src/components/alert-card/index.tsx +32 -32
  22. package/src/components/brand-button/BrandButton.stories.tsx +219 -219
  23. package/src/components/brand-button/helpers.ts +35 -35
  24. package/src/components/brand-button/types.ts +25 -25
  25. package/src/components/button/Button.stories.tsx +108 -108
  26. package/src/components/call-button/CallButton.stories.tsx +324 -324
  27. package/src/components/call-button/index.tsx +79 -79
  28. package/src/components/call-button/types.ts +10 -10
  29. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  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 +39 -39
  33. package/src/components/checklist/types.ts +6 -6
  34. package/src/components/collapse/Collapse.stories.tsx +255 -255
  35. package/src/components/collapse/types.ts +6 -6
  36. package/src/components/divider/Divider.stories.tsx +205 -205
  37. package/src/components/divider/index.tsx +22 -22
  38. package/src/components/divider/type.ts +3 -3
  39. package/src/components/image/Image.stories.tsx +113 -113
  40. package/src/components/image/index.tsx +25 -25
  41. package/src/components/image/types.ts +10 -3
  42. package/src/components/input/Input.stories.tsx +325 -325
  43. package/src/components/input/index.tsx +177 -177
  44. package/src/components/input/types.ts +37 -37
  45. package/src/components/link/Link.stories.tsx +163 -163
  46. package/src/components/list/List.stories.tsx +272 -272
  47. package/src/components/material-icon/MaterialIcon.stories.tsx +330 -330
  48. package/src/components/material-icon/constants.ts +95 -95
  49. package/src/components/modal/Modal.stories.tsx +171 -171
  50. package/src/components/modal/types.ts +24 -24
  51. package/src/components/next-image/index.tsx +32 -25
  52. package/src/components/next-image/types.ts +1 -1
  53. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  54. package/src/components/radio-button/index.tsx +75 -75
  55. package/src/components/radio-button/types.ts +21 -21
  56. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  57. package/src/components/see-more/types.ts +4 -4
  58. package/src/components/select/Select.stories.tsx +411 -411
  59. package/src/components/select/types.ts +35 -35
  60. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +168 -168
  61. package/src/components/select-plan-button/index.tsx +29 -29
  62. package/src/components/select-plan-button/types.ts +4 -4
  63. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  64. package/src/components/skeleton/types.ts +4 -4
  65. package/src/components/spinner/Spinner.stories.tsx +335 -335
  66. package/src/components/spinner/index.tsx +44 -44
  67. package/src/components/spinner/types.ts +5 -5
  68. package/src/components/text/Text.stories.tsx +321 -321
  69. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  70. package/src/components/tooltip/index.tsx +74 -74
  71. package/src/components/tooltip/types.ts +7 -7
  72. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  73. package/src/components/view-cart-button/index.tsx +44 -44
  74. package/src/components/view-cart-button/types.ts +5 -5
  75. package/src/contentful/blocks/accordion/Accordion.stories.tsx +29 -29
  76. package/src/contentful/blocks/accordion/index.tsx +52 -52
  77. package/src/contentful/blocks/accordion/types.ts +17 -17
  78. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  79. package/src/contentful/blocks/button/index.tsx +64 -53
  80. package/src/contentful/blocks/button/types.ts +24 -21
  81. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  82. package/src/contentful/blocks/callout/index.tsx +52 -15
  83. package/src/contentful/blocks/callout/types.ts +14 -1
  84. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  85. package/src/contentful/blocks/cards/index.tsx +13 -13
  86. package/src/contentful/blocks/cards/simple-card/index.tsx +45 -0
  87. package/src/contentful/blocks/cards/simple-card/types.ts +11 -0
  88. package/src/contentful/blocks/cards/types.ts +1 -1
  89. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  90. package/src/contentful/blocks/carousel/index.tsx +13 -13
  91. package/src/contentful/blocks/carousel/types.ts +1 -1
  92. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  93. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  94. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  95. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  96. package/src/contentful/blocks/find-kinetic/index.tsx +80 -80
  97. package/src/contentful/blocks/find-kinetic/types.ts +18 -18
  98. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  99. package/src/contentful/blocks/floating-banner/index.tsx +102 -99
  100. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  101. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  102. package/src/contentful/blocks/footer/index.tsx +88 -79
  103. package/src/contentful/blocks/footer/types.ts +13 -10
  104. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  105. package/src/contentful/blocks/image-promo-bar/index.tsx +154 -154
  106. package/src/contentful/blocks/image-promo-bar/types.ts +25 -25
  107. package/src/contentful/blocks/modal/Modal.stories.tsx +23 -23
  108. package/src/contentful/blocks/modal/index.tsx +12 -12
  109. package/src/contentful/blocks/modal/types.ts +1 -1
  110. package/src/contentful/blocks/navigation/Navigation.stories.tsx +23 -23
  111. package/src/contentful/blocks/navigation/index.tsx +56 -55
  112. package/src/contentful/blocks/navigation/link-groups.tsx/index.tsx +62 -64
  113. package/src/contentful/blocks/navigation/types.ts +21 -21
  114. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  115. package/src/contentful/blocks/primary-hero/index.tsx +160 -177
  116. package/src/contentful/blocks/primary-hero/types.ts +30 -30
  117. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  118. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  119. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  120. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  121. package/src/contentful/blocks/text/index.tsx +12 -12
  122. package/src/contentful/blocks/text/types.ts +1 -1
  123. package/src/contentful/index.ts +48 -45
  124. package/src/index.ts +96 -96
  125. package/src/next/index.ts +5 -5
  126. package/src/stories/DocsTemplate.tsx +24 -24
  127. package/src/styles/globals.css +275 -275
  128. package/src/types/global.d.ts +9 -9
  129. package/src/utils/index.ts +49 -49
@@ -1,52 +1,52 @@
1
- import React from "react";
2
- import { AccordionProps, ThemeKey } from "./types";
3
-
4
- import { Accordion as AccordionComponent } from "@shared/components/accordion";
5
- import { Text } from "@shared/components/text";
6
-
7
- export const Accordion: React.FC<AccordionProps> = ({
8
- items,
9
- title,
10
- background = "white",
11
- enableHeading = false,
12
- maxWidth = true,
13
- }) => {
14
- const bgColorClasses: Record<ThemeKey, string> = {
15
- blue: "bg-[#07B2E2]",
16
- green: "bg-[#26B170]",
17
- yellow: "bg-[#F5FF1E]",
18
- purple: "bg-[#931D69]",
19
- white: "bg-white",
20
- navy: "bg-[#00002D]",
21
- };
22
- return (
23
- <div className={`${bgColorClasses[background]} component-container`}>
24
- <div
25
- className={`${maxWidth ? "max-w-120 xl:mx-auto" : ""} mx-5 my-8 lg:mx-20 lg:my-18`}
26
- >
27
- <div>
28
- <Text
29
- as={enableHeading ? "h1" : "h2"}
30
- className="heading1 text-left lg:text-center"
31
- >
32
- {title}
33
- </Text>
34
- </div>
35
- <div className="question-answer-section mt-10 lg:mt-16">
36
- {items?.map((item: any, index: number) => (
37
- <div key={`item-${index}`}>
38
- <AccordionComponent
39
- title={item.title}
40
- containerClassName="border-0 border-b-[1px]"
41
- >
42
- <Text>{item.description}</Text>
43
- </AccordionComponent>
44
- </div>
45
- ))}
46
- </div>
47
- </div>
48
- </div>
49
- );
50
- };
51
-
52
- export default Accordion;
1
+ import React from "react";
2
+ import { AccordionProps, ThemeKey } from "./types";
3
+
4
+ import { Accordion as AccordionComponent } from "@shared/components/accordion";
5
+ import { Text } from "@shared/components/text";
6
+
7
+ export const Accordion: React.FC<AccordionProps> = ({
8
+ items,
9
+ title,
10
+ background = "white",
11
+ enableHeading = false,
12
+ maxWidth = true,
13
+ }) => {
14
+ const bgColorClasses: Record<ThemeKey, string> = {
15
+ blue: "bg-[#07B2E2]",
16
+ green: "bg-[#26B170]",
17
+ yellow: "bg-[#F5FF1E]",
18
+ purple: "bg-[#931D69]",
19
+ white: "bg-white",
20
+ navy: "bg-[#00002D]",
21
+ };
22
+ return (
23
+ <div className={`${bgColorClasses[background]} component-container`}>
24
+ <div
25
+ className={`${maxWidth ? "max-w-120 xl:mx-auto" : ""} mx-5 my-8 lg:mx-20 lg:my-18`}
26
+ >
27
+ <div>
28
+ <Text
29
+ as={enableHeading ? "h1" : "h2"}
30
+ className="heading1 text-left lg:text-center"
31
+ >
32
+ {title}
33
+ </Text>
34
+ </div>
35
+ <div className="question-answer-section mt-10 lg:mt-16">
36
+ {items?.map((item: any, index: number) => (
37
+ <div key={`item-${index}`}>
38
+ <AccordionComponent
39
+ title={item.title}
40
+ containerClassName="border-0 border-b-[1px]"
41
+ >
42
+ <Text>{item.description}</Text>
43
+ </AccordionComponent>
44
+ </div>
45
+ ))}
46
+ </div>
47
+ </div>
48
+ </div>
49
+ );
50
+ };
51
+
52
+ export default Accordion;
@@ -1,17 +1,17 @@
1
- import React from "react";
2
-
3
- export type AccordionProps = {
4
- title: string;
5
- enableHeading?: boolean;
6
- background?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
7
- items: { title: string; description: React.ReactNode }[];
8
- maxWidth?: boolean;
9
- };
10
-
11
- export type ThemeKey =
12
- | "blue"
13
- | "green"
14
- | "yellow"
15
- | "purple"
16
- | "white"
17
- | "navy";
1
+ import React from "react";
2
+
3
+ export type AccordionProps = {
4
+ title: string;
5
+ enableHeading?: boolean;
6
+ background?: "blue" | "green" | "navy" | "purple" | "white" | "yellow";
7
+ items: { title: string; description: React.ReactNode }[];
8
+ maxWidth?: boolean;
9
+ };
10
+
11
+ export type ThemeKey =
12
+ | "blue"
13
+ | "green"
14
+ | "yellow"
15
+ | "purple"
16
+ | "white"
17
+ | "navy";
@@ -1,40 +1,40 @@
1
- import { Button } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof Button> = {
7
- title: "Contentful Blocks/Button",
8
- component: Button,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component:
16
- "Contentful button block. Renders as solid (BrandButton) or text (Link).",
17
- },
18
- },
19
- },
20
- args: {
21
- showButtonAs: "solid",
22
- buttonVariant: "primary_brand",
23
- buttonLabel: "Button",
24
- buttonPrefix: "",
25
- badge: "",
26
- badgeIcon: "",
27
- buttonIcon: "",
28
- buttonIconPosition: "left",
29
- href: "",
30
- target: "_self",
31
- anchorId: "",
32
- preserveQueryParameters: false,
33
- clickToOpen: "",
34
- tabmodalNameToOpen: "",
35
- preDefinedFunctionExecution: "",
36
- },
37
- };
38
- export default meta;
39
- type Story = StoryObj<typeof meta>;
40
- export const Default: Story = {};
1
+ import { Button } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof Button> = {
7
+ title: "Contentful Blocks/Button",
8
+ component: Button,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component:
16
+ "Contentful button block. Renders as solid (BrandButton) or text (Link).",
17
+ },
18
+ },
19
+ },
20
+ args: {
21
+ showButtonAs: "solid",
22
+ buttonVariant: "primary_brand",
23
+ buttonLabel: "Button",
24
+ buttonPrefix: "",
25
+ badge: "",
26
+ badgeIcon: "",
27
+ buttonIcon: "",
28
+ buttonIconPosition: "left",
29
+ href: "",
30
+ target: "_self",
31
+ anchorId: "",
32
+ preserveQueryParameters: false,
33
+ clickToOpen: "",
34
+ tabmodalNameToOpen: "",
35
+ preDefinedFunctionExecution: "",
36
+ },
37
+ };
38
+ export default meta;
39
+ type Story = StoryObj<typeof meta>;
40
+ export const Default: Story = {};
@@ -1,53 +1,64 @@
1
- import React from "react";
2
- import { ButtonProps } from "./types";
3
-
4
- import { BrandButton } from "@shared/components/brand-button";
5
- import { Link } from "@shared/components/link";
6
-
7
- export const Button: React.FC<ButtonProps> = ({
8
- showButtonAs,
9
- buttonVariant,
10
- buttonLabel,
11
- buttonPrefix,
12
- href,
13
- target,
14
- anchorId,
15
- linkClassName,
16
- linkVariant,
17
- fullWidth,
18
- preDefinedFunctionExecution,
19
- checkPlansJSX,
20
- }) => {
21
- if (preDefinedFunctionExecution === "check availability") {
22
- return checkPlansJSX;
23
- }
24
- return showButtonAs === "solid" ? (
25
- <BrandButton
26
- id={anchorId}
27
- variant={buttonVariant}
28
- text={buttonLabel}
29
- label={buttonPrefix}
30
- fullWidth={fullWidth}
31
- // badge={badge}
32
- // badgeIcon={badgeIcon}
33
- // icon={buttonIcon}
34
- // iconPosition={buttonIconPosition}
35
- // href={href}
36
- // target={target}
37
- // preserveQueryParameters={preserveQueryParameters}
38
- // clickToOpen={clickToOpen}
39
- // tabmodalNameToOpen={tabmodalNameToOpen}
40
- // preDefinedFunctionExecution={preDefinedFunctionExecution}
41
- />
42
- ) : showButtonAs === "text" ? (
43
- <Link
44
- href={href}
45
- target={target}
46
- variant={linkVariant || "default"}
47
- className={`text-text-brand ${linkClassName || ""}`}
48
- >
49
- {buttonLabel}
50
- </Link>
51
- ) : null;
52
- };
53
- export default Button;
1
+ import React from "react";
2
+ import { ButtonProps } from "./types";
3
+
4
+ import { BrandButton } from "@shared/components/brand-button";
5
+ import { Link } from "@shared/components/link";
6
+
7
+ export const Button: React.FC<ButtonProps> = ({
8
+ showButtonAs,
9
+ buttonVariant,
10
+ buttonLabel,
11
+ buttonPrefix,
12
+ href,
13
+ target,
14
+ anchorId,
15
+ linkClassName,
16
+ linkVariant,
17
+ fullWidth,
18
+ preDefinedFunctionExecution,
19
+ checkPlansJSX,
20
+ onClick,
21
+ }) => {
22
+ if (preDefinedFunctionExecution === "check availability") {
23
+ return checkPlansJSX;
24
+ }
25
+ function linkClick(event: React.MouseEvent<HTMLAnchorElement>) {
26
+ onClick?.(event);
27
+ }
28
+
29
+ function buttonClick(event: React.MouseEvent<HTMLButtonElement>) {
30
+ onClick?.(event);
31
+ }
32
+
33
+ return showButtonAs === "solid" ? (
34
+ <BrandButton
35
+ id={anchorId}
36
+ variant={buttonVariant}
37
+ text={buttonLabel}
38
+ label={buttonPrefix}
39
+ fullWidth={fullWidth}
40
+ onClick={buttonClick}
41
+ // badge={badge}
42
+ // badgeIcon={badgeIcon}
43
+ // icon={buttonIcon}
44
+ // iconPosition={buttonIconPosition}
45
+ // href={href}
46
+ // target={target}
47
+ // preserveQueryParameters={preserveQueryParameters}
48
+ // clickToOpen={clickToOpen}
49
+ // tabmodalNameToOpen={tabmodalNameToOpen}
50
+ // preDefinedFunctionExecution={preDefinedFunctionExecution}
51
+ />
52
+ ) : showButtonAs === "text" ? (
53
+ <Link
54
+ href={href}
55
+ target={target}
56
+ variant={linkVariant || "default"}
57
+ className={`text-text-brand ${linkClassName || ""}`}
58
+ onClick={linkClick}
59
+ >
60
+ {buttonLabel}
61
+ </Link>
62
+ ) : null;
63
+ };
64
+ export default Button;
@@ -1,21 +1,24 @@
1
- export type ButtonProps = {
2
- showButtonAs: "solid" | "text";
3
- buttonVariant: "primary_brand" | "secondary" | "primary_inverse";
4
- buttonLabel: string;
5
- buttonPrefix: string;
6
- badge: string;
7
- badgeIcon: string;
8
- buttonIcon: string;
9
- buttonIconPosition: "left" | "right";
10
- href: string;
11
- target: "_self" | "_blank";
12
- anchorId: string;
13
- preserveQueryParameters: boolean;
14
- clickToOpen: string;
15
- tabmodalNameToOpen: string;
16
- preDefinedFunctionExecution: string;
17
- checkPlansJSX?: React.ReactNode;
18
- linkClassName?: string;
19
- linkVariant?: "unstyled" | "default";
20
- fullWidth?: boolean;
21
- };
1
+ export type ButtonProps = {
2
+ showButtonAs: "solid" | "text";
3
+ buttonVariant: "primary_brand" | "secondary" | "primary_inverse";
4
+ buttonLabel: string;
5
+ buttonPrefix: string;
6
+ badge: string;
7
+ badgeIcon: string;
8
+ buttonIcon: string;
9
+ buttonIconPosition: "left" | "right";
10
+ href: string;
11
+ target: "_self" | "_blank";
12
+ anchorId: string;
13
+ preserveQueryParameters: boolean;
14
+ clickToOpen: string;
15
+ tabmodalNameToOpen: string;
16
+ preDefinedFunctionExecution: string;
17
+ checkPlansJSX?: React.ReactNode;
18
+ linkClassName?: string;
19
+ linkVariant?: "unstyled" | "default";
20
+ fullWidth?: boolean;
21
+ onClick?: (
22
+ event: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>
23
+ ) => void;
24
+ };
@@ -1,23 +1,23 @@
1
- import { Callout } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof Callout> = {
7
- title: "Contentful Blocks/Callout",
8
- component: Callout,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component: "Contentful callout block.",
16
- },
17
- },
18
- },
19
- args: { fields: {} },
20
- };
21
- export default meta;
22
- type Story = StoryObj<typeof meta>;
23
- export const Default: Story = {};
1
+ import { Callout } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof Callout> = {
7
+ title: "Contentful Blocks/Callout",
8
+ component: Callout,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component: "Contentful callout block.",
16
+ },
17
+ },
18
+ },
19
+ args: {},
20
+ };
21
+ export default meta;
22
+ type Story = StoryObj<typeof meta>;
23
+ export const Default: Story = {};
@@ -1,15 +1,52 @@
1
- import { CalloutProps } from "./types";
2
-
3
- import { BrandButton } from "@shared/components/brand-button";
4
- import { Text } from "@shared/components/text";
5
-
6
- export const Callout: React.FC<{ fields: CalloutProps }> = ({ fields }) => {
7
- return (
8
- <div>
9
- <Text>Callout</Text>
10
- <BrandButton label="Callout" />
11
- </div>
12
- );
13
- };
14
-
15
- export default Callout;
1
+ import React from "react";
2
+ import SimpleCards from "../cards/simple-card";
3
+ import { CalloutProps } from "./types";
4
+
5
+ import { Text } from "@shared/components/text";
6
+
7
+ export const Callout: React.FC<CalloutProps> = ({
8
+ title,
9
+ items,
10
+ // applyBoxShadow,
11
+ // bottomText,
12
+ // cardStackingMobile,
13
+ // cardsWidth,
14
+ // maxCardsPerRow,
15
+ // noGutter,
16
+ enableHeading = false,
17
+ subtitle,
18
+ color = "dark",
19
+ maxWidth = true,
20
+ }) => {
21
+ return (
22
+ <div className="component-container">
23
+ <div
24
+ className={`mx-5 mb-5 mt-12 ${maxWidth ? "max-w-120 xl:mx-auto" : ""} ${color == "dark" ? "text-text" : "text-white"}`}
25
+ >
26
+ <div className="callout-container flex flex-col gap-8">
27
+ <div className="title-holder">
28
+ {title && (
29
+ <Text
30
+ as={enableHeading ? "h1" : "h2"}
31
+ className="heading2 md:heading1 md:text-center"
32
+ >
33
+ {title}
34
+ </Text>
35
+ )}
36
+ {subtitle && (
37
+ <Text
38
+ as={enableHeading ? "h2" : "h3"}
39
+ className="subheading3 mt-3 md:subheading1 md:text-center"
40
+ >
41
+ {subtitle}
42
+ </Text>
43
+ )}
44
+ </div>
45
+ {items && <SimpleCards items={items} />}
46
+ </div>
47
+ </div>
48
+ </div>
49
+ );
50
+ };
51
+
52
+ export default Callout;
@@ -1 +1,14 @@
1
- export type CalloutProps = {};
1
+ export type CalloutProps = {
2
+ title?: string;
3
+ enableHeading?: boolean;
4
+ subtitle?: string;
5
+ applyBoxShadow?: boolean;
6
+ cardStackingMobile?: boolean;
7
+ bottomText?: string;
8
+ color?: "dark" | "light";
9
+ cardsWidth?: string;
10
+ maxCardsPerRow?: number;
11
+ noGutter?: boolean;
12
+ items: any[];
13
+ maxWidth?: boolean;
14
+ };
@@ -1,23 +1,23 @@
1
- import { Cards } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof Cards> = {
7
- title: "Contentful Blocks/Cards",
8
- component: Cards,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component: "Contentful cards block.",
16
- },
17
- },
18
- },
19
- args: { fields: {} },
20
- };
21
- export default meta;
22
- type Story = StoryObj<typeof meta>;
23
- export const Default: Story = {};
1
+ import { Cards } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof Cards> = {
7
+ title: "Contentful Blocks/Cards",
8
+ component: Cards,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component: "Contentful cards block.",
16
+ },
17
+ },
18
+ },
19
+ args: { fields: {} },
20
+ };
21
+ export default meta;
22
+ type Story = StoryObj<typeof meta>;
23
+ export const Default: Story = {};
@@ -1,13 +1,13 @@
1
- import { CardsProps } from "./types";
2
-
3
- import { Text } from "@shared/components/text";
4
-
5
- export const Cards: React.FC<{ fields: CardsProps }> = ({ fields }) => {
6
- return (
7
- <div>
8
- <Text>Cards</Text>
9
- </div>
10
- );
11
- };
12
-
13
- export default Cards;
1
+ import { CardsProps } from "./types";
2
+
3
+ import { Text } from "@shared/components/text";
4
+
5
+ export const Cards: React.FC<{ fields: CardsProps }> = ({ fields }) => {
6
+ return (
7
+ <div>
8
+ <Text>Cards</Text>
9
+ </div>
10
+ );
11
+ };
12
+
13
+ export default Cards;
@@ -0,0 +1,45 @@
1
+ import React from "react";
2
+ import type { SimpleCardsProps } from "./types";
3
+
4
+ import { NextImage } from "@shared/components/next-image";
5
+ import { Text } from "@shared/components/text";
6
+
7
+ export const SimpleCards: React.FC<SimpleCardsProps> = ({ items = [] }) => {
8
+ if (!items.length) return null;
9
+
10
+ return (
11
+ <div className="card-holder grid grid-cols-1 items-stretch gap-5 self-stretch lg:auto-cols-fr lg:grid-flow-col lg:gap-6 lg:overflow-x-auto">
12
+ {items.map((item, index: number) => (
13
+ <div className="callout-card h-full p-6 lg:p-8" key={`card-${index}`}>
14
+ <div className="card-template flex flex-col gap-6 lg:items-start lg:gap-8">
15
+ <div className="card-header">
16
+ {item.image && (
17
+ <NextImage
18
+ width={88}
19
+ height={88}
20
+ src={item.image}
21
+ alt={item.title ?? "card-icon"}
22
+ />
23
+ )}
24
+ </div>
25
+
26
+ <div className="card-body flex flex-col gap-3">
27
+ {item.title && (
28
+ <Text as="h3" className="heading6">
29
+ {item.title}
30
+ </Text>
31
+ )}
32
+ {item.BodyComponent && (
33
+ <Text as="div" className="body1">
34
+ <item.BodyComponent />
35
+ </Text>
36
+ )}
37
+ </div>
38
+ </div>
39
+ </div>
40
+ ))}
41
+ </div>
42
+ );
43
+ };
44
+
45
+ export default SimpleCards;
@@ -0,0 +1,11 @@
1
+ import type { ComponentType } from "react";
2
+
3
+ export type Item = {
4
+ title?: string;
5
+ image?: string;
6
+ BodyComponent?: ComponentType;
7
+ };
8
+
9
+ export type SimpleCardsProps = {
10
+ items: Item[];
11
+ };
@@ -1 +1 @@
1
- export type CardsProps = {};
1
+ export type CardsProps = {};