trepur_components 2.3.3 → 2.3.5

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 (254) hide show
  1. package/.eslintrc.cjs +43 -0
  2. package/.husky/pre-commit +4 -0
  3. package/.prettierrc.json +22 -0
  4. package/archive/Breadcrumbs/Breadcrumbs.stories.tsx +46 -0
  5. package/archive/Breadcrumbs/index.tsx +42 -0
  6. package/archive/BreadcrumbsBordered/BreadcrumbsBordered.stories.tsx +52 -0
  7. package/archive/BreadcrumbsBordered/index.tsx +44 -0
  8. package/archive/BreadcrumbsItem/BreadcrumbsItem.stories.tsx +40 -0
  9. package/archive/BreadcrumbsItem/index.tsx +149 -0
  10. package/archive/Button/Button.stories.tsx +150 -0
  11. package/archive/Button/index.tsx +111 -0
  12. package/archive/Button/style.module.css +76 -0
  13. package/archive/Calendar/Calendar.stories.tsx +82 -0
  14. package/archive/Calendar/index.tsx +76 -0
  15. package/archive/Calendar/style.css +233 -0
  16. package/archive/Card/Card.stories.tsx +75 -0
  17. package/archive/Card/index.tsx +102 -0
  18. package/archive/Card/style.module.css +75 -0
  19. package/archive/CardWithTopImage/CardWithTopImage.stories.tsx +50 -0
  20. package/archive/CardWithTopImage/index.tsx +39 -0
  21. package/archive/CardWithTopImage/style.module.css +11 -0
  22. package/archive/Carousel/Carousel.stories.tsx +451 -0
  23. package/archive/Carousel/index.tsx +388 -0
  24. package/archive/Carousel/style.module.css +99 -0
  25. package/archive/CarouselThumbnail/CarouselThumbnail.stories.tsx +350 -0
  26. package/archive/CarouselThumbnail/index.tsx +302 -0
  27. package/archive/CarouselThumbnail/style.module.css +67 -0
  28. package/archive/Checkbox/Checkbox.mdx +33 -0
  29. package/archive/Checkbox/Checkbox.stories.tsx +34 -0
  30. package/archive/Checkbox/index.tsx +51 -0
  31. package/archive/Checkbox/style.module.css +15 -0
  32. package/archive/Collapsible/Collapsible.stories.tsx +67 -0
  33. package/archive/Collapsible/index.tsx +116 -0
  34. package/archive/Collapsible/style.module.css +47 -0
  35. package/archive/Column/Column.stories.tsx +89 -0
  36. package/archive/Column/index.tsx +119 -0
  37. package/archive/Column/style.module.css +151 -0
  38. package/archive/ComponentWrapper/ComponentWrapper.stories.tsx +40 -0
  39. package/archive/ComponentWrapper/index.tsx +55 -0
  40. package/archive/ComponentWrapper/style.module.css +40 -0
  41. package/archive/Container/Container.stories.tsx +40 -0
  42. package/archive/Container/index.tsx +24 -0
  43. package/archive/Container/style.module.css +4 -0
  44. package/archive/Counter/Counter.stories.tsx +19 -0
  45. package/archive/Counter/index.tsx +66 -0
  46. package/archive/Counter/style.module.css +19 -0
  47. package/archive/DetailUpdater/DetailUpdater.stories.tsx +96 -0
  48. package/archive/DetailUpdater/index.tsx +112 -0
  49. package/archive/DetailUpdater/style.module.css +31 -0
  50. package/archive/Dialog/Dialog.stories.tsx +131 -0
  51. package/archive/Dialog/index.tsx +91 -0
  52. package/archive/Dialog/style.module.css +44 -0
  53. package/archive/DropdownMenu/DropdownMenu.stories.tsx +59 -0
  54. package/archive/DropdownMenu/index.tsx +51 -0
  55. package/archive/DropdownMenu/style.module.css +38 -0
  56. package/archive/DynamicTextSection/DynamicTextSection.stories.tsx +74 -0
  57. package/archive/DynamicTextSection/index.tsx +36 -0
  58. package/archive/DynamicTextSection/style.module.css +0 -0
  59. package/archive/FileUploader/FilePreview.tsx +48 -0
  60. package/archive/FileUploader/FileUploader.stories.tsx +28 -0
  61. package/archive/FileUploader/index.tsx +135 -0
  62. package/archive/FileUploader/style.module.css +54 -0
  63. package/archive/FilterItem/FilterItem.stories.tsx +33 -0
  64. package/archive/FilterItem/index.tsx +101 -0
  65. package/archive/FilterItem/style.module.css +27 -0
  66. package/archive/Footer/Footer.stories.tsx +59 -0
  67. package/archive/Footer/index.tsx +50 -0
  68. package/archive/Footer/style.module.css +19 -0
  69. package/archive/FooterNav/FooterNav.stories.tsx +125 -0
  70. package/archive/FooterNav/index.tsx +57 -0
  71. package/archive/FooterNav/style.module.css +32 -0
  72. package/archive/FooterNavItem/FooterNavItem.stories.tsx +53 -0
  73. package/archive/FooterNavItem/index.tsx +80 -0
  74. package/archive/FooterNavItem/style.module.css +139 -0
  75. package/archive/Form/Form.stories.tsx +86 -0
  76. package/archive/Form/index.tsx +61 -0
  77. package/archive/Form/style.module.css +0 -0
  78. package/archive/FyreCard/FyreCard.stories.tsx +31 -0
  79. package/archive/FyreCard/index.tsx +52 -0
  80. package/archive/FyreCard/style.module.css +19 -0
  81. package/archive/Greeting/Greeting.stories.tsx +41 -0
  82. package/archive/Greeting/index.tsx +32 -0
  83. package/archive/HamburgerIcon/HamburgerIcon.stories.tsx +32 -0
  84. package/archive/HamburgerIcon/index.tsx +103 -0
  85. package/archive/HamburgerIcon/style.module.css +85 -0
  86. package/archive/HorizontalLine/HorizontalLine.stories.tsx +54 -0
  87. package/archive/HorizontalLine/index.tsx +40 -0
  88. package/archive/HorizontalLine/style.module.css +55 -0
  89. package/archive/Icon/Icon.stories.tsx +164 -0
  90. package/archive/Icon/index.tsx +115 -0
  91. package/archive/Icon/style.module.css +253 -0
  92. package/archive/IconCard/IconCard.stories.tsx +46 -0
  93. package/archive/IconCard/index.tsx +57 -0
  94. package/archive/IconCard/style.module.css +18 -0
  95. package/archive/Image/Image.stories.tsx +87 -0
  96. package/archive/Image/index.tsx +132 -0
  97. package/archive/Image/style.module.css +109 -0
  98. package/archive/ImageInfo/ImageInfo.stories.tsx +39 -0
  99. package/archive/ImageInfo/index.tsx +95 -0
  100. package/archive/ImageInfo/style.module.css +47 -0
  101. package/archive/ImageLink/ImageLink.stories.tsx +37 -0
  102. package/archive/ImageLink/index.tsx +49 -0
  103. package/archive/ImageLink/style.module.css +23 -0
  104. package/archive/ImageLinkList/ImageLinkList.stories.tsx +34 -0
  105. package/archive/ImageLinkList/index.tsx +33 -0
  106. package/archive/ImageLinkList/style.module.css +3 -0
  107. package/archive/InformationIcon/InformationIcon.stories.tsx +83 -0
  108. package/archive/InformationIcon/index.tsx +128 -0
  109. package/archive/InformationIcon/style.module.css +71 -0
  110. package/archive/InformationIconBlock/InformationIconBlock.stories.tsx +32 -0
  111. package/archive/InformationIconBlock/index.tsx +63 -0
  112. package/archive/InformationIconBlock/style.module.css +7 -0
  113. package/archive/Input/Input.stories.tsx +84 -0
  114. package/archive/Input/index.tsx +131 -0
  115. package/archive/Input/style.module.css +60 -0
  116. package/archive/Jumbotron/Jumbotron.stories.tsx +21 -0
  117. package/archive/Jumbotron/index.tsx +31 -0
  118. package/archive/Jumbotron/style.module.css +8 -0
  119. package/archive/MenuButton/MenuButton.stories.tsx +46 -0
  120. package/archive/MenuButton/index.tsx +82 -0
  121. package/archive/MenuButton/style.module.css +45 -0
  122. package/archive/Modal/Modal.stories.tsx +86 -0
  123. package/archive/Modal/index.tsx +74 -0
  124. package/archive/Modal/style.module.css +35 -0
  125. package/archive/NavItem/NavItem.stories.tsx +90 -0
  126. package/archive/NavItem/index.tsx +65 -0
  127. package/archive/NavItem/style.module.css +71 -0
  128. package/archive/NavOld/NavOld.stories.tsx +193 -0
  129. package/archive/NavOld/StickyNav.tsx +191 -0
  130. package/archive/NavOld/index.tsx +273 -0
  131. package/archive/NavOld/style.module.css +156 -0
  132. package/archive/NavTwo/Dropdown.tsx +35 -0
  133. package/archive/NavTwo/Nav.stories.tsx +38 -0
  134. package/archive/NavTwo/Sidebar.tsx +34 -0
  135. package/archive/NavTwo/StickyNav.tsx +34 -0
  136. package/archive/NavTwo/index.tsx +45 -0
  137. package/archive/NavTwo/style.module.css +35 -0
  138. package/archive/NewsCard/NewsCard.stories.tsx +72 -0
  139. package/archive/NewsCard/index.tsx +57 -0
  140. package/archive/NewsCard/style.module.css +15 -0
  141. package/archive/Pill/Pill.stories.tsx +44 -0
  142. package/archive/Pill/index.tsx +64 -0
  143. package/archive/Pill/style.module.css +32 -0
  144. package/archive/ProductCard/ProductCard.stories.tsx +61 -0
  145. package/archive/ProductCard/index.tsx +111 -0
  146. package/archive/ProductCard/style.module.css +53 -0
  147. package/archive/ProductCardV2/ProductCardV2.stories.tsx +50 -0
  148. package/archive/ProductCardV2/index.tsx +119 -0
  149. package/archive/ProductCardV2/style.module.css +59 -0
  150. package/archive/Proficiencies/Proficiencies.stories.tsx +50 -0
  151. package/archive/Proficiencies/index.tsx +63 -0
  152. package/archive/Proficiencies/style.module.css +31 -0
  153. package/archive/Profile/Profile.stories.tsx +49 -0
  154. package/archive/Profile/index.tsx +103 -0
  155. package/archive/Profile/style.module.css +47 -0
  156. package/archive/Row/Row.stories.tsx +53 -0
  157. package/archive/Row/index.tsx +23 -0
  158. package/archive/Row/style.module.css +3 -0
  159. package/archive/Search/Search.stories.tsx +63 -0
  160. package/archive/Search/index.tsx +68 -0
  161. package/archive/Search/style.module.css +23 -0
  162. package/archive/Select/Select.stories.tsx +56 -0
  163. package/archive/Select/index.tsx +106 -0
  164. package/archive/Select/style.module.css +52 -0
  165. package/archive/Showcase/Showcase.stories.tsx +30 -0
  166. package/archive/Showcase/index.tsx +75 -0
  167. package/archive/Showcase/style.module.css +47 -0
  168. package/archive/SideNav/SideNav.stories.tsx +50 -0
  169. package/archive/SideNav/index.tsx +46 -0
  170. package/archive/SideNav/style.module.css +43 -0
  171. package/archive/SocialBlock/SocialBlock.stories.tsx +58 -0
  172. package/archive/SocialBlock/index.tsx +63 -0
  173. package/archive/SocialButton/SocialButton.stories.tsx +88 -0
  174. package/archive/SocialButton/index.tsx +71 -0
  175. package/archive/SocialButton/style.module.css +77 -0
  176. package/archive/StarRating/StarRating.stories.tsx +23 -0
  177. package/archive/StarRating/index.tsx +71 -0
  178. package/archive/Testimonial/Testimonial.stories.tsx +110 -0
  179. package/archive/Testimonial/index.tsx +61 -0
  180. package/archive/Testimonial/style.module.css +27 -0
  181. package/archive/TextAndTitle/TextAndTitle.stories.tsx +70 -0
  182. package/archive/TextAndTitle/index.tsx +123 -0
  183. package/archive/TextAndTitle/style.module.css +75 -0
  184. package/archive/TextArea/TextArea.stories.tsx +55 -0
  185. package/archive/TextArea/index.tsx +125 -0
  186. package/archive/TextArea/style.module.css +60 -0
  187. package/archive/Timeline/Timeline.stories.tsx +92 -0
  188. package/archive/Timeline/index.tsx +254 -0
  189. package/archive/Timeline/style.module.css +134 -0
  190. package/archive/TimelineV2/TimelineV2.stories.tsx +95 -0
  191. package/archive/TimelineV2/index.tsx +70 -0
  192. package/archive/TimelineV2/style.module.css +28 -0
  193. package/archive/Tubestops/Tubestops.stories.tsx +42 -0
  194. package/archive/Tubestops/index.tsx +58 -0
  195. package/archive/Tubestops/style.module.css +54 -0
  196. package/archive/UserIcon/UserIcon.stories.tsx +52 -0
  197. package/archive/UserIcon/index.tsx +46 -0
  198. package/archive/UserIcon/style.module.css +19 -0
  199. package/archive/Video/Video.stories.tsx +23 -0
  200. package/archive/Video/index.tsx +47 -0
  201. package/archive/fonts/Sora/OFL.txt +93 -0
  202. package/archive/fonts/Sora/README.txt +70 -0
  203. package/archive/fonts/Sora/Sora-VariableFont_wght.ttf +0 -0
  204. package/archive/fonts/Sora/static/Sora-Bold.ttf +0 -0
  205. package/archive/fonts/Sora/static/Sora-ExtraBold.ttf +0 -0
  206. package/archive/fonts/Sora/static/Sora-ExtraLight.ttf +0 -0
  207. package/archive/fonts/Sora/static/Sora-Light.ttf +0 -0
  208. package/archive/fonts/Sora/static/Sora-Medium.ttf +0 -0
  209. package/archive/fonts/Sora/static/Sora-Regular.ttf +0 -0
  210. package/archive/fonts/Sora/static/Sora-SemiBold.ttf +0 -0
  211. package/archive/fonts/Sora/static/Sora-Thin.ttf +0 -0
  212. package/archive/theme.ts +39 -0
  213. package/archive/typography/Fonts/Fonts.stories.tsx +14 -0
  214. package/archive/typography/Fonts/Fonts.tsx +181 -0
  215. package/lib/components/Accordion/index.js +10 -10
  216. package/lib/components/AlertBar/index.js +10 -10
  217. package/lib/components/index.d.ts +4 -0
  218. package/lib/index.js +1 -7
  219. package/lib/styles/base.css +1 -0
  220. package/package.json +6 -8
  221. package/postcss.config.js +8 -0
  222. package/src/components/Accordion/Accordion.stories.tsx +116 -0
  223. package/src/components/Accordion/index.tsx +30 -0
  224. package/src/components/AlertBar/AlertBar.stories.tsx +95 -0
  225. package/src/components/AlertBar/index.tsx +115 -0
  226. package/src/components/Avatar/Avatar.stories.tsx +19 -0
  227. package/src/components/Avatar/index.tsx +495 -0
  228. package/src/components/index.ts +119 -0
  229. package/src/documentation/Colours.mdx +192 -0
  230. package/src/documentation/Introduction.mdx +9 -0
  231. package/src/index.ts +1 -0
  232. package/src/styles/base.css +117 -0
  233. package/src/utils/controls.ts +44 -0
  234. package/src/utils/matchMedia.ts +9 -0
  235. package/src/utils/screens.ts +7 -0
  236. package/svg.d.ts +4 -0
  237. package/tailwind.config.ts +81 -0
  238. package/tsconfig.json +43 -0
  239. package/tsconfig.node.json +12 -0
  240. package/vite.config.mjs +64 -0
  241. package/lib/archive/Breadcrumbs/index.js +0 -12
  242. package/lib/archive/BreadcrumbsBordered/index.js +0 -25
  243. package/lib/archive/BreadcrumbsItem/index.js +0 -117
  244. package/lib/src/components/index.d.ts +0 -7
  245. /package/lib/{src/components → components}/Accordion/Accordion.stories.d.ts +0 -0
  246. /package/lib/{src/components → components}/Accordion/index.d.ts +0 -0
  247. /package/lib/{src/components → components}/AlertBar/AlertBar.stories.d.ts +0 -0
  248. /package/lib/{src/components → components}/AlertBar/index.d.ts +0 -0
  249. /package/lib/{src/components → components}/Avatar/Avatar.stories.d.ts +0 -0
  250. /package/lib/{src/components → components}/Avatar/index.d.ts +0 -0
  251. /package/lib/{src/index.d.ts → index.d.ts} +0 -0
  252. /package/lib/{src/utils → utils}/controls.d.ts +0 -0
  253. /package/lib/{src/utils → utils}/matchMedia.d.ts +0 -0
  254. /package/lib/{src/utils → utils}/screens.d.ts +0 -0
