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,103 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import Button from '@components/Button';
4
+ import classNames from 'classnames';
5
+
6
+
7
+
8
+ export interface Props extends Partial<Pick<HTMLElement, 'className' | 'id'>> {
9
+ onClick?: React.MouseEventHandler;
10
+ variant?: 'primary' | 'secondary' | 'tertiary';
11
+ }
12
+
13
+ const HamburgerIcon = ({
14
+ id,
15
+ className,
16
+ onClick,
17
+ variant = 'primary',
18
+ }: Props): JSX.Element => {
19
+ const [opened, setOpened] = useState(false);
20
+ const classList = classNames(
21
+ {
22
+ [style.hamburgerIconSecondary]: variant === 'secondary',
23
+ [style.hamburgerIconPrimary]: variant === 'primary',
24
+ [style.hamburgerIconTertiary]: variant === 'tertiary',
25
+ },
26
+ className,
27
+ 'theme-local',
28
+ );
29
+
30
+ const lineOneClassList = classNames(
31
+ {
32
+ [style.lineOneOpened]: opened,
33
+ },
34
+ style.lineOne,
35
+ 'transition-transform',
36
+ );
37
+
38
+ const lineTwoClassList = classNames(
39
+ {
40
+ [style.lineTwoOpened]: opened,
41
+ [style.lineTwoClosed]: !opened,
42
+ },
43
+ style.lineTwo,
44
+ 'transition-opacity',
45
+ );
46
+
47
+ const lineThreeClassList = classNames(
48
+ {
49
+ [style.lineThreeOpened]: opened,
50
+ },
51
+ style.lineThree,
52
+ 'transition-transform',
53
+ );
54
+
55
+ const toggleOpened = (e: any): void => {
56
+ setOpened(!opened);
57
+ onClick?.(e);
58
+ };
59
+
60
+ return (
61
+ <Button
62
+ id={id}
63
+ className={classList}
64
+ onClick={(e) => {
65
+ toggleOpened(e);
66
+ }}
67
+ variant={variant}
68
+ type="icon"
69
+ label="Mobile menu toggle"
70
+ >
71
+ <svg
72
+ className={classNames(
73
+ {
74
+ [style.svgPrimary]: variant === 'primary',
75
+ [style.svgSecondary]: variant === 'secondary',
76
+ [style.svgTertiary]: variant === 'tertiary',
77
+ },
78
+ style.svg,
79
+ 'transition-backgroundColor',
80
+ )}
81
+ width="24"
82
+ height="24"
83
+ viewBox="0 0 24 15"
84
+ xmlns="http://www.w3.org/2000/svg"
85
+ >
86
+ <path
87
+ className={lineOneClassList}
88
+ 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"
89
+ />
90
+ <path
91
+ className={lineTwoClassList}
92
+ 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"
93
+ />
94
+ <path
95
+ className={lineThreeClassList}
96
+ 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"
97
+ />
98
+ </svg>
99
+ </Button>
100
+ );
101
+ };
102
+
103
+ export default HamburgerIcon;
@@ -0,0 +1,85 @@
1
+ .hamburgerIconPrimary path {
2
+ @apply transition-all duration-500;
3
+ @apply outline-none;
4
+ @apply fill-secondary;
5
+ }
6
+
7
+ .hamburgerIconPrimary:hover path {
8
+ @apply fill-primary;
9
+ }
10
+
11
+ .hamburgerIconPrimary:focus:active path {
12
+ @apply fill-primary;
13
+ }
14
+
15
+ .hamburgerIconSecondary path {
16
+ @apply transition-all duration-500;
17
+ @apply outline-none;
18
+ @apply fill-primary;
19
+ }
20
+
21
+ .hamburgerIconSecondary:hover path {
22
+ @apply fill-secondary;
23
+ }
24
+
25
+ .hamburgerIconSecondary:focus:active path {
26
+ @apply fill-secondary;
27
+ }
28
+
29
+ .hamburgerIconTertiary path {
30
+ @apply transition-all duration-500;
31
+ @apply outline-none;
32
+ @apply fill-secondary;
33
+ }
34
+
35
+ .hamburgerIconTertiary:hover path {
36
+ @apply fill-tertiary;
37
+ }
38
+
39
+ .hamburgerIconTertiary:focus:active path {
40
+ @apply fill-tertiary;
41
+ }
42
+
43
+ .lineOneOpened {
44
+ @apply origin-top-left -translate-y-0.5 translate-x-1 rotate-45;
45
+ }
46
+
47
+ .lineTwoOpened {
48
+ @apply opacity-0;
49
+ }
50
+
51
+ .lineTwoClosed {
52
+ @apply opacity-100;
53
+ }
54
+
55
+ .lineThreeOpened {
56
+ @apply origin-bottom-left translate-x-1 translate-y-px -rotate-45;
57
+ }
58
+
59
+ .lineOne {
60
+ @apply origin-top-left duration-200 ease-linear;
61
+ }
62
+
63
+ .lineTwo {
64
+ @apply duration-200 ease-linear;
65
+ }
66
+
67
+ .lineThree {
68
+ @apply origin-bottom-left duration-200 ease-linear;
69
+ }
70
+
71
+ .svg {
72
+ @apply mx-auto transform overflow-visible duration-500;
73
+ }
74
+
75
+ .svgPrimary {
76
+ @apply fill-secondary;
77
+ }
78
+
79
+ .svgSecondary {
80
+ @apply fill-secondary;
81
+ }
82
+
83
+ .svgTertiary {
84
+ @apply fill-tertiary;
85
+ }
@@ -0,0 +1,54 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import HorizontalLine from '.';
5
+
6
+ const meta = {
7
+ title: 'Components/HorizontalLine',
8
+ component: HorizontalLine,
9
+ argTypes: {
10
+ ...idAndClassName,
11
+
12
+ colour: {
13
+ description: 'The colour of the component',
14
+ control: 'select',
15
+ table: {
16
+ type: { summary: 'select' },
17
+ defaultValue: { summary: 'primary' },
18
+ },
19
+ defaultValue: 'primary',
20
+ },
21
+ topLine: {
22
+ description: 'Adds margin underneath the component',
23
+ control: 'boolean',
24
+ table: {
25
+ type: { summary: 'boolean' },
26
+ defaultValue: { summary: 'false' },
27
+ },
28
+ defaultValue: 'false',
29
+ },
30
+ bottomLine: {
31
+ description: 'Adds margin above the component',
32
+ control: 'boolean',
33
+ table: {
34
+ type: { summary: 'boolean' },
35
+ defaultValue: { summary: 'false' },
36
+ },
37
+ defaultValue: 'false',
38
+ },
39
+ middleLine: {
40
+ description: 'Adds margin above and below the component',
41
+ control: 'boolean',
42
+ table: {
43
+ type: { summary: 'boolean' },
44
+ defaultValue: { summary: 'false' },
45
+ },
46
+ defaultValue: 'false',
47
+ },
48
+ },
49
+ };
50
+ export default meta;
51
+
52
+ type Story = StoryObj<typeof meta>;
53
+
54
+ export const Default: Story = {};
@@ -0,0 +1,40 @@
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
+ colour?: Colours;
12
+ topLine?: boolean;
13
+ bottomLine?: boolean;
14
+ middleLine?: boolean;
15
+ }
16
+
17
+ const HorizontalLine = ({
18
+ id,
19
+ className,
20
+ colour = 'primary',
21
+ topLine = false,
22
+ bottomLine = false,
23
+ middleLine = false,
24
+ }: Props): JSX.Element => {
25
+ const classList = classNames(
26
+ {
27
+ [style.topLine]: topLine,
28
+ [style.bottomLine]: bottomLine,
29
+ [style.middleLine]: middleLine,
30
+ },
31
+ className,
32
+ style[colour],
33
+ style.classList,
34
+ 'theme-local',
35
+ );
36
+
37
+ return <hr id={id} className={classList} />;
38
+ };
39
+
40
+ export default HorizontalLine;
@@ -0,0 +1,55 @@
1
+ .classList {
2
+ @apply my-0 h-0.5 border-none py-0;
3
+ }
4
+
5
+ .topLine {
6
+ @apply mb-6;
7
+ }
8
+
9
+ .bottomLine {
10
+ @apply mt-6;
11
+ }
12
+
13
+ .middleLine {
14
+ @apply my-6;
15
+ }
16
+
17
+ .primary {
18
+ @apply bg-primary;
19
+ }
20
+
21
+ .secondary {
22
+ @apply bg-secondary;
23
+ }
24
+
25
+ .ink {
26
+ @apply bg-ink;
27
+ }
28
+
29
+ .white {
30
+ @apply bg-white;
31
+ }
32
+
33
+ .grey {
34
+ @apply bg-lightest-grey;
35
+ }
36
+
37
+ .gold {
38
+ @apply bg-gold;
39
+ }
40
+
41
+ .success {
42
+ @apply bg-success;
43
+ }
44
+
45
+ .warning {
46
+ @apply bg-warning;
47
+ }
48
+
49
+ .info {
50
+ @apply bg-info-light;
51
+ }
52
+
53
+ .error {
54
+ @apply bg-error;
55
+ }
@@ -0,0 +1,164 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import Icon from '.';
5
+
6
+ const meta = {
7
+ title: 'Components/Icon',
8
+ component: Icon,
9
+ argTypes: {
10
+ ...idAndClassName,
11
+ type: {
12
+ options: [
13
+ 'heart',
14
+ 'arrow-up',
15
+ 'arrow-down',
16
+ 'multiply',
17
+ 'burger',
18
+ 'bars',
19
+ 'facebook',
20
+ 'instagram',
21
+ ],
22
+ type: { name: 'string', required: false },
23
+ description: 'The name of the icon to display in the component',
24
+ table: {
25
+ type: { summary: 'string' },
26
+ },
27
+ control: 'select',
28
+ },
29
+ size: {
30
+ type: { name: 'number', required: false },
31
+ description: 'The size of the icon to show in the component',
32
+ table: {
33
+ type: { summary: 'number' },
34
+ },
35
+ },
36
+ animation: {
37
+ type: { name: 'string', required: false },
38
+ options: ['none', 'pulse', 'spin', 'beat'],
39
+ description: 'Type of annimation to apply to the component',
40
+ table: {
41
+ type: { summary: 'string' },
42
+ },
43
+ control: 'select',
44
+ },
45
+ reverseSpin: {
46
+ type: { name: 'boolean', required: false },
47
+ description: 'To reverse the animation on the component',
48
+ table: {
49
+ type: { summary: 'boolean' },
50
+ },
51
+ defaultValue: 'false',
52
+ },
53
+ hollow: {
54
+ type: { name: 'boolean', required: false },
55
+ description: 'To render a hollow version of the icon in component',
56
+ table: {
57
+ type: { summary: 'boolean' },
58
+ },
59
+ defaultValue: 'false',
60
+ },
61
+ colour: {
62
+ type: { name: 'string', required: false },
63
+ options: [
64
+ 'primary',
65
+ 'secondary',
66
+ 'white',
67
+ 'black',
68
+ 'gold',
69
+ 'facebook',
70
+ 'interactive-facebook',
71
+ ],
72
+ description: 'The font colour of the component',
73
+ table: {
74
+ type: { summary: 'string' },
75
+ },
76
+ defaultValue: 'primary',
77
+ control: 'select',
78
+ },
79
+ bgColour: {
80
+ type: { name: 'string', required: false },
81
+ options: [
82
+ 'primary',
83
+ 'secondary',
84
+ 'white',
85
+ 'black',
86
+ 'gold',
87
+ 'facebook',
88
+ 'interactive-facebook',
89
+ ],
90
+ description: 'The background colour of the component',
91
+ table: {
92
+ type: { summary: 'string' },
93
+ },
94
+ defaultValue: 'secondary',
95
+ control: 'select',
96
+ },
97
+ hoverColour: {
98
+ type: { name: 'string', required: false },
99
+ options: [
100
+ 'primary',
101
+ 'secondary',
102
+ 'white',
103
+ 'black',
104
+ 'gold',
105
+ 'facebook',
106
+ 'interactive-facebook',
107
+ ],
108
+ description: 'The font colour of the component',
109
+ table: {
110
+ type: { summary: 'string' },
111
+ },
112
+ defaultValue: 'primary',
113
+ control: 'select',
114
+ },
115
+ hoverBgColour: {
116
+ type: { name: 'string', required: false },
117
+ options: [
118
+ 'primary',
119
+ 'secondary',
120
+ 'white',
121
+ 'black',
122
+ 'gold',
123
+ 'facebook',
124
+ 'interactive-facebook',
125
+ ],
126
+ description: 'The background colour of the component',
127
+ table: {
128
+ type: { summary: 'string' },
129
+ },
130
+ defaultValue: 'secondary',
131
+ control: 'select',
132
+ },
133
+ rounded: {
134
+ type: { name: 'boolean', required: false },
135
+ description: 'Sets the component to a circle shape',
136
+ table: {
137
+ type: { summary: 'boolean' },
138
+ },
139
+ defaultValue: 'false',
140
+ },
141
+ brand: {
142
+ type: { name: 'boolean', required: false },
143
+ description: 'Set to true if the icon type to render is a brand image',
144
+ table: {
145
+ type: { summary: 'boolean' },
146
+ },
147
+ defaultValue: 'false',
148
+ },
149
+ },
150
+ args: {
151
+ type: 'heart',
152
+ size: 1,
153
+ colour: 'primary',
154
+ bgColour: 'white',
155
+ hoverColour: 'primary',
156
+ hoverBgColour: 'white',
157
+ },
158
+ };
159
+
160
+ export default meta;
161
+
162
+ type Story = StoryObj<typeof meta>;
163
+
164
+ export const Default: Story = {};
@@ -0,0 +1,115 @@
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
+ type: string;
12
+ size?: number;
13
+ animation?: 'pulse' | 'none';
14
+ reverseSpin?: boolean;
15
+ hollow?: boolean;
16
+ colour?: Colours;
17
+ bgColour?: Colours;
18
+ hoverColour?: Colours;
19
+ hoverBgColour?: Colours;
20
+ rounded?: boolean;
21
+ brand?: boolean;
22
+
23
+ onClick?: (e?: any) => void;
24
+ }
25
+
26
+ const Icon = ({
27
+ id,
28
+ className,
29
+ type,
30
+ size = 1,
31
+ animation = 'none',
32
+ reverseSpin = false,
33
+ hollow = false,
34
+ colour = 'primary',
35
+ bgColour = 'transparent',
36
+ hoverColour = colour,
37
+ hoverBgColour = bgColour,
38
+ rounded = false,
39
+ brand = false,
40
+ onClick,
41
+ }: Props): JSX.Element => {
42
+ const colourString: string = colour;
43
+ const hoverColourString: string = hoverColour;
44
+ const bgColourString: string = bgColour;
45
+ const hoverBgColourString: string = hoverBgColour;
46
+
47
+ const fontColourKey =
48
+ typeof colourString === 'string'
49
+ ? `text${colourString.charAt(0).toUpperCase()}${colourString.slice(1)}`
50
+ : 'textPrimary';
51
+ const backgroundColourKey =
52
+ typeof bgColourString === 'string'
53
+ ? `bg${bgColourString.charAt(0).toUpperCase()}${bgColourString.slice(1)}`
54
+ : 'bgTransparent';
55
+ const hoverFontColourKey =
56
+ typeof hoverColourString === 'string'
57
+ ? `hoverText${hoverColourString
58
+ .charAt(0)
59
+ .toUpperCase()}${hoverColourString.slice(1)}`
60
+ : 'hoverTextPrimary';
61
+ const hoverBackgroundColourKey =
62
+ typeof hoverBgColourString === 'string'
63
+ ? `hoverBg${hoverBgColourString
64
+ .charAt(0)
65
+ .toUpperCase()}${hoverBgColourString.slice(1)}`
66
+ : 'hoverBgTransparent';
67
+
68
+ const wrapperClassList = classNames(
69
+ {
70
+ [style.sizeOne]: size === 1,
71
+ [style.sizeTwo]: size === 2,
72
+ [style.sizeThree]: size === 3,
73
+ [style.sizeFour]: size === 4,
74
+ [style.sizeFive]: size === 5,
75
+ [style.sizeSix]: size === 6,
76
+ [style.sizeSeven]: size === 7,
77
+ [style.sizeEight]: size === 8,
78
+ [style.sizeNine]: size === 9,
79
+ [style.sizeTen]: size === 10,
80
+ [style.rounded]: rounded,
81
+ },
82
+ className,
83
+ style.wrapperClassList,
84
+ style[backgroundColourKey],
85
+ style[fontColourKey],
86
+ style[hoverBackgroundColourKey],
87
+ style[hoverFontColourKey],
88
+ 'transition-backgroundColor duration-500 transform theme-local',
89
+ );
90
+
91
+ const classList = classNames(
92
+ {
93
+ 'fa-brands': brand,
94
+ [`fa-${size}x`]: size,
95
+ [`fa-${animation}`]: animation,
96
+ 'fa-spin-reverse': reverseSpin,
97
+ 'fa-regular': hollow,
98
+ [style.rounded]: rounded,
99
+ },
100
+ `${style.classList} fa fa-${type}`,
101
+ );
102
+
103
+ return (
104
+ <div id={id} className={wrapperClassList} onClick={onClick}>
105
+ <span
106
+ className={classList}
107
+ role="img"
108
+ aria-hidden="true"
109
+ aria-label={type}
110
+ />
111
+ </div>
112
+ );
113
+ };
114
+
115
+ export default Icon;