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,41 @@
1
+ import { Button, ButtonProps } from '@components/Button';
2
+ import { Input, InputContextProps } from '@components/Input';
3
+ import classNames from 'classnames';
4
+
5
+ import { Card } from '..';
6
+
7
+ export interface Props {
8
+ id?: string;
9
+ className?: string;
10
+ onSubmit?: () => void;
11
+ ref?: string;
12
+ components?: Array<InputContextProps & ButtonProps & { htmlType: string }>;
13
+ }
14
+
15
+ export const Form = ({ id, className, onSubmit, ref, components }: Props) => {
16
+ return (
17
+ <Card>
18
+ <form id={id} ref={ref} className={className} onSubmit={onSubmit}>
19
+ {components?.map((component, i) => {
20
+ if (component?.htmlType === 'Input') {
21
+ return (
22
+ <Input
23
+ key={`input_${i + 0}`}
24
+ label={component?.label}
25
+ placeholder={component?.placeholder}
26
+ type={component?.type}
27
+ name={component?.name}
28
+ />
29
+ );
30
+ } else if (component.htmlType === 'Button') {
31
+ return (
32
+ <Button key={`button_${i + 0}`} onClick={component?.onClick}>
33
+ <Button.Label></Button.Label>
34
+ </Button>
35
+ );
36
+ } else return <></>;
37
+ })}
38
+ </form>
39
+ </Card>
40
+ );
41
+ };
@@ -0,0 +1,39 @@
1
+ import { Gallery } from './';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta = {
5
+ title: 'V2Components/Gallery',
6
+ component: Gallery,
7
+ args: {
8
+ className: 'grid-cols-7',
9
+ children: [
10
+ <Gallery.Item src="https://picsum.photos/200/200" />,
11
+ <Gallery.Item src="https://picsum.photos/201/200" />,
12
+ <Gallery.Item src="https://picsum.photos/202/200" />,
13
+ <Gallery.Item src="https://picsum.photos/203/200" />,
14
+ <Gallery.Item src="https://picsum.photos/204/200" />,
15
+ <Gallery.Item src="https://picsum.photos/205/200" />,
16
+ <Gallery.Item src="https://picsum.photos/206/200" />,
17
+ <Gallery.Item src="https://picsum.photos/207/200" />,
18
+ <Gallery.Item src="https://picsum.photos/208/200" />,
19
+ <Gallery.Item src="https://picsum.photos/209/200" />,
20
+ <Gallery.Item src="https://picsum.photos/210/200" />,
21
+ <Gallery.Item src="https://picsum.photos/200/201" />,
22
+ <Gallery.Item src="https://picsum.photos/200/202" />,
23
+ <Gallery.Item src="https://picsum.photos/200/203" />,
24
+ <Gallery.Item src="https://picsum.photos/200/204" />,
25
+ <Gallery.Item src="https://picsum.photos/200/205" />,
26
+ <Gallery.Item src="https://picsum.photos/200/206" />,
27
+ <Gallery.Item src="https://picsum.photos/200/207" />,
28
+ <Gallery.Item src="https://picsum.photos/200/208" />,
29
+ <Gallery.Item src="https://picsum.photos/200/209" />,
30
+ <Gallery.Item src="https://picsum.photos/200/210" />,
31
+ ],
32
+ },
33
+ } satisfies Meta<typeof Gallery>;
34
+
35
+ export default meta;
36
+
37
+ type Story = StoryObj<typeof Gallery>;
38
+
39
+ export const Default: Story = {};
@@ -0,0 +1,31 @@
1
+ import { forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import { Image, ImageProps } from '@components/Image';
4
+ import clsx from 'clsx';
5
+
6
+ const GalleryComponent = forwardRef<
7
+ HTMLDivElement,
8
+ HTMLAttributes<HTMLDivElement>
9
+ >(({ className, children, ...props }, ref) => {
10
+ return (
11
+ <div className={clsx('grid', className)} ref={ref} {...props}>
12
+ {children}
13
+ </div>
14
+ );
15
+ });
16
+
17
+ const GalleryItem = forwardRef<
18
+ HTMLDivElement,
19
+ HTMLAttributes<HTMLDivElement> & ImageProps
20
+ >(({ src }) => {
21
+ return <Image className="aspect-square w-full" src={src} />;
22
+ });
23
+
24
+ GalleryComponent.displayName = 'Gallery';
25
+ GalleryItem.displayName = 'Gallery.Item';
26
+
27
+ const Gallery = Object.assign(GalleryComponent, {
28
+ Item: GalleryItem,
29
+ });
30
+
31
+ export { Gallery };
@@ -0,0 +1,16 @@
1
+ import { Greeting } from './';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta = {
5
+ title: 'V2Components/Greeting',
6
+ component: Greeting,
7
+ args: {
8
+ morningMessage: 'What a beautiful morning it is today',
9
+ },
10
+ } satisfies Meta<typeof Greeting>;
11
+
12
+ export default meta;
13
+
14
+ type Story = StoryObj<typeof Greeting>;
15
+
16
+ export const Default: Story = {};
@@ -0,0 +1,49 @@
1
+ import { forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import { DateTime } from 'luxon';
4
+
5
+ export interface GreetingProps {
6
+ morningMessage?: string;
7
+ afternoonMessage?: string;
8
+ eveningMessage?: string;
9
+ }
10
+
11
+ const GreetingComponent = forwardRef<
12
+ HTMLDivElement,
13
+ HTMLAttributes<HTMLParagraphElement> & GreetingProps
14
+ >(
15
+ (
16
+ {
17
+ morningMessage = 'Good morning',
18
+ afternoonMessage = 'Good afternoon',
19
+ eveningMessage = 'Good evening',
20
+ ...props
21
+ },
22
+ ref,
23
+ ) => {
24
+ const now = DateTime.now();
25
+ const midday = DateTime.now().set({ hour: 12, minute: 0, second: 0 });
26
+ const evening = DateTime.now().set({ hour: 17, minute: 0, second: 0 });
27
+
28
+ let message = '';
29
+ if (now < midday) {
30
+ message = morningMessage;
31
+ } else if (now >= midday && now < evening) {
32
+ message = afternoonMessage;
33
+ } else if (now >= evening) {
34
+ message = eveningMessage;
35
+ }
36
+
37
+ return (
38
+ <p {...props} ref={ref}>
39
+ {message}
40
+ </p>
41
+ );
42
+ },
43
+ );
44
+
45
+ GreetingComponent.displayName = 'Greeting';
46
+
47
+ const Greeting = Object.assign(GreetingComponent);
48
+
49
+ export { Greeting };
@@ -0,0 +1,14 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { HamburgerIcon } from '.';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Hamburger Icon',
7
+ component: HamburgerIcon,
8
+ } satisfies Meta<typeof HamburgerIcon>;
9
+
10
+ export default meta;
11
+
12
+ type Story = StoryObj<typeof HamburgerIcon>;
13
+
14
+ export const Default: Story = {};
@@ -0,0 +1,75 @@
1
+ import { forwardRef, HTMLAttributes, useState } from 'react';
2
+
3
+ import { Button, ButtonProps } from '@components/Button';
4
+ import clsx from 'clsx';
5
+
6
+ const HamburgerIconComponent = forwardRef<
7
+ HTMLButtonElement,
8
+ HTMLAttributes<HTMLButtonElement> & ButtonProps
9
+ >(({ className, onClick, variant = 'ghost' }, ref) => {
10
+ const [opened, setOpened] = useState(false);
11
+
12
+ const toggleOpened = (e: any): void => {
13
+ setOpened(!opened);
14
+ onClick?.(e);
15
+ };
16
+ return (
17
+ <Button
18
+ className={clsx('stroke-white', className)}
19
+ ref={ref}
20
+ onClick={(e) => {
21
+ toggleOpened(e);
22
+ }}
23
+ variant={variant}
24
+ >
25
+ <svg
26
+ className={clsx(
27
+ 'transition-backgroundColor mx-auto transform overflow-visible duration-500',
28
+ {
29
+ 'fill-button-primary-text': variant === 'primary',
30
+ 'fill-button-secondary-text': variant === 'secondary',
31
+ 'fill-button-ghost-text': variant === 'ghost',
32
+ },
33
+ )}
34
+ width="24"
35
+ height="24"
36
+ viewBox="0 0 24 15"
37
+ xmlns="http://www.w3.org/2000/svg"
38
+ >
39
+ <path
40
+ className={clsx(
41
+ 'origin-top-left transition-transform duration-200 ease-linear',
42
+ {
43
+ 'origin-top-left -translate-y-0.5 translate-x-1 rotate-45':
44
+ opened,
45
+ },
46
+ )}
47
+ d="M0 1.5C0 0.947715 0.447715 0.5 1 0.5H21C21.5523 0.5 22 0.947715 22 1.5C22 2.05228 21.5523 2.5 21 2.5H1C0.447716 2.5 0 2.05228 0 1.5Z"
48
+ />
49
+ <path
50
+ className={clsx('transition-opacity duration-200 ease-linear', {
51
+ 'opacity-0': opened,
52
+ 'opacity-100': !opened,
53
+ })}
54
+ d="M0 7.5C0 6.94772 0.447715 6.5 1 6.5H21C21.5523 6.5 22 6.94772 22 7.5C22 8.05228 21.5523 8.5 21 8.5H1C0.447716 8.5 0 8.05228 0 7.5Z"
55
+ />
56
+ <path
57
+ className={clsx(
58
+ 'origin-bottom-left transition-transform duration-200 ease-linear',
59
+ {
60
+ 'origin-bottom-left translate-x-1 translate-y-px -rotate-45':
61
+ opened,
62
+ },
63
+ )}
64
+ d="M0 13.5C0 12.9477 0.447715 12.5 1 12.5H21C21.5523 12.5 22 12.9477 22 13.5C22 14.0523 21.5523 14.5 21 14.5H1C0.447716 14.5 0 14.0523 0 13.5Z"
65
+ />
66
+ </svg>
67
+ </Button>
68
+ );
69
+ });
70
+
71
+ HamburgerIconComponent.displayName = 'HamburgerIcon';
72
+
73
+ const HamburgerIcon = Object.assign(HamburgerIconComponent);
74
+
75
+ export { HamburgerIcon };
@@ -0,0 +1,41 @@
1
+ import { Icon } from './';
2
+ import { faHeart, faSpinner } from '@fortawesome/fontawesome-free-solid';
3
+ import { Meta, StoryObj } from '@storybook/react';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Icon',
7
+ component: Icon,
8
+ args: {
9
+ icon: faHeart,
10
+ },
11
+ } satisfies Meta<typeof Icon>;
12
+
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof Icon>;
16
+
17
+ export const Default: Story = {};
18
+
19
+ export const Colour: Story = {
20
+ ...Default,
21
+ args: {
22
+ ...Default.args,
23
+ className: 'text-error-light',
24
+ },
25
+ };
26
+
27
+ export const Size: Story = {
28
+ ...Default,
29
+ args: {
30
+ ...Default.args,
31
+ size: '2x',
32
+ },
33
+ };
34
+
35
+ export const Annimation: Story = {
36
+ ...Default,
37
+ args: {
38
+ icon: faSpinner,
39
+ className: 'animate-spin',
40
+ },
41
+ };
@@ -0,0 +1,33 @@
1
+ import { forwardRef } from 'react';
2
+
3
+ import { IconDefinition } from '@fortawesome/fontawesome-free-solid';
4
+ import { IconProp, SizeProp } from '@fortawesome/fontawesome-svg-core';
5
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
+
7
+ export interface IconProps {
8
+ className?: string;
9
+ icon: IconProp | IconDefinition;
10
+ size: SizeProp;
11
+ }
12
+
13
+ const IconComponent = forwardRef(
14
+ (props: IconProps, ref: React.Ref<SVGSVGElement>) => {
15
+ const { className, size, icon, ...rest } = props;
16
+
17
+ return (
18
+ <FontAwesomeIcon
19
+ className={className}
20
+ ref={ref}
21
+ icon={icon as IconProp}
22
+ size={size}
23
+ {...rest}
24
+ />
25
+ );
26
+ },
27
+ );
28
+
29
+ IconComponent.displayName = 'Icon';
30
+
31
+ const Icon = Object.assign(IconComponent);
32
+
33
+ export { Icon };
@@ -0,0 +1,17 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { Image } from '.';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Image',
7
+ component: Image,
8
+ args: {
9
+ src: 'https://picsum.photos/400/400',
10
+ },
11
+ } satisfies Meta<typeof Image>;
12
+
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof Image>;
16
+
17
+ export const Default: Story = {};
@@ -0,0 +1,25 @@
1
+ import { forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ export interface ImageProps {
6
+ src: string;
7
+ }
8
+
9
+ const ImageComponent = forwardRef<
10
+ HTMLImageElement,
11
+ HTMLAttributes<HTMLImageElement> & ImageProps
12
+ >(({ className, src, ...props }, ref) => (
13
+ <img
14
+ className={clsx('h-full w-full', className)}
15
+ ref={ref}
16
+ src={src}
17
+ {...props}
18
+ />
19
+ ));
20
+
21
+ ImageComponent.displayName = 'Image';
22
+
23
+ const Image = Object.assign(ImageComponent);
24
+
25
+ export { Image };
@@ -0,0 +1,29 @@
1
+ import { type Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { ImageCard } from '.';
4
+
5
+ const meta = {
6
+ title: 'V2Components/ImageCard',
7
+ component: ImageCard,
8
+ args: {
9
+ children: [
10
+ <ImageCard.Image src="https://picsum.photos/500/300" />,
11
+ <ImageCard.Content>
12
+ <ImageCard.Title>This is a title</ImageCard.Title>
13
+ <ImageCard.Subtitle>This is a subtitle</ImageCard.Subtitle>
14
+ <ImageCard.Text>
15
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eaque, est
16
+ iusto. Veniam ullam impedit expedita perferendis cumque culpa saepe
17
+ magni velit quia nemo suscipit, reiciendis ad libero, voluptate
18
+ incidunt fugiat?
19
+ </ImageCard.Text>
20
+ </ImageCard.Content>,
21
+ ],
22
+ },
23
+ } satisfies Meta<typeof ImageCard>;
24
+
25
+ export default meta;
26
+
27
+ type Story = StoryObj<typeof ImageCard>;
28
+
29
+ export const Default: Story = {};
@@ -0,0 +1,75 @@
1
+ import { forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import { Image, ImageProps } from '@components/Image';
4
+ import clsx from 'clsx';
5
+
6
+ const ImageCardComponent = forwardRef<
7
+ HTMLDivElement,
8
+ HTMLAttributes<HTMLDivElement>
9
+ >(({ className, children, ...props }, ref) => {
10
+ return (
11
+ <div
12
+ className={clsx(
13
+ 'grid max-w-96 overflow-hidden rounded-xl bg-white drop-shadow',
14
+ className,
15
+ )}
16
+ ref={ref}
17
+ {...props}
18
+ >
19
+ {children}
20
+ </div>
21
+ );
22
+ });
23
+
24
+ const ImageCardImage = forwardRef<
25
+ HTMLImageElement,
26
+ HTMLAttributes<ImageProps> & ImageProps
27
+ >(({ src, ...props }) => {
28
+ return (
29
+ <div className="h-64">
30
+ <Image src={src} {...props} />
31
+ </div>
32
+ );
33
+ });
34
+
35
+ const ImageCardContent = forwardRef<
36
+ HTMLDivElement,
37
+ HTMLAttributes<HTMLDivElement>
38
+ >(({ children, ...props }, ref) => (
39
+ <div className="px-2 pb-4 pt-2" ref={ref} {...props}>
40
+ {children}
41
+ </div>
42
+ ));
43
+
44
+ const ImageCardTitle = forwardRef<
45
+ HTMLParagraphElement,
46
+ HTMLAttributes<HTMLParagraphElement>
47
+ >(({ ...props }, ref) => <p className="text-lg" ref={ref} {...props} />);
48
+
49
+ const ImageCardSubtitle = forwardRef<
50
+ HTMLParagraphElement,
51
+ HTMLAttributes<HTMLParagraphElement>
52
+ >(({ ...props }, ref) => <p className="text-sm" ref={ref} {...props} />);
53
+
54
+ const ImageCardText = forwardRef<
55
+ HTMLParagraphElement,
56
+ HTMLAttributes<HTMLParagraphElement>
57
+ >(({ ...props }, ref) => <p className="text-md pt-2" ref={ref} {...props} />);
58
+
59
+ ImageCardComponent.displayName = 'ImageCard';
60
+
61
+ ImageCardImage.displayName = 'ImageCard.Image';
62
+ ImageCardTitle.displayName = 'ImageCard.Title';
63
+ ImageCardSubtitle.displayName = 'ImageCard.Subtitle';
64
+ ImageCardContent.displayName = 'ImageCard.Content';
65
+ ImageCardText.displayName = 'ImageCard.Text';
66
+
67
+ const ImageCard = Object.assign(ImageCardComponent, {
68
+ Image: ImageCardImage,
69
+ Content: ImageCardContent,
70
+ Title: ImageCardTitle,
71
+ Subtitle: ImageCardSubtitle,
72
+ Text: ImageCardText,
73
+ });
74
+
75
+ export { ImageCard };
@@ -0,0 +1,25 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { Input } from '.';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Input',
7
+ component: Input,
8
+ args: {
9
+ placeholder: 'This is a placeholder',
10
+ errors: ['tyhj', 'sdfghjk'],
11
+ children: [
12
+ <Input.Item>
13
+ <Input.Label required>This is a label</Input.Label>
14
+ <Input.Box />
15
+ <Input.Validation />
16
+ </Input.Item>,
17
+ ],
18
+ },
19
+ } satisfies Meta<typeof Input>;
20
+
21
+ export default meta;
22
+
23
+ type Story = StoryObj<typeof Input>;
24
+
25
+ export const Default: Story = {};
@@ -0,0 +1,139 @@
1
+ import {
2
+ createContext,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ useContext,
6
+ useMemo,
7
+ useRef,
8
+ } from 'react';
9
+
10
+ import clsx from 'clsx';
11
+
12
+ export interface InputContextProps {
13
+ autoComplete?: string;
14
+ disabled?: boolean;
15
+ formId?: string;
16
+ height?: string;
17
+ maxLength?: number;
18
+ minLength?: number;
19
+ pattern?: string;
20
+ required?: boolean;
21
+ readOnly?: boolean;
22
+ label?: string;
23
+ type?: string;
24
+ name?: string;
25
+ placeholder?: string;
26
+ withValidation?: boolean;
27
+ onChange?: (e: any) => void;
28
+ onBlur?: () => void;
29
+ onFocus?: () => void;
30
+ onClick?: () => void;
31
+ errors?: string[];
32
+ value?: string;
33
+ }
34
+
35
+ const InputContext = createContext<InputContextProps | null>(null);
36
+
37
+ const InputComponent = forwardRef<
38
+ HTMLDivElement,
39
+ HTMLAttributes<HTMLDivElement> & InputContextProps
40
+ >(({ children, errors, placeholder, ...props }, ref) => {
41
+ const state = useMemo(
42
+ () => ({
43
+ errors,
44
+ placeholder,
45
+ ...props,
46
+ }),
47
+ [errors, props],
48
+ );
49
+ return (
50
+ <InputContext.Provider value={state}>
51
+ <div ref={ref}>{children}</div>
52
+ </InputContext.Provider>
53
+ );
54
+ });
55
+
56
+ const InputItem = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(
57
+ ({ children, ...props }, ref) => {
58
+ const btnRef = useRef<any>(null);
59
+ return (
60
+ <div
61
+ className="mt-4 w-full cursor-pointer bg-white"
62
+ onClick={() => btnRef.current?.focus()}
63
+ ref={ref}
64
+ {...props}
65
+ >
66
+ {children}
67
+ </div>
68
+ );
69
+ },
70
+ );
71
+
72
+ const InputLabel = forwardRef<
73
+ HTMLDivElement,
74
+ HTMLAttributes<HTMLDivElement> & { required?: boolean }
75
+ >(({ children, required = false }, ref) => {
76
+ return (
77
+ <div
78
+ ref={ref}
79
+ className="font-regular absolute -mt-3 ml-3 flex items-center rounded-2xl bg-white px-1 text-sm"
80
+ >
81
+ <p>{children}</p>
82
+ {required && (
83
+ <p className="font-semiBold text-lg text-error-default">&nbsp;*</p>
84
+ )}
85
+ </div>
86
+ );
87
+ });
88
+
89
+ const InputBox = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(
90
+ ({ ...props }) => {
91
+ const { errors, placeholder } = useContext(InputContext) || {};
92
+
93
+ return (
94
+ <input
95
+ placeholder={placeholder}
96
+ className={clsx(
97
+ 'text-ink text-md w-full cursor-pointer rounded-md border border-black bg-white py-2 pl-4',
98
+ {
99
+ 'border-error border-2': errors != null,
100
+ },
101
+ )}
102
+ {...props}
103
+ />
104
+ );
105
+ },
106
+ );
107
+
108
+ const InputValidation = forwardRef<
109
+ HTMLDivElement,
110
+ HTMLAttributes<HTMLDivElement>
111
+ >(({ children, ...props }, ref) => {
112
+ const { errors } = useContext(InputContext) || {};
113
+ return (
114
+ <div
115
+ ref={ref}
116
+ className="font-regular gap-y-2 text-sm text-error-default"
117
+ {...props}
118
+ >
119
+ {errors?.map((error, i) => {
120
+ return <p key={`error-msg-${i + 1}`}>{error}</p>;
121
+ })}
122
+ </div>
123
+ );
124
+ });
125
+
126
+ InputComponent.displayName = 'Input';
127
+ InputItem.displayName = 'Input.Item';
128
+ InputLabel.displayName = 'Input.Label';
129
+ InputBox.displayName = 'Input.Box';
130
+ InputValidation.displayName = 'Input.Validation';
131
+
132
+ const Input = Object.assign(InputComponent, {
133
+ Item: InputItem,
134
+ Label: InputLabel,
135
+ Box: InputBox,
136
+ Validation: InputValidation,
137
+ });
138
+
139
+ export { Input };
@@ -2,7 +2,7 @@ import { action } from '@storybook/addon-actions';
2
2
  import { Meta, StoryObj } from '@storybook/react';
3
3
  import { idAndClassName } from '@utils/controls';
4
4
 
5
- import MenuButton from '.';
5
+ import { MenuButton } from '.';
6
6
 
7
7
  const meta = {
8
8
  title: 'Components/Menu Button',
@@ -41,6 +41,6 @@ const meta = {
41
41
  };
42
42
  export default meta;
43
43
 
44
- type Story = StoryObj<typeof meta>;
44
+ type Story = StoryObj<typeof MenuButton>;
45
45
 
46
46
  export const Default: Story = {};