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,70 @@
1
+ import Greeting from '@components/Greeting';
2
+ import { action } from '@storybook/addon-actions';
3
+ import { Meta, StoryObj } from '@storybook/react';
4
+ import { idAndClassName } from '@utils/controls';
5
+
6
+ import TextAndTitle from '.';
7
+
8
+ const meta = {
9
+ title: 'Components/Text And Title',
10
+ component: TextAndTitle,
11
+ argTypes: {
12
+ ...idAndClassName,
13
+
14
+ onSave: {
15
+ type: { name: 'function', required: false },
16
+ description: 'Fires a function when you click save',
17
+ action: 'onClick',
18
+ table: {
19
+ type: {
20
+ summary: 'function',
21
+ },
22
+ defaultValue: { summary: 'undefined' },
23
+ },
24
+ },
25
+ bgColour: {
26
+ type: { name: 'string', required: false },
27
+ options: ['primary', 'secondary', 'white', 'black', 'gold'],
28
+ description: 'The background colour of the component',
29
+ table: {
30
+ type: { summary: 'string' },
31
+ },
32
+ defaultValue: 'primary',
33
+ control: 'select',
34
+ },
35
+ },
36
+ args: {
37
+ title: 'This is a title',
38
+ description: 'what do you recon to this?',
39
+ children: <p>This is a child</p>,
40
+ editTitleClasses: 'text-md sm:text-lg ',
41
+ editTextClasses: 'break-words',
42
+ editInputClasses: 'border border-black text-black bg-white',
43
+ textLineOne: (
44
+ <div>
45
+ <Greeting />
46
+ <p>Loremipsumdolorsitamet consectetur adipisicing elit</p>
47
+ </div>
48
+ ),
49
+ textLineTwo:
50
+ 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi impedit sed, quis aspernatur voluptate minima vel placeat ipsa amet voluptatem reprehenderit ullam rem cum tempora explicabo veritatis numquam libero asperiores!',
51
+ textLineThree:
52
+ 'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Tenetur nihil voluptas ipsum labore? Eligendi et ipsam, repellat culpa porro a animi laudantium molestiae provident facere non tempora odit? Perferendis, assumenda.',
53
+ onSave: action('button-save'),
54
+ withLiveUpdates: true,
55
+ isHorizontal: true,
56
+ saveButtonProps: {
57
+ className: 'mt-4',
58
+ children: 'Save',
59
+ },
60
+ cancelButtonProps: {
61
+ className: 'mt-4 ml-4',
62
+ children: 'Cancel',
63
+ },
64
+ },
65
+ };
66
+ export default meta;
67
+
68
+ type Story = StoryObj<typeof meta>;
69
+
70
+ export const Default: Story = {};
@@ -0,0 +1,123 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import { type Props as buttonProps } from '@components/Button';
4
+ import ComponentWrapper from '@components/ComponentWrapper';
5
+ import { type Colours } from '@utils/controls';
6
+ import classNames from 'classnames';
7
+
8
+
9
+
10
+ export interface Props {
11
+ id: string;
12
+ className?: string;
13
+ title?: string;
14
+ description?: string;
15
+ bgColour?: Colours;
16
+ titleClasses?: string;
17
+ textClasses?: string;
18
+ textLineOne?: string;
19
+ textLineTwo?: string;
20
+ textLineThree?: string;
21
+ titleBold?: boolean;
22
+ textCenter?: boolean;
23
+ titleCenter?: boolean;
24
+ withLiveUpdates?: boolean;
25
+ onSave?: (arr: any[], id: string | undefined) => void;
26
+ saveButtonProps?: buttonProps;
27
+ cancelButtonProps?: buttonProps;
28
+ isHorizontal?: boolean;
29
+ children?: any;
30
+ }
31
+
32
+ const TextAndTitle: React.FC<Props> = ({
33
+ id,
34
+ className,
35
+ title,
36
+ description,
37
+ bgColour,
38
+ titleClasses,
39
+ textClasses,
40
+ textLineOne,
41
+ textLineTwo,
42
+ textLineThree,
43
+ titleBold,
44
+ textCenter,
45
+ titleCenter,
46
+ withLiveUpdates = false,
47
+ isHorizontal = true,
48
+ children,
49
+ }: Props): JSX.Element => {
50
+ const [isInEditingMode, setIsInEditingMode] = useState(false);
51
+ const borderClasses = style.bordered;
52
+ const classList = classNames(className, 'theme-local');
53
+
54
+ const titleClassList = classNames(
55
+ {
56
+ [style.fontBold]: titleBold,
57
+ [style.textCenter]: titleCenter,
58
+ [borderClasses]: withLiveUpdates && !isInEditingMode && isHorizontal,
59
+ },
60
+ titleClasses,
61
+ style.titleClassList,
62
+ );
63
+
64
+ const textClassList = classNames(
65
+ {
66
+ [style.textCenter]: textCenter,
67
+ [borderClasses]: withLiveUpdates && !isInEditingMode && isHorizontal,
68
+ },
69
+ textClasses,
70
+ style.textClassList,
71
+ );
72
+
73
+ const toggleEditState = (): void => {
74
+ withLiveUpdates && setIsInEditingMode(!isInEditingMode);
75
+ };
76
+
77
+ const wrapperClassList = classNames({
78
+ [style.horizontalWrapperClassList]: isHorizontal,
79
+ [style.liveUpdatesWrapperClassList]: withLiveUpdates && !isInEditingMode,
80
+ [style.wrapperClassList]: isHorizontal,
81
+ });
82
+
83
+ const titleWrapperClassList = classNames({
84
+ [style.horizontalTitleWrapperClassList]: isHorizontal,
85
+ });
86
+
87
+ const textWrapperClassList = classNames({
88
+ [style.horizontalTextWrapperClassList]: isHorizontal,
89
+ });
90
+
91
+ return (
92
+ <ComponentWrapper
93
+ id={id}
94
+ className={classList}
95
+ title={title}
96
+ description={description}
97
+ bgColour={bgColour}
98
+ >
99
+ <div className={wrapperClassList} onClick={toggleEditState}>
100
+ <div className={titleWrapperClassList}>
101
+ {children !== undefined && children !== null ? (
102
+ children
103
+ ) : (
104
+ <h1 className={titleClassList}>{title}</h1>
105
+ )}
106
+ </div>
107
+ <div className={textWrapperClassList}>
108
+ <div id="textLineOne" className={textClassList}>
109
+ {textLineOne}
110
+ </div>
111
+ <div id="textLineTwo" className={textClassList}>
112
+ {textLineTwo}
113
+ </div>
114
+ <div id="textLineThree" className={textClassList}>
115
+ {textLineThree}
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </ComponentWrapper>
120
+ );
121
+ };
122
+
123
+ export default TextAndTitle;
@@ -0,0 +1,75 @@
1
+ .primary {
2
+ @apply bg-primary text-white;
3
+ }
4
+
5
+ .primary:hover {
6
+ @apply border-white;
7
+ }
8
+
9
+ .secondary {
10
+ @apply bg-secondary text-white;
11
+ }
12
+
13
+ .secondary:hover {
14
+ @apply border-white;
15
+ }
16
+
17
+ .white {
18
+ @apply bg-white;
19
+ }
20
+
21
+ .white:hover {
22
+ @apply border-black;
23
+ }
24
+
25
+ .black {
26
+ @apply bg-black text-white;
27
+ }
28
+
29
+ .black:hover {
30
+ @apply border-white;
31
+ }
32
+
33
+ .bordered {
34
+ @apply border-4 border-transparent;
35
+ }
36
+
37
+ .fontBold {
38
+ @apply font-bold;
39
+ }
40
+
41
+ .textCenter {
42
+ @apply text-center;
43
+ }
44
+
45
+ .titleClassList {
46
+ @apply break-words text-lg font-light;
47
+ }
48
+
49
+ .textClassList {
50
+ @apply mt-2 pt-2 text-md font-light;
51
+ }
52
+
53
+ .wrapperClassList {
54
+ @apply border-4 border-transparent;
55
+ }
56
+
57
+ .horizontalWrapperClassList {
58
+ @apply flex flex-wrap justify-center md:items-center;
59
+ }
60
+
61
+ .liveUpdatesWrapperClassList:hover {
62
+ @apply border-4 border-dashed;
63
+ }
64
+
65
+ .horizontalTextWrapperClassList {
66
+ @apply md:w-1/2 md:text-center;
67
+ }
68
+
69
+ .horizontalTitleWrapperClassList {
70
+ @apply md:w-1/2 md:text-center;
71
+ }
72
+
73
+ .buttonWrapper {
74
+ @apply pb-8 text-center;
75
+ }
@@ -0,0 +1,55 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import TextArea from '.';
5
+
6
+ const meta = {
7
+ title: 'Components/Text Area',
8
+ component: TextArea,
9
+ parameters: {},
10
+ argTypes: {
11
+ ...idAndClassName,
12
+
13
+ label: {
14
+ description: '',
15
+ control: 'text',
16
+ table: {
17
+ category: '',
18
+ },
19
+ },
20
+ placeholder: {
21
+ description: '',
22
+ control: 'text',
23
+ table: {
24
+ category: '',
25
+ },
26
+ },
27
+ bold: {
28
+ description: '',
29
+ control: 'boolean',
30
+ table: {
31
+ category: '',
32
+ },
33
+ },
34
+ bgColour: {
35
+ type: { name: 'string', required: false },
36
+ options: ['primary', 'secondary', 'white', 'black', 'gold'],
37
+ description: 'The background colour of the component',
38
+ table: {
39
+ type: { summary: 'string' },
40
+ },
41
+ defaultValue: 'primary',
42
+ control: 'select',
43
+ },
44
+ },
45
+ args: {
46
+ label: 'This is a label',
47
+ placeholder: 'This is a text area placeholder',
48
+ },
49
+ };
50
+
51
+ export default meta;
52
+
53
+ type Story = StoryObj<typeof meta>;
54
+
55
+ export const Default: Story = {};
@@ -0,0 +1,125 @@
1
+ import React, { useRef } 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
+ autoComplete?: string;
12
+ disabled?: boolean;
13
+ formId?: string;
14
+ maxLength?: number;
15
+ minLength?: number;
16
+ required?: boolean;
17
+ readOnly?: boolean;
18
+ label?: string;
19
+ name?: string;
20
+ placeholder?: string;
21
+ withValidation?: boolean;
22
+ onChange?: (e: any) => void;
23
+ onBlur?: () => void;
24
+ onFocus?: () => void;
25
+ onClick?: () => void;
26
+ errors?: string[];
27
+ errorState?: boolean;
28
+ value?: string;
29
+ bgColour?: Colours;
30
+ }
31
+
32
+ const TextArea = ({
33
+ id,
34
+ className,
35
+ autoComplete,
36
+ disabled,
37
+ formId,
38
+ maxLength,
39
+ minLength,
40
+ required = false,
41
+ readOnly,
42
+ label,
43
+ name,
44
+ placeholder,
45
+ onChange,
46
+ onBlur,
47
+ onFocus,
48
+ onClick,
49
+ withValidation,
50
+ errors,
51
+ errorState = false,
52
+ value,
53
+ }: Props): JSX.Element => {
54
+ const newId = id !== undefined ? `-${id}` : '';
55
+
56
+ const valueClassList = classNames(
57
+ {
58
+ [style.errorState]: errors != null || errorState,
59
+ },
60
+ style.value,
61
+ );
62
+
63
+ const labelClassList = classNames(
64
+ {
65
+ [style.labelError]: errors != null || errorState,
66
+ },
67
+ style.label,
68
+ );
69
+
70
+ const headerClassList = classNames(style.classList, className, 'theme-local');
71
+
72
+ const btnRef = useRef<any>(null);
73
+
74
+ const handleClick = (): void => {
75
+ btnRef.current?.focus();
76
+ };
77
+
78
+ return (
79
+ <>
80
+ <div id={id} className={headerClassList} onClick={handleClick}>
81
+ <div className={style.labelWrapper}>
82
+ <p className={labelClassList}>{label}</p>
83
+ {required && <p className={style.required}>&nbsp;*</p>}
84
+ </div>
85
+ <textarea
86
+ ref={btnRef}
87
+ id={`input${newId}`}
88
+ className={valueClassList}
89
+ autoComplete={autoComplete}
90
+ disabled={disabled}
91
+ form={formId}
92
+ maxLength={maxLength}
93
+ minLength={minLength}
94
+ required={required}
95
+ readOnly={readOnly}
96
+ name={name}
97
+ value={value}
98
+ placeholder={placeholder}
99
+ onChange={(e) => {
100
+ onChange?.(e);
101
+ }}
102
+ onBlur={onBlur}
103
+ onFocus={onFocus}
104
+ onClick={onClick}
105
+ />
106
+ </div>
107
+ {withValidation && (
108
+ <div
109
+ id={`errors${newId}`}
110
+ className={classNames(style.errors, 'theme-local')}
111
+ >
112
+ {errors?.map((error, i) => {
113
+ return (
114
+ <p key={`error-msg-${i + 0}`} className={style.errorText}>
115
+ {error}
116
+ </p>
117
+ );
118
+ })}
119
+ </div>
120
+ )}
121
+ </>
122
+ );
123
+ };
124
+
125
+ export default TextArea;
@@ -0,0 +1,60 @@
1
+ .classList {
2
+ @apply mt-4 w-full bg-white;
3
+ @apply cursor-pointer;
4
+ }
5
+
6
+ /* .classList:active p {
7
+ @apply hidden;
8
+ }
9
+
10
+ .classList:active .value {
11
+ @apply pt-3 pb-4;
12
+ } */
13
+
14
+ .fullWidth {
15
+ @apply w-full;
16
+ }
17
+
18
+ .notFullWidth {
19
+ @apply sm:w-72;
20
+ }
21
+
22
+ .labelWrapper {
23
+ @apply absolute -mt-3 ml-3 px-1;
24
+ @apply rounded-2xl bg-white text-sm font-regular;
25
+ }
26
+
27
+ .required {
28
+ @apply font-semiBold text-error;
29
+ }
30
+
31
+ .value {
32
+ @apply w-full rounded-md bg-white py-2 pl-4 text-ink;
33
+ @apply cursor-pointer;
34
+ @apply border border-black;
35
+ @apply text-md;
36
+ }
37
+
38
+ /* .value:focus {
39
+ @apply pt-3 pb-4;
40
+ }
41
+
42
+ .value:focus ~ label {
43
+ @apply text-xl;
44
+ } */
45
+
46
+ .errors {
47
+ @apply text-sm font-regular text-error;
48
+ }
49
+
50
+ .errorState {
51
+ @apply border-2 border-error;
52
+ }
53
+
54
+ .labelError {
55
+ @apply text-error;
56
+ }
57
+
58
+ .errorText {
59
+ @apply mt-1 border-l-4 border-error pl-3;
60
+ }
@@ -0,0 +1,92 @@
1
+ import CardWithTopImage from '@components/CardWithTopImage';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+ import { idAndClassName } from '@utils/controls';
4
+
5
+ import Timeline from '.';
6
+ import { type Props as imageProps } from '../Image';
7
+
8
+ const timelineItems = (): Array<{
9
+ component: JSX.Element;
10
+ centerImageProps: imageProps;
11
+ }> => {
12
+ return new Array(8).fill(null).map((_, i) => {
13
+ return {
14
+ component: (
15
+ <CardWithTopImage
16
+ imageProps={{
17
+ src: `https://picsum.photos/200/20${i}`,
18
+ roundedFull: true,
19
+ width: 4,
20
+ height: 4,
21
+ }}
22
+ className="px-4"
23
+ >
24
+ <p>This is some text</p>
25
+ <p>This is some more text</p>
26
+ <p>This is a bit more text</p>
27
+ <p>
28
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorem
29
+ odit ad sed, quam recusandae voluptatem provident eveniet beatae
30
+ omnis vero minus unde facilis. Quia commodi quas odit iusto ut enim!
31
+ </p>
32
+ </CardWithTopImage>
33
+ ),
34
+ centerImageProps: {
35
+ src: `https://picsum.photos/200/20${i}`,
36
+ imageClasses: 'mx-auto',
37
+ width: 4,
38
+ height: 4,
39
+ centerAligned: true,
40
+ roundedFull: true,
41
+ },
42
+ };
43
+ });
44
+ };
45
+
46
+ const meta = {
47
+ title: 'Components/Timeline',
48
+ component: Timeline,
49
+ parameters: {},
50
+ argTypes: {
51
+ ...idAndClassName,
52
+
53
+ isHorizontal: {
54
+ description: '',
55
+ control: 'boolean',
56
+ table: {
57
+ category: '',
58
+ },
59
+ },
60
+ useImages: {
61
+ description: '',
62
+ control: 'boolean',
63
+ table: {
64
+ category: '',
65
+ },
66
+ },
67
+ items: {
68
+ description: '',
69
+ control: 'array',
70
+ table: {
71
+ category: '',
72
+ },
73
+ },
74
+ },
75
+ args: {
76
+ title: 'This is a timeline',
77
+ description: 'What do you think to it?',
78
+ isHorizontal: true,
79
+ reverse: false,
80
+ items: timelineItems(),
81
+ textCenter: true,
82
+ useImages: true,
83
+ horizontalComponentClasses: 'w-96 h-96',
84
+ isSm: true,
85
+ },
86
+ };
87
+
88
+ export default meta;
89
+
90
+ type Story = StoryObj<typeof meta>;
91
+
92
+ export const Default: Story = {};