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,76 @@
1
+ .classList {
2
+ @apply transform border-2 text-sm duration-500;
3
+ @apply inline-block text-center;
4
+ }
5
+
6
+ .classList:focus {
7
+ @apply outline;
8
+ }
9
+
10
+ .loading {
11
+ @apply absolute left-2/4 top-1/4 -ml-2;
12
+ }
13
+
14
+ .social {
15
+ @apply px-1 py-1;
16
+ }
17
+
18
+ .icon {
19
+ @apply px-3;
20
+ }
21
+
22
+ .default {
23
+ @apply px-8;
24
+ }
25
+
26
+ .padding {
27
+ @apply py-3;
28
+ }
29
+
30
+ .primary {
31
+ @apply border-secondary bg-primary text-secondary outline-primary;
32
+ }
33
+
34
+ .primaryNotDisabled:hover {
35
+ @apply border-primary bg-secondary text-primary;
36
+ }
37
+
38
+ .primaryNotDisabled:focus:hover {
39
+ @apply border-primary bg-secondary text-primary;
40
+ }
41
+
42
+ .secondary {
43
+ @apply border-primary bg-secondary text-primary outline-secondary;
44
+ }
45
+
46
+ .secondaryNotDisabled:hover {
47
+ @apply border-secondary bg-primary text-secondary;
48
+ }
49
+
50
+ .secondaryNotDisabled:focus:hover {
51
+ @apply border-primary bg-primary text-secondary;
52
+ }
53
+
54
+ .tertiary {
55
+ @apply border-secondary bg-secondary text-secondary outline-tertiary;
56
+ }
57
+
58
+ .tertiaryNotDisabled:hover {
59
+ @apply border-tertiary bg-secondary text-tertiary;
60
+ }
61
+
62
+ .tertiaryNotDisabled:focus:hover {
63
+ @apply border-secondary bg-secondary text-tertiary;
64
+ }
65
+
66
+ .disabled {
67
+ @apply opacity-50;
68
+ }
69
+
70
+ .rounded {
71
+ @apply rounded-lg;
72
+ }
73
+
74
+ .notRounded {
75
+ @apply rounded-none;
76
+ }
@@ -0,0 +1,82 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import Calendar from '.';
5
+
6
+ const meta = {
7
+ title: 'Components/Calendar',
8
+ component: Calendar,
9
+ argTypes: {
10
+ ...idAndClassName,
11
+
12
+ useRange: {
13
+ type: { name: 'boolean', required: false },
14
+ description: 'Toggles the ability to select a range of dates',
15
+ table: {
16
+ defaultValue: { summary: 'false' },
17
+ },
18
+ defaultValue: 'false',
19
+ },
20
+ showDoubleView: {
21
+ type: { name: 'boolean', required: false },
22
+ description: 'Toggles the 2 month mode',
23
+ table: {
24
+ defaultValue: { summary: 'true' },
25
+ },
26
+ defaultValue: 'true',
27
+ },
28
+ showNavigation: {
29
+ type: { name: 'boolean', required: false },
30
+ description: 'Toggles the navigation at the top of the calendar',
31
+ table: {
32
+ defaultValue: { summary: 'true' },
33
+ },
34
+ defaultValue: 'true',
35
+ },
36
+ minDetail: {
37
+ type: { name: 'string', required: false },
38
+ description: 'The detail in whuch you with the calendar to show',
39
+ table: {
40
+ defaultValue: { summary: 'month' },
41
+ },
42
+ defaultValue: 'month',
43
+ },
44
+ minDate: {
45
+ type: { name: 'date', required: false },
46
+ description: 'The minimum date to show as available on the calendar',
47
+ table: {
48
+ defaultValue: { summary: new Date() },
49
+ },
50
+ defaultValue: new Date(),
51
+ },
52
+ maxDate: {
53
+ type: { name: 'date', required: false },
54
+ description: 'The maximum date to show as available on the calendar',
55
+ table: {
56
+ defaultValue: {
57
+ summary: new Date(
58
+ new Date().setFullYear(new Date().getFullYear() + 1),
59
+ ),
60
+ },
61
+ },
62
+ defaultValue: new Date(
63
+ new Date().setFullYear(new Date().getFullYear() + 1),
64
+ ),
65
+ },
66
+ disabledDates: {
67
+ type: { name: 'array', required: false },
68
+ description: 'An array of dates as strings to grey out on the component',
69
+ table: {
70
+ defaultValue: { summary: [] },
71
+ },
72
+ defaultValue: [],
73
+ },
74
+ },
75
+ args: {},
76
+ };
77
+
78
+ export default meta;
79
+
80
+ type Story = StoryObj<typeof meta>;
81
+
82
+ export const Default: Story = {};
@@ -0,0 +1,76 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import classNames from 'classnames';
4
+ import Calendar from 'react-calendar';
5
+
6
+ import './style.css';
7
+
8
+ export type Detail = 'month' | 'year' | 'decade' | 'century';
9
+ export interface Props {
10
+ id?: string;
11
+ className?: string;
12
+
13
+ onChange?: () => void;
14
+ useRange?: boolean;
15
+ minDetail?: Detail;
16
+ minDate?: Date;
17
+ maxDate?: Date;
18
+ showNavigation?: true;
19
+ disabledDates?: string[];
20
+ showDoubleView?: boolean;
21
+ }
22
+
23
+ const CalendarComponent: React.FC<Props> = ({
24
+ id = 'sdfghj',
25
+ className,
26
+ onChange,
27
+
28
+ useRange = false,
29
+ minDetail = 'month',
30
+ minDate = new Date(),
31
+ maxDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1)),
32
+ showNavigation = true,
33
+ disabledDates = [],
34
+ showDoubleView = true,
35
+ }: Props): JSX.Element => {
36
+ const [today, setToday] = useState(new Date());
37
+
38
+ const calculateDisabledDates = (date: any, disabledDates: any): boolean => {
39
+ const formattedDate = new Intl.DateTimeFormat('en-gb', {
40
+ year: 'numeric',
41
+ month: '2-digit',
42
+ day: '2-digit',
43
+ }).format(date?.date);
44
+
45
+ return disabledDates.includes(formattedDate);
46
+ };
47
+
48
+ return (
49
+ <div id={id} className={classNames(className, 'theme-local')}>
50
+ <Calendar
51
+ onActiveStartDateChange={({ value, activeStartDate, action }) => {
52
+ const toFormat = activeStartDate !== null ? activeStartDate : today;
53
+ if (action === 'next') {
54
+ setToday(new Date(toFormat));
55
+ }
56
+ if (action === 'prev') {
57
+ setToday(new Date(toFormat));
58
+ }
59
+ }}
60
+ activeStartDate={today}
61
+ onChange={onChange}
62
+ selectRange={useRange}
63
+ minDetail={minDetail}
64
+ minDate={minDate}
65
+ maxDate={maxDate}
66
+ showNavigation={showNavigation}
67
+ showDoubleView={showDoubleView}
68
+ tileDisabled={(date: any) =>
69
+ calculateDisabledDates(date, disabledDates)
70
+ }
71
+ />
72
+ </div>
73
+ );
74
+ };
75
+
76
+ export default CalendarComponent;
@@ -0,0 +1,233 @@
1
+ .react-calendar {
2
+ width: 410px;
3
+ background: #fff;
4
+ border: none;
5
+ border-radius: 25px;
6
+ border: 1px solid #fff;
7
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
8
+ padding: 8px;
9
+ line-height: 1.125em;
10
+ }
11
+
12
+ .react-calendar--doubleView .react-calendar__viewContainer {
13
+ display: flex;
14
+ margin: -0.5em;
15
+ }
16
+
17
+ .react-calendar--doubleView .react-calendar__viewContainer > * {
18
+ width: 50%;
19
+ margin: 0.5em;
20
+ }
21
+
22
+ .react-calendar button:enabled:hover {
23
+ cursor: pointer;
24
+ }
25
+
26
+ .react-calendar__navigation {
27
+ display: flex;
28
+ height: 50px;
29
+ margin-bottom: 1em;
30
+ }
31
+
32
+ .react-calendar__month-view__weekdays__weekday {
33
+ padding: 0.5em;
34
+ }
35
+
36
+ .react-calendar__month-view__weekdays {
37
+ text-align: center;
38
+ text-transform: uppercase;
39
+ font-size: 0.75em;
40
+ }
41
+
42
+ .react-calendar--doubleView {
43
+ width: 800px;
44
+ }
45
+
46
+ .react-calendar__month-view {
47
+ padding-left: 20px;
48
+ padding-right: 20px;
49
+ }
50
+
51
+ .react-calendar__tile {
52
+ height: 50px;
53
+ width: 50px;
54
+ }
55
+
56
+ .react-calendar__tile:disabled {
57
+ background-color: #fff;
58
+ color: #bebebe;
59
+ }
60
+
61
+ .react-calendar__month-view__days__day--weekend {
62
+ color: #000;
63
+ }
64
+
65
+ .react-calendar__month-view__days__day {
66
+ color: #000;
67
+ }
68
+
69
+ .react-calendar__month-view__days__day--neighboringMonth {
70
+ visibility: hidden;
71
+ }
72
+
73
+ .react-calendar__tile:enabled:hover,
74
+ .react-calendar__tile:enabled:focus {
75
+ border-radius: 50%;
76
+ border: 1px solid;
77
+ border-color: #000;
78
+ background: #fff;
79
+ color: #000;
80
+ }
81
+
82
+ .react-calendar__tile--now {
83
+ background: #fff;
84
+ color: #000;
85
+ }
86
+
87
+ .react-calendar__tile--now:enabled:hover,
88
+ .react-calendar__tile--now:enabled:focus {
89
+ border-radius: 50%;
90
+ border: 1px solid;
91
+ border-color: #000;
92
+ background: #fff;
93
+ color: #000;
94
+ }
95
+
96
+ .react-calendar__tile--hasActive:enabled:hover,
97
+ .react-calendar__tile--hasActive:enabled:focus {
98
+ background: #f8f8fa;
99
+ }
100
+
101
+ .react-calendar__tile--active {
102
+ background: #000;
103
+ border-radius: 50%;
104
+ color: #fff;
105
+ }
106
+
107
+ .react-calendar__tile--rangeEnd.react-calendar__tile--active:enabled:hover,
108
+ .react-calendar__tile--rangeEnd.react-calendar__tile--active:enabled:focus,
109
+ .react-calendar__tile--rangeEnd:enabled {
110
+ border-top-right-radius: 50%;
111
+ border-bottom-right-radius: 50%;
112
+ border-top-left-radius: 0;
113
+ border-bottom-left-radius: 0;
114
+ border: 1px solid;
115
+ border-color: #000;
116
+ background: #000;
117
+ color: #fff;
118
+ }
119
+
120
+ .react-calendar__tile--rangeStart.react-calendar__tile--active:enabled:hover,
121
+ .react-calendar__tile--rangeStart.react-calendar__tile--active:enabled:focus,
122
+ .react-calendar__tile--rangeStart:enabled {
123
+ border-top-right-radius: 0;
124
+ border-bottom-right-radius: 0;
125
+ border-top-left-radius: 50%;
126
+ border-bottom-left-radius: 50%;
127
+ border: 1px solid;
128
+ border-color: #000;
129
+ background: #000;
130
+ color: #fff;
131
+ }
132
+
133
+ .react-calendar--selectRange .react-calendar__tile--hover {
134
+ background-color: #dfdfe1;
135
+ }
136
+
137
+ .react-calendar--selectRange .react-calendar__tile--rangeStart {
138
+ background-color: #000000;
139
+ color: #fff;
140
+ }
141
+
142
+ .react-calendar__tile--range {
143
+ background: #dfdfe1;
144
+ color: #000;
145
+ border-radius: 0;
146
+ }
147
+
148
+ .react-calendar__tile--rangeStart {
149
+ border-top-right-radius: 0;
150
+ border-bottom-right-radius: 0;
151
+ border-top-left-radius: 50%;
152
+ border-bottom-left-radius: 50%;
153
+ background: #000;
154
+ color: #fff;
155
+ }
156
+
157
+ .react-calendar__tile--rangeEnd {
158
+ border-top-right-radius: 50%;
159
+ border-bottom-right-radius: 50%;
160
+ border-top-left-radius: 0;
161
+ border-bottom-left-radius: 0;
162
+ background: #000;
163
+ color: #fff;
164
+ }
165
+
166
+ .react-calendar__navigation__prev-button {
167
+ background: #fff;
168
+ }
169
+
170
+ .react-calendar__navigation__next-button {
171
+ background: #fff;
172
+ }
173
+
174
+ .react-calendar__navigation__prev2-button {
175
+ display: none;
176
+ }
177
+
178
+ .react-calendar__navigation__next2-button {
179
+ display: none;
180
+ }
181
+
182
+ .react-calendar__navigation__label__labelText {
183
+ color: #000000;
184
+ }
185
+
186
+ .react-calendar__navigation {
187
+ height: 50px;
188
+ }
189
+
190
+ .react-calendar__navigation button {
191
+ color: #000;
192
+ width: 50px;
193
+ background: none;
194
+ font-size: 16px;
195
+ }
196
+ .react-calendar__navigation button:enabled:hover,
197
+ .react-calendar__navigation button:enabled:focus {
198
+ background-color: #bebebe;
199
+ color: black;
200
+ border-radius: 50%;
201
+ }
202
+
203
+ .react-calendar__navigation button:disabled {
204
+ background: #fff;
205
+ color: #bebebe;
206
+ }
207
+
208
+ abbr[title] {
209
+ text-decoration: none;
210
+ }
211
+
212
+ .react-calendar__navigation__label__divider {
213
+ display: none;
214
+ }
215
+
216
+ .react-calendar__navigation__label {
217
+ padding-top: 20px;
218
+ display: flex;
219
+ flex-grow: 1;
220
+ justify-content: space-between;
221
+ }
222
+
223
+ .react-calendar__navigation__label__labelText--from {
224
+ margin-left: 80px;
225
+ }
226
+
227
+ .react-calendar__navigation__label__labelText--to {
228
+ margin-right: 100px;
229
+ }
230
+
231
+ button.react-calendar__tile.react-calendar__tile--active.react-calendar__tile--range.react-calendar__tile--rangeStart.react-calendar__tile--rangeEnd.react-calendar__tile--rangeBothEnds.react-calendar__tile--hover.react-calendar__tile--hoverStart.react-calendar__tile--hoverEnd.react-calendar__tile--hoverBothEnds.react-calendar__month-view__days__day.react-calendar__month-view__days__day--weekend {
232
+ background-color: #000;
233
+ }
@@ -0,0 +1,75 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import Card from '.';
5
+
6
+ const meta = {
7
+ title: 'Components/Card',
8
+ component: Card,
9
+ argTypes: {
10
+ ...idAndClassName,
11
+ imageProps: {
12
+ description: '',
13
+ table: {},
14
+ },
15
+ videoProps: {
16
+ description: '',
17
+ table: {},
18
+ },
19
+ title: {
20
+ description: 'The title to display on the component',
21
+ table: {},
22
+ },
23
+ subTitle: {
24
+ description: 'The subtitle to display on the component',
25
+ table: {},
26
+ },
27
+ description: {
28
+ description: 'The description to display on the component',
29
+ table: {},
30
+ },
31
+ href: {
32
+ description:
33
+ 'The link to send the user to when clicking on the component',
34
+ table: {},
35
+ },
36
+ target: {
37
+ type: { name: 'string', required: false },
38
+ options: ['_blank', '_self'],
39
+ description: '',
40
+ table: {
41
+ type: { summary: '_blank' },
42
+ defaultValue: { summary: '_blank' },
43
+ },
44
+ defaultValue: '_blank',
45
+ control: { type: 'radio' },
46
+ },
47
+ buttonProps: {
48
+ description: '',
49
+ table: {},
50
+ },
51
+ },
52
+ args: {
53
+ imageProps: {
54
+ src: 'https://picsum.photos/500/300',
55
+ },
56
+ title: 'This is a title',
57
+ subTitle: 'This is a subtitle',
58
+ description:
59
+ 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fuga excepturi itaque in. Debitis et velit explicabo id quo repellendus architecto hic quis repellat corporis cumque dolorem officiis animi, dicta praesentium.',
60
+ href: '/',
61
+ buttonProps: {
62
+ children: 'Button Text',
63
+ disabled: false,
64
+ hoverText: 'buttonHoverText',
65
+ href: '/',
66
+ rounded: true,
67
+ },
68
+ },
69
+ };
70
+
71
+ export default meta;
72
+
73
+ type Story = StoryObj<typeof meta>;
74
+
75
+ export const Default: Story = {};
@@ -0,0 +1,102 @@
1
+ import React from 'react';
2
+
3
+ import Button, { type Props as buttonProps } from '@components/Button';
4
+ import { type Props as imageProps } from '@components/Image';
5
+ import Video, { type Props as videoProps } from '@components/Video';
6
+ import classNames from 'classnames';
7
+
8
+
9
+
10
+ interface AnchorAttributes
11
+ extends Partial<
12
+ Pick<JSX.IntrinsicElements['a'], 'href' | 'title' | 'target'>
13
+ > {}
14
+
15
+ export interface Props {
16
+ id?: string;
17
+ className?: string;
18
+ title?: string;
19
+ imageProps?: imageProps;
20
+ videoProps?: videoProps;
21
+ subTitle?: string;
22
+ description?: string;
23
+ href?: string;
24
+ target?: string;
25
+ buttonProps?: buttonProps;
26
+ }
27
+
28
+ const Card: React.FC<Props> = ({
29
+ id,
30
+ className,
31
+ imageProps,
32
+ videoProps,
33
+ title,
34
+ subTitle,
35
+ description,
36
+ href,
37
+ target,
38
+ buttonProps,
39
+ }: Props): JSX.Element => {
40
+ const cardTitleClasses = classNames(style.title);
41
+ const cardSubTitleClassList = classNames(style.subtitle);
42
+ const cardDescriptionClassList = classNames(style.description);
43
+ const classList = classNames(className, style.classList, 'theme-local');
44
+ const imageClassList = classNames(style.imageClassList);
45
+ let Tag: keyof Pick<JSX.IntrinsicElements, 'a' | 'div'> = 'div';
46
+ let attributes: AnchorAttributes = {};
47
+
48
+ if (Boolean(href) || Boolean(target)) {
49
+ Tag = 'a';
50
+ attributes = { href, title, target };
51
+ }
52
+
53
+ const shouldDisplayButton =
54
+ buttonProps?.children !== undefined &&
55
+ (buttonProps.href !== undefined || buttonProps.onClick !== undefined) &&
56
+ Tag === 'div';
57
+
58
+ return (
59
+ <Tag id={id} className={classList} {...attributes}>
60
+ <div>
61
+ {videoProps?.mp4File !== undefined ||
62
+ videoProps?.webmFile !== undefined ||
63
+ videoProps?.ogvFile !== undefined ? (
64
+ <Video {...videoProps} />
65
+ ) : (
66
+ imageProps !== undefined && (
67
+ <img
68
+ className={imageClassList}
69
+ title={`${title?.replace(/\s/g, '-') ?? 'a'}-logo`}
70
+ alt={
71
+ title !== undefined
72
+ ? `${title?.replace(/\s/g, '-')}-image`
73
+ : 'image'
74
+ }
75
+ {...imageProps}
76
+ />
77
+ )
78
+ )}
79
+ </div>
80
+ <div className={style.contentWrapper}>
81
+ <div className={style.movingContent}>
82
+ {title !== undefined && <h3 className={cardTitleClasses}>{title}</h3>}
83
+ {subTitle !== undefined && (
84
+ <h4 className={cardSubTitleClassList}>{subTitle}</h4>
85
+ )}
86
+ </div>
87
+ <div className={style.staticContent}>
88
+ {description !== undefined && (
89
+ <p className={cardDescriptionClassList}>{description}</p>
90
+ )}
91
+ {shouldDisplayButton && (
92
+ <Button className={style.buttonClassList} {...buttonProps}>
93
+ {buttonProps?.children}
94
+ </Button>
95
+ )}
96
+ </div>
97
+ </div>
98
+ </Tag>
99
+ );
100
+ };
101
+
102
+ export default Card;
@@ -0,0 +1,75 @@
1
+ .classList {
2
+ @apply flex flex-col;
3
+ @apply rounded-lg;
4
+ @apply shadow-xl;
5
+ }
6
+
7
+ a .classList:hover {
8
+ @apply cursor-pointer;
9
+ }
10
+
11
+ .classList:hover .movingContent {
12
+ @apply -mt-8;
13
+ @apply transition-all duration-300;
14
+ }
15
+
16
+ .classList:hover .staticContent {
17
+ @apply mt-8;
18
+ @apply transition-all duration-300;
19
+ }
20
+
21
+ .classList:focus {
22
+ @apply border-2 border-primary;
23
+ border-radius: 10px;
24
+ }
25
+
26
+ .classList:focus .movingContent {
27
+ @apply -mt-8;
28
+ @apply transition-all duration-300;
29
+ }
30
+
31
+ .classList:focus .staticContent {
32
+ @apply mt-8;
33
+ @apply transition-all duration-300;
34
+ }
35
+
36
+ .imageClassList {
37
+ @apply h-full w-full object-cover;
38
+ @apply h-64 overflow-hidden object-cover;
39
+ @apply rounded-t-lg;
40
+ height: 256px;
41
+ }
42
+
43
+ .contentWrapper {
44
+ @apply flex flex-col items-stretch justify-between;
45
+ height: calc(100% - 256px);
46
+ }
47
+
48
+ .movingContent {
49
+ @apply bg-white;
50
+ @apply mt-0 px-6 pt-6;
51
+ @apply rounded-b-lg;
52
+ @apply transition-all duration-300;
53
+ }
54
+
55
+ .staticContent {
56
+ @apply h-full p-6;
57
+ @apply transition-all duration-300;
58
+ @apply flex flex-col items-stretch justify-between;
59
+ }
60
+
61
+ .title {
62
+ @apply text-md font-regular;
63
+ }
64
+
65
+ .subtitle {
66
+ @apply text-sm font-regular text-ink;
67
+ }
68
+
69
+ .description {
70
+ @apply flex-1 pb-6 text-sm font-light;
71
+ }
72
+
73
+ .buttonClassList {
74
+ @apply w-full;
75
+ }