@onepercentio/one-ui 1.3.2 → 1.3.4

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 (321) hide show
  1. package/.github/workflows/release-browser-bundle.yml +76 -0
  2. package/README.md +23 -0
  3. package/dist/assets/img/svg/checkbox.svg +3 -0
  4. package/dist/assets/styles/index.scss +2 -0
  5. package/dist/assets/styles/mixins.scss +15 -0
  6. package/dist/assets/styles/variables.scss +49 -0
  7. package/dist/components/AdaptiveButton/AdaptiveButton.js +32 -0
  8. package/dist/components/AdaptiveButton/AdaptiveButton.module.scss +7 -0
  9. package/dist/components/AdaptiveButton/index.js +27 -0
  10. package/dist/components/AdaptiveContainer/AdaptiveContainer.js +152 -0
  11. package/dist/components/AdaptiveContainer/AdaptiveContainer.module.scss +53 -0
  12. package/dist/components/AdaptiveContainer/index.js +27 -0
  13. package/dist/components/AdaptiveDialog/AdaptiveDialog.js +81 -0
  14. package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +145 -0
  15. package/dist/components/AdaptiveDialog/index.js +27 -0
  16. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +77 -0
  17. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.module.scss +49 -0
  18. package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +13 -0
  19. package/dist/components/AdaptiveSidebar/index.js +27 -0
  20. package/dist/components/AnchoredTooltip/AnchoredTooltip.js +168 -0
  21. package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +64 -0
  22. package/dist/components/AnchoredTooltip/index.js +27 -0
  23. package/dist/components/AnimatedEntrance/AnimatedEntrance.js +166 -0
  24. package/dist/components/AnimatedEntrance/AnimatedEntrance.module.scss +108 -0
  25. package/dist/components/AnimatedEntrance/index.js +27 -0
  26. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +95 -0
  27. package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.module.scss +22 -0
  28. package/dist/components/AsyncTriggerContainer/index.js +27 -0
  29. package/dist/components/AsyncWrapper/AsyncWrapper.js +42 -0
  30. package/dist/components/AsyncWrapper/index.js +27 -0
  31. package/dist/components/Avatar/Avatar.js +40 -0
  32. package/dist/components/Avatar/Avatar.module.scss +22 -0
  33. package/dist/components/Avatar/index.js +27 -0
  34. package/dist/components/BucketFill/BucketFill.js +56 -0
  35. package/dist/components/BucketFill/BucketFill.module.scss +36 -0
  36. package/dist/components/BucketFill/index.js +27 -0
  37. package/dist/components/Button/Button.js +39 -0
  38. package/dist/components/Button/Button.module.scss +45 -0
  39. package/dist/components/Button/index.js +27 -0
  40. package/dist/components/Card/Card.js +22 -0
  41. package/dist/components/Card/Card.module.scss +12 -0
  42. package/dist/components/Card/index.js +27 -0
  43. package/dist/components/Chart/Chart.js +27 -0
  44. package/dist/components/Chart/Chart.logic.js +14 -0
  45. package/dist/components/Chart/Chart.module.scss +58 -0
  46. package/dist/components/Chart/Chart.types.js +6 -0
  47. package/dist/components/Chart/Chart.view.js +184 -0
  48. package/dist/components/Chart/index.js +27 -0
  49. package/dist/components/CheckBox/CheckBox.js +52 -0
  50. package/dist/components/CheckBox/CheckBox.module.scss +36 -0
  51. package/dist/components/CheckBox/index.js +27 -0
  52. package/dist/components/CodeInput/CodeInput.js +84 -0
  53. package/dist/components/CodeInput/CodeInput.module.scss +5 -0
  54. package/dist/components/CodeInput/index.js +27 -0
  55. package/dist/components/Collapsable/Collapsable.js +186 -0
  56. package/dist/components/Collapsable/Collapsable.module.scss +42 -0
  57. package/dist/components/Collapsable/index.js +27 -0
  58. package/dist/components/Countdown/Countdown.js +83 -0
  59. package/dist/components/Countdown/index.js +27 -0
  60. package/dist/components/CurrencyInput/CurrencyInput.hook.js +28 -0
  61. package/dist/components/CurrencyInput/CurrencyInput.js +54 -0
  62. package/dist/components/CurrencyInput/index.js +27 -0
  63. package/dist/components/Divider/Divider.js +21 -0
  64. package/dist/components/Divider/Divider.module.scss +7 -0
  65. package/dist/components/Divider/index.js +27 -0
  66. package/dist/components/EmailInput/EmailInput.js +48 -0
  67. package/dist/components/EmailInput/EmailInput.module.scss +0 -0
  68. package/dist/components/EmailInput/index.js +27 -0
  69. package/dist/components/FadeIn/FadeIn.js +64 -0
  70. package/dist/components/FadeIn/FadeIn.module.scss +9 -0
  71. package/dist/components/FadeIn/index.js +27 -0
  72. package/dist/components/FileInput/FileInput.js +53 -0
  73. package/dist/components/FileInput/FileInput.module.scss +6 -0
  74. package/dist/components/FileInput/View/BigFactory/BigFactory.js +54 -0
  75. package/dist/components/FileInput/View/BigFactory/BigFactory.module.scss +20 -0
  76. package/dist/components/FileInput/View/BigFactory/index.js +27 -0
  77. package/dist/components/FileInput/View/Compact/Compact.js +120 -0
  78. package/dist/components/FileInput/View/Compact/Compact.module.scss +68 -0
  79. package/dist/components/FileInput/View/Compact/index.js +27 -0
  80. package/dist/components/FileInput/View/View.types.js +6 -0
  81. package/dist/components/FileInput/index.js +27 -0
  82. package/dist/components/FlowController/FlowController.js +66 -0
  83. package/dist/components/FlowController/FlowController.module.scss +47 -0
  84. package/dist/components/FlowController/index.js +27 -0
  85. package/dist/components/Form/Form.hook.js +234 -0
  86. package/dist/components/Form/Form.js +115 -0
  87. package/dist/components/Form/Form.module.scss +0 -0
  88. package/dist/components/Form/Form.types.js +40 -0
  89. package/dist/components/Form/FormField/Extensions/DateField/DateField.js +75 -0
  90. package/dist/components/Form/FormField/Extensions/DateField/DateField.module.scss +0 -0
  91. package/dist/components/Form/FormField/Extensions/DateField/index.js +27 -0
  92. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +91 -0
  93. package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.module.scss +0 -0
  94. package/dist/components/Form/FormField/Extensions/PhoneField/index.js +27 -0
  95. package/dist/components/Form/FormField/FormField.js +296 -0
  96. package/dist/components/Form/FormField/FormField.types.js +12 -0
  97. package/dist/components/Form/FormField/index.js +27 -0
  98. package/dist/components/Form/index.js +27 -0
  99. package/dist/components/Freeze/Freeze.js +18 -0
  100. package/dist/components/Freeze/index.js +27 -0
  101. package/dist/components/HSForms/HSForms.js +55 -0
  102. package/dist/components/HSForms/index.js +27 -0
  103. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +25 -0
  104. package/dist/components/HeaderCloseBtn/HeaderCloseBtn.module.scss +44 -0
  105. package/dist/components/HeaderCloseBtn/index.js +27 -0
  106. package/dist/components/InfinityScroll/InfinityScroll.js +128 -0
  107. package/dist/components/InfinityScroll/InfinityScroll.module.scss +30 -0
  108. package/dist/components/InfinityScroll/index.js +27 -0
  109. package/dist/components/Input/Input.js +110 -0
  110. package/dist/components/Input/Input.module.scss +31 -0
  111. package/dist/components/Input/index.js +27 -0
  112. package/dist/components/InstantCounter/InstantCounter.js +55 -0
  113. package/dist/components/InstantCounter/index.js +27 -0
  114. package/dist/components/LavaLamp/LavaLamp.data.js +89 -0
  115. package/dist/components/LavaLamp/LavaLamp.js +125 -0
  116. package/dist/components/LavaLamp/LavaLamp.module.scss +26 -0
  117. package/dist/components/LavaLamp/index.js +27 -0
  118. package/dist/components/LavaLamp/v2/LavaLamp.js +154 -0
  119. package/dist/components/LavaLamp/v2/LavaLamp.module.scss +23 -0
  120. package/dist/components/LinkToId/LinkToId.js +45 -0
  121. package/dist/components/LinkToId/LinkToId.module.scss +4 -0
  122. package/dist/components/LinkToId/index.js +27 -0
  123. package/dist/components/Loader/Loader.js +27 -0
  124. package/dist/components/Loader/Loader.module.scss +40 -0
  125. package/dist/components/Loader/index.js +27 -0
  126. package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +36 -0
  127. package/dist/components/LoaderDotsIndicator/index.js +27 -0
  128. package/dist/components/LoopableVideo/LoopableVideo.js +41 -0
  129. package/dist/components/LoopableVideo/index.js +27 -0
  130. package/dist/components/MainGrid/MainGrid.js +55 -0
  131. package/dist/components/MainGrid/MainGrid.module.scss +28 -0
  132. package/dist/components/MainGrid/index.js +27 -0
  133. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +32 -0
  134. package/dist/components/MutableHamburgerButton/MutableHamburgerButton.module.scss +220 -0
  135. package/dist/components/MutableHamburgerButton/index.js +27 -0
  136. package/dist/components/Notification/Notification.js +24 -0
  137. package/dist/components/Notification/Notification.module.scss +25 -0
  138. package/dist/components/Notification/index.js +27 -0
  139. package/dist/components/NumberInput/NumberInput.js +50 -0
  140. package/dist/components/NumberInput/index.js +27 -0
  141. package/dist/components/OrderableList/OrderableList.js +439 -0
  142. package/dist/components/OrderableList/OrderableList.module.scss +98 -0
  143. package/dist/components/OrderableList/index.js +27 -0
  144. package/dist/components/PaginationIndicator/PaginationIndicator.js +261 -0
  145. package/dist/components/PaginationIndicator/index.js +27 -0
  146. package/dist/components/Parallax/Parallax.js +169 -0
  147. package/dist/components/Parallax/Parallax.module.scss +28 -0
  148. package/dist/components/Parallax/index.js +27 -0
  149. package/dist/components/Parallax/math/helpers.js +134 -0
  150. package/dist/components/PasswordInput/PasswordInput.js +97 -0
  151. package/dist/components/PasswordInput/PasswordInput.module.scss +17 -0
  152. package/dist/components/PasswordInput/index.js +27 -0
  153. package/dist/components/PingPongText/PingPongText.js +76 -0
  154. package/dist/components/PingPongText/PingPongText.module.scss +4 -0
  155. package/dist/components/PingPongText/index.js +27 -0
  156. package/dist/components/PixelatedScan/PixelatedScan.js +139 -0
  157. package/dist/components/PixelatedScan/PixelatedScan.module.scss +86 -0
  158. package/dist/components/PixelatedScan/index.js +27 -0
  159. package/dist/components/Portal/Portal.js +62 -0
  160. package/dist/components/Portal/Portal.module.scss +3 -0
  161. package/dist/components/Portal/index.js +27 -0
  162. package/dist/components/ProgressBar/ProgressBar.js +113 -0
  163. package/dist/components/ProgressBar/ProgressBar.module.scss +44 -0
  164. package/dist/components/ProgressBar/index.js +27 -0
  165. package/dist/components/ProgressTexts/ProgressTexts.js +52 -0
  166. package/dist/components/ProgressTexts/ProgressTexts.module.scss +37 -0
  167. package/dist/components/ProgressTexts/index.js +27 -0
  168. package/dist/components/Radio/Radio.js +53 -0
  169. package/dist/components/Radio/Radio.module.scss +20 -0
  170. package/dist/components/Radio/index.js +27 -0
  171. package/dist/components/Radio/variants/Checkmark/Checkmark.js +20 -0
  172. package/dist/components/Radio/variants/Checkmark/Checkmark.module.scss +24 -0
  173. package/dist/components/Radio/variants/Checkmark/index.js +27 -0
  174. package/dist/components/Radio/variants/Generic/Generic.js +22 -0
  175. package/dist/components/Radio/variants/Generic/Generic.module.scss +38 -0
  176. package/dist/components/Radio/variants/Generic/index.js +27 -0
  177. package/dist/components/SectionContainer/SectionContainer.js +49 -0
  178. package/dist/components/SectionContainer/SectionContainer.module.scss +30 -0
  179. package/dist/components/SectionContainer/index.js +27 -0
  180. package/dist/components/Select/Select.js +138 -0
  181. package/dist/components/Select/Select.module.scss +60 -0
  182. package/dist/components/Select/index.js +27 -0
  183. package/dist/components/Skeleton/Skeleton.js +30 -0
  184. package/dist/components/Skeleton/Skeleton.module.scss +21 -0
  185. package/dist/components/Skeleton/index.js +27 -0
  186. package/dist/components/Slider/Slider.js +70 -0
  187. package/dist/components/Slider/Slider.module.scss +7 -0
  188. package/dist/components/Slider/index.js +27 -0
  189. package/dist/components/Spacing/Spacing.js +34 -0
  190. package/dist/components/Spacing/Spacing.module.scss +13 -0
  191. package/dist/components/Spacing/index.js +27 -0
  192. package/dist/components/StaticScroller/StaticScroller.js +72 -0
  193. package/dist/components/StaticScroller/StaticScroller.module.scss +14 -0
  194. package/dist/components/StaticScroller/index.js +27 -0
  195. package/dist/components/Switch/Switch.js +47 -0
  196. package/dist/components/Switch/Switch.module.scss +46 -0
  197. package/dist/components/Switch/index.js +27 -0
  198. package/dist/components/Table/Table.js +115 -0
  199. package/dist/components/Table/Table.module.scss +74 -0
  200. package/dist/components/Table/index.js +27 -0
  201. package/dist/components/Tabs/Tabs.js +67 -0
  202. package/dist/components/Tabs/Tabs.module.scss +40 -0
  203. package/dist/components/Tabs/index.js +27 -0
  204. package/dist/components/Text/Text.js +44 -0
  205. package/dist/components/Text/Text.module.scss +13 -0
  206. package/dist/components/Text/index.js +27 -0
  207. package/dist/components/Transition/MasksFactory/DiagonalReveal.js +49 -0
  208. package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +78 -0
  209. package/dist/components/Transition/MasksFactory/PhysicsSquares.js +96 -0
  210. package/dist/components/Transition/MasksFactory/SquareToBalls.js +67 -0
  211. package/dist/components/Transition/MasksFactory/utils.js +30 -0
  212. package/dist/components/Transition/Transition.js +323 -0
  213. package/dist/components/Transition/Transition.module.scss +211 -0
  214. package/dist/components/Transition/index.js +27 -0
  215. package/dist/components/UncontrolledTransition/UncontrolledTransition.ai.md +9 -0
  216. package/dist/components/UncontrolledTransition/UncontrolledTransition.js +110 -0
  217. package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +32 -0
  218. package/dist/components/UncontrolledTransition/index.js +27 -0
  219. package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +115 -0
  220. package/dist/components/WalletConnectionWrapper/index.js +27 -0
  221. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +59 -0
  222. package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.module.scss +5 -0
  223. package/dist/components/utilitary/ScrollAndFocusLock/index.js +27 -0
  224. package/dist/context/AsyncProcess.js +74 -0
  225. package/dist/context/ContextAsyncControl.js +92 -0
  226. package/dist/context/CustomBrowserRouter.js +50 -0
  227. package/dist/context/OneUIProvider.js +129 -0
  228. package/dist/hooks/logs/useDependencyChangeDetection.js +20 -0
  229. package/dist/hooks/logs/useIsMounting.js +13 -0
  230. package/dist/hooks/persistence/useLocalStorage.js +48 -0
  231. package/dist/hooks/shims/ObjectWatchShim.js +54 -0
  232. package/dist/hooks/ui/useAdaptiveImage.js +36 -0
  233. package/dist/hooks/ui/useAlternating.js +24 -0
  234. package/dist/hooks/ui/useBreakpoint.js +26 -0
  235. package/dist/hooks/ui/useCustomScrollbar.js +28 -0
  236. package/dist/hooks/ui/useCustomScrollbar.module.scss +20 -0
  237. package/dist/hooks/ui/useEffectIf.js +14 -0
  238. package/dist/hooks/ui/useMouseHover.js +32 -0
  239. package/dist/hooks/ui/usePaginationControls.js +136 -0
  240. package/dist/hooks/ui/usePaginationControls.module.scss +16 -0
  241. package/dist/hooks/ui/useSnapToViewport.js +26 -0
  242. package/dist/hooks/ui/useSnapToViewport.module.scss +6 -0
  243. package/dist/hooks/ui/useTilt.js +161 -0
  244. package/dist/hooks/ui/useZoomable.js +135 -0
  245. package/dist/hooks/ui/useZoomable.module.scss +34 -0
  246. package/dist/hooks/useAsyncControl.ai.md +25 -0
  247. package/dist/hooks/useAsyncControl.js +79 -0
  248. package/dist/hooks/useContainedRepositioning.js +83 -0
  249. package/dist/hooks/useCustomHistory.js +24 -0
  250. package/dist/hooks/useElementFit.js +54 -0
  251. package/dist/hooks/useFirestoreWatch.js +45 -0
  252. package/dist/hooks/useFreeze.js +17 -0
  253. package/dist/hooks/useHero.js +273 -0
  254. package/dist/hooks/useHero.module.scss +41 -0
  255. package/dist/hooks/useIntersection.js +39 -0
  256. package/dist/hooks/useMergeRefs.js +36 -0
  257. package/dist/hooks/useObserve.js +25 -0
  258. package/dist/hooks/usePagination.js +163 -0
  259. package/dist/hooks/usePooledOperation.js +52 -0
  260. package/dist/hooks/usePooling.js +52 -0
  261. package/dist/hooks/useRebound.js +32 -0
  262. package/dist/hooks/useShortIntl.ai.md +5 -0
  263. package/dist/hooks/useShortIntl.js +82 -0
  264. package/dist/hooks/utility/useAsyncMemo.js +45 -0
  265. package/dist/hooks/utility/useDepChange.js +17 -0
  266. package/dist/hooks/utility/useEvents.js +33 -0
  267. package/dist/hooks/utility/useImmediate.js +14 -0
  268. package/dist/hooks/utility/useManualInit.js +25 -0
  269. package/dist/hooks/utility/useModule.js +18 -0
  270. package/dist/hooks/utility/useQuery.js +20 -0
  271. package/dist/hooks/utility/useUniqueEffect.js +20 -0
  272. package/dist/index.js +2149 -0
  273. package/dist/index.preprocess.js +42 -0
  274. package/dist/models/DebugLogger.js +16 -0
  275. package/dist/models/GenericContract.js +51 -0
  276. package/dist/models/Orbs.js +67 -0
  277. package/dist/reac-app-env.d.js +2 -0
  278. package/dist/storybook/assets/video/txt-reversed.mp4 +0 -0
  279. package/dist/storybookUtils/index.js +44 -0
  280. package/dist/type-utils.js +6 -0
  281. package/dist/types.js +6 -0
  282. package/dist/utility.d.js +2 -0
  283. package/dist/utils/blockchain.js +46 -0
  284. package/dist/utils/e2e.js +33 -0
  285. package/dist/utils/flatten.js +19 -0
  286. package/dist/utils/formatters.js +63 -0
  287. package/dist/utils/html.utils.js +15 -0
  288. package/dist/utils/ownEvent.js +16 -0
  289. package/dist/utils/test.js +19 -0
  290. package/dist-browser/bundle.js +83650 -0
  291. package/dist-browser/bundle.js.LICENSE.txt +94 -0
  292. package/dist-browser/bundle.js.map +1 -0
  293. package/dist-ts/components/AdaptiveContainer/AdaptiveContainer.js +2 -1
  294. package/dist-ts/components/AdaptiveContainer/AdaptiveContainer.js.map +1 -1
  295. package/dist-ts/components/AnchoredTooltip/AnchoredTooltip.module.scss +13 -10
  296. package/dist-ts/components/CheckBox/CheckBox.d.ts +3 -1
  297. package/dist-ts/components/CheckBox/CheckBox.js +7 -4
  298. package/dist-ts/components/CheckBox/CheckBox.js.map +1 -1
  299. package/dist-ts/components/CheckBox/CheckBox.module.scss +5 -0
  300. package/dist-ts/components/Input/Input.js +1 -1
  301. package/dist-ts/components/Input/Input.js.map +1 -1
  302. package/dist-ts/context/OneUIProvider.d.ts +3 -1
  303. package/dist-ts/context/OneUIProvider.js.map +1 -1
  304. package/dist-ts/hooks/ui/useAdaptiveImage.d.ts +1 -1
  305. package/dist-ts/hooks/ui/useAdaptiveImage.js +1 -1
  306. package/dist-ts/hooks/ui/useAdaptiveImage.js.map +1 -1
  307. package/dist-ts/hooks/ui/useMouseHover.d.ts +2 -2
  308. package/dist-ts/hooks/ui/useMouseHover.js +6 -5
  309. package/dist-ts/hooks/ui/useMouseHover.js.map +1 -1
  310. package/dist-ts/hooks/useObserve.d.ts +1 -1
  311. package/dist-ts/hooks/useObserve.js +1 -1
  312. package/dist-ts/hooks/useObserve.js.map +1 -1
  313. package/dist-ts/index.d.ts +1 -0
  314. package/dist-ts/index.js +1 -0
  315. package/dist-ts/index.js.map +1 -1
  316. package/dist-ts/models/ImageScales.d.ts +7 -0
  317. package/dist-ts/models/ImageScales.js +9 -0
  318. package/dist-ts/models/ImageScales.js.map +1 -0
  319. package/example.html +76 -0
  320. package/package.json +11 -4
  321. package/webpack.bundle.config.js +87 -0
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useCustomHistory;
7
+ var _reactRouterDom = require("react-router-dom");
8
+ 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; }
9
+ 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; }
10
+ 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; }
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
12
+ 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); }
13
+ function useCustomHistory() {
14
+ const customHistory = (0, _reactRouterDom.useHistory)();
15
+ const {
16
+ state
17
+ } = (0, _reactRouterDom.useLocation)();
18
+ return _objectSpread(_objectSpread({}, customHistory), {}, {
19
+ goBackWithFallback(fallbackRoute) {
20
+ if (state !== null && state !== void 0 && state.internalNavigation) customHistory.goBack();else customHistory.push(fallbackRoute);
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3RSb3V0ZXJEb20iLCJyZXF1aXJlIiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJmb3JFYWNoIiwia2V5IiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIm9iaiIsInZhbHVlIiwiX3RvUHJvcGVydHlLZXkiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFyZyIsIl90b1ByaW1pdGl2ZSIsIlN0cmluZyIsImlucHV0IiwiaGludCIsInByaW0iLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsInVuZGVmaW5lZCIsInJlcyIsImNhbGwiLCJUeXBlRXJyb3IiLCJOdW1iZXIiLCJ1c2VDdXN0b21IaXN0b3J5IiwiY3VzdG9tSGlzdG9yeSIsInVzZUhpc3RvcnkiLCJzdGF0ZSIsInVzZUxvY2F0aW9uIiwiZ29CYWNrV2l0aEZhbGxiYWNrIiwiZmFsbGJhY2tSb3V0ZSIsImludGVybmFsTmF2aWdhdGlvbiIsImdvQmFjayJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDdXN0b21IaXN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUhpc3RvcnksIHVzZUxvY2F0aW9uIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIlxyXG5pbXBvcnQgeyBDdXN0b21TdGF0ZSB9IGZyb20gXCIuLi9jb250ZXh0L0N1c3RvbUJyb3dzZXJSb3V0ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUN1c3RvbUhpc3RvcnkoKSB7XHJcbiAgICBjb25zdCBjdXN0b21IaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xyXG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlTG9jYXRpb248Q3VzdG9tU3RhdGUgfCB1bmRlZmluZWQ+KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmN1c3RvbUhpc3RvcnksXHJcbiAgICAgICAgZ29CYWNrV2l0aEZhbGxiYWNrKGZhbGxiYWNrUm91dGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoc3RhdGU/LmludGVybmFsTmF2aWdhdGlvbikgY3VzdG9tSGlzdG9yeS5nb0JhY2soKTtcclxuICAgICAgICAgICAgZWxzZSBjdXN0b21IaXN0b3J5LnB1c2goZmFsbGJhY2tSb3V0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxlQUFBLEdBQUFDLE9BQUE7QUFBMEQsU0FBQUMsUUFBQUMsTUFBQSxFQUFBQyxjQUFBLFFBQUFDLElBQUEsR0FBQUMsTUFBQSxDQUFBRCxJQUFBLENBQUFGLE1BQUEsT0FBQUcsTUFBQSxDQUFBQyxxQkFBQSxRQUFBQyxPQUFBLEdBQUFGLE1BQUEsQ0FBQUMscUJBQUEsQ0FBQUosTUFBQSxHQUFBQyxjQUFBLEtBQUFJLE9BQUEsR0FBQUEsT0FBQSxDQUFBQyxNQUFBLFdBQUFDLEdBQUEsV0FBQUosTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixNQUFBLEVBQUFPLEdBQUEsRUFBQUUsVUFBQSxPQUFBUCxJQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxJQUFBLEVBQUFHLE9BQUEsWUFBQUgsSUFBQTtBQUFBLFNBQUFVLGNBQUFDLE1BQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBRixDQUFBLFVBQUFHLE1BQUEsV0FBQUYsU0FBQSxDQUFBRCxDQUFBLElBQUFDLFNBQUEsQ0FBQUQsQ0FBQSxRQUFBQSxDQUFBLE9BQUFmLE9BQUEsQ0FBQUksTUFBQSxDQUFBYyxNQUFBLE9BQUFDLE9BQUEsV0FBQUMsR0FBQSxJQUFBQyxlQUFBLENBQUFQLE1BQUEsRUFBQU0sR0FBQSxFQUFBRixNQUFBLENBQUFFLEdBQUEsU0FBQWhCLE1BQUEsQ0FBQWtCLHlCQUFBLEdBQUFsQixNQUFBLENBQUFtQixnQkFBQSxDQUFBVCxNQUFBLEVBQUFWLE1BQUEsQ0FBQWtCLHlCQUFBLENBQUFKLE1BQUEsS0FBQWxCLE9BQUEsQ0FBQUksTUFBQSxDQUFBYyxNQUFBLEdBQUFDLE9BQUEsV0FBQUMsR0FBQSxJQUFBaEIsTUFBQSxDQUFBb0IsY0FBQSxDQUFBVixNQUFBLEVBQUFNLEdBQUEsRUFBQWhCLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVMsTUFBQSxFQUFBRSxHQUFBLGlCQUFBTixNQUFBO0FBQUEsU0FBQU8sZ0JBQUFJLEdBQUEsRUFBQUwsR0FBQSxFQUFBTSxLQUFBLElBQUFOLEdBQUEsR0FBQU8sY0FBQSxDQUFBUCxHQUFBLE9BQUFBLEdBQUEsSUFBQUssR0FBQSxJQUFBckIsTUFBQSxDQUFBb0IsY0FBQSxDQUFBQyxHQUFBLEVBQUFMLEdBQUEsSUFBQU0sS0FBQSxFQUFBQSxLQUFBLEVBQUFoQixVQUFBLFFBQUFrQixZQUFBLFFBQUFDLFFBQUEsb0JBQUFKLEdBQUEsQ0FBQUwsR0FBQSxJQUFBTSxLQUFBLFdBQUFELEdBQUE7QUFBQSxTQUFBRSxlQUFBRyxHQUFBLFFBQUFWLEdBQUEsR0FBQVcsWUFBQSxDQUFBRCxHQUFBLDJCQUFBVixHQUFBLGdCQUFBQSxHQUFBLEdBQUFZLE1BQUEsQ0FBQVosR0FBQTtBQUFBLFNBQUFXLGFBQUFFLEtBQUEsRUFBQUMsSUFBQSxlQUFBRCxLQUFBLGlCQUFBQSxLQUFBLGtCQUFBQSxLQUFBLE1BQUFFLElBQUEsR0FBQUYsS0FBQSxDQUFBRyxNQUFBLENBQUFDLFdBQUEsT0FBQUYsSUFBQSxLQUFBRyxTQUFBLFFBQUFDLEdBQUEsR0FBQUosSUFBQSxDQUFBSyxJQUFBLENBQUFQLEtBQUEsRUFBQUMsSUFBQSwyQkFBQUssR0FBQSxzQkFBQUEsR0FBQSxZQUFBRSxTQUFBLDREQUFBUCxJQUFBLGdCQUFBRixNQUFBLEdBQUFVLE1BQUEsRUFBQVQsS0FBQTtBQUczQyxTQUFTVSxnQkFBZ0JBLENBQUEsRUFBRztFQUN2QyxNQUFNQyxhQUFhLEdBQUcsSUFBQUMsMEJBQVUsRUFBQyxDQUFDO0VBQ2xDLE1BQU07SUFBRUM7RUFBTSxDQUFDLEdBQUcsSUFBQUMsMkJBQVcsRUFBMEIsQ0FBQztFQUN4RCxPQUFBbEMsYUFBQSxDQUFBQSxhQUFBLEtBQ08rQixhQUFhO0lBQ2hCSSxrQkFBa0JBLENBQUNDLGFBQXFCLEVBQUU7TUFDdEMsSUFBSUgsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRUksa0JBQWtCLEVBQUVOLGFBQWEsQ0FBQ08sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUNqRFAsYUFBYSxDQUFDakMsSUFBSSxDQUFDc0MsYUFBYSxDQUFDO0lBQzFDO0VBQUM7QUFFVCJ9
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useElementFit;
7
+ var _react = require("react");
8
+ /**
9
+ * This hook receives a base width of an element and returns how much items fit **vertically** inside the referenced html element
10
+ *
11
+ * @param baseWidth The base width of each element
12
+ */
13
+ function useElementFit(baseWidth, baseHeight) {
14
+ const ref = (0, _react.useRef)(undefined);
15
+ function calculateDimension() {
16
+ var _ref$current;
17
+ function howManyItemsStackVertically() {
18
+ if (!ref.current || baseHeight === undefined) return 1;
19
+ return Math.floor(ref.current.clientHeight / baseHeight);
20
+ }
21
+ if (window.PRERENDER) return {
22
+ howManyItemsWillBeVisible: 4,
23
+ byRow: 4
24
+ };
25
+ const width = ((_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.clientWidth) || window.visualViewport.width;
26
+ const maxItemsHorizontally = Math.floor(width / baseWidth) || 1;
27
+ return {
28
+ howManyItemsWillBeVisible: maxItemsHorizontally * howManyItemsStackVertically(),
29
+ byRow: maxItemsHorizontally
30
+ };
31
+ }
32
+ const [itemsToShow, setItemsToShow] = (0, _react.useState)(window.PRERENDER ? {
33
+ byRow: 4,
34
+ howManyItemsWillBeVisible: 4
35
+ } : undefined);
36
+ (0, _react.useEffect)(() => {
37
+ setItemsToShow(calculateDimension());
38
+ function onResize() {
39
+ setItemsToShow(calculateDimension());
40
+ }
41
+ window.addEventListener("resize", onResize);
42
+ return () => {
43
+ window.removeEventListener("resize", onResize);
44
+ };
45
+ }, []);
46
+ return {
47
+ howManyItemsFit: itemsToShow === null || itemsToShow === void 0 ? void 0 : itemsToShow.howManyItemsWillBeVisible,
48
+ howManyItemsFitWithExtraRow: itemsToShow ? itemsToShow.howManyItemsWillBeVisible + itemsToShow.byRow : undefined,
49
+ anItemMore: itemsToShow ? itemsToShow.howManyItemsWillBeVisible + 1 : undefined,
50
+ howManyItemsByRow: itemsToShow === null || itemsToShow === void 0 ? void 0 : itemsToShow.byRow,
51
+ ref
52
+ };
53
+ }
54
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwidXNlRWxlbWVudEZpdCIsImJhc2VXaWR0aCIsImJhc2VIZWlnaHQiLCJyZWYiLCJ1c2VSZWYiLCJ1bmRlZmluZWQiLCJjYWxjdWxhdGVEaW1lbnNpb24iLCJfcmVmJGN1cnJlbnQiLCJob3dNYW55SXRlbXNTdGFja1ZlcnRpY2FsbHkiLCJjdXJyZW50IiwiTWF0aCIsImZsb29yIiwiY2xpZW50SGVpZ2h0Iiwid2luZG93IiwiUFJFUkVOREVSIiwiaG93TWFueUl0ZW1zV2lsbEJlVmlzaWJsZSIsImJ5Um93Iiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInZpc3VhbFZpZXdwb3J0IiwibWF4SXRlbXNIb3Jpem9udGFsbHkiLCJpdGVtc1RvU2hvdyIsInNldEl0ZW1zVG9TaG93IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJvblJlc2l6ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaG93TWFueUl0ZW1zRml0IiwiaG93TWFueUl0ZW1zRml0V2l0aEV4dHJhUm93IiwiYW5JdGVtTW9yZSIsImhvd01hbnlJdGVtc0J5Um93Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUVsZW1lbnRGaXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIFRoaXMgaG9vayByZWNlaXZlcyBhIGJhc2Ugd2lkdGggb2YgYW4gZWxlbWVudCBhbmQgcmV0dXJucyBob3cgbXVjaCBpdGVtcyBmaXQgKip2ZXJ0aWNhbGx5KiogaW5zaWRlIHRoZSByZWZlcmVuY2VkIGh0bWwgZWxlbWVudFxuICpcbiAqIEBwYXJhbSBiYXNlV2lkdGggVGhlIGJhc2Ugd2lkdGggb2YgZWFjaCBlbGVtZW50XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUVsZW1lbnRGaXQoXG4gIGJhc2VXaWR0aDogbnVtYmVyLFxuICBiYXNlSGVpZ2h0PzogbnVtYmVyXG4pOiB7XG4gIC8qKiBUaGUgYW1vdW50IG9mIGl0ZW1zIHRoYXQgYXJlIGFibGUgdG8gZml0IGluIHRoZSBhdmFpbGFibGUgd2lkdGggKi9cbiAgaG93TWFueUl0ZW1zRml0PzogbnVtYmVyO1xuICAvKiogVGhlIGFtb3VudCBvZiBpdGVtcyB0aGF0IGFyZSBhYmxlIHRvIGZpdCBpbiB0aGUgYXZhaWxhYmxlIHZpc2libGUgc3BhY2UgKyBhIHJvdyBtb3JlIHNvIGl0IGNhbiBiZSBzY3JvbGxhYmxlICovXG4gIGhvd01hbnlJdGVtc0ZpdFdpdGhFeHRyYVJvdz86IG51bWJlcjtcbiAgLyoqIEhvdyBtYW55IGl0ZW1zIHdvdWxkIGZpdCBhIHNpbmdsZSByb3cgKi9cbiAgaG93TWFueUl0ZW1zQnlSb3c/OiBudW1iZXI7XG4gIC8qKiBIb3cgbWFueSBpdGVtcyB1bnRpbCBpdCBvdmVyZmxvd3Mgd2lkdGggKi9cbiAgYW5JdGVtTW9yZT86IG51bWJlcjtcblxuICAvKiogVGhlIHJlZiB0byBiZSBzZW50IHRvIHRoZSBlbGVtZW50IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBpdGVtcyAqL1xuICByZWY6IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudCB8IHVuZGVmaW5lZD47XG59IHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50Pih1bmRlZmluZWQpO1xuICBmdW5jdGlvbiBjYWxjdWxhdGVEaW1lbnNpb24oKSB7XG4gICAgZnVuY3Rpb24gaG93TWFueUl0ZW1zU3RhY2tWZXJ0aWNhbGx5KCkge1xuICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCBiYXNlSGVpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IocmVmLmN1cnJlbnQhLmNsaWVudEhlaWdodCAvIGJhc2VIZWlnaHQpO1xuICAgIH1cbiAgICBpZiAoKHdpbmRvdyBhcyBhbnkpLlBSRVJFTkRFUilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhvd01hbnlJdGVtc1dpbGxCZVZpc2libGU6IDQsXG4gICAgICAgIGJ5Um93OiA0LFxuICAgICAgfTtcblxuICAgIGNvbnN0IHdpZHRoID0gcmVmLmN1cnJlbnQ/LmNsaWVudFdpZHRoIHx8IHdpbmRvdy52aXN1YWxWaWV3cG9ydCEud2lkdGg7XG4gICAgY29uc3QgbWF4SXRlbXNIb3Jpem9udGFsbHkgPSBNYXRoLmZsb29yKHdpZHRoIC8gYmFzZVdpZHRoKSB8fCAxO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhvd01hbnlJdGVtc1dpbGxCZVZpc2libGU6XG4gICAgICAgIG1heEl0ZW1zSG9yaXpvbnRhbGx5ICogaG93TWFueUl0ZW1zU3RhY2tWZXJ0aWNhbGx5KCksXG4gICAgICBieVJvdzogbWF4SXRlbXNIb3Jpem9udGFsbHksXG4gICAgfTtcbiAgfVxuICBjb25zdCBbaXRlbXNUb1Nob3csIHNldEl0ZW1zVG9TaG93XSA9IHVzZVN0YXRlPFxuICAgIFJldHVyblR5cGU8dHlwZW9mIGNhbGN1bGF0ZURpbWVuc2lvbj4gfCB1bmRlZmluZWRcbiAgPihcbiAgICAod2luZG93IGFzIGFueSkuUFJFUkVOREVSXG4gICAgICA/IHtcbiAgICAgICAgICBieVJvdzogNCxcbiAgICAgICAgICBob3dNYW55SXRlbXNXaWxsQmVWaXNpYmxlOiA0LFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZFxuICApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEl0ZW1zVG9TaG93KGNhbGN1bGF0ZURpbWVuc2lvbigpKTtcbiAgICBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgICAgIHNldEl0ZW1zVG9TaG93KGNhbGN1bGF0ZURpbWVuc2lvbigpKTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXNpemUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7XG4gICAgaG93TWFueUl0ZW1zRml0OiBpdGVtc1RvU2hvdz8uaG93TWFueUl0ZW1zV2lsbEJlVmlzaWJsZSxcbiAgICBob3dNYW55SXRlbXNGaXRXaXRoRXh0cmFSb3c6IGl0ZW1zVG9TaG93XG4gICAgICA/IGl0ZW1zVG9TaG93Lmhvd01hbnlJdGVtc1dpbGxCZVZpc2libGUgKyBpdGVtc1RvU2hvdy5ieVJvd1xuICAgICAgOiB1bmRlZmluZWQsXG4gICAgYW5JdGVtTW9yZTogaXRlbXNUb1Nob3dcbiAgICAgID8gaXRlbXNUb1Nob3cuaG93TWFueUl0ZW1zV2lsbEJlVmlzaWJsZSArIDFcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGhvd01hbnlJdGVtc0J5Um93OiBpdGVtc1RvU2hvdz8uYnlSb3csXG4gICAgcmVmLFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBU0MsYUFBYUEsQ0FDbkNDLFNBQWlCLEVBQ2pCQyxVQUFtQixFQWFuQjtFQUNBLE1BQU1DLEdBQUcsR0FBRyxJQUFBQyxhQUFNLEVBQWlCQyxTQUFTLENBQUM7RUFDN0MsU0FBU0Msa0JBQWtCQSxDQUFBLEVBQUc7SUFBQSxJQUFBQyxZQUFBO0lBQzVCLFNBQVNDLDJCQUEyQkEsQ0FBQSxFQUFHO01BQ3JDLElBQUksQ0FBQ0wsR0FBRyxDQUFDTSxPQUFPLElBQUlQLFVBQVUsS0FBS0csU0FBUyxFQUFFLE9BQU8sQ0FBQztNQUN0RCxPQUFPSyxJQUFJLENBQUNDLEtBQUssQ0FBQ1IsR0FBRyxDQUFDTSxPQUFPLENBQUVHLFlBQVksR0FBR1YsVUFBVSxDQUFDO0lBQzNEO0lBQ0EsSUFBS1csTUFBTSxDQUFTQyxTQUFTLEVBQzNCLE9BQU87TUFDTEMseUJBQXlCLEVBQUUsQ0FBQztNQUM1QkMsS0FBSyxFQUFFO0lBQ1QsQ0FBQztJQUVILE1BQU1DLEtBQUssR0FBRyxFQUFBVixZQUFBLEdBQUFKLEdBQUcsQ0FBQ00sT0FBTyxjQUFBRixZQUFBLHVCQUFYQSxZQUFBLENBQWFXLFdBQVcsS0FBSUwsTUFBTSxDQUFDTSxjQUFjLENBQUVGLEtBQUs7SUFDdEUsTUFBTUcsb0JBQW9CLEdBQUdWLElBQUksQ0FBQ0MsS0FBSyxDQUFDTSxLQUFLLEdBQUdoQixTQUFTLENBQUMsSUFBSSxDQUFDO0lBRS9ELE9BQU87TUFDTGMseUJBQXlCLEVBQ3ZCSyxvQkFBb0IsR0FBR1osMkJBQTJCLENBQUMsQ0FBQztNQUN0RFEsS0FBSyxFQUFFSTtJQUNULENBQUM7RUFDSDtFQUNBLE1BQU0sQ0FBQ0MsV0FBVyxFQUFFQyxjQUFjLENBQUMsR0FBRyxJQUFBQyxlQUFRLEVBRzNDVixNQUFNLENBQVNDLFNBQVMsR0FDckI7SUFDRUUsS0FBSyxFQUFFLENBQUM7SUFDUkQseUJBQXlCLEVBQUU7RUFDN0IsQ0FBQyxHQUNEVixTQUNOLENBQUM7RUFDRCxJQUFBbUIsZ0JBQVMsRUFBQyxNQUFNO0lBQ2RGLGNBQWMsQ0FBQ2hCLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUNwQyxTQUFTbUIsUUFBUUEsQ0FBQSxFQUFHO01BQ2xCSCxjQUFjLENBQUNoQixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFDdEM7SUFDQU8sTUFBTSxDQUFDYSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVELFFBQVEsQ0FBQztJQUMzQyxPQUFPLE1BQU07TUFDWFosTUFBTSxDQUFDYyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUVGLFFBQVEsQ0FBQztJQUNoRCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLE9BQU87SUFDTEcsZUFBZSxFQUFFUCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRU4seUJBQXlCO0lBQ3ZEYywyQkFBMkIsRUFBRVIsV0FBVyxHQUNwQ0EsV0FBVyxDQUFDTix5QkFBeUIsR0FBR00sV0FBVyxDQUFDTCxLQUFLLEdBQ3pEWCxTQUFTO0lBQ2J5QixVQUFVLEVBQUVULFdBQVcsR0FDbkJBLFdBQVcsQ0FBQ04seUJBQXlCLEdBQUcsQ0FBQyxHQUN6Q1YsU0FBUztJQUNiMEIsaUJBQWlCLEVBQUVWLFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFTCxLQUFLO0lBQ3JDYjtFQUNGLENBQUM7QUFDSCJ9
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useFirestoreWatch;
7
+ var _react = require("react");
8
+ function useFirestoreWatch(queryFactory, params) {
9
+ const [docsList, updateList] = (0, _react.useState)();
10
+ (0, _react.useEffect)(() => {
11
+ const unsub = queryFactory(...params)(changes => {
12
+ updateList(function () {
13
+ let prevList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
14
+ for (let docChange of changes) {
15
+ if (docChange.type === undefined) {
16
+ const existing = prevList.find(f => f.id === docChange.doc.id);
17
+ if (existing) docChange.type = "modified";else docChange.type = "added";
18
+ }
19
+ switch (docChange.type) {
20
+ case 'added':
21
+ if (!prevList.find(f => f.id === docChange.doc.id)) {
22
+ prevList.unshift(docChange.doc);
23
+ }
24
+ break;
25
+ case 'modified':
26
+ prevList = prevList.map(item => {
27
+ if (item.id === docChange.doc.id) for (let key in docChange.doc) {
28
+ item[key] = docChange.doc[key];
29
+ }
30
+ return item;
31
+ });
32
+ break;
33
+ case 'removed':
34
+ prevList = prevList.filter(item => item.id !== docChange.doc.id);
35
+ break;
36
+ }
37
+ }
38
+ return [...prevList];
39
+ });
40
+ });
41
+ return unsub;
42
+ }, params);
43
+ return docsList;
44
+ }
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwidXNlRmlyZXN0b3JlV2F0Y2giLCJxdWVyeUZhY3RvcnkiLCJwYXJhbXMiLCJkb2NzTGlzdCIsInVwZGF0ZUxpc3QiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVuc3ViIiwiY2hhbmdlcyIsInByZXZMaXN0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZG9jQ2hhbmdlIiwidHlwZSIsImV4aXN0aW5nIiwiZmluZCIsImYiLCJpZCIsImRvYyIsInVuc2hpZnQiLCJtYXAiLCJpdGVtIiwia2V5IiwiZmlsdGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUZpcmVzdG9yZVdhdGNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG9jdW1lbnRDaGFuZ2VUeXBlLCBVbnN1YnNjcmliZSB9IGZyb20gXCJmaXJlYmFzZS9maXJlc3RvcmVcIjtcclxuXHJcbnR5cGUgU25hcHNob3RGYWN0b3J5Q2I8RCBleHRlbmRzIGFueT4gPSAoY2hhbmdlczoge1xyXG4gICAgZG9jOiBELFxyXG4gICAgdHlwZTogRG9jdW1lbnRDaGFuZ2VUeXBlXHJcbn1bXSkgPT4gdm9pZFxyXG5cclxuZXhwb3J0IHR5cGUgU25hcHNob3RGYWN0b3J5UmV0dXJuPEQgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4gPSAoY2I6IFNuYXBzaG90RmFjdG9yeUNiPEQ+KSA9PiBVbnN1YnNjcmliZVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlRmlyZXN0b3JlV2F0Y2g8RCBleHRlbmRzIHsgaWQ6IHN0cmluZyB9LCBQIGV4dGVuZHMgYW55W10+KHF1ZXJ5RmFjdG9yeTogKC4uLnBhcmFtczogUCkgPT4gU25hcHNob3RGYWN0b3J5UmV0dXJuPEQ+LCBwYXJhbXM6IFApIHtcclxuICAgIGNvbnN0IFtkb2NzTGlzdCwgdXBkYXRlTGlzdF0gPSB1c2VTdGF0ZTxEW10+KCk7XHJcblxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCB1bnN1YiA9IHF1ZXJ5RmFjdG9yeSguLi5wYXJhbXMpKChjaGFuZ2VzKSA9PiB7XHJcbiAgICAgICAgICAgIHVwZGF0ZUxpc3QoKHByZXZMaXN0ID0gW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGRvY0NoYW5nZSBvZiBjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY0NoYW5nZS50eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcHJldkxpc3QuZmluZCgoZikgPT4gZi5pZCA9PT0gZG9jQ2hhbmdlLmRvYy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIGRvY0NoYW5nZS50eXBlID0gXCJtb2RpZmllZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRvY0NoYW5nZS50eXBlID0gXCJhZGRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZG9jQ2hhbmdlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2TGlzdC5maW5kKChmKSA9PiBmLmlkID09PSBkb2NDaGFuZ2UuZG9jLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZMaXN0LnVuc2hpZnQoZG9jQ2hhbmdlLmRvYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vZGlmaWVkJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZMaXN0ID0gcHJldkxpc3QhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBkb2NDaGFuZ2UuZG9jLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gZG9jQ2hhbmdlLmRvYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtrZXldID0gZG9jQ2hhbmdlLmRvY1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmVkJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZMaXN0ID0gcHJldkxpc3QhLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5pZCAhPT0gZG9jQ2hhbmdlLmRvYy5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2TGlzdF1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gdW5zdWI7XHJcbiAgICB9LCBwYXJhbXMpO1xyXG5cclxuICAgIHJldHVybiBkb2NzTGlzdDtcclxufSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBVWUsU0FBU0MsaUJBQWlCQSxDQUE0Q0MsWUFBd0QsRUFBRUMsTUFBUyxFQUFFO0VBQ3RKLE1BQU0sQ0FBQ0MsUUFBUSxFQUFFQyxVQUFVLENBQUMsR0FBRyxJQUFBQyxlQUFRLEVBQU0sQ0FBQztFQUU5QyxJQUFBQyxnQkFBUyxFQUFDLE1BQU07SUFDWixNQUFNQyxLQUFLLEdBQUdOLFlBQVksQ0FBQyxHQUFHQyxNQUFNLENBQUMsQ0FBRU0sT0FBTyxJQUFLO01BQy9DSixVQUFVLENBQUMsWUFBbUI7UUFBQSxJQUFsQkssUUFBUSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxFQUFFO1FBQ3JCLEtBQUssSUFBSUcsU0FBUyxJQUFJTCxPQUFPLEVBQUU7VUFDM0IsSUFBSUssU0FBUyxDQUFDQyxJQUFJLEtBQUtGLFNBQVMsRUFBRTtZQUNoQyxNQUFNRyxRQUFRLEdBQUdOLFFBQVEsQ0FBQ08sSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ0MsRUFBRSxLQUFLTCxTQUFTLENBQUNNLEdBQUcsQ0FBQ0QsRUFBRSxDQUFDO1lBQ2hFLElBQUlILFFBQVEsRUFBRUYsU0FBUyxDQUFDQyxJQUFJLEdBQUcsVUFBVSxNQUNwQ0QsU0FBUyxDQUFDQyxJQUFJLEdBQUcsT0FBTztVQUMvQjtVQUNBLFFBQVFELFNBQVMsQ0FBQ0MsSUFBSTtZQUNsQixLQUFLLE9BQU87Y0FDUixJQUFJLENBQUNMLFFBQVEsQ0FBQ08sSUFBSSxDQUFFQyxDQUFDLElBQUtBLENBQUMsQ0FBQ0MsRUFBRSxLQUFLTCxTQUFTLENBQUNNLEdBQUcsQ0FBQ0QsRUFBRSxDQUFDLEVBQUU7Z0JBQ2xEVCxRQUFRLENBQUNXLE9BQU8sQ0FBQ1AsU0FBUyxDQUFDTSxHQUFHLENBQUM7Y0FDbkM7Y0FDQTtZQUNKLEtBQUssVUFBVTtjQUNYVixRQUFRLEdBQUdBLFFBQVEsQ0FBRVksR0FBRyxDQUFFQyxJQUFJLElBQUs7Z0JBQy9CLElBQUlBLElBQUksQ0FBQ0osRUFBRSxLQUFLTCxTQUFTLENBQUNNLEdBQUcsQ0FBQ0QsRUFBRSxFQUM1QixLQUFLLElBQUlLLEdBQUcsSUFBSVYsU0FBUyxDQUFDTSxHQUFHLEVBQUU7a0JBQzNCRyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxHQUFHVixTQUFTLENBQUNNLEdBQUcsQ0FBQ0ksR0FBRyxDQUFDO2dCQUNsQztnQkFDSixPQUFPRCxJQUFJO2NBQ2YsQ0FBQyxDQUFDO2NBQ0Y7WUFDSixLQUFLLFNBQVM7Y0FDVmIsUUFBUSxHQUFHQSxRQUFRLENBQUVlLE1BQU0sQ0FDdEJGLElBQUksSUFBS0EsSUFBSSxDQUFDSixFQUFFLEtBQUtMLFNBQVMsQ0FBQ00sR0FBRyxDQUFDRCxFQUN4QyxDQUFDO2NBQ0Q7VUFDUjtRQUNKO1FBRUEsT0FBTyxDQUFDLEdBQUdULFFBQVEsQ0FBQztNQUN4QixDQUFDLENBQUM7SUFFTixDQUFDLENBQUM7SUFDRixPQUFPRixLQUFLO0VBQ2hCLENBQUMsRUFBRUwsTUFBTSxDQUFDO0VBRVYsT0FBT0MsUUFBUTtBQUNuQiJ9
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useFreeze;
7
+ var _react = require("react");
8
+ /**
9
+ * This hook pipes a data and when it is set to a falsy value ("", undefined, null, 0),
10
+ * it returns the previous valid value
11
+ */
12
+ function useFreeze(something) {
13
+ const currChildOrPrev = (0, _react.useRef)(undefined);
14
+ currChildOrPrev.current = something === undefined ? currChildOrPrev.current : something;
15
+ return currChildOrPrev.current;
16
+ }
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwidXNlRnJlZXplIiwic29tZXRoaW5nIiwiY3VyckNoaWxkT3JQcmV2IiwidXNlUmVmIiwidW5kZWZpbmVkIiwiY3VycmVudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VGcmVlemUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogVGhpcyBob29rIHBpcGVzIGEgZGF0YSBhbmQgd2hlbiBpdCBpcyBzZXQgdG8gYSBmYWxzeSB2YWx1ZSAoXCJcIiwgdW5kZWZpbmVkLCBudWxsLCAwKSxcbiAqIGl0IHJldHVybnMgdGhlIHByZXZpb3VzIHZhbGlkIHZhbHVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUZyZWV6ZTxUPihzb21ldGhpbmc6IFQpIHtcbiAgY29uc3QgY3VyckNoaWxkT3JQcmV2ID0gdXNlUmVmPFQ+KHVuZGVmaW5lZCk7XG4gIGN1cnJDaGlsZE9yUHJldi5jdXJyZW50ID1cbiAgICBzb21ldGhpbmcgPT09IHVuZGVmaW5lZCA/IGN1cnJDaGlsZE9yUHJldi5jdXJyZW50IDogc29tZXRoaW5nO1xuICByZXR1cm4gY3VyckNoaWxkT3JQcmV2LmN1cnJlbnQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBU0MsU0FBU0EsQ0FBSUMsU0FBWSxFQUFFO0VBQ2pELE1BQU1DLGVBQWUsR0FBRyxJQUFBQyxhQUFNLEVBQUlDLFNBQVMsQ0FBQztFQUM1Q0YsZUFBZSxDQUFDRyxPQUFPLEdBQ3JCSixTQUFTLEtBQUtHLFNBQVMsR0FBR0YsZUFBZSxDQUFDRyxPQUFPLEdBQUdKLFNBQVM7RUFDL0QsT0FBT0MsZUFBZSxDQUFDRyxPQUFPO0FBQ2hDIn0=
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TRANSITION_FACTORY = void 0;
7
+ exports.default = useHero;
8
+ var _react = require("react");
9
+ var _ownEvent = _interopRequireDefault(require("../utils/ownEvent"));
10
+ var _useHeroModule = _interopRequireDefault(require("./useHero.module.scss"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ 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; }
13
+ 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; }
14
+ 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; }
15
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
16
+ 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); }
17
+ const ID = id => "".concat(id, "-hero");
18
+ const viewport = window.visualViewport;
19
+ const DATA_TAG_HERO_COMPONENT = "data-hero-component";
20
+ function triggerDynamicComponents(clone, componentsFromOriginThatWillAppear, origin) {
21
+ const idsThatWillAppear = componentsFromOriginThatWillAppear.map(a => a.getAttribute(DATA_TAG_HERO_COMPONENT));
22
+ const preexistingComponents = Array.from(clone.querySelectorAll("[".concat(DATA_TAG_HERO_COMPONENT, "]")));
23
+ const removedElements = preexistingComponents.filter(el => !idsThatWillAppear.includes(el.getAttribute(DATA_TAG_HERO_COMPONENT)));
24
+ for (let elementThatIsBeingRemoved of removedElements) {
25
+ for (let heightKey of ["height", "minHeight", "maxHeight"]) elementThatIsBeingRemoved.style[heightKey] = "".concat(elementThatIsBeingRemoved.clientHeight, "px");
26
+ }
27
+ setTimeout(() => {
28
+ for (let elementThatIsBeingRemoved of removedElements) {
29
+ for (let heightKey of ["height", "minHeight", "maxHeight"]) elementThatIsBeingRemoved.style[heightKey] = "0px";
30
+ elementThatIsBeingRemoved.style.opacity = "0";
31
+ }
32
+ }, 0);
33
+ for (let componentThatWillAppear of componentsFromOriginThatWillAppear) {
34
+ const alreadyInjectedElement = !!clone.querySelector("[".concat(DATA_TAG_HERO_COMPONENT, "=\"").concat(componentThatWillAppear.getAttribute(DATA_TAG_HERO_COMPONENT), "\"]"));
35
+ if (!alreadyInjectedElement) {
36
+ function recursiveBuildPath(fromElement) {
37
+ let pathSuffix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
38
+ if (fromElement === origin) return pathSuffix;
39
+ const parent = fromElement.parentElement;
40
+ const parentChilds = Array.from(parent.children);
41
+ const elChildSelector = ":nth-child(".concat(parentChilds.indexOf(fromElement) + 1, ")");
42
+ if (fromElement !== origin) return recursiveBuildPath(parent, "".concat(elChildSelector).concat(pathSuffix ? ">".concat(pathSuffix) : ""));else return pathSuffix;
43
+ }
44
+ const whatIsTheElementPathFromCloneElement = recursiveBuildPath(componentThatWillAppear.parentElement);
45
+ const insertAtIndex = Array.from(componentThatWillAppear.parentElement.children).indexOf(componentThatWillAppear);
46
+ const targetElementClone = componentThatWillAppear.cloneNode(true);
47
+ for (let heightKey of ["height", "minHeight", "maxHeight"]) targetElementClone.style[heightKey] = "0px";
48
+ const shouldBeInsertedAtElement = whatIsTheElementPathFromCloneElement ? clone.querySelector(whatIsTheElementPathFromCloneElement) : clone;
49
+ const remainingIndexes = Array.from(shouldBeInsertedAtElement.children).map((el, i) => removedElements.includes(el) ? undefined : i).filter(e => e !== undefined);
50
+ if (insertAtIndex === remainingIndexes.length) shouldBeInsertedAtElement.append(targetElementClone);else shouldBeInsertedAtElement.insertBefore(targetElementClone, shouldBeInsertedAtElement.childNodes.item(remainingIndexes[insertAtIndex]));
51
+ setTimeout(() => {
52
+ for (let heightKey of ["height", "minHeight", "maxHeight"]) targetElementClone.style[heightKey] = "".concat(componentThatWillAppear.clientHeight, "px");
53
+ }, 0);
54
+ }
55
+ }
56
+ }
57
+ const ALWAYS_TRANSITION = ["top", "left"];
58
+
59
+ /**
60
+ * This hook implements the logic for a hero animation between 2 elements sharing the same id
61
+ */
62
+ function useHero(id) {
63
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
64
+ propsToTransition: []
65
+ };
66
+ let events = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
67
+ const {
68
+ propsToTransition: _p = [],
69
+ "data-preffix": dataPreffix,
70
+ repeatable
71
+ } = options;
72
+ const propsToTransition = (0, _react.useMemo)(() => _p.map(p => p.replace(/([A-Z])/g, (_, val) => "-".concat(val.toLowerCase()))), [_p]);
73
+ const _dataPreffix = dataPreffix ? "-".concat(dataPreffix) : "";
74
+ const dataProperty = "data".concat(_dataPreffix, "-hero");
75
+ const heroRef = (0, _react.useRef)(null);
76
+ (0, _react.useLayoutEffect)(() => {
77
+ heroRef.current.setAttribute(dataProperty, id);
78
+ }, [id]);
79
+ const getHerosOnScreen = (0, _react.useCallback)(() => {
80
+ const otherElements = Array.from(document.querySelectorAll("[".concat(dataProperty, "=\"").concat(id, "\"]"))).filter(el => el !== heroRef.current);
81
+ return otherElements;
82
+ }, [id]);
83
+ function triggerHeroAnimation() {
84
+ const allPropsToTransition = options.overridePropsToTransition ? [...ALWAYS_TRANSITION, ...propsToTransition] : ["width", "height", ...ALWAYS_TRANSITION, ...propsToTransition];
85
+ const shouldHeroFn = events.onHeroDetect || function () {
86
+ return true;
87
+ };
88
+ const otherElements = getHerosOnScreen().filter(el => shouldHeroFn(el, heroRef.current));
89
+ const currentElement = heroRef.current;
90
+ const currentElCoordinates = currentElement.getBoundingClientRect();
91
+ if (process.env.NODE_ENV === "development" && otherElements.length > 2) console.warn("There are too many elements to transition to, I will transition to the first I find", otherElements);
92
+ const otherElement = otherElements.find(el => el !== heroRef.current);
93
+ if (otherElement) {
94
+ const [originContainer, targetContainer] = events.onBeforeTransition ? events.onBeforeTransition(otherElement, heroRef.current) : [viewport, viewport];
95
+ const shouldSkip = isElementOutsideContainer(targetContainer, currentElCoordinates) || isElementOutsideContainer(originContainer, otherElement.getBoundingClientRect()) ? (events.onHeroSkip || (() => true))(otherElement, heroRef.current) : false;
96
+ if (shouldSkip) {
97
+ var _events$onHeroSkipped;
98
+ (_events$onHeroSkipped = events.onHeroSkipped) === null || _events$onHeroSkipped === void 0 || _events$onHeroSkipped.call(events);
99
+ return;
100
+ }
101
+ const oldClone = document.querySelector("[".concat(dataProperty, "-clone=\"").concat(ID(id), "\"]"));
102
+ const clone = oldClone || otherElement.cloneNode(true);
103
+ if (events.onHeroCloned && !oldClone) events.onHeroCloned(clone);
104
+
105
+ // Clean up thos properties that can cause confusion since it's a clone
106
+ clone.style.visibility = "";
107
+ clone.removeAttribute(dataProperty);
108
+ clone.setAttribute("".concat(dataProperty, "-clone"), ID(id));
109
+
110
+ /**
111
+ * If it's repeatable, we should keep the flag that indicates the hero existance
112
+ */
113
+ if (!repeatable)
114
+ // Since a transition is now triggering from the old element, he cannot be considered for other transitions
115
+ otherElement.removeAttribute(dataProperty);
116
+ function willTheHeroMove(origin, target) {
117
+ const willItMove = !(Math.trunc(origin.top) === Math.trunc(target.top) && Math.trunc(origin.left) === Math.trunc(target.left) && Math.trunc(origin.width) === Math.trunc(target.width) && Math.trunc(origin.height) === Math.trunc(target.height));
118
+ return willItMove;
119
+ }
120
+
121
+ /**
122
+ *
123
+ * @param el
124
+ * @returns Returns if it will move
125
+ */
126
+ function setCloneToCoordinatesOf(el) {
127
+ const coordinates = el.getBoundingClientRect();
128
+ const currentCoordinates = clone.getBoundingClientRect();
129
+ const willMove = willTheHeroMove(coordinates, currentCoordinates);
130
+ clone.style.position = "fixed";
131
+ clone.style.top = "".concat(coordinates.top, "px");
132
+ clone.style.left = "".concat(coordinates.left, "px");
133
+ if (allPropsToTransition.includes("width")) clone.style.width = "".concat(coordinates.width, "px");
134
+ if (allPropsToTransition.includes("height")) clone.style.height = "".concat(coordinates.height, "px");
135
+ return willMove;
136
+ }
137
+ const coordinates = otherElement.getBoundingClientRect();
138
+ const currentCoordinates = heroRef.current.getBoundingClientRect();
139
+ const itWontMove = !willTheHeroMove(coordinates, currentCoordinates);
140
+ if (itWontMove) {
141
+ var _events$onHeroEnd;
142
+ (_events$onHeroEnd = events.onHeroEnd) === null || _events$onHeroEnd === void 0 || _events$onHeroEnd.call(events);
143
+ return;
144
+ }
145
+ if (!oldClone) {
146
+ /** Set the clone over the starting element */
147
+ setCloneToCoordinatesOf(otherElement);
148
+ document.body.appendChild(clone);
149
+ }
150
+ heroRef.current.style.visibility = "hidden";
151
+ otherElement.style.visibility = "hidden";
152
+ for (let propToTransition of propsToTransition) {
153
+ clone.style[propToTransition] = window.getComputedStyle(otherElement)[propToTransition];
154
+ }
155
+ clone.style.transition = "".concat(allPropsToTransition.map(prop => "".concat(prop.replace(/[A-Z]/g, sub => "-".concat(sub.toLowerCase())), " var(--animation--speed-fast, 250ms) ease-out")).join(", "));
156
+ setTimeout(() => {
157
+ const elItWillTransitionTo = heroRef.current;
158
+ const cleanup = () => {
159
+ if (events.onHeroEnd) events.onHeroEnd();
160
+ if (elItWillTransitionTo) {
161
+ if (repeatable) elItWillTransitionTo.setAttribute(dataProperty, id);
162
+ elItWillTransitionTo.style.visibility = "";
163
+ }
164
+ setTimeout(() => {
165
+ clone.remove();
166
+ }, 0);
167
+ };
168
+ triggerDynamicComponents(clone, Array.from(heroRef.current.querySelectorAll("[".concat(DATA_TAG_HERO_COMPONENT, "]"))), currentElement);
169
+ if (events.onHeroStart) {
170
+ events.onHeroStart(clone, otherElement, heroRef.current);
171
+ }
172
+ if (!elItWillTransitionTo) {
173
+ cleanup();
174
+ return;
175
+ }
176
+ /** Set the clone over the new position */
177
+ const willMove = setCloneToCoordinatesOf(elItWillTransitionTo);
178
+ if (!willMove) cleanup();else {
179
+ for (let propToTransition of propsToTransition) clone.style[propToTransition] = window.getComputedStyle(elItWillTransitionTo)[propToTransition];
180
+ let initialOffset;
181
+ const s = _ref => {
182
+ let {
183
+ target
184
+ } = _ref;
185
+ const d = target;
186
+ if (d.contains(elItWillTransitionTo)) {
187
+ if (initialOffset === undefined) initialOffset = d.scrollTop;else clone.style.marginTop = "".concat(-(d.scrollTop - initialOffset), "px");
188
+ }
189
+ };
190
+ const transitionEndCb = (0, _ownEvent.default)(_ref2 => {
191
+ let {
192
+ target,
193
+ currentTarget
194
+ } = _ref2;
195
+ if (target === currentTarget) cleanup();
196
+ document.removeEventListener("scroll", s, true);
197
+ });
198
+ document.addEventListener("scroll", s, true);
199
+ clone.addEventListener("transitionend", transitionEndCb);
200
+ clone.addEventListener("transitionstart", () => {
201
+ const onCancelCb = (0, _ownEvent.default)(e => {
202
+ clone.removeEventListener("transitionend", transitionEndCb);
203
+ clone.removeEventListener("transitioncancel", onCancelCb);
204
+ });
205
+ clone.addEventListener("transitioncancel", onCancelCb);
206
+ });
207
+ }
208
+ }, 0);
209
+ }
210
+ }
211
+ (0, _react.useEffect)(() => {
212
+ triggerHeroAnimation();
213
+ }, []);
214
+ return {
215
+ heroRef,
216
+ getHerosOnScreen,
217
+ trigger: triggerHeroAnimation,
218
+ heroComponentRef: componentId => elRef => {
219
+ if (elRef) {
220
+ elRef.setAttribute(DATA_TAG_HERO_COMPONENT, componentId);
221
+ elRef.classList.add(_useHeroModule.default.component);
222
+ }
223
+ }
224
+ };
225
+ }
226
+ function isElementOutsideViewport(coordinates) {
227
+ const elementOverflowsViewport = coordinates.left >= viewport.width || coordinates.top >= viewport.height;
228
+ const elementUnderflowsViewport = coordinates.left <= -coordinates.width || coordinates.top <= -coordinates.height;
229
+ return elementOverflowsViewport || elementUnderflowsViewport;
230
+ }
231
+ function isElementOutsideContainer(container, coordinates) {
232
+ if (container instanceof VisualViewport) {
233
+ return isElementOutsideViewport(coordinates);
234
+ } else {
235
+ const containerBounds = container.getBoundingClientRect();
236
+ const isContainerOutsideViewport = isElementOutsideViewport(containerBounds);
237
+ if (isContainerOutsideViewport) return true;
238
+ const elementOverflowsViewport = coordinates.left >= containerBounds.left + containerBounds.width || coordinates.top >= containerBounds.top + containerBounds.height;
239
+ const elementUnderflowsViewport = containerBounds.left - coordinates.left >= coordinates.width || containerBounds.top - coordinates.top >= coordinates.height;
240
+ return elementUnderflowsViewport || elementOverflowsViewport;
241
+ }
242
+ }
243
+ function centerPoint(rect) {
244
+ return [rect.left + rect.width / 2, rect.top + rect.height / 2];
245
+ }
246
+ const angle = (pointA, pointB) => Number((Math.atan2(pointA[1] - pointB[1], pointA[0] - pointB[0]) * (179.08 / Math.PI)).toFixed(5));
247
+ const TRANSITION_FACTORY = exports.TRANSITION_FACTORY = {
248
+ ACCELERATION: events => _objectSpread(_objectSpread({}, events), {}, {
249
+ onHeroStart(clone, origin, target) {
250
+ if (events !== null && events !== void 0 && events.onHeroStart) events.onHeroStart(clone, origin, target);
251
+ clone.classList.add(_useHeroModule.default.acceleration);
252
+ const centerPointOrigin = centerPoint(origin.getBoundingClientRect());
253
+ const centerPointDestination = centerPoint(target.getBoundingClientRect());
254
+ const angleBetweenElements = angle(centerPointOrigin, centerPointDestination);
255
+ const vectorX = Math.sin(angleBetweenElements);
256
+ const vectorY = Math.cos(angleBetweenElements);
257
+ const rotateY = (10 * vectorY).toFixed(0);
258
+ const originX = (vectorY + 1) * 50;
259
+ const rotateX = -(10 * vectorX).toFixed(0);
260
+ const originY = (vectorX + 1) * 50;
261
+ clone.style.setProperty("--stage-1", "rotateY(".concat(rotateY, "deg) rotateX(").concat(-rotateX, "deg)"));
262
+ clone.style.setProperty("--stage-2", "rotateY(".concat(-rotateY * 0.3, "deg) rotateX(").concat(rotateX * 0.3, "deg)"));
263
+ clone.style.setProperty("--origin-1", "".concat(originX, "% ").concat(originY, "%"));
264
+ clone.style.setProperty("--origin-2", "".concat(100 - originX, "% ").concat(100 - originY, "%"));
265
+ document.body.style.perspective = "100vw";
266
+ },
267
+ onHeroEnd() {
268
+ if (events !== null && events !== void 0 && events.onHeroEnd) events.onHeroEnd();
269
+ document.body.style.perspective = "";
270
+ }
271
+ })
272
+ };
273
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX293bkV2ZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl91c2VIZXJvTW9kdWxlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJrZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXJnIiwiX3RvUHJpbWl0aXZlIiwiU3RyaW5nIiwiaW5wdXQiLCJoaW50IiwicHJpbSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwidW5kZWZpbmVkIiwicmVzIiwiY2FsbCIsIlR5cGVFcnJvciIsIk51bWJlciIsIklEIiwiaWQiLCJjb25jYXQiLCJ2aWV3cG9ydCIsIndpbmRvdyIsInZpc3VhbFZpZXdwb3J0IiwiREFUQV9UQUdfSEVST19DT01QT05FTlQiLCJ0cmlnZ2VyRHluYW1pY0NvbXBvbmVudHMiLCJjbG9uZSIsImNvbXBvbmVudHNGcm9tT3JpZ2luVGhhdFdpbGxBcHBlYXIiLCJvcmlnaW4iLCJpZHNUaGF0V2lsbEFwcGVhciIsIm1hcCIsImEiLCJnZXRBdHRyaWJ1dGUiLCJwcmVleGlzdGluZ0NvbXBvbmVudHMiLCJBcnJheSIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVtb3ZlZEVsZW1lbnRzIiwiZWwiLCJpbmNsdWRlcyIsImVsZW1lbnRUaGF0SXNCZWluZ1JlbW92ZWQiLCJoZWlnaHRLZXkiLCJzdHlsZSIsImNsaWVudEhlaWdodCIsInNldFRpbWVvdXQiLCJvcGFjaXR5IiwiY29tcG9uZW50VGhhdFdpbGxBcHBlYXIiLCJhbHJlYWR5SW5qZWN0ZWRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInJlY3Vyc2l2ZUJ1aWxkUGF0aCIsImZyb21FbGVtZW50IiwicGF0aFN1ZmZpeCIsInBhcmVudCIsInBhcmVudEVsZW1lbnQiLCJwYXJlbnRDaGlsZHMiLCJjaGlsZHJlbiIsImVsQ2hpbGRTZWxlY3RvciIsImluZGV4T2YiLCJ3aGF0SXNUaGVFbGVtZW50UGF0aEZyb21DbG9uZUVsZW1lbnQiLCJpbnNlcnRBdEluZGV4IiwidGFyZ2V0RWxlbWVudENsb25lIiwiY2xvbmVOb2RlIiwic2hvdWxkQmVJbnNlcnRlZEF0RWxlbWVudCIsInJlbWFpbmluZ0luZGV4ZXMiLCJlIiwiYXBwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGROb2RlcyIsIml0ZW0iLCJBTFdBWVNfVFJBTlNJVElPTiIsInVzZUhlcm8iLCJvcHRpb25zIiwicHJvcHNUb1RyYW5zaXRpb24iLCJldmVudHMiLCJfcCIsImRhdGFQcmVmZml4IiwicmVwZWF0YWJsZSIsInVzZU1lbW8iLCJwIiwicmVwbGFjZSIsIl8iLCJ2YWwiLCJ0b0xvd2VyQ2FzZSIsIl9kYXRhUHJlZmZpeCIsImRhdGFQcm9wZXJ0eSIsImhlcm9SZWYiLCJ1c2VSZWYiLCJ1c2VMYXlvdXRFZmZlY3QiLCJjdXJyZW50Iiwic2V0QXR0cmlidXRlIiwiZ2V0SGVyb3NPblNjcmVlbiIsInVzZUNhbGxiYWNrIiwib3RoZXJFbGVtZW50cyIsImRvY3VtZW50IiwidHJpZ2dlckhlcm9BbmltYXRpb24iLCJhbGxQcm9wc1RvVHJhbnNpdGlvbiIsIm92ZXJyaWRlUHJvcHNUb1RyYW5zaXRpb24iLCJzaG91bGRIZXJvRm4iLCJvbkhlcm9EZXRlY3QiLCJjdXJyZW50RWxlbWVudCIsImN1cnJlbnRFbENvb3JkaW5hdGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY29uc29sZSIsIndhcm4iLCJvdGhlckVsZW1lbnQiLCJmaW5kIiwib3JpZ2luQ29udGFpbmVyIiwidGFyZ2V0Q29udGFpbmVyIiwib25CZWZvcmVUcmFuc2l0aW9uIiwic2hvdWxkU2tpcCIsImlzRWxlbWVudE91dHNpZGVDb250YWluZXIiLCJvbkhlcm9Ta2lwIiwiX2V2ZW50cyRvbkhlcm9Ta2lwcGVkIiwib25IZXJvU2tpcHBlZCIsIm9sZENsb25lIiwib25IZXJvQ2xvbmVkIiwidmlzaWJpbGl0eSIsInJlbW92ZUF0dHJpYnV0ZSIsIndpbGxUaGVIZXJvTW92ZSIsIndpbGxJdE1vdmUiLCJNYXRoIiwidHJ1bmMiLCJ0b3AiLCJsZWZ0Iiwid2lkdGgiLCJoZWlnaHQiLCJzZXRDbG9uZVRvQ29vcmRpbmF0ZXNPZiIsImNvb3JkaW5hdGVzIiwiY3VycmVudENvb3JkaW5hdGVzIiwid2lsbE1vdmUiLCJwb3NpdGlvbiIsIml0V29udE1vdmUiLCJfZXZlbnRzJG9uSGVyb0VuZCIsIm9uSGVyb0VuZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInByb3BUb1RyYW5zaXRpb24iLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbiIsInByb3AiLCJzdWIiLCJqb2luIiwiZWxJdFdpbGxUcmFuc2l0aW9uVG8iLCJjbGVhbnVwIiwicmVtb3ZlIiwib25IZXJvU3RhcnQiLCJpbml0aWFsT2Zmc2V0IiwicyIsIl9yZWYiLCJkIiwiY29udGFpbnMiLCJzY3JvbGxUb3AiLCJtYXJnaW5Ub3AiLCJ0cmFuc2l0aW9uRW5kQ2IiLCJvd25FdmVudCIsIl9yZWYyIiwiY3VycmVudFRhcmdldCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25DYW5jZWxDYiIsInVzZUVmZmVjdCIsInRyaWdnZXIiLCJoZXJvQ29tcG9uZW50UmVmIiwiY29tcG9uZW50SWQiLCJlbFJlZiIsImNsYXNzTGlzdCIsImFkZCIsIlN0eWxlcyIsImNvbXBvbmVudCIsImlzRWxlbWVudE91dHNpZGVWaWV3cG9ydCIsImVsZW1lbnRPdmVyZmxvd3NWaWV3cG9ydCIsImVsZW1lbnRVbmRlcmZsb3dzVmlld3BvcnQiLCJjb250YWluZXIiLCJWaXN1YWxWaWV3cG9ydCIsImNvbnRhaW5lckJvdW5kcyIsImlzQ29udGFpbmVyT3V0c2lkZVZpZXdwb3J0IiwiY2VudGVyUG9pbnQiLCJyZWN0IiwiYW5nbGUiLCJwb2ludEEiLCJwb2ludEIiLCJhdGFuMiIsIlBJIiwidG9GaXhlZCIsIlRSQU5TSVRJT05fRkFDVE9SWSIsImV4cG9ydHMiLCJBQ0NFTEVSQVRJT04iLCJhY2NlbGVyYXRpb24iLCJjZW50ZXJQb2ludE9yaWdpbiIsImNlbnRlclBvaW50RGVzdGluYXRpb24iLCJhbmdsZUJldHdlZW5FbGVtZW50cyIsInZlY3RvclgiLCJzaW4iLCJ2ZWN0b3JZIiwiY29zIiwicm90YXRlWSIsIm9yaWdpblgiLCJyb3RhdGVYIiwib3JpZ2luWSIsInNldFByb3BlcnR5IiwicGVyc3BlY3RpdmUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlSGVyby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgQ1NTUHJvcGVydGllcyxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IG93bkV2ZW50IGZyb20gXCIuLi91dGlscy9vd25FdmVudFwiO1xuaW1wb3J0IFN0eWxlcyBmcm9tIFwiLi91c2VIZXJvLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IElEID0gKGlkOiBzdHJpbmcpID0+IGAke2lkfS1oZXJvYDtcbnR5cGUgU2hvdWxkU2tpcCA9IGJvb2xlYW47XG50eXBlIFJlc3VsdCA9IFtcbiAgb3JpZ2luQ29udGFpbmVyOiBFbGVtZW50IHwgVmlzdWFsVmlld3BvcnQsXG4gIHRhcmdldENvbnRhaW5lcjogRWxlbWVudCB8IFZpc3VhbFZpZXdwb3J0XG5dO1xuY29uc3Qgdmlld3BvcnQgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQhO1xuY29uc3QgREFUQV9UQUdfSEVST19DT01QT05FTlQgPSBcImRhdGEtaGVyby1jb21wb25lbnRcIjtcblxuZnVuY3Rpb24gdHJpZ2dlckR5bmFtaWNDb21wb25lbnRzKFxuICBjbG9uZTogSFRNTERpdkVsZW1lbnQsXG4gIGNvbXBvbmVudHNGcm9tT3JpZ2luVGhhdFdpbGxBcHBlYXI6IEhUTUxEaXZFbGVtZW50W10sXG4gIG9yaWdpbjogSFRNTERpdkVsZW1lbnRcbikge1xuICBjb25zdCBpZHNUaGF0V2lsbEFwcGVhciA9IGNvbXBvbmVudHNGcm9tT3JpZ2luVGhhdFdpbGxBcHBlYXIubWFwKChhKSA9PlxuICAgIGEuZ2V0QXR0cmlidXRlKERBVEFfVEFHX0hFUk9fQ09NUE9ORU5UKVxuICApO1xuICBjb25zdCBwcmVleGlzdGluZ0NvbXBvbmVudHMgPSBBcnJheS5mcm9tKFxuICAgIGNsb25lLnF1ZXJ5U2VsZWN0b3JBbGwoYFske0RBVEFfVEFHX0hFUk9fQ09NUE9ORU5UfV1gKVxuICApIGFzIEhUTUxEaXZFbGVtZW50W107XG4gIGNvbnN0IHJlbW92ZWRFbGVtZW50czogSFRNTERpdkVsZW1lbnRbXSA9IHByZWV4aXN0aW5nQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgKGVsKSA9PlxuICAgICAgIWlkc1RoYXRXaWxsQXBwZWFyLmluY2x1ZGVzKGVsLmdldEF0dHJpYnV0ZShEQVRBX1RBR19IRVJPX0NPTVBPTkVOVCkpXG4gICk7XG5cbiAgZm9yIChsZXQgZWxlbWVudFRoYXRJc0JlaW5nUmVtb3ZlZCBvZiByZW1vdmVkRWxlbWVudHMpIHtcbiAgICBmb3IgKGxldCBoZWlnaHRLZXkgb2YgW1wiaGVpZ2h0XCIsIFwibWluSGVpZ2h0XCIsIFwibWF4SGVpZ2h0XCJdIGFzIGNvbnN0KVxuICAgICAgZWxlbWVudFRoYXRJc0JlaW5nUmVtb3ZlZC5zdHlsZVtcbiAgICAgICAgaGVpZ2h0S2V5XG4gICAgICBdID0gYCR7ZWxlbWVudFRoYXRJc0JlaW5nUmVtb3ZlZC5jbGllbnRIZWlnaHR9cHhgO1xuICB9XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGZvciAobGV0IGVsZW1lbnRUaGF0SXNCZWluZ1JlbW92ZWQgb2YgcmVtb3ZlZEVsZW1lbnRzKSB7XG4gICAgICBmb3IgKGxldCBoZWlnaHRLZXkgb2YgW1wiaGVpZ2h0XCIsIFwibWluSGVpZ2h0XCIsIFwibWF4SGVpZ2h0XCJdIGFzIGNvbnN0KVxuICAgICAgICBlbGVtZW50VGhhdElzQmVpbmdSZW1vdmVkLnN0eWxlW2hlaWdodEtleV0gPSBgMHB4YDtcbiAgICAgIGVsZW1lbnRUaGF0SXNCZWluZ1JlbW92ZWQuc3R5bGUub3BhY2l0eSA9IGAwYDtcbiAgICB9XG4gIH0sIDApO1xuXG4gIGZvciAobGV0IGNvbXBvbmVudFRoYXRXaWxsQXBwZWFyIG9mIGNvbXBvbmVudHNGcm9tT3JpZ2luVGhhdFdpbGxBcHBlYXIpIHtcbiAgICBjb25zdCBhbHJlYWR5SW5qZWN0ZWRFbGVtZW50ID0gISFjbG9uZS5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFske0RBVEFfVEFHX0hFUk9fQ09NUE9ORU5UfT1cIiR7Y29tcG9uZW50VGhhdFdpbGxBcHBlYXIuZ2V0QXR0cmlidXRlKFxuICAgICAgICBEQVRBX1RBR19IRVJPX0NPTVBPTkVOVFxuICAgICAgKX1cIl1gXG4gICAgKTtcbiAgICBpZiAoIWFscmVhZHlJbmplY3RlZEVsZW1lbnQpIHtcbiAgICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZUJ1aWxkUGF0aChcbiAgICAgICAgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgICAgICBwYXRoU3VmZml4OiBzdHJpbmcgPSBcIlwiXG4gICAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoZnJvbUVsZW1lbnQgPT09IG9yaWdpbikgcmV0dXJuIHBhdGhTdWZmaXg7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGZyb21FbGVtZW50LnBhcmVudEVsZW1lbnQhO1xuICAgICAgICBjb25zdCBwYXJlbnRDaGlsZHMgPSBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbik7XG4gICAgICAgIGNvbnN0IGVsQ2hpbGRTZWxlY3RvciA9IGA6bnRoLWNoaWxkKCR7XG4gICAgICAgICAgcGFyZW50Q2hpbGRzLmluZGV4T2YoZnJvbUVsZW1lbnQpICsgMVxuICAgICAgICB9KWA7XG5cbiAgICAgICAgaWYgKGZyb21FbGVtZW50ICE9PSBvcmlnaW4pXG4gICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZUJ1aWxkUGF0aChcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIGAke2VsQ2hpbGRTZWxlY3Rvcn0ke3BhdGhTdWZmaXggPyBgPiR7cGF0aFN1ZmZpeH1gIDogXCJcIn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSByZXR1cm4gcGF0aFN1ZmZpeDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdoYXRJc1RoZUVsZW1lbnRQYXRoRnJvbUNsb25lRWxlbWVudCA9IHJlY3Vyc2l2ZUJ1aWxkUGF0aChcbiAgICAgICAgY29tcG9uZW50VGhhdFdpbGxBcHBlYXIucGFyZW50RWxlbWVudCFcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnNlcnRBdEluZGV4ID0gQXJyYXkuZnJvbShcbiAgICAgICAgY29tcG9uZW50VGhhdFdpbGxBcHBlYXIucGFyZW50RWxlbWVudCEuY2hpbGRyZW5cbiAgICAgICkuaW5kZXhPZihjb21wb25lbnRUaGF0V2lsbEFwcGVhcik7XG5cbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRDbG9uZSA9IGNvbXBvbmVudFRoYXRXaWxsQXBwZWFyLmNsb25lTm9kZShcbiAgICAgICAgdHJ1ZVxuICAgICAgKSBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgIGZvciAobGV0IGhlaWdodEtleSBvZiBbXCJoZWlnaHRcIiwgXCJtaW5IZWlnaHRcIiwgXCJtYXhIZWlnaHRcIl0gYXMgY29uc3QpXG4gICAgICAgIHRhcmdldEVsZW1lbnRDbG9uZS5zdHlsZVtoZWlnaHRLZXldID0gXCIwcHhcIjtcbiAgICAgIGNvbnN0IHNob3VsZEJlSW5zZXJ0ZWRBdEVsZW1lbnQgPSB3aGF0SXNUaGVFbGVtZW50UGF0aEZyb21DbG9uZUVsZW1lbnRcbiAgICAgICAgPyBjbG9uZS5xdWVyeVNlbGVjdG9yKHdoYXRJc1RoZUVsZW1lbnRQYXRoRnJvbUNsb25lRWxlbWVudCkhXG4gICAgICAgIDogY2xvbmU7XG4gICAgICBjb25zdCByZW1haW5pbmdJbmRleGVzID0gQXJyYXkuZnJvbShzaG91bGRCZUluc2VydGVkQXRFbGVtZW50LmNoaWxkcmVuKVxuICAgICAgICAubWFwKChlbCwgaSkgPT5cbiAgICAgICAgICByZW1vdmVkRWxlbWVudHMuaW5jbHVkZXMoZWwgYXMgSFRNTERpdkVsZW1lbnQpID8gdW5kZWZpbmVkIDogaVxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIoKGUpID0+IGUgIT09IHVuZGVmaW5lZCkgYXMgbnVtYmVyW107XG5cbiAgICAgIGlmIChpbnNlcnRBdEluZGV4ID09PSByZW1haW5pbmdJbmRleGVzLmxlbmd0aClcbiAgICAgICAgc2hvdWxkQmVJbnNlcnRlZEF0RWxlbWVudC5hcHBlbmQodGFyZ2V0RWxlbWVudENsb25lKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc2hvdWxkQmVJbnNlcnRlZEF0RWxlbWVudC5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgdGFyZ2V0RWxlbWVudENsb25lLFxuICAgICAgICAgIHNob3VsZEJlSW5zZXJ0ZWRBdEVsZW1lbnQuY2hpbGROb2Rlcy5pdGVtKFxuICAgICAgICAgICAgcmVtYWluaW5nSW5kZXhlc1tpbnNlcnRBdEluZGV4XVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBoZWlnaHRLZXkgb2YgW1wiaGVpZ2h0XCIsIFwibWluSGVpZ2h0XCIsIFwibWF4SGVpZ2h0XCJdIGFzIGNvbnN0KVxuICAgICAgICAgIHRhcmdldEVsZW1lbnRDbG9uZS5zdHlsZVtcbiAgICAgICAgICAgIGhlaWdodEtleVxuICAgICAgICAgIF0gPSBgJHtjb21wb25lbnRUaGF0V2lsbEFwcGVhci5jbGllbnRIZWlnaHR9cHhgO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IEFMV0FZU19UUkFOU0lUSU9OID0gW1widG9wXCIsIFwibGVmdFwiXTtcblxuLyoqXG4gKiBUaGlzIGhvb2sgaW1wbGVtZW50cyB0aGUgbG9naWMgZm9yIGEgaGVybyBhbmltYXRpb24gYmV0d2VlbiAyIGVsZW1lbnRzIHNoYXJpbmcgdGhlIHNhbWUgaWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlSGVybyhcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9uczogUGFydGlhbDx7XG4gICAgcHJvcHNUb1RyYW5zaXRpb246IEV4Y2x1ZGU8XG4gICAgICBrZXlvZiBDU1NQcm9wZXJ0aWVzLFxuICAgICAgXCJ3aWR0aFwiIHwgXCJoZWlnaHRcIiB8IFwidG9wXCIgfCBcImxlZnRcIlxuICAgID5bXTtcbiAgICAvKiogSWYgc2V0LCB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzICh3aWR0aCwgaGVpZ2h0LCBldGMuLi4pIHdpbGwgbm90IHRyYW5zaXRpb24sIGFuZCBwcm9wc1RvVHJhbnNpdGlvbiB3aWxsIGJlIHRoZSBvbmx5IG9uZXMgdGhhdCB3aWxsIGJlIHRyYW5zaXRpb25lZCAqL1xuICAgIG92ZXJyaWRlUHJvcHNUb1RyYW5zaXRpb246IGJvb2xlYW47XG5cbiAgICBcImRhdGEtcHJlZmZpeFwiOiBzdHJpbmc7XG4gICAgLyoqIFRoaXMgaW5kaWNhdGVzIHRoaXMgaGVybyBhbmltYXRpb24gd2lsbCBwcm9iYWJseSBiZSByZXBlYXRlZCBtdWx0aXBsZSB0aW1lICovXG4gICAgcmVwZWF0YWJsZTogYm9vbGVhbjtcbiAgfT4gPSB7XG4gICAgcHJvcHNUb1RyYW5zaXRpb246IFtdLFxuICB9LFxuICBldmVudHM6IHtcbiAgICAvKipcbiAgICAgKiBTaG91bGQgcmV0dXJuIGlmIHRoZSBkZXRlY3RlZCBlbGVtZW50IHNob3VsZCBiZSBcImhlcm9lZFwiXG4gICAgICpcbiAgICAgKiBVc2VmdWxsIGZvciB3aGVuIHRoZSBoZXJvIGhhcyAyIHBvc3NpYmxlIG9yaWdpbnMuXG4gICAgICogRm9yIGV4YW1wbGUsIG9uZSBjb3VsZCBoZXJvIG9ubHkgdGhlIGN1cnJlbnQgaG92ZXJlZCBlbGVtZW50IHdpdGggZWwubWF0Y2hlcyhcIjpob3ZlclwiKVxuICAgICAqL1xuICAgIG9uSGVyb0RldGVjdD86IChvcmlnaW46IEhUTUxEaXZFbGVtZW50LCB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50KSA9PiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRG8gc29tZXRoaW5nIHdoZW4gdGhlIGhlcm8gZW5kc1xuICAgICAqXG4gICAgICogVXNlZnVsbCBmb3IgdHJpZ2dlcmluZyBzZWNvbmRhcnkgYW5pbWF0aW9uc1xuICAgICAqL1xuICAgIG9uSGVyb0VuZD86ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogRG8gc29tZXRoaWduIHdpdGggdGhlIGNsb25lIGJlZm9yZSBpdCBnb2VzIHRvIHRoZSBodG1sICovXG4gICAgb25IZXJvQ2xvbmVkPzogKGNsb25lOiBIVE1MRGl2RWxlbWVudCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIERvIHNvbWV0aGluZyB3aGVuIHRoZSBoZXJvIHN0YXJ0cyB0aGUgdHJhbnNpdGlvblxuICAgICAqIEhlcmUgaXQncyB1c2VmdWxsIHRvIHN3aXRjaCBjbGFzc05hbWVzIHdpdGggdGhlIHRhcmdldC5cbiAgICAgKlxuICAgICAqIElmIGRvbmUgY29ycmVjdGx5LCBpdCB3aWxsIHRyYW5zaXRpb24gZnJvbSBzdGF0ZSBhIHRvIGIgc21vb3RobHlcbiAgICAgKi9cbiAgICBvbkhlcm9TdGFydD86IChcbiAgICAgIGNsb25lOiBIVE1MRGl2RWxlbWVudCxcbiAgICAgIG9yaWdpbjogSFRNTERpdkVsZW1lbnQsXG4gICAgICB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50XG4gICAgKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogSXMgY2FsbGVkIHdoZW4gdGhlIGhlcm8gaXMgY29taW5nL2dvaW5nIG91dHNpZGUgdGhlIHZpZXdwb3J0XG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0IGl0J3Mgc2V0IHRvIHNraXAgYWxsIGhlcm9lcyB0aGF0IGhhdmUgdGhlc2UgY29uZGl0aW9uc1xuICAgICAqXG4gICAgICogQHJldHVybnMgSWYgdGhlIGhlcm8gc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90XG4gICAgICovXG4gICAgb25IZXJvU2tpcD86IChvcmlnaW46IEhUTUxEaXZFbGVtZW50LCB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50KSA9PiBTaG91bGRTa2lwO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIHdoZW4gYSBoZXJvIGlzIHNraXBwZWRcbiAgICAgKi9cbiAgICBvbkhlcm9Ta2lwcGVkPzogKCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEJlZm9yZSB0cmFuc2l0aW9uIHN0YXJ0LCBzZXR1cCB0aGUgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgaGVybyBhbmltYXRpb25cbiAgICAgKiBAcmV0dXJucyBUaGUgY29udGFpbmVyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBoZXJvIGlzIG91dCBvciBpbiB0aGUgdmlld1xuICAgICAqL1xuICAgIG9uQmVmb3JlVHJhbnNpdGlvbj86IChcbiAgICAgIG9yaWdpbjogSFRNTERpdkVsZW1lbnQsXG4gICAgICB0YXJnZXQ6IEhUTUxEaXZFbGVtZW50XG4gICAgKSA9PiBSZXN1bHQgfCBSZWFkb25seTxSZXN1bHQ+O1xuICB9ID0ge31cbikge1xuICBjb25zdCB7XG4gICAgcHJvcHNUb1RyYW5zaXRpb246IF9wID0gW10sXG4gICAgXCJkYXRhLXByZWZmaXhcIjogZGF0YVByZWZmaXgsXG4gICAgcmVwZWF0YWJsZSxcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByb3BzVG9UcmFuc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgX3AubWFwKChwKSA9PiBwLnJlcGxhY2UoLyhbQS1aXSkvZywgKF8sIHZhbCkgPT4gYC0ke3ZhbC50b0xvd2VyQ2FzZSgpfWApKSxcbiAgICBbX3BdXG4gICk7XG4gIGNvbnN0IF9kYXRhUHJlZmZpeCA9IGRhdGFQcmVmZml4ID8gYC0ke2RhdGFQcmVmZml4fWAgOiBcIlwiO1xuICBjb25zdCBkYXRhUHJvcGVydHkgPSBgZGF0YSR7X2RhdGFQcmVmZml4fS1oZXJvYDtcbiAgY29uc3QgaGVyb1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBoZXJvUmVmLmN1cnJlbnQhLnNldEF0dHJpYnV0ZShkYXRhUHJvcGVydHksIGlkKTtcbiAgfSwgW2lkXSk7XG5cbiAgY29uc3QgZ2V0SGVyb3NPblNjcmVlbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBvdGhlckVsZW1lbnRzID0gKFxuICAgICAgQXJyYXkuZnJvbShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7ZGF0YVByb3BlcnR5fT1cIiR7aWR9XCJdYClcbiAgICAgICkgYXMgSFRNTERpdkVsZW1lbnRbXVxuICAgICkuZmlsdGVyKChlbCkgPT4gZWwgIT09IGhlcm9SZWYuY3VycmVudCk7XG4gICAgcmV0dXJuIG90aGVyRWxlbWVudHM7XG4gIH0sIFtpZF0pO1xuXG4gIGZ1bmN0aW9uIHRyaWdnZXJIZXJvQW5pbWF0aW9uKCkge1xuICAgIGNvbnN0IGFsbFByb3BzVG9UcmFuc2l0aW9uID0gb3B0aW9ucy5vdmVycmlkZVByb3BzVG9UcmFuc2l0aW9uXG4gICAgICA/IFsuLi5BTFdBWVNfVFJBTlNJVElPTiwgLi4ucHJvcHNUb1RyYW5zaXRpb25dXG4gICAgICA6IFtcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIC4uLkFMV0FZU19UUkFOU0lUSU9OLCAuLi5wcm9wc1RvVHJhbnNpdGlvbl07XG4gICAgY29uc3Qgc2hvdWxkSGVyb0ZuID0gZXZlbnRzLm9uSGVyb0RldGVjdCB8fCAoKC4uLmE6IGFueVtdKSA9PiB0cnVlKTtcbiAgICBjb25zdCBvdGhlckVsZW1lbnRzID0gZ2V0SGVyb3NPblNjcmVlbigpLmZpbHRlcigoZWwpID0+XG4gICAgICBzaG91bGRIZXJvRm4oZWwsIGhlcm9SZWYuY3VycmVudCEpXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGhlcm9SZWYuY3VycmVudCE7XG4gICAgY29uc3QgY3VycmVudEVsQ29vcmRpbmF0ZXMgPSBjdXJyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIG90aGVyRWxlbWVudHMubGVuZ3RoID4gMilcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJUaGVyZSBhcmUgdG9vIG1hbnkgZWxlbWVudHMgdG8gdHJhbnNpdGlvbiB0bywgSSB3aWxsIHRyYW5zaXRpb24gdG8gdGhlIGZpcnN0IEkgZmluZFwiLFxuICAgICAgICBvdGhlckVsZW1lbnRzXG4gICAgICApO1xuICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IG90aGVyRWxlbWVudHMuZmluZChcbiAgICAgIChlbCkgPT4gZWwgIT09IGhlcm9SZWYuY3VycmVudCFcbiAgICApIGFzIEhUTUxEaXZFbGVtZW50O1xuXG4gICAgaWYgKG90aGVyRWxlbWVudCkge1xuICAgICAgY29uc3QgW29yaWdpbkNvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyXSA9IGV2ZW50cy5vbkJlZm9yZVRyYW5zaXRpb25cbiAgICAgICAgPyBldmVudHMub25CZWZvcmVUcmFuc2l0aW9uKG90aGVyRWxlbWVudCwgaGVyb1JlZi5jdXJyZW50ISlcbiAgICAgICAgOiBbdmlld3BvcnQsIHZpZXdwb3J0XTtcbiAgICAgIGNvbnN0IHNob3VsZFNraXAgPVxuICAgICAgICBpc0VsZW1lbnRPdXRzaWRlQ29udGFpbmVyKHRhcmdldENvbnRhaW5lciwgY3VycmVudEVsQ29vcmRpbmF0ZXMpIHx8XG4gICAgICAgIGlzRWxlbWVudE91dHNpZGVDb250YWluZXIoXG4gICAgICAgICAgb3JpZ2luQ29udGFpbmVyLFxuICAgICAgICAgIG90aGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICApXG4gICAgICAgICAgPyAoZXZlbnRzLm9uSGVyb1NraXAgfHwgKCgpID0+IHRydWUpKShvdGhlckVsZW1lbnQsIGhlcm9SZWYuY3VycmVudCEpXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIGlmIChzaG91bGRTa2lwKSB7XG4gICAgICAgIGV2ZW50cy5vbkhlcm9Ta2lwcGVkPy4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2xkQ2xvbmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgWyR7ZGF0YVByb3BlcnR5fS1jbG9uZT1cIiR7SUQoaWQpfVwiXWBcbiAgICAgICk7XG4gICAgICBjb25zdCBjbG9uZSA9IChvbGRDbG9uZSB8fFxuICAgICAgICBvdGhlckVsZW1lbnQuY2xvbmVOb2RlKHRydWUpKSBhcyBIVE1MRGl2RWxlbWVudDtcblxuICAgICAgaWYgKGV2ZW50cy5vbkhlcm9DbG9uZWQgJiYgIW9sZENsb25lKSBldmVudHMub25IZXJvQ2xvbmVkKGNsb25lKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgdGhvcyBwcm9wZXJ0aWVzIHRoYXQgY2FuIGNhdXNlIGNvbmZ1c2lvbiBzaW5jZSBpdCdzIGEgY2xvbmVcbiAgICAgIGNsb25lLnN0eWxlLnZpc2liaWxpdHkgPSBcIlwiO1xuICAgICAgY2xvbmUucmVtb3ZlQXR0cmlidXRlKGRhdGFQcm9wZXJ0eSk7XG5cbiAgICAgIGNsb25lLnNldEF0dHJpYnV0ZShgJHtkYXRhUHJvcGVydHl9LWNsb25lYCwgSUQoaWQpKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBJZiBpdCdzIHJlcGVhdGFibGUsIHdlIHNob3VsZCBrZWVwIHRoZSBmbGFnIHRoYXQgaW5kaWNhdGVzIHRoZSBoZXJvIGV4aXN0YW5jZVxuICAgICAgICovXG4gICAgICBpZiAoIXJlcGVhdGFibGUpXG4gICAgICAgIC8vIFNpbmNlIGEgdHJhbnNpdGlvbiBpcyBub3cgdHJpZ2dlcmluZyBmcm9tIHRoZSBvbGQgZWxlbWVudCwgaGUgY2Fubm90IGJlIGNvbnNpZGVyZWQgZm9yIG90aGVyIHRyYW5zaXRpb25zXG4gICAgICAgIG90aGVyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoZGF0YVByb3BlcnR5KTtcblxuICAgICAgZnVuY3Rpb24gd2lsbFRoZUhlcm9Nb3ZlKG9yaWdpbjogRE9NUmVjdCwgdGFyZ2V0OiBET01SZWN0KSB7XG4gICAgICAgIGNvbnN0IHdpbGxJdE1vdmUgPSAhKFxuICAgICAgICAgIE1hdGgudHJ1bmMob3JpZ2luLnRvcCkgPT09IE1hdGgudHJ1bmModGFyZ2V0LnRvcCkgJiZcbiAgICAgICAgICBNYXRoLnRydW5jKG9yaWdpbi5sZWZ0KSA9PT0gTWF0aC50cnVuYyh0YXJnZXQubGVmdCkgJiZcbiAgICAgICAgICBNYXRoLnRydW5jKG9yaWdpbi53aWR0aCkgPT09IE1hdGgudHJ1bmModGFyZ2V0LndpZHRoKSAmJlxuICAgICAgICAgIE1hdGgudHJ1bmMob3JpZ2luLmhlaWdodCkgPT09IE1hdGgudHJ1bmModGFyZ2V0LmhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gd2lsbEl0TW92ZTtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIGVsXG4gICAgICAgKiBAcmV0dXJucyBSZXR1cm5zIGlmIGl0IHdpbGwgbW92ZVxuICAgICAgICovXG4gICAgICBmdW5jdGlvbiBzZXRDbG9uZVRvQ29vcmRpbmF0ZXNPZihlbDogSFRNTERpdkVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgY3VycmVudENvb3JkaW5hdGVzID0gY2xvbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHdpbGxNb3ZlID0gd2lsbFRoZUhlcm9Nb3ZlKGNvb3JkaW5hdGVzLCBjdXJyZW50Q29vcmRpbmF0ZXMpO1xuXG4gICAgICAgIGNsb25lLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgICBjbG9uZS5zdHlsZS50b3AgPSBgJHtjb29yZGluYXRlcy50b3B9cHhgO1xuICAgICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gYCR7Y29vcmRpbmF0ZXMubGVmdH1weGA7XG4gICAgICAgIGlmIChhbGxQcm9wc1RvVHJhbnNpdGlvbi5pbmNsdWRlcyhcIndpZHRoXCIpKVxuICAgICAgICAgIGNsb25lLnN0eWxlLndpZHRoID0gYCR7Y29vcmRpbmF0ZXMud2lkdGh9cHhgO1xuICAgICAgICBpZiAoYWxsUHJvcHNUb1RyYW5zaXRpb24uaW5jbHVkZXMoXCJoZWlnaHRcIikpXG4gICAgICAgICAgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7Y29vcmRpbmF0ZXMuaGVpZ2h0fXB4YDtcblxuICAgICAgICByZXR1cm4gd2lsbE1vdmU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb3RoZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgY3VycmVudENvb3JkaW5hdGVzID0gaGVyb1JlZi5jdXJyZW50IS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGl0V29udE1vdmUgPSAhd2lsbFRoZUhlcm9Nb3ZlKGNvb3JkaW5hdGVzLCBjdXJyZW50Q29vcmRpbmF0ZXMpO1xuICAgICAgaWYgKGl0V29udE1vdmUpIHtcbiAgICAgICAgZXZlbnRzLm9uSGVyb0VuZD8uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvbGRDbG9uZSkge1xuICAgICAgICAvKiogU2V0IHRoZSBjbG9uZSBvdmVyIHRoZSBzdGFydGluZyBlbGVtZW50ICovXG4gICAgICAgIHNldENsb25lVG9Db29yZGluYXRlc09mKG90aGVyRWxlbWVudCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgfVxuICAgICAgaGVyb1JlZi5jdXJyZW50IS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgIG90aGVyRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblxuICAgICAgZm9yIChsZXQgcHJvcFRvVHJhbnNpdGlvbiBvZiBwcm9wc1RvVHJhbnNpdGlvbikge1xuICAgICAgICBjbG9uZS5zdHlsZVtwcm9wVG9UcmFuc2l0aW9uIGFzIGFueV0gPVxuICAgICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG90aGVyRWxlbWVudClbcHJvcFRvVHJhbnNpdGlvbiBhcyBhbnldO1xuICAgICAgfVxuXG4gICAgICBjbG9uZS5zdHlsZS50cmFuc2l0aW9uID0gYCR7YWxsUHJvcHNUb1RyYW5zaXRpb25cbiAgICAgICAgLm1hcChcbiAgICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICAgIGAke3Byb3AucmVwbGFjZShcbiAgICAgICAgICAgICAgL1tBLVpdL2csXG4gICAgICAgICAgICAgIChzdWIpID0+IGAtJHtzdWIudG9Mb3dlckNhc2UoKX1gXG4gICAgICAgICAgICApfSB2YXIoLS1hbmltYXRpb24tLXNwZWVkLWZhc3QsIDI1MG1zKSBlYXNlLW91dGBcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIiwgXCIpfWA7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbEl0V2lsbFRyYW5zaXRpb25UbyA9IGhlcm9SZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRzLm9uSGVyb0VuZCkgZXZlbnRzLm9uSGVyb0VuZCgpO1xuICAgICAgICAgIGlmIChlbEl0V2lsbFRyYW5zaXRpb25Ubykge1xuICAgICAgICAgICAgaWYgKHJlcGVhdGFibGUpXG4gICAgICAgICAgICAgIGVsSXRXaWxsVHJhbnNpdGlvblRvIS5zZXRBdHRyaWJ1dGUoZGF0YVByb3BlcnR5LCBpZCk7XG4gICAgICAgICAgICBlbEl0V2lsbFRyYW5zaXRpb25Uby5zdHlsZS52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjbG9uZS5yZW1vdmUoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgdHJpZ2dlckR5bmFtaWNDb21wb25lbnRzKFxuICAgICAgICAgIGNsb25lLFxuICAgICAgICAgIEFycmF5LmZyb20oXG4gICAgICAgICAgICBoZXJvUmVmLmN1cnJlbnQhLnF1ZXJ5U2VsZWN0b3JBbGwoYFske0RBVEFfVEFHX0hFUk9fQ09NUE9ORU5UfV1gKVxuICAgICAgICAgICkgYXMgSFRNTERpdkVsZW1lbnRbXSxcbiAgICAgICAgICBjdXJyZW50RWxlbWVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXZlbnRzLm9uSGVyb1N0YXJ0KSB7XG4gICAgICAgICAgZXZlbnRzLm9uSGVyb1N0YXJ0KGNsb25lLCBvdGhlckVsZW1lbnQsIGhlcm9SZWYuY3VycmVudCEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZWxJdFdpbGxUcmFuc2l0aW9uVG8pIHtcbiAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qKiBTZXQgdGhlIGNsb25lIG92ZXIgdGhlIG5ldyBwb3NpdGlvbiAqL1xuICAgICAgICBjb25zdCB3aWxsTW92ZSA9IHNldENsb25lVG9Db29yZGluYXRlc09mKGVsSXRXaWxsVHJhbnNpdGlvblRvKTtcbiAgICAgICAgaWYgKCF3aWxsTW92ZSkgY2xlYW51cCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBwcm9wVG9UcmFuc2l0aW9uIG9mIHByb3BzVG9UcmFuc2l0aW9uKVxuICAgICAgICAgICAgY2xvbmUuc3R5bGVbcHJvcFRvVHJhbnNpdGlvbiBhcyBhbnldID1cbiAgICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxJdFdpbGxUcmFuc2l0aW9uVG8pW1xuICAgICAgICAgICAgICAgIHByb3BUb1RyYW5zaXRpb24gYXMgYW55XG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgbGV0IGluaXRpYWxPZmZzZXQ6IG51bWJlcjtcbiAgICAgICAgICBjb25zdCBzID0gKHsgdGFyZ2V0IH06IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZC5jb250YWlucyhlbEl0V2lsbFRyYW5zaXRpb25UbykpIHtcbiAgICAgICAgICAgICAgaWYgKGluaXRpYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkgaW5pdGlhbE9mZnNldCA9IGQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY2xvbmUuc3R5bGUubWFyZ2luVG9wID0gYCR7LShkLnNjcm9sbFRvcCAtIGluaXRpYWxPZmZzZXQpfXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25FbmRDYiA9IG93bkV2ZW50KFxuICAgICAgICAgICAgKHsgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH06IFRyYW5zaXRpb25FdmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgcyBhcyBhbnksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBzIGFzIGFueSwgdHJ1ZSk7XG4gICAgICAgICAgY2xvbmUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgdHJhbnNpdGlvbkVuZENiKTtcbiAgICAgICAgICBjbG9uZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbnN0YXJ0XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9uQ2FuY2VsQ2IgPSBvd25FdmVudCgoZSkgPT4ge1xuICAgICAgICAgICAgICBjbG9uZS5yZW1vdmVFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCB0cmFuc2l0aW9uRW5kQ2IpO1xuICAgICAgICAgICAgICBjbG9uZS5yZW1vdmVFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmNhbmNlbFwiLCBvbkNhbmNlbENiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2xvbmUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25jYW5jZWxcIiwgb25DYW5jZWxDYik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdHJpZ2dlckhlcm9BbmltYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7XG4gICAgaGVyb1JlZixcbiAgICBnZXRIZXJvc09uU2NyZWVuLFxuICAgIHRyaWdnZXI6IHRyaWdnZXJIZXJvQW5pbWF0aW9uLFxuICAgIGhlcm9Db21wb25lbnRSZWY6XG4gICAgICAoY29tcG9uZW50SWQ6IHN0cmluZykgPT4gKGVsUmVmOiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IHtcbiAgICAgICAgaWYgKGVsUmVmKSB7XG4gICAgICAgICAgZWxSZWYuc2V0QXR0cmlidXRlKERBVEFfVEFHX0hFUk9fQ09NUE9ORU5ULCBjb21wb25lbnRJZCk7XG4gICAgICAgICAgZWxSZWYuY2xhc3NMaXN0LmFkZChTdHlsZXMuY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50T3V0c2lkZVZpZXdwb3J0KGNvb3JkaW5hdGVzOiBET01SZWN0KSB7XG4gIGNvbnN0IGVsZW1lbnRPdmVyZmxvd3NWaWV3cG9ydCA9XG4gICAgY29vcmRpbmF0ZXMubGVmdCA+PSB2aWV3cG9ydC53aWR0aCB8fCBjb29yZGluYXRlcy50b3AgPj0gdmlld3BvcnQuaGVpZ2h0O1xuICBjb25zdCBlbGVtZW50VW5kZXJmbG93c1ZpZXdwb3J0ID1cbiAgICBjb29yZGluYXRlcy5sZWZ0IDw9IC1jb29yZGluYXRlcy53aWR0aCB8fFxuICAgIGNvb3JkaW5hdGVzLnRvcCA8PSAtY29vcmRpbmF0ZXMuaGVpZ2h0O1xuICByZXR1cm4gZWxlbWVudE92ZXJmbG93c1ZpZXdwb3J0IHx8IGVsZW1lbnRVbmRlcmZsb3dzVmlld3BvcnQ7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudE91dHNpZGVDb250YWluZXIoXG4gIGNvbnRhaW5lcjogVmlzdWFsVmlld3BvcnQgfCBFbGVtZW50LFxuICBjb29yZGluYXRlczogRE9NUmVjdFxuKSB7XG4gIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBWaXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBpc0VsZW1lbnRPdXRzaWRlVmlld3BvcnQoY29vcmRpbmF0ZXMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRhaW5lckJvdW5kcyA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGlzQ29udGFpbmVyT3V0c2lkZVZpZXdwb3J0ID1cbiAgICAgIGlzRWxlbWVudE91dHNpZGVWaWV3cG9ydChjb250YWluZXJCb3VuZHMpO1xuXG4gICAgaWYgKGlzQ29udGFpbmVyT3V0c2lkZVZpZXdwb3J0KSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGVsZW1lbnRPdmVyZmxvd3NWaWV3cG9ydCA9XG4gICAgICBjb29yZGluYXRlcy5sZWZ0ID49IGNvbnRhaW5lckJvdW5kcy5sZWZ0ICsgY29udGFpbmVyQm91bmRzLndpZHRoIHx8XG4gICAgICBjb29yZGluYXRlcy50b3AgPj0gY29udGFpbmVyQm91bmRzLnRvcCArIGNvbnRhaW5lckJvdW5kcy5oZWlnaHQ7XG5cbiAgICBjb25zdCBlbGVtZW50VW5kZXJmbG93c1ZpZXdwb3J0ID1cbiAgICAgIGNvbnRhaW5lckJvdW5kcy5sZWZ0IC0gY29vcmRpbmF0ZXMubGVmdCA+PSBjb29yZGluYXRlcy53aWR0aCB8fFxuICAgICAgY29udGFpbmVyQm91bmRzLnRvcCAtIGNvb3JkaW5hdGVzLnRvcCA+PSBjb29yZGluYXRlcy5oZWlnaHQ7XG5cbiAgICByZXR1cm4gZWxlbWVudFVuZGVyZmxvd3NWaWV3cG9ydCB8fCBlbGVtZW50T3ZlcmZsb3dzVmlld3BvcnQ7XG4gIH1cbn1cblxudHlwZSBFVkVOVFNfSU5URVJGQUNFID0gUGFyYW1ldGVyczx0eXBlb2YgdXNlSGVybz5bMl07XG50eXBlIFRSQU5TSVRJT05fVFlQRVMgPSBcIkFDQ0VMRVJBVElPTlwiO1xuZnVuY3Rpb24gY2VudGVyUG9pbnQocmVjdDogRE9NUmVjdCkge1xuICByZXR1cm4gW3JlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMl0gYXMgY29uc3Q7XG59XG5jb25zdCBhbmdsZSA9IChcbiAgcG9pbnRBOiByZWFkb25seSBbeDogbnVtYmVyLCB5OiBudW1iZXJdLFxuICBwb2ludEI6IHJlYWRvbmx5IFt4OiBudW1iZXIsIHk6IG51bWJlcl1cbikgPT5cbiAgTnVtYmVyKFxuICAgIChcbiAgICAgIE1hdGguYXRhbjIocG9pbnRBWzFdIC0gcG9pbnRCWzFdLCBwb2ludEFbMF0gLSBwb2ludEJbMF0pICpcbiAgICAgICgxNzkuMDggLyBNYXRoLlBJKVxuICAgICkudG9GaXhlZCg1KVxuICApO1xuZXhwb3J0IGNvbnN0IFRSQU5TSVRJT05fRkFDVE9SWToge1xuICBbbiBpbiBUUkFOU0lUSU9OX1RZUEVTXTogKGV2ZW50cz86IEVWRU5UU19JTlRFUkZBQ0UpID0+IEVWRU5UU19JTlRFUkZBQ0U7XG59ID0ge1xuICBBQ0NFTEVSQVRJT046IChldmVudHMpID0+ICh7XG4gICAgLi4uZXZlbnRzLFxuICAgIG9uSGVyb1N0YXJ0KGNsb25lLCBvcmlnaW4sIHRhcmdldCkge1xuICAgICAgaWYgKGV2ZW50cz8ub25IZXJvU3RhcnQpIGV2ZW50cy5vbkhlcm9TdGFydChjbG9uZSwgb3JpZ2luLCB0YXJnZXQpO1xuICAgICAgY2xvbmUuY2xhc3NMaXN0LmFkZChTdHlsZXMuYWNjZWxlcmF0aW9uKTtcbiAgICAgIGNvbnN0IGNlbnRlclBvaW50T3JpZ2luID0gY2VudGVyUG9pbnQob3JpZ2luLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgIGNvbnN0IGNlbnRlclBvaW50RGVzdGluYXRpb24gPSBjZW50ZXJQb2ludChcbiAgICAgICAgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICApO1xuICAgICAgY29uc3QgYW5nbGVCZXR3ZWVuRWxlbWVudHMgPSBhbmdsZShcbiAgICAgICAgY2VudGVyUG9pbnRPcmlnaW4sXG4gICAgICAgIGNlbnRlclBvaW50RGVzdGluYXRpb25cbiAgICAgICk7XG4gICAgICBjb25zdCB2ZWN0b3JYID0gTWF0aC5zaW4oYW5nbGVCZXR3ZWVuRWxlbWVudHMpO1xuICAgICAgY29uc3QgdmVjdG9yWSA9IE1hdGguY29zKGFuZ2xlQmV0d2VlbkVsZW1lbnRzKTtcblxuICAgICAgY29uc3Qgcm90YXRlWSA9ICgxMCAqIHZlY3RvclkpLnRvRml4ZWQoMCk7XG4gICAgICBjb25zdCBvcmlnaW5YID0gKHZlY3RvclkgKyAxKSAqIDUwO1xuXG4gICAgICBjb25zdCByb3RhdGVYID0gLSgxMCAqIHZlY3RvclgpLnRvRml4ZWQoMCk7XG4gICAgICBjb25zdCBvcmlnaW5ZID0gKHZlY3RvclggKyAxKSAqIDUwO1xuXG4gICAgICBjbG9uZS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCItLXN0YWdlLTFcIixcbiAgICAgICAgYHJvdGF0ZVkoJHtyb3RhdGVZfWRlZykgcm90YXRlWCgkey1yb3RhdGVYfWRlZylgXG4gICAgICApO1xuICAgICAgY2xvbmUuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiLS1zdGFnZS0yXCIsXG4gICAgICAgIGByb3RhdGVZKCR7LXJvdGF0ZVkgKiAwLjN9ZGVnKSByb3RhdGVYKCR7cm90YXRlWCAqIDAuM31kZWcpYFxuICAgICAgKTtcbiAgICAgIGNsb25lLnN0eWxlLnNldFByb3BlcnR5KFwiLS1vcmlnaW4tMVwiLCBgJHtvcmlnaW5YfSUgJHtvcmlnaW5ZfSVgKTtcbiAgICAgIGNsb25lLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcIi0tb3JpZ2luLTJcIixcbiAgICAgICAgYCR7MTAwIC0gb3JpZ2luWH0lICR7MTAwIC0gb3JpZ2luWX0lYFxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGVyc3BlY3RpdmUgPSBcIjEwMHZ3XCI7XG4gICAgfSxcbiAgICBvbkhlcm9FbmQoKSB7XG4gICAgICBpZiAoZXZlbnRzPy5vbkhlcm9FbmQpIGV2ZW50cy5vbkhlcm9FbmQoKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGVyc3BlY3RpdmUgPSBcIlwiO1xuICAgIH0sXG4gIH0pLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQVFBLElBQUFDLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUEyQyxTQUFBRSx1QkFBQUUsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxH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
@@ -0,0 +1,41 @@
1
+ @use "../assets/styles/index.scss" as *;
2
+
3
+ $timing: cubic-bezier(0.5, -0.45, 0.44, 1.37);
4
+ // $timing: cubic-bezier(0.73, -0.49, 0.16, 1.4);
5
+
6
+ .acceleration {
7
+ --animation--speed-fast: 1s;
8
+ animation-name: acceleration;
9
+ animation-duration: var(--animation--speed-fast);
10
+ animation-timing-function: $timing;
11
+ transition-timing-function: $timing !important;
12
+ transform-origin: var(--origin-1);
13
+ }
14
+
15
+ @keyframes acceleration {
16
+ 0% {
17
+ transform: rotateY(0deg);
18
+ }
19
+ 10% {
20
+ transform-origin: var(--origin-1);
21
+ transform: var(--stage-1);
22
+ }
23
+
24
+ 70% {
25
+ transform: var(--stage-1);
26
+ transform-origin: var(--origin-1);
27
+ }
28
+ 85% {
29
+ transform-origin: var(--origin-2);
30
+ transform: var(--stage-2);
31
+ }
32
+ 100% {
33
+ transform: rotateY(0deg);
34
+ }
35
+ }
36
+
37
+ .component:not([data-hero-clone]) {
38
+ transition: height $fast linear, opacity $fast linear, min-height $fast linear,
39
+ max-height $fast linear !important;
40
+ overflow: hidden;
41
+ }