@helpwave/hightide 0.0.13 → 0.0.16

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 (539) hide show
  1. package/dist/coloring/shading.d.mts +5 -0
  2. package/dist/coloring/shading.d.ts +5 -2
  3. package/dist/coloring/shading.js +80 -38
  4. package/dist/coloring/shading.js.map +1 -0
  5. package/dist/coloring/shading.mjs +47 -0
  6. package/dist/coloring/shading.mjs.map +1 -0
  7. package/dist/coloring/types.d.mts +13 -0
  8. package/dist/coloring/types.d.ts +8 -6
  9. package/dist/coloring/types.js +31 -1
  10. package/dist/coloring/types.js.map +1 -0
  11. package/dist/coloring/types.mjs +6 -0
  12. package/dist/coloring/types.mjs.map +1 -0
  13. package/dist/components/Avatar.d.mts +17 -0
  14. package/dist/components/Avatar.d.ts +9 -6
  15. package/dist/components/Avatar.js +79 -29
  16. package/dist/components/Avatar.js.map +1 -0
  17. package/dist/components/Avatar.mjs +48 -0
  18. package/dist/components/Avatar.mjs.map +1 -0
  19. package/dist/components/AvatarGroup.d.mts +14 -0
  20. package/dist/components/AvatarGroup.d.ts +7 -3
  21. package/dist/components/AvatarGroup.js +117 -12
  22. package/dist/components/AvatarGroup.js.map +1 -0
  23. package/dist/components/AvatarGroup.mjs +81 -0
  24. package/dist/components/AvatarGroup.mjs.map +1 -0
  25. package/dist/components/BreadCrumb.d.mts +19 -0
  26. package/dist/components/BreadCrumb.d.ts +6 -3
  27. package/dist/components/BreadCrumb.js +49 -11
  28. package/dist/components/BreadCrumb.js.map +1 -0
  29. package/dist/components/BreadCrumb.mjs +15 -0
  30. package/dist/components/BreadCrumb.mjs.map +1 -0
  31. package/dist/components/Button.d.mts +44 -0
  32. package/dist/components/Button.d.ts +16 -13
  33. package/dist/components/Button.js +232 -80
  34. package/dist/components/Button.js.map +1 -0
  35. package/dist/components/Button.mjs +198 -0
  36. package/dist/components/Button.mjs.map +1 -0
  37. package/dist/components/ChipList.d.mts +24 -0
  38. package/dist/components/ChipList.d.ts +10 -7
  39. package/dist/components/ChipList.js +103 -36
  40. package/dist/components/ChipList.js.map +1 -0
  41. package/dist/components/ChipList.mjs +69 -0
  42. package/dist/components/ChipList.mjs.map +1 -0
  43. package/dist/components/Circle.d.mts +10 -0
  44. package/dist/components/Circle.d.ts +7 -3
  45. package/dist/components/Circle.js +61 -9
  46. package/dist/components/Circle.js.map +1 -0
  47. package/dist/components/Circle.mjs +27 -0
  48. package/dist/components/Circle.mjs.map +1 -0
  49. package/dist/components/ErrorComponent.d.mts +18 -0
  50. package/dist/components/ErrorComponent.d.ts +9 -4
  51. package/dist/components/ErrorComponent.js +86 -17
  52. package/dist/components/ErrorComponent.js.map +1 -0
  53. package/dist/components/ErrorComponent.mjs +53 -0
  54. package/dist/components/ErrorComponent.mjs.map +1 -0
  55. package/dist/components/Expandable.d.mts +33 -0
  56. package/dist/components/Expandable.d.ts +8 -5
  57. package/dist/components/Expandable.js +79 -15
  58. package/dist/components/Expandable.js.map +1 -0
  59. package/dist/components/Expandable.mjs +45 -0
  60. package/dist/components/Expandable.mjs.map +1 -0
  61. package/dist/components/HelpwaveBadge.d.mts +14 -0
  62. package/dist/components/HelpwaveBadge.d.ts +6 -3
  63. package/dist/components/HelpwaveBadge.js +125 -13
  64. package/dist/components/HelpwaveBadge.js.map +1 -0
  65. package/dist/components/HelpwaveBadge.mjs +91 -0
  66. package/dist/components/HelpwaveBadge.mjs.map +1 -0
  67. package/dist/components/HideableContentSection.d.mts +14 -0
  68. package/dist/components/HideableContentSection.d.ts +7 -3
  69. package/dist/components/HideableContentSection.js +69 -14
  70. package/dist/components/HideableContentSection.js.map +1 -0
  71. package/dist/components/HideableContentSection.mjs +35 -0
  72. package/dist/components/HideableContentSection.mjs.map +1 -0
  73. package/dist/components/InputGroup.d.mts +17 -0
  74. package/dist/components/InputGroup.d.ts +7 -3
  75. package/dist/components/InputGroup.js +96 -32
  76. package/dist/components/InputGroup.js.map +1 -0
  77. package/dist/components/InputGroup.mjs +62 -0
  78. package/dist/components/InputGroup.mjs.map +1 -0
  79. package/dist/components/LoadingAndErrorComponent.d.mts +24 -0
  80. package/dist/components/LoadingAndErrorComponent.d.ts +12 -5
  81. package/dist/components/LoadingAndErrorComponent.js +178 -23
  82. package/dist/components/LoadingAndErrorComponent.js.map +1 -0
  83. package/dist/components/LoadingAndErrorComponent.mjs +145 -0
  84. package/dist/components/LoadingAndErrorComponent.mjs.map +1 -0
  85. package/dist/components/LoadingAnimation.d.mts +18 -0
  86. package/dist/components/LoadingAnimation.d.ts +9 -4
  87. package/dist/components/LoadingAnimation.js +124 -16
  88. package/dist/components/LoadingAnimation.js.map +1 -0
  89. package/dist/components/LoadingAnimation.mjs +90 -0
  90. package/dist/components/LoadingAnimation.mjs.map +1 -0
  91. package/dist/components/LoadingButton.d.mts +10 -0
  92. package/dist/components/LoadingButton.d.ts +7 -3
  93. package/dist/components/LoadingButton.js +169 -9
  94. package/dist/components/LoadingButton.js.map +1 -0
  95. package/dist/components/LoadingButton.mjs +135 -0
  96. package/dist/components/LoadingButton.mjs.map +1 -0
  97. package/dist/components/MarkdownInterpreter.d.mts +28 -0
  98. package/dist/components/MarkdownInterpreter.d.ts +8 -5
  99. package/dist/components/MarkdownInterpreter.js +246 -175
  100. package/dist/components/MarkdownInterpreter.js.map +1 -0
  101. package/dist/components/MarkdownInterpreter.mjs +235 -0
  102. package/dist/components/MarkdownInterpreter.mjs.map +1 -0
  103. package/dist/components/Pagination.d.mts +19 -0
  104. package/dist/components/Pagination.d.ts +9 -4
  105. package/dist/components/Pagination.js +100 -23
  106. package/dist/components/Pagination.js.map +1 -0
  107. package/dist/components/Pagination.mjs +67 -0
  108. package/dist/components/Pagination.mjs.map +1 -0
  109. package/dist/components/Profile.d.mts +31 -0
  110. package/dist/components/Profile.d.ts +8 -5
  111. package/dist/components/Profile.js +194 -42
  112. package/dist/components/Profile.js.map +1 -0
  113. package/dist/components/Profile.mjs +162 -0
  114. package/dist/components/Profile.mjs.map +1 -0
  115. package/dist/components/ProgressIndicator.d.mts +24 -0
  116. package/dist/components/ProgressIndicator.d.ts +6 -3
  117. package/dist/components/ProgressIndicator.js +82 -22
  118. package/dist/components/ProgressIndicator.js.map +1 -0
  119. package/dist/components/ProgressIndicator.mjs +59 -0
  120. package/dist/components/ProgressIndicator.mjs.map +1 -0
  121. package/dist/components/Ring.d.mts +35 -0
  122. package/dist/components/Ring.d.ts +13 -9
  123. package/dist/components/Ring.js +331 -107
  124. package/dist/components/Ring.js.map +1 -0
  125. package/dist/components/Ring.mjs +299 -0
  126. package/dist/components/Ring.mjs.map +1 -0
  127. package/dist/components/SearchableList.d.mts +22 -0
  128. package/dist/components/SearchableList.d.ts +9 -5
  129. package/dist/components/SearchableList.js +268 -24
  130. package/dist/components/SearchableList.js.map +1 -0
  131. package/dist/components/SearchableList.mjs +241 -0
  132. package/dist/components/SearchableList.mjs.map +1 -0
  133. package/dist/components/SortButton.d.mts +15 -0
  134. package/dist/components/SortButton.d.ts +9 -4
  135. package/dist/components/SortButton.js +131 -8
  136. package/dist/components/SortButton.js.map +1 -0
  137. package/dist/components/SortButton.mjs +97 -0
  138. package/dist/components/SortButton.mjs.map +1 -0
  139. package/dist/components/StepperBar.d.mts +28 -0
  140. package/dist/components/StepperBar.d.ts +10 -5
  141. package/dist/components/StepperBar.js +248 -44
  142. package/dist/components/StepperBar.js.map +1 -0
  143. package/dist/components/StepperBar.mjs +216 -0
  144. package/dist/components/StepperBar.mjs.map +1 -0
  145. package/dist/components/Table.d.mts +90 -0
  146. package/dist/components/Table.d.ts +20 -17
  147. package/dist/components/Table.js +396 -170
  148. package/dist/components/Table.js.map +1 -0
  149. package/dist/components/Table.mjs +370 -0
  150. package/dist/components/Table.mjs.map +1 -0
  151. package/dist/components/TechRadar.d.mts +39 -0
  152. package/dist/components/TechRadar.d.ts +5 -2
  153. package/dist/components/TechRadar.js +241 -189
  154. package/dist/components/TechRadar.js.map +1 -0
  155. package/dist/components/TechRadar.mjs +208 -0
  156. package/dist/components/TechRadar.mjs.map +1 -0
  157. package/dist/components/TextImage.d.mts +25 -0
  158. package/dist/components/TextImage.d.ts +9 -4
  159. package/dist/components/TextImage.js +121 -29
  160. package/dist/components/TextImage.js.map +1 -0
  161. package/dist/components/TextImage.mjs +86 -0
  162. package/dist/components/TextImage.mjs.map +1 -0
  163. package/dist/components/TimeDisplay.d.mts +35 -0
  164. package/dist/components/TimeDisplay.d.ts +8 -3
  165. package/dist/components/TimeDisplay.js +134 -81
  166. package/dist/components/TimeDisplay.js.map +1 -0
  167. package/dist/components/TimeDisplay.mjs +109 -0
  168. package/dist/components/TimeDisplay.mjs.map +1 -0
  169. package/dist/components/Tooltip.d.mts +37 -0
  170. package/dist/components/Tooltip.d.ts +7 -4
  171. package/dist/components/Tooltip.js +135 -37
  172. package/dist/components/Tooltip.js.map +1 -0
  173. package/dist/components/Tooltip.mjs +109 -0
  174. package/dist/components/Tooltip.mjs.map +1 -0
  175. package/dist/components/VerticalDivider.d.mts +15 -0
  176. package/dist/components/VerticalDivider.d.ts +6 -2
  177. package/dist/components/VerticalDivider.js +80 -6
  178. package/dist/components/VerticalDivider.js.map +1 -0
  179. package/dist/components/VerticalDivider.mjs +56 -0
  180. package/dist/components/VerticalDivider.mjs.map +1 -0
  181. package/dist/components/date/DatePicker.d.mts +32 -0
  182. package/dist/components/date/DatePicker.d.ts +13 -7
  183. package/dist/components/date/DatePicker.js +624 -55
  184. package/dist/components/date/DatePicker.js.map +1 -0
  185. package/dist/components/date/DatePicker.mjs +591 -0
  186. package/dist/components/date/DatePicker.mjs.map +1 -0
  187. package/dist/components/date/DayPicker.d.mts +20 -0
  188. package/dist/components/date/DayPicker.d.ts +8 -4
  189. package/dist/components/date/DayPicker.js +232 -36
  190. package/dist/components/date/DayPicker.js.map +1 -0
  191. package/dist/components/date/DayPicker.mjs +195 -0
  192. package/dist/components/date/DayPicker.mjs.map +1 -0
  193. package/dist/components/date/TimePicker.d.mts +15 -0
  194. package/dist/components/date/TimePicker.d.ts +7 -4
  195. package/dist/components/date/TimePicker.js +196 -75
  196. package/dist/components/date/TimePicker.js.map +1 -0
  197. package/dist/components/date/TimePicker.mjs +164 -0
  198. package/dist/components/date/TimePicker.mjs.map +1 -0
  199. package/dist/components/date/YearMonthPicker.d.mts +15 -0
  200. package/dist/components/date/YearMonthPicker.d.ts +7 -3
  201. package/dist/components/date/YearMonthPicker.js +281 -57
  202. package/dist/components/date/YearMonthPicker.js.map +1 -0
  203. package/dist/components/date/YearMonthPicker.mjs +247 -0
  204. package/dist/components/date/YearMonthPicker.mjs.map +1 -0
  205. package/dist/components/icons/Helpwave.d.mts +14 -0
  206. package/dist/components/icons/Helpwave.d.ts +7 -3
  207. package/dist/components/icons/Helpwave.js +66 -18
  208. package/dist/components/icons/Helpwave.js.map +1 -0
  209. package/dist/components/icons/Helpwave.mjs +43 -0
  210. package/dist/components/icons/Helpwave.mjs.map +1 -0
  211. package/dist/components/icons/Tag.d.mts +14 -0
  212. package/dist/components/icons/Tag.d.ts +7 -3
  213. package/dist/components/icons/Tag.js +59 -11
  214. package/dist/components/icons/Tag.js.map +1 -0
  215. package/dist/components/icons/Tag.mjs +25 -0
  216. package/dist/components/icons/Tag.mjs.map +1 -0
  217. package/dist/components/layout/Carousel.d.mts +25 -0
  218. package/dist/components/layout/Carousel.d.ts +6 -3
  219. package/dist/components/layout/Carousel.js +477 -226
  220. package/dist/components/layout/Carousel.js.map +1 -0
  221. package/dist/components/layout/Carousel.mjs +449 -0
  222. package/dist/components/layout/Carousel.mjs.map +1 -0
  223. package/dist/components/layout/DividerInserter.d.mts +15 -0
  224. package/dist/components/layout/DividerInserter.d.ts +7 -3
  225. package/dist/components/layout/DividerInserter.js +58 -18
  226. package/dist/components/layout/DividerInserter.js.map +1 -0
  227. package/dist/components/layout/DividerInserter.mjs +25 -0
  228. package/dist/components/layout/DividerInserter.mjs.map +1 -0
  229. package/dist/components/layout/FAQSection.d.mts +26 -0
  230. package/dist/components/layout/FAQSection.d.ts +9 -6
  231. package/dist/components/layout/FAQSection.js +336 -13
  232. package/dist/components/layout/FAQSection.js.map +1 -0
  233. package/dist/components/layout/FAQSection.mjs +302 -0
  234. package/dist/components/layout/FAQSection.mjs.map +1 -0
  235. package/dist/components/layout/Tile.d.mts +37 -0
  236. package/dist/components/layout/Tile.d.ts +9 -6
  237. package/dist/components/layout/Tile.js +76 -16
  238. package/dist/components/layout/Tile.js.map +1 -0
  239. package/dist/components/layout/Tile.mjs +42 -0
  240. package/dist/components/layout/Tile.mjs.map +1 -0
  241. package/dist/components/modals/ConfirmDialog.d.mts +38 -0
  242. package/dist/components/modals/ConfirmDialog.d.ts +13 -9
  243. package/dist/components/modals/ConfirmDialog.js +422 -28
  244. package/dist/components/modals/ConfirmDialog.js.map +1 -0
  245. package/dist/components/modals/ConfirmDialog.mjs +388 -0
  246. package/dist/components/modals/ConfirmDialog.mjs.map +1 -0
  247. package/dist/components/modals/DiscardChangesDialog.d.mts +23 -0
  248. package/dist/components/modals/DiscardChangesDialog.d.ts +9 -5
  249. package/dist/components/modals/DiscardChangesDialog.js +406 -23
  250. package/dist/components/modals/DiscardChangesDialog.js.map +1 -0
  251. package/dist/components/modals/DiscardChangesDialog.mjs +370 -0
  252. package/dist/components/modals/DiscardChangesDialog.mjs.map +1 -0
  253. package/dist/components/modals/InputModal.d.mts +19 -0
  254. package/dist/components/modals/InputModal.d.ts +14 -4
  255. package/dist/components/modals/InputModal.js +598 -8
  256. package/dist/components/modals/InputModal.js.map +1 -0
  257. package/dist/components/modals/InputModal.mjs +567 -0
  258. package/dist/components/modals/InputModal.mjs.map +1 -0
  259. package/dist/components/modals/LanguageModal.d.mts +21 -0
  260. package/dist/components/modals/LanguageModal.d.ts +9 -5
  261. package/dist/components/modals/LanguageModal.js +524 -33
  262. package/dist/components/modals/LanguageModal.js.map +1 -0
  263. package/dist/components/modals/LanguageModal.mjs +489 -0
  264. package/dist/components/modals/LanguageModal.mjs.map +1 -0
  265. package/dist/components/modals/Modal.d.mts +43 -0
  266. package/dist/components/modals/Modal.d.ts +13 -8
  267. package/dist/components/modals/Modal.js +280 -51
  268. package/dist/components/modals/Modal.js.map +1 -0
  269. package/dist/components/modals/Modal.mjs +249 -0
  270. package/dist/components/modals/Modal.mjs.map +1 -0
  271. package/dist/components/modals/ModalRegister.d.mts +16 -0
  272. package/dist/components/modals/ModalRegister.d.ts +9 -4
  273. package/dist/components/modals/ModalRegister.js +61 -26
  274. package/dist/components/modals/ModalRegister.js.map +1 -0
  275. package/dist/components/modals/ModalRegister.mjs +37 -0
  276. package/dist/components/modals/ModalRegister.mjs.map +1 -0
  277. package/dist/components/properties/CheckboxProperty.d.mts +20 -0
  278. package/dist/components/properties/CheckboxProperty.d.ts +10 -5
  279. package/dist/components/properties/CheckboxProperty.js +323 -24
  280. package/dist/components/properties/CheckboxProperty.js.map +1 -0
  281. package/dist/components/properties/CheckboxProperty.mjs +291 -0
  282. package/dist/components/properties/CheckboxProperty.mjs.map +1 -0
  283. package/dist/components/properties/DateProperty.d.mts +18 -0
  284. package/dist/components/properties/DateProperty.d.ts +10 -3
  285. package/dist/components/properties/DateProperty.js +422 -21
  286. package/dist/components/properties/DateProperty.js.map +1 -0
  287. package/dist/components/properties/DateProperty.mjs +393 -0
  288. package/dist/components/properties/DateProperty.mjs.map +1 -0
  289. package/dist/components/properties/MultiSelectProperty.d.mts +18 -0
  290. package/dist/components/properties/MultiSelectProperty.d.ts +12 -6
  291. package/dist/components/properties/MultiSelectProperty.js +815 -31
  292. package/dist/components/properties/MultiSelectProperty.js.map +1 -0
  293. package/dist/components/properties/MultiSelectProperty.mjs +787 -0
  294. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -0
  295. package/dist/components/properties/NumberProperty.d.mts +21 -0
  296. package/dist/components/properties/NumberProperty.d.ts +10 -5
  297. package/dist/components/properties/NumberProperty.js +429 -39
  298. package/dist/components/properties/NumberProperty.js.map +1 -0
  299. package/dist/components/properties/NumberProperty.mjs +402 -0
  300. package/dist/components/properties/NumberProperty.mjs.map +1 -0
  301. package/dist/components/properties/PropertyBase.d.mts +27 -0
  302. package/dist/components/properties/PropertyBase.d.ts +9 -5
  303. package/dist/components/properties/PropertyBase.js +194 -24
  304. package/dist/components/properties/PropertyBase.js.map +1 -0
  305. package/dist/components/properties/PropertyBase.mjs +162 -0
  306. package/dist/components/properties/PropertyBase.mjs.map +1 -0
  307. package/dist/components/properties/SelectProperty.d.mts +19 -0
  308. package/dist/components/properties/SelectProperty.d.ts +13 -6
  309. package/dist/components/properties/SelectProperty.js +547 -19
  310. package/dist/components/properties/SelectProperty.js.map +1 -0
  311. package/dist/components/properties/SelectProperty.mjs +520 -0
  312. package/dist/components/properties/SelectProperty.mjs.map +1 -0
  313. package/dist/components/properties/TextProperty.d.mts +20 -0
  314. package/dist/components/properties/TextProperty.d.ts +10 -5
  315. package/dist/components/properties/TextProperty.js +378 -34
  316. package/dist/components/properties/TextProperty.js.map +1 -0
  317. package/dist/components/properties/TextProperty.mjs +346 -0
  318. package/dist/components/properties/TextProperty.mjs.map +1 -0
  319. package/dist/components/user-input/Checkbox.d.mts +41 -0
  320. package/dist/components/user-input/Checkbox.d.ts +9 -5
  321. package/dist/components/user-input/Checkbox.js +148 -63
  322. package/dist/components/user-input/Checkbox.js.map +1 -0
  323. package/dist/components/user-input/Checkbox.mjs +112 -0
  324. package/dist/components/user-input/Checkbox.mjs.map +1 -0
  325. package/dist/components/user-input/DateAndTimePicker.d.mts +47 -0
  326. package/dist/components/user-input/DateAndTimePicker.d.ts +15 -7
  327. package/dist/components/user-input/DateAndTimePicker.js +831 -60
  328. package/dist/components/user-input/DateAndTimePicker.js.map +1 -0
  329. package/dist/components/user-input/DateAndTimePicker.mjs +801 -0
  330. package/dist/components/user-input/DateAndTimePicker.mjs.map +1 -0
  331. package/dist/components/user-input/Input.d.mts +64 -0
  332. package/dist/components/user-input/Input.d.ts +12 -9
  333. package/dist/components/user-input/Input.js +219 -57
  334. package/dist/components/user-input/Input.js.map +1 -0
  335. package/dist/components/user-input/Input.mjs +191 -0
  336. package/dist/components/user-input/Input.mjs.map +1 -0
  337. package/dist/components/user-input/Label.d.mts +16 -0
  338. package/dist/components/user-input/Label.d.ts +8 -4
  339. package/dist/components/user-input/Label.js +43 -11
  340. package/dist/components/user-input/Label.js.map +1 -0
  341. package/dist/components/user-input/Label.mjs +19 -0
  342. package/dist/components/user-input/Label.mjs.map +1 -0
  343. package/dist/components/user-input/Menu.d.mts +24 -0
  344. package/dist/components/user-input/Menu.d.ts +8 -5
  345. package/dist/components/user-input/Menu.js +162 -25
  346. package/dist/components/user-input/Menu.js.map +1 -0
  347. package/dist/components/user-input/Menu.mjs +127 -0
  348. package/dist/components/user-input/Menu.mjs.map +1 -0
  349. package/dist/components/user-input/MultiSelect.d.mts +43 -0
  350. package/dist/components/user-input/MultiSelect.d.ts +12 -8
  351. package/dist/components/user-input/MultiSelect.js +545 -56
  352. package/dist/components/user-input/MultiSelect.js.map +1 -0
  353. package/dist/components/user-input/MultiSelect.mjs +516 -0
  354. package/dist/components/user-input/MultiSelect.mjs.map +1 -0
  355. package/dist/components/user-input/ScrollPicker.d.mts +15 -0
  356. package/dist/components/user-input/ScrollPicker.d.ts +6 -2
  357. package/dist/components/user-input/ScrollPicker.js +276 -145
  358. package/dist/components/user-input/ScrollPicker.js.map +1 -0
  359. package/dist/components/user-input/ScrollPicker.mjs +247 -0
  360. package/dist/components/user-input/ScrollPicker.mjs.map +1 -0
  361. package/dist/components/user-input/SearchableSelect.d.mts +14 -0
  362. package/dist/components/user-input/SearchableSelect.d.ts +9 -3
  363. package/dist/components/user-input/SearchableSelect.js +334 -13
  364. package/dist/components/user-input/SearchableSelect.js.map +1 -0
  365. package/dist/components/user-input/SearchableSelect.mjs +305 -0
  366. package/dist/components/user-input/SearchableSelect.mjs.map +1 -0
  367. package/dist/components/user-input/Select.d.mts +36 -0
  368. package/dist/components/user-input/Select.d.ts +9 -5
  369. package/dist/components/user-input/Select.js +152 -47
  370. package/dist/components/user-input/Select.js.map +1 -0
  371. package/dist/components/user-input/Select.mjs +118 -0
  372. package/dist/components/user-input/Select.mjs.map +1 -0
  373. package/dist/components/user-input/Textarea.d.mts +24 -0
  374. package/dist/components/user-input/Textarea.d.ts +8 -4
  375. package/dist/components/user-input/Textarea.js +153 -31
  376. package/dist/components/user-input/Textarea.js.map +1 -0
  377. package/dist/components/user-input/Textarea.mjs +120 -0
  378. package/dist/components/user-input/Textarea.mjs.map +1 -0
  379. package/dist/components/user-input/ToggleableInput.d.mts +35 -0
  380. package/dist/components/user-input/ToggleableInput.d.ts +6 -3
  381. package/dist/components/user-input/ToggleableInput.js +161 -38
  382. package/dist/components/user-input/ToggleableInput.js.map +1 -0
  383. package/dist/components/user-input/ToggleableInput.mjs +128 -0
  384. package/dist/components/user-input/ToggleableInput.mjs.map +1 -0
  385. package/dist/hooks/useHoverState.d.mts +42 -0
  386. package/dist/hooks/useHoverState.d.ts +5 -3
  387. package/dist/hooks/useHoverState.js +69 -43
  388. package/dist/hooks/useHoverState.js.map +1 -0
  389. package/dist/hooks/useHoverState.mjs +47 -0
  390. package/dist/hooks/useHoverState.mjs.map +1 -0
  391. package/dist/hooks/useLanguage.d.mts +21 -0
  392. package/dist/hooks/useLanguage.d.ts +15 -11
  393. package/dist/hooks/useLanguage.js +145 -50
  394. package/dist/hooks/useLanguage.js.map +1 -0
  395. package/dist/hooks/useLanguage.mjs +115 -0
  396. package/dist/hooks/useLanguage.mjs.map +1 -0
  397. package/dist/hooks/useLocalStorage.d.mts +6 -0
  398. package/dist/hooks/useLocalStorage.d.ts +4 -2
  399. package/dist/hooks/useLocalStorage.js +79 -23
  400. package/dist/hooks/useLocalStorage.js.map +1 -0
  401. package/dist/hooks/useLocalStorage.mjs +59 -0
  402. package/dist/hooks/useLocalStorage.mjs.map +1 -0
  403. package/dist/hooks/useOutsideClick.d.mts +5 -0
  404. package/dist/hooks/useOutsideClick.d.ts +5 -2
  405. package/dist/hooks/useOutsideClick.js +47 -21
  406. package/dist/hooks/useOutsideClick.js.map +1 -0
  407. package/dist/hooks/useOutsideClick.mjs +23 -0
  408. package/dist/hooks/useOutsideClick.mjs.map +1 -0
  409. package/dist/hooks/useSaveDelay.d.mts +6 -0
  410. package/dist/hooks/useSaveDelay.d.ts +2 -1
  411. package/dist/hooks/useSaveDelay.js +62 -38
  412. package/dist/hooks/useSaveDelay.js.map +1 -0
  413. package/dist/hooks/useSaveDelay.mjs +44 -0
  414. package/dist/hooks/useSaveDelay.mjs.map +1 -0
  415. package/dist/hooks/useTheme.d.mts +21 -0
  416. package/dist/hooks/useTheme.d.ts +14 -9
  417. package/dist/hooks/useTheme.js +65 -29
  418. package/dist/hooks/useTheme.js.map +1 -0
  419. package/dist/hooks/useTheme.mjs +40 -0
  420. package/dist/hooks/useTheme.mjs.map +1 -0
  421. package/dist/hooks/useTranslation.d.mts +28 -0
  422. package/dist/hooks/useTranslation.d.ts +9 -5
  423. package/dist/hooks/useTranslation.js +53 -10
  424. package/dist/hooks/useTranslation.js.map +1 -0
  425. package/dist/hooks/useTranslation.mjs +27 -0
  426. package/dist/hooks/useTranslation.mjs.map +1 -0
  427. package/dist/index.d.mts +86 -0
  428. package/dist/index.d.ts +86 -0
  429. package/dist/index.js +5716 -0
  430. package/dist/index.js.map +1 -0
  431. package/dist/index.mjs +5542 -0
  432. package/dist/index.mjs.map +1 -0
  433. package/dist/util/array.d.mts +25 -0
  434. package/dist/util/array.d.ts +9 -7
  435. package/dist/util/array.js +119 -92
  436. package/dist/util/array.js.map +1 -0
  437. package/dist/util/array.mjs +99 -0
  438. package/dist/util/array.mjs.map +1 -0
  439. package/dist/util/builder.d.mts +8 -0
  440. package/dist/util/builder.d.ts +3 -1
  441. package/dist/util/builder.js +33 -8
  442. package/dist/util/builder.js.map +1 -0
  443. package/dist/util/builder.mjs +9 -0
  444. package/dist/util/builder.mjs.map +1 -0
  445. package/dist/util/date.d.mts +30 -0
  446. package/dist/util/date.d.ts +17 -15
  447. package/dist/util/date.js +184 -123
  448. package/dist/util/date.js.map +1 -0
  449. package/dist/util/date.mjs +156 -0
  450. package/dist/util/date.mjs.map +1 -0
  451. package/dist/util/easeFunctions.d.mts +11 -0
  452. package/dist/util/easeFunctions.d.ts +4 -2
  453. package/dist/util/easeFunctions.js +63 -30
  454. package/dist/util/easeFunctions.js.map +1 -0
  455. package/dist/util/easeFunctions.mjs +36 -0
  456. package/dist/util/easeFunctions.mjs.map +1 -0
  457. package/dist/util/emailValidation.d.mts +3 -0
  458. package/dist/util/emailValidation.d.ts +3 -1
  459. package/dist/util/emailValidation.js +32 -2
  460. package/dist/util/emailValidation.js.map +1 -0
  461. package/dist/util/emailValidation.mjs +8 -0
  462. package/dist/util/emailValidation.mjs.map +1 -0
  463. package/dist/util/loopingArray.d.mts +25 -0
  464. package/dist/util/loopingArray.d.ts +4 -2
  465. package/dist/util/loopingArray.js +89 -59
  466. package/dist/util/loopingArray.js.map +1 -0
  467. package/dist/util/loopingArray.mjs +72 -0
  468. package/dist/util/loopingArray.mjs.map +1 -0
  469. package/dist/util/math.d.mts +3 -0
  470. package/dist/util/math.d.ts +3 -1
  471. package/dist/util/math.js +32 -2
  472. package/dist/util/math.js.map +1 -0
  473. package/dist/util/math.mjs +8 -0
  474. package/dist/util/math.mjs.map +1 -0
  475. package/dist/util/news.d.mts +103 -0
  476. package/dist/util/news.d.ts +12 -7
  477. package/dist/util/news.js +73 -24
  478. package/dist/util/news.js.map +1 -0
  479. package/dist/util/news.mjs +48 -0
  480. package/dist/util/news.mjs.map +1 -0
  481. package/dist/util/noop.d.mts +3 -0
  482. package/dist/util/noop.d.ts +3 -1
  483. package/dist/util/noop.js +31 -1
  484. package/dist/util/noop.js.map +1 -0
  485. package/dist/util/noop.mjs +6 -0
  486. package/dist/util/noop.mjs.map +1 -0
  487. package/dist/util/simpleSearch.d.mts +50 -0
  488. package/dist/util/simpleSearch.d.ts +6 -4
  489. package/dist/util/simpleSearch.js +50 -58
  490. package/dist/util/simpleSearch.js.map +1 -0
  491. package/dist/util/simpleSearch.mjs +26 -0
  492. package/dist/util/simpleSearch.mjs.map +1 -0
  493. package/dist/util/storage.d.mts +16 -0
  494. package/dist/util/storage.d.ts +4 -3
  495. package/dist/util/storage.js +63 -31
  496. package/dist/util/storage.js.map +1 -0
  497. package/dist/util/storage.mjs +38 -0
  498. package/dist/util/storage.mjs.map +1 -0
  499. package/dist/util/types.d.mts +3 -0
  500. package/dist/util/types.d.ts +3 -1
  501. package/dist/util/types.js +19 -1
  502. package/dist/util/types.js.map +1 -0
  503. package/dist/util/types.mjs +1 -0
  504. package/dist/util/types.mjs.map +1 -0
  505. package/package.json +20 -9
  506. package/dist/components/Span.d.ts +0 -0
  507. package/dist/components/Span.js +0 -1
  508. package/dist/components/examples/InputGroupExample.d.ts +0 -6
  509. package/dist/components/examples/InputGroupExample.js +0 -21
  510. package/dist/components/examples/MultiSelectExample.d.ts +0 -7
  511. package/dist/components/examples/MultiSelectExample.js +0 -27
  512. package/dist/components/examples/SearchableSelectExample.d.ts +0 -6
  513. package/dist/components/examples/SearchableSelectExample.js +0 -17
  514. package/dist/components/examples/SelectExample.d.ts +0 -4
  515. package/dist/components/examples/SelectExample.js +0 -15
  516. package/dist/components/examples/StackingModals.d.ts +0 -4
  517. package/dist/components/examples/StackingModals.js +0 -15
  518. package/dist/components/examples/TableExample.d.ts +0 -9
  519. package/dist/components/examples/TableExample.js +0 -92
  520. package/dist/components/examples/TextareaExample.d.ts +0 -6
  521. package/dist/components/examples/TextareaExample.js +0 -10
  522. package/dist/components/examples/TileExample.d.ts +0 -9
  523. package/dist/components/examples/TileExample.js +0 -9
  524. package/dist/components/examples/Title.d.ts +0 -0
  525. package/dist/components/examples/Title.js +0 -1
  526. package/dist/components/examples/date/DateTimePickerExample.d.ts +0 -10
  527. package/dist/components/examples/date/DateTimePickerExample.js +0 -21
  528. package/dist/components/examples/properties/CheckboxPropertyExample.d.ts +0 -8
  529. package/dist/components/examples/properties/CheckboxPropertyExample.js +0 -13
  530. package/dist/components/examples/properties/DatePropertyExample.d.ts +0 -8
  531. package/dist/components/examples/properties/DatePropertyExample.js +0 -23
  532. package/dist/components/examples/properties/MultiSelectPropertyExample.d.ts +0 -8
  533. package/dist/components/examples/properties/MultiSelectPropertyExample.js +0 -16
  534. package/dist/components/examples/properties/NumberPropertyExample.d.ts +0 -6
  535. package/dist/components/examples/properties/NumberPropertyExample.js +0 -13
  536. package/dist/components/examples/properties/SelectPropertyExample.d.ts +0 -6
  537. package/dist/components/examples/properties/SelectPropertyExample.js +0 -18
  538. package/dist/components/examples/properties/TextPropertyExample.d.ts +0 -8
  539. package/dist/components/examples/properties/TextPropertyExample.js +0 -13
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout/Carousel.tsx","../../../src/util/array.ts","../../../src/util/math.ts","../../../src/util/easeFunctions.ts","../../../src/util/loopingArray.ts"],"sourcesContent":["import type { ReactNode } from 'react'\nimport React from 'react'\nimport clsx from 'clsx'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '../../util/array'\nimport { clamp } from '../../util/math'\nimport { EaseFunctions } from '../../util/easeFunctions'\nimport type { Direction } from '../../util/loopingArray'\nimport { LoopingArrayCalculator } from '../../util/loopingArray'\n\n\ntype CarouselProps = {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoLooping?: boolean,\n autoLoopingTimeOut?: number,\n autoLoopAnimationTime?: number,\n hintNext?: boolean,\n arrows?: boolean,\n dots?: boolean,\n /**\n * Percentage that is allowed to be scrolled further\n */\n overScrollThreshold?: number,\n blurColor?: string,\n className?: string,\n heightClassName?: string,\n widthClassName?: string,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\ntype CarouselAnimationState = {\n targetPosition: number,\n /**\n * Value of either 1 or -1, 1 is forwards -1 is backwards\n */\n direction: Direction,\n startPosition: number,\n startTime?: number,\n lastUpdateTime?: number,\n isAutoLooping: boolean,\n}\n\ntype DragState = {\n startX: number,\n startTime: number,\n lastX: number,\n startIndex: number,\n}\n\ntype CarouselInformation = {\n currentPosition: number,\n dragState?: DragState,\n animationState?: CarouselAnimationState,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoLooping = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 500,\n hintNext = false,\n arrows = false,\n dots = true,\n overScrollThreshold = 0.1,\n blurColor = 'from-white',\n className = '',\n heightClassName = 'h-[24rem]',\n widthClassName = 'w-[70%] desktop:w-1/2',\n}: CarouselProps) => {\n if (isAutoLooping && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n\n const [{\n currentPosition,\n dragState,\n animationState,\n }, setCarouselInformation] = useState<CarouselInformation>({\n currentPosition: 0,\n })\n const animationId = useRef<number | undefined>(undefined)\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut)\n\n const length = children.length\n const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n const util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold])\n const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition))\n animationTime = Math.max(200, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentPosition) * 100\n return `${baseOffset}%`\n }\n\n const animation = useCallback((time: number) => {\n let keepAnimating: boolean = true\n\n // Other calculation in the setState call to avoid updating the useCallback to often\n setCarouselInformation((state) => {\n const {\n animationState,\n dragState\n } = state\n if (animationState === undefined || dragState !== undefined) {\n keepAnimating = false\n return state\n }\n if (!animationState.startTime || !animationState.lastUpdateTime) {\n return {\n ...state,\n animationState: {\n ...animationState,\n startTime: time,\n lastUpdateTime: time\n }\n }\n }\n const useAnimationTime = animationState.isAutoLooping ? autoLoopAnimationTime : animationTime\n const progress = clamp((time - animationState.startTime) / useAnimationTime) // progress\n const easedProgress = EaseFunctions.easeInEaseOut(progress)\n const distance = util.getDistanceDirectional(animationState.startPosition, animationState.targetPosition, animationState.direction)\n const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState.direction + animationState.startPosition)\n\n if (animationState.targetPosition === newPosition || progress === 1) {\n keepAnimating = false\n return ({\n currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),\n animationState: undefined\n })\n }\n return ({\n currentPosition: newPosition,\n animationState: {\n ...animationState!,\n lastUpdateTime: time\n }\n })\n })\n if (keepAnimating) {\n animationId.current = requestAnimationFrame(time1 => animation(time1))\n }\n }, [animationTime, autoLoopAnimationTime, util])\n\n useEffect(() => {\n if (animationState) {\n animationId.current = requestAnimationFrame(animation)\n }\n return () => {\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = 0\n }\n }\n }, [animationState]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAutoLoop = () => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: prevState.dragState,\n animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {\n startPosition: currentPosition,\n targetPosition: (currentPosition + 1) % length,\n direction: 1, // always move forward\n isAutoLooping: true\n }\n }))\n\n useEffect(() => {\n if (!animationId.current && !animationState && !dragState && !timeOut.current) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n startAutoLoop()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n startAutoLoop()\n }\n }\n }, [animationState, dragState, animationId.current, timeOut.current]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAnimation = (targetPosition?: number) => {\n if (targetPosition === undefined) {\n targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition)\n }\n if (targetPosition === currentPosition) {\n return // we are exactly where we want to be\n }\n\n // find target index and fastest path to it\n const direction = util.getBestDirection(currentPosition, targetPosition)\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = undefined\n }\n\n setCarouselInformation(prevState => ({\n ...prevState,\n dragState: undefined,\n animationState: {\n targetPosition: targetPosition!,\n direction,\n startPosition: currentPosition,\n isAutoLooping: false\n },\n timeOut: undefined\n }))\n }\n\n const canGoLeft = () => {\n return isLooping || currentPosition !== 0\n }\n\n const canGoRight = () => {\n return isLooping || currentPosition !== length - 1\n }\n\n const left = () => {\n if (canGoLeft()) {\n startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1))\n }\n }\n\n const right = () => {\n if (canGoRight()) {\n startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length))\n }\n }\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n\n if (isLooping) {\n const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n items = [\n ...before,\n ...items,\n ...after\n ]\n }\n\n const onDragStart = (x: number) => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: {\n lastX: x,\n startX: x,\n startTime: Date.now(),\n startIndex: currentPosition,\n },\n animationState: undefined // cancel animation\n }))\n\n const onDrag = (x: number, width: number) => {\n // For some weird reason the clientX is 0 on the last dragUpdate before drag end causing issues\n if (!dragState || x === 0) {\n return\n }\n const offsetUpdate = (dragState.lastX - x) / width\n const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate)\n\n setCarouselInformation(prevState => ({\n ...prevState,\n currentPosition: newPosition,\n dragState: {\n ...dragState,\n lastX: x\n },\n }))\n }\n\n const onDragEnd = (x: number, width: number) => {\n if (!dragState) {\n return\n }\n const distance = dragState.startX - x\n const relativeDistance = distance / width\n const duration = (Date.now() - dragState.startTime) // in milliseconds\n const velocity = distance / (Date.now() - dragState.startTime)\n\n const isSlide = Math.abs(velocity) > 2 || (duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50))\n if (isSlide) {\n if (distance > 0 && canGoRight()) {\n right()\n return\n } else if (distance < 0 && canGoLeft()) {\n left()\n return\n }\n }\n startAnimation()\n }\n\n const dragHandlers = {\n draggable: true,\n onDragStart: (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart(event.clientX)\n event.dataTransfer.setDragImage(document.createElement('div'), 0, 0)\n },\n onDrag: (event: React.DragEvent<HTMLDivElement>) => onDrag(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onDragEnd: (event: React.DragEvent<HTMLDivElement>) => onDragEnd(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => onDragStart(event.touches[0]!.clientX),\n onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => onDrag(event.touches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchCancel: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n }\n\n return (\n <div className=\"col items-center w-full gap-y-2\">\n <div className={clsx(`relative w-full overflow-hidden`, heightClassName, className)}>\n {arrows && (\n <>\n <div\n className={clsx('absolute z-10 left-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoLeft() })}\n onClick={() => left()}\n >\n <ChevronLeft size={32}/>\n </div>\n <div\n className={clsx('absolute z-10 right-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoRight() })}\n onClick={() => right()}\n >\n <ChevronRight size={32}/>\n </div>\n </>\n )}\n {hintNext ? (\n <div className={clsx(`relative row h-full`, heightClassName)}>\n <div className=\"relative row h-full w-full px-2 overflow-hidden\">\n {items.map(({\n item,\n index\n }, listIndex) => (\n <div\n key={listIndex}\n className={clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { '!cursor-grabbing': !!dragState })}\n style={{ translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) }}\n {...dragHandlers}\n onClick={() => startAnimation(index)}\n >\n {item}\n </div>\n ))}\n </div>\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div className={clsx('px-16 h-full', { '!cursor-grabbing': !!dragState })} {...dragHandlers}>\n {children[currentIndex]}\n </div>\n )}\n </div>\n {dots && (\n <div\n className=\"row items-center justify-center w-full my-2\">\n {range(0, length - 1).map(index => (\n <button\n key={index}\n className={clsx('w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] hover:bg-primary hover:brightness-90 first:rounded-l-md last:rounded-r-md', {\n 'bg-gray-200': currentIndex !== index,\n 'bg-primary': currentIndex === index\n })}\n onClick={() => startAnimation(index)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","export const equalSizeGroups = <T >(array: T[], groupSize: number): T[][] => {\n if (groupSize <= 0) {\n console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n return [[...array]]\n }\n\n const groups = []\n for (let i = 0; i < array.length; i += groupSize) {\n groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n }\n return groups\n}\n\n/**\n * @param start\n * @param end inclusive\n * @param allowEmptyRange Whether the range can be defined empty via end < start\n */\nexport const range = (start: number, end: number, allowEmptyRange: boolean = false): number[] => {\n if (end < start) {\n if (!allowEmptyRange) {\n console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set allowEmptyRange to true`)\n }\n return []\n }\n return Array.from({ length: end - start + 1 }, (_, index) => index + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T >(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n return list.reduce((item1, item2) => {\n return firstCloser(item1, item2) ? item1 : item2\n })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T >(list: T[], item: T, neighbourDistance: number = 2) => {\n const index = list.indexOf(item)\n const totalItems = neighbourDistance * 2 + 1\n if (list.length < totalItems) {\n console.warn('List is to short')\n return list\n }\n\n if (index === -1) {\n console.error('item not found in list')\n return list.splice(0, totalItems)\n }\n\n let start = index - neighbourDistance\n if (start < 0) {\n start += list.length\n }\n const end = (index + neighbourDistance + 1) % list.length\n\n const result: T[] = []\n let ignoreOnce = list.length === totalItems\n for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n result.push(list[i]!)\n if (end === i && ignoreOnce) {\n ignoreOnce = false\n }\n }\n return result\n}\n\nexport const createLoopingListWithIndex = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n if (length < 0) {\n console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n } else if (length === 0) {\n length = list.length\n }\n\n const returnList: [number, T][] = []\n\n if (forwards) {\n for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n returnList.push([i, list[i]!])\n }\n } else {\n for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n returnList.push([i, list[i]!])\n }\n }\n\n return returnList\n}\n\nexport const createLoopingList = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\nexport const ArrayUtil = {\n unique: <T>(list: T[]): T[] => {\n const seen = new Set<T>()\n return list.filter((item) => {\n if (seen.has(item)) {\n return false\n }\n seen.add(item)\n return true\n })\n },\n\n difference: <T>(list: T[], removeList: T[]): T[] => {\n const remove = new Set<T>(removeList)\n return list.filter((item) => !remove.has(item))\n }\n}\n","export const clamp = (value: number, min: number = 0, max: number = 1): number => {\n return Math.min(Math.max(value, min), max)\n}\n","import { clamp } from './math'\n\nexport type EaseFunction = (t: number) => number\n\nexport class EaseFunctions {\n static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {\n // Calculate the x and y coordinates using the cubic Bézier formula\n const cx = 3 * x1\n const bx = 3 * (x2 - x1) - cx\n const ax = 1 - cx - bx\n\n const cy = 3 * y1\n const by = 3 * (y2 - y1) - cy\n const ay = 1 - cy - by\n\n // Compute x and y values at parameter t\n const x = (t: number) => ((ax * t + bx) * t + cx) * t\n const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n return {\n x,\n y\n }\n }\n\n static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {\n const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)\n return (t: number) => {\n t = clamp(t)\n return y(t) // <= equal to x(t) * 0 + y(t) * 1\n }\n }\n\n static easeInEaseOut(t: number): number {\n return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)\n };\n}\n","/**\n * 1 is forwards\n *\n * -1 is backwards\n */\nexport type Direction = 1 | -1\n\nexport class LoopingArrayCalculator {\n length: number\n isLooping: boolean\n allowedOverScroll: number\n\n constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {\n if (allowedOverScroll < 0 || length < 1) {\n throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')\n }\n\n this.length = length\n this.isLooping = isLooping\n this.allowedOverScroll = allowedOverScroll\n }\n\n getCorrectedPosition(position: number): number {\n if (!this.isLooping) {\n return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))\n }\n if (position >= this.length) {\n return position % this.length\n }\n if (position < 0) {\n return this.length - (Math.abs(position) % this.length)\n }\n return position\n }\n\n static withoutOffset(position: number): number {\n return position + LoopingArrayCalculator.getOffset(position)\n }\n\n static getOffset(position: number): number {\n return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5\n }\n\n /**\n * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)\n */\n getDistanceDirectional(position: number, target: number, direction: Direction): number {\n if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {\n throw new Error('Invalid parameters: position is out of bounds.')\n }\n\n const isForwardInvalid = (direction === 1 && position > target)\n const isBackwardInvalid = (direction === -1 && target < position)\n\n if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {\n return Infinity\n }\n\n if (direction === -1) {\n return this.getDistanceDirectional(target, position, 1)\n }\n\n position = this.getCorrectedPosition(position)\n target = this.getCorrectedPosition(target)\n\n let distance = (target - position) * direction\n if (distance < 0) {\n distance = this.length - (Math.abs(position) % this.length) + target\n }\n\n return distance\n }\n\n getDistanceForward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, 1)\n }\n\n getDistanceBackward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, -1)\n }\n\n getDistance(position: number, target: number): number {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n\n return Math.min(forwardDistance, backwardDistance)\n }\n\n getBestDirection(position: number, target: number): Direction {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n return forwardDistance < backwardDistance ? 1 : -1\n }\n}\n"],"mappings":"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","names":["animationState","dragState","clsx"]}
@@ -0,0 +1,449 @@
1
+ // src/components/layout/Carousel.tsx
2
+ import clsx from "clsx";
3
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
+ import { ChevronLeft, ChevronRight } from "lucide-react";
5
+
6
+ // src/util/array.ts
7
+ var range = (start, end, allowEmptyRange = false) => {
8
+ if (end < start) {
9
+ if (!allowEmptyRange) {
10
+ console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set allowEmptyRange to true`);
11
+ }
12
+ return [];
13
+ }
14
+ return Array.from({ length: end - start + 1 }, (_, index) => index + start);
15
+ };
16
+ var createLoopingListWithIndex = (list, startIndex = 0, length = 0, forwards = true) => {
17
+ if (length < 0) {
18
+ console.warn(`createLoopingList: length must be >= 0, given ${length}`);
19
+ } else if (length === 0) {
20
+ length = list.length;
21
+ }
22
+ const returnList = [];
23
+ if (forwards) {
24
+ for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {
25
+ returnList.push([i, list[i]]);
26
+ }
27
+ } else {
28
+ for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {
29
+ returnList.push([i, list[i]]);
30
+ }
31
+ }
32
+ return returnList;
33
+ };
34
+
35
+ // src/util/math.ts
36
+ var clamp = (value, min = 0, max = 1) => {
37
+ return Math.min(Math.max(value, min), max);
38
+ };
39
+
40
+ // src/util/easeFunctions.ts
41
+ var EaseFunctions = class _EaseFunctions {
42
+ static cubicBezierGeneric(x1, y1, x2, y2) {
43
+ const cx = 3 * x1;
44
+ const bx = 3 * (x2 - x1) - cx;
45
+ const ax = 1 - cx - bx;
46
+ const cy = 3 * y1;
47
+ const by = 3 * (y2 - y1) - cy;
48
+ const ay = 1 - cy - by;
49
+ const x = (t) => ((ax * t + bx) * t + cx) * t;
50
+ const y = (t) => ((ay * t + by) * t + cy) * t;
51
+ return {
52
+ x,
53
+ y
54
+ };
55
+ }
56
+ static cubicBezier(x1, y1, x2, y2) {
57
+ const { y } = _EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2);
58
+ return (t) => {
59
+ t = clamp(t);
60
+ return y(t);
61
+ };
62
+ }
63
+ static easeInEaseOut(t) {
64
+ return _EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t);
65
+ }
66
+ };
67
+
68
+ // src/util/loopingArray.ts
69
+ var LoopingArrayCalculator = class _LoopingArrayCalculator {
70
+ constructor(length, isLooping = true, allowedOverScroll = 0.1) {
71
+ if (allowedOverScroll < 0 || length < 1) {
72
+ throw new Error("Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true");
73
+ }
74
+ this.length = length;
75
+ this.isLooping = isLooping;
76
+ this.allowedOverScroll = allowedOverScroll;
77
+ }
78
+ getCorrectedPosition(position) {
79
+ if (!this.isLooping) {
80
+ return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position));
81
+ }
82
+ if (position >= this.length) {
83
+ return position % this.length;
84
+ }
85
+ if (position < 0) {
86
+ return this.length - Math.abs(position) % this.length;
87
+ }
88
+ return position;
89
+ }
90
+ static withoutOffset(position) {
91
+ return position + _LoopingArrayCalculator.getOffset(position);
92
+ }
93
+ static getOffset(position) {
94
+ return Math.round(position) - position;
95
+ }
96
+ /**
97
+ * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)
98
+ */
99
+ getDistanceDirectional(position, target, direction) {
100
+ if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {
101
+ throw new Error("Invalid parameters: position is out of bounds.");
102
+ }
103
+ const isForwardInvalid = direction === 1 && position > target;
104
+ const isBackwardInvalid = direction === -1 && target < position;
105
+ if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {
106
+ return Infinity;
107
+ }
108
+ if (direction === -1) {
109
+ return this.getDistanceDirectional(target, position, 1);
110
+ }
111
+ position = this.getCorrectedPosition(position);
112
+ target = this.getCorrectedPosition(target);
113
+ let distance = (target - position) * direction;
114
+ if (distance < 0) {
115
+ distance = this.length - Math.abs(position) % this.length + target;
116
+ }
117
+ return distance;
118
+ }
119
+ getDistanceForward(position, target) {
120
+ return this.getDistanceDirectional(position, target, 1);
121
+ }
122
+ getDistanceBackward(position, target) {
123
+ return this.getDistanceDirectional(position, target, -1);
124
+ }
125
+ getDistance(position, target) {
126
+ const forwardDistance = this.getDistanceForward(position, target);
127
+ const backwardDistance = this.getDistanceBackward(position, target);
128
+ return Math.min(forwardDistance, backwardDistance);
129
+ }
130
+ getBestDirection(position, target) {
131
+ const forwardDistance = this.getDistanceForward(position, target);
132
+ const backwardDistance = this.getDistanceBackward(position, target);
133
+ return forwardDistance < backwardDistance ? 1 : -1;
134
+ }
135
+ };
136
+
137
+ // src/components/layout/Carousel.tsx
138
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
139
+ var Carousel = ({
140
+ children,
141
+ animationTime = 200,
142
+ isLooping = false,
143
+ isAutoLooping = false,
144
+ autoLoopingTimeOut = 5e3,
145
+ autoLoopAnimationTime = 500,
146
+ hintNext = false,
147
+ arrows = false,
148
+ dots = true,
149
+ overScrollThreshold = 0.1,
150
+ blurColor = "from-white",
151
+ className = "",
152
+ heightClassName = "h-[24rem]",
153
+ widthClassName = "w-[70%] desktop:w-1/2"
154
+ }) => {
155
+ if (isAutoLooping && !isLooping) {
156
+ console.error("When isAutoLooping is true, isLooping should also be true");
157
+ isLooping = true;
158
+ }
159
+ const [{
160
+ currentPosition,
161
+ dragState,
162
+ animationState
163
+ }, setCarouselInformation] = useState({
164
+ currentPosition: 0
165
+ });
166
+ const animationId = useRef(void 0);
167
+ const timeOut = useRef(void 0);
168
+ autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut);
169
+ const length = children.length;
170
+ const paddingItemCount = 3;
171
+ const util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold]);
172
+ const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition));
173
+ animationTime = Math.max(200, animationTime);
174
+ autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime);
175
+ const getStyleOffset = (index) => {
176
+ const baseOffset = -50 + (index - currentPosition) * 100;
177
+ return `${baseOffset}%`;
178
+ };
179
+ const animation = useCallback((time) => {
180
+ let keepAnimating = true;
181
+ setCarouselInformation((state) => {
182
+ const {
183
+ animationState: animationState2,
184
+ dragState: dragState2
185
+ } = state;
186
+ if (animationState2 === void 0 || dragState2 !== void 0) {
187
+ keepAnimating = false;
188
+ return state;
189
+ }
190
+ if (!animationState2.startTime || !animationState2.lastUpdateTime) {
191
+ return {
192
+ ...state,
193
+ animationState: {
194
+ ...animationState2,
195
+ startTime: time,
196
+ lastUpdateTime: time
197
+ }
198
+ };
199
+ }
200
+ const useAnimationTime = animationState2.isAutoLooping ? autoLoopAnimationTime : animationTime;
201
+ const progress = clamp((time - animationState2.startTime) / useAnimationTime);
202
+ const easedProgress = EaseFunctions.easeInEaseOut(progress);
203
+ const distance = util.getDistanceDirectional(animationState2.startPosition, animationState2.targetPosition, animationState2.direction);
204
+ const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState2.direction + animationState2.startPosition);
205
+ if (animationState2.targetPosition === newPosition || progress === 1) {
206
+ keepAnimating = false;
207
+ return {
208
+ currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),
209
+ animationState: void 0
210
+ };
211
+ }
212
+ return {
213
+ currentPosition: newPosition,
214
+ animationState: {
215
+ ...animationState2,
216
+ lastUpdateTime: time
217
+ }
218
+ };
219
+ });
220
+ if (keepAnimating) {
221
+ animationId.current = requestAnimationFrame((time1) => animation(time1));
222
+ }
223
+ }, [animationTime, autoLoopAnimationTime, util]);
224
+ useEffect(() => {
225
+ if (animationState) {
226
+ animationId.current = requestAnimationFrame(animation);
227
+ }
228
+ return () => {
229
+ if (animationId.current) {
230
+ cancelAnimationFrame(animationId.current);
231
+ animationId.current = 0;
232
+ }
233
+ };
234
+ }, [animationState]);
235
+ const startAutoLoop = () => setCarouselInformation((prevState) => ({
236
+ ...prevState,
237
+ dragState: prevState.dragState,
238
+ animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {
239
+ startPosition: currentPosition,
240
+ targetPosition: (currentPosition + 1) % length,
241
+ direction: 1,
242
+ // always move forward
243
+ isAutoLooping: true
244
+ }
245
+ }));
246
+ useEffect(() => {
247
+ if (!animationId.current && !animationState && !dragState && !timeOut.current) {
248
+ if (autoLoopingTimeOut > 0) {
249
+ timeOut.current = setTimeout(() => {
250
+ startAutoLoop();
251
+ timeOut.current = void 0;
252
+ }, autoLoopingTimeOut);
253
+ } else {
254
+ startAutoLoop();
255
+ }
256
+ }
257
+ }, [animationState, dragState, animationId.current, timeOut.current]);
258
+ const startAnimation = (targetPosition) => {
259
+ if (targetPosition === void 0) {
260
+ targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition);
261
+ }
262
+ if (targetPosition === currentPosition) {
263
+ return;
264
+ }
265
+ const direction = util.getBestDirection(currentPosition, targetPosition);
266
+ clearTimeout(timeOut.current);
267
+ timeOut.current = void 0;
268
+ if (animationId.current) {
269
+ cancelAnimationFrame(animationId.current);
270
+ animationId.current = void 0;
271
+ }
272
+ setCarouselInformation((prevState) => ({
273
+ ...prevState,
274
+ dragState: void 0,
275
+ animationState: {
276
+ targetPosition,
277
+ direction,
278
+ startPosition: currentPosition,
279
+ isAutoLooping: false
280
+ },
281
+ timeOut: void 0
282
+ }));
283
+ };
284
+ const canGoLeft = () => {
285
+ return isLooping || currentPosition !== 0;
286
+ };
287
+ const canGoRight = () => {
288
+ return isLooping || currentPosition !== length - 1;
289
+ };
290
+ const left = () => {
291
+ if (canGoLeft()) {
292
+ startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1));
293
+ }
294
+ };
295
+ const right = () => {
296
+ if (canGoRight()) {
297
+ startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length));
298
+ }
299
+ };
300
+ let items = children.map((item, index) => ({
301
+ index,
302
+ item
303
+ }));
304
+ if (isLooping) {
305
+ const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({
306
+ index,
307
+ item
308
+ }));
309
+ const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({
310
+ index,
311
+ item
312
+ }));
313
+ items = [
314
+ ...before,
315
+ ...items,
316
+ ...after
317
+ ];
318
+ }
319
+ const onDragStart = (x) => setCarouselInformation((prevState) => ({
320
+ ...prevState,
321
+ dragState: {
322
+ lastX: x,
323
+ startX: x,
324
+ startTime: Date.now(),
325
+ startIndex: currentPosition
326
+ },
327
+ animationState: void 0
328
+ // cancel animation
329
+ }));
330
+ const onDrag = (x, width) => {
331
+ if (!dragState || x === 0) {
332
+ return;
333
+ }
334
+ const offsetUpdate = (dragState.lastX - x) / width;
335
+ const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate);
336
+ setCarouselInformation((prevState) => ({
337
+ ...prevState,
338
+ currentPosition: newPosition,
339
+ dragState: {
340
+ ...dragState,
341
+ lastX: x
342
+ }
343
+ }));
344
+ };
345
+ const onDragEnd = (x, width) => {
346
+ if (!dragState) {
347
+ return;
348
+ }
349
+ const distance = dragState.startX - x;
350
+ const relativeDistance = distance / width;
351
+ const duration = Date.now() - dragState.startTime;
352
+ const velocity = distance / (Date.now() - dragState.startTime);
353
+ const isSlide = Math.abs(velocity) > 2 || duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50);
354
+ if (isSlide) {
355
+ if (distance > 0 && canGoRight()) {
356
+ right();
357
+ return;
358
+ } else if (distance < 0 && canGoLeft()) {
359
+ left();
360
+ return;
361
+ }
362
+ }
363
+ startAnimation();
364
+ };
365
+ const dragHandlers = {
366
+ draggable: true,
367
+ onDragStart: (event) => {
368
+ onDragStart(event.clientX);
369
+ event.dataTransfer.setDragImage(document.createElement("div"), 0, 0);
370
+ },
371
+ onDrag: (event) => onDrag(event.clientX, event.target.getBoundingClientRect().width),
372
+ onDragEnd: (event) => onDragEnd(event.clientX, event.target.getBoundingClientRect().width),
373
+ onTouchStart: (event) => onDragStart(event.touches[0].clientX),
374
+ onTouchMove: (event) => onDrag(event.touches[0].clientX, event.target.getBoundingClientRect().width),
375
+ onTouchEnd: (event) => onDragEnd(event.changedTouches[0].clientX, event.target.getBoundingClientRect().width),
376
+ onTouchCancel: (event) => onDragEnd(event.changedTouches[0].clientX, event.target.getBoundingClientRect().width)
377
+ };
378
+ return /* @__PURE__ */ jsxs("div", { className: "col items-center w-full gap-y-2", children: [
379
+ /* @__PURE__ */ jsxs("div", { className: clsx(`relative w-full overflow-hidden`, heightClassName, className), children: [
380
+ arrows && /* @__PURE__ */ jsxs(Fragment, { children: [
381
+ /* @__PURE__ */ jsx(
382
+ "div",
383
+ {
384
+ className: clsx("absolute z-10 left-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2", { hidden: !canGoLeft() }),
385
+ onClick: () => left(),
386
+ children: /* @__PURE__ */ jsx(ChevronLeft, { size: 32 })
387
+ }
388
+ ),
389
+ /* @__PURE__ */ jsx(
390
+ "div",
391
+ {
392
+ className: clsx("absolute z-10 right-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2", { hidden: !canGoRight() }),
393
+ onClick: () => right(),
394
+ children: /* @__PURE__ */ jsx(ChevronRight, { size: 32 })
395
+ }
396
+ )
397
+ ] }),
398
+ hintNext ? /* @__PURE__ */ jsxs("div", { className: clsx(`relative row h-full`, heightClassName), children: [
399
+ /* @__PURE__ */ jsx("div", { className: "relative row h-full w-full px-2 overflow-hidden", children: items.map(({
400
+ item,
401
+ index
402
+ }, listIndex) => /* @__PURE__ */ jsx(
403
+ "div",
404
+ {
405
+ className: clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { "!cursor-grabbing": !!dragState }),
406
+ style: { translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) },
407
+ ...dragHandlers,
408
+ onClick: () => startAnimation(index),
409
+ children: item
410
+ },
411
+ listIndex
412
+ )) }),
413
+ /* @__PURE__ */ jsx(
414
+ "div",
415
+ {
416
+ className: clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)
417
+ }
418
+ ),
419
+ /* @__PURE__ */ jsx(
420
+ "div",
421
+ {
422
+ className: clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)
423
+ }
424
+ )
425
+ ] }) : /* @__PURE__ */ jsx("div", { className: clsx("px-16 h-full", { "!cursor-grabbing": !!dragState }), ...dragHandlers, children: children[currentIndex] })
426
+ ] }),
427
+ dots && /* @__PURE__ */ jsx(
428
+ "div",
429
+ {
430
+ className: "row items-center justify-center w-full my-2",
431
+ children: range(0, length - 1).map((index) => /* @__PURE__ */ jsx(
432
+ "button",
433
+ {
434
+ className: clsx("w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] hover:bg-primary hover:brightness-90 first:rounded-l-md last:rounded-r-md", {
435
+ "bg-gray-200": currentIndex !== index,
436
+ "bg-primary": currentIndex === index
437
+ }),
438
+ onClick: () => startAnimation(index)
439
+ },
440
+ index
441
+ ))
442
+ }
443
+ )
444
+ ] });
445
+ };
446
+ export {
447
+ Carousel
448
+ };
449
+ //# sourceMappingURL=Carousel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/layout/Carousel.tsx","../../../src/util/array.ts","../../../src/util/math.ts","../../../src/util/easeFunctions.ts","../../../src/util/loopingArray.ts"],"sourcesContent":["import type { ReactNode } from 'react'\nimport React from 'react'\nimport clsx from 'clsx'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { createLoopingListWithIndex, range } from '../../util/array'\nimport { clamp } from '../../util/math'\nimport { EaseFunctions } from '../../util/easeFunctions'\nimport type { Direction } from '../../util/loopingArray'\nimport { LoopingArrayCalculator } from '../../util/loopingArray'\n\n\ntype CarouselProps = {\n children: ReactNode[],\n animationTime?: number,\n isLooping?: boolean,\n isAutoLooping?: boolean,\n autoLoopingTimeOut?: number,\n autoLoopAnimationTime?: number,\n hintNext?: boolean,\n arrows?: boolean,\n dots?: boolean,\n /**\n * Percentage that is allowed to be scrolled further\n */\n overScrollThreshold?: number,\n blurColor?: string,\n className?: string,\n heightClassName?: string,\n widthClassName?: string,\n}\n\ntype ItemType = {\n item: ReactNode,\n index: number,\n}\n\ntype CarouselAnimationState = {\n targetPosition: number,\n /**\n * Value of either 1 or -1, 1 is forwards -1 is backwards\n */\n direction: Direction,\n startPosition: number,\n startTime?: number,\n lastUpdateTime?: number,\n isAutoLooping: boolean,\n}\n\ntype DragState = {\n startX: number,\n startTime: number,\n lastX: number,\n startIndex: number,\n}\n\ntype CarouselInformation = {\n currentPosition: number,\n dragState?: DragState,\n animationState?: CarouselAnimationState,\n}\n\nexport const Carousel = ({\n children,\n animationTime = 200,\n isLooping = false,\n isAutoLooping = false,\n autoLoopingTimeOut = 5000,\n autoLoopAnimationTime = 500,\n hintNext = false,\n arrows = false,\n dots = true,\n overScrollThreshold = 0.1,\n blurColor = 'from-white',\n className = '',\n heightClassName = 'h-[24rem]',\n widthClassName = 'w-[70%] desktop:w-1/2',\n}: CarouselProps) => {\n if (isAutoLooping && !isLooping) {\n console.error('When isAutoLooping is true, isLooping should also be true')\n isLooping = true\n }\n\n const [{\n currentPosition,\n dragState,\n animationState,\n }, setCarouselInformation] = useState<CarouselInformation>({\n currentPosition: 0,\n })\n const animationId = useRef<number | undefined>(undefined)\n const timeOut = useRef<NodeJS.Timeout | undefined>(undefined)\n autoLoopingTimeOut = Math.max(0, autoLoopingTimeOut)\n\n const length = children.length\n const paddingItemCount = 3 // The number of items to append left and right of the list to allow for clean transition when looping\n\n const util = useMemo(() => new LoopingArrayCalculator(length, isLooping, overScrollThreshold), [length, isLooping, overScrollThreshold])\n const currentIndex = util.getCorrectedPosition(LoopingArrayCalculator.withoutOffset(currentPosition))\n animationTime = Math.max(200, animationTime) // in ms, must be > 0\n autoLoopAnimationTime = Math.max(200, autoLoopAnimationTime)\n\n const getStyleOffset = (index: number) => {\n const baseOffset = -50 + (index - currentPosition) * 100\n return `${baseOffset}%`\n }\n\n const animation = useCallback((time: number) => {\n let keepAnimating: boolean = true\n\n // Other calculation in the setState call to avoid updating the useCallback to often\n setCarouselInformation((state) => {\n const {\n animationState,\n dragState\n } = state\n if (animationState === undefined || dragState !== undefined) {\n keepAnimating = false\n return state\n }\n if (!animationState.startTime || !animationState.lastUpdateTime) {\n return {\n ...state,\n animationState: {\n ...animationState,\n startTime: time,\n lastUpdateTime: time\n }\n }\n }\n const useAnimationTime = animationState.isAutoLooping ? autoLoopAnimationTime : animationTime\n const progress = clamp((time - animationState.startTime) / useAnimationTime) // progress\n const easedProgress = EaseFunctions.easeInEaseOut(progress)\n const distance = util.getDistanceDirectional(animationState.startPosition, animationState.targetPosition, animationState.direction)\n const newPosition = util.getCorrectedPosition(easedProgress * distance * animationState.direction + animationState.startPosition)\n\n if (animationState.targetPosition === newPosition || progress === 1) {\n keepAnimating = false\n return ({\n currentPosition: LoopingArrayCalculator.withoutOffset(newPosition),\n animationState: undefined\n })\n }\n return ({\n currentPosition: newPosition,\n animationState: {\n ...animationState!,\n lastUpdateTime: time\n }\n })\n })\n if (keepAnimating) {\n animationId.current = requestAnimationFrame(time1 => animation(time1))\n }\n }, [animationTime, autoLoopAnimationTime, util])\n\n useEffect(() => {\n if (animationState) {\n animationId.current = requestAnimationFrame(animation)\n }\n return () => {\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = 0\n }\n }\n }, [animationState]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAutoLoop = () => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: prevState.dragState,\n animationState: prevState.animationState || prevState.dragState ? prevState.animationState : {\n startPosition: currentPosition,\n targetPosition: (currentPosition + 1) % length,\n direction: 1, // always move forward\n isAutoLooping: true\n }\n }))\n\n useEffect(() => {\n if (!animationId.current && !animationState && !dragState && !timeOut.current) {\n if (autoLoopingTimeOut > 0) {\n timeOut.current = setTimeout(() => {\n startAutoLoop()\n timeOut.current = undefined\n }, autoLoopingTimeOut)\n } else {\n startAutoLoop()\n }\n }\n }, [animationState, dragState, animationId.current, timeOut.current]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const startAnimation = (targetPosition?: number) => {\n if (targetPosition === undefined) {\n targetPosition = LoopingArrayCalculator.withoutOffset(currentPosition)\n }\n if (targetPosition === currentPosition) {\n return // we are exactly where we want to be\n }\n\n // find target index and fastest path to it\n const direction = util.getBestDirection(currentPosition, targetPosition)\n clearTimeout(timeOut.current)\n timeOut.current = undefined\n if (animationId.current) {\n cancelAnimationFrame(animationId.current)\n animationId.current = undefined\n }\n\n setCarouselInformation(prevState => ({\n ...prevState,\n dragState: undefined,\n animationState: {\n targetPosition: targetPosition!,\n direction,\n startPosition: currentPosition,\n isAutoLooping: false\n },\n timeOut: undefined\n }))\n }\n\n const canGoLeft = () => {\n return isLooping || currentPosition !== 0\n }\n\n const canGoRight = () => {\n return isLooping || currentPosition !== length - 1\n }\n\n const left = () => {\n if (canGoLeft()) {\n startAnimation(currentPosition === 0 ? length - 1 : LoopingArrayCalculator.withoutOffset(currentPosition - 1))\n }\n }\n\n const right = () => {\n if (canGoRight()) {\n startAnimation(LoopingArrayCalculator.withoutOffset((currentPosition + 1) % length))\n }\n }\n\n let items: ItemType[] = children.map((item, index) => ({\n index,\n item\n }))\n\n if (isLooping) {\n const before = createLoopingListWithIndex(children, length - 1, paddingItemCount, false).reverse().map(([index, item]) => ({\n index,\n item\n }))\n const after = createLoopingListWithIndex(children, 0, paddingItemCount).map(([index, item]) => ({\n index,\n item\n }))\n items = [\n ...before,\n ...items,\n ...after\n ]\n }\n\n const onDragStart = (x: number) => setCarouselInformation(prevState => ({\n ...prevState,\n dragState: {\n lastX: x,\n startX: x,\n startTime: Date.now(),\n startIndex: currentPosition,\n },\n animationState: undefined // cancel animation\n }))\n\n const onDrag = (x: number, width: number) => {\n // For some weird reason the clientX is 0 on the last dragUpdate before drag end causing issues\n if (!dragState || x === 0) {\n return\n }\n const offsetUpdate = (dragState.lastX - x) / width\n const newPosition = util.getCorrectedPosition(currentPosition + offsetUpdate)\n\n setCarouselInformation(prevState => ({\n ...prevState,\n currentPosition: newPosition,\n dragState: {\n ...dragState,\n lastX: x\n },\n }))\n }\n\n const onDragEnd = (x: number, width: number) => {\n if (!dragState) {\n return\n }\n const distance = dragState.startX - x\n const relativeDistance = distance / width\n const duration = (Date.now() - dragState.startTime) // in milliseconds\n const velocity = distance / (Date.now() - dragState.startTime)\n\n const isSlide = Math.abs(velocity) > 2 || (duration < 200 && (Math.abs(relativeDistance) > 0.2 || Math.abs(distance) > 50))\n if (isSlide) {\n if (distance > 0 && canGoRight()) {\n right()\n return\n } else if (distance < 0 && canGoLeft()) {\n left()\n return\n }\n }\n startAnimation()\n }\n\n const dragHandlers = {\n draggable: true,\n onDragStart: (event: React.DragEvent<HTMLDivElement>) => {\n onDragStart(event.clientX)\n event.dataTransfer.setDragImage(document.createElement('div'), 0, 0)\n },\n onDrag: (event: React.DragEvent<HTMLDivElement>) => onDrag(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onDragEnd: (event: React.DragEvent<HTMLDivElement>) => onDragEnd(event.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchStart: (event: React.TouchEvent<HTMLDivElement>) => onDragStart(event.touches[0]!.clientX),\n onTouchMove: (event: React.TouchEvent<HTMLDivElement>) => onDrag(event.touches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchEnd: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n onTouchCancel: (event: React.TouchEvent<HTMLDivElement>) => onDragEnd(event.changedTouches[0]!.clientX, (event.target as HTMLDivElement).getBoundingClientRect().width),\n }\n\n return (\n <div className=\"col items-center w-full gap-y-2\">\n <div className={clsx(`relative w-full overflow-hidden`, heightClassName, className)}>\n {arrows && (\n <>\n <div\n className={clsx('absolute z-10 left-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoLeft() })}\n onClick={() => left()}\n >\n <ChevronLeft size={32}/>\n </div>\n <div\n className={clsx('absolute z-10 right-0 top-1/2 -translate-y-1/2 bg-gray-200 hover:bg-gray-300 rounded-lg cursor-pointer border-black border-2', { hidden: !canGoRight() })}\n onClick={() => right()}\n >\n <ChevronRight size={32}/>\n </div>\n </>\n )}\n {hintNext ? (\n <div className={clsx(`relative row h-full`, heightClassName)}>\n <div className=\"relative row h-full w-full px-2 overflow-hidden\">\n {items.map(({\n item,\n index\n }, listIndex) => (\n <div\n key={listIndex}\n className={clsx(`absolute left-[50%] h-full overflow-hidden`, widthClassName, { '!cursor-grabbing': !!dragState })}\n style={{ translate: getStyleOffset(listIndex - (isLooping ? paddingItemCount : 0)) }}\n {...dragHandlers}\n onClick={() => startAnimation(index)}\n >\n {item}\n </div>\n ))}\n </div>\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)}\n />\n <div\n className={clsx(`hidden pointer-events-none desktop:block absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)}\n />\n </div>\n ) : (\n <div className={clsx('px-16 h-full', { '!cursor-grabbing': !!dragState })} {...dragHandlers}>\n {children[currentIndex]}\n </div>\n )}\n </div>\n {dots && (\n <div\n className=\"row items-center justify-center w-full my-2\">\n {range(0, length - 1).map(index => (\n <button\n key={index}\n className={clsx('w-[2rem] min-w-[2rem] h-[0.75rem] min-h-[0.75rem] hover:bg-primary hover:brightness-90 first:rounded-l-md last:rounded-r-md', {\n 'bg-gray-200': currentIndex !== index,\n 'bg-primary': currentIndex === index\n })}\n onClick={() => startAnimation(index)}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","export const equalSizeGroups = <T >(array: T[], groupSize: number): T[][] => {\n if (groupSize <= 0) {\n console.warn(`group size should be greater than 0: groupSize = ${groupSize}`)\n return [[...array]]\n }\n\n const groups = []\n for (let i = 0; i < array.length; i += groupSize) {\n groups.push(array.slice(i, Math.min(i + groupSize, array.length)))\n }\n return groups\n}\n\n/**\n * @param start\n * @param end inclusive\n * @param allowEmptyRange Whether the range can be defined empty via end < start\n */\nexport const range = (start: number, end: number, allowEmptyRange: boolean = false): number[] => {\n if (end < start) {\n if (!allowEmptyRange) {\n console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set allowEmptyRange to true`)\n }\n return []\n }\n return Array.from({ length: end - start + 1 }, (_, index) => index + start)\n}\n\n/** Finds the closest match\n * @param list The list of all possible matches\n * @param firstCloser Return whether item1 is closer than item2\n */\nexport const closestMatch = <T >(list: T[], firstCloser: (item1: T, item2: T) => boolean) => {\n return list.reduce((item1, item2) => {\n return firstCloser(item1, item2) ? item1 : item2\n })\n}\n\n/**\n * returns the item in middle of a list and its neighbours before and after\n * e.g. [1,2,3,4,5,6] for item = 1 would return [5,6,1,2,3]\n */\nexport const getNeighbours = <T >(list: T[], item: T, neighbourDistance: number = 2) => {\n const index = list.indexOf(item)\n const totalItems = neighbourDistance * 2 + 1\n if (list.length < totalItems) {\n console.warn('List is to short')\n return list\n }\n\n if (index === -1) {\n console.error('item not found in list')\n return list.splice(0, totalItems)\n }\n\n let start = index - neighbourDistance\n if (start < 0) {\n start += list.length\n }\n const end = (index + neighbourDistance + 1) % list.length\n\n const result: T[] = []\n let ignoreOnce = list.length === totalItems\n for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {\n result.push(list[i]!)\n if (end === i && ignoreOnce) {\n ignoreOnce = false\n }\n }\n return result\n}\n\nexport const createLoopingListWithIndex = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n if (length < 0) {\n console.warn(`createLoopingList: length must be >= 0, given ${length}`)\n } else if (length === 0) {\n length = list.length\n }\n\n const returnList: [number, T][] = []\n\n if (forwards) {\n for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {\n returnList.push([i, list[i]!])\n }\n } else {\n for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {\n returnList.push([i, list[i]!])\n }\n }\n\n return returnList\n}\n\nexport const createLoopingList = <T >(list: T[], startIndex: number = 0, length: number = 0, forwards: boolean = true) => {\n return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item)\n}\n\nexport const ArrayUtil = {\n unique: <T>(list: T[]): T[] => {\n const seen = new Set<T>()\n return list.filter((item) => {\n if (seen.has(item)) {\n return false\n }\n seen.add(item)\n return true\n })\n },\n\n difference: <T>(list: T[], removeList: T[]): T[] => {\n const remove = new Set<T>(removeList)\n return list.filter((item) => !remove.has(item))\n }\n}\n","export const clamp = (value: number, min: number = 0, max: number = 1): number => {\n return Math.min(Math.max(value, min), max)\n}\n","import { clamp } from './math'\n\nexport type EaseFunction = (t: number) => number\n\nexport class EaseFunctions {\n static cubicBezierGeneric(x1: number, y1: number, x2: number, y2: number): { x: EaseFunction, y: EaseFunction } {\n // Calculate the x and y coordinates using the cubic Bézier formula\n const cx = 3 * x1\n const bx = 3 * (x2 - x1) - cx\n const ax = 1 - cx - bx\n\n const cy = 3 * y1\n const by = 3 * (y2 - y1) - cy\n const ay = 1 - cy - by\n\n // Compute x and y values at parameter t\n const x = (t: number) => ((ax * t + bx) * t + cx) * t\n const y = (t: number) => ((ay * t + by) * t + cy) * t\n\n return {\n x,\n y\n }\n }\n\n static cubicBezier(x1: number, y1: number, x2: number, y2: number): EaseFunction {\n const { y } = EaseFunctions.cubicBezierGeneric(x1, y1, x2, y2)\n return (t: number) => {\n t = clamp(t)\n return y(t) // <= equal to x(t) * 0 + y(t) * 1\n }\n }\n\n static easeInEaseOut(t: number): number {\n return EaseFunctions.cubicBezier(0.65, 0, 0.35, 1)(t)\n };\n}\n","/**\n * 1 is forwards\n *\n * -1 is backwards\n */\nexport type Direction = 1 | -1\n\nexport class LoopingArrayCalculator {\n length: number\n isLooping: boolean\n allowedOverScroll: number\n\n constructor(length: number, isLooping: boolean = true, allowedOverScroll: number = 0.1) {\n if (allowedOverScroll < 0 || length < 1) {\n throw new Error('Invalid parameters: allowedOverScroll >= 0 and length >= 1 must be true')\n }\n\n this.length = length\n this.isLooping = isLooping\n this.allowedOverScroll = allowedOverScroll\n }\n\n getCorrectedPosition(position: number): number {\n if (!this.isLooping) {\n return Math.max(-this.allowedOverScroll, Math.min(this.allowedOverScroll + this.length - 1, position))\n }\n if (position >= this.length) {\n return position % this.length\n }\n if (position < 0) {\n return this.length - (Math.abs(position) % this.length)\n }\n return position\n }\n\n static withoutOffset(position: number): number {\n return position + LoopingArrayCalculator.getOffset(position)\n }\n\n static getOffset(position: number): number {\n return Math.round(position) - position // For example: 45.5 => 46 - 45.5 = 0.5\n }\n\n /**\n * @return absolute distance forwards or Infinity when the target cannot be reached (only possible when not isLooping)\n */\n getDistanceDirectional(position: number, target: number, direction: Direction): number {\n if (!this.isLooping && (position < -this.allowedOverScroll || position > this.allowedOverScroll + this.length - 1)) {\n throw new Error('Invalid parameters: position is out of bounds.')\n }\n\n const isForwardInvalid = (direction === 1 && position > target)\n const isBackwardInvalid = (direction === -1 && target < position)\n\n if (!this.isLooping && (isForwardInvalid || isBackwardInvalid)) {\n return Infinity\n }\n\n if (direction === -1) {\n return this.getDistanceDirectional(target, position, 1)\n }\n\n position = this.getCorrectedPosition(position)\n target = this.getCorrectedPosition(target)\n\n let distance = (target - position) * direction\n if (distance < 0) {\n distance = this.length - (Math.abs(position) % this.length) + target\n }\n\n return distance\n }\n\n getDistanceForward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, 1)\n }\n\n getDistanceBackward(position: number, target: number): number {\n return this.getDistanceDirectional(position, target, -1)\n }\n\n getDistance(position: number, target: number): number {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n\n return Math.min(forwardDistance, backwardDistance)\n }\n\n getBestDirection(position: number, target: number): Direction {\n const forwardDistance = this.getDistanceForward(position, target)\n const backwardDistance = this.getDistanceBackward(position, target)\n return forwardDistance < backwardDistance ? 1 : -1\n }\n}\n"],"mappings":"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","names":["animationState","dragState"]}
@@ -0,0 +1,15 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
5
+ children: ReactNode[];
6
+ divider: (index: number) => ReactNode;
7
+ };
8
+ /**
9
+ * A Component for inserting a divider in the middle of each child element
10
+ *
11
+ * undefined elements are removed
12
+ */
13
+ declare const DividerInserter: ({ children, divider, className, ...restProps }: DividerInserterProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ export { DividerInserter, type DividerInserterProps };
@@ -1,5 +1,7 @@
1
- import type { HTMLAttributes, ReactNode } from 'react';
2
- export type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
3
5
  children: ReactNode[];
4
6
  divider: (index: number) => ReactNode;
5
7
  };
@@ -8,4 +10,6 @@ export type DividerInserterProps = Omit<HTMLAttributes<HTMLDivElement>, 'childre
8
10
  *
9
11
  * undefined elements are removed
10
12
  */
11
- export declare const DividerInserter: ({ children, divider, className, ...restProps }: DividerInserterProps) => import("react/jsx-runtime").JSX.Element;
13
+ declare const DividerInserter: ({ children, divider, className, ...restProps }: DividerInserterProps) => react_jsx_runtime.JSX.Element;
14
+
15
+ export { DividerInserter, type DividerInserterProps };