trepur_components 2.3.7 → 2.3.9

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 (335) hide show
  1. package/.eslintrc.cjs +33 -4
  2. package/.prettierignore +10 -0
  3. package/README.md +1 -1
  4. package/package.json +9 -5
  5. package/src/components/Accordion/Accordion.stories.tsx +21 -98
  6. package/src/components/Accordion/const.tsx +34 -0
  7. package/src/components/Accordion/index.tsx +19 -25
  8. package/src/components/AlertBar/AlertBar.stories.tsx +78 -84
  9. package/src/components/AlertBar/index.tsx +69 -100
  10. package/src/components/Avatar/Avatar.stories.tsx +2 -7
  11. package/src/components/Avatar/index.tsx +4 -7
  12. package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +29 -0
  13. package/src/components/Breadcrumbs/index.tsx +89 -0
  14. package/src/components/Button/Button.stories.tsx +24 -0
  15. package/src/components/Button/index.tsx +59 -0
  16. package/src/components/Calendar/Calendar.stories.tsx +21 -0
  17. package/src/components/Calendar/index.tsx +92 -0
  18. package/src/components/Card/Card.stories.tsx +14 -0
  19. package/src/components/Card/index.tsx +39 -0
  20. package/src/components/Carousel/Carousel.stories.tsx +44 -0
  21. package/src/components/Carousel/index.tsx +301 -0
  22. package/src/components/Carousel/utils.ts +53 -0
  23. package/src/components/CarouselThumbnail/CarouselThumbnail.stories.tsx +29 -0
  24. package/src/components/CarouselThumbnail/const.ts +17 -0
  25. package/src/components/CarouselThumbnail/index.tsx +169 -0
  26. package/src/components/CarouselThumbnail/utils.ts +87 -0
  27. package/src/components/Checkbox/Checkbox.stories.tsx +27 -0
  28. package/src/components/Checkbox/index.tsx +44 -0
  29. package/src/components/Collapsible/Collapsible.stories.tsx +67 -0
  30. package/src/components/Collapsible/index.tsx +169 -0
  31. package/src/components/Counter/Counter.stories.tsx +20 -0
  32. package/src/components/Counter/index.tsx +98 -0
  33. package/src/components/DetailUpdater/DetailUpdater.stories.tsx +37 -0
  34. package/{archive → src/components}/DetailUpdater/index.tsx +20 -25
  35. package/src/components/Dialog/Dialog.stories.tsx +65 -0
  36. package/src/components/Dialog/index.tsx +29 -0
  37. package/src/components/Dropdown/Dropdown.stories.tsx +22 -0
  38. package/src/components/Dropdown/index.tsx +117 -0
  39. package/src/components/Dropdown/utils.ts +15 -0
  40. package/{archive → src/components}/FileUploader/FilePreview.tsx +11 -14
  41. package/src/components/FileUploader/FileUploader.stories.tsx +28 -0
  42. package/src/components/FileUploader/index.tsx +177 -0
  43. package/src/components/Footer/Footer.stories.tsx +47 -0
  44. package/src/components/Footer/index.tsx +96 -0
  45. package/src/components/FooterNav/FooterNav.stories.tsx +32 -0
  46. package/src/components/FooterNav/index.tsx +75 -0
  47. package/{archive → src/components}/Form/Form.stories.tsx +2 -2
  48. package/src/components/Form/index.tsx +41 -0
  49. package/src/components/Gallery/Gallery.stories.tsx +39 -0
  50. package/src/components/Gallery/index.tsx +31 -0
  51. package/src/components/Greeting/Greeting.stories.tsx +16 -0
  52. package/src/components/Greeting/index.tsx +49 -0
  53. package/src/components/HamburgerIcon/HamburgerIcon.stories.tsx +14 -0
  54. package/src/components/HamburgerIcon/index.tsx +75 -0
  55. package/src/components/Icon/Icon.stories.tsx +41 -0
  56. package/src/components/Icon/index.tsx +33 -0
  57. package/src/components/Image/Image.stories.tsx +17 -0
  58. package/src/components/Image/index.tsx +25 -0
  59. package/src/components/ImageCard/ImageCard.stories.tsx +29 -0
  60. package/src/components/ImageCard/index.tsx +75 -0
  61. package/src/components/Input/Input.stories.tsx +25 -0
  62. package/src/components/Input/index.tsx +139 -0
  63. package/{archive → src/components}/MenuButton/MenuButton.stories.tsx +2 -2
  64. package/src/components/MenuButton/index.tsx +66 -0
  65. package/{archive → src/components}/Modal/Modal.stories.tsx +4 -8
  66. package/{archive → src/components}/Modal/index.tsx +9 -12
  67. package/src/components/Nav/Nav.stories.tsx +80 -0
  68. package/src/components/Nav/index.tsx +171 -0
  69. package/src/components/NavItem/NavItem.stories.tsx +17 -0
  70. package/src/components/NavItem/index.tsx +39 -0
  71. package/src/components/Pill/Pill.stories.tsx +51 -0
  72. package/src/components/Pill/index.tsx +69 -0
  73. package/{archive → src/components}/Search/Search.stories.tsx +2 -2
  74. package/{archive → src/components}/Search/index.tsx +12 -16
  75. package/{archive → src/components}/Select/Select.stories.tsx +2 -3
  76. package/{archive → src/components}/Select/index.tsx +21 -30
  77. package/{archive → src/components}/Showcase/Showcase.stories.tsx +4 -3
  78. package/src/components/Showcase/index.tsx +62 -0
  79. package/{archive → src/components}/SideNav/SideNav.stories.tsx +2 -2
  80. package/{archive → src/components}/SideNav/index.tsx +8 -15
  81. package/{archive → src/components}/SocialButton/SocialButton.stories.tsx +2 -2
  82. package/{archive → src/components}/SocialButton/index.tsx +14 -22
  83. package/src/components/SplitCard/SplitCard.stories.tsx +34 -0
  84. package/src/components/SplitCard/index.tsx +132 -0
  85. package/src/components/Stars/Star.stories.tsx +18 -0
  86. package/src/components/Stars/index.tsx +38 -0
  87. package/src/components/Testimonial/Testimonial.stories.tsx +37 -0
  88. package/src/components/Testimonial/index.tsx +123 -0
  89. package/src/components/TextArea/TextArea.stories.tsx +24 -0
  90. package/src/components/TextArea/index.tsx +133 -0
  91. package/src/components/Timeline/Timeline.stories.tsx +45 -0
  92. package/src/components/Timeline/index.tsx +65 -0
  93. package/src/components/Tubestops/Tubestops.stories.tsx +22 -0
  94. package/src/components/Tubestops/index.tsx +132 -0
  95. package/src/components/Video/Video.stories.tsx +58 -0
  96. package/src/components/Video/assets/example.mp4 +0 -0
  97. package/src/components/Video/assets/example.ogv +0 -0
  98. package/src/components/Video/assets/example.webm +0 -0
  99. package/src/components/Video/index.tsx +92 -0
  100. package/src/components/index.ts +66 -112
  101. package/src/custom.d.ts +14 -0
  102. package/src/documentation/Colours.mdx +34 -34
  103. package/src/documentation/Introduction.mdx +9 -5
  104. package/src/documentation/assets/index.ts +3 -0
  105. package/src/documentation/assets/trepurComponentsLogo.svg +32 -0
  106. package/src/documentation/typography/Fonts/Fonts.stories.tsx +14 -0
  107. package/src/documentation/typography/Fonts/Fonts.tsx +73 -0
  108. package/src/styles/global.css +1 -1
  109. package/src/styles/themes/local.css +91 -39
  110. package/src/styles/themes/test.css +28 -0
  111. package/src/utils/screens.ts +1 -1
  112. package/tailwind/colors.ts +53 -385
  113. package/tailwind/preset.ts +4 -0
  114. package/tailwind.config.ts +12 -80
  115. package/tsconfig.json +8 -2
  116. package/archive/Breadcrumbs/Breadcrumbs.stories.tsx +0 -46
  117. package/archive/Breadcrumbs/index.tsx +0 -42
  118. package/archive/BreadcrumbsBordered/BreadcrumbsBordered.stories.tsx +0 -52
  119. package/archive/BreadcrumbsBordered/index.tsx +0 -44
  120. package/archive/BreadcrumbsItem/BreadcrumbsItem.stories.tsx +0 -40
  121. package/archive/BreadcrumbsItem/index.tsx +0 -149
  122. package/archive/Button/Button.stories.tsx +0 -150
  123. package/archive/Button/index.tsx +0 -111
  124. package/archive/Button/style.module.css +0 -76
  125. package/archive/Calendar/Calendar.stories.tsx +0 -82
  126. package/archive/Calendar/index.tsx +0 -76
  127. package/archive/Card/Card.stories.tsx +0 -75
  128. package/archive/Card/index.tsx +0 -102
  129. package/archive/Card/style.module.css +0 -75
  130. package/archive/CardWithTopImage/CardWithTopImage.stories.tsx +0 -50
  131. package/archive/CardWithTopImage/index.tsx +0 -39
  132. package/archive/CardWithTopImage/style.module.css +0 -11
  133. package/archive/Carousel/Carousel.stories.tsx +0 -451
  134. package/archive/Carousel/index.tsx +0 -388
  135. package/archive/Carousel/style.module.css +0 -99
  136. package/archive/CarouselThumbnail/CarouselThumbnail.stories.tsx +0 -350
  137. package/archive/CarouselThumbnail/index.tsx +0 -302
  138. package/archive/CarouselThumbnail/style.module.css +0 -67
  139. package/archive/Checkbox/Checkbox.stories.tsx +0 -34
  140. package/archive/Checkbox/index.tsx +0 -51
  141. package/archive/Checkbox/style.module.css +0 -15
  142. package/archive/Collapsible/Collapsible.stories.tsx +0 -67
  143. package/archive/Collapsible/index.tsx +0 -116
  144. package/archive/Collapsible/style.module.css +0 -47
  145. package/archive/Column/Column.stories.tsx +0 -89
  146. package/archive/Column/index.tsx +0 -119
  147. package/archive/Column/style.module.css +0 -151
  148. package/archive/ComponentWrapper/ComponentWrapper.stories.tsx +0 -40
  149. package/archive/ComponentWrapper/index.tsx +0 -55
  150. package/archive/ComponentWrapper/style.module.css +0 -40
  151. package/archive/Container/Container.stories.tsx +0 -40
  152. package/archive/Container/index.tsx +0 -24
  153. package/archive/Container/style.module.css +0 -4
  154. package/archive/Counter/Counter.stories.tsx +0 -19
  155. package/archive/Counter/index.tsx +0 -66
  156. package/archive/Counter/style.module.css +0 -19
  157. package/archive/DetailUpdater/DetailUpdater.stories.tsx +0 -96
  158. package/archive/DetailUpdater/style.module.css +0 -31
  159. package/archive/Dialog/Dialog.stories.tsx +0 -131
  160. package/archive/Dialog/index.tsx +0 -91
  161. package/archive/Dialog/style.module.css +0 -44
  162. package/archive/DropdownMenu/DropdownMenu.stories.tsx +0 -59
  163. package/archive/DropdownMenu/index.tsx +0 -51
  164. package/archive/DropdownMenu/style.module.css +0 -38
  165. package/archive/DynamicTextSection/DynamicTextSection.stories.tsx +0 -74
  166. package/archive/DynamicTextSection/index.tsx +0 -36
  167. package/archive/DynamicTextSection/style.module.css +0 -0
  168. package/archive/FileUploader/FileUploader.stories.tsx +0 -28
  169. package/archive/FileUploader/index.tsx +0 -135
  170. package/archive/FileUploader/style.module.css +0 -54
  171. package/archive/FilterItem/FilterItem.stories.tsx +0 -33
  172. package/archive/FilterItem/index.tsx +0 -101
  173. package/archive/FilterItem/style.module.css +0 -27
  174. package/archive/Footer/Footer.stories.tsx +0 -59
  175. package/archive/Footer/index.tsx +0 -50
  176. package/archive/Footer/style.module.css +0 -19
  177. package/archive/FooterNav/FooterNav.stories.tsx +0 -125
  178. package/archive/FooterNav/index.tsx +0 -57
  179. package/archive/FooterNav/style.module.css +0 -32
  180. package/archive/FooterNavItem/FooterNavItem.stories.tsx +0 -53
  181. package/archive/FooterNavItem/index.tsx +0 -80
  182. package/archive/FooterNavItem/style.module.css +0 -139
  183. package/archive/Form/index.tsx +0 -61
  184. package/archive/Form/style.module.css +0 -0
  185. package/archive/FyreCard/FyreCard.stories.tsx +0 -31
  186. package/archive/FyreCard/index.tsx +0 -52
  187. package/archive/FyreCard/style.module.css +0 -19
  188. package/archive/Greeting/Greeting.stories.tsx +0 -41
  189. package/archive/Greeting/index.tsx +0 -32
  190. package/archive/HamburgerIcon/HamburgerIcon.stories.tsx +0 -32
  191. package/archive/HamburgerIcon/index.tsx +0 -103
  192. package/archive/HamburgerIcon/style.module.css +0 -85
  193. package/archive/HorizontalLine/HorizontalLine.stories.tsx +0 -54
  194. package/archive/HorizontalLine/index.tsx +0 -40
  195. package/archive/HorizontalLine/style.module.css +0 -55
  196. package/archive/Icon/Icon.stories.tsx +0 -164
  197. package/archive/Icon/index.tsx +0 -115
  198. package/archive/Icon/style.module.css +0 -253
  199. package/archive/IconCard/IconCard.stories.tsx +0 -46
  200. package/archive/IconCard/index.tsx +0 -57
  201. package/archive/IconCard/style.module.css +0 -18
  202. package/archive/Image/Image.stories.tsx +0 -87
  203. package/archive/Image/index.tsx +0 -132
  204. package/archive/Image/style.module.css +0 -109
  205. package/archive/ImageInfo/ImageInfo.stories.tsx +0 -39
  206. package/archive/ImageInfo/index.tsx +0 -95
  207. package/archive/ImageInfo/style.module.css +0 -47
  208. package/archive/ImageLink/ImageLink.stories.tsx +0 -37
  209. package/archive/ImageLink/index.tsx +0 -49
  210. package/archive/ImageLink/style.module.css +0 -23
  211. package/archive/ImageLinkList/ImageLinkList.stories.tsx +0 -34
  212. package/archive/ImageLinkList/index.tsx +0 -33
  213. package/archive/ImageLinkList/style.module.css +0 -3
  214. package/archive/InformationIcon/InformationIcon.stories.tsx +0 -83
  215. package/archive/InformationIcon/index.tsx +0 -128
  216. package/archive/InformationIcon/style.module.css +0 -71
  217. package/archive/InformationIconBlock/InformationIconBlock.stories.tsx +0 -32
  218. package/archive/InformationIconBlock/index.tsx +0 -63
  219. package/archive/InformationIconBlock/style.module.css +0 -7
  220. package/archive/Input/Input.stories.tsx +0 -84
  221. package/archive/Input/index.tsx +0 -131
  222. package/archive/Input/style.module.css +0 -60
  223. package/archive/Jumbotron/Jumbotron.stories.tsx +0 -21
  224. package/archive/Jumbotron/index.tsx +0 -31
  225. package/archive/Jumbotron/style.module.css +0 -8
  226. package/archive/MenuButton/index.tsx +0 -82
  227. package/archive/MenuButton/style.module.css +0 -45
  228. package/archive/Modal/style.module.css +0 -35
  229. package/archive/NavItem/NavItem.stories.tsx +0 -90
  230. package/archive/NavItem/index.tsx +0 -65
  231. package/archive/NavItem/style.module.css +0 -71
  232. package/archive/NavOld/NavOld.stories.tsx +0 -193
  233. package/archive/NavOld/StickyNav.tsx +0 -191
  234. package/archive/NavOld/index.tsx +0 -273
  235. package/archive/NavOld/style.module.css +0 -156
  236. package/archive/NavTwo/Dropdown.tsx +0 -35
  237. package/archive/NavTwo/Nav.stories.tsx +0 -38
  238. package/archive/NavTwo/Sidebar.tsx +0 -34
  239. package/archive/NavTwo/StickyNav.tsx +0 -34
  240. package/archive/NavTwo/index.tsx +0 -45
  241. package/archive/NavTwo/style.module.css +0 -35
  242. package/archive/NewsCard/NewsCard.stories.tsx +0 -72
  243. package/archive/NewsCard/index.tsx +0 -57
  244. package/archive/NewsCard/style.module.css +0 -15
  245. package/archive/Pill/Pill.stories.tsx +0 -44
  246. package/archive/Pill/index.tsx +0 -64
  247. package/archive/Pill/style.module.css +0 -32
  248. package/archive/ProductCard/ProductCard.stories.tsx +0 -61
  249. package/archive/ProductCard/index.tsx +0 -111
  250. package/archive/ProductCard/style.module.css +0 -53
  251. package/archive/ProductCardV2/ProductCardV2.stories.tsx +0 -50
  252. package/archive/ProductCardV2/index.tsx +0 -119
  253. package/archive/ProductCardV2/style.module.css +0 -59
  254. package/archive/Proficiencies/Proficiencies.stories.tsx +0 -50
  255. package/archive/Proficiencies/index.tsx +0 -63
  256. package/archive/Proficiencies/style.module.css +0 -31
  257. package/archive/Profile/Profile.stories.tsx +0 -49
  258. package/archive/Profile/index.tsx +0 -103
  259. package/archive/Profile/style.module.css +0 -47
  260. package/archive/Row/Row.stories.tsx +0 -53
  261. package/archive/Row/index.tsx +0 -23
  262. package/archive/Row/style.module.css +0 -3
  263. package/archive/Search/style.module.css +0 -23
  264. package/archive/Select/style.module.css +0 -52
  265. package/archive/Showcase/index.tsx +0 -75
  266. package/archive/Showcase/style.module.css +0 -47
  267. package/archive/SideNav/style.module.css +0 -43
  268. package/archive/SocialBlock/SocialBlock.stories.tsx +0 -58
  269. package/archive/SocialBlock/index.tsx +0 -63
  270. package/archive/SocialButton/style.module.css +0 -77
  271. package/archive/StarRating/StarRating.stories.tsx +0 -23
  272. package/archive/StarRating/index.tsx +0 -71
  273. package/archive/Testimonial/Testimonial.stories.tsx +0 -110
  274. package/archive/Testimonial/index.tsx +0 -61
  275. package/archive/Testimonial/style.module.css +0 -27
  276. package/archive/TextAndTitle/TextAndTitle.stories.tsx +0 -70
  277. package/archive/TextAndTitle/index.tsx +0 -123
  278. package/archive/TextAndTitle/style.module.css +0 -75
  279. package/archive/TextArea/TextArea.stories.tsx +0 -55
  280. package/archive/TextArea/index.tsx +0 -125
  281. package/archive/TextArea/style.module.css +0 -60
  282. package/archive/Timeline/Timeline.stories.tsx +0 -92
  283. package/archive/Timeline/index.tsx +0 -254
  284. package/archive/Timeline/style.module.css +0 -134
  285. package/archive/TimelineV2/TimelineV2.stories.tsx +0 -95
  286. package/archive/TimelineV2/index.tsx +0 -70
  287. package/archive/TimelineV2/style.module.css +0 -28
  288. package/archive/Tubestops/Tubestops.stories.tsx +0 -42
  289. package/archive/Tubestops/index.tsx +0 -58
  290. package/archive/Tubestops/style.module.css +0 -54
  291. package/archive/UserIcon/UserIcon.stories.tsx +0 -52
  292. package/archive/UserIcon/index.tsx +0 -46
  293. package/archive/UserIcon/style.module.css +0 -19
  294. package/archive/Video/Video.stories.tsx +0 -23
  295. package/archive/Video/index.tsx +0 -47
  296. package/archive/theme.ts +0 -39
  297. package/archive/typography/Fonts/Fonts.stories.tsx +0 -14
  298. package/archive/typography/Fonts/Fonts.tsx +0 -181
  299. package/lib/components/Accordion/Accordion.stories.d.ts +0 -94
  300. package/lib/components/Accordion/index.d.ts +0 -8
  301. package/lib/components/Accordion/index.js +0 -15
  302. package/lib/components/AlertBar/AlertBar.stories.d.ts +0 -162
  303. package/lib/components/AlertBar/index.d.ts +0 -12
  304. package/lib/components/AlertBar/index.js +0 -49
  305. package/lib/components/Avatar/Avatar.stories.d.ts +0 -44
  306. package/lib/components/Avatar/index.d.ts +0 -4
  307. package/lib/components/index.d.ts +0 -4
  308. package/lib/index.d.ts +0 -1
  309. package/lib/index.js +0 -6
  310. package/lib/styles/global.css +0 -75
  311. package/lib/styles/themes/local.css +0 -40
  312. package/lib/styles/themes/palette.css +0 -131
  313. package/lib/tailwind/boxShadow.ts +0 -9
  314. package/lib/tailwind/colors.ts +0 -410
  315. package/lib/tailwind/container.ts +0 -11
  316. package/lib/tailwind/preset.ts +0 -88
  317. package/lib/tailwind/spacing.ts +0 -14
  318. package/lib/utils/controls.d.ts +0 -36
  319. package/lib/utils/matchMedia.d.ts +0 -2
  320. package/lib/utils/screens.d.ts +0 -7
  321. package/src/styles/themes/palette.css +0 -131
  322. package/svg.d.ts +0 -4
  323. /package/{archive → src/components}/Calendar/style.css +0 -0
  324. /package/{archive → src/components}/Checkbox/Checkbox.mdx +0 -0
  325. /package/{archive → src}/fonts/Sora/OFL.txt +0 -0
  326. /package/{archive → src}/fonts/Sora/README.txt +0 -0
  327. /package/{archive → src}/fonts/Sora/Sora-VariableFont_wght.ttf +0 -0
  328. /package/{archive → src}/fonts/Sora/static/Sora-Bold.ttf +0 -0
  329. /package/{archive → src}/fonts/Sora/static/Sora-ExtraBold.ttf +0 -0
  330. /package/{archive → src}/fonts/Sora/static/Sora-ExtraLight.ttf +0 -0
  331. /package/{archive → src}/fonts/Sora/static/Sora-Light.ttf +0 -0
  332. /package/{archive → src}/fonts/Sora/static/Sora-Medium.ttf +0 -0
  333. /package/{archive → src}/fonts/Sora/static/Sora-Regular.ttf +0 -0
  334. /package/{archive → src}/fonts/Sora/static/Sora-SemiBold.ttf +0 -0
  335. /package/{archive → src}/fonts/Sora/static/Sora-Thin.ttf +0 -0
