@windstream/react-shared-components 0.0.47 → 0.0.49

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 (133) hide show
  1. package/README.md +629 -629
  2. package/dist/contentful/index.d.ts +8 -3
  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 +5 -5
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/styles.css +1 -1
  11. package/package.json +175 -175
  12. package/src/components/accordion/Accordion.stories.tsx +230 -230
  13. package/src/components/accordion/index.tsx +49 -49
  14. package/src/components/accordion/types.ts +9 -9
  15. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  16. package/src/components/alert-card/index.tsx +32 -32
  17. package/src/components/alert-card/types.ts +9 -9
  18. package/src/components/brand-button/BrandButton.stories.tsx +219 -219
  19. package/src/components/brand-button/helpers.ts +35 -35
  20. package/src/components/brand-button/index.tsx +93 -93
  21. package/src/components/brand-button/types.ts +25 -25
  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 +79 -79
  27. package/src/components/call-button/types.ts +10 -10
  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 +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/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 +97 -97
  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 +330 -330
  55. package/src/components/material-icon/constants.ts +96 -96
  56. package/src/components/material-icon/index.tsx +44 -44
  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 +18 -18
  62. package/src/components/next-image/types.ts +1 -1
  63. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  64. package/src/components/radio-button/index.tsx +75 -75
  65. package/src/components/radio-button/types.ts +21 -21
  66. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  67. package/src/components/see-more/index.tsx +44 -44
  68. package/src/components/see-more/types.ts +4 -4
  69. package/src/components/select/Select.stories.tsx +411 -411
  70. package/src/components/select/index.tsx +150 -150
  71. package/src/components/select/types.ts +35 -35
  72. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +168 -168
  73. package/src/components/select-plan-button/index.tsx +29 -29
  74. package/src/components/select-plan-button/types.ts +4 -4
  75. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  76. package/src/components/skeleton/index.tsx +61 -61
  77. package/src/components/skeleton/types.ts +4 -4
  78. package/src/components/spinner/Spinner.stories.tsx +335 -335
  79. package/src/components/spinner/index.tsx +44 -44
  80. package/src/components/spinner/types.ts +5 -5
  81. package/src/components/text/Text.stories.tsx +321 -321
  82. package/src/components/text/index.tsx +25 -25
  83. package/src/components/text/types.ts +45 -45
  84. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  85. package/src/components/tooltip/index.tsx +74 -74
  86. package/src/components/tooltip/types.ts +7 -7
  87. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  88. package/src/components/view-cart-button/index.tsx +44 -44
  89. package/src/components/view-cart-button/types.ts +5 -5
  90. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  91. package/src/contentful/blocks/button/index.tsx +64 -64
  92. package/src/contentful/blocks/button/types.ts +24 -24
  93. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  94. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  95. package/src/contentful/blocks/cards/index.tsx +13 -13
  96. package/src/contentful/blocks/cards/types.ts +1 -1
  97. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  98. package/src/contentful/blocks/carousel/index.tsx +13 -13
  99. package/src/contentful/blocks/carousel/types.ts +1 -1
  100. package/src/contentful/blocks/comparison-table/index.tsx +23 -2
  101. package/src/contentful/blocks/comparison-table/types.ts +6 -1
  102. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  103. package/src/contentful/blocks/cta-callout/index.tsx +54 -54
  104. package/src/contentful/blocks/cta-callout/types.ts +22 -22
  105. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  106. package/src/contentful/blocks/floating-banner/index.tsx +1 -10
  107. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  108. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  109. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  110. package/src/contentful/blocks/image-promo-bar/types.ts +27 -27
  111. package/src/contentful/blocks/modal/Modal.stories.tsx +23 -23
  112. package/src/contentful/blocks/modal/index.tsx +12 -12
  113. package/src/contentful/blocks/modal/types.ts +1 -1
  114. package/src/contentful/blocks/navigation/Navigation.stories.tsx +23 -23
  115. package/src/contentful/blocks/navigation/index.tsx +56 -56
  116. package/src/contentful/blocks/navigation/types.ts +21 -21
  117. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  118. package/src/contentful/blocks/primary-hero/index.tsx +160 -160
  119. package/src/contentful/blocks/primary-hero/types.ts +30 -30
  120. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  121. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  122. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  123. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  124. package/src/contentful/blocks/text/index.tsx +12 -12
  125. package/src/contentful/blocks/text/types.ts +1 -1
  126. package/src/hooks/use-body-scroll-lock.ts +34 -34
  127. package/src/index.ts +96 -96
  128. package/src/next/index.ts +5 -5
  129. package/src/setupTests.ts +46 -46
  130. package/src/stories/DocsTemplate.tsx +24 -24
  131. package/src/styles/globals.css +307 -307
  132. package/src/types/global.d.ts +9 -9
  133. package/src/utils/index.ts +49 -49
