@opexa/portal-components 0.0.1 → 0.0.2

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/lodash.debounce@4.0.8/node_modules/lodash.debounce/index.js","../src/lib/index.ts","../src/lib/components/Disclaimer/Disclaimer.tsx","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/addMinutes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/get.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClamp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/clamp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMatch.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMatchData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_matchesStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatches.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/hasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatchesProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/property.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqBy.js","../../../node_modules/.pnpm/usehooks-ts@3.1.1_react@19.1.0/node_modules/usehooks-ts/dist/index.js","../../../node_modules/.pnpm/zustand@5.0.4_@types+react@19.0.8_react@19.1.0_use-sync-external-store@1.4.0_react@19.1.0_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.4_@types+react@19.0.8_react@19.1.0_use-sync-external-store@1.4.0_react@19.1.0_/node_modules/zustand/esm/react.mjs","../src/lib/hooks/useGlobalStore.tsx","../src/lib/hooks/useSessionQuery/useSessionQuery.ts","../src/lib/services/client/getSession.ts","../src/lib/hooks/useSessionQuery/getSessionQueryKey.ts","../src/lib/components/Disclaimer/useDisclaimer.tsx","../src/lib/components/Games/Games.tsx","../src/lib/components/PortalProvider/PortalProvider.tsx","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/.pnpm/tailwind-merge@3.3.0/node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/icons/AlertCircleIcon.tsx","../src/lib/icons/XIcon.tsx","../src/lib/utils/getQueryClient.ts","../src/lib/utils/toaster.ts","../src/lib/components/SignIn/SignIn.tsx","../src/lib/components/SignIn/SignInForm.tsx","../src/lib/utils/getLocaleInfo.tsx","../src/lib/hooks/usePlatformQuery/usePlatformQuery.ts","../src/lib/constants/index.ts","../src/lib/hooks/usePlatformQuery/getPlatformQueryKey.ts","../src/lib/hooks/useLocaleInfo.ts","../src/lib/hooks/useMobileNumberParser.ts","../src/lib/hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation.ts","../src/lib/hooks/useSendVerificationCodeMutation/getSendVerificationCodeMutationKey.ts","../src/lib/hooks/useSigninMutation/useSignInMutation.ts","../src/lib/services/client/signIn.ts","../src/lib/hooks/useSigninMutation/getSignInMutationKey.ts","../src/lib/icons/ArrowLeftIcon.tsx","../src/lib/icons/CheckIcon.tsx","../src/lib/icons/FacebookIcon.tsx","../src/lib/icons/GoogleIcon.tsx","../src/lib/components/SignUp/SignUp.tsx","../src/lib/components/SignUp/SignUpForm.tsx","../src/lib/hooks/useSignUpMutation/useSignUpMutation.ts","../src/lib/hooks/useSignUpMutation/getSignUpMutationKey.ts","../../../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","../src/lib/components/TopWins/TopWins.tsx","../src/lib/hooks/useGamesQuery/useGamesQuery.ts","../src/lib/hooks/useGamesQuery/getGamesQueryKey.ts","../src/lib/hooks/useTopWinsQuery/useTopWinsQuery.ts","../src/lib/hooks/useTopWinsQuery/getTopWinsQueryKey.ts","../src/lib/utils/parseDecimal.ts","../src/lib/utils/formatNumber.ts","../src/lib/utils/getGameImageUrl.ts"],"sourcesContent":["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","export * from './components';\r\n","'use client';\r\n\r\nimport { Dialog, Portal } from '@ark-ui/react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useRef } from 'react';\r\nimport pagcorLogo from '../../images/pagcor.png';\r\nimport responsibleGamingLogo from '../../images/responsible-gaming.png';\r\nimport { useDisclaimer } from './useDisclaimer';\r\n\r\nexport interface DisclaimerProps {\r\n logo: ImageProps['src'];\r\n}\r\n\r\nexport function Disclaimer(props: DisclaimerProps) {\r\n const disclaimer = useDisclaimer();\r\n const acceptTriggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n return (\r\n <Dialog.Root\r\n open={disclaimer.open}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n initialFocusEl={() => acceptTriggerRef.current}\r\n >\r\n <Portal>\r\n <Dialog.Backdrop className=\"z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 hidden bg-black/60 lg:block\" />\r\n <Dialog.Positioner className=\"z-dialog fixed inset-0 mx-auto w-full lg:w-fit lg:py-16\">\r\n <Dialog.Content className=\"ui-open:animate-dialog-in ui-closed:animate-dialog-out flex h-full w-full flex-col items-start bg-white p-3xl lg:h-auto lg:w-[400px] lg:rounded-xl\">\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <div className=\"w-full grow\">\r\n <Dialog.Title className=\"mt-3xl text-center text-lg font-semibold\">\r\n Age Verification\r\n </Dialog.Title>\r\n <Dialog.Description className=\"text-gray-600 mt-xs text-center text-sm\">\r\n By entering this website I acknowledge and confirmI am 21 years of age and I agree\r\n with the{' '}\r\n <button type=\"button\" className=\"text-accent-700 underline underline-offset-2\">\r\n Terms and Conditions.\r\n </button>\r\n </Dialog.Description>\r\n\r\n <div className=\"mt-5 flex items-center justify-center gap-3xl\">\r\n <Image\r\n src={pagcorLogo}\r\n alt=\"\"\r\n className=\"h-[88px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n\r\n <Image\r\n src={responsibleGamingLogo}\r\n alt=\"\"\r\n className=\"h-[62px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n </div>\r\n </div>\r\n\r\n <button\r\n ref={acceptTriggerRef}\r\n type=\"button\"\r\n className=\"shadow-xs bg-accent-400 mt-4xl flex h-11 w-full items-center justify-center rounded-md font-semibold text-white\"\r\n onClick={disclaimer.close}\r\n >\r\n Accept\r\n </button>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { millisecondsInMinute } from \"./constants.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMinutes} function options.\n */\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n * @param options - An object with options\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount, options) {\n const _date = toDate(date, options?.in);\n _date.setTime(_date.getTime() + amount * millisecondsInMinute);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue = false) {\n if (typeof defaultValue !== \"boolean\") {\n throw new Error(\"defaultValue must be `true` or `false`\");\n }\n const [value, setValue] = useState(defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => {\n var _a;\n return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);\n }, [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER) {\n console.warn(\n `Tried removing localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.localStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\", eventListenerOptions = {}) {\n useEventListener(\n eventType,\n (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.filter((r) => Boolean(r.current)).every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n },\n void 0,\n eventListenerOptions\n );\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n const removeValue = useEventCallback(() => {\n if (IS_SERVER6) {\n console.warn(\n `Tried removing sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n window.sessionStorage.removeItem(key);\n setStoredValue(defaultValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue, removeValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\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 () => selector(api.getState()),\n () => selector(api.getInitialState())\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 { create } from 'zustand';\r\n\r\ninterface Disclosure {\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n}\r\n\r\ninterface Popups {\r\n signUp: Disclosure;\r\n signIn: Disclosure;\r\n disclaimer: Disclosure;\r\n depositWithdrawal: Disclosure;\r\n}\r\n\r\nexport const usePopupsStore = create<Popups>((set, get) => ({\r\n signIn: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signIn: { ...get().signIn, open } });\r\n },\r\n },\r\n signUp: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signUp: { ...get().signUp, open } });\r\n },\r\n },\r\n disclaimer: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ disclaimer: { ...get().disclaimer, open } });\r\n },\r\n },\r\n depositWithdrawal: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ depositWithdrawal: { ...get().depositWithdrawal, open } });\r\n },\r\n },\r\n}));\r\n","import { useQuery } from '@tanstack/react-query';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query, Session } from '../../types';\r\nimport { getSessionQueryKey } from './getSessionQueryKey';\r\n\r\nexport const useSessionQuery: Query<Session> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getSessionQueryKey(),\r\n queryFn: async () => {\r\n return await getSession();\r\n },\r\n });\r\n};\r\n","import type { ApiResponse, Session } from '../../types';\r\n\r\nexport async function getSession(): Promise<Session> {\r\n const res = await fetch('/api/sessions', {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Session>;\r\n\r\n return json.ok ? json.data : { status: 'unauthenticated' };\r\n}\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getSessionQueryKey = (): QueryKey => ['queries/session'];\r\n","import { addMinutes } from 'date-fns';\r\nimport { clamp } from 'lodash-es';\r\nimport { useLocalStorage, useTimeout } from 'usehooks-ts';\r\nimport { usePopupsStore } from '../../hooks/useGlobalStore';\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\n\r\nexport function useDisclaimer() {\r\n 'use no memo';\r\n\r\n const sessionQuery = useSessionQuery();\r\n const disclaimerStore = usePopupsStore((state) => state.disclaimer);\r\n\r\n const [refreshPausedUntil, setRefreshPausedUntil] = useLocalStorage<Date | null>(\r\n 'WebPortalDisclaimerRefreshPausedUntil',\r\n null,\r\n {\r\n serializer(v) {\r\n return v?.toISOString() ?? '';\r\n },\r\n deserializer(v) {\r\n return v ? new Date(v) : null;\r\n },\r\n },\r\n );\r\n\r\n const now = new Date();\r\n\r\n const refetchPausedUntilInMs = refreshPausedUntil\r\n ? clamp(refreshPausedUntil.getTime() - now.getTime(), 0, Infinity)\r\n : /* set to zero to trigger timeout function */ 0;\r\n\r\n useTimeout(() => {\r\n disclaimerStore.setOpen(true);\r\n }, refetchPausedUntilInMs);\r\n\r\n return {\r\n open: sessionQuery.isLoading\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated'\r\n ? false\r\n : disclaimerStore.open,\r\n close: () => {\r\n disclaimerStore.setOpen(false);\r\n setRefreshPausedUntil(addMinutes(new Date(), 30));\r\n },\r\n };\r\n}\r\n","export function Games() {\r\n return null;\r\n}\r\n","'use client';\r\n\r\nimport { Toast, Toaster } from '@ark-ui/react';\r\nimport { QueryClientProvider } from '@tanstack/react-query';\r\nimport type { PropsWithChildren } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { AlertCircleIcon } from '../../icons/AlertCircleIcon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function PortalProvider({ children }: PropsWithChildren) {\r\n return (\r\n <QueryClientProvider client={getQueryClient()}>\r\n {children}\r\n\r\n <Toaster toaster={toaster}>\r\n {(toast) => (\r\n <Toast.Root\r\n key={toast.id}\r\n className={twMerge(\r\n 'z-[var(--z-index)]',\r\n 'h-[var(--height)]',\r\n 'opacity-[var(--opacity)]',\r\n '[translate:var(--x)_var(--y)_0]',\r\n 'scale-[var(--scale)]',\r\n\r\n 'shadow-xs',\r\n 'group',\r\n 'flex',\r\n 'w-[860px]',\r\n 'max-w-full',\r\n 'items-center',\r\n 'gap-lg',\r\n 'rounded-xl',\r\n 'border',\r\n 'border-gray-300',\r\n 'bg-white',\r\n 'p-xl',\r\n 'transition-all',\r\n 'duration-300',\r\n )}\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-9.5 items-center justify-center rounded-full border-2',\r\n toast.type === 'error' ? 'border-red-500/15' : 'border-green-500/15',\r\n )}\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-7 items-center justify-center rounded-full border-2',\r\n toast.type === 'error' ? 'border-red-500/35' : 'border-green-500/35',\r\n )}\r\n >\r\n <AlertCircleIcon\r\n className={twMerge(\r\n 'size-5',\r\n toast.type === 'error' ? 'text-red-500' : 'text-green-500',\r\n )}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"grow text-sm leading-none\">\r\n <Toast.Title className=\"font-semibold\">\r\n {(toast.title ?? toast.type === 'error') ? 'Error' : 'Success'}\r\n </Toast.Title>\r\n <Toast.Description className=\"text-gray-700 mt-1\">\r\n {toast.description}\r\n </Toast.Description>\r\n </div>\r\n <Toast.CloseTrigger className=\"text-gray-400 hover:text-gray-500 self-start\">\r\n <XIcon className=\"size-5\" />\r\n </Toast.CloseTrigger>\r\n </Toast.Root>\r\n )}\r\n </Toaster>\r\n </QueryClientProvider>\r\n );\r\n}\r\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: AnyClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n for (const classGroupId in classGroups) {\n processClassesRecursively(classGroups[classGroupId]!, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\nconst MODIFIER_SEPARATOR = ':'\nconst MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n const modifiers = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + MODIFIER_SEPARATOR_LENGTH\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n } else if (currentCharacter === '(') {\n parenDepth++\n } else if (currentCharacter === ')') {\n parenDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier)\n const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.substring(fullPrefix.length))\n : {\n isExternal: true,\n modifiers: [],\n hasImportantModifier: false,\n baseClassName: className,\n maybePostfixModifierPosition: undefined,\n }\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n\nconst stripImportantModifier = (baseClassName: string) => {\n if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(0, baseClassName.length - 1)\n }\n\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {\n return baseClassName.substring(1)\n }\n\n return baseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n const orderSensitiveModifiers = Object.fromEntries(\n config.orderSensitiveModifiers.map((modifier) => [modifier, true]),\n )\n\n const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier]\n\n if (isPositionSensitive) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n }\n\n return sortModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeTextShadow = fromTheme('text-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: scaleInset() }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber] }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [\n { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n 'mask-no-clip',\n ],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [\n { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n ],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function AlertCircleIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" />\r\n </svg>\r\n );\r\n}\r\n","export function XIcon(props: React.ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M18 6L6 18M6 6L18 18\" />\r\n </svg>\r\n );\r\n}\r\n","import { QueryClient, defaultShouldDehydrateQuery, isServer } from '@tanstack/react-query';\r\n\r\nfunction createQueryClient() {\r\n return new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 1000 * 60,\r\n },\r\n dehydrate: {\r\n shouldDehydrateQuery(query) {\r\n return defaultShouldDehydrateQuery(query) || query.state.status === 'pending';\r\n },\r\n },\r\n },\r\n });\r\n}\r\n\r\nlet BROWSER_QUERY_CLIENT: QueryClient | undefined = undefined;\r\n\r\nexport const getQueryClient = () => {\r\n if (isServer) {\r\n return createQueryClient();\r\n }\r\n\r\n if (!BROWSER_QUERY_CLIENT) {\r\n BROWSER_QUERY_CLIENT = createQueryClient();\r\n }\r\n\r\n return BROWSER_QUERY_CLIENT;\r\n};\r\n","import { createToaster, type CreateToasterReturn } from '@ark-ui/react/toast';\r\n\r\nexport const toaster: CreateToasterReturn = createToaster({\r\n placement: 'top',\r\n duration: 5000,\r\n max: 5,\r\n overlap: true,\r\n gap: 8,\r\n});\r\n","'use client';\r\n\r\nimport { Dialog, Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { usePopupsStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { SignInForm } from './SignInForm';\r\n\r\nexport interface SignInProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignIn(props: SignInProps) {\r\n const signInStore = usePopupsStore((popups) => popups.signIn);\r\n\r\n return (\r\n <Dialog.Root\r\n open={signInStore.open}\r\n onOpenChange={(details) => {\r\n signInStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? (\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 flex h-11 items-center justify-center px-3.5 font-semibold\"\r\n >\r\n Login\r\n </button>\r\n )}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop className=\"z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 hidden bg-black/60 lg:block\" />\r\n <Dialog.Positioner className=\"z-dialog fixed inset-0 overflow-y-auto lg:py-16\">\r\n <Dialog.Content className=\"ui-open:animate-dialog-in ui-closed:animate-dialog-out mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger className=\"text-gray-300 hover:text-gray-400 absolute right-4 top-4 flex size-11 items-center justify-center\">\r\n <XIcon className=\"size-6\" />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignInForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { Checkbox, Field, PinInput, useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { usePopupsStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignInMutation } from '../../hooks/useSigninMutation/useSignInMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { FacebookIcon } from '../../icons/FacebookIcon';\r\nimport { GoogleIcon } from '../../icons/GoogleIcon';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignInForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const signUpStore = usePopupsStore((popups) => popups.signUp);\r\n const signInMutation = useSignInMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">Log in to your account</h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Welcome back! Please enter your details.\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: data.mobileNumber,\r\n strict: true,\r\n });\r\n\r\n setStep(2);\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error ? e.message : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label className=\"text-gray-600 mb-sm inline-block text-sm font-medium\">\r\n Mobile Number\r\n </Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"shadow-xs ui-invalid:border-red-400 border-gray-300 block h-11 w-full rounded-md border bg-transparent py-2.5 pl-11 pr-3.5 outline-none\"\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText className=\"text-red-500 mt-sm inline-block text-sm\">\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"shadow-xs bg-accent-300 text-accent-800 mt-xl flex h-11 w-full items-center justify-center rounded-md font-semibold\"\r\n >\r\n Log In\r\n </button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl flex gap-2\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control className=\"border-gray-300 rounded-xs ui-checked:bg-accent-400 ui-checked:border-accent-400 ui-invalid:border-red-400 flex size-4 shrink-0 items-center justify-center border\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon className=\"size-3 text-white\" />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label className=\"text-gray-700 text-xs leading-tight\">\r\n I confirm that I am at least 21 years old, not listed in the PAGCOR NDRP, not\r\n a GEL license holder, government employee, or member of the Armed Forces of\r\n the Philippines. I am not playing in a public space and agree to the Terms of\r\n Use and Privacy Policy. Ineligible accounts will have their funds forfeited to\r\n the government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n\r\n <div className=\"relative mt-5 text-center\">\r\n <hr className=\"-translte-y-1/2 text-gray-200 absolute top-1/2 w-full\" />\r\n <span className=\"text-gray-500 relative bg-white px-md text-center text-sm font-semibold\">\r\n OR\r\n </span>\r\n </div>\r\n\r\n <div className=\"mt-5\">\r\n <button\r\n type=\"button\"\r\n className=\"border-gray-300 shadow-xs text-gray-700 flex h-11 w-full items-center justify-center gap-lg rounded-md border font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <GoogleIcon className=\"size-6\" />\r\n Continue with Google\r\n </button>\r\n <button\r\n type=\"button\"\r\n className=\"border-gray-300 shadow-xs text-gray-700 mt-lg flex h-11 w-full items-center justify-center gap-lg rounded-md border font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <FacebookIcon className=\"size-6\" />\r\n Continue with Facebook\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signUpStore.setOpen(true);\r\n }}\r\n >\r\n Sign up\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">Check your Phone</h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signInMutation.mutateAsync({\r\n type: 'MOBILE_NUMBER',\r\n mobileNumber,\r\n verificationCode: verificationCode.join(''),\r\n });\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n title: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control className=\"grid grid-cols-6 gap-2\">\r\n <PinInput.Input\r\n index={0}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={1}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={2}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={3}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={4}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={5}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"shadow-xs bg-accent-300 text-accent-800 mt-5 flex h-11 w-full items-center justify-center rounded-md font-semibold\"\r\n >\r\n Verify and Play\r\n </button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Didn&apos;t recieve the code?</span>\r\n <button type=\"button\" className=\"text-accent-700 font-semibold\">\r\n Resend\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import type { ComponentProps, ComponentPropsWithRef, ComponentType } from 'react';\r\n\r\nexport interface CountryInfo {\r\n /**\r\n * @description The country code\r\n * @example 'PHL'\r\n */\r\n code: 'IDN' | 'IND' | 'MYS' | 'PHL' | 'VNM';\r\n /**\r\n * @description The country name\r\n * @example 'Philippines'\r\n */\r\n name: string;\r\n /**\r\n * @description The country flag\r\n * @usage\r\n * ```tsx\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * <localeInfo.country.flag />\r\n * ```\r\n */\r\n flag: ComponentType<ComponentProps<'svg'>>;\r\n}\r\n\r\nexport interface CurrencyInfo {\r\n /**\r\n * @description The currency code\r\n * @example 'PHP'\r\n */\r\n code: 'IDR' | 'INR' | 'MYR' | 'PHP' | 'USD' | 'VND';\r\n /**\r\n * @description The currency name\r\n * @example 'Philippine Peso'\r\n */\r\n name: string;\r\n /**\r\n * @description The currency symbol\r\n * @example '₱'\r\n */\r\n symbol: string;\r\n /**\r\n * Used in api\r\n * @example 'VIRTUAL'\r\n */\r\n externalCode: 'IDR' | 'INR' | 'MYR' | 'PHP' | 'USD' | 'VIRTUAL' | (string & {});\r\n}\r\n\r\nexport interface MobileNumberInfo {\r\n /**\r\n * @description The mobile number area code\r\n * @example '+63'\r\n */\r\n areaCode: string;\r\n /**\r\n * @description The mobile number digits count\r\n * @example 10\r\n */\r\n numOfDigits: number;\r\n /**\r\n * @description pattern to validate mobile number\r\n * @usage\r\n * ```ts\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * const isValid = localeInfo.mobileNumber.pattern.test('9190000000');\r\n * ```\r\n */\r\n pattern: RegExp;\r\n /**\r\n * @description The mobile number example\r\n * @example '9190000000'\r\n */\r\n example: string;\r\n}\r\n\r\nexport type Timezone =\r\n | 'Asia/Manila'\r\n | 'Asia/Kolkata'\r\n | 'Asia/Jakarta'\r\n | 'Asia/Makassar'\r\n | 'Asia/Jayapura'\r\n | 'Asia/Kuala_Lumpur'\r\n | 'Asia/Ho_Chi_Minh'\r\n | (string & {});\r\n\r\nexport interface LocaleInfo {\r\n locale: string;\r\n timezone: Timezone;\r\n country: CountryInfo;\r\n currency: CurrencyInfo;\r\n mobileNumber: MobileNumberInfo;\r\n}\r\n\r\nexport function getLocaleInfo(timezone: Timezone): LocaleInfo {\r\n switch (timezone.toLowerCase()) {\r\n case 'asia/jakarta':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jakarta',\r\n country: {\r\n name: 'Indonesia',\r\n code: 'IDN',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/jayapura':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jayapura',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/makassar':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Makassar',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/kuala_lumpur':\r\n return {\r\n locale: 'ms-MY',\r\n timezone: 'Asia/Kuala_Lumpur',\r\n country: {\r\n name: 'Malaysia',\r\n code: 'MYS',\r\n flag: MalaysianFlag,\r\n },\r\n currency: {\r\n code: 'MYR',\r\n name: 'Malaysian Ringgit',\r\n symbol: 'RM',\r\n externalCode: 'MYR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+60',\r\n numOfDigits: 9,\r\n example: '12' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?60|0)?1[0-9]{1}\\d{7}$/,\r\n },\r\n };\r\n\r\n case 'asia/kolkata':\r\n return {\r\n locale: 'en-IN',\r\n timezone: 'Asia/Kolkata',\r\n country: {\r\n code: 'IND',\r\n name: 'India',\r\n flag: IndianFlag,\r\n },\r\n currency: {\r\n code: 'INR',\r\n name: 'Indian Rupee',\r\n symbol: '₹',\r\n externalCode: 'INR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+91',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?91|0)?[789]\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/ho_chi_minh':\r\n return {\r\n locale: 'vi-VN',\r\n timezone: 'Asia/Ho_Chi_Minh',\r\n country: {\r\n code: 'VNM',\r\n name: 'Vietnam',\r\n flag: VietnameseFlag,\r\n },\r\n currency: {\r\n code: 'VND',\r\n name: 'Vietnamese Dong',\r\n symbol: '₫',\r\n externalCode: 'VIRTUAL',\r\n },\r\n mobileNumber: {\r\n areaCode: '+84',\r\n numOfDigits: 9,\r\n example: '849' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?84|0)?(3[2-9]|5[6|8|9]|7[0|6-9]|8[1-6|8|9]|9[0-9])\\d{7}$/,\r\n },\r\n };\r\n\r\n default:\r\n return {\r\n locale: 'en-PH',\r\n timezone: 'Asia/Manila',\r\n country: {\r\n code: 'PHL',\r\n name: 'Philippines',\r\n flag: PhilippineFlag,\r\n },\r\n currency: {\r\n code: 'PHP',\r\n name: 'Philippine Peso',\r\n symbol: '₱',\r\n externalCode: 'PHP',\r\n },\r\n mobileNumber: {\r\n areaCode: '+63',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?63|0)?9\\d{9}$/,\r\n },\r\n };\r\n }\r\n}\r\n\r\nconst PhilippineFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27540)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M12.0004 0V12L3.51514 20.4853C5.68671 22.6568 8.68671 24 12.0004 24C18.6278 24 24.0004 18.6274 24.0004 12C24.0004 5.37262 12.0004 0 12.0004 0Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0004 0C8.68671 0 5.68671 1.34316 3.51514 3.51469C6.45936 6.45891 7.50453 7.50412 12.0004 12H24.0004C24.0004 5.37262 18.6278 0 12.0004 0Z\"\r\n fill=\"#0052B4\"\r\n />\r\n <path\r\n d=\"M8.21723 11.9998L6.75173 11.3104L7.53215 9.89111L5.94074 10.1956L5.73909 8.58789L4.63059 9.77027L3.52213 8.58789L3.32043 10.1956L1.72907 9.89106L2.50949 11.3104L1.04395 11.9998L2.50949 12.6891L1.72907 14.1085L3.32057 13.8041L3.52209 15.4117L4.63059 14.2293L5.73909 15.4117L5.94074 13.8041L7.53205 14.1085L6.75168 12.6892L8.21723 11.9998Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 4.69519L3.68851 5.37689L4.48749 5.12382L3.98977 5.79825L4.47746 6.47996L3.68218 6.21507L3.18451 6.88946L3.19074 6.05133L2.39551 5.78639L3.19463 5.53332L3.20082 4.69519Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 17.1095L3.68851 17.7912L4.48749 17.5381L3.98977 18.2126L4.47746 18.8943L3.68218 18.6294L3.18451 19.3038L3.19074 18.4656L2.39551 18.2007L3.19463 17.9476L3.20082 17.1095Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M10.1563 10.9032L9.66866 11.5849L8.86963 11.3317L9.36735 12.0062L8.87966 12.688L9.67494 12.423L10.1727 13.0974L10.1664 12.2593L10.9616 11.9944L10.1625 11.7413L10.1563 10.9032Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27540\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst MalaysianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27547)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M11.4783 12.0002H24C24 10.9171 23.8556 9.86791 23.5866 8.86975H11.4783V12.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M11.4783 5.73873H22.2387C21.5041 4.54004 20.565 3.48053 19.4698 2.60828H11.4783V5.73873Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0001 24.0002C14.8243 24.0002 17.4201 23.024 19.47 21.3915H4.53027C6.58016 23.024 9.17596 24.0002 12.0001 24.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M1.76146 18.2601H22.2389C22.8286 17.2978 23.2859 16.2459 23.5868 15.1296H0.413574C0.714371 16.2459 1.17173 17.2978 1.76146 18.2601Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path d=\"M12 12C12 5.37262 12 4.59131 12 0C5.37262 0 0 5.37262 0 12H12Z\" fill=\"#0052B4\" />\r\n <path\r\n d=\"M7.98001 10.2709C6.34117 10.2709 5.01263 8.94229 5.01263 7.30349C5.01263 5.6647 6.34121 4.33612 7.98001 4.33612C8.491 4.33612 8.97179 4.46535 9.39156 4.69279C8.73306 4.04887 7.8325 3.65137 6.8387 3.65137C4.82171 3.65137 3.18652 5.28651 3.18652 7.30354C3.18652 9.32057 4.82171 10.9557 6.8387 10.9557C7.8325 10.9557 8.73306 10.5582 9.39156 9.91429C8.97179 10.1416 8.49104 10.2709 7.98001 10.2709Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M8.81671 5.21729L9.34354 6.31894L10.5333 6.04407L10.0005 7.14277L10.9573 7.90153L9.76602 8.17008L9.76935 9.39122L8.81671 8.62725L7.86402 9.39122L7.86731 8.17008L6.67603 7.90153L7.63284 7.14277L7.10001 6.04407L8.28984 6.31894L8.81671 5.21729Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27547\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27553)\">\r\n <path\r\n d=\"M1.19023 6.78213C0.427387 8.35976 -0.000488281 10.1296 -0.000488281 11.9995C-0.000488281 13.8694 0.427387 15.6393 1.19023 17.2169L11.9995 18.2604L22.8088 17.2169C23.5716 15.6393 23.9995 13.8694 23.9995 11.9995C23.9995 10.1296 23.5716 8.35976 22.8088 6.78213L11.9995 5.73865L1.19023 6.78213Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M1.19092 17.2183C3.13182 21.2322 7.24225 24.0009 11.9998 24.0009C16.7573 24.0009 20.8677 21.2322 22.8086 17.2183H1.19092Z\"\r\n fill=\"#6DA544\"\r\n />\r\n <path\r\n d=\"M1.19092 6.78238H22.8086C20.8677 2.76843 16.7573 -0.000244141 11.9998 -0.000244141C7.24229 -0.000244141 3.13182 2.76843 1.19092 6.78238Z\"\r\n fill=\"#FF9811\"\r\n />\r\n <path\r\n d=\"M12.0001 16.1742C14.3052 16.1742 16.174 14.3055 16.174 12.0003C16.174 9.69513 14.3052 7.82642 12.0001 7.82642C9.69489 7.82642 7.82617 9.69513 7.82617 12.0003C7.82617 14.3055 9.69489 16.1742 12.0001 16.1742Z\"\r\n fill=\"#FF9811\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27553\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndonesianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27559)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path d=\"M0 12C0 5.37262 5.37262 0 12 0C18.6274 0 24 5.37262 24 12\" fill=\"#A2001D\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27559\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst VietnameseFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_10544_106556)\">\r\n <path\r\n d=\"M10 20C15.5228 20 20 15.5228 20 10C20 4.47715 15.5228 0 10 0C4.47715 0 0 4.47715 0 10C0 15.5228 4.47715 20 10 20Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M10.0003 5.2168L11.0795 8.53825H14.5719L11.7464 10.591L12.8257 13.9125L10.0003 11.8597L7.17488 13.9125L8.2541 10.591L5.42871 8.53825H8.92105L10.0003 5.2168Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10544_106556\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n","import { getPlatform, type Platform } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getPlatformQueryKey } from './getPlatformQueryKey';\r\n\r\nexport const usePlatformQuery: Query<Platform> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getPlatformQueryKey(),\r\n queryFn: async () => {\r\n return await getPlatform({\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import { z } from 'zod';\r\n\r\nexport const SITE_ID = z\r\n .string()\r\n .min(1, 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must be 1 or more characters')\r\n .max(32, 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must not be more than 32 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_SITE_ID);\r\n\r\nexport const PLATFORM_ID = z\r\n .string()\r\n .min(1, 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must be 1 or more characters')\r\n .max(32, 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must not be more than 32 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_ID);\r\n\r\nexport const PLATFORM_CODE = z\r\n .string()\r\n .min(4, 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must be at least 4 characters')\r\n .max(8, 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must not be more than 8 characters')\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);\r\n\r\nexport const ENVIRONMENT = z\r\n .enum(['production', 'development'])\r\n .catch('development')\r\n .parse(process.env.NEXT_PUBLIC_ENVIRONMENT);\r\n\r\nexport const BYPASS_RECAPTCHA = z\r\n .any()\r\n .transform(Boolean)\r\n .catch(false)\r\n .parse(process.env.NEXT_PUBLIC_BYPASS_RECAPTCHA);\r\n\r\nexport const ACCESS_TOKEN_COOKIE_NAME: string = 'WebPortalAuthAccessToken';\r\nexport const REFRESH_TOKEN_COOKIE_NAME: string = 'WebPortalAuthRefreshToken';\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getPlatformQueryKey = (): QueryKey => ['queries/platform'];\r\n","import { getLocaleInfo } from '../utils/getLocaleInfo';\r\nimport { usePlatformQuery } from './usePlatformQuery/usePlatformQuery';\r\n\r\nexport const useLocaleInfo = () => {\r\n const query = usePlatformQuery();\r\n return getLocaleInfo(query.data?.timezone ?? 'Asia/Manila');\r\n};\r\n","import { useLocaleInfo } from './useLocaleInfo';\r\n\r\nexport function useMobileNumberParser() {\r\n const localeInfo = useLocaleInfo();\r\n\r\n /**\r\n * Formats a mobile number based on the current locale information.\r\n * Adds the area code if it is not present and ensures the number is in the correct format.\r\n * @example\r\n * ```ts\r\n * format('9190000001'); // '+639190000001'\r\n * format('09190000001'); // '+639190000001'\r\n * format('639190000001'); // '+639190000001'\r\n * format('+639190000001'); // '+639190000001'\r\n * ```\r\n */\r\n const format = (value: string) => {\r\n if (value.startsWith(localeInfo.mobileNumber.areaCode)) {\r\n return value;\r\n }\r\n\r\n if (value.startsWith('0')) {\r\n return localeInfo.mobileNumber.areaCode + value.substring(1);\r\n }\r\n\r\n if (value.startsWith(localeInfo.mobileNumber.areaCode.substring(1))) {\r\n return '+' + value;\r\n }\r\n\r\n return localeInfo.mobileNumber.areaCode + value;\r\n };\r\n\r\n /**\r\n * Parses a mobile number based on the current locale information.\r\n * Returns the area code and the mobile number as separate values.\r\n * @example\r\n * ```ts\r\n * parse('+639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\r\n * parse('639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\r\n * parse('09190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\r\n * parse('9190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\r\n * ```\r\n */\r\n const parse = (value: string) => {\r\n const mobileNumber = format(value).replace(localeInfo.mobileNumber.areaCode, '');\r\n\r\n return {\r\n mobileNumber: mobileNumber,\r\n areaCode: localeInfo.mobileNumber.areaCode,\r\n };\r\n };\r\n\r\n /**\r\n * Validates a mobile number based on the current locale information.\r\n * @example\r\n * ```ts\r\n * validate('9190000001'); // true\r\n * validate('09190000001'); // true\r\n * validate('639190000001'); // true\r\n * validate('+639190000001'); // true\r\n * ```\r\n */\r\n const validate = (value: unknown): value is string => {\r\n return typeof value === 'string' && localeInfo.mobileNumber.pattern.test(value);\r\n };\r\n\r\n return {\r\n validate,\r\n format,\r\n parse,\r\n };\r\n}\r\n","import { sendVerificationCode, type SendVerificationCodeInput } from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport type { Mutation } from '../../types';\r\nimport { getSendVerificationCodeMutationKey } from './getSendVerificationCodeMutationKey';\r\n\r\nexport const useSendVerificationCodeMutation: Mutation<void, SendVerificationCodeInput> = (\r\n config,\r\n) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSendVerificationCodeMutationKey(),\r\n mutationFn: async (input) => {\r\n await sendVerificationCode(input);\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getSendVerificationCodeMutationKey = (): MutationKey => [\r\n 'mutations/sendVerificationCode',\r\n];\r\n","import type { Authenticator } from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport { signIn, type SignInInput } from '../../services/client/signIn';\r\nimport type { Mutation } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getSignInMutationKey } from './getSignInMutationKey';\r\n\r\nexport const useSignInMutation: Mutation<Authenticator | null, SignInInput> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSignInMutationKey(),\r\n mutationFn: async (input) => {\r\n const authenticator = await signIn(input);\r\n\r\n if (!authenticator) {\r\n await queryClient.invalidateQueries({\r\n queryKey: getSessionQueryKey(),\r\n });\r\n }\r\n\r\n return authenticator;\r\n },\r\n });\r\n};\r\n","import type { Authenticator, CreateSessionInput } from '@opexa/portal-sdk-core';\r\nimport type { ApiResponse } from '../../types';\r\n\r\nexport type SignInInput = CreateSessionInput;\r\n\r\nexport async function signIn(input: SignInInput): Promise<Authenticator | null> {\r\n const res = await fetch('/api/sessions', {\r\n body: JSON.stringify(input),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Authenticator | null>;\r\n\r\n if (!json.ok) {\r\n const error = new Error();\r\n error.name = 'SignInError';\r\n error.message = 'Failed to sign in';\r\n throw error;\r\n }\r\n\r\n return json.data ?? null;\r\n}\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getSignInMutationKey = (): MutationKey => ['mutations/signIn'];\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ArrowLeftIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M19 12H5M5 12L12 19M5 12L12 5\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function CheckIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M20 6L9 17L4 12\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function FacebookIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 256 256\"\r\n {...props}\r\n >\r\n <path\r\n fill=\"#1877F2\"\r\n d=\"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445\"\r\n />\r\n <path\r\n fill=\"#FFF\"\r\n d=\"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z\"\r\n />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function GoogleIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 128 128\"\r\n {...props}\r\n >\r\n <path\r\n fill=\"#fff\"\r\n d=\"M44.59 4.21a63.28 63.28 0 0 0 4.33 120.9a67.6 67.6 0 0 0 32.36.35a57.13 57.13 0 0 0 25.9-13.46a57.44 57.44 0 0 0 16-26.26a74.3 74.3 0 0 0 1.61-33.58H65.27v24.69h34.47a29.72 29.72 0 0 1-12.66 19.52a36.2 36.2 0 0 1-13.93 5.5a41.3 41.3 0 0 1-15.1 0A37.2 37.2 0 0 1 44 95.74a39.3 39.3 0 0 1-14.5-19.42a38.3 38.3 0 0 1 0-24.63a39.25 39.25 0 0 1 9.18-14.91A37.17 37.17 0 0 1 76.13 27a34.3 34.3 0 0 1 13.64 8q5.83-5.8 11.64-11.63c2-2.09 4.18-4.08 6.15-6.22A61.2 61.2 0 0 0 87.2 4.59a64 64 0 0 0-42.61-.38\"\r\n />\r\n <path\r\n fill=\"#e33629\"\r\n d=\"M44.59 4.21a64 64 0 0 1 42.61.37a61.2 61.2 0 0 1 20.35 12.62c-2 2.14-4.11 4.14-6.15 6.22Q95.58 29.23 89.77 35a34.3 34.3 0 0 0-13.64-8a37.17 37.17 0 0 0-37.46 9.74a39.25 39.25 0 0 0-9.18 14.91L8.76 35.6A63.53 63.53 0 0 1 44.59 4.21\"\r\n />\r\n <path\r\n fill=\"#f8bd00\"\r\n d=\"M3.26 51.5a63 63 0 0 1 5.5-15.9l20.73 16.09a38.3 38.3 0 0 0 0 24.63q-10.36 8-20.73 16.08a63.33 63.33 0 0 1-5.5-40.9\"\r\n />\r\n <path\r\n fill=\"#587dbd\"\r\n d=\"M65.27 52.15h59.52a74.3 74.3 0 0 1-1.61 33.58a57.44 57.44 0 0 1-16 26.26c-6.69-5.22-13.41-10.4-20.1-15.62a29.72 29.72 0 0 0 12.66-19.54H65.27c-.01-8.22 0-16.45 0-24.68\"\r\n />\r\n <path\r\n fill=\"#319f43\"\r\n d=\"M8.75 92.4q10.37-8 20.73-16.08A39.3 39.3 0 0 0 44 95.74a37.2 37.2 0 0 0 14.08 6.08a41.3 41.3 0 0 0 15.1 0a36.2 36.2 0 0 0 13.93-5.5c6.69 5.22 13.41 10.4 20.1 15.62a57.13 57.13 0 0 1-25.9 13.47a67.6 67.6 0 0 1-32.36-.35a63 63 0 0 1-23-11.59A63.7 63.7 0 0 1 8.75 92.4\"\r\n />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { Dialog, Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { usePopupsStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { SignUpForm } from './SignUpForm';\r\n\r\nexport interface SignUpProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignUp(props: SignUpProps) {\r\n const signUpStore = usePopupsStore((popups) => popups.signUp);\r\n\r\n return (\r\n <Dialog.Root\r\n open={signUpStore.open}\r\n onOpenChange={(details) => {\r\n signUpStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? (\r\n <button\r\n type=\"button\"\r\n className=\"shadow-xs bg-accent-300 text-accent-800 flex h-11 items-center justify-center rounded-md px-3.5 font-semibold\"\r\n >\r\n Sign up\r\n </button>\r\n )}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop className=\"z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 hidden bg-black/60 lg:block\" />\r\n <Dialog.Positioner className=\"z-dialog fixed inset-0 overflow-y-auto lg:py-16\">\r\n <Dialog.Content className=\"ui-open:animate-dialog-in ui-closed:animate-dialog-out mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger className=\"text-gray-300 hover:text-gray-400 absolute right-4 top-4 flex size-11 items-center justify-center\">\r\n <XIcon className=\"size-6\" />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignUpForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { Checkbox, Field, PinInput, useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useSearchParams } from 'next/navigation';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { usePopupsStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignUpMutation } from '../../hooks/useSignUpMutation/useSignUpMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignUpForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const search = useSearchParams();\r\n const signInStore = usePopupsStore((popups) => popups.signIn);\r\n const signUpMutation = useSignUpMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">Create an account</h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Register instantly and start playing!\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: data.mobileNumber,\r\n });\r\n\r\n setStep(2);\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error ? e.message : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label className=\"text-gray-600 mb-sm inline-block text-sm font-medium\">\r\n Mobile Number\r\n </Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"shadow-xs ui-invalid:border-red-400 border-gray-300 block h-11 w-full rounded-md border bg-transparent py-2.5 pl-11 pr-3.5 outline-none\"\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText className=\"text-red-500 mt-sm inline-block text-sm\">\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"shadow-xs bg-accent-300 text-accent-800 mt-xl flex h-11 w-full items-center justify-center rounded-md font-semibold\"\r\n >\r\n Create Account\r\n </button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl flex gap-2\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control className=\"border-gray-300 rounded-xs ui-checked:bg-accent-400 ui-checked:border-accent-400 ui-invalid:border-red-400 flex size-4 shrink-0 items-center justify-center border\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon className=\"size-3 text-white\" />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label className=\"text-gray-700 text-xs leading-tight\">\r\n I confirm that I am at least 21 years old, not listed in the PAGCOR NDRP, not\r\n a GEL license holder, government employee, or member of the Armed Forces of\r\n the Philippines. I am not playing in a public space and agree to the Terms of\r\n Use and Privacy Policy. Ineligible accounts will have their funds forfeited to\r\n the government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n </div>\r\n\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signInStore.setOpen(true);\r\n }}\r\n >\r\n Log In\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">Check your Phone</h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signUpMutation.mutateAsync({\r\n mobileNumber,\r\n verificationCode: verificationCode.join(''),\r\n referralCode: search.get('referralCode') ?? undefined,\r\n domain: search.get('domain') ?? undefined,\r\n btag: search.get('btag') ?? undefined,\r\n });\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n title: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control className=\"grid grid-cols-6 gap-2\">\r\n <PinInput.Input\r\n index={0}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={1}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={2}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={3}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={4}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n <PinInput.Input\r\n index={5}\r\n className=\"border-gray-300 shadow-xs placeholder:text-gray-300 ui-invalid:border-red-400 aspect-[10/11] w-full rounded-md border text-center text-2xl font-medium outline-none\"\r\n />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <button\r\n type=\"submit\"\r\n className=\"shadow-xs bg-accent-300 text-accent-800 mt-5 flex h-11 w-full items-center justify-center rounded-md font-semibold\"\r\n >\r\n Verify and Play\r\n </button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Didn&apos;t recieve the code?</span>\r\n <button type=\"button\" className=\"text-accent-700 font-semibold\">\r\n Resend\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import {\r\n registerMemberAccountViaMobile,\r\n type RegisterMemberAccountViaMobileInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport type { Mutation } from '../../types';\r\nimport { getSignUpMutationKey } from './getSignUpMutationKey';\r\n\r\nexport interface SignUpMutationInput extends RegisterMemberAccountViaMobileInput {}\r\n\r\nexport const useSignUpMutation: Mutation<string, SignUpMutationInput> = (config) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSignUpMutationKey(),\r\n mutationFn: async (input) => {\r\n return await registerMemberAccountViaMobile(input);\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getSignUpMutationKey = (): MutationKey => ['mutations/signUp'];\r\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","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport { uniqBy } from 'lodash-es';\r\nimport Image from 'next/image';\r\nimport { useGamesQuery } from '../../hooks/useGamesQuery/useGamesQuery';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useTopWinsQuery } from '../../hooks/useTopWinsQuery/useTopWinsQuery';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { getGameImageUrl } from '../../utils/getGameImageUrl';\r\n\r\nexport interface TopWinsProps {\r\n className?: string;\r\n}\r\n\r\nexport function TopWins(props: TopWinsProps) {\r\n const localeInfo = useLocaleInfo();\r\n const topWinsQuery = useTopWinsQuery();\r\n\r\n const ids = topWinsQuery.data?.length\r\n ? uniqBy(\r\n topWinsQuery.data.map((e) => e.game.id),\r\n 'game.id',\r\n )\r\n : [];\r\n\r\n const gamesQuery = useGamesQuery({\r\n filter: {\r\n reference: {\r\n in: ids,\r\n },\r\n },\r\n });\r\n\r\n const topWins = topWinsQuery.data?.map((topWin) => {\r\n const game = gamesQuery.data?.pages[0].edges.find(\r\n (e) => e.node.reference === topWin.game.id,\r\n )?.node;\r\n\r\n return {\r\n ...topWin,\r\n game,\r\n };\r\n });\r\n\r\n const [emblaRef] = useEmblaCarousel({\r\n dragFree: true,\r\n skipSnaps: true,\r\n });\r\n\r\n if (!topWins?.length) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"text-gray-600 mb-3 text-lg font-semibold md:mb-4\">Recent Big Wins</div>\r\n\r\n <div className=\"overflow-hidden\" ref={emblaRef}>\r\n <div className=\"flex gap-2.5\">\r\n {topWins.map((topWin, index) => (\r\n <div\r\n className=\"bg-accent-400 border-accent-800 flex w-[105px] shrink-0 flex-col space-y-2 rounded-sm border p-2 text-center\"\r\n key={index}\r\n >\r\n <div className=\"aspect-square w-full\">\r\n {topWin.game && (\r\n <Image\r\n width={100}\r\n height={100}\r\n src={getGameImageUrl(topWin.game)}\r\n alt=\"\"\r\n className=\"size-full rounded-sm border object-cover\"\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"space-y-0.5\">\r\n <div className=\"text-gray-50 text-xs\">{topWin.member.name}</div>\r\n <div className=\"text-gray-50 text-sm font-semibold\">\r\n {formatNumber(topWin.payout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"text-gray-50 text-xs\">\r\n {formatNumber(topWin.multiplier, {\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n type Game,\r\n type GamesInput,\r\n type PaginatedQueryResult,\r\n getGames,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { PLATFORM_ID, SITE_ID } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getGamesQueryKey } from './getGamesQueryKey';\r\n\r\nexport const useGamesQuery: InfiniteQuery<PaginatedQueryResult<Game>, GamesInput> = (\r\n input,\r\n config,\r\n) => {\r\n return useInfiniteQuery({\r\n ...config,\r\n queryKey: getGamesQueryKey(input),\r\n queryFn: ({ pageParam }) => {\r\n return getGames(\r\n { ...input, after: pageParam },\r\n {\r\n headers: {\r\n 'Site-ID': SITE_ID,\r\n 'Platform-ID': PLATFORM_ID,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n};\r\n","import type { GamesInput } from '@opexa/portal-sdk-core';\r\nimport type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getGamesQueryKey = (input?: GamesInput): QueryKey => ['queries/games', input];\r\n","import { getTopWins, type TopWin } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getTopWinsQueryKey } from './getTopWinsQueryKey';\r\n\r\nexport const useTopWinsQuery: Query<TopWin[]> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getTopWinsQueryKey(),\r\n queryFn: async () => {\r\n return await getTopWins({\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getTopWinsQueryKey = (): QueryKey => ['queries/topWins'];\r\n","import { z } from 'zod';\r\n\r\nconst definition = z\r\n .union([\r\n z.number(),\r\n z.string().transform((val) => {\r\n const parsed = parseFloat(val);\r\n return isNaN(parsed) ? null : parsed;\r\n }),\r\n ])\r\n .nullable()\r\n .optional()\r\n .default(null)\r\n .catch(null);\r\n\r\nexport function parseDecimal(value: unknown): number | null;\r\nexport function parseDecimal(value: unknown, fallback: number): number;\r\nexport function parseDecimal(value: unknown, fallback: number | null = null) {\r\n return definition.parse(value) ?? fallback;\r\n}\r\n","import { parseDecimal } from './parseDecimal';\r\n\r\ninterface FormatNumberConfig {\r\n /** @default \"en-US\" */\r\n locale?: string;\r\n compact?: boolean;\r\n currency?: string;\r\n /** @default 0 */\r\n minDecimalPlaces?: number;\r\n /** @default 2 */\r\n maxDecimalPlaces?: number;\r\n}\r\n\r\nconst defaultConfig = {\r\n locale: 'en-US',\r\n compact: false,\r\n minDecimalPlaces: 0,\r\n maxDecimalPlaces: 2,\r\n} satisfies FormatNumberConfig;\r\n\r\n/**\r\n * @example\r\n * ```ts\r\n * numberFormatter.format(1234567.89) // \"1,234,567.89\"\r\n * numberFormatter.format(1234567.89, { locale: 'de-DE' }) // \"1.234.567,89\"\r\n * numberFormatter.format(1234567.89, { compact: true }) // \"1M\"\r\n * numberFormatter.format(1234567.89, { currency: 'USD' }) // \"$1,234,567.89\"\r\n * ```\r\n */\r\nexport function formatNumber(value: unknown, config?: FormatNumberConfig) {\r\n const {\r\n /**/\r\n locale,\r\n compact,\r\n currency,\r\n minDecimalPlaces,\r\n maxDecimalPlaces,\r\n } = Object.assign({}, defaultConfig, config);\r\n\r\n const formatter = new Intl.NumberFormat(locale, {\r\n minimumFractionDigits: minDecimalPlaces,\r\n maximumFractionDigits: maxDecimalPlaces,\r\n\r\n ...(typeof currency === 'string'\r\n ? {\r\n style: 'currency',\r\n currency,\r\n }\r\n : {}),\r\n\r\n ...(compact\r\n ? {\r\n notation: 'compact',\r\n minimumFractionDigits: 0,\r\n maximumFractionDigits: 0,\r\n }\r\n : {}),\r\n });\r\n\r\n return formatter.format(parseDecimal(value, 0));\r\n}\r\n","import type { Game } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT } from '../constants';\r\n\r\nconst GAME_IMAGE_URL =\r\n ENVIRONMENT === 'development'\r\n ? 'https://static.development.opexa.io/images'\r\n : 'https://static.opexa.io/images';\r\n\r\nexport const getGameImageUrl = (game: Game) => {\r\n return `${GAME_IMAGE_URL}/${game.provider.toLocaleLowerCase()}/thumbnail-${game.reference}.webp?cache_id=00000001`;\r\n};\r\n"],"mappings":"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AAiBmI,SAASuG,aAAa;AAC7C,QAAMxW,SAASiQ,SAASuG,aAAa;AACrC,QAAMnW,aAAawH,WACjB3H,UACA4H,gBACAC,kBACA/H,QACA4I,UACAjE,QAAQ;AAEV,QAAMrE,eAAeiN,aACnBhO,MACAgM,aACAzB,aACAb,OACAjJ,MAAM;AAER,QAAMI,WAAWsO,SACfvO,WACAzG,OACAkV,eACAvO,YACAC,cACAN,QACAO,YAAY;AAEd,QAAMkW,iBAAiB3K,eAAe7C,KAAK;AAC3C,QAAMiG,aAAazT,WAAU;AAC7B,QAAMib,eAAevD,aACnB9M,WACAC,QACA/F,cACAuV,eAAe;AAEjB,QAAM;IAAE9I;EAAa,IAAKH,cACxBC,cACA9C,eACAuB,aACAlB,oBACA8B,gBACAY,YAAY;AAEd,QAAM4J,aAAa3H,WACjBC,OACA3I,QACA0G,eACA5M,UACAC,YACA6O,YACA3O,cACA4O,UAAU;AAIZ,QAAMoH,SAAqB;IACzB5Z;IACA7B;IACAyF;IACA0L;IACAC;IACA/L;IACApC;IACAgY,aAAajW,YACX/B,MACAkR,OACAtS,eACA7B,aACAkF,QACA6E,YAAY9G,MAAMjD,WAAW,GAC7BoF,UACAC,WACAC,UACAC,YACAC,cACA5G,OACA6G,cACAC,eACAC,UACAC,eACAC,WACAgE,UACA9D,SAAS;IAEXqO;IACA1O;IACA9G;IACAkV;IACA3F;IACA/I;IACA4H;IACAC;IACAhM;IACA6a,eAAexQ,cACbC,WACA9F,cACAzF,aACAwL,QACAvI,MACAwI,aACAC,SAAS;IAEXnG;IACA6J,cAAclB,aACZC,OACAnB,gBACA9H,QACAK,YACAG,aAAa;IAEfwV,cAAcxK,aAAa1B,aAAab,OAAOnB,gBAAgB,CAC7D5H,UACA4H,gBACAC,kBACA/H,MAAM,CACP;IACDyW;IACAI,gBAAgBtL,YAAYpS,IAAIsd,eAAe9W,GAAG;IAClD4L;IACAjL;IACAF;IACA6V,aAAahF,YACXlT,MACA7C,UACA4O,aACAjD,YACAqK,oBACA3E,OACAhB,aACAzD,gBACAxB,MAAM;IAERqQ;IACAG,eAAelE,cAAcvM,WAAW9F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","names":["exports","module","FUNC_ERROR_TEXT","NAN","symbolTag","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","root","objectProto","objectToString","debounce","toNumber","isObject","result","isObjectLike","isSymbol","import_react","Symbol","objectProto","nativeObjectToString","symToStringTag","funcProto","objectProto","funcToString","hasOwnProperty","MAX_SAFE_INTEGER","objectProto","objectProto","hasOwnProperty","Buffer","argsTag","funcTag","freeExports","freeModule","moduleExports","objectProto","hasOwnProperty","objectProto","hasOwnProperty","objectProto","hasOwnProperty","objectProto","hasOwnProperty","HASH_UNDEFINED","Map","INFINITY","objectProto","propertyIsEnumerable","Promise","Set","mapTag","objectTag","setTag","weakMapTag","dataViewTag","Uint8Array","HASH_UNDEFINED","othValue","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","symbolProto","COMPARE_PARTIAL_FLAG","objectProto","hasOwnProperty","COMPARE_PARTIAL_FLAG","argsTag","arrayTag","objectTag","objectProto","hasOwnProperty","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","INFINITY","LARGE_ARRAY_SIZE","import_react","identity","React","get","Image","import_react","import_react_query","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","classGroups","Map","processClassesRecursively","classGroup","forEach","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","Object","entries","key","path","currentClassPartObject","pathPart","has","set","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","value","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","MODIFIER_SEPARATOR_LENGTH","createParseClassName","prefix","experimentalParseClassName","parseClassName","modifiers","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","baseClassName","stripImportantModifier","hasImportantModifier","maybePostfixModifierPosition","fullPrefix","parseClassNameOriginal","startsWith","isExternal","endsWith","createSortModifiers","orderSensitiveModifiers","fromEntries","map","modifier","sortModifiers","sortedModifiers","unsortedModifiers","isPositionSensitive","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","isArbitraryVariable","isArbitraryValue","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","isFraction","scaleGridTemplateColsRows","isInteger","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","isArbitraryVariablePosition","isArbitraryPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitraryVariableSize","isArbitrarySize","size","scaleGradientStopPosition","isPercent","isArbitraryVariableLength","isArbitraryLength","scaleRadius","scaleBorderWidth","isNumber","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cacheSize","theme","animate","aspect","blur","isTshirtSize","breakpoint","color","isAny","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","classGroups","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","baseline","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","isArbitraryNumber","isArbitraryVariableFamilyName","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryVariableImage","isArbitraryImage","from","via","rounded","border","divide","outline","isArbitraryVariableShadow","isArbitraryShadow","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","conflictingClassGroups","conflictingClassGroupModifiers","orderSensitiveModifiers","twMerge","createTailwindMerge","getDefaultConfig","import_react_query","import_react","import_image","import_react","import_zod","import_react_query","import_portal_sdk_core","import_react_query","import_react_query","Image","import_react","import_image","import_react","import_zod","import_react_hook_form","import_portal_sdk_core","import_react_query","Image","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","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","self","EventStore","listeners","add","node","type","handler","options","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","counter","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","down","preventDefault","undefined","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","boost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","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","container","slides","watchResize","nodeRects","observeNodes","concat","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","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","nowTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","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","every","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","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","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","options","plugins","storedOptions","useRef","storedPlugins","emblaApi","setEmblaApi","useState","viewport","setViewport","reInit","useCallback","current","useEffect","areOptionsEqual","arePluginsEqual","canUseDOM","EmblaCarousel","globalOptions","newEmblaApi","destroy","undefined","import_image","import_portal_sdk_core","import_react_query","import_portal_sdk_core","import_react_query","import_zod","_a","_b","Image"]}
1
+ {"version":3,"sources":["../src/lib/index.ts","../src/lib/components/Account/Account.tsx","../src/lib/hooks/useAccountQuery/useAccountQuery.ts","../src/lib/constants/index.ts","../src/lib/services/client/getSession.ts","../src/lib/utils/getQueryClient.ts","../src/lib/hooks/useSessionQuery/getSessionQueryKey.ts","../src/lib/hooks/useSessionQuery/useSessionQuery.ts","../src/lib/hooks/useAccountQuery/getAccountQueryKey.ts","../src/lib/hooks/useGlobalStore.ts","../src/lib/utils/getLocaleInfo.tsx","../src/lib/hooks/usePlatformQuery/usePlatformQuery.ts","../src/lib/hooks/usePlatformQuery/getPlatformQueryKey.ts","../src/lib/hooks/useLocaleInfo.ts","../src/lib/hooks/useSignOutMutation/useSignOutMutation.ts","../src/lib/services/client/signOut.ts","../src/lib/hooks/useSignOutMutation/getSignOutMutationKey.ts","../src/lib/hooks/useWalletQuery/useWalletQuery.ts","../src/lib/hooks/useWalletQuery/getWalletQueryKey.ts","../src/lib/icons/ChevronRightIcon.tsx","../src/lib/icons/Logout01Icon.tsx","../src/lib/icons/User01Icon.tsx","../src/lib/ui/AlertDialog/AlertDialog.tsx","../src/lib/utils/createRecipeContext.tsx","../src/lib/utils/createSplitProps.ts","../src/lib/ui/AlertDialog/alertDialog.recipe.ts","../src/lib/utils/anatomyToRecipeSlots.ts","../src/lib/ui/Avatar/Avatar.tsx","../src/lib/ui/Avatar/avatar.recipe.ts","../src/lib/ui/Badge/Badge.tsx","../src/lib/ui/Badge/badge.anatomy.ts","../src/lib/ui/Badge/badge.recipe.ts","../src/lib/ui/Button/Button.tsx","../src/lib/utils/dataAttr.ts","../src/lib/ui/Button/button.recipe.ts","../src/lib/ui/Checkbox/Checkbox.tsx","../src/lib/ui/Checkbox/checkbox.recipe.ts","../src/lib/ui/Combobox/Combobox.tsx","../src/lib/ui/DatePicker/DatePicker.tsx","../src/lib/ui/DatePicker/datePicker.recipe.ts","../src/lib/ui/Dialog/Dialog.tsx","../src/lib/ui/Dialog/dialog.recipe.ts","../src/lib/ui/Drawer/Drawer.tsx","../src/lib/ui/Drawer/drawer.recipe.ts","../src/lib/ui/Field/Field.tsx","../src/lib/ui/Field/field.recipe.ts","../src/lib/ui/IconButton/IconButton.tsx","../src/lib/ui/IconButton/iconButton.recipe.ts","../src/lib/ui/Menu/Menu.tsx","../src/lib/ui/NumberInput/NumberInput.tsx","../src/lib/ui/NumberInput/numberInput.recipe.ts","../src/lib/ui/PinInput/PinInput.tsx","../src/lib/ui/PinInput/pinInput.recipe.ts","../src/lib/ui/Popover/Popover.tsx","../src/lib/ui/Popover/popover.recipe.ts","../src/lib/ui/Progress/Progress.tsx","../src/lib/ui/SegmentGroup/SegmentGroup.tsx","../src/lib/ui/SegmentGroup/segmentGroup.recipe.ts","../src/lib/ui/Select/Select.tsx","../src/lib/ui/Select/select.recipe.ts","../src/lib/ui/Table/Table.tsx","../src/lib/ui/Table/table.recipe.ts","../src/lib/ui/Table/table.anatomy.ts","../src/lib/ui/Tabs/Tabs.tsx","../src/lib/ui/Tabs/tabs.recipe.ts","../src/lib/ui/Tooltip/Tooltip.tsx","../src/lib/utils/parseDecimal.ts","../src/lib/utils/formatNumber.ts","../src/lib/components/Banner/Banner.tsx","../src/lib/components/BetRecords/BetRecordsContent.tsx","../src/lib/hooks/useBetRecordsQuery/useBetRecordsQuery.ts","../src/lib/hooks/useBetRecordsQuery/getBetRecordsQueryKey.ts","../src/lib/hooks/useInfiniteQueryHelper.ts","../src/lib/icons/CheckIcon.tsx","../src/lib/icons/ChevronDownIcon.tsx","../src/lib/icons/ChevronLeftIcon.tsx","../src/lib/icons/File02Icon.tsx","../src/lib/icons/SpinnerIcon.tsx","../src/lib/utils/capitalize.ts","../src/lib/components/Empty/CloudIcon.tsx","../src/lib/components/Empty/Empty.tsx","../src/lib/components/BetRecords/BetRecords.tsx","../src/lib/components/DepositWithdrawal/DepositWithdrawal.tsx","../src/lib/icons/Wallet02Icon.tsx","../src/lib/icons/XIcon.tsx","../src/lib/components/DepositWithdrawal/Deposit/Deposit.tsx","../src/lib/hooks/usePaymentSettingsQuery/usePaymentSettingsQuery.ts","../src/lib/hooks/usePaymentSettingsQuery/getPaymentSettingsQueryKey.ts","../src/lib/icons/AlertCircleIcon.tsx","../src/lib/utils/isMobile.ts","../src/lib/components/DepositWithdrawal/PaymentMethods.tsx","../src/lib/hooks/useControllableState.ts","../src/lib/components/DepositWithdrawal/utils.ts","../src/lib/components/DepositWithdrawal/Deposit/GCashDeposit.tsx","../src/lib/hooks/useAvailablePromosQuery/useAvailablePromosQuery.ts","../src/lib/hooks/useAvailablePromosQuery/getAvailablePromosQueryKey.ts","../src/lib/hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation.ts","../src/lib/utils/createPoll.ts","../src/lib/hooks/useCreateGCashDepositMutation/getCreateGCashDepositMutationKey.ts","../src/lib/hooks/useDepositsCountQuery/useDepositsCountQuery.ts","../src/lib/hooks/useDepositsCountQuery/getDepositsCountQueryKey.ts","../src/lib/hooks/useDisclosure.ts","../src/lib/icons/ChevronUpIcon.tsx","../src/lib/utils/toaster.ts","../src/lib/components/DepositWithdrawal/AmountChoices.tsx","../src/lib/components/DepositWithdrawal/AvailablePromos.tsx","../src/lib/components/DepositWithdrawal/Deposit/MayaAppDeposit.tsx","../src/lib/components/DepositWithdrawal/Deposit/MayaDeposit.tsx","../src/lib/hooks/useCreateMayaDepositMutation copy/useCreateMayaDepositMutation.ts","../src/lib/hooks/useCreateMayaDepositMutation copy/getCreateMayaDepositMutationKey.ts","../src/lib/components/DepositWithdrawal/Deposit/OnlineBankDeposit.tsx","../src/lib/components/DepositWithdrawal/Deposit/QRPHDeposit.tsx","../src/lib/components/DepositWithdrawal/Withdrawal/Withdrawal.tsx","../src/lib/components/Disclaimer/Disclaimer.tsx","../src/lib/components/Disclaimer/useDisclaimer.tsx","../src/lib/components/FeatureFlagProvider/FeatureFlagContext.tsx","../src/lib/components/FeatureFlagProvider/FeatureFlagProvider.tsx","../src/lib/components/FeatureFlagProvider/useFeatureFlag.ts","../src/lib/components/GameLaunch/GameLaunch.tsx","../src/lib/hooks/useEndGameSessionMutation/useEndGameSessionMutation.ts","../src/lib/hooks/useEndGameSessionMutation/getEndGameSessionMutationKey.ts","../src/lib/icons/Expand03Icon.tsx","../src/lib/components/GameLaunch/GameLaunchTrigger.tsx","../src/lib/hooks/useCreateGameSessionMutation/useCreateGameSessionMutation.ts","../src/lib/hooks/useCreateGameSessionMutation/getCreateGameSessionMutationKey.ts","../src/lib/hooks/useGamesQuery/prefetchGamesQuery.ts","../src/lib/hooks/useGamesQuery/getGamesQueryKey.ts","../src/lib/components/Games/GamesContent.tsx","../src/lib/hooks/useGamesQuery/useGamesQuery.ts","../src/lib/icons/ArrowLeftIcon.tsx","../src/lib/icons/ArrowRightIcon.tsx","../src/lib/components/Games/Games.tsx","../src/lib/components/JackpotCounter/JackpotCounterContent.tsx","../src/lib/hooks/useJackpotsQuery/useJackpotsQuery.ts","../src/lib/hooks/useJackpotsQuery/getJackpotsQueryKey.ts","../src/lib/components/JackpotCounter/JackpotCounterItem.tsx","../src/lib/icons/ArrowNarrowUpRightIcon.tsx","../src/lib/components/JackpotCounter/JackpotCounter.tsx","../src/lib/components/Marquee/Marquee.tsx","../src/lib/components/PortalProvider/PortalProvider.tsx","../src/lib/hooks/usePlatformQuery/prefetchPlatformQuery.ts","../src/lib/services/server/getSession.ts","../src/lib/hooks/useSessionQuery/prefetchSessionQuery.ts","../src/lib/hooks/useWalletQuery/prefetchWalletQuery.ts","../src/lib/components/PortalProvider/Providers.tsx","../src/lib/hooks/usePromosQuery/prefetchPromosQuery.ts","../src/lib/hooks/usePromosQuery/getPromosQueryKey.ts","../src/lib/components/Promos/PromosContent.tsx","../src/lib/hooks/usePromosQuery/usePromosQuery.ts","../src/lib/icons/Gift01Icon.tsx","../src/lib/components/Promos/PromoItem.tsx","../src/lib/components/Promos/Promos.tsx","../src/lib/components/Protected/Protected.tsx","../src/lib/components/SignIn/SignIn.tsx","../src/lib/components/SignIn/SignInForm.tsx","../src/lib/hooks/useCooldown.ts","../src/lib/hooks/useMobileNumberParser.ts","../src/lib/hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation.ts","../src/lib/hooks/useSendVerificationCodeMutation/getSendVerificationCodeMutationKey.ts","../src/lib/hooks/useSigninMutation/useSignInMutation.ts","../src/lib/services/client/signIn.ts","../src/lib/hooks/useSigninMutation/getSignInMutationKey.ts","../src/lib/icons/FacebookIcon.tsx","../src/lib/icons/GoogleIcon.tsx","../src/lib/components/SignUp/SignUp.tsx","../src/lib/components/SignUp/SignUpForm.tsx","../src/lib/hooks/useSignUpMutation/useSignUpMutation.ts","../src/lib/hooks/useSignUpMutation/getSignUpMutationKey.ts","../src/lib/components/TopWins/TopWinsContent.tsx","../src/lib/hooks/useTopWinsQuery/useTopWinsQuery.ts","../src/lib/hooks/useTopWinsQuery/getTopWinsQueryKey.ts","../src/lib/utils/getGameImageUrl.ts","../src/lib/components/TopWins/TopWins.tsx","../src/lib/components/TournamentCounter/TournamentCounterContent.tsx","../src/lib/hooks/useTournamentsQuery/useTournamentsQuery.ts","../src/lib/hooks/useTournamentsQuery/getTournamentsQueryKey.ts","../src/lib/components/TournamentCounter/TournamentCounterItem.tsx","../src/lib/icons/Award02Icon.tsx","../src/lib/components/TournamentCounter/TournamentCounter.tsx","../src/lib/components/TransactionRecords/DepositRecordsTable.tsx","../src/lib/hooks/useDepositRecordsQuery/useDepositRecordsQuery.ts","../src/lib/hooks/useDepositRecordsQuery/getDepositRecordsQueryKey.ts","../src/lib/components/TransactionRecords/TableFilters.tsx","../src/lib/components/TransactionRecords/TransactionRecordsTable.tsx","../src/lib/hooks/useTransactionRecordsQuery/useTransactionRecordsQuery.ts","../src/lib/hooks/useTransactionRecordsQuery/getTransactionRecordsQueryKey.ts","../src/lib/components/TransactionRecords/WithdrawalRecordsTable.tsx","../src/lib/hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery.ts","../src/lib/hooks/useWithdrawalRecordsQuery/getWithdrawalRecordsQueryKey.ts","../src/lib/components/TransactionRecords/TransactionRecords.tsx"],"sourcesContent":["export * from './components';\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Link from 'next/link';\r\nimport type { ComponentProps, ComponentType, ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAccountQuery } from '../../hooks/useAccountQuery/useAccountQuery';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useSignOutMutation } from '../../hooks/useSignOutMutation/useSignOutMutation';\r\nimport { useWalletQuery } from '../../hooks/useWalletQuery/useWalletQuery';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Logout01Icon } from '../../icons/Logout01Icon';\r\nimport { User01Icon } from '../../icons/User01Icon';\r\nimport { Avatar, Button, Drawer, Popover } from '../../ui';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\ninterface AccountLink {\r\n icon: ComponentType<ComponentProps<'svg'>>;\r\n href: string;\r\n label: string;\r\n}\r\n\r\nexport interface AccountProps {\r\n links?: AccountLink[];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function Account(props: AccountProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n })),\r\n );\r\n\r\n return (\r\n <>\r\n <Drawer.Root\r\n open={globalStore.profile.open}\r\n onOpenChange={(details) => {\r\n globalStore.profile.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n >\r\n <Drawer.Trigger asChild className=\"lg:hidden\">\r\n {props.children ?? (\r\n <button type=\"button\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n </button>\r\n )}\r\n </Drawer.Trigger>\r\n <Portal>\r\n <Drawer.Backdrop />\r\n <Drawer.Positioner>\r\n <Drawer.Content className=\"bg-gray-50 flex w-[316px] flex-col px-xl py-6\">\r\n <Profile />\r\n <Wallet />\r\n <Links links={props.links ?? []} />\r\n <div className=\"grow\" />\r\n <TradeMark />\r\n </Drawer.Content>\r\n </Drawer.Positioner>\r\n </Portal>\r\n </Drawer.Root>\r\n\r\n <Popover.Root\r\n open={globalStore.mobileProfile.open}\r\n onOpenChange={(details) => {\r\n globalStore.mobileProfile.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n positioning={{\r\n placement: 'bottom',\r\n }}\r\n >\r\n <Popover.Trigger className=\"hidden lg:flex\" asChild>\r\n {props.children ?? (\r\n <button type=\"button\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n </button>\r\n )}\r\n </Popover.Trigger>\r\n <Portal>\r\n <Popover.Positioner>\r\n <Popover.Content className=\"border-gray-200 z-popover w-[316px] rounded-xl border bg-white p-xl ui-open:animate-fade-in ui-closed:animate-fade-out\">\r\n <Profile />\r\n <Wallet />\r\n <Links links={props.links ?? []} />\r\n <TradeMark />\r\n </Popover.Content>\r\n </Popover.Positioner>\r\n </Portal>\r\n </Popover.Root>\r\n </>\r\n );\r\n}\r\n\r\nfunction TradeMark() {\r\n return (\r\n <div className=\"text-gray-400 mt-xl text-center text-2xs\">\r\n &copy; 2025 HappyBingo All rights reserved\r\n </div>\r\n );\r\n}\r\n\r\nfunction Profile() {\r\n const accountQuery = useAccountQuery();\r\n\r\n return (\r\n <div className=\"flex items-center gap-3\">\r\n <Avatar.Root>\r\n <Avatar.Fallback>\r\n <User01Icon />\r\n </Avatar.Fallback>\r\n </Avatar.Root>\r\n <div>\r\n <p className=\"text-sm font-semibold\">{accountQuery.data?.name}</p>\r\n <p className=\"text-gray-400 text-xs\">\r\n {accountQuery.data?.nickName ??\r\n accountQuery.data?.emailAddress ??\r\n accountQuery.data?.realName}\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\ninterface LinksProps {\r\n links: AccountLink[];\r\n}\r\n\r\nfunction Links(props: LinksProps) {\r\n const signOutMutation = useSignOutMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n })),\r\n );\r\n\r\n return (\r\n <nav className=\"mt-xl space-y-xl\">\r\n <ul>\r\n {props.links.map((link, index) => (\r\n <li\r\n key={link.href + index}\r\n className=\"border-gray-200 block border-x border-b bg-white first:rounded-t-xl first:border-t last:rounded-b-xl\"\r\n >\r\n <Link\r\n href={link.href}\r\n onClick={() => {\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n className=\"flex w-full items-center gap-lg px-xl py-xl text-left text-sm font-semibold\"\r\n >\r\n <link.icon className=\"size-5\" />\r\n <span className=\"grow\">{link.label}</span>\r\n <ChevronRightIcon className=\"text-gray-400 size-5\" />\r\n </Link>\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <ul>\r\n <li className=\"border-gray-200 block rounded-xl border bg-white\">\r\n <button\r\n type=\"button\"\r\n className=\"flex w-full items-center gap-lg px-xl py-xl text-left text-sm font-semibold\"\r\n disabled={signOutMutation.isPending}\r\n onClick={() => {\r\n signOutMutation.mutate();\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n <Logout01Icon className=\"size-5\" />\r\n <span className=\"grow\">Log Out</span>\r\n <ChevronRightIcon className=\"text-gray-400 size-5\" />\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n );\r\n}\r\n\r\nfunction Wallet() {\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 1000,\r\n });\r\n\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n profile: ctx.profile,\r\n mobileProfile: ctx.mobileProfile,\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n return (\r\n <div className=\"border-gray-200 mt-3 rounded-lg border bg-white p-xl\">\r\n <div className=\"border-gray-200 bg-gray-50 text-gray-600 w-fit rounded-sm border px-1.5 py-0.5 text-xs font-medium\">\r\n Available Balance\r\n </div>\r\n <div className=\"mt-2 text-3xl font-semibold\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo?.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"mt-3 flex gap-lg\">\r\n <Button\r\n size=\"xs\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n globalStore.depositWithdrawal.setTab('WITHDRAWAL');\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n Withdraw\r\n </Button>\r\n <Button\r\n size=\"xs\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n globalStore.depositWithdrawal.setTab('DEPOSIT');\r\n globalStore.profile.setOpen(false);\r\n globalStore.mobileProfile.setOpen(false);\r\n }}\r\n >\r\n Deposit\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { getMemberAccount, type MemberAccount } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getAccountQueryKey } from './getAccountQueryKey';\r\n\r\nexport const useAccountQuery: Query<MemberAccount> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getAccountQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getMemberAccount({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { GameProvider } from '@opexa/portal-sdk-core';\r\nimport { z } from 'zod';\r\n\r\nexport const SITE_ID = z\r\n .string()\r\n .min(\r\n 1,\r\n 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must be 1 or more characters',\r\n )\r\n .max(\r\n 32,\r\n 'Environment variable \"NEXT_PUBLIC_SITE_ID\" must not be more than 32 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_SITE_ID);\r\n\r\nexport const PLATFORM_ID = z\r\n .string()\r\n .min(\r\n 1,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must be 1 or more characters',\r\n )\r\n .max(\r\n 32,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_ID\" must not be more than 32 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_ID);\r\n\r\nexport const PLATFORM_CODE = z\r\n .string()\r\n .min(\r\n 4,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must be at least 4 characters',\r\n )\r\n .max(\r\n 8,\r\n 'Environment variable \"NEXT_PUBLIC_PLATFORM_CODE\" must not be more than 8 characters',\r\n )\r\n .trim()\r\n .parse(process.env.NEXT_PUBLIC_PLATFORM_CODE);\r\n\r\nexport const ENVIRONMENT = z\r\n .enum(['production', 'development'])\r\n .catch('development')\r\n .parse(process.env.NEXT_PUBLIC_ENVIRONMENT);\r\n\r\nexport const BYPASS_RECAPTCHA = z\r\n .any()\r\n .transform(Boolean)\r\n .catch(false)\r\n .parse(process.env.NEXT_PUBLIC_BYPASS_RECAPTCHA);\r\n\r\nexport const ACCESS_TOKEN_COOKIE_NAME: string = 'WebPortalAuthAccessToken';\r\nexport const REFRESH_TOKEN_COOKIE_NAME: string = 'WebPortalAuthRefreshToken';\r\n\r\nexport const LEGACY_GAME_PROVIDERS: GameProvider[] = [\r\n 'JILI',\r\n 'PGSOFT',\r\n 'FACHAI',\r\n 'BTI',\r\n 'DG',\r\n 'PLAYTECH',\r\n 'E2E',\r\n 'ONEAPI_EVOLUTION',\r\n 'CQ9',\r\n 'JDB',\r\n 'HABANERO',\r\n 'SPINIX',\r\n 'JOKER',\r\n 'HACKSAW',\r\n 'EVOLUTIONNETENT',\r\n 'JDBGTF',\r\n 'JDBSPRIBE',\r\n 'MICROGAMING',\r\n 'RELAXGAMING',\r\n 'EVOPLAY',\r\n 'BOOONGO',\r\n 'BGAMING',\r\n 'KINGMAKER',\r\n 'KINGMIDAS',\r\n 'YELLOWBAT',\r\n 'ETENGJUE',\r\n 'SABA',\r\n 'PRAGMATICPLAY',\r\n 'SPRIBE',\r\n 'EZUGI',\r\n 'ALIZE',\r\n];\r\n\r\nexport const RECAPTCHA_HEADER_KEY: string = 'Google-Recaptcha-Response';\r\n","import type { ApiResponse, Session } from '../../types';\r\n\r\nexport async function getSession(): Promise<Session> {\r\n const res = await fetch('/api/sessions', {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Session>;\r\n const data: Session = json.ok ? json.data : { status: 'unauthenticated' };\r\n\r\n return data;\r\n}\r\n","import { QueryClient, isServer } from '@tanstack/react-query';\r\nimport { cache } from 'react';\r\n\r\nfunction createQueryClient() {\r\n return new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 1000 * 60 * 10, // 10mins\r\n gcTime: 1000 * 60 * 60 * 12, // 12hr\r\n refetchOnMount: true,\r\n refetchOnReconnect: true,\r\n refetchOnWindowFocus: true,\r\n networkMode: 'always',\r\n },\r\n },\r\n });\r\n}\r\n\r\nlet BROWSER_QUERY_CLIENT: QueryClient | undefined = undefined;\r\n\r\nexport const getQueryClient = cache(() => {\r\n if (isServer) {\r\n return createQueryClient();\r\n }\r\n\r\n if (!BROWSER_QUERY_CLIENT) {\r\n BROWSER_QUERY_CLIENT = createQueryClient();\r\n }\r\n\r\n return BROWSER_QUERY_CLIENT;\r\n});\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getSessionQueryKey = (): QueryKey => ['queries/session'];\n","import { useQuery } from '@tanstack/react-query';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query, Session } from '../../types';\r\nimport { getSessionQueryKey } from './getSessionQueryKey';\r\n\r\nexport const useSessionQuery: Query<Session> = (config) => {\r\n return useQuery({\r\n staleTime: 0,\r\n gcTime: 0,\r\n ...config,\r\n queryKey: getSessionQueryKey(),\r\n queryFn: async () => {\r\n return await getSession();\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getAccountQueryKey = (): QueryKey => ['queries/account'];\n","import type { Game, GameSession } from '@opexa/portal-sdk-core';\r\nimport { create } from 'zustand';\r\n\r\ninterface Popup {\r\n open: boolean;\r\n setOpen: (open: boolean) => void;\r\n}\r\n\r\ntype GameLaunchDetails =\r\n | { status: 'WAITING'; game?: null; session?: null }\r\n | { status: 'LOADING'; game: Game; session?: GameSession | null }\r\n | { status: 'PLAYING'; game: Game; session: GameSession }\r\n | { status: 'FAILED'; game: Game; session?: null };\r\n\r\ninterface GameLaunch {\r\n details: GameLaunchDetails;\r\n setDetails: (details: GameLaunchDetails) => void;\r\n}\r\n\r\ntype DepositWithdrawalTab = 'DEPOSIT' | 'WITHDRAWAL';\r\n\r\ninterface DepositWithdrawalPopup extends Popup {\r\n tab: DepositWithdrawalTab;\r\n setTab: (tab: DepositWithdrawalTab) => void;\r\n}\r\n\r\ninterface GlobalStore {\r\n signUp: Popup;\r\n signIn: Popup;\r\n disclaimer: Popup;\r\n depositWithdrawal: DepositWithdrawalPopup;\r\n gameLaunch: GameLaunch;\r\n profile: Popup;\r\n mobileProfile: Popup;\r\n}\r\n\r\nexport const useGlobalStore = create<GlobalStore>((set, get) => ({\r\n signIn: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signIn: { ...get().signIn, open } });\r\n },\r\n },\r\n signUp: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ signUp: { ...get().signUp, open } });\r\n },\r\n },\r\n disclaimer: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ disclaimer: { ...get().disclaimer, open } });\r\n },\r\n },\r\n depositWithdrawal: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ depositWithdrawal: { ...get().depositWithdrawal, open } });\r\n },\r\n tab: 'DEPOSIT',\r\n setTab(tab: DepositWithdrawalTab) {\r\n set({ depositWithdrawal: { ...get().depositWithdrawal, tab } });\r\n },\r\n },\r\n gameLaunch: {\r\n details: { status: 'WAITING' },\r\n setDetails(details: GameLaunchDetails) {\r\n set({ gameLaunch: { ...get().gameLaunch, details } });\r\n },\r\n },\r\n profile: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ profile: { ...get().profile, open } });\r\n },\r\n },\r\n mobileProfile: {\r\n open: false,\r\n setOpen(open: boolean) {\r\n set({ mobileProfile: { ...get().mobileProfile, open } });\r\n },\r\n },\r\n}));\r\n","import {\r\n cache,\r\n type ComponentProps,\r\n type ComponentPropsWithRef,\r\n type ComponentType,\r\n} from 'react';\r\n\r\nexport interface CountryInfo {\r\n /**\r\n * @description The country code\r\n * @example 'PHL'\r\n */\r\n code: 'IDN' | 'IND' | 'MYS' | 'PHL' | 'VNM';\r\n /**\r\n * @description The country name\r\n * @example 'Philippines'\r\n */\r\n name: string;\r\n /**\r\n * @description The country flag\r\n * @usage\r\n * ```tsx\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * <localeInfo.country.flag />\r\n * ```\r\n */\r\n flag: ComponentType<ComponentProps<'svg'>>;\r\n}\r\n\r\nexport interface CurrencyInfo {\r\n /**\r\n * @description The currency code\r\n * @example 'PHP'\r\n */\r\n code: 'IDR' | 'INR' | 'MYR' | 'PHP' | 'USD' | 'VND';\r\n /**\r\n * @description The currency name\r\n * @example 'Philippine Peso'\r\n */\r\n name: string;\r\n /**\r\n * @description The currency symbol\r\n * @example '₱'\r\n */\r\n symbol: string;\r\n /**\r\n * Used in api\r\n * @example 'VIRTUAL'\r\n */\r\n externalCode:\r\n | 'IDR'\r\n | 'INR'\r\n | 'MYR'\r\n | 'PHP'\r\n | 'USD'\r\n | 'VIRTUAL'\r\n | (string & {});\r\n}\r\n\r\nexport interface MobileNumberInfo {\r\n /**\r\n * @description The mobile number area code\r\n * @example '+63'\r\n */\r\n areaCode: string;\r\n /**\r\n * @description The mobile number digits count\r\n * @example 10\r\n */\r\n numOfDigits: number;\r\n /**\r\n * @description pattern to validate mobile number\r\n * @usage\r\n * ```ts\r\n * const localeInfo = getLocaleInfo('Asia/Manila');\r\n * const isValid = localeInfo.mobileNumber.pattern.test('9190000000');\r\n * ```\r\n */\r\n pattern: RegExp;\r\n /**\r\n * @description The mobile number example\r\n * @example '9190000000'\r\n */\r\n example: string;\r\n}\r\n\r\nexport type Timezone =\r\n | 'Asia/Manila'\r\n | 'Asia/Kolkata'\r\n | 'Asia/Jakarta'\r\n | 'Asia/Makassar'\r\n | 'Asia/Jayapura'\r\n | 'Asia/Kuala_Lumpur'\r\n | 'Asia/Ho_Chi_Minh'\r\n | (string & {});\r\n\r\nexport interface LocaleInfo {\r\n locale: string;\r\n timezone: Timezone;\r\n country: CountryInfo;\r\n currency: CurrencyInfo;\r\n mobileNumber: MobileNumberInfo;\r\n}\r\n\r\nexport const getLocaleInfo = cache((timezone: Timezone): LocaleInfo => {\r\n switch (timezone.toLowerCase()) {\r\n case 'asia/jakarta':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jakarta',\r\n country: {\r\n name: 'Indonesia',\r\n code: 'IDN',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/jayapura':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Jayapura',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/makassar':\r\n return {\r\n locale: 'id-ID',\r\n timezone: 'Asia/Makassar',\r\n country: {\r\n code: 'IDN',\r\n name: 'Indonesia',\r\n flag: IndonesianFlag,\r\n },\r\n currency: {\r\n code: 'IDR',\r\n name: 'Indonesian Rupiah',\r\n symbol: 'Rp',\r\n externalCode: 'IDR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+62',\r\n numOfDigits: 10,\r\n example: '81' + ''.padStart(8, '0'),\r\n pattern: /^(\\+?62|0)?8\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/kuala_lumpur':\r\n return {\r\n locale: 'ms-MY',\r\n timezone: 'Asia/Kuala_Lumpur',\r\n country: {\r\n name: 'Malaysia',\r\n code: 'MYS',\r\n flag: MalaysianFlag,\r\n },\r\n currency: {\r\n code: 'MYR',\r\n name: 'Malaysian Ringgit',\r\n symbol: 'RM',\r\n externalCode: 'MYR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+60',\r\n numOfDigits: 9,\r\n example: '12' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?60|0)?1[0-9]{1}\\d{7}$/,\r\n },\r\n };\r\n\r\n case 'asia/kolkata':\r\n return {\r\n locale: 'en-IN',\r\n timezone: 'Asia/Kolkata',\r\n country: {\r\n code: 'IND',\r\n name: 'India',\r\n flag: IndianFlag,\r\n },\r\n currency: {\r\n code: 'INR',\r\n name: 'Indian Rupee',\r\n symbol: '₹',\r\n externalCode: 'INR',\r\n },\r\n mobileNumber: {\r\n areaCode: '+91',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?91|0)?[789]\\d{9}$/,\r\n },\r\n };\r\n\r\n case 'asia/ho_chi_minh':\r\n return {\r\n locale: 'vi-VN',\r\n timezone: 'Asia/Ho_Chi_Minh',\r\n country: {\r\n code: 'VNM',\r\n name: 'Vietnam',\r\n flag: VietnameseFlag,\r\n },\r\n currency: {\r\n code: 'VND',\r\n name: 'Vietnamese Dong',\r\n symbol: '₫',\r\n externalCode: 'VIRTUAL',\r\n },\r\n mobileNumber: {\r\n areaCode: '+84',\r\n numOfDigits: 9,\r\n example: '849' + ''.padStart(7, '0'),\r\n pattern:\r\n /^(\\+?84|0)?(3[2-9]|5[6|8|9]|7[0|6-9]|8[1-6|8|9]|9[0-9])\\d{7}$/,\r\n },\r\n };\r\n\r\n default:\r\n return {\r\n locale: 'en-PH',\r\n timezone: 'Asia/Manila',\r\n country: {\r\n code: 'PHL',\r\n name: 'Philippines',\r\n flag: PhilippineFlag,\r\n },\r\n currency: {\r\n code: 'PHP',\r\n name: 'Philippine Peso',\r\n symbol: '₱',\r\n externalCode: 'PHP',\r\n },\r\n mobileNumber: {\r\n areaCode: '+63',\r\n numOfDigits: 10,\r\n example: '919' + ''.padStart(7, '0'),\r\n pattern: /^(\\+?63|0)?9\\d{9}$/,\r\n },\r\n };\r\n }\r\n});\r\n\r\nconst PhilippineFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27540)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M12.0004 0V12L3.51514 20.4853C5.68671 22.6568 8.68671 24 12.0004 24C18.6278 24 24.0004 18.6274 24.0004 12C24.0004 5.37262 12.0004 0 12.0004 0Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0004 0C8.68671 0 5.68671 1.34316 3.51514 3.51469C6.45936 6.45891 7.50453 7.50412 12.0004 12H24.0004C24.0004 5.37262 18.6278 0 12.0004 0Z\"\r\n fill=\"#0052B4\"\r\n />\r\n <path\r\n d=\"M8.21723 11.9998L6.75173 11.3104L7.53215 9.89111L5.94074 10.1956L5.73909 8.58789L4.63059 9.77027L3.52213 8.58789L3.32043 10.1956L1.72907 9.89106L2.50949 11.3104L1.04395 11.9998L2.50949 12.6891L1.72907 14.1085L3.32057 13.8041L3.52209 15.4117L4.63059 14.2293L5.73909 15.4117L5.94074 13.8041L7.53205 14.1085L6.75168 12.6892L8.21723 11.9998Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 4.69519L3.68851 5.37689L4.48749 5.12382L3.98977 5.79825L4.47746 6.47996L3.68218 6.21507L3.18451 6.88946L3.19074 6.05133L2.39551 5.78639L3.19463 5.53332L3.20082 4.69519Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M3.20082 17.1095L3.68851 17.7912L4.48749 17.5381L3.98977 18.2126L4.47746 18.8943L3.68218 18.6294L3.18451 19.3038L3.19074 18.4656L2.39551 18.2007L3.19463 17.9476L3.20082 17.1095Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M10.1563 10.9032L9.66866 11.5849L8.86963 11.3317L9.36735 12.0062L8.87966 12.688L9.67494 12.423L10.1727 13.0974L10.1664 12.2593L10.9616 11.9944L10.1625 11.7413L10.1563 10.9032Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27540\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst MalaysianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27547)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M11.4783 12.0002H24C24 10.9171 23.8556 9.86791 23.5866 8.86975H11.4783V12.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M11.4783 5.73873H22.2387C21.5041 4.54004 20.565 3.48053 19.4698 2.60828H11.4783V5.73873Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12.0001 24.0002C14.8243 24.0002 17.4201 23.024 19.47 21.3915H4.53027C6.58016 23.024 9.17596 24.0002 12.0001 24.0002Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M1.76146 18.2601H22.2389C22.8286 17.2978 23.2859 16.2459 23.5868 15.1296H0.413574C0.714371 16.2459 1.17173 17.2978 1.76146 18.2601Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M12 12C12 5.37262 12 4.59131 12 0C5.37262 0 0 5.37262 0 12H12Z\"\r\n fill=\"#0052B4\"\r\n />\r\n <path\r\n d=\"M7.98001 10.2709C6.34117 10.2709 5.01263 8.94229 5.01263 7.30349C5.01263 5.6647 6.34121 4.33612 7.98001 4.33612C8.491 4.33612 8.97179 4.46535 9.39156 4.69279C8.73306 4.04887 7.8325 3.65137 6.8387 3.65137C4.82171 3.65137 3.18652 5.28651 3.18652 7.30354C3.18652 9.32057 4.82171 10.9557 6.8387 10.9557C7.8325 10.9557 8.73306 10.5582 9.39156 9.91429C8.97179 10.1416 8.49104 10.2709 7.98001 10.2709Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n <path\r\n d=\"M8.81671 5.21729L9.34354 6.31894L10.5333 6.04407L10.0005 7.14277L10.9573 7.90153L9.76602 8.17008L9.76935 9.39122L8.81671 8.62725L7.86402 9.39122L7.86731 8.17008L6.67603 7.90153L7.63284 7.14277L7.10001 6.04407L8.28984 6.31894L8.81671 5.21729Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27547\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27553)\">\r\n <path\r\n d=\"M1.19023 6.78213C0.427387 8.35976 -0.000488281 10.1296 -0.000488281 11.9995C-0.000488281 13.8694 0.427387 15.6393 1.19023 17.2169L11.9995 18.2604L22.8088 17.2169C23.5716 15.6393 23.9995 13.8694 23.9995 11.9995C23.9995 10.1296 23.5716 8.35976 22.8088 6.78213L11.9995 5.73865L1.19023 6.78213Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M1.19092 17.2183C3.13182 21.2322 7.24225 24.0009 11.9998 24.0009C16.7573 24.0009 20.8677 21.2322 22.8086 17.2183H1.19092Z\"\r\n fill=\"#6DA544\"\r\n />\r\n <path\r\n d=\"M1.19092 6.78238H22.8086C20.8677 2.76843 16.7573 -0.000244141 11.9998 -0.000244141C7.24229 -0.000244141 3.13182 2.76843 1.19092 6.78238Z\"\r\n fill=\"#FF9811\"\r\n />\r\n <path\r\n d=\"M12.0001 16.1742C14.3052 16.1742 16.174 14.3055 16.174 12.0003C16.174 9.69513 14.3052 7.82642 12.0001 7.82642C9.69489 7.82642 7.82617 9.69513 7.82617 12.0003C7.82617 14.3055 9.69489 16.1742 12.0001 16.1742Z\"\r\n fill=\"#FF9811\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27553\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst IndonesianFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_4392_27559)\">\r\n <path\r\n d=\"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\"\r\n fill=\"#F0F0F0\"\r\n />\r\n <path\r\n d=\"M0 12C0 5.37262 5.37262 0 12 0C18.6274 0 24 5.37262 24 12\"\r\n fill=\"#A2001D\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4392_27559\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n\r\nconst VietnameseFlag = (props: ComponentPropsWithRef<'svg'>) => {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <g clipPath=\"url(#clip0_10544_106556)\">\r\n <path\r\n d=\"M10 20C15.5228 20 20 15.5228 20 10C20 4.47715 15.5228 0 10 0C4.47715 0 0 4.47715 0 10C0 15.5228 4.47715 20 10 20Z\"\r\n fill=\"#D80027\"\r\n />\r\n <path\r\n d=\"M10.0003 5.2168L11.0795 8.53825H14.5719L11.7464 10.591L12.8257 13.9125L10.0003 11.8597L7.17488 13.9125L8.2541 10.591L5.42871 8.53825H8.92105L10.0003 5.2168Z\"\r\n fill=\"#FFDA44\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10544_106556\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n );\r\n};\r\n","import { getPlatform, type Platform } from '@opexa/portal-sdk-core';\nimport { useQuery } from '@tanstack/react-query';\nimport { PLATFORM_CODE } from '../../constants';\nimport type { Query } from '../../types';\nimport { getPlatformQueryKey } from './getPlatformQueryKey';\n\nexport const usePlatformQuery: Query<Platform> = (config) => {\n return useQuery({\n ...config,\n queryKey: getPlatformQueryKey(),\n queryFn: async () => {\n return await getPlatform({\n headers: {\n 'Platform-Code': PLATFORM_CODE,\n },\n });\n },\n });\n};\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getPlatformQueryKey = (): QueryKey => ['queries/platform'];\n","import { getLocaleInfo } from '../utils/getLocaleInfo';\nimport { usePlatformQuery } from './usePlatformQuery/usePlatformQuery';\n\nexport const useLocaleInfo = () => {\n const query = usePlatformQuery();\n return getLocaleInfo(query.data?.timezone ?? 'Asia/Manila');\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { signOut } from '../../services/client/signOut';\nimport type { Mutation } from '../../types/index';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\nimport { getSignOutMutationKey } from './getSignOutMutationKey';\n\nexport const useSignOutMutation: Mutation = (config) => {\n const queryClient = getQueryClient();\n\n return useMutation({\n ...config,\n mutationKey: getSignOutMutationKey(),\n mutationFn: async () => {\n await signOut();\n await queryClient.invalidateQueries({ queryKey: getSessionQueryKey() });\n queryClient.clear();\n },\n });\n};\n","export async function signOut() {\n const res = await fetch('/api/sessions', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n const error = new Error();\n error.name = 'SignOutError';\n error.message = 'Failed to sign out';\n throw error;\n }\n}\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignOutMutationKey = (): MutationKey => ['mutations/signOut'];\n","import { getWallet, type Wallet } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getWalletQueryKey } from './getWalletQueryKey';\r\n\r\nexport const useWalletQuery: Query<Wallet | null> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n return useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getWalletQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getWallet({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getWalletQueryKey = (): QueryKey => ['queries/wallet'];\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M9 18L15 12L9 6\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Logout01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M16 17L21 12M21 12L16 7M21 12H9M9 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V16.2C3 17.8802 3 18.7202 3.32698 19.362C3.6146 19.9265 4.07354 20.3854 4.63803 20.673C5.27976 21 6.11984 21 7.8 21H9\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function User01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M20 21C20 19.6044 20 18.9067 19.8278 18.3389C19.44 17.0605 18.4395 16.06 17.1611 15.6722C16.5933 15.5 15.8956 15.5 14.5 15.5H9.5C8.10444 15.5 7.40665 15.5 6.83886 15.6722C5.56045 16.06 4.56004 17.0605 4.17224 18.3389C4 18.9067 4 19.6044 4 21M16.5 7.5C16.5 9.98528 14.4853 12 12 12C9.51472 12 7.5 9.98528 7.5 7.5C7.5 5.01472 9.51472 3 12 3C14.4853 3 16.5 5.01472 16.5 7.5Z\" />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { alertDialogRecipe } from './alertDialog.recipe';\r\n\r\nconst { withContext, withRootProvider } =\r\n createRecipeContext(alertDialogRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import type { Assign } from '@ark-ui/react';\r\nimport * as React from 'react';\r\nimport type { VariantProps } from 'tailwind-variants';\r\nimport { createSplitProps } from './createSplitProps';\r\n\r\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\ntype GenericProps = Record<string, any>;\r\ntype GenericRecipeEntries = Record<string, (props: GenericProps) => string>;\r\ntype GenericRecipe = {\r\n (props: GenericProps): GenericRecipeEntries;\r\n variantKeys: (string | number | never)[];\r\n};\r\n\r\nexport function createRecipeContext<\r\n Recipe extends GenericRecipe = GenericRecipe,\r\n RecipeProps extends GenericProps = VariantProps<Recipe>,\r\n RecipeEntries extends GenericRecipeEntries = ReturnType<Recipe>,\r\n RecipeEntry = keyof RecipeEntries,\r\n>(recipe: Recipe) {\r\n const RecipeContext = React.createContext<GenericRecipeEntries | null>(null);\r\n\r\n function useContext() {\r\n const context = React.useContext(RecipeContext);\r\n return context;\r\n }\r\n\r\n function withRootProvider<Props extends GenericProps>(Component: React.ComponentType<Props>) {\r\n const StyledComponent = (props: Props) => {\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const context = recipe(recipeProps);\r\n\r\n return (\r\n <RecipeContext.Provider value={context}>\r\n <Component {...(localProps as Props)} />\r\n </RecipeContext.Provider>\r\n );\r\n };\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n function withProvider<Props extends GenericProps>(\r\n Component: React.ComponentType<Props>,\r\n slot: RecipeEntry,\r\n ) {\r\n const StyledComponent = (props: GenericProps) => {\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const context = recipe(recipeProps);\r\n const slotName = slot as string;\r\n const getStyle = context[slotName];\r\n const userDefinedClassName =\r\n 'className' in localProps && typeof localProps.className === 'string'\r\n ? localProps.className\r\n : undefined;\r\n const className = !getStyle\r\n ? userDefinedClassName\r\n : getStyle({\r\n ...recipeProps,\r\n className: userDefinedClassName,\r\n });\r\n\r\n return (\r\n <RecipeContext.Provider value={context}>\r\n <Component {...(localProps as Props)} className={className} />\r\n </RecipeContext.Provider>\r\n );\r\n };\r\n\r\n StyledComponent.displayName = Component.displayName || Component.name;\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n function withContext<Props extends GenericProps>(\r\n Component: React.ComponentType<Props>,\r\n slot: RecipeEntry,\r\n ) {\r\n const StyledComponent = (props: GenericProps) => {\r\n const context = useContext();\r\n const [recipeProps, localProps] = createSplitProps(recipe.variantKeys)(props);\r\n const slotName = slot as string;\r\n const getStyle = !context ? recipe(recipeProps)[slotName] : context[slotName];\r\n const userDefinedClassName =\r\n 'className' in localProps && typeof localProps.className === 'string'\r\n ? localProps.className\r\n : undefined;\r\n const className = !getStyle\r\n ? userDefinedClassName\r\n : getStyle({\r\n ...recipeProps,\r\n className: userDefinedClassName,\r\n });\r\n\r\n return <Component {...(localProps as Props)} className={className} />;\r\n };\r\n\r\n StyledComponent.displayName = Component.displayName || Component.name;\r\n\r\n return StyledComponent as React.ComponentType<Assign<Props, RecipeProps>>;\r\n }\r\n\r\n return {\r\n withRootProvider,\r\n withProvider,\r\n withContext,\r\n };\r\n}\r\n","/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\r\ntype GenericProps = Record<string, any>;\r\n\r\nfunction splitProps<T extends GenericProps>(props: T, keys: (keyof T)[]) {\r\n const rest: GenericProps = {};\r\n const result: GenericProps = {};\r\n\r\n const keySet = new Set(keys);\r\n\r\n for (const key in props) {\r\n if (keySet.has(key)) {\r\n result[key] = props[key];\r\n } else {\r\n rest[key] = props[key];\r\n }\r\n }\r\n\r\n return [result, rest];\r\n}\r\n\r\nexport function createSplitProps<T extends GenericProps>(keys: (keyof T)[]) {\r\n return function split<Props extends T>(props: Props) {\r\n return splitProps(props, keys) as [T, Omit<Props, keyof T>];\r\n };\r\n}\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const alertDialogRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/50',\r\n positioner: 'z-dialog fixed inset-0 flex items-center justify-center',\r\n content:\r\n 'ui-open:animate-alertdialog-in ui-closed:animate-alertdialog-out relative w-[400px] max-w-[90vw] rounded-xl bg-white p-3xl shadow-xl',\r\n header: 'flex items-start justify-between',\r\n body: 'mt-xl',\r\n title: 'text-lg font-semibold',\r\n description: 'text-gray-600 mt-xs text-sm',\r\n closeTrigger: 'text-gray-400 icon:size-6',\r\n footer: 'mt-4xl flex items-center justify-center gap-lg',\r\n }),\r\n});\r\n","import type { AnatomyInstance } from '@ark-ui/anatomy';\r\n\r\n/**\r\n * Converts a component anatomy into a valid tailwind variant slot recipe\r\n * and optionally, accepts initial base styles.\r\n */\r\nexport function anatomyToRecipeSlots<T extends string>(\r\n anatomy: AnatomyInstance<T>,\r\n baseStyles: Partial<Record<T, string | string[]>> = {},\r\n) {\r\n const styles = anatomy.keys().reduce<Partial<Record<T, string | string[]>>>((acc, key) => {\r\n acc[key] = baseStyles[key] ?? '';\r\n return acc;\r\n }, {});\r\n\r\n return styles as Record<T, string | string[]>;\r\n}\r\n","'use client';\r\n\r\nimport { Avatar } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { avatarRecipe } from './avatar.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(avatarRecipe);\r\n\r\nexport const Root = withProvider(Avatar.Root, 'root');\r\nexport const Image = withContext(Avatar.Image, 'image');\r\nexport const Fallback = withContext(Avatar.Fallback, 'fallback');\r\nexport const Context = Avatar.Context;\r\n","import { avatarAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const avatarRecipe = tv({\r\n slots: anatomyToRecipeSlots(avatarAnatomy, {\r\n root: 'border-gray-200 bg-gray-50 flex items-center justify-center overflow-hidden rounded-full border',\r\n fallback:\r\n 'text-gray-600 icon:text-gray-500 flex size-full items-center justify-center',\r\n image: 'size-full object-cover',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'size-10',\r\n fallback: 'icon:size-6 text-sm font-semibold',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { badgeAnatomy } from './badge.anatomy';\r\nimport { badgeRecipe } from './badge.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(badgeRecipe);\r\nconst parts = badgeAnatomy.build();\r\n\r\ninterface BadgeProps extends ComponentPropsWithRef<'div'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Root = withProvider(\r\n (props: BadgeProps) => <ark.div {...parts.root.attrs} {...props} />,\r\n 'root',\r\n);\r\n\r\ninterface BadgeLabelProps extends ComponentPropsWithRef<'span'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Label = withContext(\r\n (props: BadgeLabelProps) => <ark.span {...parts.label.attrs} {...props} />,\r\n 'label',\r\n);\r\n\r\ninterface BadgeIndicatorProps extends ComponentPropsWithRef<'svg'> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Indicator = withContext(\r\n (props: BadgeIndicatorProps) => (\r\n <ark.svg {...parts.indicator.attrs} asChild {...props} />\r\n ),\r\n 'indicator',\r\n);\r\n","import { createAnatomy } from '@ark-ui/anatomy';\r\n\r\nexport const badgeAnatomy = createAnatomy('badge').parts(\r\n 'root',\r\n 'label',\r\n 'indicator',\r\n);\r\n","import { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\nimport { badgeAnatomy } from './badge.anatomy';\r\n\r\nexport const badgeRecipe = tv({\r\n slots: anatomyToRecipeSlots(badgeAnatomy, {\r\n root: 'inline-flex items-center',\r\n label: '',\r\n indicator: '',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'gap-1 rounded-full px-2 py-0.5',\r\n label: 'text-xs font-medium leading-tight',\r\n },\r\n },\r\n variant: {\r\n subtle: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n danger: {},\r\n success: {},\r\n warning: {},\r\n info: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'gray',\r\n className: {\r\n root: 'bg-gray-50 border-gray-200 border',\r\n label: 'text-gray-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'success',\r\n className: {\r\n root: 'bg-green-50 border-green-200 border',\r\n label: 'text-green-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'warning',\r\n className: {\r\n root: 'bg-amber-50 border-amber-200 border',\r\n label: 'text-amber-700',\r\n },\r\n },\r\n {\r\n variant: 'subtle',\r\n colorScheme: 'danger',\r\n className: {\r\n root: 'bg-red-50 border-red-200 border',\r\n label: 'text-red-700',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'subtle',\r\n colorScheme: 'success',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport type { Merge } from 'type-fest';\r\nimport { createSplitProps } from '../../utils/createSplitProps';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { buttonRecipe, type ButtonRecipeProps } from './button.recipe';\r\n\r\nexport interface ButtonProps\r\n extends Merge<ComponentPropsWithRef<'button'>, ButtonRecipeProps> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport function Button(props: ButtonProps) {\r\n const [recipeProps, localProps] = createSplitProps<ButtonRecipeProps>(\r\n buttonRecipe.variantKeys,\r\n )(props);\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...localProps}\r\n className={buttonRecipe({\r\n ...recipeProps,\r\n className: localProps.className,\r\n })}\r\n data-disabled={dataAttr(localProps.disabled)}\r\n />\r\n );\r\n}\r\n","export function dataAttr(guard: boolean | undefined | null) {\n return guard ? '' : undefined;\n}\n","import { tv, type VariantProps } from 'tailwind-variants';\r\n\r\nexport const buttonRecipe = tv({\r\n base: 'shadow-xs inline-flex items-center justify-center rounded-md font-semibold disabled:shadow-none',\r\n variants: {\r\n size: {\r\n xs: 'h-9 gap-sm px-2.5 text-sm',\r\n sm: 'h-10 gap-md px-3',\r\n md: 'h-11 gap-lg px-3.5',\r\n },\r\n variant: {\r\n solid: '',\r\n outline: '',\r\n },\r\n colorScheme: {\r\n primary: '',\r\n danger: '',\r\n gray: '',\r\n },\r\n fullWidth: {\r\n true: 'flex w-full',\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n class: 'bg-gray-900 text-white disabled:opacity-50',\r\n },\r\n {\r\n variant: 'solid',\r\n colorScheme: 'danger',\r\n class: 'bg-red-500 text-white disabled:opacity-50',\r\n },\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n class: 'border-gray-200 border bg-transparent disabled:opacity-50',\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n fullWidth: true,\r\n },\r\n});\r\n\r\nexport type ButtonRecipeProps = VariantProps<typeof buttonRecipe>;\r\n","'use client';\r\n\r\nimport { Checkbox } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { checkboxRecipe } from './checkbox.recipe';\r\n\r\nexport const { withContext, withProvider } =\r\n createRecipeContext(checkboxRecipe);\r\n\r\nexport const Root = withProvider(Checkbox.Root, 'root');\r\nexport const Control = withContext(Checkbox.Control, 'control');\r\nexport const Group = withContext(Checkbox.Group, 'group');\r\nexport const Indicator = withContext(Checkbox.Indicator, 'indicator');\r\nexport const Label = withContext(Checkbox.Label, 'label');\r\nexport const HiddenInput = Checkbox.HiddenInput;\r\nexport const Context = Checkbox.Context;\r\n","import { checkboxAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const checkboxRecipe = tv({\r\n slots: anatomyToRecipeSlots(checkboxAnatomy, {\r\n root: 'flex items-start gap-2',\r\n control: 'flex shrink-0 items-center justify-center rounded-md',\r\n label: 'text-checkbox-label-fg',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n control: 'size-4 rounded-[0.25rem]',\r\n indicator: 'size-3',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n control: [\r\n 'border',\r\n 'shadow-xs',\r\n 'bg-transparent',\r\n 'border-gray-200',\r\n 'ui-invalid:border-red-400',\r\n 'ui-checked:bg-gray-900',\r\n 'ui-checked:border-gray-900',\r\n 'ui-readonly:opacity-50',\r\n 'ui-readonly:shadow-none',\r\n 'ui-disabled:opacity-50',\r\n 'ui-disabled:shadow-none',\r\n ],\r\n indicator: 'text-white',\r\n label: 'text-gray-600 text-xs leading-tight',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Combobox } from '@ark-ui/react';\r\n\r\nexport const Root = Combobox.Root;\r\n","'use client';\r\n\r\nimport { DatePicker } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { datePickerRecipe } from './datePicker.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(datePickerRecipe);\r\n\r\nexport const Root = withProvider(DatePicker.Root, 'root');\r\nexport const ClearTrigger = withContext(\r\n DatePicker.ClearTrigger,\r\n 'clearTrigger',\r\n);\r\nexport const Content = withContext(DatePicker.Content, 'content');\r\nexport const Control = withContext(DatePicker.Control, 'control');\r\nexport const Input = withContext(DatePicker.Input, 'input');\r\nexport const Label = withContext(DatePicker.Label, 'label');\r\nexport const MonthSelect = withContext(DatePicker.MonthSelect, 'monthSelect');\r\nexport const NextTrigger = withContext(DatePicker.NextTrigger, 'nextTrigger');\r\nexport const Positioner = withContext(DatePicker.Positioner, 'positioner');\r\nexport const PresetTrigger = withContext(\r\n DatePicker.PresetTrigger,\r\n 'presetTrigger',\r\n);\r\nexport const PrevTrigger = withContext(DatePicker.PrevTrigger, 'prevTrigger');\r\nexport const RangeText = withContext(DatePicker.RangeText, 'rangeText');\r\nexport const Table = withContext(DatePicker.Table, 'table');\r\nexport const TableBody = withContext(DatePicker.TableBody, 'tableBody');\r\nexport const TableCell = withContext(DatePicker.TableCell, 'tableCell');\r\nexport const TableCellTrigger = withContext(\r\n DatePicker.TableCellTrigger,\r\n 'tableCellTrigger',\r\n);\r\nexport const TableHead = withContext(DatePicker.TableHead, 'tableHead');\r\nexport const TableHeader = withContext(DatePicker.TableHeader, 'tableHeader');\r\nexport const TableRow = withContext(DatePicker.TableRow, 'tableRow');\r\nexport const Trigger = withContext(DatePicker.Trigger, 'trigger');\r\nexport const View = withContext(DatePicker.View, 'view');\r\nexport const ViewControl = withContext(DatePicker.ViewControl, 'viewControl');\r\nexport const ViewTrigger = withContext(DatePicker.ViewTrigger, 'viewTrigger');\r\nexport const YearSelect = withContext(DatePicker.YearSelect, 'yearSelect');\r\nexport const Context = DatePicker.Context;\r\n","import { datePickerAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const datePickerRecipe = tv({\r\n slots: anatomyToRecipeSlots(datePickerAnatomy, {\r\n content:\r\n 'border-gray-200 text-gray-600 ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right z-dropdown rounded-xl border bg-white p-4',\r\n table: 'mt-3 border-separate border-spacing-0.5',\r\n tableCellTrigger:\r\n 'text-gray-600 ui-disabled:text-gray-400 ui-selected:ui-not-disabled:bg-gray-900 ui-today:after:bg-gray-600 ui-in-range:ui-not-disabled:bg-gray-100 ui-in-range:ui-not-disabled:text-gray-900 ui-range-start:ui-not-disabled:bg-gray-900 ui-range-end:ui-not-disabled:bg-gray-900 relative flex size-10 cursor-pointer items-center justify-center text-sm ui-disabled:cursor-not-allowed ui-selected:ui-not-disabled:rounded-full ui-selected:ui-not-disabled:font-medium ui-selected:ui-not-disabled:text-white ui-today:after:absolute ui-today:after:bottom-0 ui-today:after:left-1/2 ui-today:after:mb-1 ui-today:after:size-1 ui-today:after:-translate-x-1/2 ui-today:after:rounded-full ui-in-range:ui-not-disabled:rounded-full ui-in-range:ui-not-disabled:font-medium ui-range-start:ui-not-disabled:rounded-full ui-range-start:ui-not-disabled:font-medium ui-range-start:ui-not-disabled:text-white ui-range-end:ui-not-disabled:rounded-full ui-range-end:ui-not-disabled:font-medium ui-range-end:ui-not-disabled:text-white',\r\n tableHeader: 'py-3 text-sm font-medium',\r\n viewControl: 'flex items-center justify-between',\r\n prevTrigger:\r\n 'bg-gray-50 icon:size-5 flex size-9 items-center justify-center rounded-full',\r\n nextTrigger:\r\n 'bg-gray-50 icon:size-5 flex size-9 items-center justify-center rounded-full',\r\n rangeText: 'text-gray-600 text-base font-semibold',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { dialogRecipe } from './dialog.recipe';\r\n\r\nconst { withContext, withRootProvider } = createRecipeContext(dialogRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const dialogRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/60',\r\n positioner: 'z-dialog fixed inset-0 overflow-y-auto lg:py-16',\r\n content: 'ui-open:animate-dialog-in ui-closed:animate-dialog-out relative',\r\n closeTrigger:\r\n 'icon:size-6 text-gray-400 absolute right-2.5 top-2.5 flex size-11 items-center justify-center',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { ark, Dialog } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { drawerRecipe } from './drawer.recipe';\r\n\r\nconst { withContext, withRootProvider } = createRecipeContext(drawerRecipe);\r\n\r\nexport const Root = withRootProvider(Dialog.Root);\r\nexport const Backdrop = withContext(Dialog.Backdrop, 'backdrop');\r\nexport const CloseTrigger = withContext(Dialog.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Dialog.Content, 'content');\r\nexport const Description = withContext(Dialog.Description, 'description');\r\nexport const Positioner = withContext(Dialog.Positioner, 'positioner');\r\nexport const Title = withContext(Dialog.Title, 'title');\r\nexport const Trigger = withContext(Dialog.Trigger, 'trigger');\r\nexport const Header = withContext(ark.section, 'header');\r\nexport const Body = withContext(ark.section, 'body');\r\nexport const Footer = withContext(ark.section, 'footer');\r\nexport const Context = Dialog.Context;\r\n","import { dialogAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst anatomy = dialogAnatomy.extendWith('header', 'body', 'footer');\r\n\r\nexport const drawerRecipe = tv({\r\n slots: anatomyToRecipeSlots(anatomy, {\r\n backdrop:\r\n 'z-backdrop ui-open:animate-backdrop-in ui-closed:animate-backdrop-out fixed inset-0 bg-black/60',\r\n positioner:\r\n 'z-drawer fixed inset-0 overflow-hidden overflow-y-auto lg:py-16',\r\n content: 'absolute top-0 h-full w-full bg-white lg:w-[400px]',\r\n }),\r\n variants: {\r\n placement: {\r\n left: {\r\n content:\r\n 'ui-open:animate-drawer-in-left ui-closed:animate-drawer-out-left left-0',\r\n },\r\n right: {\r\n content:\r\n 'ui-open:animate-drawer-in-right ui-closed:animate-drawer-out-right right-0',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n placement: 'right',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Field } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { fieldRecipe } from './field.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(fieldRecipe);\r\n\r\nexport const Root = withProvider(Field.Root, 'root');\r\nexport const Label = withContext(Field.Label, 'label');\r\nexport const Input = withContext(Field.Input, 'input');\r\nexport const HelperText = withContext(Field.HelperText, 'helperText');\r\nexport const ErrorText = withContext(Field.ErrorText, 'errorText');\r\nexport const Select = withContext(Field.Select, 'select');\r\nexport const Textarea = withContext(Field.Textarea, 'textarea');\r\nexport const Context = Field.Context;\r\n","import { fieldAnatomy } from '@ark-ui/react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nconst outlineGrayInputStyle = twMerge(\r\n 'border',\r\n 'shadow-xs',\r\n 'bg-input-outline-gray-bg',\r\n 'text-input-outline-gray-fg',\r\n 'border-gray-200',\r\n 'placeholder:text-gray-400',\r\n 'ui-invalid:border-red-400',\r\n 'disabled:opacity-50',\r\n 'disabled:shadow-none',\r\n 'read-only:opacity-50',\r\n 'read-only:shadow-none',\r\n);\r\n\r\nexport const fieldRecipe = tv({\r\n slots: anatomyToRecipeSlots(fieldAnatomy, {\r\n input:\r\n 'outer-spin:appearance-none inner-spin:appearance-none block w-full rounded-md outline-none',\r\n select: 'block w-full rounded-md outline-none',\r\n textarea: 'block w-full rounded-md outline-none',\r\n label: 'text-gray-600 mb-sm inline-block text-sm font-medium',\r\n errorText: 'text-red-600 mt-sm inline-block text-sm',\r\n helperText: 'text-gray-500',\r\n requiredIndicator: 'text-red-500 text-sm',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n input: 'h-11 px-3.5',\r\n select: 'h-11 px-3.5',\r\n textarea: 'px-3.5 py-2.5',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n input: outlineGrayInputStyle,\r\n select: outlineGrayInputStyle,\r\n textarea: outlineGrayInputStyle,\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport type { Merge } from 'type-fest';\r\nimport { createSplitProps } from '../../utils/createSplitProps';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport {\r\n iconButtonRecipe,\r\n type IconButtonRecipeProps,\r\n} from './iconButton.recipe';\r\n\r\nexport interface IconButtonProps\r\n extends Merge<ComponentPropsWithRef<'button'>, IconButtonRecipeProps> {\r\n asChild?: boolean;\r\n}\r\n\r\nexport function IconButton(props: IconButtonProps) {\r\n const [recipeProps, localProps] = createSplitProps<IconButtonRecipeProps>(\r\n iconButtonRecipe.variantKeys,\r\n )(props);\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...localProps}\r\n className={iconButtonRecipe({\r\n ...recipeProps,\r\n className: localProps.className,\r\n })}\r\n data-disabled={dataAttr(localProps.disabled)}\r\n />\r\n );\r\n}\r\n","import { tv, type VariantProps } from 'tailwind-variants';\r\nimport { buttonRecipe } from '../Button/button.recipe';\r\n\r\nexport const iconButtonRecipe = tv({\r\n extend: buttonRecipe,\r\n variants: {\r\n size: {\r\n sm: 'h-10 min-w-10 px-0',\r\n md: 'h-11 min-w-11 px-0',\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'solid',\r\n colorScheme: 'primary',\r\n fullWidth: false,\r\n },\r\n});\r\n\r\nexport type IconButtonRecipeProps = VariantProps<typeof iconButtonRecipe>;\r\n","'use client';\r\n\r\nimport { Menu } from '@ark-ui/react';\r\n\r\nexport const Root = Menu.Root;\r\n","'use client';\r\n\r\nimport { NumberInput } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { numberInputRecipe } from './numberInput.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(numberInputRecipe);\r\n\r\nexport const Root = withProvider(NumberInput.Root, 'root');\r\nexport const Control = withContext(NumberInput.Control, 'control');\r\nexport const DecrementTrigger = withContext(\r\n NumberInput.DecrementTrigger,\r\n 'decrementTrigger',\r\n);\r\nexport const IncrementTrigger = withContext(\r\n NumberInput.IncrementTrigger,\r\n 'incrementTrigger',\r\n);\r\nexport const Input = withContext(NumberInput.Input, 'input');\r\nexport const Label = withContext(NumberInput.Label, 'label');\r\nexport const Scrubber = withContext(NumberInput.Scrubber, 'scrubber');\r\nexport const ValueText = withContext(NumberInput.ValueText, 'valueText');\r\nexport const Context = NumberInput.Context;\r\n","import { numberInputAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const numberInputRecipe = tv({\r\n slots: anatomyToRecipeSlots(numberInputAnatomy, {\r\n control:\r\n 'border-gray-200 ui-invalid:border-red-400 grid grid-cols-[1fr_32px] grid-rows-[1fr_1fr] overflow-hidden rounded-lg border bg-transparent ui-disabled:opacity-50 ui-readonly:cursor-default ui-readonly:opacity-50',\r\n input:\r\n 'placeholder:text-gray-400 row-[span_2/span_2] w-full border-0 bg-transparent outline-none disabled:cursor-not-allowed',\r\n label: 'text-gray-600 mb-sm inline-block text-sm font-medium',\r\n decrementTrigger:\r\n 'border-gray-200 icon:text-gray-600 inline-flex cursor-pointer items-center justify-center border-l border-t ui-disabled:cursor-not-allowed',\r\n incrementTrigger:\r\n 'border-gray-200 icon:text-gray-600 inline-flex cursor-pointer items-center justify-center border-l ui-disabled:cursor-not-allowed',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n control: 'h-11 pl-3.5 text-base',\r\n incrementTrigger: 'icon:size-5',\r\n decrementTrigger: 'icon:size-5',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { PinInput } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { pinInputRecipe } from './pinInput.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(pinInputRecipe);\r\n\r\nexport const Root = withProvider(PinInput.Root, 'root');\r\nexport const Label = withContext(PinInput.Label, 'label');\r\nexport const Control = withContext(PinInput.Control, 'control');\r\nexport const Input = withContext(PinInput.Input, 'input');\r\nexport const HiddenInput = PinInput.HiddenInput;\r\nexport const Context = PinInput.Context;\r\n","import { pinInputAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const pinInputRecipe = tv({\r\n slots: anatomyToRecipeSlots(pinInputAnatomy, {\r\n control: 'grid grid-cols-6',\r\n input: 'aspect-[10/11] w-full rounded-md outline-none',\r\n label: 'text-input-label-fg mb-sm inline-block text-sm font-medium',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n input: 'text-center text-2xl font-medium',\r\n control: 'gap-2',\r\n },\r\n },\r\n variant: {\r\n outline: {},\r\n },\r\n colorScheme: {\r\n gray: {},\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n className: {\r\n input:\r\n 'shadow-xs border-gray-200 placeholder:text-gray-400 ui-invalid:border-red-400 border read-only:opacity-50 read-only:shadow-none disabled:opacity-50 disabled:shadow-none',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n colorScheme: 'gray',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Popover } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { popoverRecipe } from './popover.recipe';\r\n\r\nconst { withRootProvider, withContext } = createRecipeContext(popoverRecipe);\r\n\r\nexport const Root = withRootProvider(Popover.Root);\r\nexport const Anchor = withContext(Popover.Anchor, 'anchor');\r\nexport const Arrow = withContext(Popover.Arrow, 'arrow');\r\nexport const ArrowTip = withContext(Popover.ArrowTip, 'arrowTip');\r\nexport const CloseTrigger = withContext(Popover.CloseTrigger, 'closeTrigger');\r\nexport const Content = withContext(Popover.Content, 'content');\r\nexport const Description = withContext(Popover.Description, 'description');\r\nexport const Indicator = withContext(Popover.Indicator, 'indicator');\r\nexport const Positioner = withContext(Popover.Positioner, 'positioner');\r\nexport const Title = withContext(Popover.Title, 'title');\r\nexport const Trigger = withContext(Popover.Trigger, 'trigger');\r\nexport const Context = Popover.Context;\r\n","import { popoverAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const popoverRecipe = tv({\r\n slots: anatomyToRecipeSlots(popoverAnatomy, {\r\n content:\r\n 'ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right',\r\n positioner: 'z-popover',\r\n }),\r\n});\r\n","'use client';\r\n\r\nimport { Progress } from '@ark-ui/react';\r\n\r\nexport const Root = Progress.Root;\r\n","'use client';\r\n\r\nimport { SegmentGroup } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { segmentGroupRecipe } from './segmentGroup.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(segmentGroupRecipe);\r\n\r\nexport const Root = withProvider(SegmentGroup.Root, 'root');\r\nexport const Indicator = withContext(SegmentGroup.Indicator, 'indicator');\r\nexport const Item = withContext(SegmentGroup.Item, 'item');\r\nexport const ItemControl = withContext(SegmentGroup.ItemControl, 'itemControl');\r\nexport const ItemText = withContext(SegmentGroup.ItemText, 'itemText');\r\nexport const Label = withContext(SegmentGroup.Label, 'label');\r\nexport const Context = SegmentGroup.Context;\r\nexport const ItemContext = SegmentGroup.ItemContext;\r\nexport const ItemHiddenInput = SegmentGroup.ItemHiddenInput;\r\n","import { segmentGroupAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const segmentGroupRecipe = tv({\r\n slots: anatomyToRecipeSlots(segmentGroupAnatomy),\r\n variants: {\r\n size: {\r\n md: {},\r\n },\r\n variant: {\r\n unstyled: {},\r\n default: {\r\n root: 'bg-gray-50 border-gray-200 relative flex w-fit gap-md rounded-md border p-1',\r\n item: 'z-1 text-gray-600 ui-checked:text-gray-800 relative cursor-pointer transition-all duration-200',\r\n indicator:\r\n 'left-[var(--left)] top-[var(--top)] h-[var(--height)] w-[var(--width)] bg-white',\r\n },\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n size: 'md',\r\n variant: 'default',\r\n className: {\r\n item: 'px-lg py-md text-sm font-semibold',\r\n indicator: 'rounded-sm shadow-sm',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'default',\r\n },\r\n});\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n'use client';\r\n\r\nimport { Select } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { selectRecipe } from './select.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(selectRecipe);\r\n\r\nexport const Root = withProvider(Select.Root<any>, 'root');\r\nexport const ClearTrigger = withContext(Select.ClearTrigger, 'clearTrigger');\r\nexport const Content = withContext(Select.Content, 'content');\r\nexport const Control = withContext(Select.Control, 'control');\r\nexport const Indicator = withContext(Select.Indicator, 'indicator');\r\nexport const Item = withContext(Select.Item, 'item');\r\nexport const ItemGroup = withContext(Select.ItemGroup, 'itemGroup');\r\nexport const ItemGroupLabel = withContext(\r\n Select.ItemGroupLabel,\r\n 'itemGroupLabel',\r\n);\r\nexport const ItemIndicator = withContext(Select.ItemIndicator, 'itemIndicator');\r\nexport const ItemText = withContext(Select.ItemText, 'itemText');\r\nexport const Label = withContext(Select.Label, 'label');\r\nexport const List = withContext(Select.List, 'list');\r\nexport const Positioner = withContext(Select.Positioner, 'positioner');\r\nexport const Trigger = withContext(Select.Trigger, 'trigger');\r\nexport const ValueText = withContext(Select.ValueText, 'valueText');\r\nexport const Context = Select.Context;\r\nexport const HiddenSelect = Select.HiddenSelect;\r\nexport const ItemContext = Select.ItemContext;\r\n","import { selectAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const selectRecipe = tv({\r\n slots: anatomyToRecipeSlots(selectAnatomy, {\r\n indicator:\r\n 'text-gray-500 transition-transform duration-200 ui-open:rotate-180 ui-closed:rotate-0',\r\n positioner: 'z-dropdown',\r\n content:\r\n 'border-gray-200 ui-placement-top:ui-open:animate-popover-in-top ui-placement-top-end:ui-open:animate-popover-in-top ui-placement-top-start:ui-open:animate-popover-in-top ui-placement-top:ui-closed:animate-popover-out-top ui-placement-top-end:ui-closed:animate-popover-out-top ui-placement-top-start:ui-closed:animate-popover-out-top ui-placement-bottom:ui-open:animate-popover-in-bottom ui-placement-bottom-start:ui-open:animate-popover-in-bottom ui-placement-bottom-end:ui-open:animate-popover-in-bottom ui-placement-bottom:ui-closed:animate-popover-out-bottom ui-placement-bottom-start:ui-closed:animate-popover-out-bottom ui-placement-bottom-end:ui-closed:animate-popover-out-bottom ui-placement-left:ui-open:animate-popover-in-left ui-placement-left-start:ui-open:animate-popover-in-left ui-placement-left-end:ui-open:animate-popover-in-left ui-placement-left:ui-closed:animate-popover-out-left ui-placement-left-start:ui-closed:animate-popover-out-left ui-placement-left-end:ui-closed:animate-popover-out-left ui-placement-right:ui-open:animate-popover-in-right ui-placement-right-start:ui-open:animate-popover-in-right ui-placement-right-end:ui-open:animate-popover-in-right ui-placement-right:ui-closed:animate-popover-out-right ui-placement-right-start:ui-closed:animate-popover-out-right ui-placement-right-end:ui-closed:animate-popover-out-right z-dropdown rounded-md border bg-white p-1',\r\n item: 'ui-highlighted:bg-gray-50 flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1',\r\n itemText: 'grow',\r\n itemIndicator: 'text-green-500 size-4',\r\n }),\r\n variants: {\r\n size: {\r\n sm: {\r\n trigger: 'h-10 gap-md px-3',\r\n indicator: 'size-5',\r\n },\r\n md: {\r\n trigger: 'h-11 gap-lg px-3.5',\r\n indicator: 'size-5',\r\n },\r\n },\r\n variant: {\r\n outline: {\r\n trigger:\r\n 'shadow-xs border-gray-200 ui-placeholder-shown:text-gray-500 flex items-center rounded-md border text-left',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { ark } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { tableRecipe } from './table.recipe';\r\n\r\nconst { withProvider, withContext } = createRecipeContext(tableRecipe);\r\n\r\nexport const Root = withProvider(ark.table, 'root');\r\nexport const Header = withContext(ark.thead, 'header');\r\nexport const Body = withContext(ark.tbody, 'body');\r\nexport const Footer = withContext(ark.tfoot, 'footer');\r\nexport const Row = withContext(ark.tr, 'row');\r\nexport const Heading = withContext(ark.th, 'heading');\r\nexport const Cell = withContext(ark.td, 'cell');\r\n","import { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\nimport { tableAnatomy } from './table.anatomy';\r\n\r\nexport const tableRecipe = tv({\r\n slots: anatomyToRecipeSlots(tableAnatomy, {\r\n root: 'w-full whitespace-nowrap',\r\n }),\r\n variants: {\r\n size: {\r\n md: {\r\n root: 'border-gray-200 border',\r\n heading: 'px-3xl py-lg text-left text-xs font-medium',\r\n cell: 'px-3xl py-xl text-sm',\r\n },\r\n },\r\n variant: {\r\n outline: {\r\n header: 'tr:bg-white tr:border-b tr:border-gray-200',\r\n body: 'tr:odd:bg-gray-50 tr:border-gray-200 tr:border-b tr:last:border-b-0 tr:even:bg-white',\r\n },\r\n },\r\n },\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'outline',\r\n },\r\n});\r\n","import { createAnatomy } from '@ark-ui/anatomy';\r\n\r\nexport const tableAnatomy = createAnatomy('table').parts(\r\n 'root',\r\n 'header',\r\n 'body',\r\n 'footer',\r\n 'row',\r\n 'cell',\r\n 'heading',\r\n);\r\n","'use client';\r\n\r\nimport { Tabs } from '@ark-ui/react';\r\nimport { createRecipeContext } from '../../utils/createRecipeContext';\r\nimport { tabsRecipe } from './tabs.recipe';\r\n\r\nconst { withContext, withProvider } = createRecipeContext(tabsRecipe);\r\n\r\nexport const Root = withProvider(Tabs.Root, 'root');\r\nexport const Content = withContext(Tabs.Content, 'content');\r\nexport const Indicator = withContext(Tabs.Indicator, 'indicator');\r\nexport const List = withContext(Tabs.List, 'list');\r\nexport const Trigger = withContext(Tabs.Trigger, 'trigger');\r\nexport const Context = Tabs.Context;\r\n","import { tabsAnatomy } from '@ark-ui/react';\r\nimport { tv } from 'tailwind-variants';\r\nimport { anatomyToRecipeSlots } from '../../utils/anatomyToRecipeSlots';\r\n\r\nexport const tabsRecipe = tv({\r\n slots: anatomyToRecipeSlots(tabsAnatomy),\r\n variants: {\r\n size: {\r\n md: {},\r\n },\r\n variant: {\r\n unstyled: {},\r\n default: {\r\n list: 'border-gray-200 bg-gray-50 relative flex w-fit gap-md rounded-md border p-1',\r\n indicator: 'h-[var(--height)] w-[var(--width)] bg-white',\r\n trigger:\r\n 'z-1 text-gray-600 ui-selected:text-gray-800 relative transition-all duration-200',\r\n },\r\n },\r\n },\r\n compoundVariants: [\r\n {\r\n size: 'md',\r\n variant: 'default',\r\n className: {\r\n indicator: 'rounded-sm shadow-sm',\r\n trigger: 'px-lg py-md text-sm font-semibold',\r\n },\r\n },\r\n ],\r\n defaultVariants: {\r\n size: 'md',\r\n variant: 'default',\r\n },\r\n});\r\n","'use client';\r\n\r\nimport { Tooltip } from '@ark-ui/react';\r\n\r\nexport const Root = Tooltip.Root;\r\n","import { z } from 'zod';\n\nconst definition = z\n .union([\n z.number(),\n z.string().transform((val) => {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? null : parsed;\n }),\n ])\n .nullable()\n .optional()\n .default(null)\n .catch(null);\n\nexport function parseDecimal(value: unknown): number | null;\nexport function parseDecimal(value: unknown, fallback: number): number;\nexport function parseDecimal(value: unknown, fallback: number | null = null) {\n return definition.parse(value) ?? fallback;\n}\n","import { parseDecimal } from './parseDecimal';\n\ninterface FormatNumberConfig {\n /** @default \"en-US\" */\n locale?: string;\n compact?: boolean;\n currency?: string;\n /** @default 0 */\n minDecimalPlaces?: number;\n /** @default 2 */\n maxDecimalPlaces?: number;\n}\n\nconst defaultConfig = {\n locale: 'en-US',\n compact: false,\n minDecimalPlaces: 0,\n maxDecimalPlaces: 2,\n} satisfies FormatNumberConfig;\n\n/**\n * @example\n * ```ts\n * numberFormatter.format(1234567.89) // \"1,234,567.89\"\n * numberFormatter.format(1234567.89, { locale: 'de-DE' }) // \"1.234.567,89\"\n * numberFormatter.format(1234567.89, { compact: true }) // \"1M\"\n * numberFormatter.format(1234567.89, { currency: 'USD' }) // \"$1,234,567.89\"\n * ```\n */\nexport function formatNumber(value: unknown, config?: FormatNumberConfig) {\n const {\n /**/\n locale,\n compact,\n currency,\n minDecimalPlaces,\n maxDecimalPlaces,\n } = Object.assign({}, defaultConfig, config);\n\n const formatter = new Intl.NumberFormat(locale, {\n minimumFractionDigits: minDecimalPlaces,\n maximumFractionDigits: maxDecimalPlaces,\n\n ...(typeof currency === 'string'\n ? {\n style: 'currency',\n currency,\n }\n : {}),\n\n ...(compact\n ? {\n notation: 'compact',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }\n : {}),\n });\n\n return formatter.format(parseDecimal(value, 0));\n}\n","'use client';\r\n\r\nimport emblaCarouselAutoplay from 'embla-carousel-autoplay';\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { Fragment, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\n\r\ninterface Banner {\r\n src: ImageProps['src'];\r\n redirectUrl?: string;\r\n}\r\n\r\nexport interface BannerProps {\r\n banners: Banner[];\r\n className?: string;\r\n}\r\n\r\nexport function Banner(props: BannerProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel(\r\n {\r\n loop: true,\r\n align: 'start',\r\n },\r\n [\r\n emblaCarouselAutoplay({\r\n playOnInit: true,\r\n delay: 5000,\r\n }),\r\n ],\r\n );\r\n\r\n const [currentIndex, setCurrentIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n function handler(detail: UseEmblaCarouselType[1]) {\r\n setCurrentIndex(detail?.selectedScrollSnap() ?? 0);\r\n }\r\n\r\n emblaApi?.on('scroll', handler);\r\n emblaApi?.on('init', handler);\r\n\r\n return () => {\r\n emblaApi?.on('init', handler);\r\n emblaApi?.off('scroll', handler);\r\n };\r\n }, [emblaApi]);\r\n\r\n return (\r\n <div className={twMerge('relative', props.className)}>\r\n <div ref={emblaRef} className=\"overflow-hidden\">\r\n <div className=\"flex gap-2\">\r\n {props.banners.map((banner, index) => {\r\n const img = (\r\n <Image\r\n src={banner.src}\r\n alt=\"\"\r\n width={1200} /* ✏️ TODO: must be 400 on mobile */\r\n height={300} /* ✏️ TODO: must be 225 on mobile */\r\n className=\"block h-auto w-full rounded-xl\"\r\n priority={index === 0}\r\n />\r\n );\r\n\r\n return (\r\n <Fragment key={index}>\r\n {!banner.redirectUrl ? (\r\n <div className=\"w-full shrink-0\">{img}</div>\r\n ) : (\r\n <Link\r\n href={banner.redirectUrl}\r\n className=\"block w-full shrink-0\"\r\n >\r\n {img}\r\n </Link>\r\n )}\r\n </Fragment>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div className=\"absolute bottom-lg left-1/2 flex w-fit -translate-x-1/2 gap-2\">\r\n {props.banners.map((_, index) => (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n className=\"border-gray-200 ui-active:bg-gray-800 bg-gray-400 size-3 shrink-0 rounded-full border transition-all duration-300 ui-active:w-9\"\r\n onClick={() => {\r\n emblaApi?.scrollTo(index);\r\n }}\r\n aria-label={`Go to slide ${index + 1}`}\r\n data-active={dataAttr(index === currentIndex)}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, parseDate, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport type {\r\n BetRecordStatus,\r\n GameProvider,\r\n GameType,\r\n} from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useReducer, useState } from 'react';\r\nimport { z } from 'zod';\r\nimport { useBetRecordsQuery } from '../../hooks/useBetRecordsQuery/useBetRecordsQuery';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { DatePicker, IconButton, SegmentGroup, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport type { BetRecordsProps } from './BetRecords';\r\n\r\ninterface PageState {\r\n page: number;\r\n pageSize: number;\r\n type?: GameType | null;\r\n timestamp?: Partial<DateRange> | null;\r\n provider?: GameProvider | null;\r\n status?: BetRecordStatus | null;\r\n}\r\n\r\nexport function BetRecordsContent(props: BetRecordsProps) {\r\n const [tab, setTab] = useState<z.infer<typeof TabDefinition>>('all');\r\n\r\n const [state, setState] = useReducer(\r\n (prev: PageState, next: Partial<PageState>) => ({\r\n ...prev,\r\n ...next,\r\n }),\r\n {\r\n page: 1,\r\n pageSize: 10,\r\n type: props.gameTypes[0],\r\n },\r\n );\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const providerCollection = createListCollection({\r\n items: props.gameProviders,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useBetRecordsQuery, {\r\n filter: {\r\n ...(state.type && {\r\n game__type: {\r\n equal: state.type,\r\n },\r\n }),\r\n ...(state.provider && {\r\n game__provider: {\r\n equal: state.provider,\r\n },\r\n }),\r\n ...(state.status && {\r\n status: {\r\n equal: state.status,\r\n },\r\n }),\r\n ...(state.timestamp && {\r\n dateTimeCreated: {\r\n ...(state.timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(state.timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(state.timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(state.timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <div className={props.className}>\r\n <h2 className=\"text-lg font-semibold\">Bet Records</h2>\r\n <p className=\"text-gray-600 mt-xs text-xs\">View your bet records</p>\r\n\r\n <div className=\"mt-2xl pb-2xl\">\r\n <SegmentGroup.Root\r\n value={state.type}\r\n onValueChange={(details) => {\r\n firstPage();\r\n setState({\r\n type:\r\n z\r\n .enum((props.gameTypes ?? []) as [GameType])\r\n .safeParse(details.value).data ?? null,\r\n });\r\n }}\r\n >\r\n {props.gameTypes.map((type) => (\r\n <SegmentGroup.Item key={type} value={type}>\r\n <SegmentGroup.ItemText>\r\n {capitalize(type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n ))}\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n </div>\r\n\r\n <div className=\"mt-4xl\">\r\n <div className=\"flex items-center gap-lg\">\r\n <DatePicker.Root\r\n lazyMount\r\n unmountOnExit\r\n value={[state.timestamp?.start, state.timestamp?.end]\r\n .filter(Boolean)\r\n .map((d) => parseDate(d))}\r\n onValueChange={(details) => {\r\n firstPage();\r\n setState({\r\n timestamp: {\r\n start: details.value.at(0)?.toDate(DEVICE_TIMEZONE),\r\n end: details.value.at(1)?.toDate(DEVICE_TIMEZONE),\r\n },\r\n });\r\n }}\r\n onOpenChange={(details) => {\r\n if (details.open) return;\r\n if (state.timestamp) return;\r\n setTab('all');\r\n }}\r\n selectionMode=\"range\"\r\n closeOnSelect={false}\r\n positioning={{\r\n gutter: 20,\r\n placement: 'bottom',\r\n }}\r\n >\r\n <SegmentGroup.Root\r\n value={tab}\r\n onValueChange={(details) => {\r\n const value = TabDefinition.parse(details.value);\r\n\r\n if (value === 'today') {\r\n const now = new Date();\r\n\r\n setState({\r\n timestamp: {\r\n start: startOfDay(now),\r\n end: endOfDay(now),\r\n },\r\n });\r\n } else {\r\n setState({\r\n timestamp: null,\r\n });\r\n }\r\n\r\n firstPage();\r\n setTab(value);\r\n }}\r\n >\r\n <SegmentGroup.Item value=\"all\">\r\n <SegmentGroup.ItemText>All</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n <SegmentGroup.Item value=\"today\">\r\n <SegmentGroup.ItemText>Today</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n\r\n <DatePicker.Context>\r\n {(api) => (\r\n <SegmentGroup.Item\r\n value=\"custom\"\r\n onClick={() => api.setOpen(true)}\r\n >\r\n <DatePicker.Control>\r\n <SegmentGroup.ItemText>Custom</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </DatePicker.Control>\r\n </SegmentGroup.Item>\r\n )}\r\n </DatePicker.Context>\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n <Portal>\r\n <DatePicker.Positioner>\r\n <DatePicker.Content>\r\n <DatePicker.View view=\"day\">\r\n <DatePicker.Context>\r\n {(api) => (\r\n <>\r\n <DatePicker.ViewControl>\r\n <DatePicker.PrevTrigger>\r\n <ChevronLeftIcon />\r\n </DatePicker.PrevTrigger>\r\n <DatePicker.ViewTrigger>\r\n <DatePicker.RangeText />\r\n </DatePicker.ViewTrigger>\r\n <DatePicker.NextTrigger>\r\n <ChevronRightIcon />\r\n </DatePicker.NextTrigger>\r\n </DatePicker.ViewControl>\r\n <DatePicker.Table>\r\n <DatePicker.TableHead>\r\n <DatePicker.TableRow>\r\n {api.weekDays.map((weekDay, id) => (\r\n <DatePicker.TableHeader key={id}>\r\n {weekDay.short.substring(0, 2)}\r\n </DatePicker.TableHeader>\r\n ))}\r\n </DatePicker.TableRow>\r\n </DatePicker.TableHead>\r\n <DatePicker.TableBody>\r\n {api.weeks.map((week, id) => (\r\n <DatePicker.TableRow key={id}>\r\n {week.map((day, id) => (\r\n <DatePicker.TableCell key={id} value={day}>\r\n <DatePicker.TableCellTrigger>\r\n {day.day}\r\n </DatePicker.TableCellTrigger>\r\n </DatePicker.TableCell>\r\n ))}\r\n </DatePicker.TableRow>\r\n ))}\r\n </DatePicker.TableBody>\r\n </DatePicker.Table>\r\n </>\r\n )}\r\n </DatePicker.Context>\r\n </DatePicker.View>\r\n </DatePicker.Content>\r\n </DatePicker.Positioner>\r\n </Portal>\r\n </DatePicker.Root>\r\n\r\n <div className=\"grow\" />\r\n\r\n <Select.Root\r\n collection={providerCollection}\r\n value={state.provider ? [state.provider] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameProviders ?? []) as [GameProvider])\r\n .safeParse(details.value.at(0)).data;\r\n\r\n firstPage();\r\n setState({\r\n provider: value ?? null,\r\n });\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Vendor\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {providerCollection.items.map((provider) => (\r\n <Select.Item key={provider} item={provider}>\r\n <Select.ItemText>\r\n {capitalize(provider, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n\r\n <Select.Root\r\n collection={statusCollection}\r\n value={state.status ? [state.status] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(BET_RECORD_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n\r\n firstPage();\r\n setState({\r\n status: value ?? null,\r\n });\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {statusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n </div>\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest bet records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Bet Time</Table.Heading>\r\n <Table.Heading>Settlement Time</Table.Heading>\r\n <Table.Heading>Bet Content</Table.Heading>\r\n <Table.Heading>Odds</Table.Heading>\r\n <Table.Heading>Bet Amount</Table.Heading>\r\n <Table.Heading>Valid Bet</Table.Heading>\r\n <Table.Heading>Settled Amount</Table.Heading>\r\n <Table.Heading>Jackpot Contribution</Table.Heading>\r\n <Table.Heading>Jackpot Payout</Table.Heading>\r\n <Table.Heading>Bet Status</Table.Heading>\r\n <Table.Heading>Game Name</Table.Heading>\r\n <Table.Heading>Vendor Round ID</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {!!data.dateTimeSettled &&\r\n format(data.dateTimeSettled, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data?.betContent}</Table.Cell>\r\n <Table.Cell>{data.metadata?.odds}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.bet, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.validBet}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.payout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.jackpotContribution, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.jackpotPayout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.status}</Table.Cell>\r\n <Table.Cell>{data.game.name}</Table.Cell>\r\n <Table.Cell>{data.vendorRoundId}</Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst BET_RECORD_STATUSES = [\r\n 'CANCELLED',\r\n 'SETTLED',\r\n 'STARTED',\r\n] as const satisfies BetRecordStatus[];\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n\r\nconst statusCollection = createListCollection({\r\n items: BET_RECORD_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n});\r\n\r\nconst TabDefinition = z.enum(['all', 'today', 'custom']);\r\n\r\nconst DEVICE_TIMEZONE = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n","import {\r\n type BetRecord,\r\n type BetRecordsInput,\r\n getBetRecords,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getBetRecordsQueryKey } from './getBetRecordsQueryKey';\r\n\r\nexport const useBetRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<BetRecord>,\r\n BetRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n enabled: sessionQuery.data?.status === 'authenticated',\r\n ...config,\r\n queryKey: getBetRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getBetRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { BetRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getBetRecordsQueryKey = (input?: BetRecordsInput): QueryKey => [\n 'queries/betRecords',\n input,\n];\n","import type { PaginatedQueryResult } from '@opexa/portal-sdk-core';\r\nimport { chunk } from 'lodash-es';\r\nimport { useState } from 'react';\r\nimport type { InfiniteQuery } from '../types';\r\n\r\ntype KnownVariables = {\r\n first?: number;\r\n after?: string | null;\r\n [x: string]: unknown;\r\n};\r\n\r\ninterface UseInfiniteQueryHelperReturn<\r\n T extends PaginatedQueryResult<unknown>,\r\n> {\r\n rows: Array<T['edges'][0]['node']>;\r\n page: number;\r\n setPage: (page: number) => void;\r\n next: () => Promise<void>;\r\n prev: () => Promise<void>;\r\n pageSize: number;\r\n setPageSize: (size: number) => void;\r\n totalRows: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPrevPage: boolean;\r\n loading: boolean;\r\n firstPage: () => void;\r\n}\r\n\r\nexport function useInfiniteQueryHelper<\r\n QueryData extends PaginatedQueryResult<unknown>,\r\n QueryVariables extends KnownVariables,\r\n>(\r\n useQuery: InfiniteQuery<QueryData, QueryVariables>,\r\n variables: QueryVariables,\r\n): UseInfiniteQueryHelperReturn<QueryData> {\r\n const [page, setPage] = useState(1);\r\n const [pageSize, setPageSize_] = useState(10);\r\n\r\n const setPageSize = (size: number) => {\r\n setPage(1);\r\n setPageSize_(size);\r\n };\r\n\r\n const query = useQuery({\r\n first: pageSize,\r\n after: null,\r\n ...variables,\r\n });\r\n\r\n const rowsLoaded =\r\n query.data?.pages\r\n .map((page) => page.edges.map((edge) => edge.node))\r\n .flat() ?? [];\r\n\r\n const pagesLoaded = chunk(rowsLoaded, pageSize);\r\n const totalPagesLoaded = Math.ceil(rowsLoaded.length / pageSize);\r\n\r\n const rows = pagesLoaded.at(page - 1) ?? [];\r\n const totalRows = query.data?.pages.at(-1)?.totalCount ?? 0;\r\n const totalPages = Math.ceil(totalRows / pageSize);\r\n const hasNextPage = page < totalPages;\r\n const hasPrevPage = page > 1;\r\n\r\n const next = async () => {\r\n if (!hasNextPage) {\r\n return;\r\n }\r\n\r\n const nextPage = page + 1;\r\n\r\n if (totalPagesLoaded < nextPage) {\r\n await query.fetchNextPage();\r\n }\r\n\r\n setPage((prev) => prev + 1);\r\n };\r\n\r\n const prev = async () => {\r\n if (!hasPrevPage) {\r\n return;\r\n }\r\n\r\n setPage((prev) => prev - 1);\r\n };\r\n\r\n const firstPage = () => {\r\n setPage(1);\r\n };\r\n\r\n const loading = query.isLoading || query.isFetchingNextPage;\r\n\r\n return {\r\n rows,\r\n page,\r\n setPage,\r\n next,\r\n prev,\r\n pageSize,\r\n setPageSize,\r\n totalRows,\r\n totalPages,\r\n hasNextPage,\r\n hasPrevPage,\r\n loading,\r\n firstPage,\r\n };\r\n}\r\n\r\nuseInfiniteQueryHelper.config = {\r\n pageSizes: [10, 25, 50, 100],\r\n defaultPageSize: 10,\r\n defaultPage: 1,\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function CheckIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M20 6L9 17L4 12\" />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronDownIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M6 9L12 15L18 9\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronLeftIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M15 18L9 12L15 6\" />\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function File02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M14 11H8M10 15H8M16 7H8M20 6.8V17.2C20 18.8802 20 19.7202 19.673 20.362C19.3854 20.9265 18.9265 21.3854 18.362 21.673C17.7202 22 16.8802 22 15.2 22H8.8C7.11984 22 6.27976 22 5.63803 21.673C5.07354 21.3854 4.6146 20.9265 4.32698 20.362C4 19.7202 4 18.8802 4 17.2V6.8C4 5.11984 4 4.27976 4.32698 3.63803C4.6146 3.07354 5.07354 2.6146 5.63803 2.32698C6.27976 2 7.11984 2 8.8 2H15.2C16.8802 2 17.7202 2 18.362 2.32698C18.9265 2.6146 19.3854 3.07354 19.673 3.63803C20 4.27976 20 5.11984 20 6.8Z\" />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function SpinnerIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n {...props}\r\n >\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\r\n opacity=\".25\"\r\n />\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z\"\r\n >\r\n <animateTransform\r\n attributeName=\"transform\"\r\n dur=\"0.75s\"\r\n repeatCount=\"indefinite\"\r\n type=\"rotate\"\r\n values=\"0 12 12;360 12 12\"\r\n />\r\n </path>\r\n </svg>\r\n );\r\n}\r\n","interface CapitalizeConfig {\n /**\n * @description The delimiter used to split the string into words.\n * @default ' '\n */\n delimiter?: string | RegExp;\n /**\n * @description Whether to convert the string to lowercase before capitalizing.\n * @default true\n */\n lower?: boolean;\n /**\n * @description Whether to trim the string before capitalizing.\n * @default true\n */\n trim?: boolean;\n}\n\nconst SPACE = /\\s/g;\nconst UNDERSCORE = /_/g;\nconst DASH = /-/g;\nconst PASCAL = /(?=[A-Z])/;\n\n/**\n * @example\n * ```ts\n * capitalize('foo bar baz') // 'Foo Bar Baz'\n * capitalize('foo_bar_baz', { delimiter: capitalize.delimiters.UNDERSCORE }) // 'Foo Bar Baz'\n * ```\n */\nexport function capitalize(subject: string, config?: CapitalizeConfig) {\n const trim = config?.trim ?? true;\n const lower = config?.lower ?? true;\n const delimiter = config?.delimiter ?? SPACE;\n\n if (trim) subject = subject.trim();\n\n if (subject.length < 2) {\n return subject.toUpperCase();\n }\n\n if (delimiter instanceof RegExp) {\n delimiter.lastIndex = 0;\n }\n\n return subject\n .split(delimiter)\n .map((word) => {\n if (word.length < 2) return word.toUpperCase();\n\n const firstChar = word.charAt(0).toUpperCase();\n const otherChars = lower ? word.substring(1).toLowerCase() : word.substring(1);\n\n return firstChar.concat(otherChars);\n })\n .join(' ');\n}\n\ncapitalize.delimiters = {\n SPACE,\n UNDERSCORE,\n DASH,\n /**\n * ```\n * SpotBonus => Spot Bonus\n * GenericPromo => Generic Promo\n * ```\n */\n PASCAL,\n};\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function CloudIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 152 104\"\r\n fill=\"none\"\r\n {...props}\r\n >\r\n <g filter=\"url(#filter0_dd_2719_19242)\">\r\n <path\r\n d=\"M77.6 0C66.8273 0 57.2978 5.32329 51.4987 13.4829C49.605 13.0363 47.6301 12.8 45.6 12.8C31.4615 12.8 20 24.2615 20 38.4C20 52.5385 31.4615 64 45.6 64L109.6 64C121.971 64 132 53.9712 132 41.6C132 29.2288 121.971 19.2 109.6 19.2C108.721 19.2 107.854 19.2506 107.002 19.349C102.098 7.9677 90.7797 0 77.6 0Z\"\r\n fill=\"#F9FAFB\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"38.4008\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2719_19242)\"\r\n />\r\n <circle\r\n cx=\"77.6\"\r\n cy=\"32\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2719_19242)\"\r\n />\r\n <ellipse\r\n cx=\"109.6\"\r\n cy=\"41.5992\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2719_19242)\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_dd_2719_19242\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n colorInterpolationFilters=\"sRGB\"\r\n >\r\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2719_19242\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2719_19242\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2719_19242\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2719_19242\"\r\n result=\"effect2_dropShadow_2719_19242\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect2_dropShadow_2719_19242\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <linearGradient\r\n id=\"paint0_linear_2719_19242\"\r\n x1=\"25.9429\"\r\n y1=\"21.4865\"\r\n x2=\"71.2\"\r\n y2=\"64.0007\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2719_19242\"\r\n x1=\"53.0286\"\r\n y1=\"10.8571\"\r\n x2=\"109.6\"\r\n y2=\"64\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2719_19242\"\r\n x1=\"92.4\"\r\n y1=\"26.7992\"\r\n x2=\"132\"\r\n y2=\"63.9992\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#D0D5DD\" />\r\n <stop offset=\"0.350715\" stopColor=\"white\" stopOpacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n );\r\n}\r\n","import type { ComponentProps, ComponentType } from 'react';\r\nimport { CloudIcon } from './CloudIcon';\r\n\r\ninterface EmptyProps {\r\n icon: ComponentType<ComponentProps<'svg'>>;\r\n title: string;\r\n message: string;\r\n className?: string;\r\n}\r\n\r\nexport function Empty(props: EmptyProps) {\r\n return (\r\n <div role=\"alert\" aria-live=\"polite\" className={props.className}>\r\n <div className=\"relative mx-auto w-[9.5rem] pt-4\">\r\n <div className=\"bg-gray-100 absolute left-1/2 top-0 size-[6.5rem] -translate-x-1/2 rounded-full\" />\r\n <CloudIcon className=\"relative h-auto w-full shrink-0\" />\r\n <div className=\"bg-gray-600/25 absolute bottom-2 left-1/2 flex size-9 -translate-x-1/2 items-center justify-center rounded-full backdrop-blur-sm\">\r\n <props.icon className=\"size-6 text-white\" />\r\n </div>\r\n </div>\r\n <h2 className=\"mt-xl text-center font-semibold\">{props.title}</h2>\r\n <p className=\"text-gray-500 mx-auto mt-xs max-w-[25rem] text-center text-sm\">\r\n {props.message}\r\n </p>\r\n </div>\r\n );\r\n}\r\n","import type { GameProvider, GameType } from '@opexa/portal-sdk-core';\r\nimport { BetRecordsContent } from './BetRecordsContent';\r\n\r\nexport interface BetRecordsProps {\r\n gameTypes: GameType[];\r\n gameProviders: GameProvider[];\r\n className?: string;\r\n}\r\n\r\nexport function BetRecords(props: BetRecordsProps) {\r\n return <BetRecordsContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useWalletQuery } from '../../hooks/useWalletQuery/useWalletQuery';\r\nimport { Wallet02Icon } from '../../icons/Wallet02Icon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Dialog, Tabs } from '../../ui';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Deposit } from './Deposit/Deposit';\r\nimport { Withdrawal } from './Withdrawal/Withdrawal';\r\n\r\ninterface DepositWithdrawalProps {\r\n children?: ReactNode;\r\n}\r\n\r\nexport function DepositWithdrawal(props: DepositWithdrawalProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 5000,\r\n });\r\n\r\n return (\r\n <Dialog.Root\r\n lazyMount\r\n unmountOnExit\r\n open={globalStore.depositWithdrawal.open}\r\n onOpenChange={(details) => {\r\n globalStore.depositWithdrawal.setOpen(details.open);\r\n }}\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? <DefaulTrigger />}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop className=\"!z-[calc(var(--z-dialog)+1)]\" />\r\n <Dialog.Positioner className=\"!z-[calc(var(--z-dialog)+2)]\">\r\n <Dialog.Content className=\"mx-auto h-full w-full bg-white p-3xl shadow-xl lg:h-auto lg:w-[640px] lg:rounded-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n <Dialog.Header className=\"flex items-center gap-xl\">\r\n <div className=\"border-gray-200 shadow-xs text-gray-700 flex size-12 items-center justify-center rounded-lg border\">\r\n <Wallet02Icon />\r\n </div>\r\n <Dialog.Title className=\"grow text-lg font-semibold\">\r\n Wallet\r\n </Dialog.Title>\r\n </Dialog.Header>\r\n\r\n <Dialog.Body className=\"mt-5\">\r\n <p className=\"text-gray-500 text-center text-sm font-medium leading-tight\">\r\n Available Balance\r\n </p>\r\n <p className=\"mt-lg text-center text-4xl font-semibold leading-tight tracking-tight\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </p>\r\n\r\n <Tabs.Root\r\n value={globalStore.depositWithdrawal.tab}\r\n onValueChange={(details) => {\r\n globalStore.depositWithdrawal.setTab(\r\n z.enum(['DEPOSIT', 'WITHDRAWAL']).parse(details.value),\r\n );\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n className=\"mt-4xl space-y-4xl\"\r\n >\r\n <Tabs.List className=\"w-full\">\r\n <Tabs.Trigger value=\"DEPOSIT\" className=\"grow\">\r\n Deposit\r\n </Tabs.Trigger>\r\n <Tabs.Trigger value=\"WITHDRAWAL\" className=\"grow\">\r\n Withdrawal\r\n </Tabs.Trigger>\r\n <Tabs.Indicator />\r\n </Tabs.List>\r\n\r\n <Tabs.Content value=\"DEPOSIT\" className=\"space-y-4xl\">\r\n <Deposit />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"WITHDRAWAL\" className=\"space-y-4xl\">\r\n <Withdrawal />\r\n </Tabs.Content>\r\n </Tabs.Root>\r\n </Dialog.Body>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n\r\nfunction DefaulTrigger(props: ComponentPropsWithRef<'button'>) {\r\n const localeInfo = useLocaleInfo();\r\n const walletQuery = useWalletQuery({\r\n refetchInterval: 5000,\r\n });\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n {...props}\r\n className={twMerge('flex', props.className)}\r\n >\r\n <div className=\"border-gray-200 flex h-11 items-center rounded-l-md border border-r-0 px-3.5 font-medium\">\r\n {formatNumber(walletQuery.data?.balance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"bg-gray-900 flex h-11 items-center gap-1.5 rounded-r-md px-3.5 font-semibold text-white\">\r\n <Wallet02Icon className=\"size-5\" />\r\n Wallet\r\n </div>\r\n </button>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Wallet02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M16 7.99983V4.50048C16 3.66874 16 3.25287 15.8248 2.9973C15.6717 2.77401 15.4346 2.62232 15.1678 2.57691C14.8623 2.52493 14.4847 2.6992 13.7295 3.04775L4.85901 7.14182C4.18551 7.45267 3.84875 7.6081 3.60211 7.84915C3.38406 8.06225 3.21762 8.32238 3.1155 8.60966C3 8.93462 3 9.30551 3 10.0473V14.9998M16.5 14.4998H16.51M3 11.1998L3 17.7998C3 18.9199 3 19.48 3.21799 19.9078C3.40973 20.2841 3.71569 20.5901 4.09202 20.7818C4.51984 20.9998 5.07989 20.9998 6.2 20.9998H17.8C18.9201 20.9998 19.4802 20.9998 19.908 20.7818C20.2843 20.5901 20.5903 20.2841 20.782 19.9078C21 19.48 21 18.9199 21 17.7998V11.1998C21 10.0797 21 9.51967 20.782 9.09185C20.5903 8.71552 20.2843 8.40956 19.908 8.21782C19.4802 7.99983 18.9201 7.99983 17.8 7.99983L6.2 7.99983C5.0799 7.99983 4.51984 7.99983 4.09202 8.21781C3.7157 8.40956 3.40973 8.71552 3.21799 9.09185C3 9.51967 3 10.0797 3 11.1998ZM17 14.4998C17 14.776 16.7761 14.9998 16.5 14.9998C16.2239 14.9998 16 14.776 16 14.4998C16 14.2237 16.2239 13.9998 16.5 13.9998C16.7761 13.9998 17 14.2237 17 14.4998Z\" />\r\n </svg>\r\n );\r\n}\r\n","export function XIcon(props: React.ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M18 6L6 18M6 6L18 18\" />\n </svg>\n );\n}\n","import { useEffect, useState } from 'react';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { onMobileDevice } from '../../../utils/isMobile';\r\nimport { PaymentMethods } from '../PaymentMethods';\r\nimport type { PaymentMethod } from '../utils';\r\nimport { GCashDeposit } from './GCashDeposit';\r\nimport { MayaAppDeposit } from './MayaAppDeposit';\r\nimport { MayaDeposit } from './MayaDeposit';\r\nimport { OnlineBankDeposit } from './OnlineBankDeposit';\r\nimport { QRPHDeposit } from './QRPHDeposit';\r\n\r\nexport function Deposit() {\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n\r\n const enabledPaymentMethods = (() => {\r\n const l: PaymentMethod[] = [];\r\n\r\n if (onMobileDevice()) {\r\n if (paymentSettings?.gcashDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('GCASH');\r\n if (paymentSettings?.mayaDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('MAYA');\r\n if (paymentSettings?.mayaAppDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('MAYA_APP');\r\n if (paymentSettings?.qrphDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('QRPH');\r\n if (paymentSettings?.onlineBankDepositGatewaySettings?.mobileWebEnabled)\r\n l.push('ONLINE_BANK');\r\n } else {\r\n if (paymentSettings?.gcashDepositGatewaySettings?.webEnabled)\r\n l.push('GCASH');\r\n if (paymentSettings?.mayaDepositGatewaySettings?.webEnabled)\r\n l.push('MAYA');\r\n if (paymentSettings?.mayaAppDepositGatewaySettings?.webEnabled)\r\n l.push('MAYA_APP');\r\n if (paymentSettings?.qrphDepositGatewaySettings?.webEnabled)\r\n l.push('QRPH');\r\n if (paymentSettings?.onlineBankDepositGatewaySettings?.webEnabled)\r\n l.push('ONLINE_BANK');\r\n }\r\n\r\n return l;\r\n })();\r\n\r\n const [paymentMethod, setPaymentMethod] = useState<PaymentMethod>();\r\n\r\n useEffect(() => {\r\n if (enabledPaymentMethods.length > 0 && !paymentMethod) {\r\n setPaymentMethod(enabledPaymentMethods[0]);\r\n }\r\n }, [enabledPaymentMethods, paymentMethod]);\r\n\r\n if (paymentSettingsQuery.isLoading) {\r\n return <SpinnerIcon className=\"mx-auto size-6\" />;\r\n }\r\n\r\n if (enabledPaymentMethods.length <= 0) {\r\n /* TODO: Empty state */\r\n return (\r\n <div className=\"border-amber-200 text-amber-700 bg-amber-50 flex items-center gap-1.5 rounded-sm border px-3 py-2.5 text-sm\">\r\n <AlertCircleIcon className=\"size-4\" />\r\n No available payment methods\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <PaymentMethods\r\n value={paymentMethod}\r\n onChange={setPaymentMethod}\r\n options={enabledPaymentMethods}\r\n />\r\n\r\n {paymentMethod === 'QRPH' && <QRPHDeposit />}\r\n {paymentMethod === 'GCASH' && <GCashDeposit />}\r\n {paymentMethod === 'MAYA' && <MayaDeposit />}\r\n {paymentMethod === 'MAYA_APP' && <MayaAppDeposit />}\r\n {paymentMethod === 'ONLINE_BANK' && <OnlineBankDeposit />}\r\n </>\r\n );\r\n}\r\n","import {\r\n getPaymentSettings,\r\n type PaymentSettings,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getPaymentSettingsQueryKey } from './getPaymentSettingsQueryKey';\r\n\r\nexport const usePaymentSettingsQuery: Query<PaymentSettings> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getPaymentSettingsQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getPaymentSettings({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getPaymentSettingsQueryKey = (): QueryKey => [\r\n 'queries/paymentSettings',\r\n];\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function AlertCircleIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\" />\n </svg>\n );\n}\n","import { type IsMobileOptions, isMobile } from 'is-mobile';\r\nimport { cache } from 'react';\r\n\r\ninterface OnMobileOptions extends IsMobileOptions {}\r\n\r\nexport const onMobileDevice = cache((opts?: OnMobileOptions) => {\r\n return isMobile({\r\n tablet: true,\r\n featureDetect: typeof window !== 'undefined',\r\n ...opts,\r\n });\r\n});\r\n","import type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport qrph from '../../images/QRPh.png';\r\nimport gcash from '../../images/gcash.png';\r\nimport maya from '../../images/maya.png';\r\nimport onlineBank from '../../images/online-bank.png';\r\nimport { Checkbox, Field } from '../../ui';\r\nimport { PaymentMethodDefinition, type PaymentMethod } from './utils';\r\n\r\nconst OPTIONS: {\r\n value: PaymentMethod;\r\n label: string;\r\n image: ImageProps['src'];\r\n}[] = [\r\n {\r\n value: 'GCASH',\r\n label: 'GCash',\r\n image: gcash,\r\n },\r\n {\r\n value: 'MAYA_APP',\r\n label: 'Maya App',\r\n image: maya,\r\n },\r\n {\r\n value: 'MAYA',\r\n label: 'Maya',\r\n image: maya,\r\n },\r\n {\r\n value: 'QRPH',\r\n label: 'QRPH',\r\n image: qrph,\r\n },\r\n {\r\n value: 'ONLINE_BANK',\r\n label: 'Online Bank',\r\n image: onlineBank,\r\n },\r\n];\r\n\r\ninterface PaymentMethodsProps {\r\n value?: PaymentMethod;\r\n onChange?: (value: PaymentMethod) => void;\r\n defaultValue?: PaymentMethod;\r\n options?: PaymentMethod[];\r\n className?: string;\r\n}\r\n\r\nexport function PaymentMethods(props: PaymentMethodsProps) {\r\n const options = props.options?.length\r\n ? OPTIONS.filter((option) => props.options?.includes(option.value))\r\n : OPTIONS;\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? options[0].value,\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <div className={props.className}>\r\n <Field.Label asChild>\r\n <div>Select your payment method</div>\r\n </Field.Label>\r\n <Checkbox.Group\r\n value={[value]}\r\n onValueChange={(newValue) => {\r\n const lastValue = newValue.at(-1);\r\n if (!lastValue) return;\r\n setValue(PaymentMethodDefinition.parse(lastValue));\r\n }}\r\n className=\"grid grid-cols-2 gap-x-4 gap-y-3\"\r\n >\r\n {options.map((option) => (\r\n <Checkbox.Root\r\n key={option.value}\r\n value={option.value}\r\n className=\"border-gray-200 ui-checked:border-gray-900 ui-checked:outline-solid ui-checked:outline-gray-900 flex cursor-pointer rounded-xl border p-xl ui-checked:outline\"\r\n >\r\n <div className=\"grow\">\r\n <Image\r\n src={option.image}\r\n alt=\"\"\r\n width={200}\r\n height={40}\r\n className=\"h-5 w-auto lg:h-8\"\r\n draggable={false}\r\n />\r\n </div>\r\n <Checkbox.Control className=\"shrink-0\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n ))}\r\n </Checkbox.Group>\r\n </div>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nfunction useCallbackRef<Args extends unknown[], Return>(\r\n callback: ((...args: Args) => Return) | undefined,\r\n deps: React.DependencyList = [],\r\n) {\r\n const callbackRef = React.useRef<typeof callback>(() => {\r\n throw new Error('Cannot call an event handler while rendering.');\r\n });\r\n\r\n React.useInsertionEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return React.useCallback(\r\n (...args: Args) => callbackRef.current?.(...args),\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n deps,\r\n );\r\n}\r\n\r\ninterface UseControllableStateProps<T> {\r\n value?: T;\r\n onChange?: (value: T) => void;\r\n defaultValue?: T | (() => T);\r\n}\r\n\r\nexport function useControllableState<T>(\r\n props: UseControllableStateProps<T>,\r\n): [T, React.Dispatch<React.SetStateAction<T>>] {\r\n const { value: userDefinedValue, defaultValue, onChange } = props;\r\n\r\n const onChangeProp = useCallbackRef(onChange);\r\n const shouldUpdateProp = useCallbackRef((prev, next) => prev !== next);\r\n\r\n const [uncontrolledState, setUncontrolledState] = React.useState(\r\n defaultValue as T,\r\n );\r\n const controlled = userDefinedValue !== undefined;\r\n const value = controlled ? userDefinedValue : uncontrolledState;\r\n\r\n const setValue = useCallbackRef(\r\n (next: React.SetStateAction<T>) => {\r\n const setter = next as (prevState?: T) => T;\r\n const nextValue = typeof next === 'function' ? setter(value) : next;\r\n\r\n if (!shouldUpdateProp(value, nextValue)) return;\r\n\r\n if (!controlled) setUncontrolledState(nextValue);\r\n\r\n onChangeProp(nextValue);\r\n },\r\n [controlled, onChangeProp, value, shouldUpdateProp],\r\n );\r\n\r\n return [value, setValue];\r\n}\r\n","import { z } from 'zod';\r\n\r\nexport const PaymentMethodDefinition = z.enum([\r\n 'GCASH',\r\n 'MAYA_APP',\r\n 'MAYA',\r\n 'ONLINE_BANK',\r\n 'QRPH',\r\n]);\r\n\r\nexport type PaymentMethod = z.infer<typeof PaymentMethodDefinition>;\r\n","import { Portal } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useEffect } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useCreateGCashDepositMutation } from '../../../hooks/useCreateGCashDepositMutation/useCreateGCashDepositMutation';\r\nimport { useDepositsCountQuery } from '../../../hooks/useDepositsCountQuery/useDepositsCountQuery';\r\nimport { useDisclosure } from '../../../hooks/useDisclosure';\r\nimport { useGlobalStore } from '../../../hooks/useGlobalStore';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { ChevronDownIcon } from '../../../icons/ChevronDownIcon';\r\nimport { ChevronUpIcon } from '../../../icons/ChevronUpIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { XIcon } from '../../../icons/XIcon';\r\nimport { AlertDialog, Button, Field, NumberInput } from '../../../ui';\r\nimport { parseDecimal } from '../../../utils/parseDecimal';\r\nimport { toaster } from '../../../utils/toaster';\r\nimport { AmountChoices } from '../AmountChoices';\r\nimport { AvailablePromos } from '../AvailablePromos';\r\n\r\nexport function GCashDeposit() {\r\n const disclosure = useDisclosure();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const createDepositMutation = useCreateGCashDepositMutation({\r\n onSuccess(data) {\r\n if (!data.checkoutUrl) return;\r\n window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');\r\n form.reset();\r\n globalStore.depositWithdrawal.setOpen(false);\r\n },\r\n onError(error) {\r\n toaster.error({\r\n description: error.message,\r\n });\r\n },\r\n });\r\n\r\n const depositsCountQuery = useDepositsCountQuery();\r\n const depositsCount = depositsCountQuery.data ?? 0;\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n const gatewaySettings = paymentSettings?.gcashDepositGatewaySettings;\r\n const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);\r\n const minimumAmount =\r\n depositsCount <= 0\r\n ? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)\r\n : parseDecimal(gatewaySettings?.minimumAmount, 0);\r\n\r\n const promosQuery = useAvailablePromosQuery();\r\n const promos = promosQuery.data ?? [];\r\n\r\n const definition = z\r\n .object({\r\n amount: z.string().superRefine((val, ctx) => {\r\n const n = parseDecimal(val, 0);\r\n if (n < minimumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_small,\r\n inclusive: true,\r\n minimum: minimumAmount,\r\n message: `Minimum amount is ${minimumAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (n > maximumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_big,\r\n inclusive: true,\r\n maximum: maximumAmount,\r\n message: `Maximum amount is ${maximumAmount.toLocaleString()}`,\r\n });\r\n }\r\n }),\r\n promo: z.string().optional().nullable(),\r\n })\r\n .superRefine((value, ctx) => {\r\n const promo = promos.find((o) => o.id === value.promo);\r\n const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);\r\n const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);\r\n const amount = parseDecimal(value.amount, 0);\r\n\r\n if (promo && amount < promoMinAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (promo && amount > promoMaxAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Maximum amount for this promo is ${promoMaxAmount}`,\r\n });\r\n }\r\n });\r\n\r\n const form = useForm({\r\n mode: 'all',\r\n resolver: zodResolver(definition),\r\n defaultValues: {\r\n amount: '0',\r\n promo: null,\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (minimumAmount) {\r\n form.reset({\r\n amount: minimumAmount.toString(),\r\n promo: null,\r\n });\r\n }\r\n }, [form, minimumAmount]);\r\n\r\n const handleSubmit = form.handleSubmit(async (data) => {\r\n createDepositMutation.mutate({\r\n amount: data.amount.toString(),\r\n promo: data.promo ?? undefined,\r\n });\r\n });\r\n\r\n return (\r\n <form onSubmit={handleSubmit} noValidate>\r\n <Controller\r\n control={form.control}\r\n name=\"amount\"\r\n render={(o) => (\r\n <Field.Root invalid={!!form.formState.errors.amount}>\r\n <NumberInput.Root\r\n min={0}\r\n step={1}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n formatOptions={{\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 0,\r\n }}\r\n allowMouseWheel\r\n >\r\n <NumberInput.Label>\r\n Enter amount you want to deposit\r\n </NumberInput.Label>\r\n <NumberInput.Control>\r\n <NumberInput.Input />\r\n <NumberInput.IncrementTrigger>\r\n <ChevronUpIcon />\r\n </NumberInput.IncrementTrigger>\r\n <NumberInput.DecrementTrigger>\r\n <ChevronDownIcon />\r\n </NumberInput.DecrementTrigger>\r\n </NumberInput.Control>\r\n </NumberInput.Root>\r\n <Field.ErrorText>\r\n {form.formState.errors.amount?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n )}\r\n />\r\n\r\n <AmountChoices\r\n value={parseDecimal(form.watch('amount'), 0)}\r\n onChange={(value) => {\r\n form.setValue('amount', value.toString(), {\r\n shouldTouch: true,\r\n shouldDirty: true,\r\n shouldValidate: true,\r\n });\r\n }}\r\n min={minimumAmount}\r\n max={maximumAmount}\r\n className=\"mt-xl\"\r\n />\r\n\r\n <Controller\r\n control={form.control}\r\n name=\"promo\"\r\n render={(o) => (\r\n <AvailablePromos\r\n className=\"mt-4xl\"\r\n value={o.field.value}\r\n onChange={o.field.onChange}\r\n />\r\n )}\r\n />\r\n\r\n <p className=\"mt-4xl text-xs\">\r\n Upon clicking the deposit button, you agree to the{' '}\r\n <button type=\"button\" className=\"underline underline-offset-2\">\r\n Terms of Use and Privacy Policy\r\n </button>\r\n .\r\n </p>\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-4.5\"\r\n disabled={createDepositMutation.isPending}\r\n onClick={async (e) => {\r\n const ok = await form.trigger('amount');\r\n if (!ok) return;\r\n if (promos.length <= 0) return;\r\n if (form.getValues('promo')) return;\r\n e.preventDefault();\r\n disclosure.setOpen(true);\r\n }}\r\n >\r\n {createDepositMutation.isPending ? (\r\n <>\r\n <SpinnerIcon />\r\n Processing...\r\n </>\r\n ) : (\r\n 'Deposit'\r\n )}\r\n </Button>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={disclosure.open}\r\n onOpenChange={(details) => {\r\n disclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop className=\"!z-[calc(var(--z-dialog)+10)]\" />\r\n <AlertDialog.Positioner className=\"!z-[calc(var(--z-dialog)+25)]\">\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>\r\n Submit deposit request without promo?\r\n </AlertDialog.Title>\r\n <AlertDialog.Description>\r\n You haven&rsquo;t selected a promo. Are you sure you want to\r\n proceed without one?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n handleSubmit();\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </form>\r\n );\r\n}\r\n","import {\r\n getAvailablePromos,\r\n type AvailablePromosInput,\r\n type Promo,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getAvailablePromosQueryKey } from './getAvailablePromosQueryKey';\r\n\r\nexport const useAvailablePromosQuery: Query<Promo[], AvailablePromosInput> = (\r\n input,\r\n config,\r\n) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getAvailablePromosQueryKey(input),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getAvailablePromos(input, {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { AvailablePromosInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getAvailablePromosQueryKey = (input?: AvailablePromosInput): QueryKey => [\n 'queries/availablePromos',\n input,\n];\n","import {\r\n createGCashDeposit,\r\n getDeposit,\r\n type CreateGCashDepositInput,\r\n type Deposit,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateGCashDepositMutationKey } from './getCreateGCashDepositMutationKey';\r\n\r\nexport const useCreateGCashDepositMutation: Mutation<\r\n Deposit,\r\n Omit<CreateGCashDepositInput, 'id'>\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n const mutation = useMutation({\r\n ...config,\r\n mutationKey: getCreateGCashDepositMutationKey(),\r\n mutationFn: async (input) => {\r\n const id = ObjectId.generate(ObjectType.Deposit).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n await createGCashDeposit(\r\n {\r\n id,\r\n ...input,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const poll = createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDeposit(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until(res) {\r\n return !!res?.checkoutUrl;\r\n },\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n );\r\n\r\n const res = await poll();\r\n\r\n if (!res?.checkoutUrl) {\r\n const error = new Error();\r\n error.name = 'GCashDepositError';\r\n error.message = 'Failed to process GCash deposit';\r\n throw error;\r\n }\r\n\r\n return res;\r\n },\r\n });\r\n\r\n return mutation;\r\n};\r\n","interface CreatePollConfig<T = unknown> {\r\n until(response: T): boolean | Promise<boolean>;\r\n /**\r\n * @default 1000\r\n */\r\n interval?: number;\r\n /**\r\n * @default 3\r\n */\r\n maxAttempt?: number;\r\n}\r\n\r\nconst defaultConfig = {\r\n interval: 1000,\r\n maxAttempt: 3,\r\n} satisfies Partial<CreatePollConfig>;\r\n\r\n/**\r\n * @example\r\n * ```ts\r\n * const poll = createPoll(\r\n * fn,\r\n * {\r\n * until: (r) => r.ok,\r\n * interval: 1000,\r\n * maxAttempt: 5,\r\n * }\r\n * );\r\n *\r\n * poll()\r\n * ```\r\n */\r\nexport function createPoll<Return, Args = never>(\r\n func: (...args: Args[]) => Promise<Return>,\r\n config: CreatePollConfig<Return>,\r\n) {\r\n const { until, interval, maxAttempt } = Object.assign(defaultConfig, config);\r\n\r\n async function repeater(args: Args[], max?: number) {\r\n const remainingAttempts = max ?? maxAttempt;\r\n const result = await func(...args);\r\n const shouldStop = await until(result);\r\n\r\n if (shouldStop) return result;\r\n\r\n const retryCount = maxAttempt + 1 - remainingAttempts;\r\n const maxJitter = interval * 2 ** retryCount; /* Exponential backoff */\r\n const jitter = Math.random() * maxJitter;\r\n\r\n if (remainingAttempts > 1) {\r\n await sleep(jitter);\r\n return repeater(args, remainingAttempts - 1);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return async (...args: Args[]): Promise<Return> => {\r\n return await repeater(args);\r\n };\r\n}\r\n\r\nfunction sleep(ms: number) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateGCashDepositMutationKey = (): MutationKey => [\r\n 'mutations/createGCashDeposit',\r\n];\r\n","import { getDepositsCount } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Query } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getDepositsCountQueryKey } from './getDepositsCountQueryKey';\r\n\r\nexport const useDepositsCountQuery: Query<number> = (config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getDepositsCountQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDepositsCount({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\r\n\r\nexport const getDepositsCountQueryKey = (): QueryKey => [\r\n 'queries/depositsCount',\r\n];\r\n","import type { Dispatch, SetStateAction } from 'react';\r\nimport { useControllableState } from './useControllableState';\r\n\r\nexport interface UseDisclosureReturn {\r\n open: boolean;\r\n setOpen: Dispatch<SetStateAction<boolean>>;\r\n}\r\n\r\nexport interface UseDisclosureProps {\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n}\r\n\r\nexport function useDisclosure(props?: UseDisclosureProps): UseDisclosureReturn {\r\n const [open, setOpen] = useControllableState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen ?? false,\r\n onChange: props?.onOpenChange,\r\n });\r\n\r\n return {\r\n open,\r\n setOpen,\r\n };\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ChevronUpIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M18 15L12 9L6 15\" />\r\n </svg>\r\n );\r\n}\r\n","import { createToaster, type CreateToasterReturn } from '@ark-ui/react/toast';\n\nexport const toaster: CreateToasterReturn = createToaster({\n placement: 'top',\n duration: 5000,\n max: 5,\n overlap: true,\n gap: 8,\n});\n","import { twMerge } from 'tailwind-merge';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { Button } from '../../ui';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\ninterface AmountChoicesProps {\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n options?: number[];\r\n className?: string;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport function AmountChoices(props: AmountChoicesProps) {\r\n const min = props.min ?? 0;\r\n const max = props.max ?? 9999999;\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const options = props.options?.length\r\n ? props.options\r\n : [500, 750, 1000, 2000];\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? options[0],\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <div className={twMerge('grid grid-cols-4 gap-2', props.className)}>\r\n {options.map((option) => (\r\n <Button\r\n key={option}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n setValue(option);\r\n }}\r\n disabled={min > option || max < option}\r\n data-selected={dataAttr(value === option)}\r\n >\r\n {formatNumber(option, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 0,\r\n maxDecimalPlaces: 0,\r\n })}\r\n </Button>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import { Carousel } from '@ark-ui/react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Checkbox, IconButton } from '../../ui';\r\n\r\ninterface AvailablePromosProps {\r\n value?: string | null;\r\n defaultValue?: string | null;\r\n onChange?: (value: string | null) => void;\r\n className?: string;\r\n}\r\n\r\nexport function AvailablePromos(props: AvailablePromosProps) {\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const query = useAvailablePromosQuery();\r\n const promos = query.data ?? [];\r\n\r\n const [value, setValue] = useControllableState({\r\n value: props.value,\r\n defaultValue: props.defaultValue ?? null,\r\n onChange: props.onChange,\r\n });\r\n\r\n return (\r\n <Carousel.Root\r\n slideCount={promos.length}\r\n className={props.className}\r\n spacing=\"16px\"\r\n slidesPerPage={2}\r\n >\r\n <div className=\"flex items-center gap-xl\">\r\n <div className=\"grow\">\r\n <h2 className=\"text-lg font-semibold leading-tight\">\r\n Available Promotions\r\n </h2>\r\n <p className=\"text-gray-500 mt-1 text-sm leading-tight\">\r\n Select a promotion with your deposit. Only one can be active at a\r\n time.\r\n </p>\r\n </div>\r\n\r\n <Carousel.Control>\r\n <Carousel.PrevTrigger asChild>\r\n <IconButton\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n >\r\n <ChevronLeftIcon />\r\n </IconButton>\r\n </Carousel.PrevTrigger>\r\n <Carousel.NextTrigger asChild>\r\n <IconButton\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n >\r\n <ChevronRightIcon />\r\n </IconButton>\r\n </Carousel.NextTrigger>\r\n </Carousel.Control>\r\n </div>\r\n\r\n <Carousel.ItemGroup className=\"mt-3xl\">\r\n {promos.map((promo, index) => (\r\n <Carousel.Item key={promo.id} index={index}>\r\n <div className=\"relative select-none p-0.5\">\r\n <div\r\n className={twMerge(\r\n 'block rounded-lg',\r\n promo.id === value && 'ring-gray-500/25 ring-2',\r\n )}\r\n >\r\n {promo.banner.url && (\r\n <Image\r\n src={promo.banner.url}\r\n alt=\"\"\r\n width={288}\r\n height={184}\r\n className=\"rounded-lg\"\r\n />\r\n )}\r\n </div>\r\n\r\n <Checkbox.Root\r\n checked={promo.id === value}\r\n onCheckedChange={(details) => {\r\n setValue(details.checked ? promo.id : null);\r\n }}\r\n className=\"absolute right-3 top-3 rounded-md border border-white/50 bg-white/60 p-lg backdrop-blur-sm\"\r\n >\r\n <Checkbox.Control className=\"bg-white\">\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n\r\n <Link\r\n href={`/promos/${promo.id}`}\r\n className=\"absolute bottom-3 right-3 rounded-md border border-white/50 bg-white/60 px-lg py-md text-sm font-semibold backdrop-blur-sm\"\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(false);\r\n }}\r\n >\r\n Promo Details\r\n </Link>\r\n </div>\r\n </Carousel.Item>\r\n ))}\r\n </Carousel.ItemGroup>\r\n </Carousel.Root>\r\n );\r\n}\r\n","export function MayaAppDeposit() {\r\n return null;\r\n}\r\n","import { Portal } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useEffect } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useAvailablePromosQuery } from '../../../hooks/useAvailablePromosQuery/useAvailablePromosQuery';\r\nimport { useCreateMayaDepositMutation } from '../../../hooks/useCreateMayaDepositMutation copy/useCreateMayaDepositMutation';\r\nimport { useDepositsCountQuery } from '../../../hooks/useDepositsCountQuery/useDepositsCountQuery';\r\nimport { useDisclosure } from '../../../hooks/useDisclosure';\r\nimport { useGlobalStore } from '../../../hooks/useGlobalStore';\r\nimport { usePaymentSettingsQuery } from '../../../hooks/usePaymentSettingsQuery/usePaymentSettingsQuery';\r\nimport { AlertCircleIcon } from '../../../icons/AlertCircleIcon';\r\nimport { ChevronDownIcon } from '../../../icons/ChevronDownIcon';\r\nimport { ChevronUpIcon } from '../../../icons/ChevronUpIcon';\r\nimport { SpinnerIcon } from '../../../icons/SpinnerIcon';\r\nimport { XIcon } from '../../../icons/XIcon';\r\nimport { AlertDialog, Button, Field, NumberInput } from '../../../ui';\r\nimport { parseDecimal } from '../../../utils/parseDecimal';\r\nimport { toaster } from '../../../utils/toaster';\r\nimport { AmountChoices } from '../AmountChoices';\r\nimport { AvailablePromos } from '../AvailablePromos';\r\n\r\nexport function MayaDeposit() {\r\n const disclosure = useDisclosure();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n const createDepositMutation = useCreateMayaDepositMutation({\r\n onSuccess(data) {\r\n if (!data.checkoutUrl) return;\r\n window.open(data.checkoutUrl, '_blank', 'noopener,noreferrer');\r\n form.reset();\r\n globalStore.depositWithdrawal.setOpen(false);\r\n },\r\n onError(error) {\r\n toaster.error({\r\n description: error.message,\r\n });\r\n },\r\n });\r\n\r\n const depositsCountQuery = useDepositsCountQuery();\r\n const depositsCount = depositsCountQuery.data ?? 0;\r\n const paymentSettingsQuery = usePaymentSettingsQuery();\r\n const paymentSettings = paymentSettingsQuery.data;\r\n const gatewaySettings = paymentSettings?.mayaDepositGatewaySettings;\r\n const maximumAmount = parseDecimal(gatewaySettings?.maximumAmount, 0);\r\n const minimumAmount =\r\n depositsCount <= 0\r\n ? parseDecimal(paymentSettingsQuery.data?.minimumFirstDepositAmount, 0)\r\n : parseDecimal(gatewaySettings?.minimumAmount, 0);\r\n\r\n const promosQuery = useAvailablePromosQuery();\r\n const promos = promosQuery.data ?? [];\r\n\r\n const definition = z\r\n .object({\r\n amount: z.string().superRefine((val, ctx) => {\r\n const n = parseDecimal(val, 0);\r\n if (n < minimumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_small,\r\n inclusive: true,\r\n minimum: minimumAmount,\r\n message: `Minimum amount is ${minimumAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (n > maximumAmount) {\r\n ctx.addIssue({\r\n type: 'number',\r\n code: z.ZodIssueCode.too_big,\r\n inclusive: true,\r\n maximum: maximumAmount,\r\n message: `Maximum amount is ${maximumAmount.toLocaleString()}`,\r\n });\r\n }\r\n }),\r\n promo: z.string().optional().nullable(),\r\n })\r\n .superRefine((value, ctx) => {\r\n const promo = promos.find((o) => o.id === value.promo);\r\n const promoMinAmount = parseDecimal(promo?.minimumDepositAmount, 0);\r\n const promoMaxAmount = parseDecimal(promo?.maximumDepositAmount, 0);\r\n const amount = parseDecimal(value.amount, 0);\r\n\r\n if (promo && amount < promoMinAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Minimum amount for this promo is ${promoMinAmount.toLocaleString()}`,\r\n });\r\n }\r\n\r\n if (promo && amount > promoMaxAmount) {\r\n ctx.addIssue({\r\n path: ['amount'],\r\n code: z.ZodIssueCode.custom,\r\n message: `Maximum amount for this promo is ${promoMaxAmount}`,\r\n });\r\n }\r\n });\r\n\r\n const form = useForm({\r\n mode: 'all',\r\n resolver: zodResolver(definition),\r\n defaultValues: {\r\n amount: '0',\r\n promo: null,\r\n },\r\n });\r\n\r\n useEffect(() => {\r\n if (minimumAmount) {\r\n form.reset({\r\n amount: minimumAmount.toString(),\r\n promo: null,\r\n });\r\n }\r\n }, [form, minimumAmount]);\r\n\r\n const handleSubmit = form.handleSubmit(async (data) => {\r\n createDepositMutation.mutate({\r\n amount: data.amount.toString(),\r\n promo: data.promo ?? undefined,\r\n });\r\n });\r\n\r\n return (\r\n <form onSubmit={handleSubmit} noValidate>\r\n <Controller\r\n control={form.control}\r\n name=\"amount\"\r\n render={(o) => (\r\n <Field.Root invalid={!!form.formState.errors.amount}>\r\n <NumberInput.Root\r\n min={0}\r\n step={1}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n formatOptions={{\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 0,\r\n }}\r\n allowMouseWheel\r\n >\r\n <NumberInput.Label>\r\n Enter amount you want to deposit\r\n </NumberInput.Label>\r\n <NumberInput.Control>\r\n <NumberInput.Input />\r\n <NumberInput.IncrementTrigger>\r\n <ChevronUpIcon />\r\n </NumberInput.IncrementTrigger>\r\n <NumberInput.DecrementTrigger>\r\n <ChevronDownIcon />\r\n </NumberInput.DecrementTrigger>\r\n </NumberInput.Control>\r\n </NumberInput.Root>\r\n <Field.ErrorText>\r\n {form.formState.errors.amount?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n )}\r\n />\r\n\r\n <AmountChoices\r\n value={parseDecimal(form.watch('amount'), 0)}\r\n onChange={(value) => {\r\n form.setValue('amount', value.toString(), {\r\n shouldTouch: true,\r\n shouldDirty: true,\r\n shouldValidate: true,\r\n });\r\n }}\r\n min={minimumAmount}\r\n max={maximumAmount}\r\n className=\"mt-xl\"\r\n />\r\n\r\n <Controller\r\n control={form.control}\r\n name=\"promo\"\r\n render={(o) => (\r\n <AvailablePromos\r\n className=\"mt-4xl\"\r\n value={o.field.value}\r\n onChange={o.field.onChange}\r\n />\r\n )}\r\n />\r\n\r\n <p className=\"mt-4xl text-xs\">\r\n Upon clicking the deposit button, you agree to the{' '}\r\n <button type=\"button\" className=\"underline underline-offset-2\">\r\n Terms of Use and Privacy Policy\r\n </button>\r\n .\r\n </p>\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-4.5\"\r\n disabled={createDepositMutation.isPending}\r\n onClick={async (e) => {\r\n const ok = await form.trigger('amount');\r\n if (!ok) return;\r\n if (promos.length <= 0) return;\r\n if (form.getValues('promo')) return;\r\n e.preventDefault();\r\n disclosure.setOpen(true);\r\n }}\r\n >\r\n {createDepositMutation.isPending ? (\r\n <>\r\n <SpinnerIcon />\r\n Processing...\r\n </>\r\n ) : (\r\n 'Deposit'\r\n )}\r\n </Button>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={disclosure.open}\r\n onOpenChange={(details) => {\r\n disclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop className=\"!z-[calc(var(--z-dialog)+10)]\" />\r\n <AlertDialog.Positioner className=\"!z-[calc(var(--z-dialog)+25)]\">\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>\r\n Submit deposit request without promo?\r\n </AlertDialog.Title>\r\n <AlertDialog.Description>\r\n You haven&rsquo;t selected a promo. Are you sure you want to\r\n proceed without one?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n handleSubmit();\r\n disclosure.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </form>\r\n );\r\n}\r\n","import {\r\n createMayaDeposit,\r\n getDeposit,\r\n type CreateGCashDepositInput,\r\n type Deposit,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateMayaDepositMutationKey } from './getCreateMayaDepositMutationKey';\r\n\r\nexport const useCreateMayaDepositMutation: Mutation<\r\n Deposit,\r\n Omit<CreateGCashDepositInput, 'id'>\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n const mutation = useMutation({\r\n ...config,\r\n mutationKey: getCreateMayaDepositMutationKey(),\r\n mutationFn: async (input) => {\r\n const id = ObjectId.generate(ObjectType.Deposit).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n await createMayaDeposit(\r\n {\r\n id,\r\n ...input,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const poll = createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDeposit(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until(res) {\r\n return !!res?.checkoutUrl;\r\n },\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n );\r\n\r\n const res = await poll();\r\n\r\n if (!res?.checkoutUrl) {\r\n const error = new Error();\r\n error.name = 'MayaDepositError';\r\n error.message = 'Failed to process GCash deposit';\r\n throw error;\r\n }\r\n\r\n return res;\r\n },\r\n });\r\n\r\n return mutation;\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateMayaDepositMutationKey = (): MutationKey => [\r\n 'mutations/createMayaDeposit',\r\n];\r\n","export function OnlineBankDeposit() {\r\n return null;\r\n}\r\n","export function QRPHDeposit() {\r\n return null;\r\n}\r\n","export function Withdrawal() {\r\n return null;\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useRef } from 'react';\r\nimport pagcorLogo from '../../images/pagcor.png';\r\nimport responsibleGamingLogo from '../../images/responsible-gaming.png';\r\nimport { Button, Dialog } from '../../ui';\r\nimport { useDisclaimer } from './useDisclaimer';\r\n\r\nexport interface DisclaimerProps {\r\n logo: ImageProps['src'];\r\n}\r\n\r\nexport function Disclaimer(props: DisclaimerProps) {\r\n const disclaimer = useDisclaimer();\r\n const acceptTriggerRef = useRef<HTMLButtonElement>(null);\r\n\r\n return (\r\n <Dialog.Root\r\n open={disclaimer.open}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n initialFocusEl={() => acceptTriggerRef.current}\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"flex h-full w-full flex-col items-start bg-white p-3xl lg:mx-auto lg:h-auto lg:w-[400px] lg:rounded-xl\">\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <div className=\"w-full grow\">\r\n <Dialog.Title className=\"mt-3xl text-center text-lg font-semibold\">\r\n Age Verification\r\n </Dialog.Title>\r\n <Dialog.Description className=\"text-gray-600 mt-xs text-center text-sm\">\r\n By entering this website I acknowledge and confirmI am 21 years\r\n of age and I agree with the{' '}\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 underline underline-offset-2\"\r\n >\r\n Terms and Conditions.\r\n </button>\r\n </Dialog.Description>\r\n\r\n <div className=\"mt-5 flex items-center justify-center gap-3xl\">\r\n <Image\r\n src={pagcorLogo}\r\n alt=\"\"\r\n className=\"h-[88px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n\r\n <Image\r\n src={responsibleGamingLogo}\r\n alt=\"\"\r\n className=\"h-[62px] w-auto shrink-0\"\r\n draggable={false}\r\n />\r\n </div>\r\n </div>\r\n\r\n <Button\r\n ref={acceptTriggerRef}\r\n type=\"button\"\r\n className=\"mt-4xl\"\r\n onClick={disclaimer.close}\r\n >\r\n Accept\r\n </Button>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","import { addMinutes } from 'date-fns';\r\nimport { clamp } from 'lodash-es';\r\nimport { useLocalStorage, useTimeout } from 'usehooks-ts';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\n\r\nexport function useDisclaimer() {\r\n 'use no memo';\r\n\r\n const sessionQuery = useSessionQuery();\r\n const disclaimerStore = useGlobalStore(\r\n useShallow((state) => state.disclaimer),\r\n );\r\n\r\n const [refreshPausedUntil, setRefreshPausedUntil] =\r\n useLocalStorage<Date | null>(\r\n 'WebPortalDisclaimerRefreshPausedUntil',\r\n null,\r\n {\r\n serializer(v) {\r\n return v?.toISOString() ?? '';\r\n },\r\n deserializer(v) {\r\n return v ? new Date(v) : null;\r\n },\r\n },\r\n );\r\n\r\n const now = new Date();\r\n\r\n const refetchPausedUntilInMs = refreshPausedUntil\r\n ? clamp(refreshPausedUntil.getTime() - now.getTime(), 0, Infinity)\r\n : /* set to zero to trigger timeout function */ 0;\r\n\r\n useTimeout(() => {\r\n disclaimerStore.setOpen(true);\r\n }, refetchPausedUntilInMs);\r\n\r\n return {\r\n open: sessionQuery.isLoading\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated'\r\n ? false\r\n : disclaimerStore.open,\r\n close: () => {\r\n disclaimerStore.setOpen(false);\r\n setRefreshPausedUntil(addMinutes(new Date(), 30));\r\n },\r\n };\r\n}\r\n","import { createContext, useContext } from 'react';\r\nimport invariant from 'tiny-invariant';\r\nimport type { UseFeatureFlagReturn } from './useFeatureFlag';\r\n\r\nexport const FeatureFlagContext = createContext<UseFeatureFlagReturn | null>(\r\n null,\r\n);\r\n\r\nexport const useFeatureFlagContext = () => {\r\n const context = useContext(FeatureFlagContext);\r\n invariant(context);\r\n return context;\r\n};\r\n","import { Portal, Presence } from '@ark-ui/react';\r\nimport type { ReactNode } from 'react';\r\nimport { FeatureFlagContext } from './FeatureFlagContext';\r\nimport { useFeatureFlag } from './useFeatureFlag';\r\n\r\ninterface FeatureFlagProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function FeatureFlagProvider(props: FeatureFlagProviderProps) {\r\n const context = useFeatureFlag();\r\n\r\n return (\r\n <FeatureFlagContext value={context}>\r\n {props.children}\r\n\r\n <Portal>\r\n <Presence\r\n lazyMount\r\n unmountOnExit\r\n present={context.enabled}\r\n className=\"fixed bottom-2 left-1/2 z-toast flex -translate-x-1/2 gap-1 rounded-full bg-black/50 px-1.5 py-0.5 text-2xs leading-tight text-white backdrop-blur-sm ui-open:animate-fade-in ui-closed:animate-fade-out\"\r\n suppressHydrationWarning\r\n >\r\n Experimental features are enabled.{' '}\r\n <button\r\n type=\"button\"\r\n onClick={context.disable}\r\n className=\"underline underline-offset-2\"\r\n >\r\n Disable\r\n </button>\r\n </Presence>\r\n </Portal>\r\n </FeatureFlagContext>\r\n );\r\n}\r\n","import { usePathname, useRouter, useSearchParams } from 'next/navigation';\r\nimport { useEffect } from 'react';\r\nimport { useLocalStorage } from 'usehooks-ts';\r\n\r\nexport interface UseFeatureFlagReturn {\r\n enabled: boolean;\r\n disable: () => void;\r\n}\r\n\r\nexport function useFeatureFlag() {\r\n const [enabled, setEnabled] = useLocalStorage(\r\n 'WebPortalFeatureFlagEnabled',\r\n false,\r\n );\r\n\r\n const router = useRouter();\r\n const pathname = usePathname();\r\n const searchParams = useSearchParams();\r\n\r\n const disable = async () => {\r\n router.push(pathname);\r\n setTimeout(() => {\r\n setEnabled(false);\r\n }, 250);\r\n };\r\n\r\n useEffect(() => {\r\n if (enabled) return;\r\n if (!searchParams.has('future')) return;\r\n setEnabled(true);\r\n }, [enabled, searchParams, setEnabled]);\r\n\r\n return {\r\n enabled,\r\n disable,\r\n };\r\n}\r\n","'use client';\r\n\r\nimport { Dialog, Portal, Presence } from '@ark-ui/react';\r\nimport type { ImageProps } from 'next/image';\r\nimport Image from 'next/image';\r\nimport { useRef } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useDisclosure } from '../../hooks/useDisclosure';\r\nimport { useEndGameSessionMutation } from '../../hooks/useEndGameSessionMutation/useEndGameSessionMutation';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { AlertCircleIcon } from '../../icons/AlertCircleIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { Expand03Icon } from '../../icons/Expand03Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport { Wallet02Icon } from '../../icons/Wallet02Icon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { AlertDialog, Button, IconButton } from '../../ui';\r\n\r\nexport interface GameLaunchProps {\r\n logo: ImageProps['src'];\r\n}\r\n\r\nexport function GameLaunch(props: GameLaunchProps) {\r\n const ref = useRef<HTMLDivElement>(null);\r\n\r\n const maximizeDisclosure = useDisclosure({\r\n defaultOpen: true,\r\n onOpenChange(open) {\r\n if (!open) {\r\n setTimeout(() => {\r\n ref.current?.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'start',\r\n inline: 'start',\r\n });\r\n }, 25);\r\n }\r\n },\r\n });\r\n\r\n const cancelDisclosure = useDisclosure();\r\n const endGameSessionMutation = useEndGameSessionMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n gameLaunch: ctx.gameLaunch,\r\n depositWithdrawal: ctx.depositWithdrawal,\r\n })),\r\n );\r\n\r\n async function endGameSession() {\r\n if (globalStore.gameLaunch.details.status === 'PLAYING') {\r\n await endGameSessionMutation.mutateAsync({\r\n game: globalStore.gameLaunch.details.game,\r\n session: globalStore.gameLaunch.details.session,\r\n });\r\n }\r\n\r\n maximizeDisclosure.setOpen(true);\r\n\r\n globalStore.gameLaunch.setDetails({\r\n status: 'WAITING',\r\n session: null,\r\n game: null,\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n <Presence\r\n ref={ref}\r\n present={\r\n globalStore.gameLaunch.details.status !== 'WAITING' &&\r\n !maximizeDisclosure.open\r\n }\r\n lazyMount\r\n unmountOnExit={globalStore.gameLaunch.details.status === 'WAITING'}\r\n className=\"border-gray-200 w-full overflow-hidden rounded-lg border ui-open:animate-fade-in ui-closed:animate-fade-out\"\r\n >\r\n <section className=\"aspect-[960/540] w-full\">\r\n {globalStore.gameLaunch.details.status === 'LOADING' && (\r\n <div className=\"flex size-full items-center justify-center\">\r\n <SpinnerIcon className=\"size-8\" />\r\n </div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'FAILED' && (\r\n <div>{/* TODO */}</div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'PLAYING' && (\r\n <iframe\r\n src={globalStore.gameLaunch.details.session?.launchUrl ?? ''}\r\n className=\"size-full\"\r\n />\r\n )}\r\n </section>\r\n <section className=\"border-gray-200 flex justify-end gap-lg border-t p-2\">\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n if (globalStore.gameLaunch.details.status !== 'PLAYING') {\r\n endGameSession();\r\n return;\r\n }\r\n\r\n cancelDisclosure.setOpen(true);\r\n }}\r\n disabled={globalStore.gameLaunch.details.status === 'LOADING'}\r\n aria-label=\"Quit Game\"\r\n title=\"Quit\"\r\n >\r\n <XIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => maximizeDisclosure.setOpen(true)}\r\n title=\"Maximize\"\r\n aria-label=\"Maximize\"\r\n >\r\n <Expand03Icon className=\"size-5\" />\r\n </IconButton>\r\n </section>\r\n </Presence>\r\n\r\n <Dialog.Root\r\n open={\r\n globalStore.gameLaunch.details.status !== 'WAITING' &&\r\n maximizeDisclosure.open &&\r\n !cancelDisclosure.open\r\n }\r\n lazyMount\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <Dialog.Positioner className=\"z-dialog fixed inset-0\">\r\n <Dialog.Content className=\"ui-open:animate-dialog-in ui-closed:animate-dialog-out flex size-full flex-col bg-white\">\r\n <section className=\"grid grid-cols-[22rem_auto_22rem] items-center px-4 py-2\">\r\n <div className=\"flex items-center justify-start gap-2\">\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n if (globalStore.gameLaunch.details.status !== 'PLAYING') {\r\n endGameSession();\r\n return;\r\n }\r\n\r\n cancelDisclosure.setOpen(true);\r\n }}\r\n disabled={\r\n globalStore.gameLaunch.details.status === 'LOADING'\r\n }\r\n title=\"Quit\"\r\n aria-label=\"Quit Game\"\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n <div className=\"flex items-center justify-center\">\r\n {!!props.logo && (\r\n <Image\r\n src={props.logo}\r\n height={40}\r\n width={80}\r\n alt=\"\"\r\n className=\"h-9 w-auto shrink-0\"\r\n />\r\n )}\r\n </div>\r\n <div className=\"flex justify-end gap-2\">\r\n <Button\r\n size=\"sm\"\r\n fullWidth={false}\r\n onClick={() => {\r\n globalStore.depositWithdrawal.setOpen(true);\r\n }}\r\n >\r\n <Wallet02Icon className=\"size-5\" />\r\n Wallet\r\n </Button>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => maximizeDisclosure.setOpen(false)}\r\n title=\"Minimize\"\r\n aria-label=\"Minimize\"\r\n >\r\n <Expand03Icon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </section>\r\n <section className=\"grow\">\r\n {globalStore.gameLaunch.details.status === 'LOADING' && (\r\n <div className=\"flex size-full items-center justify-center\">\r\n <SpinnerIcon className=\"size-8\" />\r\n </div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'FAILED' && (\r\n <div>{/* TODO: Error */}</div>\r\n )}\r\n\r\n {globalStore.gameLaunch.details.status === 'PLAYING' && (\r\n <iframe\r\n src={globalStore.gameLaunch.details.session.launchUrl ?? ''}\r\n className=\"size-full\"\r\n />\r\n )}\r\n </section>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n\r\n <AlertDialog.Root\r\n role=\"alertdialog\"\r\n open={cancelDisclosure.open}\r\n onOpenChange={(details) => {\r\n cancelDisclosure.setOpen(details.open);\r\n }}\r\n lazyMount\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Portal>\r\n <AlertDialog.Backdrop />\r\n <AlertDialog.Positioner>\r\n <AlertDialog.Content>\r\n <AlertDialog.Header>\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#FEE4E2] text-[#D92D20]\">\r\n <AlertCircleIcon />\r\n </div>\r\n <AlertDialog.CloseTrigger>\r\n <XIcon />\r\n </AlertDialog.CloseTrigger>\r\n </AlertDialog.Header>\r\n <AlertDialog.Body>\r\n <AlertDialog.Title>Quit Game</AlertDialog.Title>\r\n <AlertDialog.Description>\r\n Are you sure you want to quit?\r\n </AlertDialog.Description>\r\n </AlertDialog.Body>\r\n <AlertDialog.Context>\r\n {(api) => (\r\n <AlertDialog.Footer>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n disabled={endGameSessionMutation.isPending}\r\n onClick={() => {\r\n api.setOpen(false);\r\n }}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n colorScheme=\"danger\"\r\n disabled={endGameSessionMutation.isPending}\r\n onClick={async () => {\r\n await endGameSession();\r\n api.setOpen(false);\r\n }}\r\n >\r\n Proceed\r\n </Button>\r\n </AlertDialog.Footer>\r\n )}\r\n </AlertDialog.Context>\r\n </AlertDialog.Content>\r\n </AlertDialog.Positioner>\r\n </Portal>\r\n </AlertDialog.Root>\r\n </>\r\n );\r\n}\r\n","import {\r\n endGameSession,\r\n endGameSession__legacy,\r\n type Game,\r\n type GameSession,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport {\r\n ENVIRONMENT,\r\n LEGACY_GAME_PROVIDERS,\r\n PLATFORM_CODE,\r\n} from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getEndGameSessionMutationKey } from './getEndGameSessionMutationKey';\r\n\r\nexport const useEndGameSessionMutation: Mutation<\r\n void,\r\n {\r\n game: Game;\r\n session: GameSession;\r\n }\r\n> = (config) => {\r\n const queryClient = getQueryClient();\r\n\r\n return useMutation({\r\n ...config,\r\n mutationKey: getEndGameSessionMutationKey(),\r\n mutationFn: async (input) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n if (LEGACY_GAME_PROVIDERS.includes(input.game.provider)) {\r\n await endGameSession__legacy(input.session.id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n } else {\r\n await endGameSession(input.session.id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n }\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getEndGameSessionMutationKey = (): MutationKey => [\r\n 'mutations/endGameSession',\r\n];\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Expand03Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M21 14V16.2C21 17.8802 21 18.7202 20.673 19.362C20.3854 19.9265 19.9265 20.3854 19.362 20.673C18.7202 21 17.8802 21 16.2 21H14M10 3H7.8C6.11984 3 5.27976 3 4.63803 3.32698C4.07354 3.6146 3.6146 4.07354 3.32698 4.63803C3 5.27976 3 6.11984 3 7.8V10M15 9L21 3M21 3H15M21 3V9M9 15L3 21M3 21H9M3 21L3 15\" />\r\n </svg>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { ark, type HTMLArkProps } from '@ark-ui/react';\r\nimport type { Game } from '@opexa/portal-sdk-core';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCreateGameSessionMutation } from '../../hooks/useCreateGameSessionMutation/useCreateGameSessionMutation';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\nimport { dataAttr } from '../../utils/dataAttr';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport interface GameLaunchTriggerProps extends HTMLArkProps<'button'> {\r\n game: Game;\r\n}\r\n\r\nexport function GameLaunchTrigger(props: GameLaunchTriggerProps) {\r\n const sessionQuery = useSessionQuery();\r\n const createGameSessionMutation = useCreateGameSessionMutation();\r\n const globalStore = useGlobalStore(\r\n useShallow((ctx) => ({\r\n signIn: ctx.signIn,\r\n gameLaunch: ctx.gameLaunch,\r\n })),\r\n );\r\n\r\n const disabled =\r\n sessionQuery.data?.status === 'unauthenticated'\r\n ? false\r\n : globalStore.gameLaunch.details.status !== 'WAITING'\r\n ? true\r\n : props.disabled;\r\n\r\n return (\r\n <ark.button\r\n type=\"button\"\r\n {...props}\r\n onClick={async (e) => {\r\n props.onClick?.(e);\r\n\r\n if (sessionQuery.data?.status === 'unauthenticated') {\r\n return globalStore.signIn.setOpen(true);\r\n }\r\n\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n status: 'LOADING',\r\n session: null,\r\n });\r\n\r\n try {\r\n const session = await createGameSessionMutation.mutateAsync(\r\n props.game,\r\n );\r\n\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n session,\r\n status: 'PLAYING',\r\n });\r\n } catch (error) {\r\n globalStore.gameLaunch.setDetails({\r\n game: props.game,\r\n session: null,\r\n status: 'FAILED',\r\n });\r\n\r\n toaster.error({\r\n description:\r\n error instanceof Error ? error.message : 'Failed to launch game',\r\n });\r\n }\r\n }}\r\n disabled={disabled}\r\n data-disabled={dataAttr(disabled)}\r\n data-state={\r\n sessionQuery.data?.status === 'unauthenticated'\r\n ? globalStore.signIn.open\r\n ? 'open'\r\n : 'closed'\r\n : globalStore.gameLaunch.details.status === 'WAITING'\r\n ? 'closed'\r\n : 'open'\r\n }\r\n />\r\n );\r\n}\r\n","import {\r\n createGameSession,\r\n createGameSession__legacy,\r\n getGameSession,\r\n getGameSession__legacy,\r\n type Game,\r\n type GameSession,\r\n} from '@opexa/portal-sdk-core';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport {\r\n ENVIRONMENT,\r\n LEGACY_GAME_PROVIDERS,\r\n PLATFORM_CODE,\r\n} from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { Mutation } from '../../types';\r\nimport { createPoll } from '../../utils/createPoll';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { getCreateGameSessionMutationKey } from './getCreateGameSessionMutationKey';\r\n\r\nexport const useCreateGameSessionMutation: Mutation<GameSession, Game> = (\r\n config,\r\n) => {\r\n const queryClient = getQueryClient();\r\n\r\n return useMutation({\r\n ...config,\r\n mutationKey: getCreateGameSessionMutationKey(),\r\n mutationFn: async (game) => {\r\n const id = ObjectId.generate(ObjectType.GameSession).toString();\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n if (LEGACY_GAME_PROVIDERS.includes(game.provider)) {\r\n await createGameSession__legacy(\r\n {\r\n id,\r\n game: game.reference,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const data = await createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getGameSession__legacy(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until: (r) => !!r?.launchUrl,\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n )();\r\n\r\n if (!data?.launchUrl) {\r\n const error = new Error();\r\n error.name = 'GameSessionError';\r\n error.message = 'Failed to launch game';\r\n throw error;\r\n }\r\n\r\n return data;\r\n } else {\r\n await createGameSession(\r\n {\r\n id,\r\n game: game.reference,\r\n },\r\n {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n\r\n const data = await createPoll(\r\n async () => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getGameSession(id, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n {\r\n until: (r) => !!r?.launchUrl,\r\n interval: 1000,\r\n maxAttempt: 5,\r\n },\r\n )();\r\n\r\n if (!data?.launchUrl) {\r\n const error = new Error();\r\n error.name = 'GameSessionError';\r\n error.message = 'Failed to launch game';\r\n throw error;\r\n }\r\n\r\n return data;\r\n }\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\r\n\r\nexport const getCreateGameSessionMutationKey = (): MutationKey => [\r\n 'mutations/createGameSession',\r\n];\r\n","import { type GamesInput, getGames } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_ID, SITE_ID } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getGamesQueryKey } from './getGamesQueryKey';\r\n\r\nexport const prefetchGamesQuery = async (input?: GamesInput) => {\r\n await getQueryClient().prefetchInfiniteQuery({\r\n queryKey: getGamesQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n return await getGames(\r\n {\r\n ...input,\r\n after: pageParam,\r\n },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Site-ID': SITE_ID,\r\n 'Platform-ID': PLATFORM_ID,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n });\r\n};\r\n","import type { GamesInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getGamesQueryKey = (input?: GamesInput): QueryKey => ['queries/games', input];\n","'use client';\r\n\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport Image from 'next/image';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useGamesQuery } from '../../hooks/useGamesQuery/useGamesQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport { Button } from '../../ui';\r\nimport { GameLaunchTrigger } from '../GameLaunch';\r\nimport type { GamesProps } from './Games';\r\n\r\nexport function GamesContent(props: GamesProps) {\r\n const numOfRows = props.numOfRows ?? 1;\r\n\r\n const gamesQuery = useGamesQuery({\r\n first: (numOfRows + 1) * 6,\r\n filter: props.filter,\r\n });\r\n\r\n const games =\r\n gamesQuery.data?.pages\r\n .map((page) => page.edges.map((edge) => edge.node))\r\n .flat() ?? [];\r\n\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 3,\r\n breakpoints: {\r\n '(min-width: 1024px)': {\r\n slidesToScroll: 6,\r\n },\r\n },\r\n });\r\n\r\n const [prevBtnDisabled, setPrevBtnDisabled] = useState(true);\r\n const [nextBtnDisabled, setNextBtnDisabled] = useState(true);\r\n\r\n const onPrevButtonClick = useCallback(\r\n () => emblaApi?.scrollPrev(),\r\n [emblaApi],\r\n );\r\n const onNextButtonClick = useCallback(async () => {\r\n if (!emblaApi?.canScrollNext() && gamesQuery.hasNextPage) {\r\n await gamesQuery.fetchNextPage();\r\n emblaApi?.reInit();\r\n await new Promise((resolve) => setTimeout(resolve, 1));\r\n }\r\n\r\n emblaApi?.scrollNext();\r\n }, [emblaApi, gamesQuery]);\r\n\r\n const onSelect = useCallback((emblaApi: UseEmblaCarouselType[1]) => {\r\n setPrevBtnDisabled(!emblaApi?.canScrollPrev());\r\n setNextBtnDisabled(!emblaApi?.canScrollNext());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(emblaApi);\r\n emblaApi.on('reInit', onSelect).on('select', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-lg font-semibold\">{props.heading}</h2>\r\n <div className=\"grow\" />\r\n <div className=\"flex items-center justify-center gap-xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n onClick={onPrevButtonClick}\r\n disabled={prevBtnDisabled}\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n onClick={onNextButtonClick}\r\n disabled={\r\n nextBtnDisabled && !gamesQuery.hasNextPage\r\n ? true\r\n : gamesQuery.isFetchingNextPage\r\n }\r\n aria-label=\"Next\"\r\n >\r\n {gamesQuery.isFetchingNextPage ? (\r\n <SpinnerIcon className=\"size-5\" />\r\n ) : (\r\n <ArrowRightIcon className=\"size-5\" />\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div ref={emblaRef} className=\"relative mt-lg lg:overflow-hidden\">\r\n <div\r\n className={twMerge(\r\n 'grid auto-cols-[calc((100%-(0.375rem*2))/3)] grid-flow-col gap-sm lg:auto-cols-[calc((100%-(0.5rem*5))/6)] lg:gap-md',\r\n numOfRows === 3\r\n ? 'grid-rows-3'\r\n : numOfRows === 2\r\n ? 'grid-rows-2'\r\n : 'grid-rows-1',\r\n )}\r\n >\r\n {games.map((game) => (\r\n <GameLaunchTrigger\r\n key={game.id}\r\n game={game}\r\n className=\"block w-full\"\r\n >\r\n <Image\r\n src={game.image}\r\n alt=\"\"\r\n width={200}\r\n height={200}\r\n priority\r\n className=\"aspect-square w-full rounded-t-md object-cover\"\r\n />\r\n\r\n <span className=\"bg-gray-50 block w-full truncate rounded-b-md px-2 py-2.5 text-center text-xs font-semibold\">\r\n {game.name}\r\n </span>\r\n </GameLaunchTrigger>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n type Game,\r\n type GamesInput,\r\n type PaginatedQueryResult,\r\n getGames,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_ID, SITE_ID } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getGamesQueryKey } from './getGamesQueryKey';\r\n\r\nexport const useGamesQuery: InfiniteQuery<\r\n PaginatedQueryResult<Game>,\r\n GamesInput\r\n> = (input, config) => {\r\n return useInfiniteQuery({\r\n refetchOnMount: false,\r\n refetchOnReconnect: false,\r\n refetchOnWindowFocus: false,\r\n ...config,\r\n queryKey: getGamesQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getGames(\r\n {\r\n ...input,\r\n after: pageParam,\r\n },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Site-ID': SITE_ID,\r\n 'Platform-ID': PLATFORM_ID,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function ArrowLeftIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M19 12H5M5 12L12 19M5 12L12 5\" />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ArrowRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M5 12H19M19 12L12 5M19 12L12 19\" />\r\n </svg>\r\n );\r\n}\r\n","import type { GamesInput } from '@opexa/portal-sdk-core';\r\nimport { prefetchGamesQuery } from '../../hooks/useGamesQuery/prefetchGamesQuery';\r\nimport { GamesContent } from './GamesContent';\r\n\r\nexport interface GamesProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n /** @default 1 */\r\n numOfRows?: 1 | 2 | 3;\r\n className?: string;\r\n filter?: GamesInput['filter'];\r\n}\r\n\r\nexport async function Games(props: GamesProps) {\r\n const numOfRows = props.numOfRows ?? 1;\r\n\r\n await prefetchGamesQuery({\r\n first: (numOfRows + 1) * 6,\r\n filter: props.filter,\r\n });\r\n\r\n return <GamesContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useJackpotsQuery } from '../../hooks/useJackpotsQuery/useJackpotsQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Button } from '../../ui';\r\nimport type { JackpotCounterProps } from './JackpotCounter';\r\nimport { JackpotCounterItem } from './JackpotCounterItem';\r\n\r\nexport function JackpotCounterContent(props: JackpotCounterProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n const scrollPrev = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollPrev();\r\n }, [emblaApi]);\r\n\r\n const scrollNext = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const [canScrollPrev, setCanScrollPrev] = useState(false);\r\n const [canScrollNext, setCanScrollNext] = useState(false);\r\n\r\n const onSelect = useCallback(() => {\r\n if (!emblaApi) return;\r\n setCanScrollPrev(emblaApi.canScrollPrev());\r\n setCanScrollNext(emblaApi.canScrollNext());\r\n }, [emblaApi]);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect();\r\n emblaApi.on('select', onSelect);\r\n emblaApi.on('reInit', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n const jackpotsQuery = useJackpotsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n deleted: {\r\n equal: false,\r\n },\r\n },\r\n sort: {\r\n cursor: 'POOL',\r\n order: 'DESC',\r\n },\r\n });\r\n\r\n const jackpots =\r\n jackpotsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];\r\n\r\n if (jackpots.length <= 0) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center justify-between\">\r\n <div className=\"text-lg font-semibold\">{props.heading}</div>\r\n <div className=\"flex items-center md:gap-3xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n aria-label=\"Next\"\r\n >\r\n <span className=\"sr-only\">Next</span>\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"relative mt-lg lg:overflow-hidden\" ref={emblaRef}>\r\n <div className=\"flex gap-2.5\">\r\n {jackpots.map((jackpot) => (\r\n <JackpotCounterItem\r\n key={jackpot.id}\r\n jackpot={jackpot}\r\n className={\r\n jackpots.length < 2\r\n ? 'w-full'\r\n : 'w-full lg:w-[calc((100%-0.75rem)/2)]'\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n getJackpots,\r\n type Jackpot,\r\n type JackpotsInput,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getJackpotsQueryKey } from './getJackpotsQueryKey';\r\n\r\nexport const useJackpotsQuery: InfiniteQuery<\r\n PaginatedQueryResult<Jackpot>,\r\n JackpotsInput\r\n> = (input, config) => {\r\n const query = useInfiniteQuery({\r\n ...config,\r\n queryKey: getJackpotsQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getJackpots(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo.hasNextPage) {\r\n return lastPage.pageInfo.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { JackpotsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getJackpotsQueryKey = (input?: JackpotsInput): QueryKey => ['queries/jackpots', input];\n","'use client';\r\n\r\nimport { Progress } from '@ark-ui/react';\r\nimport type { Jackpot } from '@opexa/portal-sdk-core';\r\nimport Image from 'next/image';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { ArrowNarrowUpRightIcon } from '../../icons/ArrowNarrowUpRightIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport closeChest from '../../images/close-chest.png';\r\nimport openChest from '../../images/open-chest.png';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport styles from './JackpotCounter.module.css';\r\n\r\nexport interface JackpotCounterCardProps {\r\n jackpot: Jackpot;\r\n className?: string;\r\n}\r\n\r\nexport function JackpotCounterItem({\r\n jackpot,\r\n className,\r\n}: JackpotCounterCardProps) {\r\n const localeInfo = useLocaleInfo();\r\n\r\n const isPayingOut = jackpot.drawing;\r\n const jackpotAmount = isPayingOut\r\n ? jackpot.maximumJackpotPoolLimit\r\n : jackpot.pool;\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n 'bg-gray-50 border-gray-200 flex shrink-0 flex-col space-y-2 rounded-sm border p-3 text-center',\r\n className,\r\n )}\r\n >\r\n <div className=\"flex w-full justify-between\">\r\n <div className=\"flex flex-col gap-1\">\r\n {isPayingOut ? (\r\n <div className=\"border-gray-700 bg-gray-300 flex w-fit items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <span className=\"full bg-gray-900 size-1.5 animate-pulse rounded\" />\r\n Paying Out\r\n </div>\r\n ) : (\r\n <div className=\"border-gray-700 bg-gray-300 flex w-fit items-center rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <ArrowNarrowUpRightIcon className=\"size-3.5\" />\r\n Accumulating\r\n </div>\r\n )}\r\n\r\n <div className=\"text-left text-lg font-medium\">{jackpot.name}</div>\r\n <div className=\"bg-gray-950 text-gray-300 w-fit rounded-md px-2 py-1 text-2xl font-bold\">\r\n {formatNumber(jackpotAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n maxDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <Image\r\n width={100}\r\n height={100}\r\n src={isPayingOut ? openChest : closeChest}\r\n alt=\"closeChest\"\r\n quality={100}\r\n className=\"h-25 w-25 size-full\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-between\">\r\n <div className=\"text-xs font-medium\">\r\n {formatNumber(0, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })}\r\n </div>\r\n\r\n <div className=\"relative flex items-center justify-end gap-1.5\">\r\n {isPayingOut ? (\r\n <div className=\"flex w-6 items-center\">\r\n <div\r\n className={twMerge(\r\n 'absolute left-0',\r\n styles['animate-arrow-red-flash-1'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-1.5',\r\n styles['animate-arrow-red-flash-2'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-3',\r\n styles['animate-arrow-red-flash-3'],\r\n )}\r\n >\r\n <ChevronLeftIcon className=\"size-4.5\" />\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"flex w-6 items-center\">\r\n <div\r\n className={twMerge(\r\n 'absolute left-0',\r\n styles['animate-arrow-green-flash-1'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-1.5',\r\n styles['animate-arrow-green-flash-2'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n <div\r\n className={twMerge(\r\n 'absolute left-3',\r\n styles['animate-arrow-green-flash-3'],\r\n )}\r\n >\r\n <ChevronRightIcon className=\"size-4.5\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"text-xs font-medium\">\r\n {formatNumber(jackpot?.maximumJackpotPoolLimit, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Progress.Root\r\n className=\"bg-gray-200 h-2 w-full rounded-full\"\r\n max={100}\r\n value={33}\r\n >\r\n <Progress.Track className=\"bg-gray-950 h-full rounded-full\">\r\n <Progress.Range className=\"bg-gray-300 h-full rounded-full\" />\r\n </Progress.Track>\r\n </Progress.Root>\r\n\r\n <div className=\"mt-1 text-start text-[10px]\">\r\n {isPayingOut\r\n ? `The pot has hit ${formatNumber(jackpot?.maximumJackpotPoolLimit, {\r\n currency: localeInfo.currency.code,\r\n compact: true,\r\n })} Play now for your chance to win big! 🔥`\r\n : getAccumulatingJackpotDescription(\r\n Number(jackpot?.pool) ?? 0,\r\n Number(jackpot?.maximumJackpotPoolLimit) ?? 0,\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst getAccumulatingJackpotDescription = (\r\n part: number,\r\n total: number,\r\n): string => {\r\n const percentage = total === 0 ? 0 : (part / total) * 100;\r\n\r\n return percentage <= 90\r\n ? 'The jackpot is heating up! Keep playing to stay in the action and watch it grow!'\r\n : '🔥 It’s about to pop! Stay in the game for your shot at the prize!';\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function ArrowNarrowUpRightIcon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M6 18L18 6M18 6H10M18 6V14\" />\r\n </svg>\r\n );\r\n}\r\n","import { JackpotCounterContent } from './JackpotCounterContent';\r\n\r\nexport interface JackpotCounterProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n className?: string;\r\n}\r\n\r\nexport async function JackpotCounter(props: JackpotCounterProps) {\r\n /*\r\n await prefetchJackpotsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n deleted: {\r\n equal: false,\r\n },\r\n },\r\n sort: {\r\n cursor: 'POOL',\r\n order: 'DESC',\r\n },\r\n });\r\n */\r\n\r\n return <JackpotCounterContent {...props} />;\r\n}\r\n","import Primitive from 'react-fast-marquee';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\nexport interface MarqueeProps {\r\n children?: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport function Marquee(props: MarqueeProps) {\r\n return (\r\n <div\r\n className={twMerge(\r\n 'border-gray-200 text-gray-700 flex gap-lg rounded-lg border p-1 pr-2.5 text-sm font-medium',\r\n props.className,\r\n )}\r\n >\r\n <div className=\"border-gray-200 flex shrink-0 items-center gap-sm rounded-sm border px-2 py-0.5\">\r\n <span className=\"bg-green-400 outline-green-400/20 size-2 rounded-full outline-4\" />\r\n <span>What&apos;s new</span>\r\n </div>\r\n <Primitive className=\"grow\">\r\n {props.children}\r\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n </Primitive>\r\n </div>\r\n );\r\n}\r\n","import { dehydrate, HydrationBoundary } from '@tanstack/react-query';\r\nimport type { PropsWithChildren } from 'react';\r\nimport { prefetchPlatformQuery } from '../../hooks/usePlatformQuery/prefetchPlatformQuery';\r\nimport { prefetchSessionQuery } from '../../hooks/useSessionQuery/prefetchSessionQuery';\r\nimport { prefetchWalletQuery } from '../../hooks/useWalletQuery/prefetchWalletQuery';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { FeatureFlagProvider } from '../FeatureFlagProvider';\r\nimport { Providers } from './Providers';\r\n\r\nexport async function PortalProvider({ children }: PropsWithChildren) {\r\n const queryClient = getQueryClient();\r\n\r\n await Promise.all([\r\n prefetchSessionQuery(),\r\n prefetchPlatformQuery(),\r\n prefetchWalletQuery(),\r\n ]);\r\n\r\n return (\r\n <Providers>\r\n <HydrationBoundary state={dehydrate(queryClient)}>\r\n <FeatureFlagProvider>{children}</FeatureFlagProvider>\r\n </HydrationBoundary>\r\n </Providers>\r\n );\r\n}\r\n","import { getPlatform } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getPlatformQueryKey } from './getPlatformQueryKey';\r\n\r\nexport async function prefetchPlatformQuery() {\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getPlatformQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPlatform({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n}\r\n","import { cookies } from 'next/headers';\nimport { ACCESS_TOKEN_COOKIE_NAME } from '../../constants';\nimport type { Session } from '../../types';\n\nexport async function getSession(): Promise<Session> {\n const Cookies = await cookies();\n const accessToken = Cookies.get(ACCESS_TOKEN_COOKIE_NAME)?.value;\n\n return accessToken\n ? { status: 'authenticated', token: accessToken }\n : { status: 'unauthenticated' };\n}\n","import { getSession } from '../../services/server/getSession';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from './getSessionQueryKey';\n\nexport function prefetchSessionQuery() {\n return getQueryClient().prefetchQuery({\n queryKey: getSessionQueryKey(),\n queryFn: async () => {\n return await getSession();\n },\n });\n}\n","import { getWallet } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/server/getSession';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getWalletQueryKey } from './getWalletQueryKey';\r\n\r\nexport const prefetchWalletQuery = async () => {\r\n const session = await getSession();\r\n\r\n if (session.status === 'unauthenticated') return;\r\n\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getWalletQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getWallet({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","'use client';\r\n\r\nimport { Toast, Toaster } from '@ark-ui/react';\r\nimport { QueryClientProvider } from '@tanstack/react-query';\r\n\r\nimport type { PropsWithChildren } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { AlertCircleIcon } from '../../icons/AlertCircleIcon';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function Providers({ children }: PropsWithChildren) {\r\n const queryClient = getQueryClient();\r\n\r\n return (\r\n <QueryClientProvider client={queryClient}>\r\n {children}\r\n\r\n <Toaster toaster={toaster}>\r\n {(toast) => (\r\n <Toast.Root\r\n key={toast.id}\r\n className=\"shadow-xs border-gray-300 group z-[var(--z-index)] flex h-[var(--height)] w-[860px] max-w-full scale-[var(--scale)] items-center gap-lg rounded-xl border bg-white p-xl opacity-[var(--opacity)] transition-all duration-300 [translate:var(--x)_var(--y)_0]\"\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-9.5 items-center justify-center rounded-full border-2',\r\n toast.type === 'error'\r\n ? 'border-red-500/15'\r\n : 'border-green-500/15',\r\n )}\r\n >\r\n <div\r\n className={twMerge(\r\n 'flex size-7 items-center justify-center rounded-full border-2',\r\n toast.type === 'error'\r\n ? 'border-red-500/35'\r\n : 'border-green-500/35',\r\n )}\r\n >\r\n <AlertCircleIcon\r\n className={twMerge(\r\n 'size-5',\r\n toast.type === 'error' ? 'text-red-500' : 'text-green-500',\r\n )}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"grow text-sm leading-none\">\r\n <Toast.Title className=\"font-semibold\">\r\n {toast.title\r\n ? toast.title\r\n : toast.type === 'error'\r\n ? 'Error'\r\n : 'Success'}\r\n </Toast.Title>\r\n <Toast.Description className=\"text-gray-700 mt-1\">\r\n {toast.description\r\n ? toast.description\r\n : toast.type === 'error'\r\n ? 'Something went wrong.'\r\n : 'Operation completed successfully.'}\r\n </Toast.Description>\r\n </div>\r\n <Toast.CloseTrigger className=\"text-gray-400 hover:text-gray-500 self-start\">\r\n <XIcon className=\"size-5\" />\r\n </Toast.CloseTrigger>\r\n </Toast.Root>\r\n )}\r\n </Toaster>\r\n </QueryClientProvider>\r\n );\r\n}\r\n","import { getPromos } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getPromosQueryKey } from './getPromosQueryKey';\r\n\r\nexport const prefetchPromosQuery = async () => {\r\n await getQueryClient().prefetchQuery({\r\n queryKey: getPromosQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPromos({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getPromosQueryKey = (): QueryKey => ['queries/promos'];\n","'use client';\r\n\r\nimport useEmblaCarousel, {\r\n type UseEmblaCarouselType,\r\n} from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { usePromosQuery } from '../../hooks/usePromosQuery/usePromosQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Gift01Icon } from '../../icons/Gift01Icon';\r\nimport { Button } from '../../ui';\r\nimport { Empty } from '../Empty';\r\nimport { PromosItem } from './PromoItem';\r\nimport type { PromoProps } from './Promos';\r\n\r\nexport function PromosContent(props: PromoProps) {\r\n const promosQuery = usePromosQuery({});\r\n\r\n const promos = promosQuery.data || [];\r\n\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n breakpoints: {\r\n '(min-width: 1024px)': {\r\n slidesToScroll: 3,\r\n },\r\n },\r\n });\r\n\r\n const [prevBtnDisabled, setPrevBtnDisabled] = useState(true);\r\n const [nextBtnDisabled, setNextBtnDisabled] = useState(true);\r\n\r\n const onPrevButtonClick = useCallback(\r\n () => emblaApi?.scrollPrev(),\r\n [emblaApi],\r\n );\r\n\r\n const onNextButtonClick = useCallback(async () => {\r\n emblaApi?.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const onSelect = useCallback((emblaApi: UseEmblaCarouselType[1]) => {\r\n setPrevBtnDisabled(!emblaApi?.canScrollPrev());\r\n setNextBtnDisabled(!emblaApi?.canScrollNext());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(emblaApi);\r\n emblaApi.on('reInit', onSelect).on('select', onSelect);\r\n }, [emblaApi, onSelect]);\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"flex items-center\">\r\n <h2 className=\"text-lg font-semibold\">{props.heading}</h2>\r\n <div className=\"grow\" />\r\n <div className=\"flex items-center justify-center gap-xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n onClick={onPrevButtonClick}\r\n disabled={prevBtnDisabled}\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n onClick={onNextButtonClick}\r\n disabled={nextBtnDisabled}\r\n aria-label=\"Next\"\r\n >\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {promos.length <= 0 && (\r\n <Empty\r\n icon={Gift01Icon}\r\n title=\"No Promos\"\r\n message=\"No promo is currently available.\"\r\n className=\"mt-lg\"\r\n />\r\n )}\r\n\r\n {promos.length >= 1 && (\r\n <div ref={emblaRef} className=\"relative mt-lg lg:overflow-hidden\">\r\n <div\r\n className={twMerge(\r\n 'grid auto-cols-[calc((100%-(0.375rem*2))/1)] grid-flow-col gap-sm lg:auto-cols-[calc((100%-(0.5rem*5))/3)] lg:gap-md',\r\n )}\r\n >\r\n {promos.map((promo) => (\r\n <PromosItem\r\n key={promo.id}\r\n promo={promo}\r\n shouldShowDescription={props.shouldShowDescription}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { getPromos, type Promo } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getPromosQueryKey } from './getPromosQueryKey';\r\n\r\nexport const usePromosQuery: Query<Promo[]> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getPromosQueryKey(),\r\n queryFn: async ({ signal }) => {\r\n return await getPromos({\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Gift01Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M12 6V22M12 6H8.46429C7.94332 6 7.4437 5.78929 7.07533 5.41421C6.70695 5.03914 6.5 4.53043 6.5 4C6.5 3.46957 6.70695 2.96086 7.07533 2.58579C7.4437 2.21071 7.94332 2 8.46429 2C11.2143 2 12 6 12 6ZM12 6H15.5357C16.0567 6 16.5563 5.78929 16.9247 5.41421C17.293 5.03914 17.5 4.53043 17.5 4C17.5 3.46957 17.293 2.96086 16.9247 2.58579C16.5563 2.21071 16.0567 2 15.5357 2C12.7857 2 12 6 12 6ZM20 11V18.8C20 19.9201 20 20.4802 19.782 20.908C19.5903 21.2843 19.2843 21.5903 18.908 21.782C18.4802 22 17.9201 22 16.8 22L7.2 22C6.07989 22 5.51984 22 5.09202 21.782C4.71569 21.5903 4.40973 21.2843 4.21799 20.908C4 20.4802 4 19.9201 4 18.8V11M2 7.6L2 9.4C2 9.96005 2 10.2401 2.10899 10.454C2.20487 10.6422 2.35785 10.7951 2.54601 10.891C2.75992 11 3.03995 11 3.6 11L20.4 11C20.9601 11 21.2401 11 21.454 10.891C21.6422 10.7951 21.7951 10.6422 21.891 10.454C22 10.2401 22 9.96005 22 9.4V7.6C22 7.03995 22 6.75992 21.891 6.54601C21.7951 6.35785 21.6422 6.20487 21.454 6.10899C21.2401 6 20.9601 6 20.4 6L3.6 6C3.03995 6 2.75992 6 2.54601 6.10899C2.35785 6.20487 2.20487 6.35785 2.10899 6.54601C2 6.75992 2 7.03995 2 7.6Z\" />\r\n </svg>\r\n );\r\n}\r\n","import type { Promo } from '@opexa/portal-sdk-core';\r\nimport Image from 'next/image';\r\nimport { useRouter } from 'next/navigation';\r\nimport { twJoin } from 'tailwind-merge';\r\nimport { Button } from '../../ui';\r\n\r\ninterface PromosItemProps {\r\n promo: Promo;\r\n shouldShowDescription?: boolean;\r\n}\r\n\r\nexport function PromosItem(props: PromosItemProps) {\r\n const { promo } = props;\r\n const router = useRouter();\r\n\r\n return (\r\n <div\r\n key={promo.id}\r\n className=\"border-gray-50 bg-accent-50 relative flex h-full flex-col rounded-md border\"\r\n >\r\n {promo.banner.url && (\r\n <Image\r\n src={promo.banner.url}\r\n alt={promo.name}\r\n width={1200}\r\n height={500}\r\n priority\r\n className=\"aspect-[1200/500] w-full rounded-t-md object-cover\"\r\n />\r\n )}\r\n <div className=\"flex flex-grow flex-col p-4\">\r\n <p\r\n className={twJoin(\r\n 'w-full text-xl font-bold',\r\n props.shouldShowDescription ? 'text-start' : 'text-center',\r\n )}\r\n >\r\n {promo.name}\r\n </p>\r\n\r\n {props.shouldShowDescription && promo.description && (\r\n <p\r\n className=\"text-gray-600 mb-2 line-clamp-2 w-full overflow-hidden text-start text-sm\"\r\n dangerouslySetInnerHTML={{ __html: promo.description }}\r\n />\r\n )}\r\n\r\n <div className=\"mt-auto pt-4\">\r\n <Button\r\n className=\"w-full\"\r\n variant=\"outline\"\r\n onClick={() => router.push(`/promos/${promo.id}`)}\r\n >\r\n Read More\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { prefetchPromosQuery } from '../../hooks/usePromosQuery/prefetchPromosQuery';\r\nimport { PromosContent } from './PromosContent';\r\n\r\nexport interface PromoProps {\r\n heading: string;\r\n seeAllUrl: string;\r\n /** @default true */\r\n shouldShowDescription?: boolean;\r\n /** @default 1 */\r\n numOfRows?: 1 | 2 | 3;\r\n className?: string;\r\n}\r\n\r\nexport async function Promos(props: PromoProps) {\r\n await prefetchPromosQuery();\r\n\r\n return <PromosContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { useSessionQuery } from '../../hooks/useSessionQuery/useSessionQuery';\r\n\r\ninterface ProtectedProps {\r\n children: React.ReactNode;\r\n fallback?: React.ReactNode;\r\n}\r\n\r\nexport function Protected(props: ProtectedProps) {\r\n const query = useSessionQuery();\r\n return query.data?.status === 'authenticated'\r\n ? props.children\r\n : (props.fallback ?? null);\r\n}\r\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Dialog } from '../../ui';\r\nimport { SignInForm } from './SignInForm';\r\n\r\nexport interface SignInProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignIn(props: SignInProps) {\r\n const signInStore = useGlobalStore(useShallow((popups) => popups.signIn));\r\n\r\n return (\r\n <Dialog.Root\r\n open={signInStore.open}\r\n onOpenChange={(details) => {\r\n signInStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? (\r\n <button type=\"button\" className=\"px-3.5 font-semibold\">\r\n Login\r\n </button>\r\n )}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignInForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCooldown } from '../../hooks/useCooldown';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignInMutation } from '../../hooks/useSigninMutation/useSignInMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { FacebookIcon } from '../../icons/FacebookIcon';\r\nimport { GoogleIcon } from '../../icons/GoogleIcon';\r\nimport { Button, Checkbox, Field, PinInput } from '../../ui';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignInForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const signUpStore = useGlobalStore(useShallow((popups) => popups.signUp));\r\n const signInMutation = useSignInMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n const cooldown = useCooldown({\r\n max: 60,\r\n duration: 1000 * 60,\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Log in to your account\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Welcome back! Please enter your details.\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(data.mobileNumber),\r\n strict: true,\r\n });\r\n\r\n setStep(2);\r\n cooldown.start();\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error\r\n ? e.message\r\n : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label>Mobile Number</Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"pl-11\"\r\n placeholder={`${localeInfo.mobileNumber.areaCode}${localeInfo.mobileNumber.example}`}\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText>\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-xl\"\r\n disabled={step1Form.formState.isSubmitting}\r\n >\r\n Log In\r\n </Button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control>\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label>\r\n I confirm that I am at least 21 years old, not listed in\r\n the PAGCOR NDRP, not a GEL license holder, government\r\n employee, or member of the Armed Forces of the\r\n Philippines. I am not playing in a public space and agree\r\n to the Terms of Use and Privacy Policy. Ineligible\r\n accounts will have their funds forfeited to the\r\n government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n\r\n <div className=\"relative mt-5 text-center\">\r\n <hr className=\"-translte-y-1/2 text-gray-200 absolute top-1/2 w-full\" />\r\n <span className=\"text-gray-500 relative bg-white px-md text-center text-sm font-semibold\">\r\n OR\r\n </span>\r\n </div>\r\n\r\n <div className=\"mt-5\">\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <GoogleIcon className=\"size-6\" />\r\n Continue with Google\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"mt-lg\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n }}\r\n >\r\n <FacebookIcon className=\"size-6\" />\r\n Continue with Facebook\r\n </Button>\r\n </div>\r\n </div>\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signUpStore.setOpen(true);\r\n }}\r\n >\r\n Sign up\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Check your Phone\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signInMutation.mutateAsync({\r\n type: 'MOBILE_NUMBER',\r\n mobileNumber: mobileNumberParser.format(mobileNumber),\r\n verificationCode: verificationCode.join(''),\r\n });\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n description: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control>\r\n <PinInput.Input index={0} />\r\n <PinInput.Input index={1} />\r\n <PinInput.Input index={2} />\r\n <PinInput.Input index={3} />\r\n <PinInput.Input index={4} />\r\n <PinInput.Input index={5} />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step2Form.formState.isSubmitting}\r\n >\r\n Verify and Play\r\n </Button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">\r\n Didn&apos;t recieve the code?\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 font-semibold\"\r\n disabled={cooldown.cooling}\r\n onClick={async () => {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(\r\n step1Form.getValues('mobileNumber'),\r\n ),\r\n });\r\n\r\n cooldown.start();\r\n }}\r\n >\r\n {cooldown.cooling\r\n ? `Resend in ${cooldown.countdown}s`\r\n : 'Resend'}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n cooldown.stop();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import { clamp, noop } from 'lodash-es';\nimport { useCallback, useEffect, useState } from 'react';\n\ninterface UseCooldownOptions {\n /** @default 0 */\n min?: number;\n /** @default 10 */\n max?: number;\n /**\n * The duration of the cooldown in milliseconds.\n * @default 10000\n */\n duration?: number;\n /** @default false */\n autoplay?: boolean;\n /** @default false */\n allowPause?: boolean;\n onCooldown?: () => void;\n}\n\ninterface UseCooldownReturn {\n /** Starts or pauses the cooldown */\n start: () => void;\n /** Restarts the cooldown */\n restart: () => void;\n /** Stops the cooldown */\n stop: () => void;\n /** The current countdown value */\n countdown: number;\n /** Whether the cooldown has started */\n cooling: boolean;\n /** Whether the cooldown is paused */\n paused: boolean;\n}\n\n/**\n * @example\n * ```ts\n * const cooldown = useCooldown({\n * max: 60,\n * duration: 1000 * 60,\n * autoplay: false,\n * allowPause: false,\n * });\n *\n */\nexport function useCooldown(opts?: UseCooldownOptions): UseCooldownReturn {\n 'use no memo';\n\n const min = opts?.min ?? 0;\n const max = opts?.max ?? 10;\n const duration = opts?.duration ?? 10000;\n const autoplay = opts?.autoplay ?? false;\n const allowPause = opts?.allowPause ?? false;\n const onCooldown = opts?.onCooldown ?? noop;\n\n const [paused, setPaused] = useState(false);\n const [cooling, setCooling] = useState(false);\n const [countdown, setCountdown] = useState(min);\n const [autoPlayed, setAutoplayed] = useState(false);\n\n const start = useCallback(() => {\n /* is it paused? */\n if (paused) {\n setPaused(false);\n return;\n }\n\n /* is it still cooling down? */\n if (cooling) {\n /* do we allow pause? */\n if (allowPause) {\n setPaused(true);\n }\n\n return;\n }\n\n setCooling(true);\n setCountdown(max - 1);\n }, [allowPause, cooling, max, paused]);\n\n function stop() {\n setPaused(false);\n setCooling(false);\n setCountdown(min);\n }\n\n function restart() {\n stop();\n start();\n }\n\n useEffect(() => {\n let timer: NodeJS.Timeout;\n\n if (cooling && !paused) {\n timer = setInterval(() => {\n setCountdown(round(clamp(countdown - 1, min, max)));\n\n if (countdown <= min) {\n clearInterval(timer);\n setCountdown(min);\n setCooling(false);\n onCooldown();\n }\n }, duration / max);\n }\n\n return () => {\n if (timer) {\n clearInterval(timer);\n }\n };\n });\n\n useEffect(() => {\n if (cooling) return;\n if (autoPlayed) return;\n if (!autoplay) return;\n start();\n setAutoplayed(true);\n }, [autoPlayed, autoplay, cooling, start]);\n\n useEffect(() => {\n return () => {\n setCooling(false);\n setPaused(false);\n setCountdown(min);\n setAutoplayed(false);\n };\n }, [min]);\n\n return {\n start,\n restart,\n stop,\n paused,\n cooling,\n countdown,\n };\n}\n\nfunction round(n: number) {\n return Math.round((n + Number.EPSILON) * 100) / 100;\n}\n","import { useLocaleInfo } from './useLocaleInfo';\n\nexport function useMobileNumberParser() {\n const localeInfo = useLocaleInfo();\n\n /**\n * Formats a mobile number based on the current locale information.\n * Adds the area code if it is not present and ensures the number is in the correct format.\n * @example\n * ```ts\n * format('9190000001'); // '+639190000001'\n * format('09190000001'); // '+639190000001'\n * format('639190000001'); // '+639190000001'\n * format('+639190000001'); // '+639190000001'\n * ```\n */\n const format = (value: string) => {\n if (value.startsWith(localeInfo.mobileNumber.areaCode)) {\n return value;\n }\n\n if (value.startsWith('0')) {\n return localeInfo.mobileNumber.areaCode + value.substring(1);\n }\n\n if (value.startsWith(localeInfo.mobileNumber.areaCode.substring(1))) {\n return '+' + value;\n }\n\n return localeInfo.mobileNumber.areaCode + value;\n };\n\n /**\n * Parses a mobile number based on the current locale information.\n * Returns the area code and the mobile number as separate values.\n * @example\n * ```ts\n * parse('+639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('639190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('09190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * parse('9190000001'); // { mobileNumber: '9190000001', areaCode: '+63' }\n * ```\n */\n const parse = (value: string) => {\n const mobileNumber = format(value).replace(localeInfo.mobileNumber.areaCode, '');\n\n return {\n mobileNumber: mobileNumber,\n areaCode: localeInfo.mobileNumber.areaCode,\n };\n };\n\n /**\n * Validates a mobile number based on the current locale information.\n * @example\n * ```ts\n * validate('9190000001'); // true\n * validate('09190000001'); // true\n * validate('639190000001'); // true\n * validate('+639190000001'); // true\n * ```\n */\n const validate = (value: unknown): value is string => {\n return typeof value === 'string' && localeInfo.mobileNumber.pattern.test(value);\n };\n\n return {\n validate,\n format,\n parse,\n };\n}\n","import {\r\n sendVerificationCode,\r\n type SendVerificationCodeInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Mutation } from '../../types';\r\nimport { getSendVerificationCodeMutationKey } from './getSendVerificationCodeMutationKey';\r\n\r\nexport const useSendVerificationCodeMutation: Mutation<\r\n void,\r\n SendVerificationCodeInput\r\n> = (config) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSendVerificationCodeMutationKey(),\r\n mutationFn: async (input) => {\r\n await sendVerificationCode(input, {\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSendVerificationCodeMutationKey = (): MutationKey => [\n 'mutations/sendVerificationCode',\n];\n","import type { Authenticator } from '@opexa/portal-sdk-core';\nimport { useMutation } from '@tanstack/react-query';\nimport { signIn, type SignInInput } from '../../services/client/signIn';\nimport type { Mutation } from '../../types';\nimport { getQueryClient } from '../../utils/getQueryClient';\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\nimport { getSignInMutationKey } from './getSignInMutationKey';\n\nexport const useSignInMutation: Mutation<Authenticator | null, SignInInput> = (config) => {\n const queryClient = getQueryClient();\n\n return useMutation({\n ...config,\n mutationKey: getSignInMutationKey(),\n mutationFn: async (input) => {\n const authenticator = await signIn(input);\n\n if (!authenticator) {\n await queryClient.invalidateQueries({\n queryKey: getSessionQueryKey(),\n });\n }\n\n return authenticator;\n },\n });\n};\n","import type { Authenticator, CreateSessionInput } from '@opexa/portal-sdk-core';\r\nimport { BYPASS_RECAPTCHA } from '../../constants';\r\nimport type { ApiResponse } from '../../types';\r\n\r\nexport type SignInInput = CreateSessionInput;\r\n\r\nexport async function signIn(\r\n input: SignInInput,\r\n): Promise<Authenticator | null> {\r\n const res = await fetch('/api/sessions', {\r\n body: JSON.stringify(input),\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n });\r\n\r\n const json = (await res.json()) as ApiResponse<Authenticator | null>;\r\n\r\n if (!json.ok) {\r\n const error = new Error();\r\n error.name = 'SignInError';\r\n error.message = 'Failed to sign in';\r\n throw error;\r\n }\r\n\r\n return json.data ?? null;\r\n}\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignInMutationKey = (): MutationKey => ['mutations/signIn'];\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function FacebookIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 256 256\"\n {...props}\n >\n <path\n fill=\"#1877F2\"\n d=\"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445\"\n />\n <path\n fill=\"#FFF\"\n d=\"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z\"\n />\n </svg>\n );\n}\n","import type { ComponentPropsWithRef } from 'react';\n\nexport function GoogleIcon(props: ComponentPropsWithRef<'svg'>) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 128 128\"\n {...props}\n >\n <path\n fill=\"#fff\"\n d=\"M44.59 4.21a63.28 63.28 0 0 0 4.33 120.9a67.6 67.6 0 0 0 32.36.35a57.13 57.13 0 0 0 25.9-13.46a57.44 57.44 0 0 0 16-26.26a74.3 74.3 0 0 0 1.61-33.58H65.27v24.69h34.47a29.72 29.72 0 0 1-12.66 19.52a36.2 36.2 0 0 1-13.93 5.5a41.3 41.3 0 0 1-15.1 0A37.2 37.2 0 0 1 44 95.74a39.3 39.3 0 0 1-14.5-19.42a38.3 38.3 0 0 1 0-24.63a39.25 39.25 0 0 1 9.18-14.91A37.17 37.17 0 0 1 76.13 27a34.3 34.3 0 0 1 13.64 8q5.83-5.8 11.64-11.63c2-2.09 4.18-4.08 6.15-6.22A61.2 61.2 0 0 0 87.2 4.59a64 64 0 0 0-42.61-.38\"\n />\n <path\n fill=\"#e33629\"\n d=\"M44.59 4.21a64 64 0 0 1 42.61.37a61.2 61.2 0 0 1 20.35 12.62c-2 2.14-4.11 4.14-6.15 6.22Q95.58 29.23 89.77 35a34.3 34.3 0 0 0-13.64-8a37.17 37.17 0 0 0-37.46 9.74a39.25 39.25 0 0 0-9.18 14.91L8.76 35.6A63.53 63.53 0 0 1 44.59 4.21\"\n />\n <path\n fill=\"#f8bd00\"\n d=\"M3.26 51.5a63 63 0 0 1 5.5-15.9l20.73 16.09a38.3 38.3 0 0 0 0 24.63q-10.36 8-20.73 16.08a63.33 63.33 0 0 1-5.5-40.9\"\n />\n <path\n fill=\"#587dbd\"\n d=\"M65.27 52.15h59.52a74.3 74.3 0 0 1-1.61 33.58a57.44 57.44 0 0 1-16 26.26c-6.69-5.22-13.41-10.4-20.1-15.62a29.72 29.72 0 0 0 12.66-19.54H65.27c-.01-8.22 0-16.45 0-24.68\"\n />\n <path\n fill=\"#319f43\"\n d=\"M8.75 92.4q10.37-8 20.73-16.08A39.3 39.3 0 0 0 44 95.74a37.2 37.2 0 0 0 14.08 6.08a41.3 41.3 0 0 0 15.1 0a36.2 36.2 0 0 0 13.93-5.5c6.69 5.22 13.41 10.4 20.1 15.62a57.13 57.13 0 0 1-25.9 13.47a67.6 67.6 0 0 1-32.36-.35a63 63 0 0 1-23-11.59A63.7 63.7 0 0 1 8.75 92.4\"\n />\n </svg>\n );\n}\n","'use client';\r\n\r\nimport { Portal } from '@ark-ui/react';\r\nimport Image, { type ImageProps } from 'next/image';\r\nimport type { ReactNode } from 'react';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { XIcon } from '../../icons/XIcon';\r\nimport { Button, Dialog } from '../../ui';\r\nimport { SignUpForm } from './SignUpForm';\r\n\r\nexport interface SignUpProps {\r\n logo: ImageProps['src'];\r\n banner: ImageProps['src'];\r\n children?: ReactNode;\r\n}\r\n\r\nexport function SignUp(props: SignUpProps) {\r\n const signUpStore = useGlobalStore(useShallow((popups) => popups.signUp));\r\n\r\n return (\r\n <Dialog.Root\r\n open={signUpStore.open}\r\n onOpenChange={(details) => {\r\n signUpStore.setOpen(details.open);\r\n }}\r\n lazyMount\r\n unmountOnExit\r\n closeOnEscape={false}\r\n closeOnInteractOutside={false}\r\n >\r\n <Dialog.Trigger asChild>\r\n {props.children ?? <Button>Sign up</Button>}\r\n </Dialog.Trigger>\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner>\r\n <Dialog.Content className=\"mx-auto flex h-full w-full items-start lg:h-auto lg:w-fit\">\r\n <Image\r\n src={props.banner}\r\n alt=\"h-auto w-[400px]\"\r\n width={400}\r\n height={800}\r\n className=\"hidden rounded-l-xl lg:block\"\r\n />\r\n\r\n <div className=\"relative flex w-full flex-col items-start self-stretch bg-white p-3xl lg:w-[400px] lg:rounded-r-xl\">\r\n <Dialog.CloseTrigger>\r\n <XIcon />\r\n </Dialog.CloseTrigger>\r\n\r\n <Image\r\n src={props.logo}\r\n alt=\"\"\r\n width={200}\r\n height={100}\r\n className=\"mx-auto h-auto w-[120px]\"\r\n draggable={false}\r\n />\r\n\r\n <SignUpForm />\r\n </div>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { useDialogContext } from '@ark-ui/react';\r\nimport { zodResolver } from '@hookform/resolvers/zod';\r\nimport { ObjectId, ObjectType } from '@opexa/portal-sdk-core/object-id';\r\nimport { useSearchParams } from 'next/navigation';\r\nimport { useState } from 'react';\r\nimport { Controller, useForm } from 'react-hook-form';\r\nimport { z } from 'zod';\r\nimport { useShallow } from 'zustand/shallow';\r\nimport { useCooldown } from '../../hooks/useCooldown';\r\nimport { useGlobalStore } from '../../hooks/useGlobalStore';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useMobileNumberParser } from '../../hooks/useMobileNumberParser';\r\nimport { useSendVerificationCodeMutation } from '../../hooks/useSendVerificationCodeMutation/useSendVerificationCodeMutation';\r\nimport { useSignInMutation } from '../../hooks/useSigninMutation/useSignInMutation';\r\nimport { useSignUpMutation } from '../../hooks/useSignUpMutation/useSignUpMutation';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { Button, Checkbox, Field, PinInput } from '../../ui';\r\nimport { toaster } from '../../utils/toaster';\r\n\r\nexport function SignUpForm() {\r\n const [step, setStep] = useState<1 | 2>(1);\r\n\r\n const dialog = useDialogContext();\r\n const search = useSearchParams();\r\n const signInStore = useGlobalStore(useShallow((popups) => popups.signIn));\r\n const signUpMutation = useSignUpMutation();\r\n const signInMutation = useSignInMutation();\r\n const sendVerificationCodeMutation = useSendVerificationCodeMutation();\r\n\r\n const localeInfo = useLocaleInfo();\r\n const mobileNumberParser = useMobileNumberParser();\r\n\r\n const Step1Definition = z.object({\r\n mobileNumber: z.string().superRefine((v, ctx) => {\r\n if (!mobileNumberParser.validate(v)) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'Invalid mobile number',\r\n });\r\n }\r\n }),\r\n termsAccepted: z.boolean().superRefine((v, ctx) => {\r\n if (!v) {\r\n ctx.addIssue({\r\n code: z.ZodIssueCode.custom,\r\n message: 'You must accept the terms and conditions',\r\n });\r\n }\r\n }),\r\n });\r\n\r\n const Step2Definition = z.object({\r\n verificationCode: z.array(z.string().min(1).max(1).trim()).min(6).max(6),\r\n });\r\n\r\n const step1Form = useForm({\r\n resolver: zodResolver(Step1Definition),\r\n defaultValues: {\r\n mobileNumber: '',\r\n termsAccepted: false,\r\n },\r\n });\r\n\r\n const step2Form = useForm({\r\n resolver: zodResolver(Step2Definition),\r\n defaultValues: {\r\n verificationCode: Array.from<string>({ length: 6 }).fill(''),\r\n },\r\n });\r\n\r\n const cooldown = useCooldown({\r\n max: 60,\r\n duration: 1000 * 60,\r\n });\r\n\r\n return (\r\n <>\r\n {step === 1 && (\r\n <>\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Create an account\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n Register instantly and start playing!\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step1Form.handleSubmit(async (data) => {\r\n try {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(data.mobileNumber),\r\n });\r\n\r\n setStep(2);\r\n cooldown.start();\r\n } catch (e) {\r\n toaster.error({\r\n description:\r\n e instanceof Error\r\n ? e.message\r\n : 'Failed to send verification code',\r\n });\r\n }\r\n })}\r\n >\r\n <Field.Root invalid={!!step1Form.formState.errors.mobileNumber}>\r\n <Field.Label>Mobile Number</Field.Label>\r\n <div className=\"relative\">\r\n <localeInfo.country.flag className=\"absolute left-3.5 top-1/2 size-5 shrink-0 -translate-y-1/2\" />\r\n <Field.Input\r\n className=\"pl-11\"\r\n {...step1Form.register('mobileNumber')}\r\n />\r\n </div>\r\n <Field.ErrorText>\r\n {step1Form.formState.errors.mobileNumber?.message}\r\n </Field.ErrorText>\r\n </Field.Root>\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step1Form.formState.isSubmitting}\r\n >\r\n Create Account\r\n </Button>\r\n\r\n <Controller\r\n control={step1Form.control}\r\n name=\"termsAccepted\"\r\n render={(o) => (\r\n <Checkbox.Root\r\n className=\"mt-xl\"\r\n invalid={o.fieldState.invalid}\r\n checked={o.field.value}\r\n onCheckedChange={(details) => {\r\n o.field.onChange(details.checked);\r\n }}\r\n >\r\n <Checkbox.Control>\r\n <Checkbox.Indicator asChild>\r\n <CheckIcon />\r\n </Checkbox.Indicator>\r\n </Checkbox.Control>\r\n <Checkbox.Label>\r\n I confirm that I am at least 21 years old, not listed in\r\n the PAGCOR NDRP, not a GEL license holder, government\r\n employee, or member of the Armed Forces of the\r\n Philippines. I am not playing in a public space and agree\r\n to the Terms of Use and Privacy Policy. Ineligible\r\n accounts will have their funds forfeited to the\r\n government.\r\n </Checkbox.Label>\r\n <Checkbox.HiddenInput />\r\n </Checkbox.Root>\r\n )}\r\n />\r\n </form>\r\n </div>\r\n\r\n <div className=\"flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">Don&apos;t have an account?</span>\r\n <button\r\n type=\"submit\"\r\n className=\"text-accent-700 font-semibold\"\r\n onClick={() => {\r\n dialog.setOpen(false);\r\n signInStore.setOpen(true);\r\n }}\r\n >\r\n Log In\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n\r\n {step === 2 && (\r\n <div className=\"w-full grow\">\r\n <h2 className=\"mt-xl text-center text-lg font-semibold\">\r\n Check your Phone\r\n </h2>\r\n <p className=\"text-gray-600 mt-xs text-center text-sm\">\r\n We&rsquo;ve sent a verification code to your mobile number{' '}\r\n <span className=\"font-semibold\">\r\n {mobileNumberParser.format(step1Form.getValues('mobileNumber'))}\r\n </span>{' '}\r\n via text\r\n </p>\r\n\r\n <form\r\n className=\"mt-5\"\r\n onSubmit={step2Form.handleSubmit(async ({ verificationCode }) => {\r\n const id = ObjectId.generate(ObjectType.MemberAccount).toString();\r\n const { mobileNumber } = step1Form.getValues();\r\n\r\n try {\r\n await signUpMutation.mutateAsync({\r\n id,\r\n mobileNumber: mobileNumberParser.format(mobileNumber),\r\n verificationCode: verificationCode.join(''),\r\n referralCode: search.get('referralCode') ?? undefined,\r\n domain: search.get('domain') ?? undefined,\r\n btag: search.get('btag') ?? undefined,\r\n });\r\n\r\n const name = mobileNumberParser.format(mobileNumber);\r\n const password = `${name}${id}`;\r\n\r\n try {\r\n await signInMutation.mutateAsync({\r\n type: 'NAME_AND_PASSWORD',\r\n name: mobileNumberParser.format(mobileNumber),\r\n password,\r\n });\r\n } catch {\r\n signInStore.setOpen(true);\r\n }\r\n\r\n dialog.setOpen(false);\r\n step1Form.reset();\r\n step2Form.reset();\r\n setStep(1);\r\n } catch {\r\n toaster.error({\r\n title: 'Invalid Verification Code',\r\n });\r\n }\r\n })}\r\n >\r\n <Controller\r\n name=\"verificationCode\"\r\n control={step2Form.control}\r\n render={(o) => (\r\n <PinInput.Root\r\n placeholder=\"0\"\r\n invalid={o.fieldState.invalid}\r\n value={o.field.value}\r\n onValueChange={(details) => {\r\n o.field.onChange(details.value);\r\n }}\r\n >\r\n <PinInput.Control>\r\n <PinInput.Input index={0} />\r\n <PinInput.Input index={1} />\r\n <PinInput.Input index={2} />\r\n <PinInput.Input index={3} />\r\n <PinInput.Input index={4} />\r\n <PinInput.Input index={5} />\r\n </PinInput.Control>\r\n <PinInput.HiddenInput />\r\n </PinInput.Root>\r\n )}\r\n />\r\n\r\n <Button\r\n type=\"submit\"\r\n className=\"mt-5\"\r\n disabled={step2Form.formState.isSubmitting}\r\n >\r\n Verify and Play\r\n </Button>\r\n\r\n <div className=\"mt-5 flex w-full items-center justify-center gap-xs text-sm\">\r\n <span className=\"text-gray-500\">\r\n Didn&apos;t recieve the code?\r\n </span>\r\n <button\r\n type=\"button\"\r\n className=\"text-accent-700 font-semibold disabled:cursor-not-allowed disabled:opacity-75\"\r\n disabled={cooldown.cooling}\r\n onClick={async () => {\r\n await sendVerificationCodeMutation.mutateAsync({\r\n channel: 'SMS',\r\n recipient: mobileNumberParser.format(\r\n step1Form.getValues('mobileNumber'),\r\n ),\r\n });\r\n\r\n cooldown.start();\r\n }}\r\n >\r\n {cooldown.cooling\r\n ? `Resend in ${cooldown.countdown}s`\r\n : 'Resend'}\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n className=\"text-gray-600 mx-auto mt-5 flex w-fit items-center gap-1 text-sm font-semibold\"\r\n onClick={() => {\r\n setStep(1);\r\n step2Form.reset();\r\n cooldown.stop();\r\n }}\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n Back\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","import {\r\n registerMemberAccountViaMobile,\r\n type RegisterMemberAccountViaMobileInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useMutation } from '@tanstack/react-query';\r\nimport { BYPASS_RECAPTCHA, ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Mutation } from '../../types';\r\nimport { getSignUpMutationKey } from './getSignUpMutationKey';\r\n\r\nexport interface SignUpMutationInput\r\n extends RegisterMemberAccountViaMobileInput {}\r\n\r\nexport const useSignUpMutation: Mutation<void, SignUpMutationInput> = (\r\n config,\r\n) => {\r\n return useMutation({\r\n ...config,\r\n mutationKey: getSignUpMutationKey(),\r\n mutationFn: async (input) => {\r\n return await registerMemberAccountViaMobile(input, {\r\n headers: {\r\n environment: ENVIRONMENT,\r\n 'Platform-Code': PLATFORM_CODE,\r\n ...(BYPASS_RECAPTCHA && {\r\n 'Test-Pass': '',\r\n }),\r\n },\r\n });\r\n },\r\n });\r\n};\r\n","import type { MutationKey } from '@tanstack/react-query';\n\nexport const getSignUpMutationKey = (): MutationKey => ['mutations/signUp'];\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Image from 'next/image';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useTopWinsQuery } from '../../hooks/useTopWinsQuery/useTopWinsQuery';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { getGameImageUrl } from '../../utils/getGameImageUrl';\r\nimport type { TopWinsProps } from './TopWins';\r\n\r\nexport function TopWinsContent(props: TopWinsProps) {\r\n const localeInfo = useLocaleInfo();\r\n const topWinsQuery = useTopWinsQuery();\r\n const topWins = topWinsQuery.data ?? [];\r\n\r\n const [emblaRef] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n if (!topWins?.length) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"text-gray-600 mb-3 text-lg font-semibold md:mb-4\">\r\n {props.heading}\r\n </div>\r\n\r\n <div ref={emblaRef} className=\"relative lg:overflow-hidden\">\r\n <div className=\"flex gap-sm lg:gap-md\">\r\n {topWins.map((topWin) => (\r\n <div\r\n key={topWin.id}\r\n className=\"bg-gray-50 border-gray-200 flex w-[calc((100%-(0.375rem*2))/3)] shrink-0 flex-col space-y-2 rounded-sm border p-2 text-center lg:w-[calc((100%-(0.5rem*5))/6)] xl:w-[calc((100%-(0.5rem*9))/10)]\"\r\n >\r\n <div className=\"mx-auto aspect-square w-full\">\r\n {topWin.game && (\r\n <Image\r\n width={100}\r\n height={100}\r\n src={getGameImageUrl(topWin.game)}\r\n alt=\"\"\r\n className=\"size-full rounded-sm object-cover\"\r\n />\r\n )}\r\n </div>\r\n\r\n <div className=\"space-y-0.5\">\r\n <div className=\"text-gray-600 text-xs\">\r\n {topWin.member.name}\r\n </div>\r\n <div className=\"text-gray-800 text-sm font-semibold\">\r\n {formatNumber(topWin.payout, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n <div className=\"text-gray-600 text-xs\">\r\n {formatNumber(topWin.multiplier, {\r\n minDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import { getTopWins, type TopWin } from '@opexa/portal-sdk-core';\r\nimport { useQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { Query } from '../../types';\r\nimport { getTopWinsQueryKey } from './getTopWinsQueryKey';\r\n\r\nexport const useTopWinsQuery: Query<TopWin[]> = (config) => {\r\n return useQuery({\r\n ...config,\r\n queryKey: getTopWinsQueryKey(),\r\n queryFn: async () => {\r\n return await getTopWins({\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n environment: ENVIRONMENT,\r\n });\r\n },\r\n });\r\n};\r\n","import type { QueryKey } from '@tanstack/react-query';\n\nexport const getTopWinsQueryKey = (): QueryKey => ['queries/topWins'];\n","import type { GameProvider } from '@opexa/portal-sdk-core';\r\nimport { ENVIRONMENT } from '../constants';\r\n\r\nconst VERSION = '1';\r\nconst ORIGIN =\r\n ENVIRONMENT === 'development'\r\n ? 'https://static.development.opexa.io/images'\r\n : 'https://static.opexa.io/images';\r\n\r\ntype Args =\r\n | {\r\n id: string;\r\n reference?: never;\r\n provider: GameProvider;\r\n }\r\n | {\r\n id?: never;\r\n reference: string;\r\n provider: GameProvider;\r\n };\r\n\r\nexport function getGameImageUrl<T extends Args>(args: T) {\r\n const id = args.id ?? args.reference;\r\n return `${ORIGIN}/${args.provider.toLocaleLowerCase()}/thumbnail-${id}.webp?version=${VERSION}`;\r\n}\r\n","import { TopWinsContent } from './TopWinsContent';\r\n\r\nexport interface TopWinsProps {\r\n heading: string;\r\n className?: string;\r\n}\r\n\r\nexport async function TopWins(props: TopWinsProps) {\r\n /* await prefetchTopWinsQuery(); */\r\n\r\n return <TopWinsContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport useEmblaCarousel from 'embla-carousel-react';\r\nimport Link from 'next/link';\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useTournamentsQuery } from '../../hooks/useTournamentsQuery/useTournamentsQuery';\r\nimport { ArrowLeftIcon } from '../../icons/ArrowLeftIcon';\r\nimport { ArrowRightIcon } from '../../icons/ArrowRightIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { Button } from '../../ui';\r\nimport type { TournamentCounterProps } from './TournamentCounter';\r\nimport { TournamentCounterItem } from './TournamentCounterItem';\r\n\r\nexport function TournamentCounterContent(props: TournamentCounterProps) {\r\n const [emblaRef, emblaApi] = useEmblaCarousel({\r\n align: 'start',\r\n slidesToScroll: 1,\r\n });\r\n\r\n const scrollPrev = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollPrev();\r\n }, [emblaApi]);\r\n\r\n const scrollNext = useCallback(() => {\r\n if (emblaApi) emblaApi.scrollNext();\r\n }, [emblaApi]);\r\n\r\n const [canScrollPrev, setCanScrollPrev] = useState(false);\r\n const [canScrollNext, setCanScrollNext] = useState(false);\r\n\r\n const onSelect = useCallback(() => {\r\n if (!emblaApi) return;\r\n setCanScrollPrev(emblaApi.canScrollPrev());\r\n setCanScrollNext(emblaApi.canScrollNext());\r\n }, [emblaApi]);\r\n\r\n useEffect(() => {\r\n if (!emblaApi) return;\r\n onSelect(); // set initial state\r\n emblaApi.on('select', onSelect);\r\n emblaApi.on('reInit', onSelect); // handles responsive changes\r\n }, [emblaApi, onSelect]);\r\n\r\n const tournamentsQuery = useTournamentsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n },\r\n });\r\n\r\n const tournaments =\r\n tournamentsQuery.data?.pages[0].edges.map((edge) => edge.node) ?? [];\r\n\r\n if (tournaments.length <= 0) return null;\r\n\r\n return (\r\n <div className={props.className}>\r\n <div className=\"mb-3 flex items-center justify-between md:mb-4\">\r\n <div className=\"text-lg font-semibold\">{props.heading}</div>\r\n <div className=\"flex items-center md:gap-3xl\">\r\n <Link\r\n href={props.seeAllUrl}\r\n className=\"flex gap-sm text-sm font-semibold\"\r\n >\r\n See All\r\n <ChevronRightIcon className=\"size-5 lg:hidden\" />\r\n </Link>\r\n\r\n <div className=\"hidden lg:flex\">\r\n <Button\r\n disabled={!canScrollPrev}\r\n onClick={scrollPrev}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n aria-label=\"Previous\"\r\n >\r\n <ArrowLeftIcon className=\"size-5\" />\r\n </Button>\r\n <Button\r\n disabled={!canScrollNext}\r\n onClick={scrollNext}\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n aria-label=\"Next\"\r\n >\r\n <ArrowRightIcon className=\"size-5\" />\r\n </Button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-full overflow-hidden\" ref={emblaRef}>\r\n <div className=\"flex gap-2.5\">\r\n {tournaments.map((tournament, index) => (\r\n <TournamentCounterItem\r\n key={tournament.id}\r\n index={index}\r\n tournament={tournament}\r\n className={\r\n tournaments.length < 2\r\n ? 'w-full'\r\n : 'w-full lg:w-[calc((100%-0.75rem)/2)]'\r\n }\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import {\r\n getTournaments,\r\n type PaginatedQueryResult,\r\n type Tournament,\r\n type TournamentsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getTournamentsQueryKey } from './getTournamentsQueryKey';\r\n\r\nexport const useTournamentsQuery: InfiniteQuery<\r\n PaginatedQueryResult<Tournament>,\r\n TournamentsInput\r\n> = (input, config) => {\r\n const query = useInfiniteQuery({\r\n ...config,\r\n queryKey: getTournamentsQueryKey(input),\r\n queryFn: ({ pageParam, signal }) => {\r\n return getTournaments(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { TournamentsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getTournamentsQueryKey = (input?: TournamentsInput): QueryKey => [\n 'queries/tournaments',\n input,\n];\n","'use client';\r\n\r\nimport type { Tournament } from '@opexa/portal-sdk-core';\r\nimport { map, pick, sum } from 'lodash-es';\r\nimport Image from 'next/image';\r\nimport React, { useEffect, useMemo, useState } from 'react';\r\nimport { twMerge } from 'tailwind-merge';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { Award02Icon } from '../../icons/Award02Icon';\r\nimport ball from '../../images/ball.png';\r\nimport card from '../../images/card.png';\r\nimport trophy from '../../images/trophy.png';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\n\r\nexport interface JackpotCounterCardProps {\r\n tournament: Tournament;\r\n className?: string;\r\n index: number;\r\n}\r\n\r\nexport function TournamentCounterItem({\r\n tournament,\r\n className,\r\n index,\r\n}: JackpotCounterCardProps) {\r\n const localeInfo = useLocaleInfo();\r\n\r\n const tournamentReward = sum(map(tournament.rewardSettings, Number));\r\n\r\n const [timeRemaining, setTimeRemaining] = useState({\r\n days: 0,\r\n hours: 0,\r\n minutes: 0,\r\n isPast: false,\r\n });\r\n\r\n const activationEndDateTime = useMemo(\r\n () => new Date(tournament.activationEndDateTime),\r\n [tournament.activationEndDateTime],\r\n );\r\n\r\n const calculateRemainingTime = React.useCallback(() => {\r\n const now = new Date();\r\n const diffMs = activationEndDateTime.getTime() - now.getTime();\r\n\r\n if (diffMs <= 0) {\r\n setTimeRemaining({ days: 0, hours: 0, minutes: 0, isPast: true });\r\n return;\r\n }\r\n\r\n const diffSeconds = Math.floor(diffMs / 1000);\r\n\r\n const days = Math.floor(diffSeconds / (3600 * 24));\r\n const hours = Math.floor((diffSeconds % (3600 * 24)) / 3600);\r\n const minutes = Math.floor((diffSeconds % 3600) / 60);\r\n\r\n const updated = pick({ days, hours, minutes, isPast: false }, [\r\n 'days',\r\n 'hours',\r\n 'minutes',\r\n 'isPast',\r\n ]);\r\n setTimeRemaining(updated);\r\n }, [activationEndDateTime]);\r\n\r\n useEffect(() => {\r\n calculateRemainingTime();\r\n const interval = setInterval(calculateRemainingTime, 60 * 1000);\r\n return () => clearInterval(interval);\r\n }, [activationEndDateTime, calculateRemainingTime]);\r\n\r\n const timeParts = [\r\n { label: 'Day', value: timeRemaining.days },\r\n { label: 'Hour', value: timeRemaining.hours },\r\n { label: 'Min', value: timeRemaining.minutes },\r\n ];\r\n\r\n const tournamentImage = [\r\n {\r\n image: trophy,\r\n },\r\n {\r\n image: card,\r\n },\r\n {\r\n image: ball,\r\n },\r\n ];\r\n\r\n return (\r\n <div\r\n className={twMerge(\r\n 'bg-gray-50 border-gray-200 flex shrink-0 flex-col space-y-2 rounded-sm border p-3 text-center',\r\n className,\r\n )}\r\n >\r\n <div className=\"flex h-full w-full justify-between\">\r\n <div className=\"border-gray-700 bg-gray-300 flex h-fit w-fit items-center rounded-full border px-2 py-0.5 text-xs font-medium\">\r\n <Award02Icon className=\"size-3.5\" />\r\n Multiplier\r\n </div>\r\n\r\n <div className=\"flex h-fit\">\r\n {timeParts.map((part, idx) => (\r\n <React.Fragment key={part.label}>\r\n <div\r\n className={twMerge(\r\n 'rounded-xs bg-gray-600 text-gray-50 flex h-fit w-8 flex-col items-center pb-1.5',\r\n )}\r\n >\r\n <span className=\"text-base font-medium\">\r\n {String(part.value).padStart(2, '0')}\r\n </span>\r\n <span className=\"text-[8px]\">{part.label}</span>\r\n </div>\r\n\r\n {idx < timeParts.length - 1 && (\r\n <div className=\"flex flex-col justify-center gap-[6px] px-[6px]\">\r\n <div className=\"h-1 w-1 rounded-full bg-[#09232E]\" />\r\n <div className=\"h-1 w-1 rounded-full bg-[#09232E]\" />\r\n </div>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex justify-between\">\r\n <div className=\"flex h-fit flex-col justify-between text-left\">\r\n <div>\r\n <div className=\"text-lg font-semibold\">{tournament.name}</div>\r\n\r\n <div className=\"bg-gray-950 text-gray-300 w-fit rounded-md px-2 py-1 text-2xl font-bold\">\r\n {formatNumber(tournamentReward, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n maxDecimalPlaces: 2,\r\n })}\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 text-base font-medium\">Play and Win!</div>\r\n </div>\r\n\r\n <div className=\"flex h-full items-end\">\r\n <div className=\"h-24 w-auto shrink-0\">\r\n <Image\r\n quality={100}\r\n width={100}\r\n height={100}\r\n src={tournamentImage[index % 3].image}\r\n alt=\"\"\r\n className=\"h-full w-auto\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import type { ComponentPropsWithRef } from 'react';\r\n\r\nexport function Award02Icon(props: ComponentPropsWithRef<'svg'>) {\r\n return (\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n {...props}\r\n >\r\n <path d=\"M7 15.0903V22L11.7029 20.1188C11.8126 20.0749 11.8675 20.053 11.9242 20.0443C11.9744 20.0366 12.0256 20.0366 12.0758 20.0443C12.1325 20.053 12.1874 20.0749 12.2971 20.1188L17 22V15.0903M19.5 9.5C19.5 13.6421 16.1421 17 12 17C7.85786 17 4.5 13.6421 4.5 9.5C4.5 5.35786 7.85786 2 12 2C16.1421 2 19.5 5.35786 19.5 9.5Z\" />\r\n </svg>\r\n );\r\n}\r\n","import { TournamentCounterContent } from './TournamentCounterContent';\r\n\r\nexport interface TournamentCounterProps {\r\n className?: string;\r\n heading: string;\r\n seeAllUrl: string;\r\n}\r\n\r\nexport async function TournamentCounter(props: TournamentCounterProps) {\r\n /*\r\n await prefetchTournamentsQuery({\r\n first: 100,\r\n filter: {\r\n status: {\r\n equal: 'ACTIVE',\r\n },\r\n },\r\n });\r\n */\r\n\r\n return <TournamentCounterContent {...props} />;\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport { type DepositStatus } from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useDepositRecordsQuery } from '../../hooks/useDepositRecordsQuery/useDepositRecordsQuery';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { Badge, IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function DepositRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n const [depositStatus, setDepositStatus] = useState<DepositStatus | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useDepositRecordsQuery, {\r\n filter: {\r\n ...(depositStatus && {\r\n status: {\r\n equal: depositStatus,\r\n },\r\n }),\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n enabledFilters={{\r\n depositStatus: true,\r\n }}\r\n value={{\r\n timestamp,\r\n depositStatus,\r\n }}\r\n onChange={(value) => {\r\n firstPage();\r\n setTimestamp(value.timestamp);\r\n setDepositStatus(value.depositStatus);\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest deposit records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Deposit No.</Table.Heading>\r\n <Table.Heading>Reference</Table.Heading>\r\n <Table.Heading>Deposit Method</Table.Heading>\r\n <Table.Heading>Applied Amount</Table.Heading>\r\n <Table.Heading>Recieved Amount</Table.Heading>\r\n <Table.Heading>Transaction Fee</Table.Heading>\r\n <Table.Heading>Deposit Time</Table.Heading>\r\n <Table.Heading>Recieved Time</Table.Heading>\r\n <Table.Heading>Status</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>{data.depositNumber}</Table.Cell>\r\n <Table.Cell>{data.reference}</Table.Cell>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.netAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.fee, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {(data.status === 'CONFIRMED' ||\r\n data.status === 'APPROVED') &&\r\n format(data.dateTimeLastUpdated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n <Badge.Root\r\n variant=\"subtle\"\r\n colorScheme={\r\n data.status === 'FAILED' ||\r\n data.status === 'REJECTED' ||\r\n data.status === 'CANCELLED'\r\n ? 'danger'\r\n : data.status === 'PENDING'\r\n ? 'warning'\r\n : 'success'\r\n }\r\n >\r\n <Badge.Label>\r\n {capitalize(data.status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Badge.Label>\r\n </Badge.Root>\r\n </Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n type DepositRecord,\r\n type DepositRecordsInput,\r\n getDepositRecords,\r\n type PaginatedQueryResult,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getDepositRecordsQueryKey } from './getDepositRecordsQueryKey';\r\n\r\nexport const useDepositRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<DepositRecord>,\r\n DepositRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getDepositRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getDepositRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { DepositRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getDepositRecordsQueryKey = (input?: DepositRecordsInput): QueryKey => [\n 'queries/depositRecords',\n input,\n];\n","import { createListCollection, parseDate, Portal } from '@ark-ui/react';\r\nimport type {\r\n DepositStatus,\r\n GameProvider,\r\n GameType,\r\n WithdrawalStatus,\r\n} from '@opexa/portal-sdk-core';\r\nimport { endOfDay, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { z } from 'zod';\r\nimport { useControllableState } from '../../hooks/useControllableState';\r\nimport { CheckIcon } from '../../icons/CheckIcon';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { DatePicker, SegmentGroup, Select } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\n\r\nconst TabDefinition = z.enum(['all', 'today', 'custom']).catch('all');\r\ntype Tab = z.infer<typeof TabDefinition>;\r\n\r\ninterface EnabledFilters {\r\n timestamp?: boolean;\r\n gameType?: boolean;\r\n gameProvider?: boolean;\r\n depositStatus?: boolean;\r\n withdrawalStatus?: boolean;\r\n}\r\n\r\ninterface Value {\r\n timestamp?: Partial<DateRange> | null;\r\n gameType?: GameType | null;\r\n gameProvider?: GameProvider | null;\r\n depositStatus?: DepositStatus | null;\r\n withdrawalStatus?: WithdrawalStatus | null;\r\n}\r\n\r\ninterface TableFiltersProps {\r\n value?: Value;\r\n defaultValue?: Value;\r\n onChange?: (value: Value) => void;\r\n enabledFilters?: EnabledFilters;\r\n gameTypeOptions?: GameType[];\r\n gameProviderOptions?: GameProvider[];\r\n}\r\n\r\nconst DEPOSIT_STATUSES = [\r\n 'ACCEPTED',\r\n 'APPROVED',\r\n 'CANCELLED',\r\n 'CONFIRMED',\r\n 'FAILED',\r\n 'PENDING',\r\n 'REJECTED',\r\n] as const satisfies DepositStatus[];\r\n\r\nconst WITHDRAWAL_STATUSES = [\r\n 'ACCEPTED',\r\n 'APPROVED',\r\n 'CANCELLED',\r\n 'CONFIRMED',\r\n 'FAILED',\r\n 'PENDING',\r\n 'REJECTED',\r\n] as const satisfies WithdrawalStatus[];\r\n\r\nconst deviceTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\nexport function TableFilters(props: TableFiltersProps) {\r\n const gameTypeCollection = createListCollection({\r\n items: props.gameTypeOptions ?? [],\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const gameProviderCollection = createListCollection({\r\n items: props.gameProviderOptions ?? [],\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const depositStatusCollection = createListCollection({\r\n items: DEPOSIT_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const withdrawalStatusCollection = createListCollection({\r\n items: WITHDRAWAL_STATUSES,\r\n itemToValue: (item) => item,\r\n itemToString: (item) =>\r\n capitalize(item, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n }),\r\n });\r\n\r\n const [tab, setTab] = useState<Tab>('all');\r\n\r\n const handleChange = (next: Value) => {\r\n const prev = {\r\n timestamp,\r\n gameType,\r\n gameProvider,\r\n depositStatus,\r\n withdrawalStatus,\r\n };\r\n\r\n props.onChange?.({\r\n ...prev,\r\n ...next,\r\n });\r\n };\r\n\r\n const [timestamp, setTimestamp] = useControllableState({\r\n value: props.value?.timestamp,\r\n defaultValue: props.defaultValue?.timestamp ?? null,\r\n onChange(timestamp) {\r\n handleChange({ timestamp });\r\n },\r\n });\r\n\r\n const [gameType, setGameType] = useControllableState({\r\n value: props.value?.gameType,\r\n defaultValue: props.defaultValue?.gameType ?? null,\r\n onChange(gameType) {\r\n handleChange({ gameType });\r\n },\r\n });\r\n\r\n const [gameProvider, setGameProvider] = useControllableState({\r\n value: props.value?.gameProvider,\r\n defaultValue: props.defaultValue?.gameProvider ?? null,\r\n onChange(gameProvider) {\r\n handleChange({ gameProvider });\r\n },\r\n });\r\n\r\n const [depositStatus, setDepositStatus] = useControllableState({\r\n value: props.value?.depositStatus,\r\n defaultValue: props.defaultValue?.depositStatus ?? null,\r\n onChange(depositStatus) {\r\n handleChange({ depositStatus });\r\n },\r\n });\r\n\r\n const [withdrawalStatus, setWithdrawalStatus] = useControllableState({\r\n value: props.value?.withdrawalStatus,\r\n defaultValue: props.defaultValue?.withdrawalStatus ?? null,\r\n onChange(withdrawalStatus) {\r\n handleChange({ withdrawalStatus });\r\n },\r\n });\r\n\r\n return (\r\n <div className=\"flex items-center gap-lg\">\r\n <DatePicker.Root\r\n lazyMount\r\n unmountOnExit\r\n value={[timestamp?.start, timestamp?.end]\r\n .filter(Boolean)\r\n .map((d) => parseDate(d))}\r\n onValueChange={(details) => {\r\n setTimestamp({\r\n start: details.value.at(0)?.toDate(deviceTimezone),\r\n end: details.value.at(1)?.toDate(deviceTimezone),\r\n });\r\n }}\r\n onOpenChange={(details) => {\r\n if (details.open) return;\r\n if (timestamp) return;\r\n setTab('all');\r\n }}\r\n selectionMode=\"range\"\r\n closeOnSelect={false}\r\n positioning={{\r\n gutter: 20,\r\n placement: 'bottom',\r\n }}\r\n >\r\n <SegmentGroup.Root\r\n value={tab}\r\n onValueChange={(details) => {\r\n const value = TabDefinition.parse(details.value);\r\n\r\n if (value === 'today') {\r\n const now = new Date();\r\n\r\n setTimestamp({\r\n start: startOfDay(now),\r\n end: endOfDay(now),\r\n });\r\n } else {\r\n setTimestamp(null);\r\n }\r\n\r\n setTab(value);\r\n }}\r\n >\r\n <SegmentGroup.Item value=\"all\">\r\n <SegmentGroup.ItemText>All</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n <SegmentGroup.Item value=\"today\">\r\n <SegmentGroup.ItemText>Today</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </SegmentGroup.Item>\r\n\r\n <DatePicker.Context>\r\n {(api) => (\r\n <SegmentGroup.Item\r\n value=\"custom\"\r\n onClick={() => api.setOpen(true)}\r\n >\r\n <DatePicker.Control>\r\n <SegmentGroup.ItemText>Custom</SegmentGroup.ItemText>\r\n <SegmentGroup.ItemControl />\r\n <SegmentGroup.ItemHiddenInput />\r\n </DatePicker.Control>\r\n </SegmentGroup.Item>\r\n )}\r\n </DatePicker.Context>\r\n\r\n <SegmentGroup.Indicator />\r\n </SegmentGroup.Root>\r\n <Portal>\r\n <DatePicker.Positioner>\r\n <DatePicker.Content>\r\n <DatePicker.View view=\"day\">\r\n <DatePicker.Context>\r\n {(api) => (\r\n <>\r\n <DatePicker.ViewControl>\r\n <DatePicker.PrevTrigger>\r\n <ChevronLeftIcon />\r\n </DatePicker.PrevTrigger>\r\n <DatePicker.ViewTrigger>\r\n <DatePicker.RangeText />\r\n </DatePicker.ViewTrigger>\r\n <DatePicker.NextTrigger>\r\n <ChevronRightIcon />\r\n </DatePicker.NextTrigger>\r\n </DatePicker.ViewControl>\r\n <DatePicker.Table>\r\n <DatePicker.TableHead>\r\n <DatePicker.TableRow>\r\n {api.weekDays.map((weekDay, id) => (\r\n <DatePicker.TableHeader key={id}>\r\n {weekDay.short.substring(0, 2)}\r\n </DatePicker.TableHeader>\r\n ))}\r\n </DatePicker.TableRow>\r\n </DatePicker.TableHead>\r\n <DatePicker.TableBody>\r\n {api.weeks.map((week, id) => (\r\n <DatePicker.TableRow key={id}>\r\n {week.map((day, id) => (\r\n <DatePicker.TableCell key={id} value={day}>\r\n <DatePicker.TableCellTrigger>\r\n {day.day}\r\n </DatePicker.TableCellTrigger>\r\n </DatePicker.TableCell>\r\n ))}\r\n </DatePicker.TableRow>\r\n ))}\r\n </DatePicker.TableBody>\r\n </DatePicker.Table>\r\n </>\r\n )}\r\n </DatePicker.Context>\r\n </DatePicker.View>\r\n </DatePicker.Content>\r\n </DatePicker.Positioner>\r\n </Portal>\r\n </DatePicker.Root>\r\n\r\n <div className=\"grow\" />\r\n\r\n {props.enabledFilters?.gameType && (\r\n <Select.Root\r\n collection={gameTypeCollection}\r\n value={gameType ? [gameType] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameTypeOptions ?? []) as [GameType])\r\n .safeParse(details.value.at(0)).data;\r\n setGameType(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Type\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {gameTypeCollection.items.map((type) => (\r\n <Select.Item key={type} item={type}>\r\n <Select.ItemText>\r\n {capitalize(type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.gameProvider && (\r\n <Select.Root\r\n collection={gameProviderCollection}\r\n value={gameProvider ? [gameProvider] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum((props.gameProviderOptions ?? []) as [GameProvider])\r\n .safeParse(details.value.at(0)).data;\r\n setGameProvider(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Game Vendor\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {gameProviderCollection.items.map((provider) => (\r\n <Select.Item key={provider} item={provider}>\r\n <Select.ItemText>\r\n {capitalize(provider, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.depositStatus && (\r\n <Select.Root\r\n collection={depositStatusCollection}\r\n value={depositStatus ? [depositStatus] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(DEPOSIT_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n setDepositStatus(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {withdrawalStatusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n\r\n {props.enabledFilters?.withdrawalStatus && (\r\n <Select.Root\r\n collection={withdrawalStatusCollection}\r\n value={withdrawalStatus ? [withdrawalStatus] : []}\r\n onValueChange={(details) => {\r\n const value = z\r\n .enum(WITHDRAWAL_STATUSES)\r\n .safeParse(details.value.at(0)).data;\r\n setWithdrawalStatus(value ?? null);\r\n }}\r\n lazyMount\r\n deselectable\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText placeholder=\"Status\" />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n </Select.Trigger>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n <Select.ItemGroup>\r\n {depositStatusCollection.items.map((status) => (\r\n <Select.Item key={status} item={status}>\r\n <Select.ItemText>\r\n {capitalize(status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Select.ItemText>\r\n <Select.ItemIndicator asChild>\r\n <CheckIcon />\r\n </Select.ItemIndicator>\r\n </Select.Item>\r\n ))}\r\n </Select.ItemGroup>\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Root>\r\n )}\r\n </div>\r\n );\r\n}\r\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useTransactionRecordsQuery } from '../../hooks/useTransactionRecordsQuery/useTransactionRecordsQuery';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function TransactionRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useTransactionRecordsQuery, {\r\n filter: {\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n value={{\r\n timestamp,\r\n }}\r\n onChange={(value) => {\r\n setTimestamp(value.timestamp);\r\n firstPage();\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest transaction records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Transaction Type</Table.Heading>\r\n <Table.Heading>Transaction Time</Table.Heading>\r\n <Table.Heading>Amount</Table.Heading>\r\n <Table.Heading>Current Balance</Table.Heading>\r\n <Table.Heading>Reference Number</Table.Heading>\r\n <Table.Heading>Content</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.currentBalance, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.referenceNumber}</Table.Cell>\r\n <Table.Cell>{data.content}</Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n getTransactionRecords,\r\n type PaginatedQueryResult,\r\n type TransactionRecord,\r\n type TransactionRecordsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getTransactionRecordsQueryKey } from './getTransactionRecordsQueryKey';\r\n\r\nexport const useTransactionRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<TransactionRecord>,\r\n TransactionRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getTransactionRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return getTransactionRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { TransactionRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getTransactionRecordsQueryKey = (input?: TransactionRecordsInput): QueryKey => [\n 'queries/transactionRecords',\n input,\n];\n","'use client';\r\n\r\nimport { createListCollection, Portal } from '@ark-ui/react';\r\nimport { tz, TZDateMini } from '@date-fns/tz';\r\nimport type { WithdrawalStatus } from '@opexa/portal-sdk-core';\r\nimport { endOfDay, format, startOfDay } from 'date-fns';\r\nimport { useState } from 'react';\r\nimport { useInfiniteQueryHelper } from '../../hooks/useInfiniteQueryHelper';\r\nimport { useLocaleInfo } from '../../hooks/useLocaleInfo';\r\nimport { useWithdrawalRecordsQuery } from '../../hooks/useWithdrawalRecordsQuery/useWithdrawalRecordsQuery';\r\nimport { ChevronDownIcon } from '../../icons/ChevronDownIcon';\r\nimport { ChevronLeftIcon } from '../../icons/ChevronLeftIcon';\r\nimport { ChevronRightIcon } from '../../icons/ChevronRightIcon';\r\nimport { File02Icon } from '../../icons/File02Icon';\r\nimport { SpinnerIcon } from '../../icons/SpinnerIcon';\r\nimport type { DateRange } from '../../types';\r\nimport { Badge, IconButton, Select, Table } from '../../ui';\r\nimport { capitalize } from '../../utils/capitalize';\r\nimport { formatNumber } from '../../utils/formatNumber';\r\nimport { Empty } from '../Empty';\r\nimport { TableFilters } from './TableFilters';\r\n\r\nexport function WithdrawalRecordsTable() {\r\n const [timestamp, setTimestamp] = useState<Partial<DateRange> | null>();\r\n const [withdrawalStatus, setWithdrawalStatus] =\r\n useState<WithdrawalStatus | null>();\r\n\r\n const localeInfo = useLocaleInfo();\r\n\r\n const {\r\n page,\r\n pageSize,\r\n hasNextPage,\r\n hasPrevPage,\r\n next,\r\n prev,\r\n rows,\r\n setPageSize,\r\n totalPages,\r\n loading,\r\n firstPage,\r\n } = useInfiniteQueryHelper(useWithdrawalRecordsQuery, {\r\n filter: {\r\n ...(withdrawalStatus && {\r\n status: {\r\n equal: withdrawalStatus,\r\n },\r\n }),\r\n ...(timestamp && {\r\n dateTimeCreated: {\r\n ...(timestamp.start && {\r\n greaterThanOrEqual: new TZDateMini(\r\n startOfDay(timestamp.start),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n ...(timestamp.end && {\r\n lesserThanOrEqual: new TZDateMini(\r\n endOfDay(timestamp.end),\r\n localeInfo.timezone,\r\n ).toISOString(),\r\n }),\r\n },\r\n }),\r\n },\r\n });\r\n\r\n return (\r\n <>\r\n <TableFilters\r\n enabledFilters={{\r\n withdrawalStatus: true,\r\n }}\r\n value={{\r\n timestamp,\r\n withdrawalStatus,\r\n }}\r\n onChange={(value) => {\r\n firstPage();\r\n setTimestamp(value.timestamp);\r\n setWithdrawalStatus(value.withdrawalStatus);\r\n }}\r\n />\r\n\r\n {rows.length <= 0 && (\r\n <Empty\r\n icon={loading ? SpinnerIcon : File02Icon}\r\n title={loading ? 'Just a moment' : 'No data'}\r\n message={\r\n loading\r\n ? 'Fetching latest withdrawal records...'\r\n : 'No data is currently available.'\r\n }\r\n className=\"mt-8 lg:mt-16\"\r\n />\r\n )}\r\n\r\n {rows.length >= 1 && (\r\n <div className=\"border-gray-200 mt-lg rounded-xl border\">\r\n <div className=\"border-gray-200 overflow-hidden overflow-x-auto rounded-xl border-b\">\r\n <Table.Root className=\"border-0\">\r\n <Table.Header>\r\n <Table.Row>\r\n <Table.Heading>Withdrawal No.</Table.Heading>\r\n <Table.Heading>Reference</Table.Heading>\r\n <Table.Heading>Withdrawal Method</Table.Heading>\r\n <Table.Heading>Mobile Number</Table.Heading>\r\n <Table.Heading>Withdrawal Amount</Table.Heading>\r\n <Table.Heading>Net Amount</Table.Heading>\r\n <Table.Heading>Transaction Fee</Table.Heading>\r\n <Table.Heading>Bank Name</Table.Heading>\r\n <Table.Heading>Withdrawal Time</Table.Heading>\r\n <Table.Heading>Status</Table.Heading>\r\n </Table.Row>\r\n </Table.Header>\r\n\r\n <Table.Body>\r\n {rows.map((data) => (\r\n <Table.Row key={data.id}>\r\n <Table.Cell>{data.withdrawalNumber}</Table.Cell>\r\n <Table.Cell>{data.reference}</Table.Cell>\r\n <Table.Cell>\r\n {capitalize(data.type, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.recipientMobileNumber}</Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.amount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.netAmount, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n {formatNumber(data.fee, {\r\n currency: localeInfo.currency.code,\r\n minDecimalPlaces: 2,\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>{data.bank}</Table.Cell>\r\n <Table.Cell>\r\n {format(data.dateTimeCreated, 'yyyy MMM dd hh:mma', {\r\n in: tz(localeInfo.timezone),\r\n })}\r\n </Table.Cell>\r\n <Table.Cell>\r\n <Badge.Root\r\n variant=\"subtle\"\r\n colorScheme={\r\n data.status === 'FAILED' ||\r\n data.status === 'REJECTED' ||\r\n data.status === 'CANCELLED'\r\n ? 'danger'\r\n : data.status === 'PENDING'\r\n ? 'warning'\r\n : 'success'\r\n }\r\n >\r\n <Badge.Label>\r\n {capitalize(data.status, {\r\n delimiter: capitalize.delimiters.UNDERSCORE,\r\n })}\r\n </Badge.Label>\r\n </Badge.Root>\r\n </Table.Cell>\r\n </Table.Row>\r\n ))}\r\n </Table.Body>\r\n </Table.Root>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-lg px-4 py-3\">\r\n <p>\r\n Page {page} of {totalPages}\r\n </p>\r\n <div className=\"grow\"></div>\r\n <Select.Root\r\n size=\"sm\"\r\n value={[pageSize.toString()]}\r\n onValueChange={(details) => {\r\n const n = parseInt(details.value[0]);\r\n const v = isNaN(n) ? 10 : n;\r\n\r\n setPageSize(v);\r\n }}\r\n collection={pageSizeCollection}\r\n lazyMount\r\n >\r\n <Select.Trigger>\r\n <Select.ValueText />\r\n <Select.Indicator asChild>\r\n <ChevronDownIcon />\r\n </Select.Indicator>\r\n <Portal>\r\n <Select.Positioner>\r\n <Select.Content>\r\n {pageSizeCollection.items.map((item) => (\r\n <Select.Item key={item} item={item}>\r\n {pageSizeCollection.stringifyItem(item)}\r\n </Select.Item>\r\n ))}\r\n </Select.Content>\r\n </Select.Positioner>\r\n </Portal>\r\n </Select.Trigger>\r\n </Select.Root>\r\n <div>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-r-none border-r-0\"\r\n disabled={!hasPrevPage || loading}\r\n onClick={() => prev()}\r\n >\r\n <ChevronLeftIcon className=\"size-5\" />\r\n </IconButton>\r\n <IconButton\r\n size=\"sm\"\r\n variant=\"outline\"\r\n colorScheme=\"gray\"\r\n className=\"rounded-l-none\"\r\n disabled={!hasNextPage || loading}\r\n onClick={() => next()}\r\n >\r\n <ChevronRightIcon className=\"size-5\" />\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n\r\nconst pageSizeCollection = createListCollection({\r\n items: useInfiniteQueryHelper.config.pageSizes,\r\n itemToValue: (item) => item.toString(),\r\n itemToString: (item) => `${item} items per page`,\r\n});\r\n","import {\r\n getWithdrawalRecords,\r\n type PaginatedQueryResult,\r\n type WithdrawalRecord,\r\n type WithdrawalRecordsInput,\r\n} from '@opexa/portal-sdk-core';\r\nimport { useInfiniteQuery } from '@tanstack/react-query';\r\nimport invariant from 'tiny-invariant';\r\nimport { ENVIRONMENT, PLATFORM_CODE } from '../../constants';\r\nimport { getSession } from '../../services/client/getSession';\r\nimport type { InfiniteQuery } from '../../types';\r\nimport { getQueryClient } from '../../utils/getQueryClient';\r\nimport { getSessionQueryKey } from '../useSessionQuery/getSessionQueryKey';\r\nimport { useSessionQuery } from '../useSessionQuery/useSessionQuery';\r\nimport { getWithdrawalRecordsQueryKey } from './getWithdrawalRecordsQueryKey';\r\n\r\nexport const useWithdrawalRecordsQuery: InfiniteQuery<\r\n PaginatedQueryResult<WithdrawalRecord>,\r\n WithdrawalRecordsInput\r\n> = (input, config) => {\r\n const queryClient = getQueryClient();\r\n const sessionQuery = useSessionQuery();\r\n\r\n const query = useInfiniteQuery({\r\n ...config,\r\n enabled:\r\n config?.enabled === false\r\n ? false\r\n : sessionQuery.data?.status === 'authenticated',\r\n queryKey: getWithdrawalRecordsQueryKey(input),\r\n queryFn: async ({ pageParam, signal }) => {\r\n const session = await queryClient.fetchQuery({\r\n queryKey: getSessionQueryKey(),\r\n queryFn: () => getSession(),\r\n });\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n invariant(session.status === 'authenticated');\r\n\r\n return await getWithdrawalRecords(\r\n { ...input, after: pageParam },\r\n {\r\n signal,\r\n environment: ENVIRONMENT,\r\n headers: {\r\n 'Platform-Code': PLATFORM_CODE,\r\n Authorization: `Bearer ${session.token}`,\r\n },\r\n },\r\n );\r\n },\r\n initialPageParam: undefined,\r\n getNextPageParam(lastPage) {\r\n if (lastPage?.pageInfo?.hasNextPage) {\r\n return lastPage?.pageInfo?.endCursor;\r\n }\r\n },\r\n });\r\n\r\n return query;\r\n};\r\n","import type { WithdrawalRecordsInput } from '@opexa/portal-sdk-core';\nimport type { QueryKey } from '@tanstack/react-query';\n\nexport const getWithdrawalRecordsQueryKey = (input?: WithdrawalRecordsInput): QueryKey => [\n 'queries/withdrawalRecords',\n input,\n];\n","import type { GameProvider, GameType } from '@opexa/portal-sdk-core';\r\nimport { Tabs } from '../../ui';\r\nimport { DepositRecordsTable } from './DepositRecordsTable';\r\nimport { TransactionRecordsTable } from './TransactionRecordsTable';\r\nimport { WithdrawalRecordsTable } from './WithdrawalRecordsTable';\r\n\r\nexport interface TransactionRecordsProps {\r\n gameTypes: GameType[];\r\n gameProviders: GameProvider[];\r\n className?: string;\r\n}\r\n\r\nexport function TransactionRecords(props: TransactionRecordsProps) {\r\n return (\r\n <div className={props.className}>\r\n <h2 className=\"text-lg font-semibold\">Transaction Records</h2>\r\n <p className=\"text-gray-600 mt-xs text-xs\">\r\n View your transaction records\r\n </p>\r\n\r\n <Tabs.Root\r\n className=\"mt-2xl\"\r\n defaultValue=\"transactions\"\r\n lazyMount\r\n unmountOnExit\r\n >\r\n <div className=\"pb-2xl\">\r\n <Tabs.List>\r\n <Tabs.Trigger value=\"transactions\">Transactions</Tabs.Trigger>\r\n <Tabs.Trigger value=\"deposits\">Deposits</Tabs.Trigger>\r\n <Tabs.Trigger value=\"withdrawals\">Withdrawals</Tabs.Trigger>\r\n <Tabs.Indicator />\r\n </Tabs.List>\r\n </div>\r\n\r\n <Tabs.Content value=\"transactions\" className=\"mt-4xl\">\r\n <TransactionRecordsTable />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"deposits\" className=\"mt-4xl\">\r\n <DepositRecordsTable />\r\n </Tabs.Content>\r\n <Tabs.Content value=\"withdrawals\" className=\"mt-4xl\">\r\n <WithdrawalRecordsTable />\r\n </Tabs.Content>\r\n </Tabs.Root>\r\n </div>\r\n );\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,IAAAA,iBAAuB;AACvB,kBAAiB;AAEjB,qBAA2B;;;ACL3B,6BAAqD;AACrD,IAAAC,sBAAyB;AACzB,4BAAsB;;;ACDtB,iBAAkB;AAEX,IAAM,UAAU,aACpB,OAAO,EACP;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,KAAK,EACL,MAAM,QAAQ,IAAI,mBAAmB;AAEjC,IAAM,cAAc,aACxB,OAAO,EACP;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,KAAK,EACL,MAAM,QAAQ,IAAI,uBAAuB;AAErC,IAAM,gBAAgB,aAC1B,OAAO,EACP;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,KAAK,EACL,MAAM,QAAQ,IAAI,yBAAyB;AAEvC,IAAM,cAAc,aACxB,KAAK,CAAC,cAAc,aAAa,CAAC,EAClC,MAAM,aAAa,EACnB,MAAM,QAAQ,IAAI,uBAAuB;AAErC,IAAM,mBAAmB,aAC7B,IAAI,EACJ,UAAU,OAAO,EACjB,MAAM,KAAK,EACX,MAAM,QAAQ,IAAI,4BAA4B;AAE1C,IAAM,2BAAmC;AAGzC,IAAM,wBAAwC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACtFA,eAAsB,aAA+B;AACnD,QAAM,MAAM,MAAM,MAAM,iBAAiB;AAAA,IACvC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,QAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAM,OAAgB,KAAK,KAAK,KAAK,OAAO,EAAE,QAAQ,kBAAkB;AAExE,SAAO;AACT;;;ACfA,yBAAsC;AACtC,mBAAsB;AAEtB,SAAS,oBAAoB;AAC3B,SAAO,IAAI,+BAAY;AAAA,IACrB,gBAAgB;AAAA,MACd,SAAS;AAAA,QACP,WAAW,MAAO,KAAK;AAAA;AAAA,QACvB,QAAQ,MAAO,KAAK,KAAK;AAAA;AAAA,QACzB,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,IAAI,uBAAgD;AAE7C,IAAM,qBAAiB,oBAAM,MAAM;AACxC,MAAI,6BAAU;AACZ,WAAO,kBAAkB;AAAA,EAC3B;AAEA,MAAI,CAAC,sBAAsB;AACzB,2BAAuB,kBAAkB;AAAA,EAC3C;AAEA,SAAO;AACT,CAAC;;;AC5BM,IAAM,qBAAqB,MAAgB,CAAC,iBAAiB;;;ACFpE,IAAAC,sBAAyB;AAKlB,IAAM,kBAAkC,CAAC,WAAW;AACzD,aAAO,8BAAS;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,GAAG;AAAA,IACH,UAAU,mBAAmB;AAAA,IAC7B,SAAS,YAAY;AACnB,aAAO,MAAM,WAAW;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;;;ACbO,IAAM,qBAAqB,MAAgB,CAAC,iBAAiB;;;ANS7D,IAAM,kBAAwC,CAAC,WAAW;AAXjE;AAYE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,8BAAS;AAAA,IACrB,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,mBAAmB;AAAA,IAC7B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,gCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM,yCAAiB;AAAA,QAC5B;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AOzCA,qBAAuB;AAmChB,IAAM,qBAAiB,uBAAoB,CAAC,KAAK,SAAS;AAAA,EAC/D,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,QAAQ,KAAK,EAAE,CAAC;AAAA,IAC3C;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,QAAQ,KAAK,EAAE,CAAC;AAAA,IAC3C;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,YAAY,KAAK,EAAE,CAAC;AAAA,IACnD;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,mBAAmB,KAAK,EAAE,CAAC;AAAA,IACjE;AAAA,IACA,KAAK;AAAA,IACL,OAAO,KAA2B;AAChC,UAAI,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,mBAAmB,IAAI,EAAE,CAAC;AAAA,IAChE;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,SAAS,EAAE,QAAQ,UAAU;AAAA,IAC7B,WAAW,SAA4B;AACrC,UAAI,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,YAAY,QAAQ,EAAE,CAAC;AAAA,IACtD;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,QAAQ,MAAe;AACrB,UAAI,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,eAAe,KAAK,EAAE,CAAC;AAAA,IACzD;AAAA,EACF;AACF,EAAE;;;ACnFF,IAAAC,gBAKO;AAmGA,IAAM,oBAAgB,qBAAM,CAAC,aAAmC;AACrE,UAAQ,SAAS,YAAY,GAAG;AAAA,IAC9B,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,OAAO,GAAG,SAAS,GAAG,GAAG;AAAA,UAClC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,OAAO,GAAG,SAAS,GAAG,GAAG;AAAA,UAClC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,OAAO,GAAG,SAAS,GAAG,GAAG;AAAA,UAClC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,OAAO,GAAG,SAAS,GAAG,GAAG;AAAA,UAClC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,QAAQ,GAAG,SAAS,GAAG,GAAG;AAAA,UACnC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,QAAQ,GAAG,SAAS,GAAG,GAAG;AAAA,UACnC,SACE;AAAA,QACJ;AAAA,MACF;AAAA,IAEF;AACE,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,cAAc;AAAA,QAChB;AAAA,QACA,cAAc;AAAA,UACZ,UAAU;AAAA,UACV,aAAa;AAAA,UACb,SAAS,QAAQ,GAAG,SAAS,GAAG,GAAG;AAAA,UACnC,SAAS;AAAA,QACX;AAAA,MACF;AAAA,EACJ;AACF,CAAC;AAED,IAAM,iBAAiB,CAAC,UAAwC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,UAAS,4BACV;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC,oCAAC,cAAS,IAAG,sBACX,oCAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,CAC5C,CACF;AAAA,EACF;AAEJ;AAEA,IAAM,gBAAgB,CAAC,UAAwC;AAC7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,UAAS,4BACV;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC,oCAAC,cAAS,IAAG,sBACX,oCAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,CAC5C,CACF;AAAA,EACF;AAEJ;AAEA,IAAM,aAAa,CAAC,UAAwC;AAC1D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,UAAS,4BACV;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC,oCAAC,cAAS,IAAG,sBACX,oCAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,CAC5C,CACF;AAAA,EACF;AAEJ;AAEA,IAAM,iBAAiB,CAAC,UAAwC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,UAAS,4BACV;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC,oCAAC,cAAS,IAAG,sBACX,oCAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,CAC5C,CACF;AAAA,EACF;AAEJ;AAEA,IAAM,iBAAiB,CAAC,UAAwC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACL,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,UAAS,8BACV;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC,oCAAC,cAAS,IAAG,wBACX,oCAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,CAC5C,CACF;AAAA,EACF;AAEJ;;;ACjdA,IAAAC,0BAA2C;AAC3C,IAAAC,sBAAyB;;;ACClB,IAAM,sBAAsB,MAAgB,CAAC,kBAAkB;;;ADI/D,IAAM,mBAAoC,CAAC,WAAW;AAC3D,aAAO,8BAAS;AAAA,IACd,GAAG;AAAA,IACH,UAAU,oBAAoB;AAAA,IAC9B,SAAS,YAAY;AACnB,aAAO,UAAM,qCAAY;AAAA,QACvB,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AEfO,IAAM,gBAAgB,MAAM;AAHnC;AAIE,QAAM,QAAQ,iBAAiB;AAC/B,SAAO,gBAAc,WAAM,SAAN,mBAAY,aAAY,aAAa;AAC5D;;;ACNA,IAAAC,sBAA4B;;;ACA5B,eAAsB,UAAU;AAC9B,QAAM,MAAM,MAAM,MAAM,iBAAiB;AAAA,IACvC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,QAAQ,IAAI,MAAM;AACxB,UAAM,OAAO;AACb,UAAM,UAAU;AAChB,UAAM;AAAA,EACR;AACF;;;ACbO,IAAM,wBAAwB,MAAmB,CAAC,mBAAmB;;;AFKrE,IAAM,qBAA+B,CAAC,WAAW;AACtD,QAAM,cAAc,eAAe;AAEnC,aAAO,iCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,sBAAsB;AAAA,IACnC,YAAY,YAAY;AACtB,YAAM,QAAQ;AACd,YAAM,YAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AACtE,kBAAY,MAAM;AAAA,IACpB;AAAA,EACF,CAAC;AACH;;;AGnBA,IAAAC,0BAAuC;AACvC,IAAAC,sBAAyB;AACzB,IAAAC,yBAAsB;;;ACAf,IAAM,oBAAoB,MAAgB,CAAC,gBAAgB;;;ADS3D,IAAM,iBAAuC,CAAC,WAAW;AAXhE;AAYE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,aAAO,8BAAS;AAAA,IACd,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,kBAAkB;AAAA,IAC5B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM,mCAAU;AAAA,QACrB;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AEtCO,SAAS,iBAAiB,OAAqC;AACpE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,mBAAkB;AAAA,EAC5B;AAEJ;;;ACjBO,SAAS,aAAa,OAAqC;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,4QAA2Q;AAAA,EACrR;AAEJ;;;ACjBO,SAAS,WAAW,OAAqC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,uXAAsX;AAAA,EAChY;AAEJ;;;ACnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAAC,gBAA4B;;;ACD5B,IAAAC,SAAuB;;;ACEvB,SAAS,WAAmC,OAAU,MAAmB;AACvE,QAAM,OAAqB,CAAC;AAC5B,QAAM,SAAuB,CAAC;AAE9B,QAAM,SAAS,IAAI,IAAI,IAAI;AAE3B,aAAW,OAAO,OAAO;AACvB,QAAI,OAAO,IAAI,GAAG,GAAG;AACnB,aAAO,GAAG,IAAI,MAAM,GAAG;AAAA,IACzB,OAAO;AACL,WAAK,GAAG,IAAI,MAAM,GAAG;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,CAAC,QAAQ,IAAI;AACtB;AAEO,SAAS,iBAAyC,MAAmB;AAC1E,SAAO,SAAS,MAAuB,OAAc;AACnD,WAAO,WAAW,OAAO,IAAI;AAAA,EAC/B;AACF;;;ADXO,SAAS,oBAKd,QAAgB;AAChB,QAAM,gBAAsB,qBAA2C,IAAI;AAE3E,WAASC,cAAa;AACpB,UAAM,UAAgB,kBAAW,aAAa;AAC9C,WAAO;AAAA,EACT;AAEA,WAASC,kBAA6C,WAAuC;AAC3F,UAAM,kBAAkB,CAAC,UAAiB;AACxC,YAAM,CAAC,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,EAAE,KAAK;AAC5E,YAAM,UAAU,OAAO,WAAW;AAElC,aACE,qCAAC,cAAc,UAAd,EAAuB,OAAO,WAC7B,qCAAC,aAAW,GAAI,YAAsB,CACxC;AAAA,IAEJ;AAEA,WAAO;AAAA,EACT;AAEA,WAASC,eACP,WACA,MACA;AACA,UAAM,kBAAkB,CAAC,UAAwB;AAC/C,YAAM,CAAC,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,EAAE,KAAK;AAC5E,YAAM,UAAU,OAAO,WAAW;AAClC,YAAM,WAAW;AACjB,YAAM,WAAW,QAAQ,QAAQ;AACjC,YAAM,uBACJ,eAAe,cAAc,OAAO,WAAW,cAAc,WACzD,WAAW,YACX;AACN,YAAM,YAAY,CAAC,WACf,uBACA,SAAS;AAAA,QACP,GAAG;AAAA,QACH,WAAW;AAAA,MACb,CAAC;AAEL,aACE,qCAAC,cAAc,UAAd,EAAuB,OAAO,WAC7B,qCAAC,aAAW,GAAI,YAAsB,WAAsB,CAC9D;AAAA,IAEJ;AAEA,oBAAgB,cAAc,UAAU,eAAe,UAAU;AAEjE,WAAO;AAAA,EACT;AAEA,WAASC,cACP,WACA,MACA;AACA,UAAM,kBAAkB,CAAC,UAAwB;AAC/C,YAAM,UAAUH,YAAW;AAC3B,YAAM,CAAC,aAAa,UAAU,IAAI,iBAAiB,OAAO,WAAW,EAAE,KAAK;AAC5E,YAAM,WAAW;AACjB,YAAM,WAAW,CAAC,UAAU,OAAO,WAAW,EAAE,QAAQ,IAAI,QAAQ,QAAQ;AAC5E,YAAM,uBACJ,eAAe,cAAc,OAAO,WAAW,cAAc,WACzD,WAAW,YACX;AACN,YAAM,YAAY,CAAC,WACf,uBACA,SAAS;AAAA,QACP,GAAG;AAAA,QACH,WAAW;AAAA,MACb,CAAC;AAEL,aAAO,qCAAC,aAAW,GAAI,YAAsB,WAAsB;AAAA,IACrE;AAEA,oBAAgB,cAAc,UAAU,eAAe,UAAU;AAEjE,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,aAAAC;AAAA,EACF;AACF;;;AE1GA,IAAAC,gBAA8B;AAC9B,+BAAmB;;;ACKZ,SAAS,qBACdC,UACA,aAAoD,CAAC,GACrD;AACA,QAAMC,UAASD,SAAQ,KAAK,EAAE,OAA8C,CAAC,KAAK,QAAQ;AACxF,QAAI,GAAG,IAAI,WAAW,GAAG,KAAK;AAC9B,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,SAAOC;AACT;;;ADZA,IAAM,UAAU,4BAAc,WAAW,UAAU,QAAQ,QAAQ;AAE5D,IAAM,wBAAoB,6BAAG;AAAA,EAClC,OAAO,qBAAqB,SAAS;AAAA,IACnC,UACE;AAAA,IACF,YAAY;AAAA,IACZ,SACE;AAAA,IACF,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,EACV,CAAC;AACH,CAAC;;;AHdD,IAAM,EAAE,aAAa,iBAAiB,IACpC,oBAAoB,iBAAiB;AAEhC,IAAM,OAAO,iBAAiB,qBAAO,IAAI;AACzC,IAAM,WAAW,YAAY,qBAAO,UAAU,UAAU;AACxD,IAAM,eAAe,YAAY,qBAAO,cAAc,cAAc;AACpE,IAAM,UAAU,YAAY,qBAAO,SAAS,SAAS;AACrD,IAAM,cAAc,YAAY,qBAAO,aAAa,aAAa;AACjE,IAAM,aAAa,YAAY,qBAAO,YAAY,YAAY;AAC9D,IAAM,QAAQ,YAAY,qBAAO,OAAO,OAAO;AAC/C,IAAM,UAAU,YAAY,qBAAO,SAAS,SAAS;AACrD,IAAM,SAAS,YAAY,kBAAI,SAAS,QAAQ;AAChD,IAAM,OAAO,YAAY,kBAAI,SAAS,MAAM;AAC5C,IAAM,SAAS,YAAY,kBAAI,SAAS,QAAQ;AAChD,IAAM,UAAU,qBAAO;;;AKpB9B;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA,cAAAC;AAAA;AAEA,IAAAC,gBAAuB;;;ACFvB,IAAAC,gBAA8B;AAC9B,IAAAC,4BAAmB;AAGZ,IAAM,mBAAe,8BAAG;AAAA,EAC7B,OAAO,qBAAqB,6BAAe;AAAA,IACzC,MAAM;AAAA,IACN,UACE;AAAA,IACF,OAAO;AAAA,EACT,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;;;ADhBD,IAAM,EAAE,aAAAC,cAAa,aAAa,IAAI,oBAAoB,YAAY;AAE/D,IAAMC,QAAO,aAAa,qBAAO,MAAM,MAAM;AAC7C,IAAM,QAAQD,aAAY,qBAAO,OAAO,OAAO;AAC/C,IAAM,WAAWA,aAAY,qBAAO,UAAU,UAAU;AACxD,IAAME,WAAU,qBAAO;;;AEX9B;AAAA;AAAA;AAAA;AAAA,cAAAC;AAAA;AAEA,IAAAC,gBAAoB;;;ACFpB,qBAA8B;AAEvB,IAAM,mBAAe,8BAAc,OAAO,EAAE;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AACF;;;ACNA,IAAAC,4BAAmB;AAIZ,IAAM,kBAAc,8BAAG;AAAA,EAC5B,OAAO,qBAAqB,cAAc;AAAA,IACxC,MAAM;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,EACb,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,QAAQ,CAAC;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACX,MAAM,CAAC;AAAA,MACP,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AF3DD,IAAM,EAAE,cAAAC,eAAc,aAAAC,aAAY,IAAI,oBAAoB,WAAW;AACrE,IAAM,QAAQ,aAAa,MAAM;AAM1B,IAAMC,QAAOF;AAAA,EAClB,CAAC,UAAsB,oCAAC,kBAAI,KAAJ,EAAS,GAAG,MAAM,KAAK,OAAQ,GAAG,OAAO;AAAA,EACjE;AACF;AAMO,IAAM,QAAQC;AAAA,EACnB,CAAC,UAA2B,oCAAC,kBAAI,MAAJ,EAAU,GAAG,MAAM,MAAM,OAAQ,GAAG,OAAO;AAAA,EACxE;AACF;AAMO,IAAM,YAAYA;AAAA,EACvB,CAAC,UACC,oCAAC,kBAAI,KAAJ,EAAS,GAAG,MAAM,UAAU,OAAO,SAAO,MAAE,GAAG,OAAO;AAAA,EAEzD;AACF;;;AGpCA,IAAAE,gBAAoB;;;ACFb,SAAS,SAAS,OAAmC;AAC1D,SAAO,QAAQ,KAAK;AACtB;;;ACFA,IAAAC,4BAAsC;AAE/B,IAAM,mBAAe,8BAAG;AAAA,EAC7B,MAAM;AAAA,EACN,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF,CAAC;;;AFhCM,SAAS,OAAO,OAAoB;AACzC,QAAM,CAAC,aAAa,UAAU,IAAI;AAAA,IAChC,aAAa;AAAA,EACf,EAAE,KAAK;AAEP,SACE;AAAA,IAAC,kBAAI;AAAA,IAAJ;AAAA,MACC,MAAK;AAAA,MACJ,GAAG;AAAA,MACJ,WAAW,aAAa;AAAA,QACtB,GAAG;AAAA,QACH,WAAW,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,iBAAe,SAAS,WAAW,QAAQ;AAAA;AAAA,EAC7C;AAEJ;;;AG9BA;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,oBAAAC;AAAA;AAEA,IAAAC,iBAAyB;;;ACFzB,IAAAC,gBAAgC;AAChC,IAAAC,4BAAmB;AAGZ,IAAM,qBAAiB,8BAAG;AAAA,EAC/B,OAAO,qBAAqB,+BAAiB;AAAA,IAC3C,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,WAAW;AAAA,QACX,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AD9CM,IAAM,EAAE,aAAAC,cAAa,cAAAC,cAAa,IACvC,oBAAoB,cAAc;AAE7B,IAAMC,QAAOD,cAAa,wBAAS,MAAM,MAAM;AAC/C,IAAM,UAAUD,aAAY,wBAAS,SAAS,SAAS;AACvD,IAAM,QAAQA,aAAY,wBAAS,OAAO,OAAO;AACjD,IAAMG,aAAYH,aAAY,wBAAS,WAAW,WAAW;AAC7D,IAAMI,SAAQJ,aAAY,wBAAS,OAAO,OAAO;AACjD,IAAM,cAAc,wBAAS;AAC7B,IAAMK,WAAU,wBAAS;;;AEbhC,IAAAC,iBAAyB;AAElB,IAAMC,QAAO,wBAAS;;;ACJ7B;AAAA;AAAA;AAAA,iBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA;AAAA,eAAAC;AAAA,EAAA;AAAA;AAAA,oBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAEA,IAAAC,iBAA2B;;;ACF3B,IAAAC,iBAAkC;AAClC,IAAAC,4BAAmB;AAGZ,IAAM,uBAAmB,8BAAG;AAAA,EACjC,OAAO,qBAAqB,kCAAmB;AAAA,IAC7C,SACE;AAAA,IACF,OAAO;AAAA,IACP,kBACE;AAAA,IACF,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aACE;AAAA,IACF,aACE;AAAA,IACF,WAAW;AAAA,EACb,CAAC;AACH,CAAC;;;ADbD,IAAM,EAAE,cAAAC,eAAc,aAAAC,aAAY,IAAI,oBAAoB,gBAAgB;AAEnE,IAAMC,QAAOF,cAAa,0BAAW,MAAM,MAAM;AACjD,IAAM,eAAeC;AAAA,EAC1B,0BAAW;AAAA,EACX;AACF;AACO,IAAME,WAAUF,aAAY,0BAAW,SAAS,SAAS;AACzD,IAAMG,WAAUH,aAAY,0BAAW,SAAS,SAAS;AACzD,IAAM,QAAQA,aAAY,0BAAW,OAAO,OAAO;AACnD,IAAMI,SAAQJ,aAAY,0BAAW,OAAO,OAAO;AACnD,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAMK,cAAaL,aAAY,0BAAW,YAAY,YAAY;AAClE,IAAM,gBAAgBA;AAAA,EAC3B,0BAAW;AAAA,EACX;AACF;AACO,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAM,YAAYA,aAAY,0BAAW,WAAW,WAAW;AAC/D,IAAM,QAAQA,aAAY,0BAAW,OAAO,OAAO;AACnD,IAAM,YAAYA,aAAY,0BAAW,WAAW,WAAW;AAC/D,IAAM,YAAYA,aAAY,0BAAW,WAAW,WAAW;AAC/D,IAAM,mBAAmBA;AAAA,EAC9B,0BAAW;AAAA,EACX;AACF;AACO,IAAM,YAAYA,aAAY,0BAAW,WAAW,WAAW;AAC/D,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAM,WAAWA,aAAY,0BAAW,UAAU,UAAU;AAC5D,IAAMM,WAAUN,aAAY,0BAAW,SAAS,SAAS;AACzD,IAAM,OAAOA,aAAY,0BAAW,MAAM,MAAM;AAChD,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAM,cAAcA,aAAY,0BAAW,aAAa,aAAa;AACrE,IAAM,aAAaA,aAAY,0BAAW,YAAY,YAAY;AAClE,IAAMO,WAAU,0BAAW;;;AEzClC;AAAA;AAAA,kBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,oBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,kBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,eAAAC;AAAA;AAEA,IAAAC,iBAA4B;;;ACF5B,IAAAC,iBAA8B;AAC9B,IAAAC,4BAAmB;AAGnB,IAAMC,WAAU,6BAAc,WAAW,UAAU,QAAQ,QAAQ;AAE5D,IAAM,mBAAe,8BAAG;AAAA,EAC7B,OAAO,qBAAqBA,UAAS;AAAA,IACnC,UACE;AAAA,IACF,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,cACE;AAAA,EACJ,CAAC;AACH,CAAC;;;ADTD,IAAM,EAAE,aAAAC,cAAa,kBAAAC,kBAAiB,IAAI,oBAAoB,YAAY;AAEnE,IAAMC,QAAOD,kBAAiB,sBAAO,IAAI;AACzC,IAAME,YAAWH,aAAY,sBAAO,UAAU,UAAU;AACxD,IAAMI,gBAAeJ,aAAY,sBAAO,cAAc,cAAc;AACpE,IAAMK,WAAUL,aAAY,sBAAO,SAAS,SAAS;AACrD,IAAMM,eAAcN,aAAY,sBAAO,aAAa,aAAa;AACjE,IAAMO,cAAaP,aAAY,sBAAO,YAAY,YAAY;AAC9D,IAAMQ,SAAQR,aAAY,sBAAO,OAAO,OAAO;AAC/C,IAAMS,WAAUT,aAAY,sBAAO,SAAS,SAAS;AACrD,IAAMU,UAASV,aAAY,mBAAI,SAAS,QAAQ;AAChD,IAAMW,QAAOX,aAAY,mBAAI,SAAS,MAAM;AAC5C,IAAMY,UAASZ,aAAY,mBAAI,SAAS,QAAQ;AAChD,IAAMa,WAAU,sBAAO;;;AEnB9B;AAAA;AAAA,kBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,oBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA,kBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,eAAAC;AAAA;AAEA,IAAAC,iBAA4B;;;ACF5B,IAAAC,iBAA8B;AAC9B,IAAAC,4BAAmB;AAGnB,IAAMC,WAAU,6BAAc,WAAW,UAAU,QAAQ,QAAQ;AAE5D,IAAM,mBAAe,8BAAG;AAAA,EAC7B,OAAO,qBAAqBA,UAAS;AAAA,IACnC,UACE;AAAA,IACF,YACE;AAAA,IACF,SAAS;AAAA,EACX,CAAC;AAAA,EACD,UAAU;AAAA,IACR,WAAW;AAAA,MACT,MAAM;AAAA,QACJ,SACE;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,QACL,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW;AAAA,EACb;AACF,CAAC;;;ADvBD,IAAM,EAAE,aAAAC,cAAa,kBAAAC,kBAAiB,IAAI,oBAAoB,YAAY;AAEnE,IAAMC,QAAOD,kBAAiB,sBAAO,IAAI;AACzC,IAAME,YAAWH,aAAY,sBAAO,UAAU,UAAU;AACxD,IAAMI,gBAAeJ,aAAY,sBAAO,cAAc,cAAc;AACpE,IAAMK,WAAUL,aAAY,sBAAO,SAAS,SAAS;AACrD,IAAMM,eAAcN,aAAY,sBAAO,aAAa,aAAa;AACjE,IAAMO,cAAaP,aAAY,sBAAO,YAAY,YAAY;AAC9D,IAAMQ,SAAQR,aAAY,sBAAO,OAAO,OAAO;AAC/C,IAAMS,WAAUT,aAAY,sBAAO,SAAS,SAAS;AACrD,IAAMU,UAASV,aAAY,mBAAI,SAAS,QAAQ;AAChD,IAAMW,QAAOX,aAAY,mBAAI,SAAS,MAAM;AAC5C,IAAMY,UAASZ,aAAY,mBAAI,SAAS,QAAQ;AAChD,IAAMa,WAAU,sBAAO;;;AEnB9B;AAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA,eAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA;AAAA;AAAA;AAEA,IAAAC,iBAAsB;;;ACFtB,IAAAC,iBAA6B;AAC7B,4BAAwB;AACxB,IAAAC,4BAAmB;AAGnB,IAAM,4BAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kBAAc,8BAAG;AAAA,EAC5B,OAAO,qBAAqB,6BAAc;AAAA,IACxC,OACE;AAAA,IACF,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,EACrB,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;ADvDD,IAAM,EAAE,aAAAC,cAAa,cAAAC,cAAa,IAAI,oBAAoB,WAAW;AAE9D,IAAMC,QAAOD,cAAa,qBAAM,MAAM,MAAM;AAC5C,IAAME,SAAQH,aAAY,qBAAM,OAAO,OAAO;AAC9C,IAAMI,SAAQJ,aAAY,qBAAM,OAAO,OAAO;AAC9C,IAAM,aAAaA,aAAY,qBAAM,YAAY,YAAY;AAC7D,IAAM,YAAYA,aAAY,qBAAM,WAAW,WAAW;AAC1D,IAAM,SAASA,aAAY,qBAAM,QAAQ,QAAQ;AACjD,IAAM,WAAWA,aAAY,qBAAM,UAAU,UAAU;AACvD,IAAMK,WAAU,qBAAM;;;AEb7B,IAAAC,iBAAoB;;;ACFpB,IAAAC,6BAAsC;AAG/B,IAAM,uBAAmB,+BAAG;AAAA,EACjC,QAAQ;AAAA,EACR,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,EACb;AACF,CAAC;;;ADAM,SAAS,WAAW,OAAwB;AACjD,QAAM,CAAC,aAAa,UAAU,IAAI;AAAA,IAChC,iBAAiB;AAAA,EACnB,EAAE,KAAK;AAEP,SACE;AAAA,IAAC,mBAAI;AAAA,IAAJ;AAAA,MACC,MAAK;AAAA,MACJ,GAAG;AAAA,MACJ,WAAW,iBAAiB;AAAA,QAC1B,GAAG;AAAA,QACH,WAAW,WAAW;AAAA,MACxB,CAAC;AAAA,MACD,iBAAe,SAAS,WAAW,QAAQ;AAAA;AAAA,EAC7C;AAEJ;;;AE/BA,IAAAC,iBAAqB;AAEd,IAAMC,SAAO,oBAAK;;;ACJzB;AAAA;AAAA,iBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA;AAAA;AAAA,eAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA;AAAA;AAAA;AAEA,IAAAC,iBAA4B;;;ACF5B,IAAAC,iBAAmC;AACnC,IAAAC,6BAAmB;AAGZ,IAAM,wBAAoB,+BAAG;AAAA,EAClC,OAAO,qBAAqB,mCAAoB;AAAA,IAC9C,SACE;AAAA,IACF,OACE;AAAA,IACF,OAAO;AAAA,IACP,kBACE;AAAA,IACF,kBACE;AAAA,EACJ,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,SAAS;AAAA,QACT,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;;;ADtBD,IAAM,EAAE,aAAAC,cAAa,cAAAC,cAAa,IAAI,oBAAoB,iBAAiB;AAEpE,IAAMC,SAAOD,cAAa,2BAAY,MAAM,MAAM;AAClD,IAAME,WAAUH,aAAY,2BAAY,SAAS,SAAS;AAC1D,IAAM,mBAAmBA;AAAA,EAC9B,2BAAY;AAAA,EACZ;AACF;AACO,IAAM,mBAAmBA;AAAA,EAC9B,2BAAY;AAAA,EACZ;AACF;AACO,IAAMI,SAAQJ,aAAY,2BAAY,OAAO,OAAO;AACpD,IAAMK,SAAQL,aAAY,2BAAY,OAAO,OAAO;AACpD,IAAM,WAAWA,aAAY,2BAAY,UAAU,UAAU;AAC7D,IAAM,YAAYA,aAAY,2BAAY,WAAW,WAAW;AAChE,IAAMM,WAAU,2BAAY;;;AEtBnC;AAAA;AAAA,iBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,YAAAC;AAAA;AAEA,IAAAC,iBAAyB;;;ACFzB,IAAAC,iBAAgC;AAChC,IAAAC,6BAAmB;AAGZ,IAAM,qBAAiB,+BAAG;AAAA,EAC/B,OAAO,qBAAqB,gCAAiB;AAAA,IAC3C,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EACT,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,MACX,MAAM,CAAC;AAAA,IACT;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,QACT,OACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;ADjCD,IAAM,EAAE,aAAAC,eAAa,cAAAC,cAAa,IAAI,oBAAoB,cAAc;AAEjE,IAAMC,SAAOD,cAAa,wBAAS,MAAM,MAAM;AAC/C,IAAME,SAAQH,cAAY,wBAAS,OAAO,OAAO;AACjD,IAAMI,WAAUJ,cAAY,wBAAS,SAAS,SAAS;AACvD,IAAMK,SAAQL,cAAY,wBAAS,OAAO,OAAO;AACjD,IAAMM,eAAc,wBAAS;AAC7B,IAAMC,WAAU,wBAAS;;;AEbhC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA,kBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA,eAAAC;AAAA;AAEA,IAAAC,iBAAwB;;;ACFxB,IAAAC,iBAA+B;AAC/B,IAAAC,6BAAmB;AAGZ,IAAM,oBAAgB,+BAAG;AAAA,EAC9B,OAAO,qBAAqB,+BAAgB;AAAA,IAC1C,SACE;AAAA,IACF,YAAY;AAAA,EACd,CAAC;AACH,CAAC;;;ADJD,IAAM,EAAE,kBAAAC,mBAAkB,aAAAC,cAAY,IAAI,oBAAoB,aAAa;AAEpE,IAAMC,SAAOF,kBAAiB,uBAAQ,IAAI;AAC1C,IAAM,SAASC,cAAY,uBAAQ,QAAQ,QAAQ;AACnD,IAAM,QAAQA,cAAY,uBAAQ,OAAO,OAAO;AAChD,IAAM,WAAWA,cAAY,uBAAQ,UAAU,UAAU;AACzD,IAAME,gBAAeF,cAAY,uBAAQ,cAAc,cAAc;AACrE,IAAMG,WAAUH,cAAY,uBAAQ,SAAS,SAAS;AACtD,IAAMI,eAAcJ,cAAY,uBAAQ,aAAa,aAAa;AAClE,IAAMK,aAAYL,cAAY,uBAAQ,WAAW,WAAW;AAC5D,IAAMM,cAAaN,cAAY,uBAAQ,YAAY,YAAY;AAC/D,IAAMO,SAAQP,cAAY,uBAAQ,OAAO,OAAO;AAChD,IAAMQ,WAAUR,cAAY,uBAAQ,SAAS,SAAS;AACtD,IAAMS,YAAU,uBAAQ;;;AEjB/B,IAAAC,iBAAyB;AAElB,IAAMC,SAAO,wBAAS;;;ACJ7B;AAAA;AAAA,iBAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,EAAA,YAAAC;AAAA;AAEA,IAAAC,iBAA6B;;;ACF7B,IAAAC,iBAAoC;AACpC,IAAAC,6BAAmB;AAGZ,IAAM,yBAAqB,+BAAG;AAAA,EACnC,OAAO,qBAAqB,kCAAmB;AAAA,EAC/C,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI,CAAC;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,QACT,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;;;AD5BD,IAAM,EAAE,cAAAC,eAAc,aAAAC,cAAY,IAAI,oBAAoB,kBAAkB;AAErE,IAAMC,SAAOF,cAAa,4BAAa,MAAM,MAAM;AACnD,IAAMG,aAAYF,cAAY,4BAAa,WAAW,WAAW;AACjE,IAAM,OAAOA,cAAY,4BAAa,MAAM,MAAM;AAClD,IAAM,cAAcA,cAAY,4BAAa,aAAa,aAAa;AACvE,IAAM,WAAWA,cAAY,4BAAa,UAAU,UAAU;AAC9D,IAAMG,SAAQH,cAAY,4BAAa,OAAO,OAAO;AACrD,IAAMI,YAAU,4BAAa;AAC7B,IAAM,cAAc,4BAAa;AACjC,IAAM,kBAAkB,4BAAa;;;AEhB5C;AAAA;AAAA,sBAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA;AAAA,mBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,EAAA,aAAAC;AAAA,EAAA;AAAA,oBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,eAAAC;AAAA,EAAA,iBAAAC;AAAA;AAGA,IAAAC,iBAAuB;;;ACHvB,IAAAC,iBAA8B;AAC9B,IAAAC,6BAAmB;AAGZ,IAAM,mBAAe,+BAAG;AAAA,EAC7B,OAAO,qBAAqB,8BAAe;AAAA,IACzC,WACE;AAAA,IACF,YAAY;AAAA,IACZ,SACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,IACV,eAAe;AAAA,EACjB,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,MACA,IAAI;AAAA,QACF,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,QACP,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;;;AD9BD,IAAM,EAAE,cAAAC,eAAc,aAAAC,cAAY,IAAI,oBAAoB,YAAY;AAE/D,IAAMC,SAAOF,cAAa,sBAAO,MAAW,MAAM;AAClD,IAAMG,gBAAeF,cAAY,sBAAO,cAAc,cAAc;AACpE,IAAMG,WAAUH,cAAY,sBAAO,SAAS,SAAS;AACrD,IAAMI,WAAUJ,cAAY,sBAAO,SAAS,SAAS;AACrD,IAAMK,aAAYL,cAAY,sBAAO,WAAW,WAAW;AAC3D,IAAMM,QAAON,cAAY,sBAAO,MAAM,MAAM;AAC5C,IAAM,YAAYA,cAAY,sBAAO,WAAW,WAAW;AAC3D,IAAM,iBAAiBA;AAAA,EAC5B,sBAAO;AAAA,EACP;AACF;AACO,IAAM,gBAAgBA,cAAY,sBAAO,eAAe,eAAe;AACvE,IAAMO,YAAWP,cAAY,sBAAO,UAAU,UAAU;AACxD,IAAMQ,SAAQR,cAAY,sBAAO,OAAO,OAAO;AAC/C,IAAM,OAAOA,cAAY,sBAAO,MAAM,MAAM;AAC5C,IAAMS,cAAaT,cAAY,sBAAO,YAAY,YAAY;AAC9D,IAAMU,WAAUV,cAAY,sBAAO,SAAS,SAAS;AACrD,IAAMW,aAAYX,cAAY,sBAAO,WAAW,WAAW;AAC3D,IAAMY,YAAU,sBAAO;AACvB,IAAM,eAAe,sBAAO;AAC5B,IAAMC,eAAc,sBAAO;;;AE7BlC;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA,gBAAAC;AAAA,EAAA,cAAAC;AAAA,EAAA;AAAA,cAAAC;AAAA,EAAA;AAAA;AAEA,IAAAC,iBAAoB;;;ACFpB,IAAAC,6BAAmB;;;ACAnB,IAAAC,kBAA8B;AAEvB,IAAM,mBAAe,+BAAc,OAAO,EAAE;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ADNO,IAAM,kBAAc,+BAAG;AAAA,EAC5B,OAAO,qBAAqB,cAAc;AAAA,IACxC,MAAM;AAAA,EACR,CAAC;AAAA,EACD,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;;;ADrBD,IAAM,EAAE,cAAAC,gBAAc,aAAAC,cAAY,IAAI,oBAAoB,WAAW;AAE9D,IAAMC,SAAOF,eAAa,mBAAI,OAAO,MAAM;AAC3C,IAAMG,UAASF,cAAY,mBAAI,OAAO,QAAQ;AAC9C,IAAMG,QAAOH,cAAY,mBAAI,OAAO,MAAM;AAC1C,IAAMI,UAASJ,cAAY,mBAAI,OAAO,QAAQ;AAC9C,IAAM,MAAMA,cAAY,mBAAI,IAAI,KAAK;AACrC,IAAM,UAAUA,cAAY,mBAAI,IAAI,SAAS;AAC7C,IAAM,OAAOA,cAAY,mBAAI,IAAI,MAAM;;;AGd9C;AAAA;AAAA,iBAAAK;AAAA,EAAA,eAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,YAAAC;AAAA,EAAA,eAAAC;AAAA;AAEA,IAAAC,iBAAqB;;;ACFrB,IAAAC,iBAA4B;AAC5B,IAAAC,6BAAmB;AAGZ,IAAM,iBAAa,+BAAG;AAAA,EAC3B,OAAO,qBAAqB,0BAAW;AAAA,EACvC,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI,CAAC;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,SACE;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,CAAC;;;AD5BD,IAAM,EAAE,aAAAC,eAAa,cAAAC,eAAa,IAAI,oBAAoB,UAAU;AAE7D,IAAMC,SAAOD,eAAa,oBAAK,MAAM,MAAM;AAC3C,IAAME,WAAUH,cAAY,oBAAK,SAAS,SAAS;AACnD,IAAMI,aAAYJ,cAAY,oBAAK,WAAW,WAAW;AACzD,IAAMK,QAAOL,cAAY,oBAAK,MAAM,MAAM;AAC1C,IAAMM,WAAUN,cAAY,oBAAK,SAAS,SAAS;AACnD,IAAMO,YAAU,oBAAK;;;AEX5B,IAAAC,iBAAwB;AAEjB,IAAMC,SAAO,uBAAQ;;;ACJ5B,IAAAC,cAAkB;AAElB,IAAM,aAAa,cAChB,MAAM;AAAA,EACL,cAAE,OAAO;AAAA,EACT,cAAE,OAAO,EAAE,UAAU,CAAC,QAAQ;AAC5B,UAAM,SAAS,WAAW,GAAG;AAC7B,WAAO,MAAM,MAAM,IAAI,OAAO;AAAA,EAChC,CAAC;AACH,CAAC,EACA,SAAS,EACT,SAAS,EACT,QAAQ,IAAI,EACZ,MAAM,IAAI;AAIN,SAAS,aAAa,OAAgB,WAA0B,MAAM;AAC3E,SAAO,WAAW,MAAM,KAAK,KAAK;AACpC;;;ACNA,IAAM,gBAAgB;AAAA,EACpB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,kBAAkB;AACpB;AAWO,SAAS,aAAa,OAAgB,QAA6B;AACxE,QAAM;AAAA;AAAA,IAEJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAAO,OAAO,CAAC,GAAG,eAAe,MAAM;AAE3C,QAAM,YAAY,IAAI,KAAK,aAAa,QAAQ;AAAA,IAC9C,uBAAuB;AAAA,IACvB,uBAAuB;AAAA,IAEvB,GAAI,OAAO,aAAa,WACpB;AAAA,MACE,OAAO;AAAA,MACP;AAAA,IACF,IACA,CAAC;AAAA,IAEL,GAAI,UACA;AAAA,MACE,UAAU;AAAA,MACV,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,IACA,CAAC;AAAA,EACP,CAAC;AAED,SAAO,UAAU,OAAO,aAAa,OAAO,CAAC,CAAC;AAChD;;;AlEhCO,SAAS,QAAQ,OAAqB;AAC3C,QAAM,cAAc;AAAA,QAClB,2BAAW,CAAC,SAAS;AAAA,MACnB,SAAS,IAAI;AAAA,MACb,eAAe,IAAI;AAAA,IACrB,EAAE;AAAA,EACJ;AAEA,SACE,0DACE;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAM,YAAY,QAAQ;AAAA,MAC1B,cAAc,CAAC,YAAY;AACzB,oBAAY,QAAQ,QAAQ,QAAQ,IAAI;AAAA,MAC1C;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA;AAAA,IAEb,oCAAC,eAAO,SAAP,EAAe,SAAO,MAAC,WAAU,eAC/B,MAAM,YACL,oCAAC,YAAO,MAAK,YACX,oCAAC,eAAO,MAAP,MACC,oCAAC,eAAO,UAAP,MACC,oCAAC,gBAAW,CACd,CACF,CACF,CAEJ;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,UAAP,IAAgB,GACjB,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,EAAe,WAAU,mDACxB,oCAAC,aAAQ,GACT,oCAAC,YAAO,GACR,oCAAC,SAAM,OAAO,MAAM,SAAS,CAAC,GAAG,GACjC,oCAAC,SAAI,WAAU,QAAO,GACtB,oCAAC,eAAU,CACb,CACF,CACF;AAAA,EACF,GAEA;AAAA,IAAC,gBAAQ;AAAA,IAAR;AAAA,MACC,MAAM,YAAY,cAAc;AAAA,MAChC,cAAc,CAAC,YAAY;AACzB,oBAAY,cAAc,QAAQ,QAAQ,IAAI;AAAA,MAChD;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA,MACb,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA;AAAA,IAEA,oCAAC,gBAAQ,SAAR,EAAgB,WAAU,kBAAiB,SAAO,QAChD,MAAM,YACL,oCAAC,YAAO,MAAK,YACX,oCAAC,eAAO,MAAP,MACC,oCAAC,eAAO,UAAP,MACC,oCAAC,gBAAW,CACd,CACF,CACF,CAEJ;AAAA,IACA,oCAAC,6BACC,oCAAC,gBAAQ,YAAR,MACC,oCAAC,gBAAQ,SAAR,EAAgB,WAAU,4HACzB,oCAAC,aAAQ,GACT,oCAAC,YAAO,GACR,oCAAC,SAAM,OAAO,MAAM,SAAS,CAAC,GAAG,GACjC,oCAAC,eAAU,CACb,CACF,CACF;AAAA,EACF,CACF;AAEJ;AAEA,SAAS,YAAY;AACnB,SACE,oCAAC,SAAI,WAAU,8CAA2C,0CAE1D;AAEJ;AAEA,SAAS,UAAU;AApHnB;AAqHE,QAAM,eAAe,gBAAgB;AAErC,SACE,oCAAC,SAAI,WAAU,6BACb,oCAAC,eAAO,MAAP,MACC,oCAAC,eAAO,UAAP,MACC,oCAAC,gBAAW,CACd,CACF,GACA,oCAAC,aACC,oCAAC,OAAE,WAAU,4BAAyB,kBAAa,SAAb,mBAAmB,IAAK,GAC9D,oCAAC,OAAE,WAAU,6BACV,kBAAa,SAAb,mBAAmB,eAClB,kBAAa,SAAb,mBAAmB,mBACnB,kBAAa,SAAb,mBAAmB,SACvB,CACF,CACF;AAEJ;AAMA,SAAS,MAAM,OAAmB;AAChC,QAAM,kBAAkB,mBAAmB;AAC3C,QAAM,cAAc;AAAA,QAClB,2BAAW,CAAC,SAAS;AAAA,MACnB,SAAS,IAAI;AAAA,MACb,eAAe,IAAI;AAAA,IACrB,EAAE;AAAA,EACJ;AAEA,SACE,oCAAC,SAAI,WAAU,sBACb,oCAAC,YACE,MAAM,MAAM,IAAI,CAAC,MAAM,UACtB;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,KAAK,OAAO;AAAA,MACjB,WAAU;AAAA;AAAA,IAEV;AAAA,MAAC,YAAAC;AAAA,MAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,SAAS,MAAM;AACb,sBAAY,QAAQ,QAAQ,KAAK;AACjC,sBAAY,cAAc,QAAQ,KAAK;AAAA,QACzC;AAAA,QACA,WAAU;AAAA;AAAA,MAEV,oCAAC,KAAK,MAAL,EAAU,WAAU,UAAS;AAAA,MAC9B,oCAAC,UAAK,WAAU,UAAQ,KAAK,KAAM;AAAA,MACnC,oCAAC,oBAAiB,WAAU,wBAAuB;AAAA,IACrD;AAAA,EACF,CACD,CACH,GAEA,oCAAC,YACC,oCAAC,QAAG,WAAU,sDACZ;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,UAAU,gBAAgB;AAAA,MAC1B,SAAS,MAAM;AACb,wBAAgB,OAAO;AACvB,oBAAY,QAAQ,QAAQ,KAAK;AACjC,oBAAY,cAAc,QAAQ,KAAK;AAAA,MACzC;AAAA;AAAA,IAEA,oCAAC,gBAAa,WAAU,UAAS;AAAA,IACjC,oCAAC,UAAK,WAAU,UAAO,SAAO;AAAA,IAC9B,oCAAC,oBAAiB,WAAU,wBAAuB;AAAA,EACrD,CACF,CACF,CACF;AAEJ;AAEA,SAAS,SAAS;AArMlB;AAsME,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AAAA,IACjC,iBAAiB;AAAA,EACnB,CAAC;AAED,QAAM,cAAc;AAAA,QAClB,2BAAW,CAAC,SAAS;AAAA,MACnB,SAAS,IAAI;AAAA,MACb,eAAe,IAAI;AAAA,MACnB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,SACE,oCAAC,SAAI,WAAU,0DACb,oCAAC,SAAI,WAAU,wGAAqG,mBAEpH,GACA,oCAAC,SAAI,WAAU,iCACZ,cAAa,iBAAY,SAAZ,mBAAkB,SAAS;AAAA,IACvC,UAAU,yCAAY,SAAS;AAAA,IAC/B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,SAAI,WAAU,sBACb;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,SAAS,MAAM;AACb,oBAAY,kBAAkB,QAAQ,IAAI;AAC1C,oBAAY,kBAAkB,OAAO,YAAY;AACjD,oBAAY,QAAQ,QAAQ,KAAK;AACjC,oBAAY,cAAc,QAAQ,KAAK;AAAA,MACzC;AAAA;AAAA,IACD;AAAA,EAED,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,MAAM;AACb,oBAAY,kBAAkB,QAAQ,IAAI;AAC1C,oBAAY,kBAAkB,OAAO,SAAS;AAC9C,oBAAY,QAAQ,QAAQ,KAAK;AACjC,oBAAY,cAAc,QAAQ,KAAK;AAAA,MACzC;AAAA;AAAA,IACD;AAAA,EAED,CACF,CACF;AAEJ;;;AmExPA,qCAAkC;AAClC,kCAEO;AAEP,mBAAkB;AAClB,IAAAC,eAAiB;AACjB,IAAAC,iBAA8C;AAC9C,IAAAC,yBAAwB;AAajB,SAAS,OAAO,OAAoB;AACzC,QAAM,CAAC,UAAU,QAAQ,QAAI,4BAAAC;AAAA,IAC3B;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA;AAAA,UACE,+BAAAC,SAAsB;AAAA,QACpB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAS,CAAC;AAElD,gCAAU,MAAM;AACd,aAAS,QAAQ,QAAiC;AAChD,uBAAgB,iCAAQ,yBAAwB,CAAC;AAAA,IACnD;AAEA,yCAAU,GAAG,UAAU;AACvB,yCAAU,GAAG,QAAQ;AAErB,WAAO,MAAM;AACX,2CAAU,GAAG,QAAQ;AACrB,2CAAU,IAAI,UAAU;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,oCAAC,SAAI,eAAW,gCAAQ,YAAY,MAAM,SAAS,KACjD,oCAAC,SAAI,KAAK,UAAU,WAAU,qBAC5B,oCAAC,SAAI,WAAU,gBACZ,MAAM,QAAQ,IAAI,CAAC,QAAQ,UAAU;AACpC,UAAM,MACJ;AAAA,MAAC,aAAAC;AAAA,MAAA;AAAA,QACC,KAAK,OAAO;AAAA,QACZ,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,UAAU,UAAU;AAAA;AAAA,IACtB;AAGF,WACE,oCAAC,2BAAS,KAAK,SACZ,CAAC,OAAO,cACP,oCAAC,SAAI,WAAU,qBAAmB,GAAI,IAEtC;AAAA,MAAC,aAAAC;AAAA,MAAA;AAAA,QACC,MAAM,OAAO;AAAA,QACb,WAAU;AAAA;AAAA,MAET;AAAA,IACH,CAEJ;AAAA,EAEJ,CAAC,CACH,CACF,GAEA,oCAAC,SAAI,WAAU,mEACZ,MAAM,QAAQ,IAAI,CAAC,GAAG,UACrB;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS,MAAM;AACb,6CAAU,SAAS;AAAA,MACrB;AAAA,MACA,cAAY,eAAe,QAAQ,CAAC;AAAA,MACpC,eAAa,SAAS,UAAU,YAAY;AAAA;AAAA,EAC9C,CACD,CACH,CACF;AAEJ;;;ACrGA,IAAAC,iBAAwD;AACxD,gBAA+B;AAM/B,sBAA6C;AAC7C,IAAAA,iBAAqC;AACrC,IAAAC,cAAkB;;;ACXlB,IAAAC,0BAKO;AACP,IAAAC,sBAAiC;AACjC,IAAAC,yBAAsB;;;ACJf,IAAM,wBAAwB,CAAC,UAAsC;AAAA,EAC1E;AAAA,EACA;AACF;;;ADUO,IAAM,qBAGT,CAAC,OAAO,WAAW;AAnBvB;AAoBE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,sCAAiB;AAAA,IAC7B,WAAS,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACvC,GAAG;AAAA,IACH,UAAU,sBAAsB,KAAK;AAAA,IACrC,SAAS,OAAO,EAAE,WAAW,OAAO,MAAM;AACxC,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM;AAAA,QACX,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AAhD/B,UAAAC,KAAA;AAiDM,WAAIA,MAAA,qCAAU,aAAV,gBAAAA,IAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AEvDA,uBAAsB;AACtB,IAAAC,iBAAyB;AA2BlB,SAAS,uBAIdC,YACA,WACyC;AAnC3C;AAoCE,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,CAAC;AAClC,QAAM,CAAC,UAAU,YAAY,QAAI,yBAAS,EAAE;AAE5C,QAAM,cAAc,CAAC,SAAiB;AACpC,YAAQ,CAAC;AACT,iBAAa,IAAI;AAAA,EACnB;AAEA,QAAM,QAAQA,WAAS;AAAA,IACrB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,GAAG;AAAA,EACL,CAAC;AAED,QAAM,eACJ,WAAM,SAAN,mBAAY,MACT,IAAI,CAACC,UAASA,MAAK,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,GAChD,WAAU,CAAC;AAEhB,QAAM,kBAAc,wBAAM,YAAY,QAAQ;AAC9C,QAAM,mBAAmB,KAAK,KAAK,WAAW,SAAS,QAAQ;AAE/D,QAAM,OAAO,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;AAC1C,QAAM,cAAY,iBAAM,SAAN,mBAAY,MAAM,GAAG,QAArB,mBAA0B,eAAc;AAC1D,QAAM,aAAa,KAAK,KAAK,YAAY,QAAQ;AACjD,QAAM,cAAc,OAAO;AAC3B,QAAM,cAAc,OAAO;AAE3B,QAAM,OAAO,YAAY;AACvB,QAAI,CAAC,aAAa;AAChB;AAAA,IACF;AAEA,UAAM,WAAW,OAAO;AAExB,QAAI,mBAAmB,UAAU;AAC/B,YAAM,MAAM,cAAc;AAAA,IAC5B;AAEA,YAAQ,CAACC,UAASA,QAAO,CAAC;AAAA,EAC5B;AAEA,QAAM,OAAO,YAAY;AACvB,QAAI,CAAC,aAAa;AAChB;AAAA,IACF;AAEA,YAAQ,CAACA,UAASA,QAAO,CAAC;AAAA,EAC5B;AAEA,QAAM,YAAY,MAAM;AACtB,YAAQ,CAAC;AAAA,EACX;AAEA,QAAM,UAAU,MAAM,aAAa,MAAM;AAEzC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,uBAAuB,SAAS;AAAA,EAC9B,WAAW,CAAC,IAAI,IAAI,IAAI,GAAG;AAAA,EAC3B,iBAAiB;AAAA,EACjB,aAAa;AACf;;;AC/GO,SAAS,UAAU,OAAqC;AAC7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,mBAAkB;AAAA,EAC5B;AAEJ;;;ACjBO,SAAS,gBAAgB,OAAqC;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,mBAAkB;AAAA,EAC5B;AAEJ;;;ACjBO,SAAS,gBAAgB,OAAqC;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,oBAAmB;AAAA,EAC7B;AAEJ;;;ACjBO,SAAS,WAAW,OAAqC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,6eAA4e;AAAA,EACtf;AAEJ;;;ACfO,SAAS,YAAY,OAAqC;AAC/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACP,GAAG;AAAA;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA,QACF,SAAQ;AAAA;AAAA,IACV;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,KAAI;AAAA,UACJ,aAAY;AAAA,UACZ,MAAK;AAAA,UACL,QAAO;AAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEJ;;;ACdA,IAAM,QAAQ;AACd,IAAM,aAAa;AACnB,IAAM,OAAO;AACb,IAAM,SAAS;AASR,SAAS,WAAW,SAAiB,QAA2B;AACrE,QAAM,QAAO,iCAAQ,SAAQ;AAC7B,QAAM,SAAQ,iCAAQ,UAAS;AAC/B,QAAM,aAAY,iCAAQ,cAAa;AAEvC,MAAI,KAAM,WAAU,QAAQ,KAAK;AAEjC,MAAI,QAAQ,SAAS,GAAG;AACtB,WAAO,QAAQ,YAAY;AAAA,EAC7B;AAEA,MAAI,qBAAqB,QAAQ;AAC/B,cAAU,YAAY;AAAA,EACxB;AAEA,SAAO,QACJ,MAAM,SAAS,EACf,IAAI,CAAC,SAAS;AACb,QAAI,KAAK,SAAS,EAAG,QAAO,KAAK,YAAY;AAE7C,UAAM,YAAY,KAAK,OAAO,CAAC,EAAE,YAAY;AAC7C,UAAM,aAAa,QAAQ,KAAK,UAAU,CAAC,EAAE,YAAY,IAAI,KAAK,UAAU,CAAC;AAE7E,WAAO,UAAU,OAAO,UAAU;AAAA,EACpC,CAAC,EACA,KAAK,GAAG;AACb;AAEA,WAAW,aAAa;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AACF;;;ACnEO,SAAS,UAAU,OAAqC;AAC7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,MAAK;AAAA,MACJ,GAAG;AAAA;AAAA,IAEJ,oCAAC,OAAE,QAAO,iCACR;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,GAAE;AAAA,QACF,MAAK;AAAA;AAAA,IACP,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,MAAK;AAAA;AAAA,IACP,CACF;AAAA,IACA,oCAAC,cACC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,GAAE;AAAA,QACF,GAAE;AAAA,QACF,OAAM;AAAA,QACN,QAAO;AAAA,QACP,aAAY;AAAA,QACZ,2BAA0B;AAAA;AAAA,MAE1B,oCAAC,aAAQ,cAAa,KAAI,QAAO,sBAAqB;AAAA,MACtD;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,QAAO;AAAA,UACP,UAAS;AAAA,UACT,IAAG;AAAA,UACH,QAAO;AAAA;AAAA,MACT;AAAA,MACA,oCAAC,cAAS,IAAG,KAAI;AAAA,MACjB,oCAAC,oBAAe,cAAa,KAAI;AAAA,MACjC,oCAAC,iBAAY,KAAI,aAAY,UAAS,OAAM;AAAA,MAC5C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,KAAI;AAAA,UACJ,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,MAAK;AAAA,UACL,QAAO;AAAA,UACP,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,QAAO;AAAA,UACP,UAAS;AAAA,UACT,IAAG;AAAA,UACH,QAAO;AAAA;AAAA,MACT;AAAA,MACA,oCAAC,cAAS,IAAG,MAAK;AAAA,MAClB,oCAAC,oBAAe,cAAa,MAAK;AAAA,MAClC,oCAAC,iBAAY,KAAI,aAAY,UAAS,OAAM;AAAA,MAC5C;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,KAAI;AAAA,UACJ,QAAO;AAAA;AAAA,MACT;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,IAAG;AAAA,UACH,KAAI;AAAA,UACJ,QAAO;AAAA;AAAA,MACT;AAAA,IACF,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,eAAc;AAAA;AAAA,MAEd,oCAAC,UAAK,WAAU,WAAU;AAAA,MAC1B,oCAAC,UAAK,QAAO,YAAW,WAAU,SAAQ,aAAY,KAAI;AAAA,IAC5D,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,eAAc;AAAA;AAAA,MAEd,oCAAC,UAAK,WAAU,WAAU;AAAA,MAC1B,oCAAC,UAAK,QAAO,YAAW,WAAU,SAAQ,aAAY,KAAI;AAAA,IAC5D,GACA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,IAAG;AAAA,QACH,eAAc;AAAA;AAAA,MAEd,oCAAC,UAAK,WAAU,WAAU;AAAA,MAC1B,oCAAC,UAAK,QAAO,YAAW,WAAU,SAAQ,aAAY,KAAI;AAAA,IAC5D,CACF;AAAA,EACF;AAEJ;;;AChIO,SAAS,MAAM,OAAmB;AACvC,SACE,oCAAC,SAAI,MAAK,SAAQ,aAAU,UAAS,WAAW,MAAM,aACpD,oCAAC,SAAI,WAAU,sCACb,oCAAC,SAAI,WAAU,mFAAkF,GACjG,oCAAC,aAAU,WAAU,mCAAkC,GACvD,oCAAC,SAAI,WAAU,sIACb,oCAAC,MAAM,MAAN,EAAW,WAAU,qBAAoB,CAC5C,CACF,GACA,oCAAC,QAAG,WAAU,qCAAmC,MAAM,KAAM,GAC7D,oCAAC,OAAE,WAAU,mEACV,MAAM,OACT,CACF;AAEJ;;;AXWO,SAAS,kBAAkB,OAAwB;AArC1D;AAsCE,QAAM,CAAC,KAAK,MAAM,QAAI,yBAAwC,KAAK;AAEnE,QAAM,CAAC,OAAO,QAAQ,QAAI;AAAA,IACxB,CAACC,OAAiBC,WAA8B;AAAA,MAC9C,GAAGD;AAAA,MACH,GAAGC;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM,MAAM,UAAU,CAAC;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,aAAa,cAAc;AAEjC,QAAM,yBAAqB,qCAAqB;AAAA,IAC9C,OAAO,MAAM;AAAA,IACb,aAAa,CAAC,SAAS;AAAA,IACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,MACf,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC;AAAA,EACL,CAAC;AAED,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,uBAAuB,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,MACN,GAAI,MAAM,QAAQ;AAAA,QAChB,YAAY;AAAA,UACV,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,MACA,GAAI,MAAM,YAAY;AAAA,QACpB,gBAAgB;AAAA,UACd,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,MACA,GAAI,MAAM,UAAU;AAAA,QAClB,QAAQ;AAAA,UACN,OAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,MACA,GAAI,MAAM,aAAa;AAAA,QACrB,iBAAiB;AAAA,UACf,GAAI,MAAM,UAAU,SAAS;AAAA,YAC3B,oBAAoB,IAAI;AAAA,kBACtB,4BAAW,MAAM,UAAU,KAAK;AAAA,cAChC,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,UACA,GAAI,MAAM,UAAU,OAAO;AAAA,YACzB,mBAAmB,IAAI;AAAA,kBACrB,0BAAS,MAAM,UAAU,GAAG;AAAA,cAC5B,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,QAAG,WAAU,2BAAwB,aAAW,GACjD,oCAAC,OAAE,WAAU,iCAA8B,uBAAqB,GAEhE,oCAAC,SAAI,WAAU,mBACb;AAAA,IAAC,qBAAa;AAAA,IAAb;AAAA,MACC,OAAO,MAAM;AAAA,MACb,eAAe,CAAC,YAAY;AAC1B,kBAAU;AACV,iBAAS;AAAA,UACP,MACE,cACG,KAAM,MAAM,aAAa,CAAC,CAAgB,EAC1C,UAAU,QAAQ,KAAK,EAAE,QAAQ;AAAA,QACxC,CAAC;AAAA,MACH;AAAA;AAAA,IAEC,MAAM,UAAU,IAAI,CAAC,SACpB,oCAAC,qBAAa,MAAb,EAAkB,KAAK,MAAM,OAAO,QACnC,oCAAC,qBAAa,UAAb,MACE,WAAW,MAAM;AAAA,MAChB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC,CACD;AAAA,IAED,oCAAC,qBAAa,WAAb,IAAuB;AAAA,EAC1B,CACF,GAEA,oCAAC,SAAI,WAAU,YACb,oCAAC,SAAI,WAAU,8BACb;AAAA,IAAC,mBAAW;AAAA,IAAX;AAAA,MACC,WAAS;AAAA,MACT,eAAa;AAAA,MACb,OAAO,EAAC,WAAM,cAAN,mBAAiB,QAAO,WAAM,cAAN,mBAAiB,GAAG,EACjD,OAAO,OAAO,EACd,IAAI,CAAC,UAAM,0BAAU,CAAC,CAAC;AAAA,MAC1B,eAAe,CAAC,YAAY;AAzJxC,YAAAC,KAAAC;AA0Jc,kBAAU;AACV,iBAAS;AAAA,UACP,WAAW;AAAA,YACT,QAAOD,MAAA,QAAQ,MAAM,GAAG,CAAC,MAAlB,gBAAAA,IAAqB,OAAO;AAAA,YACnC,MAAKC,MAAA,QAAQ,MAAM,GAAG,CAAC,MAAlB,gBAAAA,IAAqB,OAAO;AAAA,UACnC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,cAAc,CAAC,YAAY;AACzB,YAAI,QAAQ,KAAM;AAClB,YAAI,MAAM,UAAW;AACrB,eAAO,KAAK;AAAA,MACd;AAAA,MACA,eAAc;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,QACX,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA;AAAA,IAEA;AAAA,MAAC,qBAAa;AAAA,MAAb;AAAA,QACC,OAAO;AAAA,QACP,eAAe,CAAC,YAAY;AAC1B,gBAAM,QAAQ,cAAc,MAAM,QAAQ,KAAK;AAE/C,cAAI,UAAU,SAAS;AACrB,kBAAM,MAAM,oBAAI,KAAK;AAErB,qBAAS;AAAA,cACP,WAAW;AAAA,gBACT,WAAO,4BAAW,GAAG;AAAA,gBACrB,SAAK,0BAAS,GAAG;AAAA,cACnB;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,qBAAS;AAAA,cACP,WAAW;AAAA,YACb,CAAC;AAAA,UACH;AAEA,oBAAU;AACV,iBAAO,KAAK;AAAA,QACd;AAAA;AAAA,MAEA,oCAAC,qBAAa,MAAb,EAAkB,OAAM,SACvB,oCAAC,qBAAa,UAAb,MAAsB,KAAG,GAC1B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MACA,oCAAC,qBAAa,MAAb,EAAkB,OAAM,WACvB,oCAAC,qBAAa,UAAb,MAAsB,OAAK,GAC5B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MAEA,oCAAC,mBAAW,SAAX,MACE,CAAC,QACA;AAAA,QAAC,qBAAa;AAAA,QAAb;AAAA,UACC,OAAM;AAAA,UACN,SAAS,MAAM,IAAI,QAAQ,IAAI;AAAA;AAAA,QAE/B,oCAAC,mBAAW,SAAX,MACC,oCAAC,qBAAa,UAAb,MAAsB,QAAM,GAC7B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MACF,CAEJ;AAAA,MAEA,oCAAC,qBAAa,WAAb,IAAuB;AAAA,IAC1B;AAAA,IACA,oCAAC,6BACC,oCAAC,mBAAW,YAAX,MACC,oCAAC,mBAAW,SAAX,MACC,oCAAC,mBAAW,MAAX,EAAgB,MAAK,SACpB,oCAAC,mBAAW,SAAX,MACE,CAAC,QACA,0DACE,oCAAC,mBAAW,aAAX,MACC,oCAAC,mBAAW,aAAX,MACC,oCAAC,qBAAgB,CACnB,GACA,oCAAC,mBAAW,aAAX,MACC,oCAAC,mBAAW,WAAX,IAAqB,CACxB,GACA,oCAAC,mBAAW,aAAX,MACC,oCAAC,sBAAiB,CACpB,CACF,GACA,oCAAC,mBAAW,OAAX,MACC,oCAAC,mBAAW,WAAX,MACC,oCAAC,mBAAW,UAAX,MACE,IAAI,SAAS,IAAI,CAAC,SAAS,OAC1B,oCAAC,mBAAW,aAAX,EAAuB,KAAK,MAC1B,QAAQ,MAAM,UAAU,GAAG,CAAC,CAC/B,CACD,CACH,CACF,GACA,oCAAC,mBAAW,WAAX,MACE,IAAI,MAAM,IAAI,CAAC,MAAM,OACpB,oCAAC,mBAAW,UAAX,EAAoB,KAAK,MACvB,KAAK,IAAI,CAAC,KAAKC,QACd,oCAAC,mBAAW,WAAX,EAAqB,KAAKA,KAAI,OAAO,OACpC,oCAAC,mBAAW,kBAAX,MACE,IAAI,GACP,CACF,CACD,CACH,CACD,CACH,CACF,CACF,CAEJ,CACF,CACF,CACF,CACF;AAAA,EACF,GAEA,oCAAC,SAAI,WAAU,QAAO,GAEtB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,MAAM,WAAW,CAAC,MAAM,QAAQ,IAAI,CAAC;AAAA,MAC5C,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,cACX,KAAM,MAAM,iBAAiB,CAAC,CAAoB,EAClD,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAElC,kBAAU;AACV,iBAAS;AAAA,UACP,UAAU,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,eAAc,GAC5C,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,mBAAmB,MAAM,IAAI,CAAC,aAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,UAAU,MAAM,YAChC,oCAAC,eAAO,UAAP,MACE,WAAW,UAAU;AAAA,MACpB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,GAEA;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,MAAM,SAAS,CAAC,MAAM,MAAM,IAAI,CAAC;AAAA,MACxC,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,cACX,KAAK,mBAAmB,EACxB,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAElC,kBAAU;AACV,iBAAS;AAAA,UACP,QAAQ,SAAS;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,UAAS,GACvC,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,iBAAiB,MAAM,IAAI,CAAC,WAC3B,oCAAC,eAAO,MAAP,EAAY,KAAK,QAAQ,MAAM,UAC9B,oCAAC,eAAO,UAAP,MACE,WAAW,QAAQ;AAAA,MAClB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,CACF,GAEC,KAAK,UAAU,KACd;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,cAAc;AAAA,MAC9B,OAAO,UAAU,kBAAkB;AAAA,MACnC,SACE,UACI,mCACA;AAAA,MAEN,WAAU;AAAA;AAAA,EACZ,GAGD,KAAK,UAAU,KACd,oCAAC,SAAI,WAAU,6CACb,oCAAC,SAAI,WAAU,yEACb,oCAAC,cAAM,MAAN,EAAW,WAAU,cACpB,oCAAC,cAAM,QAAN,MACC,oCAAC,cAAM,KAAN,MACC,oCAAC,cAAM,SAAN,MAAc,UAAQ,GACvB,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,aAAW,GAC1B,oCAAC,cAAM,SAAN,MAAc,MAAI,GACnB,oCAAC,cAAM,SAAN,MAAc,YAAU,GACzB,oCAAC,cAAM,SAAN,MAAc,WAAS,GACxB,oCAAC,cAAM,SAAN,MAAc,gBAAc,GAC7B,oCAAC,cAAM,SAAN,MAAc,sBAAoB,GACnC,oCAAC,cAAM,SAAN,MAAc,gBAAc,GAC7B,oCAAC,cAAM,SAAN,MAAc,YAAU,GACzB,oCAAC,cAAM,SAAN,MAAc,WAAS,GACxB,oCAAC,cAAM,SAAN,MAAc,iBAAe,CAChC,CACF,GACA,oCAAC,cAAM,MAAN,MACE,KAAK,IAAI,CAAC,SAAM;AAlZnC,QAAAF;AAmZoB,+CAAC,cAAM,KAAN,EAAU,KAAK,KAAK,MACnB,oCAAC,cAAM,MAAN,UACE,wBAAO,KAAK,iBAAiB,sBAAsB;AAAA,MAClD,QAAI,cAAG,WAAW,QAAQ;AAAA,IAC5B,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,CAAC,CAAC,KAAK,uBACN,wBAAO,KAAK,iBAAiB,sBAAsB;AAAA,MACjD,QAAI,cAAG,WAAW,QAAQ;AAAA,IAC5B,CAAC,CACL,GACA,oCAAC,cAAM,MAAN,MAAY,6BAAM,UAAW,GAC9B,oCAAC,cAAM,MAAN,OAAYA,MAAA,KAAK,aAAL,gBAAAA,IAAe,IAAK,GACjC,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,KAAK;AAAA,MACtB,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MAAY,KAAK,QAAS,GAC3B,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,QAAQ;AAAA,MACzB,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,qBAAqB;AAAA,MACtC,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,eAAe;AAAA,MAChC,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MAAY,KAAK,MAAO,GACzB,oCAAC,cAAM,MAAN,MAAY,KAAK,KAAK,IAAK,GAC5B,oCAAC,cAAM,MAAN,MAAY,KAAK,aAAc,CAClC;AAAA,GACD,CACH,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,wCACb,oCAAC,WAAE,SACK,MAAK,QAAK,UAClB,GACA,oCAAC,SAAI,WAAU,QAAO,GACtB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAK;AAAA,MACL,OAAO,CAAC,SAAS,SAAS,CAAC;AAAA,MAC3B,eAAe,CAAC,YAAY;AAC1B,cAAM,IAAI,SAAS,QAAQ,MAAM,CAAC,CAAC;AACnC,cAAM,IAAI,MAAM,CAAC,IAAI,KAAK;AAE1B,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,YAAY;AAAA,MACZ,WAAS;AAAA;AAAA,IAET,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,IAAiB,GAClB,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,GACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACE,mBAAmB,MAAM,IAAI,CAAC,SAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,MAAM,QACrB,mBAAmB,cAAc,IAAI,CACxC,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,GACA,oCAAC,aACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,mBAAgB,WAAU,UAAS;AAAA,EACtC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,oBAAiB,WAAU,UAAS;AAAA,EACvC,CACF,CACF,CACF,CAEJ,CACF;AAEJ;AAEA,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,yBAAqB,qCAAqB;AAAA,EAC9C,OAAO,uBAAuB,OAAO;AAAA,EACrC,aAAa,CAAC,SAAS,KAAK,SAAS;AAAA,EACrC,cAAc,CAAC,SAAS,GAAG,IAAI;AACjC,CAAC;AAED,IAAM,uBAAmB,qCAAqB;AAAA,EAC5C,OAAO;AAAA,EACP,aAAa,CAAC,SAAS;AAAA,EACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,IACf,WAAW,WAAW,WAAW;AAAA,EACnC,CAAC;AACL,CAAC;AAED,IAAM,gBAAgB,cAAE,KAAK,CAAC,OAAO,SAAS,QAAQ,CAAC;AAEvD,IAAM,kBAAkB,KAAK,eAAe,EAAE,gBAAgB,EAAE;;;AYlhBzD,SAAS,WAAW,OAAwB;AACjD,SAAO,oCAAC,qBAAmB,GAAG,OAAO;AACvC;;;ACTA,IAAAG,iBAAuB;AAEvB,IAAAC,yBAAwB;AACxB,IAAAC,cAAkB;AAClB,IAAAC,kBAA2B;;;ACJpB,SAAS,aAAa,OAAqC;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,8gCAA6gC;AAAA,EACvhC;AAEJ;;;ACnBO,SAAS,MAAM,OAA2C;AAC/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,wBAAuB;AAAA,EACjC;AAEJ;;;ACjBA,IAAAC,iBAAoC;;;ACApC,IAAAC,0BAGO;AACP,IAAAC,sBAAyB;AACzB,IAAAC,yBAAsB;;;ACHf,IAAM,6BAA6B,MAAgB;AAAA,EACxD;AACF;;;ADUO,IAAM,0BAAkD,CAAC,WAAW;AAd3E;AAeE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,8BAAS;AAAA,IACrB,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,2BAA2B;AAAA,IACrC,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM,4CAAmB;AAAA,QAC9B;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AE3CO,SAAS,gBAAgB,OAAqC;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,yIAAwI;AAAA,EAClJ;AAEJ;;;ACnBA,uBAA+C;AAC/C,IAAAC,iBAAsB;AAIf,IAAM,qBAAiB,sBAAM,CAAC,SAA2B;AAC9D,aAAO,2BAAS;AAAA,IACd,QAAQ;AAAA,IACR,eAAe,OAAO,WAAW;AAAA,IACjC,GAAG;AAAA,EACL,CAAC;AACH,CAAC;;;ACVD,IAAAC,gBAAkB;;;ACDlB,IAAAC,SAAuB;AAEvB,SAAS,eACP,UACA,OAA6B,CAAC,GAC9B;AACA,QAAM,cAAoB,cAAwB,MAAM;AACtD,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE,CAAC;AAED,EAAM,0BAAmB,MAAM;AAC7B,gBAAY,UAAU;AAAA,EACxB,CAAC;AAED,SAAa;AAAA,IACX,IAAI,SAAY;AAfpB;AAeuB,+BAAY,YAAZ,qCAAsB,GAAG;AAAA;AAAA;AAAA,IAE5C;AAAA,EACF;AACF;AAQO,SAAS,qBACd,OAC8C;AAC9C,QAAM,EAAE,OAAO,kBAAkB,cAAc,SAAS,IAAI;AAE5D,QAAM,eAAe,eAAe,QAAQ;AAC5C,QAAM,mBAAmB,eAAe,CAAC,MAAM,SAAS,SAAS,IAAI;AAErE,QAAM,CAAC,mBAAmB,oBAAoB,IAAU;AAAA,IACtD;AAAA,EACF;AACA,QAAM,aAAa,qBAAqB;AACxC,QAAM,QAAQ,aAAa,mBAAmB;AAE9C,QAAM,WAAW;AAAA,IACf,CAAC,SAAkC;AACjC,YAAM,SAAS;AACf,YAAM,YAAY,OAAO,SAAS,aAAa,OAAO,KAAK,IAAI;AAE/D,UAAI,CAAC,iBAAiB,OAAO,SAAS,EAAG;AAEzC,UAAI,CAAC,WAAY,sBAAqB,SAAS;AAE/C,mBAAa,SAAS;AAAA,IACxB;AAAA,IACA,CAAC,YAAY,cAAc,OAAO,gBAAgB;AAAA,EACpD;AAEA,SAAO,CAAC,OAAO,QAAQ;AACzB;A;;;;;;;;;;;;;;ACxDA,IAAAC,cAAkB;AAEX,IAAM,0BAA0B,cAAE,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AFGD,IAAM,UAIA;AAAA,EACJ;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;AAUO,SAAS,eAAe,OAA4B;AAnD3D;AAoDE,QAAM,YAAU,WAAM,YAAN,mBAAe,UAC3B,QAAQ,OAAO,CAAC,WAAQ;AArD9B,QAAAC;AAqDiC,YAAAA,MAAA,MAAM,YAAN,gBAAAA,IAAe,SAAS,OAAO;AAAA,GAAM,IAChE;AAEJ,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C,OAAO,MAAM;AAAA,IACb,cAAc,MAAM,gBAAgB,QAAQ,CAAC,EAAE;AAAA,IAC/C,UAAU,MAAM;AAAA,EAClB,CAAC;AAED,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,cAAM,OAAN,EAAY,SAAO,QAClB,oCAAC,aAAI,4BAA0B,CACjC,GACA;AAAA,IAAC,iBAAS;AAAA,IAAT;AAAA,MACC,OAAO,CAAC,KAAK;AAAA,MACb,eAAe,CAAC,aAAa;AAC3B,cAAM,YAAY,SAAS,GAAG,EAAE;AAChC,YAAI,CAAC,UAAW;AAChB,iBAAS,wBAAwB,MAAM,SAAS,CAAC;AAAA,MACnD;AAAA,MACA,WAAU;AAAA;AAAA,IAET,QAAQ,IAAI,CAAC,WACZ;AAAA,MAAC,iBAAS;AAAA,MAAT;AAAA,QACC,KAAK,OAAO;AAAA,QACZ,OAAO,OAAO;AAAA,QACd,WAAU;AAAA;AAAA,MAEV,oCAAC,SAAI,WAAU,UACb;AAAA,QAAC,cAAAC;AAAA,QAAA;AAAA,UACC,KAAK,OAAO;AAAA,UACZ,KAAI;AAAA,UACJ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAU;AAAA,UACV,WAAW;AAAA;AAAA,MACb,CACF;AAAA,MACA,oCAAC,iBAAS,SAAT,EAAiB,WAAU,cAC1B,oCAAC,iBAAS,WAAT,EAAmB,SAAO,QACzB,oCAAC,eAAU,CACb,CACF;AAAA,MACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,IACxB,CACD;AAAA,EACH,CACF;AAEJ;;;AGvGA,IAAAC,iBAAuB;AACvB,IAAAC,cAA4B;AAC5B,IAAAD,iBAA0B;AAC1B,6BAAoC;AACpC,IAAAC,cAAkB;AAClB,IAAAC,kBAA2B;;;ACL3B,IAAAC,0BAIO;AACP,IAAAC,sBAAyB;AACzB,IAAAC,yBAAsB;;;ACHf,IAAM,6BAA6B,CAAC,UAA2C;AAAA,EACpF;AAAA,EACA;AACF;;;ADSO,IAAM,0BAAgE,CAC3E,OACA,WACG;AAlBL;AAmBE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,8BAAS;AAAA,IACrB,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,2BAA2B,KAAK;AAAA,IAC1C,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM,4CAAmB,OAAO;AAAA,QACrC;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AEjDA,IAAAC,0BAKO;AACP,uBAAqC;AACrC,IAAAC,uBAA4B;AAC5B,IAAAC,yBAAsB;;;ACItB,IAAMC,iBAAgB;AAAA,EACpB,UAAU;AAAA,EACV,YAAY;AACd;AAiBO,SAAS,WACd,MACA,QACA;AACA,QAAM,EAAE,OAAO,UAAU,WAAW,IAAI,OAAO,OAAOA,gBAAe,MAAM;AAE3E,iBAAe,SAAS,MAAc,KAAc;AAClD,UAAM,oBAAoB,OAAO;AACjC,UAAM,SAAS,MAAM,KAAK,GAAG,IAAI;AACjC,UAAM,aAAa,MAAM,MAAM,MAAM;AAErC,QAAI,WAAY,QAAO;AAEvB,UAAM,aAAa,aAAa,IAAI;AACpC,UAAM,YAAY,WAAW,KAAK;AAClC,UAAM,SAAS,KAAK,OAAO,IAAI;AAE/B,QAAI,oBAAoB,GAAG;AACzB,YAAM,MAAM,MAAM;AAClB,aAAO,SAAS,MAAM,oBAAoB,CAAC;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,SAAkC;AACjD,WAAO,MAAM,SAAS,IAAI;AAAA,EAC5B;AACF;AAEA,SAAS,MAAM,IAAY;AACzB,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;;;AC9DO,IAAM,mCAAmC,MAAmB;AAAA,EACjE;AACF;;;AFaO,IAAM,gCAGT,CAAC,WAAW;AACd,QAAM,cAAc,eAAe;AAEnC,QAAM,eAAW,kCAAY;AAAA,IAC3B,GAAG;AAAA,IACH,aAAa,iCAAiC;AAAA,IAC9C,YAAY,OAAO,UAAU;AAC3B,YAAM,KAAK,0BAAS,SAAS,4BAAW,OAAO,EAAE,SAAS;AAC1D,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,gBAAM;AAAA,QACJ;AAAA,UACE;AAAA,UACA,GAAG;AAAA,QACL;AAAA,QACA;AAAA,UACE,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,OAAO;AAAA,QACX,YAAY;AACV,gBAAMC,WAAU,MAAM,YAAY,WAAW;AAAA,YAC3C,UAAU,mBAAmB;AAAA,YAC7B,SAAS,MAAM,WAAW;AAAA,UAC5B,CAAC;AAED,qCAAAD,SAAUC,SAAQ,WAAW,eAAe;AAE5C,iBAAO,UAAM,oCAAW,IAAI;AAAA,YAC1B,aAAa;AAAA,YACb,SAAS;AAAA,cACP,iBAAiB;AAAA,cACjB,eAAe,UAAUA,SAAQ,KAAK;AAAA,YACxC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA;AAAA,UACE,MAAMC,MAAK;AACT,mBAAO,CAAC,EAACA,QAAA,gBAAAA,KAAK;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,MAAM,MAAM,KAAK;AAEvB,UAAI,EAAC,2BAAK,cAAa;AACrB,cAAM,QAAQ,IAAI,MAAM;AACxB,cAAM,OAAO;AACb,cAAM,UAAU;AAChB,cAAM;AAAA,MACR;AAEA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AGzFA,IAAAC,0BAAiC;AACjC,IAAAC,uBAAyB;AACzB,IAAAC,yBAAsB;;;ACAf,IAAM,2BAA2B,MAAgB;AAAA,EACtD;AACF;;;ADOO,IAAM,wBAAuC,CAAC,WAAW;AAXhE;AAYE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,+BAAS;AAAA,IACrB,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,yBAAyB;AAAA,IACnC,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM,0CAAiB;AAAA,QAC5B;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AE5BO,SAAS,cAAc,OAAiD;AAC7E,QAAM,CAAC,MAAM,OAAO,IAAI,qBAAqB;AAAA,IAC3C,OAAO,+BAAO;AAAA,IACd,eAAc,+BAAO,gBAAe;AAAA,IACpC,UAAU,+BAAO;AAAA,EACnB,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACvBO,SAAS,cAAc,OAAqC;AACjE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,oBAAmB;AAAA,EAC7B;AAEJ;;;ACnBA,mBAAwD;AAEjD,IAAM,cAA+B,4BAAc;AAAA,EACxD,WAAW;AAAA,EACX,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS;AAAA,EACT,KAAK;AACP,CAAC;;;ACRD,IAAAC,yBAAwB;AAiBjB,SAAS,cAAc,OAA2B;AAjBzD;AAkBE,QAAM,MAAM,MAAM,OAAO;AACzB,QAAM,MAAM,MAAM,OAAO;AAEzB,QAAM,aAAa,cAAc;AAEjC,QAAM,YAAU,WAAM,YAAN,mBAAe,UAC3B,MAAM,UACN,CAAC,KAAK,KAAK,KAAM,GAAI;AAEzB,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C,OAAO,MAAM;AAAA,IACb,cAAc,MAAM,gBAAgB,QAAQ,CAAC;AAAA,IAC7C,UAAU,MAAM;AAAA,EAClB,CAAC;AAED,SACE,oCAAC,SAAI,eAAW,gCAAQ,0BAA0B,MAAM,SAAS,KAC9D,QAAQ,IAAI,CAAC,WACZ;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,SAAS,MAAM;AACb,iBAAS,MAAM;AAAA,MACjB;AAAA,MACA,UAAU,MAAM,UAAU,MAAM;AAAA,MAChC,iBAAe,SAAS,UAAU,MAAM;AAAA;AAAA,IAEvC,aAAa,QAAQ;AAAA,MACpB,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH,CACD,CACH;AAEJ;;;ACvDA,IAAAC,iBAAyB;AACzB,IAAAC,gBAAkB;AAClB,IAAAC,eAAiB;AACjB,IAAAC,yBAAwB;AACxB,IAAAC,kBAA2B;AAgBpB,SAAS,gBAAgB,OAA6B;AAC3D,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,QAAM,QAAQ,wBAAwB;AACtC,QAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,QAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,IAC7C,OAAO,MAAM;AAAA,IACb,cAAc,MAAM,gBAAgB;AAAA,IACpC,UAAU,MAAM;AAAA,EAClB,CAAC;AAED,SACE;AAAA,IAAC,wBAAS;AAAA,IAAT;AAAA,MACC,YAAY,OAAO;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,SAAQ;AAAA,MACR,eAAe;AAAA;AAAA,IAEf,oCAAC,SAAI,WAAU,8BACb,oCAAC,SAAI,WAAU,UACb,oCAAC,QAAG,WAAU,yCAAsC,sBAEpD,GACA,oCAAC,OAAE,WAAU,8CAA2C,yEAGxD,CACF,GAEA,oCAAC,wBAAS,SAAT,MACC,oCAAC,wBAAS,aAAT,EAAqB,SAAO,QAC3B;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,MAEV,oCAAC,qBAAgB;AAAA,IACnB,CACF,GACA,oCAAC,wBAAS,aAAT,EAAqB,SAAO,QAC3B;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,WAAU;AAAA;AAAA,MAEV,oCAAC,sBAAiB;AAAA,IACpB,CACF,CACF,CACF;AAAA,IAEA,oCAAC,wBAAS,WAAT,EAAmB,WAAU,YAC3B,OAAO,IAAI,CAAC,OAAO,UAClB,oCAAC,wBAAS,MAAT,EAAc,KAAK,MAAM,IAAI,SAC5B,oCAAC,SAAI,WAAU,gCACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,MAAM,OAAO,SAAS;AAAA,QACxB;AAAA;AAAA,MAEC,MAAM,OAAO,OACZ;AAAA,QAAC,cAAAC;AAAA,QAAA;AAAA,UACC,KAAK,MAAM,OAAO;AAAA,UAClB,KAAI;AAAA,UACJ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAU;AAAA;AAAA,MACZ;AAAA,IAEJ,GAEA;AAAA,MAAC,iBAAS;AAAA,MAAT;AAAA,QACC,SAAS,MAAM,OAAO;AAAA,QACtB,iBAAiB,CAAC,YAAY;AAC5B,mBAAS,QAAQ,UAAU,MAAM,KAAK,IAAI;AAAA,QAC5C;AAAA,QACA,WAAU;AAAA;AAAA,MAEV,oCAAC,iBAAS,SAAT,EAAiB,WAAU,cAC1B,oCAAC,iBAAS,WAAT,EAAmB,SAAO,QACzB,oCAAC,eAAU,CACb,CACF;AAAA,MACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,IACxB,GAEA;AAAA,MAAC,aAAAC;AAAA,MAAA;AAAA,QACC,MAAM,WAAW,MAAM,EAAE;AAAA,QACzB,WAAU;AAAA,QACV,SAAS,MAAM;AACb,sBAAY,kBAAkB,QAAQ,KAAK;AAAA,QAC7C;AAAA;AAAA,MACD;AAAA,IAED,CACF,CACF,CACD,CACH;AAAA,EACF;AAEJ;;;AZxGO,SAAS,eAAe;AAvB/B;AAwBE,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,QAAM,wBAAwB,8BAA8B;AAAA,IAC1D,UAAU,MAAM;AACd,UAAI,CAAC,KAAK,YAAa;AACvB,aAAO,KAAK,KAAK,aAAa,UAAU,qBAAqB;AAC7D,WAAK,MAAM;AACX,kBAAY,kBAAkB,QAAQ,KAAK;AAAA,IAC7C;AAAA,IACA,QAAQ,OAAO;AACb,cAAQ,MAAM;AAAA,QACZ,aAAa,MAAM;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,gBAAgB,mBAAmB,QAAQ;AACjD,QAAM,uBAAuB,wBAAwB;AACrD,QAAM,kBAAkB,qBAAqB;AAC7C,QAAM,kBAAkB,mDAAiB;AACzC,QAAM,gBAAgB,aAAa,mDAAiB,eAAe,CAAC;AACpE,QAAM,gBACJ,iBAAiB,IACb,cAAa,0BAAqB,SAArB,mBAA2B,2BAA2B,CAAC,IACpE,aAAa,mDAAiB,eAAe,CAAC;AAEpD,QAAM,cAAc,wBAAwB;AAC5C,QAAM,SAAS,YAAY,QAAQ,CAAC;AAEpC,QAAMC,cAAa,cAChB,OAAO;AAAA,IACN,QAAQ,cAAE,OAAO,EAAE,YAAY,CAAC,KAAK,QAAQ;AAC3C,YAAM,IAAI,aAAa,KAAK,CAAC;AAC7B,UAAI,IAAI,eAAe;AACrB,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,cAAE,aAAa;AAAA,UACrB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS,qBAAqB,cAAc,eAAe,CAAC;AAAA,QAC9D,CAAC;AAAA,MACH;AAEA,UAAI,IAAI,eAAe;AACrB,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,cAAE,aAAa;AAAA,UACrB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS,qBAAqB,cAAc,eAAe,CAAC;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,OAAO,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,YAAY,CAAC,OAAO,QAAQ;AAC3B,UAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,KAAK;AACrD,UAAM,iBAAiB,aAAa,+BAAO,sBAAsB,CAAC;AAClE,UAAM,iBAAiB,aAAa,+BAAO,sBAAsB,CAAC;AAClE,UAAM,SAAS,aAAa,MAAM,QAAQ,CAAC;AAE3C,QAAI,SAAS,SAAS,gBAAgB;AACpC,UAAI,SAAS;AAAA,QACX,MAAM,CAAC,QAAQ;AAAA,QACf,MAAM,cAAE,aAAa;AAAA,QACrB,SAAS,oCAAoC,eAAe,eAAe,CAAC;AAAA,MAC9E,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,gBAAgB;AACpC,UAAI,SAAS;AAAA,QACX,MAAM,CAAC,QAAQ;AAAA,QACf,MAAM,cAAE,aAAa;AAAA,QACrB,SAAS,oCAAoC,cAAc;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAEH,QAAM,WAAO,gCAAQ;AAAA,IACnB,MAAM;AAAA,IACN,cAAU,yBAAYA,WAAU;AAAA,IAChC,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,gCAAU,MAAM;AACd,QAAI,eAAe;AACjB,WAAK,MAAM;AAAA,QACT,QAAQ,cAAc,SAAS;AAAA,QAC/B,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,QAAM,eAAe,KAAK,aAAa,OAAO,SAAS;AACrD,0BAAsB,OAAO;AAAA,MAC3B,QAAQ,KAAK,OAAO,SAAS;AAAA,MAC7B,OAAO,KAAK,SAAS;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAED,SACE,oCAAC,UAAK,UAAU,cAAc,YAAU,QACtC;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,KAAK;AAAA,MACd,MAAK;AAAA,MACL,QAAQ,CAAC,MAAG;AA1IpB,YAAAC;AA2IU,mDAAC,cAAM,MAAN,EAAW,SAAS,CAAC,CAAC,KAAK,UAAU,OAAO,UAC3C;AAAA,UAAC,oBAAY;AAAA,UAAZ;AAAA,YACC,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO,EAAE,MAAM;AAAA,YACf,eAAe,CAAC,YAAY;AAC1B,gBAAE,MAAM,SAAS,QAAQ,KAAK;AAAA,YAChC;AAAA,YACA,eAAe;AAAA,cACb,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,YACzB;AAAA,YACA,iBAAe;AAAA;AAAA,UAEf,oCAAC,oBAAY,OAAZ,MAAkB,kCAEnB;AAAA,UACA,oCAAC,oBAAY,SAAZ,MACC,oCAAC,oBAAY,OAAZ,IAAkB,GACnB,oCAAC,oBAAY,kBAAZ,MACC,oCAAC,mBAAc,CACjB,GACA,oCAAC,oBAAY,kBAAZ,MACC,oCAAC,qBAAgB,CACnB,CACF;AAAA,QACF,GACA,oCAAC,cAAM,WAAN,OACEA,MAAA,KAAK,UAAU,OAAO,WAAtB,gBAAAA,IAA8B,OACjC,CACF;AAAA;AAAA;AAAA,EAEJ,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,aAAa,KAAK,MAAM,QAAQ,GAAG,CAAC;AAAA,MAC3C,UAAU,CAAC,UAAU;AACnB,aAAK,SAAS,UAAU,MAAM,SAAS,GAAG;AAAA,UACxC,aAAa;AAAA,UACb,aAAa;AAAA,UACb,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAU;AAAA;AAAA,EACZ,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,KAAK;AAAA,MACd,MAAK;AAAA,MACL,QAAQ,CAAC,MACP;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,MAAM;AAAA,UACf,UAAU,EAAE,MAAM;AAAA;AAAA,MACpB;AAAA;AAAA,EAEJ,GAEA,oCAAC,OAAE,WAAU,oBAAiB,sDACuB,KACnD,oCAAC,YAAO,MAAK,UAAS,WAAU,kCAA+B,iCAE/D,GAAS,GAEX,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,UAAU,sBAAsB;AAAA,MAChC,SAAS,OAAO,MAAM;AACpB,cAAM,KAAK,MAAM,KAAK,QAAQ,QAAQ;AACtC,YAAI,CAAC,GAAI;AACT,YAAI,OAAO,UAAU,EAAG;AACxB,YAAI,KAAK,UAAU,OAAO,EAAG;AAC7B,UAAE,eAAe;AACjB,mBAAW,QAAQ,IAAI;AAAA,MACzB;AAAA;AAAA,IAEC,sBAAsB,YACrB,0DACE,oCAAC,iBAAY,GAAE,eAEjB,IAEA;AAAA,EAEJ,GAEA;AAAA,IAAC,oBAAY;AAAA,IAAZ;AAAA,MACC,MAAK;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,cAAc,CAAC,YAAY;AACzB,mBAAW,QAAQ,QAAQ,IAAI;AAAA,MACjC;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA,MACb,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,6BACC,oCAAC,oBAAY,UAAZ,EAAqB,WAAU,iCAAgC,GAChE,oCAAC,oBAAY,YAAZ,EAAuB,WAAU,mCAChC,oCAAC,oBAAY,SAAZ,MACC,oCAAC,oBAAY,QAAZ,MACC,oCAAC,SAAI,WAAU,uFACb,oCAAC,qBAAgB,CACnB,GACA,oCAAC,oBAAY,cAAZ,MACC,oCAAC,WAAM,CACT,CACF,GACA,oCAAC,oBAAY,MAAZ,MACC,oCAAC,oBAAY,OAAZ,MAAkB,uCAEnB,GACA,oCAAC,oBAAY,aAAZ,MAAwB,kFAGzB,CACF,GACA,oCAAC,oBAAY,QAAZ,MACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM;AACb,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAAA;AAAA,MACD;AAAA,IAED,GACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AACb,uBAAa;AACb,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAAA;AAAA,MACD;AAAA,IAED,CACF,CACF,CACF,CACF;AAAA,EACF,CACF;AAEJ;;;Aa9RO,SAAS,iBAAiB;AAC/B,SAAO;AACT;;;ACFA,IAAAC,iBAAuB;AACvB,IAAAC,cAA4B;AAC5B,IAAAD,iBAA0B;AAC1B,IAAAE,0BAAoC;AACpC,IAAAD,cAAkB;AAClB,IAAAE,kBAA2B;;;ACL3B,IAAAC,0BAKO;AACP,IAAAC,oBAAqC;AACrC,IAAAC,uBAA4B;AAC5B,IAAAC,yBAAsB;;;ACNf,IAAM,kCAAkC,MAAmB;AAAA,EAChE;AACF;;;ADaO,IAAM,+BAGT,CAAC,WAAW;AACd,QAAM,cAAc,eAAe;AAEnC,QAAM,eAAW,kCAAY;AAAA,IAC3B,GAAG;AAAA,IACH,aAAa,gCAAgC;AAAA,IAC7C,YAAY,OAAO,UAAU;AAC3B,YAAM,KAAK,2BAAS,SAAS,6BAAW,OAAO,EAAE,SAAS;AAC1D,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,iCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,gBAAM;AAAA,QACJ;AAAA,UACE;AAAA,UACA,GAAG;AAAA,QACL;AAAA,QACA;AAAA,UACE,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,OAAO;AAAA,QACX,YAAY;AACV,gBAAMC,WAAU,MAAM,YAAY,WAAW;AAAA,YAC3C,UAAU,mBAAmB;AAAA,YAC7B,SAAS,MAAM,WAAW;AAAA,UAC5B,CAAC;AAED,qCAAAD,SAAUC,SAAQ,WAAW,eAAe;AAE5C,iBAAO,UAAM,oCAAW,IAAI;AAAA,YAC1B,aAAa;AAAA,YACb,SAAS;AAAA,cACP,iBAAiB;AAAA,cACjB,eAAe,UAAUA,SAAQ,KAAK;AAAA,YACxC;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA;AAAA,UACE,MAAMC,MAAK;AACT,mBAAO,CAAC,EAACA,QAAA,gBAAAA,KAAK;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,UACV,YAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,MAAM,MAAM,KAAK;AAEvB,UAAI,EAAC,2BAAK,cAAa;AACrB,cAAM,QAAQ,IAAI,MAAM;AACxB,cAAM,OAAO;AACb,cAAM,UAAU;AAChB,cAAM;AAAA,MACR;AAEA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ADlEO,SAAS,cAAc;AAvB9B;AAwBE,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,QAAM,wBAAwB,6BAA6B;AAAA,IACzD,UAAU,MAAM;AACd,UAAI,CAAC,KAAK,YAAa;AACvB,aAAO,KAAK,KAAK,aAAa,UAAU,qBAAqB;AAC7D,WAAK,MAAM;AACX,kBAAY,kBAAkB,QAAQ,KAAK;AAAA,IAC7C;AAAA,IACA,QAAQ,OAAO;AACb,cAAQ,MAAM;AAAA,QACZ,aAAa,MAAM;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,gBAAgB,mBAAmB,QAAQ;AACjD,QAAM,uBAAuB,wBAAwB;AACrD,QAAM,kBAAkB,qBAAqB;AAC7C,QAAM,kBAAkB,mDAAiB;AACzC,QAAM,gBAAgB,aAAa,mDAAiB,eAAe,CAAC;AACpE,QAAM,gBACJ,iBAAiB,IACb,cAAa,0BAAqB,SAArB,mBAA2B,2BAA2B,CAAC,IACpE,aAAa,mDAAiB,eAAe,CAAC;AAEpD,QAAM,cAAc,wBAAwB;AAC5C,QAAM,SAAS,YAAY,QAAQ,CAAC;AAEpC,QAAMC,cAAa,cAChB,OAAO;AAAA,IACN,QAAQ,cAAE,OAAO,EAAE,YAAY,CAAC,KAAK,QAAQ;AAC3C,YAAM,IAAI,aAAa,KAAK,CAAC;AAC7B,UAAI,IAAI,eAAe;AACrB,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,cAAE,aAAa;AAAA,UACrB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS,qBAAqB,cAAc,eAAe,CAAC;AAAA,QAC9D,CAAC;AAAA,MACH;AAEA,UAAI,IAAI,eAAe;AACrB,YAAI,SAAS;AAAA,UACX,MAAM;AAAA,UACN,MAAM,cAAE,aAAa;AAAA,UACrB,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS,qBAAqB,cAAc,eAAe,CAAC;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,OAAO,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,YAAY,CAAC,OAAO,QAAQ;AAC3B,UAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,KAAK;AACrD,UAAM,iBAAiB,aAAa,+BAAO,sBAAsB,CAAC;AAClE,UAAM,iBAAiB,aAAa,+BAAO,sBAAsB,CAAC;AAClE,UAAM,SAAS,aAAa,MAAM,QAAQ,CAAC;AAE3C,QAAI,SAAS,SAAS,gBAAgB;AACpC,UAAI,SAAS;AAAA,QACX,MAAM,CAAC,QAAQ;AAAA,QACf,MAAM,cAAE,aAAa;AAAA,QACrB,SAAS,oCAAoC,eAAe,eAAe,CAAC;AAAA,MAC9E,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,gBAAgB;AACpC,UAAI,SAAS;AAAA,QACX,MAAM,CAAC,QAAQ;AAAA,QACf,MAAM,cAAE,aAAa;AAAA,QACrB,SAAS,oCAAoC,cAAc;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAEH,QAAM,WAAO,iCAAQ;AAAA,IACnB,MAAM;AAAA,IACN,cAAU,yBAAYA,WAAU;AAAA,IAChC,eAAe;AAAA,MACb,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,gCAAU,MAAM;AACd,QAAI,eAAe;AACjB,WAAK,MAAM;AAAA,QACT,QAAQ,cAAc,SAAS;AAAA,QAC/B,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,QAAM,eAAe,KAAK,aAAa,OAAO,SAAS;AACrD,0BAAsB,OAAO;AAAA,MAC3B,QAAQ,KAAK,OAAO,SAAS;AAAA,MAC7B,OAAO,KAAK,SAAS;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAED,SACE,oCAAC,UAAK,UAAU,cAAc,YAAU,QACtC;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,KAAK;AAAA,MACd,MAAK;AAAA,MACL,QAAQ,CAAC,MAAG;AA1IpB,YAAAC;AA2IU,mDAAC,cAAM,MAAN,EAAW,SAAS,CAAC,CAAC,KAAK,UAAU,OAAO,UAC3C;AAAA,UAAC,oBAAY;AAAA,UAAZ;AAAA,YACC,KAAK;AAAA,YACL,MAAM;AAAA,YACN,OAAO,EAAE,MAAM;AAAA,YACf,eAAe,CAAC,YAAY;AAC1B,gBAAE,MAAM,SAAS,QAAQ,KAAK;AAAA,YAChC;AAAA,YACA,eAAe;AAAA,cACb,uBAAuB;AAAA,cACvB,uBAAuB;AAAA,YACzB;AAAA,YACA,iBAAe;AAAA;AAAA,UAEf,oCAAC,oBAAY,OAAZ,MAAkB,kCAEnB;AAAA,UACA,oCAAC,oBAAY,SAAZ,MACC,oCAAC,oBAAY,OAAZ,IAAkB,GACnB,oCAAC,oBAAY,kBAAZ,MACC,oCAAC,mBAAc,CACjB,GACA,oCAAC,oBAAY,kBAAZ,MACC,oCAAC,qBAAgB,CACnB,CACF;AAAA,QACF,GACA,oCAAC,cAAM,WAAN,OACEA,MAAA,KAAK,UAAU,OAAO,WAAtB,gBAAAA,IAA8B,OACjC,CACF;AAAA;AAAA;AAAA,EAEJ,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,aAAa,KAAK,MAAM,QAAQ,GAAG,CAAC;AAAA,MAC3C,UAAU,CAAC,UAAU;AACnB,aAAK,SAAS,UAAU,MAAM,SAAS,GAAG;AAAA,UACxC,aAAa;AAAA,UACb,aAAa;AAAA,UACb,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAU;AAAA;AAAA,EACZ,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,KAAK;AAAA,MACd,MAAK;AAAA,MACL,QAAQ,CAAC,MACP;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,MAAM;AAAA,UACf,UAAU,EAAE,MAAM;AAAA;AAAA,MACpB;AAAA;AAAA,EAEJ,GAEA,oCAAC,OAAE,WAAU,oBAAiB,sDACuB,KACnD,oCAAC,YAAO,MAAK,UAAS,WAAU,kCAA+B,iCAE/D,GAAS,GAEX,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,UAAU,sBAAsB;AAAA,MAChC,SAAS,OAAO,MAAM;AACpB,cAAM,KAAK,MAAM,KAAK,QAAQ,QAAQ;AACtC,YAAI,CAAC,GAAI;AACT,YAAI,OAAO,UAAU,EAAG;AACxB,YAAI,KAAK,UAAU,OAAO,EAAG;AAC7B,UAAE,eAAe;AACjB,mBAAW,QAAQ,IAAI;AAAA,MACzB;AAAA;AAAA,IAEC,sBAAsB,YACrB,0DACE,oCAAC,iBAAY,GAAE,eAEjB,IAEA;AAAA,EAEJ,GAEA;AAAA,IAAC,oBAAY;AAAA,IAAZ;AAAA,MACC,MAAK;AAAA,MACL,MAAM,WAAW;AAAA,MACjB,cAAc,CAAC,YAAY;AACzB,mBAAW,QAAQ,QAAQ,IAAI;AAAA,MACjC;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA,MACb,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,6BACC,oCAAC,oBAAY,UAAZ,EAAqB,WAAU,iCAAgC,GAChE,oCAAC,oBAAY,YAAZ,EAAuB,WAAU,mCAChC,oCAAC,oBAAY,SAAZ,MACC,oCAAC,oBAAY,QAAZ,MACC,oCAAC,SAAI,WAAU,uFACb,oCAAC,qBAAgB,CACnB,GACA,oCAAC,oBAAY,cAAZ,MACC,oCAAC,WAAM,CACT,CACF,GACA,oCAAC,oBAAY,MAAZ,MACC,oCAAC,oBAAY,OAAZ,MAAkB,uCAEnB,GACA,oCAAC,oBAAY,aAAZ,MAAwB,kFAGzB,CACF,GACA,oCAAC,oBAAY,QAAZ,MACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM;AACb,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAAA;AAAA,MACD;AAAA,IAED,GACA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AACb,uBAAa;AACb,qBAAW,QAAQ,KAAK;AAAA,QAC1B;AAAA;AAAA,MACD;AAAA,IAED,CACF,CACF,CACF,CACF;AAAA,EACF,CACF;AAEJ;;;AG9RO,SAAS,oBAAoB;AAClC,SAAO;AACT;;;ACFO,SAAS,cAAc;AAC5B,SAAO;AACT;;;A1BWO,SAAS,UAAU;AACxB,QAAM,uBAAuB,wBAAwB;AACrD,QAAM,kBAAkB,qBAAqB;AAE7C,QAAM,yBAAyB,MAAM;AAjBvC;AAkBI,UAAM,IAAqB,CAAC;AAE5B,QAAI,eAAe,GAAG;AACpB,WAAI,wDAAiB,gCAAjB,mBAA8C;AAChD,UAAE,KAAK,OAAO;AAChB,WAAI,wDAAiB,+BAAjB,mBAA6C;AAC/C,UAAE,KAAK,MAAM;AACf,WAAI,wDAAiB,kCAAjB,mBAAgD;AAClD,UAAE,KAAK,UAAU;AACnB,WAAI,wDAAiB,+BAAjB,mBAA6C;AAC/C,UAAE,KAAK,MAAM;AACf,WAAI,wDAAiB,qCAAjB,mBAAmD;AACrD,UAAE,KAAK,aAAa;AAAA,IACxB,OAAO;AACL,WAAI,wDAAiB,gCAAjB,mBAA8C;AAChD,UAAE,KAAK,OAAO;AAChB,WAAI,wDAAiB,+BAAjB,mBAA6C;AAC/C,UAAE,KAAK,MAAM;AACf,WAAI,wDAAiB,kCAAjB,mBAAgD;AAClD,UAAE,KAAK,UAAU;AACnB,WAAI,wDAAiB,+BAAjB,mBAA6C;AAC/C,UAAE,KAAK,MAAM;AACf,WAAI,wDAAiB,qCAAjB,mBAAmD;AACrD,UAAE,KAAK,aAAa;AAAA,IACxB;AAEA,WAAO;AAAA,EACT,GAAG;AAEH,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAwB;AAElE,gCAAU,MAAM;AACd,QAAI,sBAAsB,SAAS,KAAK,CAAC,eAAe;AACtD,uBAAiB,sBAAsB,CAAC,CAAC;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,uBAAuB,aAAa,CAAC;AAEzC,MAAI,qBAAqB,WAAW;AAClC,WAAO,oCAAC,eAAY,WAAU,kBAAiB;AAAA,EACjD;AAEA,MAAI,sBAAsB,UAAU,GAAG;AAErC,WACE,oCAAC,SAAI,WAAU,iHACb,oCAAC,mBAAgB,WAAU,UAAS,GAAE,8BAExC;AAAA,EAEJ;AAEA,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,UAAU;AAAA,MACV,SAAS;AAAA;AAAA,EACX,GAEC,kBAAkB,UAAU,oCAAC,iBAAY,GACzC,kBAAkB,WAAW,oCAAC,kBAAa,GAC3C,kBAAkB,UAAU,oCAAC,iBAAY,GACzC,kBAAkB,cAAc,oCAAC,oBAAe,GAChD,kBAAkB,iBAAiB,oCAAC,uBAAkB,CACzD;AAEJ;;;A2BpFO,SAAS,aAAa;AAC3B,SAAO;AACT;;;A9BmBO,SAAS,kBAAkB,OAA+B;AArBjE;AAsBE,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AAAA,IACjC,iBAAiB;AAAA,EACnB,CAAC;AAED,SACE;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,WAAS;AAAA,MACT,eAAa;AAAA,MACb,MAAM,YAAY,kBAAkB;AAAA,MACpC,cAAc,CAAC,YAAY;AACzB,oBAAY,kBAAkB,QAAQ,QAAQ,IAAI;AAAA,MACpD;AAAA,MACA,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,eAAO,SAAP,EAAe,SAAO,QACpB,MAAM,YAAY,oCAAC,mBAAc,CACpC;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,UAAP,EAAgB,WAAU,gCAA+B,GAC1D,oCAAC,eAAO,YAAP,EAAkB,WAAU,kCAC3B,oCAAC,eAAO,SAAP,EAAe,WAAU,yFACxB,oCAAC,eAAO,cAAP,MACC,oCAAC,WAAM,CACT,GACA,oCAAC,eAAO,QAAP,EAAc,WAAU,8BACvB,oCAAC,SAAI,WAAU,wGACb,oCAAC,kBAAa,CAChB,GACA,oCAAC,eAAO,OAAP,EAAa,WAAU,gCAA6B,QAErD,CACF,GAEA,oCAAC,eAAO,MAAP,EAAY,WAAU,UACrB,oCAAC,OAAE,WAAU,iEAA8D,mBAE3E,GACA,oCAAC,OAAE,WAAU,2EACV,cAAa,iBAAY,SAAZ,mBAAkB,SAAS;AAAA,MACvC,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GAEA;AAAA,MAAC,aAAK;AAAA,MAAL;AAAA,QACC,OAAO,YAAY,kBAAkB;AAAA,QACrC,eAAe,CAAC,YAAY;AAC1B,sBAAY,kBAAkB;AAAA,YAC5B,cAAE,KAAK,CAAC,WAAW,YAAY,CAAC,EAAE,MAAM,QAAQ,KAAK;AAAA,UACvD;AAAA,QACF;AAAA,QACA,WAAS;AAAA,QACT,eAAa;AAAA,QACb,WAAU;AAAA;AAAA,MAEV,oCAAC,aAAK,MAAL,EAAU,WAAU,YACnB,oCAAC,aAAK,SAAL,EAAa,OAAM,WAAU,WAAU,UAAO,SAE/C,GACA,oCAAC,aAAK,SAAL,EAAa,OAAM,cAAa,WAAU,UAAO,YAElD,GACA,oCAAC,aAAK,WAAL,IAAe,CAClB;AAAA,MAEA,oCAAC,aAAK,SAAL,EAAa,OAAM,WAAU,WAAU,iBACtC,oCAAC,aAAQ,CACX;AAAA,MACA,oCAAC,aAAK,SAAL,EAAa,OAAM,cAAa,WAAU,iBACzC,oCAAC,gBAAW,CACd;AAAA,IACF,CACF,CACF,CACF,CACF;AAAA,EACF;AAEJ;AAEA,SAAS,cAAc,OAAwC;AA9G/D;AA+GE,QAAM,aAAa,cAAc;AACjC,QAAM,cAAc,eAAe;AAAA,IACjC,iBAAiB;AAAA,EACnB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACJ,GAAG;AAAA,MACJ,eAAW,gCAAQ,QAAQ,MAAM,SAAS;AAAA;AAAA,IAE1C,oCAAC,SAAI,WAAU,8FACZ,cAAa,iBAAY,SAAZ,mBAAkB,SAAS;AAAA,MACvC,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH;AAAA,IACA,oCAAC,SAAI,WAAU,6FACb,oCAAC,gBAAa,WAAU,UAAS,GAAE,QAErC;AAAA,EACF;AAEJ;;;A+BpIA,IAAAC,iBAAuB;AAEvB,IAAAC,gBAAkB;AAClB,IAAAD,iBAAuB;A;;;;;;;;ACLvB,IAAAE,mBAA2B;AAC3B,IAAAC,oBAAsB;AACtB,yBAA4C;AAC5C,IAAAC,kBAA2B;AAIpB,SAAS,gBAAgB;AAC9B;AARF;AAUE,QAAM,eAAe,gBAAgB;AACrC,QAAM,kBAAkB;AAAA,QACtB,4BAAW,CAAC,UAAU,MAAM,UAAU;AAAA,EACxC;AAEA,QAAM,CAAC,oBAAoB,qBAAqB,QAC9C;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,MACE,WAAW,GAAG;AACZ,gBAAO,uBAAG,kBAAiB;AAAA,MAC7B;AAAA,MACA,aAAa,GAAG;AACd,eAAO,IAAI,IAAI,KAAK,CAAC,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEF,QAAM,MAAM,oBAAI,KAAK;AAErB,QAAM,yBAAyB,yBAC3B,yBAAM,mBAAmB,QAAQ,IAAI,IAAI,QAAQ,GAAG,GAAG,QAAQ;AAAA;AAAA,IACjB;AAAA;AAElD,qCAAW,MAAM;AACf,oBAAgB,QAAQ,IAAI;AAAA,EAC9B,GAAG,sBAAsB;AAEzB,SAAO;AAAA,IACL,MAAM,aAAa,YACf,UACA,kBAAa,SAAb,mBAAmB,YAAW,kBAC5B,QACA,gBAAgB;AAAA,IACtB,OAAO,MAAM;AACX,sBAAgB,QAAQ,KAAK;AAC7B,gCAAsB,6BAAW,oBAAI,KAAK,GAAG,EAAE,CAAC;AAAA,IAClD;AAAA,EACF;AACF;;;ADnCO,SAAS,WAAW,OAAwB;AACjD,QAAM,aAAa,cAAc;AACjC,QAAM,uBAAmB,uBAA0B,IAAI;AAEvD,SACE;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAM,WAAW;AAAA,MACjB,WAAS;AAAA,MACT,eAAa;AAAA,MACb,eAAe;AAAA,MACf,wBAAwB;AAAA,MACxB,gBAAgB,MAAM,iBAAiB;AAAA;AAAA,IAEvC,oCAAC,6BACC,oCAAC,eAAO,UAAP,IAAgB,GACjB,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,EAAe,WAAU,4GACxB;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,WAAW;AAAA;AAAA,IACb,GAEA,oCAAC,SAAI,WAAU,iBACb,oCAAC,eAAO,OAAP,EAAa,WAAU,8CAA2C,kBAEnE,GACA,oCAAC,eAAO,aAAP,EAAmB,WAAU,6CAA0C,+FAE1C,KAC5B;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA;AAAA,MACX;AAAA,IAED,CACF,GAEA,oCAAC,SAAI,WAAU,mDACb;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,KAAI;AAAA,QACJ,WAAU;AAAA,QACV,WAAW;AAAA;AAAA,IACb,GAEA;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,KAAI;AAAA,QACJ,WAAU;AAAA,QACV,WAAW;AAAA;AAAA,IACb,CACF,CACF,GAEA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,WAAW;AAAA;AAAA,MACrB;AAAA,IAED,CACF,CACF,CACF;AAAA,EACF;AAEJ;;;AEtFA,IAAAC,iBAA0C;AAC1C,IAAAC,yBAAsB;AAGf,IAAM,yBAAqB;AAAA,EAChC;AACF;AAEO,IAAM,wBAAwB,MAAM;AACzC,QAAM,cAAU,2BAAW,kBAAkB;AAC7C,6BAAAC,SAAU,OAAO;AACjB,SAAO;AACT;;;ACZA,IAAAC,iBAAiC;;;ACAjC,wBAAwD;AACxD,IAAAC,iBAA0B;AAC1B,IAAAC,sBAAgC;AAOzB,SAAS,iBAAiB;AAC/B,QAAM,CAAC,SAAS,UAAU,QAAI;AAAA,IAC5B;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAS,6BAAU;AACzB,QAAM,eAAW,+BAAY;AAC7B,QAAM,mBAAe,mCAAgB;AAErC,QAAM,UAAU,YAAY;AAC1B,WAAO,KAAK,QAAQ;AACpB,eAAW,MAAM;AACf,iBAAW,KAAK;AAAA,IAClB,GAAG,GAAG;AAAA,EACR;AAEA,gCAAU,MAAM;AACd,QAAI,QAAS;AACb,QAAI,CAAC,aAAa,IAAI,QAAQ,EAAG;AACjC,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,SAAS,cAAc,UAAU,CAAC;AAEtC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AD3BO,SAAS,oBAAoB,OAAiC;AACnE,QAAM,UAAU,eAAe;AAE/B,SACE,oCAAC,sBAAmB,OAAO,WACxB,MAAM,UAEP,oCAAC,6BACC;AAAA,IAAC;AAAA;AAAA,MACC,WAAS;AAAA,MACT,eAAa;AAAA,MACb,SAAS,QAAQ;AAAA,MACjB,WAAU;AAAA,MACV,0BAAwB;AAAA;AAAA,IACzB;AAAA,IACoC;AAAA,IACnC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,QAAQ;AAAA,QACjB,WAAU;AAAA;AAAA,MACX;AAAA,IAED;AAAA,EACF,CACF,CACF;AAEJ;;;AElCA,IAAAC,iBAAyC;AAEzC,IAAAC,gBAAkB;AAClB,IAAAD,iBAAuB;AACvB,IAAAE,kBAA2B;;;ACN3B,IAAAC,2BAKO;AACP,IAAAC,uBAA4B;AAC5B,IAAAC,0BAAsB;;;ACLf,IAAM,+BAA+B,MAAmB;AAAA,EAC7D;AACF;;;ADeO,IAAM,4BAMT,CAAC,WAAW;AACd,QAAM,cAAc,eAAe;AAEnC,aAAO,kCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,6BAA6B;AAAA,IAC1C,YAAY,OAAO,UAAU;AAC3B,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,kCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,kCAAAA,SAAU,QAAQ,WAAW,eAAe;AAE5C,UAAI,sBAAsB,SAAS,MAAM,KAAK,QAAQ,GAAG;AACvD,kBAAM,iDAAuB,MAAM,QAAQ,IAAI;AAAA,UAC7C,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,kBAAM,yCAAe,MAAM,QAAQ,IAAI;AAAA,UACrC,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AE1DO,SAAS,aAAa,OAAqC;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,8SAA6S;AAAA,EACvT;AAEJ;;;AHGO,SAAS,WAAW,OAAwB;AAtBnD;AAuBE,QAAM,UAAM,uBAAuB,IAAI;AAEvC,QAAM,qBAAqB,cAAc;AAAA,IACvC,aAAa;AAAA,IACb,aAAa,MAAM;AACjB,UAAI,CAAC,MAAM;AACT,mBAAW,MAAM;AA7BzB,cAAAC;AA8BU,WAAAA,MAAA,IAAI,YAAJ,gBAAAA,IAAa,eAAe;AAAA,YAC1B,UAAU;AAAA,YACV,OAAO;AAAA,YACP,QAAQ;AAAA,UACV;AAAA,QACF,GAAG,EAAE;AAAA,MACP;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB,cAAc;AACvC,QAAM,yBAAyB,0BAA0B;AACzD,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,YAAY,IAAI;AAAA,MAChB,mBAAmB,IAAI;AAAA,IACzB,EAAE;AAAA,EACJ;AAEA,iBAAeC,kBAAiB;AAC9B,QAAI,YAAY,WAAW,QAAQ,WAAW,WAAW;AACvD,YAAM,uBAAuB,YAAY;AAAA,QACvC,MAAM,YAAY,WAAW,QAAQ;AAAA,QACrC,SAAS,YAAY,WAAW,QAAQ;AAAA,MAC1C,CAAC;AAAA,IACH;AAEA,uBAAmB,QAAQ,IAAI;AAE/B,gBAAY,WAAW,WAAW;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SACE,YAAY,WAAW,QAAQ,WAAW,aAC1C,CAAC,mBAAmB;AAAA,MAEtB,WAAS;AAAA,MACT,eAAe,YAAY,WAAW,QAAQ,WAAW;AAAA,MACzD,WAAU;AAAA;AAAA,IAEV,oCAAC,aAAQ,WAAU,6BAChB,YAAY,WAAW,QAAQ,WAAW,aACzC,oCAAC,SAAI,WAAU,gDACb,oCAAC,eAAY,WAAU,UAAS,CAClC,GAGD,YAAY,WAAW,QAAQ,WAAW,YACzC,oCAAC,WAAgB,GAGlB,YAAY,WAAW,QAAQ,WAAW,aACzC;AAAA,MAAC;AAAA;AAAA,QACC,OAAK,iBAAY,WAAW,QAAQ,YAA/B,mBAAwC,cAAa;AAAA,QAC1D,WAAU;AAAA;AAAA,IACZ,CAEJ;AAAA,IACA,oCAAC,aAAQ,WAAU,0DACjB;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM;AACb,cAAI,YAAY,WAAW,QAAQ,WAAW,WAAW;AACvD,YAAAA,gBAAe;AACf;AAAA,UACF;AAEA,2BAAiB,QAAQ,IAAI;AAAA,QAC/B;AAAA,QACA,UAAU,YAAY,WAAW,QAAQ,WAAW;AAAA,QACpD,cAAW;AAAA,QACX,OAAM;AAAA;AAAA,MAEN,oCAAC,SAAM,WAAU,UAAS;AAAA,IAC5B,GACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM,mBAAmB,QAAQ,IAAI;AAAA,QAC9C,OAAM;AAAA,QACN,cAAW;AAAA;AAAA,MAEX,oCAAC,gBAAa,WAAU,UAAS;AAAA,IACnC,CACF;AAAA,EACF,GAEA;AAAA,IAAC,sBAAO;AAAA,IAAP;AAAA,MACC,MACE,YAAY,WAAW,QAAQ,WAAW,aAC1C,mBAAmB,QACnB,CAAC,iBAAiB;AAAA,MAEpB,WAAS;AAAA,MACT,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,6BACC,oCAAC,sBAAO,YAAP,EAAkB,WAAU,4BAC3B,oCAAC,sBAAO,SAAP,EAAe,WAAU,6FACxB,oCAAC,aAAQ,WAAU,8DACjB,oCAAC,SAAI,WAAU,2CACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM;AACb,cAAI,YAAY,WAAW,QAAQ,WAAW,WAAW;AACvD,YAAAA,gBAAe;AACf;AAAA,UACF;AAEA,2BAAiB,QAAQ,IAAI;AAAA,QAC/B;AAAA,QACA,UACE,YAAY,WAAW,QAAQ,WAAW;AAAA,QAE5C,OAAM;AAAA,QACN,cAAW;AAAA;AAAA,MAEX,oCAAC,mBAAgB,WAAU,UAAS;AAAA,IACtC,CACF,GACA,oCAAC,SAAI,WAAU,sCACZ,CAAC,CAAC,MAAM,QACP;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAI;AAAA,QACJ,WAAU;AAAA;AAAA,IACZ,CAEJ,GACA,oCAAC,SAAI,WAAU,4BACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAW;AAAA,QACX,SAAS,MAAM;AACb,sBAAY,kBAAkB,QAAQ,IAAI;AAAA,QAC5C;AAAA;AAAA,MAEA,oCAAC,gBAAa,WAAU,UAAS;AAAA,MAAE;AAAA,IAErC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,SAAS,MAAM,mBAAmB,QAAQ,KAAK;AAAA,QAC/C,OAAM;AAAA,QACN,cAAW;AAAA;AAAA,MAEX,oCAAC,gBAAa,WAAU,UAAS;AAAA,IACnC,CACF,CACF,GACA,oCAAC,aAAQ,WAAU,UAChB,YAAY,WAAW,QAAQ,WAAW,aACzC,oCAAC,SAAI,WAAU,gDACb,oCAAC,eAAY,WAAU,UAAS,CAClC,GAGD,YAAY,WAAW,QAAQ,WAAW,YACzC,oCAAC,WAAuB,GAGzB,YAAY,WAAW,QAAQ,WAAW,aACzC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,YAAY,WAAW,QAAQ,QAAQ,aAAa;AAAA,QACzD,WAAU;AAAA;AAAA,IACZ,CAEJ,CACF,CACF,CACF;AAAA,EACF,GAEA;AAAA,IAAC,oBAAY;AAAA,IAAZ;AAAA,MACC,MAAK;AAAA,MACL,MAAM,iBAAiB;AAAA,MACvB,cAAc,CAAC,YAAY;AACzB,yBAAiB,QAAQ,QAAQ,IAAI;AAAA,MACvC;AAAA,MACA,WAAS;AAAA,MACT,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,6BACC,oCAAC,oBAAY,UAAZ,IAAqB,GACtB,oCAAC,oBAAY,YAAZ,MACC,oCAAC,oBAAY,SAAZ,MACC,oCAAC,oBAAY,QAAZ,MACC,oCAAC,SAAI,WAAU,uFACb,oCAAC,qBAAgB,CACnB,GACA,oCAAC,oBAAY,cAAZ,MACC,oCAAC,WAAM,CACT,CACF,GACA,oCAAC,oBAAY,MAAZ,MACC,oCAAC,oBAAY,OAAZ,MAAkB,WAAS,GAC5B,oCAAC,oBAAY,aAAZ,MAAwB,gCAEzB,CACF,GACA,oCAAC,oBAAY,SAAZ,MACE,CAAC,QACA,oCAAC,oBAAY,QAAZ,MACC;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,aAAY;AAAA,QACZ,UAAU,uBAAuB;AAAA,QACjC,SAAS,MAAM;AACb,cAAI,QAAQ,KAAK;AAAA,QACnB;AAAA;AAAA,MACD;AAAA,IAED,GACA;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,UAAU,uBAAuB;AAAA,QACjC,SAAS,YAAY;AACnB,gBAAMD,gBAAe;AACrB,cAAI,QAAQ,KAAK;AAAA,QACnB;AAAA;AAAA,MACD;AAAA,IAED,CACF,CAEJ,CACF,CACF,CACF;AAAA,EACF,CACF;AAEJ;;;AIvRA,IAAAE,iBAAuC;AAEvC,IAAAC,kBAA2B;;;ACJ3B,IAAAC,2BAOO;AACP,IAAAC,oBAAqC;AACrC,IAAAC,uBAA4B;AAC5B,IAAAC,0BAAsB;;;ACRf,IAAM,kCAAkC,MAAmB;AAAA,EAChE;AACF;;;ADmBO,IAAM,+BAA4D,CACvE,WACG;AACH,QAAM,cAAc,eAAe;AAEnC,aAAO,kCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,gCAAgC;AAAA,IAC7C,YAAY,OAAO,SAAS;AAC1B,YAAM,KAAK,2BAAS,SAAS,6BAAW,WAAW,EAAE,SAAS;AAC9D,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,kCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,UAAI,sBAAsB,SAAS,KAAK,QAAQ,GAAG;AACjD,kBAAM;AAAA,UACJ;AAAA,YACE;AAAA,YACA,MAAM,KAAK;AAAA,UACb;AAAA,UACA;AAAA,YACE,aAAa;AAAA,YACb,SAAS;AAAA,cACP,iBAAiB;AAAA,cACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AAEA,cAAM,OAAO,MAAM;AAAA,UACjB,YAAY;AACV,kBAAMC,WAAU,MAAM,YAAY,WAAW;AAAA,cAC3C,UAAU,mBAAmB;AAAA,cAC7B,SAAS,MAAM,WAAW;AAAA,YAC5B,CAAC;AAED,wCAAAD,SAAUC,SAAQ,WAAW,eAAe;AAE5C,mBAAO,UAAM,iDAAuB,IAAI;AAAA,cACtC,aAAa;AAAA,cACb,SAAS;AAAA,gBACP,iBAAiB;AAAA,gBACjB,eAAe,UAAUA,SAAQ,KAAK;AAAA,cACxC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA;AAAA,YACE,OAAO,CAAC,MAAM,CAAC,EAAC,uBAAG;AAAA,YACnB,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,QACF,EAAE;AAEF,YAAI,EAAC,6BAAM,YAAW;AACpB,gBAAM,QAAQ,IAAI,MAAM;AACxB,gBAAM,OAAO;AACb,gBAAM,UAAU;AAChB,gBAAM;AAAA,QACR;AAEA,eAAO;AAAA,MACT,OAAO;AACL,kBAAM;AAAA,UACJ;AAAA,YACE;AAAA,YACA,MAAM,KAAK;AAAA,UACb;AAAA,UACA;AAAA,YACE,aAAa;AAAA,YACb,SAAS;AAAA,cACP,iBAAiB;AAAA,cACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AAEA,cAAM,OAAO,MAAM;AAAA,UACjB,YAAY;AACV,kBAAMA,WAAU,MAAM,YAAY,WAAW;AAAA,cAC3C,UAAU,mBAAmB;AAAA,cAC7B,SAAS,MAAM,WAAW;AAAA,YAC5B,CAAC;AAED,wCAAAD,SAAUC,SAAQ,WAAW,eAAe;AAE5C,mBAAO,UAAM,yCAAe,IAAI;AAAA,cAC9B,aAAa;AAAA,cACb,SAAS;AAAA,gBACP,iBAAiB;AAAA,gBACjB,eAAe,UAAUA,SAAQ,KAAK;AAAA,cACxC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA;AAAA,YACE,OAAO,CAAC,MAAM,CAAC,EAAC,uBAAG;AAAA,YACnB,UAAU;AAAA,YACV,YAAY;AAAA,UACd;AAAA,QACF,EAAE;AAEF,YAAI,EAAC,6BAAM,YAAW;AACpB,gBAAM,QAAQ,IAAI,MAAM;AACxB,gBAAM,OAAO;AACb,gBAAM,UAAU;AAChB,gBAAM;AAAA,QACR;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AD1HO,SAAS,kBAAkB,OAA+B;AAfjE;AAgBE,QAAM,eAAe,gBAAgB;AACrC,QAAM,4BAA4B,6BAA6B;AAC/D,QAAM,cAAc;AAAA,QAClB,4BAAW,CAAC,SAAS;AAAA,MACnB,QAAQ,IAAI;AAAA,MACZ,YAAY,IAAI;AAAA,IAClB,EAAE;AAAA,EACJ;AAEA,QAAM,aACJ,kBAAa,SAAb,mBAAmB,YAAW,oBAC1B,QACA,YAAY,WAAW,QAAQ,WAAW,YACxC,OACA,MAAM;AAEd,SACE;AAAA,IAAC,mBAAI;AAAA,IAAJ;AAAA,MACC,MAAK;AAAA,MACJ,GAAG;AAAA,MACJ,SAAS,OAAO,MAAM;AApC5B,YAAAC,KAAAC;AAqCQ,SAAAD,MAAA,MAAM,YAAN,gBAAAA,IAAA,YAAgB;AAEhB,cAAIC,MAAA,aAAa,SAAb,gBAAAA,IAAmB,YAAW,mBAAmB;AACnD,iBAAO,YAAY,OAAO,QAAQ,IAAI;AAAA,QACxC;AAEA,oBAAY,WAAW,WAAW;AAAA,UAChC,MAAM,MAAM;AAAA,UACZ,QAAQ;AAAA,UACR,SAAS;AAAA,QACX,CAAC;AAED,YAAI;AACF,gBAAM,UAAU,MAAM,0BAA0B;AAAA,YAC9C,MAAM;AAAA,UACR;AAEA,sBAAY,WAAW,WAAW;AAAA,YAChC,MAAM,MAAM;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,UACV,CAAC;AAAA,QACH,SAAS,OAAO;AACd,sBAAY,WAAW,WAAW;AAAA,YAChC,MAAM,MAAM;AAAA,YACZ,SAAS;AAAA,YACT,QAAQ;AAAA,UACV,CAAC;AAED,kBAAQ,MAAM;AAAA,YACZ,aACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,UAC7C,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA;AAAA,MACA,iBAAe,SAAS,QAAQ;AAAA,MAChC,gBACE,kBAAa,SAAb,mBAAmB,YAAW,oBAC1B,YAAY,OAAO,OACjB,SACA,WACF,YAAY,WAAW,QAAQ,WAAW,YACxC,WACA;AAAA;AAAA,EAEV;AAEJ;;;AGrFA,IAAAC,2BAA0C;;;ACGnC,IAAM,mBAAmB,CAAC,UAAiC,CAAC,iBAAiB,KAAK;;;ADElF,IAAM,qBAAqB,OAAO,UAAuB;AAC9D,QAAM,eAAe,EAAE,sBAAsB;AAAA,IAC3C,UAAU,iBAAiB,KAAK;AAAA,IAChC,SAAS,OAAO,EAAE,WAAW,OAAO,MAAM;AACxC,aAAO,UAAM;AAAA,QACX;AAAA,UACE,GAAG;AAAA,UACH,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,WAAW;AAAA,YACX,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,EACpB,CAAC;AACH;;;AExBA,IAAAC,+BAEO;AACP,IAAAC,gBAAkB;AAClB,IAAAC,eAAiB;AACjB,IAAAC,iBAAiD;AACjD,IAAAC,yBAAwB;;;ACRxB,IAAAC,2BAKO;AACP,IAAAC,uBAAiC;AAK1B,IAAM,gBAGT,CAAC,OAAO,WAAW;AACrB,aAAO,uCAAiB;AAAA,IACtB,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,GAAG;AAAA,IACH,UAAU,iBAAiB,KAAK;AAAA,IAChC,SAAS,CAAC,EAAE,WAAW,OAAO,MAAM;AAClC,iBAAO;AAAA,QACL;AAAA,UACE,GAAG;AAAA,UACH,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,WAAW;AAAA,YACX,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AAtC/B;AAuCM,WAAI,0CAAU,aAAV,mBAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AC1CO,SAAS,cAAc,OAAqC;AACjE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,iCAAgC;AAAA,EAC1C;AAEJ;;;ACjBO,SAAS,eAAe,OAAqC;AAClE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,mCAAkC;AAAA,EAC5C;AAEJ;;;AHDO,SAAS,aAAa,OAAmB;AAlBhD;AAmBE,QAAM,YAAY,MAAM,aAAa;AAErC,QAAM,aAAa,cAAc;AAAA,IAC/B,QAAQ,YAAY,KAAK;AAAA,IACzB,QAAQ,MAAM;AAAA,EAChB,CAAC;AAED,QAAM,UACJ,gBAAW,SAAX,mBAAiB,MACd,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,GAChD,WAAU,CAAC;AAEhB,QAAM,CAAC,UAAU,QAAQ,QAAI,6BAAAC,SAAiB;AAAA,IAC5C,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,aAAa;AAAA,MACX,uBAAuB;AAAA,QACrB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,IAAI;AAC3D,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,IAAI;AAE3D,QAAM,wBAAoB;AAAA,IACxB,MAAM,qCAAU;AAAA,IAChB,CAAC,QAAQ;AAAA,EACX;AACA,QAAM,wBAAoB,4BAAY,YAAY;AAChD,QAAI,EAAC,qCAAU,oBAAmB,WAAW,aAAa;AACxD,YAAM,WAAW,cAAc;AAC/B,2CAAU;AACV,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AAAA,IACvD;AAEA,yCAAU;AAAA,EACZ,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,QAAM,eAAW,4BAAY,CAACC,cAAsC;AAClE,uBAAmB,EAACA,aAAA,gBAAAA,UAAU,gBAAe;AAC7C,uBAAmB,EAACA,aAAA,gBAAAA,UAAU,gBAAe;AAAA,EAC/C,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,aAAS,QAAQ;AACjB,aAAS,GAAG,UAAU,QAAQ,EAAE,GAAG,UAAU,QAAQ;AAAA,EACvD,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,SAAI,WAAU,uBACb,oCAAC,QAAG,WAAU,2BAAyB,MAAM,OAAQ,GACrD,oCAAC,SAAI,WAAU,QAAO,GACtB,oCAAC,SAAI,WAAU,6CACb;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,WAAU;AAAA;AAAA,IACX;AAAA,IAEC,oCAAC,oBAAiB,WAAU,oBAAmB;AAAA,EACjD,GACA,oCAAC,SAAI,WAAU,oBACb;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,iBAAc,WAAU,UAAS;AAAA,EACpC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAS;AAAA,MACT,UACE,mBAAmB,CAAC,WAAW,cAC3B,OACA,WAAW;AAAA,MAEjB,cAAW;AAAA;AAAA,IAEV,WAAW,qBACV,oCAAC,eAAY,WAAU,UAAS,IAEhC,oCAAC,kBAAe,WAAU,UAAS;AAAA,EAEvC,CACF,CACF,CACF,GAEA,oCAAC,SAAI,KAAK,UAAU,WAAU,uCAC5B;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,cAAc,IACV,gBACA,cAAc,IACZ,gBACA;AAAA,MACR;AAAA;AAAA,IAEC,MAAM,IAAI,CAAC,SACV;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV;AAAA,QACA,WAAU;AAAA;AAAA,MAEV;AAAA,QAAC,cAAAC;AAAA,QAAA;AAAA,UACC,KAAK,KAAK;AAAA,UACV,KAAI;AAAA,UACJ,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAQ;AAAA,UACR,WAAU;AAAA;AAAA,MACZ;AAAA,MAEA,oCAAC,UAAK,WAAU,iGACb,KAAK,IACR;AAAA,IACF,CACD;AAAA,EACH,CACF,CACF;AAEJ;;;AIzIA,eAAsB,MAAM,OAAmB;AAC7C,QAAM,YAAY,MAAM,aAAa;AAErC,QAAM,mBAAmB;AAAA,IACvB,QAAQ,YAAY,KAAK;AAAA,IACzB,QAAQ,MAAM;AAAA,EAChB,CAAC;AAED,SAAO,oCAAC,gBAAc,GAAG,OAAO;AAClC;;;ACpBA,IAAAC,+BAA6B;AAC7B,IAAAC,eAAiB;AACjB,IAAAC,iBAAiD;;;ACJjD,IAAAC,2BAKO;AACP,IAAAC,uBAAiC;;;ACH1B,IAAM,sBAAsB,CAAC,UAAoC,CAAC,oBAAoB,KAAK;;;ADQ3F,IAAM,mBAGT,CAAC,OAAO,WAAW;AACrB,QAAM,YAAQ,uCAAiB;AAAA,IAC7B,GAAG;AAAA,IACH,UAAU,oBAAoB,KAAK;AAAA,IACnC,SAAS,CAAC,EAAE,WAAW,OAAO,MAAM;AAClC,iBAAO;AAAA,QACL,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AACzB,UAAI,qCAAU,SAAS,aAAa;AAClC,eAAO,SAAS,SAAS;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AErCA,IAAAC,iBAAyB;AAEzB,IAAAC,gBAAkB;AAClB,IAAAC,yBAAwB;;;ACHjB,SAAS,uBAAuB,OAAqC;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,8BAA6B;AAAA,EACvC;AAEJ;A;;;;;;;;ADNA,4BAAmB;AAOZ,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,aAAa,cAAc;AAEjC,QAAM,cAAc,QAAQ;AAC5B,QAAM,gBAAgB,cAClB,QAAQ,0BACR,QAAQ;AAEZ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,oCAAC,SAAI,WAAU,iCACb,oCAAC,SAAI,WAAU,yBACZ,cACC,oCAAC,SAAI,WAAU,mHACb,oCAAC,UAAK,WAAU,mDAAkD,GAAE,YAEtE,IAEA,oCAAC,SAAI,WAAU,6GACb,oCAAC,0BAAuB,WAAU,YAAW,GAAE,cAEjD,GAGF,oCAAC,SAAI,WAAU,mCAAiC,QAAQ,IAAK,GAC7D,oCAAC,SAAI,WAAU,6EACZ,aAAa,eAAe;AAAA,MAC3B,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC,CACH,CACF,GAEA,oCAAC,aACC;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,KAAK,cAAc,qBAAY;AAAA,QAC/B,KAAI;AAAA,QACJ,SAAS;AAAA,QACT,WAAU;AAAA;AAAA,IACZ,CACF,CACF;AAAA,IAEA,oCAAC,SAAI,WAAU,0BACb,oCAAC,SAAI,WAAU,yBACZ,aAAa,GAAG;AAAA,MACf,UAAU,WAAW,SAAS;AAAA,MAC9B,SAAS;AAAA,IACX,CAAC,CACH,GAEA,oCAAC,SAAI,WAAU,oDACZ,cACC,oCAAC,SAAI,WAAU,2BACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAC,QAAO,2BAA2B;AAAA,QACpC;AAAA;AAAA,MAEA,oCAAC,mBAAgB,WAAU,YAAW;AAAA,IACxC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAA,QAAO,2BAA2B;AAAA,QACpC;AAAA;AAAA,MAEA,oCAAC,mBAAgB,WAAU,YAAW;AAAA,IACxC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAA,QAAO,2BAA2B;AAAA,QACpC;AAAA;AAAA,MAEA,oCAAC,mBAAgB,WAAU,YAAW;AAAA,IACxC,CACF,IAEA,oCAAC,SAAI,WAAU,2BACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAA,QAAO,6BAA6B;AAAA,QACtC;AAAA;AAAA,MAEA,oCAAC,oBAAiB,WAAU,YAAW;AAAA,IACzC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAA,QAAO,6BAA6B;AAAA,QACtC;AAAA;AAAA,MAEA,oCAAC,oBAAiB,WAAU,YAAW;AAAA,IACzC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,sBAAAA,QAAO,6BAA6B;AAAA,QACtC;AAAA;AAAA,MAEA,oCAAC,oBAAiB,WAAU,YAAW;AAAA,IACzC,CACF,GAGF,oCAAC,SAAI,WAAU,yBACZ,aAAa,mCAAS,yBAAyB;AAAA,MAC9C,UAAU,WAAW,SAAS;AAAA,MAC9B,SAAS;AAAA,IACX,CAAC,CACH,CACF,CACF;AAAA,IAEA;AAAA,MAAC,wBAAS;AAAA,MAAT;AAAA,QACC,WAAU;AAAA,QACV,KAAK;AAAA,QACL,OAAO;AAAA;AAAA,MAEP,oCAAC,wBAAS,OAAT,EAAe,WAAU,qCACxB,oCAAC,wBAAS,OAAT,EAAe,WAAU,mCAAkC,CAC9D;AAAA,IACF;AAAA,IAEA,oCAAC,SAAI,WAAU,iCACZ,cACG,mBAAmB,aAAa,mCAAS,yBAAyB;AAAA,MAChE,UAAU,WAAW,SAAS;AAAA,MAC9B,SAAS;AAAA,IACX,CAAC,CAAC,oDACF;AAAA,MACE,OAAO,mCAAS,IAAI,KAAK;AAAA,MACzB,OAAO,mCAAS,uBAAuB,KAAK;AAAA,IAC9C,CACN;AAAA,EACF;AAEJ;AAEA,IAAM,oCAAoC,CACxC,MACA,UACW;AACX,QAAM,aAAa,UAAU,IAAI,IAAK,OAAO,QAAS;AAEtD,SAAO,cAAc,KACjB,qFACA;AACN;;;AHzKO,SAAS,sBAAsB,OAA4B;AAblE;AAcE,QAAM,CAAC,UAAU,QAAQ,QAAI,6BAAAC,SAAiB;AAAA,IAC5C,OAAO;AAAA,IACP,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,iBAAa,4BAAY,MAAM;AACnC,QAAI,SAAU,UAAS,WAAW;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,iBAAa,4BAAY,MAAM;AACnC,QAAI,SAAU,UAAS,WAAW;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AACxD,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AAExD,QAAM,eAAW,4BAAY,MAAM;AACjC,QAAI,CAAC,SAAU;AACf,qBAAiB,SAAS,cAAc,CAAC;AACzC,qBAAiB,SAAS,cAAc,CAAC;AAAA,EAC3C,GAAG,CAAC,QAAQ,CAAC;AAEb,gCAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,aAAS;AACT,aAAS,GAAG,UAAU,QAAQ;AAC9B,aAAS,GAAG,UAAU,QAAQ;AAAA,EAChC,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,gBAAgB,iBAAiB;AAAA,IACrC,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,aACJ,mBAAc,SAAd,mBAAoB,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,UAAS,CAAC;AAElE,MAAI,SAAS,UAAU,EAAG,QAAO;AAEjC,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,SAAI,WAAU,uCACb,oCAAC,SAAI,WAAU,2BAAyB,MAAM,OAAQ,GACtD,oCAAC,SAAI,WAAU,kCACb;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,WAAU;AAAA;AAAA,IACX;AAAA,IAEC,oCAAC,oBAAiB,WAAU,oBAAmB;AAAA,EACjD,GAEA,oCAAC,SAAI,WAAU,oBACb;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,iBAAc,WAAU,UAAS;AAAA,EACpC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,UAAK,WAAU,aAAU,MAAI;AAAA,IAC9B,oCAAC,kBAAe,WAAU,UAAS;AAAA,EACrC,CACF,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,qCAAoC,KAAK,YACtD,oCAAC,SAAI,WAAU,kBACZ,SAAS,IAAI,CAAC,YACb;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,QAAQ;AAAA,MACb;AAAA,MACA,WACE,SAAS,SAAS,IACd,WACA;AAAA;AAAA,EAER,CACD,CACH,CACF,CACF;AAEJ;;;AKhHA,eAAsB,eAAe,OAA4B;AAmB/D,SAAO,oCAAC,yBAAuB,GAAG,OAAO;AAC3C;;;AC5BA,gCAAsB;AACtB,IAAAC,yBAAwB;AAOjB,SAAS,QAAQ,OAAqB;AAC3C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA;AAAA,IAEA,oCAAC,SAAI,WAAU,qFACb,oCAAC,UAAK,WAAU,mEAAkE,GAClF,oCAAC,cAAK,YAAe,CACvB;AAAA,IACA,oCAAC,0BAAAC,SAAA,EAAU,WAAU,UAClB,MAAM,UAAS,0CAElB;AAAA,EACF;AAEJ;;;AC1BA,IAAAC,uBAA6C;;;ACA7C,IAAAC,2BAA4B;AAK5B,eAAsB,wBAAwB;AAC5C,QAAM,eAAe,EAAE,cAAc;AAAA,IACnC,UAAU,oBAAoB;AAAA,IAC9B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,aAAO,UAAM,sCAAY;AAAA,QACvB;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AClBA,qBAAwB;AAIxB,eAAsBC,cAA+B;AAJrD;AAKE,QAAM,UAAU,UAAM,wBAAQ;AAC9B,QAAM,eAAc,aAAQ,IAAI,wBAAwB,MAApC,mBAAuC;AAE3D,SAAO,cACH,EAAE,QAAQ,iBAAiB,OAAO,YAAY,IAC9C,EAAE,QAAQ,kBAAkB;AAClC;;;ACPO,SAAS,uBAAuB;AACrC,SAAO,eAAe,EAAE,cAAc;AAAA,IACpC,UAAU,mBAAmB;AAAA,IAC7B,SAAS,YAAY;AACnB,aAAO,MAAMC,YAAW;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;;;ACXA,IAAAC,2BAA0B;AAMnB,IAAM,sBAAsB,YAAY;AAC7C,QAAM,UAAU,MAAMC,YAAW;AAEjC,MAAI,QAAQ,WAAW,kBAAmB;AAE1C,QAAM,eAAe,EAAE,cAAc;AAAA,IACnC,UAAU,kBAAkB;AAAA,IAC5B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,aAAO,UAAM,oCAAU;AAAA,QACrB;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,QACxC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;ACtBA,IAAAC,iBAA+B;AAC/B,IAAAC,uBAAoC;AAGpC,IAAAC,yBAAwB;AAMjB,SAAS,UAAU,EAAE,SAAS,GAAsB;AACzD,QAAM,cAAc,eAAe;AAEnC,SACE,oCAAC,4CAAoB,QAAQ,eAC1B,UAED,oCAAC,0BAAQ,WACN,CAAC,UACA;AAAA,IAAC,qBAAM;AAAA,IAAN;AAAA,MACC,KAAK,MAAM;AAAA,MACX,WAAU;AAAA;AAAA,IAEV;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,MAAM,SAAS,UACX,sBACA;AAAA,QACN;AAAA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA,MAAM,SAAS,UACX,sBACA;AAAA,UACN;AAAA;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,eAAW;AAAA,cACT;AAAA,cACA,MAAM,SAAS,UAAU,iBAAiB;AAAA,YAC5C;AAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,oCAAC,SAAI,WAAU,+BACb,oCAAC,qBAAM,OAAN,EAAY,WAAU,mBACpB,MAAM,QACH,MAAM,QACN,MAAM,SAAS,UACb,UACA,SACR,GACA,oCAAC,qBAAM,aAAN,EAAkB,WAAU,wBAC1B,MAAM,cACH,MAAM,cACN,MAAM,SAAS,UACb,0BACA,mCACR,CACF;AAAA,IACA,oCAAC,qBAAM,cAAN,EAAmB,WAAU,kDAC5B,oCAAC,SAAM,WAAU,UAAS,CAC5B;AAAA,EACF,CAEJ,CACF;AAEJ;;;ALjEA,eAAsB,eAAe,EAAE,SAAS,GAAsB;AACpE,QAAM,cAAc,eAAe;AAEnC,QAAM,QAAQ,IAAI;AAAA,IAChB,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,EACtB,CAAC;AAED,SACE,oCAAC,iBACC,oCAAC,0CAAkB,WAAO,gCAAU,WAAW,KAC7C,oCAAC,2BAAqB,QAAS,CACjC,CACF;AAEJ;;;AMzBA,IAAAC,2BAA0B;;;ACEnB,IAAM,oBAAoB,MAAgB,CAAC,gBAAgB;;;ADG3D,IAAM,sBAAsB,YAAY;AAC7C,QAAM,eAAe,EAAE,cAAc;AAAA,IACnC,UAAU,kBAAkB;AAAA,IAC5B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,aAAO,UAAM,oCAAU;AAAA,QACrB;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AEhBA,IAAAC,+BAEO;AACP,IAAAC,eAAiB;AACjB,IAAAC,iBAAiD;AACjD,IAAAC,0BAAwB;;;ACPxB,IAAAC,2BAAsC;AACtC,IAAAC,uBAAyB;AAKlB,IAAM,iBAAiC,CAAC,WAAW;AACxD,aAAO,+BAAS;AAAA,IACd,GAAG;AAAA,IACH,UAAU,kBAAkB;AAAA,IAC5B,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,aAAO,UAAM,oCAAU;AAAA,QACrB;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AClBO,SAAS,WAAW,OAAqC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,qlCAAolC;AAAA,EAC9lC;AAEJ;;;AClBA,IAAAC,gBAAkB;AAClB,IAAAC,qBAA0B;AAC1B,IAAAC,0BAAuB;AAQhB,SAAS,WAAW,OAAwB;AACjD,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,aAAS,8BAAU;AAEzB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,MAAM;AAAA,MACX,WAAU;AAAA;AAAA,IAET,MAAM,OAAO,OACZ;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,KAAK,MAAM,OAAO;AAAA,QAClB,KAAK,MAAM;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,UAAQ;AAAA,QACR,WAAU;AAAA;AAAA,IACZ;AAAA,IAEF,oCAAC,SAAI,WAAU,iCACb;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,UACA,MAAM,wBAAwB,eAAe;AAAA,QAC/C;AAAA;AAAA,MAEC,MAAM;AAAA,IACT,GAEC,MAAM,yBAAyB,MAAM,eACpC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,yBAAyB,EAAE,QAAQ,MAAM,YAAY;AAAA;AAAA,IACvD,GAGF,oCAAC,SAAI,WAAU,kBACb;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,SAAS,MAAM,OAAO,KAAK,WAAW,MAAM,EAAE,EAAE;AAAA;AAAA,MACjD;AAAA,IAED,CACF,CACF;AAAA,EACF;AAEJ;;;AHzCO,SAAS,cAAc,OAAmB;AAC/C,QAAM,cAAc,eAAe,CAAC,CAAC;AAErC,QAAM,SAAS,YAAY,QAAQ,CAAC;AAEpC,QAAM,CAAC,UAAU,QAAQ,QAAI,6BAAAC,SAAiB;AAAA,IAC5C,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,aAAa;AAAA,MACX,uBAAuB;AAAA,QACrB,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,IAAI;AAC3D,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAS,IAAI;AAE3D,QAAM,wBAAoB;AAAA,IACxB,MAAM,qCAAU;AAAA,IAChB,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,wBAAoB,4BAAY,YAAY;AAChD,yCAAU;AAAA,EACZ,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,eAAW,4BAAY,CAACC,cAAsC;AAClE,uBAAmB,EAACA,aAAA,gBAAAA,UAAU,gBAAe;AAC7C,uBAAmB,EAACA,aAAA,gBAAAA,UAAU,gBAAe;AAAA,EAC/C,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,aAAS,QAAQ;AACjB,aAAS,GAAG,UAAU,QAAQ,EAAE,GAAG,UAAU,QAAQ;AAAA,EACvD,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,SAAI,WAAU,uBACb,oCAAC,QAAG,WAAU,2BAAyB,MAAM,OAAQ,GACrD,oCAAC,SAAI,WAAU,QAAO,GACtB,oCAAC,SAAI,WAAU,6CACb;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,WAAU;AAAA;AAAA,IACX;AAAA,IAEC,oCAAC,oBAAiB,WAAU,oBAAmB;AAAA,EACjD,GACA,oCAAC,SAAI,WAAU,oBACb;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,iBAAc,WAAU,UAAS;AAAA,EACpC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,kBAAe,WAAU,UAAS;AAAA,EACrC,CACF,CACF,CACF,GAEC,OAAO,UAAU,KAChB;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,WAAU;AAAA;AAAA,EACZ,GAGD,OAAO,UAAU,KAChB,oCAAC,SAAI,KAAK,UAAU,WAAU,uCAC5B;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,MACF;AAAA;AAAA,IAEC,OAAO,IAAI,CAAC,UACX;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX;AAAA,QACA,uBAAuB,MAAM;AAAA;AAAA,IAC/B,CACD;AAAA,EACH,CACF,CAEJ;AAEJ;;;AI7GA,eAAsB,OAAO,OAAmB;AAC9C,QAAM,oBAAoB;AAE1B,SAAO,oCAAC,iBAAe,GAAG,OAAO;AACnC;;;ACRO,SAAS,UAAU,OAAuB;AATjD;AAUE,QAAM,QAAQ,gBAAgB;AAC9B,WAAO,WAAM,SAAN,mBAAY,YAAW,kBAC1B,MAAM,WACL,MAAM,YAAY;AACzB;;;ACZA,IAAAC,iBAAuB;AACvB,IAAAC,gBAAuC;AAEvC,IAAAC,mBAA2B;;;ACH3B,IAAAC,iBAAiC;AACjC,IAAAC,eAA4B;AAC5B,IAAAD,iBAAyB;AACzB,IAAAE,0BAAoC;AACpC,IAAAD,eAAkB;AAClB,IAAAE,kBAA2B;;;ACP3B,IAAAC,oBAA4B;AAC5B,IAAAC,iBAAiD;AA6C1C,SAAS,YAAY,MAA8C;AACxE;AAEA,QAAM,OAAM,6BAAM,QAAO;AACzB,QAAM,OAAM,6BAAM,QAAO;AACzB,QAAM,YAAW,6BAAM,aAAY;AACnC,QAAM,YAAW,6BAAM,aAAY;AACnC,QAAM,cAAa,6BAAM,eAAc;AACvC,QAAM,cAAa,6BAAM,eAAc;AAEvC,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,GAAG;AAC9C,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAElD,QAAM,YAAQ,4BAAY,MAAM;AAE9B,QAAI,QAAQ;AACV,gBAAU,KAAK;AACf;AAAA,IACF;AAGA,QAAI,SAAS;AAEX,UAAI,YAAY;AACd,kBAAU,IAAI;AAAA,MAChB;AAEA;AAAA,IACF;AAEA,eAAW,IAAI;AACf,iBAAa,MAAM,CAAC;AAAA,EACtB,GAAG,CAAC,YAAY,SAAS,KAAK,MAAM,CAAC;AAErC,WAAS,OAAO;AACd,cAAU,KAAK;AACf,eAAW,KAAK;AAChB,iBAAa,GAAG;AAAA,EAClB;AAEA,WAAS,UAAU;AACjB,SAAK;AACL,UAAM;AAAA,EACR;AAEA,gCAAU,MAAM;AACd,QAAI;AAEJ,QAAI,WAAW,CAAC,QAAQ;AACtB,cAAQ,YAAY,MAAM;AACxB,qBAAa,UAAM,yBAAM,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC;AAElD,YAAI,aAAa,KAAK;AACpB,wBAAc,KAAK;AACnB,uBAAa,GAAG;AAChB,qBAAW,KAAK;AAChB,qBAAW;AAAA,QACb;AAAA,MACF,GAAG,WAAW,GAAG;AAAA,IACnB;AAEA,WAAO,MAAM;AACX,UAAI,OAAO;AACT,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AAED,gCAAU,MAAM;AACd,QAAI,QAAS;AACb,QAAI,WAAY;AAChB,QAAI,CAAC,SAAU;AACf,UAAM;AACN,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAC,YAAY,UAAU,SAAS,KAAK,CAAC;AAEzC,gCAAU,MAAM;AACd,WAAO,MAAM;AACX,iBAAW,KAAK;AAChB,gBAAU,KAAK;AACf,mBAAa,GAAG;AAChB,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAER,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,MAAM,GAAW;AACxB,SAAO,KAAK,OAAO,IAAI,OAAO,WAAW,GAAG,IAAI;AAClD;;;AC/IO,SAAS,wBAAwB;AACtC,QAAM,aAAa,cAAc;AAajC,QAAMC,UAAS,CAAC,UAAkB;AAChC,QAAI,MAAM,WAAW,WAAW,aAAa,QAAQ,GAAG;AACtD,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,WAAW,GAAG,GAAG;AACzB,aAAO,WAAW,aAAa,WAAW,MAAM,UAAU,CAAC;AAAA,IAC7D;AAEA,QAAI,MAAM,WAAW,WAAW,aAAa,SAAS,UAAU,CAAC,CAAC,GAAG;AACnE,aAAO,MAAM;AAAA,IACf;AAEA,WAAO,WAAW,aAAa,WAAW;AAAA,EAC5C;AAaA,QAAM,QAAQ,CAAC,UAAkB;AAC/B,UAAM,eAAeA,QAAO,KAAK,EAAE,QAAQ,WAAW,aAAa,UAAU,EAAE;AAE/E,WAAO;AAAA,MACL;AAAA,MACA,UAAU,WAAW,aAAa;AAAA,IACpC;AAAA,EACF;AAYA,QAAM,WAAW,CAAC,UAAoC;AACpD,WAAO,OAAO,UAAU,YAAY,WAAW,aAAa,QAAQ,KAAK,KAAK;AAAA,EAChF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,QAAAA;AAAA,IACA;AAAA,EACF;AACF;;;ACvEA,IAAAC,2BAGO;AACP,IAAAC,uBAA4B;;;ACFrB,IAAM,qCAAqC,MAAmB;AAAA,EACnE;AACF;;;ADKO,IAAM,kCAGT,CAAC,WAAW;AACd,aAAO,kCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,mCAAmC;AAAA,IAChD,YAAY,OAAO,UAAU;AAC3B,gBAAM,+CAAqB,OAAO;AAAA,QAChC,aAAa;AAAA,QACb,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AExBA,IAAAC,uBAA4B;;;ACK5B,eAAsB,OACpB,OAC+B;AAC/B,QAAM,MAAM,MAAM,MAAM,iBAAiB;AAAA,IACvC,MAAM,KAAK,UAAU,KAAK;AAAA,IAC1B,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,GAAI,oBAAoB;AAAA,QACtB,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,OAAQ,MAAM,IAAI,KAAK;AAE7B,MAAI,CAAC,KAAK,IAAI;AACZ,UAAM,QAAQ,IAAI,MAAM;AACxB,UAAM,OAAO;AACb,UAAM,UAAU;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,KAAK,QAAQ;AACtB;;;AC7BO,IAAM,uBAAuB,MAAmB,CAAC,kBAAkB;;;AFMnE,IAAM,oBAAiE,CAAC,WAAW;AACxF,QAAM,cAAc,eAAe;AAEnC,aAAO,kCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,qBAAqB;AAAA,IAClC,YAAY,OAAO,UAAU;AAC3B,YAAM,gBAAgB,MAAM,OAAO,KAAK;AAExC,UAAI,CAAC,eAAe;AAClB,cAAM,YAAY,kBAAkB;AAAA,UAClC,UAAU,mBAAmB;AAAA,QAC/B,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;;;AGxBO,SAAS,aAAa,OAAqC;AAChE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACP,GAAG;AAAA;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,EACF;AAEJ;;;ACnBO,SAAS,WAAW,OAAqC;AAC9D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACP,GAAG;AAAA;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA;AAAA,IACJ;AAAA,EACF;AAEJ;;;ATZO,SAAS,aAAa;AArB7B;AAsBE,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAgB,CAAC;AAEzC,QAAM,aAAS,iCAAiB;AAChC,QAAM,cAAc,mBAAe,4BAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AACxE,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,+BAA+B,gCAAgC;AAErE,QAAM,aAAa,cAAc;AACjC,QAAM,qBAAqB,sBAAsB;AAEjD,QAAM,kBAAkB,eAAE,OAAO;AAAA,IAC/B,cAAc,eAAE,OAAO,EAAE,YAAY,CAAC,GAAG,QAAQ;AAC/C,UAAI,CAAC,mBAAmB,SAAS,CAAC,GAAG;AACnC,YAAI,SAAS;AAAA,UACX,MAAM,eAAE,aAAa;AAAA,UACrB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,eAAe,eAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,QAAQ;AACjD,UAAI,CAAC,GAAG;AACN,YAAI,SAAS;AAAA,UACX,MAAM,eAAE,aAAa;AAAA,UACrB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,kBAAkB,eAAE,OAAO;AAAA,IAC/B,kBAAkB,eAAE,MAAM,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACzE,CAAC;AAED,QAAM,gBAAY,iCAAQ;AAAA,IACxB,cAAU,0BAAY,eAAe;AAAA,IACrC,eAAe;AAAA,MACb,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,gBAAY,iCAAQ;AAAA,IACxB,cAAU,0BAAY,eAAe;AAAA,IACrC,eAAe;AAAA,MACb,kBAAkB,MAAM,KAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,QAAM,WAAW,YAAY;AAAA,IAC3B,KAAK;AAAA,IACL,UAAU,MAAO;AAAA,EACnB,CAAC;AAED,SACE,0DACG,SAAS,KACR,0DACE,oCAAC,SAAI,WAAU,iBACb,oCAAC,QAAG,WAAU,6CAA0C,wBAExD,GACA,oCAAC,OAAE,WAAU,6CAA0C,0CAEvD,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,UAAU,aAAa,OAAO,SAAS;AAC/C,YAAI;AACF,gBAAM,6BAA6B,YAAY;AAAA,YAC7C,SAAS;AAAA,YACT,WAAW,mBAAmB,OAAO,KAAK,YAAY;AAAA,YACtD,QAAQ;AAAA,UACV,CAAC;AAED,kBAAQ,CAAC;AACT,mBAAS,MAAM;AAAA,QACjB,SAAS,GAAG;AACV,kBAAQ,MAAM;AAAA,YACZ,aACE,aAAa,QACT,EAAE,UACF;AAAA,UACR,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA,IAED,oCAAC,cAAM,MAAN,EAAW,SAAS,CAAC,CAAC,UAAU,UAAU,OAAO,gBAChD,oCAAC,cAAM,OAAN,MAAY,eAAa,GAC1B,oCAAC,SAAI,WAAU,cACb,oCAAC,WAAW,QAAQ,MAAnB,EAAwB,WAAU,8DAA6D,GAChG;AAAA,MAAC,cAAM;AAAA,MAAN;AAAA,QACC,WAAU;AAAA,QACV,aAAa,GAAG,WAAW,aAAa,QAAQ,GAAG,WAAW,aAAa,OAAO;AAAA,QACjF,GAAG,UAAU,SAAS,cAAc;AAAA;AAAA,IACvC,CACF,GACA,oCAAC,cAAM,WAAN,OACE,eAAU,UAAU,OAAO,iBAA3B,mBAAyC,OAC5C,CACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,UAAU,UAAU;AAAA;AAAA,MAC/B;AAAA,IAED;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,MAAK;AAAA,QACL,QAAQ,CAAC,MACP;AAAA,UAAC,iBAAS;AAAA,UAAT;AAAA,YACC,WAAU;AAAA,YACV,SAAS,EAAE,WAAW;AAAA,YACtB,SAAS,EAAE,MAAM;AAAA,YACjB,iBAAiB,CAAC,YAAY;AAC5B,gBAAE,MAAM,SAAS,QAAQ,OAAO;AAAA,YAClC;AAAA;AAAA,UAEA,oCAAC,iBAAS,SAAT,MACC,oCAAC,iBAAS,WAAT,EAAmB,SAAO,QACzB,oCAAC,eAAU,CACb,CACF;AAAA,UACA,oCAAC,iBAAS,OAAT,MAAe,wUAQhB;AAAA,UACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,QACxB;AAAA;AAAA,IAEJ;AAAA,EACF,GAEA,oCAAC,SAAI,WAAU,+BACb,oCAAC,QAAG,WAAU,yDAAwD,GACtE,oCAAC,UAAK,WAAU,6EAA0E,IAE1F,CACF,GAEA,oCAAC,SAAI,WAAU,UACb;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,SAAS,MAAM;AACb,eAAO,QAAQ,KAAK;AAAA,MACtB;AAAA;AAAA,IAEA,oCAAC,cAAW,WAAU,UAAS;AAAA,IAAE;AAAA,EAEnC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,SAAS,MAAM;AACb,eAAO,QAAQ,KAAK;AAAA,MACtB;AAAA;AAAA,IAEA,oCAAC,gBAAa,WAAU,UAAS;AAAA,IAAE;AAAA,EAErC,CACF,CACF,GACA,oCAAC,SAAI,WAAU,4DACb,oCAAC,UAAK,WAAU,mBAAgB,wBAA2B,GAC3D;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS,MAAM;AACb,eAAO,QAAQ,KAAK;AACpB,oBAAY,QAAQ,IAAI;AAAA,MAC1B;AAAA;AAAA,IACD;AAAA,EAED,CACF,CACF,GAGD,SAAS,KACR,oCAAC,SAAI,WAAU,iBACb,oCAAC,QAAG,WAAU,6CAA0C,kBAExD,GACA,oCAAC,OAAE,WAAU,6CAA0C,6DACM,KAC3D,oCAAC,UAAK,WAAU,mBACb,mBAAmB,OAAO,UAAU,UAAU,cAAc,CAAC,CAChE,GAAQ,KAAI,UAEd,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,UAAU,aAAa,OAAO,EAAE,iBAAiB,MAAM;AAC/D,cAAM,EAAE,aAAa,IAAI,UAAU,UAAU;AAE7C,YAAI;AACF,gBAAM,eAAe,YAAY;AAAA,YAC/B,MAAM;AAAA,YACN,cAAc,mBAAmB,OAAO,YAAY;AAAA,YACpD,kBAAkB,iBAAiB,KAAK,EAAE;AAAA,UAC5C,CAAC;AAED,iBAAO,QAAQ,KAAK;AACpB,oBAAU,MAAM;AAChB,oBAAU,MAAM;AAChB,kBAAQ,CAAC;AAAA,QACX,QAAQ;AACN,kBAAQ,MAAM;AAAA,YACZ,aAAa;AAAA,UACf,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,UAAU;AAAA,QACnB,QAAQ,CAAC,MACP;AAAA,UAAC,iBAAS;AAAA,UAAT;AAAA,YACC,aAAY;AAAA,YACZ,SAAS,EAAE,WAAW;AAAA,YACtB,OAAO,EAAE,MAAM;AAAA,YACf,eAAe,CAAC,YAAY;AAC1B,gBAAE,MAAM,SAAS,QAAQ,KAAK;AAAA,YAChC;AAAA;AAAA,UAEA,oCAAC,iBAAS,SAAT,MACC,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,CAC5B;AAAA,UACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,QACxB;AAAA;AAAA,IAEJ;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,UAAU,UAAU;AAAA;AAAA,MAC/B;AAAA,IAED;AAAA,IAEA,oCAAC,SAAI,WAAU,iEACb,oCAAC,UAAK,WAAU,mBAAgB,0BAEhC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,SAAS;AAAA,QACnB,SAAS,YAAY;AACnB,gBAAM,6BAA6B,YAAY;AAAA,YAC7C,SAAS;AAAA,YACT,WAAW,mBAAmB;AAAA,cAC5B,UAAU,UAAU,cAAc;AAAA,YACpC;AAAA,UACF,CAAC;AAED,mBAAS,MAAM;AAAA,QACjB;AAAA;AAAA,MAEC,SAAS,UACN,aAAa,SAAS,SAAS,MAC/B;AAAA,IACN,CACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAM;AACb,kBAAQ,CAAC;AACT,oBAAU,MAAM;AAChB,mBAAS,KAAK;AAAA,QAChB;AAAA;AAAA,MAEA,oCAAC,iBAAc,WAAU,UAAS;AAAA,MAAE;AAAA,IAEtC;AAAA,EACF,CACF,CAEJ;AAEJ;;;ADjTO,SAAS,OAAO,OAAoB;AACzC,QAAM,cAAc,mBAAe,6BAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AAExE,SACE;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAM,YAAY;AAAA,MAClB,cAAc,CAAC,YAAY;AACzB,oBAAY,QAAQ,QAAQ,IAAI;AAAA,MAClC;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA,MACb,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,eAAO,SAAP,EAAe,SAAO,QACpB,MAAM,YACL,oCAAC,YAAO,MAAK,UAAS,WAAU,0BAAuB,OAEvD,CAEJ;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,UAAP,IAAgB,GACjB,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,EAAe,WAAU,+DACxB;AAAA,MAAC,cAAAC;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA;AAAA,IACZ,GAEA,oCAAC,SAAI,WAAU,wGACb,oCAAC,eAAO,cAAP,MACC,oCAAC,WAAM,CACT,GAEA;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,WAAW;AAAA;AAAA,IACb,GAEA,oCAAC,gBAAW,CACd,CACF,CACF,CACF;AAAA,EACF;AAEJ;;;AWrEA,IAAAC,iBAAuB;AACvB,IAAAC,iBAAuC;AAEvC,IAAAC,mBAA2B;;;ACH3B,IAAAC,iBAAiC;AACjC,IAAAC,eAA4B;AAC5B,IAAAC,oBAAqC;AACrC,IAAAC,qBAAgC;AAChC,IAAAH,iBAAyB;AACzB,IAAAI,0BAAoC;AACpC,IAAAH,eAAkB;AAClB,IAAAI,mBAA2B;;;ACT3B,IAAAC,2BAGO;AACP,IAAAC,uBAA4B;;;ACFrB,IAAM,uBAAuB,MAAmB,CAAC,kBAAkB;;;ADUnE,IAAM,oBAAyD,CACpE,WACG;AACH,aAAO,kCAAY;AAAA,IACjB,GAAG;AAAA,IACH,aAAa,qBAAqB;AAAA,IAClC,YAAY,OAAO,UAAU;AAC3B,aAAO,UAAM,yDAA+B,OAAO;AAAA,QACjD,SAAS;AAAA,UACP,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,GAAI,oBAAoB;AAAA,YACtB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;ADRO,SAAS,aAAa;AAtB7B;AAuBE,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAgB,CAAC;AAEzC,QAAM,aAAS,iCAAiB;AAChC,QAAM,aAAS,oCAAgB;AAC/B,QAAM,cAAc,mBAAe,6BAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AACxE,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,+BAA+B,gCAAgC;AAErE,QAAM,aAAa,cAAc;AACjC,QAAM,qBAAqB,sBAAsB;AAEjD,QAAM,kBAAkB,eAAE,OAAO;AAAA,IAC/B,cAAc,eAAE,OAAO,EAAE,YAAY,CAAC,GAAG,QAAQ;AAC/C,UAAI,CAAC,mBAAmB,SAAS,CAAC,GAAG;AACnC,YAAI,SAAS;AAAA,UACX,MAAM,eAAE,aAAa;AAAA,UACrB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD,eAAe,eAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,QAAQ;AACjD,UAAI,CAAC,GAAG;AACN,YAAI,SAAS;AAAA,UACX,MAAM,eAAE,aAAa;AAAA,UACrB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,kBAAkB,eAAE,OAAO;AAAA,IAC/B,kBAAkB,eAAE,MAAM,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACzE,CAAC;AAED,QAAM,gBAAY,iCAAQ;AAAA,IACxB,cAAU,0BAAY,eAAe;AAAA,IACrC,eAAe;AAAA,MACb,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AAED,QAAM,gBAAY,iCAAQ;AAAA,IACxB,cAAU,0BAAY,eAAe;AAAA,IACrC,eAAe;AAAA,MACb,kBAAkB,MAAM,KAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,QAAM,WAAW,YAAY;AAAA,IAC3B,KAAK;AAAA,IACL,UAAU,MAAO;AAAA,EACnB,CAAC;AAED,SACE,0DACG,SAAS,KACR,0DACE,oCAAC,SAAI,WAAU,iBACb,oCAAC,QAAG,WAAU,6CAA0C,mBAExD,GACA,oCAAC,OAAE,WAAU,6CAA0C,uCAEvD,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,UAAU,aAAa,OAAO,SAAS;AAC/C,YAAI;AACF,gBAAM,6BAA6B,YAAY;AAAA,YAC7C,SAAS;AAAA,YACT,WAAW,mBAAmB,OAAO,KAAK,YAAY;AAAA,UACxD,CAAC;AAED,kBAAQ,CAAC;AACT,mBAAS,MAAM;AAAA,QACjB,SAAS,GAAG;AACV,kBAAQ,MAAM;AAAA,YACZ,aACE,aAAa,QACT,EAAE,UACF;AAAA,UACR,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA,IAED,oCAAC,cAAM,MAAN,EAAW,SAAS,CAAC,CAAC,UAAU,UAAU,OAAO,gBAChD,oCAAC,cAAM,OAAN,MAAY,eAAa,GAC1B,oCAAC,SAAI,WAAU,cACb,oCAAC,WAAW,QAAQ,MAAnB,EAAwB,WAAU,8DAA6D,GAChG;AAAA,MAAC,cAAM;AAAA,MAAN;AAAA,QACC,WAAU;AAAA,QACT,GAAG,UAAU,SAAS,cAAc;AAAA;AAAA,IACvC,CACF,GACA,oCAAC,cAAM,WAAN,OACE,eAAU,UAAU,OAAO,iBAA3B,mBAAyC,OAC5C,CACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,UAAU,UAAU;AAAA;AAAA,MAC/B;AAAA,IAED;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,UAAU;AAAA,QACnB,MAAK;AAAA,QACL,QAAQ,CAAC,MACP;AAAA,UAAC,iBAAS;AAAA,UAAT;AAAA,YACC,WAAU;AAAA,YACV,SAAS,EAAE,WAAW;AAAA,YACtB,SAAS,EAAE,MAAM;AAAA,YACjB,iBAAiB,CAAC,YAAY;AAC5B,gBAAE,MAAM,SAAS,QAAQ,OAAO;AAAA,YAClC;AAAA;AAAA,UAEA,oCAAC,iBAAS,SAAT,MACC,oCAAC,iBAAS,WAAT,EAAmB,SAAO,QACzB,oCAAC,eAAU,CACb,CACF;AAAA,UACA,oCAAC,iBAAS,OAAT,MAAe,wUAQhB;AAAA,UACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,QACxB;AAAA;AAAA,IAEJ;AAAA,EACF,CACF,GAEA,oCAAC,SAAI,WAAU,4DACb,oCAAC,UAAK,WAAU,mBAAgB,wBAA2B,GAC3D;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS,MAAM;AACb,eAAO,QAAQ,KAAK;AACpB,oBAAY,QAAQ,IAAI;AAAA,MAC1B;AAAA;AAAA,IACD;AAAA,EAED,CACF,CACF,GAGD,SAAS,KACR,oCAAC,SAAI,WAAU,iBACb,oCAAC,QAAG,WAAU,6CAA0C,kBAExD,GACA,oCAAC,OAAE,WAAU,6CAA0C,6DACM,KAC3D,oCAAC,UAAK,WAAU,mBACb,mBAAmB,OAAO,UAAU,UAAU,cAAc,CAAC,CAChE,GAAQ,KAAI,UAEd,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,UAAU,UAAU,aAAa,OAAO,EAAE,iBAAiB,MAAM;AAC/D,cAAM,KAAK,2BAAS,SAAS,6BAAW,aAAa,EAAE,SAAS;AAChE,cAAM,EAAE,aAAa,IAAI,UAAU,UAAU;AAE7C,YAAI;AACF,gBAAM,eAAe,YAAY;AAAA,YAC/B;AAAA,YACA,cAAc,mBAAmB,OAAO,YAAY;AAAA,YACpD,kBAAkB,iBAAiB,KAAK,EAAE;AAAA,YAC1C,cAAc,OAAO,IAAI,cAAc,KAAK;AAAA,YAC5C,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAAA,YAChC,MAAM,OAAO,IAAI,MAAM,KAAK;AAAA,UAC9B,CAAC;AAED,gBAAM,OAAO,mBAAmB,OAAO,YAAY;AACnD,gBAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AAE7B,cAAI;AACF,kBAAM,eAAe,YAAY;AAAA,cAC/B,MAAM;AAAA,cACN,MAAM,mBAAmB,OAAO,YAAY;AAAA,cAC5C;AAAA,YACF,CAAC;AAAA,UACH,QAAQ;AACN,wBAAY,QAAQ,IAAI;AAAA,UAC1B;AAEA,iBAAO,QAAQ,KAAK;AACpB,oBAAU,MAAM;AAChB,oBAAU,MAAM;AAChB,kBAAQ,CAAC;AAAA,QACX,QAAQ;AACN,kBAAQ,MAAM;AAAA,YACZ,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,UAAU;AAAA,QACnB,QAAQ,CAAC,MACP;AAAA,UAAC,iBAAS;AAAA,UAAT;AAAA,YACC,aAAY;AAAA,YACZ,SAAS,EAAE,WAAW;AAAA,YACtB,OAAO,EAAE,MAAM;AAAA,YACf,eAAe,CAAC,YAAY;AAC1B,gBAAE,MAAM,SAAS,QAAQ,KAAK;AAAA,YAChC;AAAA;AAAA,UAEA,oCAAC,iBAAS,SAAT,MACC,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,GAC1B,oCAAC,iBAAS,OAAT,EAAe,OAAO,GAAG,CAC5B;AAAA,UACA,oCAAC,iBAAS,aAAT,IAAqB;AAAA,QACxB;AAAA;AAAA,IAEJ;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,UAAU,UAAU;AAAA;AAAA,MAC/B;AAAA,IAED;AAAA,IAEA,oCAAC,SAAI,WAAU,iEACb,oCAAC,UAAK,WAAU,mBAAgB,0BAEhC,GACA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU,SAAS;AAAA,QACnB,SAAS,YAAY;AACnB,gBAAM,6BAA6B,YAAY;AAAA,YAC7C,SAAS;AAAA,YACT,WAAW,mBAAmB;AAAA,cAC5B,UAAU,UAAU,cAAc;AAAA,YACpC;AAAA,UACF,CAAC;AAED,mBAAS,MAAM;AAAA,QACjB;AAAA;AAAA,MAEC,SAAS,UACN,aAAa,SAAS,SAAS,MAC/B;AAAA,IACN,CACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAM;AACb,kBAAQ,CAAC;AACT,oBAAU,MAAM;AAChB,mBAAS,KAAK;AAAA,QAChB;AAAA;AAAA,MAEA,oCAAC,iBAAc,WAAU,UAAS;AAAA,MAAE;AAAA,IAEtC;AAAA,EACF,CACF,CAEJ;AAEJ;;;ADrSO,SAAS,OAAO,OAAoB;AACzC,QAAM,cAAc,mBAAe,6BAAW,CAAC,WAAW,OAAO,MAAM,CAAC;AAExE,SACE;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAM,YAAY;AAAA,MAClB,cAAc,CAAC,YAAY;AACzB,oBAAY,QAAQ,QAAQ,IAAI;AAAA,MAClC;AAAA,MACA,WAAS;AAAA,MACT,eAAa;AAAA,MACb,eAAe;AAAA,MACf,wBAAwB;AAAA;AAAA,IAExB,oCAAC,eAAO,SAAP,EAAe,SAAO,QACpB,MAAM,YAAY,oCAAC,cAAO,SAAO,CACpC;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,UAAP,IAAgB,GACjB,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,EAAe,WAAU,+DACxB;AAAA,MAAC,eAAAC;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA;AAAA,IACZ,GAEA,oCAAC,SAAI,WAAU,wGACb,oCAAC,eAAO,cAAP,MACC,oCAAC,WAAM,CACT,GAEA;AAAA,MAAC,eAAAA;AAAA,MAAA;AAAA,QACC,KAAK,MAAM;AAAA,QACX,KAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAU;AAAA,QACV,WAAW;AAAA;AAAA,IACb,GAEA,oCAAC,gBAAW,CACd,CACF,CACF,CACF;AAAA,EACF;AAEJ;;;AIjEA,IAAAC,+BAA6B;AAC7B,IAAAC,iBAAkB;;;ACHlB,IAAAC,2BAAwC;AACxC,IAAAC,uBAAyB;;;ACClB,IAAM,qBAAqB,MAAgB,CAAC,iBAAiB;;;ADI7D,IAAM,kBAAmC,CAAC,WAAW;AAC1D,aAAO,+BAAS;AAAA,IACd,GAAG;AAAA,IACH,UAAU,mBAAmB;AAAA,IAC7B,SAAS,YAAY;AACnB,aAAO,UAAM,qCAAW;AAAA,QACtB,SAAS;AAAA,UACP,iBAAiB;AAAA,QACnB;AAAA,QACA,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AEhBA,IAAM,UAAU;AAChB,IAAM,SACJ,gBAAgB,gBACZ,+CACA;AAcC,SAAS,gBAAgC,MAAS;AACvD,QAAM,KAAK,KAAK,MAAM,KAAK;AAC3B,SAAO,GAAG,MAAM,IAAI,KAAK,SAAS,kBAAkB,CAAC,cAAc,EAAE,iBAAiB,OAAO;AAC/F;;;AHdO,SAAS,eAAe,OAAqB;AAClD,QAAM,aAAa,cAAc;AACjC,QAAM,eAAe,gBAAgB;AACrC,QAAM,UAAU,aAAa,QAAQ,CAAC;AAEtC,QAAM,CAAC,QAAQ,QAAI,6BAAAC,SAAiB;AAAA,IAClC,OAAO;AAAA,IACP,gBAAgB;AAAA,EAClB,CAAC;AAED,MAAI,EAAC,mCAAS,QAAQ,QAAO;AAE7B,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,SAAI,WAAU,sDACZ,MAAM,OACT,GAEA,oCAAC,SAAI,KAAK,UAAU,WAAU,iCAC5B,oCAAC,SAAI,WAAU,2BACZ,QAAQ,IAAI,CAAC,WACZ;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,OAAO;AAAA,MACZ,WAAU;AAAA;AAAA,IAEV,oCAAC,SAAI,WAAU,kCACZ,OAAO,QACN;AAAA,MAAC,eAAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,KAAK,gBAAgB,OAAO,IAAI;AAAA,QAChC,KAAI;AAAA,QACJ,WAAU;AAAA;AAAA,IACZ,CAEJ;AAAA,IAEA,oCAAC,SAAI,WAAU,iBACb,oCAAC,SAAI,WAAU,2BACZ,OAAO,OAAO,IACjB,GACA,oCAAC,SAAI,WAAU,yCACZ,aAAa,OAAO,QAAQ;AAAA,MAC3B,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,IACpB,CAAC,CACH,GACA,oCAAC,SAAI,WAAU,2BACZ,aAAa,OAAO,YAAY;AAAA,MAC/B,kBAAkB;AAAA,IACpB,CAAC,CACH,CACF;AAAA,EACF,CACD,CACH,CACF,CACF;AAEJ;;;AI9DA,eAAsB,QAAQ,OAAqB;AAGjD,SAAO,oCAAC,kBAAgB,GAAG,OAAO;AACpC;;;ACTA,IAAAC,+BAA6B;AAC7B,IAAAC,eAAiB;AACjB,IAAAC,iBAAiD;;;ACJjD,IAAAC,2BAKO;AACP,IAAAC,uBAAiC;;;ACH1B,IAAM,yBAAyB,CAAC,UAAuC;AAAA,EAC5E;AAAA,EACA;AACF;;;ADKO,IAAM,sBAGT,CAAC,OAAO,WAAW;AACrB,QAAM,YAAQ,uCAAiB;AAAA,IAC7B,GAAG;AAAA,IACH,UAAU,uBAAuB,KAAK;AAAA,IACtC,SAAS,CAAC,EAAE,WAAW,OAAO,MAAM;AAClC,iBAAO;AAAA,QACL,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AA/B/B;AAgCM,WAAI,0CAAU,aAAV,mBAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AEpCA,IAAAC,oBAA+B;AAC/B,IAAAC,iBAAkB;AAClB,IAAAC,iBAAoD;AACpD,IAAAC,0BAAwB;;;ACJjB,SAAS,YAAY,OAAqC;AAC/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACd,GAAG;AAAA;AAAA,IAEJ,oCAAC,UAAK,GAAE,+TAA8T;AAAA,EACxU;AAEJ;A;;;;;;;;;;;ADCO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,aAAa,cAAc;AAEjC,QAAM,uBAAmB,2BAAI,uBAAI,WAAW,gBAAgB,MAAM,CAAC;AAEnE,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS;AAAA,IACjD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,4BAAwB;AAAA,IAC5B,MAAM,IAAI,KAAK,WAAW,qBAAqB;AAAA,IAC/C,CAAC,WAAW,qBAAqB;AAAA,EACnC;AAEA,QAAM,yBAAyB,eAAAC,QAAM,YAAY,MAAM;AACrD,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,SAAS,sBAAsB,QAAQ,IAAI,IAAI,QAAQ;AAE7D,QAAI,UAAU,GAAG;AACf,uBAAiB,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,KAAK,CAAC;AAChE;AAAA,IACF;AAEA,UAAM,cAAc,KAAK,MAAM,SAAS,GAAI;AAE5C,UAAM,OAAO,KAAK,MAAM,eAAe,OAAO,GAAG;AACjD,UAAM,QAAQ,KAAK,MAAO,eAAe,OAAO,MAAO,IAAI;AAC3D,UAAM,UAAU,KAAK,MAAO,cAAc,OAAQ,EAAE;AAEpD,UAAM,cAAU,wBAAK,EAAE,MAAM,OAAO,SAAS,QAAQ,MAAM,GAAG;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,qBAAiB,OAAO;AAAA,EAC1B,GAAG,CAAC,qBAAqB,CAAC;AAE1B,gCAAU,MAAM;AACd,2BAAuB;AACvB,UAAM,WAAW,YAAY,wBAAwB,KAAK,GAAI;AAC9D,WAAO,MAAM,cAAc,QAAQ;AAAA,EACrC,GAAG,CAAC,uBAAuB,sBAAsB,CAAC;AAElD,QAAM,YAAY;AAAA,IAChB,EAAE,OAAO,OAAO,OAAO,cAAc,KAAK;AAAA,IAC1C,EAAE,OAAO,QAAQ,OAAO,cAAc,MAAM;AAAA,IAC5C,EAAE,OAAO,OAAO,OAAO,cAAc,QAAQ;AAAA,EAC/C;AAEA,QAAM,kBAAkB;AAAA,IACtB;AAAA,MACE,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SACE,+BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA;AAAA,IAEA,+BAAAA,QAAA,cAAC,SAAI,WAAU,wCACb,+BAAAA,QAAA,cAAC,SAAI,WAAU,mHACb,+BAAAA,QAAA,cAAC,eAAY,WAAU,YAAW,GAAE,YAEtC,GAEA,+BAAAA,QAAA,cAAC,SAAI,WAAU,gBACZ,UAAU,IAAI,CAAC,MAAM,QACpB,+BAAAA,QAAA,cAAC,eAAAA,QAAM,UAAN,EAAe,KAAK,KAAK,SACxB,+BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,eAAW;AAAA,UACT;AAAA,QACF;AAAA;AAAA,MAEA,+BAAAA,QAAA,cAAC,UAAK,WAAU,2BACb,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG,GAAG,CACrC;AAAA,MACA,+BAAAA,QAAA,cAAC,UAAK,WAAU,gBAAc,KAAK,KAAM;AAAA,IAC3C,GAEC,MAAM,UAAU,SAAS,KACxB,+BAAAA,QAAA,cAAC,SAAI,WAAU,qDACb,+BAAAA,QAAA,cAAC,SAAI,WAAU,qCAAoC,GACnD,+BAAAA,QAAA,cAAC,SAAI,WAAU,qCAAoC,CACrD,CAEJ,CACD,CACH,CACF;AAAA,IAEA,+BAAAA,QAAA,cAAC,SAAI,WAAU,0BACb,+BAAAA,QAAA,cAAC,SAAI,WAAU,mDACb,+BAAAA,QAAA,cAAC,aACC,+BAAAA,QAAA,cAAC,SAAI,WAAU,2BAAyB,WAAW,IAAK,GAExD,+BAAAA,QAAA,cAAC,SAAI,WAAU,6EACZ,aAAa,kBAAkB;AAAA,MAC9B,UAAU,WAAW,SAAS;AAAA,MAC9B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB,CAAC,CACH,CACF,GAEA,+BAAAA,QAAA,cAAC,SAAI,WAAU,gCAA6B,eAAa,CAC3D,GAEA,+BAAAA,QAAA,cAAC,SAAI,WAAU,2BACb,+BAAAA,QAAA,cAAC,SAAI,WAAU,0BACb,+BAAAA,QAAA;AAAA,MAAC,eAAAC;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,QACT,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,KAAK,gBAAgB,QAAQ,CAAC,EAAE;AAAA,QAChC,KAAI;AAAA,QACJ,WAAU;AAAA;AAAA,IACZ,CACF,CACF,CACF;AAAA,EACF;AAEJ;;;AHlJO,SAAS,yBAAyB,OAA+B;AAbxE;AAcE,QAAM,CAAC,UAAU,QAAQ,QAAI,6BAAAC,SAAiB;AAAA,IAC5C,OAAO;AAAA,IACP,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,iBAAa,4BAAY,MAAM;AACnC,QAAI,SAAU,UAAS,WAAW;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,iBAAa,4BAAY,MAAM;AACnC,QAAI,SAAU,UAAS,WAAW;AAAA,EACpC,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AACxD,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAAS,KAAK;AAExD,QAAM,eAAW,4BAAY,MAAM;AACjC,QAAI,CAAC,SAAU;AACf,qBAAiB,SAAS,cAAc,CAAC;AACzC,qBAAiB,SAAS,cAAc,CAAC;AAAA,EAC3C,GAAG,CAAC,QAAQ,CAAC;AAEb,gCAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,aAAS;AACT,aAAS,GAAG,UAAU,QAAQ;AAC9B,aAAS,GAAG,UAAU,QAAQ;AAAA,EAChC,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,mBAAmB,oBAAoB;AAAA,IAC3C,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,gBACJ,sBAAiB,SAAjB,mBAAuB,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,UAAS,CAAC;AAErE,MAAI,YAAY,UAAU,EAAG,QAAO;AAEpC,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,SAAI,WAAU,oDACb,oCAAC,SAAI,WAAU,2BAAyB,MAAM,OAAQ,GACtD,oCAAC,SAAI,WAAU,kCACb;AAAA,IAAC,aAAAC;AAAA,IAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,WAAU;AAAA;AAAA,IACX;AAAA,IAEC,oCAAC,oBAAiB,WAAU,oBAAmB;AAAA,EACjD,GAEA,oCAAC,SAAI,WAAU,oBACb;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,iBAAc,WAAU,UAAS;AAAA,EACpC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,cAAW;AAAA;AAAA,IAEX,oCAAC,kBAAe,WAAU,UAAS;AAAA,EACrC,CACF,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,0BAAyB,KAAK,YAC3C,oCAAC,SAAI,WAAU,kBACZ,YAAY,IAAI,CAAC,YAAY,UAC5B;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA,WACE,YAAY,SAAS,IACjB,WACA;AAAA;AAAA,EAER,CACD,CACH,CACF,CACF;AAEJ;;;AKzGA,eAAsB,kBAAkB,OAA+B;AAYrE,SAAO,oCAAC,4BAA0B,GAAG,OAAO;AAC9C;;;ACnBA,IAAAC,iBAA6C;AAC7C,IAAAC,aAA+B;AAE/B,IAAAC,mBAA6C;AAC7C,IAAAF,iBAAyB;;;ACNzB,IAAAG,2BAKO;AACP,IAAAC,uBAAiC;AACjC,IAAAC,0BAAsB;;;ACJf,IAAM,4BAA4B,CAAC,UAA0C;AAAA,EAClF;AAAA,EACA;AACF;;;ADUO,IAAM,yBAGT,CAAC,OAAO,WAAW;AAnBvB;AAoBE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,uCAAiB;AAAA,IAC7B,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,0BAA0B,KAAK;AAAA,IACzC,SAAS,OAAO,EAAE,WAAW,OAAO,MAAM;AACxC,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,kCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM;AAAA,QACX,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AAnD/B,UAAAC,KAAA;AAoDM,WAAIA,MAAA,qCAAU,aAAV,gBAAAA,IAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AE3DA,IAAAC,iBAAwD;AAOxD,IAAAC,mBAAqC;AACrC,IAAAD,iBAAyB;AACzB,IAAAE,eAAkB;AAUlB,IAAMC,iBAAgB,eAAE,KAAK,CAAC,OAAO,SAAS,QAAQ,CAAC,EAAE,MAAM,KAAK;AA4BpE,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,iBAAiB,KAAK,eAAe,EAAE,gBAAgB,EAAE;AAExD,SAAS,aAAa,OAA0B;AArEvD;AAsEE,QAAM,yBAAqB,qCAAqB;AAAA,IAC9C,OAAO,MAAM,mBAAmB,CAAC;AAAA,IACjC,aAAa,CAAC,SAAS;AAAA,IACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,MACf,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC;AAAA,EACL,CAAC;AAED,QAAM,6BAAyB,qCAAqB;AAAA,IAClD,OAAO,MAAM,uBAAuB,CAAC;AAAA,IACrC,aAAa,CAAC,SAAS;AAAA,IACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,MACf,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC;AAAA,EACL,CAAC;AAED,QAAM,8BAA0B,qCAAqB;AAAA,IACnD,OAAO;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,MACf,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC;AAAA,EACL,CAAC;AAED,QAAM,iCAA6B,qCAAqB;AAAA,IACtD,OAAO;AAAA,IACP,aAAa,CAAC,SAAS;AAAA,IACvB,cAAc,CAAC,SACb,WAAW,MAAM;AAAA,MACf,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC;AAAA,EACL,CAAC;AAED,QAAM,CAAC,KAAK,MAAM,QAAI,yBAAc,KAAK;AAEzC,QAAM,eAAe,CAAC,SAAgB;AA5GxC,QAAAC;AA6GI,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,KAAAA,MAAA,MAAM,aAAN,gBAAAA,IAAA,YAAiB;AAAA,MACf,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AAEA,QAAM,CAAC,WAAW,YAAY,IAAI,qBAAqB;AAAA,IACrD,QAAO,WAAM,UAAN,mBAAa;AAAA,IACpB,gBAAc,WAAM,iBAAN,mBAAoB,cAAa;AAAA,IAC/C,SAASC,YAAW;AAClB,mBAAa,EAAE,WAAAA,WAAU,CAAC;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,QAAM,CAAC,UAAU,WAAW,IAAI,qBAAqB;AAAA,IACnD,QAAO,WAAM,UAAN,mBAAa;AAAA,IACpB,gBAAc,WAAM,iBAAN,mBAAoB,aAAY;AAAA,IAC9C,SAASC,WAAU;AACjB,mBAAa,EAAE,UAAAA,UAAS,CAAC;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,QAAM,CAAC,cAAc,eAAe,IAAI,qBAAqB;AAAA,IAC3D,QAAO,WAAM,UAAN,mBAAa;AAAA,IACpB,gBAAc,WAAM,iBAAN,mBAAoB,iBAAgB;AAAA,IAClD,SAASC,eAAc;AACrB,mBAAa,EAAE,cAAAA,cAAa,CAAC;AAAA,IAC/B;AAAA,EACF,CAAC;AAED,QAAM,CAAC,eAAe,gBAAgB,IAAI,qBAAqB;AAAA,IAC7D,QAAO,WAAM,UAAN,mBAAa;AAAA,IACpB,gBAAc,WAAM,iBAAN,mBAAoB,kBAAiB;AAAA,IACnD,SAASC,gBAAe;AACtB,mBAAa,EAAE,eAAAA,eAAc,CAAC;AAAA,IAChC;AAAA,EACF,CAAC;AAED,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,qBAAqB;AAAA,IACnE,QAAO,WAAM,UAAN,mBAAa;AAAA,IACpB,gBAAc,WAAM,iBAAN,mBAAoB,qBAAoB;AAAA,IACtD,SAASC,mBAAkB;AACzB,mBAAa,EAAE,kBAAAA,kBAAiB,CAAC;AAAA,IACnC;AAAA,EACF,CAAC;AAED,SACE,oCAAC,SAAI,WAAU,8BACb;AAAA,IAAC,mBAAW;AAAA,IAAX;AAAA,MACC,WAAS;AAAA,MACT,eAAa;AAAA,MACb,OAAO,CAAC,uCAAW,OAAO,uCAAW,GAAG,EACrC,OAAO,OAAO,EACd,IAAI,CAAC,UAAM,0BAAU,CAAC,CAAC;AAAA,MAC1B,eAAe,CAAC,YAAY;AA3KpC,YAAAL,KAAAM;AA4KU,qBAAa;AAAA,UACX,QAAON,MAAA,QAAQ,MAAM,GAAG,CAAC,MAAlB,gBAAAA,IAAqB,OAAO;AAAA,UACnC,MAAKM,MAAA,QAAQ,MAAM,GAAG,CAAC,MAAlB,gBAAAA,IAAqB,OAAO;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,MACA,cAAc,CAAC,YAAY;AACzB,YAAI,QAAQ,KAAM;AAClB,YAAI,UAAW;AACf,eAAO,KAAK;AAAA,MACd;AAAA,MACA,eAAc;AAAA,MACd,eAAe;AAAA,MACf,aAAa;AAAA,QACX,QAAQ;AAAA,QACR,WAAW;AAAA,MACb;AAAA;AAAA,IAEA;AAAA,MAAC,qBAAa;AAAA,MAAb;AAAA,QACC,OAAO;AAAA,QACP,eAAe,CAAC,YAAY;AAC1B,gBAAM,QAAQP,eAAc,MAAM,QAAQ,KAAK;AAE/C,cAAI,UAAU,SAAS;AACrB,kBAAM,MAAM,oBAAI,KAAK;AAErB,yBAAa;AAAA,cACX,WAAO,6BAAW,GAAG;AAAA,cACrB,SAAK,2BAAS,GAAG;AAAA,YACnB,CAAC;AAAA,UACH,OAAO;AACL,yBAAa,IAAI;AAAA,UACnB;AAEA,iBAAO,KAAK;AAAA,QACd;AAAA;AAAA,MAEA,oCAAC,qBAAa,MAAb,EAAkB,OAAM,SACvB,oCAAC,qBAAa,UAAb,MAAsB,KAAG,GAC1B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MACA,oCAAC,qBAAa,MAAb,EAAkB,OAAM,WACvB,oCAAC,qBAAa,UAAb,MAAsB,OAAK,GAC5B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MAEA,oCAAC,mBAAW,SAAX,MACE,CAAC,QACA;AAAA,QAAC,qBAAa;AAAA,QAAb;AAAA,UACC,OAAM;AAAA,UACN,SAAS,MAAM,IAAI,QAAQ,IAAI;AAAA;AAAA,QAE/B,oCAAC,mBAAW,SAAX,MACC,oCAAC,qBAAa,UAAb,MAAsB,QAAM,GAC7B,oCAAC,qBAAa,aAAb,IAAyB,GAC1B,oCAAC,qBAAa,iBAAb,IAA6B,CAChC;AAAA,MACF,CAEJ;AAAA,MAEA,oCAAC,qBAAa,WAAb,IAAuB;AAAA,IAC1B;AAAA,IACA,oCAAC,6BACC,oCAAC,mBAAW,YAAX,MACC,oCAAC,mBAAW,SAAX,MACC,oCAAC,mBAAW,MAAX,EAAgB,MAAK,SACpB,oCAAC,mBAAW,SAAX,MACE,CAAC,QACA,0DACE,oCAAC,mBAAW,aAAX,MACC,oCAAC,mBAAW,aAAX,MACC,oCAAC,qBAAgB,CACnB,GACA,oCAAC,mBAAW,aAAX,MACC,oCAAC,mBAAW,WAAX,IAAqB,CACxB,GACA,oCAAC,mBAAW,aAAX,MACC,oCAAC,sBAAiB,CACpB,CACF,GACA,oCAAC,mBAAW,OAAX,MACC,oCAAC,mBAAW,WAAX,MACC,oCAAC,mBAAW,UAAX,MACE,IAAI,SAAS,IAAI,CAAC,SAAS,OAC1B,oCAAC,mBAAW,aAAX,EAAuB,KAAK,MAC1B,QAAQ,MAAM,UAAU,GAAG,CAAC,CAC/B,CACD,CACH,CACF,GACA,oCAAC,mBAAW,WAAX,MACE,IAAI,MAAM,IAAI,CAAC,MAAM,OACpB,oCAAC,mBAAW,UAAX,EAAoB,KAAK,MACvB,KAAK,IAAI,CAAC,KAAKQ,QACd,oCAAC,mBAAW,WAAX,EAAqB,KAAKA,KAAI,OAAO,OACpC,oCAAC,mBAAW,kBAAX,MACE,IAAI,GACP,CACF,CACD,CACH,CACD,CACH,CACF,CACF,CAEJ,CACF,CACF,CACF,CACF;AAAA,EACF,GAEA,oCAAC,SAAI,WAAU,QAAO,KAErB,WAAM,mBAAN,mBAAsB,aACrB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,WAAW,CAAC,QAAQ,IAAI,CAAC;AAAA,MAChC,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,eACX,KAAM,MAAM,mBAAmB,CAAC,CAAgB,EAChD,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAClC,oBAAY,SAAS,IAAI;AAAA,MAC3B;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,aAAY,GAC1C,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,mBAAmB,MAAM,IAAI,CAAC,SAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,MAAM,MAAM,QAC5B,oCAAC,eAAO,UAAP,MACE,WAAW,MAAM;AAAA,MAChB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,KAGD,WAAM,mBAAN,mBAAsB,iBACrB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,eAAe,CAAC,YAAY,IAAI,CAAC;AAAA,MACxC,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,eACX,KAAM,MAAM,uBAAuB,CAAC,CAAoB,EACxD,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAClC,wBAAgB,SAAS,IAAI;AAAA,MAC/B;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,eAAc,GAC5C,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,uBAAuB,MAAM,IAAI,CAAC,aACjC,oCAAC,eAAO,MAAP,EAAY,KAAK,UAAU,MAAM,YAChC,oCAAC,eAAO,UAAP,MACE,WAAW,UAAU;AAAA,MACpB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,KAGD,WAAM,mBAAN,mBAAsB,kBACrB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,MAC1C,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,eACX,KAAK,gBAAgB,EACrB,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAClC,yBAAiB,SAAS,IAAI;AAAA,MAChC;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,UAAS,GACvC,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,2BAA2B,MAAM,IAAI,CAAC,WACrC,oCAAC,eAAO,MAAP,EAAY,KAAK,QAAQ,MAAM,UAC9B,oCAAC,eAAO,UAAP,MACE,WAAW,QAAQ;AAAA,MAClB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,KAGD,WAAM,mBAAN,mBAAsB,qBACrB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,YAAY;AAAA,MACZ,OAAO,mBAAmB,CAAC,gBAAgB,IAAI,CAAC;AAAA,MAChD,eAAe,CAAC,YAAY;AAC1B,cAAM,QAAQ,eACX,KAAK,mBAAmB,EACxB,UAAU,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;AAClC,4BAAoB,SAAS,IAAI;AAAA,MACnC;AAAA,MACA,WAAS;AAAA,MACT,cAAY;AAAA;AAAA,IAEZ,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,EAAiB,aAAY,UAAS,GACvC,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,CACF;AAAA,IACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,MACE,wBAAwB,MAAM,IAAI,CAAC,WAClC,oCAAC,eAAO,MAAP,EAAY,KAAK,QAAQ,MAAM,UAC9B,oCAAC,eAAO,UAAP,MACE,WAAW,QAAQ;AAAA,MAClB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH,GACA,oCAAC,eAAO,eAAP,EAAqB,SAAO,QAC3B,oCAAC,eAAU,CACb,CACF,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,CAEJ;AAEJ;;;AHpbO,SAAS,sBAAsB;AACpC,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAoC;AACtE,QAAM,CAAC,eAAe,gBAAgB,QAAI,yBAA+B;AAEzE,QAAM,aAAa,cAAc;AAEjC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,uBAAuB,wBAAwB;AAAA,IACjD,QAAQ;AAAA,MACN,GAAI,iBAAiB;AAAA,QACnB,QAAQ;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,GAAI,aAAa;AAAA,QACf,iBAAiB;AAAA,UACf,GAAI,UAAU,SAAS;AAAA,YACrB,oBAAoB,IAAI;AAAA,kBACtB,6BAAW,UAAU,KAAK;AAAA,cAC1B,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,UACA,GAAI,UAAU,OAAO;AAAA,YACnB,mBAAmB,IAAI;AAAA,kBACrB,2BAAS,UAAU,GAAG;AAAA,cACtB,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,QACd,eAAe;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,kBAAU;AACV,qBAAa,MAAM,SAAS;AAC5B,yBAAiB,MAAM,aAAa;AAAA,MACtC;AAAA;AAAA,EACF,GAEC,KAAK,UAAU,KACd;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,cAAc;AAAA,MAC9B,OAAO,UAAU,kBAAkB;AAAA,MACnC,SACE,UACI,uCACA;AAAA,MAEN,WAAU;AAAA;AAAA,EACZ,GAGD,KAAK,UAAU,KACd,oCAAC,SAAI,WAAU,6CACb,oCAAC,SAAI,WAAU,yEACb,oCAAC,cAAM,MAAN,EAAW,WAAU,cACpB,oCAAC,cAAM,QAAN,MACC,oCAAC,cAAM,KAAN,MACC,oCAAC,cAAM,SAAN,MAAc,aAAW,GAC1B,oCAAC,cAAM,SAAN,MAAc,WAAS,GACxB,oCAAC,cAAM,SAAN,MAAc,gBAAc,GAC7B,oCAAC,cAAM,SAAN,MAAc,gBAAc,GAC7B,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,cAAY,GAC3B,oCAAC,cAAM,SAAN,MAAc,eAAa,GAC5B,oCAAC,cAAM,SAAN,MAAc,QAAM,CACvB,CACF,GAEA,oCAAC,cAAM,MAAN,MACE,KAAK,IAAI,CAAC,SACT,oCAAC,cAAM,KAAN,EAAU,KAAK,KAAK,MACnB,oCAAC,cAAM,MAAN,MAAY,KAAK,aAAc,GAChC,oCAAC,cAAM,MAAN,MAAY,KAAK,SAAU,GAC5B,oCAAC,cAAM,MAAN,MACE,WAAW,KAAK,MAAM;AAAA,IACrB,WAAW,WAAW,WAAW;AAAA,EACnC,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,QAAQ;AAAA,IACzB,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,WAAW;AAAA,IAC5B,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,KAAK;AAAA,IACtB,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,UACE,yBAAO,KAAK,iBAAiB,sBAAsB;AAAA,IAClD,QAAI,eAAG,WAAW,QAAQ;AAAA,EAC5B,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,OACG,KAAK,WAAW,eAChB,KAAK,WAAW,mBAChB,yBAAO,KAAK,qBAAqB,sBAAsB;AAAA,IACrD,QAAI,eAAG,WAAW,QAAQ;AAAA,EAC5B,CAAC,CACL,GACA,oCAAC,cAAM,MAAN,MACC;AAAA,IAAC,cAAM;AAAA,IAAN;AAAA,MACC,SAAQ;AAAA,MACR,aACE,KAAK,WAAW,YAChB,KAAK,WAAW,cAChB,KAAK,WAAW,cACZ,WACA,KAAK,WAAW,YACd,YACA;AAAA;AAAA,IAGR,oCAAC,cAAM,OAAN,MACE,WAAW,KAAK,QAAQ;AAAA,MACvB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH;AAAA,EACF,CACF,CACF,CACD,CACH,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,wCACb,oCAAC,WAAE,SACK,MAAK,QAAK,UAClB,GACA,oCAAC,SAAI,WAAU,QAAO,GACtB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAK;AAAA,MACL,OAAO,CAAC,SAAS,SAAS,CAAC;AAAA,MAC3B,eAAe,CAAC,YAAY;AAC1B,cAAM,IAAI,SAAS,QAAQ,MAAM,CAAC,CAAC;AACnC,cAAM,IAAI,MAAM,CAAC,IAAI,KAAK;AAE1B,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,YAAYC;AAAA,MACZ,WAAS;AAAA;AAAA,IAET,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,IAAiB,GAClB,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,GACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACEA,oBAAmB,MAAM,IAAI,CAAC,SAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,MAAM,QACrBA,oBAAmB,cAAc,IAAI,CACxC,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,GACA,oCAAC,aACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,mBAAgB,WAAU,UAAS;AAAA,EACtC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,oBAAiB,WAAU,UAAS;AAAA,EACvC,CACF,CACF,CACF,CAEJ;AAEJ;AAEA,IAAMA,0BAAqB,qCAAqB;AAAA,EAC9C,OAAO,uBAAuB,OAAO;AAAA,EACrC,aAAa,CAAC,SAAS,KAAK,SAAS;AAAA,EACrC,cAAc,CAAC,SAAS,GAAG,IAAI;AACjC,CAAC;;;AItPD,IAAAC,iBAA6C;AAC7C,IAAAC,aAA+B;AAC/B,IAAAC,mBAA6C;AAC7C,IAAAF,iBAAyB;;;ACLzB,IAAAG,2BAKO;AACP,IAAAC,uBAAiC;AACjC,IAAAC,0BAAsB;;;ACJf,IAAM,gCAAgC,CAAC,UAA8C;AAAA,EAC1F;AAAA,EACA;AACF;;;ADUO,IAAM,6BAGT,CAAC,OAAO,WAAW;AAnBvB;AAoBE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,uCAAiB;AAAA,IAC7B,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,8BAA8B,KAAK;AAAA,IAC7C,SAAS,OAAO,EAAE,WAAW,OAAO,MAAM;AACxC,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,kCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,kCAAAA,SAAU,QAAQ,WAAW,eAAe;AAE5C,iBAAO;AAAA,QACL,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AArD/B,UAAAC,KAAA;AAsDM,WAAIA,MAAA,qCAAU,aAAV,gBAAAA,IAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ADxCO,SAAS,0BAA0B;AACxC,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAoC;AAEtE,QAAM,aAAa,cAAc;AAEjC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,uBAAuB,4BAA4B;AAAA,IACrD,QAAQ;AAAA,MACN,GAAI,aAAa;AAAA,QACf,iBAAiB;AAAA,UACf,GAAI,UAAU,SAAS;AAAA,YACrB,oBAAoB,IAAI;AAAA,kBACtB,6BAAW,UAAU,KAAK;AAAA,cAC1B,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,UACA,GAAI,UAAU,OAAO;AAAA,YACnB,mBAAmB,IAAI;AAAA,kBACrB,2BAAS,UAAU,GAAG;AAAA,cACtB,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL;AAAA,MACF;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,qBAAa,MAAM,SAAS;AAC5B,kBAAU;AAAA,MACZ;AAAA;AAAA,EACF,GAEC,KAAK,UAAU,KACd;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,cAAc;AAAA,MAC9B,OAAO,UAAU,kBAAkB;AAAA,MACnC,SACE,UACI,2CACA;AAAA,MAEN,WAAU;AAAA;AAAA,EACZ,GAGD,KAAK,UAAU,KACd,oCAAC,SAAI,WAAU,6CACb,oCAAC,SAAI,WAAU,yEACb,oCAAC,cAAM,MAAN,EAAW,WAAU,cACpB,oCAAC,cAAM,QAAN,MACC,oCAAC,cAAM,KAAN,MACC,oCAAC,cAAM,SAAN,MAAc,kBAAgB,GAC/B,oCAAC,cAAM,SAAN,MAAc,kBAAgB,GAC/B,oCAAC,cAAM,SAAN,MAAc,QAAM,GACrB,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,kBAAgB,GAC/B,oCAAC,cAAM,SAAN,MAAc,SAAO,CACxB,CACF,GAEA,oCAAC,cAAM,MAAN,MACE,KAAK,IAAI,CAAC,SACT,oCAAC,cAAM,KAAN,EAAU,KAAK,KAAK,MACnB,oCAAC,cAAM,MAAN,MACE,WAAW,KAAK,MAAM;AAAA,IACrB,WAAW,WAAW,WAAW;AAAA,EACnC,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,UACE,yBAAO,KAAK,iBAAiB,sBAAsB;AAAA,IAClD,QAAI,eAAG,WAAW,QAAQ;AAAA,EAC5B,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,QAAQ;AAAA,IACzB,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,gBAAgB;AAAA,IACjC,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MAAY,KAAK,eAAgB,GAClC,oCAAC,cAAM,MAAN,MAAY,KAAK,OAAQ,CAC5B,CACD,CACH,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,wCACb,oCAAC,WAAE,SACK,MAAK,QAAK,UAClB,GACA,oCAAC,SAAI,WAAU,QAAO,GACtB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAK;AAAA,MACL,OAAO,CAAC,SAAS,SAAS,CAAC;AAAA,MAC3B,eAAe,CAAC,YAAY;AAC1B,cAAM,IAAI,SAAS,QAAQ,MAAM,CAAC,CAAC;AACnC,cAAM,IAAI,MAAM,CAAC,IAAI,KAAK;AAE1B,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,YAAYC;AAAA,MACZ,WAAS;AAAA;AAAA,IAET,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,IAAiB,GAClB,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,GACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACEA,oBAAmB,MAAM,IAAI,CAAC,SAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,MAAM,QACrBA,oBAAmB,cAAc,IAAI,CACxC,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,GACA,oCAAC,aACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,mBAAgB,WAAU,UAAS;AAAA,EACtC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,oBAAiB,WAAU,UAAS;AAAA,EACvC,CACF,CACF,CACF,CAEJ;AAEJ;AAEA,IAAMA,0BAAqB,qCAAqB;AAAA,EAC9C,OAAO,uBAAuB,OAAO;AAAA,EACrC,aAAa,CAAC,SAAS,KAAK,SAAS;AAAA,EACrC,cAAc,CAAC,SAAS,GAAG,IAAI;AACjC,CAAC;;;AGtMD,IAAAC,iBAA6C;AAC7C,IAAAC,aAA+B;AAE/B,IAAAC,mBAA6C;AAC7C,IAAAF,iBAAyB;;;ACNzB,IAAAG,2BAKO;AACP,IAAAC,uBAAiC;AACjC,IAAAC,0BAAsB;;;ACJf,IAAM,+BAA+B,CAAC,UAA6C;AAAA,EACxF;AAAA,EACA;AACF;;;ADUO,IAAM,4BAGT,CAAC,OAAO,WAAW;AAnBvB;AAoBE,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAErC,QAAM,YAAQ,uCAAiB;AAAA,IAC7B,GAAG;AAAA,IACH,UACE,iCAAQ,aAAY,QAChB,UACA,kBAAa,SAAb,mBAAmB,YAAW;AAAA,IACpC,UAAU,6BAA6B,KAAK;AAAA,IAC5C,SAAS,OAAO,EAAE,WAAW,OAAO,MAAM;AACxC,YAAM,UAAU,MAAM,YAAY,WAAW;AAAA,QAC3C,UAAU,mBAAmB;AAAA,QAC7B,SAAS,MAAM,WAAW;AAAA,MAC5B,CAAC;AAED,kCAAAC,SAAU,QAAQ,WAAW,eAAe;AAE5C,kCAAAA,SAAU,QAAQ,WAAW,eAAe;AAE5C,aAAO,UAAM;AAAA,QACX,EAAE,GAAG,OAAO,OAAO,UAAU;AAAA,QAC7B;AAAA,UACE;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,YACP,iBAAiB;AAAA,YACjB,eAAe,UAAU,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,IAClB,iBAAiB,UAAU;AArD/B,UAAAC,KAAA;AAsDM,WAAIA,MAAA,qCAAU,aAAV,gBAAAA,IAAoB,aAAa;AACnC,gBAAO,0CAAU,aAAV,mBAAoB;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ADvCO,SAAS,yBAAyB;AACvC,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAoC;AACtE,QAAM,CAAC,kBAAkB,mBAAmB,QAC1C,yBAAkC;AAEpC,QAAM,aAAa,cAAc;AAEjC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,uBAAuB,2BAA2B;AAAA,IACpD,QAAQ;AAAA,MACN,GAAI,oBAAoB;AAAA,QACtB,QAAQ;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,GAAI,aAAa;AAAA,QACf,iBAAiB;AAAA,UACf,GAAI,UAAU,SAAS;AAAA,YACrB,oBAAoB,IAAI;AAAA,kBACtB,6BAAW,UAAU,KAAK;AAAA,cAC1B,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,UACA,GAAI,UAAU,OAAO;AAAA,YACnB,mBAAmB,IAAI;AAAA,kBACrB,2BAAS,UAAU,GAAG;AAAA,cACtB,WAAW;AAAA,YACb,EAAE,YAAY;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,0DACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,QACd,kBAAkB;AAAA,MACpB;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU,CAAC,UAAU;AACnB,kBAAU;AACV,qBAAa,MAAM,SAAS;AAC5B,4BAAoB,MAAM,gBAAgB;AAAA,MAC5C;AAAA;AAAA,EACF,GAEC,KAAK,UAAU,KACd;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,UAAU,cAAc;AAAA,MAC9B,OAAO,UAAU,kBAAkB;AAAA,MACnC,SACE,UACI,0CACA;AAAA,MAEN,WAAU;AAAA;AAAA,EACZ,GAGD,KAAK,UAAU,KACd,oCAAC,SAAI,WAAU,6CACb,oCAAC,SAAI,WAAU,yEACb,oCAAC,cAAM,MAAN,EAAW,WAAU,cACpB,oCAAC,cAAM,QAAN,MACC,oCAAC,cAAM,KAAN,MACC,oCAAC,cAAM,SAAN,MAAc,gBAAc,GAC7B,oCAAC,cAAM,SAAN,MAAc,WAAS,GACxB,oCAAC,cAAM,SAAN,MAAc,mBAAiB,GAChC,oCAAC,cAAM,SAAN,MAAc,eAAa,GAC5B,oCAAC,cAAM,SAAN,MAAc,mBAAiB,GAChC,oCAAC,cAAM,SAAN,MAAc,YAAU,GACzB,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,WAAS,GACxB,oCAAC,cAAM,SAAN,MAAc,iBAAe,GAC9B,oCAAC,cAAM,SAAN,MAAc,QAAM,CACvB,CACF,GAEA,oCAAC,cAAM,MAAN,MACE,KAAK,IAAI,CAAC,SACT,oCAAC,cAAM,KAAN,EAAU,KAAK,KAAK,MACnB,oCAAC,cAAM,MAAN,MAAY,KAAK,gBAAiB,GACnC,oCAAC,cAAM,MAAN,MAAY,KAAK,SAAU,GAC5B,oCAAC,cAAM,MAAN,MACE,WAAW,KAAK,MAAM;AAAA,IACrB,WAAW,WAAW,WAAW;AAAA,EACnC,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MAAY,KAAK,qBAAsB,GACxC,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,QAAQ;AAAA,IACzB,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,WAAW;AAAA,IAC5B,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACE,aAAa,KAAK,KAAK;AAAA,IACtB,UAAU,WAAW,SAAS;AAAA,IAC9B,kBAAkB;AAAA,EACpB,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MAAY,KAAK,IAAK,GACvB,oCAAC,cAAM,MAAN,UACE,yBAAO,KAAK,iBAAiB,sBAAsB;AAAA,IAClD,QAAI,eAAG,WAAW,QAAQ;AAAA,EAC5B,CAAC,CACH,GACA,oCAAC,cAAM,MAAN,MACC;AAAA,IAAC,cAAM;AAAA,IAAN;AAAA,MACC,SAAQ;AAAA,MACR,aACE,KAAK,WAAW,YAChB,KAAK,WAAW,cAChB,KAAK,WAAW,cACZ,WACA,KAAK,WAAW,YACd,YACA;AAAA;AAAA,IAGR,oCAAC,cAAM,OAAN,MACE,WAAW,KAAK,QAAQ;AAAA,MACvB,WAAW,WAAW,WAAW;AAAA,IACnC,CAAC,CACH;AAAA,EACF,CACF,CACF,CACD,CACH,CACF,CACF,GAEA,oCAAC,SAAI,WAAU,wCACb,oCAAC,WAAE,SACK,MAAK,QAAK,UAClB,GACA,oCAAC,SAAI,WAAU,QAAO,GACtB;AAAA,IAAC,eAAO;AAAA,IAAP;AAAA,MACC,MAAK;AAAA,MACL,OAAO,CAAC,SAAS,SAAS,CAAC;AAAA,MAC3B,eAAe,CAAC,YAAY;AAC1B,cAAM,IAAI,SAAS,QAAQ,MAAM,CAAC,CAAC;AACnC,cAAM,IAAI,MAAM,CAAC,IAAI,KAAK;AAE1B,oBAAY,CAAC;AAAA,MACf;AAAA,MACA,YAAYC;AAAA,MACZ,WAAS;AAAA;AAAA,IAET,oCAAC,eAAO,SAAP,MACC,oCAAC,eAAO,WAAP,IAAiB,GAClB,oCAAC,eAAO,WAAP,EAAiB,SAAO,QACvB,oCAAC,qBAAgB,CACnB,GACA,oCAAC,6BACC,oCAAC,eAAO,YAAP,MACC,oCAAC,eAAO,SAAP,MACEA,oBAAmB,MAAM,IAAI,CAAC,SAC7B,oCAAC,eAAO,MAAP,EAAY,KAAK,MAAM,QACrBA,oBAAmB,cAAc,IAAI,CACxC,CACD,CACH,CACF,CACF,CACF;AAAA,EACF,GACA,oCAAC,aACC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,mBAAgB,WAAU,UAAS;AAAA,EACtC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAQ;AAAA,MACR,aAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAU,CAAC,eAAe;AAAA,MAC1B,SAAS,MAAM,KAAK;AAAA;AAAA,IAEpB,oCAAC,oBAAiB,WAAU,UAAS;AAAA,EACvC,CACF,CACF,CACF,CAEJ;AAEJ;AAEA,IAAMA,0BAAqB,qCAAqB;AAAA,EAC9C,OAAO,uBAAuB,OAAO;AAAA,EACrC,aAAa,CAAC,SAAS,KAAK,SAAS;AAAA,EACrC,cAAc,CAAC,SAAS,GAAG,IAAI;AACjC,CAAC;;;AGzOM,SAAS,mBAAmB,OAAgC;AACjE,SACE,oCAAC,SAAI,WAAW,MAAM,aACpB,oCAAC,QAAG,WAAU,2BAAwB,qBAAmB,GACzD,oCAAC,OAAE,WAAU,iCAA8B,+BAE3C,GAEA;AAAA,IAAC,aAAK;AAAA,IAAL;AAAA,MACC,WAAU;AAAA,MACV,cAAa;AAAA,MACb,WAAS;AAAA,MACT,eAAa;AAAA;AAAA,IAEb,oCAAC,SAAI,WAAU,YACb,oCAAC,aAAK,MAAL,MACC,oCAAC,aAAK,SAAL,EAAa,OAAM,kBAAe,cAAY,GAC/C,oCAAC,aAAK,SAAL,EAAa,OAAM,cAAW,UAAQ,GACvC,oCAAC,aAAK,SAAL,EAAa,OAAM,iBAAc,aAAW,GAC7C,oCAAC,aAAK,WAAL,IAAe,CAClB,CACF;AAAA,IAEA,oCAAC,aAAK,SAAL,EAAa,OAAM,gBAAe,WAAU,YAC3C,oCAAC,6BAAwB,CAC3B;AAAA,IACA,oCAAC,aAAK,SAAL,EAAa,OAAM,YAAW,WAAU,YACvC,oCAAC,yBAAoB,CACvB;AAAA,IACA,oCAAC,aAAK,SAAL,EAAa,OAAM,eAAc,WAAU,YAC1C,oCAAC,4BAAuB,CAC1B;AAAA,EACF,CACF;AAEJ;","names":["import_react","import_react_query","import_react_query","invariant","import_react","import_portal_sdk_core","import_react_query","import_react_query","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","import_react","React","useContext","withRootProvider","withProvider","withContext","import_react","anatomy","styles","Context","Root","import_react","import_react","import_tailwind_variants","withContext","Root","Context","Root","import_react","import_tailwind_variants","withProvider","withContext","Root","import_react","import_tailwind_variants","Context","Indicator","Label","Root","withContext","withProvider","import_react","import_react","import_tailwind_variants","withContext","withProvider","Root","Indicator","Label","Context","import_react","Root","Content","Context","Control","Label","Positioner","Root","Trigger","import_react","import_react","import_tailwind_variants","withProvider","withContext","Root","Content","Control","Label","Positioner","Trigger","Context","Backdrop","Body","CloseTrigger","Content","Context","Description","Footer","Header","Positioner","Root","Title","Trigger","import_react","import_react","import_tailwind_variants","anatomy","withContext","withRootProvider","Root","Backdrop","CloseTrigger","Content","Description","Positioner","Title","Trigger","Header","Body","Footer","Context","Backdrop","Body","CloseTrigger","Content","Context","Description","Footer","Header","Positioner","Root","Title","Trigger","import_react","import_react","import_tailwind_variants","anatomy","withContext","withRootProvider","Root","Backdrop","CloseTrigger","Content","Description","Positioner","Title","Trigger","Header","Body","Footer","Context","Context","Input","Label","Root","import_react","import_react","import_tailwind_variants","withContext","withProvider","Root","Label","Input","Context","import_react","import_tailwind_variants","import_react","Root","Context","Control","Input","Label","Root","import_react","import_react","import_tailwind_variants","withContext","withProvider","Root","Control","Input","Label","Context","Context","Control","HiddenInput","Input","Label","Root","import_react","import_react","import_tailwind_variants","withContext","withProvider","Root","Label","Control","Input","HiddenInput","Context","CloseTrigger","Content","Context","Description","Indicator","Positioner","Root","Title","Trigger","import_react","import_react","import_tailwind_variants","withRootProvider","withContext","Root","CloseTrigger","Content","Description","Indicator","Positioner","Title","Trigger","Context","import_react","Root","Context","Indicator","Label","Root","import_react","import_react","import_tailwind_variants","withProvider","withContext","Root","Indicator","Label","Context","ClearTrigger","Content","Context","Control","Indicator","Item","ItemContext","ItemText","Label","Positioner","Root","Trigger","ValueText","import_react","import_react","import_tailwind_variants","withProvider","withContext","Root","ClearTrigger","Content","Control","Indicator","Item","ItemText","Label","Positioner","Trigger","ValueText","Context","ItemContext","Body","Footer","Header","Root","import_react","import_tailwind_variants","import_anatomy","withProvider","withContext","Root","Header","Body","Footer","Content","Context","Indicator","List","Root","Trigger","import_react","import_react","import_tailwind_variants","withContext","withProvider","Root","Content","Indicator","List","Trigger","Context","import_react","Root","import_zod","Link","import_link","import_react","import_tailwind_merge","useEmblaCarousel","emblaCarouselAutoplay","Image","Link","import_react","import_zod","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","_a","import_react","useQuery","page","prev","prev","next","_a","_b","id","import_react","import_tailwind_merge","import_zod","import_shallow","import_react","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","import_react","import_image","React","import_zod","_a","Image","import_react","import_zod","import_shallow","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","import_portal_sdk_core","import_react_query","import_tiny_invariant","defaultConfig","invariant","session","res","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","import_tailwind_merge","import_react","import_image","import_link","import_tailwind_merge","import_shallow","Image","Link","definition","_a","import_react","import_zod","import_react_hook_form","import_shallow","import_portal_sdk_core","import_object_id","import_react_query","import_tiny_invariant","invariant","session","res","definition","_a","import_react","import_image","import_date_fns","import_lodash_es","import_shallow","Image","import_react","import_tiny_invariant","invariant","import_react","import_react","import_usehooks_ts","import_react","import_image","import_shallow","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","_a","endGameSession","Image","import_react","import_shallow","import_portal_sdk_core","import_object_id","import_react_query","import_tiny_invariant","invariant","session","_a","_b","import_portal_sdk_core","import_embla_carousel_react","import_image","import_link","import_react","import_tailwind_merge","import_portal_sdk_core","import_react_query","useEmblaCarousel","emblaApi","Link","Image","import_embla_carousel_react","import_link","import_react","import_portal_sdk_core","import_react_query","import_react","import_image","import_tailwind_merge","Image","styles","useEmblaCarousel","Link","import_tailwind_merge","Primitive","import_react_query","import_portal_sdk_core","getSession","getSession","import_portal_sdk_core","getSession","import_react","import_react_query","import_tailwind_merge","import_portal_sdk_core","import_embla_carousel_react","import_link","import_react","import_tailwind_merge","import_portal_sdk_core","import_react_query","import_image","import_navigation","import_tailwind_merge","Image","useEmblaCarousel","emblaApi","Link","import_react","import_image","import_shallow","import_react","import_zod","import_react_hook_form","import_shallow","import_lodash_es","import_react","format","import_portal_sdk_core","import_react_query","import_react_query","Image","import_react","import_image","import_shallow","import_react","import_zod","import_object_id","import_navigation","import_react_hook_form","import_shallow","import_portal_sdk_core","import_react_query","Image","import_embla_carousel_react","import_image","import_portal_sdk_core","import_react_query","useEmblaCarousel","Image","import_embla_carousel_react","import_link","import_react","import_portal_sdk_core","import_react_query","import_lodash_es","import_image","import_react","import_tailwind_merge","React","Image","useEmblaCarousel","Link","import_react","import_tz","import_date_fns","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","_a","import_react","import_date_fns","import_zod","TabDefinition","_a","timestamp","gameType","gameProvider","depositStatus","withdrawalStatus","_b","id","pageSizeCollection","import_react","import_tz","import_date_fns","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","_a","pageSizeCollection","import_react","import_tz","import_date_fns","import_portal_sdk_core","import_react_query","import_tiny_invariant","invariant","_a","pageSizeCollection"]}