@windstream/react-shared-components 0.1.45 → 0.1.46

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 (196) hide show
  1. package/README.md +635 -635
  2. package/dist/contentful/index.esm.js +3 -3
  3. package/dist/contentful/index.esm.js.map +1 -1
  4. package/dist/contentful/index.js +3 -3
  5. package/dist/contentful/index.js.map +1 -1
  6. package/dist/core.d.ts +1 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.esm.js +5 -13
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +5 -13
  11. package/dist/index.js.map +1 -1
  12. package/dist/next/index.esm.js +2 -2
  13. package/dist/next/index.esm.js.map +1 -1
  14. package/dist/next/index.js +2 -2
  15. package/dist/next/index.js.map +1 -1
  16. package/dist/styles.css +1 -1
  17. package/dist/utils/index.esm.js +1 -1
  18. package/dist/utils/index.esm.js.map +1 -1
  19. package/dist/utils/index.js +1 -1
  20. package/dist/utils/index.js.map +1 -1
  21. package/package.json +185 -185
  22. package/src/components/accordion/Accordion.stories.tsx +230 -230
  23. package/src/components/accordion/index.tsx +70 -70
  24. package/src/components/accordion/types.ts +12 -12
  25. package/src/components/alert-card/AlertCard.stories.tsx +171 -171
  26. package/src/components/alert-card/index.tsx +41 -41
  27. package/src/components/alert-card/types.ts +13 -13
  28. package/src/components/brand-button/BrandButton.stories.tsx +223 -223
  29. package/src/components/brand-button/helpers.ts +35 -35
  30. package/src/components/brand-button/index.tsx +120 -120
  31. package/src/components/brand-button/types.ts +38 -38
  32. package/src/components/button/Button.stories.tsx +108 -108
  33. package/src/components/button/index.tsx +27 -27
  34. package/src/components/button/types.ts +14 -14
  35. package/src/components/call-button/CallButton.stories.tsx +324 -324
  36. package/src/components/call-button/index.tsx +86 -86
  37. package/src/components/call-button/types.ts +11 -11
  38. package/src/components/checkbox/Checkbox.stories.tsx +247 -247
  39. package/src/components/checkbox/index.tsx +197 -197
  40. package/src/components/checkbox/types.ts +27 -27
  41. package/src/components/checklist/Checklist.stories.tsx +150 -150
  42. package/src/components/checklist/index.tsx +61 -61
  43. package/src/components/checklist/types.ts +17 -17
  44. package/src/components/collapse/Collapse.stories.tsx +255 -255
  45. package/src/components/collapse/index.tsx +46 -46
  46. package/src/components/collapse/types.ts +6 -6
  47. package/src/components/divider/Divider.stories.tsx +205 -205
  48. package/src/components/divider/index.tsx +22 -22
  49. package/src/components/divider/type.ts +3 -3
  50. package/src/components/image/Image.stories.tsx +113 -113
  51. package/src/components/image/index.tsx +25 -25
  52. package/src/components/image/types.ts +40 -40
  53. package/src/components/input/Input.stories.tsx +325 -325
  54. package/src/components/input/index.tsx +177 -177
  55. package/src/components/input/types.ts +37 -37
  56. package/src/components/link/Link.stories.tsx +163 -163
  57. package/src/components/link/index.tsx +109 -109
  58. package/src/components/link/types.ts +25 -25
  59. package/src/components/list/List.stories.tsx +272 -272
  60. package/src/components/list/index.tsx +88 -88
  61. package/src/components/list/list-item/index.tsx +38 -38
  62. package/src/components/list/list-item/types.ts +13 -13
  63. package/src/components/list/types.ts +29 -29
  64. package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
  65. package/src/components/material-icon/constants.ts +98 -98
  66. package/src/components/material-icon/index.tsx +47 -47
  67. package/src/components/material-icon/types.ts +31 -31
  68. package/src/components/modal/Modal.stories.tsx +171 -171
  69. package/src/components/modal/index.tsx +164 -164
  70. package/src/components/modal/types.ts +24 -24
  71. package/src/components/next-image/index.tsx +54 -54
  72. package/src/components/next-image/types.ts +1 -1
  73. package/src/components/pagination/index.tsx +100 -100
  74. package/src/components/pagination/types.ts +6 -6
  75. package/src/components/radio-button/RadioButton.stories.tsx +307 -307
  76. package/src/components/radio-button/index.tsx +75 -75
  77. package/src/components/radio-button/types.ts +21 -21
  78. package/src/components/see-more/SeeMore.stories.tsx +181 -181
  79. package/src/components/see-more/index.tsx +44 -44
  80. package/src/components/see-more/types.ts +4 -4
  81. package/src/components/select/Select.stories.tsx +411 -411
  82. package/src/components/select/index.tsx +155 -155
  83. package/src/components/select/types.ts +36 -36
  84. package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
  85. package/src/components/select-plan-button/index.tsx +63 -63
  86. package/src/components/select-plan-button/types.ts +17 -17
  87. package/src/components/skeleton/Skeleton.stories.tsx +179 -179
  88. package/src/components/skeleton/index.tsx +61 -61
  89. package/src/components/skeleton/types.ts +4 -4
  90. package/src/components/spinner/Spinner.stories.tsx +335 -335
  91. package/src/components/spinner/index.tsx +44 -44
  92. package/src/components/spinner/types.ts +5 -5
  93. package/src/components/text/Text.stories.tsx +321 -321
  94. package/src/components/text/index.tsx +25 -25
  95. package/src/components/text/types.ts +45 -45
  96. package/src/components/tooltip/Tooltip.stories.tsx +219 -219
  97. package/src/components/tooltip/index.tsx +74 -74
  98. package/src/components/tooltip/types.ts +7 -7
  99. package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
  100. package/src/components/view-cart-button/index.tsx +42 -42
  101. package/src/components/view-cart-button/types.ts +5 -5
  102. package/src/contentful/blocks/accordion/Accordion.stories.tsx +34 -34
  103. package/src/contentful/blocks/accordion/index.tsx +112 -112
  104. package/src/contentful/blocks/accordion/types.ts +34 -34
  105. package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
  106. package/src/contentful/blocks/address-input-banner/types.ts +14 -14
  107. package/src/contentful/blocks/anchored-bottom-banner/index.tsx +70 -70
  108. package/src/contentful/blocks/anchored-bottom-banner/types.ts +10 -10
  109. package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
  110. package/src/contentful/blocks/blogs-grid/types.ts +26 -26
  111. package/src/contentful/blocks/breadcrumbs/index.tsx +51 -51
  112. package/src/contentful/blocks/breadcrumbs/types.ts +5 -5
  113. package/src/contentful/blocks/button/Button.stories.tsx +40 -40
  114. package/src/contentful/blocks/button/index.tsx +130 -130
  115. package/src/contentful/blocks/button/types.ts +39 -39
  116. package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
  117. package/src/contentful/blocks/callout/index.tsx +88 -88
  118. package/src/contentful/blocks/callout/types.ts +15 -15
  119. package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
  120. package/src/contentful/blocks/cards/blog-card/index.tsx +110 -110
  121. package/src/contentful/blocks/cards/blog-card/types.ts +18 -18
  122. package/src/contentful/blocks/cards/index.tsx +13 -13
  123. package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
  124. package/src/contentful/blocks/cards/product-card/types.ts +28 -28
  125. package/src/contentful/blocks/cards/simple-card/index.tsx +89 -89
  126. package/src/contentful/blocks/cards/simple-card/types.ts +28 -28
  127. package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
  128. package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
  129. package/src/contentful/blocks/cards/types.ts +1 -1
  130. package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
  131. package/src/contentful/blocks/carousel/helper.tsx +440 -440
  132. package/src/contentful/blocks/carousel/index.tsx +85 -85
  133. package/src/contentful/blocks/carousel/types.ts +144 -144
  134. package/src/contentful/blocks/comparison-table/index.tsx +27 -27
  135. package/src/contentful/blocks/comparison-table/types.ts +6 -6
  136. package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
  137. package/src/contentful/blocks/cookiebanner/type.ts +7 -7
  138. package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
  139. package/src/contentful/blocks/cta-callout/index.tsx +71 -71
  140. package/src/contentful/blocks/cta-callout/types.ts +26 -26
  141. package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
  142. package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
  143. package/src/contentful/blocks/email-input-block/index.tsx +117 -117
  144. package/src/contentful/blocks/email-input-block/types.ts +16 -16
  145. package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
  146. package/src/contentful/blocks/find-kinetic/index.tsx +130 -130
  147. package/src/contentful/blocks/find-kinetic/types.ts +19 -19
  148. package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
  149. package/src/contentful/blocks/floating-banner/index.tsx +97 -97
  150. package/src/contentful/blocks/floating-banner/types.ts +22 -22
  151. package/src/contentful/blocks/footer/Footer.stories.tsx +30 -30
  152. package/src/contentful/blocks/footer/index.tsx +91 -91
  153. package/src/contentful/blocks/footer/types.ts +13 -13
  154. package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
  155. package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
  156. package/src/contentful/blocks/image-promo-bar/index.tsx +246 -246
  157. package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
  158. package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
  159. package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
  160. package/src/contentful/blocks/modal/constants.ts +53 -53
  161. package/src/contentful/blocks/modal/index.tsx +107 -107
  162. package/src/contentful/blocks/modal/types.ts +12 -12
  163. package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +113 -113
  164. package/src/contentful/blocks/navigation/index.tsx +394 -394
  165. package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
  166. package/src/contentful/blocks/navigation/types.ts +41 -41
  167. package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
  168. package/src/contentful/blocks/primary-hero/index.tsx +236 -236
  169. package/src/contentful/blocks/primary-hero/types.ts +37 -37
  170. package/src/contentful/blocks/search-block/index.tsx +90 -90
  171. package/src/contentful/blocks/search-block/types.ts +15 -15
  172. package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
  173. package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
  174. package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
  175. package/src/contentful/blocks/text/Text.stories.tsx +23 -23
  176. package/src/contentful/blocks/text/index.tsx +12 -12
  177. package/src/contentful/blocks/text/types.ts +1 -1
  178. package/src/contentful/index.ts +99 -99
  179. package/src/hooks/contentful/use-contentful-rich-text.tsx +310 -310
  180. package/src/hooks/contentful/use-processed-check-list.ts +63 -63
  181. package/src/hooks/use-body-scroll-lock.ts +34 -34
  182. package/src/hooks/use-carousel-swipe.ts +264 -264
  183. package/src/hooks/use-outside-click.ts +17 -17
  184. package/src/index.ts +101 -101
  185. package/src/next/index.ts +5 -5
  186. package/src/setupTests.ts +46 -46
  187. package/src/stories/DocsTemplate.tsx +24 -24
  188. package/src/styles/globals.css +343 -343
  189. package/src/types/global.d.ts +9 -9
  190. package/src/types/micro-components.ts +99 -99
  191. package/src/types/utm.ts +49 -49
  192. package/src/utils/contentful/to-document.ts +24 -24
  193. package/src/utils/cookie.ts +84 -84
  194. package/src/utils/cx.ts +49 -49
  195. package/src/utils/index.ts +38 -38
  196. package/src/utils/utm.ts +221 -221
