@tui-cruises/mein-schiff-web-react-component-library 2.0.0-rc.1

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 (556) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +14 -0
  3. package/README.md +26 -0
  4. package/custom.d.ts +14 -0
  5. package/icons/icons/360.tsx +20 -0
  6. package/icons/icons/add-circle.tsx +26 -0
  7. package/icons/icons/airplane.tsx +20 -0
  8. package/icons/icons/anchor.tsx +20 -0
  9. package/icons/icons/angle-tool.tsx +26 -0
  10. package/icons/icons/arrow-down.tsx +20 -0
  11. package/icons/icons/arrow-left.tsx +20 -0
  12. package/icons/icons/arrow-right.tsx +20 -0
  13. package/icons/icons/at.tsx +20 -0
  14. package/icons/icons/baggage.tsx +20 -0
  15. package/icons/icons/balcony.tsx +20 -0
  16. package/icons/icons/bathroom.tsx +32 -0
  17. package/icons/icons/beach.tsx +20 -0
  18. package/icons/icons/bed.tsx +26 -0
  19. package/icons/icons/bell.tsx +20 -0
  20. package/icons/icons/bording.tsx +20 -0
  21. package/icons/icons/cabins.tsx +20 -0
  22. package/icons/icons/calendar.tsx +32 -0
  23. package/icons/icons/cancel.tsx +20 -0
  24. package/icons/icons/cash.tsx +44 -0
  25. package/icons/icons/check-circle.tsx +18 -0
  26. package/icons/icons/check.tsx +20 -0
  27. package/icons/icons/circle.tsx +20 -0
  28. package/icons/icons/clear.tsx +24 -0
  29. package/icons/icons/clock-rotate-right.tsx +20 -0
  30. package/icons/icons/clock.tsx +26 -0
  31. package/icons/icons/cloud-sunny.tsx +43 -0
  32. package/icons/icons/cloud.tsx +20 -0
  33. package/icons/icons/compass.tsx +26 -0
  34. package/icons/icons/delete-circle.tsx +26 -0
  35. package/icons/icons/departure.tsx +20 -0
  36. package/icons/icons/details.tsx +20 -0
  37. package/icons/icons/diamond.tsx +20 -0
  38. package/icons/icons/edit-pencil.tsx +20 -0
  39. package/icons/icons/excellence.tsx +20 -0
  40. package/icons/icons/expand.tsx +20 -0
  41. package/icons/icons/eye-closed.tsx +20 -0
  42. package/icons/icons/eye-empty.tsx +26 -0
  43. package/icons/icons/eye-off.tsx +32 -0
  44. package/icons/icons/eye.tsx +26 -0
  45. package/icons/icons/fallback.tsx +26 -0
  46. package/icons/icons/filter.tsx +20 -0
  47. package/icons/icons/flag.tsx +20 -0
  48. package/icons/icons/fog.tsx +22 -0
  49. package/icons/icons/glases.tsx +28 -0
  50. package/icons/icons/group.tsx +32 -0
  51. package/icons/icons/heart-filled.tsx +20 -0
  52. package/icons/icons/heart.tsx +20 -0
  53. package/icons/icons/help-circle.tsx +24 -0
  54. package/icons/icons/home.tsx +22 -0
  55. package/icons/icons/humidity.tsx +30 -0
  56. package/icons/icons/impressions.tsx +20 -0
  57. package/icons/icons/inclusive-services.tsx +20 -0
  58. package/icons/icons/index.ts +141 -0
  59. package/icons/icons/info-empty.tsx +26 -0
  60. package/icons/icons/language.tsx +20 -0
  61. package/icons/icons/lifebuoy.tsx +30 -0
  62. package/icons/icons/loading.tsx +18 -0
  63. package/icons/icons/location.tsx +24 -0
  64. package/icons/icons/log-in.tsx +26 -0
  65. package/icons/icons/log-out.tsx +26 -0
  66. package/icons/icons/mail-open.tsx +20 -0
  67. package/icons/icons/map.tsx +20 -0
  68. package/icons/icons/maps-arrow-diagonal.tsx +20 -0
  69. package/icons/icons/media-image-list.tsx +32 -0
  70. package/icons/icons/menu.tsx +21 -0
  71. package/icons/icons/metropolis.tsx +20 -0
  72. package/icons/icons/minus.tsx +20 -0
  73. package/icons/icons/more-horiz.tsx +35 -0
  74. package/icons/icons/more-vert.tsx +35 -0
  75. package/icons/icons/mostly-cloudy-night.tsx +24 -0
  76. package/icons/icons/ms-ship.tsx +20 -0
  77. package/icons/icons/music.tsx +20 -0
  78. package/icons/icons/nav-arrow-down.tsx +20 -0
  79. package/icons/icons/nav-arrow-left.tsx +20 -0
  80. package/icons/icons/nav-arrow-right.tsx +20 -0
  81. package/icons/icons/nav-arrow-up.tsx +20 -0
  82. package/icons/icons/no-wifi.tsx +18 -0
  83. package/icons/icons/old-trips.tsx +20 -0
  84. package/icons/icons/percentage.tsx +20 -0
  85. package/icons/icons/phone.tsx +20 -0
  86. package/icons/icons/pin.tsx +20 -0
  87. package/icons/icons/play.tsx +20 -0
  88. package/icons/icons/plus-circle.tsx +20 -0
  89. package/icons/icons/plus.tsx +20 -0
  90. package/icons/icons/point.tsx +15 -0
  91. package/icons/icons/rain.tsx +22 -0
  92. package/icons/icons/receipt.tsx +20 -0
  93. package/icons/icons/refresh-double.tsx +32 -0
  94. package/icons/icons/search.tsx +26 -0
  95. package/icons/icons/security-pass.tsx +26 -0
  96. package/icons/icons/settings.tsx +20 -0
  97. package/icons/icons/share-ios.tsx +26 -0
  98. package/icons/icons/ship-account.tsx +20 -0
  99. package/icons/icons/ship-info.tsx +20 -0
  100. package/icons/icons/ship-position.tsx +27 -0
  101. package/icons/icons/shooting-stars.tsx +28 -0
  102. package/icons/icons/sleet.tsx +22 -0
  103. package/icons/icons/snow-flake.tsx +20 -0
  104. package/icons/icons/snow.tsx +22 -0
  105. package/icons/icons/sofa.tsx +32 -0
  106. package/icons/icons/star-dashed.tsx +20 -0
  107. package/icons/icons/star-filled.tsx +25 -0
  108. package/icons/icons/star-half-dashed.tsx +26 -0
  109. package/icons/icons/star.tsx +20 -0
  110. package/icons/icons/substract.tsx +26 -0
  111. package/icons/icons/sun-light.tsx +42 -0
  112. package/icons/icons/temperature-high.tsx +26 -0
  113. package/icons/icons/thunderstorm.tsx +26 -0
  114. package/icons/icons/tornado.tsx +18 -0
  115. package/icons/icons/trash.tsx +20 -0
  116. package/icons/icons/travel-assistant.tsx +24 -0
  117. package/icons/icons/tropical-storm.tsx +71 -0
  118. package/icons/icons/upcoming-trips.tsx +27 -0
  119. package/icons/icons/user.tsx +26 -0
  120. package/icons/icons/warning-circle.tsx +26 -0
  121. package/icons/icons/warning-hexagon.tsx +26 -0
  122. package/icons/icons/weather.tsx +20 -0
  123. package/icons/icons/wifi.tsx +20 -0
  124. package/icons/icons/wind.tsx +22 -0
  125. package/icons/icons/windrose.tsx +42 -0
  126. package/icons/icons/windsock.tsx +20 -0
  127. package/icons/pictograms/24h-meals.tsx +25 -0
  128. package/icons/pictograms/ad-template.tsx +23 -0
  129. package/icons/pictograms/add.tsx +25 -0
  130. package/icons/pictograms/adventure-club-only.tsx +25 -0
  131. package/icons/pictograms/allergy.tsx +30 -0
  132. package/icons/pictograms/anchor.tsx +23 -0
  133. package/icons/pictograms/arrival.tsx +23 -0
  134. package/icons/pictograms/baby-awake.tsx +20 -0
  135. package/icons/pictograms/baby-monitor.tsx +20 -0
  136. package/icons/pictograms/baby-sleep.tsx +20 -0
  137. package/icons/pictograms/baggage-information.tsx +23 -0
  138. package/icons/pictograms/baggage.tsx +23 -0
  139. package/icons/pictograms/bedroom-check.tsx +23 -0
  140. package/icons/pictograms/bedroom.tsx +23 -0
  141. package/icons/pictograms/beverages.tsx +28 -0
  142. package/icons/pictograms/billboard.tsx +23 -0
  143. package/icons/pictograms/blog.tsx +23 -0
  144. package/icons/pictograms/brochure.tsx +23 -0
  145. package/icons/pictograms/calendar-check.tsx +18 -0
  146. package/icons/pictograms/calendar-default.tsx +18 -0
  147. package/icons/pictograms/calendar-disabled.tsx +18 -0
  148. package/icons/pictograms/calendar-focus.tsx +25 -0
  149. package/icons/pictograms/champagne-glasses.tsx +25 -0
  150. package/icons/pictograms/check.tsx +25 -0
  151. package/icons/pictograms/checklist-check.tsx +18 -0
  152. package/icons/pictograms/checklist.tsx +21 -0
  153. package/icons/pictograms/checkmark.tsx +23 -0
  154. package/icons/pictograms/chef-hat.tsx +30 -0
  155. package/icons/pictograms/chevron-down.tsx +25 -0
  156. package/icons/pictograms/chevron-up.tsx +25 -0
  157. package/icons/pictograms/circles.tsx +25 -0
  158. package/icons/pictograms/cleaning-trolley.tsx +30 -0
  159. package/icons/pictograms/clock-0-30.tsx +23 -0
  160. package/icons/pictograms/clock-0.tsx +23 -0
  161. package/icons/pictograms/clock-1-30.tsx +23 -0
  162. package/icons/pictograms/clock-1.tsx +23 -0
  163. package/icons/pictograms/clock-10-30.tsx +23 -0
  164. package/icons/pictograms/clock-10.tsx +23 -0
  165. package/icons/pictograms/clock-11-30.tsx +23 -0
  166. package/icons/pictograms/clock-11.tsx +23 -0
  167. package/icons/pictograms/clock-2-30.tsx +23 -0
  168. package/icons/pictograms/clock-2.tsx +23 -0
  169. package/icons/pictograms/clock-3-30.tsx +23 -0
  170. package/icons/pictograms/clock-3.tsx +23 -0
  171. package/icons/pictograms/clock-4-30.tsx +23 -0
  172. package/icons/pictograms/clock-4.tsx +23 -0
  173. package/icons/pictograms/clock-5-30.tsx +23 -0
  174. package/icons/pictograms/clock-5.tsx +23 -0
  175. package/icons/pictograms/clock-6-30.tsx +23 -0
  176. package/icons/pictograms/clock-6.tsx +23 -0
  177. package/icons/pictograms/clock-7-30.tsx +23 -0
  178. package/icons/pictograms/clock-7.tsx +23 -0
  179. package/icons/pictograms/clock-8-30.tsx +23 -0
  180. package/icons/pictograms/clock-8.tsx +23 -0
  181. package/icons/pictograms/clock-9-30.tsx +23 -0
  182. package/icons/pictograms/clock-9.tsx +23 -0
  183. package/icons/pictograms/clock-default.tsx +23 -0
  184. package/icons/pictograms/close.tsx +25 -0
  185. package/icons/pictograms/clothing.tsx +23 -0
  186. package/icons/pictograms/cloud.tsx +23 -0
  187. package/icons/pictograms/cocktails.tsx +23 -0
  188. package/icons/pictograms/coffee-machine.tsx +23 -0
  189. package/icons/pictograms/compass.tsx +23 -0
  190. package/icons/pictograms/couple.tsx +25 -0
  191. package/icons/pictograms/crew-love.tsx +28 -0
  192. package/icons/pictograms/crown.tsx +23 -0
  193. package/icons/pictograms/dart.tsx +23 -0
  194. package/icons/pictograms/decoration.tsx +23 -0
  195. package/icons/pictograms/departure-check.tsx +25 -0
  196. package/icons/pictograms/departure-germany.tsx +20 -0
  197. package/icons/pictograms/departure-time.tsx +35 -0
  198. package/icons/pictograms/departure.tsx +23 -0
  199. package/icons/pictograms/diamond.tsx +23 -0
  200. package/icons/pictograms/discount-card.tsx +35 -0
  201. package/icons/pictograms/discount.tsx +30 -0
  202. package/icons/pictograms/documents.tsx +23 -0
  203. package/icons/pictograms/download-document.tsx +23 -0
  204. package/icons/pictograms/download.tsx +23 -0
  205. package/icons/pictograms/dripping-dew.tsx +23 -0
  206. package/icons/pictograms/dumbbell.tsx +25 -0
  207. package/icons/pictograms/early-bird.tsx +23 -0
  208. package/icons/pictograms/edit.tsx +23 -0
  209. package/icons/pictograms/energy-saving.tsx +23 -0
  210. package/icons/pictograms/enjoyer-club-only.tsx +18 -0
  211. package/icons/pictograms/environment.tsx +30 -0
  212. package/icons/pictograms/environmental-officer.tsx +30 -0
  213. package/icons/pictograms/explorer-club-only.tsx +18 -0
  214. package/icons/pictograms/family.tsx +25 -0
  215. package/icons/pictograms/fb-community.tsx +25 -0
  216. package/icons/pictograms/finance.tsx +25 -0
  217. package/icons/pictograms/fog.tsx +25 -0
  218. package/icons/pictograms/food-certificate.tsx +30 -0
  219. package/icons/pictograms/gastronomy.tsx +25 -0
  220. package/icons/pictograms/gift.tsx +23 -0
  221. package/icons/pictograms/globetrotter-club-only.tsx +18 -0
  222. package/icons/pictograms/hairdresser.tsx +20 -0
  223. package/icons/pictograms/handbag.tsx +30 -0
  224. package/icons/pictograms/hands-holding-heart.tsx +30 -0
  225. package/icons/pictograms/heart-beat.tsx +29 -0
  226. package/icons/pictograms/heart.tsx +23 -0
  227. package/icons/pictograms/home.tsx +23 -0
  228. package/icons/pictograms/hospital-cross.tsx +23 -0
  229. package/icons/pictograms/hot-dish.tsx +23 -0
  230. package/icons/pictograms/hot-drink.tsx +25 -0
  231. package/icons/pictograms/human-heart.tsx +30 -0
  232. package/icons/pictograms/human-holding-heart.tsx +30 -0
  233. package/icons/pictograms/human-open-arms.tsx +23 -0
  234. package/icons/pictograms/human-profile.tsx +23 -0
  235. package/icons/pictograms/human-swimming.tsx +25 -0
  236. package/icons/pictograms/ice-cream.tsx +23 -0
  237. package/icons/pictograms/important.tsx +23 -0
  238. package/icons/pictograms/index.ts +285 -0
  239. package/icons/pictograms/information.tsx +30 -0
  240. package/icons/pictograms/internet.tsx +23 -0
  241. package/icons/pictograms/jogging.tsx +21 -0
  242. package/icons/pictograms/kid-playing.tsx +23 -0
  243. package/icons/pictograms/life-jacket.tsx +21 -0
  244. package/icons/pictograms/lifebuoy.tsx +20 -0
  245. package/icons/pictograms/lightbulb.tsx +23 -0
  246. package/icons/pictograms/lightning.tsx +23 -0
  247. package/icons/pictograms/location-mark.tsx +30 -0
  248. package/icons/pictograms/log-in.tsx +23 -0
  249. package/icons/pictograms/long-term-trips.tsx +20 -0
  250. package/icons/pictograms/lotte-chatbot.tsx +28 -0
  251. package/icons/pictograms/lotte-mail.tsx +28 -0
  252. package/icons/pictograms/mail-at.tsx +23 -0
  253. package/icons/pictograms/mail-information.tsx +23 -0
  254. package/icons/pictograms/mailbox.tsx +23 -0
  255. package/icons/pictograms/many-sea-days.tsx +20 -0
  256. package/icons/pictograms/medal.tsx +23 -0
  257. package/icons/pictograms/microphone.tsx +23 -0
  258. package/icons/pictograms/ms-1.tsx +23 -0
  259. package/icons/pictograms/ms-2.tsx +30 -0
  260. package/icons/pictograms/ms-3.tsx +30 -0
  261. package/icons/pictograms/ms-4.tsx +30 -0
  262. package/icons/pictograms/ms-5.tsx +30 -0
  263. package/icons/pictograms/ms-6.tsx +30 -0
  264. package/icons/pictograms/ms-7-new-eng.tsx +37 -0
  265. package/icons/pictograms/ms-7-new.tsx +30 -0
  266. package/icons/pictograms/ms-7.tsx +30 -0
  267. package/icons/pictograms/ms-default.tsx +30 -0
  268. package/icons/pictograms/ms-flow-new-eng.tsx +37 -0
  269. package/icons/pictograms/ms-flow-new.tsx +49 -0
  270. package/icons/pictograms/ms-flow.tsx +41 -0
  271. package/icons/pictograms/ms-relax-new-eng.tsx +37 -0
  272. package/icons/pictograms/ms-relax-new.tsx +36 -0
  273. package/icons/pictograms/ms-ship.tsx +23 -0
  274. package/icons/pictograms/music-book.tsx +23 -0
  275. package/icons/pictograms/my-account.tsx +22 -0
  276. package/icons/pictograms/my-trips.tsx +29 -0
  277. package/icons/pictograms/navigation-arrow.tsx +23 -0
  278. package/icons/pictograms/no-wifi.tsx +21 -0
  279. package/icons/pictograms/not-available.tsx +23 -0
  280. package/icons/pictograms/offer.tsx +23 -0
  281. package/icons/pictograms/offline.tsx +25 -0
  282. package/icons/pictograms/onboard-announcement.tsx +20 -0
  283. package/icons/pictograms/package-newspaper.tsx +27 -0
  284. package/icons/pictograms/paper-news.tsx +23 -0
  285. package/icons/pictograms/paper-plane.tsx +28 -0
  286. package/icons/pictograms/payment-check.tsx +32 -0
  287. package/icons/pictograms/payment.tsx +28 -0
  288. package/icons/pictograms/people-check.tsx +25 -0
  289. package/icons/pictograms/people.tsx +25 -0
  290. package/icons/pictograms/permanent-make-up.tsx +20 -0
  291. package/icons/pictograms/person-single.tsx +23 -0
  292. package/icons/pictograms/phone.tsx +20 -0
  293. package/icons/pictograms/play-button.tsx +20 -0
  294. package/icons/pictograms/presentation.tsx +23 -0
  295. package/icons/pictograms/price-tag.tsx +21 -0
  296. package/icons/pictograms/printer.tsx +23 -0
  297. package/icons/pictograms/rain.tsx +23 -0
  298. package/icons/pictograms/receipt.tsx +25 -0
  299. package/icons/pictograms/remove.tsx +25 -0
  300. package/icons/pictograms/safety.tsx +23 -0
  301. package/icons/pictograms/screen.tsx +23 -0
  302. package/icons/pictograms/search.tsx +23 -0
  303. package/icons/pictograms/service.tsx +23 -0
  304. package/icons/pictograms/sewage.tsx +30 -0
  305. package/icons/pictograms/ship-outstanding.tsx +23 -0
  306. package/icons/pictograms/ship-transfer.tsx +23 -0
  307. package/icons/pictograms/shooting-stars.tsx +23 -0
  308. package/icons/pictograms/shore-excursions-old.tsx +23 -0
  309. package/icons/pictograms/shore-excursions.tsx +32 -0
  310. package/icons/pictograms/short-notice-departures.tsx +20 -0
  311. package/icons/pictograms/short-trips.tsx +21 -0
  312. package/icons/pictograms/size.tsx +23 -0
  313. package/icons/pictograms/smartphone.tsx +23 -0
  314. package/icons/pictograms/smiley.tsx +23 -0
  315. package/icons/pictograms/social-media.tsx +37 -0
  316. package/icons/pictograms/spa-balcony-cabin.tsx +43 -0
  317. package/icons/pictograms/speech-bubble-faq.tsx +23 -0
  318. package/icons/pictograms/speech-bubble-hello.tsx +23 -0
  319. package/icons/pictograms/speech-bubble-ok.tsx +30 -0
  320. package/icons/pictograms/speedboat.tsx +23 -0
  321. package/icons/pictograms/star-cancel.tsx +23 -0
  322. package/icons/pictograms/star-check.tsx +23 -0
  323. package/icons/pictograms/star-plus.tsx +23 -0
  324. package/icons/pictograms/star.tsx +23 -0
  325. package/icons/pictograms/sun-cloud.tsx +23 -0
  326. package/icons/pictograms/sun-lounger.tsx +23 -0
  327. package/icons/pictograms/sun.tsx +23 -0
  328. package/icons/pictograms/theater-mask.tsx +35 -0
  329. package/icons/pictograms/thermometer.tsx +23 -0
  330. package/icons/pictograms/tickets.tsx +21 -0
  331. package/icons/pictograms/towels.tsx +23 -0
  332. package/icons/pictograms/transportation.tsx +30 -0
  333. package/icons/pictograms/travel-protection-check.tsx +23 -0
  334. package/icons/pictograms/travel-protection.tsx +23 -0
  335. package/icons/pictograms/video.tsx +23 -0
  336. package/icons/pictograms/waste-management.tsx +30 -0
  337. package/icons/pictograms/webinar.tsx +23 -0
  338. package/icons/pictograms/wheel-of-fortune.tsx +23 -0
  339. package/icons/pictograms/wifi.tsx +20 -0
  340. package/icons/pictograms/wind.tsx +25 -0
  341. package/index.tsx +73 -0
  342. package/package.json +119 -0
  343. package/public/favicon-16x16.png +0 -0
  344. package/public/favicon-32x32.png +0 -0
  345. package/public/videos/placeholder.mp4 +0 -0
  346. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_It.ttf +0 -0
  347. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_It.woff +0 -0
  348. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_It.woff2 +0 -0
  349. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_Rg.ttf +0 -0
  350. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_Rg.woff +0 -0
  351. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_Rg.woff2 +0 -0
  352. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBd.ttf +0 -0
  353. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBd.woff +0 -0
  354. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBd.woff2 +0 -0
  355. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBdIt.ttf +0 -0
  356. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBdIt.woff +0 -0
  357. package/src/assets/fonts/mein-schiff-sans-pro/MeinSchiffSansPro_SBdIt.woff2 +0 -0
  358. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200.eot +0 -0
  359. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200.svg +338 -0
  360. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200.ttf +0 -0
  361. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200.woff +0 -0
  362. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200.woff2 +0 -0
  363. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200italic.eot +0 -0
  364. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200italic.svg +345 -0
  365. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200italic.ttf +0 -0
  366. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200italic.woff +0 -0
  367. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-200italic.woff2 +0 -0
  368. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300.eot +0 -0
  369. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300.svg +338 -0
  370. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300.ttf +0 -0
  371. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300.woff +0 -0
  372. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300.woff2 +0 -0
  373. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300italic.eot +0 -0
  374. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300italic.svg +346 -0
  375. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300italic.ttf +0 -0
  376. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300italic.woff +0 -0
  377. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-300italic.woff2 +0 -0
  378. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600.eot +0 -0
  379. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600.svg +337 -0
  380. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600.ttf +0 -0
  381. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600.woff +0 -0
  382. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600.woff2 +0 -0
  383. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600italic.eot +0 -0
  384. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600italic.svg +342 -0
  385. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600italic.ttf +0 -0
  386. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600italic.woff +0 -0
  387. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-600italic.woff2 +0 -0
  388. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700.eot +0 -0
  389. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700.svg +337 -0
  390. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700.ttf +0 -0
  391. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700.woff +0 -0
  392. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700.woff2 +0 -0
  393. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700italic.eot +0 -0
  394. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700italic.svg +339 -0
  395. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700italic.ttf +0 -0
  396. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700italic.woff +0 -0
  397. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-700italic.woff2 +0 -0
  398. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900.eot +0 -0
  399. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900.svg +337 -0
  400. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900.ttf +0 -0
  401. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900.woff +0 -0
  402. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900.woff2 +0 -0
  403. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900italic.eot +0 -0
  404. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900italic.svg +340 -0
  405. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900italic.ttf +0 -0
  406. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900italic.woff +0 -0
  407. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-900italic.woff2 +0 -0
  408. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-italic.eot +0 -0
  409. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-italic.svg +343 -0
  410. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-italic.ttf +0 -0
  411. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-italic.woff +0 -0
  412. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-italic.woff2 +0 -0
  413. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-regular.eot +0 -0
  414. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-regular.svg +337 -0
  415. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-regular.ttf +0 -0
  416. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-regular.woff +0 -0
  417. package/src/assets/fonts/source-sans-pro/source-sans-pro-v21-latin-regular.woff2 +0 -0
  418. package/src/assets/images/placeholder-blueish.jpg +0 -0
  419. package/src/assets/images/placeholder-sepia.jpg +0 -0
  420. package/src/assets/images/placeholder.jpg +0 -0
  421. package/src/components/core/Accordion/Accordion.tsx +228 -0
  422. package/src/components/core/Accordion/AccordionItem.tsx +72 -0
  423. package/src/components/core/Accordion/AccordionTab.tsx +39 -0
  424. package/src/components/core/Accordion/index.ts +3 -0
  425. package/src/components/core/Accordion/utils.tsx +13 -0
  426. package/src/components/core/Alert/Alert.tsx +131 -0
  427. package/src/components/core/Alert/index.ts +1 -0
  428. package/src/components/core/AlertDialog/AlertDialog.tsx +288 -0
  429. package/src/components/core/AlertDialog/index.ts +1 -0
  430. package/src/components/core/Badge/Badge.tsx +70 -0
  431. package/src/components/core/Badge/index.ts +1 -0
  432. package/src/components/core/BirthdateField/BirthdateField.tsx +269 -0
  433. package/src/components/core/BirthdateField/index.ts +1 -0
  434. package/src/components/core/Button/Button.tsx +178 -0
  435. package/src/components/core/Button/index.ts +1 -0
  436. package/src/components/core/ButtonGroup/ButtonGroup.tsx +71 -0
  437. package/src/components/core/ButtonGroup/index.ts +1 -0
  438. package/src/components/core/Calendar/Calendar.tsx +303 -0
  439. package/src/components/core/Calendar/index.ts +1 -0
  440. package/src/components/core/Checkbox/Checkbox.tsx +107 -0
  441. package/src/components/core/Checkbox/index.ts +1 -0
  442. package/src/components/core/CheckboxField/CheckboxField.tsx +156 -0
  443. package/src/components/core/CheckboxField/CheckboxFieldError.tsx +14 -0
  444. package/src/components/core/CheckboxField/CheckboxFieldLabel.tsx +25 -0
  445. package/src/components/core/CheckboxField/CheckboxFieldNote.tsx +16 -0
  446. package/src/components/core/CheckboxField/index.ts +1 -0
  447. package/src/components/core/Countdown/Countdown.tsx +67 -0
  448. package/src/components/core/Countdown/index.ts +1 -0
  449. package/src/components/core/DataTable/DataTable.tsx +98 -0
  450. package/src/components/core/DataTable/index.ts +1 -0
  451. package/src/components/core/Dialog/Dialog.tsx +443 -0
  452. package/src/components/core/Dialog/index.ts +1 -0
  453. package/src/components/core/Divider/Divider.tsx +37 -0
  454. package/src/components/core/Divider/index.ts +1 -0
  455. package/src/components/core/FavoriteButton/FavoriteButton.tsx +294 -0
  456. package/src/components/core/FavoriteButton/index.ts +1 -0
  457. package/src/components/core/Fieldset/Fieldset.tsx +42 -0
  458. package/src/components/core/Fieldset/index.ts +1 -0
  459. package/src/components/core/FormLabel/FormLabel.tsx +88 -0
  460. package/src/components/core/FormLabel/index.ts +1 -0
  461. package/src/components/core/Icon/Icon.tsx +106 -0
  462. package/src/components/core/Icon/index.ts +1 -0
  463. package/src/components/core/IconButton/IconButton.tsx +169 -0
  464. package/src/components/core/IconButton/index.ts +1 -0
  465. package/src/components/core/InputField/InputField.tsx +128 -0
  466. package/src/components/core/InputField/InputFieldError.tsx +17 -0
  467. package/src/components/core/InputField/InputFieldInput.tsx +67 -0
  468. package/src/components/core/InputField/InputFieldLabel.tsx +29 -0
  469. package/src/components/core/InputField/InputFieldNote.tsx +16 -0
  470. package/src/components/core/InputField/index.ts +1 -0
  471. package/src/components/core/LoadingSpinner/LoadingSpinner.tsx +50 -0
  472. package/src/components/core/LoadingSpinner/index.ts +1 -0
  473. package/src/components/core/Pagination/Pagination.tsx +191 -0
  474. package/src/components/core/Pagination/index.ts +1 -0
  475. package/src/components/core/PasswordField/PasswordField.tsx +187 -0
  476. package/src/components/core/PasswordField/PasswordFieldRequirementsList.tsx +78 -0
  477. package/src/components/core/PasswordField/index.ts +1 -0
  478. package/src/components/core/PhoneNumberInput/PhoneNumberInput.tsx +201 -0
  479. package/src/components/core/PhoneNumberInput/countries.json +242 -0
  480. package/src/components/core/PhoneNumberInput/index.ts +1 -0
  481. package/src/components/core/Pictogram/Pictogram.tsx +67 -0
  482. package/src/components/core/Pictogram/index.ts +1 -0
  483. package/src/components/core/Popover/Popover.tsx +61 -0
  484. package/src/components/core/Popover/index.ts +1 -0
  485. package/src/components/core/Portlist/Portlist.tsx +28 -0
  486. package/src/components/core/Portlist/index.ts +1 -0
  487. package/src/components/core/PriceInput/PriceInput.tsx +100 -0
  488. package/src/components/core/PriceInput/index.ts +1 -0
  489. package/src/components/core/QuantityItem/QuantityItem.tsx +37 -0
  490. package/src/components/core/QuantityItem/index.ts +1 -0
  491. package/src/components/core/Radio/Radio.tsx +64 -0
  492. package/src/components/core/Radio/index.ts +1 -0
  493. package/src/components/core/RadioField/RadioField.tsx +66 -0
  494. package/src/components/core/RadioField/index.ts +1 -0
  495. package/src/components/core/RadixRadio/RadixRadio.tsx +56 -0
  496. package/src/components/core/RadixRadio/index.ts +1 -0
  497. package/src/components/core/RadixSelect/RadixSelect.tsx +172 -0
  498. package/src/components/core/RadixSelect/index.ts +1 -0
  499. package/src/components/core/RangeSlider/RangeSlider.tsx +59 -0
  500. package/src/components/core/RangeSlider/index.ts +1 -0
  501. package/src/components/core/Section/Section.tsx +62 -0
  502. package/src/components/core/Section/index.ts +1 -0
  503. package/src/components/core/SegmentedControl/SegmentedControl.tsx +65 -0
  504. package/src/components/core/SegmentedControl/index.ts +1 -0
  505. package/src/components/core/Select/Select.tsx +171 -0
  506. package/src/components/core/Select/index.ts +1 -0
  507. package/src/components/core/SelectField/SelectField.tsx +67 -0
  508. package/src/components/core/SelectField/index.ts +1 -0
  509. package/src/components/core/Skeleton/Skeleton.tsx +23 -0
  510. package/src/components/core/Skeleton/SkeletonTextLines.tsx +37 -0
  511. package/src/components/core/Skeleton/index.ts +2 -0
  512. package/src/components/core/Stepper/Stepper.tsx +116 -0
  513. package/src/components/core/Stepper/index.ts +1 -0
  514. package/src/components/core/SwitchToggle/SwitchToggle.tsx +46 -0
  515. package/src/components/core/SwitchToggle/index.ts +1 -0
  516. package/src/components/core/Tabs/Tabs.tsx +130 -0
  517. package/src/components/core/Tabs/index.ts +1 -0
  518. package/src/components/core/Tag/Tag.tsx +61 -0
  519. package/src/components/core/Tag/index.ts +1 -0
  520. package/src/components/core/TextButton/TextButton.tsx +108 -0
  521. package/src/components/core/TextButton/index.ts +1 -0
  522. package/src/components/core/Toast/Toast.tsx +65 -0
  523. package/src/components/core/Toast/index.ts +1 -0
  524. package/src/components/core/Tooltip/Tooltip.tsx +110 -0
  525. package/src/components/core/Tooltip/index.ts +1 -0
  526. package/src/components/shared/NextFontMeinSchiffSansPro/NextFontMeinSchiffSansPro.tsx +160 -0
  527. package/src/components/shared/NextFontMeinSchiffSansPro/index.ts +1 -0
  528. package/src/components/shared/UniversalCarousel/CarouselContext.ts +61 -0
  529. package/src/components/shared/UniversalCarousel/CarouselDefaultPagination.tsx +92 -0
  530. package/src/components/shared/UniversalCarousel/CarouselInterface.tsx +152 -0
  531. package/src/components/shared/UniversalCarousel/CarouselStage.tsx +235 -0
  532. package/src/components/shared/UniversalCarousel/UniversalCarousel.tsx +125 -0
  533. package/src/components/shared/UniversalCarousel/helpers.ts +206 -0
  534. package/src/components/shared/UniversalCarousel/index.ts +4 -0
  535. package/src/helpers/children.ts +27 -0
  536. package/src/helpers/cookies.ts +22 -0
  537. package/src/helpers/dateFormat.ts +245 -0
  538. package/src/helpers/dateToYearMonthDay.ts +17 -0
  539. package/src/helpers/elementVisibility.ts +53 -0
  540. package/src/helpers/i18n.ts +197 -0
  541. package/src/helpers/price.ts +26 -0
  542. package/src/helpers/responsive-property.ts +118 -0
  543. package/src/helpers/screen.ts +14 -0
  544. package/src/helpers/sleep.ts +5 -0
  545. package/src/helpers/slot.tsx +68 -0
  546. package/src/helpers/ssr.ts +5 -0
  547. package/src/helpers/store.ts +75 -0
  548. package/src/helpers/types.ts +18 -0
  549. package/src/helpers/utils.ts +3 -0
  550. package/src/hooks/use-active-screen-names.ts +100 -0
  551. package/src/hooks/use-intersection-observer.ts +190 -0
  552. package/src/hooks/use-screen-name-at-least.ts +32 -0
  553. package/src/hooks/use-screen-name.ts +34 -0
  554. package/src/hooks/use-store.ts +45 -0
  555. package/src/hooks/use-toasts.ts +111 -0
  556. package/src/stores/toasts-store.ts +11 -0
