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,66 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { Dropdown } from '@components/Dropdown';
4
+ import { Image } from '@components/Image';
5
+ import { type Colours } from '@utils/controls';
6
+ import classNames from 'classnames';
7
+
8
+ export interface Props {
9
+ id?: string;
10
+ className?: string;
11
+ backgroundColour?: Colours;
12
+
13
+ menuItems: Array<{ name: string; href: string }>;
14
+ onClick?: React.MouseEventHandler;
15
+ }
16
+
17
+ export const MenuButton = ({
18
+ id,
19
+ className,
20
+ backgroundColour = 'white',
21
+
22
+ menuItems,
23
+ onClick,
24
+ }: Props) => {
25
+ const [showMenu, setShowMenu] = useState(false);
26
+ const classList = classNames(
27
+ className,
28
+ 'h-[45px] w-[80px] overflow-hidden rounded-full border-2 border-lightest-grey my-auto flex cursor-pointer justify-between pl-2 text-center hover:shadow-md',
29
+ );
30
+
31
+ if (!menuItems) return <></>;
32
+
33
+ return (
34
+ <div>
35
+ <div
36
+ id={id}
37
+ className={classList}
38
+ onClick={() => {
39
+ setShowMenu(!showMenu);
40
+ }}
41
+ >
42
+ <div className="mx-auto my-auto" onClick={(e) => onClick?.(e)}>
43
+ <svg
44
+ width="18"
45
+ height="24"
46
+ viewBox="0 0 24 15"
47
+ xmlns="http://www.w3.org/2000/svg"
48
+ >
49
+ <path 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" />
50
+ <path 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" />
51
+ <path 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" />
52
+ </svg>
53
+ </div>
54
+ <Image
55
+ src="https://picsum.photos/300/300"
56
+ className="mx-auto my-auto h-8 w-8 rounded-full object-contain"
57
+ />
58
+ </div>
59
+ {showMenu && (
60
+ <div>
61
+ <Dropdown />
62
+ </div>
63
+ )}
64
+ </div>
65
+ );
66
+ };
@@ -1,12 +1,11 @@
1
1
  import React, { useState } from 'react';
2
2
 
3
- import { type Meta } from '@storybook/react';
4
3
  import classNames from 'classnames';
5
4
 
6
- import Modal from '.';
5
+ import { Modal } from '.';
7
6
 
