@xwadex/fesd-next 0.3.4-8 → 0.3.4-9

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 (182) hide show
  1. package/dist/components/index.d.ts +186 -5
  2. package/dist/components/index.js +9561 -5
  3. package/dist/components/index.js.map +1 -0
  4. package/dist/hooks/index.d.ts +68 -10
  5. package/dist/hooks/index.js +9243 -10
  6. package/dist/hooks/index.js.map +1 -0
  7. package/dist/index.d.ts +55 -5
  8. package/dist/index.js +36374 -5
  9. package/dist/index.js.map +1 -0
  10. package/dist/shadcns/index.d.ts +490 -48
  11. package/dist/shadcns/index.js +32495 -48
  12. package/dist/shadcns/index.js.map +1 -0
  13. package/dist/types/index.d.ts +17 -2
  14. package/dist/types/index.js +3 -2
  15. package/dist/types/index.js.map +1 -0
  16. package/dist/useAnchors-BzgJT2J9.d.ts +78 -0
  17. package/dist/utils/index.d.ts +12 -10
  18. package/dist/utils/index.js +56 -63
  19. package/dist/utils/index.js.map +1 -0
  20. package/package.json +9 -7
  21. package/dist/components/anchors/anchors.d.ts +0 -14
  22. package/dist/components/anchors/anchors.js +0 -23
  23. package/dist/components/anchors/index.d.ts +0 -1
  24. package/dist/components/anchors/index.js +0 -1
  25. package/dist/components/embla-carousels/embla-carousels-hooks.d.ts +0 -36
  26. package/dist/components/embla-carousels/embla-carousels-hooks.js +0 -83
  27. package/dist/components/embla-carousels/embla-carousels.d.ts +0 -23
  28. package/dist/components/embla-carousels/embla-carousels.js +0 -58
  29. package/dist/components/embla-carousels/index.d.ts +0 -2
  30. package/dist/components/embla-carousels/index.js +0 -2
  31. package/dist/components/emblas/embla-container.d.ts +0 -8
  32. package/dist/components/emblas/embla-container.js +0 -12
  33. package/dist/components/emblas/embla-context.d.ts +0 -21
  34. package/dist/components/emblas/embla-context.js +0 -12
  35. package/dist/components/emblas/embla.d.ts +0 -20
  36. package/dist/components/emblas/embla.js +0 -124
  37. package/dist/components/emblas/emblas-pagination.d.ts +0 -11
  38. package/dist/components/emblas/emblas-pagination.js +0 -89
  39. package/dist/components/emblas/index.d.ts +0 -4
  40. package/dist/components/emblas/index.js +0 -4
  41. package/dist/components/scroll-containers/index.d.ts +0 -3
  42. package/dist/components/scroll-containers/index.js +0 -3
  43. package/dist/components/scroll-containers/lenis-scroll.d.ts +0 -20
  44. package/dist/components/scroll-containers/lenis-scroll.js +0 -65
  45. package/dist/components/scroll-containers/native-scroll.d.ts +0 -6
  46. package/dist/components/scroll-containers/native-scroll.js +0 -23
  47. package/dist/components/scroll-containers/scroll-containers.d.ts +0 -25
  48. package/dist/components/scroll-containers/scroll-containers.js +0 -46
  49. package/dist/components/tests/index.d.ts +0 -1
  50. package/dist/components/tests/index.js +0 -1
  51. package/dist/components/tests/tests.d.ts +0 -4
  52. package/dist/components/tests/tests.js +0 -9
  53. package/dist/hooks/useAnchors.d.ts +0 -73
  54. package/dist/hooks/useAnchors.js +0 -203
  55. package/dist/hooks/useAsyncFetcher.d.ts +0 -11
  56. package/dist/hooks/useAsyncFetcher.js +0 -39
  57. package/dist/hooks/useCookies.d.ts +0 -6
  58. package/dist/hooks/useCookies.js +0 -42
  59. package/dist/hooks/useDebounce.d.ts +0 -7
  60. package/dist/hooks/useDebounce.js +0 -15
  61. package/dist/hooks/useDebounceValue.d.ts +0 -1
  62. package/dist/hooks/useDebounceValue.js +0 -16
  63. package/dist/hooks/useDragResize.d.ts +0 -22
  64. package/dist/hooks/useDragResize.js +0 -74
  65. package/dist/hooks/useEffectLeave.d.ts +0 -1
  66. package/dist/hooks/useEffectLeave.js +0 -11
  67. package/dist/hooks/useEffectOne.d.ts +0 -1
  68. package/dist/hooks/useEffectOne.js +0 -11
  69. package/dist/hooks/useHash.d.ts +0 -1
  70. package/dist/hooks/useHash.js +0 -18
  71. package/dist/hooks/useLocations.d.ts +0 -13
  72. package/dist/hooks/useLocations.js +0 -24
  73. package/dist/hooks/useMounted.d.ts +0 -3
  74. package/dist/hooks/useMounted.js +0 -6
  75. package/dist/shadcns/components/ui/accordion.d.ts +0 -7
  76. package/dist/shadcns/components/ui/accordion.js +0 -18
  77. package/dist/shadcns/components/ui/alert-dialog.d.ts +0 -14
  78. package/dist/shadcns/components/ui/alert-dialog.js +0 -38
  79. package/dist/shadcns/components/ui/alert.d.ts +0 -9
  80. package/dist/shadcns/components/ui/alert.js +0 -25
  81. package/dist/shadcns/components/ui/aspect-ratio.d.ts +0 -3
  82. package/dist/shadcns/components/ui/aspect-ratio.js +0 -7
  83. package/dist/shadcns/components/ui/avatar.d.ts +0 -6
  84. package/dist/shadcns/components/ui/avatar.js +0 -14
  85. package/dist/shadcns/components/ui/badge.d.ts +0 -9
  86. package/dist/shadcns/components/ui/badge.js +0 -23
  87. package/dist/shadcns/components/ui/breadcrumb.d.ts +0 -11
  88. package/dist/shadcns/components/ui/breadcrumb.js +0 -27
  89. package/dist/shadcns/components/ui/button-group.d.ts +0 -11
  90. package/dist/shadcns/components/ui/button-group.js +0 -26
  91. package/dist/shadcns/components/ui/button.d.ts +0 -10
  92. package/dist/shadcns/components/ui/button.js +0 -31
  93. package/dist/shadcns/components/ui/calendar.d.ts +0 -8
  94. package/dist/shadcns/components/ui/calendar.js +0 -73
  95. package/dist/shadcns/components/ui/card.d.ts +0 -9
  96. package/dist/shadcns/components/ui/card.js +0 -25
  97. package/dist/shadcns/components/ui/carousel.d.ts +0 -19
  98. package/dist/shadcns/components/ui/carousel.js +0 -91
  99. package/dist/shadcns/components/ui/chart.d.ts +0 -40
  100. package/dist/shadcns/components/ui/chart.js +0 -114
  101. package/dist/shadcns/components/ui/checkbox.d.ts +0 -4
  102. package/dist/shadcns/components/ui/checkbox.js +0 -9
  103. package/dist/shadcns/components/ui/collapsible.d.ts +0 -5
  104. package/dist/shadcns/components/ui/collapsible.js +0 -13
  105. package/dist/shadcns/components/ui/command.d.ts +0 -18
  106. package/dist/shadcns/components/ui/command.js +0 -33
  107. package/dist/shadcns/components/ui/context-menu.d.ts +0 -25
  108. package/dist/shadcns/components/ui/context-menu.js +0 -51
  109. package/dist/shadcns/components/ui/dialog.d.ts +0 -15
  110. package/dist/shadcns/components/ui/dialog.js +0 -36
  111. package/dist/shadcns/components/ui/drawer.d.ts +0 -13
  112. package/dist/shadcns/components/ui/drawer.js +0 -35
  113. package/dist/shadcns/components/ui/dropdown-menu.d.ts +0 -25
  114. package/dist/shadcns/components/ui/dropdown-menu.js +0 -51
  115. package/dist/shadcns/components/ui/field.d.ts +0 -24
  116. package/dist/shadcns/components/ui/field.js +0 -75
  117. package/dist/shadcns/components/ui/form.d.ts +0 -24
  118. package/dist/shadcns/components/ui/form.js +0 -56
  119. package/dist/shadcns/components/ui/hover-card.d.ts +0 -6
  120. package/dist/shadcns/components/ui/hover-card.js +0 -14
  121. package/dist/shadcns/components/ui/input-otp.d.ts +0 -11
  122. package/dist/shadcns/components/ui/input-otp.js +0 -21
  123. package/dist/shadcns/components/ui/input.d.ts +0 -3
  124. package/dist/shadcns/components/ui/input.js +0 -6
  125. package/dist/shadcns/components/ui/item.d.ts +0 -23
  126. package/dist/shadcns/components/ui/item.js +0 -65
  127. package/dist/shadcns/components/ui/label.d.ts +0 -4
  128. package/dist/shadcns/components/ui/label.js +0 -8
  129. package/dist/shadcns/components/ui/menubar.d.ts +0 -26
  130. package/dist/shadcns/components/ui/menubar.js +0 -54
  131. package/dist/shadcns/components/ui/native-select.d.ts +0 -7
  132. package/dist/shadcns/components/ui/native-select.js +0 -13
  133. package/dist/shadcns/components/ui/navigation-menu.d.ts +0 -14
  134. package/dist/shadcns/components/ui/navigation-menu.js +0 -31
  135. package/dist/shadcns/components/ui/pagination.d.ts +0 -13
  136. package/dist/shadcns/components/ui/pagination.js +0 -28
  137. package/dist/shadcns/components/ui/popover.d.ts +0 -7
  138. package/dist/shadcns/components/ui/popover.js +0 -17
  139. package/dist/shadcns/components/ui/progress.d.ts +0 -4
  140. package/dist/shadcns/components/ui/progress.js +0 -8
  141. package/dist/shadcns/components/ui/radio-group.d.ts +0 -5
  142. package/dist/shadcns/components/ui/radio-group.js +0 -12
  143. package/dist/shadcns/components/ui/resizable.d.ts +0 -8
  144. package/dist/shadcns/components/ui/resizable.js +0 -15
  145. package/dist/shadcns/components/ui/scroll-area.d.ts +0 -5
  146. package/dist/shadcns/components/ui/scroll-area.js +0 -11
  147. package/dist/shadcns/components/ui/select.d.ts +0 -15
  148. package/dist/shadcns/components/ui/select.js +0 -38
  149. package/dist/shadcns/components/ui/separator.d.ts +0 -4
  150. package/dist/shadcns/components/ui/separator.js +0 -8
  151. package/dist/shadcns/components/ui/sheet.d.ts +0 -13
  152. package/dist/shadcns/components/ui/sheet.js +0 -40
  153. package/dist/shadcns/components/ui/sidebar.d.ts +0 -66
  154. package/dist/shadcns/components/ui/sidebar.js +0 -204
  155. package/dist/shadcns/components/ui/skeleton.d.ts +0 -2
  156. package/dist/shadcns/components/ui/skeleton.js +0 -6
  157. package/dist/shadcns/components/ui/slider.d.ts +0 -4
  158. package/dist/shadcns/components/ui/slider.js +0 -10
  159. package/dist/shadcns/components/ui/sonner.d.ts +0 -3
  160. package/dist/shadcns/components/ui/sonner.js +0 -13
  161. package/dist/shadcns/components/ui/switch.d.ts +0 -4
  162. package/dist/shadcns/components/ui/switch.js +0 -8
  163. package/dist/shadcns/components/ui/table.d.ts +0 -10
  164. package/dist/shadcns/components/ui/table.js +0 -28
  165. package/dist/shadcns/components/ui/tabs.d.ts +0 -7
  166. package/dist/shadcns/components/ui/tabs.js +0 -17
  167. package/dist/shadcns/components/ui/textarea.d.ts +0 -3
  168. package/dist/shadcns/components/ui/textarea.js +0 -6
  169. package/dist/shadcns/components/ui/toggle-group.d.ts +0 -7
  170. package/dist/shadcns/components/ui/toggle-group.js +0 -20
  171. package/dist/shadcns/components/ui/toggle.d.ts +0 -9
  172. package/dist/shadcns/components/ui/toggle.js +0 -26
  173. package/dist/shadcns/components/ui/tooltip.d.ts +0 -7
  174. package/dist/shadcns/components/ui/tooltip.js +0 -17
  175. package/dist/shadcns/hooks/use-mobile.d.ts +0 -1
  176. package/dist/shadcns/hooks/use-mobile.js +0 -15
  177. package/dist/shadcns/lib/utils.d.ts +0 -2
  178. package/dist/shadcns/lib/utils.js +0 -5
  179. package/dist/types/components.type.d.ts +0 -9
  180. package/dist/types/components.type.js +0 -1
  181. package/dist/types/shadcns.type.d.ts +0 -6
  182. package/dist/types/shadcns.type.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useDebounce.tsx","../../src/hooks/useDebounceValue.tsx","../../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs","../../src/hooks/useCookies.tsx","../../src/hooks/useDragResize.tsx","../../src/hooks/useAsyncFetcher.tsx","../../src/hooks/useMounted.tsx","../../src/hooks/useEffectOne.tsx","../../src/hooks/useEffectLeave.tsx","../../../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218_use-sync-extern_1aa03e9cf80a724764398e3bf422ccac/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.8_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218_use-sync-extern_1aa03e9cf80a724764398e3bf422ccac/node_modules/zustand/esm/react.mjs","../../../node_modules/.pnpm/@radix-ui+react-context@1.1.2_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-context/src/create-context.tsx","../../../node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.2_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../../../node_modules/.pnpm/@radix-ui+primitive@1.1.2/node_modules/@radix-ui/primitive/src/primitive.tsx","../../../node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-use-layout-effect/src/use-layout-effect.tsx","../../../node_modules/.pnpm/@radix-ui+react-primitive@2.1.3_@types+react-dom@19.2.2_@types+react@19.2.2__@types+rea_a93da83cdf0ec57145a24ab4ed63e1fb/node_modules/@radix-ui/react-primitive/src/primitive.tsx","../../../node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-use-callback-ref/src/use-callback-ref.tsx","../../../node_modules/.pnpm/@radix-ui+react-use-escape-keydown@1.1.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-use-escape-keydown/src/use-escape-keydown.tsx","../../../node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.10_@types+react-dom@19.2.2_@types+react@19.2.2__@_cab7e44d1dd3afad078bbb51c0bef02c/node_modules/@radix-ui/react-dismissable-layer/src/dismissable-layer.tsx","../../../node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.7_@types+react-dom@19.2.2_@types+react@19.2.2__@types+r_7cf80a12b0b31dc42239f44c0e8ec832/node_modules/@radix-ui/react-focus-scope/src/focus-scope.tsx","../../../node_modules/.pnpm/@radix-ui+react-portal@1.1.9_@types+react-dom@19.2.2_@types+react@19.2.2__@types+react@_b6fb3a234a4d5bffa0fc2faee946189e/node_modules/@radix-ui/react-portal/src/portal.tsx","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.4_@types+react-dom@19.2.2_@types+react@19.2.2__@types+reac_41189d418a2009719e4f3867f2add48a/node_modules/@radix-ui/react-presence/src/use-state-machine.tsx","../../../node_modules/.pnpm/@radix-ui+react-presence@1.1.4_@types+react-dom@19.2.2_@types+react@19.2.2__@types+reac_41189d418a2009719e4f3867f2add48a/node_modules/@radix-ui/react-presence/src/presence.tsx","../../../node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.2_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/@radix-ui/react-focus-guards/src/focus-guards.tsx","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/use-callback-ref/dist/es2015/assignRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/use-callback-ref/dist/es2015/useRef.js","../../../node_modules/.pnpm/use-callback-ref@1.3.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/use-sidecar/dist/es2015/medium.js","../../../node_modules/.pnpm/use-sidecar@1.1.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/use-sidecar/dist/es2015/exports.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/medium.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/UI.js","../../../node_modules/.pnpm/get-nonce@1.0.1/node_modules/get-nonce/dist/es2015/index.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-style-singleton/dist/es2015/singleton.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-style-singleton/dist/es2015/hook.js","../../../node_modules/.pnpm/react-style-singleton@2.2.3_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-style-singleton/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../../node_modules/.pnpm/react-remove-scroll-bar@2.3.8_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../../node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.2_react@19.3.0-canary-65eec428-20251218/node_modules/react-remove-scroll/dist/es2015/Combination.js","../../../node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js","../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.14_@types+react-dom@19.2.2_@types+react@19.2.2__@types+react_723d27138f850a368861c7fe30989106/node_modules/@radix-ui/react-dialog/src/dialog.tsx","../../src/shadcns/components/ui/alert.tsx","../../src/shadcns/components/ui/badge.tsx","../../src/shadcns/components/ui/button.tsx","../../../node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Alignment.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EventStore.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Animations.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Axis.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Limit.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Counter.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/DragHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/DragTracker.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/NodeRects.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/PercentOfView.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ResizeHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollBody.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollBounds.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollContain.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollLimit.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollLooper.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollProgress.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollSnaps.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideRegistry.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollTarget.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/ScrollTo.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideFocus.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Vector1d.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Translate.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideLooper.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesInView.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlideSizes.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/SlidesToScroll.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Engine.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EventHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/Options.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/OptionsHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/PluginsHandler.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/src/components/EmblaCarousel.ts","../../../node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.3.0-canary-65eec428-20251218/node_modules/embla-carousel-react/src/components/useEmblaCarousel.ts","../../src/shadcns/components/ui/carousel.tsx","../../src/shadcns/components/ui/chart.tsx","../../../node_modules/.pnpm/vaul@1.1.2_@types+react-dom@19.2.2_@types+react@19.2.2__@types+react@19.2.2_react-dom@1_7535f7abd559685c050a03e6fbcaeb74/node_modules/vaul/dist/index.mjs","../../src/shadcns/components/ui/form.tsx","../../../node_modules/.pnpm/input-otp@1.4.2_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec428-_9ac761ad64d43404cef494d811edcf8d/node_modules/input-otp/src/sync-timeouts.ts","../../../node_modules/.pnpm/input-otp@1.4.2_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec428-_9ac761ad64d43404cef494d811edcf8d/node_modules/input-otp/src/use-previous.ts","../../../node_modules/.pnpm/input-otp@1.4.2_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec428-_9ac761ad64d43404cef494d811edcf8d/node_modules/input-otp/src/use-pwm-badge.tsx","../../../node_modules/.pnpm/input-otp@1.4.2_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec428-_9ac761ad64d43404cef494d811edcf8d/node_modules/input-otp/src/input.tsx","../../src/shadcns/components/ui/navigation-menu.tsx","../../../node_modules/.pnpm/react-resizable-panels@3.0.3_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-can_a3333c6baea0278147f19beb299c23f0/node_modules/react-resizable-panels/dist/react-resizable-panels.edge-light.js","../../src/shadcns/components/ui/sidebar.tsx","../../../node_modules/.pnpm/next-themes@0.4.6_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec42_d6ea04c5b6a2e7fc00b588eb122fab90/node_modules/next-themes/dist/index.mjs","../../../node_modules/.pnpm/sonner@2.0.5_react-dom@19.3.0-canary-65eec428-20251218_react@19.3.0-canary-65eec428-202_6651a3920774626979a88df20fd17dd6/node_modules/sonner/dist/index.mjs","../../src/shadcns/components/ui/toggle-group.tsx","../../src/shadcns/components/ui/toggle.tsx","../../src/shadcns/lib/utils.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/package.json","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/maths.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/animate.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/debounce.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/dimensions.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/emitter.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/virtual-scroll.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/core/src/lenis.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/react/src/store.ts","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/react/src/provider.tsx","../../../node_modules/.pnpm/lenis@1.3.14_react@19.3.0-canary-65eec428-20251218/node_modules/lenis/packages/react/src/use-lenis.ts","../../src/components/scroll-containers/lenis-scroll.tsx","../../src/components/scroll-containers/scroll-containers.tsx","../../src/components/scroll-containers/native-scroll.tsx","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/utils/projection.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/utils/index.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/events/EventBus.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/events/WheelTargetObserver.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/wheel-normalizer/wheel-normalizer.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/wheel-gestures/constants.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/wheel-gestures/options.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/wheel-gestures/state.ts","../../../node_modules/.pnpm/wheel-gestures@2.2.48/node_modules/wheel-gestures/src/wheel-gestures/wheel-gestures.ts","../../../node_modules/.pnpm/embla-carousel-wheel-gestures@8.1.0_embla-carousel@8.6.0/node_modules/embla-carousel-wheel-gestures/src/WheelGesturesPlugin.ts","../../../node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/src/components/Options.ts","../../../node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/src/components/Autoplay.ts","../../../node_modules/.pnpm/embla-carousel-auto-scroll@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-auto-scroll/src/components/Options.ts","../../../node_modules/.pnpm/embla-carousel-auto-scroll@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-auto-scroll/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel-auto-scroll@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-auto-scroll/src/components/AutoScroll.ts","../../../node_modules/.pnpm/embla-carousel-auto-height@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-auto-height/src/components/AutoHeight.ts","../../../node_modules/.pnpm/embla-carousel-class-names@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-class-names/src/components/Options.ts","../../../node_modules/.pnpm/embla-carousel-class-names@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-class-names/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel-class-names@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-class-names/src/components/ClassNames.ts","../../../node_modules/.pnpm/embla-carousel-fade@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-fade/src/components/utils.ts","../../../node_modules/.pnpm/embla-carousel-fade@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-fade/src/components/Fade.ts","../../src/components/embla-carousels/embla-carousels-hooks.tsx","../../src/components/embla-carousels/embla-carousels.tsx","../../src/components/emblas/embla-context.tsx","../../src/hooks/useAnchors.tsx","../../src/hooks/useHash.tsx"],"names":["useRef","useEffect","converter","useState","useCallback","getState","api","React","createContext","React2","props","jsx","useContext","createScope","nextScopes","React3","useLayoutEffect","React4","Slot","Node","React7","React8","React9","React10","node","handlePointerDown","handleAndDispatchPointerDownOutsideEvent","React11","handleFocusIn","handleFocusOut","handleMutations","container","React12","ReactDOM","React13","React23","count","React14","__assign","t","n","useCallbackRef","React15","x","cbs","React16","React17","enabled","SideCar","nonce","counter","React18","Sheet","React19","React20","Style","React21","React24","PORTAL_NAME","createSlot","jsxs","Fragment","Content","cva","isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB","isNumber","isString","isBoolean","mathAbs","Math","abs","mathSign","sign","deltaAbs","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","Number","arrayLast","arrayLastIndex","max","arrayIsLastIndex","arrayFromNumber","startAt","from","_","i","object","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","type","handler","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","down","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","isTouchEvt","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","currentLocation","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","logInterval","startEvent","lastEvent","readTime","evtAxis","property","coord","expired","diffDrag","diffTime","isFlick","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","offset","top","right","bottom","left","PercentOfView","ResizeHandler","slides","watchResize","nodeRects","observeNodes","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","diffSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","roundingSafety","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","remainingGap","findSlideBounds","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","inViewMatch","notInViewMatch","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","getListeners","e","on","cb","off","defaultOptions","OptionsHandler","mergeOptions","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","assign","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","customContainer","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout","useEmblaCarousel","storedOptions","storedPlugins","setEmblaApi","viewport","setViewport","current","newEmblaApi","React26","React27","React__default","setRef","composeRefs","useComposedRefs","React28","useMemo","Overlay","React29","syncTimeouts","t1","t2","t3","usePrevious","ref","U","PWM_BADGE_MARGIN_RIGHT","PWM_BADGE_SPACE_WIDTH_PX","PWM_BADGE_SPACE_WIDTH","PASSWORD_MANAGERS_SELECTORS","usePasswordManagerBadge","containerRef","inputRef","pushPasswordManagerStrategy","isFocused","hasPWMBadge","setHasPWMBadge","S","hasPWMBadgeSpace","setHasPWMBadgeSpace","done","setDone","willPushPWMBadge","trackPWMBadge","input","elementToCompare","rightCornerX","centereredY","checkHasSpace","distanceToRightEdge","interval","_isFocused","t4","OTPInputContext","OTPInput","_a","_b","uncheckedValue","uncheckedOnChange","maxLength","textAlign","pattern","placeholder","inputMode","onComplete","pasteTransformer","containerClassName","noScriptCSSFallback","NOSCRIPT_CSS_FALLBACK","__objRest","_c","_d","_e","internalValue","setInternalValue","previousValue","onChange","newValue","regexp","initialLoadRef","inputMetadataRef","onDocumentSelectionChange","setMirrorSelectionStart","setMirrorSelectionEnd","_s","_dir","_ml","_val","_prev","isSingleCaret","isInsertMode","c","wasPreviouslyInserting","s","dir","setIsFocused","styleEl","autofillStyles","safeInsertRule","updateRootHeight","isHoveringInput","setIsHoveringInput","mirrorSelectionStart","mirrorSelectionEnd","pwmb","_changeListener","_focusListener","_pasteListener","_content","content","_start","_end","rootStyle","inputStyle","renderedInput","__spreadProps","__spreadValues","contextValue","slotIdx","isActive","char","placeholderChar","renderedChildren","sheet","rule","useId","resizePanel","useImperativeHandle","minSize","forwardRef","delta","pivotIndex","prevSize","unsafeSize","safeSize","panelDataArray","panelData","layout","onLayout","registerResizeHandle","panelGroupElement","dragState","groupId","keyboardResizeBy","React32","__insertCSS","toast","React35","lerp","debounce","useStore","state","lenis","memo","useEffectEvent","DECAY","projection","velocityPxMs","decay","lastOf","average","numbers","clamp","addVectors","v1","v2","Error","val","absMax","deepFreeze","o","freeze","values","isFrozen","EventBus","listener","l","dispatch","data","WheelTargetObserver","eventListener","unobserve","LINE_HEIGHT","PAGE_HEIGHT","innerHeight","DELTA_MODE_UNIT","normalizeWheel","deltaX","deltaMode","deltaY","deltaZ","axisDelta","reverseAll","reverseAxisDeltaSign","wheel","reverseSign","multipliers","shouldReverse","DELTA_MAX_ABS","clampAxisDelta","__DEV__","process","env","NODE_ENV","ACC_FACTOR_MIN","ACC_FACTOR_MAX","WHEELEVENTS_TO_MERGE","WHEELEVENTS_TO_ANALAZE","configDefaults","preventWheelAction","WILL_END_TIMEOUT_DEFAULT","createWheelGesturesState","isStarted","isStartPublished","isMomentum","startTime","lastAbsDelta","Infinity","axisMovement","axisVelocity","accelerationFactors","scrollPoints","scrollPointsToMerge","willEndTimeout","WheelGestures","optionsParam","config","currentEvent","negativeZeroFingerUpSpecialEvent","prevWheelEventState","feedWheel","wheelEvents","wheelEvent","processWheelEventData","updateOptions","newOptions","some","option","console","error","publishWheel","additionalData","wheelEventState","isStart","isEnding","isMomentumCancel","axisMovementProjection","previous","shouldPreventDefault","deltaMaxAbs","warn","is","mergeScrollPointsCalcVelocity","willEnd","unshift","axisDeltaSum","updateVelocity","detectMomentum","updateStartVelocity","d","latestScrollPoint","prevScrollPoint","deltaTime","accelerationFactor","updateWillEndTimeout","newTimeout","accelerationFactorInMomentumRange","accFactor","recognizedMomentum","recentAccelerationFactors","detectedMomentum","accFac","sameAccFac","f1","f2","bothAreInRangeOrZero","now","willEndId","clearTimeout","wheelDraggingClass","forceWheelAxis","WheelGesturesPlugin","cleanup","embla","allOptions","targetNode","parentNode","wheelAxis","wheelGestures","updateSizeRelatedVariables","scrollBoundaryThreshold","unobserveTargetNode","offWheel","handleWheel","overBoundaryAccumulation","blockedWaitUntilGestureEnd","wheelGestureStarted","dispatchEvent","addNativeMouseEventListeners","classList","wheelGestureEnded","createRelativeMouseEvent","removeNativeMouseEventListeners","documentElement","preventNativeMouseHandler","isTrusted","stopImmediatePropagation","moveX","moveY","checkIfAtBoundary","isAtBoundary","progressRatio","dampingFactor","counterMoveSign","counterMovement","dampingMovement","maxX","maxY","clientX","clientY","screenX","screenY","movementX","movementY","bubbles","composed","primaryAxisDelta","isScrollingNext","isScrollingPrev","isBoundaryThresholdReached","crossAxisDelta","isRelease","isEndingOrRelease","primaryAxisDeltaIsDominant","delay","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","normalizeDelay","getAutoplayRootNode","emblaRootNode","Autoplay","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","emblaApiInstance","isDraggable","visibilityChange","mouseEnter","mouseLeave","stopAutoplay","startAutoplay","setTimer","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","isPlaying","nextIndex","lastIndex","kill","timeUntilNext","currentDelay","timePastSinceStart","startDelay","getAutoScrollRootNode","AutoScroll","autoScrollActive","defaultScrollBehaviour","stopAutoScroll","startAutoScroll","settle","createAutoScrollBehaviour","directionSign","noop","bodyVelocity","directionDiff","currentIndex","reachedEnd","constrainedLocation","startAutoScrollOnSettle","startDelayOverride","AutoHeight","slideHeights","heightEvents","setContainerHeight","highestInView","selectedIndexes","snapped","draggable","dragging","normalizeClassNames","classNames","normalized","Boolean","removeClass","addClass","ClassNames","snappedIndexes","inViewIndexes","selectedEvents","draggingEvents","inViewEvents","toggleDraggingClass","toggleSnappedClasses","toggleInViewClasses","toggleSlideClasses","classNameKey","toggleClass","addClassIndexes","removeClassIndexes","removeClassSlides","addClassSlides","newSnappedIndexes","newInViewIndexes","clampNumber","number","isNaN","Fade","fullOpacity","noOpacity","fadeFriction","opacities","fadeToNextDistance","distanceFromPointerDown","fadeVelocity","progress","shouldFadePair","defaultSettledBehaviour","defaultProgressBehaviour","selectedSnap","select","fadeToSelectedSnapInstantly","disableScroll","slideNode","slideStyle","opacity","pointerEvents","setOpacities","getSlideTransform","position","translateAxis","toUpperCase","lockExcessiveScroll","fadeIndex","indexA","absVelocity","currentOpacity","isFadeIndex","nextOpacity","clampedOpacity","fadePair","indexB","setProgress","setOpacity","slidesInSnap","roundedOpacity","hasOpacity","snapFraction","currentPosition","diffPosition","getFadeIndex","distanceSign","nextSnap","fade","noFadeIndex","notReachedTarget","use","offseters"],"mappings":"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","file":"index.js","sourcesContent":["\n\nimport { useCallback, useEffect, useRef } from \"react\"\n\nexport interface DebounceTypes {\n\tcallback: () => any,\n\tdependency: any[],\n\tdelay?: number,\n\tactive?: boolean,\n}\n\nexport function useDebounce({\n\tcallback,\n\tdependency = [],\n\tdelay = 500,\n\tactive = true,\n}: DebounceTypes\n) {\n\n\tif (!active || !callback) return\n\n\tconst timerRef = useRef<any>(null)\n\n\tuseEffect(() => {\n\t\tif (timerRef.current) clearTimeout(timerRef.current)\n\t\ttimerRef.current = setTimeout(callback, delay)\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) clearTimeout(timerRef.current)\n\t\t}\n\t}, [...dependency]);\n\n}\n","\n\nimport { useEffect, useRef, useState } from \"react\"\n\nexport function useDebounceValue<T>(value: T, delay = 500): T {\n\n\tconst [debounceValue, setDebounceValue] = useState<T>(value);\n\tconst timerRef = useRef<NodeJS.Timeout | string | number | undefined>(undefined)\n\n\tuseEffect(() => {\n\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\ttimerRef.current = setTimeout(() => setDebounceValue(value), delay);\n\n\t\treturn () => {\n\t\t\tif (timerRef.current) clearTimeout(timerRef.current);\n\t\t};\n\t}, [value, delay]);\n\n\treturn debounceValue;\n};\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","\n\nimport Cookies from 'js-cookie'\n\n// wade 2024.12.06 (js-cookie 版本)\n\nexport function useCookies() {\n\tconst setCookies = (name: string, value: string, days = 7) => {\n\t\tCookies.set(name, value, { expires: days, path: \"/\" })\n\t}\n\n\tconst getCookies = (name: string): string | null => {\n\t\treturn Cookies.get(name) ?? null\n\t}\n\n\tconst updateCookies = (name: string, value: string, days = 7) => {\n\t\tif (getCookies(name) !== null) setCookies(name, value, days)\n\t}\n\n\tconst deleteCookies = (name: string) => {\n\t\tCookies.remove(name, { path: \"/\" })\n\t}\n\n\treturn { setCookies, getCookies, updateCookies, deleteCookies };\n}\n\n\n//\n\n// //wade 2024.12.06\n\n// export function useCookies() {\n\n// \tconst setCookies = (name: string, value: string, days = 7) => {\n// \t\tconst date = new Date();\n// \t\tdate.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n// \t\tconst expires = `expires=${date.toUTCString()}`;\n// \t\tdocument.cookie = `${name}=${encodeURIComponent(value)}; ${expires}; path=/`;\n// \t}\n\n// \tconst getCookies = (name: string) => {\n// \t\tconst cookies = document.cookie.split(\"; \");\n\n// \t\tfor (const cookie of cookies) {\n// \t\t\tconst [key, value] = cookie.split(\"=\");\n// \t\t\tif (key === name) return decodeURIComponent(value);\n// \t\t}\n\n// \t\treturn null; // 如果找不到,返回 null\n// \t}\n\n// \tconst updateCookies = (name: string, value: string, days = 7) =>\n// \t\tgetCookies(name) !== null && setCookies(name, value, days);\n\n\n// \tconst deleteCookies = (name: string) => {\n// \t\tdocument.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n// \t}\n\n// \treturn { setCookies, getCookies, updateCookies, deleteCookies }\n\n// }\n","\n\n//wade 2024.12.06\nimport { useEffect, useRef, useState } from \"react\"\n\nexport interface ResizeTypes {\n\twidth?: number | string\n\theight?: number | string\n}\n\nexport interface DragResizeProps {\n\tactive?: boolean\n\tdirection?:\n\t| \"horizontal\"\n\t| \"vertical\"\n\tminWidth?: number\n\tmaxWidth?: number\n\tminHeight?: number\n\tmaxHeight?: number\n\tonInit?: (size: ResizeTypes) => void\n\tonResizeStart?: (size: ResizeTypes) => void\n\tonResizing?: (size: ResizeTypes) => void\n\tonResizeEnd?: (size: ResizeTypes) => void\n}\n\nexport type DragResizeTypes = {\n\tdragRef: React.RefObject<HTMLDivElement | null>,\n\tresizeRef: React.RefObject<HTMLDivElement | null>\n\tresize?: ResizeTypes\n}\n\nexport function useDragResize({\n\tactive = true,\n\tdirection = \"horizontal\",\n\tminWidth,\n\tmaxWidth,\n\tminHeight,\n\tmaxHeight,\n\tonInit,\n\tonResizeStart,\n\tonResizing,\n\tonResizeEnd\n}: DragResizeProps\n): DragResizeTypes {\n\n\tconst dragRef = useRef<HTMLDivElement>(null)\n\tconst resizeRef = useRef<HTMLDivElement>(null)\n\n\tconst [resize, setResize] = useState<ResizeTypes>({ width: 0, height: 0 })\n\n\tconst getResizeSizeValue = () => {\n\t\tif (!resizeRef.current) return\n\n\t\tconst { width: w, height: h } = resizeRef.current.style\n\t\tconst width = Number(w.replace(\"px\", \"\")) ?? \"inherit\"\n\t\tconst height = Number(h.replace(\"px\", \"\")) ?? \"inherit\"\n\n\t\treturn { width }\n\t}\n\n\tconst setResizeValue = (clientX: number, clientY: number) => {\n\t\tif (!resizeRef.current) return\n\n\t\tconst rect = resizeRef.current.getBoundingClientRect()\n\t\tconst resizeWidth = clientX - rect.left\n\t\tconst resizeHeight = clientY - rect.top\n\n\t\tif (direction == \"horizontal\"\n\t\t\t&& (minWidth && resizeWidth >= minWidth)\n\t\t\t&& (maxWidth && resizeWidth <= maxWidth)\n\t\t) {\n\t\t\tresizeRef.current.style.width = resizeWidth + \"px\"\n\t\t\treturn { width: resizeWidth, height: undefined }\n\t\t}\n\n\t\tif (direction == \"vertical\"\n\t\t\t&& (minHeight && resizeWidth >= minHeight)\n\t\t\t&& (maxHeight && resizeWidth <= maxHeight)\n\t\t) {\n\t\t\tresizeRef.current.style.height = resizeHeight + \"px\"\n\t\t\treturn { width: undefined, height: resizeHeight }\n\t\t}\n\n\t}\n\n\tconst onInitCallback = () => {\n\t\tconst resizeValue = getResizeSizeValue()\n\t\tresizeValue && onInit?.(resizeValue)\n\t}\n\n\tconst removeEventListeners = () => {\n\t\tdocument.removeEventListener(\"mousemove\", onMouseMove)\n\t\tdocument.removeEventListener(\"mouseup\", onMouseUp)\n\t}\n\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\tconst resizeValue = setResizeValue(e.clientX, e.clientY)\n\t\tif (!resizeValue) return\n\t\tsetResize(() => ({ ...resizeValue }))\n\t\tonResizing?.(resizeValue)\n\t}\n\n\tconst onMouseUp = () => {\n\t\tconst resizeValue = getResizeSizeValue()\n\t\tresizeValue && onResizeEnd?.(resizeValue)\n\t\tremoveEventListeners()\n\t}\n\n\tconst onDragRefMouseDown = (e: MouseEvent) => {\n\t\te.preventDefault()\n\n\t\tconst resizeValue = getResizeSizeValue()\n\t\tresizeValue && onResizeStart?.(resizeValue)\n\n\t\tdocument.addEventListener(\"mousemove\", onMouseMove)\n\t\tdocument.addEventListener(\"mouseup\", onMouseUp)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active && dragRef.current && resizeRef.current) {\n\t\t\tdragRef.current.onmousedown = onDragRefMouseDown\n\t\t\tonInit && onInitCallback()\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (!dragRef?.current) return\n\t\t\tdragRef.current.onmousedown = null\n\t\t\tremoveEventListeners()\n\n\t\t}\n\t}, [active])\n\n\treturn { dragRef, resizeRef, resize }\n\n}\n","\n\nimport { useRef, useState, useEffect, useCallback } from \"react\"\n\ntype ReturnDatasTypes = {\n\tfetcher: (payload: PayloadTypes) => Promise<any>\n\tcancel: () => void\n\tpending: boolean\n}\n\ninterface PayloadTypes {\n\turl: string | URL | globalThis.Request,\n\toptions?: RequestInit\n}\n\nexport function useAsyncFetcher(): ReturnDatasTypes {\n\n\tconst [isPending, setPending] = useState(false)\n\tconst controllerRef = useRef<AbortController | null>(null)\n\n\tconst startFetch = useCallback(async ({ url, options }: PayloadTypes) => {\n\t\tif (isPending || !url) return\n\n\t\tconst controller = new AbortController()\n\t\tcontrollerRef.current = controller\n\n\t\tsetPending(true)\n\n\t\ttry {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tsignal: controller.signal,\n\t\t\t\t...options,\n\t\t\t})\n\t\t\tconst datas = await response.json()\n\t\t\treturn datas\n\n\t\t} catch (error) {\n\t\t\tconsole.error(\"useAsyncFetche startFetch error:\", error)\n\t\t\treturn { status: false, error: error }\n\n\t\t} finally {\n\t\t\tsetPending(false)\n\t\t}\n\n\t}, [isPending])\n\n\tconst cancelFetch = () => {\n\t\tcontrollerRef.current?.abort()\n\t\tsetPending(false)\n\t}\n\n\tuseEffect(() => {\n\t\treturn () => controllerRef.current?.abort()\n\t}, [])\n\n\treturn {\n\t\tpending: isPending,\n\t\tcancel: cancelFetch,\n\t\tfetcher: startFetch\n\t}\n}\n","\n\nimport { useEffect, useState } from \"react\"\n\nexport function useMounted() {\n\tconst [isMounded, setMounded] = useState(false)\n\tuseEffect(() => { setMounded(true) }, [])\n\treturn { isMounded }\n}\n","\n\nimport { useEffect, useRef } from \"react\"\n\nexport function useEffectOne(callback: () => void) {\n\tconst callbackRef = useRef<(() => void) | null>(callback)\n\tcallbackRef.current = callback\n\n\tuseEffect(() => {\n\t\tcallbackRef.current?.()\n\t\treturn () => {\n\t\t\tcallbackRef.current = null\n\t\t}\n\t}, [])\n}\n","\n\nimport { useEffect, useRef } from \"react\"\n\nexport function useEffectLeave(callback: () => void) {\n\tconst callbackRef = useRef<(() => void) | null>(callback)\n\tcallbackRef.current = callback\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tcallbackRef.current?.()\n\t\t\tcallbackRef.current = null\n\t\t}\n\t}, [])\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import * as React from 'react';\n\nfunction createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = React.createContext<ContextValueType | undefined>(defaultContext);\n\n const Provider: React.FC<ContextValueType & { children: React.ReactNode }> = (props) => {\n const { children, ...context } = props;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * createContextScope\n * -----------------------------------------------------------------------------------------------*/\n\ntype Scope<C = any> = { [scopeName: string]: React.Context<C>[] } | undefined;\ntype ScopeHook = (scope: Scope) => { [__scopeProp: string]: Scope };\ninterface CreateScope {\n scopeName: string;\n (): ScopeHook;\n}\n\nfunction createContextScope(scopeName: string, createContextScopeDeps: CreateScope[] = []) {\n let defaultContexts: any[] = [];\n\n /* -----------------------------------------------------------------------------------------------\n * createContext\n * ---------------------------------------------------------------------------------------------*/\n\n function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n ) {\n const BaseContext = React.createContext<ContextValueType | undefined>(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n\n const Provider: React.FC<\n ContextValueType & { scope: Scope<ContextValueType>; children: React.ReactNode }\n > = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n // Only re-memoize when prop values change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const value = React.useMemo(() => context, Object.values(context)) as ContextValueType;\n return <Context.Provider value={value}>{children}</Context.Provider>;\n };\n\n Provider.displayName = rootComponentName + 'Provider';\n\n function useContext(consumerName: string, scope: Scope<ContextValueType | undefined>) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== undefined) return defaultContext;\n // if a defaultContext wasn't specified, it's a required context.\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n\n return [Provider, useContext] as const;\n }\n\n /* -----------------------------------------------------------------------------------------------\n * createScope\n * ---------------------------------------------------------------------------------------------*/\n\n const createScope: CreateScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope: Scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n\n createScope.scopeName = scopeName;\n return [createContext, composeContextScopes(createScope, ...createContextScopeDeps)] as const;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * composeContextScopes\n * -----------------------------------------------------------------------------------------------*/\n\nfunction composeContextScopes(...scopes: CreateScope[]) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n\n const createScope: CreateScope = () => {\n const scopeHooks = scopes.map((createScope) => ({\n useScope: createScope(),\n scopeName: createScope.scopeName,\n }));\n\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes, { useScope, scopeName }) => {\n // We are calling a hook inside a callback which React warns against to avoid inconsistent\n // renders, however, scoping doesn't have render side effects so we ignore the rule.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes, ...currentScope };\n }, {});\n\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nexport { createContext, createContextScope };\nexport type { CreateScope, Scope };\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","function composeEventHandlers<E extends { defaultPrevented: boolean }>(\n originalEventHandler?: (event: E) => void,\n ourEventHandler?: (event: E) => void,\n { checkForDefaultPrevented = true } = {}\n) {\n return function handleEvent(event: E) {\n originalEventHandler?.(event);\n\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\n\nexport { composeEventHandlers };\n","import * as React from 'react';\n\n/**\n * On the server, React emits a warning when calling `useLayoutEffect`.\n * This is because neither `useLayoutEffect` nor `useEffect` run on the server.\n * We use this safe version which suppresses the warning by replacing it with a noop on the server.\n *\n * See: https://reactjs.org/docs/hooks-reference.html#uselayouteffect\n */\nconst useLayoutEffect = globalThis?.document ? React.useLayoutEffect : () => {};\n\nexport { useLayoutEffect };\n","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createSlot } from '@radix-ui/react-slot';\n\nconst NODES = [\n 'a',\n 'button',\n 'div',\n 'form',\n 'h2',\n 'h3',\n 'img',\n 'input',\n 'label',\n 'li',\n 'nav',\n 'ol',\n 'p',\n 'select',\n 'span',\n 'svg',\n 'ul',\n] as const;\n\ntype Primitives = { [E in (typeof NODES)[number]]: PrimitiveForwardRefComponent<E> };\ntype PrimitivePropsWithRef<E extends React.ElementType> = React.ComponentPropsWithRef<E> & {\n asChild?: boolean;\n};\n\ninterface PrimitiveForwardRefComponent<E extends React.ElementType>\n extends React.ForwardRefExoticComponent<PrimitivePropsWithRef<E>> {}\n\n/* -------------------------------------------------------------------------------------------------\n * Primitive\n * -----------------------------------------------------------------------------------------------*/\n\nconst Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props: PrimitivePropsWithRef<typeof node>, forwardedRef: any) => {\n const { asChild, ...primitiveProps } = props;\n const Comp: any = asChild ? Slot : node;\n\n if (typeof window !== 'undefined') {\n (window as any)[Symbol.for('radix-ui')] = true;\n }\n\n return <Comp {...primitiveProps} ref={forwardedRef} />;\n });\n\n Node.displayName = `Primitive.${node}`;\n\n return { ...primitive, [node]: Node };\n}, {} as Primitives);\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Flush custom event dispatch\n * https://github.com/radix-ui/primitives/pull/1378\n *\n * React batches *all* event handlers since version 18, this introduces certain considerations when using custom event types.\n *\n * Internally, React prioritises events in the following order:\n * - discrete\n * - continuous\n * - default\n *\n * https://github.com/facebook/react/blob/a8a4742f1c54493df00da648a3f9d26e3db9c8b5/packages/react-dom/src/events/ReactDOMEventListener.js#L294-L350\n *\n * `discrete` is an important distinction as updates within these events are applied immediately.\n * React however, is not able to infer the priority of custom event types due to how they are detected internally.\n * Because of this, it's possible for updates from custom events to be unexpectedly batched when\n * dispatched by another `discrete` event.\n *\n * In order to ensure that updates from custom events are applied predictably, we need to manually flush the batch.\n * This utility should be used when dispatching a custom event from within another `discrete` event, this utility\n * is not necessary when dispatching known event types, or if dispatching a custom type inside a non-discrete event.\n * For example:\n *\n * dispatching a known click 👎\n * target.dispatchEvent(new Event(‘click’))\n *\n * dispatching a custom type within a non-discrete event 👎\n * onScroll={(event) => event.target.dispatchEvent(new CustomEvent(‘customType’))}\n *\n * dispatching a custom type within a `discrete` event 👍\n * onPointerDown={(event) => dispatchDiscreteCustomEvent(event.target, new CustomEvent(‘customType’))}\n *\n * Note: though React classifies `focus`, `focusin` and `focusout` events as `discrete`, it's not recommended to use\n * this utility with them. This is because it's possible for those handlers to be called implicitly during render\n * e.g. when focus is within a component as it is unmounted, or when managing focus on mount.\n */\n\nfunction dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Primitive;\n\nexport {\n Primitive,\n //\n Root,\n //\n dispatchDiscreteCustomEvent,\n};\nexport type { PrimitivePropsWithRef };\n","import * as React from 'react';\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n\nexport { useCallbackRef };\n","import * as React from 'react';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\n/**\n * Listens for when the escape key is down\n */\nfunction useEscapeKeydown(\n onEscapeKeyDownProp?: (event: KeyboardEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener('keydown', handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener('keydown', handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\n\nexport { useEscapeKeydown };\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { Primitive, dispatchDiscreteCustomEvent } from '@radix-ui/react-primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\nimport { useEscapeKeydown } from '@radix-ui/react-use-escape-keydown';\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayer\n * -----------------------------------------------------------------------------------------------*/\n\nconst DISMISSABLE_LAYER_NAME = 'DismissableLayer';\nconst CONTEXT_UPDATE = 'dismissableLayer.update';\nconst POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside';\nconst FOCUS_OUTSIDE = 'dismissableLayer.focusOutside';\n\nlet originalBodyPointerEvents: string;\n\nconst DismissableLayerContext = React.createContext({\n layers: new Set<DismissableLayerElement>(),\n layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),\n branches: new Set<DismissableLayerBranchElement>(),\n});\n\ntype DismissableLayerElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DismissableLayerProps extends PrimitiveDivProps {\n /**\n * When `true`, hover/focus/click interactions will be disabled on elements outside\n * the `DismissableLayer`. Users will need to click twice on outside elements to\n * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n */\n disableOutsidePointerEvents?: boolean;\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /**\n * Event handler called when the a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void;\n /**\n * Event handler called when the focus moves outside of the `DismissableLayer`.\n * Can be prevented.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void;\n /**\n * Event handler called when an interaction happens outside the `DismissableLayer`.\n * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n * Can be prevented.\n */\n onInteractOutside?: (event: PointerDownOutsideEvent | FocusOutsideEvent) => void;\n /**\n * Handler called when the `DismissableLayer` should be dismissed\n */\n onDismiss?: () => void;\n}\n\nconst DismissableLayer = React.forwardRef<DismissableLayerElement, DismissableLayerProps>(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState<DismissableLayerElement | null>(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1); // prettier-ignore\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled!); // prettier-ignore\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target as HTMLElement;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n const focusOutside = useFocusOutside((event) => {\n const target = event.target as HTMLElement;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = 'none';\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (\n disableOutsidePointerEvents &&\n context.layersWithOutsidePointerEventsDisabled.size === 1\n ) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n\n /**\n * We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect\n * because a change to `disableOutsidePointerEvents` would remove this layer from the stack\n * and add it to the end again so the layering order wouldn't be _creation order_.\n * We only want them to be removed from context stacks when unmounted.\n */\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n\n return (\n <Primitive.div\n {...layerProps}\n ref={composedRefs}\n style={{\n pointerEvents: isBodyPointerEventsDisabled\n ? isPointerEventsEnabled\n ? 'auto'\n : 'none'\n : undefined,\n ...props.style,\n }}\n onFocusCapture={composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture)}\n onBlurCapture={composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture)}\n onPointerDownCapture={composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )}\n />\n );\n }\n);\n\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DismissableLayerBranch\n * -----------------------------------------------------------------------------------------------*/\n\nconst BRANCH_NAME = 'DismissableLayerBranch';\n\ntype DismissableLayerBranchElement = React.ComponentRef<typeof Primitive.div>;\ninterface DismissableLayerBranchProps extends PrimitiveDivProps {}\n\nconst DismissableLayerBranch = React.forwardRef<\n DismissableLayerBranchElement,\n DismissableLayerBranchProps\n>((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef<DismissableLayerBranchElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n\n return <Primitive.div {...props} ref={composedRefs} />;\n});\n\nDismissableLayerBranch.displayName = BRANCH_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PointerDownOutsideEvent = CustomEvent<{ originalEvent: PointerEvent }>;\ntype FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>;\n\n/**\n * Listens for `pointerdown` outside a react subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nfunction usePointerDownOutside(\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside) as EventListener;\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {});\n\n React.useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n\n function handleAndDispatchPointerDownOutsideEvent() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n }\n\n /**\n * On touch devices, we need to wait for a click event because browsers implement\n * a ~350ms delay between the time the user stops touching the display and when the\n * browser executres events. We need to ensure we don't reactivate pointer-events within\n * this timeframe otherwise the browser may execute events that should have been prevented.\n *\n * Additionally, this also lets us deal automatically with cancellations when a click event\n * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n *\n * This is why we also continuously remove the previous listener, because we cannot be\n * certain that it was raised, and therefore cleaned-up.\n */\n if (event.pointerType === 'touch') {\n ownerDocument.removeEventListener('click', handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent;\n ownerDocument.addEventListener('click', handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent();\n }\n } else {\n // We need to remove the event listener in case the outside click has been canceled.\n // See: https://github.com/radix-ui/primitives/issues/2171\n ownerDocument.removeEventListener('click', handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n /**\n * if this hook executes in a component that mounts via a `pointerdown` event, the event\n * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n * this by delaying the event listener registration on the document.\n * This is not React specific, but rather how the DOM works, ie:\n * ```\n * button.addEventListener('pointerdown', () => {\n * console.log('I will log');\n * document.addEventListener('pointerdown', () => {\n * console.log('I will also log');\n * })\n * });\n */\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener('pointerdown', handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener('pointerdown', handlePointerDown);\n ownerDocument.removeEventListener('click', handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => (isPointerInsideReactTreeRef.current = true),\n };\n}\n\n/**\n * Listens for when focus happens outside a react subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nfunction useFocusOutside(\n onFocusOutside?: (event: FocusOutsideEvent) => void,\n ownerDocument: Document = globalThis?.document\n) {\n const handleFocusOutside = useCallbackRef(onFocusOutside) as EventListener;\n const isFocusInsideReactTreeRef = React.useRef(false);\n\n React.useEffect(() => {\n const handleFocus = (event: FocusEvent) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false,\n });\n }\n };\n ownerDocument.addEventListener('focusin', handleFocus);\n return () => ownerDocument.removeEventListener('focusin', handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n\n return {\n onFocusCapture: () => (isFocusInsideReactTreeRef.current = true),\n onBlurCapture: () => (isFocusInsideReactTreeRef.current = false),\n };\n}\n\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\n\nfunction handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(\n name: string,\n handler: ((event: E) => void) | undefined,\n detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D> ? D : never),\n { discrete }: { discrete: boolean }\n) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler as EventListener, { once: true });\n\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\n\nconst Root = DismissableLayer;\nconst Branch = DismissableLayerBranch;\n\nexport {\n DismissableLayer,\n DismissableLayerBranch,\n //\n Root,\n Branch,\n};\nexport type { DismissableLayerProps };\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useCallbackRef } from '@radix-ui/react-use-callback-ref';\n\nconst AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount';\nconst AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount';\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\n\ntype FocusableTarget = HTMLElement | { focus(): void };\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope\n * -----------------------------------------------------------------------------------------------*/\n\nconst FOCUS_SCOPE_NAME = 'FocusScope';\n\ntype FocusScopeElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface FocusScopeProps extends PrimitiveDivProps {\n /**\n * When `true`, tabbing from last item will focus first tabbable\n * and shift+tab from first item will focus last tababble.\n * @defaultValue false\n */\n loop?: boolean;\n\n /**\n * When `true`, focus cannot escape the focus scope via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapped?: boolean;\n\n /**\n * Event handler called when auto-focusing on mount.\n * Can be prevented.\n */\n onMountAutoFocus?: (event: Event) => void;\n\n /**\n * Event handler called when auto-focusing on unmount.\n * Can be prevented.\n */\n onUnmountAutoFocus?: (event: Event) => void;\n}\n\nconst FocusScope = React.forwardRef<FocusScopeElement, FocusScopeProps>((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState<HTMLElement | null>(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef<HTMLElement | null>(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n },\n }).current;\n\n // Takes care of trapping focus if focus is moved outside programmatically for example\n React.useEffect(() => {\n if (trapped) {\n function handleFocusIn(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const target = event.target as HTMLElement | null;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n function handleFocusOut(event: FocusEvent) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget as HTMLElement | null;\n\n // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n //\n // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n // 2. In Google Chrome, when the focused element is removed from the DOM.\n //\n // We let the browser do its thing here because:\n //\n // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n // throws the CPU to 100%, so we avoid doing anything for this reason here too.\n if (relatedTarget === null) return;\n\n // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n // that is outside the container, we move focus to the last valid focused element inside.\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }\n\n // When the focused element gets removed from the DOM, browsers move focus\n // back to the document.body. In this case, we move focus to the container\n // to keep focus trapped correctly.\n function handleMutations(mutations: MutationRecord[]) {\n const focusedElement = document.activeElement as HTMLElement | null;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n }\n\n document.addEventListener('focusin', handleFocusIn);\n document.addEventListener('focusout', handleFocusOut);\n const mutationObserver = new MutationObserver(handleMutations);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n\n return () => {\n document.removeEventListener('focusin', handleFocusIn);\n document.removeEventListener('focusout', handleFocusOut);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement as HTMLElement | null;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n\n // We hit a react bug (fixed in v17) with focusing in unmount.\n // We need to delay the focus a little to get around it for now.\n // See: https://github.com/facebook/react/issues/17894\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n // we need to remove the listener after we `dispatchEvent`\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n\n // Takes care of looping focus (when tabbing whilst at the edges)\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n\n const isTabKey = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement as HTMLElement | null;\n\n if (isTabKey && focusedElement) {\n const container = event.currentTarget as HTMLElement;\n const [first, last] = getTabbableEdges(container);\n const hasTabbableElementsInside = first && last;\n\n // we can only wrap focus if we have tabbable edges\n if (!hasTabbableElementsInside) {\n if (focusedElement === container) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n\n return (\n <Primitive.div tabIndex={-1} {...scopeProps} ref={composedRefs} onKeyDown={handleKeyDown} />\n );\n});\n\nFocusScope.displayName = FOCUS_SCOPE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * Utils\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nfunction focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nfunction getTabbableEdges(container: HTMLElement) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last] as const;\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nfunction getTabbableCandidates(container: HTMLElement) {\n const nodes: HTMLElement[] = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node: any) => {\n const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden';\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n // runtime's understanding of tabbability, so this automatically accounts\n // for any kind of element that could be tabbed to.\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n },\n });\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement);\n // we do not take into account the order of nodes with positive `tabIndex` as it\n // hinders accessibility to have tab order different from visual order.\n return nodes;\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nfunction findVisible(elements: HTMLElement[], container: HTMLElement) {\n for (const element of elements) {\n // we stop checking if it's hidden at the `container` level (excluding)\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\n\nfunction isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n if (getComputedStyle(node).visibility === 'hidden') return true;\n while (node) {\n // we stop at `upTo` (excluding it)\n if (upTo !== undefined && node === upTo) return false;\n if (getComputedStyle(node).display === 'none') return true;\n node = node.parentElement as HTMLElement;\n }\n return false;\n}\n\nfunction isSelectableInput(element: any): element is FocusableTarget & { select: () => void } {\n return element instanceof HTMLInputElement && 'select' in element;\n}\n\nfunction focus(element?: FocusableTarget | null, { select = false } = {}) {\n // only focus if that element is focusable\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n element.focus({ preventScroll: true });\n // only select if its not the same element, it supports selection and we need to select\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * FocusScope stack\n * -----------------------------------------------------------------------------------------------*/\n\ntype FocusScopeAPI = { paused: boolean; pause(): void; resume(): void };\nconst focusScopesStack = createFocusScopesStack();\n\nfunction createFocusScopesStack() {\n /** A stack of focus scopes, with the active one at the top */\n let stack: FocusScopeAPI[] = [];\n\n return {\n add(focusScope: FocusScopeAPI) {\n // pause the currently active focus scope (at the top of the stack)\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n // remove in case it already exists (because we'll re-add it at the top of the stack)\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n\n remove(focusScope: FocusScopeAPI) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n },\n };\n}\n\nfunction arrayRemove<T>(array: T[], item: T) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\n\nfunction removeLinks(items: HTMLElement[]) {\n return items.filter((item) => item.tagName !== 'A');\n}\n\nconst Root = FocusScope;\n\nexport {\n FocusScope,\n //\n Root,\n};\nexport type { FocusScopeProps };\n","import * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\n\n/* -------------------------------------------------------------------------------------------------\n * Portal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'Portal';\n\ntype PortalElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface PortalProps extends PrimitiveDivProps {\n /**\n * An optional container where the portaled content should be appended.\n */\n container?: Element | DocumentFragment | null;\n}\n\nconst Portal = React.forwardRef<PortalElement, PortalProps>((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || (mounted && globalThis?.document?.body);\n return container\n ? ReactDOM.createPortal(<Primitive.div {...portalProps} ref={forwardedRef} />, container)\n : null;\n});\n\nPortal.displayName = PORTAL_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst Root = Portal;\n\nexport {\n Portal,\n //\n Root,\n};\nexport type { PortalProps };\n","import * as React from 'react';\n\ntype Machine<S> = { [k: string]: { [k: string]: S } };\ntype MachineState<T> = keyof T;\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>;\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any\n ? R\n : never;\n\nexport function useStateMachine<M>(\n initialState: MachineState<M>,\n machine: M & Machine<MachineState<M>>\n) {\n return React.useReducer((state: MachineState<M>, event: MachineEvent<M>): MachineState<M> => {\n const nextState = (machine[state] as any)[event];\n return nextState ?? state;\n }, initialState);\n}\n","import * as React from 'react';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { useStateMachine } from './use-state-machine';\n\ninterface PresenceProps {\n children: React.ReactElement | ((props: { present: boolean }) => React.ReactElement);\n present: boolean;\n}\n\nconst Presence: React.FC<PresenceProps> = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n\n const child = (\n typeof children === 'function'\n ? children({ present: presence.isPresent })\n : React.Children.only(children)\n ) as React.ReactElement<{ ref?: React.Ref<HTMLElement> }>;\n\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === 'function';\n return forceMount || presence.isPresent ? React.cloneElement(child, { ref }) : null;\n};\n\nPresence.displayName = 'Presence';\n\n/* -------------------------------------------------------------------------------------------------\n * usePresence\n * -----------------------------------------------------------------------------------------------*/\n\nfunction usePresence(present: boolean) {\n const [node, setNode] = React.useState<HTMLElement>();\n const stylesRef = React.useRef<CSSStyleDeclaration | null>(null);\n const prevPresentRef = React.useRef(present);\n const prevAnimationNameRef = React.useRef<string>('none');\n const initialState = present ? 'mounted' : 'unmounted';\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: 'unmounted',\n ANIMATION_OUT: 'unmountSuspended',\n },\n unmountSuspended: {\n MOUNT: 'mounted',\n ANIMATION_END: 'unmounted',\n },\n unmounted: {\n MOUNT: 'mounted',\n },\n });\n\n React.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === 'mounted' ? currentAnimationName : 'none';\n }, [state]);\n\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n\n if (present) {\n send('MOUNT');\n } else if (currentAnimationName === 'none' || styles?.display === 'none') {\n // If there is no exit animation or the element is hidden, animations won't run\n // so we unmount instantly\n send('UNMOUNT');\n } else {\n /**\n * When `present` changes to `false`, we check changes to animation-name to\n * determine whether an animation has started. We chose this approach (reading\n * computed styles) because there is no `animationrun` event and `animationstart`\n * fires after `animation-delay` has expired which would be too late.\n */\n const isAnimating = prevAnimationName !== currentAnimationName;\n\n if (wasPresent && isAnimating) {\n send('ANIMATION_OUT');\n } else {\n send('UNMOUNT');\n }\n }\n\n prevPresentRef.current = present;\n }\n }, [present, send]);\n\n useLayoutEffect(() => {\n if (node) {\n let timeoutId: number;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n /**\n * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n * make sure we only trigger ANIMATION_END for the currently active animation.\n */\n const handleAnimationEnd = (event: AnimationEvent) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n if (event.target === node && isCurrentAnimation) {\n // With React 18 concurrency this update is applied a frame after the\n // animation ends, creating a flash of visible content. By setting the\n // animation fill mode to \"forwards\", we force the node to keep the\n // styles of the last keyframe, removing the flash.\n //\n // Previously we flushed the update via ReactDom.flushSync, but with\n // exit animations this resulted in the node being removed from the\n // DOM before the synthetic animationEnd event was dispatched, meaning\n // user-provided event handlers would not be called.\n // https://github.com/radix-ui/primitives/pull/1849\n send('ANIMATION_END');\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = 'forwards';\n // Reset the style after the node had time to unmount (for cases\n // where the component chooses not to unmount). Doing this any\n // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n // still causes a flash.\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === 'forwards') {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event: AnimationEvent) => {\n if (event.target === node) {\n // if animation occurred, store its name as the previous animation.\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener('animationstart', handleAnimationStart);\n node.addEventListener('animationcancel', handleAnimationEnd);\n node.addEventListener('animationend', handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener('animationstart', handleAnimationStart);\n node.removeEventListener('animationcancel', handleAnimationEnd);\n node.removeEventListener('animationend', handleAnimationEnd);\n };\n } else {\n // Transition to the unmounted state if the node is removed prematurely.\n // We avoid doing so during cleanup as the node may change but still exist.\n send('ANIMATION_END');\n }\n }, [node, send]);\n\n return {\n isPresent: ['mounted', 'unmountSuspended'].includes(state),\n ref: React.useCallback((node: HTMLElement) => {\n stylesRef.current = node ? getComputedStyle(node) : null;\n setNode(node);\n }, []),\n };\n}\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getAnimationName(styles: CSSStyleDeclaration | null) {\n return styles?.animationName || 'none';\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement<{ ref?: React.Ref<unknown> }>) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n\n // Not DEV\n return element.props.ref || (element as any).ref;\n}\n\nconst Root = Presence;\n\nexport {\n Presence,\n //\n Root,\n};\nexport type { PresenceProps };\n","import * as React from 'react';\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0;\n\nfunction FocusGuards(props: any) {\n useFocusGuards();\n return props.children;\n}\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll('[data-radix-focus-guard]');\n document.body.insertAdjacentElement('afterbegin', edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement('beforeend', edgeGuards[1] ?? createFocusGuard());\n count++;\n\n return () => {\n if (count === 1) {\n document.querySelectorAll('[data-radix-focus-guard]').forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\n\nfunction createFocusGuard() {\n const element = document.createElement('span');\n element.setAttribute('data-radix-focus-guard', '');\n element.tabIndex = 0;\n element.style.outline = 'none';\n element.style.opacity = '0';\n element.style.position = 'fixed';\n element.style.pointerEvents = 'none';\n return element;\n}\n\nconst Root = FocusGuards;\n\nexport {\n FocusGuards,\n //\n Root,\n //\n useFocusGuards,\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContext, createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { createSlot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps<P> = P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentRef: React.RefObject<DialogContentElement | null>;\n contentId: string;\n titleId: string;\n descriptionId: string;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext<DialogContextValue>(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = (props: ScopedProps<DialogProps>) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const contentRef = React.useRef<DialogContentElement>(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME,\n });\n\n return (\n <DialogProvider\n scope={__scopeDialog}\n triggerRef={triggerRef}\n contentRef={contentRef}\n contentId={useId()}\n titleId={useId()}\n descriptionId={useId()}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n </DialogProvider>\n );\n};\n\nDialog.displayName = DIALOG_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(\n (props: ScopedProps<DialogTriggerProps>, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n <Primitive.button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n aria-controls={context.contentId}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n />\n );\n }\n);\n\nDialogTrigger.displayName = TRIGGER_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC<DialogPortalProps> = (props: ScopedProps<DialogPortalProps>) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n <PortalProvider scope={__scopeDialog} forceMount={forceMount}>\n {React.Children.map(children, (child) => (\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {child}\n </PortalPrimitive>\n </Presence>\n ))}\n </PortalProvider>\n );\n};\n\nDialogPortal.displayName = PORTAL_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = React.forwardRef<DialogOverlayElement, DialogOverlayProps>(\n (props: ScopedProps<DialogOverlayProps>, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n <Presence present={forceMount || context.open}>\n <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />\n </Presence>\n ) : null;\n }\n);\n\nDialogOverlay.displayName = OVERLAY_NAME;\n\ntype DialogOverlayImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst Slot = createSlot('DialogOverlay.RemoveScroll');\n\nconst DialogOverlayImpl = React.forwardRef<DialogOverlayImplElement, DialogOverlayImplProps>(\n (props: ScopedProps<DialogOverlayImplProps>, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n <RemoveScroll as={Slot} allowPinchZoom shards={[context.contentRef]}>\n <Primitive.div\n data-state={getState(context.open)}\n {...overlayProps}\n ref={forwardedRef}\n // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.\n style={{ pointerEvents: 'auto', ...overlayProps.style }}\n />\n </RemoveScroll>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(\n (props: ScopedProps<DialogContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n <Presence present={forceMount || context.open}>\n {context.modal ? (\n <DialogContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <DialogContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n }\n);\n\nDialogContent.displayName = CONTENT_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps\n extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}\n\nconst DialogContentModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <DialogContentImpl\n {...props}\n ref={composedRefs}\n // we make sure focus isn't trapped once `DialogContent` has been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef<DialogContentTypeElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n <DialogContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n }\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ComponentRef<typeof DismissableLayer>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ninterface DialogContentImplProps extends Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = React.forwardRef<DialogContentImplElement, DialogContentImplProps>(\n (props: ScopedProps<DialogContentImplProps>, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n <FocusScope\n asChild\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n role=\"dialog\"\n id={context.contentId}\n aria-describedby={context.descriptionId}\n aria-labelledby={context.titleId}\n data-state={getState(context.open)}\n {...contentProps}\n ref={composedRefs}\n onDismiss={() => context.onOpenChange(false)}\n />\n </FocusScope>\n {process.env.NODE_ENV !== 'production' && (\n <>\n <TitleWarning titleId={context.titleId} />\n <DescriptionWarning contentRef={contentRef} descriptionId={context.descriptionId} />\n </>\n )}\n </>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ComponentRef<typeof Primitive.h2>;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef<typeof Primitive.h2>;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(\n (props: ScopedProps<DialogTitleProps>, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return <Primitive.h2 id={context.titleId} {...titleProps} ref={forwardedRef} />;\n }\n);\n\nDialogTitle.displayName = TITLE_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ComponentRef<typeof Primitive.p>;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef<typeof Primitive.p>;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>(\n (props: ScopedProps<DialogDescriptionProps>, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return <Primitive.p id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />;\n }\n);\n\nDialogDescription.displayName = DESCRIPTION_NAME;\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ComponentRef<typeof Primitive.button>;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(\n (props: ScopedProps<DialogCloseProps>, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n <Primitive.button\n type=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => context.onOpenChange(false))}\n />\n );\n }\n);\n\nDialogClose.displayName = CLOSE_NAME;\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning';\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n});\n\ntype TitleWarningProps = { titleId?: string };\n\nconst TitleWarning: React.FC<TitleWarningProps> = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n\n return null;\n};\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning';\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<DialogContentElement | null>;\n descriptionId?: string;\n};\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute('aria-describedby');\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n\n return null;\n};\n\nconst Root = Dialog;\nconst Trigger = DialogTrigger;\nconst Portal = DialogPortal;\nconst Overlay = DialogOverlay;\nconst Content = DialogContent;\nconst Title = DialogTitle;\nconst Description = DialogDescription;\nconst Close = DialogClose;\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Root,\n Trigger,\n Portal,\n Overlay,\n Content,\n Title,\n Description,\n Close,\n //\n WarningProvider,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\n\nconst alertVariants = cva(\n\t'relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-card text-card-foreground',\n\t\t\t\tdestructive:\n\t\t\t\t\t'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nfunction Alert({\n\tclassName,\n\tvariant,\n\t...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert\"\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn(alertVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-title\"\n\t\t\tclassName={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"alert-description\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\n\nconst badgeVariants = cva(\n\t'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90',\n\t\t\t\tsecondary:\n\t\t\t\t\t'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n\t\t\t\tdestructive:\n\t\t\t\t\t'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n\t\t\t\toutline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nfunction Badge({\n\tclassName,\n\tvariant,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'span';\n\n\treturn (\n\t\t<Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n\t);\n}\n\nexport { Badge, badgeVariants };\n","\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\nconst buttonVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n\t\t\t\tdestructive:\n\t\t\t\t\t'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n\t\t\t\toutline:\n\t\t\t\t\t'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n\t\t\t\tsecondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n\t\t\t\tghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n\t\t\t\tlink: 'text-primary underline-offset-4 hover:underline',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-4 py-2 has-[>svg]:px-3',\n\t\t\t\tsm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',\n\t\t\t\tlg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n\t\t\t\ticon: 'size-9',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction Button({\n\tclassName,\n\tvariant,\n\tsize,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'button'> &\n\tVariantProps<typeof buttonVariants> & {\n\t\tasChild?: boolean;\n\t}) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"button\"\n\t\t\tclassName={cn(buttonVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Button, buttonVariants };\n","import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record<string | number, unknown> {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record<string, unknown>,\n optionsB: Record<string, unknown>\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n","import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys<Type>(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast<Type>(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex<Type>(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex<Type>(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys<Type extends object>(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record<string, unknown>,\n objectB: Record<string, unknown>\n): Record<string, unknown> {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = <MediaQueryList>node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n init: () => void\n destroy: () => void\n start: () => void\n stop: () => void\n update: () => void\n render: (alpha: number) => void\n}\n\nexport function Animations(\n ownerDocument: Document,\n ownerWindow: WindowType,\n update: () => void,\n render: (alpha: number) => void\n): AnimationsType {\n const documentVisibleHandler = EventStore()\n const fixedTimeStep = 1000 / 60\n\n let lastTimeStamp: number | null = null\n let accumulatedTime = 0\n let animationId = 0\n\n function init(): void {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset()\n })\n }\n\n function destroy(): void {\n stop()\n documentVisibleHandler.clear()\n }\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!animationId) return\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp\n update()\n update()\n }\n\n const timeElapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n accumulatedTime += timeElapsed\n\n while (accumulatedTime >= fixedTimeStep) {\n update()\n accumulatedTime -= fixedTimeStep\n }\n\n const alpha = accumulatedTime / fixedTimeStep\n render(alpha)\n\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n }\n\n function start(): void {\n if (animationId) return\n animationId = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(): void {\n ownerWindow.cancelAnimationFrame(animationId)\n lastTimeStamp = null\n accumulatedTime = 0\n animationId = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n accumulatedTime = 0\n }\n\n const self: AnimationsType = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n }\n return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n direction: (n: number) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n contentDirection: AxisDirectionOptionType\n): AxisType {\n const isRightToLeft = contentDirection === 'rtl'\n const isVertical = axis === 'y'\n const scroll = isVertical ? 'y' : 'x'\n const cross = isVertical ? 'x' : 'y'\n const sign = !isVertical && isRightToLeft ? -1 : 1\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { height, width } = nodeRect\n return isVertical ? height : width\n }\n\n function getStartEdge(): AxisEdgeType {\n if (isVertical) return 'top'\n return isRightToLeft ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (isVertical) return 'bottom'\n return isRightToLeft ? 'left' : 'right'\n }\n\n function direction(n: number): number {\n return n * sign\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n }\n return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationsType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis, direction } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(0.75)\n animation.start()\n target.add(direction(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n preventClick = false\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n destroy,\n pointerDown\n }\n return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n","export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n","export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n const observeNodes = [container].concat(slides)\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n if (destroyed) return\n\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(<HTMLElement>entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n emblaApi.reInit()\n eventHandler.emit('resize')\n\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach((node) => resizeObserver.observe(node))\n })\n }\n\n function destroy(): void {\n destroyed = true\n if (resizeObserver) resizeObserver.disconnect()\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n previousLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let scrollVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const displacement = target.get() - location.get()\n const isInstant = !scrollDuration\n let scrollDistance = 0\n\n if (isInstant) {\n scrollVelocity = 0\n previousLocation.set(target)\n location.set(target)\n\n scrollDistance = displacement\n } else {\n previousLocation.set(location)\n\n scrollVelocity += displacement / scrollDuration\n scrollVelocity *= scrollFriction\n rawLocation += scrollVelocity\n location.add(scrollVelocity)\n\n scrollDistance = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(scrollDistance)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return scrollVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n shouldConstrain: () => boolean\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n shouldConstrain,\n constrain,\n toggleActive\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType,\n pixelTolerance: number\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function usePixelTolerance(bound: number, snap: number): boolean {\n return deltaAbs(bound, snap) <= 1\n }\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const { min, max } = scrollBounds\n const snap = scrollBounds.constrain(snapAligned)\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return max\n if (isLast) return min\n if (usePixelTolerance(min, snap)) return min\n if (usePixelTolerance(max, snap)) return max\n return snap\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n location: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(location.get())\n if (direction === -1) return reachedMin(location.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollSnaps: number[],\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n if (scrollSnaps.length === 1) return [slideIndexes]\n if (doNotContain) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return target\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationsType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start()\n } else {\n animation.update()\n animation.render(1)\n animation.update()\n }\n }\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType,\n eventHandler: EventHandlerType,\n watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n const focusListenerOptions = { passive: true, capture: true }\n let lastTabPressTime = 0\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchFocus) return\n\n function defaultCallback(index: number): void {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n eventHandler.emit('slideFocusStart')\n root.scrollLeft = 0\n\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n\n eventHandler.emit('slideFocus')\n }\n\n eventStore.add(document, 'keydown', registerTabPress, false)\n\n slides.forEach((slide, slideIndex) => {\n eventStore.add(\n slide,\n 'focus',\n (evt: FocusEvent) => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex)\n }\n },\n focusListenerOptions\n )\n })\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let previousTarget: number | null = null\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n\n const newTarget = roundToTwoDecimals(axis.direction(target))\n if (newTarget === previousTarget) return\n\n containerStyle.transform = translate(newTarget)\n previousTarget = newTarget\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n location: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => (location.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(<HTMLElement>entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: <Type>(array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number,\n pixelTolerance: number\n): SlidesToScrollType {\n const { startEdge, endEdge, direction } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber<Type>(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize<Type>(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB, index) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction(startGap) : 0\n const gapB = !loop && isLast ? direction(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides<Type>(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n","import { Alignment } from './Alignment'\nimport {\n Animations,\n AnimationsType,\n AnimationsUpdateType,\n AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n animation: AnimationsType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n previousLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options\n\n // Measurements\n const pixelTolerance = 2\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const axis = Axis(scrollAxis, direction)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap,\n pixelTolerance\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll,\n pixelTolerance\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationsUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationsRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: { loop }\n },\n alpha\n ) => {\n const shouldSettle = scrollBody.settled()\n const withinBounds = !scrollBounds.shouldConstrain()\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n if (hasSettledAndIdle) animation.stop()\n\n const interpolatedLocation =\n location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n offsetLocation.set(interpolatedLocation)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n\n if (hasSettledAndIdle) eventHandler.emit('settle')\n if (!hasSettled) eventHandler.emit('scroll')\n }\n\n const animation = Animations(\n ownerDocument,\n ownerWindow,\n () => update(engine),\n (alpha: number) => render(engine, alpha)\n )\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const previousLocation = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n previousLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollBody,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n containSnaps,\n containScroll,\n scrollSnaps,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore,\n eventHandler,\n watchFocus\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(\n axis,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n offsetLocation,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n previousLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n }\n\n return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n slideFocusStart: 'slideFocusStart'\n slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n let listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n function clear(): void {\n listeners = {}\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on,\n clear\n }\n return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType<Type extends LooseOptionsType> = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit<Partial<CreateOptionsType<Type>>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf<HTMLElement> | null\n containScroll: ScrollContainOptionType\n direction: AxisDirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial<OptionsType>\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial<CreateOptionsType<LooseOptionsType>>\n\nexport type OptionsHandlerType = {\n mergeOptions: <TypeA extends OptionsType, TypeB extends OptionsType>(\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: <Type extends OptionsType>(options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions<TypeA extends OptionsType, TypeB extends OptionsType>(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return <TypeA>objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia<Type extends OptionsType>(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = <WindowType>ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const eventHandler = EventHandler()\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = <HTMLElement>(customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = <HTMLElement[]>[].slice.call(customSlides || container.children)\n }\n\n function createEngine(options: OptionsType): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.animation.init()\n engine.slidesInView.init()\n engine.slideFocus.init(self)\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n engine.animation.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n eventHandler.clear()\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody\n .useBaseFriction()\n .useDuration(jump === true ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.offsetLocation.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\ndeclare namespace EmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n","import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaViewportRefType = <ViewportElement extends HTMLElement>(\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState<EmblaCarouselType>()\n const [viewport, setViewport] = useState<HTMLElement>()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n return [<EmblaViewportRefType>setViewport, emblaApi]\n}\n\ndeclare namespace useEmblaCarousel {\n let globalOptions: EmblaOptionsType | undefined\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n","'use client';\n\nimport * as React from 'react';\nimport useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';\nimport { ArrowLeft, ArrowRight } from 'lucide-react';\n\nimport { cn } from '@/packages/shadcns';\nimport { Button } from '@/packages/shadcns';\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n\topts?: CarouselOptions;\n\tplugins?: CarouselPlugin;\n\torientation?: 'horizontal' | 'vertical';\n\tsetApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n\tcarouselRef: ReturnType<typeof useEmblaCarousel>[0];\n\tapi: ReturnType<typeof useEmblaCarousel>[1];\n\tscrollPrev: () => void;\n\tscrollNext: () => void;\n\tcanScrollPrev: boolean;\n\tcanScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n\tconst context = React.useContext(CarouselContext);\n\n\tif (!context) {\n\t\tthrow new Error('useCarousel must be used within a <Carousel />');\n\t}\n\n\treturn context;\n}\n\nfunction Carousel({\n\torientation = 'horizontal',\n\topts,\n\tsetApi,\n\tplugins,\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & CarouselProps) {\n\tconst [carouselRef, api] = useEmblaCarousel(\n\t\t{\n\t\t\t...opts,\n\t\t\taxis: orientation === 'horizontal' ? 'x' : 'y',\n\t\t},\n\t\tplugins,\n\t);\n\tconst [canScrollPrev, setCanScrollPrev] = React.useState(false);\n\tconst [canScrollNext, setCanScrollNext] = React.useState(false);\n\n\tconst onSelect = React.useCallback((api: CarouselApi) => {\n\t\tif (!api) return;\n\t\tsetCanScrollPrev(api.canScrollPrev());\n\t\tsetCanScrollNext(api.canScrollNext());\n\t}, []);\n\n\tconst scrollPrev = React.useCallback(() => {\n\t\tapi?.scrollPrev();\n\t}, [api]);\n\n\tconst scrollNext = React.useCallback(() => {\n\t\tapi?.scrollNext();\n\t}, [api]);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (event.key === 'ArrowLeft') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollPrev();\n\t\t\t} else if (event.key === 'ArrowRight') {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tscrollNext();\n\t\t\t}\n\t\t},\n\t\t[scrollPrev, scrollNext],\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (!api || !setApi) return;\n\t\tsetApi(api);\n\t}, [api, setApi]);\n\n\tReact.useEffect(() => {\n\t\tif (!api) return;\n\t\tonSelect(api);\n\t\tapi.on('reInit', onSelect);\n\t\tapi.on('select', onSelect);\n\n\t\treturn () => {\n\t\t\tapi?.off('select', onSelect);\n\t\t};\n\t}, [api, onSelect]);\n\n\treturn (\n\t\t<CarouselContext.Provider\n\t\t\tvalue={{\n\t\t\t\tcarouselRef,\n\t\t\t\tapi: api,\n\t\t\t\topts,\n\t\t\t\torientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),\n\t\t\t\tscrollPrev,\n\t\t\t\tscrollNext,\n\t\t\t\tcanScrollPrev,\n\t\t\t\tcanScrollNext,\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tonKeyDownCapture={handleKeyDown}\n\t\t\t\tclassName={cn('relative', className)}\n\t\t\t\trole=\"region\"\n\t\t\t\taria-roledescription=\"carousel\"\n\t\t\t\tdata-slot=\"carousel\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CarouselContext.Provider>\n\t);\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst { carouselRef, orientation } = useCarousel();\n\n\treturn (\n\t\t<div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex',\n\t\t\t\t\torientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst { orientation } = useCarousel();\n\n\treturn (\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\taria-roledescription=\"slide\"\n\t\t\tdata-slot=\"carousel-item\"\n\t\t\tclassName={cn(\n\t\t\t\t'min-w-0 shrink-0 grow-0 basis-full',\n\t\t\t\torientation === 'horizontal' ? 'pl-4' : 'pt-4',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction CarouselPrevious({\n\tclassName,\n\tvariant = 'outline',\n\tsize = 'icon',\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-previous\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t'absolute size-8 rounded-full',\n\t\t\t\torientation === 'horizontal'\n\t\t\t\t\t? 'top-1/2 -left-12 -translate-y-1/2'\n\t\t\t\t\t: '-top-12 left-1/2 -translate-x-1/2 rotate-90',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollPrev}\n\t\t\tonClick={scrollPrev}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowLeft />\n\t\t\t<span className=\"sr-only\">Previous slide</span>\n\t\t</Button>\n\t);\n}\n\nfunction CarouselNext({\n\tclassName,\n\tvariant = 'outline',\n\tsize = 'icon',\n\t...props\n}: React.ComponentProps<typeof Button>) {\n\tconst { orientation, scrollNext, canScrollNext } = useCarousel();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-slot=\"carousel-next\"\n\t\t\tvariant={variant}\n\t\t\tsize={size}\n\t\t\tclassName={cn(\n\t\t\t\t'absolute size-8 rounded-full',\n\t\t\t\torientation === 'horizontal'\n\t\t\t\t\t? 'top-1/2 -right-12 -translate-y-1/2'\n\t\t\t\t\t: '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tdisabled={!canScrollNext}\n\t\t\tonClick={scrollNext}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ArrowRight />\n\t\t\t<span className=\"sr-only\">Next slide</span>\n\t\t</Button>\n\t);\n}\n\nexport {\n\ttype CarouselApi,\n\tCarousel,\n\tCarouselContent,\n\tCarouselItem,\n\tCarouselPrevious,\n\tCarouselNext,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as RechartsPrimitive from 'recharts';\n\nimport { cn } from '@/packages/shadcns';\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: '', dark: '.dark' } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: React.ReactNode;\n\t\ticon?: React.ComponentType;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\ntype ChartContextProps = {\n\tconfig: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n\tconst context = React.useContext(ChartContext);\n\n\tif (!context) {\n\t\tthrow new Error('useChart must be used within a <ChartContainer />');\n\t}\n\n\treturn context;\n}\n\nfunction ChartContainer({\n\tid,\n\tclassName,\n\tchildren,\n\tconfig,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tconfig: ChartConfig;\n\tchildren: React.ComponentProps<typeof RechartsPrimitive.ResponsiveContainer>['children'];\n}) {\n\tconst uniqueId = React.useId();\n\tconst chartId = `chart-${id || uniqueId.replace(/:/g, '')}`;\n\n\treturn (\n\t\t<ChartContext.Provider value={{ config }}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"chart\"\n\t\t\t\tdata-chart={chartId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ChartStyle id={chartId} config={config} />\n\t\t\t\t<RechartsPrimitive.ResponsiveContainer>\n\t\t\t\t\t{children}\n\t\t\t\t</RechartsPrimitive.ResponsiveContainer>\n\t\t\t</div>\n\t\t</ChartContext.Provider>\n\t);\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n\tconst colorConfig = Object.entries(config).filter(([, config]) => config.theme || config.color);\n\n\tif (!colorConfig.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<style\n\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t__html: Object.entries(THEMES)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n\t\t\t\t\t\t\t\t.map(([key, itemConfig]) => {\n\t\t\t\t\t\t\t\t\tconst color =\n\t\t\t\t\t\t\t\t\t\titemConfig.theme?.[theme as keyof typeof itemConfig.theme] || itemConfig.color;\n\t\t\t\t\t\t\t\t\treturn color ? ` --color-${key}: ${color};` : null;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('\\n')}\n}\n`,\n\t\t\t\t\t)\n\t\t\t\t\t.join('\\n'),\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n\tactive,\n\tpayload,\n\tclassName,\n\tindicator = 'dot',\n\thideLabel = false,\n\thideIndicator = false,\n\tlabel,\n\tlabelFormatter,\n\tlabelClassName,\n\tformatter,\n\tcolor,\n\tnameKey,\n\tlabelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n\tReact.ComponentProps<'div'> & {\n\t\thideLabel?: boolean;\n\t\thideIndicator?: boolean;\n\t\tindicator?: 'line' | 'dot' | 'dashed';\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tconst tooltipLabel = React.useMemo(() => {\n\t\tif (hideLabel || !payload?.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst [item] = payload;\n\t\tconst key = `${labelKey || item?.dataKey || item?.name || 'value'}`;\n\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\tconst value =\n\t\t\t!labelKey && typeof label === 'string'\n\t\t\t\t? config[label as keyof typeof config]?.label || label\n\t\t\t\t: itemConfig?.label;\n\n\t\tif (labelFormatter) {\n\t\t\treturn (\n\t\t\t\t<div className={cn('font-medium', labelClassName)}>\n\t\t\t\t\t{labelFormatter(value, payload)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn <div className={cn('font-medium', labelClassName)}>{value}</div>;\n\t}, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);\n\n\tif (!active || !payload?.length) {\n\t\treturn null;\n\t}\n\n\tconst nestLabel = payload.length === 1 && indicator !== 'dot';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!nestLabel ? tooltipLabel : null}\n\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t{payload.map((item, index) => {\n\t\t\t\t\tconst key = `${nameKey || item.name || item.dataKey || 'value'}`;\n\t\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\t\t\t\t\tconst indicatorColor = color || item.payload.fill || item.color;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={item.dataKey}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5',\n\t\t\t\t\t\t\t\tindicator === 'dot' && 'items-center',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{formatter && item?.value !== undefined && item.name ? (\n\t\t\t\t\t\t\t\tformatter(item.value, item.name, item, index, item.payload)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{itemConfig?.icon ? (\n\t\t\t\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t!hideIndicator && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)',\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'h-2.5 w-2.5': indicator === 'dot',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'w-1': indicator === 'line',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'w-0 border-[1.5px] border-dashed bg-transparent':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tindicator === 'dashed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'my-0.5':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tnestLabel && indicator === 'dashed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-bg': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'--color-border': indicatorColor,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'flex flex-1 justify-between leading-none',\n\t\t\t\t\t\t\t\t\t\t\tnestLabel ? 'items-end' : 'items-center',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<div className=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t\t\t\t{nestLabel ? tooltipLabel : null}\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{item.value && (\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n\tclassName,\n\thideIcon = false,\n\tpayload,\n\tverticalAlign = 'bottom',\n\tnameKey,\n}: React.ComponentProps<'div'> &\n\tPick<RechartsPrimitive.LegendProps, 'payload' | 'verticalAlign'> & {\n\t\thideIcon?: boolean;\n\t\tnameKey?: string;\n\t}) {\n\tconst { config } = useChart();\n\n\tif (!payload?.length) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center justify-center gap-4',\n\t\t\t\tverticalAlign === 'top' ? 'pb-3' : 'pt-3',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{payload.map((item) => {\n\t\t\t\tconst key = `${nameKey || item.dataKey || 'value'}`;\n\t\t\t\tconst itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{itemConfig?.icon && !hideIcon ? (\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"h-2 w-2 shrink-0 rounded-[2px]\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: item.color,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{itemConfig?.label}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(config: ChartConfig, payload: unknown, key: string) {\n\tif (typeof payload !== 'object' || payload === null) {\n\t\treturn undefined;\n\t}\n\n\tconst payloadPayload =\n\t\t'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (key in payload && typeof payload[key as keyof typeof payload] === 'string') {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === 'string'\n\t) {\n\t\tconfigLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\nexport {\n\tChartContainer,\n\tChartTooltip,\n\tChartTooltipContent,\n\tChartLegend,\n\tChartLegendContent,\n\tChartStyle,\n};\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\nimport React__default, { useLayoutEffect, useEffect, useMemo } from 'react';\n\nconst DrawerContext = React__default.createContext({\n drawerRef: {\n current: null\n },\n overlayRef: {\n current: null\n },\n onPress: ()=>{},\n onRelease: ()=>{},\n onDrag: ()=>{},\n onNestedDrag: ()=>{},\n onNestedOpenChange: ()=>{},\n onNestedRelease: ()=>{},\n openProp: undefined,\n dismissible: false,\n isOpen: false,\n isDragging: false,\n keyboardIsOpen: {\n current: false\n },\n snapPointsOffset: null,\n snapPoints: null,\n handleOnly: false,\n modal: false,\n shouldFade: false,\n activeSnapPoint: null,\n onOpenChange: ()=>{},\n setActiveSnapPoint: ()=>{},\n closeDrawer: ()=>{},\n direction: 'bottom',\n shouldAnimate: {\n current: true\n },\n shouldScaleBackground: false,\n setBackgroundColorOnScale: true,\n noBodyStyles: false,\n container: null,\n autoFocus: false\n});\nconst useDrawerContext = ()=>{\n const context = React__default.useContext(DrawerContext);\n if (!context) {\n throw new Error('useDrawerContext must be used within a Drawer.Root');\n }\n return context;\n};\n\n__insertCSS(\"[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\\n[data-state=closed]\\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}\");\n\nfunction isMobileFirefox() {\n const userAgent = navigator.userAgent;\n return typeof window !== 'undefined' && (/Firefox/.test(userAgent) && /Mobile/.test(userAgent) || // Android Firefox\n /FxiOS/.test(userAgent) // iOS Firefox\n );\n}\nfunction isMac() {\n return testPlatform(/^Mac/);\n}\nfunction isIPhone() {\n return testPlatform(/^iPhone/);\n}\nfunction isSafari() {\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n}\nfunction isIPad() {\n return testPlatform(/^iPad/) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n isMac() && navigator.maxTouchPoints > 1;\n}\nfunction isIOS() {\n return isIPhone() || isIPad();\n}\nfunction testPlatform(re) {\n return typeof window !== 'undefined' && window.navigator != null ? re.test(window.navigator.platform) : undefined;\n}\n\n// This code comes from https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/overlays/src/usePreventScroll.ts\nconst KEYBOARD_BUFFER = 24;\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\nfunction chain$1(...callbacks) {\n return (...args)=>{\n for (let callback of callbacks){\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n// @ts-ignore\nconst visualViewport = typeof document !== 'undefined' && window.visualViewport;\nfunction isScrollable(node) {\n let style = window.getComputedStyle(node);\n return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);\n}\nfunction getScrollParent(node) {\n if (isScrollable(node)) {\n node = node.parentElement;\n }\n while(node && !isScrollable(node)){\n node = node.parentElement;\n }\n return node || document.scrollingElement || document.documentElement;\n}\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n// The number of active usePreventScroll calls. Used to determine whether to revert back to the original page style/scroll position\nlet preventScrollCount = 0;\nlet restore;\n/**\n * Prevents scrolling on the document body on mount, and\n * restores it on unmount. Also ensures that content does not\n * shift due to the scrollbars disappearing.\n */ function usePreventScroll(options = {}) {\n let { isDisabled } = options;\n useIsomorphicLayoutEffect(()=>{\n if (isDisabled) {\n return;\n }\n preventScrollCount++;\n if (preventScrollCount === 1) {\n if (isIOS()) {\n restore = preventScrollMobileSafari();\n }\n }\n return ()=>{\n preventScrollCount--;\n if (preventScrollCount === 0) {\n restore == null ? void 0 : restore();\n }\n };\n }, [\n isDisabled\n ]);\n}\n// Mobile Safari is a whole different beast. Even with overflow: hidden,\n// it still scrolls the page in many situations:\n//\n// 1. When the bottom toolbar and address bar are collapsed, page scrolling is always allowed.\n// 2. When the keyboard is visible, the viewport does not resize. Instead, the keyboard covers part of\n// it, so it becomes scrollable.\n// 3. When tapping on an input, the page always scrolls so that the input is centered in the visual viewport.\n// This may cause even fixed position elements to scroll off the screen.\n// 4. When using the next/previous buttons in the keyboard to navigate between inputs, the whole page always\n// scrolls, even if the input is inside a nested scrollable element that could be scrolled instead.\n//\n// In order to work around these cases, and prevent scrolling without jankiness, we do a few things:\n//\n// 1. Prevent default on `touchmove` events that are not in a scrollable element. This prevents touch scrolling\n// on the window.\n// 2. Prevent default on `touchmove` events inside a scrollable element when the scroll position is at the\n// top or bottom. This avoids the whole page scrolling instead, but does prevent overscrolling.\n// 3. Prevent default on `touchend` events on input elements and handle focusing the element ourselves.\n// 4. When focusing an input, apply a transform to trick Safari into thinking the input is at the top\n// of the page, which prevents it from scrolling the page. After the input is focused, scroll the element\n// into view ourselves, without scrolling the whole page.\n// 5. Offset the body by the scroll position using a negative margin and scroll to the top. This should appear the\n// same visually, but makes the actual scroll position always zero. This is required to make all of the\n// above work or Safari will still try to scroll the page when focusing an input.\n// 6. As a last resort, handle window scroll events, and scroll back to the top. This can happen when attempting\n// to navigate to an input with the next/previous buttons that's outside a modal.\nfunction preventScrollMobileSafari() {\n let scrollable;\n let lastY = 0;\n let onTouchStart = (e)=>{\n // Store the nearest scrollable parent element from the element that the user touched.\n scrollable = getScrollParent(e.target);\n if (scrollable === document.documentElement && scrollable === document.body) {\n return;\n }\n lastY = e.changedTouches[0].pageY;\n };\n let onTouchMove = (e)=>{\n // Prevent scrolling the window.\n if (!scrollable || scrollable === document.documentElement || scrollable === document.body) {\n e.preventDefault();\n return;\n }\n // Prevent scrolling up when at the top and scrolling down when at the bottom\n // of a nested scrollable area, otherwise mobile Safari will start scrolling\n // the window instead. Unfortunately, this disables bounce scrolling when at\n // the top but it's the best we can do.\n let y = e.changedTouches[0].pageY;\n let scrollTop = scrollable.scrollTop;\n let bottom = scrollable.scrollHeight - scrollable.clientHeight;\n if (bottom === 0) {\n return;\n }\n if (scrollTop <= 0 && y > lastY || scrollTop >= bottom && y < lastY) {\n e.preventDefault();\n }\n lastY = y;\n };\n let onTouchEnd = (e)=>{\n let target = e.target;\n // Apply this change if we're not already focused on the target element\n if (isInput(target) && target !== document.activeElement) {\n e.preventDefault();\n // Apply a transform to trick Safari into thinking the input is at the top of the page\n // so it doesn't try to scroll it into view. When tapping on an input, this needs to\n // be done before the \"focus\" event, so we have to focus the element ourselves.\n target.style.transform = 'translateY(-2000px)';\n target.focus();\n requestAnimationFrame(()=>{\n target.style.transform = '';\n });\n }\n };\n let onFocus = (e)=>{\n let target = e.target;\n if (isInput(target)) {\n // Transform also needs to be applied in the focus event in cases where focus moves\n // other than tapping on an input directly, e.g. the next/previous buttons in the\n // software keyboard. In these cases, it seems applying the transform in the focus event\n // is good enough, whereas when tapping an input, it must be done before the focus event. 🤷‍♂️\n target.style.transform = 'translateY(-2000px)';\n requestAnimationFrame(()=>{\n target.style.transform = '';\n // This will have prevented the browser from scrolling the focused element into view,\n // so we need to do this ourselves in a way that doesn't cause the whole page to scroll.\n if (visualViewport) {\n if (visualViewport.height < window.innerHeight) {\n // If the keyboard is already visible, do this after one additional frame\n // to wait for the transform to be removed.\n requestAnimationFrame(()=>{\n scrollIntoView(target);\n });\n } else {\n // Otherwise, wait for the visual viewport to resize before scrolling so we can\n // measure the correct position to scroll to.\n visualViewport.addEventListener('resize', ()=>scrollIntoView(target), {\n once: true\n });\n }\n }\n });\n }\n };\n let onWindowScroll = ()=>{\n // Last resort. If the window scrolled, scroll it back to the top.\n // It should always be at the top because the body will have a negative margin (see below).\n window.scrollTo(0, 0);\n };\n // Record the original scroll position so we can restore it.\n // Then apply a negative margin to the body to offset it by the scroll position. This will\n // enable us to scroll the window to the top, which is required for the rest of this to work.\n let scrollX = window.pageXOffset;\n let scrollY = window.pageYOffset;\n let restoreStyles = chain$1(setStyle(document.documentElement, 'paddingRight', `${window.innerWidth - document.documentElement.clientWidth}px`));\n // Scroll to the top. The negative margin on the body will make this appear the same.\n window.scrollTo(0, 0);\n let removeEvents = chain$1(addEvent(document, 'touchstart', onTouchStart, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchmove', onTouchMove, {\n passive: false,\n capture: true\n }), addEvent(document, 'touchend', onTouchEnd, {\n passive: false,\n capture: true\n }), addEvent(document, 'focus', onFocus, true), addEvent(window, 'scroll', onWindowScroll));\n return ()=>{\n // Restore styles and scroll the page back to where it was.\n restoreStyles();\n removeEvents();\n window.scrollTo(scrollX, scrollY);\n };\n}\n// Sets a CSS property on an element, and returns a function to revert it to the previous value.\nfunction setStyle(element, style, value) {\n // https://github.com/microsoft/TypeScript/issues/17827#issuecomment-391663310\n // @ts-ignore\n let cur = element.style[style];\n // @ts-ignore\n element.style[style] = value;\n return ()=>{\n // @ts-ignore\n element.style[style] = cur;\n };\n}\n// Adds an event listener to an element, and returns a function to remove it.\nfunction addEvent(target, event, handler, options) {\n // @ts-ignore\n target.addEventListener(event, handler, options);\n return ()=>{\n // @ts-ignore\n target.removeEventListener(event, handler, options);\n };\n}\nfunction scrollIntoView(target) {\n let root = document.scrollingElement || document.documentElement;\n while(target && target !== root){\n // Find the parent scrollable element and adjust the scroll position if the target is not already in view.\n let scrollable = getScrollParent(target);\n if (scrollable !== document.documentElement && scrollable !== document.body && scrollable !== target) {\n let scrollableTop = scrollable.getBoundingClientRect().top;\n let targetTop = target.getBoundingClientRect().top;\n let targetBottom = target.getBoundingClientRect().bottom;\n // Buffer is needed for some edge cases\n const keyboardHeight = scrollable.getBoundingClientRect().bottom + KEYBOARD_BUFFER;\n if (targetBottom > keyboardHeight) {\n scrollable.scrollTop += targetTop - scrollableTop;\n }\n }\n // @ts-ignore\n target = scrollable.parentElement;\n }\n}\nfunction isInput(target) {\n return target instanceof HTMLInputElement && !nonTextInputTypes.has(target.type) || target instanceof HTMLTextAreaElement || target instanceof HTMLElement && target.isContentEditable;\n}\n\n// This code comes from https://github.com/radix-ui/primitives/tree/main/packages/react/compose-refs\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */ function setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */ function composeRefs(...refs) {\n return (node)=>refs.forEach((ref)=>setRef(ref, node));\n}\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */ function useComposedRefs(...refs) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nconst cache = new WeakMap();\nfunction set(el, styles, ignoreCache = false) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = {};\n Object.entries(styles).forEach(([key, value])=>{\n if (key.startsWith('--')) {\n el.style.setProperty(key, value);\n return;\n }\n originalStyles[key] = el.style[key];\n el.style[key] = value;\n });\n if (ignoreCache) return;\n cache.set(el, originalStyles);\n}\nfunction reset(el, prop) {\n if (!el || !(el instanceof HTMLElement)) return;\n let originalStyles = cache.get(el);\n if (!originalStyles) {\n return;\n }\n {\n el.style[prop] = originalStyles[prop];\n }\n}\nconst isVertical = (direction)=>{\n switch(direction){\n case 'top':\n case 'bottom':\n return true;\n case 'left':\n case 'right':\n return false;\n default:\n return direction;\n }\n};\nfunction getTranslate(element, direction) {\n if (!element) {\n return null;\n }\n const style = window.getComputedStyle(element);\n const transform = // @ts-ignore\n style.transform || style.webkitTransform || style.mozTransform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) {\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix3d\n return parseFloat(mat[1].split(', ')[isVertical(direction) ? 13 : 12]);\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[isVertical(direction) ? 5 : 4]) : null;\n}\nfunction dampenValue(v) {\n return 8 * (Math.log(v + 1) - 2);\n}\nfunction assignStyle(element, style) {\n if (!element) return ()=>{};\n const prevStyle = element.style.cssText;\n Object.assign(element.style, style);\n return ()=>{\n element.style.cssText = prevStyle;\n };\n}\n/**\n * Receives functions as arguments and returns a new function that calls all.\n */ function chain(...fns) {\n return (...args)=>{\n for (const fn of fns){\n if (typeof fn === 'function') {\n // @ts-ignore\n fn(...args);\n }\n }\n };\n}\n\nconst TRANSITIONS = {\n DURATION: 0.5,\n EASE: [\n 0.32,\n 0.72,\n 0,\n 1\n ]\n};\nconst VELOCITY_THRESHOLD = 0.4;\nconst CLOSE_THRESHOLD = 0.25;\nconst SCROLL_LOCK_TIMEOUT = 100;\nconst BORDER_RADIUS = 8;\nconst NESTED_DISPLACEMENT = 16;\nconst WINDOW_TOP_OFFSET = 26;\nconst DRAG_CLASS = 'vaul-dragging';\n\n// This code comes from https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\nfunction useCallbackRef(callback) {\n const callbackRef = React__default.useRef(callback);\n React__default.useEffect(()=>{\n callbackRef.current = callback;\n });\n // https://github.com/facebook/react/issues/19240\n return React__default.useMemo(()=>(...args)=>callbackRef.current == null ? void 0 : callbackRef.current.call(callbackRef, ...args), []);\n}\nfunction useUncontrolledState({ defaultProp, onChange }) {\n const uncontrolledState = React__default.useState(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React__default.useRef(value);\n const handleChange = useCallbackRef(onChange);\n React__default.useEffect(()=>{\n if (prevValueRef.current !== value) {\n handleChange(value);\n prevValueRef.current = value;\n }\n }, [\n value,\n prevValueRef,\n handleChange\n ]);\n return uncontrolledState;\n}\nfunction useControllableState({ prop, defaultProp, onChange = ()=>{} }) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n const setValue = React__default.useCallback((nextValue)=>{\n if (isControlled) {\n const setter = nextValue;\n const value = typeof nextValue === 'function' ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value);\n } else {\n setUncontrolledProp(nextValue);\n }\n }, [\n isControlled,\n prop,\n setUncontrolledProp,\n handleChange\n ]);\n return [\n value,\n setValue\n ];\n}\n\nfunction useSnapPoints({ activeSnapPointProp, setActiveSnapPointProp, snapPoints, drawerRef, overlayRef, fadeFromIndex, onSnapPointChange, direction = 'bottom', container, snapToSequentialPoint }) {\n const [activeSnapPoint, setActiveSnapPoint] = useControllableState({\n prop: activeSnapPointProp,\n defaultProp: snapPoints == null ? void 0 : snapPoints[0],\n onChange: setActiveSnapPointProp\n });\n const [windowDimensions, setWindowDimensions] = React__default.useState(typeof window !== 'undefined' ? {\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n } : undefined);\n React__default.useEffect(()=>{\n function onResize() {\n setWindowDimensions({\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight\n });\n }\n window.addEventListener('resize', onResize);\n return ()=>window.removeEventListener('resize', onResize);\n }, []);\n const isLastSnapPoint = React__default.useMemo(()=>activeSnapPoint === (snapPoints == null ? void 0 : snapPoints[snapPoints.length - 1]) || null, [\n snapPoints,\n activeSnapPoint\n ]);\n const activeSnapPointIndex = React__default.useMemo(()=>{\n var _snapPoints_findIndex;\n return (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : null;\n }, [\n snapPoints,\n activeSnapPoint\n ]);\n const shouldFade = snapPoints && snapPoints.length > 0 && (fadeFromIndex || fadeFromIndex === 0) && !Number.isNaN(fadeFromIndex) && snapPoints[fadeFromIndex] === activeSnapPoint || !snapPoints;\n const snapPointsOffset = React__default.useMemo(()=>{\n const containerSize = container ? {\n width: container.getBoundingClientRect().width,\n height: container.getBoundingClientRect().height\n } : typeof window !== 'undefined' ? {\n width: window.innerWidth,\n height: window.innerHeight\n } : {\n width: 0,\n height: 0\n };\n var _snapPoints_map;\n return (_snapPoints_map = snapPoints == null ? void 0 : snapPoints.map((snapPoint)=>{\n const isPx = typeof snapPoint === 'string';\n let snapPointAsNumber = 0;\n if (isPx) {\n snapPointAsNumber = parseInt(snapPoint, 10);\n }\n if (isVertical(direction)) {\n const height = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.height : 0;\n if (windowDimensions) {\n return direction === 'bottom' ? containerSize.height - height : -containerSize.height + height;\n }\n return height;\n }\n const width = isPx ? snapPointAsNumber : windowDimensions ? snapPoint * containerSize.width : 0;\n if (windowDimensions) {\n return direction === 'right' ? containerSize.width - width : -containerSize.width + width;\n }\n return width;\n })) != null ? _snapPoints_map : [];\n }, [\n snapPoints,\n windowDimensions,\n container\n ]);\n const activeSnapPointOffset = React__default.useMemo(()=>activeSnapPointIndex !== null ? snapPointsOffset == null ? void 0 : snapPointsOffset[activeSnapPointIndex] : null, [\n snapPointsOffset,\n activeSnapPointIndex\n ]);\n const snapToPoint = React__default.useCallback((dimension)=>{\n var _snapPointsOffset_findIndex;\n const newSnapPointIndex = (_snapPointsOffset_findIndex = snapPointsOffset == null ? void 0 : snapPointsOffset.findIndex((snapPointDim)=>snapPointDim === dimension)) != null ? _snapPointsOffset_findIndex : null;\n onSnapPointChange(newSnapPointIndex);\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `translate3d(0, ${dimension}px, 0)` : `translate3d(${dimension}px, 0, 0)`\n });\n if (snapPointsOffset && newSnapPointIndex !== snapPointsOffset.length - 1 && fadeFromIndex !== undefined && newSnapPointIndex !== fadeFromIndex && newSnapPointIndex < fadeFromIndex) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '0'\n });\n } else {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n }\n setActiveSnapPoint(snapPoints == null ? void 0 : snapPoints[Math.max(newSnapPointIndex, 0)]);\n }, [\n drawerRef.current,\n snapPoints,\n snapPointsOffset,\n fadeFromIndex,\n overlayRef,\n setActiveSnapPoint\n ]);\n React__default.useEffect(()=>{\n if (activeSnapPoint || activeSnapPointProp) {\n var _snapPoints_findIndex;\n const newIndex = (_snapPoints_findIndex = snapPoints == null ? void 0 : snapPoints.findIndex((snapPoint)=>snapPoint === activeSnapPointProp || snapPoint === activeSnapPoint)) != null ? _snapPoints_findIndex : -1;\n if (snapPointsOffset && newIndex !== -1 && typeof snapPointsOffset[newIndex] === 'number') {\n snapToPoint(snapPointsOffset[newIndex]);\n }\n }\n }, [\n activeSnapPoint,\n activeSnapPointProp,\n snapPoints,\n snapPointsOffset,\n snapToPoint\n ]);\n function onRelease({ draggedDistance, closeDrawer, velocity, dismissible }) {\n if (fadeFromIndex === undefined) return;\n const currentPosition = direction === 'bottom' || direction === 'right' ? (activeSnapPointOffset != null ? activeSnapPointOffset : 0) - draggedDistance : (activeSnapPointOffset != null ? activeSnapPointOffset : 0) + draggedDistance;\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isFirst = activeSnapPointIndex === 0;\n const hasDraggedUp = draggedDistance > 0;\n if (isOverlaySnapPoint) {\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n }\n if (!snapToSequentialPoint && velocity > 2 && !hasDraggedUp) {\n if (dismissible) closeDrawer();\n else snapToPoint(snapPointsOffset[0]); // snap to initial point\n return;\n }\n if (!snapToSequentialPoint && velocity > 2 && hasDraggedUp && snapPointsOffset && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n // Find the closest snap point to the current position\n const closestSnapPoint = snapPointsOffset == null ? void 0 : snapPointsOffset.reduce((prev, curr)=>{\n if (typeof prev !== 'number' || typeof curr !== 'number') return prev;\n return Math.abs(curr - currentPosition) < Math.abs(prev - currentPosition) ? curr : prev;\n });\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n if (velocity > VELOCITY_THRESHOLD && Math.abs(draggedDistance) < dim * 0.4) {\n const dragDirection = hasDraggedUp ? 1 : -1; // 1 = up, -1 = down\n // Don't do anything if we swipe upwards while being on the last snap point\n if (dragDirection > 0 && isLastSnapPoint && snapPoints) {\n snapToPoint(snapPointsOffset[snapPoints.length - 1]);\n return;\n }\n if (isFirst && dragDirection < 0 && dismissible) {\n closeDrawer();\n }\n if (activeSnapPointIndex === null) return;\n snapToPoint(snapPointsOffset[activeSnapPointIndex + dragDirection]);\n return;\n }\n snapToPoint(closestSnapPoint);\n }\n function onDrag({ draggedDistance }) {\n if (activeSnapPointOffset === null) return;\n const newValue = direction === 'bottom' || direction === 'right' ? activeSnapPointOffset - draggedDistance : activeSnapPointOffset + draggedDistance;\n // Don't do anything if we exceed the last(biggest) snap point\n if ((direction === 'bottom' || direction === 'right') && newValue < snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n if ((direction === 'top' || direction === 'left') && newValue > snapPointsOffset[snapPointsOffset.length - 1]) {\n return;\n }\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${newValue}px, 0)` : `translate3d(${newValue}px, 0, 0)`\n });\n }\n function getPercentageDragged(absDraggedDistance, isDraggingDown) {\n if (!snapPoints || typeof activeSnapPointIndex !== 'number' || !snapPointsOffset || fadeFromIndex === undefined) return null;\n // If this is true we are dragging to a snap point that is supposed to have an overlay\n const isOverlaySnapPoint = activeSnapPointIndex === fadeFromIndex - 1;\n const isOverlaySnapPointOrHigher = activeSnapPointIndex >= fadeFromIndex;\n if (isOverlaySnapPointOrHigher && isDraggingDown) {\n return 0;\n }\n // Don't animate, but still use this one if we are dragging away from the overlaySnapPoint\n if (isOverlaySnapPoint && !isDraggingDown) return 1;\n if (!shouldFade && !isOverlaySnapPoint) return null;\n // Either fadeFrom index or the one before\n const targetSnapPointIndex = isOverlaySnapPoint ? activeSnapPointIndex + 1 : activeSnapPointIndex - 1;\n // Get the distance from overlaySnapPoint to the one before or vice-versa to calculate the opacity percentage accordingly\n const snapPointDistance = isOverlaySnapPoint ? snapPointsOffset[targetSnapPointIndex] - snapPointsOffset[targetSnapPointIndex - 1] : snapPointsOffset[targetSnapPointIndex + 1] - snapPointsOffset[targetSnapPointIndex];\n const percentageDragged = absDraggedDistance / Math.abs(snapPointDistance);\n if (isOverlaySnapPoint) {\n return 1 - percentageDragged;\n } else {\n return percentageDragged;\n }\n }\n return {\n isLastSnapPoint,\n activeSnapPoint,\n shouldFade,\n getPercentageDragged,\n setActiveSnapPoint,\n activeSnapPointIndex,\n onRelease,\n onDrag,\n snapPointsOffset\n };\n}\n\nconst noop = ()=>()=>{};\nfunction useScaleBackground() {\n const { direction, isOpen, shouldScaleBackground, setBackgroundColorOnScale, noBodyStyles } = useDrawerContext();\n const timeoutIdRef = React__default.useRef(null);\n const initialBackgroundColor = useMemo(()=>document.body.style.backgroundColor, []);\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n React__default.useEffect(()=>{\n if (isOpen && shouldScaleBackground) {\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]') || document.querySelector('[vaul-drawer-wrapper]');\n if (!wrapper) return;\n chain(setBackgroundColorOnScale && !noBodyStyles ? assignStyle(document.body, {\n background: 'black'\n }) : noop, assignStyle(wrapper, {\n transformOrigin: isVertical(direction) ? 'top' : 'left',\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }));\n const wrapperStylesCleanup = assignStyle(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`\n }\n });\n return ()=>{\n wrapperStylesCleanup();\n timeoutIdRef.current = window.setTimeout(()=>{\n if (initialBackgroundColor) {\n document.body.style.background = initialBackgroundColor;\n } else {\n document.body.style.removeProperty('background');\n }\n }, TRANSITIONS.DURATION * 1000);\n };\n }\n }, [\n isOpen,\n shouldScaleBackground,\n initialBackgroundColor\n ]);\n}\n\nlet previousBodyPosition = null;\n/**\n * This hook is necessary to prevent buggy behavior on iOS devices (need to test on Android).\n * I won't get into too much detail about what bugs it solves, but so far I've found that setting the body to `position: fixed` is the most reliable way to prevent those bugs.\n * Issues that this hook solves:\n * https://github.com/emilkowalski/vaul/issues/435\n * https://github.com/emilkowalski/vaul/issues/433\n * And more that I discovered, but were just not reported.\n */ function usePositionFixed({ isOpen, modal, nested, hasBeenOpened, preventScrollRestoration, noBodyStyles }) {\n const [activeUrl, setActiveUrl] = React__default.useState(()=>typeof window !== 'undefined' ? window.location.href : '');\n const scrollPos = React__default.useRef(0);\n const setPositionFixed = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === null && isOpen && !noBodyStyles) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n height: document.body.style.height,\n right: 'unset'\n };\n // Update the dom inside an animation frame\n const { scrollX, innerHeight } = window;\n document.body.style.setProperty('position', 'fixed', 'important');\n Object.assign(document.body.style, {\n top: `${-scrollPos.current}px`,\n left: `${-scrollX}px`,\n right: '0px',\n height: 'auto'\n });\n window.setTimeout(()=>window.requestAnimationFrame(()=>{\n // Attempt to check if the bottom bar appeared due to the position change\n const bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollPos.current >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = `${-(scrollPos.current + bottomBarHeight)}px`;\n }\n }), 300);\n }\n }, [\n isOpen\n ]);\n const restorePositionSetting = React__default.useCallback(()=>{\n // All browsers on iOS will return true here.\n if (!isSafari()) return;\n if (previousBodyPosition !== null && !noBodyStyles) {\n // Convert the position from \"px\" to Int\n const y = -parseInt(document.body.style.top, 10);\n const x = -parseInt(document.body.style.left, 10);\n // Restore styles\n Object.assign(document.body.style, previousBodyPosition);\n window.requestAnimationFrame(()=>{\n if (preventScrollRestoration && activeUrl !== window.location.href) {\n setActiveUrl(window.location.href);\n return;\n }\n window.scrollTo(x, y);\n });\n previousBodyPosition = null;\n }\n }, [\n activeUrl\n ]);\n React__default.useEffect(()=>{\n function onScroll() {\n scrollPos.current = window.scrollY;\n }\n onScroll();\n window.addEventListener('scroll', onScroll);\n return ()=>{\n window.removeEventListener('scroll', onScroll);\n };\n }, []);\n React__default.useEffect(()=>{\n if (!modal) return;\n return ()=>{\n if (typeof document === 'undefined') return;\n // Another drawer is opened, safe to ignore the execution\n const hasDrawerOpened = !!document.querySelector('[data-vaul-drawer]');\n if (hasDrawerOpened) return;\n restorePositionSetting();\n };\n }, [\n modal,\n restorePositionSetting\n ]);\n React__default.useEffect(()=>{\n if (nested || !hasBeenOpened) return;\n // This is needed to force Safari toolbar to show **before** the drawer starts animating to prevent a gnarly shift from happening\n if (isOpen) {\n // avoid for standalone mode (PWA)\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n !isStandalone && setPositionFixed();\n if (!modal) {\n window.setTimeout(()=>{\n restorePositionSetting();\n }, 500);\n }\n } else {\n restorePositionSetting();\n }\n }, [\n isOpen,\n hasBeenOpened,\n activeUrl,\n modal,\n nested,\n setPositionFixed,\n restorePositionSetting\n ]);\n return {\n restorePositionSetting\n };\n}\n\nfunction Root({ open: openProp, onOpenChange, children, onDrag: onDragProp, onRelease: onReleaseProp, snapPoints, shouldScaleBackground = false, setBackgroundColorOnScale = true, closeThreshold = CLOSE_THRESHOLD, scrollLockTimeout = SCROLL_LOCK_TIMEOUT, dismissible = true, handleOnly = false, fadeFromIndex = snapPoints && snapPoints.length - 1, activeSnapPoint: activeSnapPointProp, setActiveSnapPoint: setActiveSnapPointProp, fixed, modal = true, onClose, nested, noBodyStyles = false, direction = 'bottom', defaultOpen = false, disablePreventScroll = true, snapToSequentialPoint = false, preventScrollRestoration = false, repositionInputs = true, onAnimationEnd, container, autoFocus = false }) {\n var _drawerRef_current, _drawerRef_current1;\n const [isOpen = false, setIsOpen] = useControllableState({\n defaultProp: defaultOpen,\n prop: openProp,\n onChange: (o)=>{\n onOpenChange == null ? void 0 : onOpenChange(o);\n if (!o && !nested) {\n restorePositionSetting();\n }\n setTimeout(()=>{\n onAnimationEnd == null ? void 0 : onAnimationEnd(o);\n }, TRANSITIONS.DURATION * 1000);\n if (o && !modal) {\n if (typeof window !== 'undefined') {\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }\n if (!o) {\n // This will be removed when the exit animation ends (`500ms`)\n document.body.style.pointerEvents = 'auto';\n }\n }\n });\n const [hasBeenOpened, setHasBeenOpened] = React__default.useState(false);\n const [isDragging, setIsDragging] = React__default.useState(false);\n const [justReleased, setJustReleased] = React__default.useState(false);\n const overlayRef = React__default.useRef(null);\n const openTime = React__default.useRef(null);\n const dragStartTime = React__default.useRef(null);\n const dragEndTime = React__default.useRef(null);\n const lastTimeDragPrevented = React__default.useRef(null);\n const isAllowedToDrag = React__default.useRef(false);\n const nestedOpenChangeTimer = React__default.useRef(null);\n const pointerStart = React__default.useRef(0);\n const keyboardIsOpen = React__default.useRef(false);\n const shouldAnimate = React__default.useRef(!defaultOpen);\n const previousDiffFromInitial = React__default.useRef(0);\n const drawerRef = React__default.useRef(null);\n const drawerHeightRef = React__default.useRef(((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0);\n const drawerWidthRef = React__default.useRef(((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0);\n const initialDrawerHeight = React__default.useRef(0);\n const onSnapPointChange = React__default.useCallback((activeSnapPointIndex)=>{\n // Change openTime ref when we reach the last snap point to prevent dragging for 500ms incase it's scrollable.\n if (snapPoints && activeSnapPointIndex === snapPointsOffset.length - 1) openTime.current = new Date();\n }, []);\n const { activeSnapPoint, activeSnapPointIndex, setActiveSnapPoint, onRelease: onReleaseSnapPoints, snapPointsOffset, onDrag: onDragSnapPoints, shouldFade, getPercentageDragged: getSnapPointsPercentageDragged } = useSnapPoints({\n snapPoints,\n activeSnapPointProp,\n setActiveSnapPointProp,\n drawerRef,\n fadeFromIndex,\n overlayRef,\n onSnapPointChange,\n direction,\n container,\n snapToSequentialPoint\n });\n usePreventScroll({\n isDisabled: !isOpen || isDragging || !modal || justReleased || !hasBeenOpened || !repositionInputs || !disablePreventScroll\n });\n const { restorePositionSetting } = usePositionFixed({\n isOpen,\n modal,\n nested: nested != null ? nested : false,\n hasBeenOpened,\n preventScrollRestoration,\n noBodyStyles\n });\n function getScale() {\n return (window.innerWidth - WINDOW_TOP_OFFSET) / window.innerWidth;\n }\n function onPress(event) {\n var _drawerRef_current, _drawerRef_current1;\n if (!dismissible && !snapPoints) return;\n if (drawerRef.current && !drawerRef.current.contains(event.target)) return;\n drawerHeightRef.current = ((_drawerRef_current = drawerRef.current) == null ? void 0 : _drawerRef_current.getBoundingClientRect().height) || 0;\n drawerWidthRef.current = ((_drawerRef_current1 = drawerRef.current) == null ? void 0 : _drawerRef_current1.getBoundingClientRect().width) || 0;\n setIsDragging(true);\n dragStartTime.current = new Date();\n // iOS doesn't trigger mouseUp after scrolling so we need to listen to touched in order to disallow dragging\n if (isIOS()) {\n window.addEventListener('touchend', ()=>isAllowedToDrag.current = false, {\n once: true\n });\n }\n // Ensure we maintain correct pointer capture even when going outside of the drawer\n event.target.setPointerCapture(event.pointerId);\n pointerStart.current = isVertical(direction) ? event.pageY : event.pageX;\n }\n function shouldDrag(el, isDraggingInDirection) {\n var _window_getSelection;\n let element = el;\n const highlightedText = (_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString();\n const swipeAmount = drawerRef.current ? getTranslate(drawerRef.current, direction) : null;\n const date = new Date();\n // Fixes https://github.com/emilkowalski/vaul/issues/483\n if (element.tagName === 'SELECT') {\n return false;\n }\n if (element.hasAttribute('data-vaul-no-drag') || element.closest('[data-vaul-no-drag]')) {\n return false;\n }\n if (direction === 'right' || direction === 'left') {\n return true;\n }\n // Allow scrolling when animating\n if (openTime.current && date.getTime() - openTime.current.getTime() < 500) {\n return false;\n }\n if (swipeAmount !== null) {\n if (direction === 'bottom' ? swipeAmount > 0 : swipeAmount < 0) {\n return true;\n }\n }\n // Don't drag if there's highlighted text\n if (highlightedText && highlightedText.length > 0) {\n return false;\n }\n // Disallow dragging if drawer was scrolled within `scrollLockTimeout`\n if (lastTimeDragPrevented.current && date.getTime() - lastTimeDragPrevented.current.getTime() < scrollLockTimeout && swipeAmount === 0) {\n lastTimeDragPrevented.current = date;\n return false;\n }\n if (isDraggingInDirection) {\n lastTimeDragPrevented.current = date;\n // We are dragging down so we should allow scrolling\n return false;\n }\n // Keep climbing up the DOM tree as long as there's a parent\n while(element){\n // Check if the element is scrollable\n if (element.scrollHeight > element.clientHeight) {\n if (element.scrollTop !== 0) {\n lastTimeDragPrevented.current = new Date();\n // The element is scrollable and not scrolled to the top, so don't drag\n return false;\n }\n if (element.getAttribute('role') === 'dialog') {\n return true;\n }\n }\n // Move up to the parent element\n element = element.parentNode;\n }\n // No scrollable parents not scrolled to the top found, so drag\n return true;\n }\n function onDrag(event) {\n if (!drawerRef.current) {\n return;\n }\n // We need to know how much of the drawer has been dragged in percentages so that we can transform background accordingly\n if (isDragging) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n const draggedDistance = (pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX)) * directionMultiplier;\n const isDraggingInDirection = draggedDistance > 0;\n // Pre condition for disallowing dragging in the close direction.\n const noCloseSnapPointsPreCondition = snapPoints && !dismissible && !isDraggingInDirection;\n // Disallow dragging down to close when first snap point is the active one and dismissible prop is set to false.\n if (noCloseSnapPointsPreCondition && activeSnapPointIndex === 0) return;\n // We need to capture last time when drag with scroll was triggered and have a timeout between\n const absDraggedDistance = Math.abs(draggedDistance);\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const drawerDimension = direction === 'bottom' || direction === 'top' ? drawerHeightRef.current : drawerWidthRef.current;\n // Calculate the percentage dragged, where 1 is the closed position\n let percentageDragged = absDraggedDistance / drawerDimension;\n const snapPointPercentageDragged = getSnapPointsPercentageDragged(absDraggedDistance, isDraggingInDirection);\n if (snapPointPercentageDragged !== null) {\n percentageDragged = snapPointPercentageDragged;\n }\n // Disallow close dragging beyond the smallest snap point.\n if (noCloseSnapPointsPreCondition && percentageDragged >= 1) {\n return;\n }\n if (!isAllowedToDrag.current && !shouldDrag(event.target, isDraggingInDirection)) return;\n drawerRef.current.classList.add(DRAG_CLASS);\n // If shouldDrag gave true once after pressing down on the drawer, we set isAllowedToDrag to true and it will remain true until we let go, there's no reason to disable dragging mid way, ever, and that's the solution to it\n isAllowedToDrag.current = true;\n set(drawerRef.current, {\n transition: 'none'\n });\n set(overlayRef.current, {\n transition: 'none'\n });\n if (snapPoints) {\n onDragSnapPoints({\n draggedDistance\n });\n }\n // Run this only if snapPoints are not defined or if we are at the last snap point (highest one)\n if (isDraggingInDirection && !snapPoints) {\n const dampenedDraggedDistance = dampenValue(draggedDistance);\n const translateValue = Math.min(dampenedDraggedDistance * -1, 0) * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n return;\n }\n const opacityValue = 1 - percentageDragged;\n if (shouldFade || fadeFromIndex && activeSnapPointIndex === fadeFromIndex - 1) {\n onDragProp == null ? void 0 : onDragProp(event, percentageDragged);\n set(overlayRef.current, {\n opacity: `${opacityValue}`,\n transition: 'none'\n }, true);\n }\n if (wrapper && overlayRef.current && shouldScaleBackground) {\n // Calculate percentageDragged as a fraction (0 to 1)\n const scaleValue = Math.min(getScale() + percentageDragged * (1 - getScale()), 1);\n const borderRadiusValue = 8 - percentageDragged * 8;\n const translateValue = Math.max(0, 14 - percentageDragged * 14);\n set(wrapper, {\n borderRadius: `${borderRadiusValue}px`,\n transform: isVertical(direction) ? `scale(${scaleValue}) translate3d(0, ${translateValue}px, 0)` : `scale(${scaleValue}) translate3d(${translateValue}px, 0, 0)`,\n transition: 'none'\n }, true);\n }\n if (!snapPoints) {\n const translateValue = absDraggedDistance * directionMultiplier;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }\n }\n }\n React__default.useEffect(()=>{\n window.requestAnimationFrame(()=>{\n shouldAnimate.current = true;\n });\n }, []);\n React__default.useEffect(()=>{\n var _window_visualViewport;\n function onVisualViewportChange() {\n if (!drawerRef.current || !repositionInputs) return;\n const focusedElement = document.activeElement;\n if (isInput(focusedElement) || keyboardIsOpen.current) {\n var _window_visualViewport;\n const visualViewportHeight = ((_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.height) || 0;\n const totalHeight = window.innerHeight;\n // This is the height of the keyboard\n let diffFromInitial = totalHeight - visualViewportHeight;\n const drawerHeight = drawerRef.current.getBoundingClientRect().height || 0;\n // Adjust drawer height only if it's tall enough\n const isTallEnough = drawerHeight > totalHeight * 0.8;\n if (!initialDrawerHeight.current) {\n initialDrawerHeight.current = drawerHeight;\n }\n const offsetFromTop = drawerRef.current.getBoundingClientRect().top;\n // visualViewport height may change due to somq e subtle changes to the keyboard. Checking if the height changed by 60 or more will make sure that they keyboard really changed its open state.\n if (Math.abs(previousDiffFromInitial.current - diffFromInitial) > 60) {\n keyboardIsOpen.current = !keyboardIsOpen.current;\n }\n if (snapPoints && snapPoints.length > 0 && snapPointsOffset && activeSnapPointIndex) {\n const activeSnapPointHeight = snapPointsOffset[activeSnapPointIndex] || 0;\n diffFromInitial += activeSnapPointHeight;\n }\n previousDiffFromInitial.current = diffFromInitial;\n // We don't have to change the height if the input is in view, when we are here we are in the opened keyboard state so we can correctly check if the input is in view\n if (drawerHeight > visualViewportHeight || keyboardIsOpen.current) {\n const height = drawerRef.current.getBoundingClientRect().height;\n let newDrawerHeight = height;\n if (height > visualViewportHeight) {\n newDrawerHeight = visualViewportHeight - (isTallEnough ? offsetFromTop : WINDOW_TOP_OFFSET);\n }\n // When fixed, don't move the drawer upwards if there's space, but rather only change it's height so it's fully scrollable when the keyboard is open\n if (fixed) {\n drawerRef.current.style.height = `${height - Math.max(diffFromInitial, 0)}px`;\n } else {\n drawerRef.current.style.height = `${Math.max(newDrawerHeight, visualViewportHeight - offsetFromTop)}px`;\n }\n } else if (!isMobileFirefox()) {\n drawerRef.current.style.height = `${initialDrawerHeight.current}px`;\n }\n if (snapPoints && snapPoints.length > 0 && !keyboardIsOpen.current) {\n drawerRef.current.style.bottom = `0px`;\n } else {\n // Negative bottom value would never make sense\n drawerRef.current.style.bottom = `${Math.max(diffFromInitial, 0)}px`;\n }\n }\n }\n (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.addEventListener('resize', onVisualViewportChange);\n return ()=>{\n var _window_visualViewport;\n return (_window_visualViewport = window.visualViewport) == null ? void 0 : _window_visualViewport.removeEventListener('resize', onVisualViewportChange);\n };\n }, [\n activeSnapPointIndex,\n snapPoints,\n snapPointsOffset\n ]);\n function closeDrawer(fromWithin) {\n cancelDrag();\n onClose == null ? void 0 : onClose();\n if (!fromWithin) {\n setIsOpen(false);\n }\n setTimeout(()=>{\n if (snapPoints) {\n setActiveSnapPoint(snapPoints[0]);\n }\n }, TRANSITIONS.DURATION * 1000); // seconds to ms\n }\n function resetDrawer() {\n if (!drawerRef.current) return;\n const wrapper = document.querySelector('[data-vaul-drawer-wrapper]');\n const currentSwipeAmount = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transform: 'translate3d(0, 0, 0)',\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n });\n set(overlayRef.current, {\n transition: `opacity ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n opacity: '1'\n });\n // Don't reset background if swiped upwards\n if (shouldScaleBackground && currentSwipeAmount && currentSwipeAmount > 0 && isOpen) {\n set(wrapper, {\n borderRadius: `${BORDER_RADIUS}px`,\n overflow: 'hidden',\n ...isVertical(direction) ? {\n transform: `scale(${getScale()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,\n transformOrigin: 'top'\n } : {\n transform: `scale(${getScale()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,\n transformOrigin: 'left'\n },\n transitionProperty: 'transform, border-radius',\n transitionDuration: `${TRANSITIONS.DURATION}s`,\n transitionTimingFunction: `cubic-bezier(${TRANSITIONS.EASE.join(',')})`\n }, true);\n }\n }\n function cancelDrag() {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n }\n function onRelease(event) {\n if (!isDragging || !drawerRef.current) return;\n drawerRef.current.classList.remove(DRAG_CLASS);\n isAllowedToDrag.current = false;\n setIsDragging(false);\n dragEndTime.current = new Date();\n const swipeAmount = getTranslate(drawerRef.current, direction);\n if (!event || !shouldDrag(event.target, false) || !swipeAmount || Number.isNaN(swipeAmount)) return;\n if (dragStartTime.current === null) return;\n const timeTaken = dragEndTime.current.getTime() - dragStartTime.current.getTime();\n const distMoved = pointerStart.current - (isVertical(direction) ? event.pageY : event.pageX);\n const velocity = Math.abs(distMoved) / timeTaken;\n if (velocity > 0.05) {\n // `justReleased` is needed to prevent the drawer from focusing on an input when the drag ends, as it's not the intent most of the time.\n setJustReleased(true);\n setTimeout(()=>{\n setJustReleased(false);\n }, 200);\n }\n if (snapPoints) {\n const directionMultiplier = direction === 'bottom' || direction === 'right' ? 1 : -1;\n onReleaseSnapPoints({\n draggedDistance: distMoved * directionMultiplier,\n closeDrawer,\n velocity,\n dismissible\n });\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n // Moved upwards, don't do anything\n if (direction === 'bottom' || direction === 'right' ? distMoved > 0 : distMoved < 0) {\n resetDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n return;\n }\n if (velocity > VELOCITY_THRESHOLD) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n var _drawerRef_current_getBoundingClientRect_height;\n const visibleDrawerHeight = Math.min((_drawerRef_current_getBoundingClientRect_height = drawerRef.current.getBoundingClientRect().height) != null ? _drawerRef_current_getBoundingClientRect_height : 0, window.innerHeight);\n var _drawerRef_current_getBoundingClientRect_width;\n const visibleDrawerWidth = Math.min((_drawerRef_current_getBoundingClientRect_width = drawerRef.current.getBoundingClientRect().width) != null ? _drawerRef_current_getBoundingClientRect_width : 0, window.innerWidth);\n const isHorizontalSwipe = direction === 'left' || direction === 'right';\n if (Math.abs(swipeAmount) >= (isHorizontalSwipe ? visibleDrawerWidth : visibleDrawerHeight) * closeThreshold) {\n closeDrawer();\n onReleaseProp == null ? void 0 : onReleaseProp(event, false);\n return;\n }\n onReleaseProp == null ? void 0 : onReleaseProp(event, true);\n resetDrawer();\n }\n React__default.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n if (isOpen) {\n set(document.documentElement, {\n scrollBehavior: 'auto'\n });\n openTime.current = new Date();\n }\n return ()=>{\n reset(document.documentElement, 'scrollBehavior');\n };\n }, [\n isOpen\n ]);\n function onNestedOpenChange(o) {\n const scale = o ? (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth : 1;\n const initialTranslate = o ? -NESTED_DISPLACEMENT : 0;\n if (nestedOpenChangeTimer.current) {\n window.clearTimeout(nestedOpenChangeTimer.current);\n }\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${initialTranslate}px, 0)` : `scale(${scale}) translate3d(${initialTranslate}px, 0, 0)`\n });\n if (!o && drawerRef.current) {\n nestedOpenChangeTimer.current = setTimeout(()=>{\n const translateValue = getTranslate(drawerRef.current, direction);\n set(drawerRef.current, {\n transition: 'none',\n transform: isVertical(direction) ? `translate3d(0, ${translateValue}px, 0)` : `translate3d(${translateValue}px, 0, 0)`\n });\n }, 500);\n }\n }\n function onNestedDrag(_event, percentageDragged) {\n if (percentageDragged < 0) return;\n const initialScale = (window.innerWidth - NESTED_DISPLACEMENT) / window.innerWidth;\n const newScale = initialScale + percentageDragged * (1 - initialScale);\n const newTranslate = -NESTED_DISPLACEMENT + percentageDragged * NESTED_DISPLACEMENT;\n set(drawerRef.current, {\n transform: isVertical(direction) ? `scale(${newScale}) translate3d(0, ${newTranslate}px, 0)` : `scale(${newScale}) translate3d(${newTranslate}px, 0, 0)`,\n transition: 'none'\n });\n }\n function onNestedRelease(_event, o) {\n const dim = isVertical(direction) ? window.innerHeight : window.innerWidth;\n const scale = o ? (dim - NESTED_DISPLACEMENT) / dim : 1;\n const translate = o ? -NESTED_DISPLACEMENT : 0;\n if (o) {\n set(drawerRef.current, {\n transition: `transform ${TRANSITIONS.DURATION}s cubic-bezier(${TRANSITIONS.EASE.join(',')})`,\n transform: isVertical(direction) ? `scale(${scale}) translate3d(0, ${translate}px, 0)` : `scale(${scale}) translate3d(${translate}px, 0, 0)`\n });\n }\n }\n React__default.useEffect(()=>{\n if (!modal) {\n // Need to do this manually unfortunately\n window.requestAnimationFrame(()=>{\n document.body.style.pointerEvents = 'auto';\n });\n }\n }, [\n modal\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Root, {\n defaultOpen: defaultOpen,\n onOpenChange: (open)=>{\n if (!dismissible && !open) return;\n if (open) {\n setHasBeenOpened(true);\n } else {\n closeDrawer(true);\n }\n setIsOpen(open);\n },\n open: isOpen\n }, /*#__PURE__*/ React__default.createElement(DrawerContext.Provider, {\n value: {\n activeSnapPoint,\n snapPoints,\n setActiveSnapPoint,\n drawerRef,\n overlayRef,\n onOpenChange,\n onPress,\n onRelease,\n onDrag,\n dismissible,\n shouldAnimate,\n handleOnly,\n isOpen,\n isDragging,\n shouldFade,\n closeDrawer,\n onNestedDrag,\n onNestedOpenChange,\n onNestedRelease,\n keyboardIsOpen,\n modal,\n snapPointsOffset,\n activeSnapPointIndex,\n direction,\n shouldScaleBackground,\n setBackgroundColorOnScale,\n noBodyStyles,\n container,\n autoFocus\n }\n }, children));\n}\nconst Overlay = /*#__PURE__*/ React__default.forwardRef(function({ ...rest }, ref) {\n const { overlayRef, snapPoints, onRelease, shouldFade, isOpen, modal, shouldAnimate } = useDrawerContext();\n const composedRef = useComposedRefs(ref, overlayRef);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n // Overlay is the component that is locking scroll, removing it will unlock the scroll without having to dig into Radix's Dialog library\n if (!modal) {\n return null;\n }\n const onMouseUp = React__default.useCallback((event)=>onRelease(event), [\n onRelease\n ]);\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Overlay, {\n onMouseUp: onMouseUp,\n ref: composedRef,\n \"data-vaul-overlay\": \"\",\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points-overlay\": isOpen && shouldFade ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest\n });\n});\nOverlay.displayName = 'Drawer.Overlay';\nconst Content = /*#__PURE__*/ React__default.forwardRef(function({ onPointerDownOutside, style, onOpenAutoFocus, ...rest }, ref) {\n const { drawerRef, onPress, onRelease, onDrag, keyboardIsOpen, snapPointsOffset, activeSnapPointIndex, modal, isOpen, direction, snapPoints, container, handleOnly, shouldAnimate, autoFocus } = useDrawerContext();\n // Needed to use transition instead of animations\n const [delayedSnapPoints, setDelayedSnapPoints] = React__default.useState(false);\n const composedRef = useComposedRefs(ref, drawerRef);\n const pointerStartRef = React__default.useRef(null);\n const lastKnownPointerEventRef = React__default.useRef(null);\n const wasBeyondThePointRef = React__default.useRef(false);\n const hasSnapPoints = snapPoints && snapPoints.length > 0;\n useScaleBackground();\n const isDeltaInDirection = (delta, direction, threshold = 0)=>{\n if (wasBeyondThePointRef.current) return true;\n const deltaY = Math.abs(delta.y);\n const deltaX = Math.abs(delta.x);\n const isDeltaX = deltaX > deltaY;\n const dFactor = [\n 'bottom',\n 'right'\n ].includes(direction) ? 1 : -1;\n if (direction === 'left' || direction === 'right') {\n const isReverseDirection = delta.x * dFactor < 0;\n if (!isReverseDirection && deltaX >= 0 && deltaX <= threshold) {\n return isDeltaX;\n }\n } else {\n const isReverseDirection = delta.y * dFactor < 0;\n if (!isReverseDirection && deltaY >= 0 && deltaY <= threshold) {\n return !isDeltaX;\n }\n }\n wasBeyondThePointRef.current = true;\n return true;\n };\n React__default.useEffect(()=>{\n if (hasSnapPoints) {\n window.requestAnimationFrame(()=>{\n setDelayedSnapPoints(true);\n });\n }\n }, []);\n function handleOnPointerUp(event) {\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n }\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Content, {\n \"data-vaul-drawer-direction\": direction,\n \"data-vaul-drawer\": \"\",\n \"data-vaul-delayed-snap-points\": delayedSnapPoints ? 'true' : 'false',\n \"data-vaul-snap-points\": isOpen && hasSnapPoints ? 'true' : 'false',\n \"data-vaul-custom-container\": container ? 'true' : 'false',\n \"data-vaul-animate\": (shouldAnimate == null ? void 0 : shouldAnimate.current) ? 'true' : 'false',\n ...rest,\n ref: composedRef,\n style: snapPointsOffset && snapPointsOffset.length > 0 ? {\n '--snap-point-height': `${snapPointsOffset[activeSnapPointIndex != null ? activeSnapPointIndex : 0]}px`,\n ...style\n } : style,\n onPointerDown: (event)=>{\n if (handleOnly) return;\n rest.onPointerDown == null ? void 0 : rest.onPointerDown.call(rest, event);\n pointerStartRef.current = {\n x: event.pageX,\n y: event.pageY\n };\n onPress(event);\n },\n onOpenAutoFocus: (e)=>{\n onOpenAutoFocus == null ? void 0 : onOpenAutoFocus(e);\n if (!autoFocus) {\n e.preventDefault();\n }\n },\n onPointerDownOutside: (e)=>{\n onPointerDownOutside == null ? void 0 : onPointerDownOutside(e);\n if (!modal || e.defaultPrevented) {\n e.preventDefault();\n return;\n }\n if (keyboardIsOpen.current) {\n keyboardIsOpen.current = false;\n }\n },\n onFocusOutside: (e)=>{\n if (!modal) {\n e.preventDefault();\n return;\n }\n },\n onPointerMove: (event)=>{\n lastKnownPointerEventRef.current = event;\n if (handleOnly) return;\n rest.onPointerMove == null ? void 0 : rest.onPointerMove.call(rest, event);\n if (!pointerStartRef.current) return;\n const yPosition = event.pageY - pointerStartRef.current.y;\n const xPosition = event.pageX - pointerStartRef.current.x;\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const delta = {\n x: xPosition,\n y: yPosition\n };\n const isAllowedToSwipe = isDeltaInDirection(delta, direction, swipeStartThreshold);\n if (isAllowedToSwipe) onDrag(event);\n else if (Math.abs(xPosition) > swipeStartThreshold || Math.abs(yPosition) > swipeStartThreshold) {\n pointerStartRef.current = null;\n }\n },\n onPointerUp: (event)=>{\n rest.onPointerUp == null ? void 0 : rest.onPointerUp.call(rest, event);\n pointerStartRef.current = null;\n wasBeyondThePointRef.current = false;\n onRelease(event);\n },\n onPointerOut: (event)=>{\n rest.onPointerOut == null ? void 0 : rest.onPointerOut.call(rest, event);\n handleOnPointerUp(lastKnownPointerEventRef.current);\n },\n onContextMenu: (event)=>{\n rest.onContextMenu == null ? void 0 : rest.onContextMenu.call(rest, event);\n if (lastKnownPointerEventRef.current) {\n handleOnPointerUp(lastKnownPointerEventRef.current);\n }\n }\n });\n});\nContent.displayName = 'Drawer.Content';\nconst LONG_HANDLE_PRESS_TIMEOUT = 250;\nconst DOUBLE_TAP_TIMEOUT = 120;\nconst Handle = /*#__PURE__*/ React__default.forwardRef(function({ preventCycle = false, children, ...rest }, ref) {\n const { closeDrawer, isDragging, snapPoints, activeSnapPoint, setActiveSnapPoint, dismissible, handleOnly, isOpen, onPress, onDrag } = useDrawerContext();\n const closeTimeoutIdRef = React__default.useRef(null);\n const shouldCancelInteractionRef = React__default.useRef(false);\n function handleStartCycle() {\n // Stop if this is the second click of a double click\n if (shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n window.setTimeout(()=>{\n handleCycleSnapPoints();\n }, DOUBLE_TAP_TIMEOUT);\n }\n function handleCycleSnapPoints() {\n // Prevent accidental taps while resizing drawer\n if (isDragging || preventCycle || shouldCancelInteractionRef.current) {\n handleCancelInteraction();\n return;\n }\n // Make sure to clear the timeout id if the user releases the handle before the cancel timeout\n handleCancelInteraction();\n if (!snapPoints || snapPoints.length === 0) {\n if (!dismissible) {\n closeDrawer();\n }\n return;\n }\n const isLastSnapPoint = activeSnapPoint === snapPoints[snapPoints.length - 1];\n if (isLastSnapPoint && dismissible) {\n closeDrawer();\n return;\n }\n const currentSnapIndex = snapPoints.findIndex((point)=>point === activeSnapPoint);\n if (currentSnapIndex === -1) return; // activeSnapPoint not found in snapPoints\n const nextSnapPoint = snapPoints[currentSnapIndex + 1];\n setActiveSnapPoint(nextSnapPoint);\n }\n function handleStartInteraction() {\n closeTimeoutIdRef.current = window.setTimeout(()=>{\n // Cancel click interaction on a long press\n shouldCancelInteractionRef.current = true;\n }, LONG_HANDLE_PRESS_TIMEOUT);\n }\n function handleCancelInteraction() {\n if (closeTimeoutIdRef.current) {\n window.clearTimeout(closeTimeoutIdRef.current);\n }\n shouldCancelInteractionRef.current = false;\n }\n return /*#__PURE__*/ React__default.createElement(\"div\", {\n onClick: handleStartCycle,\n onPointerCancel: handleCancelInteraction,\n onPointerDown: (e)=>{\n if (handleOnly) onPress(e);\n handleStartInteraction();\n },\n onPointerMove: (e)=>{\n if (handleOnly) onDrag(e);\n },\n // onPointerUp is already handled by the content component\n ref: ref,\n \"data-vaul-drawer-visible\": isOpen ? 'true' : 'false',\n \"data-vaul-handle\": \"\",\n \"aria-hidden\": \"true\",\n ...rest\n }, /*#__PURE__*/ React__default.createElement(\"span\", {\n \"data-vaul-handle-hitarea\": \"\",\n \"aria-hidden\": \"true\"\n }, children));\n});\nHandle.displayName = 'Drawer.Handle';\nfunction NestedRoot({ onDrag, onOpenChange, open: nestedIsOpen, ...rest }) {\n const { onNestedDrag, onNestedOpenChange, onNestedRelease } = useDrawerContext();\n if (!onNestedDrag) {\n throw new Error('Drawer.NestedRoot must be placed in another drawer');\n }\n return /*#__PURE__*/ React__default.createElement(Root, {\n nested: true,\n open: nestedIsOpen,\n onClose: ()=>{\n onNestedOpenChange(false);\n },\n onDrag: (e, p)=>{\n onNestedDrag(e, p);\n onDrag == null ? void 0 : onDrag(e, p);\n },\n onOpenChange: (o)=>{\n if (o) {\n onNestedOpenChange(o);\n }\n onOpenChange == null ? void 0 : onOpenChange(o);\n },\n onRelease: onNestedRelease,\n ...rest\n });\n}\nfunction Portal(props) {\n const context = useDrawerContext();\n const { container = context.container, ...portalProps } = props;\n return /*#__PURE__*/ React__default.createElement(DialogPrimitive.Portal, {\n container: container,\n ...portalProps\n });\n}\nconst Drawer = {\n Root,\n NestedRoot,\n Content,\n Overlay,\n Trigger: DialogPrimitive.Trigger,\n Portal,\n Handle,\n Close: DialogPrimitive.Close,\n Title: DialogPrimitive.Title,\n Description: DialogPrimitive.Description\n};\n\nexport { Content, Drawer, Handle, NestedRoot, Overlay, Portal, Root };\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n\tController,\n\tFormProvider,\n\tuseFormContext,\n\tuseFormState,\n\ttype ControllerProps,\n\ttype FieldPath,\n\ttype FieldValues,\n} from 'react-hook-form';\n\nimport { cn, Label } from '@/packages/shadcns';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n\tname: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n\tTFieldValues extends FieldValues = FieldValues,\n\tTName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n\t...props\n}: ControllerProps<TFieldValues, TName>) => {\n\treturn (\n\t\t<FormFieldContext.Provider value={{ name: props.name }}>\n\t\t\t<Controller {...props} />\n\t\t</FormFieldContext.Provider>\n\t);\n};\n\nconst useFormField = () => {\n\tconst fieldContext = React.useContext(FormFieldContext);\n\tconst itemContext = React.useContext(FormItemContext);\n\tconst { getFieldState } = useFormContext();\n\tconst formState = useFormState({ name: fieldContext.name });\n\tconst fieldState = getFieldState(fieldContext.name, formState);\n\n\tif (!fieldContext) {\n\t\tthrow new Error('useFormField should be used within <FormField>');\n\t}\n\n\tconst { id } = itemContext;\n\n\treturn {\n\t\tid,\n\t\tname: fieldContext.name,\n\t\tformItemId: `${id}-form-item`,\n\t\tformDescriptionId: `${id}-form-item-description`,\n\t\tformMessageId: `${id}-form-item-message`,\n\t\t...fieldState,\n\t};\n};\n\ntype FormItemContextValue = {\n\tid: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n\tconst id = React.useId();\n\n\treturn (\n\t\t<FormItemContext.Provider value={{ id }}>\n\t\t\t<div data-slot=\"form-item\" className={cn('grid gap-2', className)} {...props} />\n\t\t</FormItemContext.Provider>\n\t);\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n\tconst { error, formItemId } = useFormField();\n\n\treturn (\n\t\t<Label\n\t\t\tdata-slot=\"form-label\"\n\t\t\tdata-error={!!error}\n\t\t\tclassName={cn('data-[error=true]:text-destructive', className)}\n\t\t\thtmlFor={formItemId}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot>) {\n\tconst { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n\treturn (\n\t\t<Slot\n\t\t\tdata-slot=\"form-control\"\n\t\t\tid={formItemId}\n\t\t\taria-describedby={\n\t\t\t\t!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`\n\t\t\t}\n\t\t\taria-invalid={!!error}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n\tconst { formDescriptionId } = useFormField();\n\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"form-description\"\n\t\t\tid={formDescriptionId}\n\t\t\tclassName={cn('text-muted-foreground text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n\tconst { error, formMessageId } = useFormField();\n\tconst body = error ? String(error?.message ?? '') : props.children;\n\n\tif (!body) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<p\n\t\t\tdata-slot=\"form-message\"\n\t\t\tid={formMessageId}\n\t\t\tclassName={cn('text-destructive text-sm', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{body}\n\t\t</p>\n\t);\n}\n\nexport {\n\tuseFormField,\n\tForm,\n\tFormItem,\n\tFormLabel,\n\tFormControl,\n\tFormDescription,\n\tFormMessage,\n\tFormField,\n};\n","export function syncTimeouts(cb: (...args: any[]) => unknown): number[] {\n const t1 = setTimeout(cb, 0) // For faster machines\n const t2 = setTimeout(cb, 1_0)\n const t3 = setTimeout(cb, 5_0)\n return [t1, t2, t3]\n}\n","import * as React from 'react'\n\nexport function usePrevious<T>(value: T) {\n const ref = React.useRef<T>()\n React.useEffect(() => {\n ref.current = value\n })\n return ref.current\n}\n","import * as React from 'react'\nimport { OTPInputProps } from './types'\n\nconst PWM_BADGE_MARGIN_RIGHT = 18\nconst PWM_BADGE_SPACE_WIDTH_PX = 40\nconst PWM_BADGE_SPACE_WIDTH = `${PWM_BADGE_SPACE_WIDTH_PX}px` as const\n\nconst PASSWORD_MANAGERS_SELECTORS = [\n '[data-lastpass-icon-root]', // LastPass\n 'com-1password-button', // 1Password\n '[data-dashlanecreated]', // Dashlane\n '[style$=\"2147483647 !important;\"]', // Bitwarden\n].join(',')\n\nexport function usePasswordManagerBadge({\n containerRef,\n inputRef,\n pushPasswordManagerStrategy,\n isFocused,\n}: {\n containerRef: React.RefObject<HTMLDivElement>\n inputRef: React.RefObject<HTMLInputElement>\n pushPasswordManagerStrategy: OTPInputProps['pushPasswordManagerStrategy']\n isFocused: boolean\n}) {\n /** Password managers have a badge\n * and I'll use this state to push them\n * outside the input */\n const [hasPWMBadge, setHasPWMBadge] = React.useState(false)\n const [hasPWMBadgeSpace, setHasPWMBadgeSpace] = React.useState(false)\n const [done, setDone] = React.useState(false)\n\n const willPushPWMBadge = React.useMemo(() => {\n if (pushPasswordManagerStrategy === 'none') {\n return false\n }\n\n const increaseWidthCase =\n (pushPasswordManagerStrategy === 'increase-width' ||\n // TODO: remove 'experimental-no-flickering' support in 2.0.0\n pushPasswordManagerStrategy === 'experimental-no-flickering') &&\n hasPWMBadge &&\n hasPWMBadgeSpace\n\n return increaseWidthCase\n }, [hasPWMBadge, hasPWMBadgeSpace, pushPasswordManagerStrategy])\n\n const trackPWMBadge = React.useCallback(() => {\n const container = containerRef.current\n const input = inputRef.current\n if (\n !container ||\n !input ||\n done ||\n pushPasswordManagerStrategy === 'none'\n ) {\n return\n }\n\n const elementToCompare = container\n\n // Get the top right-center point of the container.\n // That is usually where most password managers place their badge.\n const rightCornerX =\n elementToCompare.getBoundingClientRect().left +\n elementToCompare.offsetWidth\n const centereredY =\n elementToCompare.getBoundingClientRect().top +\n elementToCompare.offsetHeight / 2\n const x = rightCornerX - PWM_BADGE_MARGIN_RIGHT\n const y = centereredY\n\n // Do an extra search to check for famous password managers\n const pmws = document.querySelectorAll(PASSWORD_MANAGERS_SELECTORS)\n\n // If no password manager is automatically detect,\n // we'll try to dispatch document.elementFromPoint\n // to identify badges\n if (pmws.length === 0) {\n const maybeBadgeEl = document.elementFromPoint(x, y)\n\n // If the found element is the input itself,\n // then we assume it's not a password manager badge.\n // We are not sure. Most times that means there isn't a badge.\n if (maybeBadgeEl === container) {\n return\n }\n }\n\n setHasPWMBadge(true)\n setDone(true)\n }, [containerRef, inputRef, done, pushPasswordManagerStrategy])\n\n React.useEffect(() => {\n const container = containerRef.current\n if (!container || pushPasswordManagerStrategy === 'none') {\n return\n }\n\n // Check if the PWM area is 100% visible\n function checkHasSpace() {\n const viewportWidth = window.innerWidth\n const distanceToRightEdge =\n viewportWidth - container.getBoundingClientRect().right\n setHasPWMBadgeSpace(distanceToRightEdge >= PWM_BADGE_SPACE_WIDTH_PX)\n }\n\n checkHasSpace()\n const interval = setInterval(checkHasSpace, 1000)\n\n return () => {\n clearInterval(interval)\n }\n }, [containerRef, pushPasswordManagerStrategy])\n\n React.useEffect(() => {\n const _isFocused = isFocused || document.activeElement === inputRef.current\n\n if (pushPasswordManagerStrategy === 'none' || !_isFocused) {\n return\n }\n const t1 = setTimeout(trackPWMBadge, 0)\n const t2 = setTimeout(trackPWMBadge, 2000)\n const t3 = setTimeout(trackPWMBadge, 5000)\n const t4 = setTimeout(() => {\n setDone(true)\n }, 6000)\n return () => {\n clearTimeout(t1)\n clearTimeout(t2)\n clearTimeout(t3)\n clearTimeout(t4)\n }\n }, [inputRef, isFocused, pushPasswordManagerStrategy, trackPWMBadge])\n\n return { hasPWMBadge, willPushPWMBadge, PWM_BADGE_SPACE_WIDTH }\n}\n","'use client'\n\nimport * as React from 'react'\n\nimport { syncTimeouts } from './sync-timeouts'\nimport { OTPInputProps, RenderProps } from './types'\nimport { usePrevious } from './use-previous'\nimport { usePasswordManagerBadge } from './use-pwm-badge'\n\nexport const OTPInputContext = React.createContext<RenderProps>(\n {} as RenderProps,\n)\n\nexport const OTPInput = React.forwardRef<HTMLInputElement, OTPInputProps>(\n (\n {\n value: uncheckedValue,\n onChange: uncheckedOnChange,\n maxLength,\n textAlign = 'left',\n pattern,\n placeholder,\n inputMode = 'numeric',\n onComplete,\n pushPasswordManagerStrategy = 'increase-width',\n pasteTransformer,\n containerClassName,\n noScriptCSSFallback = NOSCRIPT_CSS_FALLBACK,\n\n render,\n children,\n\n ...props\n },\n ref,\n ) => {\n // Only used when `value` state is not provided\n const [internalValue, setInternalValue] = React.useState(\n typeof props.defaultValue === 'string' ? props.defaultValue : '',\n )\n\n // Definitions\n const value = uncheckedValue ?? internalValue\n const previousValue = usePrevious(value)\n const onChange = React.useCallback(\n (newValue: string) => {\n uncheckedOnChange?.(newValue)\n setInternalValue(newValue)\n },\n [uncheckedOnChange],\n )\n const regexp = React.useMemo(\n () =>\n pattern\n ? typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern\n : null,\n [pattern],\n )\n\n /** useRef */\n const inputRef = React.useRef<HTMLInputElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const initialLoadRef = React.useRef({\n value,\n onChange,\n isIOS:\n typeof window !== 'undefined' &&\n window?.CSS?.supports?.('-webkit-touch-callout', 'none'),\n })\n const inputMetadataRef = React.useRef<{\n prev: [number | null, number | null, 'none' | 'forward' | 'backward']\n }>({\n prev: [\n inputRef.current?.selectionStart,\n inputRef.current?.selectionEnd,\n inputRef.current?.selectionDirection,\n ],\n })\n React.useImperativeHandle(ref, () => inputRef.current, [])\n React.useEffect(() => {\n const input = inputRef.current\n const container = containerRef.current\n\n if (!input || !container) {\n return\n }\n\n // Sync input value\n if (initialLoadRef.current.value !== input.value) {\n initialLoadRef.current.onChange(input.value)\n }\n\n // Previous selection\n inputMetadataRef.current.prev = [\n input.selectionStart,\n input.selectionEnd,\n input.selectionDirection,\n ]\n function onDocumentSelectionChange() {\n if (document.activeElement !== input) {\n setMirrorSelectionStart(null)\n setMirrorSelectionEnd(null)\n return\n }\n\n // Aliases\n const _s = input.selectionStart\n const _e = input.selectionEnd\n const _dir = input.selectionDirection\n const _ml = input.maxLength\n const _val = input.value\n const _prev = inputMetadataRef.current.prev\n\n // Algorithm\n let start = -1\n let end = -1\n let direction: 'forward' | 'backward' | 'none' = undefined\n if (_val.length !== 0 && _s !== null && _e !== null) {\n const isSingleCaret = _s === _e\n const isInsertMode = _s === _val.length && _val.length < _ml\n\n if (isSingleCaret && !isInsertMode) {\n const c = _s\n if (c === 0) {\n start = 0\n end = 1\n direction = 'forward'\n } else if (c === _ml) {\n start = c - 1\n end = c\n direction = 'backward'\n } else if (_ml > 1 && _val.length > 1) {\n let offset = 0\n if (_prev[0] !== null && _prev[1] !== null) {\n direction = c < _prev[1] ? 'backward' : 'forward'\n const wasPreviouslyInserting =\n _prev[0] === _prev[1] && _prev[0] < _ml\n if (direction === 'backward' && !wasPreviouslyInserting) {\n offset = -1\n }\n }\n\n start = offset + c\n end = offset + c + 1\n }\n }\n\n if (start !== -1 && end !== -1 && start !== end) {\n inputRef.current.setSelectionRange(start, end, direction)\n }\n }\n\n // Finally, update the state\n const s = start !== -1 ? start : _s\n const e = end !== -1 ? end : _e\n const dir = direction ?? _dir\n setMirrorSelectionStart(s)\n setMirrorSelectionEnd(e)\n // Store the previous selection value\n inputMetadataRef.current.prev = [s, e, dir]\n }\n document.addEventListener('selectionchange', onDocumentSelectionChange, {\n capture: true,\n })\n\n // Set initial mirror state\n onDocumentSelectionChange()\n document.activeElement === input && setIsFocused(true)\n\n // Apply needed styles\n if (!document.getElementById('input-otp-style')) {\n const styleEl = document.createElement('style')\n styleEl.id = 'input-otp-style'\n document.head.appendChild(styleEl)\n\n if (styleEl.sheet) {\n const autofillStyles =\n 'background: transparent !important; color: transparent !important; border-color: transparent !important; opacity: 0 !important; box-shadow: none !important; -webkit-box-shadow: none !important; -webkit-text-fill-color: transparent !important;'\n\n safeInsertRule(\n styleEl.sheet,\n '[data-input-otp]::selection { background: transparent !important; color: transparent !important; }',\n )\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:autofill { ${autofillStyles} }`,\n )\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp]:-webkit-autofill { ${autofillStyles} }`,\n )\n // iOS\n safeInsertRule(\n styleEl.sheet,\n `@supports (-webkit-touch-callout: none) { [data-input-otp] { letter-spacing: -.6em !important; font-weight: 100 !important; font-stretch: ultra-condensed; font-optical-sizing: none !important; left: -1px !important; right: 1px !important; } }`,\n )\n // PWM badges\n safeInsertRule(\n styleEl.sheet,\n `[data-input-otp] + * { pointer-events: all !important; }`,\n )\n }\n }\n // Track root height\n const updateRootHeight = () => {\n if (container) {\n container.style.setProperty(\n '--root-height',\n `${input.clientHeight}px`,\n )\n }\n }\n updateRootHeight()\n const resizeObserver = new ResizeObserver(updateRootHeight)\n resizeObserver.observe(input)\n\n return () => {\n document.removeEventListener(\n 'selectionchange',\n onDocumentSelectionChange,\n { capture: true },\n )\n resizeObserver.disconnect()\n }\n }, [])\n\n /** Mirrors for UI rendering purpose only */\n const [isHoveringInput, setIsHoveringInput] = React.useState(false)\n const [isFocused, setIsFocused] = React.useState(false)\n const [mirrorSelectionStart, setMirrorSelectionStart] = React.useState<\n number | null\n >(null)\n const [mirrorSelectionEnd, setMirrorSelectionEnd] = React.useState<\n number | null\n >(null)\n\n /** Effects */\n React.useEffect(() => {\n syncTimeouts(() => {\n // Forcefully remove :autofill state\n inputRef.current?.dispatchEvent(new Event('input'))\n\n // Update the selection state\n const s = inputRef.current?.selectionStart\n const e = inputRef.current?.selectionEnd\n const dir = inputRef.current?.selectionDirection\n if (s !== null && e !== null) {\n setMirrorSelectionStart(s)\n setMirrorSelectionEnd(e)\n inputMetadataRef.current.prev = [s, e, dir]\n }\n })\n }, [value, isFocused])\n\n React.useEffect(() => {\n if (previousValue === undefined) {\n return\n }\n\n if (\n value !== previousValue &&\n previousValue.length < maxLength &&\n value.length === maxLength\n ) {\n onComplete?.(value)\n }\n }, [maxLength, onComplete, previousValue, value])\n\n const pwmb = usePasswordManagerBadge({\n containerRef,\n inputRef,\n pushPasswordManagerStrategy,\n isFocused,\n })\n\n /** Event handlers */\n const _changeListener = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.currentTarget.value.slice(0, maxLength)\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n e.preventDefault()\n return\n }\n const maybeHasDeleted =\n typeof previousValue === 'string' &&\n newValue.length < previousValue.length\n if (maybeHasDeleted) {\n // Since cutting/deleting text doesn't trigger\n // selectionchange event, we'll have to dispatch it manually.\n // NOTE: The following line also triggers when cmd+A then pasting\n // a value with smaller length, which is not ideal for performance.\n document.dispatchEvent(new Event('selectionchange'))\n }\n onChange(newValue)\n },\n [maxLength, onChange, previousValue, regexp],\n )\n const _focusListener = React.useCallback(() => {\n if (inputRef.current) {\n const start = Math.min(inputRef.current.value.length, maxLength - 1)\n const end = inputRef.current.value.length\n inputRef.current?.setSelectionRange(start, end)\n setMirrorSelectionStart(start)\n setMirrorSelectionEnd(end)\n }\n setIsFocused(true)\n }, [maxLength])\n // Fix iOS pasting\n const _pasteListener = React.useCallback(\n (e: React.ClipboardEvent<HTMLInputElement>) => {\n const input = inputRef.current\n if (!pasteTransformer && (!initialLoadRef.current.isIOS || !e.clipboardData || !input)) {\n return\n }\n \n const _content = e.clipboardData.getData('text/plain')\n const content = pasteTransformer\n ? pasteTransformer(_content)\n : _content\n e.preventDefault()\n\n const start = inputRef.current?.selectionStart\n const end = inputRef.current?.selectionEnd\n\n const isReplacing = start !== end\n\n const newValueUncapped = isReplacing\n ? value.slice(0, start) + content + value.slice(end) // Replacing\n : value.slice(0, start) + content + value.slice(start) // Inserting\n const newValue = newValueUncapped.slice(0, maxLength)\n\n if (newValue.length > 0 && regexp && !regexp.test(newValue)) {\n return\n }\n\n input.value = newValue\n onChange(newValue)\n\n const _start = Math.min(newValue.length, maxLength - 1)\n const _end = newValue.length\n\n input.setSelectionRange(_start, _end)\n setMirrorSelectionStart(_start)\n setMirrorSelectionEnd(_end)\n },\n [maxLength, onChange, regexp, value],\n )\n\n /** Styles */\n const rootStyle = React.useMemo<React.CSSProperties>(\n () => ({\n position: 'relative',\n cursor: props.disabled ? 'default' : 'text',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n pointerEvents: 'none',\n }),\n [props.disabled],\n )\n\n const inputStyle = React.useMemo<React.CSSProperties>(\n () => ({\n position: 'absolute',\n inset: 0,\n width: pwmb.willPushPWMBadge\n ? `calc(100% + ${pwmb.PWM_BADGE_SPACE_WIDTH})`\n : '100%',\n clipPath: pwmb.willPushPWMBadge\n ? `inset(0 ${pwmb.PWM_BADGE_SPACE_WIDTH} 0 0)`\n : undefined,\n height: '100%',\n display: 'flex',\n textAlign,\n opacity: '1', // Mandatory for iOS hold-paste\n color: 'transparent',\n pointerEvents: 'all',\n background: 'transparent',\n caretColor: 'transparent',\n border: '0 solid transparent',\n outline: '0 solid transparent',\n boxShadow: 'none',\n lineHeight: '1',\n letterSpacing: '-.5em',\n fontSize: 'var(--root-height)',\n fontFamily: 'monospace',\n fontVariantNumeric: 'tabular-nums',\n // letterSpacing: '-1em',\n // transform: 'scale(1.5)',\n // paddingRight: '100%',\n // paddingBottom: '100%',\n // debugging purposes\n // inset: undefined,\n // position: undefined,\n // color: 'black',\n // background: 'white',\n // opacity: '1',\n // caretColor: 'black',\n // padding: '0',\n // letterSpacing: 'unset',\n // fontSize: 'unset',\n // paddingInline: '.5rem',\n }),\n [pwmb.PWM_BADGE_SPACE_WIDTH, pwmb.willPushPWMBadge, textAlign],\n )\n\n /** Rendering */\n const renderedInput = React.useMemo(\n () => (\n <input\n autoComplete={props.autoComplete || 'one-time-code'}\n {...props}\n data-input-otp\n data-input-otp-placeholder-shown={value.length === 0 || undefined}\n data-input-otp-mss={mirrorSelectionStart}\n data-input-otp-mse={mirrorSelectionEnd}\n inputMode={inputMode}\n pattern={regexp?.source}\n aria-placeholder={placeholder}\n style={inputStyle}\n maxLength={maxLength}\n value={value}\n ref={inputRef}\n onPaste={e => {\n _pasteListener(e)\n props.onPaste?.(e)\n }}\n onChange={_changeListener}\n onMouseOver={e => {\n setIsHoveringInput(true)\n props.onMouseOver?.(e)\n }}\n onMouseLeave={e => {\n setIsHoveringInput(false)\n props.onMouseLeave?.(e)\n }}\n onFocus={e => {\n _focusListener()\n props.onFocus?.(e)\n }}\n onBlur={e => {\n setIsFocused(false)\n props.onBlur?.(e)\n }}\n />\n ),\n [\n _changeListener,\n _focusListener,\n _pasteListener,\n inputMode,\n inputStyle,\n maxLength,\n mirrorSelectionEnd,\n mirrorSelectionStart,\n props,\n regexp?.source,\n value,\n ],\n )\n\n const contextValue = React.useMemo<RenderProps>(() => {\n return {\n slots: Array.from({ length: maxLength }).map((_, slotIdx) => {\n const isActive =\n isFocused &&\n mirrorSelectionStart !== null &&\n mirrorSelectionEnd !== null &&\n ((mirrorSelectionStart === mirrorSelectionEnd &&\n slotIdx === mirrorSelectionStart) ||\n (slotIdx >= mirrorSelectionStart && slotIdx < mirrorSelectionEnd))\n\n const char = value[slotIdx] !== undefined ? value[slotIdx] : null\n const placeholderChar = value[0] !== undefined ? null : placeholder?.[slotIdx] ?? null\n\n return {\n char,\n placeholderChar,\n isActive,\n hasFakeCaret: isActive && char === null,\n }\n }),\n isFocused,\n isHovering: !props.disabled && isHoveringInput,\n }\n }, [\n isFocused,\n isHoveringInput,\n maxLength,\n mirrorSelectionEnd,\n mirrorSelectionStart,\n props.disabled,\n value,\n ])\n\n const renderedChildren = React.useMemo(() => {\n if (render) {\n return render(contextValue)\n }\n return (\n <OTPInputContext.Provider value={contextValue}>\n {children}\n </OTPInputContext.Provider>\n )\n }, [children, contextValue, render])\n\n return (\n <>\n {noScriptCSSFallback !== null && (\n <noscript>\n <style>{noScriptCSSFallback}</style>\n </noscript>\n )}\n\n <div\n ref={containerRef}\n data-input-otp-container\n style={rootStyle}\n className={containerClassName}\n >\n {renderedChildren}\n\n <div\n style={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n }}\n >\n {renderedInput}\n </div>\n </div>\n </>\n )\n },\n)\nOTPInput.displayName = 'Input'\n\nfunction safeInsertRule(sheet: CSSStyleSheet, rule: string) {\n try {\n sheet.insertRule(rule)\n } catch {\n console.error('input-otp could not insert CSS rule:', rule)\n }\n}\n\n// Decided to go with <noscript>\n// instead of `scripting` CSS media query\n// because it's a fallback for initial page load\n// and the <script> tag won't be loaded\n// unless the user has JS disabled.\nconst NOSCRIPT_CSS_FALLBACK = `\n[data-input-otp] {\n --nojs-bg: white !important;\n --nojs-fg: black !important;\n\n background-color: var(--nojs-bg) !important;\n color: var(--nojs-fg) !important;\n caret-color: var(--nojs-fg) !important;\n letter-spacing: .25em !important;\n text-align: center !important;\n border: 1px solid var(--nojs-fg) !important;\n border-radius: 4px !important;\n width: 100% !important;\n}\n@media (prefers-color-scheme: dark) {\n [data-input-otp] {\n --nojs-bg: black !important;\n --nojs-fg: white !important;\n }\n}`\n","\n\nimport * as React from 'react';\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport { ChevronDownIcon } from 'lucide-react';\n\nimport { cn } from '@/packages/shadcns';\n\nfunction NavigationMenu({\n\tclassName,\n\tchildren,\n\tviewport = true,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {\n\tviewport?: boolean;\n}) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Root\n\t\t\tdata-slot=\"navigation-menu\"\n\t\t\tdata-viewport={viewport}\n\t\t\tclassName={cn(\n\t\t\t\t'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t{viewport && <NavigationMenuViewport />}\n\t\t</NavigationMenuPrimitive.Root>\n\t);\n}\n\nfunction NavigationMenuList({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.List\n\t\t\tdata-slot=\"navigation-menu-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'group flex flex-1 list-none items-center justify-center gap-1',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuItem({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Item\n\t\t\tdata-slot=\"navigation-menu-item\"\n\t\t\tclassName={cn('relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst navigationMenuTriggerStyle = cva(\n\t'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1',\n);\n\nfunction NavigationMenuTrigger({\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Trigger\n\t\t\tdata-slot=\"navigation-menu-trigger\"\n\t\t\tclassName={cn(navigationMenuTriggerStyle(), 'group', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}{' '}\n\t\t\t<ChevronDownIcon\n\t\t\t\tclassName=\"relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t/>\n\t\t</NavigationMenuPrimitive.Trigger>\n\t);\n}\n\nfunction NavigationMenuContent({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Content\n\t\t\tdata-slot=\"navigation-menu-content\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto',\n\t\t\t\t'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuViewport({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n\treturn (\n\t\t<div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n\t\t\t<NavigationMenuPrimitive.Viewport\n\t\t\t\tdata-slot=\"navigation-menu-viewport\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction NavigationMenuLink({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Link\n\t\t\tdata-slot=\"navigation-menu-link\"\n\t\t\tclassName={cn(\n\t\t\t\t\"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction NavigationMenuIndicator({\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n\treturn (\n\t\t<NavigationMenuPrimitive.Indicator\n\t\t\tdata-slot=\"navigation-menu-indicator\"\n\t\t\tclassName={cn(\n\t\t\t\t'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n\t\t</NavigationMenuPrimitive.Indicator>\n\t);\n}\n\nexport {\n\tNavigationMenu,\n\tNavigationMenuList,\n\tNavigationMenuItem,\n\tNavigationMenuContent,\n\tNavigationMenuTrigger,\n\tNavigationMenuLink,\n\tNavigationMenuIndicator,\n\tNavigationMenuViewport,\n\tnavigationMenuTriggerStyle,\n};\n","import * as React from 'react';\nimport { createContext, useRef, forwardRef, createElement, useContext, useImperativeHandle, useState, useCallback, useEffect, useMemo } from 'react';\n\n// The \"contextmenu\" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled\n\nconst PanelGroupContext = createContext(null);\nPanelGroupContext.displayName = \"PanelGroupContext\";\n\nconst DATA_ATTRIBUTES = {\n group: \"data-panel-group\",\n groupDirection: \"data-panel-group-direction\",\n groupId: \"data-panel-group-id\",\n panel: \"data-panel\",\n panelCollapsible: \"data-panel-collapsible\",\n panelId: \"data-panel-id\",\n panelSize: \"data-panel-size\",\n resizeHandle: \"data-resize-handle\",\n resizeHandleActive: \"data-resize-handle-active\",\n resizeHandleEnabled: \"data-panel-resize-handle-enabled\",\n resizeHandleId: \"data-panel-resize-handle-id\",\n resizeHandleState: \"data-resize-handle-state\"\n};\nconst PRECISION = 10;\n\nconst useId = React[\"useId\".toString()];\nconst wrappedUseId = typeof useId === \"function\" ? useId : () => null;\nlet counter = 0;\nfunction useUniqueId(idFromParams = null) {\n const idFromUseId = wrappedUseId();\n const idRef = useRef(idFromParams || idFromUseId || null);\n if (idRef.current === null) {\n idRef.current = \"\" + counter++;\n }\n return idFromParams !== null && idFromParams !== void 0 ? idFromParams : idRef.current;\n}\n\nfunction PanelWithForwardedRef({\n children,\n className: classNameFromProps = \"\",\n collapsedSize,\n collapsible,\n defaultSize,\n forwardedRef,\n id: idFromProps,\n maxSize,\n minSize,\n onCollapse,\n onExpand,\n onResize,\n order,\n style: styleFromProps,\n tagName: Type = \"div\",\n ...rest\n}) {\n const context = useContext(PanelGroupContext);\n if (context === null) {\n throw Error(`Panel components must be rendered within a PanelGroup container`);\n }\n const {\n collapsePanel,\n expandPanel,\n getPanelSize,\n getPanelStyle,\n groupId,\n isPanelCollapsed,\n reevaluatePanelConstraints,\n registerPanel,\n resizePanel,\n unregisterPanel\n } = context;\n const panelId = useUniqueId(idFromProps);\n const panelDataRef = useRef({\n callbacks: {\n onCollapse,\n onExpand,\n onResize\n },\n constraints: {\n collapsedSize,\n collapsible,\n defaultSize,\n maxSize,\n minSize\n },\n id: panelId,\n idIsFromProps: idFromProps !== undefined,\n order\n });\n useRef({\n didLogMissingDefaultSizeWarning: false\n });\n useImperativeHandle(forwardedRef, () => ({\n collapse: () => {\n collapsePanel(panelDataRef.current);\n },\n expand: minSize => {\n expandPanel(panelDataRef.current, minSize);\n },\n getId() {\n return panelId;\n },\n getSize() {\n return getPanelSize(panelDataRef.current);\n },\n isCollapsed() {\n return isPanelCollapsed(panelDataRef.current);\n },\n isExpanded() {\n return !isPanelCollapsed(panelDataRef.current);\n },\n resize: size => {\n resizePanel(panelDataRef.current, size);\n }\n }), [collapsePanel, expandPanel, getPanelSize, isPanelCollapsed, panelId, resizePanel]);\n const style = getPanelStyle(panelDataRef.current, defaultSize);\n return createElement(Type, {\n ...rest,\n children,\n className: classNameFromProps,\n id: panelId,\n style: {\n ...style,\n ...styleFromProps\n },\n // CSS selectors\n [DATA_ATTRIBUTES.groupId]: groupId,\n [DATA_ATTRIBUTES.panel]: \"\",\n [DATA_ATTRIBUTES.panelCollapsible]: collapsible || undefined,\n [DATA_ATTRIBUTES.panelId]: panelId,\n [DATA_ATTRIBUTES.panelSize]: parseFloat(\"\" + style.flexGrow).toFixed(1)\n });\n}\nconst Panel = forwardRef((props, ref) => createElement(PanelWithForwardedRef, {\n ...props,\n forwardedRef: ref\n}));\nPanelWithForwardedRef.displayName = \"Panel\";\nPanel.displayName = \"forwardRef(Panel)\";\n\nlet nonce;\nfunction getNonce() {\n return nonce;\n}\nfunction setNonce(value) {\n nonce = value;\n}\n\nlet currentCursorStyle = null;\nlet enabled = true;\nlet prevRuleIndex = -1;\nlet styleElement = null;\nfunction disableGlobalCursorStyles() {\n enabled = false;\n}\nfunction enableGlobalCursorStyles() {\n enabled = true;\n}\nfunction getCursorStyle(state, constraintFlags) {\n if (constraintFlags) {\n const horizontalMin = (constraintFlags & EXCEEDED_HORIZONTAL_MIN) !== 0;\n const horizontalMax = (constraintFlags & EXCEEDED_HORIZONTAL_MAX) !== 0;\n const verticalMin = (constraintFlags & EXCEEDED_VERTICAL_MIN) !== 0;\n const verticalMax = (constraintFlags & EXCEEDED_VERTICAL_MAX) !== 0;\n if (horizontalMin) {\n if (verticalMin) {\n return \"se-resize\";\n } else if (verticalMax) {\n return \"ne-resize\";\n } else {\n return \"e-resize\";\n }\n } else if (horizontalMax) {\n if (verticalMin) {\n return \"sw-resize\";\n } else if (verticalMax) {\n return \"nw-resize\";\n } else {\n return \"w-resize\";\n }\n } else if (verticalMin) {\n return \"s-resize\";\n } else if (verticalMax) {\n return \"n-resize\";\n }\n }\n switch (state) {\n case \"horizontal\":\n return \"ew-resize\";\n case \"intersection\":\n return \"move\";\n case \"vertical\":\n return \"ns-resize\";\n }\n}\nfunction resetGlobalCursorStyle() {\n if (styleElement !== null) {\n document.head.removeChild(styleElement);\n currentCursorStyle = null;\n styleElement = null;\n prevRuleIndex = -1;\n }\n}\nfunction setGlobalCursorStyle(state, constraintFlags) {\n var _styleElement$sheet$i, _styleElement$sheet2;\n if (!enabled) {\n return;\n }\n const style = getCursorStyle(state, constraintFlags);\n if (currentCursorStyle === style) {\n return;\n }\n currentCursorStyle = style;\n if (styleElement === null) {\n styleElement = document.createElement(\"style\");\n const nonce = getNonce();\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n document.head.appendChild(styleElement);\n }\n if (prevRuleIndex >= 0) {\n var _styleElement$sheet;\n (_styleElement$sheet = styleElement.sheet) === null || _styleElement$sheet === void 0 ? void 0 : _styleElement$sheet.removeRule(prevRuleIndex);\n }\n prevRuleIndex = (_styleElement$sheet$i = (_styleElement$sheet2 = styleElement.sheet) === null || _styleElement$sheet2 === void 0 ? void 0 : _styleElement$sheet2.insertRule(`*{cursor: ${style} !important;}`)) !== null && _styleElement$sheet$i !== void 0 ? _styleElement$sheet$i : -1;\n}\n\nfunction isKeyDown(event) {\n return event.type === \"keydown\";\n}\nfunction isPointerEvent(event) {\n return event.type.startsWith(\"pointer\");\n}\nfunction isMouseEvent(event) {\n return event.type.startsWith(\"mouse\");\n}\n\nfunction getResizeEventCoordinates(event) {\n if (isPointerEvent(event)) {\n if (event.isPrimary) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n } else if (isMouseEvent(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n }\n return {\n x: Infinity,\n y: Infinity\n };\n}\n\nfunction getInputType() {\n if (typeof matchMedia === \"function\") {\n return matchMedia(\"(pointer:coarse)\").matches ? \"coarse\" : \"fine\";\n }\n}\n\nfunction intersects(rectOne, rectTwo, strict) {\n if (strict) {\n return rectOne.x < rectTwo.x + rectTwo.width && rectOne.x + rectOne.width > rectTwo.x && rectOne.y < rectTwo.y + rectTwo.height && rectOne.y + rectOne.height > rectTwo.y;\n } else {\n return rectOne.x <= rectTwo.x + rectTwo.width && rectOne.x + rectOne.width >= rectTwo.x && rectOne.y <= rectTwo.y + rectTwo.height && rectOne.y + rectOne.height >= rectTwo.y;\n }\n}\n\n// Forked from NPM stacking-order@2.0.0\n\n/**\n * Determine which of two nodes appears in front of the other —\n * if `a` is in front, returns 1, otherwise returns -1\n * @param {HTMLElement | SVGElement} a\n * @param {HTMLElement | SVGElement} b\n */\nfunction compare(a, b) {\n if (a === b) throw new Error(\"Cannot compare node with itself\");\n const ancestors = {\n a: get_ancestors(a),\n b: get_ancestors(b)\n };\n let common_ancestor;\n\n // remove shared ancestors\n while (ancestors.a.at(-1) === ancestors.b.at(-1)) {\n a = ancestors.a.pop();\n b = ancestors.b.pop();\n common_ancestor = a;\n }\n assert(common_ancestor, \"Stacking order can only be calculated for elements with a common ancestor\");\n const z_indexes = {\n a: get_z_index(find_stacking_context(ancestors.a)),\n b: get_z_index(find_stacking_context(ancestors.b))\n };\n if (z_indexes.a === z_indexes.b) {\n const children = common_ancestor.childNodes;\n const furthest_ancestors = {\n a: ancestors.a.at(-1),\n b: ancestors.b.at(-1)\n };\n let i = children.length;\n while (i--) {\n const child = children[i];\n if (child === furthest_ancestors.a) return 1;\n if (child === furthest_ancestors.b) return -1;\n }\n }\n return Math.sign(z_indexes.a - z_indexes.b);\n}\nconst props = /\\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\\b/;\n\n/** @param {HTMLElement | SVGElement} node */\nfunction is_flex_item(node) {\n var _get_parent;\n // @ts-ignore\n const display = getComputedStyle((_get_parent = get_parent(node)) !== null && _get_parent !== void 0 ? _get_parent : node).display;\n return display === \"flex\" || display === \"inline-flex\";\n}\n\n/** @param {HTMLElement | SVGElement} node */\nfunction creates_stacking_context(node) {\n const style = getComputedStyle(node);\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n if (style.position === \"fixed\") return true;\n // Forked to fix upstream bug https://github.com/Rich-Harris/stacking-order/issues/3\n // if (\n // (style.zIndex !== \"auto\" && style.position !== \"static\") ||\n // is_flex_item(node)\n // )\n if (style.zIndex !== \"auto\" && (style.position !== \"static\" || is_flex_item(node))) return true;\n if (+style.opacity < 1) return true;\n if (\"transform\" in style && style.transform !== \"none\") return true;\n if (\"webkitTransform\" in style && style.webkitTransform !== \"none\") return true;\n if (\"mixBlendMode\" in style && style.mixBlendMode !== \"normal\") return true;\n if (\"filter\" in style && style.filter !== \"none\") return true;\n if (\"webkitFilter\" in style && style.webkitFilter !== \"none\") return true;\n if (\"isolation\" in style && style.isolation === \"isolate\") return true;\n if (props.test(style.willChange)) return true;\n // @ts-expect-error\n if (style.webkitOverflowScrolling === \"touch\") return true;\n return false;\n}\n\n/** @param {(HTMLElement| SVGElement)[]} nodes */\nfunction find_stacking_context(nodes) {\n let i = nodes.length;\n while (i--) {\n const node = nodes[i];\n assert(node, \"Missing node\");\n if (creates_stacking_context(node)) return node;\n }\n return null;\n}\n\n/** @param {HTMLElement | SVGElement} node */\nfunction get_z_index(node) {\n return node && Number(getComputedStyle(node).zIndex) || 0;\n}\n\n/** @param {HTMLElement} node */\nfunction get_ancestors(node) {\n const ancestors = [];\n while (node) {\n ancestors.push(node);\n // @ts-ignore\n node = get_parent(node);\n }\n return ancestors; // [ node, ... <body>, <html>, document ]\n}\n\n/** @param {HTMLElement} node */\nfunction get_parent(node) {\n const {\n parentNode\n } = node;\n if (parentNode && parentNode instanceof ShadowRoot) {\n return parentNode.host;\n }\n return parentNode;\n}\n\nconst EXCEEDED_HORIZONTAL_MIN = 0b0001;\nconst EXCEEDED_HORIZONTAL_MAX = 0b0010;\nconst EXCEEDED_VERTICAL_MIN = 0b0100;\nconst EXCEEDED_VERTICAL_MAX = 0b1000;\nconst isCoarsePointer = getInputType() === \"coarse\";\nlet intersectingHandles = [];\nlet isPointerDown = false;\nlet ownerDocumentCounts = new Map();\nlet panelConstraintFlags = new Map();\nconst registeredResizeHandlers = new Set();\nfunction registerResizeHandle(resizeHandleId, element, direction, hitAreaMargins, setResizeHandlerState) {\n var _ownerDocumentCounts$;\n const {\n ownerDocument\n } = element;\n const data = {\n direction,\n element,\n hitAreaMargins,\n setResizeHandlerState\n };\n const count = (_ownerDocumentCounts$ = ownerDocumentCounts.get(ownerDocument)) !== null && _ownerDocumentCounts$ !== void 0 ? _ownerDocumentCounts$ : 0;\n ownerDocumentCounts.set(ownerDocument, count + 1);\n registeredResizeHandlers.add(data);\n updateListeners();\n return function unregisterResizeHandle() {\n var _ownerDocumentCounts$2;\n panelConstraintFlags.delete(resizeHandleId);\n registeredResizeHandlers.delete(data);\n const count = (_ownerDocumentCounts$2 = ownerDocumentCounts.get(ownerDocument)) !== null && _ownerDocumentCounts$2 !== void 0 ? _ownerDocumentCounts$2 : 1;\n ownerDocumentCounts.set(ownerDocument, count - 1);\n updateListeners();\n if (count === 1) {\n ownerDocumentCounts.delete(ownerDocument);\n }\n\n // If the resize handle that is currently unmounting is intersecting with the pointer,\n // update the global pointer to account for the change\n if (intersectingHandles.includes(data)) {\n const index = intersectingHandles.indexOf(data);\n if (index >= 0) {\n intersectingHandles.splice(index, 1);\n }\n updateCursor();\n\n // Also instruct the handle to stop dragging; this prevents the parent group from being left in an inconsistent state\n // See github.com/bvaughn/react-resizable-panels/issues/402\n setResizeHandlerState(\"up\", true, null);\n }\n };\n}\nfunction handlePointerDown(event) {\n const {\n target\n } = event;\n const {\n x,\n y\n } = getResizeEventCoordinates(event);\n isPointerDown = true;\n recalculateIntersectingHandles({\n target,\n x,\n y\n });\n updateListeners();\n if (intersectingHandles.length > 0) {\n updateResizeHandlerStates(\"down\", event);\n event.preventDefault();\n if (!isWithinResizeHandle(target)) {\n event.stopImmediatePropagation();\n }\n }\n}\nfunction handlePointerMove(event) {\n const {\n x,\n y\n } = getResizeEventCoordinates(event);\n\n // Edge case (see #340)\n // Detect when the pointer has been released outside an iframe on a different domain\n if (isPointerDown && event.buttons === 0) {\n isPointerDown = false;\n updateResizeHandlerStates(\"up\", event);\n }\n if (!isPointerDown) {\n const {\n target\n } = event;\n\n // Recalculate intersecting handles whenever the pointer moves, except if it has already been pressed\n // at that point, the handles may not move with the pointer (depending on constraints)\n // but the same set of active handles should be locked until the pointer is released\n recalculateIntersectingHandles({\n target,\n x,\n y\n });\n }\n updateResizeHandlerStates(\"move\", event);\n\n // Update cursor based on return value(s) from active handles\n updateCursor();\n if (intersectingHandles.length > 0) {\n event.preventDefault();\n }\n}\nfunction handlePointerUp(event) {\n const {\n target\n } = event;\n const {\n x,\n y\n } = getResizeEventCoordinates(event);\n panelConstraintFlags.clear();\n isPointerDown = false;\n if (intersectingHandles.length > 0) {\n event.preventDefault();\n if (!isWithinResizeHandle(target)) {\n event.stopImmediatePropagation();\n }\n }\n updateResizeHandlerStates(\"up\", event);\n recalculateIntersectingHandles({\n target,\n x,\n y\n });\n updateCursor();\n updateListeners();\n}\nfunction isWithinResizeHandle(element) {\n let currentElement = element;\n while (currentElement) {\n if (currentElement.hasAttribute(DATA_ATTRIBUTES.resizeHandle)) {\n return true;\n }\n currentElement = currentElement.parentElement;\n }\n return false;\n}\nfunction recalculateIntersectingHandles({\n target,\n x,\n y\n}) {\n intersectingHandles.splice(0);\n let targetElement = null;\n if (target instanceof HTMLElement || target instanceof SVGElement) {\n targetElement = target;\n }\n registeredResizeHandlers.forEach(data => {\n const {\n element: dragHandleElement,\n hitAreaMargins\n } = data;\n const dragHandleRect = dragHandleElement.getBoundingClientRect();\n const {\n bottom,\n left,\n right,\n top\n } = dragHandleRect;\n const margin = isCoarsePointer ? hitAreaMargins.coarse : hitAreaMargins.fine;\n const eventIntersects = x >= left - margin && x <= right + margin && y >= top - margin && y <= bottom + margin;\n if (eventIntersects) {\n // TRICKY\n // We listen for pointers events at the root in order to support hit area margins\n // (determining when the pointer is close enough to an element to be considered a \"hit\")\n // Clicking on an element \"above\" a handle (e.g. a modal) should prevent a hit though\n // so at this point we need to compare stacking order of a potentially intersecting drag handle,\n // and the element that was actually clicked/touched\n if (targetElement !== null && document.contains(targetElement) && dragHandleElement !== targetElement && !dragHandleElement.contains(targetElement) && !targetElement.contains(dragHandleElement) &&\n // Calculating stacking order has a cost, so we should avoid it if possible\n // That is why we only check potentially intersecting handles,\n // and why we skip if the event target is within the handle's DOM\n compare(targetElement, dragHandleElement) > 0) {\n // If the target is above the drag handle, then we also need to confirm they overlap\n // If they are beside each other (e.g. a panel and its drag handle) then the handle is still interactive\n //\n // It's not enough to compare only the target\n // The target might be a small element inside of a larger container\n // (For example, a SPAN or a DIV inside of a larger modal dialog)\n let currentElement = targetElement;\n let didIntersect = false;\n while (currentElement) {\n if (currentElement.contains(dragHandleElement)) {\n break;\n } else if (intersects(currentElement.getBoundingClientRect(), dragHandleRect, true)) {\n didIntersect = true;\n break;\n }\n currentElement = currentElement.parentElement;\n }\n if (didIntersect) {\n return;\n }\n }\n intersectingHandles.push(data);\n }\n });\n}\nfunction reportConstraintsViolation(resizeHandleId, flag) {\n panelConstraintFlags.set(resizeHandleId, flag);\n}\nfunction updateCursor() {\n let intersectsHorizontal = false;\n let intersectsVertical = false;\n intersectingHandles.forEach(data => {\n const {\n direction\n } = data;\n if (direction === \"horizontal\") {\n intersectsHorizontal = true;\n } else {\n intersectsVertical = true;\n }\n });\n let constraintFlags = 0;\n panelConstraintFlags.forEach(flag => {\n constraintFlags |= flag;\n });\n if (intersectsHorizontal && intersectsVertical) {\n setGlobalCursorStyle(\"intersection\", constraintFlags);\n } else if (intersectsHorizontal) {\n setGlobalCursorStyle(\"horizontal\", constraintFlags);\n } else if (intersectsVertical) {\n setGlobalCursorStyle(\"vertical\", constraintFlags);\n } else {\n resetGlobalCursorStyle();\n }\n}\nlet listenersAbortController;\nfunction updateListeners() {\n var _listenersAbortContro;\n (_listenersAbortContro = listenersAbortController) === null || _listenersAbortContro === void 0 ? void 0 : _listenersAbortContro.abort();\n listenersAbortController = new AbortController();\n const options = {\n capture: true,\n signal: listenersAbortController.signal\n };\n if (!registeredResizeHandlers.size) {\n return;\n }\n if (isPointerDown) {\n if (intersectingHandles.length > 0) {\n ownerDocumentCounts.forEach((count, ownerDocument) => {\n const {\n body\n } = ownerDocument;\n if (count > 0) {\n body.addEventListener(\"contextmenu\", handlePointerUp, options);\n body.addEventListener(\"pointerleave\", handlePointerMove, options);\n body.addEventListener(\"pointermove\", handlePointerMove, options);\n }\n });\n }\n ownerDocumentCounts.forEach((_, ownerDocument) => {\n const {\n body\n } = ownerDocument;\n body.addEventListener(\"pointerup\", handlePointerUp, options);\n body.addEventListener(\"pointercancel\", handlePointerUp, options);\n });\n } else {\n ownerDocumentCounts.forEach((count, ownerDocument) => {\n const {\n body\n } = ownerDocument;\n if (count > 0) {\n body.addEventListener(\"pointerdown\", handlePointerDown, options);\n body.addEventListener(\"pointermove\", handlePointerMove, options);\n }\n });\n }\n}\nfunction updateResizeHandlerStates(action, event) {\n registeredResizeHandlers.forEach(data => {\n const {\n setResizeHandlerState\n } = data;\n const isActive = intersectingHandles.includes(data);\n setResizeHandlerState(action, isActive, event);\n });\n}\n\nfunction useForceUpdate() {\n const [_, setCount] = useState(0);\n return useCallback(() => setCount(prevCount => prevCount + 1), []);\n}\n\nfunction assert(expectedCondition, message) {\n if (!expectedCondition) {\n console.error(message);\n throw Error(message);\n }\n}\n\nfunction fuzzyCompareNumbers(actual, expected, fractionDigits = PRECISION) {\n if (actual.toFixed(fractionDigits) === expected.toFixed(fractionDigits)) {\n return 0;\n } else {\n return actual > expected ? 1 : -1;\n }\n}\nfunction fuzzyNumbersEqual$1(actual, expected, fractionDigits = PRECISION) {\n return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;\n}\n\nfunction fuzzyNumbersEqual(actual, expected, fractionDigits) {\n return fuzzyCompareNumbers(actual, expected, fractionDigits) === 0;\n}\n\nfunction fuzzyLayoutsEqual(actual, expected, fractionDigits) {\n if (actual.length !== expected.length) {\n return false;\n }\n for (let index = 0; index < actual.length; index++) {\n const actualSize = actual[index];\n const expectedSize = expected[index];\n if (!fuzzyNumbersEqual(actualSize, expectedSize, fractionDigits)) {\n return false;\n }\n }\n return true;\n}\n\n// Panel size must be in percentages; pixel values should be pre-converted\nfunction resizePanel({\n panelConstraints: panelConstraintsArray,\n panelIndex,\n size\n}) {\n const panelConstraints = panelConstraintsArray[panelIndex];\n assert(panelConstraints != null, `Panel constraints not found for index ${panelIndex}`);\n let {\n collapsedSize = 0,\n collapsible,\n maxSize = 100,\n minSize = 0\n } = panelConstraints;\n if (fuzzyCompareNumbers(size, minSize) < 0) {\n if (collapsible) {\n // Collapsible panels should snap closed or open only once they cross the halfway point between collapsed and min size.\n const halfwayPoint = (collapsedSize + minSize) / 2;\n if (fuzzyCompareNumbers(size, halfwayPoint) < 0) {\n size = collapsedSize;\n } else {\n size = minSize;\n }\n } else {\n size = minSize;\n }\n }\n size = Math.min(maxSize, size);\n size = parseFloat(size.toFixed(PRECISION));\n return size;\n}\n\n// All units must be in percentages; pixel values should be pre-converted\nfunction adjustLayoutByDelta({\n delta,\n initialLayout,\n panelConstraints: panelConstraintsArray,\n pivotIndices,\n prevLayout,\n trigger\n}) {\n if (fuzzyNumbersEqual(delta, 0)) {\n return initialLayout;\n }\n const nextLayout = [...initialLayout];\n const [firstPivotIndex, secondPivotIndex] = pivotIndices;\n assert(firstPivotIndex != null, \"Invalid first pivot index\");\n assert(secondPivotIndex != null, \"Invalid second pivot index\");\n let deltaApplied = 0;\n\n // const DEBUG = [];\n // DEBUG.push(`adjustLayoutByDelta()`);\n // DEBUG.push(` initialLayout: ${initialLayout.join(\", \")}`);\n // DEBUG.push(` prevLayout: ${prevLayout.join(\", \")}`);\n // DEBUG.push(` delta: ${delta}`);\n // DEBUG.push(` pivotIndices: ${pivotIndices.join(\", \")}`);\n // DEBUG.push(` trigger: ${trigger}`);\n // DEBUG.push(\"\");\n\n // A resizing panel affects the panels before or after it.\n //\n // A negative delta means the panel(s) immediately after the resize handle should grow/expand by decreasing its offset.\n // Other panels may also need to shrink/contract (and shift) to make room, depending on the min weights.\n //\n // A positive delta means the panel(s) immediately before the resize handle should \"expand\".\n // This is accomplished by shrinking/contracting (and shifting) one or more of the panels after the resize handle.\n\n {\n // If this is a resize triggered by a keyboard event, our logic for expanding/collapsing is different.\n // We no longer check the halfway threshold because this may prevent the panel from expanding at all.\n if (trigger === \"keyboard\") {\n {\n // Check if we should expand a collapsed panel\n const index = delta < 0 ? secondPivotIndex : firstPivotIndex;\n const panelConstraints = panelConstraintsArray[index];\n assert(panelConstraints, `Panel constraints not found for index ${index}`);\n const {\n collapsedSize = 0,\n collapsible,\n minSize = 0\n } = panelConstraints;\n\n // DEBUG.push(`edge case check 1: ${index}`);\n // DEBUG.push(` -> collapsible? ${collapsible}`);\n if (collapsible) {\n const prevSize = initialLayout[index];\n assert(prevSize != null, `Previous layout not found for panel index ${index}`);\n if (fuzzyNumbersEqual(prevSize, collapsedSize)) {\n const localDelta = minSize - prevSize;\n // DEBUG.push(` -> expand delta: ${localDelta}`);\n\n if (fuzzyCompareNumbers(localDelta, Math.abs(delta)) > 0) {\n delta = delta < 0 ? 0 - localDelta : localDelta;\n // DEBUG.push(` -> delta: ${delta}`);\n }\n }\n }\n }\n\n {\n // Check if we should collapse a panel at its minimum size\n const index = delta < 0 ? firstPivotIndex : secondPivotIndex;\n const panelConstraints = panelConstraintsArray[index];\n assert(panelConstraints, `No panel constraints found for index ${index}`);\n const {\n collapsedSize = 0,\n collapsible,\n minSize = 0\n } = panelConstraints;\n\n // DEBUG.push(`edge case check 2: ${index}`);\n // DEBUG.push(` -> collapsible? ${collapsible}`);\n if (collapsible) {\n const prevSize = initialLayout[index];\n assert(prevSize != null, `Previous layout not found for panel index ${index}`);\n if (fuzzyNumbersEqual(prevSize, minSize)) {\n const localDelta = prevSize - collapsedSize;\n // DEBUG.push(` -> expand delta: ${localDelta}`);\n\n if (fuzzyCompareNumbers(localDelta, Math.abs(delta)) > 0) {\n delta = delta < 0 ? 0 - localDelta : localDelta;\n // DEBUG.push(` -> delta: ${delta}`);\n }\n }\n }\n }\n }\n // DEBUG.push(\"\");\n }\n\n {\n // Pre-calculate max available delta in the opposite direction of our pivot.\n // This will be the maximum amount we're allowed to expand/contract the panels in the primary direction.\n // If this amount is less than the requested delta, adjust the requested delta.\n // If this amount is greater than the requested delta, that's useful information too–\n // as an expanding panel might change from collapsed to min size.\n\n const increment = delta < 0 ? 1 : -1;\n let index = delta < 0 ? secondPivotIndex : firstPivotIndex;\n let maxAvailableDelta = 0;\n\n // DEBUG.push(\"pre calc...\");\n while (true) {\n const prevSize = initialLayout[index];\n assert(prevSize != null, `Previous layout not found for panel index ${index}`);\n const maxSafeSize = resizePanel({\n panelConstraints: panelConstraintsArray,\n panelIndex: index,\n size: 100\n });\n const delta = maxSafeSize - prevSize;\n // DEBUG.push(` ${index}: ${prevSize} -> ${maxSafeSize}`);\n\n maxAvailableDelta += delta;\n index += increment;\n if (index < 0 || index >= panelConstraintsArray.length) {\n break;\n }\n }\n\n // DEBUG.push(` -> max available delta: ${maxAvailableDelta}`);\n const minAbsDelta = Math.min(Math.abs(delta), Math.abs(maxAvailableDelta));\n delta = delta < 0 ? 0 - minAbsDelta : minAbsDelta;\n // DEBUG.push(` -> adjusted delta: ${delta}`);\n // DEBUG.push(\"\");\n }\n\n {\n // Delta added to a panel needs to be subtracted from other panels (within the constraints that those panels allow).\n\n const pivotIndex = delta < 0 ? firstPivotIndex : secondPivotIndex;\n let index = pivotIndex;\n while (index >= 0 && index < panelConstraintsArray.length) {\n const deltaRemaining = Math.abs(delta) - Math.abs(deltaApplied);\n const prevSize = initialLayout[index];\n assert(prevSize != null, `Previous layout not found for panel index ${index}`);\n const unsafeSize = prevSize - deltaRemaining;\n const safeSize = resizePanel({\n panelConstraints: panelConstraintsArray,\n panelIndex: index,\n size: unsafeSize\n });\n if (!fuzzyNumbersEqual(prevSize, safeSize)) {\n deltaApplied += prevSize - safeSize;\n nextLayout[index] = safeSize;\n if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {\n numeric: true\n }) >= 0) {\n break;\n }\n }\n if (delta < 0) {\n index--;\n } else {\n index++;\n }\n }\n }\n // DEBUG.push(`after 1: ${nextLayout.join(\", \")}`);\n // DEBUG.push(` deltaApplied: ${deltaApplied}`);\n // DEBUG.push(\"\");\n\n // If we were unable to resize any of the panels panels, return the previous state.\n // This will essentially bailout and ignore e.g. drags past a panel's boundaries\n if (fuzzyLayoutsEqual(prevLayout, nextLayout)) {\n // DEBUG.push(`bailout to previous layout: ${prevLayout.join(\", \")}`);\n // console.log(DEBUG.join(\"\\n\"));\n\n return prevLayout;\n }\n {\n // Now distribute the applied delta to the panels in the other direction\n const pivotIndex = delta < 0 ? secondPivotIndex : firstPivotIndex;\n const prevSize = initialLayout[pivotIndex];\n assert(prevSize != null, `Previous layout not found for panel index ${pivotIndex}`);\n const unsafeSize = prevSize + deltaApplied;\n const safeSize = resizePanel({\n panelConstraints: panelConstraintsArray,\n panelIndex: pivotIndex,\n size: unsafeSize\n });\n\n // Adjust the pivot panel before, but only by the amount that surrounding panels were able to shrink/contract.\n nextLayout[pivotIndex] = safeSize;\n\n // Edge case where expanding or contracting one panel caused another one to change collapsed state\n if (!fuzzyNumbersEqual(safeSize, unsafeSize)) {\n let deltaRemaining = unsafeSize - safeSize;\n const pivotIndex = delta < 0 ? secondPivotIndex : firstPivotIndex;\n let index = pivotIndex;\n while (index >= 0 && index < panelConstraintsArray.length) {\n const prevSize = nextLayout[index];\n assert(prevSize != null, `Previous layout not found for panel index ${index}`);\n const unsafeSize = prevSize + deltaRemaining;\n const safeSize = resizePanel({\n panelConstraints: panelConstraintsArray,\n panelIndex: index,\n size: unsafeSize\n });\n if (!fuzzyNumbersEqual(prevSize, safeSize)) {\n deltaRemaining -= safeSize - prevSize;\n nextLayout[index] = safeSize;\n }\n if (fuzzyNumbersEqual(deltaRemaining, 0)) {\n break;\n }\n if (delta > 0) {\n index--;\n } else {\n index++;\n }\n }\n }\n }\n // DEBUG.push(`after 2: ${nextLayout.join(\", \")}`);\n // DEBUG.push(` deltaApplied: ${deltaApplied}`);\n // DEBUG.push(\"\");\n\n const totalSize = nextLayout.reduce((total, size) => size + total, 0);\n // DEBUG.push(`total size: ${totalSize}`);\n\n // If our new layout doesn't add up to 100%, that means the requested delta can't be applied\n // In that case, fall back to our most recent valid layout\n if (!fuzzyNumbersEqual(totalSize, 100)) {\n // DEBUG.push(`bailout to previous layout: ${prevLayout.join(\", \")}`);\n // console.log(DEBUG.join(\"\\n\"));\n\n return prevLayout;\n }\n\n // console.log(DEBUG.join(\"\\n\"));\n return nextLayout;\n}\n\nfunction getResizeHandleElementsForGroup(groupId, scope = document) {\n return Array.from(scope.querySelectorAll(`[${DATA_ATTRIBUTES.resizeHandleId}][data-panel-group-id=\"${groupId}\"]`));\n}\n\nfunction getResizeHandleElementIndex(groupId, id, scope = document) {\n const handles = getResizeHandleElementsForGroup(groupId, scope);\n const index = handles.findIndex(handle => handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId) === id);\n return index !== null && index !== void 0 ? index : null;\n}\n\nfunction determinePivotIndices(groupId, dragHandleId, panelGroupElement) {\n const index = getResizeHandleElementIndex(groupId, dragHandleId, panelGroupElement);\n return index != null ? [index, index + 1] : [-1, -1];\n}\n\nfunction isHTMLElement(target) {\n if (target instanceof HTMLElement) {\n return true;\n }\n\n // Fallback to duck typing to handle edge case of portals within a popup window\n return typeof target === \"object\" && target !== null && \"tagName\" in target && \"getAttribute\" in target;\n}\n\nfunction getPanelGroupElement(id, rootElement = document) {\n // If the root element is the PanelGroup\n if (isHTMLElement(rootElement) && rootElement.dataset.panelGroupId == id) {\n return rootElement;\n }\n\n // Else query children\n const element = rootElement.querySelector(`[data-panel-group][data-panel-group-id=\"${id}\"]`);\n if (element) {\n return element;\n }\n return null;\n}\n\nfunction getResizeHandleElement(id, scope = document) {\n const element = scope.querySelector(`[${DATA_ATTRIBUTES.resizeHandleId}=\"${id}\"]`);\n if (element) {\n return element;\n }\n return null;\n}\n\nfunction getResizeHandlePanelIds(groupId, handleId, panelsArray, scope = document) {\n var _panelsArray$index$id, _panelsArray$index, _panelsArray$id, _panelsArray;\n const handle = getResizeHandleElement(handleId, scope);\n const handles = getResizeHandleElementsForGroup(groupId, scope);\n const index = handle ? handles.indexOf(handle) : -1;\n const idBefore = (_panelsArray$index$id = (_panelsArray$index = panelsArray[index]) === null || _panelsArray$index === void 0 ? void 0 : _panelsArray$index.id) !== null && _panelsArray$index$id !== void 0 ? _panelsArray$index$id : null;\n const idAfter = (_panelsArray$id = (_panelsArray = panelsArray[index + 1]) === null || _panelsArray === void 0 ? void 0 : _panelsArray.id) !== null && _panelsArray$id !== void 0 ? _panelsArray$id : null;\n return [idBefore, idAfter];\n}\n\n// https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n\nfunction useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n eagerValuesRef,\n groupId,\n layout,\n panelDataArray,\n panelGroupElement,\n setLayout\n}) {\n useRef({\n didWarnAboutMissingResizeHandle: false\n });\n useEffect(() => {\n if (!panelGroupElement) {\n return;\n }\n const eagerValues = eagerValuesRef.current;\n assert(eagerValues, `Eager values not found`);\n const {\n panelDataArray\n } = eagerValues;\n const groupElement = getPanelGroupElement(groupId, panelGroupElement);\n assert(groupElement != null, `No group found for id \"${groupId}\"`);\n const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);\n assert(handles, `No resize handles found for group id \"${groupId}\"`);\n const cleanupFunctions = handles.map(handle => {\n const handleId = handle.getAttribute(DATA_ATTRIBUTES.resizeHandleId);\n assert(handleId, `Resize handle element has no handle id attribute`);\n const [idBefore, idAfter] = getResizeHandlePanelIds(groupId, handleId, panelDataArray, panelGroupElement);\n if (idBefore == null || idAfter == null) {\n return () => {};\n }\n const onKeyDown = event => {\n if (event.defaultPrevented) {\n return;\n }\n switch (event.key) {\n case \"Enter\":\n {\n event.preventDefault();\n const index = panelDataArray.findIndex(panelData => panelData.id === idBefore);\n if (index >= 0) {\n const panelData = panelDataArray[index];\n assert(panelData, `No panel data found for index ${index}`);\n const size = layout[index];\n const {\n collapsedSize = 0,\n collapsible,\n minSize = 0\n } = panelData.constraints;\n if (size != null && collapsible) {\n const nextLayout = adjustLayoutByDelta({\n delta: fuzzyNumbersEqual(size, collapsedSize) ? minSize - collapsedSize : collapsedSize - size,\n initialLayout: layout,\n panelConstraints: panelDataArray.map(panelData => panelData.constraints),\n pivotIndices: determinePivotIndices(groupId, handleId, panelGroupElement),\n prevLayout: layout,\n trigger: \"keyboard\"\n });\n if (layout !== nextLayout) {\n setLayout(nextLayout);\n }\n }\n }\n break;\n }\n }\n };\n handle.addEventListener(\"keydown\", onKeyDown);\n return () => {\n handle.removeEventListener(\"keydown\", onKeyDown);\n };\n });\n return () => {\n cleanupFunctions.forEach(cleanupFunction => cleanupFunction());\n };\n }, [panelGroupElement, committedValuesRef, eagerValuesRef, groupId, layout, panelDataArray, setLayout]);\n}\n\nfunction areEqual(arrayA, arrayB) {\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n for (let index = 0; index < arrayA.length; index++) {\n if (arrayA[index] !== arrayB[index]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getResizeEventCursorPosition(direction, event) {\n const isHorizontal = direction === \"horizontal\";\n const {\n x,\n y\n } = getResizeEventCoordinates(event);\n return isHorizontal ? x : y;\n}\n\nfunction calculateDragOffsetPercentage(event, dragHandleId, direction, initialDragState, panelGroupElement) {\n const isHorizontal = direction === \"horizontal\";\n const handleElement = getResizeHandleElement(dragHandleId, panelGroupElement);\n assert(handleElement, `No resize handle element found for id \"${dragHandleId}\"`);\n const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);\n assert(groupId, `Resize handle element has no group id attribute`);\n let {\n initialCursorPosition\n } = initialDragState;\n const cursorPosition = getResizeEventCursorPosition(direction, event);\n const groupElement = getPanelGroupElement(groupId, panelGroupElement);\n assert(groupElement, `No group element found for id \"${groupId}\"`);\n const groupRect = groupElement.getBoundingClientRect();\n const groupSizeInPixels = isHorizontal ? groupRect.width : groupRect.height;\n const offsetPixels = cursorPosition - initialCursorPosition;\n const offsetPercentage = offsetPixels / groupSizeInPixels * 100;\n return offsetPercentage;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX\nfunction calculateDeltaPercentage(event, dragHandleId, direction, initialDragState, keyboardResizeBy, panelGroupElement) {\n if (isKeyDown(event)) {\n const isHorizontal = direction === \"horizontal\";\n let delta = 0;\n if (event.shiftKey) {\n delta = 100;\n } else if (keyboardResizeBy != null) {\n delta = keyboardResizeBy;\n } else {\n delta = 10;\n }\n let movement = 0;\n switch (event.key) {\n case \"ArrowDown\":\n movement = isHorizontal ? 0 : delta;\n break;\n case \"ArrowLeft\":\n movement = isHorizontal ? -delta : 0;\n break;\n case \"ArrowRight\":\n movement = isHorizontal ? delta : 0;\n break;\n case \"ArrowUp\":\n movement = isHorizontal ? 0 : -delta;\n break;\n case \"End\":\n movement = 100;\n break;\n case \"Home\":\n movement = -100;\n break;\n }\n return movement;\n } else {\n if (initialDragState == null) {\n return 0;\n }\n return calculateDragOffsetPercentage(event, dragHandleId, direction, initialDragState, panelGroupElement);\n }\n}\n\n// Layout should be pre-converted into percentages\nfunction callPanelCallbacks(panelsArray, layout, panelIdToLastNotifiedSizeMap) {\n layout.forEach((size, index) => {\n const panelData = panelsArray[index];\n assert(panelData, `Panel data not found for index ${index}`);\n const {\n callbacks,\n constraints,\n id: panelId\n } = panelData;\n const {\n collapsedSize = 0,\n collapsible\n } = constraints;\n const lastNotifiedSize = panelIdToLastNotifiedSizeMap[panelId];\n if (lastNotifiedSize == null || size !== lastNotifiedSize) {\n panelIdToLastNotifiedSizeMap[panelId] = size;\n const {\n onCollapse,\n onExpand,\n onResize\n } = callbacks;\n if (onResize) {\n onResize(size, lastNotifiedSize);\n }\n if (collapsible && (onCollapse || onExpand)) {\n if (onExpand && (lastNotifiedSize == null || fuzzyNumbersEqual$1(lastNotifiedSize, collapsedSize)) && !fuzzyNumbersEqual$1(size, collapsedSize)) {\n onExpand();\n }\n if (onCollapse && (lastNotifiedSize == null || !fuzzyNumbersEqual$1(lastNotifiedSize, collapsedSize)) && fuzzyNumbersEqual$1(size, collapsedSize)) {\n onCollapse();\n }\n }\n }\n });\n}\n\nfunction compareLayouts(a, b) {\n if (a.length !== b.length) {\n return false;\n } else {\n for (let index = 0; index < a.length; index++) {\n if (a[index] != b[index]) {\n return false;\n }\n }\n }\n return true;\n}\n\n// This method returns a number between 1 and 100 representing\n\n// the % of the group's overall space this panel should occupy.\nfunction computePanelFlexBoxStyle({\n defaultSize,\n dragState,\n layout,\n panelData,\n panelIndex,\n precision = 3\n}) {\n const size = layout[panelIndex];\n let flexGrow;\n if (size == null) {\n // Initial render (before panels have registered themselves)\n // In order to support server rendering, fall back to default size if provided\n flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : \"1\";\n } else if (panelData.length === 1) {\n // Special case: Single panel group should always fill full width/height\n flexGrow = \"1\";\n } else {\n flexGrow = size.toPrecision(precision);\n }\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n // Without this, Panel sizes may be unintentionally overridden by their content\n overflow: \"hidden\",\n // Disable pointer events inside of a panel during resize\n // This avoid edge cases like nested iframes\n pointerEvents: dragState !== null ? \"none\" : undefined\n };\n}\n\nfunction debounce(callback, durationMs = 10) {\n let timeoutId = null;\n let callable = (...args) => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n callback(...args);\n }, durationMs);\n };\n return callable;\n}\n\n// PanelGroup might be rendering in a server-side environment where localStorage is not available\n// or on a browser with cookies/storage disabled.\n// In either case, this function avoids accessing localStorage until needed,\n// and avoids throwing user-visible errors.\nfunction initializeDefaultStorage(storageObject) {\n try {\n if (typeof localStorage !== \"undefined\") {\n // Bypass this check for future calls\n storageObject.getItem = name => {\n return localStorage.getItem(name);\n };\n storageObject.setItem = (name, value) => {\n localStorage.setItem(name, value);\n };\n } else {\n throw new Error(\"localStorage not supported in this environment\");\n }\n } catch (error) {\n console.error(error);\n storageObject.getItem = () => null;\n storageObject.setItem = () => {};\n }\n}\n\nfunction getPanelGroupKey(autoSaveId) {\n return `react-resizable-panels:${autoSaveId}`;\n}\n\n// Note that Panel ids might be user-provided (stable) or useId generated (non-deterministic)\n// so they should not be used as part of the serialization key.\n// Using the min/max size attributes should work well enough as a backup.\n// Pre-sorting by minSize allows remembering layouts even if panels are re-ordered/dragged.\nfunction getPanelKey(panels) {\n return panels.map(panel => {\n const {\n constraints,\n id,\n idIsFromProps,\n order\n } = panel;\n if (idIsFromProps) {\n return id;\n } else {\n return order ? `${order}:${JSON.stringify(constraints)}` : JSON.stringify(constraints);\n }\n }).sort((a, b) => a.localeCompare(b)).join(\",\");\n}\nfunction loadSerializedPanelGroupState(autoSaveId, storage) {\n try {\n const panelGroupKey = getPanelGroupKey(autoSaveId);\n const serialized = storage.getItem(panelGroupKey);\n if (serialized) {\n const parsed = JSON.parse(serialized);\n if (typeof parsed === \"object\" && parsed != null) {\n return parsed;\n }\n }\n } catch (error) {}\n return null;\n}\nfunction savePanelGroupState(autoSaveId, panels, panelSizesBeforeCollapse, sizes, storage) {\n var _loadSerializedPanelG2;\n const panelGroupKey = getPanelGroupKey(autoSaveId);\n const panelKey = getPanelKey(panels);\n const state = (_loadSerializedPanelG2 = loadSerializedPanelGroupState(autoSaveId, storage)) !== null && _loadSerializedPanelG2 !== void 0 ? _loadSerializedPanelG2 : {};\n state[panelKey] = {\n expandToSizes: Object.fromEntries(panelSizesBeforeCollapse.entries()),\n layout: sizes\n };\n try {\n storage.setItem(panelGroupKey, JSON.stringify(state));\n } catch (error) {\n console.error(error);\n }\n}\n\n// All units must be in percentages; pixel values should be pre-converted\nfunction validatePanelGroupLayout({\n layout: prevLayout,\n panelConstraints\n}) {\n const nextLayout = [...prevLayout];\n const nextLayoutTotalSize = nextLayout.reduce((accumulated, current) => accumulated + current, 0);\n\n // Validate layout expectations\n if (nextLayout.length !== panelConstraints.length) {\n throw Error(`Invalid ${panelConstraints.length} panel layout: ${nextLayout.map(size => `${size}%`).join(\", \")}`);\n } else if (!fuzzyNumbersEqual(nextLayoutTotalSize, 100) && nextLayout.length > 0) {\n for (let index = 0; index < panelConstraints.length; index++) {\n const unsafeSize = nextLayout[index];\n assert(unsafeSize != null, `No layout data found for index ${index}`);\n const safeSize = 100 / nextLayoutTotalSize * unsafeSize;\n nextLayout[index] = safeSize;\n }\n }\n let remainingSize = 0;\n\n // First pass: Validate the proposed layout given each panel's constraints\n for (let index = 0; index < panelConstraints.length; index++) {\n const unsafeSize = nextLayout[index];\n assert(unsafeSize != null, `No layout data found for index ${index}`);\n const safeSize = resizePanel({\n panelConstraints,\n panelIndex: index,\n size: unsafeSize\n });\n if (unsafeSize != safeSize) {\n remainingSize += unsafeSize - safeSize;\n nextLayout[index] = safeSize;\n }\n }\n\n // If there is additional, left over space, assign it to any panel(s) that permits it\n // (It's not worth taking multiple additional passes to evenly distribute)\n if (!fuzzyNumbersEqual(remainingSize, 0)) {\n for (let index = 0; index < panelConstraints.length; index++) {\n const prevSize = nextLayout[index];\n assert(prevSize != null, `No layout data found for index ${index}`);\n const unsafeSize = prevSize + remainingSize;\n const safeSize = resizePanel({\n panelConstraints,\n panelIndex: index,\n size: unsafeSize\n });\n if (prevSize !== safeSize) {\n remainingSize -= safeSize - prevSize;\n nextLayout[index] = safeSize;\n\n // Once we've used up the remainder, bail\n if (fuzzyNumbersEqual(remainingSize, 0)) {\n break;\n }\n }\n }\n }\n return nextLayout;\n}\n\nconst LOCAL_STORAGE_DEBOUNCE_INTERVAL = 100;\nconst defaultStorage = {\n getItem: name => {\n initializeDefaultStorage(defaultStorage);\n return defaultStorage.getItem(name);\n },\n setItem: (name, value) => {\n initializeDefaultStorage(defaultStorage);\n defaultStorage.setItem(name, value);\n }\n};\nconst debounceMap = {};\nfunction PanelGroupWithForwardedRef({\n autoSaveId = null,\n children,\n className: classNameFromProps = \"\",\n direction,\n forwardedRef,\n id: idFromProps = null,\n onLayout = null,\n keyboardResizeBy = null,\n storage = defaultStorage,\n style: styleFromProps,\n tagName: Type = \"div\",\n ...rest\n}) {\n const groupId = useUniqueId(idFromProps);\n const panelGroupElementRef = useRef(null);\n const [dragState, setDragState] = useState(null);\n const [layout, setLayout] = useState([]);\n const forceUpdate = useForceUpdate();\n const panelIdToLastNotifiedSizeMapRef = useRef({});\n const panelSizeBeforeCollapseRef = useRef(new Map());\n const prevDeltaRef = useRef(0);\n const committedValuesRef = useRef({\n autoSaveId,\n direction,\n dragState,\n id: groupId,\n keyboardResizeBy,\n onLayout,\n storage\n });\n const eagerValuesRef = useRef({\n layout,\n panelDataArray: [],\n panelDataArrayChanged: false\n });\n useRef({\n didLogIdAndOrderWarning: false,\n didLogPanelConstraintsWarning: false,\n prevPanelIds: []\n });\n useImperativeHandle(forwardedRef, () => ({\n getId: () => committedValuesRef.current.id,\n getLayout: () => {\n const {\n layout\n } = eagerValuesRef.current;\n return layout;\n },\n setLayout: unsafeLayout => {\n const {\n onLayout\n } = committedValuesRef.current;\n const {\n layout: prevLayout,\n panelDataArray\n } = eagerValuesRef.current;\n const safeLayout = validatePanelGroupLayout({\n layout: unsafeLayout,\n panelConstraints: panelDataArray.map(panelData => panelData.constraints)\n });\n if (!areEqual(prevLayout, safeLayout)) {\n setLayout(safeLayout);\n eagerValuesRef.current.layout = safeLayout;\n if (onLayout) {\n onLayout(safeLayout);\n }\n callPanelCallbacks(panelDataArray, safeLayout, panelIdToLastNotifiedSizeMapRef.current);\n }\n }\n }), []);\n useWindowSplitterPanelGroupBehavior({\n committedValuesRef,\n eagerValuesRef,\n groupId,\n layout,\n panelDataArray: eagerValuesRef.current.panelDataArray,\n setLayout,\n panelGroupElement: panelGroupElementRef.current\n });\n useEffect(() => {\n const {\n panelDataArray\n } = eagerValuesRef.current;\n\n // If this panel has been configured to persist sizing information, save sizes to local storage.\n if (autoSaveId) {\n if (layout.length === 0 || layout.length !== panelDataArray.length) {\n return;\n }\n let debouncedSave = debounceMap[autoSaveId];\n\n // Limit the frequency of localStorage updates.\n if (debouncedSave == null) {\n debouncedSave = debounce(savePanelGroupState, LOCAL_STORAGE_DEBOUNCE_INTERVAL);\n debounceMap[autoSaveId] = debouncedSave;\n }\n\n // Clone mutable data before passing to the debounced function,\n // else we run the risk of saving an incorrect combination of mutable and immutable values to state.\n const clonedPanelDataArray = [...panelDataArray];\n const clonedPanelSizesBeforeCollapse = new Map(panelSizeBeforeCollapseRef.current);\n debouncedSave(autoSaveId, clonedPanelDataArray, clonedPanelSizesBeforeCollapse, layout, storage);\n }\n }, [autoSaveId, layout, storage]);\n\n // DEV warnings\n useEffect(() => {\n });\n\n // External APIs are safe to memoize via committed values ref\n const collapsePanel = useCallback(panelData => {\n const {\n onLayout\n } = committedValuesRef.current;\n const {\n layout: prevLayout,\n panelDataArray\n } = eagerValuesRef.current;\n if (panelData.constraints.collapsible) {\n const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);\n const {\n collapsedSize = 0,\n panelSize,\n pivotIndices\n } = panelDataHelper(panelDataArray, panelData, prevLayout);\n assert(panelSize != null, `Panel size not found for panel \"${panelData.id}\"`);\n if (!fuzzyNumbersEqual$1(panelSize, collapsedSize)) {\n // Store size before collapse;\n // This is the size that gets restored if the expand() API is used.\n panelSizeBeforeCollapseRef.current.set(panelData.id, panelSize);\n const isLastPanel = findPanelDataIndex(panelDataArray, panelData) === panelDataArray.length - 1;\n const delta = isLastPanel ? panelSize - collapsedSize : collapsedSize - panelSize;\n const nextLayout = adjustLayoutByDelta({\n delta,\n initialLayout: prevLayout,\n panelConstraints: panelConstraintsArray,\n pivotIndices,\n prevLayout,\n trigger: \"imperative-api\"\n });\n if (!compareLayouts(prevLayout, nextLayout)) {\n setLayout(nextLayout);\n eagerValuesRef.current.layout = nextLayout;\n if (onLayout) {\n onLayout(nextLayout);\n }\n callPanelCallbacks(panelDataArray, nextLayout, panelIdToLastNotifiedSizeMapRef.current);\n }\n }\n }\n }, []);\n\n // External APIs are safe to memoize via committed values ref\n const expandPanel = useCallback((panelData, minSizeOverride) => {\n const {\n onLayout\n } = committedValuesRef.current;\n const {\n layout: prevLayout,\n panelDataArray\n } = eagerValuesRef.current;\n if (panelData.constraints.collapsible) {\n const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);\n const {\n collapsedSize = 0,\n panelSize = 0,\n minSize: minSizeFromProps = 0,\n pivotIndices\n } = panelDataHelper(panelDataArray, panelData, prevLayout);\n const minSize = minSizeOverride !== null && minSizeOverride !== void 0 ? minSizeOverride : minSizeFromProps;\n if (fuzzyNumbersEqual$1(panelSize, collapsedSize)) {\n // Restore this panel to the size it was before it was collapsed, if possible.\n const prevPanelSize = panelSizeBeforeCollapseRef.current.get(panelData.id);\n const baseSize = prevPanelSize != null && prevPanelSize >= minSize ? prevPanelSize : minSize;\n const isLastPanel = findPanelDataIndex(panelDataArray, panelData) === panelDataArray.length - 1;\n const delta = isLastPanel ? panelSize - baseSize : baseSize - panelSize;\n const nextLayout = adjustLayoutByDelta({\n delta,\n initialLayout: prevLayout,\n panelConstraints: panelConstraintsArray,\n pivotIndices,\n prevLayout,\n trigger: \"imperative-api\"\n });\n if (!compareLayouts(prevLayout, nextLayout)) {\n setLayout(nextLayout);\n eagerValuesRef.current.layout = nextLayout;\n if (onLayout) {\n onLayout(nextLayout);\n }\n callPanelCallbacks(panelDataArray, nextLayout, panelIdToLastNotifiedSizeMapRef.current);\n }\n }\n }\n }, []);\n\n // External APIs are safe to memoize via committed values ref\n const getPanelSize = useCallback(panelData => {\n const {\n layout,\n panelDataArray\n } = eagerValuesRef.current;\n const {\n panelSize\n } = panelDataHelper(panelDataArray, panelData, layout);\n assert(panelSize != null, `Panel size not found for panel \"${panelData.id}\"`);\n return panelSize;\n }, []);\n\n // This API should never read from committedValuesRef\n const getPanelStyle = useCallback((panelData, defaultSize) => {\n const {\n panelDataArray\n } = eagerValuesRef.current;\n const panelIndex = findPanelDataIndex(panelDataArray, panelData);\n return computePanelFlexBoxStyle({\n defaultSize,\n dragState,\n layout,\n panelData: panelDataArray,\n panelIndex\n });\n }, [dragState, layout]);\n\n // External APIs are safe to memoize via committed values ref\n const isPanelCollapsed = useCallback(panelData => {\n const {\n layout,\n panelDataArray\n } = eagerValuesRef.current;\n const {\n collapsedSize = 0,\n collapsible,\n panelSize\n } = panelDataHelper(panelDataArray, panelData, layout);\n assert(panelSize != null, `Panel size not found for panel \"${panelData.id}\"`);\n return collapsible === true && fuzzyNumbersEqual$1(panelSize, collapsedSize);\n }, []);\n\n // External APIs are safe to memoize via committed values ref\n const isPanelExpanded = useCallback(panelData => {\n const {\n layout,\n panelDataArray\n } = eagerValuesRef.current;\n const {\n collapsedSize = 0,\n collapsible,\n panelSize\n } = panelDataHelper(panelDataArray, panelData, layout);\n assert(panelSize != null, `Panel size not found for panel \"${panelData.id}\"`);\n return !collapsible || fuzzyCompareNumbers(panelSize, collapsedSize) > 0;\n }, []);\n const registerPanel = useCallback(panelData => {\n const {\n panelDataArray\n } = eagerValuesRef.current;\n panelDataArray.push(panelData);\n panelDataArray.sort((panelA, panelB) => {\n const orderA = panelA.order;\n const orderB = panelB.order;\n if (orderA == null && orderB == null) {\n return 0;\n } else if (orderA == null) {\n return -1;\n } else if (orderB == null) {\n return 1;\n } else {\n return orderA - orderB;\n }\n });\n eagerValuesRef.current.panelDataArrayChanged = true;\n forceUpdate();\n }, [forceUpdate]);\n const registerResizeHandle = useCallback(dragHandleId => {\n let isRTL = false;\n const panelGroupElement = panelGroupElementRef.current;\n if (panelGroupElement) {\n const style = window.getComputedStyle(panelGroupElement, null);\n if (style.getPropertyValue(\"direction\") === \"rtl\") {\n isRTL = true;\n }\n }\n return function resizeHandler(event) {\n event.preventDefault();\n const panelGroupElement = panelGroupElementRef.current;\n if (!panelGroupElement) {\n return () => null;\n }\n const {\n direction,\n dragState,\n id: groupId,\n keyboardResizeBy,\n onLayout\n } = committedValuesRef.current;\n const {\n layout: prevLayout,\n panelDataArray\n } = eagerValuesRef.current;\n const {\n initialLayout\n } = dragState !== null && dragState !== void 0 ? dragState : {};\n const pivotIndices = determinePivotIndices(groupId, dragHandleId, panelGroupElement);\n let delta = calculateDeltaPercentage(event, dragHandleId, direction, dragState, keyboardResizeBy, panelGroupElement);\n const isHorizontal = direction === \"horizontal\";\n if (isHorizontal && isRTL) {\n delta = -delta;\n }\n const panelConstraints = panelDataArray.map(panelData => panelData.constraints);\n const nextLayout = adjustLayoutByDelta({\n delta,\n initialLayout: initialLayout !== null && initialLayout !== void 0 ? initialLayout : prevLayout,\n panelConstraints,\n pivotIndices,\n prevLayout,\n trigger: isKeyDown(event) ? \"keyboard\" : \"mouse-or-touch\"\n });\n const layoutChanged = !compareLayouts(prevLayout, nextLayout);\n\n // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)\n // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)\n if (isPointerEvent(event) || isMouseEvent(event)) {\n // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.\n // In this case, Panel sizes might not change–\n // but updating cursor in this scenario would cause a flicker.\n if (prevDeltaRef.current != delta) {\n prevDeltaRef.current = delta;\n if (!layoutChanged && delta !== 0) {\n // If the pointer has moved too far to resize the panel any further, note this so we can update the cursor.\n // This mimics VS Code behavior.\n if (isHorizontal) {\n reportConstraintsViolation(dragHandleId, delta < 0 ? EXCEEDED_HORIZONTAL_MIN : EXCEEDED_HORIZONTAL_MAX);\n } else {\n reportConstraintsViolation(dragHandleId, delta < 0 ? EXCEEDED_VERTICAL_MIN : EXCEEDED_VERTICAL_MAX);\n }\n } else {\n reportConstraintsViolation(dragHandleId, 0);\n }\n }\n }\n if (layoutChanged) {\n setLayout(nextLayout);\n eagerValuesRef.current.layout = nextLayout;\n if (onLayout) {\n onLayout(nextLayout);\n }\n callPanelCallbacks(panelDataArray, nextLayout, panelIdToLastNotifiedSizeMapRef.current);\n }\n };\n }, []);\n\n // External APIs are safe to memoize via committed values ref\n const resizePanel = useCallback((panelData, unsafePanelSize) => {\n const {\n onLayout\n } = committedValuesRef.current;\n const {\n layout: prevLayout,\n panelDataArray\n } = eagerValuesRef.current;\n const panelConstraintsArray = panelDataArray.map(panelData => panelData.constraints);\n const {\n panelSize,\n pivotIndices\n } = panelDataHelper(panelDataArray, panelData, prevLayout);\n assert(panelSize != null, `Panel size not found for panel \"${panelData.id}\"`);\n const isLastPanel = findPanelDataIndex(panelDataArray, panelData) === panelDataArray.length - 1;\n const delta = isLastPanel ? panelSize - unsafePanelSize : unsafePanelSize - panelSize;\n const nextLayout = adjustLayoutByDelta({\n delta,\n initialLayout: prevLayout,\n panelConstraints: panelConstraintsArray,\n pivotIndices,\n prevLayout,\n trigger: \"imperative-api\"\n });\n if (!compareLayouts(prevLayout, nextLayout)) {\n setLayout(nextLayout);\n eagerValuesRef.current.layout = nextLayout;\n if (onLayout) {\n onLayout(nextLayout);\n }\n callPanelCallbacks(panelDataArray, nextLayout, panelIdToLastNotifiedSizeMapRef.current);\n }\n }, []);\n const reevaluatePanelConstraints = useCallback((panelData, prevConstraints) => {\n const {\n layout,\n panelDataArray\n } = eagerValuesRef.current;\n const {\n collapsedSize: prevCollapsedSize = 0,\n collapsible: prevCollapsible\n } = prevConstraints;\n const {\n collapsedSize: nextCollapsedSize = 0,\n collapsible: nextCollapsible,\n maxSize: nextMaxSize = 100,\n minSize: nextMinSize = 0\n } = panelData.constraints;\n const {\n panelSize: prevPanelSize\n } = panelDataHelper(panelDataArray, panelData, layout);\n if (prevPanelSize == null) {\n // It's possible that the panels in this group have changed since the last render\n return;\n }\n if (prevCollapsible && nextCollapsible && fuzzyNumbersEqual$1(prevPanelSize, prevCollapsedSize)) {\n if (!fuzzyNumbersEqual$1(prevCollapsedSize, nextCollapsedSize)) {\n resizePanel(panelData, nextCollapsedSize);\n }\n } else if (prevPanelSize < nextMinSize) {\n resizePanel(panelData, nextMinSize);\n } else if (prevPanelSize > nextMaxSize) {\n resizePanel(panelData, nextMaxSize);\n }\n }, [resizePanel]);\n\n // TODO Multiple drag handles can be active at the same time so this API is a bit awkward now\n const startDragging = useCallback((dragHandleId, event) => {\n const {\n direction\n } = committedValuesRef.current;\n const {\n layout\n } = eagerValuesRef.current;\n if (!panelGroupElementRef.current) {\n return;\n }\n const handleElement = getResizeHandleElement(dragHandleId, panelGroupElementRef.current);\n assert(handleElement, `Drag handle element not found for id \"${dragHandleId}\"`);\n const initialCursorPosition = getResizeEventCursorPosition(direction, event);\n setDragState({\n dragHandleId,\n dragHandleRect: handleElement.getBoundingClientRect(),\n initialCursorPosition,\n initialLayout: layout\n });\n }, []);\n const stopDragging = useCallback(() => {\n setDragState(null);\n }, []);\n const unregisterPanel = useCallback(panelData => {\n const {\n panelDataArray\n } = eagerValuesRef.current;\n const index = findPanelDataIndex(panelDataArray, panelData);\n if (index >= 0) {\n panelDataArray.splice(index, 1);\n\n // TRICKY\n // When a panel is removed from the group, we should delete the most recent prev-size entry for it.\n // If we don't do this, then a conditionally rendered panel might not call onResize when it's re-mounted.\n // Strict effects mode makes this tricky though because all panels will be registered, unregistered, then re-registered on mount.\n delete panelIdToLastNotifiedSizeMapRef.current[panelData.id];\n eagerValuesRef.current.panelDataArrayChanged = true;\n forceUpdate();\n }\n }, [forceUpdate]);\n const context = useMemo(() => ({\n collapsePanel,\n direction,\n dragState,\n expandPanel,\n getPanelSize,\n getPanelStyle,\n groupId,\n isPanelCollapsed,\n isPanelExpanded,\n reevaluatePanelConstraints,\n registerPanel,\n registerResizeHandle,\n resizePanel,\n startDragging,\n stopDragging,\n unregisterPanel,\n panelGroupElement: panelGroupElementRef.current\n }), [collapsePanel, dragState, direction, expandPanel, getPanelSize, getPanelStyle, groupId, isPanelCollapsed, isPanelExpanded, reevaluatePanelConstraints, registerPanel, registerResizeHandle, resizePanel, startDragging, stopDragging, unregisterPanel]);\n const style = {\n display: \"flex\",\n flexDirection: direction === \"horizontal\" ? \"row\" : \"column\",\n height: \"100%\",\n overflow: \"hidden\",\n width: \"100%\"\n };\n return createElement(PanelGroupContext.Provider, {\n value: context\n }, createElement(Type, {\n ...rest,\n children,\n className: classNameFromProps,\n id: idFromProps,\n ref: panelGroupElementRef,\n style: {\n ...style,\n ...styleFromProps\n },\n // CSS selectors\n [DATA_ATTRIBUTES.group]: \"\",\n [DATA_ATTRIBUTES.groupDirection]: direction,\n [DATA_ATTRIBUTES.groupId]: groupId\n }));\n}\nconst PanelGroup = forwardRef((props, ref) => createElement(PanelGroupWithForwardedRef, {\n ...props,\n forwardedRef: ref\n}));\nPanelGroupWithForwardedRef.displayName = \"PanelGroup\";\nPanelGroup.displayName = \"forwardRef(PanelGroup)\";\nfunction findPanelDataIndex(panelDataArray, panelData) {\n return panelDataArray.findIndex(prevPanelData => prevPanelData === panelData || prevPanelData.id === panelData.id);\n}\nfunction panelDataHelper(panelDataArray, panelData, layout) {\n const panelIndex = findPanelDataIndex(panelDataArray, panelData);\n const isLastPanel = panelIndex === panelDataArray.length - 1;\n const pivotIndices = isLastPanel ? [panelIndex - 1, panelIndex] : [panelIndex, panelIndex + 1];\n const panelSize = layout[panelIndex];\n return {\n ...panelData.constraints,\n panelSize,\n pivotIndices\n };\n}\n\n// https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n\nfunction useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId,\n resizeHandler,\n panelGroupElement\n}) {\n useEffect(() => {\n if (disabled || resizeHandler == null || panelGroupElement == null) {\n return;\n }\n const handleElement = getResizeHandleElement(handleId, panelGroupElement);\n if (handleElement == null) {\n return;\n }\n const onKeyDown = event => {\n if (event.defaultPrevented) {\n return;\n }\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowLeft\":\n case \"ArrowRight\":\n case \"ArrowUp\":\n case \"End\":\n case \"Home\":\n {\n event.preventDefault();\n resizeHandler(event);\n break;\n }\n case \"F6\":\n {\n event.preventDefault();\n const groupId = handleElement.getAttribute(DATA_ATTRIBUTES.groupId);\n assert(groupId, `No group element found for id \"${groupId}\"`);\n const handles = getResizeHandleElementsForGroup(groupId, panelGroupElement);\n const index = getResizeHandleElementIndex(groupId, handleId, panelGroupElement);\n assert(index !== null, `No resize element found for id \"${handleId}\"`);\n const nextIndex = event.shiftKey ? index > 0 ? index - 1 : handles.length - 1 : index + 1 < handles.length ? index + 1 : 0;\n const nextHandle = handles[nextIndex];\n nextHandle.focus();\n break;\n }\n }\n };\n handleElement.addEventListener(\"keydown\", onKeyDown);\n return () => {\n handleElement.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [panelGroupElement, disabled, handleId, resizeHandler]);\n}\n\nfunction PanelResizeHandle({\n children = null,\n className: classNameFromProps = \"\",\n disabled = false,\n hitAreaMargins,\n id: idFromProps,\n onBlur,\n onClick,\n onDragging,\n onFocus,\n onPointerDown,\n onPointerUp,\n style: styleFromProps = {},\n tabIndex = 0,\n tagName: Type = \"div\",\n ...rest\n}) {\n var _hitAreaMargins$coars, _hitAreaMargins$fine;\n const elementRef = useRef(null);\n\n // Use a ref to guard against users passing inline props\n const callbacksRef = useRef({\n onClick,\n onDragging,\n onPointerDown,\n onPointerUp\n });\n useEffect(() => {\n callbacksRef.current.onClick = onClick;\n callbacksRef.current.onDragging = onDragging;\n callbacksRef.current.onPointerDown = onPointerDown;\n callbacksRef.current.onPointerUp = onPointerUp;\n });\n const panelGroupContext = useContext(PanelGroupContext);\n if (panelGroupContext === null) {\n throw Error(`PanelResizeHandle components must be rendered within a PanelGroup container`);\n }\n const {\n direction,\n groupId,\n registerResizeHandle: registerResizeHandleWithParentGroup,\n startDragging,\n stopDragging,\n panelGroupElement\n } = panelGroupContext;\n const resizeHandleId = useUniqueId(idFromProps);\n const [state, setState] = useState(\"inactive\");\n const [isFocused, setIsFocused] = useState(false);\n const [resizeHandler, setResizeHandler] = useState(null);\n const committedValuesRef = useRef({\n state\n });\n useEffect(() => {\n if (disabled) {\n setResizeHandler(null);\n } else {\n const resizeHandler = registerResizeHandleWithParentGroup(resizeHandleId);\n setResizeHandler(() => resizeHandler);\n }\n }, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);\n\n // Extract hit area margins before passing them to the effect's dependency array\n // so that inline object values won't trigger re-renders\n const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;\n const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;\n useEffect(() => {\n if (disabled || resizeHandler == null) {\n return;\n }\n const element = elementRef.current;\n assert(element, \"Element ref not attached\");\n let didMove = false;\n const setResizeHandlerState = (action, isActive, event) => {\n if (!isActive) {\n setState(\"inactive\");\n return;\n }\n switch (action) {\n case \"down\":\n {\n setState(\"drag\");\n didMove = false;\n assert(event, 'Expected event to be defined for \"down\" action');\n startDragging(resizeHandleId, event);\n const {\n onDragging,\n onPointerDown\n } = callbacksRef.current;\n onDragging === null || onDragging === void 0 ? void 0 : onDragging(true);\n onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown();\n break;\n }\n case \"move\":\n {\n const {\n state\n } = committedValuesRef.current;\n didMove = true;\n if (state !== \"drag\") {\n setState(\"hover\");\n }\n assert(event, 'Expected event to be defined for \"move\" action');\n resizeHandler(event);\n break;\n }\n case \"up\":\n {\n setState(\"hover\");\n stopDragging();\n const {\n onClick,\n onDragging,\n onPointerUp\n } = callbacksRef.current;\n onDragging === null || onDragging === void 0 ? void 0 : onDragging(false);\n onPointerUp === null || onPointerUp === void 0 ? void 0 : onPointerUp();\n if (!didMove) {\n onClick === null || onClick === void 0 ? void 0 : onClick();\n }\n break;\n }\n }\n };\n return registerResizeHandle(resizeHandleId, element, direction, {\n coarse: coarseHitAreaMargins,\n fine: fineHitAreaMargins\n }, setResizeHandlerState);\n }, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);\n useWindowSplitterResizeHandlerBehavior({\n disabled,\n handleId: resizeHandleId,\n resizeHandler,\n panelGroupElement\n });\n const style = {\n touchAction: \"none\",\n userSelect: \"none\"\n };\n return createElement(Type, {\n ...rest,\n children,\n className: classNameFromProps,\n id: idFromProps,\n onBlur: () => {\n setIsFocused(false);\n onBlur === null || onBlur === void 0 ? void 0 : onBlur();\n },\n onFocus: () => {\n setIsFocused(true);\n onFocus === null || onFocus === void 0 ? void 0 : onFocus();\n },\n ref: elementRef,\n role: \"separator\",\n style: {\n ...style,\n ...styleFromProps\n },\n tabIndex,\n // CSS selectors\n [DATA_ATTRIBUTES.groupDirection]: direction,\n [DATA_ATTRIBUTES.groupId]: groupId,\n [DATA_ATTRIBUTES.resizeHandle]: \"\",\n [DATA_ATTRIBUTES.resizeHandleActive]: state === \"drag\" ? \"pointer\" : isFocused ? \"keyboard\" : undefined,\n [DATA_ATTRIBUTES.resizeHandleEnabled]: !disabled,\n [DATA_ATTRIBUTES.resizeHandleId]: resizeHandleId,\n [DATA_ATTRIBUTES.resizeHandleState]: state\n });\n}\nPanelResizeHandle.displayName = \"PanelResizeHandle\";\n\nfunction usePanelGroupContext() {\n const context = useContext(PanelGroupContext);\n return {\n direction: context === null || context === void 0 ? void 0 : context.direction,\n groupId: context === null || context === void 0 ? void 0 : context.groupId\n };\n}\n\nfunction getPanelElement(id, scope = document) {\n const element = scope.querySelector(`[data-panel-id=\"${id}\"]`);\n if (element) {\n return element;\n }\n return null;\n}\n\nfunction getPanelElementsForGroup(groupId, scope = document) {\n return Array.from(scope.querySelectorAll(`[data-panel][data-panel-group-id=\"${groupId}\"]`));\n}\n\nfunction getIntersectingRectangle(rectOne, rectTwo, strict) {\n if (!intersects(rectOne, rectTwo, strict)) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n return {\n x: Math.max(rectOne.x, rectTwo.x),\n y: Math.max(rectOne.y, rectTwo.y),\n width: Math.min(rectOne.x + rectOne.width, rectTwo.x + rectTwo.width) - Math.max(rectOne.x, rectTwo.x),\n height: Math.min(rectOne.y + rectOne.height, rectTwo.y + rectTwo.height) - Math.max(rectOne.y, rectTwo.y)\n };\n}\n\nexport { DATA_ATTRIBUTES, Panel, PanelGroup, PanelResizeHandle, assert, disableGlobalCursorStyles, enableGlobalCursorStyles, getIntersectingRectangle, getPanelElement, getPanelElementsForGroup, getPanelGroupElement, getResizeHandleElement, getResizeHandleElementIndex, getResizeHandleElementsForGroup, getResizeHandlePanelIds, intersects, setNonce, usePanelGroupContext };\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport {\n\tcn,\n\tuseIsMobile,\n\tButton,\n\tInput,\n\tSeparator,\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n\tTooltip,\n\tTooltipContent,\n\tTooltipProvider,\n\tTooltipTrigger,\n\tSkeleton\n} from '@/packages/shadcns';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n\tstate: 'expanded' | 'collapsed';\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\topenMobile: boolean;\n\tsetOpenMobile: (open: boolean) => void;\n\tisMobile: boolean;\n\ttoggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n\tconst context = React.useContext(SidebarContext);\n\tif (!context) {\n\t\tthrow new Error('useSidebar must be used within a SidebarProvider.');\n\t}\n\n\treturn context;\n}\n\nfunction SidebarProvider({\n\tdefaultOpen = true,\n\topen: openProp,\n\tonOpenChange: setOpenProp,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tdefaultOpen?: boolean;\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst isMobile = useIsMobile();\n\tconst [openMobile, setOpenMobile] = React.useState(false);\n\n\t// This is the internal state of the sidebar.\n\t// We use openProp and setOpenProp for control from outside the component.\n\tconst [_open, _setOpen] = React.useState(defaultOpen);\n\tconst open = openProp ?? _open;\n\tconst setOpen = React.useCallback(\n\t\t(value: boolean | ((value: boolean) => boolean)) => {\n\t\t\tconst openState = typeof value === 'function' ? value(open) : value;\n\t\t\tif (setOpenProp) {\n\t\t\t\tsetOpenProp(openState);\n\t\t\t} else {\n\t\t\t\t_setOpen(openState);\n\t\t\t}\n\n\t\t\t// This sets the cookie to keep the sidebar state.\n\t\t\tdocument.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n\t\t},\n\t\t[setOpenProp, open],\n\t);\n\n\t// Helper to toggle the sidebar.\n\tconst toggleSidebar = React.useCallback(() => {\n\t\treturn isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n\t}, [isMobile, setOpen, setOpenMobile]);\n\n\t// Adds a keyboard shortcut to toggle the sidebar.\n\tReact.useEffect(() => {\n\t\tconst handleKeyDown = (event: KeyboardEvent) => {\n\t\t\tif (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleSidebar();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('keydown', handleKeyDown);\n\t\treturn () => window.removeEventListener('keydown', handleKeyDown);\n\t}, [toggleSidebar]);\n\n\t// We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n\t// This makes it easier to style the sidebar with Tailwind classes.\n\tconst state = open ? 'expanded' : 'collapsed';\n\n\tconst contextValue = React.useMemo<SidebarContextProps>(\n\t\t() => ({\n\t\t\tstate,\n\t\t\topen,\n\t\t\tsetOpen,\n\t\t\tisMobile,\n\t\t\topenMobile,\n\t\t\tsetOpenMobile,\n\t\t\ttoggleSidebar,\n\t\t}),\n\t\t[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n\t);\n\n\treturn (\n\t\t<SidebarContext.Provider value={contextValue}>\n\t\t\t<TooltipProvider delayDuration={0}>\n\t\t\t\t<div\n\t\t\t\t\tdata-slot=\"sidebar-wrapper\"\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'--sidebar-width': SIDEBAR_WIDTH,\n\t\t\t\t\t\t\t'--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</TooltipProvider>\n\t\t</SidebarContext.Provider>\n\t);\n}\n\nfunction Sidebar({\n\tside = 'left',\n\tvariant = 'sidebar',\n\tcollapsible = 'offcanvas',\n\tclassName,\n\tchildren,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tside?: 'left' | 'right';\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n\tconst { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n\tif (collapsible === 'none') {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (isMobile) {\n\t\treturn (\n\t\t\t<Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n\t\t\t\t<SheetContent\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\t\tdata-mobile=\"true\"\n\t\t\t\t\tclassName=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t'--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t\tside={side}\n\t\t\t\t>\n\t\t\t\t\t<SheetHeader className=\"sr-only\">\n\t\t\t\t\t\t<SheetTitle>Sidebar</SheetTitle>\n\t\t\t\t\t\t<SheetDescription>Displays the mobile sidebar.</SheetDescription>\n\t\t\t\t\t</SheetHeader>\n\t\t\t\t\t<div className=\"flex h-full w-full flex-col\">{children}</div>\n\t\t\t\t</SheetContent>\n\t\t\t</Sheet>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"group peer text-sidebar-foreground hidden md:block\"\n\t\t\tdata-state={state}\n\t\t\tdata-collapsible={state === 'collapsed' ? collapsible : ''}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t\tdata-slot=\"sidebar\"\n\t\t>\n\t\t\t{/* This is what handles the sidebar gap on desktop */}\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar-gap\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n\t\t\t\t\t'group-data-[collapsible=offcanvas]:w-0',\n\t\t\t\t\t'group-data-[side=right]:rotate-180',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar-container\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n\t\t\t\t\tside === 'left'\n\t\t\t\t\t\t? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n\t\t\t\t\t\t: 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n\t\t\t\t\t// Adjust the padding for floating and inset variants.\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar-inner\"\n\t\t\t\t\tclassName=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n\tconst { toggleSidebar } = useSidebar();\n\n\treturn (\n\t\t<Button\n\t\t\tdata-sidebar=\"trigger\"\n\t\t\tdata-slot=\"sidebar-trigger\"\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"icon\"\n\t\t\tclassName={cn('size-7', className)}\n\t\t\tonClick={(event) => {\n\t\t\t\tonClick?.(event);\n\t\t\t\ttoggleSidebar();\n\t\t\t}}\n\t\t\t{...props}\n\t\t>\n\t\t\t<PanelLeftIcon />\n\t\t\t<span className=\"sr-only\">Toggle Sidebar</span>\n\t\t</Button>\n\t);\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n\tconst { toggleSidebar } = useSidebar();\n\n\treturn (\n\t\t<button\n\t\t\tdata-sidebar=\"rail\"\n\t\t\tdata-slot=\"sidebar-rail\"\n\t\t\taria-label=\"Toggle Sidebar\"\n\t\t\ttabIndex={-1}\n\t\t\tonClick={toggleSidebar}\n\t\t\ttitle=\"Toggle Sidebar\"\n\t\t\tclassName={cn(\n\t\t\t\t'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n\t\t\t\t'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n\t\t\t\t'[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n\t\t\t\t'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n\t\t\t\t'[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n\t\t\t\t'[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n\treturn (\n\t\t<main\n\t\t\tdata-slot=\"sidebar-inset\"\n\t\t\tclassName={cn(\n\t\t\t\t'bg-background relative flex w-full flex-1 flex-col',\n\t\t\t\t'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n\treturn (\n\t\t<Input\n\t\t\tdata-slot=\"sidebar-input\"\n\t\t\tdata-sidebar=\"input\"\n\t\t\tclassName={cn('bg-background h-8 w-full shadow-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-header\"\n\t\t\tdata-sidebar=\"header\"\n\t\t\tclassName={cn('flex flex-col gap-2 p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-footer\"\n\t\t\tdata-sidebar=\"footer\"\n\t\t\tclassName={cn('flex flex-col gap-2 p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n\treturn (\n\t\t<Separator\n\t\t\tdata-slot=\"sidebar-separator\"\n\t\t\tdata-sidebar=\"separator\"\n\t\t\tclassName={cn('bg-sidebar-border mx-2 w-auto', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-content\"\n\t\t\tdata-sidebar=\"content\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-group\"\n\t\t\tdata-sidebar=\"group\"\n\t\t\tclassName={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupLabel({\n\tclassName,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'div';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-group-label\"\n\t\t\tdata-sidebar=\"group-label\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupAction({\n\tclassName,\n\tasChild = false,\n\t...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-group-action\"\n\t\t\tdata-sidebar=\"group-action\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t'after:absolute after:-inset-2 md:after:hidden',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-group-content\"\n\t\t\tdata-sidebar=\"group-content\"\n\t\t\tclassName={cn('w-full text-sm', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"sidebar-menu\"\n\t\t\tdata-sidebar=\"menu\"\n\t\t\tclassName={cn('flex w-full min-w-0 flex-col gap-1', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"sidebar-menu-item\"\n\t\t\tdata-sidebar=\"menu-item\"\n\t\t\tclassName={cn('group/menu-item relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst sidebarMenuButtonVariants = cva(\n\t'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n\t\t\t\toutline:\n\t\t\t\t\t'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-8 text-sm',\n\t\t\t\tsm: 'h-7 text-xs',\n\t\t\t\tlg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction SidebarMenuButton({\n\tasChild = false,\n\tisActive = false,\n\tvariant = 'default',\n\tsize = 'default',\n\ttooltip,\n\tclassName,\n\t...props\n}: React.ComponentProps<'button'> & {\n\tasChild?: boolean;\n\tisActive?: boolean;\n\ttooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n\tconst Comp = asChild ? Slot : 'button';\n\tconst { isMobile, state } = useSidebar();\n\n\tconst button = (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-button\"\n\t\t\tdata-sidebar=\"menu-button\"\n\t\t\tdata-size={size}\n\t\t\tdata-active={isActive}\n\t\t\tclassName={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n\n\tif (!tooltip) {\n\t\treturn button;\n\t}\n\n\tif (typeof tooltip === 'string') {\n\t\ttooltip = {\n\t\t\tchildren: tooltip,\n\t\t};\n\t}\n\n\treturn (\n\t\t<Tooltip>\n\t\t\t<TooltipTrigger asChild>{button}</TooltipTrigger>\n\t\t\t<TooltipContent\n\t\t\t\tside=\"right\"\n\t\t\t\talign=\"center\"\n\t\t\t\thidden={state !== 'collapsed' || isMobile}\n\t\t\t\t{...tooltip}\n\t\t\t/>\n\t\t</Tooltip>\n\t);\n}\n\nfunction SidebarMenuAction({\n\tclassName,\n\tasChild = false,\n\tshowOnHover = false,\n\t...props\n}: React.ComponentProps<'button'> & {\n\tasChild?: boolean;\n\tshowOnHover?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'button';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-action\"\n\t\t\tdata-sidebar=\"menu-action\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t// Increases the hit area of the button on mobile.\n\t\t\t\t'after:absolute after:-inset-2 md:after:hidden',\n\t\t\t\t'peer-data-[size=sm]/menu-button:top-1',\n\t\t\t\t'peer-data-[size=default]/menu-button:top-1.5',\n\t\t\t\t'peer-data-[size=lg]/menu-button:top-2.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tshowOnHover &&\n\t\t\t\t'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-menu-badge\"\n\t\t\tdata-sidebar=\"menu-badge\"\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n\t\t\t\t'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n\t\t\t\t'peer-data-[size=sm]/menu-button:top-1',\n\t\t\t\t'peer-data-[size=default]/menu-button:top-1.5',\n\t\t\t\t'peer-data-[size=lg]/menu-button:top-2.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSkeleton({\n\tclassName,\n\tshowIcon = false,\n\t...props\n}: React.ComponentProps<'div'> & {\n\tshowIcon?: boolean;\n}) {\n\t// Random width between 50 to 90%.\n\tconst width = React.useMemo(() => {\n\t\treturn `${Math.floor(Math.random() * 40) + 50}%`;\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-menu-skeleton\"\n\t\t\tdata-sidebar=\"menu-skeleton\"\n\t\t\tclassName={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{showIcon && (\n\t\t\t\t<Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />\n\t\t\t)}\n\t\t\t<Skeleton\n\t\t\t\tclassName=\"h-4 max-w-(--skeleton-width) flex-1\"\n\t\t\t\tdata-sidebar=\"menu-skeleton-text\"\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t'--skeleton-width': width,\n\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n\treturn (\n\t\t<ul\n\t\t\tdata-slot=\"sidebar-menu-sub\"\n\t\t\tdata-sidebar=\"menu-sub\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n\treturn (\n\t\t<li\n\t\t\tdata-slot=\"sidebar-menu-sub-item\"\n\t\t\tdata-sidebar=\"menu-sub-item\"\n\t\t\tclassName={cn('group/menu-sub-item relative', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction SidebarMenuSubButton({\n\tasChild = false,\n\tsize = 'md',\n\tisActive = false,\n\tclassName,\n\t...props\n}: React.ComponentProps<'a'> & {\n\tasChild?: boolean;\n\tsize?: 'sm' | 'md';\n\tisActive?: boolean;\n}) {\n\tconst Comp = asChild ? Slot : 'a';\n\n\treturn (\n\t\t<Comp\n\t\t\tdata-slot=\"sidebar-menu-sub-button\"\n\t\t\tdata-sidebar=\"menu-sub-button\"\n\t\t\tdata-size={size}\n\t\t\tdata-active={isActive}\n\t\t\tclassName={cn(\n\t\t\t\t'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n\t\t\t\t'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n\t\t\t\tsize === 'sm' && 'text-xs',\n\t\t\t\tsize === 'md' && 'text-sm',\n\t\t\t\t'group-data-[collapsible=icon]:hidden',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tSidebar,\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarGroupAction,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarHeader,\n\tSidebarInput,\n\tSidebarInset,\n\tSidebarMenu,\n\tSidebarMenuAction,\n\tSidebarMenuBadge,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n\tSidebarMenuSkeleton,\n\tSidebarMenuSub,\n\tSidebarMenuSubButton,\n\tSidebarMenuSubItem,\n\tSidebarProvider,\n\tSidebarRail,\n\tSidebarSeparator,\n\tSidebarTrigger,\n\tuseSidebar,\n};\n","\"use client\";import*as t from\"react\";var M=(e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=[\"light\",\"dark\"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y===\"class\",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n===\"system\"?c():n;p(y)}catch(n){}};var b=[\"light\",\"dark\"],I=\"(prefers-color-scheme: dark)\",O=typeof window==\"undefined\",x=t.createContext(void 0),U={setTheme:e=>{},themes:[]},z=()=>{var e;return(e=t.useContext(x))!=null?e:U},J=e=>t.useContext(x)?t.createElement(t.Fragment,null,e.children):t.createElement(V,{...e}),N=[\"light\",\"dark\"],V=({forcedTheme:e,disableTransitionOnChange:i=!1,enableSystem:s=!0,enableColorScheme:u=!0,storageKey:m=\"theme\",themes:a=N,defaultTheme:l=s?\"system\":\"light\",attribute:h=\"data-theme\",value:d,children:w,nonce:p,scriptProps:R})=>{let[c,n]=t.useState(()=>H(m,l)),[T,y]=t.useState(()=>c===\"system\"?E():c),k=d?Object.values(d):a,S=t.useCallback(o=>{let r=o;if(!r)return;o===\"system\"&&s&&(r=E());let v=d?d[r]:r,C=i?W(p):null,P=document.documentElement,L=g=>{g===\"class\"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith(\"data-\")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(L):L(h),u){let g=b.includes(l)?l:null,D=b.includes(r)?r:g;P.style.colorScheme=D}C==null||C()},[p]),f=t.useCallback(o=>{let r=typeof o==\"function\"?o(c):o;n(r);try{localStorage.setItem(m,r)}catch(v){}},[c]),A=t.useCallback(o=>{let r=E(o);y(r),c===\"system\"&&s&&!e&&S(\"system\")},[c,e]);t.useEffect(()=>{let o=window.matchMedia(I);return o.addListener(A),A(o),()=>o.removeListener(A)},[A]),t.useEffect(()=>{let o=r=>{r.key===m&&(r.newValue?n(r.newValue):f(l))};return window.addEventListener(\"storage\",o),()=>window.removeEventListener(\"storage\",o)},[f]),t.useEffect(()=>{S(e!=null?e:c)},[e,c]);let Q=t.useMemo(()=>({theme:c,setTheme:f,forcedTheme:e,resolvedTheme:c===\"system\"?T:c,themes:s?[...a,\"system\"]:a,systemTheme:s?T:void 0}),[c,f,e,T,s,a]);return t.createElement(x.Provider,{value:Q},t.createElement(_,{forcedTheme:e,storageKey:m,attribute:h,enableSystem:s,enableColorScheme:u,defaultTheme:l,value:d,themes:a,nonce:p,scriptProps:R}),w)},_=t.memo(({forcedTheme:e,storageKey:i,attribute:s,enableSystem:u,enableColorScheme:m,defaultTheme:a,value:l,themes:h,nonce:d,scriptProps:w})=>{let p=JSON.stringify([s,i,a,e,h,l,u,m]).slice(1,-1);return t.createElement(\"script\",{...w,suppressHydrationWarning:!0,nonce:typeof window==\"undefined\"?d:\"\",dangerouslySetInnerHTML:{__html:`(${M.toString()})(${p})`}})}),H=(e,i)=>{if(O)return;let s;try{s=localStorage.getItem(e)||void 0}catch(u){}return s||i},W=e=>{let i=document.createElement(\"style\");return e&&i.setAttribute(\"nonce\",e),i.appendChild(document.createTextNode(\"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\")),document.head.appendChild(i),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(i)},1)}},E=e=>(e||(e=window.matchMedia(I)),e.matches?\"dark\":\"light\");export{J as ThemeProvider,z as useTheme};\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(toasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n toasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!toasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, toasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: toasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","'use client';\n\nimport * as React from 'react';\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';\nimport { type VariantProps } from 'class-variance-authority';\n\nimport { cn, toggleVariants } from '@/packages/shadcns';\n\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n\tsize: 'default',\n\tvariant: 'default',\n});\n\nfunction ToggleGroup({\n\tclassName,\n\tvariant,\n\tsize,\n\tchildren,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<ToggleGroupPrimitive.Root\n\t\t\tdata-slot=\"toggle-group\"\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cn(\n\t\t\t\t'group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ToggleGroupContext.Provider value={{ variant, size }}>\n\t\t\t\t{children}\n\t\t\t</ToggleGroupContext.Provider>\n\t\t</ToggleGroupPrimitive.Root>\n\t);\n}\n\nfunction ToggleGroupItem({\n\tclassName,\n\tchildren,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n\tconst context = React.useContext(ToggleGroupContext);\n\n\treturn (\n\t\t<ToggleGroupPrimitive.Item\n\t\t\tdata-slot=\"toggle-group-item\"\n\t\t\tdata-variant={context.variant || variant}\n\t\t\tdata-size={context.size || size}\n\t\t\tclassName={cn(\n\t\t\t\ttoggleVariants({\n\t\t\t\t\tvariant: context.variant || variant,\n\t\t\t\t\tsize: context.size || size,\n\t\t\t\t}),\n\t\t\t\t'min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ToggleGroupPrimitive.Item>\n\t);\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport * as React from 'react';\nimport * as TogglePrimitive from '@radix-ui/react-toggle';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/packages/shadcns';\n\nconst toggleVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'bg-transparent',\n\t\t\t\toutline:\n\t\t\t\t\t'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: 'h-9 px-2 min-w-9',\n\t\t\t\tsm: 'h-8 px-1.5 min-w-8',\n\t\t\t\tlg: 'h-10 px-2.5 min-w-10',\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t\tsize: 'default',\n\t\t},\n\t},\n);\n\nfunction Toggle({\n\tclassName,\n\tvariant,\n\tsize,\n\t...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n\treturn (\n\t\t<TogglePrimitive.Root\n\t\t\tdata-slot=\"toggle\"\n\t\t\tclassName={cn(toggleVariants({ variant, size, className }))}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Toggle, toggleVariants };\n","import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs: ClassValue[]): string {\n\treturn twMerge(clsx(...inputs));\n}\n","{\n \"name\": \"lenis\",\n \"version\": \"1.3.14\",\n \"description\": \"How smooth scroll should be\",\n \"type\": \"module\",\n \"sideEffects\": false,\n \"author\": \"darkroom.engineering\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/darkroomengineering/lenis.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/darkroomengineering/lenis/issues\"\n },\n \"homepage\": \"https://github.com/darkroomengineering/lenis\",\n \"funding\": {\n \"type\": \"github\",\n \"url\": \"https://github.com/sponsors/darkroomengineering\"\n },\n \"keywords\": [\n \"scroll\",\n \"smooth\",\n \"lenis\",\n \"react\",\n \"vue\"\n ],\n \"scripts\": {\n \"build\": \"pnpm build:core && pnpm build:all\",\n \"build:core\": \"tsup --config tsup.core.ts\",\n \"build:all\": \"tsup\",\n \"dev\": \"pnpm run -w --parallel /^dev:.*/\",\n \"dev:build\": \"tsup --watch\",\n \"dev:playground\": \"pnpm --filter playground dev\",\n \"dev:nuxt\": \"pnpm --filter playground-nuxt dev\",\n \"readme\": \"node ./scripts/update-readme.js\",\n \"version:dev\": \"npm version prerelease --preid dev --force --no-git-tag-version\",\n \"version:patch\": \"npm version patch --force --no-git-tag-version\",\n \"version:minor\": \"npm version minor --force --no-git-tag-version\",\n \"version:major\": \"npm version major --force --no-git-tag-version\",\n \"postversion\": \"pnpm build && pnpm readme\",\n \"publish:dev\": \"npm publish --tag dev\",\n \"publish:main\": \"npm publish\"\n },\n \"files\": [\n \"dist\"\n ],\n \"devDependencies\": {\n \"terser\": \"^5.37.0\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.3\"\n },\n \"peerDependencies\": {\n \"react\": \">=17.0.0\",\n \"vue\": \">=3.0.0\",\n \"@nuxt/kit\": \">=3.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"react\": {\n \"optional\": true\n },\n \"vue\": {\n \"optional\": true\n },\n \"@nuxt/kit\": {\n \"optional\": true\n }\n },\n \"unpkg\": \"./dist/lenis.mjs\",\n \"main\": \"./dist/lenis.mjs\",\n \"module\": \"./dist/lenis.mjs\",\n \"types\": \"./dist/lenis.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/lenis.d.ts\",\n \"default\": \"./dist/lenis.mjs\"\n },\n \"./react\": {\n \"types\": \"./dist/lenis-react.d.ts\",\n \"default\": \"./dist/lenis-react.mjs\"\n },\n \"./snap\": {\n \"types\": \"./dist/lenis-snap.d.ts\",\n \"default\": \"./dist/lenis-snap.mjs\"\n },\n \"./vue\": {\n \"types\": \"./dist/lenis-vue.d.ts\",\n \"default\": \"./dist/lenis-vue.mjs\"\n },\n \"./nuxt\": {\n \"default\": \"./dist/lenis-vue-nuxt.mjs\"\n },\n \"./nuxt/runtime/*\": {\n \"default\": \"./dist/nuxt/runtime/*.mjs\"\n },\n \"./dist/*\": \"./dist/*\"\n }\n}\n","/**\r\n * Clamp a value between a minimum and maximum value\r\n *\r\n * @param min Minimum value\r\n * @param input Value to clamp\r\n * @param max Maximum value\r\n * @returns Clamped value\r\n */\r\nexport function clamp(min: number, input: number, max: number) {\r\n return Math.max(min, Math.min(input, max))\r\n}\r\n\r\n/**\r\n * Truncate a floating-point number to a specified number of decimal places\r\n *\r\n * @param value Value to truncate\r\n * @param decimals Number of decimal places to truncate to\r\n * @returns Truncated value\r\n */\r\nexport function truncate(value: number, decimals = 0) {\r\n return parseFloat(value.toFixed(decimals))\r\n}\r\n\r\n/**\r\n * Linearly interpolate between two values using an amount (0 <= t <= 1)\r\n *\r\n * @param x First value\r\n * @param y Second value\r\n * @param t Amount to interpolate (0 <= t <= 1)\r\n * @returns Interpolated value\r\n */\r\nexport function lerp(x: number, y: number, t: number) {\r\n return (1 - t) * x + t * y\r\n}\r\n\r\n/**\r\n * Damp a value over time using a damping factor\r\n * {@link http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/}\r\n *\r\n * @param x Initial value\r\n * @param y Target value\r\n * @param lambda Damping factor\r\n * @param dt Time elapsed since the last update\r\n * @returns Damped value\r\n */\r\nexport function damp(x: number, y: number, lambda: number, deltaTime: number) {\r\n return lerp(x, y, 1 - Math.exp(-lambda * deltaTime))\r\n}\r\n\r\n/**\r\n * Calculate the modulo of the dividend and divisor while keeping the result within the same sign as the divisor\r\n * {@link https://anguscroll.com/just/just-modulo}\r\n *\r\n * @param n Dividend\r\n * @param d Divisor\r\n * @returns Modulo\r\n */\r\nexport function modulo(n: number, d: number) {\r\n return ((n % d) + d) % d\r\n}\r\n","import { clamp, damp } from './maths'\r\nimport type { EasingFunction, FromToOptions, OnUpdateCallback } from './types'\r\n\r\n/**\r\n * Animate class to handle value animations with lerping or easing\r\n *\r\n * @example\r\n * const animate = new Animate()\r\n * animate.fromTo(0, 100, { duration: 1, easing: (t) => t })\r\n * animate.advance(0.5) // 50\r\n */\r\nexport class Animate {\r\n isRunning = false\r\n value = 0\r\n from = 0\r\n to = 0\r\n currentTime = 0\r\n\r\n // These are instanciated in the fromTo method\r\n lerp?: number\r\n duration?: number\r\n easing?: EasingFunction\r\n onUpdate?: OnUpdateCallback\r\n\r\n /**\r\n * Advance the animation by the given delta time\r\n *\r\n * @param deltaTime - The time in seconds to advance the animation\r\n */\r\n advance(deltaTime: number) {\r\n if (!this.isRunning) return\r\n\r\n let completed = false\r\n\r\n if (this.duration && this.easing) {\r\n this.currentTime += deltaTime\r\n const linearProgress = clamp(0, this.currentTime / this.duration, 1)\r\n\r\n completed = linearProgress >= 1\r\n const easedProgress = completed ? 1 : this.easing(linearProgress)\r\n this.value = this.from + (this.to - this.from) * easedProgress\r\n } else if (this.lerp) {\r\n this.value = damp(this.value, this.to, this.lerp * 60, deltaTime)\r\n if (Math.round(this.value) === this.to) {\r\n this.value = this.to\r\n completed = true\r\n }\r\n } else {\r\n // If no easing or lerp, just jump to the end value\r\n this.value = this.to\r\n completed = true\r\n }\r\n\r\n if (completed) {\r\n this.stop()\r\n }\r\n\r\n // Call the onUpdate callback with the current value and completed status\r\n this.onUpdate?.(this.value, completed)\r\n }\r\n\r\n /** Stop the animation */\r\n stop() {\r\n this.isRunning = false\r\n }\r\n\r\n /**\r\n * Set up the animation from a starting value to an ending value\r\n * with optional parameters for lerping, duration, easing, and onUpdate callback\r\n *\r\n * @param from - The starting value\r\n * @param to - The ending value\r\n * @param options - Options for the animation\r\n */\r\n fromTo(\r\n from: number,\r\n to: number,\r\n { lerp, duration, easing, onStart, onUpdate }: FromToOptions\r\n ) {\r\n this.from = this.value = from\r\n this.to = to\r\n this.lerp = lerp\r\n this.duration = duration\r\n this.easing = easing\r\n this.currentTime = 0\r\n this.isRunning = true\r\n\r\n onStart?.()\r\n this.onUpdate = onUpdate\r\n }\r\n}\r\n","export function debounce<CB extends (...args: any[]) => void>(\r\n callback: CB,\r\n delay: number\r\n) {\r\n let timer: number | undefined\r\n return function <T>(this: T, ...args: Parameters<typeof callback>) {\r\n let context = this\r\n clearTimeout(timer)\r\n timer = setTimeout(() => {\r\n timer = undefined\r\n callback.apply(context, args)\r\n }, delay)\r\n }\r\n}\r\n","import { debounce } from './debounce'\r\n\r\n/**\r\n * Dimensions class to handle the size of the content and wrapper\r\n *\r\n * @example\r\n * const dimensions = new Dimensions(wrapper, content)\r\n * dimensions.on('resize', (e) => {\r\n * console.log(e.width, e.height)\r\n * })\r\n */\r\nexport class Dimensions {\r\n width = 0\r\n height = 0\r\n scrollHeight = 0\r\n scrollWidth = 0\r\n\r\n // These are instanciated in the constructor as they need information from the options\r\n private debouncedResize?: (...args: unknown[]) => void\r\n private wrapperResizeObserver?: ResizeObserver\r\n private contentResizeObserver?: ResizeObserver\r\n\r\n constructor(\r\n private wrapper: HTMLElement | Window | Element,\r\n private content: HTMLElement | Element,\r\n { autoResize = true, debounce: debounceValue = 250 } = {}\r\n ) {\r\n if (autoResize) {\r\n this.debouncedResize = debounce(this.resize, debounceValue)\r\n\r\n if (this.wrapper instanceof Window) {\r\n window.addEventListener('resize', this.debouncedResize, false)\r\n } else {\r\n this.wrapperResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.wrapperResizeObserver.observe(this.wrapper)\r\n }\r\n\r\n this.contentResizeObserver = new ResizeObserver(this.debouncedResize)\r\n this.contentResizeObserver.observe(this.content)\r\n }\r\n\r\n this.resize()\r\n }\r\n\r\n destroy() {\r\n this.wrapperResizeObserver?.disconnect()\r\n this.contentResizeObserver?.disconnect()\r\n\r\n if (this.wrapper === window && this.debouncedResize) {\r\n window.removeEventListener('resize', this.debouncedResize, false)\r\n }\r\n }\r\n\r\n resize = () => {\r\n this.onWrapperResize()\r\n this.onContentResize()\r\n }\r\n\r\n onWrapperResize = () => {\r\n if (this.wrapper instanceof Window) {\r\n this.width = window.innerWidth\r\n this.height = window.innerHeight\r\n } else {\r\n this.width = this.wrapper.clientWidth\r\n this.height = this.wrapper.clientHeight\r\n }\r\n }\r\n\r\n onContentResize = () => {\r\n if (this.wrapper instanceof Window) {\r\n this.scrollHeight = this.content.scrollHeight\r\n this.scrollWidth = this.content.scrollWidth\r\n } else {\r\n this.scrollHeight = this.wrapper.scrollHeight\r\n this.scrollWidth = this.wrapper.scrollWidth\r\n }\r\n }\r\n\r\n get limit() {\r\n return {\r\n x: this.scrollWidth - this.width,\r\n y: this.scrollHeight - this.height,\r\n }\r\n }\r\n}\r\n","/**\r\n * Emitter class to handle events\r\n * @example\r\n * const emitter = new Emitter()\r\n * emitter.on('event', (data) => {\r\n * console.log(data)\r\n * })\r\n * emitter.emit('event', 'data')\r\n */\r\nexport class Emitter {\r\n private events: Record<\r\n string,\r\n Array<(...args: unknown[]) => void> | undefined\r\n > = {}\r\n\r\n /**\r\n * Emit an event with the given data\r\n * @param event Event name\r\n * @param args Data to pass to the event handlers\r\n */\r\n emit(event: string, ...args: unknown[]) {\r\n let callbacks = this.events[event] || []\r\n for (let i = 0, length = callbacks.length; i < length; i++) {\r\n callbacks[i]?.(...args)\r\n }\r\n }\r\n\r\n /**\r\n * Add a callback to the event\r\n * @param event Event name\r\n * @param cb Callback function\r\n * @returns Unsubscribe function\r\n */\r\n on<CB extends (...args: any[]) => void>(event: string, cb: CB) {\r\n // Add the callback to the event's callback list, or create a new list with the callback\r\n this.events[event]?.push(cb) || (this.events[event] = [cb])\r\n\r\n // Return an unsubscribe function\r\n return () => {\r\n this.events[event] = this.events[event]?.filter((i) => cb !== i)\r\n }\r\n }\r\n\r\n /**\r\n * Remove a callback from the event\r\n * @param event Event name\r\n * @param callback Callback function\r\n */\r\n off<CB extends (...args: any[]) => void>(event: string, callback: CB) {\r\n this.events[event] = this.events[event]?.filter((i) => callback !== i)\r\n }\r\n\r\n /**\r\n * Remove all event listeners and clean up\r\n */\r\n destroy() {\r\n this.events = {}\r\n }\r\n}\r\n","import { Emitter } from './emitter'\r\nimport type { VirtualScrollCallback } from './types'\r\n\r\nconst LINE_HEIGHT = 100 / 6\r\nconst listenerOptions: AddEventListenerOptions = { passive: false }\r\n\r\nexport class VirtualScroll {\r\n touchStart = {\r\n x: 0,\r\n y: 0,\r\n }\r\n lastDelta = {\r\n x: 0,\r\n y: 0,\r\n }\r\n window = {\r\n width: 0,\r\n height: 0,\r\n }\r\n private emitter = new Emitter()\r\n\r\n constructor(\r\n private element: HTMLElement,\r\n private options = { wheelMultiplier: 1, touchMultiplier: 1 }\r\n ) {\r\n window.addEventListener('resize', this.onWindowResize, false)\r\n this.onWindowResize()\r\n\r\n this.element.addEventListener('wheel', this.onWheel, listenerOptions)\r\n this.element.addEventListener(\r\n 'touchstart',\r\n this.onTouchStart,\r\n listenerOptions\r\n )\r\n this.element.addEventListener(\r\n 'touchmove',\r\n this.onTouchMove,\r\n listenerOptions\r\n )\r\n this.element.addEventListener('touchend', this.onTouchEnd, listenerOptions)\r\n }\r\n\r\n /**\r\n * Add an event listener for the given event and callback\r\n *\r\n * @param event Event name\r\n * @param callback Callback function\r\n */\r\n on(event: string, callback: VirtualScrollCallback) {\r\n return this.emitter.on(event, callback)\r\n }\r\n\r\n /** Remove all event listeners and clean up */\r\n destroy() {\r\n this.emitter.destroy()\r\n\r\n window.removeEventListener('resize', this.onWindowResize, false)\r\n\r\n this.element.removeEventListener('wheel', this.onWheel, listenerOptions)\r\n this.element.removeEventListener(\r\n 'touchstart',\r\n this.onTouchStart,\r\n listenerOptions\r\n )\r\n this.element.removeEventListener(\r\n 'touchmove',\r\n this.onTouchMove,\r\n listenerOptions\r\n )\r\n this.element.removeEventListener(\r\n 'touchend',\r\n this.onTouchEnd,\r\n listenerOptions\r\n )\r\n }\r\n\r\n /**\r\n * Event handler for 'touchstart' event\r\n *\r\n * @param event Touch event\r\n */\r\n onTouchStart = (event: TouchEvent) => {\r\n // @ts-expect-error - event.targetTouches is not defined\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: 0,\r\n y: 0,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX: 0,\r\n deltaY: 0,\r\n event,\r\n })\r\n }\r\n\r\n /** Event handler for 'touchmove' event */\r\n onTouchMove = (event: TouchEvent) => {\r\n // @ts-expect-error - event.targetTouches is not defined\r\n const { clientX, clientY } = event.targetTouches\r\n ? event.targetTouches[0]\r\n : event\r\n\r\n const deltaX = -(clientX - this.touchStart.x) * this.options.touchMultiplier\r\n const deltaY = -(clientY - this.touchStart.y) * this.options.touchMultiplier\r\n\r\n this.touchStart.x = clientX\r\n this.touchStart.y = clientY\r\n\r\n this.lastDelta = {\r\n x: deltaX,\r\n y: deltaY,\r\n }\r\n\r\n this.emitter.emit('scroll', {\r\n deltaX,\r\n deltaY,\r\n event,\r\n })\r\n }\r\n\r\n onTouchEnd = (event: TouchEvent) => {\r\n this.emitter.emit('scroll', {\r\n deltaX: this.lastDelta.x,\r\n deltaY: this.lastDelta.y,\r\n event,\r\n })\r\n }\r\n\r\n /** Event handler for 'wheel' event */\r\n onWheel = (event: WheelEvent) => {\r\n let { deltaX, deltaY, deltaMode } = event\r\n\r\n const multiplierX =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.window.width : 1\r\n const multiplierY =\r\n deltaMode === 1 ? LINE_HEIGHT : deltaMode === 2 ? this.window.height : 1\r\n\r\n deltaX *= multiplierX\r\n deltaY *= multiplierY\r\n\r\n deltaX *= this.options.wheelMultiplier\r\n deltaY *= this.options.wheelMultiplier\r\n\r\n this.emitter.emit('scroll', { deltaX, deltaY, event })\r\n }\r\n\r\n onWindowResize = () => {\r\n this.window = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n }\r\n}\r\n","import { version } from '../../../package.json'\nimport { Animate } from './animate'\nimport { Dimensions } from './dimensions'\nimport { Emitter } from './emitter'\nimport { clamp, modulo } from './maths'\nimport type {\n LenisEvent,\n LenisOptions,\n ScrollCallback,\n Scrolling,\n ScrollToOptions,\n UserData,\n VirtualScrollCallback,\n VirtualScrollData,\n} from './types'\nimport { VirtualScroll } from './virtual-scroll'\n\n// Technical explanation\n// - listen to 'wheel' events\n// - prevent 'wheel' event to prevent scroll\n// - normalize wheel delta\n// - add delta to targetScroll\n// - animate scroll to targetScroll (smooth context)\n// - if animation is not running, listen to 'scroll' events (native context)\n\ntype OptionalPick<T, F extends keyof T> = Omit<T, F> & Partial<Pick<T, F>>\n\nconst defaultEasing = (t: number) => Math.min(1, 1.001 - Math.pow(2, -10 * t))\n\nexport class Lenis {\n private _isScrolling: Scrolling = false // true when scroll is animating\n private _isStopped = false // true if user should not be able to scroll - enable/disable programmatically\n private _isLocked = false // same as isStopped but enabled/disabled when scroll reaches target\n private _preventNextNativeScrollEvent = false\n private _resetVelocityTimeout: ReturnType<typeof setTimeout> | null = null\n private __rafID: number | null = null\n\n /**\n * Whether or not the user is touching the screen\n */\n isTouching?: boolean\n /**\n * The time in ms since the lenis instance was created\n */\n time = 0\n /**\n * User data that will be forwarded through the scroll event\n *\n * @example\n * lenis.scrollTo(100, {\n * userData: {\n * foo: 'bar'\n * }\n * })\n */\n userData: UserData = {}\n /**\n * The last velocity of the scroll\n */\n lastVelocity = 0\n /**\n * The current velocity of the scroll\n */\n velocity = 0\n /**\n * The direction of the scroll\n */\n direction: 1 | -1 | 0 = 0\n /**\n * The options passed to the lenis instance\n */\n options: OptionalPick<\n Required<LenisOptions>,\n 'duration' | 'easing' | 'prevent' | 'virtualScroll'\n >\n /**\n * The target scroll value\n */\n targetScroll: number\n /**\n * The animated scroll value\n */\n animatedScroll: number\n\n // These are instanciated here as they don't need information from the options\n private readonly animate = new Animate()\n private readonly emitter = new Emitter()\n // These are instanciated in the constructor as they need information from the options\n readonly dimensions: Dimensions // This is not private because it's used in the Snap class\n private readonly virtualScroll: VirtualScroll\n\n constructor({\n wrapper = window,\n content = document.documentElement,\n eventsTarget = wrapper,\n smoothWheel = true,\n syncTouch = false,\n syncTouchLerp = 0.075,\n touchInertiaExponent = 1.7,\n duration, // in seconds\n easing,\n lerp = 0.1,\n infinite = false,\n orientation = 'vertical', // vertical, horizontal\n gestureOrientation = orientation === 'horizontal' ? 'both' : 'vertical', // vertical, horizontal, both\n touchMultiplier = 1,\n wheelMultiplier = 1,\n autoResize = true,\n prevent,\n virtualScroll,\n overscroll = true,\n autoRaf = false,\n anchors = false,\n autoToggle = false, // https://caniuse.com/?search=transition-behavior\n allowNestedScroll = false,\n __experimental__naiveDimensions = false,\n }: LenisOptions = {}) {\n // Set version\n window.lenisVersion = version\n\n // Check if wrapper is <html>, fallback to window\n if (!wrapper || wrapper === document.documentElement) {\n wrapper = window\n }\n\n // flip to easing/time based animation if at least one of them is provided\n if (typeof duration === 'number' && typeof easing !== 'function') {\n easing = defaultEasing\n } else if (typeof easing === 'function' && typeof duration !== 'number') {\n duration = 1\n }\n\n // Setup options\n this.options = {\n wrapper,\n content,\n eventsTarget,\n smoothWheel,\n syncTouch,\n syncTouchLerp,\n touchInertiaExponent,\n duration,\n easing,\n lerp,\n infinite,\n gestureOrientation,\n orientation,\n touchMultiplier,\n wheelMultiplier,\n autoResize,\n prevent,\n virtualScroll,\n overscroll,\n autoRaf,\n anchors,\n autoToggle,\n allowNestedScroll,\n __experimental__naiveDimensions,\n }\n\n // Setup dimensions instance\n this.dimensions = new Dimensions(wrapper, content, { autoResize })\n\n // Setup class name\n this.updateClassName()\n\n // Set the initial scroll value for all scroll information\n this.targetScroll = this.animatedScroll = this.actualScroll\n\n // Add event listeners\n this.options.wrapper.addEventListener('scroll', this.onNativeScroll, false)\n\n this.options.wrapper.addEventListener('scrollend', this.onScrollEnd, {\n capture: true,\n })\n\n if (this.options.anchors && this.options.wrapper === window) {\n this.options.wrapper.addEventListener(\n 'click',\n this.onClick as EventListener,\n false\n )\n }\n\n this.options.wrapper.addEventListener(\n 'pointerdown',\n this.onPointerDown as EventListener,\n false\n )\n\n // Setup virtual scroll instance\n this.virtualScroll = new VirtualScroll(eventsTarget as HTMLElement, {\n touchMultiplier,\n wheelMultiplier,\n })\n this.virtualScroll.on('scroll', this.onVirtualScroll)\n\n if (this.options.autoToggle) {\n this.rootElement.addEventListener('transitionend', this.onTransitionEnd, {\n passive: true,\n })\n }\n\n if (this.options.autoRaf) {\n this.__rafID = requestAnimationFrame(this.raf)\n }\n }\n\n /**\n * Destroy the lenis instance, remove all event listeners and clean up the class name\n */\n destroy() {\n this.emitter.destroy()\n\n this.options.wrapper.removeEventListener(\n 'scroll',\n this.onNativeScroll,\n false\n )\n\n this.options.wrapper.removeEventListener('scrollend', this.onScrollEnd, {\n capture: true,\n })\n\n this.options.wrapper.removeEventListener(\n 'pointerdown',\n this.onPointerDown as EventListener,\n false\n )\n\n if (this.options.anchors && this.options.wrapper === window) {\n this.options.wrapper.removeEventListener(\n 'click',\n this.onClick as EventListener,\n false\n )\n }\n\n this.virtualScroll.destroy()\n this.dimensions.destroy()\n\n this.cleanUpClassName()\n\n if (this.__rafID) {\n cancelAnimationFrame(this.__rafID)\n }\n }\n\n /**\n * Add an event listener for the given event and callback\n *\n * @param event Event name\n * @param callback Callback function\n * @returns Unsubscribe function\n */\n on(event: 'scroll', callback: ScrollCallback): () => void\n on(event: 'virtual-scroll', callback: VirtualScrollCallback): () => void\n on(event: LenisEvent, callback: any) {\n return this.emitter.on(event, callback)\n }\n\n /**\n * Remove an event listener for the given event and callback\n *\n * @param event Event name\n * @param callback Callback function\n */\n off(event: 'scroll', callback: ScrollCallback): void\n off(event: 'virtual-scroll', callback: VirtualScrollCallback): void\n off(event: LenisEvent, callback: any) {\n return this.emitter.off(event, callback)\n }\n\n private onScrollEnd = (e: Event | CustomEvent) => {\n if (!(e instanceof CustomEvent)) {\n if (this.isScrolling === 'smooth' || this.isScrolling === false) {\n e.stopPropagation()\n }\n }\n }\n\n private dispatchScrollendEvent = () => {\n this.options.wrapper.dispatchEvent(\n new CustomEvent('scrollend', {\n bubbles: this.options.wrapper === window,\n // cancelable: false,\n detail: {\n lenisScrollEnd: true,\n },\n })\n )\n }\n\n private onTransitionEnd = (event: TransitionEvent) => {\n if (event.propertyName.includes('overflow')) {\n const property = this.isHorizontal ? 'overflow-x' : 'overflow-y'\n\n const overflow = getComputedStyle(this.rootElement)[\n property as keyof CSSStyleDeclaration\n ] as string\n\n if (['hidden', 'clip'].includes(overflow)) {\n this.internalStop()\n } else {\n this.internalStart()\n }\n }\n }\n\n private setScroll(scroll: number) {\n // behavior: 'instant' bypasses the scroll-behavior CSS property\n\n if (this.isHorizontal) {\n this.options.wrapper.scrollTo({ left: scroll, behavior: 'instant' })\n } else {\n this.options.wrapper.scrollTo({ top: scroll, behavior: 'instant' })\n }\n }\n\n private onClick = (event: PointerEvent | MouseEvent) => {\n const path = event.composedPath()\n const anchor = path.find(\n (node) =>\n node instanceof HTMLAnchorElement &&\n node.getAttribute('href')?.includes('#')\n ) as HTMLAnchorElement | undefined\n if (anchor) {\n const href = anchor.getAttribute('href')\n\n if (href) {\n const options =\n typeof this.options.anchors === 'object' && this.options.anchors\n ? this.options.anchors\n : undefined\n\n const target = `#${href.split('#')[1]}`\n\n this.scrollTo(target, options)\n }\n }\n }\n\n private onPointerDown = (event: PointerEvent | MouseEvent) => {\n if (event.button === 1) {\n this.reset()\n }\n }\n\n private onVirtualScroll = (data: VirtualScrollData) => {\n if (\n typeof this.options.virtualScroll === 'function' &&\n this.options.virtualScroll(data) === false\n )\n return\n\n const { deltaX, deltaY, event } = data\n\n this.emitter.emit('virtual-scroll', { deltaX, deltaY, event })\n\n // keep zoom feature\n if (event.ctrlKey) return\n // @ts-ignore\n if (event.lenisStopPropagation) return\n\n const isTouch = event.type.includes('touch')\n const isWheel = event.type.includes('wheel')\n\n this.isTouching = event.type === 'touchstart' || event.type === 'touchmove'\n // if (event.type === 'touchend') {\n // console.log('touchend', this.scroll)\n // // this.lastVelocity = this.velocity\n // // this.velocity = 0\n // // this.isScrolling = false\n // this.emit({ type: 'touchend' })\n // // alert('touchend')\n // return\n // }\n\n const isClickOrTap = deltaX === 0 && deltaY === 0\n\n const isTapToStop =\n this.options.syncTouch &&\n isTouch &&\n event.type === 'touchstart' &&\n isClickOrTap &&\n !this.isStopped &&\n !this.isLocked\n\n if (isTapToStop) {\n this.reset()\n return\n }\n\n // const isPullToRefresh =\n // this.options.gestureOrientation === 'vertical' &&\n // this.scroll === 0 &&\n // !this.options.infinite &&\n // deltaY <= 5 // touch pull to refresh, not reliable yet\n\n const isUnknownGesture =\n (this.options.gestureOrientation === 'vertical' && deltaY === 0) ||\n (this.options.gestureOrientation === 'horizontal' && deltaX === 0)\n\n if (isClickOrTap || isUnknownGesture) {\n // console.log('prevent')\n return\n }\n\n // catch if scrolling on nested scroll elements\n let composedPath = event.composedPath()\n composedPath = composedPath.slice(0, composedPath.indexOf(this.rootElement)) // remove parents elements\n\n const prevent = this.options.prevent\n\n if (\n !!composedPath.find(\n (node) =>\n node instanceof HTMLElement &&\n ((typeof prevent === 'function' && prevent?.(node)) ||\n node.hasAttribute?.('data-lenis-prevent') ||\n (isTouch && node.hasAttribute?.('data-lenis-prevent-touch')) ||\n (isWheel && node.hasAttribute?.('data-lenis-prevent-wheel')) ||\n (this.options.allowNestedScroll &&\n this.checkNestedScroll(node, { deltaX, deltaY })))\n )\n )\n return\n\n if (this.isStopped || this.isLocked) {\n if (event.cancelable) {\n event.preventDefault() // this will stop forwarding the event to the parent, this is problematic\n }\n return\n }\n\n const isSmooth =\n (this.options.syncTouch && isTouch) ||\n (this.options.smoothWheel && isWheel)\n\n if (!isSmooth) {\n this.isScrolling = 'native'\n this.animate.stop()\n // @ts-ignore\n event.lenisStopPropagation = true\n return\n }\n\n let delta = deltaY\n if (this.options.gestureOrientation === 'both') {\n delta = Math.abs(deltaY) > Math.abs(deltaX) ? deltaY : deltaX\n } else if (this.options.gestureOrientation === 'horizontal') {\n delta = deltaX\n }\n\n if (\n !this.options.overscroll ||\n this.options.infinite ||\n (this.options.wrapper !== window &&\n this.limit > 0 &&\n ((this.animatedScroll > 0 && this.animatedScroll < this.limit) ||\n (this.animatedScroll === 0 && deltaY > 0) ||\n (this.animatedScroll === this.limit && deltaY < 0)))\n ) {\n // @ts-ignore\n event.lenisStopPropagation = true\n // event.stopPropagation()\n }\n\n if (event.cancelable) {\n event.preventDefault()\n }\n\n const isSyncTouch = isTouch && this.options.syncTouch\n const isTouchEnd = isTouch && event.type === 'touchend'\n\n const hasTouchInertia = isTouchEnd\n\n if (hasTouchInertia) {\n // delta = this.velocity * this.options.touchInertiaMultiplier\n delta =\n Math.sign(this.velocity) *\n Math.pow(Math.abs(this.velocity), this.options.touchInertiaExponent)\n }\n\n this.scrollTo(this.targetScroll + delta, {\n programmatic: false,\n ...(isSyncTouch\n ? {\n lerp: hasTouchInertia ? this.options.syncTouchLerp : 1,\n // immediate: !hasTouchInertia,\n }\n : {\n lerp: this.options.lerp,\n duration: this.options.duration,\n easing: this.options.easing,\n }),\n })\n }\n\n /**\n * Force lenis to recalculate the dimensions\n */\n resize() {\n this.dimensions.resize()\n this.animatedScroll = this.targetScroll = this.actualScroll\n this.emit()\n }\n\n private emit() {\n this.emitter.emit('scroll', this)\n }\n\n private onNativeScroll = () => {\n if (this._resetVelocityTimeout !== null) {\n clearTimeout(this._resetVelocityTimeout)\n this._resetVelocityTimeout = null\n }\n\n if (this._preventNextNativeScrollEvent) {\n this._preventNextNativeScrollEvent = false\n return\n }\n\n if (this.isScrolling === false || this.isScrolling === 'native') {\n const lastScroll = this.animatedScroll\n this.animatedScroll = this.targetScroll = this.actualScroll\n this.lastVelocity = this.velocity\n this.velocity = this.animatedScroll - lastScroll\n this.direction = Math.sign(\n this.animatedScroll - lastScroll\n ) as Lenis['direction']\n\n if (!this.isStopped) {\n this.isScrolling = 'native'\n }\n\n this.emit()\n\n if (this.velocity !== 0) {\n this._resetVelocityTimeout = setTimeout(() => {\n this.lastVelocity = this.velocity\n this.velocity = 0\n this.isScrolling = false\n this.emit()\n }, 400)\n }\n }\n }\n\n private reset() {\n this.isLocked = false\n this.isScrolling = false\n this.animatedScroll = this.targetScroll = this.actualScroll\n this.lastVelocity = this.velocity = 0\n this.animate.stop()\n }\n\n /**\n * Start lenis scroll after it has been stopped\n */\n start() {\n if (!this.isStopped) return\n\n if (this.options.autoToggle) {\n this.rootElement.style.removeProperty('overflow')\n return\n }\n\n this.internalStart()\n }\n\n private internalStart() {\n if (!this.isStopped) return\n\n this.reset()\n this.isStopped = false\n this.emit()\n }\n\n /**\n * Stop lenis scroll\n */\n stop() {\n if (this.isStopped) return\n\n if (this.options.autoToggle) {\n this.rootElement.style.setProperty('overflow', 'clip')\n return\n }\n\n this.internalStop()\n }\n\n private internalStop() {\n if (this.isStopped) return\n\n this.reset()\n this.isStopped = true\n this.emit()\n }\n\n /**\n * RequestAnimationFrame for lenis\n *\n * @param time The time in ms from an external clock like `requestAnimationFrame` or Tempus\n */\n raf = (time: number) => {\n const deltaTime = time - (this.time || time)\n this.time = time\n\n this.animate.advance(deltaTime * 0.001)\n\n if (this.options.autoRaf) {\n this.__rafID = requestAnimationFrame(this.raf)\n }\n }\n\n /**\n * Scroll to a target value\n *\n * @param target The target value to scroll to\n * @param options The options for the scroll\n *\n * @example\n * lenis.scrollTo(100, {\n * offset: 100,\n * duration: 1,\n * easing: (t) => 1 - Math.cos((t * Math.PI) / 2),\n * lerp: 0.1,\n * onStart: () => {\n * console.log('onStart')\n * },\n * onComplete: () => {\n * console.log('onComplete')\n * },\n * })\n */\n scrollTo(\n target: number | string | HTMLElement,\n {\n offset = 0,\n immediate = false,\n lock = false,\n duration = this.options.duration,\n easing = this.options.easing,\n lerp = this.options.lerp,\n onStart,\n onComplete,\n force = false, // scroll even if stopped\n programmatic = true, // called from outside of the class\n userData,\n }: ScrollToOptions = {}\n ) {\n if ((this.isStopped || this.isLocked) && !force) return\n\n // keywords\n if (\n typeof target === 'string' &&\n ['top', 'left', 'start', '#'].includes(target)\n ) {\n target = 0\n } else if (\n typeof target === 'string' &&\n ['bottom', 'right', 'end'].includes(target)\n ) {\n target = this.limit\n } else {\n let node\n\n if (typeof target === 'string') {\n // CSS selector\n node = document.querySelector(target)\n\n if (!node) {\n if (target === '#top') {\n target = 0\n } else {\n console.warn('Lenis: Target not found', target)\n }\n }\n } else if (target instanceof HTMLElement && target?.nodeType) {\n // Node element\n node = target\n }\n\n if (node) {\n if (this.options.wrapper !== window) {\n // nested scroll offset correction\n const wrapperRect = this.rootElement.getBoundingClientRect()\n offset -= this.isHorizontal ? wrapperRect.left : wrapperRect.top\n }\n\n const rect = node.getBoundingClientRect()\n\n target =\n (this.isHorizontal ? rect.left : rect.top) + this.animatedScroll\n }\n }\n\n if (typeof target !== 'number') return\n\n target += offset\n target = Math.round(target)\n\n if (this.options.infinite) {\n if (programmatic) {\n this.targetScroll = this.animatedScroll = this.scroll\n\n const distance = target - this.animatedScroll\n\n if (distance > this.limit / 2) {\n target = target - this.limit\n } else if (distance < -this.limit / 2) {\n target = target + this.limit\n }\n }\n } else {\n target = clamp(0, target, this.limit)\n }\n\n if (target === this.targetScroll) {\n onStart?.(this)\n onComplete?.(this)\n return\n }\n\n this.userData = userData ?? {}\n\n if (immediate) {\n this.animatedScroll = this.targetScroll = target\n this.setScroll(this.scroll)\n this.reset()\n this.preventNextNativeScrollEvent()\n this.emit()\n onComplete?.(this)\n this.userData = {}\n\n requestAnimationFrame(() => {\n this.dispatchScrollendEvent()\n })\n return\n }\n\n if (!programmatic) {\n this.targetScroll = target\n }\n\n // flip to easing/time based animation if at least one of them is provided\n if (typeof duration === 'number' && typeof easing !== 'function') {\n easing = defaultEasing\n } else if (typeof easing === 'function' && typeof duration !== 'number') {\n duration = 1\n }\n\n this.animate.fromTo(this.animatedScroll, target, {\n duration,\n easing,\n lerp,\n onStart: () => {\n // started\n if (lock) this.isLocked = true\n this.isScrolling = 'smooth'\n onStart?.(this)\n },\n onUpdate: (value: number, completed: boolean) => {\n this.isScrolling = 'smooth'\n\n // updated\n this.lastVelocity = this.velocity\n this.velocity = value - this.animatedScroll\n this.direction = Math.sign(this.velocity) as Lenis['direction']\n\n this.animatedScroll = value\n this.setScroll(this.scroll)\n\n if (programmatic) {\n // wheel during programmatic should stop it\n this.targetScroll = value\n }\n\n if (!completed) this.emit()\n\n if (completed) {\n this.reset()\n this.emit()\n onComplete?.(this)\n this.userData = {}\n\n requestAnimationFrame(() => {\n this.dispatchScrollendEvent()\n })\n\n // avoid emitting event twice\n this.preventNextNativeScrollEvent()\n }\n },\n })\n }\n\n private preventNextNativeScrollEvent() {\n this._preventNextNativeScrollEvent = true\n\n requestAnimationFrame(() => {\n this._preventNextNativeScrollEvent = false\n })\n }\n\n private checkNestedScroll(\n node: HTMLElement,\n { deltaX, deltaY }: { deltaX: number; deltaY: number }\n ) {\n const time = Date.now()\n\n // @ts-ignore\n const cache = (node._lenis ??= {})\n\n let hasOverflowX,\n hasOverflowY,\n isScrollableX,\n isScrollableY,\n scrollWidth,\n scrollHeight,\n clientWidth,\n clientHeight\n\n const gestureOrientation = this.options.gestureOrientation\n\n if (time - (cache.time ?? 0) > 2000) {\n cache.time = Date.now()\n\n const computedStyle = window.getComputedStyle(node)\n cache.computedStyle = computedStyle\n\n const overflowXString = computedStyle.overflowX\n const overflowYString = computedStyle.overflowY\n\n hasOverflowX = ['auto', 'overlay', 'scroll'].includes(overflowXString)\n hasOverflowY = ['auto', 'overlay', 'scroll'].includes(overflowYString)\n cache.hasOverflowX = hasOverflowX\n cache.hasOverflowY = hasOverflowY\n\n if (!hasOverflowX && !hasOverflowY) return false // if no overflow, it's not scrollable no matter what, early return saves some computations\n if (gestureOrientation === 'vertical' && !hasOverflowY) return false\n if (gestureOrientation === 'horizontal' && !hasOverflowX) return false\n\n scrollWidth = node.scrollWidth\n scrollHeight = node.scrollHeight\n\n clientWidth = node.clientWidth\n clientHeight = node.clientHeight\n\n isScrollableX = scrollWidth > clientWidth\n isScrollableY = scrollHeight > clientHeight\n\n cache.isScrollableX = isScrollableX\n cache.isScrollableY = isScrollableY\n cache.scrollWidth = scrollWidth\n cache.scrollHeight = scrollHeight\n cache.clientWidth = clientWidth\n cache.clientHeight = clientHeight\n } else {\n isScrollableX = cache.isScrollableX\n isScrollableY = cache.isScrollableY\n hasOverflowX = cache.hasOverflowX\n hasOverflowY = cache.hasOverflowY\n scrollWidth = cache.scrollWidth\n scrollHeight = cache.scrollHeight\n clientWidth = cache.clientWidth\n clientHeight = cache.clientHeight\n }\n\n if (\n (!hasOverflowX && !hasOverflowY) ||\n (!isScrollableX && !isScrollableY)\n ) {\n return false\n }\n\n if (gestureOrientation === 'vertical' && (!hasOverflowY || !isScrollableY))\n return false\n\n if (\n gestureOrientation === 'horizontal' &&\n (!hasOverflowX || !isScrollableX)\n )\n return false\n\n let orientation: 'x' | 'y' | undefined\n\n if (gestureOrientation === 'horizontal') {\n orientation = 'x'\n } else if (gestureOrientation === 'vertical') {\n orientation = 'y'\n } else {\n const isScrollingX = deltaX !== 0\n const isScrollingY = deltaY !== 0\n\n if (isScrollingX && hasOverflowX && isScrollableX) {\n orientation = 'x'\n }\n\n if (isScrollingY && hasOverflowY && isScrollableY) {\n orientation = 'y'\n }\n }\n\n if (!orientation) return false\n\n let scroll, maxScroll, delta, hasOverflow, isScrollable\n\n if (orientation === 'x') {\n scroll = node.scrollLeft\n maxScroll = scrollWidth - clientWidth\n delta = deltaX\n\n hasOverflow = hasOverflowX\n isScrollable = isScrollableX\n } else if (orientation === 'y') {\n scroll = node.scrollTop\n maxScroll = scrollHeight - clientHeight\n delta = deltaY\n\n hasOverflow = hasOverflowY\n isScrollable = isScrollableY\n } else {\n return false\n }\n\n const willScroll = delta > 0 ? scroll < maxScroll : scroll > 0\n\n return willScroll && hasOverflow && isScrollable\n }\n\n /**\n * The root element on which lenis is instanced\n */\n get rootElement() {\n return (\n this.options.wrapper === window\n ? document.documentElement\n : this.options.wrapper\n ) as HTMLElement\n }\n\n /**\n * The limit which is the maximum scroll value\n */\n get limit() {\n if (this.options.__experimental__naiveDimensions) {\n if (this.isHorizontal) {\n return this.rootElement.scrollWidth - this.rootElement.clientWidth\n } else {\n return this.rootElement.scrollHeight - this.rootElement.clientHeight\n }\n } else {\n return this.dimensions.limit[this.isHorizontal ? 'x' : 'y']\n }\n }\n\n /**\n * Whether or not the scroll is horizontal\n */\n get isHorizontal() {\n return this.options.orientation === 'horizontal'\n }\n\n /**\n * The actual scroll value\n */\n get actualScroll() {\n // value browser takes into account\n // it has to be this way because of DOCTYPE declaration\n const wrapper = this.options.wrapper as Window | HTMLElement\n\n return this.isHorizontal\n ? (wrapper as Window).scrollX ?? (wrapper as HTMLElement).scrollLeft\n : (wrapper as Window).scrollY ?? (wrapper as HTMLElement).scrollTop\n }\n\n /**\n * The current scroll value\n */\n get scroll() {\n return this.options.infinite\n ? modulo(this.animatedScroll, this.limit)\n : this.animatedScroll\n }\n\n /**\n * The progress of the scroll relative to the limit\n */\n get progress() {\n // avoid progress to be NaN\n return this.limit === 0 ? 1 : this.scroll / this.limit\n }\n\n /**\n * Current scroll state\n */\n get isScrolling() {\n return this._isScrolling\n }\n\n private set isScrolling(value: Scrolling) {\n if (this._isScrolling !== value) {\n this._isScrolling = value\n this.updateClassName()\n }\n }\n\n /**\n * Check if lenis is stopped\n */\n get isStopped() {\n return this._isStopped\n }\n\n private set isStopped(value: boolean) {\n if (this._isStopped !== value) {\n this._isStopped = value\n this.updateClassName()\n }\n }\n\n /**\n * Check if lenis is locked\n */\n get isLocked() {\n return this._isLocked\n }\n\n private set isLocked(value: boolean) {\n if (this._isLocked !== value) {\n this._isLocked = value\n this.updateClassName()\n }\n }\n\n /**\n * Check if lenis is smooth scrolling\n */\n get isSmooth() {\n return this.isScrolling === 'smooth'\n }\n\n /**\n * The class name applied to the wrapper element\n */\n get className() {\n let className = 'lenis'\n if (this.options.autoToggle) className += ' lenis-autoToggle'\n if (this.isStopped) className += ' lenis-stopped'\n if (this.isLocked) className += ' lenis-locked'\n if (this.isScrolling) className += ' lenis-scrolling'\n if (this.isScrolling === 'smooth') className += ' lenis-smooth'\n return className\n }\n\n private updateClassName() {\n this.cleanUpClassName()\n\n this.rootElement.className =\n `${this.rootElement.className} ${this.className}`.trim()\n }\n\n private cleanUpClassName() {\n this.rootElement.className = this.rootElement.className\n .replace(/lenis(-\\w+)?/g, '')\n .trim()\n }\n}\n","import { useEffect, useState } from 'react'\r\n\r\ntype Listener<S> = (state: S) => void\r\n\r\nexport class Store<S> {\r\n private listeners: Listener<S>[] = []\r\n\r\n constructor(private state: S) {}\r\n\r\n set(state: S) {\r\n this.state = state\r\n\r\n for (let listener of this.listeners) {\r\n listener(this.state)\r\n }\r\n }\r\n\r\n subscribe(listener: Listener<S>) {\r\n this.listeners = [...this.listeners, listener]\r\n return () => {\r\n this.listeners = this.listeners.filter((l) => l !== listener)\r\n }\r\n }\r\n\r\n get() {\r\n return this.state\r\n }\r\n}\r\n\r\nexport function useStore<S>(store: Store<S>) {\r\n const [state, setState] = useState(store.get())\r\n\r\n useEffect(() => {\r\n return store.subscribe((state) => setState(state))\r\n }, [store])\r\n\r\n return state\r\n}\r\n","import Lenis, { type ScrollCallback } from 'lenis'\r\nimport {\r\n createContext,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState,\r\n} from 'react'\r\nimport { Store } from './store'\r\nimport type { LenisContextValue, LenisProps, LenisRef } from './types'\r\n\r\nexport const LenisContext = createContext<LenisContextValue | null>(null)\r\n\r\n/**\r\n * The root store for the lenis context\r\n *\r\n * This store serves as a fallback for the context if it is not available\r\n * and allows us to use the global lenis instance above a provider\r\n */\r\nexport const rootLenisContextStore = new Store<LenisContextValue | null>(null)\r\n\r\n/**\r\n * React component to setup a Lenis instance\r\n */\r\nexport const ReactLenis = forwardRef<LenisRef, LenisProps>(\r\n (\r\n {\r\n children,\r\n root = false,\r\n options = {},\r\n autoRaf = true,\r\n ...props\r\n }: LenisProps,\r\n ref\r\n ) => {\r\n const wrapperRef = useRef<HTMLDivElement>(null)\r\n const contentRef = useRef<HTMLDivElement>(null)\r\n\r\n const [lenis, setLenis] = useState<Lenis | undefined>(undefined)\r\n\r\n // Setup ref\r\n useImperativeHandle(\r\n ref,\r\n () => ({\r\n wrapper: wrapperRef.current,\r\n content: contentRef.current,\r\n lenis,\r\n }),\r\n [lenis]\r\n )\r\n\r\n // Setup lenis instance\r\n useEffect(() => {\r\n const lenis = new Lenis({\r\n ...options,\r\n ...(wrapperRef.current &&\r\n contentRef.current && {\r\n wrapper: wrapperRef.current!,\r\n content: contentRef.current!,\r\n }),\r\n autoRaf: options?.autoRaf ?? autoRaf, // this is to avoid breaking the autoRaf prop if it's still used (require breaking change)\r\n })\r\n\r\n setLenis(lenis)\r\n\r\n return () => {\r\n lenis.destroy()\r\n setLenis(undefined)\r\n }\r\n }, [root, JSON.stringify({ ...options, wrapper: null, content: null })])\r\n\r\n // Handle callbacks\r\n const callbacksRefs = useRef<\r\n {\r\n callback: ScrollCallback\r\n priority: number\r\n }[]\r\n >([])\r\n\r\n const addCallback: LenisContextValue['addCallback'] = useCallback(\r\n (callback, priority) => {\r\n callbacksRefs.current.push({ callback, priority })\r\n callbacksRefs.current.sort((a, b) => a.priority - b.priority)\r\n },\r\n []\r\n )\r\n\r\n const removeCallback: LenisContextValue['removeCallback'] = useCallback(\r\n (callback) => {\r\n callbacksRefs.current = callbacksRefs.current.filter(\r\n (cb) => cb.callback !== callback\r\n )\r\n },\r\n []\r\n )\r\n\r\n // This makes sure to set the global context if the root is true\r\n useEffect(() => {\r\n if (root && lenis) {\r\n rootLenisContextStore.set({ lenis, addCallback, removeCallback })\r\n\r\n return () => rootLenisContextStore.set(null)\r\n }\r\n }, [root, lenis, addCallback, removeCallback])\r\n\r\n // Setup callback listeners\r\n useEffect(() => {\r\n if (!lenis) return\r\n\r\n const onScroll: ScrollCallback = (data) => {\r\n for (let i = 0; i < callbacksRefs.current.length; i++) {\r\n callbacksRefs.current[i]?.callback(data)\r\n }\r\n }\r\n\r\n lenis.on('scroll', onScroll)\r\n\r\n return () => {\r\n lenis.off('scroll', onScroll)\r\n }\r\n }, [lenis])\r\n\r\n if (!children) return null\r\n\r\n return (\r\n <LenisContext.Provider\r\n value={{ lenis: lenis!, addCallback, removeCallback }}\r\n >\r\n {root && root !== 'asChild' ? (\r\n children\r\n ) : (\r\n <div ref={wrapperRef} {...props}>\r\n <div ref={contentRef}>{children}</div>\r\n </div>\r\n )}\r\n </LenisContext.Provider>\r\n )\r\n }\r\n)\r\n","import type { ScrollCallback } from 'lenis'\r\nimport { useContext, useEffect } from 'react'\r\nimport { LenisContext, rootLenisContextStore } from './provider'\r\nimport { useStore } from './store'\r\nimport type { LenisContextValue } from './types'\r\n\r\n// Fall back to an empty object if both context and store are not available\r\nconst fallbackContext: Partial<LenisContextValue> = {}\r\n\r\n/**\r\n * Hook to access the Lenis instance and its methods\r\n *\r\n * @example <caption>Scroll callback</caption>\r\n * useLenis((lenis) => {\r\n * if (lenis.isScrolling) {\r\n * console.log('Scrolling...')\r\n * }\r\n *\r\n * if (lenis.progress === 1) {\r\n * console.log('At the end!')\r\n * }\r\n * })\r\n *\r\n * @example <caption>Scroll callback with dependencies</caption>\r\n * useLenis((lenis) => {\r\n * if (lenis.isScrolling) {\r\n * console.log('Scrolling...', someDependency)\r\n * }\r\n * }, [someDependency])\r\n * @example <caption>Scroll callback with priority</caption>\r\n * useLenis((lenis) => {\r\n * if (lenis.isScrolling) {\r\n * console.log('Scrolling...')\r\n * }\r\n * }, [], 1)\r\n * @example <caption>Instance access</caption>\r\n * const lenis = useLenis()\r\n *\r\n * handleClick() {\r\n * lenis.scrollTo(100, {\r\n * lerp: 0.1,\r\n * duration: 1,\r\n * easing: (t) => t,\r\n * onComplete: () => {\r\n * console.log('Complete!')\r\n * }\r\n * })\r\n * }\r\n */\r\nexport function useLenis(\r\n callback?: ScrollCallback,\r\n deps: any[] = [],\r\n priority = 0\r\n) {\r\n // Try to get the lenis instance from the context first\r\n const localContext = useContext(LenisContext)\r\n // Fall back to the root store if the context is not available\r\n const rootContext = useStore(rootLenisContextStore)\r\n // Fall back to the fallback context if all else fails\r\n const currentContext = localContext ?? rootContext ?? fallbackContext\r\n\r\n const { lenis, addCallback, removeCallback } = currentContext\r\n\r\n useEffect(() => {\r\n if (!callback || !addCallback || !removeCallback || !lenis) return\r\n\r\n addCallback(callback, priority)\r\n callback(lenis)\r\n\r\n return () => {\r\n removeCallback(callback)\r\n }\r\n }, [lenis, addCallback, removeCallback, priority, ...deps])\r\n\r\n return lenis\r\n}\r\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { memo, useEffect, useEffectEvent, useLayoutEffect, useRef, useState } from \"react\"\nimport { ReactLenis, useLenis, } from \"lenis/react\"\nimport Lenis from 'lenis'\nimport { create } from \"zustand\"\nimport { ScrollContainerContext, setScrollContainerStore } from \"./scroll-containers\"\nimport { cn } from \"@/packages/shadcns\"\nimport type { LenisRef } from \"lenis/react\"\nimport type { LenisOptions } from \"lenis\"\n\nexport interface LenisScrollProps {\n\troot?: boolean | \"asChild\"\n\tname?: string\n\toptions?: LenisOptions\n\tchildren?: React.ReactNode\n\tclassName?: string\n}\n\nexport const LenisScroll: React.FC<LenisScrollProps> = memo((props) => {\n\n\treturn (\n\t\t<>{props?.root == true\n\t\t\t? <LenisRootScroll {...props} />\n\t\t\t: <LenisContainerScroll {...props} />\n\t\t}\t</>)\n})\n\nexport const LenisRootScroll: React.FC<LenisScrollProps> = memo(({\n\troot,\n\toptions\n}) => {\n\n\tconst lenis = useLenis()\n\tconst lenisRef = useRef<LenisRef>(null)\n\n\tconst registerRootLenis = useEffectEvent(() => {\n\t\tif (!root == true || !lenis) return\n\t\tsetRootLenis(lenis)\n\t})\n\n\tuseEffect(() => { registerRootLenis() }, [lenis])\n\n\treturn (\n\t\t<ReactLenis\n\t\t\tref={lenisRef}\n\t\t\troot={root}\n\t\t\toptions={{\n\t\t\t\tautoRaf: true,\n\t\t\t\tlerp: 0.0005,\n\t\t\t\tduration: 1.5,\n\t\t\t\tsmoothWheel: true,\n\t\t\t\t...options\n\t\t\t}} />\n\t)\n})\n\ntype LenisScrollContainerProps = Omit<LenisScrollProps, \"root\">\ntype RefStateType = React.RefObject<HTMLDivElement | null> | undefined\n\nexport const LenisContainerScroll: React.FC<LenisScrollContainerProps> = memo(({\n\tname,\n\tclassName,\n\tchildren,\n\toptions,\n\t...restProps\n}) => {\n\n\tconst [containerRef, setContainerRef] = useState<RefStateType>();\n\n\tconst wrapperRef = useRef<HTMLDivElement>(null)\n\tconst contentRef = useRef<HTMLDivElement>(null)\n\n\tconst initLenis = useEffectEvent(() => {\n\t\tif (!wrapperRef.current || !contentRef.current || !name) return\n\n\t\tconst lenis = new Lenis({\n\t\t\twrapper: wrapperRef.current,\n\t\t\tcontent: contentRef.current,\n\t\t\tautoRaf: true,\n\t\t\t...options\n\t\t})\n\n\t\tsetContainerRef(contentRef)\n\t\tsetScrollContainerStore({ name, action: \"add\", node: lenis })\n\n\t\treturn () => {\n\t\t\tsetScrollContainerStore({ name, action: \"remove\" })\n\t\t\tlenis?.destroy?.()\n\t\t}\n\t})\n\n\tuseLayoutEffect(() => {\n\t\tconst effect = initLenis()\n\t\treturn effect\n\t}, [name, options])\n\n\treturn (\n\t\t<div\n\t\t\tref={wrapperRef}\n\t\t\tdata-lenis-scroll={name}\n\t\t\tclassName={cn(\"group overflow-hidden\", className)}\n\t\t\t{...restProps}\n\n\t\t>\n\t\t\t<div\n\t\t\t\tref={contentRef}\n\t\t\t\tclassName={cn(\"h-full\", \"relative\", \"will-change-transform overscroll-contain\")}\n\t\t\t>\n\t\t\t\t<ScrollContainerContext value={{ containerRef }}>\n\t\t\t\t\t{children}\n\t\t\t\t</ScrollContainerContext>\n\t\t\t</div>\n\t\t</div>\n\t)\n})\n\ninterface LenisStores {\n\troot?: Lenis | null\n}\n\nexport const useLenisStores = create<LenisStores>()(() => ({\n\troot: null,\n}))\n\nexport const setRootLenis = (lenis: Lenis) => useLenisStores.setState(() => {\n\treturn { root: lenis }\n})\n\nexport const getRootLenis = () => useLenisStores.getState()\n\n\n\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { createContext, use } from \"react\"\nimport Lenis from \"lenis\"\nimport { create } from \"zustand\"\nimport { NativeScroll } from \"./native-scroll\"\nimport { LenisScroll, LenisScrollProps } from \"./lenis-scroll\"\n\ntype PropsType<T extends React.ElementType = \"div\"> = React.ComponentProps<T> & LenisScrollProps & {\n\tname: string\n\tlenis?: boolean\n}\n\nexport const ScrollContainer = <T extends React.ElementType = \"div\">({\n\tname, lenis = false, ...props\n}: PropsType<T>) => {\n\n\treturn (\n\t\t<>{lenis\n\t\t\t? <LenisScroll name={name} {...props} />\n\t\t\t: <NativeScroll name={name} {...props} />\n\t\t}</>\n\t)\n}\n\nexport interface ScrollContainerContext {\n\tcontainerRef: React.RefObject<HTMLDivElement | null> | undefined\n}\n\nexport const ScrollContainerContext = createContext<ScrollContainerContext | null>(null)\n\nexport const useScrollContainerContext = () => {\n\tconst context = use(ScrollContainerContext)\n\tif (!context) throw new Error(\"useScrollContainerContext must be used inside ScrollContainerProvider\")\n\treturn context\n}\n\nexport interface ScrollContainersStores {\n\tcontainers: Map<string, Lenis | HTMLDivElement | null>\n}\n\nexport const useScrollContainersStores = create<ScrollContainersStores>()(() => ({\n\tcontainers: new Map(),\n}))\n\n\nexport const getScrollContainer = (name: string) => {\n\tconst stores = useScrollContainersStores.getState()\n\treturn stores.containers?.get(name)\n}\n\nexport const getScrollContainerStores = () => useScrollContainersStores.getState()\n\nexport interface SetStoreOptions {\n\tname: string\n\tnode?: Lenis | HTMLDivElement | null\n\taction: \"add\" | \"remove\",\n}\n\nexport const setScrollContainerStore = (options: SetStoreOptions) => {\n\tconst { action, name, node } = options\n\n\tuseScrollContainersStores.setState(stores => {\n\t\tconst containerDom = stores.containers?.get(name)\n\t\tconst isContainerNode = node instanceof Lenis || node instanceof HTMLDivElement\n\n\t\tif (action == \"add\" && isContainerNode) {\n\t\t\tif (containerDom == node) return stores\n\t\t\t// console.log(\"node\", node, name);\n\t\t\tstores.containers?.set(name, node)\n\n\t\t} else if (action == \"remove\" && containerDom) {\n\t\t\tstores.containers?.delete(name)\n\t\t}\n\n\t\treturn { containers: stores.containers }\n\t})\n}\n","\n\n// update: 2025.11.12\n// version: 0.0.1.bate\n// dev: wade\n\nimport { memo, useEffectEvent, useEffect, useRef, useState } from \"react\"\nimport { ScrollContainerContext, setScrollContainerStore } from \"./scroll-containers\"\nimport { cn } from \"@/packages/shadcns\"\n\ntype PropsType<T extends React.ElementType = \"div\"> = React.ComponentProps<T> & {\n\tname: string\n\ttag?: T\n}\n\nexport const NativeScroll = memo(<T extends React.ElementType = \"div\">({\n\ttag: Component = \"div\",\n\tname,\n\tclassName,\n\t...restProps\n}: PropsType<T>) => {\n\n\tconst componentRef = useRef<HTMLDivElement | null>(null)\n\tconst [containerRef, setContainerRef] = useState<React.RefObject<HTMLDivElement | null> | undefined>();\n\n\tconst nativeEffect = useEffectEvent(() => {\n\t\tif (!componentRef.current) return\n\t\tsetContainerRef(componentRef)\n\t\tsetScrollContainerStore({ name, action: \"add\", node: componentRef.current })\n\t\treturn () => { setScrollContainerStore({ name, action: \"remove\" }) }\n\t})\n\n\tuseEffect(() => {\n\t\tconst effect = nativeEffect()\n\t\treturn effect\n\t}, [componentRef?.current])\n\n\treturn (\n\t\t<ScrollContainerContext value={{ containerRef }} >\n\t\t\t<Component\n\t\t\t\tref={componentRef}\n\t\t\t\tdata-native-scroll={name}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-auto\",\n\t\t\t\t\t\"will-change-transform\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...restProps}\n\t\t\t/>\n\t\t</ScrollContainerContext>\n\t)\n})\n","const DECAY = 0.996\n\n/**\n * movement projection based on velocity\n * @param velocityPxMs\n * @param decay\n */\nexport const projection = (velocityPxMs: number, decay = DECAY) => (velocityPxMs * decay) / (1 - decay)\n","export * from './projection'\n\nexport function lastOf<T>(array: T[]) {\n return array[array.length - 1]\n}\n\nexport function average(numbers: number[]) {\n return numbers.reduce((a, b) => a + b) / numbers.length\n}\n\nexport const clamp = (value: number, min: number, max: number) => Math.min(Math.max(min, value), max)\n\nexport function addVectors<T extends number[]>(v1: T, v2: T): T {\n if (v1.length !== v2.length) {\n throw new Error('vectors must be same length')\n }\n return v1.map((val, i) => val + v2[i]) as T\n}\n\nexport function absMax(numbers: number[]) {\n return Math.max(...numbers.map(Math.abs))\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function deepFreeze<T extends object>(o: T): Readonly<T> {\n Object.freeze(o)\n Object.values(o).forEach((value) => {\n if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {\n deepFreeze(value)\n }\n })\n return o\n}\n","import { deepFreeze } from '../utils'\n\nexport type EventMapEmpty = Record<string, unknown>\nexport type EventListener<D = unknown> = (data: D) => void\nexport type Off = () => void\n\nexport default function EventBus<EventMap = EventMapEmpty>() {\n const listeners = {} as Record<keyof EventMap, EventListener<never>[]>\n\n function on<EK extends keyof EventMap>(type: EK, listener: EventListener<EventMap[EK]>): Off {\n listeners[type] = (listeners[type] || []).concat(listener)\n return () => off(type, listener)\n }\n\n function off<EK extends keyof EventMap>(type: EK, listener: EventListener<EventMap[EK]>) {\n listeners[type] = (listeners[type] || []).filter((l) => l !== listener)\n }\n\n function dispatch<EK extends keyof EventMap>(type: EK, data: EventMap[EK]) {\n if (!(type in listeners)) return\n ;(listeners[type] as EventListener<EventMap[EK]>[]).forEach((l) => l(data))\n }\n\n return deepFreeze({\n on,\n off,\n dispatch,\n })\n}\n","import { WheelEventData } from '../types'\nimport { deepFreeze } from '../utils'\n\ntype UnobserveTarget = () => void\n\nexport function WheelTargetObserver(eventListener: (wheelEvent: WheelEventData) => void) {\n let targets: EventTarget[] = []\n\n // add event listener to target element\n const observe = (target: EventTarget): UnobserveTarget => {\n target.addEventListener('wheel', eventListener as EventListener, { passive: false })\n targets.push(target)\n\n return () => unobserve(target)\n }\n\n /// remove event listener from target element\n const unobserve = (target: EventTarget) => {\n target.removeEventListener('wheel', eventListener as EventListener)\n targets = targets.filter((t) => t !== target)\n }\n\n // stops watching all of its target elements for visibility changes.\n const disconnect = () => {\n targets.forEach(unobserve)\n }\n\n return deepFreeze({\n observe,\n unobserve,\n disconnect,\n })\n}\n","import { ReverseSign, VectorXYZ, WheelEventData } from '../types'\nimport { clamp } from '../utils'\n\nexport interface NormalizedWheel {\n axisDelta: VectorXYZ\n timeStamp: number\n}\n\nconst LINE_HEIGHT = 16 * 1.125\nconst PAGE_HEIGHT = (typeof window !== 'undefined' && window.innerHeight) || 800\nconst DELTA_MODE_UNIT = [1, LINE_HEIGHT, PAGE_HEIGHT]\n\nexport function normalizeWheel(e: WheelEventData): NormalizedWheel {\n const deltaX = e.deltaX * DELTA_MODE_UNIT[e.deltaMode]\n const deltaY = e.deltaY * DELTA_MODE_UNIT[e.deltaMode]\n const deltaZ = (e.deltaZ || 0) * DELTA_MODE_UNIT[e.deltaMode]\n\n return {\n timeStamp: e.timeStamp,\n axisDelta: [deltaX, deltaY, deltaZ],\n }\n}\n\nconst reverseAll = [-1, -1, -1]\n\nexport function reverseAxisDeltaSign<T extends Pick<NormalizedWheel, 'axisDelta'>>(\n wheel: T,\n reverseSign: ReverseSign\n): T {\n if (!reverseSign) {\n return wheel\n }\n\n const multipliers = reverseSign === true ? reverseAll : reverseSign.map((shouldReverse) => (shouldReverse ? -1 : 1))\n\n return {\n ...wheel,\n axisDelta: wheel.axisDelta.map((delta, i) => delta * multipliers[i]),\n }\n}\n\nconst DELTA_MAX_ABS = 700\n\nexport const clampAxisDelta = <T extends Pick<NormalizedWheel, 'axisDelta'>>(wheel: T) => {\n return {\n ...wheel,\n axisDelta: wheel.axisDelta.map((delta) => clamp(delta, -DELTA_MAX_ABS, DELTA_MAX_ABS)),\n }\n}\n","export const __DEV__ = process.env.NODE_ENV !== 'production'\nexport const ACC_FACTOR_MIN = 0.6\nexport const ACC_FACTOR_MAX = 0.96\nexport const WHEELEVENTS_TO_MERGE = 2\nexport const WHEELEVENTS_TO_ANALAZE = 5\n","import { WheelGesturesConfig } from '../types'\nimport { deepFreeze } from '../utils'\n\nexport const configDefaults: WheelGesturesConfig = deepFreeze({\n preventWheelAction: true,\n reverseSign: [true, true, false],\n})\n","/**\n * the timeout is automatically adjusted during a gesture\n * the initial timeout period is pretty long, so even old mouses, which emit wheel events less often, can produce a continuous gesture\n */\nimport { WheelGesturesInternalState } from './internal-types'\n\nconst WILL_END_TIMEOUT_DEFAULT = 400\n\nexport function createWheelGesturesState(): WheelGesturesInternalState {\n return {\n isStarted: false,\n isStartPublished: false,\n isMomentum: false,\n startTime: 0,\n lastAbsDelta: Infinity,\n axisMovement: [0, 0, 0],\n axisVelocity: [0, 0, 0],\n accelerationFactors: [],\n scrollPoints: [],\n scrollPointsToMerge: [],\n willEndTimeout: WILL_END_TIMEOUT_DEFAULT,\n }\n}\n","import EventBus from '../events/EventBus'\nimport { WheelTargetObserver } from '../events/WheelTargetObserver'\nimport {\n VectorXYZ,\n WheelEventData,\n WheelEventState,\n WheelGesturesConfig,\n WheelGesturesEventMap,\n WheelGesturesOptions,\n} from '../types'\nimport { absMax, addVectors, average, deepFreeze, lastOf, projection } from '../utils'\nimport { clampAxisDelta, normalizeWheel, reverseAxisDeltaSign } from '../wheel-normalizer/wheel-normalizer'\nimport { __DEV__, ACC_FACTOR_MAX, ACC_FACTOR_MIN, WHEELEVENTS_TO_ANALAZE, WHEELEVENTS_TO_MERGE } from './constants'\nimport { configDefaults } from './options'\nimport { createWheelGesturesState } from './state'\n\nexport function WheelGestures(optionsParam: WheelGesturesOptions = {}) {\n const { on, off, dispatch } = EventBus<WheelGesturesEventMap>()\n let config = configDefaults\n let state = createWheelGesturesState()\n let currentEvent: WheelEventData\n let negativeZeroFingerUpSpecialEvent = false\n let prevWheelEventState: WheelEventState | undefined\n\n const feedWheel = (wheelEvents: WheelEventData | WheelEventData[]) => {\n if (Array.isArray(wheelEvents)) {\n wheelEvents.forEach((wheelEvent) => processWheelEventData(wheelEvent))\n } else {\n processWheelEventData(wheelEvents)\n }\n }\n\n const updateOptions = (newOptions: WheelGesturesOptions = {}): WheelGesturesConfig => {\n if (Object.values(newOptions).some((option) => option === undefined || option === null)) {\n __DEV__ && console.error('updateOptions ignored! undefined & null options not allowed')\n return config\n }\n return (config = deepFreeze({ ...configDefaults, ...config, ...newOptions }))\n }\n\n const publishWheel = (additionalData?: Partial<WheelEventState>) => {\n const wheelEventState: WheelEventState = {\n event: currentEvent,\n isStart: false,\n isEnding: false,\n isMomentumCancel: false,\n isMomentum: state.isMomentum,\n axisDelta: [0, 0, 0],\n axisVelocity: state.axisVelocity,\n axisMovement: state.axisMovement,\n get axisMovementProjection() {\n return addVectors(\n wheelEventState.axisMovement,\n wheelEventState.axisVelocity.map((velocity) => projection(velocity)) as VectorXYZ\n )\n },\n ...additionalData,\n }\n\n dispatch('wheel', {\n ...wheelEventState,\n previous: prevWheelEventState,\n })\n\n // keep reference without previous, otherwise we would create a long chain\n prevWheelEventState = wheelEventState\n }\n\n // should prevent when there is mainly movement on the desired axis\n const shouldPreventDefault = (deltaMaxAbs: number, axisDelta: VectorXYZ): boolean => {\n const { preventWheelAction } = config\n const [deltaX, deltaY, deltaZ] = axisDelta\n\n if (typeof preventWheelAction === 'boolean') return preventWheelAction\n\n switch (preventWheelAction) {\n case 'x':\n return Math.abs(deltaX) >= deltaMaxAbs\n case 'y':\n return Math.abs(deltaY) >= deltaMaxAbs\n case 'z':\n return Math.abs(deltaZ) >= deltaMaxAbs\n default:\n __DEV__ && console.warn('unsupported preventWheelAction value: ' + preventWheelAction, 'warn')\n return false\n }\n }\n\n const processWheelEventData = (wheelEvent: WheelEventData) => {\n const { axisDelta, timeStamp } = clampAxisDelta(\n reverseAxisDeltaSign(normalizeWheel(wheelEvent), config.reverseSign)\n )\n const deltaMaxAbs = absMax(axisDelta)\n\n if (wheelEvent.preventDefault && shouldPreventDefault(deltaMaxAbs, axisDelta)) {\n wheelEvent.preventDefault()\n }\n\n if (!state.isStarted) {\n start()\n }\n // check if user started scrolling again -> cancel\n else if (state.isMomentum && deltaMaxAbs > Math.max(2, state.lastAbsDelta * 2)) {\n end(true)\n start()\n }\n\n // special finger up event on windows + blink\n if (deltaMaxAbs === 0 && Object.is && Object.is(wheelEvent.deltaX, -0)) {\n negativeZeroFingerUpSpecialEvent = true\n // return -> zero delta event should not influence velocity\n return\n }\n\n currentEvent = wheelEvent\n state.axisMovement = addVectors(state.axisMovement, axisDelta)\n state.lastAbsDelta = deltaMaxAbs\n state.scrollPointsToMerge.push({\n axisDelta,\n timeStamp,\n })\n\n mergeScrollPointsCalcVelocity()\n\n // only wheel event (move) and not start/end get the delta values\n publishWheel({ axisDelta, isStart: !state.isStartPublished }) // state.isMomentum ? MOMENTUM_WHEEL : WHEEL, { axisDelta })\n\n // publish start after velocity etc. have been updated\n state.isStartPublished = true\n\n // calc debounced end function, to recognize end of wheel event stream\n willEnd()\n }\n\n const mergeScrollPointsCalcVelocity = () => {\n if (state.scrollPointsToMerge.length === WHEELEVENTS_TO_MERGE) {\n state.scrollPoints.unshift({\n axisDeltaSum: state.scrollPointsToMerge.map((b) => b.axisDelta).reduce(addVectors),\n timeStamp: average(state.scrollPointsToMerge.map((b) => b.timeStamp)),\n })\n\n // only update velocity after a merged scrollpoint was generated\n updateVelocity()\n\n // reset toMerge array\n state.scrollPointsToMerge.length = 0\n\n // after calculation of velocity only keep the most recent merged scrollPoint\n state.scrollPoints.length = 1\n\n if (!state.isMomentum) {\n detectMomentum()\n }\n } else if (!state.isStartPublished) {\n updateStartVelocity()\n }\n }\n\n const updateStartVelocity = () => {\n state.axisVelocity = lastOf(state.scrollPointsToMerge).axisDelta.map((d) => d / state.willEndTimeout) as VectorXYZ\n }\n\n const updateVelocity = () => {\n // need to have two recent points to calc velocity\n const [latestScrollPoint, prevScrollPoint] = state.scrollPoints\n\n if (!prevScrollPoint || !latestScrollPoint) {\n return\n }\n\n // time delta\n const deltaTime = latestScrollPoint.timeStamp - prevScrollPoint.timeStamp\n\n if (deltaTime <= 0) {\n __DEV__ && console.warn('invalid deltaTime')\n return\n }\n\n // calc the velocity per axes\n const velocity = latestScrollPoint.axisDeltaSum.map((d) => d / deltaTime) as VectorXYZ\n\n // calc the acceleration factor per axis\n const accelerationFactor = velocity.map((v, i) => v / (state.axisVelocity[i] || 1))\n\n state.axisVelocity = velocity\n state.accelerationFactors.push(accelerationFactor)\n\n updateWillEndTimeout(deltaTime)\n }\n\n const updateWillEndTimeout = (deltaTime: number) => {\n // use current time between events rounded up and increased by a bit as timeout\n let newTimeout = Math.ceil(deltaTime / 10) * 10 * 1.2\n\n // double the timeout, when momentum was not detected yet\n if (!state.isMomentum) {\n newTimeout = Math.max(100, newTimeout * 2)\n }\n\n state.willEndTimeout = Math.min(1000, Math.round(newTimeout))\n }\n\n const accelerationFactorInMomentumRange = (accFactor: number) => {\n // when main axis is the the other one and there is no movement/change on the current one\n if (accFactor === 0) return true\n return accFactor <= ACC_FACTOR_MAX && accFactor >= ACC_FACTOR_MIN\n }\n\n const detectMomentum = () => {\n if (state.accelerationFactors.length >= WHEELEVENTS_TO_ANALAZE) {\n if (negativeZeroFingerUpSpecialEvent) {\n negativeZeroFingerUpSpecialEvent = false\n\n if (absMax(state.axisVelocity) >= 0.2) {\n recognizedMomentum()\n return\n }\n }\n\n const recentAccelerationFactors = state.accelerationFactors.slice(WHEELEVENTS_TO_ANALAZE * -1)\n\n // check recent acceleration / deceleration factors\n // all recent need to match, if any did not match\n const detectedMomentum = recentAccelerationFactors.every((accFac) => {\n // when both axis decelerate exactly in the same rate it is very likely caused by momentum\n const sameAccFac = !!accFac.reduce((f1, f2) => (f1 && f1 < 1 && f1 === f2 ? 1 : 0))\n\n // check if acceleration factor is within momentum range\n const bothAreInRangeOrZero = accFac.filter(accelerationFactorInMomentumRange).length === accFac.length\n\n // one the requirements must be fulfilled\n return sameAccFac || bothAreInRangeOrZero\n })\n\n if (detectedMomentum) {\n recognizedMomentum()\n }\n\n // only keep the most recent events\n state.accelerationFactors = recentAccelerationFactors\n }\n }\n\n const recognizedMomentum = () => {\n state.isMomentum = true\n }\n\n const start = () => {\n state = createWheelGesturesState()\n state.isStarted = true\n state.startTime = Date.now()\n prevWheelEventState = undefined\n negativeZeroFingerUpSpecialEvent = false\n }\n\n const willEnd = (() => {\n let willEndId: number\n return () => {\n clearTimeout(willEndId)\n willEndId = setTimeout(end, state.willEndTimeout)\n }\n })()\n\n const end = (isMomentumCancel = false) => {\n if (!state.isStarted) return\n\n if (state.isMomentum && isMomentumCancel) {\n publishWheel({ isEnding: true, isMomentumCancel: true })\n } else {\n publishWheel({ isEnding: true })\n }\n\n state.isMomentum = false\n state.isStarted = false\n }\n\n const { observe, unobserve, disconnect } = WheelTargetObserver(feedWheel)\n\n updateOptions(optionsParam)\n\n return deepFreeze({\n on,\n off,\n observe,\n unobserve,\n disconnect,\n feedWheel,\n updateOptions,\n })\n}\n","import { CreateOptionsType, CreatePluginType, EmblaCarouselType, OptionsHandlerType } from 'embla-carousel'\nimport WheelGestures, { WheelEventState } from 'wheel-gestures'\n\nexport type WheelGesturesPluginOptions = CreateOptionsType<{\n wheelDraggingClass: string\n forceWheelAxis?: 'x' | 'y'\n target?: Element\n}>\n\ntype WheelGesturesPluginType = CreatePluginType<{}, WheelGesturesPluginOptions>\n\nconst defaultOptions: WheelGesturesPluginOptions = {\n active: true,\n breakpoints: {},\n wheelDraggingClass: 'is-wheel-dragging',\n forceWheelAxis: undefined,\n target: undefined,\n}\n\nWheelGesturesPlugin.globalOptions = undefined as WheelGesturesPluginType['options'] | undefined\n\nconst __DEV__ = process.env.NODE_ENV !== 'production'\n\nexport function WheelGesturesPlugin(userOptions: WheelGesturesPluginType['options'] = {}): WheelGesturesPluginType {\n let options: WheelGesturesPluginOptions\n let cleanup = () => {}\n\n function init(embla: EmblaCarouselType, optionsHandler: OptionsHandlerType) {\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, WheelGesturesPlugin.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n const engine = embla.internalEngine()\n const targetNode = options.target ?? (embla.containerNode().parentNode as Element)\n const wheelAxis = options.forceWheelAxis ?? engine.options.axis\n const wheelGestures = WheelGestures({\n preventWheelAction: wheelAxis,\n reverseSign: [true, true, false],\n })\n\n function updateSizeRelatedVariables() {\n scrollBoundaryThreshold = (wheelAxis === 'x' ? engine.containerRect.width : engine.containerRect.height) / 2\n }\n\n const unobserveTargetNode = wheelGestures.observe(targetNode)\n const offWheel = wheelGestures.on('wheel', handleWheel)\n\n let isStarted = false\n let startEvent: MouseEvent\n let overBoundaryAccumulation = 0\n let scrollBoundaryThreshold = 0\n let blockedWaitUntilGestureEnd = false\n\n updateSizeRelatedVariables()\n embla.on('resize', updateSizeRelatedVariables)\n\n function wheelGestureStarted(state: WheelEventState) {\n try {\n startEvent = new MouseEvent('mousedown', state.event)\n dispatchEvent(startEvent)\n } catch (e) {\n // Legacy Browsers like IE 10 & 11 will throw when attempting to create the Event\n if (__DEV__) {\n console.warn(\n 'Legacy browser requires events-polyfill (https://github.com/xiel/embla-carousel-wheel-gestures#legacy-browsers)'\n )\n }\n return cleanup()\n }\n\n isStarted = true\n overBoundaryAccumulation = 0\n addNativeMouseEventListeners()\n\n if (options.wheelDraggingClass) {\n targetNode.classList.add(options.wheelDraggingClass)\n }\n }\n\n function wheelGestureEnded(state: WheelEventState) {\n isStarted = false\n dispatchEvent(createRelativeMouseEvent('mouseup', state))\n removeNativeMouseEventListeners()\n\n if (options.wheelDraggingClass) {\n targetNode.classList.remove(options.wheelDraggingClass)\n }\n }\n\n function addNativeMouseEventListeners() {\n document.documentElement.addEventListener('mousemove', preventNativeMouseHandler, true)\n document.documentElement.addEventListener('mouseup', preventNativeMouseHandler, true)\n document.documentElement.addEventListener('mousedown', preventNativeMouseHandler, true)\n }\n\n function removeNativeMouseEventListeners() {\n document.documentElement.removeEventListener('mousemove', preventNativeMouseHandler, true)\n document.documentElement.removeEventListener('mouseup', preventNativeMouseHandler, true)\n document.documentElement.removeEventListener('mousedown', preventNativeMouseHandler, true)\n }\n\n function preventNativeMouseHandler(e: MouseEvent) {\n if (isStarted && e.isTrusted) {\n e.stopImmediatePropagation()\n }\n }\n\n function createRelativeMouseEvent(type: 'mousedown' | 'mousemove' | 'mouseup', state: WheelEventState) {\n let moveX, moveY\n\n if (wheelAxis === engine.options.axis) {\n ;[moveX, moveY] = state.axisMovement\n } else {\n // if emblas axis and the wheelAxis don't match, swap the axes to match the right embla events\n ;[moveY, moveX] = state.axisMovement\n }\n\n const { isAtBoundary } = checkIfAtBoundary(state)\n\n // Apply progressive rubber band damping when at boundaries\n if (isAtBoundary) {\n // Calculate progressive damping factor based on how far over boundary we are\n const progressRatio = Math.min(overBoundaryAccumulation / scrollBoundaryThreshold, 1)\n const dampingFactor = 0.25 + progressRatio * 0.5\n const counterMoveSign = moveX > 0 ? -1 : 1\n const counterMovement = overBoundaryAccumulation * counterMoveSign\n const dampingMovement = counterMovement * dampingFactor\n\n moveX += dampingMovement\n moveY += dampingMovement\n }\n\n // prevent skipping slides\n if (!engine.options.skipSnaps && !engine.options.dragFree) {\n const maxX = engine.containerRect.width\n const maxY = engine.containerRect.height\n\n moveX = moveX < 0 ? Math.max(moveX, -maxX) : Math.min(moveX, maxX)\n moveY = moveY < 0 ? Math.max(moveY, -maxY) : Math.min(moveY, maxY)\n }\n\n return new MouseEvent(type, {\n clientX: startEvent.clientX + moveX,\n clientY: startEvent.clientY + moveY,\n screenX: startEvent.screenX + moveX,\n screenY: startEvent.screenY + moveY,\n movementX: moveX,\n movementY: moveY,\n button: 0,\n bubbles: true,\n cancelable: true,\n composed: true,\n })\n }\n\n function dispatchEvent(event: UIEvent) {\n embla.containerNode().dispatchEvent(event)\n }\n\n function checkIfAtBoundary(state: WheelEventState) {\n const {\n axisDelta: [deltaX, deltaY],\n } = state\n const scrollProgress = embla.scrollProgress()\n const canScrollNext = scrollProgress < 1\n const canScrollPrev = scrollProgress > 0\n const primaryAxisDelta = wheelAxis === 'x' ? deltaX : deltaY\n const isScrollingNext = primaryAxisDelta < 0\n const isScrollingPrev = primaryAxisDelta > 0\n const isAtBoundary = (isScrollingNext && !canScrollNext) || (isScrollingPrev && !canScrollPrev)\n\n return {\n isAtBoundary,\n primaryAxisDelta,\n }\n }\n\n function isBoundaryThresholdReached(state: WheelEventState) {\n const { isAtBoundary, primaryAxisDelta } = checkIfAtBoundary(state)\n\n if (isAtBoundary && !state.isMomentum) {\n overBoundaryAccumulation += Math.abs(primaryAxisDelta)\n\n // End gesture if we exceed the threshold\n if (overBoundaryAccumulation > scrollBoundaryThreshold) {\n blockedWaitUntilGestureEnd = true\n wheelGestureEnded(state)\n return true\n }\n } else {\n // Reset accumulation when we can scroll or when not at boundary\n overBoundaryAccumulation = 0\n }\n\n return false\n }\n\n function handleWheel(state: WheelEventState) {\n const {\n axisDelta: [deltaX, deltaY],\n } = state\n const primaryAxisDelta = wheelAxis === 'x' ? deltaX : deltaY\n const crossAxisDelta = wheelAxis === 'x' ? deltaY : deltaX\n const isRelease = state.isMomentum && state.previous && !state.previous.isMomentum\n const isEndingOrRelease = (state.isEnding && !state.isMomentum) || isRelease\n const primaryAxisDeltaIsDominant = Math.abs(primaryAxisDelta) > Math.abs(crossAxisDelta)\n\n if (primaryAxisDeltaIsDominant && !isStarted && !state.isMomentum && !blockedWaitUntilGestureEnd) {\n wheelGestureStarted(state)\n }\n\n if (blockedWaitUntilGestureEnd && state.isEnding) {\n blockedWaitUntilGestureEnd = false\n }\n\n if (!isStarted) return\n\n if (isBoundaryThresholdReached(state)) return\n\n if (isEndingOrRelease) {\n wheelGestureEnded(state)\n } else {\n dispatchEvent(createRelativeMouseEvent('mousemove', state))\n }\n }\n\n cleanup = () => {\n unobserveTargetNode()\n offWheel()\n embla.off('resize', updateSizeRelatedVariables)\n removeNativeMouseEventListeners()\n }\n }\n\n const self: WheelGesturesPluginType = {\n name: 'wheelGestures',\n options: userOptions,\n init,\n destroy: () => cleanup(),\n }\n return self\n}\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n wheelGestures?: WheelGesturesPluginType\n }\n}\n","import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType<EmblaCarouselType['scrollSnapList']>\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n","import { CreateOptionsType } from 'embla-carousel'\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n direction: 'forward' | 'backward'\n speed: number\n startDelay: number\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n direction: 'forward',\n speed: 2,\n startDelay: 1000,\n active: true,\n breakpoints: {},\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { RootNodeType } from './Options'\n\nexport function getAutoScrollRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoScrollRootNode } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType,\n EngineType,\n ScrollBodyType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoScroll: AutoScrollType\n }\n\n interface EmblaEventListType {\n autoScrollPlay: 'autoScroll:play'\n autoScrollStop: 'autoScroll:stop'\n }\n}\n\nexport type AutoScrollType = CreatePluginType<\n {\n play: (delay?: number) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n },\n OptionsType\n>\n\nexport type AutoScrollOptionsType = AutoScrollType['options']\n\nfunction AutoScroll(userOptions: AutoScrollOptionsType = {}): AutoScrollType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let startDelay: number\n let timerId = 0\n let autoScrollActive = false\n let mouseIsOver = false\n let defaultScrollBehaviour: ScrollBodyType\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, AutoScroll.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n startDelay = options.startDelay\n destroyed = false\n defaultScrollBehaviour = emblaApi.internalEngine().scrollBody\n\n const { eventStore } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoScrollRootNode(emblaApi, options.rootNode)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoScroll)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoScroll)\n }\n\n if (options.playOnInit) startAutoScroll()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoScroll)\n .off('settle', settle)\n\n stopAutoScroll()\n destroyed = true\n autoScrollActive = false\n }\n\n function startAutoScroll(): void {\n if (destroyed) return\n if (autoScrollActive) return\n emblaApi.emit('autoScroll:play')\n\n const engine = emblaApi.internalEngine()\n const { ownerWindow } = engine\n\n timerId = ownerWindow.setTimeout(() => {\n engine.scrollBody = createAutoScrollBehaviour(engine)\n engine.animation.start()\n }, startDelay)\n\n autoScrollActive = true\n }\n\n function stopAutoScroll(): void {\n if (destroyed) return\n if (!autoScrollActive) return\n emblaApi.emit('autoScroll:stop')\n\n const engine = emblaApi.internalEngine()\n const { ownerWindow } = engine\n\n engine.scrollBody = defaultScrollBehaviour\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n\n autoScrollActive = false\n }\n\n function createAutoScrollBehaviour(engine: EngineType): ScrollBodyType {\n const {\n location,\n previousLocation,\n offsetLocation,\n target,\n scrollTarget,\n index,\n indexPrevious,\n limit: { reachedMin, reachedMax, constrain },\n options: { loop }\n } = engine\n const directionSign = options.direction === 'forward' ? -1 : 1\n const noop = (): ScrollBodyType => self\n\n let bodyVelocity = 0\n let scrollDirection = 0\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n let hasSettled = false\n\n function seek(): ScrollBodyType {\n let directionDiff = 0\n\n previousLocation.set(location)\n\n bodyVelocity = directionSign * options.speed\n rawLocation += bodyVelocity\n location.add(bodyVelocity)\n target.set(location)\n\n directionDiff = rawLocation - rawLocationPrevious\n scrollDirection = Math.sign(directionDiff)\n rawLocationPrevious = rawLocation\n\n const currentIndex = scrollTarget.byDistance(0, false).index\n\n if (index.get() !== currentIndex) {\n indexPrevious.set(index.get())\n index.set(currentIndex)\n emblaApi.emit('select')\n }\n\n const reachedEnd =\n options.direction === 'forward'\n ? reachedMin(offsetLocation.get())\n : reachedMax(offsetLocation.get())\n\n if (!loop && reachedEnd) {\n hasSettled = true\n const constrainedLocation = constrain(location.get())\n location.set(constrainedLocation)\n target.set(location)\n stopAutoScroll()\n }\n\n return self\n }\n\n const self: ScrollBodyType = {\n direction: () => scrollDirection,\n duration: () => -1,\n velocity: () => bodyVelocity,\n settled: () => hasSettled,\n seek,\n useBaseFriction: noop,\n useBaseDuration: noop,\n useFriction: noop,\n useDuration: noop\n }\n return self\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoScroll()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoScrollOnSettle()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoScroll()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoScroll()\n }\n\n function settle(): void {\n emblaApi.off('settle', settle)\n startAutoScroll()\n }\n\n function startAutoScrollOnSettle(): void {\n emblaApi.on('settle', settle)\n }\n\n function play(startDelayOverride?: number): void {\n if (typeof startDelayOverride !== 'undefined') {\n startDelay = startDelayOverride\n }\n startAutoScroll()\n }\n\n function stop(): void {\n if (autoScrollActive) stopAutoScroll()\n }\n\n function reset(): void {\n if (autoScrollActive) {\n stopAutoScroll()\n startAutoScrollOnSettle()\n }\n }\n\n function isPlaying(): boolean {\n return autoScrollActive\n }\n\n const self: AutoScrollType = {\n name: 'autoScroll',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying\n }\n return self\n}\n\ndeclare namespace AutoScroll {\n let globalOptions: AutoScrollOptionsType | undefined\n}\n\nAutoScroll.globalOptions = undefined\n\nexport default AutoScroll\n","import { OptionsType } from './Options'\nimport {\n EmblaEventType,\n CreatePluginType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoHeight: AutoHeightType\n }\n}\n\nexport type AutoHeightType = CreatePluginType<{}, OptionsType>\n\nexport type AutoHeightOptionsType = AutoHeightType['options']\n\nfunction AutoHeight(userOptions: AutoHeightOptionsType = {}): AutoHeightType {\n let emblaApi: EmblaCarouselType\n let slideHeights: number[] = []\n const heightEvents: EmblaEventType[] = ['select', 'slideFocus']\n\n function init(emblaApiInstance: EmblaCarouselType): void {\n emblaApi = emblaApiInstance\n\n const {\n options: { axis },\n slideRects\n } = emblaApi.internalEngine()\n\n if (axis === 'y') return\n\n slideHeights = slideRects.map((slideRect) => slideRect.height)\n\n heightEvents.forEach((evt) => emblaApi.on(evt, setContainerHeight))\n setContainerHeight()\n }\n\n function destroy(): void {\n heightEvents.forEach((evt) => emblaApi.off(evt, setContainerHeight))\n const container = emblaApi.containerNode()\n container.style.height = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n function highestInView(): number | null {\n const { slideRegistry } = emblaApi.internalEngine()\n const selectedIndexes = slideRegistry[emblaApi.selectedScrollSnap()]\n\n if (!selectedIndexes) return null\n\n return selectedIndexes\n .map((index) => slideHeights[index])\n .reduce((a, b) => Math.max(a, b), 0)\n }\n\n function setContainerHeight(): void {\n const height = highestInView()\n if (height === null) return\n\n emblaApi.containerNode().style.height = `${highestInView()}px`\n }\n\n const self: AutoHeightType = {\n name: 'autoHeight',\n options: userOptions,\n init,\n destroy\n }\n return self\n}\n\ndeclare namespace AutoHeight {\n let globalOptions: AutoHeightOptionsType | undefined\n}\n\nAutoHeight.globalOptions = undefined\n\nexport default AutoHeight\n","import { CreateOptionsType } from 'embla-carousel'\n\nexport type ClassNameOptionType = string | string[]\n\nexport type ClassNamesListType = {\n snapped: string[]\n inView: string[]\n draggable: string[]\n dragging: string[]\n loop: string[]\n}\n\nexport type OptionsType = CreateOptionsType<{\n [Key in keyof ClassNamesListType]: ClassNameOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n snapped: 'is-snapped',\n inView: 'is-in-view',\n draggable: 'is-draggable',\n dragging: 'is-dragging',\n loop: 'is-loop'\n}\n","import { ClassNameOptionType } from './Options'\n\nexport function normalizeClassNames(classNames: ClassNameOptionType): string[] {\n const normalized = Array.isArray(classNames) ? classNames : [classNames]\n return normalized.filter(Boolean)\n}\n\nexport function removeClass(node: HTMLElement, classNames: string[]): void {\n if (!node || !classNames.length) return\n node.classList.remove(...classNames)\n}\n\nexport function addClass(node: HTMLElement, classNames: string[]): void {\n if (!node || !classNames.length) return\n node.classList.add(...classNames)\n}\n","import { defaultOptions, OptionsType, ClassNamesListType } from './Options'\nimport { addClass, normalizeClassNames, removeClass } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType,\n EmblaEventType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n classNames: ClassNamesType\n }\n}\n\nexport type ClassNamesType = CreatePluginType<{}, OptionsType>\n\nexport type ClassNamesOptionsType = ClassNamesType['options']\n\nfunction ClassNames(userOptions: ClassNamesOptionsType = {}): ClassNamesType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let root: HTMLElement\n let slides: HTMLElement[]\n let snappedIndexes: number[] = []\n let inViewIndexes: number[] = []\n\n const selectedEvents: EmblaEventType[] = ['select']\n const draggingEvents: EmblaEventType[] = ['pointerDown', 'pointerUp']\n const inViewEvents: EmblaEventType[] = ['slidesInView']\n const classNames: ClassNamesListType = {\n snapped: [],\n inView: [],\n draggable: [],\n dragging: [],\n loop: []\n }\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, ClassNames.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n root = emblaApi.rootNode()\n slides = emblaApi.slideNodes()\n\n const { watchDrag, loop } = emblaApi.internalEngine().options\n const isDraggable = !!watchDrag\n\n if (options.loop && loop) {\n classNames.loop = normalizeClassNames(options.loop)\n addClass(root, classNames.loop)\n }\n\n if (options.draggable && isDraggable) {\n classNames.draggable = normalizeClassNames(options.draggable)\n addClass(root, classNames.draggable)\n }\n\n if (options.dragging) {\n classNames.dragging = normalizeClassNames(options.dragging)\n draggingEvents.forEach((evt) => emblaApi.on(evt, toggleDraggingClass))\n }\n\n if (options.snapped) {\n classNames.snapped = normalizeClassNames(options.snapped)\n selectedEvents.forEach((evt) => emblaApi.on(evt, toggleSnappedClasses))\n toggleSnappedClasses()\n }\n\n if (options.inView) {\n classNames.inView = normalizeClassNames(options.inView)\n inViewEvents.forEach((evt) => emblaApi.on(evt, toggleInViewClasses))\n toggleInViewClasses()\n }\n }\n\n function destroy(): void {\n draggingEvents.forEach((evt) => emblaApi.off(evt, toggleDraggingClass))\n selectedEvents.forEach((evt) => emblaApi.off(evt, toggleSnappedClasses))\n inViewEvents.forEach((evt) => emblaApi.off(evt, toggleInViewClasses))\n\n removeClass(root, classNames.loop)\n removeClass(root, classNames.draggable)\n removeClass(root, classNames.dragging)\n toggleSlideClasses([], snappedIndexes, classNames.snapped)\n toggleSlideClasses([], inViewIndexes, classNames.inView)\n\n Object.keys(classNames).forEach((classNameKey) => {\n const key = <keyof ClassNamesListType>classNameKey\n classNames[key] = []\n })\n }\n\n function toggleDraggingClass(\n _: EmblaCarouselType,\n evt: EmblaEventType\n ): void {\n const toggleClass = evt === 'pointerDown' ? addClass : removeClass\n toggleClass(root, classNames.dragging)\n }\n\n function toggleSlideClasses(\n addClassIndexes: number[] = [],\n removeClassIndexes: number[] = [],\n classNames: string[]\n ): number[] {\n const removeClassSlides = removeClassIndexes.map((index) => slides[index])\n const addClassSlides = addClassIndexes.map((index) => slides[index])\n\n removeClassSlides.forEach((slide) => removeClass(slide, classNames))\n addClassSlides.forEach((slide) => addClass(slide, classNames))\n\n return addClassIndexes\n }\n\n function toggleSnappedClasses(): void {\n const { slideRegistry } = emblaApi.internalEngine()\n const newSnappedIndexes = slideRegistry[emblaApi.selectedScrollSnap()]\n\n snappedIndexes = toggleSlideClasses(\n newSnappedIndexes,\n snappedIndexes,\n classNames.snapped\n )\n }\n\n function toggleInViewClasses(): void {\n const newInViewIndexes = emblaApi.slidesInView()\n\n inViewIndexes = toggleSlideClasses(\n newInViewIndexes,\n inViewIndexes,\n classNames.inView\n )\n }\n\n const self: ClassNamesType = {\n name: 'classNames',\n options: userOptions,\n init,\n destroy\n }\n return self\n}\n\ndeclare namespace ClassNames {\n let globalOptions: ClassNamesOptionsType | undefined\n}\n\nClassNames.globalOptions = undefined\n\nexport default ClassNames\n","export function clampNumber(number: number, min: number, max: number): number {\n return Math.min(Math.max(number, min), max)\n}\n\nexport function isNumber(value: number | null): value is number {\n return typeof value === 'number' && !isNaN(value)\n}\n","import { OptionsType } from './Options'\nimport { isNumber, clampNumber } from './utils'\nimport {\n CreatePluginType,\n EmblaCarouselType,\n ScrollBodyType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n fade: FadeType\n }\n}\n\nexport type FadeType = CreatePluginType<{}, OptionsType>\n\nexport type FadeOptionsType = FadeType['options']\n\nfunction Fade(userOptions: FadeOptionsType = {}): FadeType {\n const fullOpacity = 1\n const noOpacity = 0\n const fadeFriction = 0.68\n\n let emblaApi: EmblaCarouselType\n let opacities: number[] = []\n let fadeToNextDistance: number\n let distanceFromPointerDown = 0\n let fadeVelocity = 0\n let progress = 0\n let shouldFadePair = false\n\n let defaultSettledBehaviour: ScrollBodyType['settled']\n let defaultProgressBehaviour: EmblaCarouselType['scrollProgress']\n\n function init(emblaApiInstance: EmblaCarouselType): void {\n emblaApi = emblaApiInstance\n\n const selectedSnap = emblaApi.selectedScrollSnap()\n const { scrollBody, containerRect, axis } = emblaApi.internalEngine()\n const containerSize = axis.measureSize(containerRect)\n\n fadeToNextDistance = clampNumber(containerSize * 0.75, 200, 500)\n shouldFadePair = false\n\n opacities = emblaApi\n .scrollSnapList()\n .map((_, index) => (index === selectedSnap ? fullOpacity : noOpacity))\n\n defaultSettledBehaviour = scrollBody.settled\n defaultProgressBehaviour = emblaApi.scrollProgress\n\n scrollBody.settled = settled\n emblaApi.scrollProgress = scrollProgress\n\n emblaApi\n .on('select', select)\n .on('slideFocus', fadeToSelectedSnapInstantly)\n .on('pointerDown', pointerDown)\n .on('pointerUp', pointerUp)\n\n disableScroll()\n fadeToSelectedSnapInstantly()\n }\n\n function destroy(): void {\n const { scrollBody } = emblaApi.internalEngine()\n scrollBody.settled = defaultSettledBehaviour\n emblaApi.scrollProgress = defaultProgressBehaviour\n\n emblaApi\n .off('select', select)\n .off('slideFocus', fadeToSelectedSnapInstantly)\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n\n emblaApi.slideNodes().forEach((slideNode) => {\n const slideStyle = slideNode.style\n slideStyle.opacity = ''\n slideStyle.transform = ''\n slideStyle.pointerEvents = ''\n if (!slideNode.getAttribute('style')) slideNode.removeAttribute('style')\n })\n }\n\n function fadeToSelectedSnapInstantly(): void {\n const selectedSnap = emblaApi.selectedScrollSnap()\n setOpacities(selectedSnap, fullOpacity)\n }\n\n function pointerUp(): void {\n shouldFadePair = false\n }\n\n function pointerDown(): void {\n shouldFadePair = false\n distanceFromPointerDown = 0\n fadeVelocity = 0\n }\n\n function select(): void {\n const duration = emblaApi.internalEngine().scrollBody.duration()\n fadeVelocity = duration ? 0 : fullOpacity\n shouldFadePair = true\n if (!duration) fadeToSelectedSnapInstantly()\n }\n\n function getSlideTransform(position: number): string {\n const { axis } = emblaApi.internalEngine()\n const translateAxis = axis.scroll.toUpperCase()\n return `translate${translateAxis}(${axis.direction(position)}px)`\n }\n\n function disableScroll(): void {\n const { translate, slideLooper } = emblaApi.internalEngine()\n\n translate.clear()\n translate.toggleActive(false)\n\n slideLooper.loopPoints.forEach(({ translate }) => {\n translate.clear()\n translate.toggleActive(false)\n })\n }\n\n function lockExcessiveScroll(fadeIndex: number | null): void {\n const { scrollSnaps, location, target } = emblaApi.internalEngine()\n if (!isNumber(fadeIndex) || opacities[fadeIndex] < 0.5) return\n\n location.set(scrollSnaps[fadeIndex])\n target.set(location)\n }\n\n function setOpacities(fadeIndex: number, velocity: number): void {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n scrollSnaps.forEach((_, indexA) => {\n const absVelocity = Math.abs(velocity)\n const currentOpacity = opacities[indexA]\n const isFadeIndex = indexA === fadeIndex\n\n const nextOpacity = isFadeIndex\n ? currentOpacity + absVelocity\n : currentOpacity - absVelocity\n\n const clampedOpacity = clampNumber(nextOpacity, noOpacity, fullOpacity)\n opacities[indexA] = clampedOpacity\n\n const fadePair = isFadeIndex && shouldFadePair\n const indexB = emblaApi.previousScrollSnap()\n\n if (fadePair) opacities[indexB] = 1 - clampedOpacity\n if (isFadeIndex) setProgress(fadeIndex, clampedOpacity)\n\n setOpacity(indexA)\n })\n }\n\n function setOpacity(index: number): void {\n const slidesInSnap = emblaApi.internalEngine().slideRegistry[index]\n const { scrollSnaps, containerRect } = emblaApi.internalEngine()\n const opacity = opacities[index]\n\n slidesInSnap.forEach((slideIndex) => {\n const slideStyle = emblaApi.slideNodes()[slideIndex].style\n const roundedOpacity = parseFloat(opacity.toFixed(2))\n const hasOpacity = roundedOpacity > noOpacity\n const position = hasOpacity ? scrollSnaps[index] : containerRect.width + 2\n const transform = getSlideTransform(position)\n\n if (hasOpacity) slideStyle.transform = transform\n\n slideStyle.opacity = roundedOpacity.toString()\n slideStyle.pointerEvents = opacity > 0.5 ? 'auto' : 'none'\n\n if (!hasOpacity) slideStyle.transform = transform\n })\n }\n\n function setProgress(fadeIndex: number, opacity: number): void {\n const { index, dragHandler, scrollSnaps } = emblaApi.internalEngine()\n const pointerDown = dragHandler.pointerDown()\n const snapFraction = 1 / (scrollSnaps.length - 1)\n\n let indexA = fadeIndex\n let indexB = pointerDown\n ? emblaApi.selectedScrollSnap()\n : emblaApi.previousScrollSnap()\n\n if (pointerDown && indexA === indexB) {\n const reverseSign = Math.sign(distanceFromPointerDown) * -1\n indexA = indexB\n indexB = index.clone().set(indexB).add(reverseSign).get()\n }\n\n const currentPosition = indexB * snapFraction\n const diffPosition = (indexA - indexB) * snapFraction\n progress = currentPosition + diffPosition * opacity\n }\n\n function getFadeIndex(): number | null {\n const { dragHandler, index, scrollBody } = emblaApi.internalEngine()\n const selectedSnap = emblaApi.selectedScrollSnap()\n\n if (!dragHandler.pointerDown()) return selectedSnap\n\n const directionSign = Math.sign(scrollBody.velocity())\n const distanceSign = Math.sign(distanceFromPointerDown)\n const nextSnap = index\n .clone()\n .set(selectedSnap)\n .add(directionSign * -1)\n .get()\n\n if (!directionSign || !distanceSign) return null\n return distanceSign === directionSign ? nextSnap : selectedSnap\n }\n\n function fade(emblaApi: EmblaCarouselType): void {\n const { dragHandler, scrollBody } = emblaApi.internalEngine()\n const pointerDown = dragHandler.pointerDown()\n const velocity = scrollBody.velocity()\n const duration = scrollBody.duration()\n const fadeIndex = getFadeIndex()\n const noFadeIndex = !isNumber(fadeIndex)\n\n if (pointerDown) {\n if (!velocity) return\n\n distanceFromPointerDown += velocity\n fadeVelocity = Math.abs(velocity / fadeToNextDistance)\n lockExcessiveScroll(fadeIndex)\n }\n\n if (!pointerDown) {\n if (!duration || noFadeIndex) return\n\n fadeVelocity += (fullOpacity - opacities[fadeIndex]) / duration\n fadeVelocity *= fadeFriction\n }\n\n if (noFadeIndex) return\n setOpacities(fadeIndex, fadeVelocity)\n }\n\n function settled(): boolean {\n const { target, location } = emblaApi.internalEngine()\n const diffToTarget = target.get() - location.get()\n const notReachedTarget = Math.abs(diffToTarget) >= 1\n const fadeIndex = getFadeIndex()\n const noFadeIndex = !isNumber(fadeIndex)\n\n fade(emblaApi)\n\n if (noFadeIndex || notReachedTarget) return false\n return opacities[fadeIndex] > 0.999\n }\n\n function scrollProgress(): number {\n return progress\n }\n\n const self: FadeType = {\n name: 'fade',\n options: userOptions,\n init,\n destroy\n }\n return self\n}\n\ndeclare namespace Fade {\n let globalOptions: FadeOptionsType | undefined\n}\n\nFade.globalOptions = undefined\n\nexport default Fade\n","\n\n// update: 2025.11.20\n// version: 0.0.1.bate\n// dev: wade\n\nimport { useCallback, useEffect, useEffectEvent, useMemo, useState } from \"react\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport { WheelGesturesPlugin } from \"embla-carousel-wheel-gestures\"\nimport Autoplay from \"embla-carousel-autoplay\"\nimport AutoScroll from \"embla-carousel-auto-scroll\"\nimport AutoHeight from \"embla-carousel-auto-height\"\nimport ClassNames from \"embla-carousel-class-names\"\nimport Fade from \"embla-carousel-fade\"\nimport type { UseEmblaCarouselType } from \"embla-carousel-react\"\nimport type { AutoplayOptionsType } from \"embla-carousel-autoplay\"\nimport type { AutoScrollOptionsType } from \"embla-carousel-auto-scroll\"\nimport type { AutoHeightOptionsType } from \"embla-carousel-auto-height\"\nimport type { ClassNamesOptionsType } from \"embla-carousel-class-names\"\nimport type { FadeOptionsType } from \"embla-carousel-fade\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\n\nexport interface EmblaCarouselsHooksTypes {\n\toptions?: CarouselOptions\n\tautoplay?: AutoplayOptionsType | true\n\tautoScroll?: AutoScrollOptionsType | true\n\tclassNames?: ClassNamesOptionsType | true\n\tautoHeight?: AutoHeightOptionsType | true\n\tfade?: FadeOptionsType | true\n\twheel?: {\n\t\twheelDraggingClass?: string\n\t\tforceWheelAxis?: \"x\" | \"y\"\n\t\ttarget?: Element\n\t} | true\n\tsetApi?: (api: CarouselApi) => void\n}\n\nexport function emblaCarouselsHooks({\n\toptions,\n\tautoplay,\n\tautoScroll,\n\tclassNames,\n\tautoHeight,\n\tfade,\n\twheel,\n\tsetApi,\n}: EmblaCarouselsHooksTypes) {\n\n\tconst orientation = options?.axis ?? \"x\"\n\n\tconst plugins = useMemo(() => ([\n\t\tautoplay && Autoplay(typeof autoplay == \"boolean\" ? undefined : autoplay),\n\t\tautoScroll && AutoScroll(typeof autoScroll == \"boolean\" ? undefined : autoScroll),\n\t\tautoHeight && AutoHeight(typeof autoHeight == \"boolean\" ? undefined : autoHeight),\n\t\tclassNames && ClassNames(typeof classNames == \"boolean\" ? undefined : classNames),\n\t\tfade && Fade(typeof fade == \"boolean\" ? undefined : fade),\n\t\twheel && WheelGesturesPlugin(typeof wheel == \"boolean\" ? undefined : wheel),\n\t].filter(\n\t\tplugin => plugin\n\t)), [\n\t\tautoplay,\n\t\tautoScroll,\n\t\tclassNames,\n\t\tfade,\n\t\twheel,\n\t\tautoHeight\n\t]) as any[]\n\n\tconst [emblaRef, emblaApi] = useEmblaCarousel(options, plugins)\n\n\tconst [currentIndex, setCurrentIndex] = useState(0)\n\n\tconst [isScrollPrev, setIsScrollPrev] = useState(false)\n\tconst [isScrollNext, setIsScrollNext] = useState(false)\n\n\tconst scrollPrev = useCallback(() => {\n\t\temblaApi?.scrollPrev()\n\t}, [emblaApi])\n\n\tconst scrollNext = useCallback(() => {\n\t\temblaApi?.scrollNext()\n\t}, [emblaApi])\n\n\tconst onKeyDownCapture = useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\tconsole.log(\"key...\")\n\t\tif (event.key === \"ArrowLeft\") {\n\t\t\tevent.preventDefault()\n\t\t\tscrollPrev()\n\t\t} else if (event.key === \"ArrowRight\") {\n\t\t\tevent.preventDefault()\n\t\t\tscrollNext()\n\t\t}\n\t}, [scrollPrev, scrollNext])\n\n\tconst onSelect = useCallback((api: CarouselApi) => {\n\t\tif (!api) return\n\t\tsetCurrentIndex(api?.selectedScrollSnap())\n\t\tsetIsScrollPrev(api.canScrollPrev())\n\t\tsetIsScrollNext(api.canScrollNext())\n\t}, [])\n\n\tconst initalEffect = useEffectEvent(() => {\n\t\tif (!emblaApi || !setApi) return\n\n\t\tsetApi?.(emblaApi)\n\t\tonSelect(emblaApi)\n\n\t\temblaApi.on(\"reInit\", onSelect)\n\t\temblaApi.on(\"select\", onSelect)\n\n\t\treturn () => {\n\t\t\temblaApi?.off(\"select\", onSelect)\n\t\t}\n\t})\n\n\tuseEffect(() => {\n\t\tconst events = initalEffect()\n\t\treturn () => { events?.() }\n\t}, [emblaApi])\n\n\n\treturn {\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t\tonKeyDownCapture\n\t} as {\n\t\temblaRef: (node: HTMLElement | null) => void\n\t\temblaApi: CarouselApi\n\t\torientation: \"x\" | \"y\"\n\t\tcurrentIndex: number\n\t\tisScrollPrev: boolean\n\t\tisScrollNext: boolean\n\t\tscrollPrev: () => void\n\t\tscrollNext: () => void\n\t\tonKeyDownCapture: (event: React.KeyboardEvent<HTMLDivElement>) => void\n\t}\n\n}\n","\n\n// update: 2025.11.20\n// version: 0.0.1.bate\n// dev: wade\n\nimport { createContext, memo, use, useMemo } from \"react\"\nimport useEmblaCarousel from \"embla-carousel-react\"\nimport { emblaCarouselsHooks, } from \"./embla-carousels-hooks\"\nimport { cn } from \"@/packages/shadcns\"\nimport type { EmblaCarouselsHooksTypes } from \"./embla-carousels-hooks\"\n\nexport type CarouselsContextProps = {\n\temblaRef: ReturnType<typeof useEmblaCarousel>[0]\n\temblaApi: ReturnType<typeof useEmblaCarousel>[1]\n\tcurrentIndex?: number\n\torientation: \"x\" | \"y\"\n\tisScrollPrev: boolean\n\tisScrollNext: boolean\n\tscrollPrev: () => void\n\tscrollNext: () => void\n}\n\nconst CarouselsContext = createContext<CarouselsContextProps | null>(null)\n\nexport const useCarouselsContext = () => {\n\tconst context = use(CarouselsContext)\n\tif (!context) throw new Error(\"useCarousel must be used within a <Carousel />\")\n\treturn context\n}\n\nexport interface PropsTypes extends EmblaCarouselsHooksTypes, React.ComponentProps<\"div\"> { }\n\nexport const EmblaCarouselsRoots: React.FC<PropsTypes> = memo(({\n\tchildren,\n\tclassName,\n\tsetApi,\n\toptions,\n\tautoplay,\n\tautoScroll,\n\tclassNames,\n\tautoHeight,\n\tfade,\n\twheel,\n\t...props\n}) => {\n\n\tconst {\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t\tonKeyDownCapture,\n\t} = emblaCarouselsHooks({\n\t\tsetApi,\n\t\toptions,\n\t\tautoplay,\n\t\tautoScroll,\n\t\tclassNames,\n\t\tautoHeight,\n\t\tfade,\n\t\twheel,\n\t})\n\n\tconst contextValue = useMemo(() => ({\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t}), [\n\t\temblaRef,\n\t\temblaApi,\n\t\torientation,\n\t\tcurrentIndex,\n\t\tisScrollPrev,\n\t\tisScrollNext,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t])\n\n\treturn (\n\t\t<CarouselsContext value={contextValue}>\n\t\t\t<div\n\t\t\t\tdata-component=\"embla-carousels\"\n\t\t\t\tonKeyDownCapture={onKeyDownCapture}\n\t\t\t\tclassName={cn(\"relative overflow-hidden\", className)}\n\t\t\t\taria-roledescription=\"embla-carousels\"\n\t\t\t\trole=\"region\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</CarouselsContext>\n\t)\n})\n\nexport const EmblaCarouselsContents: React.FC<React.ComponentProps<\"div\">> = memo(({ className, ...props }) => {\n\tconst { emblaRef, orientation } = useCarouselsContext()\n\n\treturn (\n\t\t<div\n\t\t\tref={emblaRef}\n\t\t\tclassName=\"overflow-hidden\"\n\t\t\tdata-component=\"embla-carousels-contents\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex\",\n\t\t\t\t\torientation === \"x\" ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t)\n})\n\nexport const EmblaCarouselsSlides: React.FC<React.ComponentProps<\"div\">> = memo(({ className, ...props }) => {\n\n\treturn (\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\taria-roledescription=\"slide\"\n\t\t\tdata-component=\"embla-carousels-slides\"\n\t\t\tclassName={cn(\n\t\t\t\t\"min-w-0 shrink-0 grow-0 basis-full\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t)\n})\n\nexport const EmblaCarousels = {\n\tRoots: EmblaCarouselsRoots,\n\tContents: EmblaCarouselsContents,\n\tSlides: EmblaCarouselsSlides,\n}\n\n","\n\n\nimport { createContext, use } from \"react\"\nimport type { EmblaViewportRefType } from \"embla-carousel-react\"\nimport type { EmblaCarouselType } from 'embla-carousel';\n\ninterface CarouselContextTypes {\n\tdatas: []\n\temblaRef?: EmblaViewportRefType\n\temblaApi?: EmblaCarouselType | null\n\n\tselectIndex: number\n\tscrollSnaps: number[]\n\n\tnextScroll: () => void\n\tprevScroll: () => void\n\tscrollToIndex: (index: number) => void\n\n\tautoPlayReset: () => void\n\tautoPlayStop: () => void\n\tautoPlayPlay: () => void\n}\n\nconst CarouselContext = createContext<CarouselContextTypes | null>(null)\n\nexport const CarouselContextProvider = (props: {\n\tchildren: React.ReactNode\n\tvalue: CarouselContextTypes\n}) => {\n\treturn <CarouselContext {...props} />\n}\n\nexport const useCarouselContext = () => {\n\tconst context = use(CarouselContext)\n\tif (!context) throw new Error(\"useCMSData must be used inside CMSProvider\")\n\treturn context\n}\n\n","\n\n// update: 2025.11.12\n// version: 0.0.3.bate\n// dev: wade\n\nimport { useCallback, useLayoutEffect, useMemo, useRef } from \"react\"\nimport { useAnimate, motionValue } from \"motion/react\"\nimport { create } from \"zustand\"\nimport { getScrollContainerStores, getRootLenis } from \"@/packages/components\"\n\nimport type { AnimationPlaybackControlsWithThen, Easing } from \"motion/react\"\nimport Lenis from \"lenis\"\n\nconst ANCHOR_ATTRIBUTE = \"data-anchor\"\nconst OFFSETER_ATTRIBUTE = \"data-anchor-offseter\"\n\nexport interface AnimateOptions {\n\tduration?: number\n\tdelay?: number\n\tease?: Easing | Easing[] | undefined\n\tonScroll?: (lenis?: Lenis) => void\n\tonScrolling?: (value: number) => void\n\tonScrolled?: (lenis?: Lenis) => void\n}\n\nexport interface AnchorOptions extends AnimateOptions {\n\tanchor: string,\n\tcontainer?: string,\n\toffseters?: string | string[]\n\tdirection?: \"x\" | \"y\"\n\talign?: \"start\" | \"center\" | \"end\"\n\toffset?: number\n}\n\nexport interface ScrollOptions extends AnimateOptions {\n\tcontrollerKey: string\n\tcontainerDom: HTMLElement | Window\n\tanchorScrollValue: { left: number, top: number }\n\tcontainerScrollValue: { left: number, top: number }\n\tdirection?: AnchorOptions[\"direction\"]\n}\n\nexport type AnimateController = AnimationPlaybackControlsWithThen\n\nexport interface AnchorsMethods {\n\tregisterAnchors: (name: string) => {\n\t\t[key: string]: string | React.RefObject<null>;\n\t\tref: React.RefObject<null>;\n\t};\n\tregisterOffseters: (name: string) => {\n\t\t[key: string]: string | React.RefObject<null>;\n\t\tref: React.RefObject<null>;\n\t};\n\tsetStores: (options: AnchorStoreOptions) => void;\n\tgetStores: () => AnchorsStores;\n\tscrollToAnchor: (anchorOptions: AnchorOptions) => void;\n}\n\nexport function useAnchors(): AnchorsMethods {\n\tconst [_, animate] = useAnimate()\n\n\tconst controllerRef = useRef<Map<string, AnimateController>>(new Map())\n\n\tconst scrollAnimations = useCallback(({\n\t\tcontrollerKey,\n\t\tcontainerDom,\n\t\tanchorScrollValue,\n\t\tcontainerScrollValue,\n\t\tdirection = \"y\",\n\t\tduration = 1,\n\t\tdelay = 0,\n\t\tease = [0, 1, .5, .99],\n\t\tonScroll: onPlay,\n\t\tonScrolled,\n\t\tonScrolling,\n\t\t...props\n\t}: ScrollOptions) => {\n\n\t\tif (direction !== \"y\" && direction !== \"x\") {\n\t\t\tconsole.error(`Scroll Direction isn't 'x' or 'y' `)\n\t\t\treturn\n\t\t}\n\n\t\tconst { left: scrollLeft, top: scrollTop } = containerScrollValue\n\t\tconst { left: anchorLeft, top: anchorTop } = anchorScrollValue\n\n\t\tconst isScrollX = direction === \"x\"\n\t\tconst isScrollY = direction === \"y\"\n\n\t\tconst startValue = isScrollX ? scrollLeft : scrollTop\n\t\tconst endValue = isScrollX ? anchorLeft : anchorTop\n\n\t\tif (startValue == endValue) {\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t\treturn\n\t\t}\n\n\t\tconst motionStartValue = motionValue(startValue)\n\n\t\tconst onUpdate = (value: number) => {\n\t\t\tconst left = isScrollX ? value : undefined\n\t\t\tconst top = isScrollY ? value : undefined\n\t\t\tcontainerDom.scrollTo({ left, top })\n\t\t\tonScrolling?.(value)\n\t\t}\n\n\t\tconst onComplete = () => {\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t\tonScrolled?.()\n\t\t}\n\n\t\tconst options = {\n\t\t\tduration,\n\t\t\tease,\n\t\t\tdelay,\n\t\t\tonPlay,\n\t\t\tonUpdate,\n\t\t\tonComplete,\n\t\t\t...props\n\t\t}\n\n\t\tcontrollerRef.current.set(\n\t\t\tcontrollerKey, animate(motionStartValue, endValue, options)\n\t\t)\n\t}, [])\n\n\tconst scrollToAnchor = useCallback((\n\t\tanchorOptions: AnchorOptions\n\t) => {\n\t\tconst {\n\t\t\tanchor: anchorName,\n\t\t\tcontainer: containerName,\n\t\t\toffseters,\n\t\t\talign,\n\t\t\toffset = 0,\n\t\t\tdirection = \"y\",\n\t\t\t...options\n\t\t} = anchorOptions\n\n\t\tconst anchorsStores = getAnchorsStores()\n\t\tconst scrollContainersStores = getScrollContainerStores()\n\n\t\tconst isScrolltoAnchor = anchorName !== \"#\"\n\t\tconst isScrollContainer = containerName && containerName !== \"window\"\n\t\tconst controllerKey = containerName ?? \"window\"\n\n\t\tif (controllerRef.current.has(controllerKey)) {\n\t\t\tcontrollerRef.current.get(controllerKey)?.stop()\n\t\t\tcontrollerRef.current.delete(controllerKey)\n\t\t}\n\n\t\tconst anchorDom = isScrolltoAnchor\n\t\t\t? anchorsStores.anchors.get(anchorName) as HTMLElement\n\t\t\t: undefined\n\t\tif (isScrolltoAnchor && !(anchorDom instanceof HTMLElement)) return\n\n\t\tconst containerDom = isScrollContainer\n\t\t\t? scrollContainersStores.containers.get(containerName) as HTMLElement\n\t\t\t: window\n\n\t\tif (!containerDom) return\n\n\t\tconst getOffseterDomClient = (offseters: string) => {\n\t\t\tconst offseterDom = anchorsStores.offseters.get(offseters) as HTMLElement\n\t\t\tconst { clientWidth, clientHeight } = offseterDom || {}\n\t\t\treturn { width: clientWidth ?? 0, height: clientHeight ?? 0 }\n\t\t}\n\n\t\tconst offsets = Array.isArray(offseters)\n\t\t\t? offseters.reduce((init: Record<string, number>, offseter: string) => {\n\t\t\t\tconst { width, height } = getOffseterDomClient(offseter)\n\t\t\t\treturn {\n\t\t\t\t\twidth: (init.width ?? 0) + width,\n\t\t\t\t\theight: (init.height ?? 0) + height\n\t\t\t\t}\n\t\t\t}, {})\n\t\t\t: typeof offseters == \"string\"\n\t\t\t\t? getOffseterDomClient(offseters as string)\n\t\t\t\t: { width: 0, height: 0 }\n\n\t\tconst offsetValue = {\n\t\t\twidth: direction === \"x\" ? offsets.width + offset : 0,\n\t\t\theight: direction === \"y\" ? offsets.height + offset : 0,\n\t\t}\n\n\t\tconst isLenisScroll = containerDom == window\n\t\t\t&& window.document.documentElement.classList.contains(\"lenis\")\n\t\t\t|| containerDom instanceof Lenis\n\n\t\tif (isLenisScroll) {\n\t\t\tconst lenis = (isScrollContainer ? (containerDom as Lenis) : getRootLenis()?.root)\n\t\t\t// TODO 尚未找到可以判斷已經移動到錨點位置的方式\n\t\t\tif (!lenis) return\n\n\t\t\tconst directionOffset = direction === \"x\"\n\t\t\t\t? offsetValue.width + offset\n\t\t\t\t: offsetValue.height + offset\n\n\t\t\t// TODO 尚未建立lenis options完整設定\n\t\t\tlenis.scrollTo(\n\t\t\t\tanchorDom ?? 0, {\n\t\t\t\toffset: (directionOffset * -1),\n\t\t\t\tonStart: (lenis) => options?.onScroll?.(lenis),\n\t\t\t\tonComplete: (lenis) => options?.onScrolled?.(lenis)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\tconst containerScrollValue = {\n\t\t\ttop: Math.round(isScrollContainer\n\t\t\t\t? (containerDom as HTMLElement).scrollTop\n\t\t\t\t: (containerDom as Window).pageYOffset),\n\t\t\tleft: Math.round(isScrollContainer\n\t\t\t\t? (containerDom as HTMLElement).scrollLeft\n\t\t\t\t: pageXOffset)\n\t\t}\n\n\t\tconst containerRect = isScrollContainer\n\t\t\t? (containerDom as HTMLElement).getBoundingClientRect()\n\t\t\t: { top: 0, left: 0 }\n\n\t\tconst containerOffsetValue = {\n\t\t\tleft: containerScrollValue.left - (isScrollContainer ? containerRect.left : 0),\n\t\t\ttop: containerScrollValue.top - (isScrollContainer ? containerRect.top : 0)\n\t\t}\n\n\t\tconst anchorRect = anchorDom ? anchorDom.getBoundingClientRect() : { left: 0, top: 0 }\n\n\t\tconst anchorScrollValue = {\n\t\t\tleft: isScrolltoAnchor\n\t\t\t\t? Math.round(anchorRect.left + containerOffsetValue.left - offsetValue.width)\n\t\t\t\t: offsetValue.width,\n\t\t\ttop: isScrolltoAnchor\n\t\t\t\t? Math.round(anchorRect.top + containerOffsetValue.top - offsetValue.height)\n\t\t\t\t: offsetValue.height\n\t\t}\n\n\t\tscrollAnimations({\n\t\t\tcontrollerKey,\n\t\t\tcontainerDom,\n\t\t\tcontainerScrollValue,\n\t\t\tanchorScrollValue,\n\t\t\tdirection,\n\t\t\t...options\n\t\t})\n\n\t}, [])\n\n\tconst returnsMemo = useMemo(() => ({\n\t\tregisterAnchors,\n\t\tregisterOffseters,\n\t\tsetStores: setAnchorsStore,\n\t\tgetStores: getAnchorsStores,\n\t\tscrollToAnchor\n\t}), [scrollToAnchor])\n\n\treturn returnsMemo\n}\n\nexport interface RegistrationDatas {\n\tkey: keyof AnchorsStores\n\tname: string\n}\n\nexport function useRegistration({ key, name }: RegistrationDatas) {\n\tconst ref = useRef(null)\n\tconst attribute = key == \"anchors\" ? ANCHOR_ATTRIBUTE : OFFSETER_ATTRIBUTE\n\n\tuseLayoutEffect(() => {\n\t\tsetAnchorsStore({ key, action: \"add\", node: ref.current, name })\n\t\treturn () => { setAnchorsStore({ key, action: \"remove\", node: ref.current, name }) }\n\t}, [])\n\n\treturn { ref, [attribute]: name }\n}\n\nexport function registerAnchors(name: string) {\n\treturn useRegistration({ key: \"anchors\", name })\n}\n\nexport function registerOffseters(name: string) {\n\treturn useRegistration({ key: \"offseters\", name })\n}\n\nexport interface AnchorsStores {\n\tanchors: Map<string, HTMLElement | null>\n\toffseters: Map<string, HTMLElement | null>\n}\n\nexport const useAnchorsStores = create<AnchorsStores>()(() => ({\n\tanchors: new Map(),\n\toffseters: new Map(),\n}))\n\nexport const getAnchorsStores = () => useAnchorsStores.getState()\n\nexport interface AnchorStoreOptions extends RegistrationDatas {\n\tnode: HTMLDivElement | null\n\taction: \"add\" | \"remove\",\n}\n\nexport const setAnchorsStore = (options: AnchorStoreOptions) => {\n\tconst { key, action, name, node } = options\n\n\tuseAnchorsStores.setState(stores => {\n\t\tswitch (key) {\n\t\t\tcase \"anchors\":\n\t\t\t\tconst anchorDom = stores.anchors?.get(name)\n\t\t\t\tif (action == \"add\" && node instanceof HTMLElement) {\n\t\t\t\t\tif (anchorDom == node) return stores\n\t\t\t\t\tstores.anchors?.set(name, node)\n\n\t\t\t\t} else if (action == \"remove\" && anchorDom) {\n\t\t\t\t\tstores.anchors?.delete(name)\n\t\t\t\t}\n\n\t\t\t\treturn { anchors: stores.anchors }\n\n\t\t\tcase \"offseters\":\n\t\t\t\tconst offseterDom = stores.offseters?.get(name)\n\n\t\t\t\tif (action == \"add\" && node instanceof HTMLElement) {\n\t\t\t\t\tif (offseterDom == node) return stores\n\t\t\t\t\tstores.offseters?.set(name, node)\n\n\t\t\t\t} else if (action == \"remove\" && offseterDom) {\n\t\t\t\t\tstores.offseters?.delete(name)\n\t\t\t\t}\n\t\t\t\treturn { offseters: stores.offseters }\n\n\t\t\tdefault:\n\t\t\t\treturn stores\n\t\t}\n\t})\n}\n\n\n","\n\nimport { useEffect, useState } from \"react\"\n\nexport function useHash() {\n\n\tconst [hash, setHash] = useState<string>(\"\")\n\n\tconst updateHash = () => setHash(window.location.hash)\n\n\tconst hashchangeEvent = (e: HashChangeEvent) => {\n\t\te.preventDefault?.()\n\t\tupdateHash()\n\t}\n\n\t// 初始化\n\n\tuseEffect(() => {\n\t\tupdateHash()\n\t\twindow.addEventListener(\"hashchange\", hashchangeEvent)\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"hashchange\", hashchangeEvent)\n\t\t}\n\t}, [])\n\n\treturn hash\n}\n"]}