@avenue-ticketing/ui 0.12.0-beta.1 → 0.12.0-beta.3
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/react/badge-groups.js +2 -2
- package/dist/react/badge-groups.js.map +1 -1
- package/dist/react/badge.js +49 -18
- package/dist/react/badge.js.map +1 -1
- package/dist/react/button.js +2 -2
- package/dist/react/button.js.map +1 -1
- package/dist/react/checkbox.js +10 -7
- package/dist/react/checkbox.js.map +1 -1
- package/dist/react/combobox.d.ts +3 -2
- package/dist/react/combobox.js +284 -32
- package/dist/react/combobox.js.map +1 -1
- package/dist/react/dropdown-account-breadcrumb.js +176 -14
- package/dist/react/dropdown-account-breadcrumb.js.map +1 -1
- package/dist/react/dropdown-account-button.js +190 -25
- package/dist/react/dropdown-account-button.js.map +1 -1
- package/dist/react/dropdown-account-card-md.js +189 -24
- package/dist/react/dropdown-account-card-md.js.map +1 -1
- package/dist/react/dropdown-account-card-sm.js +189 -24
- package/dist/react/dropdown-account-card-sm.js.map +1 -1
- package/dist/react/dropdown-account-card-xs.js +189 -24
- package/dist/react/dropdown-account-card-xs.js.map +1 -1
- package/dist/react/dropdown-avatar.js +190 -25
- package/dist/react/dropdown-avatar.js.map +1 -1
- package/dist/react/dropdown-button-advanced.js +190 -25
- package/dist/react/dropdown-button-advanced.js.map +1 -1
- package/dist/react/dropdown-button-link.js +189 -24
- package/dist/react/dropdown-button-link.js.map +1 -1
- package/dist/react/dropdown-button-simple.js +190 -25
- package/dist/react/dropdown-button-simple.js.map +1 -1
- package/dist/react/dropdown-icon-advanced.js +189 -24
- package/dist/react/dropdown-icon-advanced.js.map +1 -1
- package/dist/react/dropdown-icon-simple.js +189 -24
- package/dist/react/dropdown-icon-simple.js.map +1 -1
- package/dist/react/dropdown-integration.js +190 -25
- package/dist/react/dropdown-integration.js.map +1 -1
- package/dist/react/dropdown-search-advanced.js +191 -26
- package/dist/react/dropdown-search-advanced.js.map +1 -1
- package/dist/react/dropdown-search-simple.js +191 -26
- package/dist/react/dropdown-search-simple.js.map +1 -1
- package/dist/react/dropdown.d.ts +4 -1
- package/dist/react/dropdown.js +189 -24
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/input-date.js.map +1 -1
- package/dist/react/input-file.js +3 -3
- package/dist/react/input-file.js.map +1 -1
- package/dist/react/input-group.js.map +1 -1
- package/dist/react/input-number.js +2 -2
- package/dist/react/input-number.js.map +1 -1
- package/dist/react/input-payment.js +1 -1
- package/dist/react/input-payment.js.map +1 -1
- package/dist/react/input-tags-outer.js +9 -9
- package/dist/react/input-tags-outer.js.map +1 -1
- package/dist/react/input-tags.js +8 -8
- package/dist/react/input-tags.js.map +1 -1
- package/dist/react/input.js +1 -1
- package/dist/react/input.js.map +1 -1
- package/dist/react/multi-select.d.ts +3 -2
- package/dist/react/multi-select.js +230 -29
- package/dist/react/multi-select.js.map +1 -1
- package/dist/react/popover.d.ts +10 -1
- package/dist/react/popover.js +195 -18
- package/dist/react/popover.js.map +1 -1
- package/dist/react/radio-buttons.js +2 -1
- package/dist/react/radio-buttons.js.map +1 -1
- package/dist/react/select-item.d.ts +2 -1
- package/dist/react/select-item.js +11 -7
- package/dist/react/select-item.js.map +1 -1
- package/dist/react/select.d.ts +4 -3
- package/dist/react/select.js +298 -42
- package/dist/react/select.js.map +1 -1
- package/dist/react/switch.js +1 -1
- package/dist/react/switch.js.map +1 -1
- package/dist/react/tag-select.d.ts +5 -2
- package/dist/react/tag-select.js +215 -25
- package/dist/react/tag-select.js.map +1 -1
- package/dist/react/tags.js +8 -8
- package/dist/react/tags.js.map +1 -1
- package/dist/react/textarea.js.map +1 -1
- package/dist/select-mobile-sheet-CB2ptDTJ.d.ts +12 -0
- package/dist/{select-shared-B3Y5SMXU.d.ts → select-shared-oJEeJxeB.d.ts} +6 -0
- package/package.json +1 -1
- package/theme.css +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/avatar/base-components/avatar-online-indicator.tsx","../../../../components/base/avatar/base-components/verified-tick.tsx","../../../../components/base/avatar/base-components/avatar-count.tsx","../../../../components/base/avatar/avatar.tsx","../../../../components/base/radio-buttons/radio-buttons.tsx","../../../../components/base/dropdown/dropdown.tsx","../../../../components/base/dropdown/dropdown-account-breadcrumb.tsx"],"names":["jsx","jsxs","sizes","User01","useRef","useLayoutEffect","focusRingShadow","AriaMenu","AriaPopover","AriaMenuTrigger","focusShadowPlain","focusShadowInset","useState","AriaButton","ChevronSelectorVertical","AriaMenuItem","Fragment"],"mappings":"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","file":"dropdown-account-breadcrumb.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n \"2xl\": \"size-4\",\n \"3xl\": \"size-4.5\",\n \"4xl\": \"size-5\",\n};\n\ninterface AvatarOnlineIndicatorProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n status: \"online\" | \"offline\";\n className?: string;\n}\n\nexport const AvatarOnlineIndicator = ({ size, status, className }: AvatarOnlineIndicatorProps) => (\n <span\n className={cx(\n \"absolute right-0 bottom-0 flex justify-center rounded-full ring-[1.5px] ring-bg-primary\",\n status === \"online\" ? \"bg-fg-success-secondary\" : \"bg-utility-neutral-300\",\n sizes[size],\n className,\n )}\n style={{\n backgroundImage:\n \"radial-gradient(43.75% 43.75% at 50% 28.75%, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.00) 100%), radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.00) 74.66%, rgba(255, 255, 255, 0.18) 100%), radial-gradient(75% 75% at 50% 0%, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 99%, rgba(255, 255, 255, 0.00) 100%)\",\n }}\n >\n {/* Reflection */}\n <svg viewBox=\"0 0 7.2 2.85\" fill=\"none\" className=\"mt-[10%] h-[20%] w-[60%]\">\n <path\n d=\"M7.2 1.83107C7.2 2.84235 5.58823 2.19729 3.6 2.19729C1.61177 2.19729 0 2.84235 0 1.83107C0 0.8198 1.61177 0 3.6 0C5.58823 0 7.2 0.8198 7.2 1.83107Z\"\n fill=\"url(#reflection-gradient)\"\n fillOpacity=\"0.4\"\n />\n <defs>\n <linearGradient id=\"reflection-gradient\" x1=\"3.6\" y1=\"0\" x2=\"3.6\" y2=\"2.4\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"white\" />\n <stop offset=\"1\" stopColor=\"white\" stopOpacity=\"0.1\" />\n </linearGradient>\n </defs>\n </svg>\n </span>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-2.5\",\n sm: \"size-3\",\n md: \"size-3.5\",\n lg: \"size-4\",\n xl: \"size-4.5\",\n \"2xl\": \"size-5\",\n \"3xl\": \"size-6\",\n \"4xl\": \"size-8\",\n};\n\ninterface VerifiedTickProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n className?: string;\n}\n\nexport const VerifiedTick = ({ size, className }: VerifiedTickProps) => (\n <svg className={cx(\"z-10 text-utility-blue-500\", sizes[size], className)} viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z\"\n className=\"fill-current\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z\"\n fill=\"white\"\n />\n </svg>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\ninterface AvatarCountProps {\n count: number;\n className?: string;\n}\n\nexport const AvatarCount = ({ count, className }: AvatarCountProps) => (\n <div className={cx(\"absolute right-0 bottom-0 p-px\", className)}>\n <div className=\"flex size-3.5 items-center justify-center rounded-full bg-fg-error-primary text-center text-[10px] leading-[13px] font-bold text-white\">\n {count}\n </div>\n </div>\n);\n","\"use client\";\n\n/** Figma: Avatar (18:1350) */\n\nimport { type FC, type ReactNode, useState } from \"react\";\nimport { UserIcon as User01 } from \"@phosphor-icons/react/dist/csr/User\";\nimport { cx } from \"@/utils/cx\";\nimport { AvatarOnlineIndicator, VerifiedTick } from \"./base-components\";\nimport { AvatarCount } from \"./base-components/avatar-count\";\n\nexport interface AvatarProps {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n /**\n * The class name for the main child of the avatar.\n */\n contentClassName?: string;\n src?: string | null;\n alt?: string;\n /**\n * Display an inner contrast border around the avatar image.\n */\n contrastBorder?: boolean;\n /**\n * Whether the avatar should be rounded.\n * @default true\n */\n rounded?: boolean;\n /**\n * Display an outer border around the avatar.\n */\n border?: boolean;\n /**\n * Display a badge (i.e. company logo).\n */\n badge?: ReactNode;\n /**\n * Display a status indicator.\n */\n status?: \"online\" | \"offline\";\n /**\n * Display a verified tick icon.\n *\n * @default false\n */\n verified?: boolean;\n /**\n * Display a count badge.\n */\n count?: number;\n /**\n * The initials of the user to display if no image is available.\n */\n initials?: string;\n /**\n * An icon to display if no image is available.\n */\n placeholderIcon?: FC<{ className?: string }>;\n /**\n * A placeholder to display if no image is available.\n */\n placeholder?: ReactNode;\n\n /**\n * Whether the avatar should show a focus ring when the parent group is in focus.\n * For example, when the avatar is wrapped inside a link.\n *\n * @default false\n */\n focusable?: boolean;\n}\n\nconst styles = {\n xs: { root: \"size-6\", rootWithBorder: \"p-px\", initials: \"text-xs font-semibold\", icon: \"size-4\" },\n sm: { root: \"size-8\", rootWithBorder: \"p-px\", initials: \"text-sm font-semibold\", icon: \"size-5\" },\n md: { root: \"size-10\", rootWithBorder: \"p-px\", initials: \"text-md font-semibold\", icon: \"size-6\" },\n lg: { root: \"size-12\", rootWithBorder: \"p-[1.5px]\", initials: \"text-lg font-semibold\", icon: \"size-7\" },\n xl: { root: \"size-14\", rootWithBorder: \"p-0.5\", initials: \"text-xl font-semibold\", icon: \"size-8\" },\n \"2xl\": { root: \"size-16\", rootWithBorder: \"p-0.5\", initials: \"text-display-xs font-semibold\", icon: \"size-8\" },\n};\n\nexport const Avatar = ({\n size = \"md\",\n src,\n alt,\n initials,\n placeholder,\n placeholderIcon: PlaceholderIcon,\n border,\n badge,\n status,\n verified,\n count,\n focusable = false,\n rounded = true,\n className,\n contentClassName,\n}: AvatarProps) => {\n const [isFailed, setIsFailed] = useState(false);\n\n const canShowImage = src && !isFailed;\n\n const renderMainContent = () => {\n if (canShowImage) {\n return <img data-avatar-img className=\"size-full object-cover\" src={src} alt={alt} onError={() => setIsFailed(true)} />;\n }\n\n if (initials) {\n return <span className={cx(\"text-quaternary\", styles[size].initials)}>{initials}</span>;\n }\n\n if (PlaceholderIcon) {\n return <PlaceholderIcon className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n }\n\n return placeholder || <User01 className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n };\n\n const renderBadgeContent = () => {\n if (status) {\n return <AvatarOnlineIndicator status={status} size={size} />;\n }\n\n if (verified) {\n return <VerifiedTick size={size} className={cx(\"absolute right-0 bottom-0\", size === \"xs\" && \"-right-px -bottom-px\")} />;\n }\n\n if (count) {\n return <AvatarCount count={count} />;\n }\n\n return badge;\n };\n\n return (\n <div\n data-avatar\n className={cx(\n \"relative inline-flex shrink-0 rounded-[7px]\",\n rounded && \"rounded-full\",\n // Focus styles\n focusable &&\n \"outline-none group-focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\",\n border && \"ring-1 ring-secondary_alt\",\n border && styles[size].rootWithBorder,\n styles[size].root,\n className,\n )}\n >\n <div\n className={cx(\n \"relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]\",\n rounded && \"rounded-full\",\n canShowImage &&\n size !== \"xs\" &&\n \"before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]\",\n contentClassName,\n )}\n >\n {renderMainContent()}\n </div>\n {renderBadgeContent()}\n </div>\n );\n};\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport {\n Radio as AriaRadio,\n RadioGroup as AriaRadioGroup,\n type RadioGroupProps as AriaRadioGroupProps,\n type RadioProps as AriaRadioProps,\n} from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\nconst RADIO_DOT_DELAY_MS = 60;\nconst RADIO_DOT_POP_MS = 100;\n\n/** Pop-in dot animation — remounts when selected so it replays each time (matches Checkbox tick timing). */\nfunction RadioAnimatedDot({ className }: { className?: string }) {\n const dotRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n const dot = dotRef.current;\n if (!dot) return;\n\n if (typeof dot.animate !== \"function\") {\n dot.style.opacity = \"1\";\n dot.style.transform = \"scale(1)\";\n return;\n }\n\n const anim = dot.animate(\n [\n { opacity: 0, transform: \"scale(0)\" },\n { opacity: 1, transform: \"scale(1)\" },\n ],\n {\n duration: RADIO_DOT_POP_MS,\n delay: RADIO_DOT_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return <div ref={dotRef} aria-hidden=\"true\" className={cx(\"rounded-full bg-fg-white\", className)} style={{ opacity: 0, transform: \"scale(0)\" }} />;\n}\n\n/** Figma: _Radio button base (1097:63638) — spread focus ring (2px surface gap + 4px focus-ring). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport interface RadioGroupContextType {\n size?: \"sm\" | \"md\";\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null);\n\nexport interface RadioButtonBaseProps {\n size?: \"sm\" | \"md\";\n className?: string;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport const RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size = \"sm\" }: RadioButtonBaseProps) => {\n const dotClassName = size === \"sm\" ? \"size-1.5\" : \"size-2\";\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary\",\n size === \"sm\" ? \"size-4\" : \"size-5\",\n isSelected && \"border-transparent bg-brand-solid\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isSelected && \"bg-tertiary\",\n isFocusVisible && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isSelected && <RadioAnimatedDot className={cx(\"pointer-events-none\", dotClassName)} />}\n </div>\n );\n};\nRadioButtonBase.displayName = \"RadioButtonBase\";\n\ninterface RadioButtonProps extends AriaRadioProps {\n size?: \"sm\" | \"md\";\n label?: ReactNode;\n hint?: ReactNode;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const RadioButton = ({ label, hint, className, size = \"sm\", ...ariaRadioProps }: RadioButtonProps) => {\n const context = useContext(RadioGroupContext);\n\n size = context?.size ?? size;\n\n const sizes = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n };\n\n return (\n <AriaRadio\n {...ariaRadioProps}\n className={(state) =>\n cx(\n \"relative flex items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n sizes[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isDisabled, isFocusVisible }) => (\n <>\n <RadioButtonBase\n size={size}\n isSelected={isSelected}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n {(label || hint) && (\n <div className={cx(\"inline-flex flex-col\", sizes[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", sizes[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", sizes[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaRadio>\n );\n};\nRadioButton.displayName = \"RadioButton\";\n\ninterface RadioGroupProps extends RadioGroupContextType, AriaRadioGroupProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const RadioGroup = ({ children, className, size = \"sm\", ...props }: RadioGroupProps) => {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <AriaRadioGroup {...props} className={cx(\"flex flex-col gap-4\", className)}>\n {children}\n </AriaRadioGroup>\n </RadioGroupContext.Provider>\n );\n};\n","\"use client\";\n\n/** Figma: Dropdown (18:0) */\n\nimport { type FC, type RefAttributes, useCallback } from \"react\";\nimport { CheckIcon as Check } from \"@phosphor-icons/react/dist/csr/Check\";\nimport { CaretRightIcon as ChevronRight } from \"@phosphor-icons/react/dist/csr/CaretRight\";\nimport { DotsThreeVerticalIcon as DotsVertical } from \"@phosphor-icons/react/dist/csr/DotsThreeVertical\";\nimport type {\n ButtonProps as AriaButtonProps,\n MenuItemProps as AriaMenuItemProps,\n MenuProps as AriaMenuProps,\n PopoverProps as AriaPopoverProps,\n SeparatorProps as AriaSeparatorProps,\n MenuItemRenderProps,\n} from \"react-aria-components\";\nimport {\n Button as AriaButton,\n Header as AriaHeader,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuSection as AriaMenuSection,\n MenuTrigger as AriaMenuTrigger,\n Popover as AriaPopover,\n Separator as AriaSeparator,\n} from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\nimport { Avatar } from \"../avatar/avatar\";\nimport { CheckboxBase } from \"../checkbox/checkbox\";\nimport { RadioButtonBase } from \"../radio-buttons/radio-buttons\";\nimport { ToggleBase } from \"../toggle/toggle\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst focusShadowInset =\n \"[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface DropdownItemProps extends AriaMenuItemProps {\n /** The label of the item to be displayed. */\n label?: string;\n /** An addon to be displayed on the right side of the item. */\n addon?: string;\n /** If true, the item will not have any styles. */\n unstyled?: boolean;\n /** An icon to be displayed on the left side of the item. */\n icon?: FC<{ className?: string }>;\n /** Avatar URL to be displayed on the left side of the item. */\n avatarUrl?: string;\n /** The selection indicator to be displayed on the item. */\n selectionIndicator?: \"checkmark\" | \"checkbox\" | \"radio\" | \"toggle\" | \"none\";\n}\n\nconst DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, selectionIndicator = \"checkmark\", ...props }: DropdownItemProps) => {\n const SelectionIndicator = useCallback(\n (state: MenuItemRenderProps & { className?: string }) => {\n if (selectionIndicator === \"checkmark\") {\n return (\n <Check\n aria-hidden=\"true\"\n className={cx(\"size-4 shrink-0 stroke-[2.25px] text-fg-brand-primary\", !state.isSelected && \"invisible\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"checkbox\") {\n return (\n <CheckboxBase\n isSelected={state.isSelected && !state.hasSubmenu}\n isIndeterminate={state.isSelected && state.hasSubmenu}\n size=\"sm\"\n className={cx(\"shrink-0\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"radio\") {\n return <RadioButtonBase isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n if (selectionIndicator === \"toggle\") {\n return <ToggleBase slim size=\"sm\" isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n return null;\n },\n [selectionIndicator],\n );\n\n if (unstyled) {\n return <AriaMenuItem id={label} textValue={label} {...props} />;\n }\n\n return (\n <AriaMenuItem\n {...props}\n className={(state) =>\n cx(\n \"group block cursor-pointer px-1.5 py-px outline-hidden\",\n state.isDisabled && \"cursor-not-allowed opacity-50\",\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n {(state) => (\n <div\n className={cx(\n \"relative flex items-center rounded-md px-2.5 py-2 transition duration-100 ease-linear\",\n !state.isDisabled && \"group-hover:bg-primary_hover\",\n state.isFocused && \"bg-primary_hover\",\n state.isFocusVisible && focusShadowInset,\n state.hasSubmenu && \"pr-1.5\",\n )}\n >\n {state.selectionMode !== \"none\" && !avatarUrl && !Icon && <SelectionIndicator {...state} className=\"mr-2\" />}\n\n {avatarUrl && (\n <div className=\"mr-2 flex size-4 items-center justify-center\">\n <Avatar aria-hidden=\"true\" size=\"xs\" src={avatarUrl} alt={label} className=\"size-5\" />\n </div>\n )}\n\n {Icon && <Icon aria-hidden=\"true\" className=\"mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-quaternary\" />}\n\n <span className={cx(\"grow truncate text-sm font-semibold text-secondary\", state.isFocused && \"text-secondary_hover\")}>\n {label || (typeof children === \"function\" ? children(state) : children)}\n </span>\n\n {addon && <span className=\"ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary\">{addon}</span>}\n\n {state.selectionMode !== \"none\" && (avatarUrl || Icon) && <SelectionIndicator {...state} className=\"ml-1\" />}\n\n {state.hasSubmenu && <ChevronRight aria-hidden=\"true\" className=\"ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-quaternary\" />}\n </div>\n )}\n </AriaMenuItem>\n );\n};\n\ninterface DropdownMenuProps<T extends object> extends AriaMenuProps<T> {}\n\nconst DropdownMenu = <T extends object>(props: DropdownMenuProps<T>) => {\n return (\n <AriaMenu\n {...props}\n className={(state) =>\n cx(\"h-min overflow-y-auto py-1 outline-hidden select-none\", typeof props.className === \"function\" ? props.className(state) : props.className)\n }\n />\n );\n};\n\ninterface DropdownPopoverProps extends AriaPopoverProps {}\n\nconst DropdownPopover = (props: DropdownPopoverProps) => {\n return (\n <AriaPopover\n placement=\"bottom right\"\n {...props}\n className={(state) =>\n cx(\n \"w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform\",\n state.isEntering &&\n \"duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5\",\n state.isExiting &&\n \"duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5\",\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n {props.children}\n </AriaPopover>\n );\n};\n\nconst DropdownSeparator = (props: AriaSeparatorProps) => {\n return <AriaSeparator {...props} className={cx(\"my-1 h-px w-full bg-border-secondary\", props.className)} />;\n};\n\nconst DropdownDotsButton = (props: AriaButtonProps & RefAttributes<HTMLButtonElement>) => {\n return (\n <AriaButton\n {...props}\n aria-label=\"Open menu\"\n className={(state) =>\n cx(\n \"cursor-pointer rounded-md text-fg-quaternary transition duration-100 ease-linear\",\n (state.isPressed || state.isHovered) && \"text-fg-quaternary_hover\",\n focusShadowPlain,\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n <DotsVertical className=\"size-5 transition-inherit-all\" />\n </AriaButton>\n );\n};\n\nexport const Dropdown = {\n Root: AriaMenuTrigger,\n Popover: DropdownPopover,\n Menu: DropdownMenu,\n Section: AriaMenuSection,\n SectionHeader: AriaHeader,\n Item: DropdownItem,\n Separator: DropdownSeparator,\n DotsButton: DropdownDotsButton,\n};\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { CaretUpDownIcon as ChevronSelectorVertical } from \"@phosphor-icons/react/dist/csr/CaretUpDown\";\nimport { Button as AriaButton, MenuItem as AriaMenuItem } from \"react-aria-components\";\nimport { Avatar } from \"@/components/base/avatar/avatar\";\nimport { Dropdown } from \"@/components/base/dropdown/dropdown\";\nimport { cx } from \"@/utils/cx\";\nimport { RadioButtonBase } from \"../radio-buttons/radio-buttons\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst focusShadowInset =\n \"[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst accounts = [\n {\n id: \"caitlyn\",\n name: \"Caitlyn King\",\n email: \"caitlyn@untitledui.com\",\n avatar: \"https://www.untitledui.com/images/avatars/caitlyn-king?fm=webp&q=80\",\n status: \"online\",\n },\n {\n id: \"sienna\",\n name: \"Sienna Hewitt\",\n email: \"sienna@untitledui.com\",\n avatar: \"https://www.untitledui.com/images/avatars/transparent/sienna-hewitt?bg=%23E0E0E0\",\n status: \"online\",\n },\n];\n\nexport const DropdownAccountBreadcrumb = () => {\n const [selectedAccountKey, setSelectedAccountKey] = useState<string>(\"caitlyn\");\n\n const selectedAccount = accounts.find((account) => account.id === selectedAccountKey);\n\n return (\n <Dropdown.Root>\n <AriaButton\n className={({ isPressed }) =>\n cx(\"flex cursor-pointer items-center gap-1.5 rounded-lg\", isPressed && \"opacity-90\", focusShadowPlain)\n }\n >\n <div className=\"flex rounded-lg bg-primary p-0.5 ring-[0.5px] ring-secondary ring-inset\">\n <Avatar size=\"xs\" src={selectedAccount?.avatar} className=\"shadow-md\" contentClassName=\"rounded-md before:hidden\" />\n </div>\n <span className=\"text-sm font-semibold text-primary\">{selectedAccount?.name}</span>\n\n <ChevronSelectorVertical className=\"size-3 shrink-0 stroke-3 text-fg-quaternary\" />\n </AriaButton>\n\n <Dropdown.Popover className=\"w-62\" placement=\"bottom left\">\n <Dropdown.Menu\n disallowEmptySelection\n selectionMode=\"single\"\n selectedKeys={[selectedAccountKey]}\n onSelectionChange={(keys) => setSelectedAccountKey(Array.from(keys).join())}\n className=\"flex flex-col gap-1 px-1.5 py-1.5\"\n >\n {accounts.map((account) => (\n <AriaMenuItem\n id={account.id}\n key={account.name}\n textValue={account.name}\n className={(state) =>\n cx(\n \"relative w-full cursor-pointer rounded-md px-2 py-2 text-left transition duration-100 ease-linear hover:bg-primary_hover focus:z-10 focus-visible:outline-none\",\n state.isFocusVisible && focusShadowInset,\n state.isSelected && \"bg-primary_hover\",\n )\n }\n >\n {({ isSelected }) => (\n <>\n <figure className=\"group flex min-w-0 flex-1 items-center gap-1.5\">\n <div className=\"flex rounded-[10px] bg-primary p-0.5 ring-[0.5px] ring-secondary ring-inset\">\n <Avatar size=\"sm\" src={account.avatar} className=\"shadow-md\" contentClassName=\"rounded-lg before:hidden\" />\n </div>\n <figcaption className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-primary\">{account.name}</p>\n <p className=\"truncate text-sm text-tertiary\">{account.email}</p>\n </figcaption>\n </figure>\n <RadioButtonBase isSelected={isSelected} className=\"absolute top-2 right-2\" />\n </>\n )}\n </AriaMenuItem>\n ))}\n </Dropdown.Menu>\n </Dropdown.Popover>\n </Dropdown.Root>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../utils/cx.ts","../../../../components/base/avatar/base-components/avatar-online-indicator.tsx","../../../../components/base/avatar/base-components/verified-tick.tsx","../../../../components/base/avatar/base-components/avatar-count.tsx","../../../../components/base/avatar/avatar.tsx","../../../../components/base/select/select-mobile-sheet.ts","../../../../hooks/use-is-mobile.ts","../../../../components/base/radio-buttons/radio-buttons.tsx","../../../../components/base/dropdown/dropdown.tsx","../../../../components/base/dropdown/dropdown-account-breadcrumb.tsx"],"names":["jsx","jsxs","sizes","User01","useState","useEffect","useRef","useLayoutEffect","focusRingShadow","AriaMenu","createContext","X","Fragment","useContext","AriaPopover","AriaMenuTrigger","focusShadowPlain","focusShadowInset","AriaButton","ChevronSelectorVertical","AriaMenuItem"],"mappings":"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","file":"dropdown-account-breadcrumb.js","sourcesContent":["import { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n text: [\"display-xs\", \"display-sm\", \"display-md\", \"display-lg\", \"display-xl\", \"display-2xl\"],\n },\n },\n});\n\n/**\n * This function is a wrapper around the twMerge function.\n * It is used to merge the classes inside style objects.\n */\nexport const cx = twMerge;\n\n/**\n * This function does nothing besides helping us to be able to\n * sort the classes inside style objects which is not supported\n * by the Tailwind IntelliSense by default.\n */\nexport function sortCx<T extends Record<string, string | number | Record<string, string | number | Record<string, string | number>>>>(classes: T): T {\n return classes;\n}\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-1.5\",\n sm: \"size-2\",\n md: \"size-2.5\",\n lg: \"size-3\",\n xl: \"size-3.5\",\n \"2xl\": \"size-4\",\n \"3xl\": \"size-4.5\",\n \"4xl\": \"size-5\",\n};\n\ninterface AvatarOnlineIndicatorProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n status: \"online\" | \"offline\";\n className?: string;\n}\n\nexport const AvatarOnlineIndicator = ({ size, status, className }: AvatarOnlineIndicatorProps) => (\n <span\n className={cx(\n \"absolute right-0 bottom-0 flex justify-center rounded-full ring-[1.5px] ring-bg-primary\",\n status === \"online\" ? \"bg-fg-success-secondary\" : \"bg-utility-neutral-300\",\n sizes[size],\n className,\n )}\n style={{\n backgroundImage:\n \"radial-gradient(43.75% 43.75% at 50% 28.75%, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.00) 100%), radial-gradient(50% 50% at 50% 50%, rgba(255, 255, 255, 0.00) 74.66%, rgba(255, 255, 255, 0.18) 100%), radial-gradient(75% 75% at 50% 0%, rgba(255, 255, 255, 0.00) 0%, rgba(255, 255, 255, 0.00) 50%, rgba(255, 255, 255, 0.08) 99%, rgba(255, 255, 255, 0.00) 100%)\",\n }}\n >\n {/* Reflection */}\n <svg viewBox=\"0 0 7.2 2.85\" fill=\"none\" className=\"mt-[10%] h-[20%] w-[60%]\">\n <path\n d=\"M7.2 1.83107C7.2 2.84235 5.58823 2.19729 3.6 2.19729C1.61177 2.19729 0 2.84235 0 1.83107C0 0.8198 1.61177 0 3.6 0C5.58823 0 7.2 0.8198 7.2 1.83107Z\"\n fill=\"url(#reflection-gradient)\"\n fillOpacity=\"0.4\"\n />\n <defs>\n <linearGradient id=\"reflection-gradient\" x1=\"3.6\" y1=\"0\" x2=\"3.6\" y2=\"2.4\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"white\" />\n <stop offset=\"1\" stopColor=\"white\" stopOpacity=\"0.1\" />\n </linearGradient>\n </defs>\n </svg>\n </span>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\nconst sizes = {\n xs: \"size-2.5\",\n sm: \"size-3\",\n md: \"size-3.5\",\n lg: \"size-4\",\n xl: \"size-4.5\",\n \"2xl\": \"size-5\",\n \"3xl\": \"size-6\",\n \"4xl\": \"size-8\",\n};\n\ninterface VerifiedTickProps {\n size: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\";\n className?: string;\n}\n\nexport const VerifiedTick = ({ size, className }: VerifiedTickProps) => (\n <svg className={cx(\"z-10 text-utility-blue-500\", sizes[size], className)} viewBox=\"0 0 10 10\" fill=\"none\">\n <path\n d=\"M7.72237 1.77098C7.81734 2.00068 7.99965 2.18326 8.2292 2.27858L9.03413 2.61199C9.26384 2.70714 9.44635 2.88965 9.5415 3.11936C9.63665 3.34908 9.63665 3.60718 9.5415 3.83689L9.20833 4.64125C9.11313 4.87106 9.113 5.12943 9.20863 5.35913L9.54122 6.16325C9.58839 6.27702 9.61268 6.39897 9.6127 6.52214C9.61272 6.6453 9.58847 6.76726 9.54134 6.88105C9.4942 6.99484 9.42511 7.09823 9.33801 7.18531C9.2509 7.27238 9.14749 7.34144 9.03369 7.38854L8.22934 7.72171C7.99964 7.81669 7.81706 7.99899 7.72174 8.22855L7.38833 9.03348C7.29318 9.26319 7.11067 9.4457 6.88096 9.54085C6.65124 9.636 6.39314 9.636 6.16343 9.54085L5.35907 9.20767C5.12935 9.11276 4.87134 9.11295 4.64177 9.20821L3.83684 9.54115C3.60725 9.63608 3.34937 9.636 3.11984 9.54092C2.89032 9.44585 2.70791 9.26356 2.6127 9.03409L2.27918 8.22892C2.18421 7.99923 2.0019 7.81665 1.77235 7.72133L0.967421 7.38792C0.737807 7.29281 0.555355 7.11041 0.460169 6.88083C0.364983 6.65125 0.364854 6.39327 0.45981 6.16359L0.792984 5.35924C0.8879 5.12952 0.887707 4.87151 0.792445 4.64193L0.459749 3.83642C0.41258 3.72265 0.388291 3.60069 0.388272 3.47753C0.388252 3.35436 0.412501 3.2324 0.459634 3.11861C0.506767 3.00482 0.57586 2.90144 0.662965 2.81436C0.75007 2.72728 0.853479 2.65822 0.967283 2.61113L1.77164 2.27795C2.00113 2.18306 2.1836 2.00099 2.27899 1.7717L2.6124 0.966768C2.70755 0.737054 2.89006 0.554547 3.11978 0.459397C3.34949 0.364246 3.60759 0.364246 3.83731 0.459397L4.64166 0.792571C4.87138 0.887487 5.12939 0.887293 5.35897 0.792031L6.16424 0.459913C6.39392 0.364816 6.65197 0.364836 6.88164 0.459968C7.11131 0.555099 7.29379 0.737554 7.38895 0.967208L7.72247 1.77238L7.72237 1.77098Z\"\n className=\"fill-current\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.95829 3.68932C7.02509 3.58439 7.04747 3.45723 7.02051 3.3358C6.99356 3.21437 6.91946 3.10862 6.81454 3.04182C6.70961 2.97502 6.58245 2.95264 6.46102 2.97959C6.33959 3.00655 6.23384 3.08064 6.16704 3.18557L4.33141 6.06995L3.49141 5.01995C3.41375 4.92281 3.30069 4.8605 3.17709 4.84673C3.05349 4.83296 2.92949 4.86885 2.83235 4.94651C2.73522 5.02417 2.67291 5.13723 2.65914 5.26083C2.64536 5.38443 2.68125 5.50843 2.75891 5.60557L4.00891 7.16807C4.0555 7.22638 4.11533 7.27271 4.18344 7.30323C4.25154 7.33375 4.32595 7.34757 4.40047 7.34353C4.47499 7.3395 4.54747 7.31773 4.61188 7.28004C4.67629 7.24234 4.73077 7.18981 4.77079 7.12682L6.95829 3.68932Z\"\n fill=\"white\"\n />\n </svg>\n);\n","\"use client\";\n\nimport { cx } from \"@/utils/cx\";\n\ninterface AvatarCountProps {\n count: number;\n className?: string;\n}\n\nexport const AvatarCount = ({ count, className }: AvatarCountProps) => (\n <div className={cx(\"absolute right-0 bottom-0 p-px\", className)}>\n <div className=\"flex size-3.5 items-center justify-center rounded-full bg-fg-error-primary text-center text-[10px] leading-[13px] font-bold text-white\">\n {count}\n </div>\n </div>\n);\n","\"use client\";\n\n/** Figma: Avatar (18:1350) */\n\nimport { type FC, type ReactNode, useState } from \"react\";\nimport { UserIcon as User01 } from \"@phosphor-icons/react/dist/csr/User\";\nimport { cx } from \"@/utils/cx\";\nimport { AvatarOnlineIndicator, VerifiedTick } from \"./base-components\";\nimport { AvatarCount } from \"./base-components/avatar-count\";\n\nexport interface AvatarProps {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n className?: string;\n /**\n * The class name for the main child of the avatar.\n */\n contentClassName?: string;\n src?: string | null;\n alt?: string;\n /**\n * Display an inner contrast border around the avatar image.\n */\n contrastBorder?: boolean;\n /**\n * Whether the avatar should be rounded.\n * @default true\n */\n rounded?: boolean;\n /**\n * Display an outer border around the avatar.\n */\n border?: boolean;\n /**\n * Display a badge (i.e. company logo).\n */\n badge?: ReactNode;\n /**\n * Display a status indicator.\n */\n status?: \"online\" | \"offline\";\n /**\n * Display a verified tick icon.\n *\n * @default false\n */\n verified?: boolean;\n /**\n * Display a count badge.\n */\n count?: number;\n /**\n * The initials of the user to display if no image is available.\n */\n initials?: string;\n /**\n * An icon to display if no image is available.\n */\n placeholderIcon?: FC<{ className?: string }>;\n /**\n * A placeholder to display if no image is available.\n */\n placeholder?: ReactNode;\n\n /**\n * Whether the avatar should show a focus ring when the parent group is in focus.\n * For example, when the avatar is wrapped inside a link.\n *\n * @default false\n */\n focusable?: boolean;\n}\n\nconst styles = {\n xs: { root: \"size-6\", rootWithBorder: \"p-px\", initials: \"text-xs font-semibold\", icon: \"size-4\" },\n sm: { root: \"size-8\", rootWithBorder: \"p-px\", initials: \"text-sm font-semibold\", icon: \"size-5\" },\n md: { root: \"size-10\", rootWithBorder: \"p-px\", initials: \"text-md font-semibold\", icon: \"size-6\" },\n lg: { root: \"size-12\", rootWithBorder: \"p-[1.5px]\", initials: \"text-lg font-semibold\", icon: \"size-7\" },\n xl: { root: \"size-14\", rootWithBorder: \"p-0.5\", initials: \"text-xl font-semibold\", icon: \"size-8\" },\n \"2xl\": { root: \"size-16\", rootWithBorder: \"p-0.5\", initials: \"text-display-xs font-semibold\", icon: \"size-8\" },\n};\n\nexport const Avatar = ({\n size = \"md\",\n src,\n alt,\n initials,\n placeholder,\n placeholderIcon: PlaceholderIcon,\n border,\n badge,\n status,\n verified,\n count,\n focusable = false,\n rounded = true,\n className,\n contentClassName,\n}: AvatarProps) => {\n const [isFailed, setIsFailed] = useState(false);\n\n const canShowImage = src && !isFailed;\n\n const renderMainContent = () => {\n if (canShowImage) {\n return <img data-avatar-img className=\"size-full object-cover\" src={src} alt={alt} onError={() => setIsFailed(true)} />;\n }\n\n if (initials) {\n return <span className={cx(\"text-quaternary\", styles[size].initials)}>{initials}</span>;\n }\n\n if (PlaceholderIcon) {\n return <PlaceholderIcon className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n }\n\n return placeholder || <User01 className={cx(\"text-fg-quaternary\", styles[size].icon)} />;\n };\n\n const renderBadgeContent = () => {\n if (status) {\n return <AvatarOnlineIndicator status={status} size={size} />;\n }\n\n if (verified) {\n return <VerifiedTick size={size} className={cx(\"absolute right-0 bottom-0\", size === \"xs\" && \"-right-px -bottom-px\")} />;\n }\n\n if (count) {\n return <AvatarCount count={count} />;\n }\n\n return badge;\n };\n\n return (\n <div\n data-avatar\n className={cx(\n \"relative inline-flex shrink-0 rounded-[7px]\",\n rounded && \"rounded-full\",\n // Focus styles\n focusable &&\n \"outline-none group-focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\",\n border && \"ring-1 ring-secondary_alt\",\n border && styles[size].rootWithBorder,\n styles[size].root,\n className,\n )}\n >\n <div\n className={cx(\n \"relative inline-flex size-full shrink-0 items-center justify-center overflow-hidden rounded-md bg-tertiary outline-[0.5px] -outline-offset-[0.5px] outline-black/16 before:inset-[0.5px]\",\n rounded && \"rounded-full\",\n canShowImage &&\n size !== \"xs\" &&\n \"before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-white/32 before:mask-[linear-gradient(to_bottom,black_0%,transparent_25%,transparent_75%,black_100%)]\",\n contentClassName,\n )}\n >\n {renderMainContent()}\n </div>\n {renderBadgeContent()}\n </div>\n );\n};\n","\"use client\";\n\nimport { useEffect, useLayoutEffect, useState, type CSSProperties } from \"react\";\n\n/** Matches Avenue dropdown/select mobile sheet motion. */\nexport const MOBILE_SHEET_MOTION_MS = 175;\nexport const MOBILE_SHEET_ENTRY_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nexport const MOBILE_SHEET_EXIT_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nexport const MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX = 120;\n\nexport interface SelectMobileOptions {\n /** When `false`, keep the floating menu on narrow viewports. Default `true`. */\n sheet?: boolean;\n /** Optional header title on the same row as the close control. */\n title?: string;\n /** Extra classes on the sheet panel (merged after base sheet styles). */\n className?: string;\n /** Extra classes on the scrollable body below the header. */\n contentClassName?: string;\n}\n\nexport function resolveSelectMobileOptions(mobileOptions?: SelectMobileOptions) {\n return {\n sheet: mobileOptions?.sheet ?? true,\n title: mobileOptions?.title,\n sheetClassName: mobileOptions?.className,\n contentClassName: mobileOptions?.contentClassName,\n };\n}\n\nexport function useMobileSheetAnimation(\n open: boolean,\n enabled: boolean,\n slideEntrance = true,\n slideOffsetPx = MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX,\n) {\n const [shouldRender, setShouldRender] = useState(open);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useLayoutEffect(() => {\n if (!enabled) {\n setShouldRender(open);\n return;\n }\n\n if (open) {\n setShouldRender(true);\n }\n }, [open, enabled]);\n\n useEffect(() => {\n if (!enabled || open) return;\n\n const timer = setTimeout(() => setShouldRender(false), MOBILE_SHEET_MOTION_MS);\n return () => clearTimeout(timer);\n }, [open, enabled]);\n\n useLayoutEffect(() => {\n if (!enabled || open || !shouldRender) return;\n setIsAnimating(false);\n }, [enabled, open, shouldRender]);\n\n useEffect(() => {\n if (!enabled || !shouldRender || !open) return;\n\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open, enabled]);\n\n const motionEasing = open ? MOBILE_SHEET_ENTRY_EASING : MOBILE_SHEET_EXIT_EASING;\n const hiddenTransform = slideEntrance ? `translateY(${slideOffsetPx}px)` : \"translateY(100%)\";\n\n const panelStyle: CSSProperties | undefined = enabled\n ? {\n transform: isAnimating ? \"translateY(0)\" : hiddenTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: motionEasing,\n }\n : undefined;\n\n const backdropStyle: CSSProperties | undefined = enabled\n ? {\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"opacity\",\n transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: motionEasing,\n }\n : undefined;\n\n return { shouldRender, isAnimating, panelStyle, backdropStyle };\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/** Viewport width at or below which mobile sheet behavior applies (matches Avenue dropdown/select). */\nexport const MOBILE_SHEET_MAX_PX = 1024;\n\n/**\n * Returns true when the viewport is at most {@link MOBILE_SHEET_MAX_PX} wide.\n * Initial value is read synchronously on mount so the first paint matches mobile layout.\n */\nexport function useIsMobile(breakpoint = MOBILE_SHEET_MAX_PX + 1): boolean {\n const [isMobile, setIsMobile] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;\n });\n\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [breakpoint]);\n\n return isMobile;\n}\n","\"use client\";\n\nimport { useLayoutEffect, useRef, type ReactNode, type Ref, createContext, useContext } from \"react\";\nimport {\n Radio as AriaRadio,\n RadioGroup as AriaRadioGroup,\n type RadioGroupProps as AriaRadioGroupProps,\n type RadioProps as AriaRadioProps,\n} from \"react-aria-components\";\nimport { cx } from \"@/utils/cx\";\n\nconst RADIO_DOT_DELAY_MS = 60;\nconst RADIO_DOT_POP_MS = 100;\n\n/** Pop-in dot animation — remounts when selected so it replays each time (matches Checkbox tick timing). */\nfunction RadioAnimatedDot({ className }: { className?: string }) {\n const dotRef = useRef<HTMLDivElement>(null);\n\n useLayoutEffect(() => {\n const dot = dotRef.current;\n if (!dot) return;\n\n if (typeof dot.animate !== \"function\") {\n dot.style.opacity = \"1\";\n dot.style.transform = \"scale(1)\";\n return;\n }\n\n const anim = dot.animate(\n [\n { opacity: 0, transform: \"scale(0)\" },\n { opacity: 1, transform: \"scale(1)\" },\n ],\n {\n duration: RADIO_DOT_POP_MS,\n delay: RADIO_DOT_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return <div ref={dotRef} aria-hidden=\"true\" className={cx(\"rounded-full bg-fg-white\", className)} style={{ opacity: 0, transform: \"scale(0)\" }} />;\n}\n\n/** Figma: _Radio button base (1097:63638) — spread focus ring (2px surface gap + 4px focus-ring). */\nconst focusRingShadow =\n \"outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nexport interface RadioGroupContextType {\n size?: \"sm\" | \"md\";\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextType | null>(null);\n\nexport interface RadioButtonBaseProps {\n size?: \"sm\" | \"md\";\n className?: string;\n isFocusVisible?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport const RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size = \"sm\" }: RadioButtonBaseProps) => {\n const dotClassName = size === \"sm\" ? \"size-1.5\" : \"size-2\";\n\n return (\n <div\n className={cx(\n \"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary\",\n size === \"sm\" ? \"size-4\" : \"size-5\",\n isSelected && \"border-transparent bg-brand-solid\",\n !isSelected && !isDisabled && \"group-hover:bg-primary_hover\",\n isDisabled && \"cursor-not-allowed opacity-50\",\n isDisabled && !isSelected && \"bg-tertiary\",\n isFocusVisible && !isDisabled && focusRingShadow,\n className,\n )}\n >\n {isSelected && <RadioAnimatedDot className={cx(\"pointer-events-none\", dotClassName)} />}\n </div>\n );\n};\nRadioButtonBase.displayName = \"RadioButtonBase\";\n\ninterface RadioButtonProps extends AriaRadioProps {\n size?: \"sm\" | \"md\";\n label?: ReactNode;\n hint?: ReactNode;\n ref?: Ref<HTMLLabelElement>;\n}\n\nexport const RadioButton = ({ label, hint, className, size = \"sm\", ...ariaRadioProps }: RadioButtonProps) => {\n const context = useContext(RadioGroupContext);\n\n size = context?.size ?? size;\n\n const sizes = {\n sm: {\n root: \"gap-2\",\n textWrapper: \"\",\n label: \"text-sm font-medium\",\n hint: \"text-sm\",\n },\n md: {\n root: \"gap-3\",\n textWrapper: \"gap-0.5\",\n label: \"text-md font-medium\",\n hint: \"text-md\",\n },\n };\n\n return (\n <AriaRadio\n {...ariaRadioProps}\n className={(state) =>\n cx(\n \"group relative flex items-start\",\n state.isDisabled && \"cursor-not-allowed\",\n sizes[size].root,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {({ isSelected, isDisabled, isFocusVisible }) => (\n <>\n <RadioButtonBase\n size={size}\n isSelected={isSelected}\n isDisabled={isDisabled}\n isFocusVisible={isFocusVisible}\n className={label || hint ? \"mt-0.5\" : \"\"}\n />\n {(label || hint) && (\n <div className={cx(\"inline-flex flex-col\", sizes[size].textWrapper)}>\n {label && <p className={cx(\"text-secondary select-none\", sizes[size].label)}>{label}</p>}\n {hint && (\n <span className={cx(\"text-tertiary\", sizes[size].hint)} onClick={(event) => event.stopPropagation()}>\n {hint}\n </span>\n )}\n </div>\n )}\n </>\n )}\n </AriaRadio>\n );\n};\nRadioButton.displayName = \"RadioButton\";\n\ninterface RadioGroupProps extends RadioGroupContextType, AriaRadioGroupProps {\n children: ReactNode;\n className?: string;\n}\n\nexport const RadioGroup = ({ children, className, size = \"sm\", ...props }: RadioGroupProps) => {\n return (\n <RadioGroupContext.Provider value={{ size }}>\n <AriaRadioGroup {...props} className={cx(\"flex flex-col gap-4\", className)}>\n {children}\n </AriaRadioGroup>\n </RadioGroupContext.Provider>\n );\n};\n","\"use client\";\n\n/** Figma: Dropdown (18:0) */\n\nimport { type FC, type ReactNode, type RefAttributes, createContext, useCallback, useContext, useEffect, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { CheckIcon as Check } from \"@phosphor-icons/react/dist/csr/Check\";\nimport { CaretRightIcon as ChevronRight } from \"@phosphor-icons/react/dist/csr/CaretRight\";\nimport { DotsThreeVerticalIcon as DotsVertical } from \"@phosphor-icons/react/dist/csr/DotsThreeVertical\";\nimport { XIcon as X } from \"@phosphor-icons/react/dist/csr/X\";\nimport type {\n ButtonProps as AriaButtonProps,\n MenuItemProps as AriaMenuItemProps,\n MenuProps as AriaMenuProps,\n PopoverProps as AriaPopoverProps,\n SeparatorProps as AriaSeparatorProps,\n MenuItemRenderProps,\n} from \"react-aria-components\";\nimport {\n Button as AriaButton,\n Header as AriaHeader,\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuSection as AriaMenuSection,\n MenuTrigger as AriaMenuTrigger,\n OverlayTriggerStateContext,\n Popover as AriaPopover,\n Separator as AriaSeparator,\n} from \"react-aria-components\";\nimport { resolveSelectMobileOptions, useMobileSheetAnimation, type SelectMobileOptions } from \"@/components/base/select/select-mobile-sheet\";\nimport { useIsMobile } from \"@/hooks/use-is-mobile\";\nimport { cx } from \"@/utils/cx\";\nimport { Avatar } from \"../avatar/avatar\";\nimport { CheckboxBase } from \"../checkbox/checkbox\";\nimport { RadioButtonBase } from \"../radio-buttons/radio-buttons\";\nimport { ToggleBase } from \"../toggle/toggle\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst focusShadowInset =\n \"[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\ninterface DropdownItemProps extends AriaMenuItemProps {\n /** The label of the item to be displayed. */\n label?: string;\n /** An addon to be displayed on the right side of the item. */\n addon?: string;\n /** If true, the item will not have any styles. */\n unstyled?: boolean;\n /** An icon to be displayed on the left side of the item. */\n icon?: FC<{ className?: string }>;\n /** Avatar URL to be displayed on the left side of the item. */\n avatarUrl?: string;\n /** The selection indicator to be displayed on the item. */\n selectionIndicator?: \"checkmark\" | \"checkbox\" | \"radio\" | \"toggle\" | \"none\";\n}\n\nconst DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, selectionIndicator = \"checkmark\", ...props }: DropdownItemProps) => {\n const SelectionIndicator = useCallback(\n (state: MenuItemRenderProps & { className?: string }) => {\n if (selectionIndicator === \"checkmark\") {\n return (\n <Check\n aria-hidden=\"true\"\n className={cx(\"size-4 shrink-0 stroke-[2.25px] text-fg-brand-primary\", !state.isSelected && \"invisible\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"checkbox\") {\n return (\n <CheckboxBase\n isSelected={state.isSelected && !state.hasSubmenu}\n isIndeterminate={state.isSelected && state.hasSubmenu}\n size=\"sm\"\n className={cx(\"shrink-0\", state.className)}\n />\n );\n }\n if (selectionIndicator === \"radio\") {\n return <RadioButtonBase isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n if (selectionIndicator === \"toggle\") {\n return <ToggleBase slim size=\"sm\" isSelected={state.isSelected} className={cx(\"shrink-0\", state.className)} />;\n }\n return null;\n },\n [selectionIndicator],\n );\n\n if (unstyled) {\n return <AriaMenuItem id={label} textValue={label} {...props} />;\n }\n\n return (\n <AriaMenuItem\n {...props}\n className={(state) =>\n cx(\n \"group block cursor-pointer px-1.5 py-px outline-hidden\",\n state.isDisabled && \"cursor-not-allowed opacity-50\",\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n {(state) => (\n <div\n className={cx(\n \"relative flex items-center rounded-md px-2.5 py-2 transition duration-100 ease-linear\",\n !state.isDisabled && \"group-hover:bg-primary_hover\",\n state.isFocused && \"bg-primary_hover\",\n state.isFocusVisible && focusShadowInset,\n state.hasSubmenu && \"pr-1.5\",\n )}\n >\n {state.selectionMode !== \"none\" && !avatarUrl && !Icon && <SelectionIndicator {...state} className=\"mr-2\" />}\n\n {avatarUrl && (\n <div className=\"mr-2 flex size-4 items-center justify-center\">\n <Avatar aria-hidden=\"true\" size=\"xs\" src={avatarUrl} alt={label} className=\"size-5\" />\n </div>\n )}\n\n {Icon && <Icon aria-hidden=\"true\" className=\"mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-secondary\" />}\n\n <span className={cx(\"grow truncate text-sm font-semibold text-secondary\", state.isFocused && \"text-secondary_hover\")}>\n {label || (typeof children === \"function\" ? children(state) : children)}\n </span>\n\n {addon && <span className=\"ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary\">{addon}</span>}\n\n {state.selectionMode !== \"none\" && (avatarUrl || Icon) && <SelectionIndicator {...state} className=\"ml-1\" />}\n\n {state.hasSubmenu && <ChevronRight aria-hidden=\"true\" className=\"ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-secondary\" />}\n </div>\n )}\n </AriaMenuItem>\n );\n};\n\ninterface DropdownMenuProps<T extends object> extends AriaMenuProps<T> {}\n\nconst DropdownMenu = <T extends object>(props: DropdownMenuProps<T>) => {\n return (\n <AriaMenu\n {...props}\n className={(state) =>\n cx(\"h-min overflow-y-auto py-1 outline-hidden select-none\", typeof props.className === \"function\" ? props.className(state) : props.className)\n }\n />\n );\n};\n\n/** Nesting depth of stacked mobile dropdown sheets (0 = no sheet ancestor). */\nconst DropdownSheetDepthContext = createContext(0);\n\nfunction DropdownSheetCloseButton({ onClose }: { onClose: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n className=\"flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full text-fg-primary transition duration-100 ease-linear hover:bg-primary_hover active:scale-[0.96] focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\"\n >\n <X className=\"size-5\" aria-hidden=\"true\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n}\n\nfunction DropdownSheetChrome({ title, onClose, children }: { title?: string; onClose: () => void; children: ReactNode }) {\n return (\n <>\n <div className={cx(\"flex w-full shrink-0 items-center py-2 pl-4 pr-2\", title ? \"justify-between gap-3\" : \"justify-end\")}>\n {title ? <p className=\"min-w-0 flex-1 truncate text-base font-semibold text-primary\">{title}</p> : null}\n <DropdownSheetCloseButton onClose={onClose} />\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto pb-[max(2.5rem,calc(env(safe-area-inset-bottom)+2rem))]\">{children}</div>\n </>\n );\n}\n\ninterface DropdownPopoverProps extends AriaPopoverProps {\n /** Narrow-viewport (≤1024px) bottom-sheet options. */\n mobileOptions?: SelectMobileOptions;\n}\n\nconst DropdownPopover = ({ mobileOptions, children, className, style, ...props }: DropdownPopoverProps) => {\n const isMobile = useIsMobile();\n const resolvedMobile = useMemo(() => resolveSelectMobileOptions(mobileOptions), [mobileOptions]);\n const useMobileSheet = isMobile && resolvedMobile.sheet;\n\n const overlayState = useContext(OverlayTriggerStateContext);\n const open = overlayState?.isOpen ?? false;\n const parentDepth = useContext(DropdownSheetDepthContext);\n const depth = parentDepth + 1;\n\n const { shouldRender, panelStyle, backdropStyle } = useMobileSheetAnimation(open, useMobileSheet);\n\n useEffect(() => {\n if (!useMobileSheet || !open) return;\n\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [useMobileSheet, open]);\n\n if (!useMobileSheet) {\n return (\n <AriaPopover\n placement=\"bottom right\"\n {...props}\n style={style}\n className={(state) =>\n cx(\n \"w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform\",\n state.isEntering &&\n \"duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5\",\n state.isExiting &&\n \"duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5\",\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n {children}\n </AriaPopover>\n );\n }\n\n const close = () => overlayState?.close();\n const showMobileSheet = shouldRender;\n const isMobileSheetExiting = showMobileSheet && !open;\n\n const scrimZIndex = 50 + (depth - 1) * 10;\n const sheetZIndex = scrimZIndex + 1;\n\n const mobileScrim =\n shouldRender && typeof document !== \"undefined\"\n ? createPortal(\n <div\n className=\"fixed inset-0 bg-overlay/70\"\n style={{ ...backdropStyle, zIndex: scrimZIndex }}\n onClick={close}\n aria-hidden=\"true\"\n />,\n document.body,\n )\n : null;\n\n return (\n <DropdownSheetDepthContext.Provider value={depth}>\n {mobileScrim}\n <AriaPopover\n placement=\"bottom\"\n containerPadding={0}\n offset={0}\n {...props}\n isExiting={isMobileSheetExiting}\n data-dropdown-mobile-sheet\n style={{ ...panelStyle, zIndex: sheetZIndex, ...style }}\n className={(state) =>\n cx(\n \"fixed! inset-x-0! bottom-0! top-auto! right-0! left-0! flex max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] w-full! max-w-none! flex-col overflow-hidden rounded-t-2xl rounded-b-none border-x-0 border-t border-secondary bg-primary shadow-xl outline-hidden\",\n resolvedMobile.sheetClassName,\n typeof className === \"function\" ? className(state) : className,\n )\n }\n >\n <DropdownSheetChrome title={resolvedMobile.title} onClose={close}>\n {typeof children === \"function\" ? null : children}\n </DropdownSheetChrome>\n </AriaPopover>\n </DropdownSheetDepthContext.Provider>\n );\n};\n\nconst DropdownSeparator = (props: AriaSeparatorProps) => {\n return <AriaSeparator {...props} className={cx(\"my-1 h-px w-full bg-border-secondary\", props.className)} />;\n};\n\nconst DropdownDotsButton = (props: AriaButtonProps & RefAttributes<HTMLButtonElement>) => {\n return (\n <AriaButton\n {...props}\n aria-label=\"Open menu\"\n className={(state) =>\n cx(\n \"cursor-pointer rounded-md text-fg-quaternary transition duration-100 ease-linear\",\n (state.isPressed || state.isHovered) && \"text-fg-quaternary_hover\",\n focusShadowPlain,\n typeof props.className === \"function\" ? props.className(state) : props.className,\n )\n }\n >\n <DotsVertical className=\"size-5 transition-inherit-all\" />\n </AriaButton>\n );\n};\n\nexport const Dropdown = {\n Root: AriaMenuTrigger,\n Popover: DropdownPopover,\n Menu: DropdownMenu,\n Section: AriaMenuSection,\n SectionHeader: AriaHeader,\n Item: DropdownItem,\n Separator: DropdownSeparator,\n DotsButton: DropdownDotsButton,\n};\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { CaretUpDownIcon as ChevronSelectorVertical } from \"@phosphor-icons/react/dist/csr/CaretUpDown\";\nimport { Button as AriaButton, MenuItem as AriaMenuItem } from \"react-aria-components\";\nimport { Avatar } from \"@/components/base/avatar/avatar\";\nimport { Dropdown } from \"@/components/base/dropdown/dropdown\";\nimport { cx } from \"@/utils/cx\";\nimport { RadioButtonBase } from \"../radio-buttons/radio-buttons\";\n\nconst focusShadowPlain =\n \"focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst focusShadowInset =\n \"[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]\";\n\nconst accounts = [\n {\n id: \"caitlyn\",\n name: \"Caitlyn King\",\n email: \"caitlyn@untitledui.com\",\n avatar: \"https://www.untitledui.com/images/avatars/caitlyn-king?fm=webp&q=80\",\n status: \"online\",\n },\n {\n id: \"sienna\",\n name: \"Sienna Hewitt\",\n email: \"sienna@untitledui.com\",\n avatar: \"https://www.untitledui.com/images/avatars/transparent/sienna-hewitt?bg=%23E0E0E0\",\n status: \"online\",\n },\n];\n\nexport const DropdownAccountBreadcrumb = () => {\n const [selectedAccountKey, setSelectedAccountKey] = useState<string>(\"caitlyn\");\n\n const selectedAccount = accounts.find((account) => account.id === selectedAccountKey);\n\n return (\n <Dropdown.Root>\n <AriaButton\n className={({ isPressed }) =>\n cx(\"flex cursor-pointer items-center gap-1.5 rounded-lg\", isPressed && \"opacity-90\", focusShadowPlain)\n }\n >\n <div className=\"flex rounded-lg bg-primary p-0.5 ring-[0.5px] ring-secondary ring-inset\">\n <Avatar size=\"xs\" src={selectedAccount?.avatar} className=\"shadow-md\" contentClassName=\"rounded-md before:hidden\" />\n </div>\n <span className=\"text-sm font-semibold text-primary\">{selectedAccount?.name}</span>\n\n <ChevronSelectorVertical className=\"size-3 shrink-0 stroke-3 text-fg-quaternary\" />\n </AriaButton>\n\n <Dropdown.Popover className=\"w-62\" placement=\"bottom left\">\n <Dropdown.Menu\n disallowEmptySelection\n selectionMode=\"single\"\n selectedKeys={[selectedAccountKey]}\n onSelectionChange={(keys) => setSelectedAccountKey(Array.from(keys).join())}\n className=\"flex flex-col gap-1 px-1.5 py-1.5\"\n >\n {accounts.map((account) => (\n <AriaMenuItem\n id={account.id}\n key={account.name}\n textValue={account.name}\n className={(state) =>\n cx(\n \"relative w-full cursor-pointer rounded-md px-2 py-2 text-left transition duration-100 ease-linear hover:bg-primary_hover focus:z-10 focus-visible:outline-none\",\n state.isFocusVisible && focusShadowInset,\n state.isSelected && \"bg-primary_hover\",\n )\n }\n >\n {({ isSelected }) => (\n <>\n <figure className=\"group flex min-w-0 flex-1 items-center gap-1.5\">\n <div className=\"flex rounded-[10px] bg-primary p-0.5 ring-[0.5px] ring-secondary ring-inset\">\n <Avatar size=\"sm\" src={account.avatar} className=\"shadow-md\" contentClassName=\"rounded-lg before:hidden\" />\n </div>\n <figcaption className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold text-primary\">{account.name}</p>\n <p className=\"truncate text-sm text-tertiary\">{account.email}</p>\n </figcaption>\n </figure>\n <RadioButtonBase isSelected={isSelected} className=\"absolute top-2 right-2\" />\n </>\n )}\n </AriaMenuItem>\n ))}\n </Dropdown.Menu>\n </Dropdown.Popover>\n </Dropdown.Root>\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createContext, useState, isValidElement,
|
|
1
|
+
import { createContext, useState, isValidElement, useMemo, useContext, useEffect, useCallback, useLayoutEffect, useRef } from 'react';
|
|
2
2
|
import { CaretDownIcon } from '@phosphor-icons/react/dist/csr/CaretDown';
|
|
3
3
|
import { QuestionIcon } from '@phosphor-icons/react/dist/csr/Question';
|
|
4
4
|
import { SignOutIcon } from '@phosphor-icons/react/dist/csr/SignOut';
|
|
@@ -6,12 +6,14 @@ import { MoonIcon } from '@phosphor-icons/react/dist/csr/Moon';
|
|
|
6
6
|
import { PlusIcon } from '@phosphor-icons/react/dist/csr/Plus';
|
|
7
7
|
import { GearIcon } from '@phosphor-icons/react/dist/csr/Gear';
|
|
8
8
|
import { UserIcon } from '@phosphor-icons/react/dist/csr/User';
|
|
9
|
-
import { MenuTrigger, MenuSection, SubmenuTrigger, Header, Link, Button as Button$1, Popover, Menu, MenuItem, Separator } from 'react-aria-components';
|
|
9
|
+
import { MenuTrigger, MenuSection, SubmenuTrigger, Header, Link, Button as Button$1, OverlayTriggerStateContext, Popover, Menu, MenuItem, Separator } from 'react-aria-components';
|
|
10
10
|
import { extendTailwindMerge } from 'tailwind-merge';
|
|
11
11
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
12
|
+
import { createPortal } from 'react-dom';
|
|
12
13
|
import { CheckIcon } from '@phosphor-icons/react/dist/csr/Check';
|
|
13
14
|
import { CaretRightIcon } from '@phosphor-icons/react/dist/csr/CaretRight';
|
|
14
15
|
import '@phosphor-icons/react/dist/csr/DotsThreeVertical';
|
|
16
|
+
import { XIcon } from '@phosphor-icons/react/dist/csr/X';
|
|
15
17
|
|
|
16
18
|
var twMerge = extendTailwindMerge({
|
|
17
19
|
extend: {
|
|
@@ -147,7 +149,7 @@ var styles = sortCx({
|
|
|
147
149
|
"hover:bg-primary_hover hover:text-secondary_hover",
|
|
148
150
|
"disabled:opacity-50",
|
|
149
151
|
"data-loading:bg-primary_hover",
|
|
150
|
-
"*:data-icon:text-fg-secondary
|
|
152
|
+
"*:data-icon:text-fg-secondary"
|
|
151
153
|
].join(" ")
|
|
152
154
|
},
|
|
153
155
|
/** Figma Hierarchy=Tertiary */
|
|
@@ -157,7 +159,7 @@ var styles = sortCx({
|
|
|
157
159
|
focusShadowPlain,
|
|
158
160
|
"hover:bg-primary_hover hover:text-tertiary_hover",
|
|
159
161
|
"disabled:opacity-50",
|
|
160
|
-
"*:data-icon:text-fg-tertiary
|
|
162
|
+
"*:data-icon:text-fg-tertiary"
|
|
161
163
|
].join(" ")
|
|
162
164
|
},
|
|
163
165
|
/** Figma Hierarchy=Link color — text + icons share brand-secondary; hover underlines with fg-brand-secondary. */
|
|
@@ -288,6 +290,81 @@ var Button = ({
|
|
|
288
290
|
}
|
|
289
291
|
return /* @__PURE__ */ jsx(Button$1, { ...commonProps, type: commonProps.type || "button", isPending: loading });
|
|
290
292
|
};
|
|
293
|
+
var MOBILE_SHEET_MOTION_MS = 175;
|
|
294
|
+
var MOBILE_SHEET_ENTRY_EASING = "cubic-bezier(0.85, 0, 0.15, 1)";
|
|
295
|
+
var MOBILE_SHEET_EXIT_EASING = "cubic-bezier(0.85, 0, 1, 0.15)";
|
|
296
|
+
var MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX = 120;
|
|
297
|
+
function resolveSelectMobileOptions(mobileOptions) {
|
|
298
|
+
return {
|
|
299
|
+
sheet: mobileOptions?.sheet ?? true,
|
|
300
|
+
title: mobileOptions?.title,
|
|
301
|
+
sheetClassName: mobileOptions?.className,
|
|
302
|
+
contentClassName: mobileOptions?.contentClassName
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function useMobileSheetAnimation(open, enabled, slideEntrance = true, slideOffsetPx = MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_PX) {
|
|
306
|
+
const [shouldRender, setShouldRender] = useState(open);
|
|
307
|
+
const [isAnimating, setIsAnimating] = useState(false);
|
|
308
|
+
useLayoutEffect(() => {
|
|
309
|
+
if (!enabled) {
|
|
310
|
+
setShouldRender(open);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (open) {
|
|
314
|
+
setShouldRender(true);
|
|
315
|
+
}
|
|
316
|
+
}, [open, enabled]);
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
if (!enabled || open) return;
|
|
319
|
+
const timer = setTimeout(() => setShouldRender(false), MOBILE_SHEET_MOTION_MS);
|
|
320
|
+
return () => clearTimeout(timer);
|
|
321
|
+
}, [open, enabled]);
|
|
322
|
+
useLayoutEffect(() => {
|
|
323
|
+
if (!enabled || open || !shouldRender) return;
|
|
324
|
+
setIsAnimating(false);
|
|
325
|
+
}, [enabled, open, shouldRender]);
|
|
326
|
+
useEffect(() => {
|
|
327
|
+
if (!enabled || !shouldRender || !open) return;
|
|
328
|
+
let raf2 = 0;
|
|
329
|
+
const raf1 = requestAnimationFrame(() => {
|
|
330
|
+
raf2 = requestAnimationFrame(() => setIsAnimating(true));
|
|
331
|
+
});
|
|
332
|
+
return () => {
|
|
333
|
+
cancelAnimationFrame(raf1);
|
|
334
|
+
if (raf2) cancelAnimationFrame(raf2);
|
|
335
|
+
};
|
|
336
|
+
}, [shouldRender, open, enabled]);
|
|
337
|
+
const motionEasing = open ? MOBILE_SHEET_ENTRY_EASING : MOBILE_SHEET_EXIT_EASING;
|
|
338
|
+
const hiddenTransform = slideEntrance ? `translateY(${slideOffsetPx}px)` : "translateY(100%)";
|
|
339
|
+
const panelStyle = enabled ? {
|
|
340
|
+
transform: isAnimating ? "translateY(0)" : hiddenTransform,
|
|
341
|
+
opacity: isAnimating ? 1 : 0,
|
|
342
|
+
transitionProperty: "transform, opacity",
|
|
343
|
+
transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
|
|
344
|
+
transitionTimingFunction: motionEasing
|
|
345
|
+
} : void 0;
|
|
346
|
+
const backdropStyle = enabled ? {
|
|
347
|
+
opacity: isAnimating ? 1 : 0,
|
|
348
|
+
transitionProperty: "opacity",
|
|
349
|
+
transitionDuration: `${MOBILE_SHEET_MOTION_MS}ms`,
|
|
350
|
+
transitionTimingFunction: motionEasing
|
|
351
|
+
} : void 0;
|
|
352
|
+
return { shouldRender, isAnimating, panelStyle, backdropStyle };
|
|
353
|
+
}
|
|
354
|
+
var MOBILE_SHEET_MAX_PX = 1024;
|
|
355
|
+
function useIsMobile(breakpoint = MOBILE_SHEET_MAX_PX + 1) {
|
|
356
|
+
const [isMobile, setIsMobile] = useState(() => {
|
|
357
|
+
if (typeof window === "undefined") return false;
|
|
358
|
+
return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;
|
|
359
|
+
});
|
|
360
|
+
useEffect(() => {
|
|
361
|
+
const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
|
|
362
|
+
const handler = (e) => setIsMobile(e.matches);
|
|
363
|
+
mq.addEventListener("change", handler);
|
|
364
|
+
return () => mq.removeEventListener("change", handler);
|
|
365
|
+
}, [breakpoint]);
|
|
366
|
+
return isMobile;
|
|
367
|
+
}
|
|
291
368
|
var sizes = {
|
|
292
369
|
xs: "size-1.5",
|
|
293
370
|
sm: "size-2",
|
|
@@ -440,7 +517,7 @@ var Avatar = ({
|
|
|
440
517
|
};
|
|
441
518
|
var CHECKBOX_TICK_DELAY_MS = 60;
|
|
442
519
|
var CHECKBOX_TICK_DRAW_MS = 100;
|
|
443
|
-
function CheckboxAnimatedCheckMark({ className }) {
|
|
520
|
+
function CheckboxAnimatedCheckMark({ pixelSize, className }) {
|
|
444
521
|
const pathRef = useRef(null);
|
|
445
522
|
useLayoutEffect(() => {
|
|
446
523
|
const path = pathRef.current;
|
|
@@ -461,7 +538,7 @@ function CheckboxAnimatedCheckMark({ className }) {
|
|
|
461
538
|
});
|
|
462
539
|
return () => anim.cancel();
|
|
463
540
|
}, []);
|
|
464
|
-
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", viewBox: "0 0 14 14", fill: "none", className: cx("block
|
|
541
|
+
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", width: pixelSize, height: pixelSize, viewBox: "0 0 14 14", fill: "none", className: cx("block", className), children: /* @__PURE__ */ jsx(
|
|
465
542
|
"path",
|
|
466
543
|
{
|
|
467
544
|
ref: pathRef,
|
|
@@ -476,14 +553,15 @@ function CheckboxAnimatedCheckMark({ className }) {
|
|
|
476
553
|
var focusRingShadow = "outline-none [box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]";
|
|
477
554
|
var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size = "sm", isFocusVisible = false }) => {
|
|
478
555
|
const isChecked = isSelected || isIndeterminate;
|
|
479
|
-
const
|
|
556
|
+
const iconPixelSize = size === "sm" ? 10 : 14;
|
|
480
557
|
return /* @__PURE__ */ jsxs(
|
|
481
558
|
"div",
|
|
482
559
|
{
|
|
483
560
|
className: cx(
|
|
484
|
-
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center border border-solid border-primary",
|
|
561
|
+
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip border border-solid border-primary",
|
|
485
562
|
size === "sm" ? "size-4 rounded-xs" : "size-5 rounded-sm",
|
|
486
563
|
isChecked ? "border-transparent bg-brand-solid" : "bg-primary",
|
|
564
|
+
!isChecked && !isDisabled && "group-hover:bg-primary_hover",
|
|
487
565
|
isDisabled && "cursor-not-allowed opacity-50",
|
|
488
566
|
isDisabled && !isChecked && "bg-tertiary",
|
|
489
567
|
isFocusVisible && !isDisabled && focusRingShadow,
|
|
@@ -494,13 +572,15 @@ var CheckboxBase = ({ className, isSelected, isDisabled, isIndeterminate, size =
|
|
|
494
572
|
"svg",
|
|
495
573
|
{
|
|
496
574
|
"aria-hidden": "true",
|
|
575
|
+
width: iconPixelSize,
|
|
576
|
+
height: iconPixelSize,
|
|
497
577
|
viewBox: "0 0 14 14",
|
|
498
578
|
fill: "none",
|
|
499
|
-
className:
|
|
579
|
+
className: "pointer-events-none block text-fg-white",
|
|
500
580
|
children: /* @__PURE__ */ jsx("path", { d: "M2.91675 7H11.0834", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
501
581
|
}
|
|
502
582
|
),
|
|
503
|
-
isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { className:
|
|
583
|
+
isSelected && !isIndeterminate && /* @__PURE__ */ jsx(CheckboxAnimatedCheckMark, { pixelSize: iconPixelSize, className: "pointer-events-none text-fg-white" })
|
|
504
584
|
]
|
|
505
585
|
}
|
|
506
586
|
);
|
|
@@ -545,6 +625,7 @@ var RadioButtonBase = ({ className, isFocusVisible, isSelected, isDisabled, size
|
|
|
545
625
|
"relative flex shrink-0 cursor-pointer appearance-none items-center justify-center overflow-clip rounded-full border border-solid border-primary bg-primary",
|
|
546
626
|
size === "sm" ? "size-4" : "size-5",
|
|
547
627
|
isSelected && "border-transparent bg-brand-solid",
|
|
628
|
+
!isSelected && !isDisabled && "group-hover:bg-primary_hover",
|
|
548
629
|
isDisabled && "cursor-not-allowed opacity-50",
|
|
549
630
|
isDisabled && !isSelected && "bg-tertiary",
|
|
550
631
|
isFocusVisible && !isDisabled && focusRingShadow2,
|
|
@@ -586,7 +667,7 @@ var ToggleBase = ({ className, isHovered, isDisabled, isFocusVisible, isSelected
|
|
|
586
667
|
const classes = slim ? styles3.slim[size] : styles3.default[size];
|
|
587
668
|
const offTrackBackground = (() => {
|
|
588
669
|
if (isDisabled) return "bg-tertiary";
|
|
589
|
-
if (isHovered) return
|
|
670
|
+
if (isHovered) return "bg-toggle-track_hover";
|
|
590
671
|
return "bg-quaternary";
|
|
591
672
|
})();
|
|
592
673
|
return /* @__PURE__ */ jsx(
|
|
@@ -681,11 +762,11 @@ var DropdownItem = ({ label, children, addon, icon: Icon, avatarUrl, unstyled, s
|
|
|
681
762
|
children: [
|
|
682
763
|
state.selectionMode !== "none" && !avatarUrl && !Icon && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "mr-2" }),
|
|
683
764
|
avatarUrl && /* @__PURE__ */ jsx("div", { className: "mr-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(Avatar, { "aria-hidden": "true", size: "xs", src: avatarUrl, alt: label, className: "size-5" }) }),
|
|
684
|
-
Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-
|
|
765
|
+
Icon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", className: "mr-2 size-4 shrink-0 stroke-[2.25px] text-fg-secondary" }),
|
|
685
766
|
/* @__PURE__ */ jsx("span", { className: cx("grow truncate text-sm font-semibold text-secondary", state.isFocused && "text-secondary_hover"), children: label || (typeof children === "function" ? children(state) : children) }),
|
|
686
767
|
addon && /* @__PURE__ */ jsx("span", { className: "ml-1 shrink-0 pr-1 text-xs font-medium text-quaternary", children: addon }),
|
|
687
768
|
state.selectionMode !== "none" && (avatarUrl || Icon) && /* @__PURE__ */ jsx(SelectionIndicator, { ...state, className: "ml-1" }),
|
|
688
|
-
state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-
|
|
769
|
+
state.hasSubmenu && /* @__PURE__ */ jsx(CaretRightIcon, { "aria-hidden": "true", className: "ml-auto size-4 shrink-0 stroke-[2.25px] text-fg-secondary" })
|
|
689
770
|
]
|
|
690
771
|
}
|
|
691
772
|
)
|
|
@@ -701,21 +782,105 @@ var DropdownMenu = (props) => {
|
|
|
701
782
|
}
|
|
702
783
|
);
|
|
703
784
|
};
|
|
704
|
-
var
|
|
705
|
-
|
|
706
|
-
|
|
785
|
+
var DropdownSheetDepthContext = createContext(0);
|
|
786
|
+
function DropdownSheetCloseButton({ onClose }) {
|
|
787
|
+
return /* @__PURE__ */ jsxs(
|
|
788
|
+
"button",
|
|
707
789
|
{
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
790
|
+
type: "button",
|
|
791
|
+
onClick: (e) => {
|
|
792
|
+
e.stopPropagation();
|
|
793
|
+
onClose();
|
|
794
|
+
},
|
|
795
|
+
className: "flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full text-fg-primary transition duration-100 ease-linear hover:bg-primary_hover active:scale-[0.96] focus-visible:outline-none focus-visible:[box-shadow:0px_0px_0px_2px_var(--color-bg-primary),0px_0px_0px_4px_var(--color-focus-ring)]",
|
|
796
|
+
children: [
|
|
797
|
+
/* @__PURE__ */ jsx(XIcon, { className: "size-5", "aria-hidden": "true" }),
|
|
798
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
799
|
+
]
|
|
717
800
|
}
|
|
718
801
|
);
|
|
802
|
+
}
|
|
803
|
+
function DropdownSheetChrome({ title, onClose, children }) {
|
|
804
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
805
|
+
/* @__PURE__ */ jsxs("div", { className: cx("flex w-full shrink-0 items-center py-2 pl-4 pr-2", title ? "justify-between gap-3" : "justify-end"), children: [
|
|
806
|
+
title ? /* @__PURE__ */ jsx("p", { className: "min-w-0 flex-1 truncate text-base font-semibold text-primary", children: title }) : null,
|
|
807
|
+
/* @__PURE__ */ jsx(DropdownSheetCloseButton, { onClose })
|
|
808
|
+
] }),
|
|
809
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-[max(2.5rem,calc(env(safe-area-inset-bottom)+2rem))]", children })
|
|
810
|
+
] });
|
|
811
|
+
}
|
|
812
|
+
var DropdownPopover = ({ mobileOptions, children, className, style, ...props }) => {
|
|
813
|
+
const isMobile = useIsMobile();
|
|
814
|
+
const resolvedMobile = useMemo(() => resolveSelectMobileOptions(mobileOptions), [mobileOptions]);
|
|
815
|
+
const useMobileSheet = isMobile && resolvedMobile.sheet;
|
|
816
|
+
const overlayState = useContext(OverlayTriggerStateContext);
|
|
817
|
+
const open = overlayState?.isOpen ?? false;
|
|
818
|
+
const parentDepth = useContext(DropdownSheetDepthContext);
|
|
819
|
+
const depth = parentDepth + 1;
|
|
820
|
+
const { shouldRender, panelStyle, backdropStyle } = useMobileSheetAnimation(open, useMobileSheet);
|
|
821
|
+
useEffect(() => {
|
|
822
|
+
if (!useMobileSheet || !open) return;
|
|
823
|
+
const prev = document.body.style.overflow;
|
|
824
|
+
document.body.style.overflow = "hidden";
|
|
825
|
+
return () => {
|
|
826
|
+
document.body.style.overflow = prev;
|
|
827
|
+
};
|
|
828
|
+
}, [useMobileSheet, open]);
|
|
829
|
+
if (!useMobileSheet) {
|
|
830
|
+
return /* @__PURE__ */ jsx(
|
|
831
|
+
Popover,
|
|
832
|
+
{
|
|
833
|
+
placement: "bottom right",
|
|
834
|
+
...props,
|
|
835
|
+
style,
|
|
836
|
+
className: (state) => cx(
|
|
837
|
+
"w-62 origin-(--trigger-anchor-point) overflow-auto rounded-lg bg-primary shadow-lg ring-1 ring-secondary_alt will-change-transform",
|
|
838
|
+
state.isEntering && "duration-150 ease-out animate-in fade-in placement-right:slide-in-from-left-0.5 placement-top:slide-in-from-bottom-0.5 placement-bottom:slide-in-from-top-0.5",
|
|
839
|
+
state.isExiting && "duration-100 ease-in animate-out fade-out placement-right:slide-out-to-left-0.5 placement-top:slide-out-to-bottom-0.5 placement-bottom:slide-out-to-top-0.5",
|
|
840
|
+
typeof className === "function" ? className(state) : className
|
|
841
|
+
),
|
|
842
|
+
children
|
|
843
|
+
}
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
const close = () => overlayState?.close();
|
|
847
|
+
const showMobileSheet = shouldRender;
|
|
848
|
+
const isMobileSheetExiting = showMobileSheet && !open;
|
|
849
|
+
const scrimZIndex = 50 + (depth - 1) * 10;
|
|
850
|
+
const sheetZIndex = scrimZIndex + 1;
|
|
851
|
+
const mobileScrim = shouldRender && typeof document !== "undefined" ? createPortal(
|
|
852
|
+
/* @__PURE__ */ jsx(
|
|
853
|
+
"div",
|
|
854
|
+
{
|
|
855
|
+
className: "fixed inset-0 bg-overlay/70",
|
|
856
|
+
style: { ...backdropStyle, zIndex: scrimZIndex },
|
|
857
|
+
onClick: close,
|
|
858
|
+
"aria-hidden": "true"
|
|
859
|
+
}
|
|
860
|
+
),
|
|
861
|
+
document.body
|
|
862
|
+
) : null;
|
|
863
|
+
return /* @__PURE__ */ jsxs(DropdownSheetDepthContext.Provider, { value: depth, children: [
|
|
864
|
+
mobileScrim,
|
|
865
|
+
/* @__PURE__ */ jsx(
|
|
866
|
+
Popover,
|
|
867
|
+
{
|
|
868
|
+
placement: "bottom",
|
|
869
|
+
containerPadding: 0,
|
|
870
|
+
offset: 0,
|
|
871
|
+
...props,
|
|
872
|
+
isExiting: isMobileSheetExiting,
|
|
873
|
+
"data-dropdown-mobile-sheet": true,
|
|
874
|
+
style: { ...panelStyle, zIndex: sheetZIndex, ...style },
|
|
875
|
+
className: (state) => cx(
|
|
876
|
+
"fixed! inset-x-0! bottom-0! top-auto! right-0! left-0! flex max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] w-full! max-w-none! flex-col overflow-hidden rounded-t-2xl rounded-b-none border-x-0 border-t border-secondary bg-primary shadow-xl outline-hidden",
|
|
877
|
+
resolvedMobile.sheetClassName,
|
|
878
|
+
typeof className === "function" ? className(state) : className
|
|
879
|
+
),
|
|
880
|
+
children: /* @__PURE__ */ jsx(DropdownSheetChrome, { title: resolvedMobile.title, onClose: close, children: typeof children === "function" ? null : children })
|
|
881
|
+
}
|
|
882
|
+
)
|
|
883
|
+
] });
|
|
719
884
|
};
|
|
720
885
|
var DropdownSeparator = (props) => {
|
|
721
886
|
return /* @__PURE__ */ jsx(Separator, { ...props, className: cx("my-1 h-px w-full bg-border-secondary", props.className) });
|