@onepercentio/one-ui 1.3.5 → 1.4.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 (229) hide show
  1. package/WebpackConfigs/email-templates.js +99 -0
  2. package/dist/components/AdaptiveButton/AdaptiveButton.js +26 -24
  3. package/dist/components/AdaptiveButton/index.js +25 -22
  4. package/dist/components/AdaptiveContainer/AdaptiveContainer.js +140 -139
  5. package/dist/components/AdaptiveContainer/index.js +25 -22
  6. package/dist/components/AdaptiveDialog/AdaptiveDialog.js +76 -42
  7. package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +17 -3
  8. package/dist/components/AdaptiveDialog/index.js +25 -22
  9. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +70 -54
  10. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +10 -9
  11. package/dist/components/AdaptiveSidebar/index.js +25 -22
  12. package/dist/components/AnchoredTooltip/AnchoredTooltip.js +155 -154
  13. package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +13 -10
  14. package/dist/components/AnchoredTooltip/index.js +25 -22
  15. package/dist/components/AnimatedEntrance/AnimatedEntrance.js +154 -121
  16. package/dist/components/AnimatedEntrance/index.js +25 -22
  17. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +80 -40
  18. package/dist/components/AsyncTriggerContainer/index.js +25 -22
  19. package/dist/components/AsyncWrapper/AsyncWrapper.js +34 -16
  20. package/dist/components/AsyncWrapper/index.js +25 -22
  21. package/dist/components/Avatar/Avatar.js +33 -18
  22. package/dist/components/Avatar/index.js +25 -22
  23. package/dist/components/BucketFill/BucketFill.js +49 -36
  24. package/dist/components/BucketFill/index.js +25 -22
  25. package/dist/components/Button/Button.js +30 -22
  26. package/dist/components/Button/index.js +25 -22
  27. package/dist/components/Card/Card.js +17 -10
  28. package/dist/components/Card/index.js +25 -22
  29. package/dist/components/Chart/Chart.js +25 -22
  30. package/dist/components/Chart/Chart.logic.js +10 -9
  31. package/dist/components/Chart/Chart.types.js +5 -2
  32. package/dist/components/Chart/Chart.view.js +174 -98
  33. package/dist/components/Chart/index.js +25 -22
  34. package/dist/components/CheckBox/CheckBox.js +48 -30
  35. package/dist/components/CheckBox/CheckBox.module.scss +5 -0
  36. package/dist/components/CheckBox/index.js +25 -22
  37. package/dist/components/CodeInput/CodeInput.js +75 -93
  38. package/dist/components/CodeInput/index.js +25 -22
  39. package/dist/components/Collapsable/Collapsable.js +164 -134
  40. package/dist/components/Collapsable/index.js +25 -22
  41. package/dist/components/Countdown/Countdown.js +69 -86
  42. package/dist/components/Countdown/index.js +25 -22
  43. package/dist/components/CurrencyInput/CurrencyInput.hook.js +25 -25
  44. package/dist/components/CurrencyInput/CurrencyInput.js +48 -29
  45. package/dist/components/CurrencyInput/index.js +25 -22
  46. package/dist/components/Divider/Divider.js +16 -10
  47. package/dist/components/Divider/index.js +25 -22
  48. package/dist/components/EmailInput/EmailInput.js +37 -23
  49. package/dist/components/EmailInput/index.js +25 -22
  50. package/dist/components/FadeIn/FadeIn.js +57 -51
  51. package/dist/components/FadeIn/index.js +25 -22
  52. package/dist/components/FileInput/FileInput.js +45 -38
  53. package/dist/components/FileInput/View/BigFactory/BigFactory.js +48 -16
  54. package/dist/components/FileInput/View/BigFactory/index.js +25 -22
  55. package/dist/components/FileInput/View/Compact/Compact.js +114 -46
  56. package/dist/components/FileInput/View/Compact/index.js +25 -22
  57. package/dist/components/FileInput/View/View.types.js +5 -2
  58. package/dist/components/FileInput/index.js +25 -22
  59. package/dist/components/FlowController/FlowController.js +56 -25
  60. package/dist/components/FlowController/index.js +25 -22
  61. package/dist/components/Form/Form.hook.js +217 -202
  62. package/dist/components/Form/Form.js +103 -65
  63. package/dist/components/Form/Form.types.js +39 -53
  64. package/dist/components/Form/FormField/Extensions/DateField/DateField.js +68 -53
  65. package/dist/components/Form/FormField/Extensions/DateField/index.js +25 -22
  66. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +81 -78
  67. package/dist/components/Form/FormField/Extensions/PhoneField/index.js +25 -22
  68. package/dist/components/Form/FormField/FormField.js +307 -148
  69. package/dist/components/Form/FormField/FormField.types.js +10 -7
  70. package/dist/components/Form/FormField/index.js +25 -22
  71. package/dist/components/Form/index.js +25 -22
  72. package/dist/components/Freeze/Freeze.js +13 -9
  73. package/dist/components/Freeze/index.js +25 -22
  74. package/dist/components/HSForms/HSForms.js +48 -69
  75. package/dist/components/HSForms/index.js +25 -22
  76. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +19 -10
  77. package/dist/components/HeaderCloseBtn/index.js +25 -22
  78. package/dist/components/InfinityScroll/InfinityScroll.js +114 -94
  79. package/dist/components/InfinityScroll/index.js +25 -22
  80. package/dist/components/Input/Input.js +99 -57
  81. package/dist/components/Input/index.js +25 -22
  82. package/dist/components/InstantCounter/InstantCounter.js +49 -31
  83. package/dist/components/InstantCounter/index.js +25 -22
  84. package/dist/components/LavaLamp/LavaLamp.data.js +83 -86
  85. package/dist/components/LavaLamp/LavaLamp.js +119 -32
  86. package/dist/components/LavaLamp/index.js +25 -22
  87. package/dist/components/LavaLamp/v2/LavaLamp.js +149 -156
  88. package/dist/components/LinkToId/LinkToId.js +39 -27
  89. package/dist/components/LinkToId/index.js +25 -22
  90. package/dist/components/Loader/Loader.js +21 -22
  91. package/dist/components/Loader/index.js +25 -22
  92. package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +27 -15
  93. package/dist/components/LoaderDotsIndicator/index.js +25 -22
  94. package/dist/components/LoopableVideo/LoopableVideo.js +33 -25
  95. package/dist/components/LoopableVideo/index.js +25 -22
  96. package/dist/components/MainGrid/MainGrid.js +46 -23
  97. package/dist/components/MainGrid/index.js +25 -22
  98. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +27 -23
  99. package/dist/components/MutableHamburgerButton/index.js +25 -22
  100. package/dist/components/Notification/Notification.js +18 -11
  101. package/dist/components/Notification/index.js +25 -22
  102. package/dist/components/NumberInput/NumberInput.js +43 -42
  103. package/dist/components/NumberInput/index.js +25 -22
  104. package/dist/components/OrderableList/OrderableList.js +416 -404
  105. package/dist/components/OrderableList/index.js +25 -22
  106. package/dist/components/PaginationIndicator/PaginationIndicator.js +243 -198
  107. package/dist/components/PaginationIndicator/index.js +25 -22
  108. package/dist/components/Parallax/Parallax.js +156 -130
  109. package/dist/components/Parallax/index.js +25 -22
  110. package/dist/components/Parallax/math/helpers.js +120 -216
  111. package/dist/components/PasswordInput/PasswordInput.js +88 -71
  112. package/dist/components/PasswordInput/index.js +25 -22
  113. package/dist/components/PingPongText/PingPongText.js +63 -67
  114. package/dist/components/PingPongText/index.js +25 -22
  115. package/dist/components/PixelatedScan/PixelatedScan.js +126 -74
  116. package/dist/components/PixelatedScan/index.js +25 -22
  117. package/dist/components/Portal/Portal.js +46 -43
  118. package/dist/components/Portal/index.js +25 -22
  119. package/dist/components/ProgressBar/ProgressBar.js +105 -47
  120. package/dist/components/ProgressBar/index.js +25 -22
  121. package/dist/components/ProgressTexts/ProgressTexts.js +43 -29
  122. package/dist/components/ProgressTexts/index.js +25 -22
  123. package/dist/components/Radio/Radio.js +51 -28
  124. package/dist/components/Radio/index.js +25 -22
  125. package/dist/components/Radio/variants/Checkmark/Checkmark.js +18 -12
  126. package/dist/components/Radio/variants/Checkmark/index.js +25 -22
  127. package/dist/components/Radio/variants/Generic/Generic.js +20 -12
  128. package/dist/components/Radio/variants/Generic/index.js +25 -22
  129. package/dist/components/ScrollendIndicator/ScrollendIndicator.js +118 -0
  130. package/dist/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
  131. package/dist/components/SectionContainer/SectionContainer.js +38 -16
  132. package/dist/components/SectionContainer/index.js +25 -22
  133. package/dist/components/Select/Select.js +128 -95
  134. package/dist/components/Select/index.js +25 -22
  135. package/dist/components/Skeleton/Skeleton.js +22 -14
  136. package/dist/components/Skeleton/index.js +25 -22
  137. package/dist/components/Slider/Slider.js +63 -59
  138. package/dist/components/Slider/index.js +25 -22
  139. package/dist/components/Spacing/Spacing.js +25 -17
  140. package/dist/components/Spacing/index.js +25 -22
  141. package/dist/components/StaticScroller/StaticScroller.js +65 -61
  142. package/dist/components/StaticScroller/index.js +25 -22
  143. package/dist/components/Switch/Switch.js +40 -26
  144. package/dist/components/Switch/index.js +25 -22
  145. package/dist/components/Table/Table.js +107 -56
  146. package/dist/components/Table/index.js +25 -22
  147. package/dist/components/Tabs/Tabs.js +59 -54
  148. package/dist/components/Tabs/index.js +25 -22
  149. package/dist/components/Text/Text.js +35 -30
  150. package/dist/components/Text/index.js +25 -22
  151. package/dist/components/Transition/MasksFactory/DiagonalReveal.js +46 -12
  152. package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +71 -49
  153. package/dist/components/Transition/MasksFactory/PhysicsSquares.js +89 -79
  154. package/dist/components/Transition/MasksFactory/SquareToBalls.js +60 -41
  155. package/dist/components/Transition/MasksFactory/utils.js +25 -27
  156. package/dist/components/Transition/Transition.js +298 -319
  157. package/dist/components/Transition/index.js +25 -22
  158. package/dist/components/UncontrolledTransition/UncontrolledTransition.js +101 -93
  159. package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +27 -19
  160. package/dist/components/UncontrolledTransition/index.js +25 -22
  161. package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +101 -94
  162. package/dist/components/WalletConnectionWrapper/index.js +25 -22
  163. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +53 -43
  164. package/dist/components/utilitary/ScrollAndFocusLock/index.js +25 -22
  165. package/dist/context/AsyncProcess.js +68 -41
  166. package/dist/context/ContextAsyncControl.js +72 -51
  167. package/dist/context/CustomBrowserRouter.js +44 -30
  168. package/dist/context/OneUIProvider.js +102 -108
  169. package/dist/hooks/logs/useDependencyChangeDetection.js +17 -16
  170. package/dist/hooks/logs/useIsMounting.js +10 -7
  171. package/dist/hooks/persistence/useLocalStorage.js +41 -40
  172. package/dist/hooks/shims/ObjectWatchShim.js +47 -46
  173. package/dist/hooks/ui/useAdaptiveImage.js +29 -34
  174. package/dist/hooks/ui/useAlternating.js +18 -18
  175. package/dist/hooks/ui/useBreakpoint.js +19 -18
  176. package/dist/hooks/ui/useCustomScrollbar.js +26 -21
  177. package/dist/hooks/ui/useEffectIf.js +11 -9
  178. package/dist/hooks/ui/useMouseHover.js +22 -19
  179. package/dist/hooks/ui/usePaginationControls.js +129 -136
  180. package/dist/hooks/ui/useSnapToViewport.js +20 -19
  181. package/dist/hooks/ui/useTilt.js +145 -129
  182. package/dist/hooks/ui/useZoomable.js +123 -116
  183. package/dist/hooks/useAsyncControl.js +67 -52
  184. package/dist/hooks/useContainedRepositioning.js +75 -71
  185. package/dist/hooks/useCustomHistory.js +21 -12
  186. package/dist/hooks/useElementFit.js +43 -48
  187. package/dist/hooks/useFirestoreWatch.js +41 -41
  188. package/dist/hooks/useFreeze.js +10 -8
  189. package/dist/hooks/useHero.js +249 -271
  190. package/dist/hooks/useIntersection.js +32 -27
  191. package/dist/hooks/useMergeRefs.js +27 -24
  192. package/dist/hooks/useObserve.js +17 -14
  193. package/dist/hooks/usePagination.js +147 -164
  194. package/dist/hooks/usePooledOperation.js +41 -57
  195. package/dist/hooks/usePooling.js +46 -49
  196. package/dist/hooks/useRebound.js +23 -19
  197. package/dist/hooks/useShortIntl.js +72 -50
  198. package/dist/hooks/utility/useAsyncMemo.js +36 -42
  199. package/dist/hooks/utility/useDepChange.js +14 -12
  200. package/dist/hooks/utility/useEvents.js +26 -21
  201. package/dist/hooks/utility/useImmediate.js +8 -5
  202. package/dist/hooks/utility/useManualInit.js +19 -17
  203. package/dist/hooks/utility/useModule.js +12 -9
  204. package/dist/hooks/utility/useQuery.js +13 -7
  205. package/dist/hooks/utility/useUniqueEffect.js +17 -17
  206. package/dist/index.js +2159 -349
  207. package/dist/index.preprocess.js +35 -72
  208. package/dist/models/DebugLogger.js +8 -5
  209. package/dist/models/GenericContract.js +42 -13
  210. package/dist/models/ImageScales.js +13 -10
  211. package/dist/models/Orbs.js +53 -47
  212. package/dist/storybookUtils/index.js +40 -39
  213. package/dist/type-utils.js +5 -2
  214. package/dist/types.js +5 -2
  215. package/dist/utils/blockchain.js +35 -54
  216. package/dist/utils/e2e.js +21 -11
  217. package/dist/utils/flatten.js +15 -12
  218. package/dist/utils/formatters.js +48 -43
  219. package/dist/utils/html.utils.js +12 -6
  220. package/dist/utils/ownEvent.js +9 -7
  221. package/dist/utils/test.js +13 -11
  222. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.d.ts +10 -0
  223. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js +68 -0
  224. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js.map +1 -0
  225. package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
  226. package/dist-ts/index.d.ts +1 -0
  227. package/dist-ts/index.js +1 -0
  228. package/dist-ts/index.js.map +1 -1
  229. package/package.json +1 -1