@@ -0,0 +1,44 @@
1
+ import { forwardRef, HTMLAttributes, useState } from 'react';
2
+
3
+ export interface CheckboxProps {
4
+ label?: string;
5
+ onClick?: (isChecked: boolean) => void;
6
+ checked?: boolean;
7
+ }
8
+
9
+ const CheckboxComponent = forwardRef<
10
+ HTMLLabelElement,
11
+ HTMLAttributes<HTMLLabelElement> & CheckboxProps
12
+ >(({ children, checked, onClick }, ref) => {
13
+ const [isChecked, setIsChecked] = useState(checked);
14
+ return (
15
+ <label ref={ref} className="flex items-center gap-4 hover:cursor-pointer">
16
+ <input
17
+ className="h-6 w-6 rounded border-2"
18
+ onChange={() => {
19
+ setIsChecked(!isChecked);
20
+ }}
21
+ onClick={() => onClick?.(!isChecked)}
22
+ type="checkbox"
23
+ checked={isChecked}
24
+ />
25
+ {children}
26
+ </label>
27
+ );
28
+ });
29
+
30
+ const CheckboxLabel = forwardRef<
31
+ HTMLSpanElement,
32
+ HTMLAttributes<HTMLSpanElement> & CheckboxProps
33
+ >(({ children }, ref) => {
34
+ return <span ref={ref}>{children}</span>;
35
+ });
36
+
37
+ CheckboxComponent.displayName = 'Checkbox';
38
+ CheckboxLabel.displayName = 'Checkbox.Label';
39
+
40
+ const Checkbox = Object.assign(CheckboxComponent, {
41
+ Label: CheckboxLabel,
42
+ });
43
+
44
+ export { Checkbox };
@@ -0,0 +1,67 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import { Collapsible } from '.';
5
+
6
+ const meta = {
7
+ title: 'V2Components/Collapsible',
8
+ component: Collapsible,
9
+ parameters: {},
10
+ argTypes: {
11
+ ...idAndClassName,
12
+ },
13
+ args: {
14
+ children: [
15
+ <Collapsible.Header>
16
+ <Collapsible.Image src="https://picsum.photos/500/300" />
17
+ <Collapsible.HeaderContent>
18
+ <Collapsible.Label>This is a label</Collapsible.Label>
19
+ <Collapsible.Title>This is a title</Collapsible.Title>
20
+ <Collapsible.Subtitle>This is a subtitle</Collapsible.Subtitle>
21
+ </Collapsible.HeaderContent>
22
+ </Collapsible.Header>,
23
+ <Collapsible.Content>
24
+ <Collapsible.Text>
25
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi,
26
+ nesciunt. Accusamus earum dolorum est, error dolor ipsam, consequatur
27
+ id corrupti atque nesciunt velit nam quibusdam voluptatem animi iusto,
28
+ numquam eaque! Lorem ipsum dolor sit amet consectetur adipisicing
29
+ elit. Nisi, nesciunt. Accusamus earum dolorum est, error dolor ipsam,
30
+ consequatur id corrupti atque nesciunt velit nam quibusdam voluptatem
31
+ animi iusto, numquam eaque! Lorem ipsum dolor sit amet consectetur
32
+ adipisicing elit. Nisi, nesciunt. Accusamus earum dolorum est, error
33
+ dolor ipsam, consequatur id corrupti atque nesciunt velit nam
34
+ quibusdam voluptatem animi iusto, numquam eaque! Lorem ipsum dolor sit
35
+ amet consectetur adipisicing elit. Nisi, nesciunt. Accusamus earum
36
+ dolorum est, error dolor ipsam, consequatur id corrupti atque nesciunt
37
+ velit nam quibusdam voluptatem animi iusto, numquam eaque! Lorem ipsum
38
+ dolor sit amet consectetur adipisicing elit. Nisi, nesciunt. Accusamus
39
+ earum dolorum est, error dolor ipsam, consequatur id corrupti atque
40
+ nesciunt velit nam quibusdam voluptatem animi iusto, numquam eaque!
41
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi,
42
+ nesciunt. Accusamus earum dolorum est, error dolor ipsam, consequatur
43
+ id corrupti atque nesciunt velit nam quibusdam voluptatem animi iusto,
44
+ numquam eaque! Lorem ipsum dolor sit amet consectetur adipisicing
45
+ elit. Nisi, nesciunt. Accusamus earum dolorum est, error dolor ipsam,
46
+ consequatur id corrupti atque nesciunt velit nam quibusdam voluptatem
47
+ animi iusto, numquam eaque! Lorem ipsum dolor sit amet consectetur
48
+ adipisicing elit. Nisi, nesciunt. Accusamus earum dolorum est, error
49
+ dolor ipsam, consequatur id corrupti atque nesciunt velit nam
50
+ quibusdam voluptatem animi iusto, numquam eaque! Lorem ipsum dolor sit
51
+ amet consectetur adipisicing elit. Nisi, nesciunt. Accusamus earum
52
+ dolorum est, error dolor ipsam, consequatur id corrupti atque nesciunt
53
+ velit nam quibusdam voluptatem animi iusto, numquam eaque! Lorem ipsum
54
+ dolor sit amet consectetur adipisicing elit. Nisi, nesciunt. Accusamus
55
+ earum dolorum est, error dolor ipsam, consequatur id corrupti atque
56
+ nesciunt velit nam quibusdam voluptatem animi iusto, numquam eaque!
57
+ </Collapsible.Text>
58
+ </Collapsible.Content>,
59
+ ],
60
+ },
61
+ } satisfies Meta<typeof Collapsible>;
62
+
63
+ export default meta;
64
+
65
+ type Story = StoryObj<typeof Collapsible>;
66
+
67
+ export const Default: Story = {};
@@ -0,0 +1,169 @@
1
+ import {
2
+ forwardRef,
3
+ HTMLAttributes,
4
+ useContext,
5
+ createContext,
6
+ useState,
7
+ useMemo,
8
+ } from 'react';
9
+
10
+ import { Icon } from '@components/Icon';
11
+ import { Image, ImageProps } from '@components/Image';
12
+ import {
13
+ faChevronDown,
14
+ faChevronUp,
15
+ } from '@fortawesome/fontawesome-free-solid';
16
+ import clsx from 'clsx';
17
+
18
+ export interface CollapsibleContextProps {
19
+ loading?: boolean;
20
+ expanded?: boolean;
21
+ setExpanded?: (expanded: boolean) => void;
22
+ }
23
+
24
+ const CollapsibleContext = createContext<CollapsibleContextProps | null>(null);
25
+
26
+ const CollapsibleComponent = forwardRef<
27
+ HTMLDivElement,
28
+ HTMLAttributes<HTMLDivElement> & CollapsibleContextProps
29
+ >(({ id, className, children, loading, ...props }, ref) => {
30
+ const [expanded, setExpanded] = useState(false);
31
+
32
+ const state = useMemo(
33
+ () => ({
34
+ loading,
35
+ expanded,
36
+ setExpanded,
37
+ }),
38
+ [loading, expanded, setExpanded],
39
+ );
40
+
41
+ return (
42
+ <CollapsibleContext.Provider value={state}>
43
+ <div
44
+ id={id}
45
+ className="w-full rounded-2xl bg-white hover:cursor-pointer"
46
+ ref={ref}
47
+ {...props}
48
+ >
49
+ {children}
50
+ </div>
51
+ </CollapsibleContext.Provider>
52
+ );
53
+ });
54
+
55
+ const CollapsibleHeader = forwardRef<
56
+ HTMLDivElement,
57
+ HTMLAttributes<HTMLDivElement>
58
+ >(({ children, ...props }, ref) => {
59
+ const { expanded, setExpanded } = useContext(CollapsibleContext) || {};
60
+ return (
61
+ <div
62
+ className="flex h-24 pr-4 sm:pr-8"
63
+ onClick={() => setExpanded?.(!expanded)}
64
+ ref={ref}
65
+ {...props}
66
+ >
67
+ {children}
68
+ <div className="my-auto flex-none">
69
+ <Icon icon={expanded ? faChevronDown : faChevronUp} />
70
+ </div>
71
+ </div>
72
+ );
73
+ });
74
+
75
+ const CollapsibleHeaderContent = forwardRef<
76
+ HTMLDivElement,
77
+ HTMLAttributes<HTMLDivElement>
78
+ >(({ children, ...props }, ref) => (
79
+ <div className="mx-4 my-auto grid w-full" ref={ref} {...props}>
80
+ {children}
81
+ </div>
82
+ ));
83
+
84
+ const CollapsibleImage = forwardRef<
85
+ HTMLDivElement,
86
+ HTMLAttributes<HTMLDivElement> & ImageProps
87
+ >(({ children, src, ...props }, ref) => (
88
+ <div className="aspect-square flex-none p-4">
89
+ <Image src={src} className="h-full rounded-2xl" {...props} />
90
+ </div>
91
+ ));
92
+
93
+ const CollapsibleLabel = forwardRef<
94
+ HTMLParagraphElement,
95
+ HTMLAttributes<HTMLParagraphElement>
96
+ >(({ ...props }, ref) => (
97
+ <p
98
+ className="text-xxs text-light-grey truncate md:text-xs"
99
+ ref={ref}
100
+ {...props}
101
+ />
102
+ ));
103
+
104
+ const CollapsibleTitle = forwardRef<
105
+ HTMLParagraphElement,
106
+ HTMLAttributes<HTMLParagraphElement>
107
+ >(({ ...props }, ref) => (
108
+ <p className="md:text-md truncate text-sm" ref={ref} {...props} />
109
+ ));
110
+
111
+ const CollapsibleSubtitle = forwardRef<
112
+ HTMLParagraphElement,
113
+ HTMLAttributes<HTMLParagraphElement>
114
+ >(({ ...props }, ref) => (
115
+ <p className="truncate text-xs md:text-sm" ref={ref} {...props} />
116
+ ));
117
+
118
+ const CollapsibleContent = forwardRef<
119
+ HTMLDivElement,
120
+ HTMLAttributes<HTMLDivElement>
121
+ >(({ children, ...props }, ref) => {
122
+ const { expanded } = useContext(CollapsibleContext) || {};
123
+ return (
124
+ <div
125
+ className={clsx(
126
+ 'w-auto overflow-scroll px-4 transition-max-height duration-300',
127
+ {
128
+ 'max-h-32': expanded,
129
+ 'max-h-0': !expanded,
130
+ },
131
+ )}
132
+ ref={ref}
133
+ {...props}
134
+ >
135
+ <div className="pb-4">{children}</div>
136
+ </div>
137
+ );
138
+ });
139
+
140
+ const CollapsibleText = forwardRef<
141
+ HTMLParagraphElement,
142
+ HTMLAttributes<HTMLParagraphElement>
143
+ >(({ ...props }, ref) => (
144
+ <p className="text-xs md:text-sm" ref={ref} {...props} />
145
+ ));
146
+
147
+ CollapsibleComponent.displayName = 'Collapsible';
148
+
149
+ CollapsibleHeader.displayName = 'Collapsible.Header';
150
+ CollapsibleContent.displayName = 'Collapsible.Content';
151
+ CollapsibleImage.displayName = 'Collapsible.Image';
152
+ CollapsibleLabel.displayName = 'Collapsible.Label';
153
+ CollapsibleTitle.displayName = 'Collapsible.Title';
154
+ CollapsibleSubtitle.displayName = 'Collapsible.Subtitle';
155
+ CollapsibleHeaderContent.displayName = 'Collapsible.HeaderContent';
156
+ CollapsibleText.displayName = 'Collapsible.Text';
157
+
158
+ const Collapsible = Object.assign(CollapsibleComponent, {
159
+ Header: CollapsibleHeader,
160
+ HeaderContent: CollapsibleHeaderContent,
161
+ Image: CollapsibleImage,
162
+ Label: CollapsibleLabel,
163
+ Title: CollapsibleTitle,
164
+ Subtitle: CollapsibleSubtitle,
165
+ Content: CollapsibleContent,
166
+ Text: CollapsibleText,
167
+ });
168
+
169
+ export { Collapsible };
@@ -0,0 +1,20 @@
1
+ import { Counter } from './';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta = {
5
+ title: 'V2Components/Counter',
6
+ component: Counter,
7
+ args: {
8
+ children: [
9
+ <Counter.DecrementIcon />,
10
+ <Counter.Count />,
11
+ <Counter.IncrementIcon />,
12
+ ],
13
+ },
14
+ } satisfies Meta<typeof Counter>;
15
+
16
+ export default meta;
17
+
18
+ type Story = StoryObj<typeof Counter>;
19
+
20
+ export const Default: Story = {};
@@ -0,0 +1,98 @@
1
+ import {
2
+ createContext,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ useContext,
6
+ useMemo,
7
+ useState,
8
+ } from 'react';
9
+
10
+ import { Icon } from '@components/Icon';
11
+ import {
12
+ faChevronCircleLeft,
13
+ faChevronCircleRight,
14
+ } from '@fortawesome/fontawesome-free-solid';
15
+
16
+ export interface CounterContextProps {
17
+ currentCount?: number;
18
+ setCurrentCount?: (val: number) => void;
19
+ count?: number;
20
+ onClick?: (count: number) => void;
21
+ }
22
+
23
+ const CounterContext = createContext<CounterContextProps | null>(null);
24
+
25
+ const CounterComponent = forwardRef<
26
+ HTMLDivElement,
27
+ HTMLAttributes<HTMLDivElement> & CounterContextProps
28
+ >(({ children, count = 0 }, ref) => {
29
+ const [currentCount, setCurrentCount] = useState(count);
30
+
31
+ const state = useMemo(
32
+ () => ({
33
+ currentCount,
34
+ setCurrentCount,
35
+ }),
36
+ [currentCount, setCurrentCount],
37
+ );
38
+
39
+ return (
40
+ <CounterContext.Provider value={state}>
41
+ <div ref={ref} className="flex gap-6 rounded-lg ">
42
+ {children}
43
+ </div>
44
+ </CounterContext.Provider>
45
+ );
46
+ });
47
+
48
+ const CounterDecrementIcon = forwardRef<
49
+ HTMLDivElement,
50
+ HTMLAttributes<HTMLDivElement>
51
+ >(() => {
52
+ const { setCurrentCount, currentCount = 0 } =
53
+ useContext(CounterContext) || {};
54
+ return (
55
+ <div className="my-auto cursor-pointer">
56
+ <Icon
57
+ icon={faChevronCircleLeft}
58
+ onClick={() => setCurrentCount?.(currentCount - 1)}
59
+ />
60
+ </div>
61
+ );
62
+ });
63
+
64
+ const CounterIncrementIcon = forwardRef<
65
+ HTMLDivElement,
66
+ HTMLAttributes<HTMLDivElement>
67
+ >(() => {
68
+ const { setCurrentCount, currentCount = 0 } =
69
+ useContext(CounterContext) || {};
70
+ return (
71
+ <div className="my-auto cursor-pointer">
72
+ <Icon
73
+ icon={faChevronCircleRight}
74
+ onClick={() => setCurrentCount?.(currentCount + 1)}
75
+ />
76
+ </div>
77
+ );
78
+ });
79
+
80
+ const CounterCount = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(
81
+ () => {
82
+ const { currentCount } = useContext(CounterContext) || {};
83
+ return <div className="overflow-hidden text-center">{currentCount}</div>;
84
+ },
85
+ );
86
+
87
+ CounterComponent.displayName = 'Counter';
88
+ CounterDecrementIcon.displayName = 'Counter.DecrementIcon';
89
+ CounterIncrementIcon.displayName = 'Counter.IncrementIcon';
90
+ CounterCount.displayName = 'Counter.Count';
91
+
92
+ const Counter = Object.assign(CounterComponent, {
93
+ DecrementIcon: CounterDecrementIcon,
94
+ IncrementIcon: CounterIncrementIcon,
95
+ Count: CounterCount,
96
+ });
97
+
98
+ export { Counter };
@@ -0,0 +1,37 @@
1
+ import { DetailUpdater } from './';
2
+ import { Input } from '@components/Input';
3
+ import { action } from '@storybook/addon-actions';
4
+ import { Meta, StoryObj } from '@storybook/react';
5
+
6
+ const meta = {
7
+ title: 'Components/Detail Updater',
8
+ component: DetailUpdater,
9
+ args: {
10
+ title: 'Legal Name',
11
+ description: 'This is a description to let you know what to do',
12
+ expandText: 'Edit',
13
+ collapseText: 'Cancel',
14
+ ctaText: 'Save',
15
+ onClick: (fieldValues: any) => {
16
+ action('Submitted')(fieldValues);
17
+ },
18
+ onChange: (value: any) => {
19
+ action('Updated')(value);
20
+ },
21
+ children: (
22
+ <Input placeholder="Insert title here">
23
+ <Input.Item>
24
+ <Input.Label required>Title</Input.Label>
25
+ <Input.Box />
26
+ <Input.Validation />
27
+ </Input.Item>
28
+ </Input>
29
+ ),
30
+ },
31
+ } satisfies Meta<typeof DetailUpdater>;
32
+
33
+ export default meta;
34
+
35
+ type Story = StoryObj<typeof DetailUpdater>;
36
+
37
+ export const Default: Story = {};
@@ -1,12 +1,10 @@
1
1
  import React, { useState } from 'react';