@@ -1,204 +1,204 @@
1
- "use client";
2
-
3
- import React, { useEffect, useState } from "react";
4
- import { DynamicTabsT } from "./types";
5
- import { AnimatePresence, motion } from "framer-motion";
6
-
7
- import { Collapse } from "@shared/components/collapse";
8
- import { MaterialIcon } from "@shared/components/material-icon";
9
- import { Text } from "@shared/components/text";
10
- import { Button } from "@shared/contentful/blocks/button";
11
- import { cx } from "@shared/utils";
12
-
13
- export function DynamicTabs(props: DynamicTabsT) {
14
- const [currentTabIndex, setCurrentTabIndex] = useState(0);
15
- const [fragment, setFragment] = useState("");
16
- const {
17
- title,
18
- subTitle,
19
- tabs,
20
- tabsContent,
21
- navigationType = true,
22
- mobileSidebarTabType = true,
23
- } = props;
24
-
25
- useEffect(() => {
26
- if (typeof window !== "undefined") {
27
- setFragment(window.location.hash);
28
-
29
- const handleHashChange = () => {
30
- setFragment(window.location.hash);
31
- };
32
- window.addEventListener("hashchange", handleHashChange);
33
- return () => {
34
- window.removeEventListener("hashchange", handleHashChange);
35
- };
36
- }
37
- }, []);
38
-
39
- useEffect(() => {
40
- tabs?.items?.some((tab: any, index: number) => {
41
- const tabId = `#${tab?.anchorId || "tab-" + index}`;
42
- if (tabId === fragment) {
43
- setCurrentTabIndex(index);
44
- return true;
45
- }
46
- });
47
- }, [tabs, fragment]);
48
-
49
- const handleTabClick = (index: number, anchor: string) => {
50
- setCurrentTabIndex(index);
51
-
52
- if (typeof window !== "undefined" && fragment) {
53
- window.location.hash = anchor || "";
54
- }
55
- };
56
-
57
- const tabViewJSX = (
58
- <>
59
- <div className="overflow-x-auto px-5 [-ms-overflow-style:none] [scrollbar-width:none] md:flex md:justify-center [&::-webkit-scrollbar]:hidden">
60
- <div className="flex w-max gap-10">
61
- {tabs?.items?.map((item: any, index: number) => (
62
- <Button
63
- showButtonAs="unstyled"
64
- key={index}
65
- onClick={() => handleTabClick(index, item?.anchorId)}
66
- buttonClassName={cx(
67
- "py-2 whitespace-nowrap",
68
- index === currentTabIndex
69
- ? "label1 border-b-2 border-border-focus-secondary"
70
- : "body1"
71
- )}
72
- >
73
- {item.tabName}
74
- </Button>
75
- ))}
76
- </div>
77
- </div>
78
-
79
- {tabsContent?.map((tab: any, index: number) => {
80
- return (
81
- <div key={index}>
82
- <AnimatePresence>
83
- <motion.div
84
- initial={{ height: 0, opacity: 0 }}
85
- animate={{
86
- height: index === currentTabIndex ? "auto" : 0,
87
- opacity: index === currentTabIndex ? 1 : 0,
88
- }}
89
- exit={{ height: 0, opacity: 0 }}
90
- transition={{ duration: 0.3 }}
91
- >
92
- {tab}
93
- </motion.div>
94
- </AnimatePresence>
95
- </div>
96
- );
97
- })}
98
- </>
99
- );
100
-
101
- const accordionViewJSX = (
102
- <>
103
- {tabs?.items?.map((item: any, index: number) => (
104
- <div key={index} className="py-5">
105
- <Button
106
- showButtonAs="unstyled"
107
- onClick={() => handleTabClick(index, item?.anchorId)}
108
- buttonClassName={cx(
109
- "w-full flex justify-between items-center px-4 py-5",
110
- index === currentTabIndex ? "bg-bg-surface-active" : ""
111
- )}
112
- >
113
- <span className={"heading6"}>{item.tabName}</span>
114
- <MaterialIcon
115
- name={
116
- index === currentTabIndex
117
- ? "keyboard_arrow_down"
118
- : "keyboard_arrow_up"
119
- }
120
- fill={1}
121
- size={48}
122
- />
123
- </Button>
124
- <Collapse open={index === currentTabIndex}>
125
- <div className={cx("px-4 py-4")}>{tabsContent?.[index]}</div>
126
- </Collapse>
127
- </div>
128
- ))}
129
- </>
130
- );
131
-
132
- const sidebarViewJSX = (
133
- <div className="flex px-5 py-20">
134
- <div className="rounded-surface-lg border border-border-secondary shadow-lg">
135
- <div className="flex min-w-80 flex-col gap-4 px-6 py-7">
136
- {tabs?.items?.map((item: any, index: number) => (
137
- <Button
138
- showButtonAs="unstyled"
139
- key={index}
140
- onClick={() => handleTabClick(index, item?.anchorId)}
141
- buttonClassName={cx(
142
- "px-4 py-3 whitespace-nowrap text-left rounded-button-sm",
143
- index === currentTabIndex
144
- ? "label1 text-white bg-bg-inverse"
145
- : "body1"
146
- )}
147
- >
148
- {item.tabName}
149
- </Button>
150
- ))}
151
- </div>
152
- </div>
153
-
154
- <div className="grow">
155
- {tabsContent?.map((tab: any, index: number) => {
156
- return (
157
- <div key={index}>
158
- <AnimatePresence>
159
- <motion.div
160
- initial={{ height: 0, opacity: 0 }}
161
- animate={{
162
- height: index === currentTabIndex ? "auto" : 0,
163
- opacity: index === currentTabIndex ? 1 : 0,
164
- }}
165
- exit={{ height: 0, opacity: 0 }}
166
- transition={{ duration: 0.3 }}
167
- >
168
- {tab}
169
- </motion.div>
170
- </AnimatePresence>
171
- </div>
172
- );
173
- })}
174
- </div>
175
- </div>
176
- );
177
-
178
- return (
179
- <div>
180
- {title || subTitle ? (
181
- <div className="mb-8 mt-5 flex flex-col gap-5 md:gap-6">
182
- {title ? (
183
- <Text className="heading2 px-5 md:heading1 md:text-center">
184
- {title}
185
- </Text>
186
- ) : null}
187
- {subTitle ? (
188
- <Text className="subheading3 px-5 md:subheading1 md:text-center">
189
- {subTitle}
190
- </Text>
191
- ) : null}
192
- </div>
193
- ) : null}
194
-
195
- <div className="md:hidden">
196
- {mobileSidebarTabType ? tabViewJSX : accordionViewJSX}
197
- </div>
198
-
199
- <div className="hidden md:block">
200
- {navigationType ? tabViewJSX : sidebarViewJSX}
201
- </div>
202
- </div>
203
- );
204
- }
1
+ "use client";
2
+
3
+ import React, { useEffect, useState } from "react";
4
+ import { DynamicTabsT } from "./types";
5
+ import { AnimatePresence, motion } from "framer-motion";
6
+
7
+ import { Collapse } from "@shared/components/collapse";
8
+ import { MaterialIcon } from "@shared/components/material-icon";
9
+ import { Text } from "@shared/components/text";
10
+ import { Button } from "@shared/contentful/blocks/button";
11
+ import { cx } from "@shared/utils";
12
+
13
+ export function DynamicTabs(props: DynamicTabsT) {
14
+ const [currentTabIndex, setCurrentTabIndex] = useState(0);
15
+ const [fragment, setFragment] = useState("");
16
+ const {
17
+ title,
18
+ subTitle,
19
+ tabs,
20
+ tabsContent,
21
+ navigationType = true,
22
+ mobileSidebarTabType = true,
23
+ } = props;
24
+
25
+ useEffect(() => {
26
+ if (typeof window !== "undefined") {
27
+ setFragment(window.location.hash);
28
+
29
+ const handleHashChange = () => {
30
+ setFragment(window.location.hash);
31
+ };
32
+ window.addEventListener("hashchange", handleHashChange);
33
+ return () => {
34
+ window.removeEventListener("hashchange", handleHashChange);
35
+ };
36
+ }
37
+ }, []);
38
+
39
+ useEffect(() => {
40
+ tabs?.items?.some((tab: any, index: number) => {
41
+ const tabId = `#${tab?.anchorId || "tab-" + index}`;
42
+ if (tabId === fragment) {
43
+ setCurrentTabIndex(index);
44
+ return true;
45
+ }
46
+ });
47
+ }, [tabs, fragment]);
48
+
49
+ const handleTabClick = (index: number, anchor: string) => {
50
+ setCurrentTabIndex(index);
51
+
52
+ if (typeof window !== "undefined" && fragment) {
53
+ window.location.hash = anchor || "";
54
+ }
55
+ };
56
+
57
+ const tabViewJSX = (
58
+ <>
59
+ <div className="overflow-x-auto px-5 [-ms-overflow-style:none] [scrollbar-width:none] md:flex md:justify-center [&::-webkit-scrollbar]:hidden">
60
+ <div className="flex w-max gap-10">
61
+ {tabs?.items?.map((item: any, index: number) => (
62
+ <Button
63
+ showButtonAs="unstyled"
64
+ key={index}
65
+ onClick={() => handleTabClick(index, item?.anchorId)}
66
+ buttonClassName={cx(
67
+ "py-2 whitespace-nowrap",
68
+ index === currentTabIndex
69
+ ? "label1 border-b-2 border-border-focus-secondary"
70
+ : "body1"
71
+ )}
72
+ >
73
+ {item.tabName}
74
+ </Button>
75
+ ))}
76
+ </div>
77
+ </div>
78
+
79
+ {tabsContent?.map((tab: any, index: number) => {
80
+ return (
81
+ <div key={index}>
82
+ <AnimatePresence>
83
+ <motion.div
84
+ initial={{ height: 0, opacity: 0 }}
85
+ animate={{
86
+ height: index === currentTabIndex ? "auto" : 0,
87
+ opacity: index === currentTabIndex ? 1 : 0,
88
+ }}
89
+ exit={{ height: 0, opacity: 0 }}
90
+ transition={{ duration: 0.3 }}
91
+ >
92
+ {tab}
93
+ </motion.div>
94
+ </AnimatePresence>
95
+ </div>
96
+ );
97
+ })}
98
+ </>
99
+ );
100
+
101
+ const accordionViewJSX = (
102
+ <>
103
+ {tabs?.items?.map((item: any, index: number) => (
104
+ <div key={index} className="py-5">
105
+ <Button
106
+ showButtonAs="unstyled"
107
+ onClick={() => handleTabClick(index, item?.anchorId)}
108
+ buttonClassName={cx(
109
+ "w-full flex justify-between items-center px-4 py-5",
110
+ index === currentTabIndex ? "bg-bg-surface-active" : ""
111
+ )}
112
+ >
113
+ <span className={"heading6"}>{item.tabName}</span>
114
+ <MaterialIcon
115
+ name={
116
+ index === currentTabIndex
117
+ ? "keyboard_arrow_down"
118
+ : "keyboard_arrow_up"
119
+ }
120
+ fill={1}
121
+ size={48}
122
+ />
123
+ </Button>
124
+ <Collapse open={index === currentTabIndex}>
125
+ <div className={cx("px-4 py-4")}>{tabsContent?.[index]}</div>
126
+ </Collapse>
127
+ </div>
128
+ ))}
129
+ </>
130
+ );
131
+
132
+ const sidebarViewJSX = (
133
+ <div className="flex px-5 py-20">
134
+ <div className="rounded-surface-lg border border-border-secondary shadow-lg">
135
+ <div className="flex min-w-80 flex-col gap-4 px-6 py-7">
136
+ {tabs?.items?.map((item: any, index: number) => (
137
+ <Button
138
+ showButtonAs="unstyled"
139
+ key={index}
140
+ onClick={() => handleTabClick(index, item?.anchorId)}
141
+ buttonClassName={cx(
142
+ "px-4 py-3 whitespace-nowrap text-left rounded-button-sm",
143
+ index === currentTabIndex
144
+ ? "label1 text-white bg-bg-inverse"
145
+ : "body1"
146
+ )}
147
+ >
148
+ {item.tabName}
149
+ </Button>
150
+ ))}
151
+ </div>
152
+ </div>
153
+
154
+ <div className="grow">
155
+ {tabsContent?.map((tab: any, index: number) => {
156
+ return (
157
+ <div key={index}>
158
+ <AnimatePresence>
159
+ <motion.div
160
+ initial={{ height: 0, opacity: 0 }}
161
+ animate={{
162
+ height: index === currentTabIndex ? "auto" : 0,
163
+ opacity: index === currentTabIndex ? 1 : 0,
164
+ }}
165
+ exit={{ height: 0, opacity: 0 }}
166
+ transition={{ duration: 0.3 }}
167
+ >
168
+ {tab}
169
+ </motion.div>
170
+ </AnimatePresence>
171
+ </div>
172
+ );
173
+ })}
174
+ </div>
175
+ </div>
176
+ );
177
+
178
+ return (
179
+ <div>
180
+ {title || subTitle ? (
181
+ <div className="mb-8 mt-5 flex flex-col gap-5 md:gap-6">
182
+ {title ? (
183
+ <Text className="heading2 px-5 md:heading1 md:text-center">
184
+ {title}
185
+ </Text>
186
+ ) : null}
187
+ {subTitle ? (
188
+ <Text className="subheading3 px-5 md:subheading1 md:text-center">
189
+ {subTitle}
190
+ </Text>
191
+ ) : null}
192
+ </div>
193
+ ) : null}
194
+
195
+ <div className="md:hidden">
196
+ {mobileSidebarTabType ? tabViewJSX : accordionViewJSX}
197
+ </div>
198
+
199
+ <div className="hidden md:block">
200
+ {navigationType ? tabViewJSX : sidebarViewJSX}
201
+ </div>
202
+ </div>
203
+ );
204
+ }
@@ -1,21 +1,21 @@
1
- import React from "react";
2
-
3
- export interface DynamicTabsT {
4
- tabs?: {
5
- items: {
6
- tabName: string;
7
- anchorId: string;
8
- tabContent: { items: any[] };
9
- }[];
10
- };
11
- tabsContent?: React.ReactNode[];
12
- entryTitle?: string;
13
- anchorId?: string;
14
- title?: string;
15
- subTitle?: string;
16
- description?: string;
17
- backgroundColor?: "white";
18
- textColor?: "navy";
19
- navigationType?: boolean;
20
- mobileSidebarTabType?: boolean;
21
- }
1
+ import React from "react";
2
+
3
+ export interface DynamicTabsT {
4
+ tabs?: {
5
+ items: {
6
+ tabName: string;
7
+ anchorId: string;
8
+ tabContent: { items: any[] };
9
+ }[];
10
+ };
11
+ tabsContent?: React.ReactNode[];
12
+ entryTitle?: string;
13
+ anchorId?: string;
14
+ title?: string;
15
+ subTitle?: string;
16
+ description?: string;
17
+ backgroundColor?: "white";
18
+ textColor?: "navy";
19
+ navigationType?: boolean;
20
+ mobileSidebarTabType?: boolean;
21
+ }