@@ -1,333 +1,311 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
17
5
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __rest = (this && this.__rest) || function (s, e) {
26
- var t = {};
27
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
- t[p] = s[p];
29
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
- t[p[i]] = s[p[i]];
33
- }
34
- return t;
35
- };
36
- var __importDefault = (this && this.__importDefault) || function (mod) {
37
- return (mod && mod.__esModule) ? mod : { "default": mod };
38
- };
39
- Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.TransitionAnimationTypes = void 0;
41
- const jsx_runtime_1 = require("react/jsx-runtime");
42
- const react_1 = __importStar(require("react"));
43
- const Transition_module_scss_1 = __importDefault(require("./Transition.module.scss"));
6
+ exports.default = exports.TransitionAnimationTypes = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _TransitionModule = _interopRequireDefault(require("./Transition.module.scss"));
9
+ const _excluded = ["step", "contentStyle", "contentClassName", "children", "className", "onDiscardStep", "lockTransitionWidth", "lockTransitionHeight"];
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
18
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
19
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
20
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
44
21
  function TransitionClasses(type) {
45
- switch (type) {
46
- case TransitionAnimationTypes.COIN_FLIP:
47
- return {
48
- backward: {
49
- elementExiting: Transition_module_scss_1.default.flipBottomUpOut,
50
- elementEntering: Transition_module_scss_1.default.flipBottomUpIn,
51
- },
52
- forward: {
53
- elementExiting: Transition_module_scss_1.default.flipBottomUpOut,
54
- elementEntering: Transition_module_scss_1.default.flipBottomUpIn,
55
- },
56
- };
57
- case TransitionAnimationTypes.FADE:
58
- return {
59
- backward: {
60
- elementExiting: Transition_module_scss_1.default.fadeOutAbsolute,
61
- elementEntering: Transition_module_scss_1.default.fadeInDelayed,
62
- },
63
- forward: {
64
- elementExiting: Transition_module_scss_1.default.fadeOutAbsolute,
65
- elementEntering: Transition_module_scss_1.default.fadeInDelayed,
66
- },
67
- };
68
- case TransitionAnimationTypes.SLIDE:
69
- return {
70
- backward: {
71
- elementEntering: Transition_module_scss_1.default.entranceLeft,
72
- elementExiting: "",
73
- },
74
- forward: {
75
- elementEntering: "",
76
- elementExiting: Transition_module_scss_1.default.exitLeft,
77
- },
78
- };
79
- case TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN:
80
- case TransitionAnimationTypes.POP_FROM_ELEMENT_ID:
81
- return {
82
- backward: {
83
- elementEntering: Transition_module_scss_1.default.fadeIn,
84
- elementExiting: Transition_module_scss_1.default.scaleOut,
85
- },
86
- forward: {
87
- elementEntering: Transition_module_scss_1.default.scaleIn,
88
- elementExiting: Transition_module_scss_1.default.fadeOut,
89
- },
90
- };
91
- case TransitionAnimationTypes.MASK:
92
- return {
93
- backward: {
94
- elementEntering: Transition_module_scss_1.default.stubEntering,
95
- elementExiting: Transition_module_scss_1.default.stub,
96
- },
97
- forward: {
98
- elementEntering: Transition_module_scss_1.default.stubEntering,
99
- elementExiting: Transition_module_scss_1.default.stub,
100
- },
101
- };
102
- }
22
+ switch (type) {
23
+ case TransitionAnimationTypes.COIN_FLIP:
24
+ return {
25
+ backward: {
26
+ elementExiting: _TransitionModule.default.flipBottomUpOut,
27
+ elementEntering: _TransitionModule.default.flipBottomUpIn
28
+ },
29
+ forward: {
30
+ elementExiting: _TransitionModule.default.flipBottomUpOut,
31
+ elementEntering: _TransitionModule.default.flipBottomUpIn
32
+ }
33
+ };
34
+ case TransitionAnimationTypes.FADE:
35
+ return {
36
+ backward: {
37
+ elementExiting: _TransitionModule.default.fadeOutAbsolute,
38
+ elementEntering: _TransitionModule.default.fadeInDelayed
39
+ },
40
+ forward: {
41
+ elementExiting: _TransitionModule.default.fadeOutAbsolute,
42
+ elementEntering: _TransitionModule.default.fadeInDelayed
43
+ }
44
+ };
45
+ case TransitionAnimationTypes.SLIDE:
46
+ return {
47
+ backward: {
48
+ elementEntering: _TransitionModule.default.entranceLeft,
49
+ elementExiting: ""
50
+ },
51
+ forward: {
52
+ elementEntering: "",
53
+ elementExiting: _TransitionModule.default.exitLeft
54
+ }
55
+ };
56
+ case TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN:
57
+ case TransitionAnimationTypes.POP_FROM_ELEMENT_ID:
58
+ return {
59
+ backward: {
60
+ elementEntering: _TransitionModule.default.fadeIn,
61
+ elementExiting: _TransitionModule.default.scaleOut
62
+ },
63
+ forward: {
64
+ elementEntering: _TransitionModule.default.scaleIn,
65
+ elementExiting: _TransitionModule.default.fadeOut
66
+ }
67
+ };
68
+ case TransitionAnimationTypes.MASK:
69
+ return {
70
+ backward: {
71
+ elementEntering: _TransitionModule.default.stubEntering,
72
+ elementExiting: _TransitionModule.default.stub
73
+ },
74
+ forward: {
75
+ elementEntering: _TransitionModule.default.stubEntering,
76
+ elementExiting: _TransitionModule.default.stub
77
+ }
78
+ };
79
+ }
103
80
  }
