@onepercentio/one-ui 0.29.4 → 0.29.6

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 (294) hide show
  1. package/dist/components/Portal/Portal.d.ts +5 -0
  2. package/dist/components/Portal/Portal.js +6 -1
  3. package/dist/components/Switch/Switch.d.ts +1 -1
  4. package/dist/components/Switch/Switch.js +1 -1
  5. package/dist/utils/e2e.d.ts +1 -1
  6. package/dist/utils/e2e.js +1 -1
  7. package/dist-ts/components/Portal/Portal.d.ts +5 -0
  8. package/dist-ts/components/Portal/Portal.js +5 -0
  9. package/dist-ts/components/Portal/Portal.js.map +1 -1
  10. package/dist-ts/components/Switch/Switch.d.ts +1 -1
  11. package/dist-ts/utils/e2e.d.ts +1 -1
  12. package/package.json +1 -1
  13. package/src/assets/img/svg/checkbox.svg +0 -3
  14. package/src/assets/styles/index.scss +0 -2
  15. package/src/assets/styles/mixins.scss +0 -12
  16. package/src/assets/styles/variables.scss +0 -49
  17. package/src/components/AdaptiveButton/AdaptiveButton.module.scss +0 -7
  18. package/src/components/AdaptiveButton/AdaptiveButton.tsx +0 -26
  19. package/src/components/AdaptiveButton/index.tsx +0 -2
  20. package/src/components/AdaptiveContainer/AdaptiveContainer.module.scss +0 -53
  21. package/src/components/AdaptiveContainer/AdaptiveContainer.tsx +0 -200
  22. package/src/components/AdaptiveContainer/index.tsx +0 -2
  23. package/src/components/AdaptiveDialog/AdaptiveDialog.module.scss +0 -147
  24. package/src/components/AdaptiveDialog/AdaptiveDialog.tsx +0 -97
  25. package/src/components/AdaptiveDialog/index.tsx +0 -2
  26. package/src/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +0 -49
  27. package/src/components/AdaptiveSidebar/AdaptiveSidebar.sample.tsx +0 -10
  28. package/src/components/AdaptiveSidebar/AdaptiveSidebar.tsx +0 -123
  29. package/src/components/AdaptiveSidebar/index.tsx +0 -2
  30. package/src/components/AnchoredTooltip/AnchoredTooltip.module.scss +0 -64
  31. package/src/components/AnchoredTooltip/AnchoredTooltip.tsx +0 -250
  32. package/src/components/AnchoredTooltip/index.tsx +0 -2
  33. package/src/components/AnimatedEntrance/AnimatedEntrance.module.scss +0 -108
  34. package/src/components/AnimatedEntrance/AnimatedEntrance.tsx +0 -227
  35. package/src/components/AnimatedEntrance/index.tsx +0 -2
  36. package/src/components/AsyncWrapper/AsyncWrapper.tsx +0 -38
  37. package/src/components/AsyncWrapper/index.tsx +0 -2
  38. package/src/components/Avatar/Avatar.module.scss +0 -22
  39. package/src/components/Avatar/Avatar.tsx +0 -31
  40. package/src/components/Avatar/index.tsx +0 -2
  41. package/src/components/BucketFill/BucketFill.module.scss +0 -36
  42. package/src/components/BucketFill/BucketFill.tsx +0 -65
  43. package/src/components/BucketFill/index.tsx +0 -2
  44. package/src/components/Button/Button.module.scss +0 -45
  45. package/src/components/Button/Button.tsx +0 -40
  46. package/src/components/Button/index.tsx +0 -2
  47. package/src/components/Card/Card.module.scss +0 -12
  48. package/src/components/Card/Card.tsx +0 -9
  49. package/src/components/Card/index.tsx +0 -2
  50. package/src/components/Chart/Chart.e2e.ts +0 -4
  51. package/src/components/Chart/Chart.logic.tsx +0 -8
  52. package/src/components/Chart/Chart.module.scss +0 -58
  53. package/src/components/Chart/Chart.tsx +0 -2
  54. package/src/components/Chart/Chart.types.ts +0 -35
  55. package/src/components/Chart/Chart.view.tsx +0 -241
  56. package/src/components/Chart/index.tsx +0 -2
  57. package/src/components/CheckBox/CheckBox.module.scss +0 -36
  58. package/src/components/CheckBox/CheckBox.tsx +0 -63
  59. package/src/components/CheckBox/index.tsx +0 -2
  60. package/src/components/CodeInput/CodeInput.module.scss +0 -5
  61. package/src/components/CodeInput/CodeInput.tsx +0 -84
  62. package/src/components/CodeInput/index.tsx +0 -2
  63. package/src/components/Collapsable/Collapsable.module.scss +0 -42
  64. package/src/components/Collapsable/Collapsable.tsx +0 -253
  65. package/src/components/Collapsable/index.tsx +0 -2
  66. package/src/components/Countdown/Countdown.tsx +0 -130
  67. package/src/components/Countdown/index.tsx +0 -2
  68. package/src/components/CurrencyInput/CurrencyInput.hook.ts +0 -37
  69. package/src/components/CurrencyInput/CurrencyInput.tsx +0 -25
  70. package/src/components/CurrencyInput/index.tsx +0 -2
  71. package/src/components/Divider/Divider.module.scss +0 -7
  72. package/src/components/Divider/Divider.tsx +0 -13
  73. package/src/components/Divider/index.tsx +0 -2
  74. package/src/components/EmailInput/EmailInput.module.scss +0 -0
  75. package/src/components/EmailInput/EmailInput.tsx +0 -51
  76. package/src/components/EmailInput/index.tsx +0 -2
  77. package/src/components/FadeIn/FadeIn.module.scss +0 -9
  78. package/src/components/FadeIn/FadeIn.tsx +0 -77
  79. package/src/components/FadeIn/index.tsx +0 -2
  80. package/src/components/FileInput/FileInput.module.scss +0 -6
  81. package/src/components/FileInput/FileInput.tsx +0 -75
  82. package/src/components/FileInput/View/BigFactory/BigFactory.module.scss +0 -20
  83. package/src/components/FileInput/View/BigFactory/BigFactory.tsx +0 -48
  84. package/src/components/FileInput/View/BigFactory/index.tsx +0 -2
  85. package/src/components/FileInput/View/Compact/Compact.module.scss +0 -68
  86. package/src/components/FileInput/View/Compact/Compact.tsx +0 -151
  87. package/src/components/FileInput/View/Compact/index.tsx +0 -2
  88. package/src/components/FileInput/View/View.types.ts +0 -12
  89. package/src/components/FileInput/index.tsx +0 -2
  90. package/src/components/FlowController/FlowController.module.scss +0 -47
  91. package/src/components/FlowController/FlowController.tsx +0 -93
  92. package/src/components/FlowController/index.tsx +0 -2
  93. package/src/components/Form/Form.tsx +0 -243
  94. package/src/components/Form/index.ts +0 -2
  95. package/src/components/Form/v2/Form.hook.ts +0 -341
  96. package/src/components/Form/v2/Form.module.scss +0 -0
  97. package/src/components/Form/v2/Form.tsx +0 -78
  98. package/src/components/Form/v2/Form.types.ts +0 -118
  99. package/src/components/Form/v2/FormField/Extensions/DateField/DateField.module.scss +0 -0
  100. package/src/components/Form/v2/FormField/Extensions/DateField/DateField.tsx +0 -73
  101. package/src/components/Form/v2/FormField/Extensions/DateField/index.tsx +0 -2
  102. package/src/components/Form/v2/FormField/Extensions/PhoneField/PhoneField.module.scss +0 -0
  103. package/src/components/Form/v2/FormField/Extensions/PhoneField/PhoneField.tsx +0 -91
  104. package/src/components/Form/v2/FormField/Extensions/PhoneField/index.tsx +0 -2
  105. package/src/components/Form/v2/FormField/FormField.module.scss +0 -0
  106. package/src/components/Form/v2/FormField/FormField.tsx +0 -378
  107. package/src/components/Form/v2/FormField/FormField.types.ts +0 -129
  108. package/src/components/Form/v2/FormField/index.tsx +0 -2
  109. package/src/components/Form/v2/index.tsx +0 -2
  110. package/src/components/Freeze/Freeze.tsx +0 -9
  111. package/src/components/Freeze/index.tsx +0 -2
  112. package/src/components/HSForms/HSForms.tsx +0 -57
  113. package/src/components/HSForms/index.tsx +0 -2
  114. package/src/components/Header/Header.module.scss +0 -119
  115. package/src/components/Header/Header.tsx +0 -138
  116. package/src/components/Header/index.tsx +0 -2
  117. package/src/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +0 -44
  118. package/src/components/HeaderCloseBtn/HeaderCloseBtn.tsx +0 -28
  119. package/src/components/HeaderCloseBtn/index.tsx +0 -2
  120. package/src/components/InfinityScroll/InfinityScroll.module.scss +0 -30
  121. package/src/components/InfinityScroll/InfinityScroll.tsx +0 -187
  122. package/src/components/InfinityScroll/index.tsx +0 -2
  123. package/src/components/Input/Input.module.scss +0 -71
  124. package/src/components/Input/Input.tsx +0 -134
  125. package/src/components/Input/index.tsx +0 -2
  126. package/src/components/InstantCounter/InstantCounter.tsx +0 -77
  127. package/src/components/InstantCounter/index.tsx +0 -2
  128. package/src/components/LavaLamp/LavaLamp.data.tsx +0 -114
  129. package/src/components/LavaLamp/LavaLamp.module.scss +0 -26
  130. package/src/components/LavaLamp/LavaLamp.tsx +0 -131
  131. package/src/components/LavaLamp/index.tsx +0 -2
  132. package/src/components/LavaLamp/v2/LavaLamp.module.scss +0 -23
  133. package/src/components/LavaLamp/v2/LavaLamp.tsx +0 -197
  134. package/src/components/LinkToId/LinkToId.module.scss +0 -4
  135. package/src/components/LinkToId/LinkToId.tsx +0 -51
  136. package/src/components/LinkToId/index.tsx +0 -2
  137. package/src/components/Loader/Loader.module.scss +0 -40
  138. package/src/components/Loader/Loader.tsx +0 -18
  139. package/src/components/Loader/index.tsx +0 -2
  140. package/src/components/LoaderDotsIndicator/LoaderDotsIndicator.tsx +0 -34
  141. package/src/components/LoaderDotsIndicator/index.tsx +0 -2
  142. package/src/components/LoopableVideo/LoopableVideo.tsx +0 -37
  143. package/src/components/LoopableVideo/index.tsx +0 -2
  144. package/src/components/MainGrid/MainGrid.module.scss +0 -28
  145. package/src/components/MainGrid/MainGrid.tsx +0 -68
  146. package/src/components/MainGrid/index.tsx +0 -2
  147. package/src/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +0 -220
  148. package/src/components/MutableHamburgerButton/MutableHamburgerButton.tsx +0 -38
  149. package/src/components/MutableHamburgerButton/index.tsx +0 -2
  150. package/src/components/Notification/Notification.module.scss +0 -25
  151. package/src/components/Notification/Notification.tsx +0 -13
  152. package/src/components/Notification/index.tsx +0 -2
  153. package/src/components/OrderableList/OrderableList.module.scss +0 -98
  154. package/src/components/OrderableList/OrderableList.tsx +0 -564
  155. package/src/components/OrderableList/index.tsx +0 -2
  156. package/src/components/PaginationIndicator/PaginationIndicator.tsx +0 -365
  157. package/src/components/PaginationIndicator/index.tsx +0 -2
  158. package/src/components/Parallax/Parallax.module.scss +0 -28
  159. package/src/components/Parallax/Parallax.tsx +0 -225
  160. package/src/components/Parallax/index.tsx +0 -2
  161. package/src/components/Parallax/math/helpers.ts +0 -289
  162. package/src/components/PasswordInput/PasswordInput.module.scss +0 -17
  163. package/src/components/PasswordInput/PasswordInput.tsx +0 -154
  164. package/src/components/PasswordInput/index.tsx +0 -2
  165. package/src/components/PingPongText/PingPongText.module.scss +0 -4
  166. package/src/components/PingPongText/PingPongText.tsx +0 -83
  167. package/src/components/PingPongText/index.tsx +0 -2
  168. package/src/components/PixelatedScan/PixelatedScan.module.scss +0 -86
  169. package/src/components/PixelatedScan/PixelatedScan.tsx +0 -175
  170. package/src/components/PixelatedScan/index.tsx +0 -2
  171. package/src/components/Portal/Portal.module.scss +0 -3
  172. package/src/components/Portal/Portal.tsx +0 -68
  173. package/src/components/Portal/index.tsx +0 -2
  174. package/src/components/ProgressBar/ProgressBar.module.scss +0 -44
  175. package/src/components/ProgressBar/ProgressBar.tsx +0 -124
  176. package/src/components/ProgressBar/index.tsx +0 -2
  177. package/src/components/ProgressTexts/ProgressTexts.module.scss +0 -37
  178. package/src/components/ProgressTexts/ProgressTexts.tsx +0 -85
  179. package/src/components/ProgressTexts/index.tsx +0 -2
  180. package/src/components/Radio/Radio.module.scss +0 -36
  181. package/src/components/Radio/Radio.tsx +0 -53
  182. package/src/components/Radio/index.tsx +0 -2
  183. package/src/components/SectionContainer/SectionContainer.module.scss +0 -30
  184. package/src/components/SectionContainer/SectionContainer.tsx +0 -49
  185. package/src/components/SectionContainer/index.tsx +0 -2
  186. package/src/components/Select/Select.module.scss +0 -58
  187. package/src/components/Select/Select.tsx +0 -192
  188. package/src/components/Select/index.tsx +0 -2
  189. package/src/components/Skeleton/Skeleton.module.scss +0 -21
  190. package/src/components/Skeleton/Skeleton.tsx +0 -29
  191. package/src/components/Skeleton/index.tsx +0 -2
  192. package/src/components/Spacing/Spacing.module.scss +0 -13
  193. package/src/components/Spacing/Spacing.tsx +0 -24
  194. package/src/components/Spacing/index.tsx +0 -2
  195. package/src/components/StaticScroller/StaticScroller.module.scss +0 -14
  196. package/src/components/StaticScroller/StaticScroller.tsx +0 -83
  197. package/src/components/StaticScroller/index.tsx +0 -2
  198. package/src/components/Switch/Switch.module.scss +0 -43
  199. package/src/components/Switch/Switch.tsx +0 -41
  200. package/src/components/Switch/index.tsx +0 -2
  201. package/src/components/Table/Table.module.scss +0 -76
  202. package/src/components/Table/Table.tsx +0 -152
  203. package/src/components/Table/index.tsx +0 -2
  204. package/src/components/Tabs/Tabs.module.scss +0 -40
  205. package/src/components/Tabs/Tabs.tsx +0 -104
  206. package/src/components/Tabs/index.tsx +0 -2
  207. package/src/components/Text/Text.module.scss +0 -81
  208. package/src/components/Text/Text.tsx +0 -42
  209. package/src/components/Text/index.tsx +0 -2
  210. package/src/components/Transition/MasksFactory/DiagonalReveal.tsx +0 -47
  211. package/src/components/Transition/MasksFactory/DiagonalSquareToBalls.tsx +0 -78
  212. package/src/components/Transition/MasksFactory/PhysicsSquares.tsx +0 -106
  213. package/src/components/Transition/MasksFactory/SquareToBalls.tsx +0 -66
  214. package/src/components/Transition/MasksFactory/utils.ts +0 -35
  215. package/src/components/Transition/Transition.module.scss +0 -211
  216. package/src/components/Transition/Transition.tsx +0 -495
  217. package/src/components/Transition/index.tsx +0 -2
  218. package/src/components/UncontrolledTransition/UncontrolledTransition.ai.md +0 -9
  219. package/src/components/UncontrolledTransition/UncontrolledTransition.sample.tsx +0 -34
  220. package/src/components/UncontrolledTransition/UncontrolledTransition.tsx +0 -143
  221. package/src/components/UncontrolledTransition/index.tsx +0 -2
  222. package/src/components/WalletConnectionWrapper/WalletConnectionWrapper.tsx +0 -212
  223. package/src/components/WalletConnectionWrapper/index.tsx +0 -2
  224. package/src/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.module.scss +0 -5
  225. package/src/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.tsx +0 -52
  226. package/src/components/utilitary/ScrollAndFocusLock/index.tsx +0 -2
  227. package/src/context/AsyncProcess.tsx +0 -107
  228. package/src/context/ContextAsyncControl.tsx +0 -89
  229. package/src/context/CustomBrowserRouter.tsx +0 -55
  230. package/src/context/OneUIProvider.tsx +0 -308
  231. package/src/hooks/logs/useDependencyChangeDetection.ts +0 -25
  232. package/src/hooks/logs/useIsMounting.ts +0 -7
  233. package/src/hooks/persistence/useLocalStorage.ts +0 -45
  234. package/src/hooks/shims/ObjectWatchShim.ts +0 -56
  235. package/src/hooks/ui/useAdaptiveImage.tsx +0 -36
  236. package/src/hooks/ui/useAlternating.tsx +0 -22
  237. package/src/hooks/ui/useBreakpoint.tsx +0 -21
  238. package/src/hooks/ui/useCustomScrollbar.module.scss +0 -20
  239. package/src/hooks/ui/useCustomScrollbar.tsx +0 -22
  240. package/src/hooks/ui/useEffectIf.ts +0 -11
  241. package/src/hooks/ui/useMouseHover.tsx +0 -26
  242. package/src/hooks/ui/usePaginationControls.module.scss +0 -16
  243. package/src/hooks/ui/usePaginationControls.tsx +0 -176
  244. package/src/hooks/ui/useSnapToViewport.module.scss +0 -6
  245. package/src/hooks/ui/useSnapToViewport.ts +0 -28
  246. package/src/hooks/ui/useTilt.tsx +0 -219
  247. package/src/hooks/ui/useZoomable.module.scss +0 -34
  248. package/src/hooks/ui/useZoomable.tsx +0 -144
  249. package/src/hooks/useAsyncControl.ai.md +0 -25
  250. package/src/hooks/useAsyncControl.ts +0 -101
  251. package/src/hooks/useContainedRepositioning.ts +0 -110
  252. package/src/hooks/useCustomHistory.ts +0 -14
  253. package/src/hooks/useElementFit.ts +0 -82
  254. package/src/hooks/useFirestoreWatch.ts +0 -54
  255. package/src/hooks/useForm.ts +0 -49
  256. package/src/hooks/useFreeze.ts +0 -12
  257. package/src/hooks/useHero.module.scss +0 -41
  258. package/src/hooks/useHero.ts +0 -514
  259. package/src/hooks/useIntersection.ts +0 -32
  260. package/src/hooks/useMergeRefs.ts +0 -29
  261. package/src/hooks/useObserve.ts +0 -24
  262. package/src/hooks/usePagination.ts +0 -228
  263. package/src/hooks/usePooledOperation.ts +0 -54
  264. package/src/hooks/usePooling.ts +0 -46
  265. package/src/hooks/useRebound.ts +0 -23
  266. package/src/hooks/useShortIntl.ai.md +0 -5
  267. package/src/hooks/useShortIntl.ts +0 -97
  268. package/src/hooks/utility/useAsyncMemo.ts +0 -43
  269. package/src/hooks/utility/useDepChange.ts +0 -11
  270. package/src/hooks/utility/useEvents.ts +0 -33
  271. package/src/hooks/utility/useImmediate.ts +0 -8
  272. package/src/hooks/utility/useManualInit.ts +0 -24
  273. package/src/hooks/utility/useModule.ts +0 -15
  274. package/src/hooks/utility/useQuery.ts +0 -15
  275. package/src/hooks/utility/useUniqueEffect.ts +0 -22
  276. package/src/index.preprocess.ts +0 -82
  277. package/src/index.ts +0 -229
  278. package/src/models/DebugLogger.ts +0 -7
  279. package/src/models/GenericContract.ts +0 -169
  280. package/src/models/Orbs.ts +0 -97
  281. package/src/reac-app-env.d.ts +0 -6
  282. package/src/storybook/assets/video/txt-reversed.mp4 +0 -0
  283. package/src/storybookUtils/index.tsx +0 -53
  284. package/src/test.tsx +0 -0
  285. package/src/type-utils.ts +0 -49
  286. package/src/types.ts +0 -199
  287. package/src/utility.d.ts +0 -70
  288. package/src/utils/blockchain.ts +0 -43
  289. package/src/utils/e2e.ts +0 -55
  290. package/src/utils/flatten.ts +0 -17
  291. package/src/utils/formatters.ts +0 -36
  292. package/src/utils/html.utils.ts +0 -3
  293. package/src/utils/ownEvent.ts +0 -8
  294. package/src/utils/test.ts +0 -20