@@ -1,163 +1,163 @@
1
- import { Link } from "./index";
2
-
3
- import { DocsPage } from "@shared/stories/DocsTemplate";
4
- import type { Meta, StoryObj } from "@storybook/react";
5
-
6
- const meta: Meta<typeof Link> = {
7
- title: "Components/Link",
8
- component: Link,
9
- tags: ["autodocs"],
10
- parameters: {
11
- layout: "centered",
12
- docs: {
13
- page: DocsPage,
14
- description: {
15
- component:
16
- "A flexible link component with multiple variants and states.",
17
- },
18
- },
19
- },
20
- argTypes: {
21
- variant: {
22
- control: { type: "select" },
23
- options: ["default", "unstyled"],
24
- description: "Link styling variant",
25
- },
26
- href: {
27
- control: { type: "text" },
28
- description: "Link URL",
29
- },
30
- target: {
31
- control: { type: "select" },
32
- options: ["_self", "_blank", "_parent", "_top"],
33
- description: "Link target",
34
- },
35
- disabled: {
36
- control: { type: "boolean" },
37
- description: "Disable the link",
38
- },
39
- children: {
40
- control: { type: "text" },
41
- description: "Link content",
42
- },
43
- },
44
- args: {
45
- children: "Link Text",
46
- href: "#",
47
- variant: "default",
48
- target: "_self",
49
- disabled: false,
50
- },
51
- };
52
-
53
- export default meta;
54
- type Story = StoryObj<typeof meta>;
55
-
56
- // Default link
57
- export const Default: Story = {
58
- args: {},
59
- };
60
-
61
- // Unstyled link
62
- export const Unstyled: Story = {
63
- args: {
64
- variant: "unstyled",
65
- children: "Unstyled Link",
66
- },
67
- };
68
-
69
- // External link
70
- export const External: Story = {
71
- args: {
72
- href: "https://example.com",
73
- target: "_blank",
74
- children: "External Link ↗",
75
- },
76
- };
77
-
78
- // Disabled link
79
- export const Disabled: Story = {
80
- args: {
81
- disabled: true,
82
- children: "Disabled Link",
83
- },
84
- };
85
-
86
- // Link with icon
87
- export const WithIcon: Story = {
88
- args: {
89
- children: "Link with Icon →",
90
- className: "flex items-center gap-2",
91
- },
92
- };
93
-
94
- // Navigation links
95
- export const Navigation: Story = {
96
- render: () => (
97
- <nav className="flex gap-6">
98
- <Link href="#home" variant="default">
99
- Home
100
- </Link>
101
- <Link href="#about">About</Link>
102
- <Link href="#services">Services</Link>
103
- <Link href="#contact">Contact</Link>
104
- </nav>
105
- ),
106
- parameters: {
107
- docs: {
108
- description: {
109
- story: "Navigation menu with different link variants.",
110
- },
111
- },
112
- },
113
- };
114
-
115
- // All variants showcase
116
- export const AllVariants: Story = {
117
- render: () => (
118
- <div className="space-y-6">
119
- <div>
120
- <h3 className="mb-3 text-lg font-semibold">Variants</h3>
121
- <div className="flex gap-4">
122
- <Link href="#" variant="default">
123
- Default
124
- </Link>
125
- <Link href="#" variant="unstyled">
126
- Unstyled
127
- </Link>
128
- </div>
129
- </div>
130
-
131
- <div>
132
- <h3 className="mb-3 text-lg font-semibold">Variants</h3>
133
- <div className="flex items-center gap-4">
134
- <Link href="#" variant="default">
135
- Default
136
- </Link>
137
- <Link href="#" variant="unstyled">
138
- Unstyled
139
- </Link>
140
- </div>
141
- </div>
142
-
143
- <div>
144
- <h3 className="mb-3 text-lg font-semibold">States</h3>
145
- <div className="flex gap-4">
146
- <Link href="#" disabled>
147
- Disabled
148
- </Link>
149
- <Link href="https://example.com" target="_blank">
150
- External ↗
151
- </Link>
152
- </div>
153
- </div>
154
- </div>
155
- ),
156
- parameters: {
157
- docs: {
158
- description: {
159
- story: "Showcase of all link variants, sizes, and states.",
160
- },
161
- },
162
- },
163
- };
1
+ import { Link } from "./index";
2
+
3
+ import { DocsPage } from "@shared/stories/DocsTemplate";
4
+ import type { Meta, StoryObj } from "@storybook/react";
5
+
6
+ const meta: Meta<typeof Link> = {
7
+ title: "Components/Link",
8
+ component: Link,
9
+ tags: ["autodocs"],
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ page: DocsPage,
14
+ description: {
15
+ component:
16
+ "A flexible link component with multiple variants and states.",
17
+ },
18
+ },
19
+ },
20
+ argTypes: {
21
+ variant: {
22
+ control: { type: "select" },
23
+ options: ["default", "unstyled"],
24
+ description: "Link styling variant",
25
+ },
26
+ href: {
27
+ control: { type: "text" },
28
+ description: "Link URL",
29
+ },
30
+ target: {
31
+ control: { type: "select" },
32
+ options: ["_self", "_blank", "_parent", "_top"],
33
+ description: "Link target",
34
+ },
35
+ disabled: {
36
+ control: { type: "boolean" },
37
+ description: "Disable the link",
38
+ },
39
+ children: {
40
+ control: { type: "text" },
41
+ description: "Link content",
42
+ },
43
+ },
44
+ args: {
45
+ children: "Link Text",
46
+ href: "#",
47
+ variant: "default",
48
+ target: "_self",
49
+ disabled: false,
50
+ },
51
+ };
52
+
53
+ export default meta;
54
+ type Story = StoryObj<typeof meta>;
55
+
56
+ // Default link
57
+ export const Default: Story = {
58
+ args: {},
59
+ };
60
+
61
+ // Unstyled link
62
+ export const Unstyled: Story = {
63
+ args: {
64
+ variant: "unstyled",
65
+ children: "Unstyled Link",
66
+ },
67
+ };
68
+
69
+ // External link
70
+ export const External: Story = {
71
+ args: {
72
+ href: "https://example.com",
73
+ target: "_blank",
74
+ children: "External Link ↗",
75
+ },
76
+ };
77
+
78
+ // Disabled link
79
+ export const Disabled: Story = {
80
+ args: {
81
+ disabled: true,
82
+ children: "Disabled Link",
83
+ },
84
+ };
85
+
86
+ // Link with icon
87
+ export const WithIcon: Story = {
88
+ args: {
89
+ children: "Link with Icon →",
90
+ className: "flex items-center gap-2",
91
+ },
92
+ };
93
+
94
+ // Navigation links
95
+ export const Navigation: Story = {
96
+ render: () => (
97
+ <nav className="flex gap-6">
98
+ <Link href="#home" variant="default">
99
+ Home
100
+ </Link>
101
+ <Link href="#about">About</Link>
102
+ <Link href="#services">Services</Link>
103
+ <Link href="#contact">Contact</Link>
104
+ </nav>
105
+ ),
106
+ parameters: {
107
+ docs: {
108
+ description: {
109
+ story: "Navigation menu with different link variants.",
110
+ },
111
+ },
112
+ },
113
+ };
114
+
115
+ // All variants showcase
116
+ export const AllVariants: Story = {
117
+ render: () => (
118
+ <div className="space-y-6">
119
+ <div>
120
+ <h3 className="mb-3 text-lg font-semibold">Variants</h3>
121
+ <div className="flex gap-4">
122
+ <Link href="#" variant="default">
123
+ Default
124
+ </Link>
125
+ <Link href="#" variant="unstyled">
126
+ Unstyled
127
+ </Link>
128
+ </div>
129
+ </div>
130
+
131
+ <div>
132
+ <h3 className="mb-3 text-lg font-semibold">Variants</h3>
133
+ <div className="flex items-center gap-4">
134
+ <Link href="#" variant="default">
135
+ Default
136
+ </Link>
137
+ <Link href="#" variant="unstyled">
138
+ Unstyled
139
+ </Link>
140
+ </div>
141
+ </div>
142
+
143
+ <div>
144
+ <h3 className="mb-3 text-lg font-semibold">States</h3>
145
+ <div className="flex gap-4">
146
+ <Link href="#" disabled>
147
+ Disabled
148
+ </Link>
149
+ <Link href="https://example.com" target="_blank">
150
+ External ↗
151
+ </Link>
152
+ </div>
153
+ </div>
154
+ </div>
155
+ ),
156
+ parameters: {
157
+ docs: {
158
+ description: {
159
+ story: "Showcase of all link variants, sizes, and states.",
160
+ },
161
+ },
162
+ },
163
+ };
@@ -1,97 +1,97 @@
1
- "use client";
2
-
3
- import React, { forwardRef } from "react";
4
- import { cx } from "../../utils";
5
- import { LinkProps } from "./types";
6
-
7
- export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
8
- (
9
- {
10
- children,
11
- href,
12
- className = "",
13
- onClick,
14
- variant = "unstyled",
15
- style,
16
- external = false,
17
- disabled = false,
18
- ...props
19
- },
20
- ref
21
- ) => {
22
- // Get Tailwind classes for different variants
23
- const getVariantClasses = () => {
24
- if (variant === "unstyled") return "";
25
-
26
- // TODO: Add styles based on the figma design for all variants
27
- const baseClasses =
28
- "transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2";
29
-
30
- const variantClasses = {
31
- default: "text-text underline",
32
- };
33
-
34
- const stateClasses = [
35
- disabled
36
- ? "opacity-60 cursor-not-allowed pointer-events-none"
37
- : "cursor-pointer",
38
- ]
39
- .filter(Boolean)
40
- .join(" ");
41
-
42
- return [
43
- baseClasses,
44
- variantClasses[variant as keyof typeof variantClasses] ||
45
- variantClasses.default,
46
- stateClasses,
47
- ]
48
- .filter(Boolean)
49
- .join(" ");
50
- };
51
-
52
- const tailwindClasses = getVariantClasses();
53
-
54
- // Handle click events
55
- const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {
56
- if (disabled) {
57
- event.preventDefault();
58
- return;
59
- }
60
-
61
- onClick?.(event);
62
- };
63
-
64
- // Combine all classes
65
- const combinedClassName = cx(
66
- tailwindClasses,
67
- `link--${variant}`,
68
- disabled && "link--disabled",
69
- className
70
- );
71
-
72
- // Determine link props based on external/internal
73
- const linkProps = {
74
- ...props,
75
- ref,
76
- className: combinedClassName,
77
- style,
78
- href: disabled ? undefined : href,
79
- onClick: handleClick,
80
- ...(external &&
81
- !disabled && {
82
- target: "_blank",
83
- rel: "noopener noreferrer",
84
- }),
85
- ...(disabled && {
86
- "aria-disabled": true,
87
- tabIndex: -1,
88
- }),
89
- };
90
-
91
- return <a {...linkProps}>{children}</a>;
92
- }
93
- );
94
-
95
- Link.displayName = "Link";
96
-
97
- export type { LinkProps };
1
+ "use client";
2
+
3
+ import React, { forwardRef } from "react";
4
+ import { cx } from "../../utils";
5
+ import { LinkProps } from "./types";
6
+
7
+ export const Link = forwardRef<HTMLAnchorElement, LinkProps>(
8
+ (
9
+ {
10
+ children,
11
+ href,
12
+ className = "",
13
+ onClick,
14
+ variant = "unstyled",
15
+ style,
16
+ external = false,
17
+ disabled = false,
18
+ ...props
19
+ },
20
+ ref
21
+ ) => {
22
+ // Get Tailwind classes for different variants
23
+ const getVariantClasses = () => {
24
+ if (variant === "unstyled") return "";
25
+
26
+ // TODO: Add styles based on the figma design for all variants
27
+ const baseClasses =
28
+ "transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2";
29
+
30
+ const variantClasses = {
31
+ default: "text-text underline",
32
+ };
33
+
34
+ const stateClasses = [
35
+ disabled
36
+ ? "opacity-60 cursor-not-allowed pointer-events-none"
37
+ : "cursor-pointer",
38
+ ]
39
+ .filter(Boolean)
40
+ .join(" ");
41
+
42
+ return [
43
+ baseClasses,
44
+ variantClasses[variant as keyof typeof variantClasses] ||
45
+ variantClasses.default,
46
+ stateClasses,
47
+ ]
48
+ .filter(Boolean)
49
+ .join(" ");
50
+ };
51
+
52
+ const tailwindClasses = getVariantClasses();
53
+
54
+ // Handle click events
55
+ const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {
56
+ if (disabled) {
57
+ event.preventDefault();
58
+ return;
59
+ }
60
+
61
+ onClick?.(event);
62
+ };
63
+
64
+ // Combine all classes
65
+ const combinedClassName = cx(
66
+ tailwindClasses,
67
+ `link--${variant}`,
68
+ disabled && "link--disabled",
69
+ className
70
+ );
71
+
72
+ // Determine link props based on external/internal
73
+ const linkProps = {
74
+ ...props,
75
+ ref,
76
+ className: combinedClassName,
77
+ style,
78
+ href: disabled ? undefined : href,
79
+ onClick: handleClick,
80
+ ...(external &&
81
+ !disabled && {
82
+ target: "_blank",
83
+ rel: "noopener noreferrer",
84
+ }),
85
+ ...(disabled && {
86
+ "aria-disabled": true,
87
+ tabIndex: -1,
88
+ }),
89
+ };
90
+
91
+ return <a {...linkProps}>{children}</a>;
92
+ }
93
+ );
94
+
95
+ Link.displayName = "Link";
96
+
97
+ export type { LinkProps };
@@ -1,25 +1,25 @@
1
- import {
2
- type AnchorHTMLAttributes,
3
- type CSSProperties,
4
- type MouseEvent,
5
- type ReactNode,
6
- } from "react";
7
-
8
- export interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
9
- /** Content to render inside the link */
10
- children: ReactNode;
11
- /** URL to navigate to */
12
- href?: string;
13
- /** Custom className for the link */
14
- className?: string;
15
- /** Click handler function */
16
- onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
17
- /** Additional styling options */
18
- variant?: "default" | "unstyled";
19
- /** Custom styles */
20
- style?: CSSProperties;
21
- /** External link behavior - opens in new tab */
22
- external?: boolean;
23
- /** Disable the link */
24
- disabled?: boolean;
25
- }
1
+ import {
2
+ type AnchorHTMLAttributes,
3
+ type CSSProperties,
4
+ type MouseEvent,
5
+ type ReactNode,
6
+ } from "react";
7
+
8
+ export interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
9
+ /** Content to render inside the link */
10
+ children: ReactNode;
11
+ /** URL to navigate to */
12
+ href?: string;
13
+ /** Custom className for the link */
14
+ className?: string;
15
+ /** Click handler function */
16
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
17
+ /** Additional styling options */
18
+ variant?: "default" | "unstyled";
19
+ /** Custom styles */
20
+ style?: CSSProperties;
21
+ /** External link behavior - opens in new tab */
22
+ external?: boolean;
23
+ /** Disable the link */
24
+ disabled?: boolean;
25
+ }