@windstream/react-shared-components 0.1.6 → 0.1.8

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 (158) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.d.ts +39 -3
  3. package/dist/contentful/index.esm.js +2 -2
  4. package/dist/contentful/index.esm.js.map +1 -1
  5. package/dist/contentful/index.js +2 -2
  6. package/dist/contentful/index.js.map +1 -1
  7. package/dist/core.d.ts +5 -3
  8. package/dist/index.d.ts +3 -1
  9. package/dist/index.esm.js +1 -1
  10. package/dist/index.esm.js.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/styles.css +1 -1
  14. package/package.json +177 -177
  15. package/src/components/accordion/Accordion.stories.tsx +230 -230
  16. package/src/components/accordion/types.ts +11 -11
  17. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  18. package/src/components/alert-card/index.tsx +41 -40
  19. package/src/components/alert-card/types.ts +13 -12
  20. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  21. package/src/components/brand-button/helpers.ts +35 -35
  22. package/src/components/brand-button/index.tsx +115 -115
  23. package/src/components/brand-button/types.ts +37 -37
  24. package/src/components/button/Button.stories.tsx +108 -108
  25. package/src/components/button/index.tsx +27 -27
  26. package/src/components/button/types.ts +14 -14
  27. package/src/components/call-button/CallButton.stories.tsx +324 -324
  28. package/src/components/call-button/index.tsx +86 -86
  29. package/src/components/call-button/types.ts +11 -11
  30. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  31. package/src/components/checkbox/index.tsx +197 -197
  32. package/src/components/checkbox/types.ts +27 -27
  33. package/src/components/checklist/Checklist.stories.tsx +150 -150
  34. package/src/components/checklist/index.tsx +59 -59
  35. package/src/components/checklist/types.ts +16 -16
  36. package/src/components/collapse/Collapse.stories.tsx +255 -255
  37. package/src/components/collapse/index.tsx +46 -46
  38. package/src/components/collapse/types.ts +6 -6
  39. package/src/components/divider/Divider.stories.tsx +205 -205
  40. package/src/components/divider/index.tsx +22 -22
  41. package/src/components/divider/type.ts +3 -3
  42. package/src/components/image/Image.stories.tsx +113 -113
  43. package/src/components/image/index.tsx +25 -25
  44. package/src/components/image/types.ts +40 -40
  45. package/src/components/input/Input.stories.tsx +325 -325
  46. package/src/components/input/index.tsx +177 -177
  47. package/src/components/input/types.ts +37 -37
  48. package/src/components/link/Link.stories.tsx +163 -163
  49. package/src/components/link/types.ts +25 -25
  50. package/src/components/list/List.stories.tsx +272 -272
  51. package/src/components/list/index.tsx +88 -88
  52. package/src/components/list/list-item/index.tsx +38 -38
  53. package/src/components/list/list-item/types.ts +13 -13
  54. package/src/components/list/types.ts +29 -29
  55. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  56. package/src/components/material-icon/constants.ts +98 -98
  57. package/src/components/material-icon/index.tsx +47 -47
  58. package/src/components/material-icon/types.ts +31 -31
  59. package/src/components/modal/Modal.stories.tsx +171 -171
  60. package/src/components/modal/index.tsx +164 -164
  61. package/src/components/modal/types.ts +24 -24
  62. package/src/components/next-image/index.tsx +32 -32
  63. package/src/components/next-image/types.ts +1 -1
  64. package/src/components/pagination/index.tsx +100 -100
  65. package/src/components/pagination/types.ts +6 -6
  66. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  67. package/src/components/radio-button/index.tsx +75 -75
  68. package/src/components/radio-button/types.ts +21 -21
  69. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  70. package/src/components/see-more/index.tsx +44 -44
  71. package/src/components/see-more/types.ts +4 -4
  72. package/src/components/select/Select.stories.tsx +411 -411
  73. package/src/components/select/index.tsx +155 -150
  74. package/src/components/select/types.ts +36 -35
  75. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  76. package/src/components/select-plan-button/index.tsx +57 -57
  77. package/src/components/select-plan-button/types.ts +14 -14
  78. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  79. package/src/components/skeleton/index.tsx +61 -61
  80. package/src/components/skeleton/types.ts +4 -4
  81. package/src/components/spinner/Spinner.stories.tsx +335 -335
  82. package/src/components/spinner/index.tsx +44 -44
  83. package/src/components/spinner/types.ts +5 -5
  84. package/src/components/text/Text.stories.tsx +321 -321
  85. package/src/components/text/index.tsx +25 -25
  86. package/src/components/text/types.ts +45 -45
  87. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  88. package/src/components/tooltip/index.tsx +74 -74
  89. package/src/components/tooltip/types.ts +7 -7
  90. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  91. package/src/components/view-cart-button/index.tsx +42 -42
  92. package/src/components/view-cart-button/types.ts +5 -5
  93. package/src/contentful/blocks/accordion/index.tsx +1 -0
  94. package/src/contentful/blocks/address-input-banner/index.tsx +52 -0
  95. package/src/contentful/blocks/address-input-banner/types.ts +14 -0
  96. package/src/contentful/blocks/blogs-grid/index.tsx +129 -129
  97. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  98. package/src/contentful/blocks/breadcrumbs/index.tsx +55 -55
  99. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  100. package/src/contentful/blocks/button/index.tsx +108 -108
  101. package/src/contentful/blocks/button/types.ts +34 -34
  102. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  103. package/src/contentful/blocks/callout/index.tsx +66 -66
  104. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  105. package/src/contentful/blocks/cards/blog-card/index.tsx +99 -99
  106. package/src/contentful/blocks/cards/blog-card/types.ts +14 -14
  107. package/src/contentful/blocks/cards/index.tsx +13 -13
  108. package/src/contentful/blocks/cards/product-card/index.tsx +208 -208
  109. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  110. package/src/contentful/blocks/cards/testimonial-card/index.tsx +88 -88
  111. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  112. package/src/contentful/blocks/cards/types.ts +1 -1
  113. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  114. package/src/contentful/blocks/carousel/helper.tsx +356 -356
  115. package/src/contentful/blocks/carousel/index.tsx +74 -74
  116. package/src/contentful/blocks/carousel/types.ts +143 -143
  117. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  118. package/src/contentful/blocks/cta-callout/index.tsx +60 -60
  119. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  120. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -0
  121. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -0
  122. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  123. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  124. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  125. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  126. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  127. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  128. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  129. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  130. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  131. package/src/contentful/blocks/modal/constants.ts +53 -53
  132. package/src/contentful/blocks/modal/index.tsx +91 -91
  133. package/src/contentful/blocks/modal/types.ts +12 -12
  134. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +111 -111
  135. package/src/contentful/blocks/navigation/index.tsx +385 -385
  136. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +80 -80
  137. package/src/contentful/blocks/navigation/types.ts +41 -41
  138. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  139. package/src/contentful/blocks/primary-hero/index.tsx +229 -229
  140. package/src/contentful/blocks/primary-hero/types.ts +35 -35
  141. package/src/contentful/blocks/search-block/index.tsx +90 -90
  142. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  143. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  144. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  145. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  146. package/src/contentful/blocks/text/index.tsx +12 -12
  147. package/src/contentful/blocks/text/types.ts +1 -1
  148. package/src/contentful/index.ts +75 -69
  149. package/src/hooks/use-body-scroll-lock.ts +34 -34
  150. package/src/hooks/use-outside-click.ts +17 -17
  151. package/src/index.ts +96 -96
  152. package/src/next/index.ts +5 -5
  153. package/src/setupTests.ts +46 -46
  154. package/src/stories/DocsTemplate.tsx +24 -24
  155. package/src/styles/globals.css +343 -343
  156. package/src/types/global.d.ts +9 -9
  157. package/src/types/micro-components.ts +99 -99
  158. package/src/utils/index.ts +49 -49