@@ -1,495 +0,0 @@
1
- import React, {
2
- AnimationEvent,
3
- createRef,
4
- CSSProperties,
5
- DetailedHTMLProps,
6
- ForwardedRef,
7
- forwardRef,
8
- Key,
9
- MutableRefObject,
10
- ReactElement,
11
- useEffect,
12
- useMemo,
13
- useRef,
14
- useState,
15
- } from "react";
16
- import Styles from "./Transition.module.scss";
17
-
18
- export type TransitionTypeDefinitions =
19
- | {
20
- transitionType?:
21
- | TransitionAnimationTypes.SLIDE
22
- | TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN
23
- | TransitionAnimationTypes.FADE
24
- | TransitionAnimationTypes.COIN_FLIP;
25
- }
26
- | {
27
- transitionType?: TransitionAnimationTypes.POP_FROM_ELEMENT_ID;
28
- elementId: string;
29
- }
30
- | {
31
- transitionType?: TransitionAnimationTypes.MASK;
32
- /**
33
- * It provides the transition container so you can create a dynamic svg to mask with
34
- */
35
- maskFactory: (container: HTMLDivElement) => string;
36
- }
37
- | {
38
- transitionType?: TransitionAnimationTypes.CUSTOM;
39
- config: ReturnType<typeof TransitionClasses>;
40
- };
41
-
42
- export type TransitionProps = {
43
- step: number;
44
- className?: string;
45
- contentStyle?: React.CSSProperties;
46
- contentClassName?: string;
47
- children: (React.ReactElement | undefined)[];
48
- onDiscardStep?: (discardedKey: React.Key, startedAnimationAt: number) => void;
49
- lockTransitionWidth?: boolean;
50
- lockTransitionHeight?: boolean;
51
- } & TransitionTypeDefinitions &
52
- Omit<
53
- DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, any>,
54
- "className" | "children"
55
- >;
56
-
57
- function TransitionClasses(
58
- type: NonNullable<
59
- Exclude<TransitionProps["transitionType"], TransitionAnimationTypes.CUSTOM>
60
- >
61
- ): {
62
- /**
63
- * Applied to the element that was not visible and is now entering the screen
64
- */
65
- backward: {
66
- elementEntering: string;
67
- elementExiting: string;
68
- };
69
- /**
70
- * Applied to the element that was visible and now is exiting the screen
71
- */
72
- forward: {
73
- elementEntering: string;
74
- elementExiting: string;
75
- };
76
- } {
77
- switch (type) {
78
- case TransitionAnimationTypes.COIN_FLIP:
79
- return {
80
- backward: {
81
- elementExiting: Styles.flipBottomUpOut,
82
- elementEntering: Styles.flipBottomUpIn,
83
- },
84
- forward: {
85
- elementExiting: Styles.flipBottomUpOut,
86
- elementEntering: Styles.flipBottomUpIn,
87
- },
88
- };
89
- case TransitionAnimationTypes.FADE:
90
- return {
91
- backward: {
92
- elementExiting: Styles.fadeOutAbsolute,
93
- elementEntering: Styles.fadeInDelayed,
94
- },
95
- forward: {
96
- elementExiting: Styles.fadeOutAbsolute,
97
- elementEntering: Styles.fadeInDelayed,
98
- },
99
- };
100
- case TransitionAnimationTypes.SLIDE:
101
- return {
102
- backward: {
103
- elementEntering: Styles.entranceLeft,
104
- elementExiting: "",
105
- },
106
- forward: {
107
- elementEntering: "",
108
- elementExiting: Styles.exitLeft,
109
- },
110
- };
111
- case TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN:
112
- case TransitionAnimationTypes.POP_FROM_ELEMENT_ID:
113
- return {
114
- backward: {
115
- elementEntering: Styles.fadeIn,
116
- elementExiting: Styles.scaleOut,
117
- },
118
- forward: {
119
- elementEntering: Styles.scaleIn,
120
- elementExiting: Styles.fadeOut,
121
- },
122
- };
123
- case TransitionAnimationTypes.MASK:
124
- return {
125
- backward: {
126
- elementEntering: Styles.stubEntering,
127
- elementExiting: Styles.stub,
128
- },
129
- forward: {
130
- elementEntering: Styles.stubEntering,
131
- elementExiting: Styles.stub,
132
- },
133
- };
134
- }
135
- }
136
-
137
- type ChildrenWrapper = ((props: {
138
- children: TransitionProps["children"][number];
139
- }) => ReactElement) & {
140
- createdAt: number;
141
- associatedKey: Key;
142
- toRemoveKeys?: Key[];
143
- externalProps: { [k: string]: any };
144
- };
145
-
146
- function ChildrenWrapperFactory(
147
- func: (p: { children: TransitionProps["children"] }) => ReactElement,
148
- key: Key,
149
- externalPropsContainer: { [k: string]: any },
150
- /** This is used to prevent newer "duplicated" keys from being removed after the new element finished animation */
151
- timestamp: number,
152
- toRemoveKeys?: Key[]
153
- ): ChildrenWrapper {
154
- (func as any).createdAt = timestamp;
155
- (func as any).associatedKey = key;
156
- (func as any).toRemoveKeys = toRemoveKeys;
157
- (func as any).externalProps = externalPropsContainer;
158
- return func as unknown as ChildrenWrapper;
159
- }
160
- function _Transition(
161
- {
162
- step,
163
- contentStyle,
164
- contentClassName = "",
165
- children,
166
- className,
167
- onDiscardStep,
168
- lockTransitionWidth = false,
169
- lockTransitionHeight = false,
170
- ...props
171
- }: TransitionProps,
172
- _containerRef: ForwardedRef<HTMLDivElement | null>
173
- ) {
174
- const containerRef = useMemo(
175
- () =>
176
- (_containerRef as MutableRefObject<HTMLDivElement | null>) || createRef(),
177
- [_containerRef]
178
- );
179
- const preTransitionDetails = useRef<CSSProperties>({
180
- transformOrigin: "initial",
181
- });
182
- const [childrenWrappers, setChildrenWrappers] = useState<
183
- (ChildrenWrapper | undefined)[]
184
- >(() => {
185
- const externalProps = {
186
- "data-testid": "transition-container",
187
- key: String(children[step]?.key || step),
188
- style: contentStyle,
189
- className: contentClassName,
190
- };
191
- const func = ChildrenWrapperFactory(
192
- ({ children }) => <div {...externalProps}>{children}</div>,
193
- children[step]!.key || step,
194
- externalProps,
195
- Date.now(),
196
- []
197
- );
198
- return [func];
199
- });
200
-
201
- const prevStep = useRef(step);
202
- const prevChild = useRef(children[step]);
203
-
204
- useEffect(() => () => {
205
- prevChild.current = children[step];
206
- });
207
-
208
- useEffect(() => {
209
- containerRef.current!.style.overflow = "hidden";
210
- const transitionClasses =
211
- props.transitionType === TransitionAnimationTypes.CUSTOM
212
- ? props.config
213
- : TransitionClasses(
214
- props.transitionType || TransitionAnimationTypes.SLIDE
215
- );
216
-
217
- if (
218
- prevChild.current !== null &&
219
- children[step]?.key === prevChild.current?.key // I'm rendering the same screen
220
- ) {
221
- return () => {
222
- prevStep.current = step;
223
- };
224
- }
225
-
226
- const key = children[step]?.key || step;
227
-
228
- if (prevStep.current !== step && lockTransitionWidth)
229
- containerRef.current!.style.width = `${
230
- containerRef.current!.clientWidth
231
- }px`;
232
-
233
- if (prevStep.current !== step && lockTransitionHeight)
234
- containerRef.current!.style.height = `${
235
- containerRef.current!.clientHeight
236
- }px`;
237
- const transitionMask =
238
- props.transitionType === TransitionAnimationTypes.MASK
239
- ? props.maskFactory(containerRef.current!)
240
- : "";
241
- const insertedAt = Date.now();
242
-
243
- /** This runs on backwards */
244
- if (prevStep.current > step) {
245
- const stepToRemove = prevStep.current;
246
- const prevKeyToRemove = prevChild.current?.key || stepToRemove;
247
- setChildrenWrappers((screensBeforeChangingStep) => {
248
- const enteringScreenRef = createRef<HTMLDivElement>();
249
- const [FirstNextScreen, ...restOfScreens] =
250
- screensBeforeChangingStep.filter(
251
- (a) => a?.associatedKey !== String(key)
252
- );
253
-
254
- if (FirstNextScreen) {
255
- Object.assign(FirstNextScreen.externalProps, {
256
- "data-testid": "transition-container",
257
- style: { ...contentStyle, WebkitMaskImage: transitionMask },
258
- className: `${transitionClasses.backward.elementExiting}`,
259
- });
260
- }
261
- function animationEndListener(event: AnimationEvent<HTMLDivElement>) {
262
- if (event.target !== event.currentTarget) return;
263
-
264
- const isAnimationFromExpectedState =
265
- enteringScreenRef.current?.classList.contains(
266
- transitionClasses.backward.elementEntering
267
- );
268
- enteringScreenRef.current?.classList.remove(
269
- transitionClasses.backward.elementEntering
270
- );
271
- setChildrenWrappers((screensAfterTheCurrentStepEntered) => {
272
- if (onDiscardStep) {
273
- if (isAnimationFromExpectedState)
274
- onDiscardStep(prevKeyToRemove, insertedAt);
275
- if (FirstNextScreen && FirstNextScreen.toRemoveKeys)
276
- FirstNextScreen.toRemoveKeys.forEach(onDiscardStep);
277
- }
278
- return screensAfterTheCurrentStepEntered.filter((s) => {
279
- const shouldKeep =
280
- (s?.associatedKey !== String(prevKeyToRemove) &&
281
- !FirstNextScreen?.toRemoveKeys?.some(
282
- (k) => String(k) === String(s?.associatedKey)
283
- )) ||
284
- s!.createdAt! > insertedAt;
285
- return shouldKeep;
286
- });
287
- });
288
- event.currentTarget.removeEventListener(
289
- "animationend",
290
- animationEndListener as any
291
- );
292
- }
293
- const propsContainer = {
294
- ref: enteringScreenRef,
295
- "data-testid": "transition-container",
296
- key,
297
- className: `${transitionClasses.backward.elementEntering} ${contentClassName}`,
298
- style: {
299
- ...contentStyle,
300
- },
301
- onAnimationEnd: animationEndListener,
302
- };
303
- const newWrapper = ChildrenWrapperFactory(
304
- ({ children }) => {
305
- return <div {...propsContainer}>{children}</div>;
306
- },
307
- key,
308
- propsContainer,
309
- insertedAt,
310
- [prevKeyToRemove, ...(FirstNextScreen?.toRemoveKeys || [])]
311
- );
312
- if (FirstNextScreen)
313
- return [
314
- newWrapper,
315
- FirstNextScreen ||
316
- ChildrenWrapperFactory(
317
- () => <React.Fragment />,
318
- "",
319
- {},
320
- insertedAt
321
- ),
322
- ...restOfScreens,
323
- ];
324
- else return [newWrapper];
325
- });
326
- } else if (prevStep.current < step) {
327
- const stepToDelete = prevStep.current;
328
- const prevKeyToRemove = String(prevChild.current?.key || stepToDelete);
329
- setChildrenWrappers((screensBeforeChangingStep) => {
330
- const lastIndex = screensBeforeChangingStep.length - 1;
331
- const lastWrapper = screensBeforeChangingStep[lastIndex];
332
- const nextScreenRef = createRef<HTMLDivElement>();
333
- if (lastWrapper) {
334
- Object.assign(lastWrapper.externalProps, {
335
- "data-testid": "transition-container",
336
- style: { ...contentStyle, WebkitMaskImage: transitionMask },
337
- className: `${contentClassName} ${transitionClasses.forward.elementExiting}`,
338
- onAnimationEnd: (e: AnimationEvent) => {
339
- if (e.target !== e.currentTarget) return;
340
- if (transitionClasses.forward.elementEntering)
341
- nextScreenRef.current?.classList.remove(
342
- transitionClasses.forward.elementEntering
343
- );
344
- if (onDiscardStep) onDiscardStep(prevKeyToRemove, insertedAt);
345
- setChildrenWrappers((screensAfterTheCurrentStepEntered) => {
346
- const nextState = screensAfterTheCurrentStepEntered.filter(
347
- (s) => {
348
- const shouldMantain =
349
- s?.associatedKey !== String(prevKeyToRemove) ||
350
- s.createdAt > insertedAt;
351
- return shouldMantain;
352
- }
353
- );
354
- return nextState;
355
- });
356
- },
357
- });
358
- }
359
- const propsContainer = {
360
- ref: nextScreenRef,
361
- "data-testid": "transition-container",
362
- key,
363
- style: {
364
- ...contentStyle,
365
- },
366
- className: `${contentClassName} ${transitionClasses.forward.elementEntering}`,
367
- };
368
- const newWrapper = ChildrenWrapperFactory(
369
- ({ children }) => {
370
- return <div {...propsContainer}>{children}</div>;
371
- },
372
- key,
373
- propsContainer,
374
- insertedAt
375
- );
376
- return [
377
- ...screensBeforeChangingStep.slice(0, lastIndex),
378
- lastWrapper ||
379
- ChildrenWrapperFactory(
380
- () => <React.Fragment />,
381
- "fallback",
382
- {},
383
- insertedAt
384
- ),
385
- newWrapper,
386
- ];
387
- });
388
- }
389
- return () => {
390
- prevStep.current = step;
391
- };
392
- }, [step]);
393
-
394
- useEffect(() => {
395
- if (childrenWrappers.length === 1 && lockTransitionWidth)
396
- containerRef.current!.style.width = "";
397
- if (childrenWrappers.length === 1 && lockTransitionHeight)
398
- containerRef.current!.style.height = "";
399
- }, [childrenWrappers.length !== 1]);
400
-
401
- useEffect(() => {
402
- if (
403
- props.transitionType === TransitionAnimationTypes.POP_FROM_ELEMENT_ID &&
404
- "elementId" in props
405
- ) {
406
- const element = document.querySelector(
407
- `#${props.elementId}`
408
- ) as HTMLDivElement;
409
-
410
- if (element) {
411
- const { clientWidth, clientHeight } = containerRef.current!;
412
-
413
- const offsetX =
414
- element.clientLeft + element.offsetLeft + element.clientWidth / 2;
415
- const offsetY =
416
- element.clientTop + element.offsetTop + element.clientHeight / 2;
417
- const percentX = (offsetX * 100) / clientWidth;
418
- const percentY = (offsetY * 100) / clientHeight;
419
- preTransitionDetails.current.transformOrigin = `${percentX}% ${percentY}%`;
420
-
421
- Object.assign(containerRef.current!.style, {
422
- transformOrigin: `${percentX}% ${percentY}%`,
423
- });
424
- }
425
- } else {
426
- Object.assign(containerRef.current!.style, preTransitionDetails.current);
427
- }
428
-
429
- if (childrenWrappers.length === 1) {
430
- containerRef.current!.style.overflow = "";
431
- }
432
- }, [childrenWrappers.length]);
433
-
434
- const propsToSpread = { ...props } as any;
435
- delete propsToSpread.transitionType;
436
- delete propsToSpread.config;
437
-
438
- return (
439
- <>
440
- <section
441
- {...propsToSpread}
442
- onClick={(e) => {
443
- const {
444
- currentTarget: { offsetTop, offsetLeft, clientWidth, clientHeight },
445
- clientX,
446
- clientY,
447
- } = e;
448
- const offsetX = clientX - offsetLeft;
449
- const offsetY = clientY - offsetTop;
450
- const percentX = (offsetX * 100) / clientWidth;
451
- const percentY = (offsetY * 100) / clientHeight;
452
-
453
- if (
454
- props.transitionType ===
455
- TransitionAnimationTypes.POP_FROM_ELEMENT_ID ||
456
- props.transitionType ===
457
- TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN
458
- )
459
- preTransitionDetails.current.transformOrigin = `${percentX}% ${percentY}%`;
460
- if (props.onClick) props.onClick(e as any);
461
- }}
462
- data-testid="transition-controller"
463
- ref={containerRef}
464
- className={`${Styles.section} ${className}`}
465
- >
466
- {(childrenWrappers as ChildrenWrapper[]).map((Wrapper) => {
467
- const childToRender = children.find(
468
- (a, i) => (a?.key || i) === Wrapper?.associatedKey
469
- );
470
- return (
471
- <Wrapper key={`${Wrapper!.associatedKey} ${Wrapper.createdAt}`}>
472
- <>{childToRender}</>
473
- </Wrapper>
474
- );
475
- })}
476
- </section>
477
- </>
478
- );
479
- }
480
-
481
- export enum TransitionAnimationTypes {
482
- SLIDE,
483
- POP_FROM_CLICK_ORIGIN,
484
- POP_FROM_ELEMENT_ID,
485
- FADE,
486
- COIN_FLIP,
487
- MASK,
488
- CUSTOM,
489
- }
490
-
491
- /**
492
- * Handles the transition between multiple children and recycling of elements
493
- **/
494
- const Transition = forwardRef(_Transition);
495
- export default Transition;
@@ -1,2 +0,0 @@
1
- export { default } from "./Transition";
2
- export * from "./Transition";
@@ -1,9 +0,0 @@
1
- # Animating component transition
2
-
3
- When the key changes, a the transition between components will be controlled by UncontrolledTransition
4
-
5
- ```tsx
6
- <UncontrolledTransition>
7
- <AComponent key={DYNAMIC_KEY}>
8
- </UncontrolledTransition>
9
- ```
@@ -1,34 +0,0 @@
1
- import React from "react";
2
- import { useState } from "react";
3
- import UncontrolledTransition from "../UncontrolledTransition";
4
- import Button from "../Button";
5
-
6
- function colorGen() {
7
- return [255 * Math.random(), 255 * Math.random(), 255 * Math.random()];
8
- }
9
-
10
- export default function Example() {
11
- const [color, setColor] = useState(colorGen);
12
- const rgb = `rgb(${color.join(",")})`;
13
- return (
14
- <UncontrolledTransition>
15
- <div
16
- key={color.join("")}
17
- style={{
18
- width: "100vw",
19
- height: "100vh",
20
- backgroundColor: rgb,
21
- textAlign: "center",
22
- }}
23
- >
24
- <Button variant="filled" onClick={() => setColor(colorGen())}>
25
- Click to transition
26
- </Button>
27
- <h2>RGB</h2>
28
- <p>{color[0].toFixed(0)}</p>
29
- <p>{color[1].toFixed(0)}</p>
30
- <p>{color[2].toFixed(0)}</p>
31
- </div>
32
- </UncontrolledTransition>
33
- );
34
- }
@@ -1,143 +0,0 @@
1
- import React, {
2
- DetailedHTMLProps,
3
- ForwardedRef,
4
- forwardRef,
5
- Key,
6
- RefObject,
7
- useEffect,
8
- useImperativeHandle,
9
- useLayoutEffect,
10
- useRef,
11
- useState,
12
- } from "react";
13
- import Transition from "../Transition";
14
- import {
15
- TransitionProps,
16
- TransitionTypeDefinitions,
17
- } from "../Transition/Transition";
18
-
19
- function _UncontrolledTransition(
20
- {
21
- className = "",
22
- contentClassName,
23
- children = <React.Fragment key="default"></React.Fragment>,
24
- lockTransitionWidth = true,
25
- lockTransitionHeight = false,
26
- contentStyle,
27
- onDiscardStep,
28
- ...props
29
- }: {
30
- className?: string;
31
- contentClassName?: string;
32
- children?: React.ReactElement;
33
- lockTransitionWidth?: boolean;
34
- lockTransitionHeight?: boolean;
35
- onDiscardStep?: (key: Key) => void;
36
- } & Pick<TransitionProps, "contentStyle"> &
37
- TransitionTypeDefinitions &
38
- Omit<
39
- DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, any>,
40
- "className" | "children" | "ref"
41
- >,
42
- ref: ForwardedRef<{
43
- setOrientation: (orientation: "forward" | "backward") => void;
44
- sectionRef: RefObject<HTMLDivElement | null>;
45
- }>
46
- ) {
47
- const sectionRef = useRef<HTMLDivElement>(null);
48
- const [{ childStack, offset }, setChildStack] = useState<{
49
- childStack: (React.ReactElement & { createdAt: number })[];
50
- offset: number;
51
- }>(() => ({
52
- childStack: [{ ...children, createdAt: Date.now() }],
53
- offset: 1,
54
- }));
55
- const orientation = useRef<"forward" | "backward">("forward");
56
- function setOrientation(a: typeof orientation.current) {
57
- orientation.current = a;
58
- }
59
-
60
- useImperativeHandle(
61
- ref,
62
- () => ({
63
- setOrientation,
64
- sectionRef,
65
- }),
66
- []
67
- );
68
-
69
- useLayoutEffect(() => {
70
- if (process.env.NODE_ENV !== "production" && !children.key)
71
- throw new Error(
72
- "The provided child should have a key property, please provide it"
73
- );
74
- if (childStack.length === 1 && childStack[0].key === children.key) return;
75
- if (orientation.current === "forward")
76
- setChildStack((p) => ({
77
- ...p,
78
- childStack: [...p.childStack, { ...children, createdAt: Date.now() }],
79
- }));
80
- else
81
- setChildStack((p) => ({
82
- ...p,
83
- childStack: [{ ...children, createdAt: Date.now() }, ...p.childStack],
84
- }));
85
- }, [children.key]);
86
-
87
- useEffect(() => {
88
- if (orientation.current === "backward") {
89
- setChildStack((prev) => {
90
- return {
91
- ...prev,
92
- offset: prev.childStack.length,
93
- };
94
- });
95
- }
96
- }, [childStack.length]);
97
-
98
- childStack.forEach((a, i, arr) => {
99
- if (a.key === children.key)
100
- arr[i] = { ...children, createdAt: a.createdAt };
101
- });
102
-
103
- const predictedStep = childStack.length - offset;
104
-
105
- return (
106
- <>
107
- {childStack.length ? (
108
- <Transition
109
- ref={sectionRef}
110
- contentStyle={contentStyle}
111
- className={className}
112
- step={predictedStep}
113
- onDiscardStep={(discardedKey, animatedAt) => {
114
- setTimeout(() => {
115
- if (onDiscardStep) onDiscardStep(discardedKey);
116
- orientation.current = "forward";
117
- setChildStack((prev) => {
118
- return {
119
- childStack: prev.childStack.filter((a) => {
120
- return a.key !== discardedKey || a.createdAt > animatedAt;
121
- }),
122
- offset: prev.offset === 1 ? 1 : prev.offset - 1,
123
- };
124
- });
125
- }, 0)
126
- }}
127
- lockTransitionWidth={lockTransitionWidth}
128
- lockTransitionHeight={lockTransitionHeight}
129
- contentClassName={contentClassName}
130
- {...props}
131
- >
132
- {childStack}
133
- </Transition>
134
- ) : null}
135
- </>
136
- );
137
- }
138
-
139
- /**
140
- * This component receives child with key and applies a transition when the key changes, allowing to swap elements with a fine transition.
141
- **/
142
- export const UncontrolledTransition = forwardRef(_UncontrolledTransition);
143
- export default UncontrolledTransition;
@@ -1,2 +0,0 @@
1
- export { default } from "./UncontrolledTransition";
2
- export * from "./UncontrolledTransition";