@@ -0,0 +1,206 @@
1
+ import {
2
+ Children,
3
+ ComponentPropsWithoutRef,
4
+ createElement,
5
+ MouseEventHandler,
6
+ ReactElement,
7
+ RefObject,
8
+ } from 'react';
9
+ import { isElement, isFragment } from 'react-is';
10
+ import { CarouselStage } from './CarouselStage';
11
+ import { ScrollToIndex } from './CarouselInterface';
12
+ import { logger } from '@tuic/logger';
13
+
14
+ type StageRef = RefObject<HTMLUListElement>;
15
+
16
+ type ItemsChildren = ComponentPropsWithoutRef<typeof CarouselStage>['children'];
17
+
18
+ /**
19
+ * Converts children props of CarouselItems into an array of React elements, filtering out any non-element nodes.
20
+ */
21
+ export const getChildrenAsArrayOfElements = (
22
+ children: ItemsChildren,
23
+ ): ReactElement[] => {
24
+ const asArray = Children.toArray(children).filter(
25
+ (node): node is ReactElement => isElement(node),
26
+ );
27
+
28
+ if (asArray.length !== 1) {
29
+ return asArray;
30
+ }
31
+
32
+ // Check if the only child is a fragment ...
33
+ const maybeFragment = asArray[0];
34
+
35
+ if (!isFragment(maybeFragment)) {
36
+ return asArray;
37
+ }
38
+
39
+ // ... and if so, return its children instead.
40
+ // We could make this recursive, but let's not dive too deep into the rabbit hole.
41
+ return Children.toArray(maybeFragment.props.children).filter(
42
+ (node): node is ReactElement => isElement(node),
43
+ );
44
+ };
45
+
46
+ /**
47
+ * Creates a function to scroll the carousel to a specific index with customizable position and scroll behavior.
48
+ *
49
+ * @param stageRef - Reference to the carousel container element.
50
+ * @param lastIdx - The index of the last item in the carousel.
51
+ * @returns A function that scrolls the carousel to a specified index.
52
+ */
53
+ export const createToIndexScroller = (
54
+ stageRef: StageRef,
55
+ lastIdx: number,
56
+ ): ScrollToIndex => {
57
+ return (
58
+ idx: number,
59
+ position: 'start' | 'center' | 'end',
60
+ scrollBehavior: 'auto' | 'smooth' | 'instant' = 'smooth',
61
+ ) => {
62
+ if (!stageRef.current) {
63
+ logger.error('Stage reference is not available.');
64
+ return;
65
+ }
66
+
67
+ // Verify that the index is within bounds & wrap around if necessary.
68
+ if (idx < 0) {
69
+ idx = lastIdx;
70
+ }
71
+
72
+ if (idx > lastIdx) {
73
+ idx = 0;
74
+ }
75
+
76
+ // Get the target list item
77
+ const target = [
78
+ ...stageRef.current.querySelectorAll<HTMLLIElement>(':scope > li'),
79
+ ][idx];
80
+
81
+ if (!target) {
82
+ logger.error(`Target not found at index ${idx}.`);
83
+ return;
84
+ }
85
+
86
+ const { offsetLeft, offsetWidth } = target;
87
+ const stageWidth = stageRef.current.offsetWidth;
88
+ let left = offsetLeft;
89
+
90
+ // Adjust scroll position based on the `position` argument
91
+ if (position === 'center') {
92
+ left = offsetLeft + offsetWidth / 2 - stageWidth / 2;
93
+ } else if (position === 'end') {
94
+ left = offsetLeft + offsetWidth - stageWidth;
95
+ }
96
+
97
+ /*
98
+ logger.debug(
99
+ `Scrolling to index ${idx} (position: ${position}) with left offset: ${left}`,
100
+ );
101
+ */
102
+
103
+ // Scroll to the calculated position
104
+ stageRef.current.scrollTo({
105
+ left,
106
+ behavior: scrollBehavior,
107
+ });
108
+ };
109
+ };
110
+
111
+ /**
112
+ * Calculate the visible percentage of an item in the carousel based on its current position
113
+ * and the scroll position of the carousel.
114
+ */
115
+ const calculateVisiblePercentage = (
116
+ list: HTMLUListElement,
117
+ item: HTMLLIElement,
118
+ ) => {
119
+ // Calculate the relative position of the left point of the item within the carousel.
120
+ let leftPoint = item.offsetLeft - list.scrollLeft;
121
+
122
+ // Set to zero if the point is beyond the left border of the carousel.
123
+ if (leftPoint < 0) {
124
+ leftPoint = 0;
125
+ }
126
+
127
+ // Calculate the relative position of the right point of the item within the carousel.
128
+ let rightPoint = item.offsetLeft + item.offsetWidth - list.scrollLeft;
129
+
130
+ // Set to the width of the carousel if the point is beyond the right border of the carousel.
131
+ if (rightPoint > list.offsetWidth) {
132
+ rightPoint = list.offsetWidth;
133
+ }
134
+
135
+ // Set to zero if the point is beyond the left border of the carousel.
136
+ if (rightPoint < 0) {
137
+ rightPoint = 0;
138
+ }
139
+
140
+ // As we have the positions calculated and contained within the stage, we can calculate their distance.
141
+ let visiblePx = rightPoint - leftPoint;
142
+
143
+ // It shouldn't be zero, but let's be cautious.
144
+ if (visiblePx < 0) {
145
+ visiblePx = 0;
146
+ }
147
+
148
+ // Calculate the percentage of the item that is visible.
149
+ const visiblePercentage = (visiblePx / item.offsetWidth) * 100;
150
+
151
+ // Cap the percentage at 100% to avoid rounding errors.
152
+ return visiblePercentage > 100 ? 100 : visiblePercentage;
153
+ };
154
+
155
+ /**
156
+ * Retrieve the indexes of items in the carousel that are currently visible.
157
+ */
158
+ export const getVisibleIndexes = (stageRef: StageRef): number[] => {
159
+ // If the stage is not yet rendered, return a visible index of 0.
160
+ if (!stageRef.current) {
161
+ return [0];
162
+ }
163
+
164
+ const stage = stageRef.current;
165
+ const stageWidth = stageRef.current.offsetWidth;
166
+
167
+ // If the stage has no width, return a visible index of 0.
168
+ if (stageWidth === 0) {
169
+ return [0];
170
+ }
171
+
172
+ //TODO: Check if this has enough browser support: https://caniuse.com/?search=queryselector%20scope
173
+ const percentages = [
174
+ ...stage.querySelectorAll<HTMLLIElement>(':scope > li'),
175
+ ].map((item, idx) => {
176
+ return calculateVisiblePercentage(stage, item);
177
+ });
178
+
179
+ // Find the highest percentage and use it as the maximum, but reduce it by 1%, so we add a slight buffer.
180
+ const maxPercentage = Math.max(...percentages) * 0.99;
181
+
182
+ // Find the indexes of items that have a percentage equal to or higher than the maximum.
183
+ const visibleIndexes = percentages
184
+ .map((percentage, idx) => {
185
+ return percentage >= maxPercentage ? idx : -1;
186
+ })
187
+ .filter(idx => idx >= 0);
188
+
189
+ // If no items are visible, return a visible index of 0, otherwise return the indexes of the visible items.
190
+ return visibleIndexes.length === 0 ? [0] : visibleIndexes;
191
+ };
192
+
193
+ /**
194
+ * Combines multiple event handlers into a single event handler.
195
+ */
196
+ export const combineEventHandlers = (
197
+ events: (MouseEventHandler<HTMLUListElement> | undefined)[],
198
+ ): MouseEventHandler<HTMLUListElement> => {
199
+ const filtered = events.filter(
200
+ (event): event is MouseEventHandler => typeof event === 'function',
201
+ );
202
+
203
+ return ev => {
204
+ filtered.forEach(handler => handler(ev));
205
+ };
206
+ };
@@ -0,0 +1,4 @@
1
+ export * from './CarouselDefaultPagination';
2
+ export * from './CarouselInterface';
3
+ export * from './CarouselStage';
4
+ export * from './UniversalCarousel';
@@ -0,0 +1,27 @@
1
+ import { Children, PropsWithChildren, ReactElement } from 'react';
2
+ import { isElement, isFragment } from 'react-is';
3
+
4
+ export const getChildrenAsArrayOfElements = (
5
+ children: PropsWithChildren['children'],
6
+ ): ReactElement[] => {
7
+ const asArray = Children.toArray(children).filter(
8
+ (node): node is ReactElement => isElement(node),
9
+ );
10
+
11
+ if (asArray.length !== 1) {
12
+ return asArray;
13
+ }
14
+
15
+ // Check if the only child is a fragment ...
16
+ const maybeFragment = asArray[0];
17
+
18
+ if (!isFragment(maybeFragment)) {
19
+ return asArray;
20
+ }
21
+
22
+ // ... and if so, return its children instead.
23
+ // We could make this recursive, but let's not dive too deep into the rabbit hole.
24
+ return Children.toArray(maybeFragment.props.children).filter(
25
+ (node): node is ReactElement => isElement(node),
26
+ );
27
+ };
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+
3
+ export function setCookie(name: string, value: string | number, days: number) {
4
+ const date = new Date();
5
+ date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
6
+ const expires = 'expires=' + date.toUTCString();
7
+ document.cookie = name + '=' + value + ';' + expires + ';path=/';
8
+ }
9
+
10
+ export function getCookie(name: string): string | null {
11
+ const cookieName = `${encodeURIComponent(name)}=`;
12
+ const cookies = document.cookie.split(';');
13
+
14
+ for (let cookie of cookies) {
15
+ cookie = cookie.trim();
16
+ if (cookie.startsWith(cookieName)) {
17
+ return decodeURIComponent(cookie.substring(cookieName.length));
18
+ }
19
+ }
20
+
21
+ return null;
22
+ }
@@ -0,0 +1,245 @@
1
+ import { DateTime, Settings } from 'luxon';
2
+
3
+ /*
4
+ * Central collection of commonly used date formats in accordance to the TUIC guidelines and NOT to ISO-8601.
5
+ * Resources on the ISO-8601 as reference for comparison:
6
+ * - https://en.wikipedia.org/wiki/List_of_date_formats_by_country
7
+ * - https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_United_Kingdom
8
+ * - https://moment.github.io/luxon/#/formatting
9
+ */
10
+
11
+ const getValidLocale = (locale: undefined | string) => {
12
+ if (locale === 'en') {
13
+ return 'en-GB';
14
+ }
15
+ return 'de';
16
+ };
17
+
18
+ const getValidDate = (
19
+ date: undefined | Date | DateTime,
20
+ locale: undefined | string = 'de',
21
+ ): undefined | DateTime => {
22
+ if (!date) {
23
+ return undefined;
24
+ }
25
+ const newDate = date instanceof DateTime ? date : DateTime.fromJSDate(date);
26
+ if (!newDate || !newDate.isValid) {
27
+ return undefined;
28
+ }
29
+ return newDate.setLocale(getValidLocale(locale));
30
+ };
31
+
32
+ /**
33
+ * Returns a rezoned datetime instance.
34
+ */
35
+ export const getRezonedDateTime = (dateTime: DateTime | string) => {
36
+ const datetime =
37
+ typeof dateTime !== 'string'
38
+ ? dateTime
39
+ : DateTime.fromISO(dateTime, {
40
+ setZone: true,
41
+ });
42
+
43
+ return datetime.setZone(Settings.defaultZone, {
44
+ keepLocalTime: true,
45
+ });
46
+ };
47
+
48
+ const monthNamesShort_enGB: { [key: number]: string } = {
49
+ 1: 'Jan',
50
+ 2: 'Feb',
51
+ 3: 'Mar',
52
+ 4: 'Apr',
53
+ 5: 'May',
54
+ 6: 'Jun',
55
+ 7: 'Jul',
56
+ 8: 'Aug',
57
+ 9: 'Sep',
58
+ 10: 'Oct',
59
+ 11: 'Nov',
60
+ 12: 'Dec',
61
+ };
62
+
63
+ /**
64
+ * European Standard format: 09.09.2024 or shortened as 09.09.
65
+ */
66
+ export const formatDateEuropeanStandard = (
67
+ date: undefined | Date | DateTime,
68
+ locale: undefined | string = 'de',
69
+ short: boolean = false,
70
+ ): string => {
71
+ const validDate = getValidDate(date, locale);
72
+ return (
73
+ (short
74
+ ? validDate?.toFormat('dd.MM.')
75
+ : validDate?.toFormat('dd.MM.yyyy')) ?? ''
76
+ );
77
+ };
78
+
79
+ /**
80
+ * Date with written month, shortened:
81
+ * i.e. for 'de': 27. Sept. 2024
82
+ * i.e. for 'en-GB': 27 Sep 2024
83
+ */
84
+ export const formatDateWithWrittenMonthShortened = (
85
+ date: undefined | Date | DateTime,
86
+ locale: undefined | string = 'de',
87
+ ): string => {
88
+ // English date
89
+ const validDate = getValidDate(date, locale);
90
+ const day = validDate?.day;
91
+ const month = validDate?.month;
92
+ const year = validDate?.year;
93
+ if (locale === 'en' && !!day && !!month && !!year) {
94
+ return `${day} ${monthNamesShort_enGB[month]} ${year}`;
95
+ }
96
+
97
+ return (
98
+ getValidDate(date, locale)?.toLocaleString({
99
+ day: '2-digit',
100
+ month: 'short',
101
+ year: 'numeric',
102
+ }) ?? ''
103
+ );
104
+ };
105
+
106
+ /**
107
+ * Date with weekday, shortened:
108
+ * i.e. for 'de': Fr., 30. Sep.
109
+ * i.e. for 'en-GB': Fr, 30 Sep
110
+ */
111
+ export const formatDateWithWeekdayShortened = (
112
+ date: undefined | Date | DateTime,
113
+ locale: undefined | string = 'de',
114
+ ): string => {
115
+ // English date
116
+ const validDate = getValidDate(date, locale);
117
+ const day = validDate?.day;
118
+ const weekday: undefined | string = validDate?.toLocaleString({
119
+ weekday: 'short',
120
+ });
121
+ const month = validDate?.month;
122
+ if (locale === 'en' && !!weekday && !!day && !!month) {
123
+ return `${weekday}, ${day} ${monthNamesShort_enGB[month]}`;
124
+ }
125
+
126
+ return (
127
+ getValidDate(date, locale)?.toLocaleString({
128
+ weekday: 'short',
129
+ day: '2-digit',
130
+ month: 'short',
131
+ }) ?? ''
132
+ );
133
+ };
134
+
135
+ /**
136
+ * Date with weekday and year, shortened:
137
+ * i.e. for 'de': Fr., 30. Aug. 2024
138
+ * i.e. for 'en-GB': Fr, 30 Aug 2024
139
+ */
140
+ export const formatDateWithWeekdayAndYearShortened = (
141
+ date: undefined | Date | DateTime,
142
+ locale: undefined | string = 'de',
143
+ ): string => {
144
+ // English date
145
+ const validDate = getValidDate(date, locale);
146
+ const day = validDate?.day;
147
+ const weekday: undefined | string = validDate?.toLocaleString({
148
+ weekday: 'short',
149
+ });
150
+ const month = validDate?.month;
151
+ const year = validDate?.year;
152
+ if (locale === 'en' && !!weekday && !!day && !!month && !!year) {
153
+ return `${weekday}, ${day} ${monthNamesShort_enGB[month]} ${year}`;
154
+ }
155
+
156
+ return (
157
+ getValidDate(date, locale)?.toLocaleString({
158
+ weekday: 'short',
159
+ day: '2-digit',
160
+ month: 'short',
161
+ year: 'numeric',
162
+ }) ?? ''
163
+ );
164
+ };
165
+
166
+ /*
167
+ * ISO stabdard dates
168
+ */
169
+ /**
170
+ * European Standard format:
171
+ * i.e. for 'de': 09.09.2024 or shortened as 09.09.
172
+ * i.e. for 'en-GB': 09/09/2024 or shortened as 09/09
173
+ */
174
+ export const formatDateEuropeanStandardISO8601 = (
175
+ date: undefined | Date | DateTime,
176
+ locale: undefined | string = 'de',
177
+ short: boolean = false,
178
+ ): string => {
179
+ return (
180
+ getValidDate(date, locale)?.toLocaleString({
181
+ day: '2-digit',
182
+ month: '2-digit',
183
+ year: short ? undefined : 'numeric',
184
+ }) ?? ''
185
+ );
186
+ };
187
+
188
+ /**
189
+ * Date with weekday, shortened:
190
+ * i.e. for 'de': Fr., 30. Aug.
191
+ * i.e. for 'en-GB': Fr, 30 Aug
192
+ */
193
+ export const formatDateWithWeekdayShortenedISO8601 = (
194
+ date: undefined | Date | DateTime,
195
+ locale: undefined | string = 'de',
196
+ ): string => {
197
+ return (
198
+ getValidDate(date, locale)?.toLocaleString({
199
+ weekday: 'short',
200
+ day: '2-digit',
201
+ month: 'short',
202
+ }) ?? ''
203
+ );
204
+ };
205
+
206
+ /**
207
+ * Date with weekday and year, shortened:
208
+ * i.e. for 'de': Fr., 30. Aug. 2024
209
+ * i.e. for 'en-GB': Fr, 30 Aug 2024
210
+ */
211
+ export const formatDateWithWeekdayAndYearShortenedISO8601 = (
212
+ date: undefined | Date | DateTime,
213
+ locale: undefined | string = 'de',
214
+ ): string => {
215
+ return (
216
+ getValidDate(date, locale)?.toLocaleString({
217
+ weekday: 'short',
218
+ day: '2-digit',
219
+ month: 'short',
220
+ year: 'numeric',
221
+ }) ?? ''
222
+ );
223
+ };
224
+
225
+ export type DateSegment = 'day' | 'hour' | 'minute' | 'second';
226
+ export function getDateSegmentDifference(
227
+ date: Date,
228
+ diffType: DateSegment,
229
+ ): number {
230
+ const now = new Date();
231
+ const diffInMs = date.getTime() - now.getTime();
232
+
233
+ switch (diffType) {
234
+ case 'day':
235
+ return Math.floor(diffInMs / (1000 * 60 * 60 * 24));
236
+ case 'hour':
237
+ return Math.floor((diffInMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
238
+ case 'minute':
239
+ return Math.floor((diffInMs % (1000 * 60 * 60)) / (1000 * 60));
240
+ case 'second':
241
+ return Math.floor((diffInMs % (1000 * 60)) / 1000);
242
+ default:
243
+ return 0;
244
+ }
245
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Simple helper to convert a date into the 'YYYY-MM-DD' string format.
3
+ * @param date
4
+ * @param locale
5
+ */
6
+ export function dateToYearMonthDay(date: Date, locale: string = 'de'): string {
7
+ const fromYear = new Intl.DateTimeFormat(locale, { year: 'numeric' }).format(
8
+ date,
9
+ );
10
+ const fromMonth = new Intl.DateTimeFormat(locale, {
11
+ month: '2-digit',
12
+ }).format(date);
13
+ const fromDay = new Intl.DateTimeFormat(locale, { day: '2-digit' }).format(
14
+ date,
15
+ );
16
+ return `${fromYear}-${fromMonth}-${fromDay}`;
17
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * getMostVisibleElement
3
+ * Method to determine a single element from a list of elements that is most visible on the current screen.
4
+ *
5
+ * @param elements
6
+ */
7
+ export const getMostVisibleElement = (
8
+ elements: HTMLDivElement[] | HTMLCollectionOf<HTMLDivElement>,
9
+ ): undefined | HTMLDivElement => {
10
+ let currentElement = undefined;
11
+ const viewportHeight: number = window.innerHeight;
12
+ let highestVisibleHeightOnScreen: number = 0;
13
+
14
+ for (let i = 0; i < elements.length; i++) {
15
+ const visiblePixel = getVisibleHeightInPixel(elements[i], viewportHeight);
16
+ if (visiblePixel > highestVisibleHeightOnScreen) {
17
+ highestVisibleHeightOnScreen = visiblePixel;
18
+ currentElement = elements[i];
19
+ }
20
+ }
21
+
22
+ return currentElement;
23
+ };
24
+
25
+ const getVisibleHeightInPixel = (
26
+ element: HTMLDivElement,
27
+ viewportHeight: number,
28
+ ): number => {
29
+ const rect = element.getBoundingClientRect();
30
+ const height = rect.bottom - rect.top;
31
+ const visible = {
32
+ top: rect.top >= 0 && rect.top < viewportHeight,
33
+ bottom: rect.bottom > 0 && rect.bottom < viewportHeight,
34
+ };
35
+ let visiblePixel: number = 0;
36
+
37
+ if (visible.top && visible.bottom) {
38
+ // Whole element is visible
39
+ visiblePixel = height;
40
+ } else if (visible.top) {
41
+ visiblePixel = viewportHeight - rect.top;
42
+ } else if (visible.bottom) {
43
+ visiblePixel = rect.bottom;
44
+ } else if (height > viewportHeight && rect.top < 0) {
45
+ const absTop = Math.abs(rect.top);
46
+ if (absTop < height) {
47
+ // Part of the element is visible
48
+ visiblePixel = height - absTop;
49
+ }
50
+ }
51
+
52
+ return visiblePixel;
53
+ };