@onepercentio/one-ui 0.29.4 → 0.29.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/components/Switch/Switch.d.ts +1 -1
  2. package/dist/components/Switch/Switch.js +1 -1
  3. package/dist-ts/components/Switch/Switch.d.ts +1 -1
  4. package/package.json +1 -1
  5. package/src/assets/img/svg/checkbox.svg +0 -3
  6. package/src/assets/styles/index.scss +0 -2
  7. package/src/assets/styles/mixins.scss +0 -12
  8. package/src/assets/styles/variables.scss +0 -49
  9. package/src/components/AdaptiveButton/AdaptiveButton.module.scss +0 -7
  10. package/src/components/AdaptiveButton/AdaptiveButton.tsx +0 -26
  11. package/src/components/AdaptiveButton/index.tsx +0 -2
  12. package/src/components/AdaptiveContainer/AdaptiveContainer.module.scss +0 -53
  13. package/src/components/AdaptiveContainer/AdaptiveContainer.tsx +0 -200
  14. package/src/components/AdaptiveContainer/index.tsx +0 -2
  15. package/src/components/AdaptiveDialog/AdaptiveDialog.module.scss +0 -147
  16. package/src/components/AdaptiveDialog/AdaptiveDialog.tsx +0 -97
  17. package/src/components/AdaptiveDialog/index.tsx +0 -2
  18. package/src/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +0 -49
  19. package/src/components/AdaptiveSidebar/AdaptiveSidebar.sample.tsx +0 -10
  20. package/src/components/AdaptiveSidebar/AdaptiveSidebar.tsx +0 -123
  21. package/src/components/AdaptiveSidebar/index.tsx +0 -2
  22. package/src/components/AnchoredTooltip/AnchoredTooltip.module.scss +0 -64
  23. package/src/components/AnchoredTooltip/AnchoredTooltip.tsx +0 -250
  24. package/src/components/AnchoredTooltip/index.tsx +0 -2
  25. package/src/components/AnimatedEntrance/AnimatedEntrance.module.scss +0 -108
  26. package/src/components/AnimatedEntrance/AnimatedEntrance.tsx +0 -227
  27. package/src/components/AnimatedEntrance/index.tsx +0 -2
  28. package/src/components/AsyncWrapper/AsyncWrapper.tsx +0 -38
  29. package/src/components/AsyncWrapper/index.tsx +0 -2
  30. package/src/components/Avatar/Avatar.module.scss +0 -22
  31. package/src/components/Avatar/Avatar.tsx +0 -31
  32. package/src/components/Avatar/index.tsx +0 -2
  33. package/src/components/BucketFill/BucketFill.module.scss +0 -36
  34. package/src/components/BucketFill/BucketFill.tsx +0 -65
  35. package/src/components/BucketFill/index.tsx +0 -2
  36. package/src/components/Button/Button.module.scss +0 -45
  37. package/src/components/Button/Button.tsx +0 -40
  38. package/src/components/Button/index.tsx +0 -2
  39. package/src/components/Card/Card.module.scss +0 -12
  40. package/src/components/Card/Card.tsx +0 -9
  41. package/src/components/Card/index.tsx +0 -2
  42. package/src/components/Chart/Chart.e2e.ts +0 -4
  43. package/src/components/Chart/Chart.logic.tsx +0 -8
  44. package/src/components/Chart/Chart.module.scss +0 -58
  45. package/src/components/Chart/Chart.tsx +0 -2
  46. package/src/components/Chart/Chart.types.ts +0 -35
  47. package/src/components/Chart/Chart.view.tsx +0 -241
  48. package/src/components/Chart/index.tsx +0 -2
  49. package/src/components/CheckBox/CheckBox.module.scss +0 -36
  50. package/src/components/CheckBox/CheckBox.tsx +0 -63
  51. package/src/components/CheckBox/index.tsx +0 -2
  52. package/src/components/CodeInput/CodeInput.module.scss +0 -5
  53. package/src/components/CodeInput/CodeInput.tsx +0 -84
  54. package/src/components/CodeInput/index.tsx +0 -2
  55. package/src/components/Collapsable/Collapsable.module.scss +0 -42
  56. package/src/components/Collapsable/Collapsable.tsx +0 -253
  57. package/src/components/Collapsable/index.tsx +0 -2
  58. package/src/components/Countdown/Countdown.tsx +0 -130
  59. package/src/components/Countdown/index.tsx +0 -2
  60. package/src/components/CurrencyInput/CurrencyInput.hook.ts +0 -37
  61. package/src/components/CurrencyInput/CurrencyInput.tsx +0 -25
  62. package/src/components/CurrencyInput/index.tsx +0 -2
  63. package/src/components/Divider/Divider.module.scss +0 -7
  64. package/src/components/Divider/Divider.tsx +0 -13
  65. package/src/components/Divider/index.tsx +0 -2
  66. package/src/components/EmailInput/EmailInput.module.scss +0 -0
  67. package/src/components/EmailInput/EmailInput.tsx +0 -51
  68. package/src/components/EmailInput/index.tsx +0 -2
  69. package/src/components/FadeIn/FadeIn.module.scss +0 -9
  70. package/src/components/FadeIn/FadeIn.tsx +0 -77
  71. package/src/components/FadeIn/index.tsx +0 -2
  72. package/src/components/FileInput/FileInput.module.scss +0 -6
  73. package/src/components/FileInput/FileInput.tsx +0 -75
  74. package/src/components/FileInput/View/BigFactory/BigFactory.module.scss +0 -20
  75. package/src/components/FileInput/View/BigFactory/BigFactory.tsx +0 -48
  76. package/src/components/FileInput/View/BigFactory/index.tsx +0 -2
  77. package/src/components/FileInput/View/Compact/Compact.module.scss +0 -68
  78. package/src/components/FileInput/View/Compact/Compact.tsx +0 -151
  79. package/src/components/FileInput/View/Compact/index.tsx +0 -2
  80. package/src/components/FileInput/View/View.types.ts +0 -12
  81. package/src/components/FileInput/index.tsx +0 -2
  82. package/src/components/FlowController/FlowController.module.scss +0 -47
  83. package/src/components/FlowController/FlowController.tsx +0 -93
  84. package/src/components/FlowController/index.tsx +0 -2
  85. package/src/components/Form/Form.tsx +0 -243
  86. package/src/components/Form/index.ts +0 -2
  87. package/src/components/Form/v2/Form.hook.ts +0 -341
  88. package/src/components/Form/v2/Form.module.scss +0 -0
  89. package/src/components/Form/v2/Form.tsx +0 -78
  90. package/src/components/Form/v2/Form.types.ts +0 -118
  91. package/src/components/Form/v2/FormField/Extensions/DateField/DateField.module.scss +0 -0
  92. package/src/components/Form/v2/FormField/Extensions/DateField/DateField.tsx +0 -73
  93. package/src/components/Form/v2/FormField/Extensions/DateField/index.tsx +0 -2
  94. package/src/components/Form/v2/FormField/Extensions/PhoneField/PhoneField.module.scss +0 -0
  95. package/src/components/Form/v2/FormField/Extensions/PhoneField/PhoneField.tsx +0 -91
  96. package/src/components/Form/v2/FormField/Extensions/PhoneField/index.tsx +0 -2
  97. package/src/components/Form/v2/FormField/FormField.module.scss +0 -0
  98. package/src/components/Form/v2/FormField/FormField.tsx +0 -378
  99. package/src/components/Form/v2/FormField/FormField.types.ts +0 -129
  100. package/src/components/Form/v2/FormField/index.tsx +0 -2
  101. package/src/components/Form/v2/index.tsx +0 -2
  102. package/src/components/Freeze/Freeze.tsx +0 -9
  103. package/src/components/Freeze/index.tsx +0 -2
  104. package/src/components/HSForms/HSForms.tsx +0 -57
  105. package/src/components/HSForms/index.tsx +0 -2
  106. package/src/components/Header/Header.module.scss +0 -119
  107. package/src/components/Header/Header.tsx +0 -138
  108. package/src/components/Header/index.tsx +0 -2
  109. package/src/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +0 -44
  110. package/src/components/HeaderCloseBtn/HeaderCloseBtn.tsx +0 -28
  111. package/src/components/HeaderCloseBtn/index.tsx +0 -2
  112. package/src/components/InfinityScroll/InfinityScroll.module.scss +0 -30
  113. package/src/components/InfinityScroll/InfinityScroll.tsx +0 -187
  114. package/src/components/InfinityScroll/index.tsx +0 -2
  115. package/src/components/Input/Input.module.scss +0 -71
  116. package/src/components/Input/Input.tsx +0 -134
  117. package/src/components/Input/index.tsx +0 -2
  118. package/src/components/InstantCounter/InstantCounter.tsx +0 -77
  119. package/src/components/InstantCounter/index.tsx +0 -2
  120. package/src/components/LavaLamp/LavaLamp.data.tsx +0 -114
  121. package/src/components/LavaLamp/LavaLamp.module.scss +0 -26
  122. package/src/components/LavaLamp/LavaLamp.tsx +0 -131
  123. package/src/components/LavaLamp/index.tsx +0 -2
  124. package/src/components/LavaLamp/v2/LavaLamp.module.scss +0 -23
  125. package/src/components/LavaLamp/v2/LavaLamp.tsx +0 -197
  126. package/src/components/LinkToId/LinkToId.module.scss +0 -4
  127. package/src/components/LinkToId/LinkToId.tsx +0 -51
  128. package/src/components/LinkToId/index.tsx +0 -2
  129. package/src/components/Loader/Loader.module.scss +0 -40
  130. package/src/components/Loader/Loader.tsx +0 -18
  131. package/src/components/Loader/index.tsx +0 -2
  132. package/src/components/LoaderDotsIndicator/LoaderDotsIndicator.tsx +0 -34
  133. package/src/components/LoaderDotsIndicator/index.tsx +0 -2
  134. package/src/components/LoopableVideo/LoopableVideo.tsx +0 -37
  135. package/src/components/LoopableVideo/index.tsx +0 -2
  136. package/src/components/MainGrid/MainGrid.module.scss +0 -28
  137. package/src/components/MainGrid/MainGrid.tsx +0 -68
  138. package/src/components/MainGrid/index.tsx +0 -2
  139. package/src/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +0 -220
  140. package/src/components/MutableHamburgerButton/MutableHamburgerButton.tsx +0 -38
  141. package/src/components/MutableHamburgerButton/index.tsx +0 -2
  142. package/src/components/Notification/Notification.module.scss +0 -25
  143. package/src/components/Notification/Notification.tsx +0 -13
  144. package/src/components/Notification/index.tsx +0 -2
  145. package/src/components/OrderableList/OrderableList.module.scss +0 -98
  146. package/src/components/OrderableList/OrderableList.tsx +0 -564
  147. package/src/components/OrderableList/index.tsx +0 -2
  148. package/src/components/PaginationIndicator/PaginationIndicator.tsx +0 -365
  149. package/src/components/PaginationIndicator/index.tsx +0 -2
  150. package/src/components/Parallax/Parallax.module.scss +0 -28
  151. package/src/components/Parallax/Parallax.tsx +0 -225
  152. package/src/components/Parallax/index.tsx +0 -2
  153. package/src/components/Parallax/math/helpers.ts +0 -289
  154. package/src/components/PasswordInput/PasswordInput.module.scss +0 -17
  155. package/src/components/PasswordInput/PasswordInput.tsx +0 -154
  156. package/src/components/PasswordInput/index.tsx +0 -2
  157. package/src/components/PingPongText/PingPongText.module.scss +0 -4
  158. package/src/components/PingPongText/PingPongText.tsx +0 -83
  159. package/src/components/PingPongText/index.tsx +0 -2
  160. package/src/components/PixelatedScan/PixelatedScan.module.scss +0 -86
  161. package/src/components/PixelatedScan/PixelatedScan.tsx +0 -175
  162. package/src/components/PixelatedScan/index.tsx +0 -2
  163. package/src/components/Portal/Portal.module.scss +0 -3
  164. package/src/components/Portal/Portal.tsx +0 -68
  165. package/src/components/Portal/index.tsx +0 -2
  166. package/src/components/ProgressBar/ProgressBar.module.scss +0 -44
  167. package/src/components/ProgressBar/ProgressBar.tsx +0 -124
  168. package/src/components/ProgressBar/index.tsx +0 -2
  169. package/src/components/ProgressTexts/ProgressTexts.module.scss +0 -37
  170. package/src/components/ProgressTexts/ProgressTexts.tsx +0 -85
  171. package/src/components/ProgressTexts/index.tsx +0 -2
  172. package/src/components/Radio/Radio.module.scss +0 -36
  173. package/src/components/Radio/Radio.tsx +0 -53
  174. package/src/components/Radio/index.tsx +0 -2
  175. package/src/components/SectionContainer/SectionContainer.module.scss +0 -30
  176. package/src/components/SectionContainer/SectionContainer.tsx +0 -49
  177. package/src/components/SectionContainer/index.tsx +0 -2
  178. package/src/components/Select/Select.module.scss +0 -58
  179. package/src/components/Select/Select.tsx +0 -192
  180. package/src/components/Select/index.tsx +0 -2
  181. package/src/components/Skeleton/Skeleton.module.scss +0 -21
  182. package/src/components/Skeleton/Skeleton.tsx +0 -29
  183. package/src/components/Skeleton/index.tsx +0 -2
  184. package/src/components/Spacing/Spacing.module.scss +0 -13
  185. package/src/components/Spacing/Spacing.tsx +0 -24
  186. package/src/components/Spacing/index.tsx +0 -2
  187. package/src/components/StaticScroller/StaticScroller.module.scss +0 -14
  188. package/src/components/StaticScroller/StaticScroller.tsx +0 -83
  189. package/src/components/StaticScroller/index.tsx +0 -2
  190. package/src/components/Switch/Switch.module.scss +0 -43
  191. package/src/components/Switch/Switch.tsx +0 -41
  192. package/src/components/Switch/index.tsx +0 -2
  193. package/src/components/Table/Table.module.scss +0 -76
  194. package/src/components/Table/Table.tsx +0 -152
  195. package/src/components/Table/index.tsx +0 -2
  196. package/src/components/Tabs/Tabs.module.scss +0 -40
  197. package/src/components/Tabs/Tabs.tsx +0 -104
  198. package/src/components/Tabs/index.tsx +0 -2
  199. package/src/components/Text/Text.module.scss +0 -81
  200. package/src/components/Text/Text.tsx +0 -42
  201. package/src/components/Text/index.tsx +0 -2
  202. package/src/components/Transition/MasksFactory/DiagonalReveal.tsx +0 -47
  203. package/src/components/Transition/MasksFactory/DiagonalSquareToBalls.tsx +0 -78
  204. package/src/components/Transition/MasksFactory/PhysicsSquares.tsx +0 -106
  205. package/src/components/Transition/MasksFactory/SquareToBalls.tsx +0 -66
  206. package/src/components/Transition/MasksFactory/utils.ts +0 -35
  207. package/src/components/Transition/Transition.module.scss +0 -211
  208. package/src/components/Transition/Transition.tsx +0 -495
  209. package/src/components/Transition/index.tsx +0 -2
  210. package/src/components/UncontrolledTransition/UncontrolledTransition.ai.md +0 -9
  211. package/src/components/UncontrolledTransition/UncontrolledTransition.sample.tsx +0 -34
  212. package/src/components/UncontrolledTransition/UncontrolledTransition.tsx +0 -143
  213. package/src/components/UncontrolledTransition/index.tsx +0 -2
  214. package/src/components/WalletConnectionWrapper/WalletConnectionWrapper.tsx +0 -212
  215. package/src/components/WalletConnectionWrapper/index.tsx +0 -2
  216. package/src/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.module.scss +0 -5
  217. package/src/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.tsx +0 -52
  218. package/src/components/utilitary/ScrollAndFocusLock/index.tsx +0 -2
  219. package/src/context/AsyncProcess.tsx +0 -107
  220. package/src/context/ContextAsyncControl.tsx +0 -89
  221. package/src/context/CustomBrowserRouter.tsx +0 -55
  222. package/src/context/OneUIProvider.tsx +0 -308
  223. package/src/hooks/logs/useDependencyChangeDetection.ts +0 -25
  224. package/src/hooks/logs/useIsMounting.ts +0 -7
  225. package/src/hooks/persistence/useLocalStorage.ts +0 -45
  226. package/src/hooks/shims/ObjectWatchShim.ts +0 -56
  227. package/src/hooks/ui/useAdaptiveImage.tsx +0 -36
  228. package/src/hooks/ui/useAlternating.tsx +0 -22
  229. package/src/hooks/ui/useBreakpoint.tsx +0 -21
  230. package/src/hooks/ui/useCustomScrollbar.module.scss +0 -20
  231. package/src/hooks/ui/useCustomScrollbar.tsx +0 -22
  232. package/src/hooks/ui/useEffectIf.ts +0 -11
  233. package/src/hooks/ui/useMouseHover.tsx +0 -26
  234. package/src/hooks/ui/usePaginationControls.module.scss +0 -16
  235. package/src/hooks/ui/usePaginationControls.tsx +0 -176
  236. package/src/hooks/ui/useSnapToViewport.module.scss +0 -6
  237. package/src/hooks/ui/useSnapToViewport.ts +0 -28
  238. package/src/hooks/ui/useTilt.tsx +0 -219
  239. package/src/hooks/ui/useZoomable.module.scss +0 -34
  240. package/src/hooks/ui/useZoomable.tsx +0 -144
  241. package/src/hooks/useAsyncControl.ai.md +0 -25
  242. package/src/hooks/useAsyncControl.ts +0 -101
  243. package/src/hooks/useContainedRepositioning.ts +0 -110
  244. package/src/hooks/useCustomHistory.ts +0 -14
  245. package/src/hooks/useElementFit.ts +0 -82
  246. package/src/hooks/useFirestoreWatch.ts +0 -54
  247. package/src/hooks/useForm.ts +0 -49
  248. package/src/hooks/useFreeze.ts +0 -12
  249. package/src/hooks/useHero.module.scss +0 -41
  250. package/src/hooks/useHero.ts +0 -514
  251. package/src/hooks/useIntersection.ts +0 -32
  252. package/src/hooks/useMergeRefs.ts +0 -29
  253. package/src/hooks/useObserve.ts +0 -24
  254. package/src/hooks/usePagination.ts +0 -228
  255. package/src/hooks/usePooledOperation.ts +0 -54
  256. package/src/hooks/usePooling.ts +0 -46
  257. package/src/hooks/useRebound.ts +0 -23
  258. package/src/hooks/useShortIntl.ai.md +0 -5
  259. package/src/hooks/useShortIntl.ts +0 -97
  260. package/src/hooks/utility/useAsyncMemo.ts +0 -43
  261. package/src/hooks/utility/useDepChange.ts +0 -11
  262. package/src/hooks/utility/useEvents.ts +0 -33
  263. package/src/hooks/utility/useImmediate.ts +0 -8
  264. package/src/hooks/utility/useManualInit.ts +0 -24
  265. package/src/hooks/utility/useModule.ts +0 -15
  266. package/src/hooks/utility/useQuery.ts +0 -15
  267. package/src/hooks/utility/useUniqueEffect.ts +0 -22
  268. package/src/index.preprocess.ts +0 -82
  269. package/src/index.ts +0 -229
  270. package/src/models/DebugLogger.ts +0 -7
  271. package/src/models/GenericContract.ts +0 -169
  272. package/src/models/Orbs.ts +0 -97
  273. package/src/reac-app-env.d.ts +0 -6
  274. package/src/storybook/assets/video/txt-reversed.mp4 +0 -0
  275. package/src/storybookUtils/index.tsx +0 -53
  276. package/src/test.tsx +0 -0
  277. package/src/type-utils.ts +0 -49
  278. package/src/types.ts +0 -199
  279. package/src/utility.d.ts +0 -70
  280. package/src/utils/blockchain.ts +0 -43
  281. package/src/utils/e2e.ts +0 -55
  282. package/src/utils/flatten.ts +0 -17
  283. package/src/utils/formatters.ts +0 -36
  284. package/src/utils/html.utils.ts +0 -3
  285. package/src/utils/ownEvent.ts +0 -8
  286. 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";