@@ -0,0 +1,131 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { action } from '@storybook/addon-actions';
4
+ import { type 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: 'Trepur Components/molecules/Dialog',
12
+ component: Dialog,
13
+ parameters: {
14
+ docs: {
15
+ description: {
16
+ component: 'A dialog component',
17
+ },
18
+ },
19
+ layout: 'padded',
20
+ },
21
+ argTypes: {
22
+ id: {
23
+ type: { name: 'string', required: false },
24
+ description: 'HTML id attribute',
25
+ table: { type: { summary: 'string' } },
26
+ },
27
+ className: {
28
+ type: { name: 'string', required: false },
29
+ description: 'Additional classes to be appended to the component',
30
+ table: { type: { summary: 'string' } },
31
+ },
32
+ onDismissClick: {
33
+ type: { name: 'function', required: false },
34
+ description:
35
+ 'Used to determine the onClick action when the dismiss cta is pressed',
36
+ action: 'onClick',
37
+ table: {
38
+ type: { summary: 'function' },
39
+ defaultValue: { summary: 'undefined' },
40
+ },
41
+ },
42
+ title: {
43
+ type: { name: 'string', required: false },
44
+ description: 'Used to specify the title to display on the component',
45
+ table: {
46
+ type: { summary: 'string' },
47
+ defaultValue: { summary: 'undefined' },
48
+ },
49
+ },
50
+ paragraph: {
51
+ type: { name: 'string', required: false },
52
+ description:
53
+ 'Used to the specify paragraph text to display on the component',
54
+ table: {
55
+ type: { summary: 'string' },
56
+ defaultValue: { summary: 'undefined' },
57
+ },
58
+ },
59
+ dismissText: {
60
+ type: { name: 'string', required: false },
61
+ description: 'Used to specify dismiss text to display on the component',
62
+ table: {
63
+ type: { summary: 'string' },
64
+ defaultValue: { summary: 'undefined' },
65
+ },
66
+ },
67
+ primaryCta: {
68
+ type: { name: 'other', value: 'ButtonProps', required: false },
69
+ description: 'A collection of props to pass to the button component',
70
+ table: { type: { summary: 'ButtonProps' } },
71
+ },
72
+ secondaryCta: {
73
+ type: { name: 'other', value: 'ButtonProps', required: false },
74
+ description:
75
+ 'A collection of props to pass to the second button component',
76
+ table: { type: { summary: 'ButtonProps' } },
77
+ },
78
+ },
79
+ args: {
80
+ title: 'This is a title',
81
+ paragraph:
82
+ '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.',
83
+ dismissText: 'Close',
84
+ imageUrl: 'https://picsum.photos/500/300',
85
+ onDismissClick: action('dismissed'),
86
+ primaryCta: {
87
+ children: 'Add bank details',
88
+ palette: 'secondary',
89
+ },
90
+ secondaryCta: {
91
+ children: 'Add bank details',
92
+ variant: 'secondary',
93
+ palette: 'secondary',
94
+ },
95
+ },
96
+ };
97
+
98
+ const Template = (args): React.ReactElement => {
99
+ const [visible, setVisible] = useState<boolean>(false);
100
+
101
+ return (
102
+ <div style={{ height: '350vh' }}>
103
+ <Button
104
+ onClick={() => {
105
+ setVisible(true);
106
+ }}
107
+ >
108
+ Click Me!
109
+ </Button>
110
+ <Modal
111
+ visible={visible}
112
+ mobileGutter
113
+ onOverlayClick={() => {
114
+ setVisible(false);
115
+ }}
116
+ >
117
+ <Dialog
118
+ {...args}
119
+ onDismissClick={() => {
120
+ action('dismiss click');
121
+ setVisible(!visible);
122
+ }}
123
+ />
124
+ </Modal>
125
+ </div>
126
+ );
127
+ };
128
+
129
+ export const _Dialog = Template.bind({});
130
+
131
+ export default meta;
@@ -0,0 +1,91 @@
1
+ import React from 'react';
2
+
3
+ import Button, { type Props as ButtonProps } from '@components/Button';
4
+ import Image from '@components/Image';
5
+ import classNames from 'classnames';
6
+
7
+
8
+
9
+ export interface Props extends Partial<Pick<HTMLElement, 'className' | 'id'>> {
10
+ title: string;
11
+ paragraph: string;
12
+ dismissText: string;
13
+ onDismissClick?: () => void;
14
+ primaryCta?: ButtonProps;
15
+ secondaryCta?: ButtonProps;
16
+
17
+ imageUrl?: string;
18
+ }
19
+
20
+ const Dialog = ({
21
+ id,
22
+ className,
23
+ title,
24
+ paragraph,
25
+ dismissText,
26
+ onDismissClick,
27
+ primaryCta,
28
+ secondaryCta,
29
+ imageUrl,
30
+ }: Props): JSX.Element => {
31
+ const hasCta = Boolean(primaryCta?.children);
32
+ const hasCta2 = Boolean(secondaryCta?.children);
33
+
34
+ const ctaButton = hasCta && (
35
+ <Button
36
+ {...primaryCta}
37
+ className={classNames(
38
+ {
39
+ [style.fullWidth]: hasCta2,
40
+ },
41
+ primaryCta?.className,
42
+ style.ctaBtn,
43
+ )}
44
+ />
45
+ );
46
+
47
+ const ctaButton2 = hasCta2 && (
48
+ <Button
49
+ {...secondaryCta}
50
+ className={classNames(
51
+ {
52
+ [style.fullWidth]: hasCta,
53
+ },
54
+ secondaryCta?.className,
55
+ style.cta2Btn,
56
+ )}
57
+ />
58
+ );
59
+
60
+ const buttonWrapperClassList = classNames(
61
+ {
62
+ [style.fullWidth]: ctaButton2,
63
+ },
64
+ style.buttonWrapper,
65
+ );
66
+
67
+ const titleClassList = classNames({}, style.title);
68
+
69
+ return (
70
+ <div id={id} className={classNames(style.dialog, className, 'theme-local')}>
71
+ <div className={style.headingWrapper}>
72
+ {imageUrl !== undefined && (
73
+ <Image src={imageUrl} height={3} width={3} />
74
+ )}
75
+ <p className={style.dismissText} onClick={onDismissClick}>
76
+ {dismissText}
77
+ </p>
78
+ </div>
79
+ <p className={titleClassList}>{title}</p>
80
+ <p className={style.paragraph}>{paragraph}</p>
81
+ {(hasCta || hasCta2) && (
82
+ <div className={buttonWrapperClassList}>
83
+ {ctaButton}
84
+ {ctaButton2}
85
+ </div>
86
+ )}
87
+ </div>
88
+ );
89
+ };
90
+
91
+ export default Dialog;
@@ -0,0 +1,44 @@
1
+ .dialog {
2
+ @apply rounded-xl bg-white text-ink;
3
+ @apply mx-auto w-full p-6;
4
+ max-width: 608px;
5
+ }
6
+
7
+ @screen md {
8
+ .dialog {
9
+ width: 608px;
10
+ }
11
+ }
12
+
13
+ .headingWrapper {
14
+ @apply relative pb-2;
15
+ }
16
+
17
+ .dismissText {
18
+ @apply absolute right-0 top-0 cursor-pointer;
19
+ @apply text-sm font-regular;
20
+ }
21
+
22
+ .title {
23
+ @apply text-md font-regular;
24
+ }
25
+
26
+ .titlePadding {
27
+ @apply pr-64 md:pr-80;
28
+ }
29
+
30
+ .paragraph {
31
+ @apply pt-1 font-light;
32
+ }
33
+
34
+ .buttonWrapper {
35
+ @apply flex flex-wrap pt-6 md:flex-nowrap;
36
+ }
37
+
38
+ .fullWidth {
39
+ @apply w-full;
40
+ }
41
+
42
+ .cta2Btn {
43
+ @apply mt-2 w-full md:ml-6 md:mt-0;
44
+ }
@@ -0,0 +1,59 @@
1
+ import { action } from '@storybook/addon-actions';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+ import { idAndClassName } from '@utils/controls';
4
+
5
+ import DropdownMenu from '.';
6
+
7
+ const meta = {
8
+ title: 'Components/Dropdown Menu',
9
+ component: DropdownMenu,
10
+ argTypes: {
11
+ ...idAndClassName,
12
+ backgroundColour: {
13
+ type: { name: 'string', required: false },
14
+ options: ['primary', 'secondary', 'white', 'black', 'gold'],
15
+ description: 'The background colour of the component',
16
+ table: {
17
+ type: { summary: 'string' },
18
+ },
19
+ defaultValue: 'primary',
20
+ control: 'select',
21
+ },
22
+
23
+ menuItems: {
24
+ description: 'The items to show in the menu',
25
+ control: 'array',
26
+ table: {
27
+ type: { summary: 'array' },
28
+ },
29
+ },
30
+ },
31
+ args: {
32
+ backgroundColour: 'white',
33
+ onClick: action('clicked'),
34
+ menuItems: [
35
+ {
36
+ name: 'Messages',
37
+ href: '#',
38
+ },
39
+ {
40
+ name: 'Notifications',
41
+ href: '#',
42
+ },
43
+ {
44
+ name: 'Trips',
45
+ href: '#',
46
+ },
47
+ {
48
+ name: 'Wishlists',
49
+ href: '#',
50
+ },
51
+ ],
52
+ },
53
+ };
54
+
55
+ export default meta;
56
+
57
+ type Story = StoryObj<typeof meta>;
58
+
59
+ export const Default: Story = {};
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+
3
+ import { type Colours } from '@utils/controls';
4
+ import classNames from 'classnames';
5
+
6
+
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
+ const DropdownMenu = ({
18
+ id,
19
+ className,
20
+ backgroundColour = 'white',
21
+ menuItems = [],
22
+ onClick,
23
+ }: Props): JSX.Element => {
24
+ const classList = classNames(
25
+ className,
26
+ style.classList,
27
+ style[backgroundColour],
28
+ 'theme-local',
29
+ );
30
+
31
+ if (!menuItems) return <></>;
32
+
33
+ return (
34
+ <div id={id} className={classList}>
35
+ {menuItems?.map((item, i) => {
36
+ return (
37
+ <a
38
+ key={i}
39
+ href={item.href}
40
+ onClick={(e) => onClick?.(e)}
41
+ className={style.menuItem}
42
+ >
43
+ {item.name}
44
+ </a>
45
+ );
46
+ })}
47
+ </div>
48
+ );
49
+ };
50
+
51
+ export default DropdownMenu;
@@ -0,0 +1,38 @@
1
+ .classList {
2
+ width: 250px;
3
+ @apply flex flex-col;
4
+ @apply mt-2 rounded-2xl py-4 drop-shadow-lg;
5
+ @apply absolute right-10;
6
+ }
7
+
8
+ .menuItem {
9
+ @apply px-4 py-2 text-ink hover:bg-lightest-grey;
10
+ }
11
+
12
+ .primary {
13
+ @apply bg-primary text-white;
14
+ }
15
+ .secondary {
16
+ @apply bg-secondary text-white;
17
+ }
18
+ .white {
19
+ @apply bg-white text-black;
20
+ }
21
+ .grey {
22
+ @apply bg-lightest-grey text-black;
23
+ }
24
+ .black {
25
+ @apply bg-black text-white;
26
+ }
27
+ .success {
28
+ @apply bg-success text-white;
29
+ }
30
+ .error {
31
+ @apply bg-error text-white;
32
+ }
33
+ .facebook {
34
+ @apply bg-facebook text-white;
35
+ }
36
+ .gold {
37
+ @apply bg-gold text-white;
38
+ }
@@ -0,0 +1,74 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import DynamicTextSection from '.';
5
+ import Icon from '../Icon';
6
+
7
+ const meta = {
8
+ title: 'Components/DynamicTextSection',
9
+ component: DynamicTextSection,
10
+ argTypes: {
11
+ ...idAndClassName,
12
+ children: {
13
+ description: 'The colour of the component',
14
+ table: {
15
+ type: { summary: 'string' },
16
+ defaultValue: { summary: 'undefined' },
17
+ },
18
+ },
19
+ topLine: {
20
+ description: 'Shows a top line',
21
+ control: 'boolean',
22
+ table: {
23
+ type: { summary: 'boolean' },
24
+ defaultValue: { summary: 'false' },
25
+ },
26
+ defaultValue: 'false',
27
+ },
28
+ bottomLine: {
29
+ description: 'Shows a bottom line',
30
+ control: 'boolean',
31
+ table: {
32
+ type: { summary: 'boolean' },
33
+ defaultValue: { summary: 'false' },
34
+ },
35
+ defaultValue: 'false',
36
+ },
37
+ middleLine: {
38
+ description: `Shows a middle line, middle lines exist only at the bottom
39
+ of each component and should be used only when creating a list of
40
+ dynamic text section components`,
41
+ control: 'boolean',
42
+ table: {
43
+ type: { summary: 'boolean' },
44
+ defaultValue: { summary: 'false' },
45
+ },
46
+ defaultValue: 'false',
47
+ },
48
+ },
49
+ args: {
50
+ topLine: true,
51
+ bottomLine: true,
52
+ middleLine: false,
53
+ children: [
54
+ <div key="1" className="flex">
55
+ <Icon type="heart" hollow bgColour="white" />
56
+ <p>First Child</p>
57
+ </div>,
58
+ <div key="2" className="flex">
59
+ <Icon type="star" hollow bgColour="white" />
60
+ <p>Second Child</p>
61
+ </div>,
62
+ <div key="3" className="flex">
63
+ <Icon type="moon" hollow bgColour="white" />
64
+ <p>Third Child</p>
65
+ </div>,
66
+ ],
67
+ },
68
+ };
69
+
70
+ export default meta;
71
+
72
+ type Story = StoryObj<typeof meta>;
73
+
74
+ export const Default: Story = {};
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+
3
+ import HorizontalLine from '@components/HorizontalLine';
4
+ import classNames from 'classnames';
5
+
6
+ export interface Props {
7
+ id?: string;
8
+ className?: string;
9
+
10
+ children: React.ReactNode;
11
+ topLine?: boolean;
12
+ bottomLine?: boolean;
13
+ middleLine?: boolean;
14
+ }
15
+
16
+ const DynamicTextSection = ({
17
+ id,
18
+ className,
19
+ children,
20
+ topLine = false,
21
+ bottomLine = false,
22
+ middleLine = false,
23
+ }: Props): JSX.Element => {
24
+ const classList = classNames(className, 'theme-local');
25
+
26
+ return (
27
+ <div id={id} className={classList}>
28
+ {topLine && <HorizontalLine colour="grey" topLine />}
29
+ {children}
30
+ {bottomLine && <HorizontalLine colour="grey" bottomLine />}
31
+ {middleLine && <HorizontalLine colour="grey" middleLine />}
32
+ </div>
33
+ );
34
+ };
35
+
36
+ export default DynamicTextSection;
File without changes
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+
3
+ import classNames from 'classnames';
4
+
5
+
6
+
7
+ interface Props {
8
+ id?: string;
9
+ className?: string;
10
+ fileData?: any;
11
+ onDismiss?: (e: any) => void;
12
+ }
13
+
14
+ const FileUploader: React.FC<Props> = ({
15
+ id,
16
+ className,
17
+ fileData,
18
+ onDismiss,
19
+ }) => {
20
+ const handleDismiss = (fileName: string): void => {
21
+ onDismiss?.(fileName);
22
+ };
23
+
24
+ return (
25
+ <ul
26
+ id={id}
27
+ className={classNames(className, style.fileList, 'theme-local')}
28
+ >
29
+ {fileData?.map((file: any) => {
30
+ return (
31
+ <li key={file.lastModified} className={classNames(style.file)}>
32
+ <div
33
+ className={style.nameWrapper}
34
+ onClick={() => {
35
+ handleDismiss(file.name);
36
+ }}
37
+ >
38
+ <p className={style.name}>{file.name}</p>
39
+ <p className={style.dismiss}>x</p>
40
+ </div>
41
+ </li>
42
+ );
43
+ })}
44
+ </ul>
45
+ );
46
+ };
47
+
48
+ export default FileUploader;
@@ -0,0 +1,28 @@
1
+ import { action } from '@storybook/addon-actions';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+ import { idAndClassName } from '@utils/controls';
4
+
5
+ import FileUploader from '.';
6
+
7
+ const meta = {
8
+ title: 'Components/FileUploader',
9
+ component: FileUploader,
10
+ parameters: {},
11
+ argTypes: {
12
+ ...idAndClassName,
13
+ },
14
+ args: {
15
+ ctaText: 'You can select multiple Files',
16
+ text: 'or drag & drop your files here',
17
+ imageUrl: 'https://picsum.photos/500/300',
18
+ onDrop: (files) => {
19
+ action('files:')(files[0].name);
20
+ },
21
+ },
22
+ };
23
+
24
+ export default meta;
25
+
26
+ type Story = StoryObj<typeof meta>;
27
+
28
+ export const Default: Story = {};