8
7
  const meta = {
9
- title: 'Trepur Components/molecules/Modal',
8
+ title: 'Components/Modal',
10
9
  component: Modal,
11
10
  parameters: {
12
11
  docs: {
@@ -44,10 +43,7 @@ const meta = {
44
43
  args: {
45
44
  visible: true,
46
45
  children: (
47
- <div
48
- style={{ maxWidth: '609px' }}
49
- className={classNames('theme-local rounded-2xl bg-white p-4')}
50
- >
46
+ <div style={{ maxWidth: '609px' }} className="rounded-2xl bg-white p-4">
51
47
  <p className="py-4">
52
48
  This is a child of the modal component, add any child to this
53
49
  component to show in this location.
@@ -64,7 +60,7 @@ const meta = {
64
60
  },
65
61
  };
66
62
 
67
- const Template = (args): React.ReactElement => {
63
+ const Template = (args: any): React.ReactElement => {
68
64
  const [visible, setVisible] = useState<boolean>(false);
69
65
 
70
66
  return (
@@ -2,8 +2,6 @@ import React, { useState, useEffect } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
5
-
6
-
7
5
  export interface Props extends Partial<Pick<HTMLElement, 'className' | 'id'>> {
8
6
  children?: React.ReactNode;
9
7
  visible?: boolean;
@@ -12,7 +10,7 @@ export interface Props extends Partial<Pick<HTMLElement, 'className' | 'id'>> {
12
10
  animationStyle?: 'fade' | 'slideBottom';
13
11
  }
14
12
 
15
- const Modal = ({
13
+ export const Modal = ({
16
14
  id,
17
15
  className,
18
16
  children,
@@ -20,7 +18,7 @@ const Modal = ({
20
18
  onOverlayClick,
21
19
  mobileGutter,
22
20
  animationStyle = 'fade',
23
- }: Props): JSX.Element => {
21
+ }: Props) => {
24
22
  const [hidden, setHidden] = useState(!visible);
25
23
  const [showModal, setShowModal] = useState(visible);
26
24
 
@@ -46,19 +44,20 @@ const Modal = ({
46
44
 
47
45
  const classList = classNames(
48
46
  {
49
- [style.visible]: !hidden && showModal,
47
+ 'opacity-100': !hidden && showModal,
50
48
  },
51
- style.overlay,
49
+ 'block h-screen w-screen fixed right-0 top-0 z-50 opacity-0 transition-opacity duration-300 ease-linear ease-out',
52
50
  className,
53
51
  );
54
52
 
55
53
  const childrenClassList = classNames(
56
54
  {
57
- [style.visible]: showModal,
58
- [style.mobileGutter]: mobileGutter,
59
- [style.slideBottom]: animationStyle === 'slideBottom',
55
+ 'opacity-100': showModal,
56
+ 'px-4 md:px-0': mobileGutter,
57
+ 'transition-transform duration-300 ease-linear ease-out opacity-100 translate-y-full':
58
+ animationStyle === 'slideBottom',
60
59
  },
61
- style.children,
60
+ ' mx-auto flex w-full md:w-auto fixed left-1/2 top-1/2 z-50 block -translate-x-1/2 -translate-y-1/2 transform opacity-0 transition-opacity duration-300 ease-linear ease-out',
62
61
  );
63
62
 
64
63
  if (hidden) return <></>;
@@ -70,5 +69,3 @@ const Modal = ({
70
69
  </>
71
70
  );
72
71
  };
73
-
74
- export default Modal;
@@ -0,0 +1,80 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { Nav, NavItem } from '..';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Nav',
7
+ component: Nav,
8
+ parameters: {
9
+ docs: {
10
+ story: { iframe: '1300px' },
11
+ },
12
+ },
13
+ args: {
14
+ children: [
15
+ <Nav.Header logo="https://picsum.photos/300/300">
16
+ <Nav.DesktopHeader>
17
+ <Nav.LeftSection>
18
+ <Nav.Folder label="about">
19
+ <NavItem href="">
20
+ <NavItem.Label>Item 1.1</NavItem.Label>
21
+ </NavItem>
22
+ <NavItem href="">
23
+ <NavItem.Label>Item 1.2</NavItem.Label>
24
+ </NavItem>
25
+ </Nav.Folder>
26
+ <NavItem href="">
27
+ <NavItem.Label>Item 2</NavItem.Label>
28
+ </NavItem>
29
+ <NavItem href="">
30
+ <NavItem.Label>Item 3</NavItem.Label>
31
+ </NavItem>
32
+ </Nav.LeftSection>
33
+ <Nav.Logo src="https://picsum.photos/300/300" />
34
+ <Nav.RightSection>
35
+ <NavItem href="">
36
+ <NavItem.Label>Item 4</NavItem.Label>
37
+ </NavItem>
38
+ <NavItem href="">
39
+ <NavItem.Label>Item 5</NavItem.Label>
40
+ </NavItem>
41
+ <NavItem href="">
42
+ <NavItem.Label>Item 6</NavItem.Label>
43
+ </NavItem>
44
+ </Nav.RightSection>
45
+ </Nav.DesktopHeader>
46
+ </Nav.Header>,
47
+ <Nav.Body>
48
+ <Nav.Folder label="about">
49
+ <NavItem href="">
50
+ <NavItem.Label>Item 1.1</NavItem.Label>
51
+ </NavItem>
52
+ <NavItem href="">
53
+ <NavItem.Label>Item 1.2</NavItem.Label>
54
+ </NavItem>
55
+ </Nav.Folder>
56
+ <NavItem href="">
57
+ <NavItem.Label>Item 2</NavItem.Label>
58
+ </NavItem>
59
+ <NavItem href="">
60
+ <NavItem.Label>Item 3</NavItem.Label>
61
+ </NavItem>
62
+ <NavItem href="">
63
+ <NavItem.Label>Item 4</NavItem.Label>
64
+ </NavItem>
65
+ <NavItem href="">
66
+ <NavItem.Label>Item 5</NavItem.Label>
67
+ </NavItem>
68
+ <NavItem href="">
69
+ <NavItem.Label>Item 6</NavItem.Label>
70
+ </NavItem>
71
+ </Nav.Body>,
72
+ ],
73
+ },
74
+ } satisfies Meta<typeof Nav>;
75
+
76
+ export default meta;
77
+
78
+ type Story = StoryObj<typeof Nav>;
79
+
80
+ export const Default: Story = {};
@@ -0,0 +1,171 @@
1
+ import {
2
+ createContext,
3
+ forwardRef,
4
+ HTMLAttributes,
5
+ useContext,
6
+ useMemo,
7
+ useRef,
8
+ useState,
9
+ } from 'react';
10
+
11
+ import { useClickOutside } from '@components/Dropdown/utils';
12
+ import { HamburgerIcon } from '@components/HamburgerIcon';
13
+ import { faChevronDown } from '@fortawesome/fontawesome-free-solid';
14
+ import clsx from 'clsx';
15
+
16
+ import { Icon, NavItem } from '..';
17
+ import { ImageProps } from '../Image';
18
+
19
+ export interface NavContextProps {
20
+ expanded?: boolean;
21
+ setExpanded?: (val: boolean) => void;
22
+ }
23
+
24
+ const NavContext = createContext<NavContextProps | null>(null);
25
+
26
+ const NavComponent = forwardRef<
27
+ HTMLDivElement,
28
+ HTMLAttributes<HTMLDivElement> & NavContextProps
29
+ >(({ children }, ref) => {
30
+ const [expanded, setExpanded] = useState(false);
31
+
32
+ const state = useMemo(
33
+ () => ({
34
+ expanded,
35
+ setExpanded,
36
+ }),
37
+ [expanded, setExpanded],
38
+ );
39
+
40
+ return (
41
+ <NavContext.Provider value={state}>
42
+ <div>{children}</div>
43
+ </NavContext.Provider>
44
+ );
45
+ });
46
+
47
+ const NavHeader = forwardRef<
48
+ HTMLDivElement,
49
+ HTMLAttributes<HTMLDivElement> & { logo: string }
50
+ >(({ children, logo }, ref) => {
51
+ const { setExpanded, expanded } = useContext(NavContext) || {};
52
+ return (
53
+ <div ref={ref} className={clsx('relative h-20 w-full bg-nav px-2 py-2')}>
54
+ <div className="flex h-full md:hidden">
55
+ <div className="my-auto">
56
+ <HamburgerIcon
57
+ onClick={() => setExpanded?.(!expanded)}
58
+ className="aspect-square"
59
+ />
60
+ </div>
61
+ <div className="absolute left-1/2 top-full w-28 -translate-x-1/2 -translate-y-1/2 transform">
62
+ <NavLogo src={logo} />
63
+ </div>
64
+ </div>
65
+ {children}
66
+ </div>
67
+ );
68
+ });
69
+
70
+ const NavBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(
71
+ ({ children }, ref) => {
72
+ const { expanded } = useContext(NavContext) || {};
73
+ if (!expanded) return <></>;
74
+ return (
75
+ <div className="h-screen bg-nav px-8 pb-12 pt-20 md:hidden">
76
+ <div className="grid grid-cols-1 gap-4 md:hidden">{children}</div>
77
+ </div>
78
+ );
79
+ },
80
+ );
81
+
82
+ const NavDesktopHeader = forwardRef<
83
+ HTMLDivElement,
84
+ HTMLAttributes<HTMLDivElement>
85
+ >(({ children }, ref) => {
86
+ return <div className="hidden grid-cols-7 gap-8 md:grid">{children}</div>;
87
+ });
88
+
89
+ const NavLeftSection = forwardRef<
90
+ HTMLDivElement,
91
+ HTMLAttributes<HTMLDivElement>
92
+ >(({ children }, ref) => {
93
+ return (
94
+ <div className="col-span-3 my-4 justify-between text-center md:flex">
95
+ {children}
96
+ </div>
97
+ );
98
+ });
99
+
100
+ const NavFolder = forwardRef<
101
+ HTMLDivElement,
102
+ HTMLAttributes<HTMLDivElement> & { label: string }
103
+ >(({ label, children }) => {
104
+ const [expanded, setExpanded] = useState(false);
105
+ const ref = useRef<HTMLDivElement>(null);
106
+
107
+ return (
108
+ <div
109
+ ref={ref}
110
+ onClick={() => setExpanded(true)}
111
+ onMouseLeave={() => setExpanded(false)}
112
+ className="mx-auto text-xl font-normal tracking-wider text-white hover:cursor-pointer"
113
+ >
114
+ <div className="flex items-center gap-2">
115
+ <p>{label}</p>
116
+ <Icon icon={faChevronDown} />
117
+ </div>
118
+ {expanded && (
119
+ <div className="mb:pb-2 grid grid-cols-1 bg-nav md:gap-5 md:pt-8">
120
+ {children}
121
+ </div>
122
+ )}
123
+ </div>
124
+ );
125
+ });
126
+
127
+ const NavLogo = forwardRef<
128
+ HTMLImageElement,
129
+ HTMLAttributes<HTMLImageElement> & ImageProps
130
+ >(({ className, src, ...props }, ref) => (
131
+ <div className="flex-none">
132
+ <img
133
+ className={clsx('rounded-full', className)}
134
+ ref={ref}
135
+ src={src}
136
+ {...props}
137
+ />
138
+ </div>
139
+ ));
140
+
141
+ const NavRightSection = forwardRef<
142
+ HTMLDivElement,
143
+ HTMLAttributes<HTMLDivElement>
144
+ >(({ children }, ref) => {
145
+ return (
146
+ <div className="col-span-3 my-4 justify-between text-center md:flex">
147
+ {children}
148
+ </div>
149
+ );
150
+ });
151
+
152
+ NavComponent.displayName = 'Nav';
153
+ NavHeader.displayName = 'Nav.Header';
154
+ NavDesktopHeader.displayName = 'Nav.DesktopHeader';
155
+ NavLogo.displayName = 'Nav.Logo';
156
+ NavLeftSection.displayName = 'Nav.LeftSection';
157
+ NavRightSection.displayName = 'Nav.RightSection';
158
+ NavBody.displayName = 'Nav.Body';
159
+ NavFolder.displayName = 'Nav.Folder';
160
+
161
+ const Nav = Object.assign(NavComponent, {
162
+ Header: NavHeader,
163
+ DesktopHeader: NavDesktopHeader,
164
+ LeftSection: NavLeftSection,
165
+ RightSection: NavRightSection,
166
+ Logo: NavLogo,
167
+ Body: NavBody,
168
+ Folder: NavFolder,
169
+ });
170
+
171
+ export { Nav };
@@ -0,0 +1,17 @@
1
+ import { NavItem } from './';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+
4
+ const meta = {
5
+ title: 'V2Components/Nav Item',
6
+ component: NavItem,
7
+ args: {
8
+ className: 'text-primary after:border-primary',
9
+ children: [<NavItem.Label>Nav Item 1</NavItem.Label>],
10
+ },
11
+ } satisfies Meta<typeof NavItem>;
12
+
13
+ export default meta;
14
+
15
+ type Story = StoryObj<typeof NavItem>;
16
+
17
+ export const Default: Story = {};
@@ -0,0 +1,39 @@
1
+ import { forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ const NavItemComponent = forwardRef<
6
+ HTMLAnchorElement,
7
+ HTMLAttributes<HTMLAnchorElement> & { href: string }
8
+ >(({ children, className, href, ...props }, ref) => {
9
+ return (
10
+ <a
11
+ href={href}
12
+ ref={ref}
13
+ className={clsx(
14
+ 'mx-auto h-8 py-0 text-white after:block after:scale-x-0 after:border-b-4 after:transition-all after:duration-300 after:ease-in-out hover:cursor-pointer hover:after:scale-x-100',
15
+ className,
16
+ )}
17
+ {...props}
18
+ >
19
+ {children}
20
+ </a>
21
+ );
22
+ });
23
+
24
+ const NavItemLabel = forwardRef<
25
+ HTMLParagraphElement,
26
+ HTMLAttributes<HTMLParagraphElement>
27
+ >(({ className, ...props }, ref) => (
28
+ <p className="text-xl font-normal tracking-wider" ref={ref} {...props} />
29
+ ));
30
+
31
+ NavItemComponent.displayName = 'NavItem';
32
+
33
+ NavItemLabel.displayName = 'NavItem.Label';
34
+
35
+ const NavItem = Object.assign(NavItemComponent, {
36
+ Label: NavItemLabel,
37
+ });
38
+
39
+ export { NavItem };
@@ -0,0 +1,51 @@
1
+ import { Pill } from './';
2
+ import { faHeart } from '@fortawesome/fontawesome-free-solid';
3
+ import { Meta, StoryObj } from '@storybook/react';
4
+
5
+ const meta = {
6
+ title: 'V2Components/Pill',
7
+ component: Pill,
8
+ args: {
9
+ children: [
10
+ <Pill.Icon icon={faHeart} />,
11
+ <Pill.Label>This is a pill</Pill.Label>,
12
+ ],
13
+ },
14
+ } satisfies Meta<typeof Pill>;
15
+ export default meta;
16
+
17
+ type Story = StoryObj<typeof Pill>;
18
+
19
+ export const Default: Story = {};
20
+
21
+ export const Error: Story = {
22
+ ...Default,
23
+ args: {
24
+ ...Default.args,
25
+ variant: 'error',
26
+ },
27
+ };
28
+
29
+ export const Warning: Story = {
30
+ ...Default,
31
+ args: {
32
+ ...Default.args,
33
+ variant: 'warning',
34
+ },
35
+ };
36
+
37
+ export const Success: Story = {
38
+ ...Default,
39
+ args: {
40
+ ...Default.args,
41
+ variant: 'success',
42
+ },
43
+ };
44
+
45
+ export const Info: Story = {
46
+ ...Default,
47
+ args: {
48
+ ...Default.args,
49
+ variant: 'info',
50
+ },
51
+ };
@@ -0,0 +1,69 @@
1
+ import { ComponentPropsWithoutRef, forwardRef, HTMLAttributes } from 'react';
2
+
3
+ import clsx from 'clsx';
4
+
5
+ import { Icon } from '..';
6
+
7
+ // Enhanced version of `Pick` that works with union types and retains whether a property is optional (Pick does not)
8
+ // See https://github.com/microsoft/TypeScript/issues/28483#issuecomment-438084079
9
+ export type PickU<T, K extends keyof T> = T extends any
10
+ ? { [P in K]: T[P] }
11
+ : never;
12
+
13
+ export type PillVariant = 'default' | 'warning' | 'error' | 'info' | 'success';
14
+
15
+ export interface PillProps {
16
+ variant?: PillVariant;
17
+ loading?: boolean;
18
+ }
19
+
20
+ const PillComponent = forwardRef<
21
+ HTMLDivElement,
22
+ HTMLAttributes<HTMLDivElement> & PillProps
23
+ >(({ children, variant = 'default' }, ref) => {
24
+ return (
25
+ <div
26
+ ref={ref}
27
+ className={clsx(
28
+ 'inline-grid grid-flow-col items-center gap-1 rounded-full border px-2 py-0.5',
29
+ {
30
+ '': variant === 'default',
31
+ 'border-error-default bg-error-light text-error-default':
32
+ variant === 'error',
33
+ 'border-info-default bg-info-light text-info-default':
34
+ variant === 'info',
35
+ 'border-success-default bg-success-light text-success-default':
36
+ variant === 'success',
37
+ 'border-warning-default bg-warning-light text-warning-default':
38
+ variant === 'warning',
39
+ },
40
+ )}
41
+ >
42
+ {children}
43
+ </div>
44
+ );
45
+ });
46
+
47
+ const PillLabel = forwardRef<
48
+ HTMLParagraphElement,
49
+ HTMLAttributes<HTMLParagraphElement>
50
+ >(({ className, ...props }, ref) => (
51
+ <p className={clsx('text-xs', className)} ref={ref} {...props} />
52
+ ));
53
+
54
+ const PillIcon = forwardRef<
55
+ SVGSVGElement,
56
+ PickU<ComponentPropsWithoutRef<typeof Icon>, 'icon'>
57
+ >(({ icon }, ref) => <Icon size="xs" ref={ref} icon={icon} />);
58
+
59
+ PillComponent.displayName = 'Pill';
60
+ PillIcon.displayName = 'Pill.Icon';
61
+
62
+ PillLabel.displayName = 'Chip.Label';
63
+
64
+ const Pill = Object.assign(PillComponent, {
65
+ Icon: PillIcon,
66
+ Label: PillLabel,
67
+ });
68
+
69
+ export { Pill };
@@ -1,7 +1,7 @@
1
1
  import { Meta, StoryObj } from '@storybook/react';
2
2
  import { idAndClassName } from '@utils/controls';
3
3
 
4
- import Search from '.';
4
+ import { Search } from '.';
5
5
 
6
6
  const meta = {
7
7
  title: 'Components/Search',
@@ -58,6 +58,6 @@ const meta = {
58
58
  };
59
59
  export default meta;
60
60
 
61
- type Story = StoryObj<typeof meta>;
61
+ type Story = StoryObj<typeof Search>;
62
62
 
63
63
  export const Default: Story = {};
@@ -1,21 +1,19 @@
1
- import React, { ChangeEventHandler } from 'react';
1
+ import { type ChangeEventHandler } from 'react';
2
2
 
3
- import Icon, { type Props as iconProps } from '@components/Icon';
3
+ import { Icon, IconProps } from '@components/Icon';
4
4
  import classNames from 'classnames';
5
5
 
6
-
7
-
8
6
  export interface Props {
9
7
  id?: string;
10
8
  className?: string;
11
9
  onChange?: (val: string | number) => void;
12
10
  placeholder?: string;
13
11
  text?: string;
14
- leftIconProps?: iconProps;
15
- rightIconProps?: iconProps;
12
+ leftIconProps?: IconProps;
13
+ rightIconProps?: IconProps;
16
14
  }
17
15
 
18
- const Search = ({
16
+ export const Search = ({
19
17
  id,
20
18
  className,
21
19
  onChange,
@@ -23,15 +21,15 @@ const Search = ({
23
21
  text,
24
22
  leftIconProps,
25
23
  rightIconProps,
26
- }: Props): JSX.Element => {
27
- const classList = classNames(className, style.classList, 'theme-local');
24
+ }: Props) => {
25
+ const classList = classNames(className, 'flex');
28
26
 
29
27
  const inputClasses = classNames(
30
28
  {
31
- [style.leftIcon]: leftIconProps !== undefined,
32
- [style.noLeftIcon]: leftIconProps === undefined,
29
+ 'pl-9': leftIconProps !== undefined,
30
+ 'pl-2': leftIconProps === undefined,
33
31
  },
34
- style.inputClassList,
32
+ 'w-full rounded-md border-2 py-2 pr-9',
35
33
  );
36
34
 
37
35
  const onChangeFunc: ChangeEventHandler<HTMLInputElement> | undefined =
@@ -45,11 +43,11 @@ const Search = ({
45
43
  <div id={id} className={classList}>
46
44
  <div>
47
45
  {text !== undefined && (
48
- <h2 className={classNames(style.text, 'font-base-lg')}>{text}</h2>
46
+ <h2 className="font-base-lg py-2 pr-4">{text}</h2>
49
47
  )}
50
48
  </div>
51
49
  <div>
52
- <div className={style.inputWrapper}>
50
+ <div className="relative flex w-full">
53
51
  {leftIconProps !== undefined && <Icon {...leftIconProps} />}
54
52
  <input
55
53
  className={inputClasses}
@@ -64,5 +62,3 @@ const Search = ({
64
62
  </div>
65
63
  );
66
64
  };
67
-
68
- export default Search;
@@ -1,8 +1,7 @@
1
+ import { Select } from './';
1
2
  import { Meta, StoryObj } from '@storybook/react';
2
3
  import { idAndClassName } from '@utils/controls';
3
4
 
4
- import Select from '.';
5
-
6
5
  const meta = {
7
6
  title: 'Components/Select',
8
7
  component: Select,
@@ -51,6 +50,6 @@ const meta = {
51
50
 
52
51
  export default meta;
53
52
 
54
- type Story = StoryObj<typeof meta>;
53
+ type Story = StoryObj<typeof Select>;
55
54
 
56
55
  export const Default: Story = {};