104
- function ChildrenWrapperFactory(func, key, externalPropsContainer,
105
- /** This is used to prevent newer "duplicated" keys from being removed after the new element finished animation */
81
+ function ChildrenWrapperFactory(func, key, externalPropsContainer, /** This is used to prevent newer "duplicated" keys from being removed after the new element finished animation */
106
82
  timestamp, toRemoveKeys) {
107
- func.createdAt = timestamp;
108
- func.associatedKey = key;
109
- func.toRemoveKeys = toRemoveKeys;
110
- func.externalProps = externalPropsContainer;
111
- return func;
83
+ func.createdAt = timestamp;
84
+ func.associatedKey = key;
85
+ func.toRemoveKeys = toRemoveKeys;
86
+ func.externalProps = externalPropsContainer;
87
+ return func;
112
88
  }
113
- function _Transition(_a, _containerRef) {
114
- var _b;
115
- var { step, contentStyle, contentClassName = "", children, className, onDiscardStep, lockTransitionWidth = false, lockTransitionHeight = false } = _a, props = __rest(_a, ["step", "contentStyle", "contentClassName", "children", "className", "onDiscardStep", "lockTransitionWidth", "lockTransitionHeight"]);
116
- const containerRef = (0, react_1.useMemo)(() => _containerRef || (0, react_1.createRef)(), [_containerRef]);
117
- const preTransitionDetails = (0, react_1.useRef)({
118
- transformOrigin: "initial",
119
- });
120
- const testId = (_b = props["data-testid"]) !== null && _b !== void 0 ? _b : "transition-container";
121
- const [childrenWrappers, setChildrenWrappers] = (0, react_1.useState)(() => {
122
- var _a;
123
- const externalProps = {
124
- "data-testid": testId,
125
- key: String(((_a = children[step]) === null || _a === void 0 ? void 0 : _a.key) || step),
126
- style: contentStyle,
127
- className: contentClassName,
128
- };
129
- const func = ChildrenWrapperFactory(({ children }) => (0, jsx_runtime_1.jsx)("div", Object.assign({}, externalProps, { children: children })), children[step].key || step, externalProps, Date.now(), []);
130
- return [func];
131
- });
132
- const prevStep = (0, react_1.useRef)(step);
133
- const prevChild = (0, react_1.useRef)(children[step]);
134
- (0, react_1.useEffect)(() => () => {
135
- prevChild.current = children[step];
136
- });
137
- (0, react_1.useEffect)(() => {
138
- var _a, _b, _c, _d, _e;
139
- containerRef.current.style.overflow = "hidden";
140
- const transitionClasses = props.transitionType === TransitionAnimationTypes.CUSTOM
141
- ? props.config
142
- : TransitionClasses(props.transitionType || TransitionAnimationTypes.SLIDE);
143
- if (prevChild.current !== null &&
144
- ((_a = children[step]) === null || _a === void 0 ? void 0 : _a.key) === ((_b = prevChild.current) === null || _b === void 0 ? void 0 : _b.key) // I'm rendering the same screen
145
- ) {
146
- return () => {
147
- prevStep.current = step;
148
- };
149
- }
150
- const key = ((_c = children[step]) === null || _c === void 0 ? void 0 : _c.key) || step;
151
- if (prevStep.current !== step && lockTransitionWidth)
152
- containerRef.current.style.width = `${containerRef.current.clientWidth}px`;
153
- if (prevStep.current !== step && lockTransitionHeight)
154
- containerRef.current.style.height = `${containerRef.current.clientHeight}px`;
155
- const transitionMask = props.transitionType === TransitionAnimationTypes.MASK
156
- ? props.maskFactory(containerRef.current)
157
- : "";
158
- const insertedAt = Date.now();
159
- /** This runs on backwards */
160
- if (prevStep.current > step) {
161
- const stepToRemove = prevStep.current;
162
- const prevKeyToRemove = ((_d = prevChild.current) === null || _d === void 0 ? void 0 : _d.key) || stepToRemove;
163
- setChildrenWrappers((screensBeforeChangingStep) => {
164
- const enteringScreenRef = (0, react_1.createRef)();
165
- const [FirstNextScreen, ...restOfScreens] = screensBeforeChangingStep.filter((a) => (a === null || a === void 0 ? void 0 : a.associatedKey) !== String(key));
166
- if (FirstNextScreen) {
167
- Object.assign(FirstNextScreen.externalProps, {
168
- "data-testid": testId,
169
- style: Object.assign(Object.assign({}, contentStyle), { WebkitMaskImage: transitionMask }),
170
- className: `${transitionClasses.backward.elementExiting}`,
171
- });
172
- }
173
- function animationEndListener(event) {
174
- var _a, _b;
175
- if (event.target !== event.currentTarget)
176
- return;
177
- const isAnimationFromExpectedState = (_a = enteringScreenRef.current) === null || _a === void 0 ? void 0 : _a.classList.contains(transitionClasses.backward.elementEntering);
178
- (_b = enteringScreenRef.current) === null || _b === void 0 ? void 0 : _b.classList.remove(transitionClasses.backward.elementEntering);
179
- setChildrenWrappers((screensAfterTheCurrentStepEntered) => {
180
- if (onDiscardStep) {
181
- if (isAnimationFromExpectedState)
182
- onDiscardStep(prevKeyToRemove, insertedAt);
183
- if (FirstNextScreen && FirstNextScreen.toRemoveKeys)
184
- FirstNextScreen.toRemoveKeys.forEach(onDiscardStep);
185
- }
186
- return screensAfterTheCurrentStepEntered.filter((s) => {
187
- var _a;
188
- const shouldKeep = ((s === null || s === void 0 ? void 0 : s.associatedKey) !== String(prevKeyToRemove) &&
189
- !((_a = FirstNextScreen === null || FirstNextScreen === void 0 ? void 0 : FirstNextScreen.toRemoveKeys) === null || _a === void 0 ? void 0 : _a.some((k) => String(k) === String(s === null || s === void 0 ? void 0 : s.associatedKey)))) ||
190
- s.createdAt > insertedAt;
191
- return shouldKeep;
192
- });
193
- });
194
- event.currentTarget.removeEventListener("animationend", animationEndListener);
195
- }
196
- const propsContainer = {
197
- ref: enteringScreenRef,
198
- "data-testid": testId,
199
- key,
200
- className: `${transitionClasses.backward.elementEntering} ${contentClassName}`,
201
- style: Object.assign({}, contentStyle),
202
- onAnimationEnd: animationEndListener,
203
- };
204
- const newWrapper = ChildrenWrapperFactory(({ children }) => {
205
- return (0, jsx_runtime_1.jsx)("div", Object.assign({}, propsContainer, { children: children }));
206
- }, key, propsContainer, insertedAt, [prevKeyToRemove, ...((FirstNextScreen === null || FirstNextScreen === void 0 ? void 0 : FirstNextScreen.toRemoveKeys) || [])]);
207
- if (FirstNextScreen)
208
- return [
209
- newWrapper,
210
- FirstNextScreen ||
211
- ChildrenWrapperFactory(() => (0, jsx_runtime_1.jsx)(react_1.default.Fragment, {}), "", {}, insertedAt),
212
- ...restOfScreens,
213
- ];
214
- else
215
- return [newWrapper];
216
- });
89
+ function _Transition(_ref, _containerRef) {
90
+ var _dataTestid;
91
+ let {
92
+ step,
93
+ contentStyle,
94
+ contentClassName = "",
95
+ children,
96
+ className,
97
+ onDiscardStep,
98
+ lockTransitionWidth = false,
99
+ lockTransitionHeight = false
100
+ } = _ref,
101
+ props = _objectWithoutProperties(_ref, _excluded);
102
+ const containerRef = (0, _react.useMemo)(() => _containerRef || /*#__PURE__*/(0, _react.createRef)(), [_containerRef]);
103
+ const preTransitionDetails = (0, _react.useRef)({
104
+ transformOrigin: "initial"
105
+ });
106
+ const testId = (_dataTestid = props["data-testid"]) !== null && _dataTestid !== void 0 ? _dataTestid : "transition-container";
107
+ const [childrenWrappers, setChildrenWrappers] = (0, _react.useState)(() => {
108
+ var _children$step;
109
+ const externalProps = {
110
+ key: String(((_children$step = children[step]) === null || _children$step === void 0 ? void 0 : _children$step.key) || step),
111
+ style: contentStyle,
112
+ className: contentClassName
113
+ };
114
+ const func = ChildrenWrapperFactory(_ref2 => {
115
+ let {
116
+ children
117
+ } = _ref2;
118
+ return /*#__PURE__*/_react.default.createElement("div", externalProps, children);
119
+ }, children[step].key || step, externalProps, Date.now(), []);
120
+ return [func];
121
+ });
122
+ const prevStep = (0, _react.useRef)(step);
123
+ const prevChild = (0, _react.useRef)(children[step]);
124
+ (0, _react.useEffect)(() => () => {
125
+ prevChild.current = children[step];
126
+ });
127
+ (0, _react.useEffect)(() => {
128
+ var _children$step2, _prevChild$current, _children$step3;
129
+ containerRef.current.style.overflow = "hidden";
130
+ const transitionClasses = props.transitionType === TransitionAnimationTypes.CUSTOM ? props.config : TransitionClasses(props.transitionType || TransitionAnimationTypes.SLIDE);
131
+ if (prevChild.current !== null && ((_children$step2 = children[step]) === null || _children$step2 === void 0 ? void 0 : _children$step2.key) === ((_prevChild$current = prevChild.current) === null || _prevChild$current === void 0 ? void 0 : _prevChild$current.key) // I'm rendering the same screen
132
+ ) {
133
+ return () => {
134
+ prevStep.current = step;
135
+ };
136
+ }
137
+ const key = ((_children$step3 = children[step]) === null || _children$step3 === void 0 ? void 0 : _children$step3.key) || step;
138
+ if (prevStep.current !== step && lockTransitionWidth) containerRef.current.style.width = "".concat(containerRef.current.clientWidth, "px");
139
+ if (prevStep.current !== step && lockTransitionHeight) containerRef.current.style.height = "".concat(containerRef.current.clientHeight, "px");
140
+ const transitionMask = props.transitionType === TransitionAnimationTypes.MASK ? props.maskFactory(containerRef.current) : "";
141
+ const insertedAt = Date.now();
142
+
143
+ /** This runs on backwards */
144
+ if (prevStep.current > step) {
145
+ var _prevChild$current2;
146
+ const stepToRemove = prevStep.current;
147
+ const prevKeyToRemove = ((_prevChild$current2 = prevChild.current) === null || _prevChild$current2 === void 0 ? void 0 : _prevChild$current2.key) || stepToRemove;
148
+ setChildrenWrappers(screensBeforeChangingStep => {
149
+ const enteringScreenRef = /*#__PURE__*/(0, _react.createRef)();
150
+ const [FirstNextScreen, ...restOfScreens] = screensBeforeChangingStep.filter(a => (a === null || a === void 0 ? void 0 : a.associatedKey) !== String(key));
151
+ if (FirstNextScreen) {
152
+ Object.assign(FirstNextScreen.externalProps, {
153
+ style: _objectSpread(_objectSpread({}, contentStyle), {}, {
154
+ WebkitMaskImage: transitionMask
155
+ }),
156
+ className: "".concat(transitionClasses.backward.elementExiting)
157
+ });
217
158
  }
218
- else if (prevStep.current < step) {
219
- const stepToDelete = prevStep.current;
220
- const prevKeyToRemove = String(((_e = prevChild.current) === null || _e === void 0 ? void 0 : _e.key) || stepToDelete);
221
- setChildrenWrappers((screensBeforeChangingStep) => {
222
- const lastIndex = screensBeforeChangingStep.length - 1;
223
- const lastWrapper = screensBeforeChangingStep[lastIndex];
224
- const nextScreenRef = (0, react_1.createRef)();
225
- if (lastWrapper) {
226
- Object.assign(lastWrapper.externalProps, {
227
- "data-testid": testId,
228
- style: Object.assign(Object.assign({}, contentStyle), { WebkitMaskImage: transitionMask }),
229
- className: `${contentClassName} ${transitionClasses.forward.elementExiting}`,
230
- onAnimationEnd: (e) => {
231
- var _a;
232
- if (e.target !== e.currentTarget)
233
- return;
234
- if (transitionClasses.forward.elementEntering)
235
- (_a = nextScreenRef.current) === null || _a === void 0 ? void 0 : _a.classList.remove(transitionClasses.forward.elementEntering);
236
- if (onDiscardStep)
237
- onDiscardStep(prevKeyToRemove, insertedAt);
238
- setChildrenWrappers((screensAfterTheCurrentStepEntered) => {
239
- const nextState = screensAfterTheCurrentStepEntered.filter((s) => {
240
- const shouldMantain = (s === null || s === void 0 ? void 0 : s.associatedKey) !== String(prevKeyToRemove) ||
241
- s.createdAt > insertedAt;
242
- return shouldMantain;
243
- });
244
- return nextState;
245
- });
246
- },
247
- });
248
- }
249
- const propsContainer = {
250
- ref: nextScreenRef,
251
- "data-testid": testId,
252
- key,
253
- style: Object.assign({}, contentStyle),
254
- className: `${contentClassName} ${transitionClasses.forward.elementEntering}`,
255
- };
256
- const newWrapper = ChildrenWrapperFactory(({ children }) => {
257
- return (0, jsx_runtime_1.jsx)("div", Object.assign({}, propsContainer, { children: children }));
258
- }, key, propsContainer, insertedAt);
259
- return [
260
- ...screensBeforeChangingStep.slice(0, lastIndex),
261
- lastWrapper ||
262
- ChildrenWrapperFactory(() => (0, jsx_runtime_1.jsx)(react_1.default.Fragment, {}), "fallback", {}, insertedAt),
263
- newWrapper,
264
- ];
159
+ function animationEndListener(event) {
160
+ var _enteringScreenRef$cu, _enteringScreenRef$cu2;
161
+ if (event.target !== event.currentTarget) return;
162
+ const isAnimationFromExpectedState = (_enteringScreenRef$cu = enteringScreenRef.current) === null || _enteringScreenRef$cu === void 0 ? void 0 : _enteringScreenRef$cu.classList.contains(transitionClasses.backward.elementEntering);
163
+ (_enteringScreenRef$cu2 = enteringScreenRef.current) === null || _enteringScreenRef$cu2 === void 0 || _enteringScreenRef$cu2.classList.remove(transitionClasses.backward.elementEntering);
164
+ setChildrenWrappers(screensAfterTheCurrentStepEntered => {
165
+ if (onDiscardStep) {
166
+ if (isAnimationFromExpectedState) onDiscardStep(prevKeyToRemove, insertedAt);
167
+ if (FirstNextScreen && FirstNextScreen.toRemoveKeys) FirstNextScreen.toRemoveKeys.forEach(onDiscardStep);
168
+ }
169
+ return screensAfterTheCurrentStepEntered.filter(s => {
170
+ var _FirstNextScreen$toRe;
171
+ const shouldKeep = (s === null || s === void 0 ? void 0 : s.associatedKey) !== String(prevKeyToRemove) && !(FirstNextScreen !== null && FirstNextScreen !== void 0 && (_FirstNextScreen$toRe = FirstNextScreen.toRemoveKeys) !== null && _FirstNextScreen$toRe !== void 0 && _FirstNextScreen$toRe.some(k => String(k) === String(s === null || s === void 0 ? void 0 : s.associatedKey))) || s.createdAt > insertedAt;
172
+ return shouldKeep;
265
173
  });
174
+ });
175
+ event.currentTarget.removeEventListener("animationend", animationEndListener);
266
176
  }
267
- return () => {
268
- prevStep.current = step;
177
+ const propsContainer = {
178
+ ref: enteringScreenRef,
179
+ key,
180
+ className: "".concat(transitionClasses.backward.elementEntering, " ").concat(contentClassName),
181
+ style: _objectSpread({}, contentStyle),
182
+ onAnimationEnd: animationEndListener
269
183
  };
270
- }, [step]);
271
- (0, react_1.useEffect)(() => {
272
- if (childrenWrappers.length === 1 && lockTransitionWidth)
273
- containerRef.current.style.width = "";
274
- if (childrenWrappers.length === 1 && lockTransitionHeight)
275
- containerRef.current.style.height = "";
276
- }, [childrenWrappers.length !== 1]);
277
- (0, react_1.useEffect)(() => {
278
- if (props.transitionType === TransitionAnimationTypes.POP_FROM_ELEMENT_ID &&
279
- "elementId" in props) {
280
- const element = document.querySelector(`#${props.elementId}`);
281
- if (element) {
282
- const { clientWidth, clientHeight } = containerRef.current;
283
- const offsetX = element.clientLeft + element.offsetLeft + element.clientWidth / 2;
284
- const offsetY = element.clientTop + element.offsetTop + element.clientHeight / 2;
285
- const percentX = (offsetX * 100) / clientWidth;
286
- const percentY = (offsetY * 100) / clientHeight;
287
- preTransitionDetails.current.transformOrigin = `${percentX}% ${percentY}%`;
288
- Object.assign(containerRef.current.style, {
289
- transformOrigin: `${percentX}% ${percentY}%`,
184
+ const newWrapper = ChildrenWrapperFactory(_ref3 => {
185
+ let {
186
+ children
187
+ } = _ref3;
188
+ return /*#__PURE__*/_react.default.createElement("div", propsContainer, children);
189
+ }, key, propsContainer, insertedAt, [prevKeyToRemove, ...((FirstNextScreen === null || FirstNextScreen === void 0 ? void 0 : FirstNextScreen.toRemoveKeys) || [])]);
190
+ if (FirstNextScreen) return [newWrapper, FirstNextScreen || ChildrenWrapperFactory(() => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), "", {}, insertedAt), ...restOfScreens];else return [newWrapper];
191
+ });
192
+ } else if (prevStep.current < step) {
193
+ var _prevChild$current3;
194
+ const stepToDelete = prevStep.current;
195
+ const prevKeyToRemove = String(((_prevChild$current3 = prevChild.current) === null || _prevChild$current3 === void 0 ? void 0 : _prevChild$current3.key) || stepToDelete);
196
+ setChildrenWrappers(screensBeforeChangingStep => {
197
+ const lastIndex = screensBeforeChangingStep.length - 1;
198
+ const lastWrapper = screensBeforeChangingStep[lastIndex];
199
+ const nextScreenRef = /*#__PURE__*/(0, _react.createRef)();
200
+ if (lastWrapper) {
201
+ Object.assign(lastWrapper.externalProps, {
202
+ style: _objectSpread(_objectSpread({}, contentStyle), {}, {
203
+ WebkitMaskImage: transitionMask
204
+ }),
205
+ className: "".concat(contentClassName, " ").concat(transitionClasses.forward.elementExiting),
206
+ onAnimationEnd: e => {
207
+ var _nextScreenRef$curren;
208
+ if (e.target !== e.currentTarget) return;
209
+ if (transitionClasses.forward.elementEntering) (_nextScreenRef$curren = nextScreenRef.current) === null || _nextScreenRef$curren === void 0 || _nextScreenRef$curren.classList.remove(transitionClasses.forward.elementEntering);
210
+ if (onDiscardStep) onDiscardStep(prevKeyToRemove, insertedAt);
211
+ setChildrenWrappers(screensAfterTheCurrentStepEntered => {
212
+ const nextState = screensAfterTheCurrentStepEntered.filter(s => {
213
+ const shouldMantain = (s === null || s === void 0 ? void 0 : s.associatedKey) !== String(prevKeyToRemove) || s.createdAt > insertedAt;
214
+ return shouldMantain;
290
215
  });
216
+ return nextState;
217
+ });
291
218
  }
219
+ });
292
220
  }
293
- else {
294
- Object.assign(containerRef.current.style, preTransitionDetails.current);
295
- }
296
- if (childrenWrappers.length === 1) {
297
- containerRef.current.style.overflow = "";
298
- }
299
- }, [childrenWrappers.length]);
300
- const propsToSpread = Object.assign({}, props);
301
- delete propsToSpread.transitionType;
302
- delete propsToSpread.config;
303
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("section", Object.assign({}, propsToSpread, { onClick: (e) => {
304
- const { currentTarget: { offsetTop, offsetLeft, clientWidth, clientHeight }, clientX, clientY, } = e;
305
- const offsetX = clientX - offsetLeft;
306
- const offsetY = clientY - offsetTop;
307
- const percentX = (offsetX * 100) / clientWidth;
308
- const percentY = (offsetY * 100) / clientHeight;
309
- if (props.transitionType ===
310
- TransitionAnimationTypes.POP_FROM_ELEMENT_ID ||
311
- props.transitionType ===
312
- TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN)
313
- preTransitionDetails.current.transformOrigin = `${percentX}% ${percentY}%`;
314
- if (props.onClick)
315
- props.onClick(e);
316
- }, "data-testid": "transition-controller", ref: containerRef, className: `${Transition_module_scss_1.default.section} ${className}`, children: childrenWrappers.map((Wrapper) => {
317
- const childToRender = children.find((a, i) => ((a === null || a === void 0 ? void 0 : a.key) || i) === (Wrapper === null || Wrapper === void 0 ? void 0 : Wrapper.associatedKey));
318
- return ((0, jsx_runtime_1.jsx)(Wrapper, { children: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: childToRender }) }, `${Wrapper.associatedKey} ${Wrapper.createdAt}`));
319
- }) })) }));
221
+ const propsContainer = {
222
+ ref: nextScreenRef,
223
+ key,
224
+ style: _objectSpread({}, contentStyle),
225
+ className: "".concat(contentClassName, " ").concat(transitionClasses.forward.elementEntering)
226
+ };
227
+ const newWrapper = ChildrenWrapperFactory(_ref4 => {
228
+ let {
229
+ children
230
+ } = _ref4;
231
+ return /*#__PURE__*/_react.default.createElement("div", propsContainer, children);
232
+ }, key, propsContainer, insertedAt);
233
+ return [...screensBeforeChangingStep.slice(0, lastIndex), lastWrapper || ChildrenWrapperFactory(() => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), "fallback", {}, insertedAt), newWrapper];
234
+ });
235
+ }
236
+ return () => {
237
+ prevStep.current = step;
238
+ };
239
+ }, [step]);
240
+ (0, _react.useEffect)(() => {
241
+ if (childrenWrappers.length === 1 && lockTransitionWidth) containerRef.current.style.width = "";
242
+ if (childrenWrappers.length === 1 && lockTransitionHeight) containerRef.current.style.height = "";
243
+ }, [childrenWrappers.length !== 1]);
244
+ (0, _react.useEffect)(() => {
245
+ if (props.transitionType === TransitionAnimationTypes.POP_FROM_ELEMENT_ID && "elementId" in props) {
246
+ const element = document.querySelector("#".concat(props.elementId));
247
+ if (element) {
248
+ const {
249
+ clientWidth,
250
+ clientHeight
251
+ } = containerRef.current;
252
+ const offsetX = element.clientLeft + element.offsetLeft + element.clientWidth / 2;
253
+ const offsetY = element.clientTop + element.offsetTop + element.clientHeight / 2;
254
+ const percentX = offsetX * 100 / clientWidth;
255
+ const percentY = offsetY * 100 / clientHeight;
256
+ preTransitionDetails.current.transformOrigin = "".concat(percentX, "% ").concat(percentY, "%");
257
+ Object.assign(containerRef.current.style, {
258
+ transformOrigin: "".concat(percentX, "% ").concat(percentY, "%")
259
+ });
260
+ }
261
+ } else {
262
+ Object.assign(containerRef.current.style, preTransitionDetails.current);
263
+ }
264
+ if (childrenWrappers.length === 1) {
265
+ containerRef.current.style.overflow = "";
266
+ }
267
+ }, [childrenWrappers.length]);
268
+ const propsToSpread = _objectSpread({}, props);
269
+ delete propsToSpread.transitionType;
270
+ delete propsToSpread.config;
271
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("section", _extends({}, propsToSpread, {
272
+ onClick: e => {
273
+ const {
274
+ currentTarget: {
275
+ offsetTop,
276
+ offsetLeft,
277
+ clientWidth,
278
+ clientHeight
279
+ },
280
+ clientX,
281
+ clientY
282
+ } = e;
283
+ const offsetX = clientX - offsetLeft;
284
+ const offsetY = clientY - offsetTop;
285
+ const percentX = offsetX * 100 / clientWidth;
286
+ const percentY = offsetY * 100 / clientHeight;
287
+ if (props.transitionType === TransitionAnimationTypes.POP_FROM_ELEMENT_ID || props.transitionType === TransitionAnimationTypes.POP_FROM_CLICK_ORIGIN) preTransitionDetails.current.transformOrigin = "".concat(percentX, "% ").concat(percentY, "%");
288
+ if (props.onClick) props.onClick(e);
289
+ },
290
+ ref: containerRef,
291
+ className: "".concat(_TransitionModule.default.section, " ").concat(className)
292
+ }), childrenWrappers.map(Wrapper => {
293
+ const childToRender = children.find((a, i) => ((a === null || a === void 0 ? void 0 : a.key) || i) === (Wrapper === null || Wrapper === void 0 ? void 0 : Wrapper.associatedKey));
294
+ return /*#__PURE__*/_react.default.createElement(Wrapper, {
295
+ key: "".concat(Wrapper.associatedKey, " ").concat(Wrapper.createdAt)
296
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, childToRender));
297
+ })));
320
298
  }
321
- var TransitionAnimationTypes;
322
- (function (TransitionAnimationTypes) {
323
- TransitionAnimationTypes[TransitionAnimationTypes["SLIDE"] = 0] = "SLIDE";
324
- TransitionAnimationTypes[TransitionAnimationTypes["POP_FROM_CLICK_ORIGIN"] = 1] = "POP_FROM_CLICK_ORIGIN";
325
- TransitionAnimationTypes[TransitionAnimationTypes["POP_FROM_ELEMENT_ID"] = 2] = "POP_FROM_ELEMENT_ID";
326
- TransitionAnimationTypes[TransitionAnimationTypes["FADE"] = 3] = "FADE";
327
- TransitionAnimationTypes[TransitionAnimationTypes["COIN_FLIP"] = 4] = "COIN_FLIP";
328
- TransitionAnimationTypes[TransitionAnimationTypes["MASK"] = 5] = "MASK";
329
- TransitionAnimationTypes[TransitionAnimationTypes["CUSTOM"] = 6] = "CUSTOM";
330
- })(TransitionAnimationTypes || (exports.TransitionAnimationTypes = TransitionAnimationTypes = {}));
299
+ let TransitionAnimationTypes = exports.TransitionAnimationTypes = /*#__PURE__*/function (TransitionAnimationTypes) {
300
+ TransitionAnimationTypes[TransitionAnimationTypes["SLIDE"] = 0] = "SLIDE";
301
+ TransitionAnimationTypes[TransitionAnimationTypes["POP_FROM_CLICK_ORIGIN"] = 1] = "POP_FROM_CLICK_ORIGIN";
302
+ TransitionAnimationTypes[TransitionAnimationTypes["POP_FROM_ELEMENT_ID"] = 2] = "POP_FROM_ELEMENT_ID";
303
+ TransitionAnimationTypes[TransitionAnimationTypes["FADE"] = 3] = "FADE";
304
+ TransitionAnimationTypes[TransitionAnimationTypes["COIN_FLIP"] = 4] = "COIN_FLIP";
305
+ TransitionAnimationTypes[TransitionAnimationTypes["MASK"] = 5] = "MASK";
306
+ TransitionAnimationTypes[TransitionAnimationTypes["CUSTOM"] = 6] = "CUSTOM";
307
+ return TransitionAnimationTypes;
308
+ }({});
331
309
  /**
332
310
  * A component that manages smooth transitions between different views or screens.
333
311
  * It handles animations and switching between multiple children elements.
@@ -335,10 +313,11 @@ var TransitionAnimationTypes;
335
313
  * Simple explanation: This component controls how content changes from one screen to another,
336
314
  * making the transition look smooth and professional with various animation styles.
337
315
  */
338
- const Transition = (0, react_1.forwardRef)(_Transition);
316
+ const Transition = /*#__PURE__*/(0, _react.forwardRef)(_Transition);
317
+
339
318
  /**
340
319
  * A component that manages smooth transitions between different views or screens.
341
320
  * It handles animations and switching between multiple children elements.
342
321
  */
343
- exports.default = Transition;
344
- //# sourceMappingURL=Transition.js.map
322
+ var _default = exports.default = Transition;
323
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfVHJhbnNpdGlvbk1vZHVsZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZXhjbHVkZWQiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImFwcGx5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhcmciLCJfdG9QcmltaXRpdmUiLCJTdHJpbmciLCJpbnB1dCIsImhpbnQiLCJwcmltIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJ1bmRlZmluZWQiLCJyZXMiLCJUeXBlRXJyb3IiLCJOdW1iZXIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJleGNsdWRlZCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwic291cmNlU3ltYm9sS2V5cyIsImluZGV4T2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInNvdXJjZUtleXMiLCJUcmFuc2l0aW9uQ2xhc3NlcyIsInR5cGUiLCJUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMiLCJDT0lOX0ZMSVAiLCJiYWNrd2FyZCIsImVsZW1lbnRFeGl0aW5nIiwiU3R5bGVzIiwiZmxpcEJvdHRvbVVwT3V0IiwiZWxlbWVudEVudGVyaW5nIiwiZmxpcEJvdHRvbVVwSW4iLCJmb3J3YXJkIiwiRkFERSIsImZhZGVPdXRBYnNvbHV0ZSIsImZhZGVJbkRlbGF5ZWQiLCJTTElERSIsImVudHJhbmNlTGVmdCIsImV4aXRMZWZ0IiwiUE9QX0ZST01fQ0xJQ0tfT1JJR0lOIiwiUE9QX0ZST01fRUxFTUVOVF9JRCIsImZhZGVJbiIsInNjYWxlT3V0Iiwic2NhbGVJbiIsImZhZGVPdXQiLCJNQVNLIiwic3R1YkVudGVyaW5nIiwic3R1YiIsIkNoaWxkcmVuV3JhcHBlckZhY3RvcnkiLCJmdW5jIiwiZXh0ZXJuYWxQcm9wc0NvbnRhaW5lciIsInRpbWVzdGFtcCIsInRvUmVtb3ZlS2V5cyIsImNyZWF0ZWRBdCIsImFzc29jaWF0ZWRLZXkiLCJleHRlcm5hbFByb3BzIiwiX1RyYW5zaXRpb24iLCJfcmVmIiwiX2NvbnRhaW5lclJlZiIsIl9kYXRhVGVzdGlkIiwic3RlcCIsImNvbnRlbnRTdHlsZSIsImNvbnRlbnRDbGFzc05hbWUiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsIm9uRGlzY2FyZFN0ZXAiLCJsb2NrVHJhbnNpdGlvbldpZHRoIiwibG9ja1RyYW5zaXRpb25IZWlnaHQiLCJwcm9wcyIsImNvbnRhaW5lclJlZiIsInVzZU1lbW8iLCJjcmVhdGVSZWYiLCJwcmVUcmFuc2l0aW9uRGV0YWlscyIsInVzZVJlZiIsInRyYW5zZm9ybU9yaWdpbiIsInRlc3RJZCIsImNoaWxkcmVuV3JhcHBlcnMiLCJzZXRDaGlsZHJlbldyYXBwZXJzIiwidXNlU3RhdGUiLCJfY2hpbGRyZW4kc3RlcCIsInN0eWxlIiwiX3JlZjIiLCJjcmVhdGVFbGVtZW50IiwiRGF0ZSIsIm5vdyIsInByZXZTdGVwIiwicHJldkNoaWxkIiwidXNlRWZmZWN0IiwiY3VycmVudCIsIl9jaGlsZHJlbiRzdGVwMiIsIl9wcmV2Q2hpbGQkY3VycmVudCIsIl9jaGlsZHJlbiRzdGVwMyIsIm92ZXJmbG93IiwidHJhbnNpdGlvbkNsYXNzZXMiLCJ0cmFuc2l0aW9uVHlwZSIsIkNVU1RPTSIsImNvbmZpZyIsIndpZHRoIiwiY29uY2F0IiwiY2xpZW50V2lkdGgiLCJoZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJ0cmFuc2l0aW9uTWFzayIsIm1hc2tGYWN0b3J5IiwiaW5zZXJ0ZWRBdCIsIl9wcmV2Q2hpbGQkY3VycmVudDIiLCJzdGVwVG9SZW1vdmUiLCJwcmV2S2V5VG9SZW1vdmUiLCJzY3JlZW5zQmVmb3JlQ2hhbmdpbmdTdGVwIiwiZW50ZXJpbmdTY3JlZW5SZWYiLCJGaXJzdE5leHRTY3JlZW4iLCJyZXN0T2ZTY3JlZW5zIiwiYSIsIldlYmtpdE1hc2tJbWFnZSIsImFuaW1hdGlvbkVuZExpc3RlbmVyIiwiZXZlbnQiLCJfZW50ZXJpbmdTY3JlZW5SZWYkY3UiLCJfZW50ZXJpbmdTY3JlZW5SZWYkY3UyIiwiY3VycmVudFRhcmdldCIsImlzQW5pbWF0aW9uRnJvbUV4cGVjdGVkU3RhdGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInJlbW92ZSIsInNjcmVlbnNBZnRlclRoZUN1cnJlbnRTdGVwRW50ZXJlZCIsInMiLCJfRmlyc3ROZXh0U2NyZWVuJHRvUmUiLCJzaG91bGRLZWVwIiwic29tZSIsImsiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicHJvcHNDb250YWluZXIiLCJyZWYiLCJvbkFuaW1hdGlvbkVuZCIsIm5ld1dyYXBwZXIiLCJfcmVmMyIsIkZyYWdtZW50IiwiX3ByZXZDaGlsZCRjdXJyZW50MyIsInN0ZXBUb0RlbGV0ZSIsImxhc3RJbmRleCIsImxhc3RXcmFwcGVyIiwibmV4dFNjcmVlblJlZiIsImUiLCJfbmV4dFNjcmVlblJlZiRjdXJyZW4iLCJuZXh0U3RhdGUiLCJzaG91bGRNYW50YWluIiwiX3JlZjQiLCJzbGljZSIsImVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJlbGVtZW50SWQiLCJvZmZzZXRYIiwiY2xpZW50TGVmdCIsIm9mZnNldExlZnQiLCJvZmZzZXRZIiwiY2xpZW50VG9wIiwib2Zmc2V0VG9wIiwicGVyY2VudFgiLCJwZXJjZW50WSIsInByb3BzVG9TcHJlYWQiLCJvbkNsaWNrIiwiY2xpZW50WCIsImNsaWVudFkiLCJzZWN0aW9uIiwibWFwIiwiV3JhcHBlciIsImNoaWxkVG9SZW5kZXIiLCJmaW5kIiwiZXhwb3J0cyIsIlRyYW5zaXRpb24iLCJmb3J3YXJkUmVmIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9UcmFuc2l0aW9uL1RyYW5zaXRpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBBbmltYXRpb25FdmVudCxcbiAgY3JlYXRlUmVmLFxuICBDU1NQcm9wZXJ0aWVzLFxuICBEZXRhaWxlZEhUTUxQcm9wcyxcbiAgRm9yd2FyZGVkUmVmLFxuICBmb3J3YXJkUmVmLFxuICBLZXksXG4gIE11dGFibGVSZWZPYmplY3QsXG4gIFJlYWN0RWxlbWVudCxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTdHlsZXMgZnJvbSBcIi4vVHJhbnNpdGlvbi5tb2R1bGUuc2Nzc1wiO1xuXG5leHBvcnQgdHlwZSBUcmFuc2l0aW9uVHlwZURlZmluaXRpb25zID1cbiAgfCB7XG4gICAgICB0cmFuc2l0aW9uVHlwZT86XG4gICAgICAgIHwgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlNMSURFXG4gICAgICAgIHwgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlBPUF9GUk9NX0NMSUNLX09SSUdJTlxuICAgICAgICB8IFRyYW5zaXRpb25BbmltYXRpb25UeXBlcy5GQURFXG4gICAgICAgIHwgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLkNPSU5fRkxJUDtcbiAgICB9XG4gIHwge1xuICAgICAgdHJhbnNpdGlvblR5cGU/OiBUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMuUE9QX0ZST01fRUxFTUVOVF9JRDtcbiAgICAgIGVsZW1lbnRJZDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0cmFuc2l0aW9uVHlwZT86IFRyYW5zaXRpb25BbmltYXRpb25UeXBlcy5NQVNLO1xuICAgICAgLyoqXG4gICAgICAgKiBJdCBwcm92aWRlcyB0aGUgdHJhbnNpdGlvbiBjb250YWluZXIgc28geW91IGNhbiBjcmVhdGUgYSBkeW5hbWljIHN2ZyB0byBtYXNrIHdpdGhcbiAgICAgICAqL1xuICAgICAgbWFza0ZhY3Rvcnk6IChjb250YWluZXI6IEhUTUxEaXZFbGVtZW50KSA9PiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHRyYW5zaXRpb25UeXBlPzogVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLkNVU1RPTTtcbiAgICAgIGNvbmZpZzogUmV0dXJuVHlwZTx0eXBlb2YgVHJhbnNpdGlvbkNsYXNzZXM+O1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIFRyYW5zaXRpb25Qcm9wcyA9IHtcbiAgc3RlcDogbnVtYmVyO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRlbnRTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIGNvbnRlbnRDbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiAoUmVhY3QuUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkKVtdO1xuICBvbkRpc2NhcmRTdGVwPzogKGRpc2NhcmRlZEtleTogUmVhY3QuS2V5LCBzdGFydGVkQW5pbWF0aW9uQXQ6IG51bWJlcikgPT4gdm9pZDtcbiAgbG9ja1RyYW5zaXRpb25XaWR0aD86IGJvb2xlYW47XG4gIGxvY2tUcmFuc2l0aW9uSGVpZ2h0PzogYm9vbGVhbjtcbn0gJiBUcmFuc2l0aW9uVHlwZURlZmluaXRpb25zICZcbiAgT21pdDxcbiAgICBEZXRhaWxlZEhUTUxQcm9wczxSZWFjdC5IVE1MQXR0cmlidXRlczxIVE1MRGl2RWxlbWVudD4sIGFueT4sXG4gICAgXCJjbGFzc05hbWVcIiB8IFwiY2hpbGRyZW5cIlxuICA+O1xuXG5mdW5jdGlvbiBUcmFuc2l0aW9uQ2xhc3NlcyhcbiAgdHlwZTogTm9uTnVsbGFibGU8XG4gICAgRXhjbHVkZTxUcmFuc2l0aW9uUHJvcHNbXCJ0cmFuc2l0aW9uVHlwZVwiXSwgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLkNVU1RPTT5cbiAgPixcbik6IHtcbiAgLyoqXG4gICAqIEFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgbm90IHZpc2libGUgYW5kIGlzIG5vdyBlbnRlcmluZyB0aGUgc2NyZWVuXG4gICAqL1xuICBiYWNrd2FyZDoge1xuICAgIGVsZW1lbnRFbnRlcmluZzogc3RyaW5nO1xuICAgIGVsZW1lbnRFeGl0aW5nOiBzdHJpbmc7XG4gIH07XG4gIC8qKlxuICAgKiBBcHBsaWVkIHRvIHRoZSBlbGVtZW50IHRoYXQgd2FzIHZpc2libGUgYW5kIG5vdyBpcyBleGl0aW5nIHRoZSBzY3JlZW5cbiAgICovXG4gIGZvcndhcmQ6IHtcbiAgICBlbGVtZW50RW50ZXJpbmc6IHN0cmluZztcbiAgICBlbGVtZW50RXhpdGluZzogc3RyaW5nO1xuICB9O1xufSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLkNPSU5fRkxJUDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t3YXJkOiB7XG4gICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFN0eWxlcy5mbGlwQm90dG9tVXBPdXQsXG4gICAgICAgICAgZWxlbWVudEVudGVyaW5nOiBTdHlsZXMuZmxpcEJvdHRvbVVwSW4sXG4gICAgICAgIH0sXG4gICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICBlbGVtZW50RXhpdGluZzogU3R5bGVzLmZsaXBCb3R0b21VcE91dCxcbiAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFN0eWxlcy5mbGlwQm90dG9tVXBJbixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgY2FzZSBUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMuRkFERTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t3YXJkOiB7XG4gICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFN0eWxlcy5mYWRlT3V0QWJzb2x1dGUsXG4gICAgICAgICAgZWxlbWVudEVudGVyaW5nOiBTdHlsZXMuZmFkZUluRGVsYXllZCxcbiAgICAgICAgfSxcbiAgICAgICAgZm9yd2FyZDoge1xuICAgICAgICAgIGVsZW1lbnRFeGl0aW5nOiBTdHlsZXMuZmFkZU91dEFic29sdXRlLFxuICAgICAgICAgIGVsZW1lbnRFbnRlcmluZzogU3R5bGVzLmZhZGVJbkRlbGF5ZWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIGNhc2UgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlNMSURFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3dhcmQ6IHtcbiAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFN0eWxlcy5lbnRyYW5jZUxlZnQsXG4gICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFwiXCIsXG4gICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFN0eWxlcy5leGl0TGVmdCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgY2FzZSBUcmFuc2l0aW9uQW5pbWF0aW9uVHlwZXMuUE9QX0ZST01fQ0xJQ0tfT1JJR0lOOlxuICAgIGNhc2UgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlBPUF9GUk9NX0VMRU1FTlRfSUQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrd2FyZDoge1xuICAgICAgICAgIGVsZW1lbnRFbnRlcmluZzogU3R5bGVzLmZhZGVJbixcbiAgICAgICAgICBlbGVtZW50RXhpdGluZzogU3R5bGVzLnNjYWxlT3V0LFxuICAgICAgICB9LFxuICAgICAgICBmb3J3YXJkOiB7XG4gICAgICAgICAgZWxlbWVudEVudGVyaW5nOiBTdHlsZXMuc2NhbGVJbixcbiAgICAgICAgICBlbGVtZW50RXhpdGluZzogU3R5bGVzLmZhZGVPdXQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIGNhc2UgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLk1BU0s6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrd2FyZDoge1xuICAgICAgICAgIGVsZW1lbnRFbnRlcmluZzogU3R5bGVzLnN0dWJFbnRlcmluZyxcbiAgICAgICAgICBlbGVtZW50RXhpdGluZzogU3R5bGVzLnN0dWIsXG4gICAgICAgIH0sXG4gICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICBlbGVtZW50RW50ZXJpbmc6IFN0eWxlcy5zdHViRW50ZXJpbmcsXG4gICAgICAgICAgZWxlbWVudEV4aXRpbmc6IFN0eWxlcy5zdHViLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgfVxufVxuXG50eXBlIENoaWxkcmVuV3JhcHBlciA9ICgocHJvcHM6IHtcbiAgY2hpbGRyZW46IFRyYW5zaXRpb25Qcm9wc1tcImNoaWxkcmVuXCJdW251bWJlcl07XG59KSA9PiBSZWFjdEVsZW1lbnQpICYge1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgYXNzb2NpYXRlZEtleTogS2V5O1xuICB0b1JlbW92ZUtleXM/OiBLZXlbXTtcbiAgZXh0ZXJuYWxQcm9wczogeyBbazogc3RyaW5nXTogYW55IH07XG59O1xuXG5mdW5jdGlvbiBDaGlsZHJlbldyYXBwZXJGYWN0b3J5KFxuICBmdW5jOiAocDogeyBjaGlsZHJlbjogVHJhbnNpdGlvblByb3BzW1wiY2hpbGRyZW5cIl0gfSkgPT4gUmVhY3RFbGVtZW50LFxuICBrZXk6IEtleSxcbiAgZXh0ZXJuYWxQcm9wc0NvbnRhaW5lcjogeyBbazogc3RyaW5nXTogYW55IH0sXG4gIC8qKiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBuZXdlciBcImR1cGxpY2F0ZWRcIiBrZXlzIGZyb20gYmVpbmcgcmVtb3ZlZCBhZnRlciB0aGUgbmV3IGVsZW1lbnQgZmluaXNoZWQgYW5pbWF0aW9uICovXG4gIHRpbWVzdGFtcDogbnVtYmVyLFxuICB0b1JlbW92ZUtleXM/OiBLZXlbXSxcbik6IENoaWxkcmVuV3JhcHBlciB7XG4gIChmdW5jIGFzIGFueSkuY3JlYXRlZEF0ID0gdGltZXN0YW1wO1xuICAoZnVuYyBhcyBhbnkpLmFzc29jaWF0ZWRLZXkgPSBrZXk7XG4gIChmdW5jIGFzIGFueSkudG9SZW1vdmVLZXlzID0gdG9SZW1vdmVLZXlzO1xuICAoZnVuYyBhcyBhbnkpLmV4dGVybmFsUHJvcHMgPSBleHRlcm5hbFByb3BzQ29udGFpbmVyO1xuICByZXR1cm4gZnVuYyBhcyB1bmtub3duIGFzIENoaWxkcmVuV3JhcHBlcjtcbn1cbmZ1bmN0aW9uIF9UcmFuc2l0aW9uKFxuICB7XG4gICAgc3RlcCxcbiAgICBjb250ZW50U3R5bGUsXG4gICAgY29udGVudENsYXNzTmFtZSA9IFwiXCIsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uRGlzY2FyZFN0ZXAsXG4gICAgbG9ja1RyYW5zaXRpb25XaWR0aCA9IGZhbHNlLFxuICAgIGxvY2tUcmFuc2l0aW9uSGVpZ2h0ID0gZmFsc2UsXG4gICAgLi4ucHJvcHNcbiAgfTogVHJhbnNpdGlvblByb3BzLFxuICBfY29udGFpbmVyUmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbikge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAoX2NvbnRhaW5lclJlZiBhcyBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4pIHx8IGNyZWF0ZVJlZigpLFxuICAgIFtfY29udGFpbmVyUmVmXSxcbiAgKTtcbiAgY29uc3QgcHJlVHJhbnNpdGlvbkRldGFpbHMgPSB1c2VSZWY8Q1NTUHJvcGVydGllcz4oe1xuICAgIHRyYW5zZm9ybU9yaWdpbjogXCJpbml0aWFsXCIsXG4gIH0pO1xuICBjb25zdCB0ZXN0SWQgPSAocHJvcHMgYXMgYW55KVtcImRhdGEtdGVzdGlkXCJdID8/IFwidHJhbnNpdGlvbi1jb250YWluZXJcIjtcbiAgY29uc3QgW2NoaWxkcmVuV3JhcHBlcnMsIHNldENoaWxkcmVuV3JhcHBlcnNdID0gdXNlU3RhdGU8XG4gICAgKENoaWxkcmVuV3JhcHBlciB8IHVuZGVmaW5lZClbXVxuICA+KCgpID0+IHtcbiAgICBjb25zdCBleHRlcm5hbFByb3BzID0ge1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsXG4gICAgICBrZXk6IFN0cmluZyhjaGlsZHJlbltzdGVwXT8ua2V5IHx8IHN0ZXApLFxuICAgICAgc3R5bGU6IGNvbnRlbnRTdHlsZSxcbiAgICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZSxcbiAgICB9O1xuICAgIGNvbnN0IGZ1bmMgPSBDaGlsZHJlbldyYXBwZXJGYWN0b3J5KFxuICAgICAgKHsgY2hpbGRyZW4gfSkgPT4gPGRpdiB7Li4uZXh0ZXJuYWxQcm9wc30+e2NoaWxkcmVufTwvZGl2PixcbiAgICAgIGNoaWxkcmVuW3N0ZXBdIS5rZXkgfHwgc3RlcCxcbiAgICAgIGV4dGVybmFsUHJvcHMsXG4gICAgICBEYXRlLm5vdygpLFxuICAgICAgW10sXG4gICAgKTtcbiAgICByZXR1cm4gW2Z1bmNdO1xuICB9KTtcblxuICBjb25zdCBwcmV2U3RlcCA9IHVzZVJlZihzdGVwKTtcbiAgY29uc3QgcHJldkNoaWxkID0gdXNlUmVmKGNoaWxkcmVuW3N0ZXBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgIHByZXZDaGlsZC5jdXJyZW50ID0gY2hpbGRyZW5bc3RlcF07XG4gIH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29udGFpbmVyUmVmLmN1cnJlbnQhLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICBjb25zdCB0cmFuc2l0aW9uQ2xhc3NlcyA9XG4gICAgICBwcm9wcy50cmFuc2l0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLkNVU1RPTVxuICAgICAgICA/IHByb3BzLmNvbmZpZ1xuICAgICAgICA6IFRyYW5zaXRpb25DbGFzc2VzKFxuICAgICAgICAgICAgcHJvcHMudHJhbnNpdGlvblR5cGUgfHwgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlNMSURFLFxuICAgICAgICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBwcmV2Q2hpbGQuY3VycmVudCAhPT0gbnVsbCAmJlxuICAgICAgY2hpbGRyZW5bc3RlcF0/LmtleSA9PT0gcHJldkNoaWxkLmN1cnJlbnQ/LmtleSAvLyBJJ20gcmVuZGVyaW5nIHRoZSBzYW1lIHNjcmVlblxuICAgICkge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcHJldlN0ZXAuY3VycmVudCA9IHN0ZXA7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IGNoaWxkcmVuW3N0ZXBdPy5rZXkgfHwgc3RlcDtcblxuICAgIGlmIChwcmV2U3RlcC5jdXJyZW50ICE9PSBzdGVwICYmIGxvY2tUcmFuc2l0aW9uV2lkdGgpXG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCEuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQhLmNsaWVudFdpZHRoXG4gICAgICB9cHhgO1xuXG4gICAgaWYgKHByZXZTdGVwLmN1cnJlbnQgIT09IHN0ZXAgJiYgbG9ja1RyYW5zaXRpb25IZWlnaHQpXG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCEuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgIGNvbnRhaW5lclJlZi5jdXJyZW50IS5jbGllbnRIZWlnaHRcbiAgICAgIH1weGA7XG4gICAgY29uc3QgdHJhbnNpdGlvbk1hc2sgPVxuICAgICAgcHJvcHMudHJhbnNpdGlvblR5cGUgPT09IFRyYW5zaXRpb25BbmltYXRpb25UeXBlcy5NQVNLXG4gICAgICAgID8gcHJvcHMubWFza0ZhY3RvcnkoY29udGFpbmVyUmVmLmN1cnJlbnQhKVxuICAgICAgICA6IFwiXCI7XG4gICAgY29uc3QgaW5zZXJ0ZWRBdCA9IERhdGUubm93KCk7XG5cbiAgICAvKiogVGhpcyBydW5zIG9uIGJhY2t3YXJkcyAqL1xuICAgIGlmIChwcmV2U3RlcC5jdXJyZW50ID4gc3RlcCkge1xuICAgICAgY29uc3Qgc3RlcFRvUmVtb3ZlID0gcHJldlN0ZXAuY3VycmVudDtcbiAgICAgIGNvbnN0IHByZXZLZXlUb1JlbW92ZSA9IHByZXZDaGlsZC5jdXJyZW50Py5rZXkgfHwgc3RlcFRvUmVtb3ZlO1xuICAgICAgc2V0Q2hpbGRyZW5XcmFwcGVycygoc2NyZWVuc0JlZm9yZUNoYW5naW5nU3RlcCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRlcmluZ1NjcmVlblJlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgW0ZpcnN0TmV4dFNjcmVlbiwgLi4ucmVzdE9mU2NyZWVuc10gPVxuICAgICAgICAgIHNjcmVlbnNCZWZvcmVDaGFuZ2luZ1N0ZXAuZmlsdGVyKFxuICAgICAgICAgICAgKGEpID0+IGE/LmFzc29jaWF0ZWRLZXkgIT09IFN0cmluZyhrZXkpLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKEZpcnN0TmV4dFNjcmVlbikge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oRmlyc3ROZXh0U2NyZWVuLmV4dGVybmFsUHJvcHMsIHtcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLFxuICAgICAgICAgICAgc3R5bGU6IHsgLi4uY29udGVudFN0eWxlLCBXZWJraXRNYXNrSW1hZ2U6IHRyYW5zaXRpb25NYXNrIH0sXG4gICAgICAgICAgICBjbGFzc05hbWU6IGAke3RyYW5zaXRpb25DbGFzc2VzLmJhY2t3YXJkLmVsZW1lbnRFeGl0aW5nfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9uRW5kTGlzdGVuZXIoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50PEhUTUxEaXZFbGVtZW50Pikge1xuICAgICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGlzQW5pbWF0aW9uRnJvbUV4cGVjdGVkU3RhdGUgPVxuICAgICAgICAgICAgZW50ZXJpbmdTY3JlZW5SZWYuY3VycmVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5iYWNrd2FyZC5lbGVtZW50RW50ZXJpbmcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVudGVyaW5nU2NyZWVuUmVmLmN1cnJlbnQ/LmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICAgICAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5iYWNrd2FyZC5lbGVtZW50RW50ZXJpbmcsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRDaGlsZHJlbldyYXBwZXJzKChzY3JlZW5zQWZ0ZXJUaGVDdXJyZW50U3RlcEVudGVyZWQpID0+IHtcbiAgICAgICAgICAgIGlmIChvbkRpc2NhcmRTdGVwKSB7XG4gICAgICAgICAgICAgIGlmIChpc0FuaW1hdGlvbkZyb21FeHBlY3RlZFN0YXRlKVxuICAgICAgICAgICAgICAgIG9uRGlzY2FyZFN0ZXAocHJldktleVRvUmVtb3ZlLCBpbnNlcnRlZEF0KTtcbiAgICAgICAgICAgICAgaWYgKEZpcnN0TmV4dFNjcmVlbiAmJiBGaXJzdE5leHRTY3JlZW4udG9SZW1vdmVLZXlzKVxuICAgICAgICAgICAgICAgIEZpcnN0TmV4dFNjcmVlbi50b1JlbW92ZUtleXMuZm9yRWFjaChvbkRpc2NhcmRTdGVwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzY3JlZW5zQWZ0ZXJUaGVDdXJyZW50U3RlcEVudGVyZWQuZmlsdGVyKChzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNob3VsZEtlZXAgPVxuICAgICAgICAgICAgICAgIChzPy5hc3NvY2lhdGVkS2V5ICE9PSBTdHJpbmcocHJldktleVRvUmVtb3ZlKSAmJlxuICAgICAgICAgICAgICAgICAgIUZpcnN0TmV4dFNjcmVlbj8udG9SZW1vdmVLZXlzPy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoaykgPT4gU3RyaW5nKGspID09PSBTdHJpbmcocz8uYXNzb2NpYXRlZEtleSksXG4gICAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAgIHMhLmNyZWF0ZWRBdCEgPiBpbnNlcnRlZEF0O1xuICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkS2VlcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIFwiYW5pbWF0aW9uZW5kXCIsXG4gICAgICAgICAgICBhbmltYXRpb25FbmRMaXN0ZW5lciBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9wc0NvbnRhaW5lciA9IHtcbiAgICAgICAgICByZWY6IGVudGVyaW5nU2NyZWVuUmVmLFxuICAgICAgICAgIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBjbGFzc05hbWU6IGAke3RyYW5zaXRpb25DbGFzc2VzLmJhY2t3YXJkLmVsZW1lbnRFbnRlcmluZ30gJHtjb250ZW50Q2xhc3NOYW1lfWAsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIC4uLmNvbnRlbnRTdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQW5pbWF0aW9uRW5kOiBhbmltYXRpb25FbmRMaXN0ZW5lcixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IENoaWxkcmVuV3JhcHBlckZhY3RvcnkoXG4gICAgICAgICAgKHsgY2hpbGRyZW4gfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxkaXYgey4uLnByb3BzQ29udGFpbmVyfT57Y2hpbGRyZW59PC9kaXY+O1xuICAgICAgICAgIH0sXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHByb3BzQ29udGFpbmVyLFxuICAgICAgICAgIGluc2VydGVkQXQsXG4gICAgICAgICAgW3ByZXZLZXlUb1JlbW92ZSwgLi4uKEZpcnN0TmV4dFNjcmVlbj8udG9SZW1vdmVLZXlzIHx8IFtdKV0sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChGaXJzdE5leHRTY3JlZW4pXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ld1dyYXBwZXIsXG4gICAgICAgICAgICBGaXJzdE5leHRTY3JlZW4gfHxcbiAgICAgICAgICAgICAgQ2hpbGRyZW5XcmFwcGVyRmFjdG9yeShcbiAgICAgICAgICAgICAgICAoKSA9PiA8UmVhY3QuRnJhZ21lbnQgLz4sXG4gICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICBpbnNlcnRlZEF0LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgLi4ucmVzdE9mU2NyZWVucyxcbiAgICAgICAgICBdO1xuICAgICAgICBlbHNlIHJldHVybiBbbmV3V3JhcHBlcl07XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHByZXZTdGVwLmN1cnJlbnQgPCBzdGVwKSB7XG4gICAgICBjb25zdCBzdGVwVG9EZWxldGUgPSBwcmV2U3RlcC5jdXJyZW50O1xuICAgICAgY29uc3QgcHJldktleVRvUmVtb3ZlID0gU3RyaW5nKHByZXZDaGlsZC5jdXJyZW50Py5rZXkgfHwgc3RlcFRvRGVsZXRlKTtcbiAgICAgIHNldENoaWxkcmVuV3JhcHBlcnMoKHNjcmVlbnNCZWZvcmVDaGFuZ2luZ1N0ZXApID0+IHtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gc2NyZWVuc0JlZm9yZUNoYW5naW5nU3RlcC5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBsYXN0V3JhcHBlciA9IHNjcmVlbnNCZWZvcmVDaGFuZ2luZ1N0ZXBbbGFzdEluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dFNjcmVlblJlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICAgICAgaWYgKGxhc3RXcmFwcGVyKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihsYXN0V3JhcHBlci5leHRlcm5hbFByb3BzLCB7XG4gICAgICAgICAgICBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCxcbiAgICAgICAgICAgIHN0eWxlOiB7IC4uLmNvbnRlbnRTdHlsZSwgV2Via2l0TWFza0ltYWdlOiB0cmFuc2l0aW9uTWFzayB9LFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBgJHtjb250ZW50Q2xhc3NOYW1lfSAke3RyYW5zaXRpb25DbGFzc2VzLmZvcndhcmQuZWxlbWVudEV4aXRpbmd9YCxcbiAgICAgICAgICAgIG9uQW5pbWF0aW9uRW5kOiAoZTogQW5pbWF0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQpIHJldHVybjtcbiAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmZvcndhcmQuZWxlbWVudEVudGVyaW5nKVxuICAgICAgICAgICAgICAgIG5leHRTY3JlZW5SZWYuY3VycmVudD8uY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25DbGFzc2VzLmZvcndhcmQuZWxlbWVudEVudGVyaW5nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChvbkRpc2NhcmRTdGVwKSBvbkRpc2NhcmRTdGVwKHByZXZLZXlUb1JlbW92ZSwgaW5zZXJ0ZWRBdCk7XG4gICAgICAgICAgICAgIHNldENoaWxkcmVuV3JhcHBlcnMoKHNjcmVlbnNBZnRlclRoZUN1cnJlbnRTdGVwRW50ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHNjcmVlbnNBZnRlclRoZUN1cnJlbnRTdGVwRW50ZXJlZC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAocykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRNYW50YWluID1cbiAgICAgICAgICAgICAgICAgICAgICBzPy5hc3NvY2lhdGVkS2V5ICE9PSBTdHJpbmcocHJldktleVRvUmVtb3ZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIHMuY3JlYXRlZEF0ID4gaW5zZXJ0ZWRBdDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZE1hbnRhaW47XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BzQ29udGFpbmVyID0ge1xuICAgICAgICAgIHJlZjogbmV4dFNjcmVlblJlZixcbiAgICAgICAgICBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIC4uLmNvbnRlbnRTdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzTmFtZTogYCR7Y29udGVudENsYXNzTmFtZX0gJHt0cmFuc2l0aW9uQ2xhc3Nlcy5mb3J3YXJkLmVsZW1lbnRFbnRlcmluZ31gLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZXdXcmFwcGVyID0gQ2hpbGRyZW5XcmFwcGVyRmFjdG9yeShcbiAgICAgICAgICAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPGRpdiB7Li4ucHJvcHNDb250YWluZXJ9PntjaGlsZHJlbn08L2Rpdj47XG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgcHJvcHNDb250YWluZXIsXG4gICAgICAgICAgaW5zZXJ0ZWRBdCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5zY3JlZW5zQmVmb3JlQ2hhbmdpbmdTdGVwLnNsaWNlKDAsIGxhc3RJbmRleCksXG4gICAgICAgICAgbGFzdFdyYXBwZXIgfHxcbiAgICAgICAgICAgIENoaWxkcmVuV3JhcHBlckZhY3RvcnkoXG4gICAgICAgICAgICAgICgpID0+IDxSZWFjdC5GcmFnbWVudCAvPixcbiAgICAgICAgICAgICAgXCJmYWxsYmFja1wiLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgaW5zZXJ0ZWRBdCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgbmV3V3JhcHBlcixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcHJldlN0ZXAuY3VycmVudCA9IHN0ZXA7XG4gICAgfTtcbiAgfSwgW3N0ZXBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlsZHJlbldyYXBwZXJzLmxlbmd0aCA9PT0gMSAmJiBsb2NrVHJhbnNpdGlvbldpZHRoKVxuICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQhLnN0eWxlLndpZHRoID0gXCJcIjtcbiAgICBpZiAoY2hpbGRyZW5XcmFwcGVycy5sZW5ndGggPT09IDEgJiYgbG9ja1RyYW5zaXRpb25IZWlnaHQpXG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCEuc3R5bGUuaGVpZ2h0ID0gXCJcIjtcbiAgfSwgW2NoaWxkcmVuV3JhcHBlcnMubGVuZ3RoICE9PSAxXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBwcm9wcy50cmFuc2l0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlBPUF9GUk9NX0VMRU1FTlRfSUQgJiZcbiAgICAgIFwiZWxlbWVudElkXCIgaW4gcHJvcHNcbiAgICApIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgIyR7cHJvcHMuZWxlbWVudElkfWAsXG4gICAgICApIGFzIEhUTUxEaXZFbGVtZW50O1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclJlZi5jdXJyZW50ITtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID1cbiAgICAgICAgICBlbGVtZW50LmNsaWVudExlZnQgKyBlbGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoIC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9XG4gICAgICAgICAgZWxlbWVudC5jbGllbnRUb3AgKyBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgcGVyY2VudFggPSAob2Zmc2V0WCAqIDEwMCkgLyBjbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgcGVyY2VudFkgPSAob2Zmc2V0WSAqIDEwMCkgLyBjbGllbnRIZWlnaHQ7XG4gICAgICAgIHByZVRyYW5zaXRpb25EZXRhaWxzLmN1cnJlbnQudHJhbnNmb3JtT3JpZ2luID0gYCR7cGVyY2VudFh9JSAke3BlcmNlbnRZfSVgO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29udGFpbmVyUmVmLmN1cnJlbnQhLnN0eWxlLCB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBgJHtwZXJjZW50WH0lICR7cGVyY2VudFl9JWAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbnRhaW5lclJlZi5jdXJyZW50IS5zdHlsZSwgcHJlVHJhbnNpdGlvbkRldGFpbHMuY3VycmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuV3JhcHBlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCEuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xuICAgIH1cbiAgfSwgW2NoaWxkcmVuV3JhcHBlcnMubGVuZ3RoXSk7XG5cbiAgY29uc3QgcHJvcHNUb1NwcmVhZCA9IHsgLi4ucHJvcHMgfSBhcyBhbnk7XG4gIGRlbGV0ZSBwcm9wc1RvU3ByZWFkLnRyYW5zaXRpb25UeXBlO1xuICBkZWxldGUgcHJvcHNUb1NwcmVhZC5jb25maWc7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHNlY3Rpb25cbiAgICAgICAgey4uLnByb3BzVG9TcHJlYWR9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY3VycmVudFRhcmdldDogeyBvZmZzZXRUb3AsIG9mZnNldExlZnQsIGNsaWVudFdpZHRoLCBjbGllbnRIZWlnaHQgfSxcbiAgICAgICAgICAgIGNsaWVudFgsXG4gICAgICAgICAgICBjbGllbnRZLFxuICAgICAgICAgIH0gPSBlO1xuICAgICAgICAgIGNvbnN0IG9mZnNldFggPSBjbGllbnRYIC0gb2Zmc2V0TGVmdDtcbiAgICAgICAgICBjb25zdCBvZmZzZXRZID0gY2xpZW50WSAtIG9mZnNldFRvcDtcbiAgICAgICAgICBjb25zdCBwZXJjZW50WCA9IChvZmZzZXRYICogMTAwKSAvIGNsaWVudFdpZHRoO1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnRZID0gKG9mZnNldFkgKiAxMDApIC8gY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvcHMudHJhbnNpdGlvblR5cGUgPT09XG4gICAgICAgICAgICAgIFRyYW5zaXRpb25BbmltYXRpb25UeXBlcy5QT1BfRlJPTV9FTEVNRU5UX0lEIHx8XG4gICAgICAgICAgICBwcm9wcy50cmFuc2l0aW9uVHlwZSA9PT1cbiAgICAgICAgICAgICAgVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzLlBPUF9GUk9NX0NMSUNLX09SSUdJTlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHByZVRyYW5zaXRpb25EZXRhaWxzLmN1cnJlbnQudHJhbnNmb3JtT3JpZ2luID0gYCR7cGVyY2VudFh9JSAke3BlcmNlbnRZfSVgO1xuICAgICAgICAgIGlmIChwcm9wcy5vbkNsaWNrKSBwcm9wcy5vbkNsaWNrKGUgYXMgYW55KTtcbiAgICAgICAgfX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0cmFuc2l0aW9uLWNvbnRyb2xsZXJcIlxuICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtgJHtTdHlsZXMuc2VjdGlvbn0gJHtjbGFzc05hbWV9YH1cbiAgICAgID5cbiAgICAgICAgeyhjaGlsZHJlbldyYXBwZXJzIGFzIENoaWxkcmVuV3JhcHBlcltdKS5tYXAoKFdyYXBwZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBjaGlsZFRvUmVuZGVyID0gY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChhLCBpKSA9PiAoYT8ua2V5IHx8IGkpID09PSBXcmFwcGVyPy5hc3NvY2lhdGVkS2V5LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxXcmFwcGVyIGtleT17YCR7V3JhcHBlciEuYXNzb2NpYXRlZEtleX0gJHtXcmFwcGVyLmNyZWF0ZWRBdH1gfT5cbiAgICAgICAgICAgICAgPD57Y2hpbGRUb1JlbmRlcn08Lz5cbiAgICAgICAgICAgIDwvV3JhcHBlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGVudW0gVHJhbnNpdGlvbkFuaW1hdGlvblR5cGVzIHtcbiAgU0xJREUsXG4gIFBPUF9GUk9NX0NMSUNLX09SSUdJTixcbiAgUE9QX0ZST01fRUxFTUVOVF9JRCxcbiAgRkFERSxcbiAgQ09JTl9GTElQLFxuICBNQVNLLFxuICBDVVNUT00sXG59XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIHNtb290aCB0cmFuc2l0aW9ucyBiZXR3ZWVuIGRpZmZlcmVudCB2aWV3cyBvciBzY3JlZW5zLlxuICogSXQgaGFuZGxlcyBhbmltYXRpb25zIGFuZCBzd2l0Y2hpbmcgYmV0d2VlbiBtdWx0aXBsZSBjaGlsZHJlbiBlbGVtZW50cy5cbiAqXG4gKiBTaW1wbGUgZXhwbGFuYXRpb246IFRoaXMgY29tcG9uZW50IGNvbnRyb2xzIGhvdyBjb250ZW50IGNoYW5nZXMgZnJvbSBvbmUgc2NyZWVuIHRvIGFub3RoZXIsXG4gKiBtYWtpbmcgdGhlIHRyYW5zaXRpb24gbG9vayBzbW9vdGggYW5kIHByb2Zlc3Npb25hbCB3aXRoIHZhcmlvdXMgYW5pbWF0aW9uIHN0eWxlcy5cbiAqL1xuY29uc3QgVHJhbnNpdGlvbiA9IGZvcndhcmRSZWYoX1RyYW5zaXRpb24pO1xuXG4vKipcbiAqIEEgY29tcG9uZW50IHRoYXQgbWFuYWdlcyBzbW9vdGggdHJhbnNpdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdmlld3Mgb3Igc2NyZWVucy5cbiAqIEl0IGhhbmRsZXMgYW5pbWF0aW9ucyBhbmQgc3dpdGNoaW5nIGJldHdlZW4gbXVsdGlwbGUgY2hpbGRyZW4gZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQWVBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBOEMsTUFBQUcsU0FBQTtBQUFBLFNBQUFELHVCQUFBRSxHQUFBLFdBQUFBLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLEdBQUFELEdBQUEsS0FBQUUsT0FBQSxFQUFBRixHQUFBO0FBQUEsU0FBQUcseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMs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