@evolve.ui/core-components 1.0.1 → 1.1.0

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 (509) hide show
  1. package/evolve-ui.entries.json +556 -0
  2. package/fileUpload/testUtils/mockFilesAndImages.d.cts +3 -3
  3. package/fileUpload/testUtils/mockFilesAndImages.d.cts.map +1 -1
  4. package/fileUpload/testUtils/mockFilesAndImages.d.mts +3 -3
  5. package/fileUpload/testUtils/mockFilesAndImages.d.mts.map +1 -1
  6. package/fileUpload/testUtils/testUtils.d.cts +1 -1
  7. package/fileUpload/testUtils/testUtils.d.cts.map +1 -1
  8. package/fileUpload/testUtils/testUtils.d.mts +1 -1
  9. package/fileUpload/testUtils/testUtils.d.mts.map +1 -1
  10. package/package.json +2 -2
  11. package/src/Accordion/Accordion.tsx +233 -0
  12. package/src/AddressDisplay/AddressDisplay.tsx +43 -0
  13. package/src/AddressDisplay/components/addressComponents.tsx +111 -0
  14. package/src/AddressDisplay/components/addressField.tsx +25 -0
  15. package/src/AddressDisplay/components/addressSection.tsx +8 -0
  16. package/src/AddressDisplay/components/getCountryValue.tsx +31 -0
  17. package/src/AddressDisplay/types.ts +26 -0
  18. package/src/AutomatedCarousel/AutomatedCarousel.tsx +163 -0
  19. package/src/AutomatedCarousel/automatedCarousel.types.ts +7 -0
  20. package/src/AutomatedCarousel/components/CarouselProgressBar/CarouselProgressBar.tsx +139 -0
  21. package/src/AutomatedCarousel/components/CarouselProgressBar/components/CarouselProgressBarUnit/CarouselProgressBarUnit.tsx +165 -0
  22. package/src/Badge/Badge.tsx +104 -0
  23. package/src/Badge/Badge.types.ts +58 -0
  24. package/src/Badge/ItemBadge.tsx +97 -0
  25. package/src/Badge/LiveStatusBadge.tsx +93 -0
  26. package/src/BannerNotification/BannerNotification.tsx +157 -0
  27. package/src/BannerNotification/components/BannerNotificationSkeleton.tsx +39 -0
  28. package/src/BannerNotification/components/CalloutIcon/BannerIcon.tsx +48 -0
  29. package/src/BannerNotification/utils/getRandomTooltipId.ts +3 -0
  30. package/src/BottomSheet/BottomSheet.tsx +476 -0
  31. package/src/BottomSheet/components/BottomSheetBackdrop/BottomSheetBackdrop.tsx +47 -0
  32. package/src/BottomSheet/components/BottomSheetContentArea/BottomSheetContentArea.tsx +92 -0
  33. package/src/BottomSheet/components/BottomSheetOverlay/BottomSheetOverlayTranslate3d.tsx +196 -0
  34. package/src/BottomSheet/components/SheetDescription/SheetDescription.tsx +22 -0
  35. package/src/BottomSheet/components/SheetTitle/SheetTitle.tsx +21 -0
  36. package/src/BottomSheet/components/index.tsx +5 -0
  37. package/src/BottomSheet/hooks/index.tsx +13 -0
  38. package/src/BottomSheet/hooks/useAriaHider.tsx +91 -0
  39. package/src/BottomSheet/hooks/useBottomSheetServices.tsx +224 -0
  40. package/src/BottomSheet/hooks/useDragHandler.tsx +282 -0
  41. package/src/BottomSheet/hooks/useFocusTrap.tsx +113 -0
  42. package/src/BottomSheet/hooks/useLayoutEffect.tsx +4 -0
  43. package/src/BottomSheet/hooks/useOptimizedResizeObserver.tsx +94 -0
  44. package/src/BottomSheet/hooks/useOptimizedScrollState.tsx +87 -0
  45. package/src/BottomSheet/hooks/useReady.tsx +34 -0
  46. package/src/BottomSheet/hooks/useReducedMotion.tsx +22 -0
  47. package/src/BottomSheet/hooks/useScrollLock.tsx +143 -0
  48. package/src/BottomSheet/hooks/useSnapPoints.tsx +355 -0
  49. package/src/BottomSheet/hooks/useSpring.tsx +47 -0
  50. package/src/BottomSheet/hooks/useSpringInterpolationsTranslate3d.tsx +101 -0
  51. package/src/BottomSheet/index.tsx +237 -0
  52. package/src/BottomSheet/state/atoms.ts +147 -0
  53. package/src/BottomSheet/state/useBottomSheetStateMachine.ts +246 -0
  54. package/src/BottomSheet/types.ts +172 -0
  55. package/src/BottomSheet/utils.ts +65 -0
  56. package/src/Breadcrumbs/Breadcrumbs.tsx +126 -0
  57. package/src/Button/Button.tsx +164 -0
  58. package/src/Button/Button.types.ts +80 -0
  59. package/src/Button/buttonColorClasses.ts +53 -0
  60. package/src/Callout/Callout.tsx +136 -0
  61. package/src/Callout/Callout.types.ts +29 -0
  62. package/src/Callout/components/CalloutIcon/CalloutIcon.tsx +56 -0
  63. package/src/Card/CardGrid.tsx +263 -0
  64. package/src/Card/SingleCard.tsx +22 -0
  65. package/src/Card/cardFactory.tsx +176 -0
  66. package/src/Card/components/createBadge.tsx +34 -0
  67. package/src/Card/components/createFavoriteButton.tsx +40 -0
  68. package/src/Card/components/createImage.tsx +64 -0
  69. package/src/Card/components/createInfo.tsx +84 -0
  70. package/src/Card/components/createName.tsx +63 -0
  71. package/src/Card/components/createPriceStatus.tsx +100 -0
  72. package/src/Card/components/types.ts +4 -0
  73. package/src/Card/hooks/useCardVisibilityTracking.ts +82 -0
  74. package/src/Card/sharedProps.ts +12 -0
  75. package/src/Card/types.ts +62 -0
  76. package/src/Carousel/Carousel.tsx +513 -0
  77. package/src/Carousel/Carousel.types.ts +43 -0
  78. package/src/Carousel/Carousel.utils.ts +63 -0
  79. package/src/Carousel/components/DotButton/DotButton.tsx +42 -0
  80. package/src/Carousel/components/NavigationButtons/NavigationButtons.tsx +77 -0
  81. package/src/Carousel/components/TitleSection/TitleSection.tsx +61 -0
  82. package/src/Carousel/components/TitleSection/components/SubHeaderLeft/SubHeaderLeft.tsx +53 -0
  83. package/src/Carousel/components/TitleSection/components/Title/Title.tsx +46 -0
  84. package/src/Carousel/index.ts +2 -0
  85. package/src/Carousel/testUtils.ts +10 -0
  86. package/src/Chips/Chip.tsx +153 -0
  87. package/src/Chips/ChipGroup.tsx +173 -0
  88. package/src/Chips/SuggestionChip.tsx +15 -0
  89. package/src/Chips/chipTypes.ts +113 -0
  90. package/src/Chips/index.ts +4 -0
  91. package/src/ChoiceListItem/Checkbox.tsx +69 -0
  92. package/src/ChoiceListItem/Radio.tsx +61 -0
  93. package/src/ChoiceListItem/choiceListItem.tsx +99 -0
  94. package/src/ChoiceListItem/common.tsx +148 -0
  95. package/src/ChoiceListItem/index.ts +3 -0
  96. package/src/Collapsible/Collapsible.tsx +58 -0
  97. package/src/Confetti/Confetti.tsx +270 -0
  98. package/src/Confetti/index.ts +2 -0
  99. package/src/ContentPager/ContentPager.tsx +189 -0
  100. package/src/ContentPager/components/Page.tsx +24 -0
  101. package/src/CookieConsent/components/CookieCategoryRow/CookieCategoryRow.tsx +30 -0
  102. package/src/CookieConsent/components/CookieConsent/CookieConsent.tsx +74 -0
  103. package/src/CookieConsent/components/CookieConsentBanner/CookieConsentBanner.tsx +51 -0
  104. package/src/CookieConsent/components/CookieConsentModal/CookieConsentModal.tsx +64 -0
  105. package/src/CookieConsent/hooks/useCookieConsent.ts +170 -0
  106. package/src/CookieConsent/hooks/useCookieConsentState.ts +142 -0
  107. package/src/CookieConsent/index.ts +16 -0
  108. package/src/CookieConsent/types/cookieConsent.types.ts +79 -0
  109. package/src/CookieConsent/types/index.ts +7 -0
  110. package/src/Countdown/Countdown.tsx +161 -0
  111. package/src/Countdown/Countdown.types.ts +4 -0
  112. package/src/Countdown/hooks/useGetCountdown.ts +103 -0
  113. package/src/DateTimeInput/dateInput/DateInput.tsx +199 -0
  114. package/src/DateTimeInput/datePicker/DatePicker.tsx +138 -0
  115. package/src/DateTimeInput/datePicker/components/calendar/Calendar.tsx +72 -0
  116. package/src/DateTimeInput/datePicker/index.ts +2 -0
  117. package/src/DateTimeInput/timeInput/TimeInput.tsx +128 -0
  118. package/src/DateTimeInput/timePicker/TimePicker.tsx +118 -0
  119. package/src/DateTimeInput/timePicker/components/TimePopover/AmPmSwitch.tsx +103 -0
  120. package/src/DateTimeInput/timePicker/components/TimePopover/TimeFieldInput.tsx +26 -0
  121. package/src/DateTimeInput/timePicker/components/TimePopover/TimePopover.tsx +84 -0
  122. package/src/DateTimeInput/timePicker/components/TimePopover/TimePopover.utils.ts +67 -0
  123. package/src/DateTimeInput/timePicker/components/TimePopover/TimePopoverActions.tsx +26 -0
  124. package/src/DateTimeInput/timePicker/index.ts +2 -0
  125. package/src/DateTimeInput/utils/getDisplayDate.ts +15 -0
  126. package/src/DateTimeInput/utils/getDisplayTime.ts +15 -0
  127. package/src/DateTimeInput/utils/index.ts +2 -0
  128. package/src/DateTimeInput/utils/parseTimeValue.ts +54 -0
  129. package/src/Drawer/Drawer.tsx +446 -0
  130. package/src/Drawer/atoms.ts +4 -0
  131. package/src/Drawer/components/DialogActions/DialogActions.tsx +33 -0
  132. package/src/Drawer/components/DialogContent/DialogContent.tsx +80 -0
  133. package/src/Drawer/components/DialogHeader/DialogHeader.tsx +68 -0
  134. package/src/EducationalPopover/EducationalPopover.tsx +174 -0
  135. package/src/FavoriteButton/FavoriteButton.tsx +64 -0
  136. package/src/FavoriteButton/components/IconOnlyFavoriteButton/IconOnlyFavoriteButton.tsx +80 -0
  137. package/src/FavoriteButton/components/LabeledAnimatedFavoriteButton/LabeledAnimatedFavoriteButton.tsx +179 -0
  138. package/src/FavoriteButton/components/LabeledFavoriteButton/LabeledFavoriteButton.tsx +71 -0
  139. package/src/FavoriteButton/components/SmallHeartStraightIcon/SmallHeartStraightIcon.tsx +14 -0
  140. package/src/FavoriteButton/hooks/useFavoriteButtonState.ts +30 -0
  141. package/src/FavoriteButton/index.ts +2 -0
  142. package/src/FavoriteButton/types/favoriteButton.ts +87 -0
  143. package/src/FeatureFlags/devTools/FeatureFlagDevToolsUI.tsx +226 -0
  144. package/src/FeatureFlags/devTools/getFeatureFlagCookieOverrides.ts +30 -0
  145. package/src/FeatureFlags/devTools/utils/cookies.ts +169 -0
  146. package/src/FeatureFlags/hooks/index.ts +2 -0
  147. package/src/FeatureFlags/hooks/useFeatureFlag.tsx +19 -0
  148. package/src/FeatureFlags/hooks/useFeatureFlags.tsx +15 -0
  149. package/src/FileUpload/components/FileCard/FileCard.tsx +50 -0
  150. package/src/FileUpload/components/FileDropzone/FileDropzone.tsx +221 -0
  151. package/src/FileUpload/components/FileDropzone/components/DropzoneContent/DropzoneContent.tsx +28 -0
  152. package/src/FileUpload/components/FileDropzone/components/DropzoneContent/DropzoneText.tsx +81 -0
  153. package/src/FileUpload/components/FileDropzone/components/FileDropzoneDebugger/FileDropzoneDebugger.tsx +40 -0
  154. package/src/FileUpload/components/FileDropzone/components/FileDropzoneDebugger/FileRejectionsDisplay.tsx +110 -0
  155. package/src/FileUpload/components/FileDropzoneOverlay/FileDropzoneOverlay.tsx +183 -0
  156. package/src/FileUpload/components/FileDropzoneOverlay/components/OverlayDropzoneContent.tsx +146 -0
  157. package/src/FileUpload/components/FileDropzoneOverlay/components/OverlayDropzoneDragText.tsx +42 -0
  158. package/src/FileUpload/components/FileDropzoneOverlay/styles.ts +79 -0
  159. package/src/FileUpload/components/FilePreviewList/FilePreviewList.tsx +251 -0
  160. package/src/FileUpload/components/FilePreviewList/virtualizerComponents/FilePreviewVirtualizedList/FilePreviewVirtualizedList.tsx +88 -0
  161. package/src/FileUpload/components/FileUpload/FileUpload.tsx +63 -0
  162. package/src/FileUpload/components/FileUploadCanvas/FileUploadCanvas.tsx +125 -0
  163. package/src/FileUpload/components/GridFileCard/GridFileCard.tsx +364 -0
  164. package/src/FileUpload/components/GridFileCard/utils/sortable.ts +48 -0
  165. package/src/FileUpload/components/ListFileCard/ListFileCard.tsx +259 -0
  166. package/src/FileUpload/components/types.ts +78 -0
  167. package/src/FileUpload/hooks/filePreview/useImageFilePreviewUrl.ts +62 -0
  168. package/src/FileUpload/hooks/index.ts +11 -0
  169. package/src/FileUpload/hooks/upload/useHandleDragEnter/useHandleDragEnter.ts +154 -0
  170. package/src/FileUpload/hooks/upload/useHandleDrop/createFileRejectionHelpers.ts +273 -0
  171. package/src/FileUpload/hooks/upload/useHandleDrop/useHandleDrop.ts +153 -0
  172. package/src/FileUpload/hooks/upload/useUploadAvailability/useUploadAvailability.ts +44 -0
  173. package/src/FileUpload/hooks/validation/createDropzoneValidator.ts +41 -0
  174. package/src/FileUpload/hooks/validation/useFileValidation.ts +25 -0
  175. package/src/FileUpload/hooks/validation/useFileValidationLogic.ts +107 -0
  176. package/src/FileUpload/hooks/validation/useValidationMessages.ts +92 -0
  177. package/src/FileUpload/hooks/validation/useValidationState.ts +171 -0
  178. package/src/FileUpload/index.ts +57 -0
  179. package/src/FileUpload/providers/FileUploadProvider.tsx +219 -0
  180. package/src/FileUpload/providers/UploadValidationProvider.tsx +159 -0
  181. package/src/FileUpload/testUtils/mockFilesAndImages.ts +64 -0
  182. package/src/FileUpload/testUtils/testUtils.ts +111 -0
  183. package/src/FileUpload/types/commonTypes.ts +267 -0
  184. package/src/FileUpload/types/index.ts +31 -0
  185. package/src/FileUpload/types/sharedTypes.ts +159 -0
  186. package/src/FileUpload/utils/constants.ts +79 -0
  187. package/src/FileUpload/utils/createMessageContext.ts +180 -0
  188. package/src/FileUpload/utils/getFileExtensionsFromAcceptedTypes.ts +73 -0
  189. package/src/FileUpload/utils/getFilePluralizationText.ts +68 -0
  190. package/src/FileUpload/utils/getMimeTypes.ts +26 -0
  191. package/src/FileUpload/utils/messageUtils.ts +41 -0
  192. package/src/FileUpload/utils/styles.ts +68 -0
  193. package/src/FormLabel/FormLabel.tsx +212 -0
  194. package/src/IconButton/IconButton.tsx +154 -0
  195. package/src/Icons/CreditCardIcon/CreditCardIcon.tsx +73 -0
  196. package/src/Icons/CreditCardIcon/cardIcons.tsx +270 -0
  197. package/src/Icons/IconBase.tsx +133 -0
  198. package/src/Icons/anyIcon.ts +3 -0
  199. package/src/Icons/generatedIcons/Archive.tsx +48 -0
  200. package/src/Icons/generatedIcons/ArrowClockwise.tsx +48 -0
  201. package/src/Icons/generatedIcons/ArrowDown.tsx +48 -0
  202. package/src/Icons/generatedIcons/ArrowLeft.tsx +48 -0
  203. package/src/Icons/generatedIcons/ArrowRight.tsx +48 -0
  204. package/src/Icons/generatedIcons/ArrowSquareOut.tsx +51 -0
  205. package/src/Icons/generatedIcons/ArrowSquareRight.tsx +51 -0
  206. package/src/Icons/generatedIcons/ArrowUp.tsx +48 -0
  207. package/src/Icons/generatedIcons/ArrowsCounterClockwise.tsx +48 -0
  208. package/src/Icons/generatedIcons/ArrowsLeftRight.tsx +48 -0
  209. package/src/Icons/generatedIcons/ArrowsOutCardinal.tsx +48 -0
  210. package/src/Icons/generatedIcons/Bank.tsx +48 -0
  211. package/src/Icons/generatedIcons/Bell.tsx +51 -0
  212. package/src/Icons/generatedIcons/BookBookmark.tsx +51 -0
  213. package/src/Icons/generatedIcons/BookmarksSimple.tsx +51 -0
  214. package/src/Icons/generatedIcons/Broadcast.tsx +48 -0
  215. package/src/Icons/generatedIcons/CalendarBlank.tsx +48 -0
  216. package/src/Icons/generatedIcons/CalendarStar.tsx +51 -0
  217. package/src/Icons/generatedIcons/Camera.tsx +51 -0
  218. package/src/Icons/generatedIcons/CaretDown.tsx +48 -0
  219. package/src/Icons/generatedIcons/CaretLeft.tsx +48 -0
  220. package/src/Icons/generatedIcons/CaretRight.tsx +48 -0
  221. package/src/Icons/generatedIcons/CaretUp.tsx +48 -0
  222. package/src/Icons/generatedIcons/Certificate.tsx +51 -0
  223. package/src/Icons/generatedIcons/ChartBar.tsx +48 -0
  224. package/src/Icons/generatedIcons/Check.tsx +51 -0
  225. package/src/Icons/generatedIcons/CheckCircle.tsx +48 -0
  226. package/src/Icons/generatedIcons/CirclesFour.tsx +51 -0
  227. package/src/Icons/generatedIcons/Clock.tsx +48 -0
  228. package/src/Icons/generatedIcons/ClockCountdown.tsx +48 -0
  229. package/src/Icons/generatedIcons/Close.tsx +51 -0
  230. package/src/Icons/generatedIcons/CloudArrowUp.tsx +51 -0
  231. package/src/Icons/generatedIcons/CloudWarning.tsx +51 -0
  232. package/src/Icons/generatedIcons/Code.tsx +48 -0
  233. package/src/Icons/generatedIcons/Compass.tsx +51 -0
  234. package/src/Icons/generatedIcons/Confetti.tsx +51 -0
  235. package/src/Icons/generatedIcons/Copy.tsx +48 -0
  236. package/src/Icons/generatedIcons/CornersOut.tsx +48 -0
  237. package/src/Icons/generatedIcons/CreditCard.tsx +48 -0
  238. package/src/Icons/generatedIcons/Crown.tsx +51 -0
  239. package/src/Icons/generatedIcons/CrownSimple.tsx +51 -0
  240. package/src/Icons/generatedIcons/CurrencyCircleDollar.tsx +48 -0
  241. package/src/Icons/generatedIcons/CurrencyDollarSimple.tsx +51 -0
  242. package/src/Icons/generatedIcons/Desktop.tsx +51 -0
  243. package/src/Icons/generatedIcons/Detective.tsx +51 -0
  244. package/src/Icons/generatedIcons/DotOutline.tsx +46 -0
  245. package/src/Icons/generatedIcons/DotsSixVertical.tsx +51 -0
  246. package/src/Icons/generatedIcons/DotsThreeOutline.tsx +51 -0
  247. package/src/Icons/generatedIcons/DotsThreeOutlineVertical.tsx +51 -0
  248. package/src/Icons/generatedIcons/DownloadSimple.tsx +51 -0
  249. package/src/Icons/generatedIcons/EnvelopeSimple.tsx +48 -0
  250. package/src/Icons/generatedIcons/Eraser.tsx +51 -0
  251. package/src/Icons/generatedIcons/Eye.tsx +51 -0
  252. package/src/Icons/generatedIcons/EyeSlash.tsx +51 -0
  253. package/src/Icons/generatedIcons/FacebookLogo.tsx +48 -0
  254. package/src/Icons/generatedIcons/FileArchive.tsx +48 -0
  255. package/src/Icons/generatedIcons/FileArrowDown.tsx +48 -0
  256. package/src/Icons/generatedIcons/FileCsv.tsx +48 -0
  257. package/src/Icons/generatedIcons/FilePdf.tsx +48 -0
  258. package/src/Icons/generatedIcons/FileText.tsx +48 -0
  259. package/src/Icons/generatedIcons/Files.tsx +51 -0
  260. package/src/Icons/generatedIcons/Fire.tsx +51 -0
  261. package/src/Icons/generatedIcons/Flag.tsx +51 -0
  262. package/src/Icons/generatedIcons/FlagBannerFold.tsx +48 -0
  263. package/src/Icons/generatedIcons/FloppyDisk.tsx +51 -0
  264. package/src/Icons/generatedIcons/Gauge.tsx +51 -0
  265. package/src/Icons/generatedIcons/Gavel.tsx +51 -0
  266. package/src/Icons/generatedIcons/Gear.tsx +51 -0
  267. package/src/Icons/generatedIcons/GlobeHemisphereWest.tsx +51 -0
  268. package/src/Icons/generatedIcons/GoogleLogo.tsx +48 -0
  269. package/src/Icons/generatedIcons/GridNine.tsx +51 -0
  270. package/src/Icons/generatedIcons/HandCoins.tsx +51 -0
  271. package/src/Icons/generatedIcons/HandbagSimple.tsx +51 -0
  272. package/src/Icons/generatedIcons/Headset.tsx +51 -0
  273. package/src/Icons/generatedIcons/HeartStraight.tsx +51 -0
  274. package/src/Icons/generatedIcons/HourglassLow.tsx +48 -0
  275. package/src/Icons/generatedIcons/House.tsx +51 -0
  276. package/src/Icons/generatedIcons/Image.tsx +51 -0
  277. package/src/Icons/generatedIcons/ImageSquare.tsx +51 -0
  278. package/src/Icons/generatedIcons/ImagesSquare.tsx +51 -0
  279. package/src/Icons/generatedIcons/Info.tsx +48 -0
  280. package/src/Icons/generatedIcons/InstagramLogo.tsx +51 -0
  281. package/src/Icons/generatedIcons/Lightning.tsx +48 -0
  282. package/src/Icons/generatedIcons/Link.tsx +51 -0
  283. package/src/Icons/generatedIcons/LinkedinLogo.tsx +51 -0
  284. package/src/Icons/generatedIcons/List.tsx +48 -0
  285. package/src/Icons/generatedIcons/Lock.tsx +51 -0
  286. package/src/Icons/generatedIcons/LockOpen.tsx +51 -0
  287. package/src/Icons/generatedIcons/MagnifyingGlass.tsx +48 -0
  288. package/src/Icons/generatedIcons/MapPin.tsx +51 -0
  289. package/src/Icons/generatedIcons/MapPinSimpleArea.tsx +48 -0
  290. package/src/Icons/generatedIcons/Medal.tsx +48 -0
  291. package/src/Icons/generatedIcons/Megaphone.tsx +48 -0
  292. package/src/Icons/generatedIcons/Minus.tsx +45 -0
  293. package/src/Icons/generatedIcons/Money.tsx +51 -0
  294. package/src/Icons/generatedIcons/Notches.tsx +48 -0
  295. package/src/Icons/generatedIcons/NotePencil.tsx +48 -0
  296. package/src/Icons/generatedIcons/Package.tsx +51 -0
  297. package/src/Icons/generatedIcons/PaintBrush.tsx +51 -0
  298. package/src/Icons/generatedIcons/PaperPlaneTilt.tsx +51 -0
  299. package/src/Icons/generatedIcons/Paperclip.tsx +51 -0
  300. package/src/Icons/generatedIcons/Pause.tsx +51 -0
  301. package/src/Icons/generatedIcons/PencilLine.tsx +51 -0
  302. package/src/Icons/generatedIcons/PencilRuler.tsx +51 -0
  303. package/src/Icons/generatedIcons/PencilSimple.tsx +51 -0
  304. package/src/Icons/generatedIcons/Phone.tsx +51 -0
  305. package/src/Icons/generatedIcons/PinterestLogo.tsx +51 -0
  306. package/src/Icons/generatedIcons/Play.tsx +51 -0
  307. package/src/Icons/generatedIcons/Plus.tsx +51 -0
  308. package/src/Icons/generatedIcons/PlusCircle.tsx +48 -0
  309. package/src/Icons/generatedIcons/Printer.tsx +51 -0
  310. package/src/Icons/generatedIcons/Question.tsx +48 -0
  311. package/src/Icons/generatedIcons/Receipt.tsx +51 -0
  312. package/src/Icons/generatedIcons/Rows.tsx +51 -0
  313. package/src/Icons/generatedIcons/SealCheck.tsx +51 -0
  314. package/src/Icons/generatedIcons/SelectionSlash.tsx +48 -0
  315. package/src/Icons/generatedIcons/ShareNetwork.tsx +51 -0
  316. package/src/Icons/generatedIcons/ShieldCheck.tsx +51 -0
  317. package/src/Icons/generatedIcons/ShieldStar.tsx +51 -0
  318. package/src/Icons/generatedIcons/ShoppingCart.tsx +48 -0
  319. package/src/Icons/generatedIcons/ShuffleAngular.tsx +48 -0
  320. package/src/Icons/generatedIcons/SidebarSimple.tsx +48 -0
  321. package/src/Icons/generatedIcons/SlidersHorizontal.tsx +51 -0
  322. package/src/Icons/generatedIcons/Smiley.tsx +48 -0
  323. package/src/Icons/generatedIcons/Sparkle.tsx +51 -0
  324. package/src/Icons/generatedIcons/SpinnerGap.tsx +48 -0
  325. package/src/Icons/generatedIcons/StackPlus.tsx +48 -0
  326. package/src/Icons/generatedIcons/Star.tsx +51 -0
  327. package/src/Icons/generatedIcons/Storefront.tsx +51 -0
  328. package/src/Icons/generatedIcons/Swap.tsx +51 -0
  329. package/src/Icons/generatedIcons/Tag.tsx +51 -0
  330. package/src/Icons/generatedIcons/ThumbsDown.tsx +48 -0
  331. package/src/Icons/generatedIcons/ThumbsUp.tsx +48 -0
  332. package/src/Icons/generatedIcons/Toolbox.tsx +48 -0
  333. package/src/Icons/generatedIcons/Trash.tsx +48 -0
  334. package/src/Icons/generatedIcons/TrendUp.tsx +48 -0
  335. package/src/Icons/generatedIcons/Trophy.tsx +51 -0
  336. package/src/Icons/generatedIcons/Truck.tsx +51 -0
  337. package/src/Icons/generatedIcons/UploadSimple.tsx +51 -0
  338. package/src/Icons/generatedIcons/User.tsx +48 -0
  339. package/src/Icons/generatedIcons/Users.tsx +48 -0
  340. package/src/Icons/generatedIcons/UsersThree.tsx +51 -0
  341. package/src/Icons/generatedIcons/VideoCamera.tsx +51 -0
  342. package/src/Icons/generatedIcons/Warning.tsx +51 -0
  343. package/src/Icons/generatedIcons/WarningCircle.tsx +48 -0
  344. package/src/Icons/generatedIcons/WifiHigh.tsx +51 -0
  345. package/src/Icons/generatedIcons/XCircle.tsx +48 -0
  346. package/src/Icons/generatedIcons/XLogo.tsx +48 -0
  347. package/src/Icons/generatedIcons/YoutubeLogo.tsx +51 -0
  348. package/src/Icons/importedIcons.ts +152 -0
  349. package/src/Icons/index.ts +149 -0
  350. package/src/Icons/socialIcons/appleSocialIcon.tsx +50 -0
  351. package/src/Icons/socialIcons/facebookSocialIcon.tsx +41 -0
  352. package/src/Icons/socialIcons/googleSocialIcon.tsx +134 -0
  353. package/src/ImageCluster/ImageCluster.tsx +125 -0
  354. package/src/ImageSlider/ImageSlider.tsx +582 -0
  355. package/src/ImageSlider/ImageSlider.types.ts +90 -0
  356. package/src/ImageSlider/components/IndexIndicator/IndexIndicator.tsx +21 -0
  357. package/src/ImageSlider/components/NavigationButtons/NavigationButtons.tsx +113 -0
  358. package/src/ImageSlider/components/ResponsiveImage/ResponsiveImage.tsx +114 -0
  359. package/src/ImageSlider/components/ResponsiveImage/index.ts +1 -0
  360. package/src/ImageSlider/components/Thumbnails/Thumbnails.tsx +184 -0
  361. package/src/ImageSlider/constants.ts +59 -0
  362. package/src/ImageSlider/hooks/index.ts +3 -0
  363. package/src/ImageSlider/hooks/useImageSlider.ts +57 -0
  364. package/src/ImageSlider/hooks/useImageSliderNavigation.ts +133 -0
  365. package/src/ImageSlider/hooks/useImageSliderScrollHandler.ts +171 -0
  366. package/src/ImageSlider/index.ts +3 -0
  367. package/src/ImageSlider/utils/imageOptimization.ts +97 -0
  368. package/src/ImageSlider/utils/index.ts +1 -0
  369. package/src/InlineNotification/InlineNotification.tsx +95 -0
  370. package/src/JumpMenu/JumpMenu.tsx +395 -0
  371. package/src/JumpMenu/components/JumpMenuItem/JumpMenuItem.tsx +62 -0
  372. package/src/JumpMenu/hooks/useContainerTracking.ts +171 -0
  373. package/src/JumpMenu/hooks/useIntersectionObserver.ts +77 -0
  374. package/src/JumpMenu/hooks/useKeyboardNavigation.ts +102 -0
  375. package/src/JumpMenu/hooks/useResizeObserver.ts +53 -0
  376. package/src/JumpMenu/hooks/useSectionObserver.ts +102 -0
  377. package/src/JumpMenu/index.ts +2 -0
  378. package/src/JumpMenu/types/index.ts +19 -0
  379. package/src/Loading/Loading.tsx +39 -0
  380. package/src/Loading/components/LoadingDot/LoadingDot.tsx +16 -0
  381. package/src/LoadingSpinner/LoadingSpinner.tsx +20 -0
  382. package/src/Menu/Menu.tsx +372 -0
  383. package/src/Menu/components/MenuDivider/MenuDivider.tsx +5 -0
  384. package/src/Menu/components/MenuItem/MenuItem.tsx +298 -0
  385. package/src/Menu/context/menuContext.tsx +20 -0
  386. package/src/Menu/hooks/useMenu.tsx +18 -0
  387. package/src/Menu/index.ts +3 -0
  388. package/src/Modal/ComposableModal.tsx +313 -0
  389. package/src/Modal/Modal.tsx +231 -0
  390. package/src/Modal/components/BackButton/BackButton.tsx +43 -0
  391. package/src/Modal/components/Backdrop/Backdrop.tsx +62 -0
  392. package/src/Modal/components/CloseButton/CloseButton.tsx +55 -0
  393. package/src/Modal/components/ModalActions/ModalActions.tsx +135 -0
  394. package/src/Modal/components/ModalContent/ModalContent.tsx +163 -0
  395. package/src/Modal/components/ModalHeader/ModalHeader.tsx +84 -0
  396. package/src/Modal/components/ModalHeader/hooks/useHeaderAnimation.tsx +49 -0
  397. package/src/Modal/components/ModalProgressSteps/ModalProgressSteps.tsx +26 -0
  398. package/src/Modal/components/ModalSubTitle/ModalSubTitle.tsx +29 -0
  399. package/src/Modal/components/ModalTitle/ModalTitle.tsx +22 -0
  400. package/src/Modal/components/PreventModalScroll/PreventModalScroll.tsx +106 -0
  401. package/src/Modal/components/index.ts +12 -0
  402. package/src/Modal/context.ts +33 -0
  403. package/src/Modal/hooks/useCloseModal.ts +133 -0
  404. package/src/NotificationBadge/NotificationBadge.tsx +34 -0
  405. package/src/Pagination/AdvancedPagination.tsx +48 -0
  406. package/src/Pagination/Pagination.tsx +216 -0
  407. package/src/Pagination/components/AdvancedPaginator/AdvancedPaginator.tsx +52 -0
  408. package/src/Pagination/components/AdvancedPaginator/components/PageSelect/PageSelect.tsx +43 -0
  409. package/src/Pagination/components/ItemCountDisplay/ItemCountDisplay.tsx +32 -0
  410. package/src/Pagination/components/ItemCountSelect/ItemCountSelect.tsx +33 -0
  411. package/src/Pagination/index.tsx +3 -0
  412. package/src/Pagination/paginationProvider.tsx +234 -0
  413. package/src/Pagination/utils.tsx +36 -0
  414. package/src/PhoneInput/PhoneInput.tsx +509 -0
  415. package/src/PhoneInput/useDropdownLogic.tsx +163 -0
  416. package/src/ProgressCircle/ProgressCircle.tsx +246 -0
  417. package/src/ProgressCircle/hooks/useProgressStatusTransitions.ts +49 -0
  418. package/src/ProgressCircle/utils/progressCircle.constants.ts +27 -0
  419. package/src/ProgressSteps/ProgressSteps.tsx +160 -0
  420. package/src/SaveConfetti/SaveConfetti.tsx +277 -0
  421. package/src/SaveConfetti/index.ts +2 -0
  422. package/src/SearchInput/SearchInput.tsx +236 -0
  423. package/src/SegmentedControl/SegmentedControl.tsx +111 -0
  424. package/src/SegmentedControl/SegmentedControlGroup.tsx +94 -0
  425. package/src/SegmentedControl/index.ts +4 -0
  426. package/src/Select/Select.tsx +154 -0
  427. package/src/Select/SelectAsync.tsx +13 -0
  428. package/src/Select/SelectAsyncCreatable.tsx +14 -0
  429. package/src/Select/SelectCreatable.tsx +12 -0
  430. package/src/Select/reexportedComponents.tsx +5 -0
  431. package/src/Select/selectComponents.tsx +306 -0
  432. package/src/Skeleton/Skeleton.tsx +13 -0
  433. package/src/SplitButton/SplitButton.tsx +298 -0
  434. package/src/SplitButton/SplitButtonTrigger.tsx +55 -0
  435. package/src/StarRating/StarRating.tsx +165 -0
  436. package/src/StarRating/components/StarComponent/StarComponent.tsx +44 -0
  437. package/src/Table/Table.tsx +474 -0
  438. package/src/Table/components/TableHeader/TableHeader.tsx +166 -0
  439. package/src/Table/components/TablePagination/TablePagination.tsx +18 -0
  440. package/src/Table/components/TablePagination/components/ItemCountDisplay/ItemCountDisplay.tsx +17 -0
  441. package/src/Table/components/TablePagination/components/ItemCountSelect/ItemCountSelect.tsx +31 -0
  442. package/src/Table/components/TablePagination/components/TablePaginator/TablePaginator.tsx +37 -0
  443. package/src/Table/components/TablePagination/components/TablePaginator/components/PageSelect/PageSelect.tsx +32 -0
  444. package/src/Table/components/TableRow/TableRows.tsx +147 -0
  445. package/src/Table/components/TableRow/components/TableRowCell/TableRowCell.tsx +49 -0
  446. package/src/Table/components/TableShadow/TableShadow.tsx +46 -0
  447. package/src/Table/index.ts +2 -0
  448. package/src/Table/sharedState.ts +30 -0
  449. package/src/Table/sharedStyles.ts +1 -0
  450. package/src/Table/types.ts +55 -0
  451. package/src/Tabs/Tabs.tsx +358 -0
  452. package/src/TextArea/TextArea.tsx +157 -0
  453. package/src/TextInput/TextInput.tsx +173 -0
  454. package/src/Toast/Toast.tsx +64 -0
  455. package/src/Toast/components/ToastContainer/ToastContainer.tsx +48 -0
  456. package/src/Toast/index.ts +2 -0
  457. package/src/Toast/types/role.ts +1 -0
  458. package/src/Toast/utils/getIcon.tsx +41 -0
  459. package/src/ToggleSwitch/ToggleSwitch.tsx +188 -0
  460. package/src/Tooltip/InfoIconTooltip.tsx +47 -0
  461. package/src/Tooltip/Tooltip.tsx +41 -0
  462. package/src/Typography/InlineButton/InlineButton.tsx +166 -0
  463. package/src/Typography/Links/Links.tsx +113 -0
  464. package/src/Typography/Text/Text.tsx +239 -0
  465. package/src/ViewMore/ViewMore.tsx +226 -0
  466. package/src/WebRTCPlayer/WebRTCPlayer.tsx +325 -0
  467. package/src/WebRTCPlayer/adaptor/NativeWebRTCAdaptor.ts +588 -0
  468. package/src/WebRTCPlayer/hooks/useWebRTCStream.ts +571 -0
  469. package/src/WebRTCPlayer/index.ts +22 -0
  470. package/src/WebRTCPlayer/types.ts +95 -0
  471. package/src/breakpoints/index.tsx +1 -0
  472. package/src/breakpoints/utils.tsx +50 -0
  473. package/src/declarations.d.ts +7 -0
  474. package/src/grid/gridHighlighter.tsx +83 -0
  475. package/src/grid/index.ts +3 -0
  476. package/src/grid/pageGrid.tsx +37 -0
  477. package/src/grid/useSubGridCSS.tsx +214 -0
  478. package/src/hooks/useHorizontalScrollFade.ts +44 -0
  479. package/src/hooks/usePrevious.ts +14 -0
  480. package/src/index.ts +351 -0
  481. package/src/intl/index.ts +4 -0
  482. package/src/intl/utils.ts +67 -0
  483. package/src/mixins/horizontalScrollFadeMixin.ts +56 -0
  484. package/src/mixins/index.ts +18 -0
  485. package/src/mixins/propMixins.ts +389 -0
  486. package/src/providers/createContextProvider.ts +22 -0
  487. package/src/providers/designSystemProvider.tsx +218 -0
  488. package/src/providers/errorBoundaryProvider.tsx +179 -0
  489. package/src/providers/featureFlagProvider.tsx +18 -0
  490. package/src/providers/gridSizeProvider.tsx +23 -0
  491. package/src/providers/index.ts +12 -0
  492. package/src/providers/linkProvider.tsx +32 -0
  493. package/src/providers/normalize.tsx +93 -0
  494. package/src/providers/targets/DatePickerTarget.tsx +10 -0
  495. package/src/providers/targets/ModalTarget.tsx +14 -0
  496. package/src/providers/targets/TimePickerTarget.tsx +10 -0
  497. package/src/providers/themeContext.tsx +24 -0
  498. package/src/providers/windowSizeProvider.tsx +125 -0
  499. package/src/spacing/index.ts +1 -0
  500. package/src/spacing/spacing.ts +11 -0
  501. package/src/utils/countriesWithISOCodes.ts +1419 -0
  502. package/src/utils/dateTimeFormat.ts +257 -0
  503. package/src/utils/effectEventListener.ts +11 -0
  504. package/src/utils/formatFileSize.ts +18 -0
  505. package/src/utils/isClientSide.ts +1 -0
  506. package/src/utils/keepTransition.ts +15 -0
  507. package/src/utils/nodeEnv.ts +9 -0
  508. package/src/utils/smoothScrollTo.ts +47 -0
  509. package/src/utils/utilityTypes.ts +13 -0