2
2
 
3
- import Button from '@components/Button';
4
- import classNames from 'classnames';
3
+ import { Card } from '../';
4
+ import { Button } from '@components/Button';
5
5
  import 'keen-slider/keen-slider.min.css';
6
6
 
7
-
8
-
9
- export interface Props {
7
+ export interface DetailUpdatesProps {
10
8
  id?: string;
11
9
  className?: string;
12
10
  title: string;
@@ -16,14 +14,13 @@ export interface Props {
16
14
  ctaText: string;
17
15
  onClick?: (fieldValues: any) => void;
18
16
  onChange?: (fieldValues: any) => void;
19
-
20
17
  children: React.ReactNode;
21
18
  onSubmit?: () => void;
22
19
  onCancel?: () => void;
23
20
  value?: string;
24
21
  }
25
22
 
26
- const DetailUpdater: React.FC<Props> = ({
23
+ export const DetailUpdater = ({
27
24
  id,
28
25
  className,
29
26
  title,
@@ -37,9 +34,8 @@ const DetailUpdater: React.FC<Props> = ({
37
34
  onSubmit,
38
35
  onCancel,
39
36
  value,
40
- }) => {
37
+ }: DetailUpdatesProps) => {
41
38
  const [expanded, setExpanded] = useState(false);
42
- const classList = classNames(className, style.classList, 'theme-local');
43
39
 
44
40
  const handleSubmit = (): void => {
45
41
  onSubmit?.();
@@ -66,13 +62,13 @@ const DetailUpdater: React.FC<Props> = ({
66
62
  // }
67
63
 
68
64
  return (
69
- <div id={id} className={classList}>
65
+ <Card id={id} className={className}>
70
66
  {!expanded && (
71
- <div className={style.class}>
72
- <div className={style.wrapper}>
73
- <p className={style.title}>{title}</p>
67
+ <div className="mx-4 py-6">
68
+ <div className="flex justify-between">
69
+ <p className="font-semiBold text-ink">{title}</p>
74
70
  <p
75
- className={style.expandText}
71
+ className="font-semiBold text-ink cursor-pointer underline"
76
72
  onClick={() => {
77
73
  setExpanded(true);
78
74
  }}
@@ -80,15 +76,15 @@ const DetailUpdater: React.FC<Props> = ({
80
76
  {expandText}
81
77
  </p>
82
78
  </div>
83
- <p className={style.value}>{value !== undefined ? value : '-'}</p>
79
+ <p className="text-ink">{value !== undefined ? value : '-'}</p>
84
80
  </div>
85
81
  )}
86
82
  {expanded && (
87
- <div className={style.class}>
88
- <div className={style.wrapper}>
89
- <p className={style.title}>{title}</p>
83
+ <div className="mx-4 py-6">
84
+ <div className="flex justify-between">
85
+ <p className="font-semiBold text-ink">{title}</p>
90
86
  <p
91
- className={style.expandText}
87
+ className="font-semiBold text-ink cursor-pointer underline"
92
88
  onClick={() => {
93
89
  onCancel?.();
94
90
  setExpanded(false);
@@ -97,16 +93,15 @@ const DetailUpdater: React.FC<Props> = ({
97
93
  {collapseText}
98
94
  </p>
99
95
  </div>
100
- <p className={style.description}>{description}</p>
101
- <div className={style.inputWrapper}>{children}</div>
96
+ <p className="text-light-grey">{description}</p>
97
+ <div className="grid w-full grid-cols-1 gap-0 py-4 md:grid-cols-2 md:gap-4 lg:w-2/3">
98
+ {children}
99
+ </div>
102
100
  <Button variant="secondary" onClick={handleSubmit}>
103
101
  {ctaText}
104
102
  </Button>
105
103
  </div>
106
104
  )}
107
- <hr className={style.hr} />
108
- </div>
105
+ </Card>
109
106
  );
110
107
  };
111
-
112
- export default DetailUpdater;
@@ -0,0 +1,65 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { action } from '@storybook/addon-actions';
4
+ import { Meta } from '@storybook/react';
5
+
6
+ import { Dialog } from '.';
7
+ import { Button } from '../Button';
8
+ import { Modal } from '../Modal';
9
+
10
+ const meta = {
11
+ title: 'Components/Dialog',
12
+ component: Dialog,
13
+ args: {
14
+ title: 'This is a title',
15
+ paragraph:
16
+ 'Lorem ipsum dolor sit, amet consectetur adipisicing elit. Sapiente itaque repellendus, ab rerum explicabo ducimus culpa incidunt consequatur, corporis, sequi dolor in praesentium ea maxime perferendis autem aliquam impedit. Debitis.',
17
+ dismissText: 'Close',
18
+ imageUrl: 'https://picsum.photos/500/300',
19
+ onDismissClick: action('dismissed'),
20
+ // primaryCta: {
21
+ // children: 'Add bank details',
22
+ // palette: 'secondary',
23
+ // },
24
+ // secondaryCta: {
25
+ // children: 'Add bank details',
26
+ // variant: 'secondary',
27
+ // palette: 'secondary',
28
+ // },
29
+ },
30
+ } satisfies Meta<typeof Dialog>;
31
+
32
+ const Template = (args: any): React.ReactElement => {
33
+ const [visible, setVisible] = useState<boolean>(false);
34
+
35
+ return (
36
+ <div style={{ height: '350vh' }}>
37
+ <Button
38
+ onClick={() => {
39
+ setVisible(true);
40
+ }}
41
+ >
42
+ Click Me!
43
+ </Button>
44
+ <Modal
45
+ visible={visible}
46
+ mobileGutter
47
+ onOverlayClick={() => {
48
+ setVisible(false);
49
+ }}
50
+ >
51
+ <Dialog
52
+ {...args}
53
+ onDismissClick={() => {
54
+ action('dismiss click');
55
+ setVisible(!visible);
56
+ }}
57
+ />
58
+ </Modal>
59
+ </div>
60
+ );
61
+ };
62
+
63
+ export const _Dialog = Template.bind({});
64
+
65
+ export default meta;
@@ -0,0 +1,29 @@
1
+ import { Button, ButtonProps } from '@components/Button';
2
+ import { Image } from '@components/Image';
3
+ import classNames from 'classnames';
4
+
5
+ import { Card } from '..';
6
+
7
+ export interface Props extends Partial<Pick<HTMLElement, 'className' | 'id'>> {
8
+ title: string;
9
+ paragraph: string;
10
+ dismissText: string;
11
+ onDismissClick?: () => void;
12
+ primaryCta?: ButtonProps;
13
+ secondaryCta?: ButtonProps;
14
+ imageUrl?: string;
15
+ }
16
+
17
+ export const Dialog = ({
18
+ id,
19
+ className,
20
+ title,
21
+ paragraph,
22
+ dismissText,
23
+ onDismissClick,
24
+ primaryCta,
25
+ secondaryCta,
26
+ imageUrl,
27
+ }: Props) => {
28
+ return <Card className="max-w-[600px]"></Card>;
29
+ };
@@ -0,0 +1,22 @@
1
+ import { Dropdown } from './';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta = {
5
+ title: 'V2Components/Dropdown',
6
+ component: Dropdown,
7
+ args: {
8
+ children: [
9
+ <Dropdown.Label>Label</Dropdown.Label>,
10
+ <Dropdown.List>
11
+ <Dropdown.Item>Item 1</Dropdown.Item>
12
+ <Dropdown.Item>Item 2</Dropdown.Item>
13
+ </Dropdown.List>,
14
+ ],
15
+ },
16
+ } satisfies Meta<typeof Dropdown>;
17
+
18
+ export default meta;
19
+
20
+ type Story = StoryObj<typeof Dropdown>;
21
+
22
+ export const Default: Story = {};