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,350 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { idAndClassName } from '@utils/controls';
3
+
4
+ import CarouselThumbnail from '.';
5
+
6
+ const slides = [
7
+ <img
8
+ key={1}
9
+ className="keen-slider__slide number-slide1"
10
+ src="https://picsum.photos/500/300"
11
+ />,
12
+ <img
13
+ key={2}
14
+ className="keen-slider__slide number-slide2"
15
+ src="https://picsum.photos/500/301"
16
+ />,
17
+ <img
18
+ key={3}
19
+ className="keen-slider__slide number-slide3"
20
+ src="https://picsum.photos/500/302"
21
+ />,
22
+ <img
23
+ key={4}
24
+ className="keen-slider__slide number-slide4"
25
+ src="https://picsum.photos/500/303"
26
+ />,
27
+ <img
28
+ key={5}
29
+ className="keen-slider__slide number-slide5"
30
+ src="https://picsum.photos/500/304"
31
+ />,
32
+ <img
33
+ key={6}
34
+ className="keen-slider__slide number-slide6"
35
+ src="https://picsum.photos/500/30"
36
+ />,
37
+ ];
38
+
39
+ const meta = {
40
+ title: 'Components/CarouselThumbnail',
41
+ component: CarouselThumbnail,
42
+ parameters: {},
43
+ argTypes: {
44
+ ...idAndClassName,
45
+ breakpoints: {
46
+ type: { name: 'number', required: false },
47
+ description: 'The slide to begin on',
48
+ table: {
49
+ category: '',
50
+ subcategory: '',
51
+ type: { summary: 'number' },
52
+ defaultValue: { summary: 'undefined' },
53
+ },
54
+ },
55
+ defaultAnimation: {
56
+ type: { name: 'number', required: false },
57
+ description: 'The slide to begin on',
58
+ table: {
59
+ category: '',
60
+ subcategory: '',
61
+ type: { summary: 'number' },
62
+ defaultValue: { summary: 'undefined' },
63
+ },
64
+ },
65
+ drag: {
66
+ type: { name: 'boolean', required: false },
67
+ description: 'Can the carousel be dragged or not',
68
+ table: {
69
+ category: '',
70
+ subcategory: '',
71
+ type: { summary: 'boolean' },
72
+ defaultValue: { summary: 'undefined' },
73
+ },
74
+ },
75
+ dragSpeed: {
76
+ type: { name: 'number', required: false },
77
+ description: 'The slide to begin on',
78
+ table: {
79
+ category: '',
80
+ subcategory: '',
81
+ type: { summary: 'number' },
82
+ defaultValue: { summary: 'undefined' },
83
+ },
84
+ },
85
+ initial: {
86
+ type: { name: 'number', required: false },
87
+ description: 'The slide to begin on',
88
+ table: {
89
+ category: '',
90
+ subcategory: '',
91
+ type: { summary: 'number' },
92
+ defaultValue: { summary: 'undefined' },
93
+ },
94
+ },
95
+ loop: {
96
+ type: { name: 'boolean', required: false },
97
+ description: 'loop the end back to the start',
98
+ table: {
99
+ category: '',
100
+ subcategory: '',
101
+ type: { summary: 'boolean' },
102
+ defaultValue: { summary: 'undefined' },
103
+ },
104
+ },
105
+ mode: {
106
+ type: { name: 'string', required: false },
107
+ description: 'snap, free or snap-free',
108
+ table: {
109
+ category: '',
110
+ subcategory: '',
111
+ type: { summary: 'string' },
112
+ defaultValue: { summary: 'undefined' },
113
+ },
114
+ },
115
+ range: {
116
+ type: { name: 'number', required: false },
117
+ description: '',
118
+ table: {
119
+ category: '',
120
+ subcategory: '',
121
+ type: { summary: 'number' },
122
+ defaultValue: { summary: 'undefined' },
123
+ },
124
+ },
125
+ renderMode: {
126
+ type: { name: 'number', required: false },
127
+ description: '',
128
+ table: {
129
+ category: '',
130
+ subcategory: '',
131
+ type: { summary: 'number' },
132
+ defaultValue: { summary: 'undefined' },
133
+ },
134
+ },
135
+ rtl: {
136
+ type: { name: 'boolean', required: false },
137
+ description: 'to display right to left',
138
+ table: {
139
+ category: '',
140
+ subcategory: '',
141
+ type: { summary: 'boolean' },
142
+ defaultValue: { summary: 'undefined' },
143
+ },
144
+ },
145
+ rubberband: {
146
+ type: { name: 'boolean', required: false },
147
+ description: '',
148
+ table: {
149
+ category: '',
150
+ subcategory: '',
151
+ type: { summary: 'boolean' },
152
+ defaultValue: { summary: 'undefined' },
153
+ },
154
+ },
155
+ slides: {
156
+ type: { name: 'boolean', required: false },
157
+ description: '',
158
+ table: {
159
+ category: '',
160
+ subcategory: '',
161
+ type: { summary: 'boolean' },
162
+ defaultValue: { summary: 'undefined' },
163
+ },
164
+ },
165
+ vertical: {
166
+ type: { name: 'boolean', required: false },
167
+ description: 'displays the slider vertically',
168
+ table: {
169
+ category: '',
170
+ subcategory: '',
171
+ type: { summary: 'boolean' },
172
+ defaultValue: { summary: 'undefined' },
173
+ },
174
+ },
175
+ animationStarted: {
176
+ type: { name: 'boolean', required: false },
177
+ description: '',
178
+ table: {
179
+ category: '',
180
+ subcategory: '',
181
+ type: { summary: 'boolean' },
182
+ defaultValue: { summary: 'undefined' },
183
+ },
184
+ },
185
+ animationStopped: {
186
+ type: { name: 'boolean', required: false },
187
+ description: '',
188
+ table: {
189
+ category: '',
190
+ subcategory: '',
191
+ type: { summary: 'boolean' },
192
+ defaultValue: { summary: 'undefined' },
193
+ },
194
+ },
195
+ animationEnded: {
196
+ type: { name: 'boolean', required: false },
197
+ description: '',
198
+ table: {
199
+ category: '',
200
+ subcategory: '',
201
+ type: { summary: 'boolean' },
202
+ defaultValue: { summary: 'undefined' },
203
+ },
204
+ },
205
+ destroyed: {
206
+ type: { name: 'boolean', required: false },
207
+ description: '',
208
+ table: {
209
+ category: '',
210
+ subcategory: '',
211
+ type: { summary: 'boolean' },
212
+ defaultValue: { summary: 'undefined' },
213
+ },
214
+ },
215
+ detailsChanged: {
216
+ type: { name: 'boolean', required: false },
217
+ description: '',
218
+ table: {
219
+ category: '',
220
+ subcategory: '',
221
+ type: { summary: 'boolean' },
222
+ defaultValue: { summary: 'undefined' },
223
+ },
224
+ },
225
+ dragged: {
226
+ type: { name: 'boolean', required: false },
227
+ description: '',
228
+ table: {
229
+ category: '',
230
+ subcategory: '',
231
+ type: { summary: 'boolean' },
232
+ defaultValue: { summary: 'undefined' },
233
+ },
234
+ },
235
+ dragStarted: {
236
+ type: { name: 'boolean', required: false },
237
+ description: '',
238
+ table: {
239
+ category: '',
240
+ subcategory: '',
241
+ type: { summary: 'boolean' },
242
+ defaultValue: { summary: 'undefined' },
243
+ },
244
+ },
245
+ dragChecked: {
246
+ type: { name: 'boolean', required: false },
247
+ description: '',
248
+ table: {
249
+ category: '',
250
+ subcategory: '',
251
+ type: { summary: 'boolean' },
252
+ defaultValue: { summary: 'undefined' },
253
+ },
254
+ },
255
+ dragEnded: {
256
+ type: { name: 'boolean', required: false },
257
+ description: '',
258
+ table: {
259
+ category: '',
260
+ subcategory: '',
261
+ type: { summary: 'boolean' },
262
+ defaultValue: { summary: 'undefined' },
263
+ },
264
+ },
265
+ beforeOptionsChanged: {
266
+ type: { name: 'boolean', required: false },
267
+ description: '',
268
+ table: {
269
+ category: '',
270
+ subcategory: '',
271
+ type: { summary: 'boolean' },
272
+ defaultValue: { summary: 'undefined' },
273
+ },
274
+ },
275
+ optionsChanged: {
276
+ type: { name: 'boolean', required: false },
277
+ description: '',
278
+ table: {
279
+ category: '',
280
+ subcategory: '',
281
+ type: { summary: 'boolean' },
282
+ defaultValue: { summary: 'undefined' },
283
+ },
284
+ },
285
+ updated: {
286
+ type: { name: 'boolean', required: false },
287
+ description: '',
288
+ table: {
289
+ category: '',
290
+ subcategory: '',
291
+ type: { summary: 'boolean' },
292
+ defaultValue: { summary: 'undefined' },
293
+ },
294
+ },
295
+ perView: {
296
+ type: { name: 'number', required: false },
297
+ description: 'The number of slides to show at a time',
298
+ table: {
299
+ category: '',
300
+ subcategory: '',
301
+ type: { summary: 'number' },
302
+ defaultValue: { summary: 'undefined' },
303
+ },
304
+ },
305
+ spacing: {
306
+ type: { name: 'number', required: false },
307
+ description: 'The spacing left and right of each slide',
308
+ table: {
309
+ category: '',
310
+ subcategory: '',
311
+ type: { summary: 'number' },
312
+ defaultValue: { summary: 'undefined' },
313
+ },
314
+ },
315
+ number: {
316
+ type: { name: 'number', required: false },
317
+ description: '',
318
+ table: {
319
+ category: '',
320
+ subcategory: '',
321
+ type: { summary: 'number' },
322
+ defaultValue: { summary: 'undefined' },
323
+ },
324
+ },
325
+ origin: {
326
+ type: { name: 'boolean', required: false },
327
+ description: '',
328
+ table: {
329
+ category: '',
330
+ subcategory: '',
331
+ type: { summary: 'boolean' },
332
+ defaultValue: { summary: 'undefined' },
333
+ },
334
+ },
335
+ },
336
+ args: {
337
+ title: 'Card Carousel',
338
+ description: 'what do you think to this?',
339
+ loop: true,
340
+ drag: true,
341
+ slides,
342
+ spacing: 16,
343
+ },
344
+ };
345
+
346
+ export default meta;
347
+
348
+ type Story = StoryObj<typeof meta>;
349
+
350
+ export const Default: Story = {};
@@ -0,0 +1,302 @@
1
+ import React from 'react';
2
+
3
+ import ComponentWrapper from '@components/ComponentWrapper';
4
+ import { type Colours } from '@utils/controls';
5
+ import classNames from 'classnames';
6
+ import 'keen-slider/keen-slider.min.css';
7
+ import {
8
+ useKeenSlider,
9
+ type KeenSliderInstance,
10
+ type KeenSliderHooks,
11
+ type KeenSliderOptions,
12
+ } from 'keen-slider/react';
13
+
14
+
15
+
16
+ export interface Props {
17
+ id?: string;
18
+ className?: string;
19
+ slideWrapperClassName?: string;
20
+ title?: string;
21
+ description?: string;
22
+ bgColour?: Colours;
23
+ breakpoints?: Record<
24
+ string,
25
+ Omit<KeenSliderOptions<{}, {}, KeenSliderHooks>, 'breakpoints'>
26
+ >;
27
+ defaultAnimation?: { duration?: number; easing?: (t: number) => number };
28
+ disabled: boolean;
29
+ drag?: boolean;
30
+ dragSpeed?: number;
31
+ initial?: number;
32
+ loop?: boolean;
33
+ mode?: 'snap' | 'free' | 'free-snap';
34
+ range?: { align?: boolean; min?: number; max?: number };
35
+ renderMode?: 'precision' | 'performance' | 'custom';
36
+ rtl?: boolean;
37
+ rubberband?: boolean;
38
+ slides?: any[];
39
+ vertical?: boolean;
40
+ animationStarted?: (
41
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
42
+ ) => void;
43
+ animationStopped?: (
44
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
45
+ ) => void;
46
+ animationEnded?: (
47
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
48
+ ) => void;
49
+ created?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
50
+ destroyed?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
51
+ detailsChanged?: (
52
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
53
+ ) => void;
54
+ dragged?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
55
+ dragStarted?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
56
+ dragChecked?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
57
+ dragEnded?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
58
+ beforeOptionsChanged?: (
59
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
60
+ ) => void;
61
+ optionsChanged?: (
62
+ slider: KeenSliderInstance<{}, {}, KeenSliderHooks>,
63
+ ) => void;
64
+ slideChanged?: boolean;
65
+ updated?: (slider: KeenSliderInstance<{}, {}, KeenSliderHooks>) => void;
66
+ spacing?: number;
67
+ number?: number;
68
+ origin?: number | 'auto' | 'center';
69
+ }
70
+
71
+ const CarouselThumbnail: React.FC<Props> = ({
72
+ id,
73
+ className,
74
+ slideWrapperClassName,
75
+ title,
76
+ description,
77
+ bgColour,
78
+ breakpoints,
79
+ defaultAnimation,
80
+ disabled,
81
+ drag,
82
+ dragSpeed,
83
+ initial,
84
+ loop = true,
85
+ mode = 'snap',
86
+ range,
87
+ renderMode,
88
+ rtl,
89
+ rubberband,
90
+ slides,
91
+ vertical,
92
+ animationStarted,
93
+ animationStopped,
94
+ animationEnded,
95
+ created,
96
+ destroyed,
97
+ detailsChanged,
98
+ dragged,
99
+ dragStarted,
100
+ dragChecked,
101
+ dragEnded,
102
+ beforeOptionsChanged,
103
+ optionsChanged,
104
+ slideChanged,
105
+ updated,
106
+ spacing,
107
+ number,
108
+ origin,
109
+ }) => {
110
+ const classList = classNames(className, 'theme-local');
111
+
112
+ function WheelControls(slider: any): void {
113
+ let touchTimeout: any;
114
+ let position: any;
115
+ let wheelActive: boolean;
116
+
117
+ function dispatch(e: any, name: string): void {
118
+ position.x -= e.deltaX;
119
+ position.y -= e.deltaY;
120
+ slider.container.dispatchEvent(
121
+ new CustomEvent(name, {
122
+ detail: {
123
+ x: position.x,
124
+ y: position.y,
125
+ },
126
+ }),
127
+ );
128
+ }
129
+
130
+ function wheelStart(e: any): void {
131
+ position = {
132
+ x: e.pageX,
133
+ y: e.pageY,
134
+ };
135
+ dispatch(e, 'ksDragStart');
136
+ }
137
+
138
+ function wheel(e: any): void {
139
+ dispatch(e, 'ksDrag');
140
+ }
141
+
142
+ function wheelEnd(e: any): void {
143
+ dispatch(e, 'ksDragEnd');
144
+ }
145
+
146
+ function eventWheel(e: any): void {
147
+ if (!wheelActive) {
148
+ wheelStart(e);
149
+ wheelActive = true;
150
+ }
151
+ wheel(e);
152
+ clearTimeout(touchTimeout);
153
+ touchTimeout = setTimeout(() => {
154
+ wheelActive = false;
155
+ wheelEnd(e);
156
+ }, 50);
157
+ }
158
+
159
+ slider.on('created', () => {
160
+ slider.container.addEventListener('wheel', eventWheel, {
161
+ passive: true,
162
+ });
163
+ });
164
+ }
165
+
166
+ function ThumbnailPlugin(mainRef: any) {
167
+ return (slider: any) => {
168
+ function removeActive(): void {
169
+ slider.slides.forEach((slide: any) => {
170
+ slide.classList.remove('active');
171
+ });
172
+ }
173
+
174
+ function addActive(idx: number): void {
175
+ slider.slides[idx].classList.add('active');
176
+ }
177
+
178
+ function addClickEvents(): void {
179
+ slider.slides.forEach((slide: any, idx: number) => {
180
+ slide.addEventListener('click', () => {
181
+ if (mainRef.current) mainRef.current.moveToIdx(idx);
182
+ });
183
+ });
184
+ }
185
+
186
+ slider.on('created', () => {
187
+ if (!mainRef.current) return;
188
+ addActive(slider.track.details.rel);
189
+ addClickEvents();
190
+ mainRef.current.on('animationStarted', (main: any) => {
191
+ removeActive();
192
+ const next = main.animator.targetIdx || 0;
193
+ addActive(main.track.absToRel(next));
194
+ slider.moveToIdx(Math.min(slider.track.details.maxIdx, next));
195
+ });
196
+ });
197
+ };
198
+ }
199
+
200
+ const breakpointsToRender: any = {
201
+ '(min-width: 320px)': {
202
+ slides: { perView: 1, spacing: 25 },
203
+ },
204
+ '(max-width: 500px)': {
205
+ slides: { perView: 1, spacing: 25 },
206
+ },
207
+ '(min-width: 768px)': {
208
+ slides: { perView: 1, spacing: 25 },
209
+ },
210
+ '(min-width: 1024px)': {
211
+ slides: { perView: 2, spacing: 20 },
212
+ },
213
+ '(min-width: 1280px)': {
214
+ slides: { perView: 2, spacing: 10 },
215
+ },
216
+ };
217
+
218
+ const [sliderRef, instanceRef] = useKeenSlider<HTMLDivElement>(
219
+ {
220
+ initial,
221
+ breakpoints: breakpointsToRender,
222
+ defaultAnimation,
223
+ disabled,
224
+ drag,
225
+ dragSpeed,
226
+ loop,
227
+ mode,
228
+ range,
229
+ renderMode,
230
+ rtl,
231
+ rubberband,
232
+ vertical,
233
+ slideChanged() {},
234
+ // slideChanged: slideChanged,
235
+ // created: created,
236
+ animationStarted,
237
+ animationStopped,
238
+ animationEnded,
239
+ destroyed,
240
+ detailsChanged,
241
+ dragged,
242
+ dragStarted,
243
+ dragChecked,
244
+ dragEnded,
245
+ beforeOptionsChanged,
246
+ optionsChanged,
247
+ updated,
248
+ slides: {
249
+ spacing,
250
+ origin,
251
+ number,
252
+ },
253
+ },
254
+ [WheelControls],
255
+ );
256
+
257
+ const [thumbnailRef] = useKeenSlider(
258
+ {
259
+ initial: 0,
260
+ slides: {
261
+ perView: 4,
262
+ spacing: 10,
263
+ },
264
+ },
265
+ [ThumbnailPlugin(instanceRef)],
266
+ );
267
+
268
+ return (
269
+ <ComponentWrapper
270
+ id={id}
271
+ className={classList}
272
+ title={title}
273
+ description={description}
274
+ bgColour={bgColour}
275
+ >
276
+ <div
277
+ className={classNames(classList, style.classList, 'navigation-wrapper')}
278
+ >
279
+ <div
280
+ ref={sliderRef}
281
+ className={classNames(
282
+ style.slideWrapper,
283
+ slideWrapperClassName,
284
+ 'keen-slider',
285
+ )}
286
+ >
287
+ {slides != null && slides}
288
+ </div>
289
+ <div className={style.thumbnailWrapper}>
290
+ <div
291
+ ref={thumbnailRef}
292
+ className={`keen-slider thumbnail ${style.thumbnail}`}
293
+ >
294
+ {slides != null && slides}
295
+ </div>
296
+ </div>
297
+ </div>
298
+ </ComponentWrapper>
299
+ );
300
+ };
301
+
302
+ export default CarouselThumbnail;
@@ -0,0 +1,67 @@
1
+ .classList {
2
+ @apply w-full;
3
+ }
4
+
5
+ .slideWrapper {
6
+ @apply h-96 w-full rounded-t-2xl pb-4;
7
+ }
8
+
9
+ .thumbnail {
10
+ @apply h-24 w-16 rounded-b-2xl;
11
+ }
12
+
13
+ .primary {
14
+ @apply border-white;
15
+ }
16
+
17
+ .white {
18
+ @apply border-primary;
19
+ }
20
+
21
+ .grey {
22
+ @apply border-primary;
23
+ }
24
+
25
+ .gold {
26
+ @apply border-primary;
27
+ }
28
+
29
+ .facebook {
30
+ @apply border-white;
31
+ }
32
+
33
+ .linkedin {
34
+ @apply border-white;
35
+ }
36
+
37
+ .email {
38
+ @apply border-white;
39
+ }
40
+
41
+ .instagram {
42
+ @apply border-primary;
43
+ }
44
+
45
+ .github {
46
+ @apply border-white;
47
+ }
48
+
49
+ .interactive-facebook {
50
+ @apply border-primary;
51
+ }
52
+
53
+ .interactive-email {
54
+ @apply border-primary;
55
+ }
56
+
57
+ .interactive-linkedin {
58
+ @apply border-primary;
59
+ }
60
+
61
+ .interactive-instagram {
62
+ @apply border-primary;
63
+ }
64
+
65
+ .interactive-github {
66
+ @apply border-primary;
67
+ }