@windstream/react-shared-components 0.0.38 → 0.0.39

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 (127) 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.map +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/next/index.esm.js +1 -1
  11. package/dist/next/index.esm.js.map +1 -1
  12. package/dist/next/index.js +1 -1
  13. package/dist/next/index.js.map +1 -1
  14. package/dist/styles.css +1 -1
  15. package/package.json +1 -1
  16. package/src/components/accordion/Accordion.stories.tsx +230 -230
  17. package/src/components/accordion/types.ts +9 -9
  18. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  19. package/src/components/alert-card/index.tsx +32 -32
  20. package/src/components/brand-button/BrandButton.stories.tsx +219 -219
  21. package/src/components/brand-button/helpers.ts +35 -35
  22. package/src/components/brand-button/types.ts +25 -25
  23. package/src/components/button/Button.stories.tsx +108 -108
  24. package/src/components/call-button/CallButton.stories.tsx +324 -324
  25. package/src/components/call-button/index.tsx +79 -79
  26. package/src/components/call-button/types.ts +10 -10
  27. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  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 +39 -39
  31. package/src/components/checklist/types.ts +6 -6
  32. package/src/components/collapse/Collapse.stories.tsx +255 -255
  33. package/src/components/collapse/types.ts +6 -6
  34. package/src/components/divider/Divider.stories.tsx +205 -205
  35. package/src/components/divider/index.tsx +22 -22
  36. package/src/components/divider/type.ts +3 -3
  37. package/src/components/image/Image.stories.tsx +113 -113
  38. package/src/components/image/index.tsx +25 -25
  39. package/src/components/image/types.ts +10 -3
  40. package/src/components/input/Input.stories.tsx +325 -325
  41. package/src/components/input/index.tsx +177 -177
  42. package/src/components/input/types.ts +37 -37
  43. package/src/components/link/Link.stories.tsx +163 -163
  44. package/src/components/list/List.stories.tsx +272 -272
  45. package/src/components/material-icon/MaterialIcon.stories.tsx +330 -330
  46. package/src/components/material-icon/constants.ts +95 -95
  47. package/src/components/modal/Modal.stories.tsx +171 -171
  48. package/src/components/modal/types.ts +24 -24
  49. package/src/components/next-image/index.tsx +18 -25
  50. package/src/components/next-image/types.ts +1 -1
  51. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  52. package/src/components/radio-button/index.tsx +75 -75
  53. package/src/components/radio-button/types.ts +21 -21
  54. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  55. package/src/components/see-more/types.ts +4 -4
  56. package/src/components/select/Select.stories.tsx +411 -411
  57. package/src/components/select/types.ts +35 -35
  58. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +168 -168
  59. package/src/components/select-plan-button/index.tsx +29 -29
  60. package/src/components/select-plan-button/types.ts +4 -4
  61. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  62. package/src/components/skeleton/types.ts +4 -4
  63. package/src/components/spinner/Spinner.stories.tsx +335 -335
  64. package/src/components/spinner/index.tsx +44 -44
  65. package/src/components/spinner/types.ts +5 -5
  66. package/src/components/text/Text.stories.tsx +321 -321
  67. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  68. package/src/components/tooltip/index.tsx +74 -74
  69. package/src/components/tooltip/types.ts +7 -7
  70. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  71. package/src/components/view-cart-button/index.tsx +44 -44
  72. package/src/components/view-cart-button/types.ts +5 -5
  73. package/src/contentful/blocks/accordion/Accordion.stories.tsx +29 -29
  74. package/src/contentful/blocks/accordion/index.tsx +52 -52
  75. package/src/contentful/blocks/accordion/types.ts +17 -17
  76. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  77. package/src/contentful/blocks/button/index.tsx +64 -53
  78. package/src/contentful/blocks/button/types.ts +24 -21
  79. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  80. package/src/contentful/blocks/callout/index.tsx +52 -15
  81. package/src/contentful/blocks/callout/types.ts +14 -1
  82. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  83. package/src/contentful/blocks/cards/index.tsx +13 -13
  84. package/src/contentful/blocks/cards/simple-card/index.tsx +45 -0
  85. package/src/contentful/blocks/cards/simple-card/types.ts +11 -0
  86. package/src/contentful/blocks/cards/types.ts +1 -1
  87. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  88. package/src/contentful/blocks/carousel/index.tsx +13 -13
  89. package/src/contentful/blocks/carousel/types.ts +1 -1
  90. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  91. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  92. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  93. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  94. package/src/contentful/blocks/find-kinetic/index.tsx +80 -80
  95. package/src/contentful/blocks/find-kinetic/types.ts +18 -18
  96. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  97. package/src/contentful/blocks/floating-banner/index.tsx +102 -99
  98. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  99. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  100. package/src/contentful/blocks/footer/index.tsx +88 -79
  101. package/src/contentful/blocks/footer/types.ts +13 -10
  102. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  103. package/src/contentful/blocks/image-promo-bar/index.tsx +154 -154
  104. package/src/contentful/blocks/image-promo-bar/types.ts +25 -25
  105. package/src/contentful/blocks/modal/Modal.stories.tsx +23 -23
  106. package/src/contentful/blocks/modal/index.tsx +12 -12
  107. package/src/contentful/blocks/modal/types.ts +1 -1
  108. package/src/contentful/blocks/navigation/Navigation.stories.tsx +23 -23
  109. package/src/contentful/blocks/navigation/index.tsx +56 -55
  110. package/src/contentful/blocks/navigation/link-groups.tsx/index.tsx +62 -64
  111. package/src/contentful/blocks/navigation/types.ts +21 -21
  112. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  113. package/src/contentful/blocks/primary-hero/index.tsx +160 -177
  114. package/src/contentful/blocks/primary-hero/types.ts +30 -30
  115. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  116. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  117. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  118. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  119. package/src/contentful/blocks/text/index.tsx +12 -12
  120. package/src/contentful/blocks/text/types.ts +1 -1
  121. package/src/contentful/index.ts +48 -45
  122. package/src/index.ts +96 -96
  123. package/src/next/index.ts +5 -5
  124. package/src/stories/DocsTemplate.tsx +24 -24
  125. package/src/styles/globals.css +275 -275
  126. package/src/types/global.d.ts +9 -9
  127. 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 = {};