{"version":3,"sources":["LocaleSwitcher.tsx"],"sourcesContent":["/*\nCreated: Dom | 2025-05-24\n\nLast updated: Dom | 2025-05-29\n\nDescription: Used to handle Localisation\n*/\n\nimport { useState, useRef, useEffect, CSSProperties, Suspense } from \"react\"\nimport { addPropertyControls, ControlType, useLocaleInfo } from \"framer\"\nimport { styled } from \"@stitches/react\"\nimport { locales, getLocaleName } from \"https://framer.com/m/Locales-sOFf.js\"\nimport LocaleSwitcherHeading from \"https://framer.com/m/LocaleSwitcherHeading-x7lW.js\"\nimport CircleFlagLanguage from \"https://framer.com/m/CircleFlagLanguage-Tozh.js\"\nimport { createPortal } from \"react-dom\"\n\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */\n\nconst colors = {\n    layer: {\n        3: \"#1f232e\",\n    },\n    gray: {\n        50: \"#0B0C0F\",\n        200: \"#1E2129\",\n        300: \"#292D38\",\n        400: \"#363B47\",\n        700: \"#6F7585\",\n        800: \"#9095A3\",\n        1000: \"#C9CBD1\",\n        1200: \"#F2F4F7\",\n        1300: \"#FFFFFF\",\n    },\n    purple: {\n        100: \"#7663EC\",\n    },\n}\n\n// --------- Default Wrapper Component\nconst GridContainer = styled(\"div\", {\n    fontFamily: '\"Figtree\", \"Figtree Placeholder\", sans-serif',\n    display: \"grid\",\n    width: \"100%\",\n    maxWidth: \"1024px\",\n    gridTemplateColumns: \"repeat(auto-fit, minmax(220px, 1fr))\",\n    gap: \"0.5rem\",\n    padding: \"1rem\",\n})\n\nexport default function LocaleSwitcher(props) {\n    const { isDesktop, heading } = props\n    const { activeLocale, setLocale } = useLocaleInfo()\n    const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n    function handleLocaleChange(value) {\n        const locale = locales.find((locale) => locale.id === value?.id)\n        setLocale(locale ?? \"default\")\n        setIsDialogOpen(false)\n    }\n\n    return (\n        <>\n            <LocaleSwitcherTrigger\n                isDesktop={isDesktop}\n                onClick={() => setIsDialogOpen(!isDialogOpen)}\n            />\n            <LocaleSwitcherDialog\n                isDesktop={isDesktop}\n                isOpen={isDialogOpen}\n                openChange={setIsDialogOpen}\n                heading={heading}\n            >\n                <GridContainer>\n                    {locales.map((i) => {\n                        const isSelected = i.id === activeLocale.id\n                        return (\n                            <LocaleSwitcherItem\n                                onClick={() => handleLocaleChange(i)}\n                                key={i.id}\n                                locale={i}\n                                isSelected={isSelected}\n                            />\n                        )\n                    })}\n                </GridContainer>\n            </LocaleSwitcherDialog>\n        </>\n    )\n}\n\naddPropertyControls(LocaleSwitcher, {\n    isDesktop: {\n        type: ControlType.Enum,\n        title: \"Breakpoint Variant\",\n        displaySegmentedControl: true,\n        segmentedControlDirection: \"vertical\",\n        options: [true, false],\n        optionTitles: [\"Desktop\", \"Mobile\"],\n        defaultValue: true,\n    },\n    heading: {\n        type: ControlType.String,\n        title: \"heading of dialog\",\n        defaultValue: \"Select your prefered language\",\n    },\n})\n\nfunction LocaleSwitcherTrigger({ isDesktop, onClick }) {\n    const { activeLocale } = useLocaleInfo()\n    const localeSlug = activeLocale.slug || \"en\"\n    const localeName = getLocaleName(activeLocale.id) || locales[0].localeName\n\n    return (\n        <>\n            <style>{`\n                .locale_trigger-container {\n                    position: relative;\n                    transition: all 200ms ease;\n                }\n\n                .locale_trigger-container:hover {\n                    opacity: 0.9;\n                }\n\n                .locale_trigger-container:hover * {\n                    color: ${colors.purple[100]};\n                }\n\n                .locale_chevron-icon {\n                    color: ${colors.gray[1300]};\n                    position: absolute;\n                    cursor: pointer;\n                    top: 50%;\n                    right: 8px;\n                    transform: translateY(-50%);\n                    transition: all 200ms ease;\n                    pointer-events: none;\n\n                    &.desktop {\n                        width: 20px;\n                        height: 20px;\n                      }\n\n                    &.mobile {\n                        width: 16px;\n                        height: 16px;\n                     }\n                }\n\n                .locale_trigger-button {\n                    font-family: \"Figtree\", \"Figtree Placeholder\", sans-serif !important;\n                    background-color: ${colors.layer[3]};\n                    color: ${colors.gray[1300]};\n                    display: flex;\n                    min-width: 60px;\n                    flex-shrink: 0;\n                    cursor: pointer;\n                    appearance: none;\n                    align-items: center;\n                    gap: 8px;\n                    border-radius: 9999px;\n                    padding-block: 9px;\n                    max-height: 38px;\n                    border: unset;\n                    transition: all 200ms ease;\n                    padding-right: 32px;\n                    padding-left: 9px;\n                }\n\n                .locale_trigger-button.desktop {\n                    font-size: 16px;\n                }\n\n                .locale_trigger-button.mobile {\n                    font-size: 14px;\n                }\n            `}</style>\n\n            <div className=\"locale_trigger-container\">\n                <button\n                    className={`locale_trigger-button ${isDesktop ? \"desktop\" : \"mobile\"}`}\n                    title=\"Change Language\"\n                    onClick={onClick}\n                >\n                    <CircleFlagLanguage\n                        languageCode={localeSlug}\n                        width={20}\n                        height={20}\n                    />\n                    {isDesktop && <span>{localeName}</span>}\n                </button>\n                <ChevronDown\n                    className={`locale_chevron-icon ${isDesktop ? \"desktop\" : \"mobile\"}`}\n                />\n            </div>\n        </>\n    )\n}\n\n// --------- Locale Dialog Component\nconst HeadingContainer = styled(\"div\", {\n    paddingInline: \"1rem\",\n    display: \"flex\",\n    justifyContent: \"space-between\",\n    alignItems: \"center\",\n\n    variants: {\n        isDesktop: {\n            true: {\n                paddingTop: \".75rem\",\n            },\n            false: {},\n        },\n    },\n})\nconst Heading = styled(\"p\", {\n    fontSize: \"1.125rem\",\n    fontFamily: '\"Figtree\", \"Figtree Placeholder\", sans-serif !important',\n    fontWeight: \"bold\",\n    leading: 1,\n    color: colors.gray[1200],\n    marginBlock: \".5rem\",\n})\nconst CancelButton = styled(X, {\n    color: colors.gray[1200],\n    width: 24,\n    height: 24,\n    minWidth: 24,\n    cursor: \"pointer\",\n    transition: \"all 200ms ease\",\n\n    \"&:hover\": {\n        opacity: 0.9,\n        color: colors.purple[100],\n    },\n})\n\n// Loading component\nconst LoadingSpinner = styled(\"div\", {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"center\",\n    padding: \"2rem\",\n    color: colors.gray[800],\n    fontSize: \"14px\",\n    fontFamily: '\"Figtree\", \"Figtree Placeholder\", sans-serif',\n})\n\nfunction LocaleSwitcherDialog({\n    isOpen,\n    openChange,\n    children,\n    isDesktop,\n    heading,\n}) {\n    const [isClient, setIsClient] = useState(false)\n\n    useEffect(() => {\n        setIsClient(true)\n    }, [])\n\n    if (!isClient) return null\n\n    const dialogContent = (\n        <Suspense fallback={<LoadingSpinner>Loading...</LoadingSpinner>}>\n            {isDesktop ? (\n                <SimpleModal open={isOpen} setIsOpen={openChange}>\n                    <HeadingContainer isDesktop={isDesktop}>\n                        <Heading>{heading}</Heading>\n                        <CancelButton onClick={() => openChange(false)} />\n                    </HeadingContainer>\n                    {children}\n                </SimpleModal>\n            ) : (\n                <SimpleDrawer open={isOpen} setIsOpen={openChange}>\n                    <HeadingContainer isDesktop={isDesktop}>\n                        <Heading>{heading}</Heading>\n                        <CancelButton onClick={() => openChange(false)} />\n                    </HeadingContainer>\n                    <ScrollableBody bottomFade>{children}</ScrollableBody>\n                </SimpleDrawer>\n            )}\n        </Suspense>\n    )\n\n    return createPortal(dialogContent, document.body)\n}\n\n// --------- Locale Item Component\nconst SwitcherButton = styled(\"button\", {\n    type: \"button\",\n    display: \"flex\",\n    width: \"100%\",\n    alignItems: \"center\",\n    gap: \"0.5rem\",\n    borderRadius: \"0.75rem\",\n    border: \"1px solid transparent\",\n    paddingInline: \"1rem\",\n    paddingBlock: \"0.75rem\",\n    fontSize: \"0.875rem\",\n    transition: \"all 200ms ease\",\n    cursor: \"pointer\",\n    backgroundColor: \"transparent\",\n    color: colors.gray[1200],\n\n    \"&:hover\": {\n        backgroundColor: `color-mix(in oklab,${colors.purple[100]} 10%, transparent)`,\n    },\n\n    variants: {\n        selected: {\n            true: {\n                borderColor: colors.purple[100],\n                backgroundColor: `color-mix(in oklab,${colors.purple[100]} 10%, transparent)`,\n            },\n        },\n    },\n})\nconst TextContainer = styled(\"div\", {\n    marginLeft: \"0.5rem\",\n    display: \"flex\",\n    flexDirection: \"column\",\n    gap: \"0.125rem\",\n    textAlign: \"start\",\n})\n\nconst LocaleName = styled(\"p\", {\n    fontSize: \"1rem\",\n    lineHeight: 1,\n    margin: 0,\n})\nconst CheckContainer = styled(\"div\", {\n    marginLeft: \"auto\",\n    display: \"grid\",\n    placeItems: \"center\",\n    width: \"1.75rem\",\n    height: \"1.75rem\",\n    borderRadius: \"50%\",\n\n    variants: {\n        selected: {\n            true: {\n                backgroundColor: `color-mix(in oklab,${colors.purple[100]} 20%, transparent)`,\n            },\n        },\n    },\n})\n\nconst CheckIcon = styled(Check, {\n    width: \"1rem\",\n    height: \"1rem\",\n    stroke: colors.purple[100],\n})\nconst LocaleSwitcherItem = ({ locale, isSelected, onClick }) => {\n    const localeSlug = locale.slug || \"en\"\n    const localeName = locale.localeName || locales[0].localeName\n\n    return (\n        <SwitcherButton\n            title={localeName}\n            onClick={onClick}\n            selected={isSelected}\n        >\n            <CircleFlagLanguage\n                languageCode={localeSlug}\n                width={24}\n                height={24}\n            />\n            <TextContainer>\n                <LocaleName>{localeName}</LocaleName>\n            </TextContainer>\n            <CheckContainer selected={isSelected}>\n                {isSelected && <CheckIcon />}\n            </CheckContainer>\n        </SwitcherButton>\n    )\n}\n\n// --------- Drawer Component\nconst DrawerOverlay = styled(\"div\", {\n    position: \"fixed\",\n    inset: 0,\n    zIndex: 99,\n    display: \"flex\",\n    alignItems: \"end\",\n    justifyContent: \"center\",\n    transition: \"opacity 300ms ease\",\n\n    variants: {\n        visible: {\n            true: {\n                opacity: 1,\n            },\n            false: {\n                pointerEvents: \"none\",\n                opacity: 0,\n            },\n        },\n    },\n})\nconst DrawerBackdrop = styled(\"div\", {\n    position: \"fixed\",\n    inset: 0,\n    backgroundColor: \"rgb(0,0,0,0.7)\",\n    backdropFilter: \"blur(1px)\",\n})\nconst DrawerContainer = styled(\"div\", {\n    position: \"relative\",\n    width: \"100%\",\n    overflow: \"hidden\",\n    borderTopLeftRadius: \"1.5rem\",\n    borderTopRightRadius: \"1.5rem\",\n    borderLeft: \"2px solid\",\n    borderRight: \"2px solid\",\n    borderTop: \"3px solid\",\n    boxShadow:\n        \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n    transition: \"transform 300ms cubic-bezier(0.4, 0, 0.2, 1)\",\n    willChange: \"transform, opacity\",\n    maxHeight: \"95svh\",\n\n    backgroundColor: colors.layer[3],\n    borderColor: colors.gray[400],\n\n    variants: {\n        visible: {\n            true: {\n                transform: \"translateY(0)\",\n            },\n            false: {\n                transform: \"translateY(100%)\",\n            },\n        },\n    },\n})\nconst DrawerHandle = styled(\"div\", {\n    marginInline: \"auto\",\n    marginTop: \"0.75rem\",\n    marginBottom: \"0.25rem\",\n    display: \"flex\",\n    width: \"100%\",\n    cursor: \"grab\",\n    touchAction: \"none\",\n    justifyContent: \"center\",\n})\nconst HandleBar = styled(\"div\", {\n    height: \"0.5rem\",\n    width: \"6.25rem\",\n    borderRadius: \"9999px\",\n    backgroundColor: colors.gray[400],\n})\n\nconst DrawerContent = styled(\"div\", {\n    overflow: \"hidden\",\n})\n\nfunction SimpleDrawer({ children, open, setIsOpen }) {\n    const drawerRef = useRef<HTMLDivElement>(null)\n    const [mounted, setMounted] = useState(false)\n    const [isVisible, setIsVisible] = useState(false)\n    const initialRender = useRef(true)\n\n    // * Drag State\n    const [isDragging, setIsDragging] = useState(false)\n    const [startY, setStartY] = useState(0)\n    const [currentY, setCurrentY] = useState(0)\n    const [drawerHeight, setDrawerHeight] = useState(0)\n\n    // * Effect for Mounting, Transitions, Escape key, and Body Scroll Lock\n    useEffect(() => {\n        const handleEscapeKey = (event: KeyboardEvent) => {\n            if (event.key === \"Escape\") {\n                setIsOpen(false)\n            }\n        }\n        if (typeof document !== \"undefined\")\n            if (open) {\n                document.addEventListener(\"keydown\", handleEscapeKey)\n                document.body.style.overflow = \"hidden\"\n                setMounted(true)\n\n                // Ensure height is measured before showing for accurate drag threshold\n                requestAnimationFrame(() => {\n                    if (drawerRef.current) {\n                        setDrawerHeight(drawerRef.current.offsetHeight)\n                    }\n\n                    // Trigger visibility transition\n                    if (initialRender.current) {\n                        setTimeout(() => {\n                            requestAnimationFrame(() => {\n                                setIsVisible(true)\n                                initialRender.current = false\n                            })\n                        }, 50) // Small delay for initial render animation\n                    } else {\n                        requestAnimationFrame(() => {\n                            setIsVisible(true)\n                        })\n                    }\n                })\n            } else {\n                setIsVisible(false) // Trigger the closing animation\n\n                // Wait for animation to finish before unmounting\n                const timer = setTimeout(() => {\n                    if (!open) {\n                        setMounted(false)\n                        document.body.style.overflow = \"\"\n                        setIsDragging(false)\n                        setStartY(0)\n                        setCurrentY(0)\n                    }\n                }, 300)\n\n                // Cleanup timer and event listener\n                return () => {\n                    clearTimeout(timer)\n                    document.removeEventListener(\"keydown\", handleEscapeKey)\n                    if (document.body.style.overflow === \"hidden\")\n                        document.body.style.overflow = \"\"\n                }\n            }\n\n        return () => {\n            if (typeof document !== \"undefined\") {\n                document.removeEventListener(\"keydown\", handleEscapeKey)\n                // Check if still mounted before trying to reset scroll\n                if (mounted && !open) document.body.style.overflow = \"\"\n            }\n        }\n    }, [open, setIsOpen, mounted])\n\n    // * Handlers\n    const handleTouchStart = (e: React.TouchEvent) => {\n        // Only allow dragging if the drawer is fully visible/open\n        if (!isVisible) return\n\n        setIsDragging(true)\n        setStartY(e.touches[0].clientY)\n        setCurrentY(e.touches[0].clientY) // Initialize currentY\n\n        // Ensure drawer height is current at drag start\n        if (drawerRef.current) {\n            setDrawerHeight(drawerRef.current.offsetHeight)\n        }\n        // Disable transitions during drag for smoother manual control\n        if (drawerRef.current) {\n            drawerRef.current.style.transition = \"none\"\n        }\n    }\n\n    const handleTouchMove = (e: React.TouchEvent) => {\n        if (isDragging) {\n            setCurrentY(e.touches[0].clientY)\n        }\n    }\n\n    const handleTouchEnd = () => {\n        if (isDragging) {\n            // Re-enable transitions\n            if (drawerRef.current) {\n                drawerRef.current.style.transition = \"\"\n            }\n\n            const diff = currentY - startY\n            const threshold = drawerHeight * 0.4 // threshold sensitivity if needed (e.g., 40%)\n\n            // Dragged down significantly, close the drawer\n            if (diff > threshold) setIsOpen(false)\n\n            setIsDragging(false)\n        }\n    }\n\n    const handleBackdropClick = (event: React.MouseEvent) => {\n        if (event.target === event.currentTarget) {\n            setIsOpen(false)\n        }\n    }\n\n    // *Calculate drawer position during drag\n    const getDragTransform = () => {\n        if (!isDragging) return \"\" // Don't apply manual transform if not dragging\n\n        const diff = currentY - startY\n        // Prevent dragging upwards beyond the fully open state\n        const dragY = Math.max(0, diff)\n\n        return `translateY(${dragY}px)`\n    }\n\n    if (!mounted) return null\n    return (\n        <DrawerOverlay\n            onClick={(e) => e.stopPropagation()}\n            role=\"dialog\"\n            aria-modal=\"true\"\n            visible={isVisible}\n        >\n            <DrawerBackdrop onClick={handleBackdropClick} aria-hidden=\"true\" />\n\n            <DrawerContainer\n                ref={drawerRef}\n                visible={isVisible}\n                style={{\n                    transform: getDragTransform() || undefined,\n                }}\n            >\n                <DrawerHandle\n                    onTouchStart={handleTouchStart}\n                    onTouchMove={handleTouchMove}\n                    onTouchEnd={handleTouchEnd}\n                >\n                    <HandleBar />\n                </DrawerHandle>\n\n                <DrawerContent>{children}</DrawerContent>\n            </DrawerContainer>\n        </DrawerOverlay>\n    )\n}\n\n// --------- Modal Component\nconst ModalOverlay = styled(\"div\", {\n    position: \"fixed\",\n    inset: 0,\n    zIndex: 99,\n    display: \"flex\",\n    justifyContent: \"center\",\n    padding: \"1rem\",\n    transition: \"all 300ms ease\",\n\n    variants: {\n        visible: {\n            true: {\n                opacity: 1,\n            },\n            false: {\n                pointerEvents: \"none\",\n                opacity: 0,\n            },\n        },\n    },\n})\nconst ModalBackdrop = styled(\"div\", {\n    position: \"fixed\",\n    inset: 0,\n    backgroundColor: \"rgb(0,0,0,0.7)\",\n    backdropFilter: \"blur(1px)\",\n})\nconst ModalContainer = styled(\"div\", {\n    marginTop: \"14vh\",\n    height: \"min-content\",\n    width: \"100%\",\n    maxWidth: \"900px\",\n    transform: \"translateY(0) scale(1)\",\n    overflow: \"hidden\",\n    borderRadius: \"1rem\",\n    borderWidth: \"3px\",\n    boxShadow: \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\",\n    transition: \"all 300ms ease\",\n    willChange: \"transform, opacity\",\n    backgroundColor: colors.layer[3],\n\n    variants: {\n        visible: {\n            true: {\n                transform: \"translateY(0) scale(1)\",\n            },\n            false: {\n                transform: \"translateY(-2rem) scale(0.9)\",\n            },\n        },\n    },\n})\nconst ModalContent = styled(\"div\", {\n    maxHeight: \"80vh\",\n    overflowY: \"scroll\",\n\n    // Hide scrollbar\n    scrollbarWidth: \"none\",\n    msOverflowStyle: \"none\",\n    \"&::-webkit-scrollbar\": {\n        display: \"none\",\n    },\n})\n\nfunction SimpleModal({ children, open, setIsOpen }) {\n    const modalRef = useRef<HTMLDivElement>(null)\n    const [mounted, setMounted] = useState(false)\n    const [isVisible, setIsVisible] = useState(false)\n    const initialRender = useRef(true)\n\n    useEffect(() => {\n        const handleEscapeKey = (event: KeyboardEvent) => {\n            if (event.key === \"Escape\") {\n                setIsOpen(false)\n            }\n        }\n        if (typeof document !== \"undefined\")\n            if (open) {\n                document.addEventListener(\"keydown\", handleEscapeKey)\n                document.body.style.overflow = \"hidden\"\n\n                setMounted(true)\n\n                // Special handling for initial render to ensure animation works\n                if (initialRender.current) {\n                    // Force a layout reflow before showing\n                    setTimeout(() => {\n                        requestAnimationFrame(() => {\n                            setIsVisible(true)\n                            initialRender.current = false\n                        })\n                    }, 50)\n                } else {\n                    // For subsequent opens\n                    requestAnimationFrame(() => {\n                        setIsVisible(true)\n                    })\n                }\n            } else {\n                setIsVisible(false)\n\n                const timer = setTimeout(() => {\n                    if (!open) {\n                        setMounted(false)\n                        document.body.style.overflow = \"\"\n                    }\n                }, 300)\n\n                return () => clearTimeout(timer)\n            }\n\n        return () => {\n            if (typeof document !== \"undefined\") {\n                document.removeEventListener(\"keydown\", handleEscapeKey)\n                document.body.style.overflow = \"\"\n            }\n        }\n    }, [open, setIsOpen])\n\n    const handleBackdropClick = (event: React.MouseEvent) => {\n        // Ensure the click was directly on the backdrop, not bubbled from children\n        if (event.target === event.currentTarget) {\n            setIsOpen(false)\n        }\n    }\n\n    if (!mounted) return null\n    return (\n        <ModalOverlay\n            visible={isVisible}\n            onClick={(e) => e.stopPropagation()}\n            aria-modal=\"true\"\n            role=\"dialog\"\n        >\n            <ModalBackdrop onClick={handleBackdropClick} />\n            <ModalContainer ref={modalRef} visible={isVisible}>\n                <ModalContent>{children}</ModalContent>\n            </ModalContainer>\n        </ModalOverlay>\n    )\n}\n\n// --------- ScrollFade Component\nconst FadeOverlay = styled(\"div\", {\n    pointerEvents: \"none\",\n    position: \"absolute\",\n\n    variants: {\n        variant: {\n            left: {\n                left: 0,\n                top: 0,\n                bottom: 0,\n                width: \"2.5rem\",\n                background: `linear-gradient(to right, ${colors.layer[3]}, transparent)`,\n            },\n            right: {\n                right: 0,\n                top: 0,\n                bottom: 0,\n                width: \"2.5rem\",\n                background: `linear-gradient(to left, ${colors.layer[3]}, transparent)`,\n            },\n            bottom: {\n                bottom: 0,\n                left: 0,\n                right: 0,\n                height: \"2.5rem\",\n                background: `linear-gradient(to top, ${colors.layer[3]}, transparent)`,\n            },\n            top: {\n                top: 0,\n                left: 0,\n                right: 0,\n                height: \"2.5rem\",\n                background: `linear-gradient(to bottom, ${colors.layer[3]}, transparent)`,\n            },\n        },\n    },\n\n    defaultVariants: {\n        variant: \"bottom\",\n    },\n})\n\nfunction ScrollFade({\n    variant = \"bottom\",\n}: {\n    variant?: \"left\" | \"right\" | \"bottom\" | \"top\"\n}) {\n    return <FadeOverlay variant={variant} />\n}\n\n// --------- ScrollableBody Components\nconst ScrollableContainer = styled(\"div\", {\n    position: \"relative\",\n})\nconst ScrollWrapper = styled(\"div\", {\n    width: \"100%\",\n    overflowY: \"scroll\",\n\n    // scrollbar styling\n    scrollbarWidth: \"auto\",\n    scrollbarColor: `${colors.gray[300]} transparent`,\n\n    \"&::-webkit-scrollbar\": {\n        width: \"0.25rem\",\n    },\n    \"&::-webkit-scrollbar-track\": {\n        backgroundColor: \"transparent\",\n    },\n    \"&::-webkit-scrollbar-thumb\": {\n        backgroundColor: colors.gray[50],\n        borderRadius: \"9999px\",\n    },\n    \"&::-webkit-scrollbar-thumb:hover\": {\n        backgroundColor: colors.gray[300],\n    },\n})\nconst ScrollContent = styled(\"div\", {\n    maxHeight: \"75svh\",\n    minHeight: \"8rem\",\n    paddingBottom: \"2rem\",\n})\n\nfunction ScrollableBody({\n    children,\n    bottomFade = false,\n}: {\n    children: React.ReactNode\n    bottomFade?: boolean\n}) {\n    return (\n        <ScrollableContainer>\n            <ScrollWrapper>\n                <ScrollContent>\n                    {children}\n\n                    {bottomFade && <ScrollFade variant=\"bottom\" />}\n                </ScrollContent>\n            </ScrollWrapper>\n        </ScrollableContainer>\n    )\n}\n\n// --------- Icons Components\nfunction X({ size = 24, ...props }) {\n    return (\n        <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width={size}\n            height={size}\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            {...props}\n        >\n            <path d=\"M18 6 6 18\" />\n            <path d=\"m6 6 12 12\" />\n        </svg>\n    )\n}\n\nfunction Check({ size = 24, ...props }) {\n    return (\n        <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width={size}\n            height={size}\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            {...props}\n        >\n            <path d=\"M20 6 9 17l-5-5\" />\n        </svg>\n    )\n}\n\nfunction ChevronDown({ size = 24, ...props }) {\n    return (\n        <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width={size}\n            height={size}\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            {...props}\n        >\n            <path d=\"m6 9 6 6 6-6\" />\n        </svg>\n    )\n}\n"],"names":[],"mappings":"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"}