@@ -1,150 +1,155 @@
1
- "use client";
2
-
3
- import React, { useMemo } from "react";
4
- import { cx } from "../../utils";
5
- import { Text } from "../text";
6
- import { FilterOptions, SelectOption, SelectProps } from "./types";
7
- import ReactSelect, { createFilter } from "react-select";
8
-
9
- export const Select: React.FC<SelectProps> = React.memo(
10
- ({
11
- options,
12
- className,
13
- controlClassName,
14
- value,
15
- isCustomStyle = false,
16
- placeholder,
17
- required,
18
- onChange,
19
- filterOptions,
20
- hasError,
21
- error,
22
- helperText,
23
- label,
24
- labelClassName,
25
- size = "md",
26
- variant = "default",
27
- "data-cy": dataCy,
28
- "data-testid": dataTestId,
29
- ...rest
30
- }) => {
31
- const memoizedFilterOption = useMemo(
32
- () => createFilter(filterOptions),
33
- [filterOptions]
34
- );
35
-
36
- const getSizeClasses = () => {
37
- switch (size) {
38
- case "sm":
39
- return "h-[48px] px-3 rounded-lg";
40
- case "md":
41
- default:
42
- return "h-[56px] px-3 rounded-xl";
43
- }
44
- };
45
-
46
- const memoizedClassNames = useMemo(
47
- () => ({
48
- control: ({ isFocused }: any) =>
49
- cx(
50
- getSizeClasses(),
51
- "border border-input-border bg-white hover:not-focus:border-input-border-hover",
52
- {
53
- "border-input-border-selected outline outline-2 outline-input-border-selected":
54
- isFocused && !hasError,
55
- "border-input-border-critical shadow-none": hasError,
56
- },
57
- controlClassName
58
- ),
59
- indicatorSeparator: () => "hidden",
60
- dropdownIndicator: ({ selectProps }: any) =>
61
- isCustomStyle
62
- ? selectProps.value
63
- ? "hidden"
64
- : "block"
65
- : `block text-icon-default ${hasError ? "text-icon-critical" : ""}`,
66
- singleValue: () =>
67
- cx(
68
- isCustomStyle
69
- ? "text-text text-body1 whitespace-normal"
70
- : "text-text-secondary"
71
- ),
72
- menu: () => "z-20 mt-2",
73
- option: ({ isFocused, isSelected, label }: any) =>
74
- cx(
75
- "min-h-[40px] px-4 py-2 cursor-pointer",
76
- isSelected
77
- ? "bg-gray-200 text-text font-semibold"
78
- : "bg-white text-text-secondary",
79
- !isSelected && "hover:bg-bg-surface-hover",
80
- !isSelected && isFocused && "bg-bg-surface-hover",
81
- isCustomStyle ? "text-body1 text-text" : "",
82
- !isCustomStyle || options[options.length - 1]?.label === label
83
- ? ""
84
- : "border-b border-border-brand"
85
- ),
86
- placeholder: () => "text-input-text-placeholder",
87
- input: () => "text-text",
88
- valueContainer: () => "px-0",
89
- }),
90
- [isCustomStyle, controlClassName, options, hasError, size]
91
- );
92
-
93
- if (variant === "unstyled") {
94
- return (
95
- <ReactSelect
96
- options={options}
97
- value={value}
98
- placeholder={required ? `${placeholder}*` : placeholder}
99
- onChange={onChange}
100
- filterOption={memoizedFilterOption}
101
- className={cx("rounded-xl", className)}
102
- classNames={memoizedClassNames}
103
- data-cy={dataCy}
104
- data-testid={dataTestId}
105
- {...rest}
106
- />
107
- );
108
- }
109
-
110
- return (
111
- <div className="w-full">
112
- {label && (
113
- <label
114
- className={cx(
115
- "mb-1 block text-sm font-medium text-text-secondary",
116
- labelClassName
117
- )}
118
- >
119
- {label}
120
- </label>
121
- )}
122
-
123
- <ReactSelect
124
- options={options}
125
- value={value}
126
- placeholder={required ? `${placeholder}*` : placeholder}
127
- onChange={onChange}
128
- filterOption={memoizedFilterOption}
129
- className={cx("rounded-xl", className)}
130
- classNames={memoizedClassNames}
131
- data-cy={dataCy}
132
- data-testid={dataTestId}
133
- {...rest}
134
- />
135
-
136
- {error && (
137
- <Text className="footnote mt-1 text-text-critical">{error}</Text>
138
- )}
139
-
140
- {!error && helperText && (
141
- <Text className="footnote mt-1 text-text-info">{helperText}</Text>
142
- )}
143
- </div>
144
- );
145
- }
146
- );
147
-
148
- Select.displayName = "Select";
149
-
150
- export type { SelectOption, SelectProps, FilterOptions };
1
+ "use client";
2
+
3
+ import React, { useMemo } from "react";
4
+ import { cx } from "../../utils";
5
+ import { Text } from "../text";
6
+ import { FilterOptions, SelectOption, SelectProps } from "./types";
7
+ import ReactSelect, { createFilter } from "react-select";
8
+
9
+ export const Select: React.FC<SelectProps> = React.memo(
10
+ ({
11
+ options,
12
+ className,
13
+ controlClassName,
14
+ value,
15
+ isCustomStyle = false,
16
+ placeholder,
17
+ required,
18
+ onChange,
19
+ filterOptions,
20
+ hasError,
21
+ error,
22
+ menuClassName,
23
+ helperText,
24
+ label,
25
+ labelClassName,
26
+ size = "md",
27
+ variant = "default",
28
+ "data-cy": dataCy,
29
+ "data-testid": dataTestId,
30
+ ...rest
31
+ }) => {
32
+ const memoizedFilterOption = useMemo(
33
+ () => createFilter(filterOptions),
34
+ [filterOptions]
35
+ );
36
+
37
+ const getSizeClasses = () => {
38
+ switch (size) {
39
+ case "sm":
40
+ return "h-[48px] px-3 rounded-lg";
41
+ case "md":
42
+ default:
43
+ return "h-[56px] px-3 rounded-xl";
44
+ }
45
+ };
46
+
47
+ const memoizedClassNames = useMemo(
48
+ () => ({
49
+ control: ({ isFocused }: any) =>
50
+ cx(
51
+ getSizeClasses(),
52
+ "border border-input-border bg-white hover:not-focus:border-input-border-hover",
53
+ {
54
+ "border-input-border-selected outline outline-2 outline-input-border-selected":
55
+ isFocused && !hasError,
56
+ "border-input-border-critical shadow-none": hasError,
57
+ },
58
+ controlClassName
59
+ ),
60
+ indicatorSeparator: () => "hidden",
61
+ dropdownIndicator: ({ selectProps }: any) =>
62
+ isCustomStyle
63
+ ? selectProps.value
64
+ ? "hidden"
65
+ : "block"
66
+ : `block text-icon-default ${hasError ? "text-icon-critical" : ""}`,
67
+ singleValue: () =>
68
+ cx(
69
+ isCustomStyle
70
+ ? "text-text text-body1 whitespace-normal"
71
+ : "text-text-secondary"
72
+ ),
73
+ menu: () =>
74
+ cx(
75
+ "z-20 mt-2 rounded-input-poppers bg-surface shadow-dark-drop",
76
+ menuClassName
77
+ ),
78
+ option: ({ isFocused, isSelected, label }: any) =>
79
+ cx(
80
+ "min-h-[40px] px-4 py-2 cursor-pointer",
81
+ isSelected
82
+ ? "bg-gray-200 text-text font-semibold"
83
+ : "bg-white text-text-secondary",
84
+ !isSelected && "hover:bg-bg-surface-hover",
85
+ !isSelected && isFocused && "bg-bg-surface-hover",
86
+ isCustomStyle ? "text-body1 text-text" : "",
87
+ !isCustomStyle || options[options.length - 1]?.label === label
88
+ ? ""
89
+ : "border-b border-border-brand"
90
+ ),
91
+ placeholder: () => "text-input-text-placeholder",
92
+ input: () => "text-text",
93
+ valueContainer: () => "px-0",
94
+ }),
95
+ [isCustomStyle, controlClassName, menuClassName, options, hasError, size]
96
+ );
97
+
98
+ if (variant === "unstyled") {
99
+ return (
100
+ <ReactSelect
101
+ options={options}
102
+ value={value}
103
+ placeholder={required ? `${placeholder}*` : placeholder}
104
+ onChange={onChange}
105
+ filterOption={memoizedFilterOption}
106
+ className={cx("rounded-xl", className)}
107
+ classNames={memoizedClassNames}
108
+ data-cy={dataCy}
109
+ data-testid={dataTestId}
110
+ {...rest}
111
+ />
112
+ );
113
+ }
114
+
115
+ return (
116
+ <div className="w-full">
117
+ {label && (
118
+ <label
119
+ className={cx(
120
+ "mb-1 block text-sm font-medium text-text-secondary",
121
+ labelClassName
122
+ )}
123
+ >
124
+ {label}
125
+ </label>
126
+ )}
127
+
128
+ <ReactSelect
129
+ options={options}
130
+ value={value}
131
+ placeholder={required ? `${placeholder}*` : placeholder}
132
+ onChange={onChange}
133
+ filterOption={memoizedFilterOption}
134
+ className={cx("rounded-xl", className)}
135
+ classNames={memoizedClassNames}
136
+ data-cy={dataCy}
137
+ data-testid={dataTestId}
138
+ {...rest}
139
+ />
140
+
141
+ {error && (
142
+ <Text className="footnote mt-1 text-text-critical">{error}</Text>
143
+ )}
144
+
145
+ {!error && helperText && (
146
+ <Text className="footnote mt-1 text-text-info">{helperText}</Text>
147
+ )}
148
+ </div>
149
+ );
150
+ }
151
+ );
152
+
153
+ Select.displayName = "Select";
154
+
155
+ export type { SelectOption, SelectProps, FilterOptions };
@@ -1,35 +1,36 @@
1
- import { Props as ReactSelectProps } from "react-select";
2
-
3
- export interface SelectOption<T = any> {
4
- label: string;
5
- value: string;
6
- data?: T;
7
- }
8
-
9
- export type FilterOptions = {
10
- ignoreCase?: boolean;
11
- ignoreAccents?: boolean;
12
- trim?: boolean;
13
- matchFrom?: "start" | "any";
14
- };
15
-
16
- export type OwnProps = {
17
- options: SelectOption[];
18
- value?: SelectOption;
19
- className?: string;
20
- isCustomStyle?: boolean;
21
- controlClassName?: string;
22
- filterOptions?: FilterOptions;
23
- hasError?: boolean;
24
- error?: string;
25
- helperText?: string;
26
- label?: string;
27
- labelClassName?: string;
28
- size?: "sm" | "md";
29
- variant?: "default" | "unstyled";
30
- "data-cy"?: string;
31
- "data-testid"?: string;
32
- };
33
-
34
- export type SelectProps = OwnProps &
35
- Omit<ReactSelectProps<SelectOption>, "options" | "value" | "className">;
1
+ import { Props as ReactSelectProps } from "react-select";
2
+
3
+ export interface SelectOption<T = any> {
4
+ label: string;
5
+ value: string;
6
+ data?: T;
7
+ }
8
+
9
+ export type FilterOptions = {
10
+ ignoreCase?: boolean;
11
+ ignoreAccents?: boolean;
12
+ trim?: boolean;
13
+ matchFrom?: "start" | "any";
14
+ };
15
+
16
+ export type OwnProps = {
17
+ options: SelectOption[];
18
+ value?: SelectOption;
19
+ className?: string;
20
+ isCustomStyle?: boolean;
21
+ controlClassName?: string;
22
+ menuClassName?: string;
23
+ filterOptions?: FilterOptions;
24
+ hasError?: boolean;
25
+ error?: string;
26
+ helperText?: string;
27
+ label?: string;
28
+ labelClassName?: string;
29
+ size?: "sm" | "md";
30
+ variant?: "default" | "unstyled";
31
+ "data-cy"?: string;
32
+ "data-testid"?: string;
33
+ };
34
+
35
+ export type SelectProps = OwnProps &
36
+ Omit<ReactSelectProps<SelectOption>, "options" | "value" | "className">;