@@ -0,0 +1,257 @@
1
+ import { formatDistance, fromUnixTime, isToday as isTodayDateFns, isYesterday as isYesterdayDateFns } from 'date-fns';
2
+ import { format } from 'date-fns-tz';
3
+
4
+ export type TimeUnit = number | Date;
5
+
6
+ export const safeFromUnixTime = (time?: TimeUnit): Date => {
7
+ let date = new Date();
8
+ try {
9
+ // return a valid date if the value is falsey
10
+ if (!time) {
11
+ return date;
12
+ }
13
+
14
+ // Check to see if time is a Date;
15
+ // @ts-expect-error - since time can be either a number or a date we will have a ts error checking this
16
+ if (typeof time.getMonth === 'function') {
17
+ return time as Date;
18
+ } else if (typeof time === 'number') {
19
+ date = fromUnixTime(time);
20
+
21
+ // in the case that the number is a JS style timestamp the date will be way in the future and so we should use new Date instead
22
+ if (date.getFullYear() > 10000) {
23
+ return new Date(time);
24
+ }
25
+ }
26
+
27
+ return date;
28
+ } catch (error) {
29
+ // eslint-disable-next-line no-console
30
+ console.log(error);
31
+ }
32
+ return date;
33
+ };
34
+
35
+ /**
36
+ * Formats the given timestamp into a string representation of month, day, year, and time.
37
+ *
38
+ * @param {number | Date} timestamp The timestamp to format, as a number or Date object.
39
+ * @param {boolean} [short=false] - Optional. If true, the date format will be abbreviated (e.g., "MMM d").
40
+ * @param {boolean} [timeZone="America/Denver"] - Optional. The time zone to use for the formatted date string.
41
+ * Otherwise, it will be in the long format (e.g., "MMMM d, yyyy, h:mm a zz").
42
+ * @returns {string} The formatted date string, e.g., "July 24, 2024, 3:38 PM MDT" for long format or "Jul 24" for short format.
43
+ *
44
+ * @example
45
+ * // Returns "July 24, 2024, 3:38 PM MDT"
46
+ * formatTimestamp(new Date(), { short: false, timeZone: 'America/Denver' });
47
+ */
48
+ export const getMonthDayYearTime = (
49
+ timestamp: TimeUnit,
50
+ options: { short?: boolean; timeZone?: string } = {}
51
+ ): string => {
52
+ return format(safeFromUnixTime(timestamp), `${options.short ? 'MMM' : 'MMMM'} d, yyyy, h:mm a zz`, {
53
+ timeZone: options.timeZone,
54
+ });
55
+ };
56
+
57
+ /**
58
+ * Formats the given timestamp into a string representation of month, day, and year.
59
+ *
60
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
61
+ * @param {boolean} [options.short=false] - If true, the month format will be abbreviated (e.g., "MMM"). Otherwise, it will be in the long format (e.g., "MMMM").
62
+ * @returns {string} The formatted string representation of the timestamp in the format "MMM d, yyyy" or "MMMM d, yyyy".
63
+ *
64
+ * @example
65
+ * // Returns "July 24, 2024"
66
+ * getMonthDayYear(new Date(2024, 6, 24));
67
+ */
68
+
69
+ export const getMonthDayYear = (timestamp: TimeUnit, options: { short?: boolean } = {}): string =>
70
+ format(safeFromUnixTime(timestamp), `${options.short ? 'MMM' : 'MMMM'} d, yyyy`);
71
+
72
+ /**
73
+ * Formats the given timestamp into a string representation of day, month, and year.
74
+ *
75
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
76
+ * @param {boolean} [options.short=false] - If true, the month format will be abbreviated (e.g., "MMM"). Otherwise, it will be in the long format (e.g., "MMMM").
77
+ * @returns {string} The formatted string representation of the timestamp in the format "d MMM yyyy" or "d MMMM yyyy".
78
+ *
79
+ * @example
80
+ * // Returns "24 July 2024"
81
+ * getDayMonthYear(new Date(2024, 6, 24));
82
+ */
83
+
84
+ export const getDayMonthYear = (timestamp: TimeUnit, options: { short?: boolean } = {}): string =>
85
+ format(safeFromUnixTime(timestamp), `d ${options.short ? 'MMM' : 'MMMM'} yyyy`);
86
+
87
+ /**
88
+ * Formats the given timestamp into a string representation of day, month, year, and time.
89
+ *
90
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
91
+ * @param {boolean} [short=false] - Optional. If true, the date format will be abbreviated (e.g., "d MMM").
92
+ * @param {boolean} [timeZone="America/Denver"] - Optional. The time zone to use for the formatted date string.
93
+ * Otherwise, it will be in the long format (e.g., "dd MMMM, yyyy, h:mm a").
94
+ * @returns {string} The formatted string representation of the timestamp.
95
+ *
96
+ * @example
97
+ * // Returns "24 July, 2024, 3:38 PM"
98
+ * formatDateTime(new Date(), {short: false, timeZone: 'America/Denver'});
99
+ */
100
+ export const getDayMonthYearTime = (
101
+ timestamp: TimeUnit,
102
+ options: { short?: boolean; timeZone?: string } = {}
103
+ ): string =>
104
+ format(safeFromUnixTime(timestamp), `${options.short ? 'd MMM' : 'dd MMMM'} yyyy, h:mm a zz`, {
105
+ timeZone: options.timeZone,
106
+ });
107
+
108
+ /**
109
+ * Formats the given timestamp into a string representation of month and day.
110
+ *
111
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
112
+ * @returns {string} The formatted string representation of the timestamp in the format "MMMM d".
113
+ *
114
+ * @example
115
+ * // Returns "July 24"
116
+ * formatMonthDay(new Date());
117
+ */
118
+ export const getMonthDay = (timestamp: TimeUnit): string => format(safeFromUnixTime(timestamp), 'MMMM dd');
119
+
120
+ /**
121
+ * Formats the given timestamp into a string representation of month and day (abbreviated).
122
+ *
123
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
124
+ * @returns {string} The formatted string representation of the timestamp in the format "MMM d".
125
+ *
126
+ * @example
127
+ * // Returns "Jul 24"
128
+ * formatMonthDayAbbreviated(new Date());
129
+ *
130
+ */
131
+ export const getMonthDayShort = (timestamp: TimeUnit): string => format(safeFromUnixTime(timestamp), 'MMM dd');
132
+
133
+ /**
134
+ * Formats the given timestamp into a string representation of day and month (abbreviated).
135
+ *
136
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
137
+ * @returns {string} The formatted string representation of the timestamp in the format "dd MMM".
138
+ *
139
+ * @example
140
+ * // Returns "24 Jul"
141
+ * getDayMonthShort(new Date());
142
+ */
143
+ export const getDayMonthShort = (timestamp: TimeUnit): string => format(safeFromUnixTime(timestamp), 'dd MMM');
144
+
145
+ /**
146
+ * Formats the given timestamp into a string representation of day and month (abbreviated).
147
+ *
148
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
149
+ * @returns {string} The formatted string representation of the timestamp in the format "dd MMMM".
150
+ *
151
+ * @example
152
+ * // Returns "24 July"
153
+ * getDayMonthShort(new Date());
154
+ */
155
+ export const getDayMonth = (timestamp: TimeUnit): string => format(safeFromUnixTime(timestamp), 'dd MMMM');
156
+
157
+ /**
158
+ * Formats the given timestamp into a string representation of ISO date and time.
159
+ *
160
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
161
+ * @param {Object} [options={}] - Optional settings.
162
+ * @param {string} [options.timeZone] - The time zone to use for formatting. Defaults to the local time zone if not specified.
163
+ * @returns {string} The formatted string representation of the timestamp in the format "yyyy-MM-dd h:mm a zz".
164
+ *
165
+ * @example
166
+ * // Returns "2024-07-24 3:38 PM UTC" with specified time zone
167
+ * getISODateTime(new Date(), { timeZone: 'UTC' });
168
+ */
169
+ export const getISODateTime = (timestamp: TimeUnit, options: { short?: boolean; timeZone?: string } = {}): string =>
170
+ options.short
171
+ ? format(safeFromUnixTime(timestamp), 'yyyy-MM-dd', { timeZone: options.timeZone })
172
+ : format(safeFromUnixTime(timestamp), 'yyyy-MM-dd h:mm a zz', { timeZone: options.timeZone });
173
+
174
+ /**
175
+ * Formats the given timestamp into a string representation of time.
176
+ *
177
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
178
+ * @param {string} [options.timeZone] - The time zone to use for formatting. Defaults to the local time zone if not specified.
179
+ * @returns {string} The formatted string representation of the timestamp in the format "h:mm a zz".
180
+ *
181
+ * @example
182
+ * // Returns "3:38 PM UTC" with specified time zone
183
+ * getTime(new Date(), { timeZone: 'UTC' });
184
+ */
185
+ export const getTime = (timestamp: TimeUnit, options: { timeZone?: string } = {}): string =>
186
+ format(safeFromUnixTime(timestamp), 'h:mm a zz', { timeZone: options.timeZone });
187
+
188
+ /**
189
+ * Formats the given timestamp into a string representation of the date in 'MM/dd/yyyy' format.
190
+ *
191
+ * @param {number | Date} timestamp - The timestamp to format, as a number or Date object.
192
+ * @returns {string} The formatted string representation of the timestamp in 'MM/dd/yyyy' format.
193
+ *
194
+ * @example
195
+ * // Returns "07/24/2024"
196
+ * getSimpleDate(new Date(2024, 6, 24));
197
+ */
198
+
199
+ export const getSimpleDate = (timestamp: TimeUnit): string => format(safeFromUnixTime(timestamp), 'MM/dd/yyyy');
200
+
201
+ /**
202
+ * Calculates the time distance between a given timestamp and the current time.
203
+ * @param timestamp - The timestamp to calculate the distance from.
204
+ * @param short - Optional. If true, returns the short version of the time distance.
205
+ * @returns The time distance between the timestamp and the current time.
206
+ */
207
+ export const formatTimeDistance = (timestamp: TimeUnit, options: { short?: boolean } = { short: false }) => {
208
+ const { short } = options;
209
+ const safeDate = safeFromUnixTime(timestamp);
210
+
211
+ const diff = new Date().getTime() - safeDate.getTime();
212
+
213
+ return formatDistance(safeFromUnixTime(timestamp), new Date(), {
214
+ addSuffix: Boolean(options.short),
215
+ locale: {
216
+ formatDistance: (token, count, options) => {
217
+ const isInTheFutureText = options?.comparison === 1 && !short ? 'In ' : '';
218
+ const inThePastText = options?.comparison === -1 && !short ? ' ago' : '';
219
+ let timeText = '';
220
+
221
+ if (token === 'lessThanXMinutes') {
222
+ const seconds = Math.round(Math.abs(diff / 1000));
223
+ timeText = short ? `${seconds}s` : seconds === 1 ? '1 second' : `${seconds} seconds`;
224
+ } else if (token === 'xMinutes') {
225
+ timeText = short ? `${count}m` : count === 1 ? '1 minute' : `${count} minutes`;
226
+ } else if (token === 'aboutXHours') {
227
+ timeText = short ? `${count}h` : count === 1 ? '1 hour' : `${count} hours`;
228
+ } else if (token === 'xDays' && count <= 7) {
229
+ if (count === 7) {
230
+ timeText = '1 week';
231
+ } else {
232
+ timeText = short ? `${count}d` : count === 1 ? '1 day' : `${count} days`;
233
+ }
234
+ } else {
235
+ return short ? getMonthDayShort(safeDate) : getMonthDayYear(safeDate);
236
+ }
237
+
238
+ return `${isInTheFutureText}${timeText}${inThePastText}`;
239
+ },
240
+ },
241
+ });
242
+ };
243
+
244
+ /**
245
+ * Determines whether the given timestamp represents a date that is today.
246
+ * @param timestamp - The timestamp to check.
247
+ * @returns A boolean indicating whether the timestamp represents a date that is today.
248
+ */
249
+
250
+ export const isToday = (timestamp: TimeUnit): boolean => isTodayDateFns(safeFromUnixTime(timestamp));
251
+ /**
252
+ * Determines whether the given timestamp represents a date that is yesterday.
253
+ *
254
+ * @param timestamp - The timestamp to check.
255
+ * @returns A boolean indicating whether the timestamp represents a date that is yesterday.
256
+ */
257
+ export const isYesterday = (timestamp: TimeUnit): boolean => isYesterdayDateFns(safeFromUnixTime(timestamp));
@@ -0,0 +1,11 @@
1
+ export const effectEventListener = <T extends Window | Document, P extends Parameters<T['addEventListener']>>(
2
+ target: T,
3
+ event: P[0],
4
+ callback: P[1]
5
+ ) => {
6
+ target.addEventListener(event, callback);
7
+
8
+ return () => {
9
+ target.removeEventListener(event, callback);
10
+ };
11
+ };
@@ -0,0 +1,18 @@
1
+ const FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const;
2
+
3
+ export const formatFileSize = (bytes: number): string => {
4
+ if (bytes === 0) {
5
+ return '0 B';
6
+ }
7
+
8
+ const exp = Math.floor(Math.log(bytes) / Math.log(1024));
9
+ const clampedExp = Math.min(exp, FILE_SIZE_UNITS.length - 1);
10
+ const size = bytes / Math.pow(1024, clampedExp);
11
+ const unit = FILE_SIZE_UNITS[clampedExp];
12
+
13
+ // For numbers less than 10, show one decimal place
14
+ // For larger numbers, round to whole number
15
+ const formatted = size < 10 ? size.toFixed(1) : Math.round(size);
16
+
17
+ return `${formatted} ${unit}`;
18
+ };
@@ -0,0 +1 @@
1
+ export const isClientSide = typeof window !== 'undefined';
@@ -0,0 +1,15 @@
1
+ declare const process:
2
+ | {
3
+ env?: {
4
+ KEEP_TRANSITION?: string;
5
+ };
6
+ }
7
+ | undefined;
8
+
9
+ /**
10
+ * Test-only escape hatch, read at call time: Drawer specs set
11
+ * `process.env.KEEP_TRANSITION = 'true'` at runtime to opt back into CSS
12
+ * transitions. Unlike `nodeEnv` (a module-load-time read), a call-time read
13
+ * sees that mutation.
14
+ */
15
+ export const keepTransition = () => (typeof process === 'undefined' ? undefined : process.env?.KEEP_TRANSITION);
@@ -0,0 +1,9 @@
1
+ declare const process:
2
+ | {
3
+ env?: {
4
+ NODE_ENV?: string;
5
+ };
6
+ }
7
+ | undefined;
8
+
9
+ export const nodeEnv = typeof process === 'undefined' ? undefined : process.env?.NODE_ENV;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Easing function for smooth scroll animation
3
+ * Uses cubic easing in-out curve
4
+ * @param t - Progress value between 0 and 1
5
+ * @returns Eased progress value
6
+ */
7
+ const easeInOutCubic = (t: number): number => {
8
+ return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
9
+ };
10
+
11
+ /**
12
+ * Smoothly scrolls the window to a specific vertical position using requestAnimationFrame
13
+ * @param targetY - The target vertical scroll position in pixels
14
+ * @param duration - The duration of the scroll animation in milliseconds (defaults to 300ms)
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * // Scroll to 500px from the top over 300ms
19
+ * smoothScrollTo(500);
20
+ *
21
+ * // Scroll to top of an element with custom duration
22
+ * const element = document.getElementById('my-element');
23
+ * if (element) {
24
+ * const targetY = element.getBoundingClientRect().top + window.scrollY;
25
+ * smoothScrollTo(targetY, 500);
26
+ * }
27
+ * ```
28
+ */
29
+ export const smoothScrollTo = (targetY: number, duration: number = 300): void => {
30
+ const startY = window.scrollY;
31
+ const distance = targetY - startY;
32
+ const startTime = performance.now();
33
+
34
+ const scroll = (currentTime: number) => {
35
+ const elapsed = currentTime - startTime;
36
+ const progress = Math.min(elapsed / duration, 1);
37
+ const easeProgress = easeInOutCubic(progress);
38
+
39
+ window.scrollTo(0, startY + distance * easeProgress);
40
+
41
+ if (progress < 1) {
42
+ requestAnimationFrame(scroll);
43
+ }
44
+ };
45
+
46
+ requestAnimationFrame(scroll);
47
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Allows for string replacement for typed string literals!
3
+ *
4
+ * Example: `Replace<'text' | 'toxt', 'xt', 'm'> -> 'tem' | 'tom'`
5
+ *
6
+ * @see https://stackoverflow.com/questions/71352751/string-replace-when-creating-string-literal-union-type-in-typescript
7
+ */
8
+ export type Replace<
9
+ T extends string,
10
+ S extends string,
11
+ D extends string,
12
+ A extends string = '',
13
+ > = T extends `${infer L}${S}${infer R}` ? Replace<R, S, D, `${A}${L}${D}`> : `${A}${T}`;