@bubo-squared/ui-framework 0.1.74 → 0.1.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Buttons/Button.tsx","../src/lib/utils.tsx","../src/components/Buttons/ButtonGroup.tsx","../src/components/Buttons/IconButton.tsx","../src/components/Buttons/IconButtonGroup.tsx","../src/components/Buttons/LinkButton.tsx","../src/components/Buttons/MessageButton.tsx","../src/components/Content/Avatar.tsx","../src/components/Content/Badge.tsx","../src/components/Content/BadgeDigit.tsx","../src/components/Content/BadgeDot.tsx","../src/components/Content/BadgeStatus.tsx","../src/components/Content/Divider.tsx","../src/components/Content/Progress.tsx","../src/components/Content/StatusAvatar.tsx","../src/components/Content/Tag.tsx","../src/components/Inputs/Checkbox.tsx","../src/components/Inputs/Dropdown.tsx","../src/components/Inputs/Field.tsx","../src/components/Inputs/PasswordInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/InputShell.tsx","../src/components/Inputs/PhoneInput.tsx","../src/components/ui/button.tsx","../src/components/ui/command.tsx","../src/components/ui/dialog.tsx","../src/components/ui/popover.tsx","../src/components/ui/scroll-area.tsx","../src/components/Inputs/RadioGroup.tsx","../src/components/Inputs/SearchInput.tsx","../src/components/Inputs/Slider.tsx","../src/components/Inputs/TextArea.tsx","../src/components/Inputs/TextInput.tsx","../src/components/Inputs/Toggle.tsx","../src/components/Inputs/WebsiteInput.tsx","../src/components/Feedback/Popover.tsx","../src/components/Navigation/Breadcrumb.tsx","../src/components/Logo/LogoIcon.tsx","../src/components/Logo/Logo.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n [\r\n 'btn-primary',\r\n 'focus-ring-primary',\r\n ],\r\n secondary:\r\n [\r\n 'btn-secondary',\r\n 'focus-ring-secondary',\r\n ],\r\n outline:\r\n [\r\n 'btn-outline',\r\n 'focus-ring-outline',\r\n ],\r\n destructive:\r\n [\r\n 'btn-destructive',\r\n 'focus-ring-error',\r\n ],\r\n },\r\n size: {\r\n sm: ['px-1.5', 'py-1', 'gap-1'],\r\n md: ['px-2', 'py-1', 'gap-1.5'],\r\n lg: ['px-2.5', 'py-1', 'gap-1.5'],\r\n xl: ['px-3', 'py-0.5', 'gap-2'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nconst buttonIconVariants = cva('relative', {\r\n variants: {\r\n size: {\r\n sm: ['size-5', '*:size-5'],\r\n md: ['size-6', '*:size-6'],\r\n lg: ['size-6', '*:size-6'],\r\n xl: ['size-8', '*:size-8'],\r\n },\r\n }\r\n})\r\n\r\nconst buttonTextVariants = cva('flex text-center justify-center font-normal', {\r\n variants: {\r\n size: {\r\n sm: ['text-xl', 'leading-7'],\r\n md: ['text-2xl', 'leading-8'],\r\n lg: ['h-10', 'text-3xl', 'leading-9'],\r\n xl: ['h-11', 'text-4xl', 'leading-10'],\r\n }\r\n }\r\n})\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean,\r\n suffixIcon?: React.ReactNode,\r\n prefixIcon?: React.ReactNode,\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size = \"md\",\r\n asChild = false, children,\r\n suffixIcon, prefixIcon,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {prefixIcon && <div className={cn(buttonIconVariants({ size }))}>{prefixIcon}</div>}\r\n <div className={cn(buttonTextVariants({ size }))}>{children}</div>\r\n {suffixIcon && <div className={cn(buttonIconVariants({ size }))}>{suffixIcon}</div>}\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport const InputContainerTemplate = ({ children }: { children: React.ReactNode }) => {\r\n\r\n return (\r\n <div style={{ width: \"350px\" }}>\r\n {children}\r\n </div>\r\n )\r\n}\r\n\r\n","import { cva } from \"class-variance-authority\";\r\n\r\nconst buttonGroupVariants = cva(\r\n 'flex items-center justify-center gap-4 pt-4 w-[320px] min-w-[320px]',\r\n {\r\n variants: {\r\n variant: {\r\n vertical: ['flex-col'],\r\n horizontal: ['flex-row'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'horizontal',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport const ButtonGroup: React.FC<ButtonGroupProps> = (props) => {\r\n const { orientation = 'horizontal' } = props;\r\n\r\n return (\r\n <div className={buttonGroupVariants({ variant: orientation })} {...props}>\r\n {props.children}\r\n </div>\r\n )\r\n}\r\n ","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst iconButtonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden p-1.5 cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n [\r\n 'btn-primary',\r\n 'focus-ring-primary',\r\n ],\r\n secondary:\r\n [\r\n 'btn-secondary',\r\n 'focus-ring-secondary',\r\n ],\r\n outline:\r\n [\r\n 'btn-outline',\r\n 'focus-ring-outline',\r\n ],\r\n destructive:\r\n [\r\n 'btn-destructive-outline',\r\n 'focus-ring-error-outline',\r\n ],\r\n },\r\n size: {\r\n sm: ['[&>.buttonIcon>svg]:size-5'],\r\n md: ['[&>.buttonIcon>svg]:size-6'],\r\n lg: ['[&>.buttonIcon>svg]:size-8'],\r\n xl: ['[&>.buttonIcon>svg]:size-9'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof iconButtonVariants> {\r\n asChild?: boolean,\r\n icon: React.ReactNode,\r\n}\r\n\r\nexport const IconButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size,\r\n asChild = false, icon,\r\n ...rest } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(iconButtonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n <div className={\"buttonIcon flex items-center justify-center\"}>{icon}</div>\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nIconButton.displayName = 'IconButton'\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { IconButton } from \"@/components/Buttons/IconButton\";\r\nimport type { ButtonProps as IconButtonProps } from \"@/components/Buttons/IconButton\";\r\nimport { cva } from \"class-variance-authority\";\r\n\r\ntype IconButtonSize = IconButtonProps[\"size\"];\r\n\r\nexport interface IconButtonGroupItem {\r\n\ticon: React.ReactNode;\r\n\tariaLabel: string;\r\n\tonClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n\tdisabled?: boolean;\r\n}\r\n\r\nexport interface IconButtonGroupProps\r\n\textends React.HTMLAttributes<HTMLDivElement> {\r\n\t/** Icons to render as a segmented group. */\r\n\titems: IconButtonGroupItem[];\r\n\t/** Shared size for all icon buttons. */\r\n\tsize?: IconButtonSize;\r\n}\r\n\r\nconst IconGroupLinesClass = \"inline-flex items-center justify-center gap-0 \" +\r\n\t\"[&>button]:outline-none! [&>button]:rounded-none \" +\r\n\t\"[&>button:focus]:shadow-none [&>button:focus]:bg-(--border-secondary) \" +\r\n\t\"[&>button:first-child]:rounded-l-4 [&>button:last-child]:rounded-r-4\";\r\n\r\n\r\nconst IconGroupSizeVariants = cva(\"\", {\r\n\tvariants: {\r\n\t\tsize: {\r\n\t\t\tsm: \"[&>button]:px-1.5\",\r\n\t\t\tmd: \"[&>button]:px-2\",\r\n\t\t\tlg: \"[&>button]:px-2\",\r\n\t\t\txl: \"[&>button]:px-3\",\r\n\t\t}\r\n\t},\r\n\tdefaultVariants: {\r\n\t\tsize: \"sm\"\r\n\t}\r\n})\r\n\r\nexport const IconButtonGroup: React.FC<IconButtonGroupProps> = (props) => {\r\n\tconst { items, size = \"sm\", className, ...rest } = props;\r\n\r\n\tif (!items || items.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={cn(\r\n\t\t\t\tIconGroupLinesClass,\r\n\t\t\t\tIconGroupSizeVariants({ size }),\r\n\t\t\t\tclassName\r\n\t\t\t)}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{items.map((item, index) => (\r\n\t\t\t\t<IconButton\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tvariant={\"secondary\"}\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\ticon={item.icon}\r\n\t\t\t\t\taria-label={item.ariaLabel}\r\n\t\t\t\t\tdisabled={item.disabled}\r\n\t\t\t\t\tclassName={cn(\r\n\t\t\t\t\t\t\"rounded-none border-1 border-(--border-secondary) text-(--text-primary) \",\r\n\t\t\t\t\t\tindex === 0 && \"rounded-l-6\",\r\n\t\t\t\t\t\tindex === items.length - 1 && \"rounded-r-6\",\r\n\t\t\t\t\t\tindex > 0 && \"-ml-px\"\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tonClick={item.onClick}\r\n\t\t\t\t/>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nIconButtonGroup.displayName = \"IconButtonGroup\";\r\n\r\n","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst linkButtonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden gap-2 cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n ['btn-link-primary'],\r\n secondary:\r\n ['btn-link-secondary'],\r\n destructive:\r\n ['btn-link-destructive'],\r\n },\r\n size: {\r\n sm: ['py-2', 'px-1'],\r\n md: ['py-2.5', 'px-2'],\r\n lg: ['py-2.5', 'px-2'],\r\n xl: ['py-3', 'px-3'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nconst linkButtonIconVariants = cva('relative', {\r\n variants: {\r\n size: {\r\n sm: ['size-5', '*:size-5'],\r\n md: ['size-5', '*:size-5'],\r\n lg: ['size-6', '*:size-6'],\r\n xl: ['size-6', '*:size-6'],\r\n },\r\n }\r\n})\r\n\r\nconst linkButtonTextVariants = cva('inline-flex items-center text-center font-medium', {\r\n variants: {\r\n size: {\r\n sm: ['text-sm', 'leading-5'],\r\n md: ['text-sm', 'leading-5',],\r\n lg: ['text-base', 'leading-6'],\r\n xl: ['text-base', 'leading-6'],\r\n }\r\n }\r\n})\r\n\r\nexport interface LinkButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof linkButtonVariants> {\r\n asChild?: boolean,\r\n suffixIcon?: React.ReactNode,\r\n prefixIcon?: React.ReactNode,\r\n}\r\n\r\nexport const LinkButton = React.forwardRef<HTMLButtonElement, LinkButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size = \"sm\",\r\n asChild = false, children,\r\n suffixIcon, prefixIcon,\r\n ...rest } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(linkButtonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {prefixIcon && <div className={cn(linkButtonIconVariants({ size }))}>{prefixIcon}</div>}\r\n <div className={cn(linkButtonTextVariants({ size }))}>{children}</div>\r\n {suffixIcon && <div className={cn(linkButtonIconVariants({ size }))}>{suffixIcon}</div>}\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nLinkButton.displayName = 'LinkButton'\r\n\r\n","import * as React from \"react\";\r\n\r\ntype Status = \"idle\" | \"loading\" | \"success\" | \"error\";\r\n\r\ntype MessageButtonProps = Omit<\r\n React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n \"onClick\"\r\n> & {\r\n onClick?: () => void | Promise<void>;\r\n idleLabel?: string;\r\n loadingLabel?: string;\r\n successLabel?: string;\r\n errorLabel?: string;\r\n feedbackDuration?: number;\r\n icon?: React.ReactNode;\r\n};\r\n\r\nexport const MessageButton: React.FC<MessageButtonProps> = (props) => {\r\n\r\n const {\r\n onClick,\r\n idleLabel = \"Save\",\r\n loadingLabel = \"Saving…\",\r\n successLabel = \"Saved!\",\r\n errorLabel = \"Error\",\r\n feedbackDuration = 1500,\r\n className = \"\",\r\n ...buttonProps\r\n } = props;\r\n\r\n const [status, setStatus] = React.useState<Status>(\"idle\");\r\n\r\n const handleClick = async (_event: React.MouseEvent<HTMLButtonElement>) => {\r\n if (status === \"loading\") return;\r\n\r\n setStatus(\"loading\");\r\n\r\n try {\r\n await Promise.resolve(onClick?.()); // handles sync or async onClick\r\n setStatus(\"success\");\r\n } catch (err) {\r\n console.error(err);\r\n setStatus(\"error\");\r\n } finally {\r\n if (feedbackDuration > 0) {\r\n window.setTimeout(() => setStatus(\"idle\"), feedbackDuration);\r\n }\r\n }\r\n };\r\n\r\n const label =\r\n status === \"loading\"\r\n ? loadingLabel\r\n : status === \"success\"\r\n ? successLabel\r\n : status === \"error\"\r\n ? errorLabel\r\n : idleLabel;\r\n\r\n // tweak these classes to match your design system / tokens\r\n const statusClasses =\r\n status === \"success\"\r\n ? \"btn-msg-success\"\r\n : status === \"error\"\r\n ? \"btn-destructive\"\r\n : \"btn-outline focus-ring-outline\";\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n {...buttonProps}\r\n onClick={handleClick}\r\n className={`inline-flex items-center justify-center rounded-4 px-1.5 py-1 gap-1 text-sm transition-colors cursor-pointer ${statusClasses} ${className}`}\r\n >\r\n {props.icon && <div className={\"size-5 *:size-5 relative\"}>{props.icon}</div>}\r\n <div className={\"text-center text-xl font-normal leading-7\"}>{label}</div>\r\n </button>\r\n );\r\n}\r\n\r\nMessageButton.displayName = \"MessageButton\";","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { UserIcon } from \"@bubo-squared/icons\";\r\n\r\ntype AvatarVariant = \"initial\" | \"icon\" | \"image\";\r\n\r\nconst avatarVariants = cva(\r\n \"relative inline-flex items-center justify-center rounded-full border-(--border-secondary) border-1 bg-(--background-primary) text-(--text-primary) overflow-hidden \" +\r\n \"hover:border-(--focus-secondary) focus-visible:border-(--focus-primary) focus-visible:outline-none\",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"w-5 h-5 hover:border-2 focus-visible:border-2\",\r\n \"24\": \"w-6 h-6 hover:border-2 focus-visible:border-2\",\r\n \"32\": \"w-8 h-8 hover:border-2 focus-visible:border-2\",\r\n \"40\": \"w-10 h-10 hover:border-2 focus-visible:border-2\",\r\n \"48\": \"w-12 h-12 hover:border-2 focus-visible:border-2\",\r\n \"56\": \"w-14 h-14 hover:border-4 focus-visible:border-4\",\r\n \"64\": \"w-16 h-16 hover:border-4 focus-visible:border-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nconst avatarInitialsVariants = cva(\r\n \"flex items-center justify-center text-(--text-primary) leading-none \",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"footnote-xs-medium\",\r\n \"24\": \"footnote-medium\",\r\n \"32\": \"paragraph-s font-medium\",\r\n \"40\": \"paragraph-m font-medium\",\r\n \"48\": \"paragraph-l font-medium\",\r\n \"56\": \"subtitle font-medium\",\r\n \"64\": \"h6-title font-medium\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nconst avatarIconVariants = cva(\r\n \"flex items-center justify-center text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"size-3 [&>svg]:size-3\",\r\n \"24\": \"size-3.5 [&>svg]:size-3.5\",\r\n \"32\": \"size-4 [&>svg]:size-4\",\r\n \"40\": \"size-5 [&>svg]:size-5\",\r\n \"48\": \"size-6 [&>svg]:size-6\",\r\n \"56\": \"size-7 [&>svg]:size-7\",\r\n \"64\": \"size-8 [&>svg]:size-8\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nexport interface AvatarProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof avatarVariants> {\r\n /**\r\n * Visual variant: initials, icon or image.\r\n */\r\n variant?: AvatarVariant;\r\n /**\r\n * Text rendered when variant=\"initial\".\r\n */\r\n initials?: string;\r\n /**\r\n * Image source when variant=\"image\".\r\n */\r\n src?: string;\r\n /**\r\n * Accessible alt text for the image.\r\n */\r\n alt?: string;\r\n /**\r\n * Render as child via Radix Slot. When true, Avatar will not render a native\r\n * button element, but instead pass props to the child component.\r\n */\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Avatar = React.forwardRef<HTMLButtonElement, AvatarProps>(\r\n (props, ref) => {\r\n const {\r\n asChild = false,\r\n variant = \"initial\",\r\n size = \"32\",\r\n initials = \"RA\",\r\n src,\r\n alt,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"button\";\r\n\r\n const hasImage = variant === \"image\" && typeof src === \"string\" && src.length > 0;\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(avatarVariants({ size }), className)}\r\n {...rest}\r\n >\r\n {hasImage ? (\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : null}\r\n\r\n {!hasImage && variant === \"initial\" && (\r\n <span className={cn(avatarInitialsVariants({ size }), \"relative bottom-px\")} style={{ marginBottom: 0 }}>{initials}</span>\r\n )}\r\n\r\n {!hasImage && variant === \"icon\" && (\r\n <span className={cn(avatarIconVariants({ size }))}>\r\n <UserIcon />\r\n </span>\r\n )}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nAvatar.displayName = \"Avatar\";\r\n\r\n","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center justify-center rounded-4 leading-none whitespace-nowrap gap-1 px-1 py-0\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"px-1 paragraph-s\",\r\n md: \"px-1 paragraph-m\",\r\n lg: \"px-1.5 subtitle\",\r\n xl: \"px-2 h6-title\",\r\n },\r\n variant: {\r\n primary:\r\n \"bg-(--background-secondary) text-(--text-primary)\",\r\n secondary:\r\n \"bg-(--background-primary) border-1 border-(--border-primary) text-(--text-primary)\",\r\n active:\r\n \"bg-(--color-ac-lilac) text-(--text-neutral-badge-black)\",\r\n informal:\r\n \"bg-(--color-ac-neon-blue) text-(--text-neutral-badge-black)\",\r\n success:\r\n \"bg-(--color-ac-neon-green) text-(--text-neutral-badge-black)\",\r\n warning:\r\n \"bg-(--color-ac-light-orange) text-(--text-neutral-badge-black)\",\r\n error:\r\n \"bg-(--color-s-error-300) text-(--text-neutral-badge-black)\",\r\n disabled:\r\n \"bg-(--background-primary-disabled) border-1 border-(--border-primary-disabled) text-(--text-primary-disabled)\",\r\n \"double-default\":\r\n \"bg-(--background-secondary) text-(--text-primary)\",\r\n \"double-current\":\r\n \"bg-(--color-ac-lilac) text-(--text-neutral-badge-black)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n variant: \"primary\",\r\n },\r\n }\r\n);\r\n\r\ntype BadgeVariant =\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"informal\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"error\"\r\n | \"disabled\"\r\n | \"active\"\r\n\r\ntype BadgeSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport interface BadgeProps\r\n extends VariantProps<typeof badgeVariants> {\r\n asChild?: boolean;\r\n label: string;\r\n value?: string;\r\n className?: string;\r\n size?: BadgeSize;\r\n variant?: BadgeVariant;\r\n}\r\n\r\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(\r\n (props, ref) => {\r\n const {\r\n asChild = false,\r\n label,\r\n value,\r\n size = \"sm\",\r\n variant = \"primary\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"div\";\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(badgeVariants({ size, variant }), className)}\r\n {...rest}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {value ? (\r\n <>\r\n <span className=\"font-normal\">{label}</span>\r\n <span className=\"font-normal\">:</span>\r\n <span className=\"font-medium\">{value}</span>\r\n </>\r\n ) : (\r\n <span className=\"font-normal\">{label}</span>\r\n )}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nBadge.displayName = \"Badge\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeDigitVariants = cva(\r\n \"inline-flex items-center justify-center leading-none whitespace-nowrap text-(--text-primary-inverse)\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"px-[6px] rounded-2 caption-medium\",\r\n md: \"px-2 py-[2px] rounded-4 paragraph-s-medium\",\r\n },\r\n variant: {\r\n primary:\r\n \"bg-(--background-brand)\",\r\n secondary:\r\n \"bg-(--background-primary) border-1 border-(--border-secondary) text-(--text-secondary)\",\r\n informal:\r\n \"bg-(--background-informal)\",\r\n success:\r\n \"bg-(--background-success)\",\r\n warning:\r\n \"bg-(--background-warning)\",\r\n error:\r\n \"bg-(--background-error)\",\r\n disabled:\r\n \"bg-(--background-primary) border-1 border-(--border-primary-disabled) text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n variant: \"primary\",\r\n },\r\n }\r\n);\r\n\r\nexport type BadgeDigitSize = \"sm\" | \"md\";\r\n\r\nexport type BadgeDigitVariant =\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"informal\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"error\"\r\n | \"disabled\";\r\n\r\nexport interface BadgeDigitProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeDigitVariants> {\r\n /** The numeric value to display inside the badge. */\r\n value: string | number;\r\n size?: BadgeDigitSize;\r\n variant?: BadgeDigitVariant;\r\n}\r\n\r\nexport const BadgeDigit = React.forwardRef<HTMLDivElement, BadgeDigitProps>(\r\n (props, ref) => {\r\n const {\r\n value,\r\n size = \"sm\",\r\n variant = \"primary\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(badgeDigitVariants({ size, variant }), className)}\r\n style={{ marginBottom: 0 }}\r\n {...rest}\r\n >\r\n {String(value)}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBadgeDigit.displayName = \"BadgeDigit\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeDotVariants = cva(\"rounded-12 size-3\", {\r\n variants: {\r\n status: {\r\n disabled: \"bg-(--text-primary)\",\r\n informal: \"bg-(--background-informal)\",\r\n \"success/online\": \"bg-(--background-success)\",\r\n warning: \"bg-(--background-warning)\",\r\n error: \"bg-(--background-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n status: \"disabled\",\r\n },\r\n});\r\n\r\nexport interface BadgeDotProps\r\n extends VariantProps<typeof badgeDotVariants> {\r\n className?: string;\r\n}\r\n\r\nexport const BadgeDot: React.FC<BadgeDotProps> = ({ status, className }) => {\r\n return <div className={cn(badgeDotVariants({ status }), className)} />;\r\n};\r\n\r\nBadgeDot.displayName = \"BadgeDot\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface BadgeStatusProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n label: string;\r\n active?: boolean;\r\n dotClassName?: string;\r\n}\r\n\r\nexport const BadgeStatus = React.forwardRef<HTMLDivElement, BadgeStatusProps>(\r\n (props, ref) => {\r\n const {\r\n label,\r\n active = true,\r\n className,\r\n dotClassName,\r\n ...rest\r\n } = props;\r\n\r\n const textClasses = active\r\n ? \"caption-medium text-(--text-primary)\"\r\n : \"caption-medium text-(--text-primary-disabled)\";\r\n\r\n const dotClasses = active\r\n ? \"bg-(--background-informal)\"\r\n : \"bg-(--background-primary)\";\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"inline-flex items-center gap-2\", className)}\r\n {...rest}\r\n >\r\n <span\r\n className={cn(\r\n \"shrink-0 size-3 rounded-full\",\r\n dotClasses,\r\n dotClassName\r\n )}\r\n />\r\n <span className={textClasses} style={{ marginBottom: 0 }}>{label}</span>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBadgeStatus.displayName = \"BadgeStatus\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/Buttons/Button\";\r\nimport type { ButtonProps as PrimaryButtonProps } from \"@/components/Buttons/Button\";\r\nimport { IconButton } from \"@/components/Buttons/IconButton\";\r\nimport type { ButtonProps as IconButtonProps } from \"@/components/Buttons/IconButton\";\r\nimport { IconButtonGroup } from \"@/components/Buttons/IconButtonGroup\";\r\nimport type {\r\n IconButtonGroupItem,\r\n IconButtonGroupProps,\r\n} from \"@/components/Buttons/IconButtonGroup\";\r\nimport { TargetIcon } from \"@bubo-squared/icons\";\r\n\r\nexport type DividerType =\r\n | \"line\"\r\n | \"text-lines\"\r\n | \"icon-lines\"\r\n | \"icon-group-lines\"\r\n | \"button-lines\";\r\n\r\ntype SimpleDividerType = Exclude<DividerType, \"button-lines\" | \"icon-lines\" | \"icon-group-lines\">;\r\n\r\ninterface BaseDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type?: SimpleDividerType;\r\n /** Label shown for text variant (e.g. \"OR\"). */\r\n label?: string;\r\n}\r\n\r\ntype ButtonVariant = PrimaryButtonProps[\"variant\"];\r\ntype IconButtonVariant = IconButtonProps[\"variant\"];\r\ntype IconGroupSize = IconButtonGroupProps[\"size\"];\r\n\r\ninterface IconLinesDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"icon-lines\";\r\n /** Icon rendered between the lines. */\r\n icon: React.ReactNode;\r\n /** Variant for the icon button between the lines. */\r\n iconButtonVariant?: IconButtonVariant;\r\n /** Click handler for the icon button between the lines. */\r\n onIconClick: React.MouseEventHandler<HTMLButtonElement>;\r\n /** Accessible label for the icon button. Falls back to \"More options\". */\r\n ariaLabel?: string;\r\n}\r\n\r\ninterface ButtonLinesDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"button-lines\";\r\n /** Text inside the button between the lines. */\r\n buttonLabel: string;\r\n /** onClick handler for the button between the lines. */\r\n onButtonClick: React.MouseEventHandler<HTMLButtonElement>;\r\n /** Variant for the button between the lines. */\r\n buttonVariant?: ButtonVariant;\r\n}\r\n\r\ninterface IconGroupLinesDividerProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"icon-group-lines\";\r\n /** Items rendered as a segmented icon group between the lines. */\r\n iconGroupItems: IconButtonGroupItem[];\r\n /** Shared size for the icon group; defaults to IconButtonGroup default. */\r\n iconGroupSize?: IconGroupSize;\r\n}\r\n\r\nexport type DividerProps =\r\n | BaseDividerProps\r\n | IconLinesDividerProps\r\n | IconGroupLinesDividerProps\r\n | ButtonLinesDividerProps;\r\n\r\nconst lineClass = \"h-px flex-1 bg-(--border-secondary)\";\r\n\r\nexport const Divider: React.FC<DividerProps> = (props) => {\r\n const { type = \"line\", className, ...rest } = props;\r\n\r\n const showCenter = type !== \"line\";\r\n\r\n const textLabel =\r\n type === \"text-lines\" && \"label\" in rest && rest.label\r\n ? rest.label\r\n : \"OR\";\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex w-full items-center\",\r\n showCenter ? \"gap-2\" : \"gap-0\",\r\n className\r\n )}\r\n {...rest}\r\n >\r\n <div className={lineClass} />\r\n\r\n {type === \"text-lines\" && (\r\n <span\r\n className=\"footnote text-(--text-secondary)\"\r\n style={{ marginBottom: 0 }}\r\n >\r\n {textLabel}\r\n </span>\r\n )}\r\n\r\n {type === \"icon-lines\" && (\r\n <IconButton\r\n variant={\r\n props.type === \"icon-lines\" && props.iconButtonVariant\r\n ? props.iconButtonVariant\r\n : \"secondary\"\r\n }\r\n size=\"sm\"\r\n aria-label={\r\n props.type === \"icon-lines\" && props.ariaLabel\r\n ? props.ariaLabel\r\n : textLabel || \"More options\"\r\n }\r\n icon={props.type === \"icon-lines\" ? props.icon : <TargetIcon />}\r\n onClick={props.type === \"icon-lines\" ? props.onIconClick : undefined}\r\n />\r\n )}\r\n\r\n {type === \"icon-group-lines\" && (\r\n props.type === \"icon-group-lines\" ? (\r\n <IconButtonGroup\r\n items={props.iconGroupItems}\r\n size={props.iconGroupSize}\r\n />\r\n ) : null\r\n )}\r\n\r\n {type === \"button-lines\" && (\r\n <Button\r\n variant={\r\n props.type === \"button-lines\" && props.buttonVariant\r\n ? props.buttonVariant\r\n : \"secondary\"\r\n }\r\n size=\"md\"\r\n onClick={props.type === \"button-lines\" ? props.onButtonClick : undefined}\r\n >\r\n {props.type === \"button-lines\" ? props.buttonLabel : \"Label\"}\r\n </Button>\r\n )}\r\n\r\n {showCenter && <div className={lineClass} />}\r\n </div>\r\n );\r\n};\r\n\r\nDivider.displayName = \"Divider\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\r\n\r\nexport interface ProgressProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n /** Current value, from 0 to 100. */\r\n value: number;\r\n /** Optional label shown above the bar with the percentage on the right. */\r\n label?: string;\r\n /** Optional hint text shown below the bar. */\r\n hint?: string;\r\n /** Controls whether the label/percentage row is rendered. */\r\n showLabel?: boolean;\r\n /** Controls whether the hint text is rendered. */\r\n showHint?: boolean;\r\n /** Visual height of the bar. */\r\n size?: ProgressSize;\r\n}\r\n\r\nconst sizeToBarClasses: Record<ProgressSize, string> = {\r\n lg: \"h-4 rounded-16\",\r\n md: \"h-2 rounded-8\",\r\n sm: \"h-1 rounded-4\",\r\n};\r\n\r\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\r\n (props, ref) => {\r\n const {\r\n value,\r\n label,\r\n hint,\r\n showLabel = true,\r\n showHint = !!hint,\r\n size = \"lg\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const clamped = Number.isFinite(value)\r\n ? Math.min(100, Math.max(0, value))\r\n : 0;\r\n\r\n const percentageLabel = `${Math.round(clamped)}%`;\r\n\r\n const barHeightClasses = sizeToBarClasses[size];\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col gap-2 items-start w-full\", className)}\r\n role=\"progressbar\"\r\n aria-valuenow={clamped}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {showLabel && label && (\r\n <div className=\"flex w-full items-center justify-between\">\r\n <span className=\"paragraph-s-bold text-(--text-primary)\" style={{ marginBottom: 0 }}>{label}</span>\r\n <span className=\"footnote text-(--text-secondary)\" style={{ marginBottom: 0 }}>\r\n {percentageLabel}\r\n </span>\r\n </div>\r\n )}\r\n\r\n <div className={cn(\"w-full bg-(--chart-mono) overflow-hidden\", barHeightClasses)}>\r\n <div\r\n className={cn(\r\n \"bg-(--chart-brand) h-full\",\r\n size === \"lg\" ? \"rounded-4\" : size === \"md\" ? \"rounded-2\" : \"rounded-[1px]\"\r\n )}\r\n style={{ width: `${clamped}%` }}\r\n />\r\n </div>\r\n\r\n {showHint && hint && (\r\n <p className=\"caption text-(--text-secondary)\" style={{ marginBottom: 0 }}>\r\n {hint}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nProgress.displayName = \"Progress\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\r\n BookmarkCheckIcon,\r\n CheckIcon,\r\n CrossIcon,\r\n PlusIcon,\r\n StarIcon,\r\n} from \"@bubo-squared/icons\";\r\n\r\nexport type StatusAvatarVariant =\r\n | \"verified\"\r\n | \"bookmark\"\r\n | \"favorite\"\r\n | \"add\"\r\n | \"remove\"\r\n | \"offline\"\r\n | \"online\"\r\n | \"away\"\r\n | \"busy\";\r\n\r\ntype IconVariant =\r\n | \"verified\"\r\n | \"bookmark\"\r\n | \"favorite\"\r\n | \"add\"\r\n | \"remove\";\r\n\r\nconst iconStatusVariants = cva(\r\n \"inline-flex size-5 items-center justify-center rounded-full border-1 border-(--text-primary-inverse) p-1\",\r\n {\r\n variants: {\r\n variant: {\r\n verified: \"bg-(--background-informal)\",\r\n bookmark: \"bg-(--background-brand)\",\r\n favorite: \"bg-(--background-success)\",\r\n add: \"bg-(--background-primary-hover)\",\r\n remove: \"bg-(--background-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"verified\",\r\n },\r\n }\r\n);\r\n\r\nconst presenceDotBase =\r\n \"inline-flex h-5 w-5 items-center justify-center\";\r\n\r\nconst presenceDotByVariant: Record<\r\n Exclude<StatusAvatarVariant, IconVariant>,\r\n string\r\n> = {\r\n offline:\r\n \"bg-(--background-primary) border-1 border-(--text-primary-inverse)\",\r\n online:\r\n \"bg-(--background-success) border-1 border-(--text-primary-inverse)\",\r\n away:\r\n \"bg-(--background-warning) border-1 border-(--text-primary-inverse)\",\r\n busy:\r\n \"bg-(--background-error) border-1 border-(--text-primary-inverse)\",\r\n};\r\n\r\nexport interface StatusAvatarProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Visual style of the status badge.\r\n */\r\n variant?: StatusAvatarVariant;\r\n}\r\n\r\nexport const StatusAvatar = React.forwardRef<\r\n HTMLDivElement,\r\n StatusAvatarProps\r\n>((props, ref) => {\r\n const { variant = \"verified\", className, ...rest } = props;\r\n\r\n if (\r\n variant === \"offline\" ||\r\n variant === \"online\" ||\r\n variant === \"away\" ||\r\n variant === \"busy\"\r\n ) {\r\n const dotClasses = presenceDotByVariant[variant];\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n presenceDotBase,\r\n className\r\n )}\r\n {...rest}\r\n >\r\n <div className={cn(dotClasses, \"size-3.5 rounded-full\")} />\r\n </div>\r\n );\r\n }\r\n\r\n const iconVariant = variant as IconVariant;\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(iconStatusVariants({ variant: iconVariant }), className)}\r\n {...rest}\r\n >\r\n {iconVariant === \"verified\" && (\r\n <CheckIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"bookmark\" && (\r\n <BookmarkCheckIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"favorite\" && (\r\n <StarIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"add\" && (\r\n <PlusIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"remove\" && (\r\n <CrossIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\nStatusAvatar.displayName = \"StatusAvatar\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n\r\nconst tagVariants = cva(\r\n \"inline-flex flex-row items-center justify-center rounded-6 gap-2 px-3 overflow-hidden \" +\r\n \"border-1 border-(--border-secondary) bg-(--background-neutral) \" +\r\n \"hover:border-(--border-secondary-hover) \" +\r\n \"focus:border-(--border-brand) focus-ring-primary \",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"py-0.5\",\r\n md: \"py-1.5\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n }\r\n }\r\n);\r\n\r\nconst disabledTag = \"pointer-events-none border-(--border-secondary-disabled) bg-(--background-neutral-disabled) text-(--text-primary-disabled)\"\r\n\r\nconst iconClasses = \"flex items-center justify-center w-5 h-5 [&>*]:w-5 [&>*]:h-5 shrink-0 text-(--text-primary)\";\r\n\r\nexport interface TagProps extends\r\n VariantProps<typeof tagVariants> {\r\n asChild?: boolean;\r\n label: string;\r\n value?: string;\r\n className?: string;\r\n leadingIcon?: React.ReactElement<{ disabled?: boolean }>;\r\n trailingIcon?: React.ReactElement<{ disabled?: boolean }>;\r\n size: \"sm\" | \"md\";\r\n disabled?: boolean;\r\n}\r\n\r\n\r\nexport const Tag = React.forwardRef<HTMLDivElement, TagProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n size = \"sm\",\r\n className,\r\n asChild = false,\r\n disabled = false,\r\n label,\r\n value,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : 'div'\r\n\r\n const leading = props.leadingIcon && React.isValidElement(props.leadingIcon)\r\n ? React.cloneElement(props.leadingIcon, { disabled, ...props.leadingIcon.props })\r\n : null;\r\n\r\n const trailing = props.trailingIcon && React.isValidElement(props.trailingIcon)\r\n ? React.cloneElement(props.trailingIcon, { disabled, ...props.trailingIcon.props })\r\n : null;\r\n\r\n return (\r\n <Comp\r\n className={cn(tagVariants({ size }), disabled && disabledTag, className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {leading && <div className={iconClasses}>{leading}</div>}\r\n {value ? (\r\n <div className=\"flex flex-row gap-1 items-center\">\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default font-normal\"}>{label}</span>\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default font-normal\"}>:</span>\r\n <span className={\"text-(--text-primary) paragraph-l-medium mb-0! cursor-default font-medium\"}>{value}</span>\r\n </div>\r\n ) : (\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default\"}>{label}</span>\r\n )}\r\n {trailing && <div className={iconClasses}>{trailing}</div>}\r\n </Comp>\r\n )\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { CheckIcon } from \"@bubo-squared/icons\";\r\nimport { MinusIcon } from \"@bubo-squared/icons\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface CheckboxProps\r\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\r\n label?: string;\r\n}\r\n\r\nexport function Checkbox({ label, className, ...props }: CheckboxProps) {\r\n return (\r\n <label className=\"inline-flex items-center gap-(--space-12) cursor-pointer select-none\">\r\n <CheckboxPrimitive.Root\r\n className={cn(\r\n \"group flex h-5 w-5 items-center justify-center rounded-2 border border-(--border-secondary) bg-(--background-neutral) text-(--text-primary)\",\r\n \"data-[state=checked]:bg-(--background-brand) data-[state=checked]:text-(--text-button-white) data-[state=checked]:border-none\",\r\n \"data-[state=indeterminate]:bg-(--background-brand) data-[state=indeterminate]:text-(--text-button-white) data-[state=indeterminate]:border-none\",\r\n \"data-[state=checked]:hover:bg-(--background-brand-hover) data-[state=indeterminate]:hover:bg-(--background-brand-hover)\",\r\n \"focus-visible:border-(--border-brand)\",\r\n \"disabled:bg-(--background-primary-disabled) disabled:border-none disabled:text-(--icon-primary-disabled)\",\r\n \"data-[state=checked]:disabled:bg-(--background-primary-disabled) data-[state=checked]:disabled:border-none data-[state=checked]:disabled:text-(--icon-primary-disabled)\",\r\n \"data-[state=indeterminate]:disabled:bg-(--background-primary-disabled) data-[state=indeterminate]:disabled:border-none data-[state=indeterminate]:disabled:text-(--icon-primary-disabled)\",\r\n \"focus-ring-primary hover:cursor-pointer hover:border-(--border-secondary-hover)\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\r\n <CheckIcon className=\"h-5 w-5 hidden group-data-[state=checked]:block\" />\r\n <MinusIcon className=\"h-5 w-5 hidden group-data-[state=indeterminate]:block\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n\r\n {label && (\r\n <span className=\"paragraph-m-medium text-(--text-primary)\" style={{ marginBottom: 0 }}>\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n} ","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ChevronDownIcon } from \"@bubo-squared/icons\";\r\n\r\nexport type DropdownSize = \"large\" | \"extra-large\";\r\nexport type DropdownStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport interface DropdownOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nconst dropdownWrapperBase =\r\n \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nconst dropdownTriggerVariants = cva(\r\n \"group flex w-full items-center justify-between rounded-4 border bg-(--background-primary) \" +\r\n \"px-3 py-2 text-left transition-colors cursor-pointer focus-ring-primary focus:border-(--border-brand) \" +\r\n \"hover:bg-(--background-primary-hover) disabled:bg-(--background-primary) \" +\r\n \"disabled:border-(--border-secondary-disabled) disabled:text-(--text-primary-disabled) disabled:cursor-default\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"h-11\",\r\n \"extra-large\": \"h-14\",\r\n },\r\n status: {\r\n default: \"border-(--border-secondary)\",\r\n success: \"border-(--border-success)\",\r\n error: \"border-(--border-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n status: \"default\",\r\n },\r\n }\r\n);\r\n\r\nconst dropdownTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\"\r\n },\r\n hasValue: {\r\n false: \"text-(--text-secondary)\",\r\n true: \"text-(--text-primary)\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n hasValue: false,\r\n }\r\n});\r\n\r\nconst dropdownIconVariants = cva(\"flex items-center justify-center shrink-0\", {\r\n variants: {\r\n size: {\r\n large: \"w-5 h-5\",\r\n \"extra-large\": \"w-6 h-6\",\r\n },\r\n disabled: {\r\n false: \"text-(--icon-primary)\",\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n disabled: false,\r\n }\r\n});\r\n\r\nexport interface DropdownProps\r\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\">,\r\n VariantProps<typeof dropdownTriggerVariants> {\r\n label?: string;\r\n showLabel?: boolean;\r\n hint?: string;\r\n showHint?: boolean;\r\n placeholder?: string;\r\n status?: DropdownStatus;\r\n options: DropdownOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n /** Force the menu open (used mainly for docs/Storybook states). */\r\n showMenu?: boolean;\r\n}\r\n\r\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\r\n const {\r\n label = \"Field Label\",\r\n showLabel = true,\r\n hint = \"This is a hint text to help user.\",\r\n showHint = true,\r\n placeholder = \"Placeholder text\",\r\n size = \"large\",\r\n status = \"default\",\r\n disabled,\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n className,\r\n showMenu,\r\n ...buttonProps\r\n } = props;\r\n\r\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string | undefined>(\r\n defaultValue\r\n );\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const currentValue = isControlled ? value : internalValue;\r\n const selectedOption = options.find((opt) => opt.value === currentValue);\r\n const hasValue = !!selectedOption;\r\n\r\n const isOpen = showMenu ?? open;\r\n\r\n const handleToggle = () => {\r\n if (disabled) return;\r\n if (showMenu === undefined) {\r\n setOpen((prev) => !prev);\r\n }\r\n };\r\n\r\n const handleSelect = (optionValue: string) => {\r\n if (!isControlled) {\r\n setInternalValue(optionValue);\r\n }\r\n onChange?.(optionValue);\r\n if (showMenu === undefined) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const triggerId = React.useId();\r\n const labelId = `${triggerId}-label`;\r\n const hintId = `${triggerId}-hint`;\r\n\r\n React.useEffect(() => {\r\n if (showMenu !== undefined) return;\r\n\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (!dropdownRef.current) return;\r\n if (!dropdownRef.current.contains(event.target as Node)) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [showMenu]);\r\n\r\n return (\r\n <div ref={dropdownRef} className={dropdownWrapperBase}>\r\n {showLabel && (\r\n <label\r\n htmlFor={triggerId}\r\n id={labelId}\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled ? \"text-(--text-primary-disabled)\" : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n <button\r\n type=\"button\"\r\n id={triggerId}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={isOpen}\r\n aria-labelledby={showLabel ? labelId : undefined}\r\n aria-describedby={showHint ? hintId : undefined}\r\n disabled={disabled}\r\n className={cn(\r\n dropdownTriggerVariants({ size, status }),\r\n className\r\n )}\r\n onClick={handleToggle}\r\n data-open={isOpen || undefined}\r\n {...buttonProps}\r\n >\r\n <span\r\n className={cn(\r\n dropdownTextVariants({\r\n size,\r\n hasValue,\r\n disabled: !!disabled,\r\n })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hasValue ? selectedOption?.label : placeholder}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n dropdownIconVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n <ChevronDownIcon />\r\n </span>\r\n </button>\r\n\r\n {isOpen && options.length > 0 && (\r\n <div className=\"absolute z-10 mt-1 w-full min-w-343 rounded-4 border border-(--border-primary-hover) bg-(--background-neutral) shadow-card-md flex overflow-y-scroll dropdown-scrollbar max-h-79\">\r\n <ul role=\"listbox\" className=\"flex flex-1 flex-col\">\r\n {options.map((opt) => {\r\n const selected = opt.value === currentValue;\r\n return (\r\n <li\r\n key={opt.value}\r\n className={cn(\r\n \"bg-(--background-neutral) border-b border-(--border-secondary) last:border-b-0\",\r\n selected && \"bg-(--background-secondary)\"\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"flex w-full items-center gap-2 pl-(--space-8) pr-(--space-16) py-(--space-8) text-left paragraph-l text-(--text-primary) hover:bg-(--background-secondary)\"\r\n style={{ marginBottom: 0 }}\r\n role=\"option\"\r\n aria-selected={selected}\r\n onClick={() => handleSelect(opt.value)}\r\n >\r\n {opt.label}\r\n </button>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {showHint && (\r\n <p\r\n id={hintId}\r\n className={cn(\r\n \"caption\",\r\n disabled ? \"text-(--text-primary-disabled)\" : \"text-(--text-secondary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nDropdown.displayName = \"Dropdown\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type FieldStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport interface FieldProps {\r\n label?: string;\r\n hint?: string;\r\n status?: FieldStatus;\r\n disabled?: boolean | null;\r\n className?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst fieldBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport const Field: React.FC<FieldProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n status = \"default\",\r\n disabled,\r\n className,\r\n children,\r\n } = props;\r\n\r\n const fieldId = React.useId();\r\n const labelId = label ? `${fieldId}-label` : undefined;\r\n const hintId = hint ? `${fieldId}-hint` : undefined;\r\n\r\n const hintColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-secondary)\";\r\n\r\n const labelColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\";\r\n\r\n return (\r\n <div className={cn(fieldBase, className)}>\r\n {label && (\r\n <label\r\n id={labelId}\r\n className={cn(\"paragraph-s\", labelColorClass)}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n {children}\r\n </div>\r\n\r\n <p\r\n id={hint ? hintId : undefined}\r\n className={cn(\"caption\", hint ? hintColorClass : \"invisible\")}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint || \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nField.displayName = \"Field\";\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Input } from \"../ui/input\";\r\nimport { Field } from \"./Field\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type PasswordInputSize = \"large\" | \"extra-large\";\r\nexport type PasswordInputStatus = \"default\" | \"success\" | \"error\";\r\nexport type PasswordInputVariant = \"icons\" | \"action\";\r\n\r\nconst passwordTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled)\",\r\n false: \"text-(--text-primary)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n disabled: false,\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\r\n \"flex items-center justify-center shrink-0 text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nconst actionButtonVariants = cva(\r\n \"flex items-center justify-center shrink-0 cursor-pointer bg-transparent border-0 p-0 text-left \" +\r\n \"paragraph-s text-(--icon-primary) hover:text-(--icon-primary-hover) focus:outline-none \",\r\n {\r\n variants: {\r\n size: {\r\n large: \"paragraph-s\",\r\n \"extra-large\": \"paragraph-m\",\r\n },\r\n disabled: {\r\n true:\r\n \"cursor-default text-(--text-primary-disabled) hover:text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nexport interface PasswordInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"disabled\"> {\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n status?: PasswordInputStatus;\r\n size?: PasswordInputSize;\r\n variant?: PasswordInputVariant;\r\n leadingIcon?: React.ReactNode;\r\n trailingIcon?: React.ReactNode;\r\n actionLabel?: string;\r\n onActionClick?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const PasswordInput: React.FC<PasswordInputProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n placeholder = \"••••••••••••\",\r\n size = \"large\",\r\n status = \"default\",\r\n variant = \"icons\",\r\n disabled,\r\n className,\r\n leadingIcon,\r\n trailingIcon,\r\n actionLabel = \"Action\",\r\n onActionClick,\r\n value,\r\n defaultValue,\r\n onChange,\r\n ...inputProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue = (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n\r\n const showLeadingIcon = variant === \"icons\" && !!leadingIcon;\r\n const showTrailingIcon = variant === \"icons\" && !!trailingIcon;\r\n const showAction = variant === \"action\" && !!actionLabel;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n >\r\n <InputShell\r\n size={size}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {leadingIcon}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type={\"password\"}\r\n disabled={disabled ?? undefined}\r\n placeholder={placeholder}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n variant=\"bare\"\r\n className={cn(\r\n passwordTextVariants({ size, disabled: !!disabled })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n\r\n {showTrailingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {trailingIcon}\r\n </span>\r\n )}\r\n\r\n {showAction && (\r\n <button\r\n type=\"button\"\r\n style={{ marginBottom: 0 }}\r\n className={cn(\r\n actionButtonVariants({ size, disabled: !!disabled })\r\n )}\r\n onClick={disabled ? undefined : onActionClick}\r\n >\r\n {actionLabel}\r\n </button>\r\n )}\r\n </InputShell>\r\n </Field>\r\n );\r\n};\r\n\r\nPasswordInput.displayName = \"PasswordInput\";","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\ntype InputVariant = \"default\" | \"bare\"\r\n\r\nexport interface InputProps\r\n extends React.ComponentProps<\"input\"> {\r\n variant?: InputVariant\r\n}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, variant = \"default\", ...props }, ref) => {\r\n const base =\r\n \"text-(--text-primary) placeholder:text-(--text-secondary) disabled:text-(--text-primary-disabled) disabled:placeholder:text-(--text-primary-disabled) \" +\r\n \"selection:bg-primary selection:text-primary-foreground file:text-foreground\"\r\n\r\n const defaultStyles =\r\n \"dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 shadow-xs \" +\r\n \"transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium \" +\r\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 \" +\r\n \"focus-visible:border-ring focus-visible:ring-0 focus-visible:shadow-none \" +\r\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\"\r\n\r\n const bareStyles = \"bg-transparent outline-none w-full\"\r\n\r\n return (\r\n <input\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input\"\r\n className={cn(\r\n base,\r\n variant === \"default\" ? defaultStyles : bareStyles,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = \"Input\"\r\n\r\nexport { Input }\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type InputShellSize = \"large\" | \"extra-large\";\r\nexport type InputShellStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport const inputShellVariants = cva(\r\n \"group flex w-full items-center rounded-4 border bg-(--background-primary) text-left cursor-text \" +\r\n \"border-(--border-secondary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"gap-2 px-2 py-2 h-11\",\r\n \"extra-large\": \"gap-2 px-[10px] py-2 h-14\",\r\n },\r\n status: {\r\n default: \"input-default\",\r\n success: \"input-success\",\r\n error: \"input-error\",\r\n },\r\n disabled: {\r\n true:\r\n \"bg-(--background-primary-disabled) border-(--border-secondary-disabled) text-(--text-primary-disabled) cursor-default\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n status: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface InputShellProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof inputShellVariants> { }\r\n\r\nexport const InputShell = React.forwardRef<HTMLDivElement, InputShellProps>(\r\n ({ size, status, disabled, className, ...rest }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n aria-disabled={disabled || undefined}\r\n className={cn(\r\n inputShellVariants({ size, status, disabled }),\r\n className\r\n )}\r\n {...rest}\r\n />\r\n );\r\n }\r\n);\r\n\r\nInputShell.displayName = \"InputShell\";\r\n","import * as React from \"react\";\r\nimport { CheckIcon, ChevronUpDownIcon } from \"@bubo-squared/icons\";\r\nimport * as RPNInput from \"react-phone-number-input\";\r\nimport flags from \"react-phone-number-input/flags\";\r\n\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@/components/ui/command\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport type { TextInputSize, TextInputStatus } from \"./TextInput\";\r\nimport { Field } from \"./Field\";\r\nimport { cva } from \"class-variance-authority\";\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void;\r\n } & {\r\n className?: string;\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n status?: TextInputStatus;\r\n size?: TextInputSize;\r\n };\r\n\r\nconst inputBase = \"h-full rounded-4 border-(--border-secondary) bg-(--background-primary) hover:border-(--border-secondary-hover)\";\r\n\r\nconst sizeBase = cva(\"flex w-full\", {\r\n variants: {\r\n size: {\r\n large: \"h-11 [&_button]:gap-2\",\r\n \"extra-large\": \"h-14 [&_button]:gap-3\"\r\n },\r\n }\r\n}\r\n);\r\n\r\nconst inputTextVariants = cva(\"\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled) border-(--border-secondary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst wrapperStatusClass: Record<TextInputStatus, string> = {\r\n default: \"input-default-nested\",\r\n success: \"input-success-nested\",\r\n error: \"input-error-nested\"\r\n};\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<React.ComponentRef<typeof RPNInput.default>, PhoneInputProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, onChange, value,\r\n label, hint, placeholder, size = \"large\",\r\n disabled = false, status = \"default\", ...rest\r\n } = props;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n >\r\n <div className={cn(\"w-full\", wrapperStatusClass[status])}>\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n sizeBase({ size }),\r\n inputTextVariants({ size, disabled }),\r\n )}\r\n style={{ marginBottom: 0 }}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n international={true}\r\n countryCallingCodeEditable={false}\r\n /**\r\n * Handles the onChange event.\r\n *\r\n * react-phone-number-input might trigger the onChange event as undefined\r\n * when a valid phone number is not entered. To prevent this,\r\n * the value is coerced to an empty string.\r\n *\r\n * @param {E164Number | undefined} value - The entered value\r\n */\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n {...rest}\r\n />\r\n </div>\r\n </Field>\r\n );\r\n },\r\n );\r\nPhoneInput.displayName = \"PhoneInput\";\r\n\r\nconst InputComponent = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>((props, ref) => {\r\n const { className, ...rest } = props;\r\n\r\n return (\r\n <Input\r\n ref={ref}\r\n placeholder={rest.placeholder}\r\n className={cn(inputBase, className)}\r\n {...rest}\r\n />\r\n );\r\n});\r\nInputComponent.displayName = \"InputComponent\";\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined };\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean;\r\n value: RPNInput.Country;\r\n options: CountryEntry[];\r\n onChange: (country: RPNInput.Country) => void;\r\n};\r\n\r\nconst CountrySelect = ({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) => {\r\n const scrollAreaRef = React.useRef<HTMLDivElement>(null);\r\n const [searchValue, setSearchValue] = React.useState(\"\");\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n return (\r\n <Popover\r\n open={isOpen}\r\n modal\r\n onOpenChange={(open) => {\r\n setIsOpen(open);\r\n open && setSearchValue(\"\");\r\n }}\r\n >\r\n <PopoverTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(inputBase, \"flex gap-1 rounded-4 px-3 focus:z-10 mr-(--space-12) text-(--text-primary-disabled) hover:text-(--text-primary-hover) focus:text-(--text-primary-focus)\")}\r\n disabled={disabled}\r\n >\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n <ChevronUpDownIcon\r\n className={cn(\r\n \"-mr-2 size-4 opacity-50\",\r\n disabled ? \"hidden\" : \"opacity-100\",\r\n )}\r\n />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[300px] p-0 relative left-4.5 bg-(--background-primary) shadow-card-md rounded-4 border-none outline-1 outline-solid outline-(--border-primary-hover) **:data-[slot='command-input-wrapper']:border-b-(--border-secondary)\">\r\n <Command>\r\n <CommandInput\r\n value={searchValue}\r\n onValueChange={(value) => {\r\n setSearchValue(value);\r\n setTimeout(() => {\r\n if (scrollAreaRef.current) {\r\n const viewportElement = scrollAreaRef.current.querySelector(\r\n \"[data-radix-scroll-area-viewport]\",\r\n );\r\n if (viewportElement) {\r\n viewportElement.scrollTop = 0;\r\n }\r\n }\r\n }, 0);\r\n }}\r\n placeholder=\"Search country...\"\r\n />\r\n <CommandList>\r\n <ScrollArea ref={scrollAreaRef} className=\"h-72\">\r\n <CommandEmpty>No country found.</CommandEmpty>\r\n <CommandGroup className={\"[&>div>div]:pl-4 [&>div>div]:pr-2 [&>div>div]:py-2 [&>div>div]:border-b [&>div>div]:border-b-(--border-secondary) [&>div>div]:cursor-pointer [&>div>div]:hover:bg-(--background-primary-hover) [&>div>div]:text-(--text-primary) [&>div>div]:hover:text-(--text-primary) p-0 pr-4\"}>\r\n {countryList.map(({ value, label }) =>\r\n value ? (\r\n <CountrySelectOption\r\n key={value}\r\n country={value}\r\n countryName={label}\r\n selectedCountry={selectedCountry}\r\n onChange={onChange}\r\n onSelectComplete={() => setIsOpen(false)}\r\n />\r\n ) : null,\r\n )}\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\ninterface CountrySelectOptionProps extends RPNInput.FlagProps {\r\n selectedCountry: RPNInput.Country;\r\n onChange: (country: RPNInput.Country) => void;\r\n onSelectComplete: () => void;\r\n}\r\n\r\nconst CountrySelectOption: React.FC<CountrySelectOptionProps> = (props) => {\r\n\r\n const {\r\n country,\r\n countryName,\r\n selectedCountry,\r\n onChange,\r\n onSelectComplete,\r\n } = props;\r\n\r\n\r\n const handleSelect = () => {\r\n onChange(country);\r\n onSelectComplete();\r\n };\r\n\r\n return (\r\n <CommandItem\r\n className=\"gap-2 data-[selected=true]:text-(--text-primary)\"\r\n onSelect={handleSelect}\r\n >\r\n <FlagComponent country={country} countryName={countryName} />\r\n <span className=\"flex-1 text-sm\">{countryName}</span>\r\n <span className=\"text-sm text-foreground/50\">{`+${RPNInput.getCountryCallingCode(country)}`}</span>\r\n <CheckIcon\r\n className={`ml-auto size-4 ${country === selectedCountry ? \"opacity-100\" : \"opacity-0\"}`}\r\n />\r\n </CommandItem>\r\n );\r\n};\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = flags[country];\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 overflow-hidden rounded-2 bg-foreground/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n );\r\n};\r\n\r\nexport { PhoneInput };","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-0 focus-visible:shadow-none aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { SearchIcon } from \"@bubo-squared/icons\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n} from \"@/components/ui/dialog\"\r\n\r\nfunction Command({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive>) {\r\n return (\r\n <CommandPrimitive\r\n data-slot=\"command\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandDialog({\r\n title = \"Command Palette\",\r\n description = \"Search for a command to run...\",\r\n children,\r\n className,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof Dialog> & {\r\n title?: string\r\n description?: string\r\n className?: string\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <Dialog {...props}>\r\n <DialogHeader className=\"sr-only\">\r\n <DialogTitle>{title}</DialogTitle>\r\n <DialogDescription>{description}</DialogDescription>\r\n </DialogHeader>\r\n <DialogContent\r\n className={cn(\"overflow-hidden p-0\", className)}\r\n showCloseButton={showCloseButton}\r\n >\r\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\r\n {children}\r\n </Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\nfunction CommandInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\r\n return (\r\n <div\r\n data-slot=\"command-input-wrapper\"\r\n className=\"flex h-9 items-center gap-2 border-b px-3\"\r\n >\r\n <SearchIcon className=\"size-4 shrink-0 opacity-50 text-(--text-secondary)\" />\r\n <CommandPrimitive.Input\r\n data-slot=\"command-input\"\r\n className={cn(\r\n \"placeholder:text-(--text-secondary) text-(--text-primary) flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CommandList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\r\n return (\r\n <CommandPrimitive.List\r\n data-slot=\"command-list\"\r\n className={cn(\r\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandEmpty({\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\r\n return (\r\n <CommandPrimitive.Empty\r\n data-slot=\"command-empty\"\r\n className=\"py-6 text-center text-sm\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\r\n return (\r\n <CommandPrimitive.Group\r\n data-slot=\"command-group\"\r\n className={cn(\r\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\r\n return (\r\n <CommandPrimitive.Separator\r\n data-slot=\"command-separator\"\r\n className={cn(\"bg-border -mx-1 h-px\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\r\n return (\r\n <CommandPrimitive.Item\r\n data-slot=\"command-item\"\r\n className={cn(\r\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"command-shortcut\"\r\n className={cn(\r\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n // Base scrollbar track styling\n \"flex touch-none transition-colors select-none ml-1 pt-1 pb-1\",\n orientation === \"vertical\" &&\n \"h-full w-4\",\n orientation === \"horizontal\" &&\n \"h-4 flex-col\",\n className\n )}\n {...props}\n >\n {/* The draggable thumb/handle that indicates scroll position */}\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-(--background-secondary) relative flex-1 rounded mr-1 w-full ml-1\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\";\r\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type RadioGroupOrientation = \"vertical\" | \"horizontal\";\r\n\r\nexport interface RadioGroupOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface RadioGroupProps\r\n extends Omit<RadioGroupPrimitive.RadioGroupProps, \"children\" | \"orientation\" | \"onValueChange\"> {\r\n label?: string;\r\n hint?: string;\r\n orientation?: RadioGroupOrientation;\r\n options: RadioGroupOption[];\r\n disabled?: boolean;\r\n onValueChange?: (value: string) => void;\r\n}\r\n\r\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\r\n label,\r\n hint,\r\n options,\r\n orientation = \"vertical\",\r\n disabled = false,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n className,\r\n ...rootProps\r\n}) => {\r\n const groupId = React.useId();\r\n const hintId = hint ? `${groupId}-hint` : undefined;\r\n\r\n const handleValueChange = (next: string) => {\r\n onValueChange?.(next);\r\n };\r\n\r\n const isHorizontal = orientation === \"horizontal\";\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n {label && (\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n\r\n <RadioGroupPrimitive.Root\r\n {...rootProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={handleValueChange}\r\n aria-describedby={hintId}\r\n className={cn(\r\n \"flex\",\r\n isHorizontal ? \"flex-row gap-6\" : \"flex-col gap-2\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <RadioGroupPrimitive.Item\r\n key={option.value}\r\n value={option.value}\r\n disabled={disabled || option.disabled}\r\n asChild\r\n >\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n \"group inline-flex items-center gap-2 outline-none\",\r\n \"data-[disabled]:pointer-events-none\",\r\n (disabled || option.disabled) ? \"cursor-default\" : \"cursor-pointer\",\r\n )}\r\n >\r\n {/* Visual radio */}\r\n <span\r\n className={cn(\r\n \"flex items-center justify-center shrink-0 h-5 w-5 rounded-full border bg-(--background-primary) transition-all\",\r\n\r\n // 1: enabled, unchecked, unfocused, unhovered\r\n \"group-data-[state=unchecked]:border-(--border-secondary)\",\r\n\r\n // 2: enabled, checked, unfocused, unhovered\r\n \"group-data-[state=checked]:border-(--border-brand)\",\r\n\r\n // 3: enabled, unchecked, hovered, unfocused\r\n \"group-data-[state=unchecked]:group-hover:border-(--border-secondary-hover)\",\r\n\r\n // 4: enabled, checked, hovered, unfocused\r\n \"group-data-[state=checked]:group-hover:border-(--border-brand-hover)\",\r\n \"group-data-[state=checked]:group-hover:shadow-[0_0_0_var(--focus-ring-spread)_var(--color-b-100)]\",\r\n\r\n // 5: enabled, unchecked, focused (override 1/3)\r\n \"group-data-[state=unchecked]:group-focus-visible:border-(--border-secondary-hover)\",\r\n\r\n // 6: enabled, checked, focused (override 2/4)\r\n \"group-data-[state=checked]:group-focus-visible:border-(--border-brand-focus)\",\r\n \"group-data-[state=checked]:group-focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n\r\n // 7: disabled, unchecked (override everything above)\r\n \"group-[&[data-disabled][data-state=unchecked]]:border-none\",\r\n \"group-[&[data-disabled][data-state=unchecked]]:bg-(--background-primary-disabled)\",\r\n\r\n // 8: disabled, checked (override everything above)\r\n \"group-[&[data-disabled][data-state=checked]]:border-(--border-primary-disabled)\",\r\n \"group-[&[data-disabled][data-state=checked]]:bg-(--background-primary-disabled)\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"h-4 w-4 rounded-full bg-(--background-brand) scale-0 transition-transform\",\r\n \"group-data-[state=checked]:scale-100\",\r\n \"group-data-[state=checked]:group-hover:bg-(--background-brand-hover)\",\r\n \"group-data-[state=checked]:group-focus-visible:bg-(--background-brand-hover)\",\r\n \"group-[&[data-disabled][data-state=checked]]:bg-(--background-brand-disabled)\",\r\n \"group-[&[data-disabled][data-state=unchecked]]:scale-0\",\r\n )}\r\n />\r\n </span>\r\n\r\n {/* Label */}\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n \"group-data-[disabled]:text-(--text-primary-disabled) whitespace-nowrap\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {option.label}\r\n </span>\r\n </button>\r\n </RadioGroupPrimitive.Item>\r\n ))}\r\n </RadioGroupPrimitive.Root>\r\n\r\n <p\r\n id={hintId}\r\n className={cn(\r\n \"caption text-(--text-secondary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint ?? \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { SearchIcon } from \"@bubo-squared/icons\";\r\nimport { Input } from \"../ui/input\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type SearchInputSize = \"large\" | \"extra-large\";\r\n\r\nexport interface SearchInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"disabled\"> {\r\n placeholder?: string;\r\n leadingIcon?: React.ReactNode;\r\n showLeadingIcon?: boolean;\r\n size?: SearchInputSize;\r\n disabled?: boolean;\r\n}\r\n\r\nconst searchTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\"flex items-center justify-center shrink-0 text-(--icon-primary)\", {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nexport const SearchInput: React.FC<SearchInputProps> = (props) => {\r\n const {\r\n placeholder = \"Search...\",\r\n size = \"large\",\r\n disabled,\r\n className,\r\n leadingIcon,\r\n showLeadingIcon = true,\r\n ...inputProps\r\n } = props;\r\n\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 items-start min-w-[343px]\">\r\n <div className=\"relative w-full\">\r\n <InputShell\r\n size={size}\r\n status=\"default\"\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span className={cn(iconWrapperVariants({ size, disabled: !!disabled }))}>\r\n {leadingIcon ?? <SearchIcon />}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type=\"search\"\r\n placeholder={placeholder}\r\n disabled={disabled ?? undefined}\r\n variant=\"bare\"\r\n className={cn(\r\n searchTextVariants({ size })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n </InputShell>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nSearchInput.displayName = \"SearchInput\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type SliderDisplay = \"flat\" | \"numeric\" | \"tooltip\";\r\nexport type SliderType = \"single\" | \"multi\";\r\nexport type SliderTooltipPlacement = \"top\" | \"bottom\";\r\n\r\nexport interface SliderProps {\r\n display?: SliderDisplay;\r\n type?: SliderType;\r\n tooltipPlacement?: SliderTooltipPlacement;\r\n /**\r\n * Custom formatter for tooltip / numeric / accessibility text.\r\n * Receives the current slider value and should return a display string.\r\n * If provided, it takes precedence over `showPercentage`.\r\n */\r\n tooltipFormatter?: (value: number) => string;\r\n /**\r\n * When true (default), values are rendered as percentages (e.g. \"30%\").\r\n * When false, raw numbers are shown instead.\r\n * Ignored when `tooltipFormatter` is provided.\r\n */\r\n showPercentage?: boolean;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n disabled?: boolean;\r\n /**\r\n * Current value(s). For `type=\"single\"`, use a single-element array, e.g. `[30]`.\r\n * For `type=\"multi\"`, use two values, e.g. `[0, 25]`.\r\n */\r\n value?: number[];\r\n /**\r\n * Initial value(s) for uncontrolled usage.\r\n */\r\n defaultValue?: number[];\r\n onValueChange?: (value: number[]) => void;\r\n className?: string;\r\n}\r\n\r\nexport const Slider: React.FC<SliderProps> = (props) => {\r\n const {\r\n display = \"flat\",\r\n type = \"single\",\r\n tooltipPlacement = \"top\",\r\n tooltipFormatter,\r\n showPercentage = true,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n disabled = false,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n className\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n\r\n const expectedLength = type === \"multi\" ? 2 : 1;\r\n\r\n const normalizeArray = React.useCallback(\r\n (arr: number[] | undefined, fallback: number[]): number[] => {\r\n if (!arr || arr.length === 0) return fallback;\r\n if (arr.length === expectedLength) return arr;\r\n if (arr.length > expectedLength) return arr.slice(0, expectedLength);\r\n if (arr.length === 1 && expectedLength === 2) {\r\n return [arr[0], max];\r\n }\r\n return fallback;\r\n },\r\n [expectedLength, max]\r\n );\r\n\r\n const defaultInternal = React.useMemo(() => {\r\n if (defaultValue) return normalizeArray(defaultValue, []);\r\n if (type === \"multi\") return [min, Math.min(min + (max - min) / 4, max)];\r\n return [min + (max - min) / 3];\r\n }, [defaultValue, min, max, type, normalizeArray]);\r\n\r\n const [internalValue, setInternalValue] = React.useState<number[]>(\r\n () => normalizeArray(isControlled ? value : defaultInternal, defaultInternal)\r\n );\r\n\r\n React.useEffect(() => {\r\n if (isControlled) {\r\n setInternalValue((current) =>\r\n normalizeArray(value, current.length ? current : defaultInternal)\r\n );\r\n }\r\n }, [isControlled, value, normalizeArray, defaultInternal]);\r\n\r\n const current = internalValue;\r\n\r\n const trackRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n const clamp = (val: number) => {\r\n if (val < min) return min;\r\n if (val > max) return max;\r\n return val;\r\n };\r\n\r\n // When min or max change in uncontrolled mode, keep values within the new bounds\r\n React.useEffect(() => {\r\n if (!isControlled) {\r\n setInternalValue((prev) => {\r\n const clamped = prev.map((v) => clamp(v));\r\n if (type === \"multi\" && clamped.length === 2 && step > 0) {\r\n return enforceMinGap(clamped, prev);\r\n }\r\n return clamped;\r\n });\r\n }\r\n }, [isControlled, min, max]);\r\n\r\n const snap = (val: number) => {\r\n const range = max - min;\r\n if (range <= 0 || step <= 0) return clamp(val);\r\n const stepsFromMin = Math.round((val - min) / step);\r\n return clamp(min + stepsFromMin * step);\r\n };\r\n\r\n const enforceMinGap = (next: number[], prev: number[]): number[] => {\r\n if (type !== \"multi\" || next.length !== 2 || step <= 0) return next;\r\n\r\n let [low, high] = next;\r\n const [prevLow, prevHigh] = prev.length === 2 ? prev : next;\r\n\r\n if (low > high) {\r\n [low, high] = [high, low];\r\n }\r\n\r\n const minGap = step;\r\n if (high - low < minGap) {\r\n const lowChanged = low !== prevLow;\r\n const highChanged = high !== prevHigh;\r\n\r\n if (lowChanged && !highChanged) {\r\n // Lower thumb moved: keep upper fixed, pull lower back\r\n low = clamp(high - minGap);\r\n } else if (highChanged && !lowChanged) {\r\n // Upper thumb moved: keep lower fixed, push upper forward\r\n high = clamp(low + minGap);\r\n } else {\r\n // Fallback: enforce gap relative to lower value\r\n high = clamp(low + minGap);\r\n }\r\n\r\n // Final safeguard to avoid inverted range after clamping\r\n if (high - low < minGap) {\r\n low = clamp(high - minGap);\r\n }\r\n }\r\n\r\n return [low, high];\r\n };\r\n\r\n const updateValue = (next: number[]) => {\r\n let normalized = normalizeArray(next, current);\r\n\r\n if (type === \"multi\" && normalized.length === 2) {\r\n normalized = enforceMinGap(normalized, current);\r\n }\r\n\r\n if (!isControlled) {\r\n setInternalValue(normalized);\r\n }\r\n onValueChange?.(normalized);\r\n };\r\n\r\n const getSnappedValueFromClientX = (clientX: number, track: HTMLDivElement) => {\r\n const rect = track.getBoundingClientRect();\r\n const offsetX = clientX - rect.left;\r\n const ratio = rect.width === 0 ? 0 : offsetX / rect.width;\r\n const rawValue = min + ratio * (max - min);\r\n return snap(rawValue);\r\n };\r\n\r\n const startDrag = (thumbIndex: number, clientX: number) => {\r\n if (disabled) return;\r\n const track = trackRef.current;\r\n if (!track) return;\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n if (disabled) return;\r\n const snapped = getSnappedValueFromClientX(event.clientX, track);\r\n\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n if (thumbIndex === 0) {\r\n updateValue([snapped, b]);\r\n } else {\r\n updateValue([a, snapped]);\r\n }\r\n } else {\r\n updateValue([snapped]);\r\n }\r\n };\r\n\r\n const handlePointerUp = () => {\r\n window.removeEventListener(\"pointermove\", handlePointerMove);\r\n window.removeEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n // Apply initial position\r\n const initialSnapped = getSnappedValueFromClientX(clientX, track);\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n if (thumbIndex === 0) {\r\n updateValue([initialSnapped, b]);\r\n } else {\r\n updateValue([a, initialSnapped]);\r\n }\r\n } else {\r\n updateValue([initialSnapped]);\r\n }\r\n\r\n window.addEventListener(\"pointermove\", handlePointerMove);\r\n window.addEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n const handleTrackPointerDown: React.PointerEventHandler<HTMLDivElement> = (event) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n const track = trackRef.current;\r\n if (!track) return;\r\n\r\n const snapped = getSnappedValueFromClientX(event.clientX, track);\r\n\r\n let thumbIndex = 0;\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n const distToA = Math.abs(snapped - a);\r\n const distToB = Math.abs(snapped - b);\r\n thumbIndex = distToA <= distToB ? 0 : 1;\r\n }\r\n\r\n event.preventDefault();\r\n startDrag(thumbIndex, event.clientX);\r\n };\r\n\r\n const handleThumbKeyDown = (\r\n index: number,\r\n event: React.KeyboardEvent<HTMLButtonElement>\r\n ) => {\r\n if (disabled) return;\r\n\r\n const key = event.key;\r\n let delta = 0;\r\n\r\n if (key === \"ArrowRight\" || key === \"ArrowUp\") {\r\n delta = step;\r\n } else if (key === \"ArrowLeft\" || key === \"ArrowDown\") {\r\n delta = -step;\r\n } else if (key === \"Home\") {\r\n updateValue(\r\n current.map((v, i) => (i === index ? min : v))\r\n );\r\n event.preventDefault();\r\n return;\r\n } else if (key === \"End\") {\r\n updateValue(\r\n current.map((v, i) => (i === index ? max : v))\r\n );\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (delta !== 0) {\r\n const next = current.map((v, i) =>\r\n i === index ? snap(v + delta) : v\r\n );\r\n updateValue(next);\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const [primary, secondary] =\r\n type === \"multi\" && current.length === 2\r\n ? [current[0], current[1]]\r\n : [current[0], undefined];\r\n\r\n const valueToPercent = (val: number | undefined) => {\r\n if (val === undefined) return 0;\r\n if (max === min) return 0;\r\n const clamped = clamp(val);\r\n return ((clamped - min) / (max - min)) * 100;\r\n };\r\n\r\n const primaryPercent = valueToPercent(primary);\r\n const secondaryPercent = valueToPercent(secondary);\r\n\r\n const showNumeric = display === \"numeric\";\r\n const showTooltip = display === \"tooltip\";\r\n const isTooltipAbove = tooltipPlacement === \"top\";\r\n\r\n const isDecimalDomain =\r\n !Number.isInteger(step) ||\r\n !Number.isInteger(min) ||\r\n !Number.isInteger(max);\r\n\r\n const formatNumber = (num: number): string => {\r\n if (!isDecimalDomain) {\r\n return `${Math.round(num)}`;\r\n }\r\n const rounded = Number(num.toFixed(2));\r\n if (Number.isInteger(rounded)) {\r\n return `${rounded}`;\r\n }\r\n return rounded.toFixed(2);\r\n };\r\n\r\n const formatDisplayValue = (val: number | undefined): string => {\r\n const value = val ?? min;\r\n if (tooltipFormatter) return tooltipFormatter(value);\r\n if (showPercentage) {\r\n const percent = valueToPercent(value);\r\n return `${formatNumber(percent)}%`;\r\n }\r\n return formatNumber(value);\r\n };\r\n\r\n const formatNumericLabel = () => {\r\n if (type === \"multi\" && secondary !== undefined) {\r\n // Special-case: numeric + percentage for range should show \"x-y\" (no % symbols)\r\n if (!tooltipFormatter && showPercentage && display === \"numeric\") {\r\n const first = formatNumber(valueToPercent(primary));\r\n const second = formatNumber(valueToPercent(secondary));\r\n return `${first} - ${second}`;\r\n }\r\n return `${formatDisplayValue(primary)} - ${formatDisplayValue(secondary)}`;\r\n }\r\n return formatDisplayValue(primary);\r\n };\r\n\r\n const trackHeight = 32;\r\n const thumbWidth = 18;\r\n const thumbRadius = thumbWidth / 2;\r\n\r\n const renderTooltipBubble = (\r\n key: string,\r\n percent: number,\r\n labelText: string\r\n ) => (\r\n <div\r\n key={key}\r\n className=\"absolute -translate-x-1/2 flex flex-col items-center\"\r\n style={{\r\n left: `${percent}%`,\r\n bottom: isTooltipAbove ? \"100%\" : undefined,\r\n top: isTooltipAbove ? undefined : \"100%\",\r\n marginBottom: isTooltipAbove ? 8 : undefined,\r\n marginTop: isTooltipAbove ? undefined : 8,\r\n }}\r\n >\r\n <div\r\n className={cn(\r\n \"relative rounded-4 shadow-card-md px-(--space-8) py-(--space-4)\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-neutral)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n <p\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {labelText}\r\n </p>\r\n <div\r\n className={cn(\r\n \"absolute left-1/2 -translate-x-1/2 w-2 h-2 rotate-45\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-neutral)\",\r\n isTooltipAbove ? \"-bottom-1\" : \"-top-1\"\r\n )}\r\n />\r\n </div>\r\n </div>\r\n );\r\n\r\n const renderHandle = (index: number, percent: number, ariaValueText: string) => {\r\n const val = index === 0 ? primary : secondary;\r\n\r\n return (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n role=\"slider\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={val}\r\n aria-valuetext={ariaValueText}\r\n aria-disabled={disabled || undefined}\r\n tabIndex={disabled ? -1 : 0}\r\n className={cn(\r\n \"absolute -translate-x-1/2 flex items-center justify-center\",\r\n \"h-8 w-[18px] rounded-4\",\r\n disabled\r\n ? \"bg-(--icon-primary-disabled) cursor-default\"\r\n : \"bg-(--icon-primary-hover) outline-none focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)] cursor-pointer\"\r\n )}\r\n style={{\r\n left: `${percent}%`,\r\n top: `calc(50% - ${trackHeight / 2}px)`,\r\n }}\r\n onPointerDown={(event) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n event.preventDefault();\r\n startDrag(index, event.clientX);\r\n }}\r\n onKeyDown={(event) => handleThumbKeyDown(index, event)}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n\r\n <div className={cn(\"w-[354px] flex flex-col gap-1\", className)}>\r\n <div className=\"relative w-full\">\r\n {showTooltip && primary !== undefined &&\r\n renderTooltipBubble(\"primary\", primaryPercent, formatDisplayValue(primary))}\r\n {showTooltip && type === \"multi\" && secondary !== undefined &&\r\n renderTooltipBubble(\"secondary\", secondaryPercent, formatDisplayValue(secondary))}\r\n\r\n <div\r\n className={cn(\r\n \"relative w-full flex items-center rounded-4\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled) cursor-default\"\r\n : \"bg-(--background-secondary) cursor-pointer\"\r\n )}\r\n style={{ height: `${trackHeight}px` }}\r\n ref={trackRef}\r\n onPointerDown={handleTrackPointerDown}\r\n >\r\n <div\r\n className={cn(\r\n \"absolute h-full rounded-4\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-secondary)\"\r\n )}\r\n style={{\r\n width: `calc(100% + ${thumbWidth}px)`,\r\n left: `-${thumbRadius}px`,\r\n }}\r\n />\r\n {renderHandle(0, primaryPercent, formatDisplayValue(primary))}\r\n {type === \"multi\" && secondary !== undefined &&\r\n renderHandle(1, secondaryPercent, formatDisplayValue(secondary))}\r\n </div>\r\n </div>\r\n\r\n {showNumeric && (\r\n <p\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {formatNumericLabel()}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nSlider.displayName = \"Slider\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport type { TextInputStatus } from \"./TextInput\";\r\nimport { MaximizeIcon } from \"@bubo-squared/icons\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type TextAreaType = \"responsive\" | \"character-limit\";\r\n\r\nexport interface TextAreaProps\r\n extends Omit<\r\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\r\n \"disabled\"\r\n > {\r\n label?: string;\r\n hint?: string;\r\n status?: TextInputStatus;\r\n /**\r\n * Visual/behavioural variant.\r\n * - \"responsive\": regular textarea.\r\n * - \"character-limit\": shows character counter, expects maxLength.\r\n */\r\n type?: TextAreaType;\r\n /**\r\n * Maximum number of characters allowed. Used by \"character-limit\" variant\r\n * and passed through to the underlying <textarea> as maxLength.\r\n */\r\n maxLength?: number;\r\n /**\r\n * Optional trailing icon rendered in the top-right corner of the field.\r\n */\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TextArea: React.FC<TextAreaProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n status = \"default\",\r\n type = \"responsive\",\r\n maxLength,\r\n disabled,\r\n className,\r\n value,\r\n defaultValue,\r\n onChange,\r\n rows = 3,\r\n ...textareaProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue =\r\n (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n const hasValue = currentValue.length > 0;\r\n const currentLength = currentValue.length;\r\n const effectiveMaxLength = type === \"character-limit\" ? maxLength ?? 144 : undefined;\r\n\r\n const showCharacterLimit =\r\n type === \"character-limit\" && typeof effectiveMaxLength === \"number\";\r\n\r\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\r\n const containerRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n const [height, setHeight] = React.useState<number | undefined>(undefined);\r\n const [width, setWidth] = React.useState<number | undefined>(undefined);\r\n const minHeight = 80;\r\n const minWidth = 240;\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n textareaRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n\r\n const inputId = React.useId();\r\n const labelId = `${inputId}-label`;\r\n const hintId = `${inputId}-hint`;\r\n\r\n const statusBorderClass: Record<TextInputStatus, string> = {\r\n default: \"\",\r\n success: \"border-(--border-success)\",\r\n error: \"border-(--border-error)\",\r\n };\r\n\r\n const statusFocusClass: Record<TextInputStatus, string> = {\r\n default:\r\n \"focus-within:border-(--border-brand) focus-within:hover:border-(--border-brand) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n success:\r\n \"focus-within:border-(--border-success) focus-within:hover:border-(--border-success) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-success)]\",\r\n error:\r\n \"focus-within:border-(--border-error) focus-within:hover:border-(--border-error) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-error)]\",\r\n };\r\n\r\n const hintColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-secondary)\";\r\n\r\n const counterColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-primary)\";\r\n\r\n const handleResizePointerDown: React.PointerEventHandler<HTMLDivElement> = (\r\n event\r\n ) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n const container = containerRef.current;\r\n if (!container) return;\r\n\r\n event.preventDefault();\r\n\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const { height: startHeight, width: startWidth } =\r\n container.getBoundingClientRect();\r\n\r\n const handlePointerMove = (e: PointerEvent) => {\r\n const deltaX = e.clientX - startX;\r\n const deltaY = e.clientY - startY;\r\n\r\n const nextHeight = Math.max(minHeight, startHeight + deltaY);\r\n const nextWidth = Math.max(minWidth, startWidth + deltaX);\r\n\r\n setHeight(nextHeight);\r\n setWidth(nextWidth);\r\n };\r\n\r\n const handlePointerUp = () => {\r\n window.removeEventListener(\"pointermove\", handlePointerMove);\r\n window.removeEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", handlePointerMove);\r\n window.addEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n id={labelId}\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n <div\r\n className={cn(\r\n \"relative flex w-full rounded-4 border bg-(--background-primary) cursor-text transition-colors\",\r\n \"border-(--border-secondary) hover:border-(--border-secondary-hover) hover:bg-(--background-primary-hover)\",\r\n disabled &&\r\n \"bg-(--background-primary-disabled) border-(--border-secondary-disabled) cursor-default\",\r\n statusBorderClass[status],\r\n !disabled && statusFocusClass[status],\r\n className\r\n )}\r\n ref={containerRef}\r\n style={{\r\n ...(type === \"responsive\" && height !== undefined ? { height } : {}),\r\n ...(type === \"responsive\" && width !== undefined ? { width } : {}),\r\n }}\r\n onClick={handleContainerClick}\r\n aria-disabled={disabled || undefined}\r\n >\r\n <textarea\r\n id={inputId}\r\n ref={textareaRef}\r\n aria-labelledby={label ? labelId : undefined}\r\n aria-describedby={hint ? hintId : undefined}\r\n disabled={disabled ?? undefined}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n rows={rows}\r\n maxLength={effectiveMaxLength}\r\n className={cn(\r\n \"paragraph-m bg-transparent outline-none w-full h-full resize-none px-2 py-2 pr-8\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : hasValue\r\n ? \"text-(--text-primary)\"\r\n : \"text-(--text-secondary)\",\r\n showCharacterLimit && \"pr-16\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...textareaProps}\r\n />\r\n\r\n {showCharacterLimit && (\r\n <span\r\n className={cn(\r\n \"absolute bottom-1 right-1 footnote mb-0!\",\r\n counterColorClass\r\n )}\r\n >\r\n {currentLength}/{effectiveMaxLength}\r\n </span>\r\n )}\r\n\r\n\r\n {type === \"responsive\" && (\r\n <div\r\n className={\r\n \"absolute bottom-1 right-1 h-3 w-3 \" +\r\n (disabled ? \"cursor-auto\" : \"cursor-nwse-resize\")\r\n }\r\n onPointerDown={disabled ? undefined : handleResizePointerDown}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute bottom-0 right-0 flex h-4 w-4 items-center justify-center text-(--icon-primary)\",\r\n disabled && \"text-(--icon-primary-disabled)\"\r\n )}\r\n >\r\n <MaximizeIcon />\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <p\r\n id={hint ? hintId : undefined}\r\n className={cn(\"caption\", hint ? hintColorClass : \"invisible\")}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint || \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nTextArea.displayName = \"TextArea\";\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Input } from \"../ui/input\";\r\nimport { Field } from \"./Field\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type TextInputSize = \"large\" | \"extra-large\";\r\nexport type TextInputStatus = \"default\" | \"success\" | \"error\";\r\n\r\nconst inputTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\r\n \"flex items-center justify-center shrink-0 text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nexport interface TextInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"disabled\"> {\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n status?: TextInputStatus;\r\n size?: TextInputSize;\r\n disabled?: boolean;\r\n leadingIcon?: React.ReactNode | null;\r\n trailingIcon?: React.ReactNode | null;\r\n}\r\n\r\nexport const TextInput: React.FC<TextInputProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n placeholder = \"Placeholder text\",\r\n size = \"large\",\r\n status = \"default\",\r\n disabled = false,\r\n className,\r\n leadingIcon,\r\n trailingIcon,\r\n value,\r\n defaultValue,\r\n onChange,\r\n ...inputProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue = (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n const showLeadingIcon = !!leadingIcon;\r\n const showTrailingIcon = !!trailingIcon;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n >\r\n <InputShell\r\n size={size}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled })\r\n )}\r\n >\r\n {leadingIcon}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type=\"text\"\r\n disabled={disabled ?? undefined}\r\n placeholder={placeholder}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n variant=\"bare\"\r\n className={cn(\r\n inputTextVariants({ size }),\r\n \"bg-transparent outline-none w-full\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n\r\n {showTrailingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {trailingIcon}\r\n </span>\r\n )}\r\n </InputShell>\r\n </Field>\r\n );\r\n};\r\n\r\nTextInput.displayName = \"TextInput\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface ToggleProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\r\n label?: string;\r\n}\r\n\r\nexport const Toggle: React.FC<ToggleProps> = (props) => {\r\n const { label, className, disabled, ...inputProps } = props;\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 select-none\",\r\n disabled ? \"cursor-default\" : \"cursor-pointer\"\r\n )}\r\n >\r\n <span className=\"relative inline-flex items-center\">\r\n {/* Hidden native checkbox drives checked/disabled/focus state */}\r\n <input\r\n type=\"checkbox\"\r\n disabled={disabled}\r\n className=\"peer sr-only\"\r\n {...inputProps}\r\n />\r\n\r\n {/* Slider (track + knob) */}\r\n <span\r\n className={cn(\r\n // Base track\r\n \"flex items-center w-9 h-5 rounded-24 border bg-(--background-primary) p-(--space-2) transition-all\",\r\n // Knob position\r\n \"justify-start peer-checked:justify-end\",\r\n // 1: enabled, unchecked, unhovered, unfocused\r\n \"border-(--border-secondary)\",\r\n // 3: enabled, unchecked, hovered, unfocused\r\n \"hover:border-(--border-secondary-hover)\",\r\n // 2: enabled, checked, unhovered, unfocused\r\n \"peer-checked:border-(--border-brand)\",\r\n // 4: enabled, checked, hovered, unfocused\r\n \"peer-checked:hover:border-(--border-brand-hover)\",\r\n \"peer-checked:hover:shadow-[0_0_0_var(--focus-ring-spread)_var(--color-b-100)]\",\r\n // 5: enabled, unchecked, unhovered, focused\r\n \"peer-focus-visible:border-(--border-brand-focus)\",\r\n // 6: enabled, checked, unhovered, focused\r\n \"peer-checked:peer-focus-visible:bg-(--background-brand-focus)\",\r\n \"peer-checked:peer-focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n // 7: disabled, unchecked (override)\r\n \"peer-disabled:bg-(--background-primary-disabled)\",\r\n \"peer-disabled:border-none\",\r\n \"peer-disabled:shadow-none\",\r\n // 8: disabled, checked (override)\r\n \"peer-disabled:peer-checked:border-(--border-primary-disabled)\",\r\n // Disable hover when disabled\r\n \"peer-disabled:pointer-events-none\",\r\n\r\n // Knob on (enabled)\r\n \"peer-checked:[&>.knob]:bg-(--background-brand)\",\r\n // Hover / focus when on\r\n \"peer-checked:[&>.knob]:hover:bg-(--background-brand-hover)\",\r\n \"peer-checked:peer-focus-visible:[&>.knob]:bg-(--background-neutral)\",\r\n // Disabled knob (both off and on use disabled brand token)\r\n \"peer-disabled:[&>.knob]:bg-(--background-primary-hover)\",\r\n \"peer-disabled:[&>.knob]:peer-checked:bg-(--background-primary-hover)\",\r\n className\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"h-4 w-4 rounded-full transition-colors knob\",\r\n \"bg-b-100\",\r\n )}\r\n />\r\n </span>\r\n </span>\r\n\r\n {label && (\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n};\r\n\r\nToggle.displayName = \"Toggle\";\r\n\r\n","import * as React from \"react\";\r\nimport { TextInput, type TextInputProps } from \"./TextInput\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type WebsiteInputHierarchy = \"prefix\" | \"suffix\";\r\n\r\nexport interface WebsiteInputProps\r\n extends Omit<TextInputProps, \"leadingIcon\" | \"trailingIcon\"> {\r\n /**\r\n * Position of the protocol add-on (label + icon).\r\n * - \"prefix\": add-on on the left side of the field\r\n * - \"suffix\": add-on on the right side of the field\r\n */\r\n hierarchy?: WebsiteInputHierarchy;\r\n /**\r\n * Text shown inside the protocol add-on (e.g. \"http://\", \"https://\").\r\n */\r\n protocolLabel?: string;\r\n /**\r\n * Optional icon shown next to the protocol label\".\r\n */\r\n icon?: React.ReactNode | null;\r\n}\r\n\r\nexport const WebsiteInput: React.FC<WebsiteInputProps> = (props) => {\r\n const {\r\n hierarchy = \"prefix\",\r\n protocolLabel = \"http://\",\r\n icon,\r\n size = \"large\",\r\n disabled,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const isPrefix = hierarchy === \"prefix\";\r\n\r\n const baseClass = cn(\r\n \"[&>span]:w-[unset] hover:bg-[unset]\",\r\n !disabled &&\r\n \"[&:not(:focus-within):hover]:shadow-[0_0_0_var(--focus-ring-spread)_var(--background-secondary-hover)]\",\r\n disabled &&\r\n \"bg-[unset] hover:shadow-none hover:border-(--border-secondary-disabled) border-(--border-secondary-disabled)\",\r\n size === \"extra-large\"\r\n ? \"[&>span]:h-14!\"\r\n : \"[&>span]:h-11!\",\r\n )\r\n\r\n const addonTextClass = cn(\r\n \"flex mb-0!\",\r\n size === \"extra-large\" ? \"paragraph-m\" : \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary) group-hover:text-(--text-primary-hover) group-focus-within:text-(--text-primary-focus)\"\r\n );\r\n\r\n const baseAddonClass = cn(\r\n \"flex items-center gap-2 px-2 h-full\", // layout + padding\r\n \"border-(--border-secondary)\", // divider color\r\n disabled &&\r\n \"border-(--border-secondary-disabled) hover:border-(--border-secondary-disabled)\",\r\n isPrefix ? \"border-r\" : \"border-l\"\r\n );\r\n\r\n const iconWrapperClass = cn(\r\n \"flex items-center justify-center shrink-0\",\r\n size === \"extra-large\"\r\n ? \"[&>svg]:w-6 [&>svg]:h-6\"\r\n : \"[&>svg]:w-5 [&>svg]:h-5\",\r\n disabled\r\n ? \"text-(--icon-primary-disabled)\"\r\n : \"text-(--icon-primary) group-hover:text-(--icon-primary-hover) group-focus-within:text-(--icon-primary-focus)\"\r\n );\r\n\r\n const prefixAddon = (\r\n <div className={baseAddonClass}>\r\n <div className={addonTextClass}>{protocolLabel}</div>\r\n {icon != null && <span className={iconWrapperClass}>{icon}</span>}\r\n </div>\r\n );\r\n\r\n const suffixAddon = (\r\n <div className={baseAddonClass}>\r\n {icon != null && <span className={iconWrapperClass}>{icon}</span>}\r\n <div className={addonTextClass}>{protocolLabel}</div>\r\n </div>\r\n );\r\n\r\n return (\r\n <TextInput\r\n {...rest}\r\n size={size}\r\n disabled={disabled}\r\n className={cn(baseClass, className)}\r\n leadingIcon={isPrefix ? prefixAddon : undefined}\r\n trailingIcon={!isPrefix ? suffixAddon : undefined}\r\n />\r\n );\r\n};\r\n\r\nWebsiteInput.displayName = \"WebsiteInput\";\r\n","import * as React from \"react\";\r\nimport { Popover as ShadPopover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport { Button, cn } from \"@/index\";\r\n\r\nconst PopoverArrow = PopoverPrimitive.Arrow;\r\n\r\ntype PopoverPlacement =\r\n | \"top\"\r\n | \"topLeft\"\r\n | \"topRight\"\r\n | \"bottom\"\r\n | \"bottomLeft\"\r\n | \"bottomRight\"\r\n | \"left\"\r\n | \"leftTop\"\r\n | \"leftBottom\"\r\n | \"right\"\r\n | \"rightTop\"\r\n | \"rightBottom\";\r\n\r\ninterface PopoverProps {\r\n children: React.ReactNode;\r\n strapline?: string;\r\n title: string;\r\n description?: string;\r\n onOk?: () => void;\r\n okText?: string;\r\n onCancel?: () => void;\r\n cancelText?: string;\r\n showArrow?: boolean;\r\n className?: string;\r\n /**\r\n * Controls where the popover appears relative to the trigger.\r\n * Examples: \"bottomRight\", \"top\", \"left\".\r\n */\r\n placement?: PopoverPlacement;\r\n /**\r\n * Distance between the trigger and the popover.\r\n * This is forwarded to Radix's `sideOffset`, useful when adjusting\r\n * the arrow size so the content clears the trigger.\r\n */\r\n offset?: number;\r\n}\r\n\r\nexport const Popover: React.FC<PopoverProps> = (props) => {\r\n\r\n const {\r\n strapline, title, description,\r\n onOk, okText, onCancel, cancelText,\r\n showArrow = true, className,\r\n placement = \"bottom\", offset = 10,\r\n children\r\n } = props;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleCancel = () => {\r\n onCancel?.();\r\n setOpen(false);\r\n };\r\n\r\n const handleOk = () => {\r\n onOk?.();\r\n setOpen(false);\r\n };\r\n\r\n const popoverClasses = \"bg-(--background-popover) fill-(--background-popover) popover w-80 shadow-card-md border-none [&_span]:scale-240 rounded-4\"\r\n\r\n const mapPlacementToSideAndAlign = (placement: PopoverPlacement): {\r\n side: PopoverPrimitive.PopoverContentProps[\"side\"];\r\n align: PopoverPrimitive.PopoverContentProps[\"align\"];\r\n } => {\r\n switch (placement) {\r\n case \"top\":\r\n return { side: \"top\", align: \"center\" };\r\n case \"topLeft\":\r\n return { side: \"top\", align: \"start\" };\r\n case \"topRight\":\r\n return { side: \"top\", align: \"end\" };\r\n case \"bottom\":\r\n return { side: \"bottom\", align: \"center\" };\r\n case \"bottomLeft\":\r\n return { side: \"bottom\", align: \"start\" };\r\n case \"bottomRight\":\r\n return { side: \"bottom\", align: \"end\" };\r\n case \"left\":\r\n return { side: \"left\", align: \"center\" };\r\n case \"leftTop\":\r\n return { side: \"left\", align: \"start\" };\r\n case \"leftBottom\":\r\n return { side: \"left\", align: \"end\" };\r\n case \"right\":\r\n return { side: \"right\", align: \"center\" };\r\n case \"rightTop\":\r\n return { side: \"right\", align: \"start\" };\r\n case \"rightBottom\":\r\n return { side: \"right\", align: \"end\" };\r\n default:\r\n return { side: \"bottom\", align: \"center\" };\r\n }\r\n };\r\n\r\n const arrowShadowClass = (side: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined) => {\r\n switch (side) {\r\n case \"top\":\r\n return \"drop-shadow(0px 2px 1px var(--color-b-black-12))\"\r\n case \"bottom\":\r\n return \"drop-shadow(0px -1px 1px color-mix(in srgb, var(--color-b-black-10) 66%, transparent))\"\r\n case \"left\":\r\n case \"right\":\r\n return \"drop-shadow(0px 2px 1px var(--color-b-black-12))\"\r\n default:\r\n return \"\"\r\n }\r\n }\r\n\r\n const { side, align } = mapPlacementToSideAndAlign(placement);\r\n return (\r\n <ShadPopover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n {children}\r\n </PopoverTrigger>\r\n <PopoverContent\r\n side={side}\r\n align={align}\r\n sideOffset={offset}\r\n className={cn(popoverClasses, side === \"top\" ? \"[&_span]:bottom-1! \" : \"\", className)}\r\n >\r\n {showArrow && (\r\n <PopoverArrow\r\n style={{ filter: arrowShadowClass(side) }}\r\n />\r\n )}\r\n <div className=\"grid gap-4\">\r\n <div className=\"space-y-2\">\r\n <span className={\"caption text-secondary\"} style={{ marginBottom: 0 }}>{strapline}</span>\r\n <h4 className={\"subtitle-medium text-primary\"} style={{ marginBottom: 0 }}>{title}</h4>\r\n <p className={\"paragraph-s text-primary\"} style={{ marginBottom: 0 }}>{description}</p>\r\n </div>\r\n <div className=\"flex justify-start items-center gap-4\">\r\n <Button size={\"sm\"} variant={\"secondary\"} onClick={handleCancel}>{cancelText || \"Cancel\"}</Button>\r\n <Button size={\"sm\"} variant={\"primary\"} onClick={handleOk}>{okText || \"Ok\"}</Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </ShadPopover>\r\n )\r\n}\r\n\r\nPopover.displayName = \"Popover\";","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ChevronRightIcon } from \"@bubo-squared/icons\";\r\n\r\nconst breadcrumbBase =\r\n \"group inline-flex items-center gap-[var(--space-8)] pl-0 pr-[var(--space-8)] py-[6px] rounded-full transition-colors select-none disabled:cursor-default disabled:pointer-events-none\";\r\n\r\nconst breadcrumbIconVariants = cva(\r\n \"flex shrink-0 items-center justify-center w-5 h-5 *:w-5 *:h-5\",\r\n {\r\n variants: {\r\n variant: {\r\n colored:\r\n \"text-(--icon-brand) group-hover:text-(--icon-brand-hover) group-focus-visible:text-(--icon-brand-focus) group-disabled:text-(--icon-brand-disabled)\",\r\n flat:\r\n \"text-(--icon-primary) group-hover:text-(--icon-primary-hover) group-focus-visible:text-(--icon-primary-focus) group-disabled:text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"flat\",\r\n },\r\n }\r\n);\r\n\r\nconst breadcrumbTextVariants = cva(\r\n \"font-normal text-[length:var(--font-size-paragraph-l-18)] leading-[var(--font-line-height-28)] tracking-[var(--font-letter-spacing-02)] whitespace-nowrap\",\r\n {\r\n variants: {\r\n variant: {\r\n colored:\r\n \"text-(--text-brand) group-hover:text-(--text-brand-hover) group-focus-visible:text-(--text-brand-focus) group-disabled:text-(--text-brand-disabled)\",\r\n flat:\r\n \"text-(--text-primary) group-hover:text-(--text-primary-hover) group-focus-visible:text-(--text-primary-focus) group-disabled:text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"flat\",\r\n },\r\n }\r\n);\r\n\r\nexport interface BreadcrumbProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"flat\" | \"colored\";\r\n asChild?: boolean;\r\n /** Label text shown in the breadcrumb item. */\r\n label?: string;\r\n /** Whether to render the leading chevron icon. */\r\n showIcon?: boolean;\r\n /** Optional custom icon to use instead of the default chevron. */\r\n icon?: React.ReactNode;\r\n /** Whether to render the label text. */\r\n showText?: boolean;\r\n}\r\n\r\nexport const Breadcrumb = React.forwardRef<HTMLButtonElement, BreadcrumbProps>((props, ref) => {\r\n const {\r\n asChild = false,\r\n variant = \"flat\",\r\n label = \"Header\",\r\n showIcon = true,\r\n showText = true,\r\n icon,\r\n className,\r\n children,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"button\";\r\n\r\n const content = showText ? (children ?? label) : null;\r\n\r\n return (\r\n <Comp\r\n type={asChild ? undefined : \"button\"}\r\n className={cn(breadcrumbBase, className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {showIcon && (\r\n <span className={cn(breadcrumbIconVariants({ variant }))}>\r\n {icon ?? <ChevronRightIcon />}\r\n </span>\r\n )}\r\n {content && (\r\n <span className={cn(breadcrumbTextVariants({ variant }))}>\r\n {content}\r\n </span>\r\n )}\r\n </Comp>\r\n );\r\n});\r\n\r\nBreadcrumb.displayName = \"Breadcrumb\";\r\n","import type { FC } from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { LogoIconLIcon, LogoIconMIcon } from \"@bubo-squared/icons\";\r\nimport type { LogoIconProps } from \"./Logo.types\";\r\n\r\nconst logoIconVariants = cva(\r\n \"relative bg-linear-to-t from-gray-800 to-gray-950 overflow-hidden flex justify-center items-center\",\r\n {\r\n variants: {\r\n size: {\r\n xs: [\"size-8\", \"rounded-[5px]\"],\r\n sm: [\"size-14\", \"rounded-8\"],\r\n md: [\"size-32\", \"rounded-20\"],\r\n lg: [\"size-64\", \"rounded-40\"],\r\n xl: [\"size-128\", \"rounded-80\"],\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n },\r\n },\r\n);\r\n\r\nconst logoIconSizeClass: Record<NonNullable<LogoIconProps[\"size\"]>, string> = {\r\n xs: \"size-6\",\r\n sm: \"size-10\",\r\n md: \"size-24\",\r\n lg: \"size-44\",\r\n xl: \"size-96\",\r\n};\r\n\r\nexport const LogoIcon: FC<LogoIconProps> = ({ className, size = \"md\" }) => {\r\n const IconComponent = size === \"xl\" ? LogoIconLIcon : LogoIconMIcon;\r\n\r\n return (\r\n <div className={cn(logoIconVariants({ size }), className)}>\r\n <IconComponent className={logoIconSizeClass[size]} />\r\n </div>\r\n );\r\n};\r\n","import type { FC } from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\nimport type { LogoProps } from \"./Logo.types\";\r\n\r\nconst logoWrapperVariants = cva(\"inline-flex\", {\r\n variants: {\r\n variant: {\r\n inline: [\"w-44\", \"h-12\", \"justify-start\", \"items-center\", \"gap-4\"],\r\n inlineSmall: [\"w-32\", \"h-9\", \"justify-start\", \"items-center\", \"gap-3\"],\r\n multiline: [\"w-36\", \"flex-col\", \"justify-start\", \"items-start\", \"gap-2\"],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nconst logoIconSizeVariants = cva(\"\", {\r\n variants: {\r\n variant: {\r\n inline: \"size-12\",\r\n inlineSmall: \"size-9\",\r\n multiline: \"size-12\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nconst logoTextSizeVariants = cva(\"\", {\r\n variants: {\r\n variant: {\r\n inline: \"h-8 w-27.5\",\r\n inlineSmall: \"h-6 w-20.75\",\r\n multiline: \"h-8 w-27.75\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nexport const Logo: FC<LogoProps> = ({ className, textColor, variant = \"inline\" }) => {\r\n const textColorClass =\r\n textColor === \"light\"\r\n ? \"text-(--color-b-white)\"\r\n : textColor === \"dark\"\r\n ? \"text-(--color-b-black)\"\r\n : \"text-(--text-primary)\";\r\n\r\n return (\r\n <div className={cn(logoWrapperVariants({ variant }), className)}>\r\n <LogoIconMIcon className={logoIconSizeVariants({ variant })} />\r\n <LogoTextMIcon\r\n className={cn(logoTextSizeVariants({ variant }), textColorClass)}\r\n />\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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","names":["jsx","cva","jsx","React","Slot","cva","jsx","cva","Slot","cva","jsx","React","Slot","cva","jsx","jsxs","cva","Slot","React","jsx","jsxs","React","Slot","cva","jsx","jsxs","cva","Slot","React","Slot","cva","jsx","jsxs","cva","Slot","React","cva","jsx","cva","cva","jsx","cva","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","cva","jsx","jsxs","cva","React","Slot","cva","jsx","jsxs","CheckIcon","jsx","jsxs","CheckIcon","React","cva","jsx","jsxs","cva","React","jsx","jsxs","React","cva","React","jsx","React","cva","jsx","cva","jsx","jsxs","cva","React","CheckIcon","Slot","cva","jsx","buttonVariants","cva","Button","Slot","jsx","jsxs","jsx","jsxs","jsxs","jsx","jsx","jsx","jsx","jsxs","cva","jsx","jsxs","value","Button","CheckIcon","React","jsx","jsxs","React","cva","SearchIcon","jsx","jsxs","cva","iconWrapperVariants","SearchIcon","React","jsx","jsxs","wrapperBase","current","value","React","jsx","jsxs","wrapperBase","React","cva","jsx","jsxs","inputTextVariants","cva","iconWrapperVariants","jsx","jsxs","jsx","jsxs","React","PopoverPrimitive","jsx","jsxs","Popover","placement","side","React","Slot","cva","jsx","jsxs","cva","Slot","cva","jsx","cva","cva","LogoIconMIcon","jsx","jsxs","cva"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Buttons/Button.tsx","../src/lib/utils.tsx","../src/components/Buttons/ButtonGroup.tsx","../src/components/Buttons/IconButton.tsx","../src/components/Buttons/IconButtonGroup.tsx","../src/components/Buttons/LinkButton.tsx","../src/components/Buttons/MessageButton.tsx","../src/components/Content/Avatar.tsx","../src/components/Content/Badge.tsx","../src/components/Content/BadgeDigit.tsx","../src/components/Content/BadgeDot.tsx","../src/components/Content/BadgeStatus.tsx","../src/components/Content/Divider.tsx","../src/components/Content/Progress.tsx","../src/components/Content/StatusAvatar.tsx","../src/components/Content/Tag.tsx","../src/components/Inputs/Checkbox.tsx","../src/components/Inputs/Dropdown.tsx","../src/components/Inputs/Field.tsx","../src/components/Inputs/PasswordInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/InputShell.tsx","../src/components/Inputs/PhoneInput.tsx","../src/components/ui/button.tsx","../src/components/ui/command.tsx","../src/components/ui/dialog.tsx","../src/components/ui/popover.tsx","../src/components/ui/scroll-area.tsx","../src/components/Inputs/RadioGroup.tsx","../src/components/Inputs/SearchInput.tsx","../src/components/Inputs/Slider.tsx","../src/components/Inputs/TextArea.tsx","../src/components/Inputs/TextInput.tsx","../src/components/Inputs/Toggle.tsx","../src/components/Inputs/WebsiteInput.tsx","../src/components/Feedback/Popover.tsx","../src/components/Navigation/Breadcrumb.tsx","../src/components/Logo/LogoIcon.tsx","../src/components/Logo/Logo.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n [\r\n 'btn-primary',\r\n 'focus-ring-primary',\r\n ],\r\n secondary:\r\n [\r\n 'btn-secondary',\r\n 'focus-ring-secondary',\r\n ],\r\n outline:\r\n [\r\n 'btn-outline',\r\n 'focus-ring-outline',\r\n ],\r\n destructive:\r\n [\r\n 'btn-destructive',\r\n 'focus-ring-error',\r\n ],\r\n },\r\n size: {\r\n sm: ['px-1.5', 'py-1', 'gap-1'],\r\n md: ['px-2', 'py-1', 'gap-1.5'],\r\n lg: ['px-2.5', 'py-1', 'gap-1.5'],\r\n xl: ['px-3', 'py-0.5', 'gap-2'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nconst buttonIconVariants = cva('relative', {\r\n variants: {\r\n size: {\r\n sm: ['size-5', '*:size-5'],\r\n md: ['size-6', '*:size-6'],\r\n lg: ['size-6', '*:size-6'],\r\n xl: ['size-8', '*:size-8'],\r\n },\r\n }\r\n})\r\n\r\nconst buttonTextVariants = cva('flex text-center justify-center font-normal', {\r\n variants: {\r\n size: {\r\n sm: ['text-xl', 'leading-7'],\r\n md: ['text-2xl', 'leading-8'],\r\n lg: ['h-10', 'text-3xl', 'leading-9'],\r\n xl: ['h-11', 'text-4xl', 'leading-10'],\r\n }\r\n }\r\n})\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean,\r\n suffixIcon?: React.ReactNode,\r\n prefixIcon?: React.ReactNode,\r\n}\r\n\r\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size = \"md\",\r\n asChild = false, children,\r\n suffixIcon, prefixIcon,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {prefixIcon && <div className={cn(buttonIconVariants({ size }))}>{prefixIcon}</div>}\r\n <div className={cn(buttonTextVariants({ size }))}>{children}</div>\r\n {suffixIcon && <div className={cn(buttonIconVariants({ size }))}>{suffixIcon}</div>}\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nButton.displayName = 'Button'\r\n\r\n","import { clsx, type ClassValue } from \"clsx\"\r\nimport { twMerge } from \"tailwind-merge\"\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs))\r\n}\r\n\r\nexport const InputContainerTemplate = ({ children }: { children: React.ReactNode }) => {\r\n\r\n return (\r\n <div style={{ width: \"350px\" }}>\r\n {children}\r\n </div>\r\n )\r\n}\r\n\r\n","import { cva } from \"class-variance-authority\";\r\n\r\nconst buttonGroupVariants = cva(\r\n 'flex items-center justify-center gap-4 pt-4 w-[320px] min-w-[320px]',\r\n {\r\n variants: {\r\n variant: {\r\n vertical: ['flex-col'],\r\n horizontal: ['flex-row'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'horizontal',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n orientation?: 'horizontal' | 'vertical';\r\n}\r\n\r\nexport const ButtonGroup: React.FC<ButtonGroupProps> = (props) => {\r\n const { orientation = 'horizontal' } = props;\r\n\r\n return (\r\n <div className={buttonGroupVariants({ variant: orientation })} {...props}>\r\n {props.children}\r\n </div>\r\n )\r\n}\r\n ","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst iconButtonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden p-1.5 cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n [\r\n 'btn-primary',\r\n 'focus-ring-primary',\r\n ],\r\n secondary:\r\n [\r\n 'btn-secondary',\r\n 'focus-ring-secondary',\r\n ],\r\n outline:\r\n [\r\n 'btn-outline',\r\n 'focus-ring-outline',\r\n ],\r\n destructive:\r\n [\r\n 'btn-destructive-outline',\r\n 'focus-ring-error-outline',\r\n ],\r\n },\r\n size: {\r\n sm: ['[&>.buttonIcon>svg]:size-5'],\r\n md: ['[&>.buttonIcon>svg]:size-6'],\r\n lg: ['[&>.buttonIcon>svg]:size-8'],\r\n xl: ['[&>.buttonIcon>svg]:size-9'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof iconButtonVariants> {\r\n asChild?: boolean,\r\n icon: React.ReactNode,\r\n}\r\n\r\nexport const IconButton = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size,\r\n asChild = false, icon,\r\n ...rest } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(iconButtonVariants({ variant, size }), className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n <div className={\"buttonIcon flex items-center justify-center\"}>{icon}</div>\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nIconButton.displayName = 'IconButton'\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { IconButton } from \"@/components/Buttons/IconButton\";\r\nimport type { ButtonProps as IconButtonProps } from \"@/components/Buttons/IconButton\";\r\nimport { cva } from \"class-variance-authority\";\r\n\r\ntype IconButtonSize = IconButtonProps[\"size\"];\r\n\r\nexport interface IconButtonGroupItem {\r\n\ticon: React.ReactNode;\r\n\tariaLabel: string;\r\n\tonClick?: React.MouseEventHandler<HTMLButtonElement>;\r\n\tdisabled?: boolean;\r\n}\r\n\r\nexport interface IconButtonGroupProps\r\n\textends React.HTMLAttributes<HTMLDivElement> {\r\n\t/** Icons to render as a segmented group. */\r\n\titems: IconButtonGroupItem[];\r\n\t/** Shared size for all icon buttons. */\r\n\tsize?: IconButtonSize;\r\n}\r\n\r\nconst IconGroupLinesClass = \"inline-flex items-center justify-center gap-0 \" +\r\n\t\"[&>button]:outline-none! [&>button]:rounded-none \" +\r\n\t\"[&>button:focus]:shadow-none [&>button:focus]:bg-(--border-secondary) \" +\r\n\t\"[&>button:first-child]:rounded-l-4 [&>button:last-child]:rounded-r-4\";\r\n\r\n\r\nconst IconGroupSizeVariants = cva(\"\", {\r\n\tvariants: {\r\n\t\tsize: {\r\n\t\t\tsm: \"[&>button]:px-1.5\",\r\n\t\t\tmd: \"[&>button]:px-2\",\r\n\t\t\tlg: \"[&>button]:px-2\",\r\n\t\t\txl: \"[&>button]:px-3\",\r\n\t\t}\r\n\t},\r\n\tdefaultVariants: {\r\n\t\tsize: \"sm\"\r\n\t}\r\n})\r\n\r\nexport const IconButtonGroup: React.FC<IconButtonGroupProps> = (props) => {\r\n\tconst { items, size = \"sm\", className, ...rest } = props;\r\n\r\n\tif (!items || items.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={cn(\r\n\t\t\t\tIconGroupLinesClass,\r\n\t\t\t\tIconGroupSizeVariants({ size }),\r\n\t\t\t\tclassName\r\n\t\t\t)}\r\n\t\t\t{...rest}\r\n\t\t>\r\n\t\t\t{items.map((item, index) => (\r\n\t\t\t\t<IconButton\r\n\t\t\t\t\tkey={index}\r\n\t\t\t\t\tvariant={\"secondary\"}\r\n\t\t\t\t\tsize={size}\r\n\t\t\t\t\ticon={item.icon}\r\n\t\t\t\t\taria-label={item.ariaLabel}\r\n\t\t\t\t\tdisabled={item.disabled}\r\n\t\t\t\t\tclassName={cn(\r\n\t\t\t\t\t\t\"rounded-none border-1 border-(--border-secondary) text-(--text-primary) \",\r\n\t\t\t\t\t\tindex === 0 && \"rounded-l-6\",\r\n\t\t\t\t\t\tindex === items.length - 1 && \"rounded-r-6\",\r\n\t\t\t\t\t\tindex > 0 && \"-ml-px\"\r\n\t\t\t\t\t)}\r\n\t\t\t\t\tonClick={item.onClick}\r\n\t\t\t\t/>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n};\r\n\r\nIconButtonGroup.displayName = \"IconButtonGroup\";\r\n\r\n","import * as React from 'react';\r\nimport { Slot } from '@radix-ui/react-slot';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { cn } from '@/lib/utils';\r\n\r\nconst linkButtonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded-4 transition-colors ' +\r\n 'disabled:pointer-events-none overflow-hidden gap-2 cursor-pointer',\r\n {\r\n variants: {\r\n variant: {\r\n primary:\r\n ['btn-link-primary'],\r\n secondary:\r\n ['btn-link-secondary'],\r\n destructive:\r\n ['btn-link-destructive'],\r\n },\r\n size: {\r\n sm: ['py-2', 'px-1'],\r\n md: ['py-2.5', 'px-2'],\r\n lg: ['py-2.5', 'px-2'],\r\n xl: ['py-3', 'px-3'],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: 'primary',\r\n size: 'md',\r\n },\r\n }\r\n)\r\n\r\nconst linkButtonIconVariants = cva('relative', {\r\n variants: {\r\n size: {\r\n sm: ['size-5', '*:size-5'],\r\n md: ['size-5', '*:size-5'],\r\n lg: ['size-6', '*:size-6'],\r\n xl: ['size-6', '*:size-6'],\r\n },\r\n }\r\n})\r\n\r\nconst linkButtonTextVariants = cva('inline-flex items-center text-center font-medium', {\r\n variants: {\r\n size: {\r\n sm: ['text-sm', 'leading-5'],\r\n md: ['text-sm', 'leading-5',],\r\n lg: ['text-base', 'leading-6'],\r\n xl: ['text-base', 'leading-6'],\r\n }\r\n }\r\n})\r\n\r\nexport interface LinkButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof linkButtonVariants> {\r\n asChild?: boolean,\r\n suffixIcon?: React.ReactNode,\r\n prefixIcon?: React.ReactNode,\r\n}\r\n\r\nexport const LinkButton = React.forwardRef<HTMLButtonElement, LinkButtonProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, variant, size = \"sm\",\r\n asChild = false, children,\r\n suffixIcon, prefixIcon,\r\n ...rest } = props;\r\n\r\n const Comp = asChild ? Slot : 'button'\r\n\r\n return (\r\n <Comp\r\n className={cn(linkButtonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {prefixIcon && <div className={cn(linkButtonIconVariants({ size }))}>{prefixIcon}</div>}\r\n <div className={cn(linkButtonTextVariants({ size }))}>{children}</div>\r\n {suffixIcon && <div className={cn(linkButtonIconVariants({ size }))}>{suffixIcon}</div>}\r\n </Comp>\r\n )\r\n }\r\n)\r\n\r\nLinkButton.displayName = 'LinkButton'\r\n\r\n","import * as React from \"react\";\r\n\r\ntype Status = \"idle\" | \"loading\" | \"success\" | \"error\";\r\n\r\ntype MessageButtonProps = Omit<\r\n React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n \"onClick\"\r\n> & {\r\n onClick?: () => void | Promise<void>;\r\n idleLabel?: string;\r\n loadingLabel?: string;\r\n successLabel?: string;\r\n errorLabel?: string;\r\n feedbackDuration?: number;\r\n icon?: React.ReactNode;\r\n};\r\n\r\nexport const MessageButton: React.FC<MessageButtonProps> = (props) => {\r\n\r\n const {\r\n onClick,\r\n idleLabel = \"Save\",\r\n loadingLabel = \"Saving…\",\r\n successLabel = \"Saved!\",\r\n errorLabel = \"Error\",\r\n feedbackDuration = 1500,\r\n className = \"\",\r\n ...buttonProps\r\n } = props;\r\n\r\n const [status, setStatus] = React.useState<Status>(\"idle\");\r\n\r\n const handleClick = async (_event: React.MouseEvent<HTMLButtonElement>) => {\r\n if (status === \"loading\") return;\r\n\r\n setStatus(\"loading\");\r\n\r\n try {\r\n await Promise.resolve(onClick?.()); // handles sync or async onClick\r\n setStatus(\"success\");\r\n } catch (err) {\r\n console.error(err);\r\n setStatus(\"error\");\r\n } finally {\r\n if (feedbackDuration > 0) {\r\n window.setTimeout(() => setStatus(\"idle\"), feedbackDuration);\r\n }\r\n }\r\n };\r\n\r\n const label =\r\n status === \"loading\"\r\n ? loadingLabel\r\n : status === \"success\"\r\n ? successLabel\r\n : status === \"error\"\r\n ? errorLabel\r\n : idleLabel;\r\n\r\n // tweak these classes to match your design system / tokens\r\n const statusClasses =\r\n status === \"success\"\r\n ? \"btn-msg-success\"\r\n : status === \"error\"\r\n ? \"btn-destructive\"\r\n : \"btn-outline focus-ring-outline\";\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n {...buttonProps}\r\n onClick={handleClick}\r\n className={`inline-flex items-center justify-center rounded-4 px-1.5 py-1 gap-1 text-sm transition-colors cursor-pointer ${statusClasses} ${className}`}\r\n >\r\n {props.icon && <div className={\"size-5 *:size-5 relative\"}>{props.icon}</div>}\r\n <div className={\"text-center text-xl font-normal leading-7\"}>{label}</div>\r\n </button>\r\n );\r\n}\r\n\r\nMessageButton.displayName = \"MessageButton\";","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { UserIcon } from \"@bubo-squared/icons\";\r\n\r\ntype AvatarVariant = \"initial\" | \"icon\" | \"image\";\r\n\r\nconst avatarVariants = cva(\r\n \"relative inline-flex items-center justify-center rounded-full border-(--border-secondary) border-1 bg-(--background-primary) text-(--text-primary) overflow-hidden \" +\r\n \"hover:border-(--focus-secondary) focus-visible:border-(--focus-primary) focus-visible:outline-none\",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"w-5 h-5 hover:border-2 focus-visible:border-2\",\r\n \"24\": \"w-6 h-6 hover:border-2 focus-visible:border-2\",\r\n \"32\": \"w-8 h-8 hover:border-2 focus-visible:border-2\",\r\n \"40\": \"w-10 h-10 hover:border-2 focus-visible:border-2\",\r\n \"48\": \"w-12 h-12 hover:border-2 focus-visible:border-2\",\r\n \"56\": \"w-14 h-14 hover:border-4 focus-visible:border-4\",\r\n \"64\": \"w-16 h-16 hover:border-4 focus-visible:border-4\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nconst avatarInitialsVariants = cva(\r\n \"flex items-center justify-center text-(--text-primary) leading-none \",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"footnote-xs-medium\",\r\n \"24\": \"footnote-medium\",\r\n \"32\": \"paragraph-s font-medium\",\r\n \"40\": \"paragraph-m font-medium\",\r\n \"48\": \"paragraph-l font-medium\",\r\n \"56\": \"subtitle font-medium\",\r\n \"64\": \"h6-title font-medium\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nconst avatarIconVariants = cva(\r\n \"flex items-center justify-center text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n \"20\": \"size-3 [&>svg]:size-3\",\r\n \"24\": \"size-3.5 [&>svg]:size-3.5\",\r\n \"32\": \"size-4 [&>svg]:size-4\",\r\n \"40\": \"size-5 [&>svg]:size-5\",\r\n \"48\": \"size-6 [&>svg]:size-6\",\r\n \"56\": \"size-7 [&>svg]:size-7\",\r\n \"64\": \"size-8 [&>svg]:size-8\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"32\",\r\n },\r\n }\r\n);\r\n\r\nexport interface AvatarProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof avatarVariants> {\r\n /**\r\n * Visual variant: initials, icon or image.\r\n */\r\n variant?: AvatarVariant;\r\n /**\r\n * Text rendered when variant=\"initial\".\r\n */\r\n initials?: string;\r\n /**\r\n * Image source when variant=\"image\".\r\n */\r\n src?: string;\r\n /**\r\n * Accessible alt text for the image.\r\n */\r\n alt?: string;\r\n /**\r\n * Render as child via Radix Slot. When true, Avatar will not render a native\r\n * button element, but instead pass props to the child component.\r\n */\r\n asChild?: boolean;\r\n}\r\n\r\nexport const Avatar = React.forwardRef<HTMLButtonElement, AvatarProps>(\r\n (props, ref) => {\r\n const {\r\n asChild = false,\r\n variant = \"initial\",\r\n size = \"32\",\r\n initials = \"RA\",\r\n src,\r\n alt,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"button\";\r\n\r\n const hasImage = variant === \"image\" && typeof src === \"string\" && src.length > 0;\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(avatarVariants({ size }), className)}\r\n {...rest}\r\n >\r\n {hasImage ? (\r\n <img\r\n src={src}\r\n alt={alt}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : null}\r\n\r\n {!hasImage && variant === \"initial\" && (\r\n <span className={cn(avatarInitialsVariants({ size }), \"relative bottom-px\")} style={{ marginBottom: 0 }}>{initials}</span>\r\n )}\r\n\r\n {!hasImage && variant === \"icon\" && (\r\n <span className={cn(avatarIconVariants({ size }))}>\r\n <UserIcon />\r\n </span>\r\n )}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nAvatar.displayName = \"Avatar\";\r\n\r\n","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeVariants = cva(\r\n \"inline-flex items-center justify-center rounded-4 leading-none whitespace-nowrap gap-1 px-1 py-0\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"px-1 paragraph-s\",\r\n md: \"px-1 paragraph-m\",\r\n lg: \"px-1.5 subtitle\",\r\n xl: \"px-2 h6-title\",\r\n },\r\n variant: {\r\n primary:\r\n \"bg-(--background-secondary) text-(--text-primary)\",\r\n secondary:\r\n \"bg-(--background-primary) border-1 border-(--border-primary) text-(--text-primary)\",\r\n active:\r\n \"bg-(--color-ac-lilac) text-(--text-neutral-badge-black)\",\r\n informal:\r\n \"bg-(--color-ac-neon-blue) text-(--text-neutral-badge-black)\",\r\n success:\r\n \"bg-(--color-ac-neon-green) text-(--text-neutral-badge-black)\",\r\n warning:\r\n \"bg-(--color-ac-light-orange) text-(--text-neutral-badge-black)\",\r\n error:\r\n \"bg-(--color-s-error-300) text-(--text-neutral-badge-black)\",\r\n disabled:\r\n \"bg-(--background-primary-disabled) border-1 border-(--border-primary-disabled) text-(--text-primary-disabled)\",\r\n \"double-default\":\r\n \"bg-(--background-secondary) text-(--text-primary)\",\r\n \"double-current\":\r\n \"bg-(--color-ac-lilac) text-(--text-neutral-badge-black)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n variant: \"primary\",\r\n },\r\n }\r\n);\r\n\r\ntype BadgeVariant =\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"informal\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"error\"\r\n | \"disabled\"\r\n | \"active\"\r\n\r\ntype BadgeSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\nexport interface BadgeProps\r\n extends VariantProps<typeof badgeVariants> {\r\n asChild?: boolean;\r\n label: string;\r\n value?: string;\r\n className?: string;\r\n size?: BadgeSize;\r\n variant?: BadgeVariant;\r\n}\r\n\r\nexport const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(\r\n (props, ref) => {\r\n const {\r\n asChild = false,\r\n label,\r\n value,\r\n size = \"sm\",\r\n variant = \"primary\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"div\";\r\n\r\n return (\r\n <Comp\r\n ref={ref}\r\n className={cn(badgeVariants({ size, variant }), className)}\r\n {...rest}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {value ? (\r\n <>\r\n <span className=\"font-normal\">{label}</span>\r\n <span className=\"font-normal\">:</span>\r\n <span className=\"font-medium\">{value}</span>\r\n </>\r\n ) : (\r\n <span className=\"font-normal\">{label}</span>\r\n )}\r\n </Comp>\r\n );\r\n }\r\n);\r\n\r\nBadge.displayName = \"Badge\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeDigitVariants = cva(\r\n \"inline-flex items-center justify-center leading-none whitespace-nowrap text-(--text-primary-inverse)\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"px-[6px] rounded-2 caption-medium\",\r\n md: \"px-2 py-[2px] rounded-4 paragraph-s-medium\",\r\n },\r\n variant: {\r\n primary:\r\n \"bg-(--background-brand)\",\r\n secondary:\r\n \"bg-(--background-primary) border-1 border-(--border-secondary) text-(--text-secondary)\",\r\n informal:\r\n \"bg-(--background-informal)\",\r\n success:\r\n \"bg-(--background-success)\",\r\n warning:\r\n \"bg-(--background-warning)\",\r\n error:\r\n \"bg-(--background-error)\",\r\n disabled:\r\n \"bg-(--background-primary) border-1 border-(--border-primary-disabled) text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n variant: \"primary\",\r\n },\r\n }\r\n);\r\n\r\nexport type BadgeDigitSize = \"sm\" | \"md\";\r\n\r\nexport type BadgeDigitVariant =\r\n | \"primary\"\r\n | \"secondary\"\r\n | \"informal\"\r\n | \"success\"\r\n | \"warning\"\r\n | \"error\"\r\n | \"disabled\";\r\n\r\nexport interface BadgeDigitProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof badgeDigitVariants> {\r\n /** The numeric value to display inside the badge. */\r\n value: string | number;\r\n size?: BadgeDigitSize;\r\n variant?: BadgeDigitVariant;\r\n}\r\n\r\nexport const BadgeDigit = React.forwardRef<HTMLDivElement, BadgeDigitProps>(\r\n (props, ref) => {\r\n const {\r\n value,\r\n size = \"sm\",\r\n variant = \"primary\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(badgeDigitVariants({ size, variant }), className)}\r\n style={{ marginBottom: 0 }}\r\n {...rest}\r\n >\r\n {String(value)}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBadgeDigit.displayName = \"BadgeDigit\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst badgeDotVariants = cva(\"rounded-12 size-3\", {\r\n variants: {\r\n status: {\r\n disabled: \"bg-(--text-primary)\",\r\n informal: \"bg-(--background-informal)\",\r\n \"success/online\": \"bg-(--background-success)\",\r\n warning: \"bg-(--background-warning)\",\r\n error: \"bg-(--background-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n status: \"disabled\",\r\n },\r\n});\r\n\r\nexport interface BadgeDotProps\r\n extends VariantProps<typeof badgeDotVariants> {\r\n className?: string;\r\n}\r\n\r\nexport const BadgeDot: React.FC<BadgeDotProps> = ({ status, className }) => {\r\n return <div className={cn(badgeDotVariants({ status }), className)} />;\r\n};\r\n\r\nBadgeDot.displayName = \"BadgeDot\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface BadgeStatusProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n label: string;\r\n active?: boolean;\r\n dotClassName?: string;\r\n}\r\n\r\nexport const BadgeStatus = React.forwardRef<HTMLDivElement, BadgeStatusProps>(\r\n (props, ref) => {\r\n const {\r\n label,\r\n active = true,\r\n className,\r\n dotClassName,\r\n ...rest\r\n } = props;\r\n\r\n const textClasses = active\r\n ? \"caption-medium text-(--text-primary)\"\r\n : \"caption-medium text-(--text-primary-disabled)\";\r\n\r\n const dotClasses = active\r\n ? \"bg-(--background-informal)\"\r\n : \"bg-(--background-primary)\";\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"inline-flex items-center gap-2\", className)}\r\n {...rest}\r\n >\r\n <span\r\n className={cn(\r\n \"shrink-0 size-3 rounded-full\",\r\n dotClasses,\r\n dotClassName\r\n )}\r\n />\r\n <span className={textClasses} style={{ marginBottom: 0 }}>{label}</span>\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nBadgeStatus.displayName = \"BadgeStatus\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Button } from \"@/components/Buttons/Button\";\r\nimport type { ButtonProps as PrimaryButtonProps } from \"@/components/Buttons/Button\";\r\nimport { IconButton } from \"@/components/Buttons/IconButton\";\r\nimport type { ButtonProps as IconButtonProps } from \"@/components/Buttons/IconButton\";\r\nimport { IconButtonGroup } from \"@/components/Buttons/IconButtonGroup\";\r\nimport type {\r\n IconButtonGroupItem,\r\n IconButtonGroupProps,\r\n} from \"@/components/Buttons/IconButtonGroup\";\r\nimport { TargetIcon } from \"@bubo-squared/icons\";\r\n\r\nexport type DividerType =\r\n | \"line\"\r\n | \"text-lines\"\r\n | \"icon-lines\"\r\n | \"icon-group-lines\"\r\n | \"button-lines\";\r\n\r\ntype SimpleDividerType = Exclude<DividerType, \"button-lines\" | \"icon-lines\" | \"icon-group-lines\">;\r\n\r\ninterface BaseDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type?: SimpleDividerType;\r\n /** Label shown for text variant (e.g. \"OR\"). */\r\n label?: string;\r\n}\r\n\r\ntype ButtonVariant = PrimaryButtonProps[\"variant\"];\r\ntype IconButtonVariant = IconButtonProps[\"variant\"];\r\ntype IconGroupSize = IconButtonGroupProps[\"size\"];\r\n\r\ninterface IconLinesDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"icon-lines\";\r\n /** Icon rendered between the lines. */\r\n icon: React.ReactNode;\r\n /** Variant for the icon button between the lines. */\r\n iconButtonVariant?: IconButtonVariant;\r\n /** Click handler for the icon button between the lines. */\r\n onIconClick: React.MouseEventHandler<HTMLButtonElement>;\r\n /** Accessible label for the icon button. Falls back to \"More options\". */\r\n ariaLabel?: string;\r\n}\r\n\r\ninterface ButtonLinesDividerProps extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"button-lines\";\r\n /** Text inside the button between the lines. */\r\n buttonLabel: string;\r\n /** onClick handler for the button between the lines. */\r\n onButtonClick: React.MouseEventHandler<HTMLButtonElement>;\r\n /** Variant for the button between the lines. */\r\n buttonVariant?: ButtonVariant;\r\n}\r\n\r\ninterface IconGroupLinesDividerProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n type: \"icon-group-lines\";\r\n /** Items rendered as a segmented icon group between the lines. */\r\n iconGroupItems: IconButtonGroupItem[];\r\n /** Shared size for the icon group; defaults to IconButtonGroup default. */\r\n iconGroupSize?: IconGroupSize;\r\n}\r\n\r\nexport type DividerProps =\r\n | BaseDividerProps\r\n | IconLinesDividerProps\r\n | IconGroupLinesDividerProps\r\n | ButtonLinesDividerProps;\r\n\r\nconst lineClass = \"h-px flex-1 bg-(--border-secondary)\";\r\n\r\nexport const Divider: React.FC<DividerProps> = (props) => {\r\n const { type = \"line\", className, ...rest } = props;\r\n\r\n const showCenter = type !== \"line\";\r\n\r\n const textLabel =\r\n type === \"text-lines\" && \"label\" in rest && rest.label\r\n ? rest.label\r\n : \"OR\";\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex w-full items-center\",\r\n showCenter ? \"gap-2\" : \"gap-0\",\r\n className\r\n )}\r\n {...rest}\r\n >\r\n <div className={lineClass} />\r\n\r\n {type === \"text-lines\" && (\r\n <span\r\n className=\"footnote text-(--text-secondary)\"\r\n style={{ marginBottom: 0 }}\r\n >\r\n {textLabel}\r\n </span>\r\n )}\r\n\r\n {type === \"icon-lines\" && (\r\n <IconButton\r\n variant={\r\n props.type === \"icon-lines\" && props.iconButtonVariant\r\n ? props.iconButtonVariant\r\n : \"secondary\"\r\n }\r\n size=\"sm\"\r\n aria-label={\r\n props.type === \"icon-lines\" && props.ariaLabel\r\n ? props.ariaLabel\r\n : textLabel || \"More options\"\r\n }\r\n icon={props.type === \"icon-lines\" ? props.icon : <TargetIcon />}\r\n onClick={props.type === \"icon-lines\" ? props.onIconClick : undefined}\r\n />\r\n )}\r\n\r\n {type === \"icon-group-lines\" && (\r\n props.type === \"icon-group-lines\" ? (\r\n <IconButtonGroup\r\n items={props.iconGroupItems}\r\n size={props.iconGroupSize}\r\n />\r\n ) : null\r\n )}\r\n\r\n {type === \"button-lines\" && (\r\n <Button\r\n variant={\r\n props.type === \"button-lines\" && props.buttonVariant\r\n ? props.buttonVariant\r\n : \"secondary\"\r\n }\r\n size=\"md\"\r\n onClick={props.type === \"button-lines\" ? props.onButtonClick : undefined}\r\n >\r\n {props.type === \"button-lines\" ? props.buttonLabel : \"Label\"}\r\n </Button>\r\n )}\r\n\r\n {showCenter && <div className={lineClass} />}\r\n </div>\r\n );\r\n};\r\n\r\nDivider.displayName = \"Divider\";\r\n\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\r\n\r\nexport interface ProgressProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n /** Current value, from 0 to 100. */\r\n value: number;\r\n /** Optional label shown above the bar with the percentage on the right. */\r\n label?: string;\r\n /** Optional hint text shown below the bar. */\r\n hint?: string;\r\n /** Controls whether the label/percentage row is rendered. */\r\n showLabel?: boolean;\r\n /** Controls whether the hint text is rendered. */\r\n showHint?: boolean;\r\n /** Visual height of the bar. */\r\n size?: ProgressSize;\r\n}\r\n\r\nconst sizeToBarClasses: Record<ProgressSize, string> = {\r\n lg: \"h-4 rounded-16\",\r\n md: \"h-2 rounded-8\",\r\n sm: \"h-1 rounded-4\",\r\n};\r\n\r\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\r\n (props, ref) => {\r\n const {\r\n value,\r\n label,\r\n hint,\r\n showLabel = true,\r\n showHint = !!hint,\r\n size = \"lg\",\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const clamped = Number.isFinite(value)\r\n ? Math.min(100, Math.max(0, value))\r\n : 0;\r\n\r\n const percentageLabel = `${Math.round(clamped)}%`;\r\n\r\n const barHeightClasses = sizeToBarClasses[size];\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\"flex flex-col gap-2 items-start w-full\", className)}\r\n role=\"progressbar\"\r\n aria-valuenow={clamped}\r\n aria-valuemin={0}\r\n aria-valuemax={100}\r\n aria-label={label}\r\n {...rest}\r\n >\r\n {showLabel && label && (\r\n <div className=\"flex w-full items-center justify-between\">\r\n <span className=\"paragraph-s-bold text-(--text-primary)\" style={{ marginBottom: 0 }}>{label}</span>\r\n <span className=\"footnote text-(--text-secondary)\" style={{ marginBottom: 0 }}>\r\n {percentageLabel}\r\n </span>\r\n </div>\r\n )}\r\n\r\n <div className={cn(\"w-full bg-(--chart-mono) overflow-hidden\", barHeightClasses)}>\r\n <div\r\n className={cn(\r\n \"bg-(--chart-brand) h-full\",\r\n size === \"lg\" ? \"rounded-4\" : size === \"md\" ? \"rounded-2\" : \"rounded-[1px]\"\r\n )}\r\n style={{ width: `${clamped}%` }}\r\n />\r\n </div>\r\n\r\n {showHint && hint && (\r\n <p className=\"caption text-(--text-secondary)\" style={{ marginBottom: 0 }}>\r\n {hint}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nProgress.displayName = \"Progress\";\r\n\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport {\r\n BookmarkCheckIcon,\r\n CheckIcon,\r\n CrossIcon,\r\n PlusIcon,\r\n StarIcon,\r\n} from \"@bubo-squared/icons\";\r\n\r\nexport type StatusAvatarVariant =\r\n | \"verified\"\r\n | \"bookmark\"\r\n | \"favorite\"\r\n | \"add\"\r\n | \"remove\"\r\n | \"offline\"\r\n | \"online\"\r\n | \"away\"\r\n | \"busy\";\r\n\r\ntype IconVariant =\r\n | \"verified\"\r\n | \"bookmark\"\r\n | \"favorite\"\r\n | \"add\"\r\n | \"remove\";\r\n\r\nconst iconStatusVariants = cva(\r\n \"inline-flex size-5 items-center justify-center rounded-full border-1 border-(--text-primary-inverse) p-1\",\r\n {\r\n variants: {\r\n variant: {\r\n verified: \"bg-(--background-informal)\",\r\n bookmark: \"bg-(--background-brand)\",\r\n favorite: \"bg-(--background-success)\",\r\n add: \"bg-(--background-primary-hover)\",\r\n remove: \"bg-(--background-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"verified\",\r\n },\r\n }\r\n);\r\n\r\nconst presenceDotBase =\r\n \"inline-flex h-5 w-5 items-center justify-center\";\r\n\r\nconst presenceDotByVariant: Record<\r\n Exclude<StatusAvatarVariant, IconVariant>,\r\n string\r\n> = {\r\n offline:\r\n \"bg-(--background-primary) border-1 border-(--text-primary-inverse)\",\r\n online:\r\n \"bg-(--background-success) border-1 border-(--text-primary-inverse)\",\r\n away:\r\n \"bg-(--background-warning) border-1 border-(--text-primary-inverse)\",\r\n busy:\r\n \"bg-(--background-error) border-1 border-(--text-primary-inverse)\",\r\n};\r\n\r\nexport interface StatusAvatarProps\r\n extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Visual style of the status badge.\r\n */\r\n variant?: StatusAvatarVariant;\r\n}\r\n\r\nexport const StatusAvatar = React.forwardRef<\r\n HTMLDivElement,\r\n StatusAvatarProps\r\n>((props, ref) => {\r\n const { variant = \"verified\", className, ...rest } = props;\r\n\r\n if (\r\n variant === \"offline\" ||\r\n variant === \"online\" ||\r\n variant === \"away\" ||\r\n variant === \"busy\"\r\n ) {\r\n const dotClasses = presenceDotByVariant[variant];\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(\r\n presenceDotBase,\r\n className\r\n )}\r\n {...rest}\r\n >\r\n <div className={cn(dotClasses, \"size-3.5 rounded-full\")} />\r\n </div>\r\n );\r\n }\r\n\r\n const iconVariant = variant as IconVariant;\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(iconStatusVariants({ variant: iconVariant }), className)}\r\n {...rest}\r\n >\r\n {iconVariant === \"verified\" && (\r\n <CheckIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"bookmark\" && (\r\n <BookmarkCheckIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"favorite\" && (\r\n <StarIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"add\" && (\r\n <PlusIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"remove\" && (\r\n <CrossIcon className=\"size-3 text-(--text-button-white)\" />\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\nStatusAvatar.displayName = \"StatusAvatar\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n\r\nconst tagVariants = cva(\r\n \"inline-flex flex-row items-center justify-center rounded-6 gap-2 px-3 overflow-hidden \" +\r\n \"border-1 border-(--border-secondary) bg-(--background-neutral) \" +\r\n \"hover:border-(--border-secondary-hover) \" +\r\n \"focus:border-(--border-brand) focus-ring-primary \",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"py-0.5\",\r\n md: \"py-1.5\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"sm\",\r\n }\r\n }\r\n);\r\n\r\nconst disabledTag = \"pointer-events-none border-(--border-secondary-disabled) bg-(--background-neutral-disabled) text-(--text-primary-disabled)\"\r\n\r\nconst iconClasses = \"flex items-center justify-center w-5 h-5 [&>*]:w-5 [&>*]:h-5 shrink-0 text-(--text-primary)\";\r\n\r\nexport interface TagProps extends\r\n VariantProps<typeof tagVariants> {\r\n asChild?: boolean;\r\n label: string;\r\n value?: string;\r\n className?: string;\r\n leadingIcon?: React.ReactElement<{ disabled?: boolean }>;\r\n trailingIcon?: React.ReactElement<{ disabled?: boolean }>;\r\n size: \"sm\" | \"md\";\r\n disabled?: boolean;\r\n}\r\n\r\n\r\nexport const Tag = React.forwardRef<HTMLDivElement, TagProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n size = \"sm\",\r\n className,\r\n asChild = false,\r\n disabled = false,\r\n label,\r\n value,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : 'div'\r\n\r\n const leading = props.leadingIcon && React.isValidElement(props.leadingIcon)\r\n ? React.cloneElement(props.leadingIcon, { disabled, ...props.leadingIcon.props })\r\n : null;\r\n\r\n const trailing = props.trailingIcon && React.isValidElement(props.trailingIcon)\r\n ? React.cloneElement(props.trailingIcon, { disabled, ...props.trailingIcon.props })\r\n : null;\r\n\r\n return (\r\n <Comp\r\n className={cn(tagVariants({ size }), disabled && disabledTag, className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {leading && <div className={iconClasses}>{leading}</div>}\r\n {value ? (\r\n <div className=\"flex flex-row gap-1 items-center\">\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default font-normal\"}>{label}</span>\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default font-normal\"}>:</span>\r\n <span className={\"text-(--text-primary) paragraph-l-medium mb-0! cursor-default font-medium\"}>{value}</span>\r\n </div>\r\n ) : (\r\n <span className={\"text-(--text-primary) paragraph-l mb-0! cursor-default\"}>{label}</span>\r\n )}\r\n {trailing && <div className={iconClasses}>{trailing}</div>}\r\n </Comp>\r\n )\r\n }\r\n);\r\n","import * as React from \"react\";\r\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\r\nimport { CheckIcon } from \"@bubo-squared/icons\";\r\nimport { MinusIcon } from \"@bubo-squared/icons\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface CheckboxProps\r\n extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {\r\n label?: string;\r\n}\r\n\r\nexport function Checkbox({ label, className, ...props }: CheckboxProps) {\r\n return (\r\n <label className=\"inline-flex items-center gap-(--space-12) cursor-pointer select-none\">\r\n <CheckboxPrimitive.Root\r\n className={cn(\r\n \"group flex h-5 w-5 items-center justify-center rounded-2 border border-(--border-secondary) bg-(--background-neutral) text-(--text-primary)\",\r\n \"data-[state=checked]:bg-(--background-brand) data-[state=checked]:text-(--text-button-white) data-[state=checked]:border-none\",\r\n \"data-[state=indeterminate]:bg-(--background-brand) data-[state=indeterminate]:text-(--text-button-white) data-[state=indeterminate]:border-none\",\r\n \"data-[state=checked]:hover:bg-(--background-brand-hover) data-[state=indeterminate]:hover:bg-(--background-brand-hover)\",\r\n \"focus-visible:border-(--border-brand)\",\r\n \"disabled:bg-(--background-primary-disabled) disabled:border-none disabled:text-(--icon-primary-disabled)\",\r\n \"data-[state=checked]:disabled:bg-(--background-primary-disabled) data-[state=checked]:disabled:border-none data-[state=checked]:disabled:text-(--icon-primary-disabled)\",\r\n \"data-[state=indeterminate]:disabled:bg-(--background-primary-disabled) data-[state=indeterminate]:disabled:border-none data-[state=indeterminate]:disabled:text-(--icon-primary-disabled)\",\r\n \"focus-ring-primary hover:cursor-pointer hover:border-(--border-secondary-hover)\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-current\">\r\n <CheckIcon className=\"h-5 w-5 hidden group-data-[state=checked]:block\" />\r\n <MinusIcon className=\"h-5 w-5 hidden group-data-[state=indeterminate]:block\" />\r\n </CheckboxPrimitive.Indicator>\r\n </CheckboxPrimitive.Root>\r\n\r\n {label && (\r\n <span className=\"paragraph-m-medium text-(--text-primary)\" style={{ marginBottom: 0 }}>\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n} ","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ChevronDownIcon } from \"@bubo-squared/icons\";\r\n\r\nexport type DropdownSize = \"large\" | \"extra-large\";\r\nexport type DropdownStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport interface DropdownOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nconst dropdownWrapperBase =\r\n \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nconst dropdownTriggerVariants = cva(\r\n \"group flex w-full items-center justify-between rounded-4 border bg-(--background-primary) \" +\r\n \"px-3 py-2 text-left transition-colors cursor-pointer focus-ring-primary focus:border-(--border-brand) \" +\r\n \"hover:bg-(--background-primary-hover) disabled:bg-(--background-primary) \" +\r\n \"disabled:border-(--border-secondary-disabled) disabled:text-(--text-primary-disabled) disabled:cursor-default\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"h-11\",\r\n \"extra-large\": \"h-14\",\r\n },\r\n status: {\r\n default: \"border-(--border-secondary)\",\r\n success: \"border-(--border-success)\",\r\n error: \"border-(--border-error)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n status: \"default\",\r\n },\r\n }\r\n);\r\n\r\nconst dropdownTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\"\r\n },\r\n hasValue: {\r\n false: \"text-(--text-secondary)\",\r\n true: \"text-(--text-primary)\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n hasValue: false,\r\n }\r\n});\r\n\r\nconst dropdownIconVariants = cva(\"flex items-center justify-center shrink-0\", {\r\n variants: {\r\n size: {\r\n large: \"w-5 h-5\",\r\n \"extra-large\": \"w-6 h-6\",\r\n },\r\n disabled: {\r\n false: \"text-(--icon-primary)\",\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n disabled: false,\r\n }\r\n});\r\n\r\nexport interface DropdownProps\r\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\">,\r\n VariantProps<typeof dropdownTriggerVariants> {\r\n label?: string;\r\n showLabel?: boolean;\r\n hint?: string;\r\n showHint?: boolean;\r\n placeholder?: string;\r\n status?: DropdownStatus;\r\n options: DropdownOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n /** Force the menu open (used mainly for docs/Storybook states). */\r\n showMenu?: boolean;\r\n}\r\n\r\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\r\n const {\r\n label = \"Field Label\",\r\n showLabel = true,\r\n hint = \"This is a hint text to help user.\",\r\n showHint = true,\r\n placeholder = \"Placeholder text\",\r\n size = \"large\",\r\n status = \"default\",\r\n disabled,\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n className,\r\n showMenu,\r\n ...buttonProps\r\n } = props;\r\n\r\n const dropdownRef = React.useRef<HTMLDivElement | null>(null);\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string | undefined>(\r\n defaultValue\r\n );\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const currentValue = isControlled ? value : internalValue;\r\n const selectedOption = options.find((opt) => opt.value === currentValue);\r\n const hasValue = !!selectedOption;\r\n\r\n const isOpen = showMenu ?? open;\r\n\r\n const handleToggle = () => {\r\n if (disabled) return;\r\n if (showMenu === undefined) {\r\n setOpen((prev) => !prev);\r\n }\r\n };\r\n\r\n const handleSelect = (optionValue: string) => {\r\n if (!isControlled) {\r\n setInternalValue(optionValue);\r\n }\r\n onChange?.(optionValue);\r\n if (showMenu === undefined) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const triggerId = React.useId();\r\n const labelId = `${triggerId}-label`;\r\n const hintId = `${triggerId}-hint`;\r\n\r\n React.useEffect(() => {\r\n if (showMenu !== undefined) return;\r\n\r\n const handleClickOutside = (event: MouseEvent) => {\r\n if (!dropdownRef.current) return;\r\n if (!dropdownRef.current.contains(event.target as Node)) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, [showMenu]);\r\n\r\n return (\r\n <div ref={dropdownRef} className={dropdownWrapperBase}>\r\n {showLabel && (\r\n <label\r\n htmlFor={triggerId}\r\n id={labelId}\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled ? \"text-(--text-primary-disabled)\" : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n <button\r\n type=\"button\"\r\n id={triggerId}\r\n aria-haspopup=\"listbox\"\r\n aria-expanded={isOpen}\r\n aria-labelledby={showLabel ? labelId : undefined}\r\n aria-describedby={showHint ? hintId : undefined}\r\n disabled={disabled}\r\n className={cn(\r\n dropdownTriggerVariants({ size, status }),\r\n className\r\n )}\r\n onClick={handleToggle}\r\n data-open={isOpen || undefined}\r\n {...buttonProps}\r\n >\r\n <span\r\n className={cn(\r\n dropdownTextVariants({\r\n size,\r\n hasValue,\r\n disabled: !!disabled,\r\n })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hasValue ? selectedOption?.label : placeholder}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n dropdownIconVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n <ChevronDownIcon />\r\n </span>\r\n </button>\r\n\r\n {isOpen && options.length > 0 && (\r\n <div className=\"absolute z-10 mt-1 w-full min-w-343 rounded-4 border border-(--border-primary-hover) bg-(--background-neutral) shadow-card-md flex overflow-y-scroll dropdown-scrollbar max-h-79\">\r\n <ul role=\"listbox\" className=\"flex flex-1 flex-col\">\r\n {options.map((opt) => {\r\n const selected = opt.value === currentValue;\r\n return (\r\n <li\r\n key={opt.value}\r\n className={cn(\r\n \"bg-(--background-neutral) border-b border-(--border-secondary) last:border-b-0\",\r\n selected && \"bg-(--background-secondary)\"\r\n )}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"flex w-full items-center gap-2 pl-(--space-8) pr-(--space-16) py-(--space-8) text-left paragraph-l text-(--text-primary) hover:bg-(--background-secondary)\"\r\n style={{ marginBottom: 0 }}\r\n role=\"option\"\r\n aria-selected={selected}\r\n onClick={() => handleSelect(opt.value)}\r\n >\r\n {opt.label}\r\n </button>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {showHint && (\r\n <p\r\n id={hintId}\r\n className={cn(\r\n \"caption\",\r\n disabled ? \"text-(--text-primary-disabled)\" : \"text-(--text-secondary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nDropdown.displayName = \"Dropdown\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type FieldStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport interface FieldProps {\r\n label?: string;\r\n hint?: string;\r\n status?: FieldStatus;\r\n disabled?: boolean | null;\r\n className?: string;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst fieldBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport const Field: React.FC<FieldProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n status = \"default\",\r\n disabled,\r\n className,\r\n children,\r\n } = props;\r\n\r\n const fieldId = React.useId();\r\n const labelId = label ? `${fieldId}-label` : undefined;\r\n const hintId = hint ? `${fieldId}-hint` : undefined;\r\n\r\n const hintColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-secondary)\";\r\n\r\n const labelColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\";\r\n\r\n return (\r\n <div className={cn(fieldBase, className)}>\r\n {label && (\r\n <label\r\n id={labelId}\r\n className={cn(\"paragraph-s\", labelColorClass)}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n {children}\r\n </div>\r\n\r\n <p\r\n id={hint ? hintId : undefined}\r\n className={cn(\"caption\", hint ? hintColorClass : \"invisible\")}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint || \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nField.displayName = \"Field\";\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Input } from \"../ui/input\";\r\nimport { Field } from \"./Field\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type PasswordInputSize = \"large\" | \"extra-large\";\r\nexport type PasswordInputStatus = \"default\" | \"success\" | \"error\";\r\nexport type PasswordInputVariant = \"icons\" | \"action\";\r\n\r\nconst passwordTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled)\",\r\n false: \"text-(--text-primary)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n disabled: false,\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\r\n \"flex items-center justify-center shrink-0 text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nconst actionButtonVariants = cva(\r\n \"flex items-center justify-center shrink-0 cursor-pointer bg-transparent border-0 p-0 text-left \" +\r\n \"paragraph-s text-(--icon-primary) hover:text-(--icon-primary-hover) focus:outline-none \",\r\n {\r\n variants: {\r\n size: {\r\n large: \"paragraph-s\",\r\n \"extra-large\": \"paragraph-m\",\r\n },\r\n disabled: {\r\n true:\r\n \"cursor-default text-(--text-primary-disabled) hover:text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nexport interface PasswordInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"disabled\"> {\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n status?: PasswordInputStatus;\r\n size?: PasswordInputSize;\r\n variant?: PasswordInputVariant;\r\n leadingIcon?: React.ReactNode;\r\n trailingIcon?: React.ReactNode;\r\n actionLabel?: string;\r\n onActionClick?: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const PasswordInput: React.FC<PasswordInputProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n placeholder = \"••••••••••••\",\r\n size = \"large\",\r\n status = \"default\",\r\n variant = \"icons\",\r\n disabled,\r\n className,\r\n leadingIcon,\r\n trailingIcon,\r\n actionLabel = \"Action\",\r\n onActionClick,\r\n value,\r\n defaultValue,\r\n onChange,\r\n ...inputProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue = (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n\r\n const showLeadingIcon = variant === \"icons\" && !!leadingIcon;\r\n const showTrailingIcon = variant === \"icons\" && !!trailingIcon;\r\n const showAction = variant === \"action\" && !!actionLabel;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n >\r\n <InputShell\r\n size={size}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {leadingIcon}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type={\"password\"}\r\n disabled={disabled ?? undefined}\r\n placeholder={placeholder}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n variant=\"bare\"\r\n className={cn(\r\n passwordTextVariants({ size, disabled: !!disabled })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n\r\n {showTrailingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {trailingIcon}\r\n </span>\r\n )}\r\n\r\n {showAction && (\r\n <button\r\n type=\"button\"\r\n style={{ marginBottom: 0 }}\r\n className={cn(\r\n actionButtonVariants({ size, disabled: !!disabled })\r\n )}\r\n onClick={disabled ? undefined : onActionClick}\r\n >\r\n {actionLabel}\r\n </button>\r\n )}\r\n </InputShell>\r\n </Field>\r\n );\r\n};\r\n\r\nPasswordInput.displayName = \"PasswordInput\";","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\ntype InputVariant = \"default\" | \"bare\"\r\n\r\nexport interface InputProps\r\n extends React.ComponentProps<\"input\"> {\r\n variant?: InputVariant\r\n}\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n ({ className, type, variant = \"default\", ...props }, ref) => {\r\n const base =\r\n \"text-(--text-primary) placeholder:text-(--text-secondary) disabled:text-(--text-primary-disabled) disabled:placeholder:text-(--text-primary-disabled) \" +\r\n \"selection:bg-primary selection:text-primary-foreground file:text-foreground\"\r\n\r\n const defaultStyles =\r\n \"dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 shadow-xs \" +\r\n \"transition-[color,box-shadow] file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium \" +\r\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 \" +\r\n \"focus-visible:border-ring focus-visible:ring-0 focus-visible:shadow-none \" +\r\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\"\r\n\r\n const bareStyles = \"bg-transparent outline-none w-full\"\r\n\r\n return (\r\n <input\r\n ref={ref}\r\n type={type}\r\n data-slot=\"input\"\r\n className={cn(\r\n base,\r\n variant === \"default\" ? defaultStyles : bareStyles,\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\n\r\nInput.displayName = \"Input\"\r\n\r\nexport { Input }\r\n","import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type InputShellSize = \"large\" | \"extra-large\";\r\nexport type InputShellStatus = \"default\" | \"success\" | \"error\";\r\n\r\nexport const inputShellVariants = cva(\r\n \"group flex w-full items-center rounded-4 border bg-(--background-primary) text-left cursor-text \" +\r\n \"border-(--border-secondary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"gap-2 px-2 py-2 h-11\",\r\n \"extra-large\": \"gap-2 px-[10px] py-2 h-14\",\r\n },\r\n status: {\r\n default: \"input-default\",\r\n success: \"input-success\",\r\n error: \"input-error\",\r\n },\r\n disabled: {\r\n true:\r\n \"bg-(--background-primary-disabled) border-(--border-secondary-disabled) text-(--text-primary-disabled) cursor-default\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n status: \"default\",\r\n },\r\n }\r\n);\r\n\r\nexport interface InputShellProps\r\n extends React.HTMLAttributes<HTMLDivElement>,\r\n VariantProps<typeof inputShellVariants> { }\r\n\r\nexport const InputShell = React.forwardRef<HTMLDivElement, InputShellProps>(\r\n ({ size, status, disabled, className, ...rest }, ref) => {\r\n return (\r\n <div\r\n ref={ref}\r\n aria-disabled={disabled || undefined}\r\n className={cn(\r\n inputShellVariants({ size, status, disabled }),\r\n className\r\n )}\r\n {...rest}\r\n />\r\n );\r\n }\r\n);\r\n\r\nInputShell.displayName = \"InputShell\";\r\n","import * as React from \"react\";\r\nimport { CheckIcon, CodeIcon } from \"@bubo-squared/icons\";\r\nimport * as RPNInput from \"react-phone-number-input\";\r\nimport flags from \"react-phone-number-input/flags\";\r\n\r\nimport { Button } from \"@/components/ui/button\";\r\nimport {\r\n Command,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandInput,\r\n CommandItem,\r\n CommandList,\r\n} from \"@/components/ui/command\";\r\nimport { Input } from \"@/components/ui/input\";\r\nimport {\r\n Popover,\r\n PopoverContent,\r\n PopoverTrigger,\r\n} from \"@/components/ui/popover\";\r\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport type { TextInputSize, TextInputStatus } from \"./TextInput\";\r\nimport { Field } from \"./Field\";\r\nimport { cva } from \"class-variance-authority\";\r\n\r\ntype PhoneInputProps = Omit<\r\n React.ComponentProps<\"input\">,\r\n \"onChange\" | \"value\" | \"ref\"\r\n> &\r\n Omit<RPNInput.Props<typeof RPNInput.default>, \"onChange\"> & {\r\n onChange?: (value: RPNInput.Value) => void;\r\n } & {\r\n className?: string;\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n status?: TextInputStatus;\r\n size?: TextInputSize;\r\n };\r\n\r\nconst inputBase = \"h-full rounded-4 border-(--border-secondary) bg-(--background-primary) hover:border-(--border-secondary-hover)\";\r\n\r\nconst sizeBase = cva(\"flex w-full\", {\r\n variants: {\r\n size: {\r\n large: \"h-11 [&_button]:gap-2\",\r\n \"extra-large\": \"h-14 [&_button]:gap-3\"\r\n },\r\n }\r\n}\r\n);\r\n\r\nconst inputTextVariants = cva(\"\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n disabled: {\r\n true: \"text-(--text-primary-disabled) border-(--border-secondary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst wrapperStatusClass: Record<TextInputStatus, string> = {\r\n default: \"input-default-nested\",\r\n success: \"input-success-nested\",\r\n error: \"input-error-nested\"\r\n};\r\n\r\nconst PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps> =\r\n React.forwardRef<React.ComponentRef<typeof RPNInput.default>, PhoneInputProps>(\r\n (props, ref) => {\r\n\r\n const {\r\n className, onChange, value,\r\n label, hint, placeholder, size = \"large\",\r\n disabled = false, status = \"default\", ...rest\r\n } = props;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n >\r\n <div className={cn(\"w-full\", wrapperStatusClass[status])}>\r\n <RPNInput.default\r\n ref={ref}\r\n className={cn(\r\n sizeBase({ size }),\r\n inputTextVariants({ size, disabled }),\r\n )}\r\n style={{ marginBottom: 0 }}\r\n flagComponent={FlagComponent}\r\n countrySelectComponent={CountrySelect}\r\n inputComponent={InputComponent}\r\n smartCaret={false}\r\n value={value || undefined}\r\n international={true}\r\n countryCallingCodeEditable={false}\r\n /**\r\n * Handles the onChange event.\r\n *\r\n * react-phone-number-input might trigger the onChange event as undefined\r\n * when a valid phone number is not entered. To prevent this,\r\n * the value is coerced to an empty string.\r\n *\r\n * @param {E164Number | undefined} value - The entered value\r\n */\r\n onChange={(value) => onChange?.(value || (\"\" as RPNInput.Value))}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n {...rest}\r\n />\r\n </div>\r\n </Field>\r\n );\r\n },\r\n );\r\nPhoneInput.displayName = \"PhoneInput\";\r\n\r\nconst InputComponent = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>((props, ref) => {\r\n const { className, ...rest } = props;\r\n\r\n return (\r\n <Input\r\n ref={ref}\r\n placeholder={rest.placeholder}\r\n className={cn(inputBase, className)}\r\n {...rest}\r\n />\r\n );\r\n});\r\nInputComponent.displayName = \"InputComponent\";\r\n\r\ntype CountryEntry = { label: string; value: RPNInput.Country | undefined };\r\n\r\ntype CountrySelectProps = {\r\n disabled?: boolean;\r\n value: RPNInput.Country;\r\n options: CountryEntry[];\r\n onChange: (country: RPNInput.Country) => void;\r\n};\r\n\r\nconst CountrySelect = ({\r\n disabled,\r\n value: selectedCountry,\r\n options: countryList,\r\n onChange,\r\n}: CountrySelectProps) => {\r\n const scrollAreaRef = React.useRef<HTMLDivElement>(null);\r\n const [searchValue, setSearchValue] = React.useState(\"\");\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n return (\r\n <Popover\r\n open={isOpen}\r\n modal\r\n onOpenChange={(open) => {\r\n setIsOpen(open);\r\n open && setSearchValue(\"\");\r\n }}\r\n >\r\n <PopoverTrigger asChild>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n className={cn(inputBase, \"flex gap-1 rounded-4 px-3 focus:z-10 mr-(--space-12) text-(--text-primary-disabled) hover:text-(--text-primary-hover) focus:text-(--text-primary-focus)\")}\r\n disabled={disabled}\r\n >\r\n <FlagComponent\r\n country={selectedCountry}\r\n countryName={selectedCountry}\r\n />\r\n <CodeIcon \r\n className={cn(\r\n \"-mr-2 size-4 opacity-50 rotate-90\",\r\n disabled ? \"hidden\" : \"opacity-100\",\r\n )}\r\n />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"w-[300px] p-0 relative left-4.5 bg-(--background-primary) shadow-card-md rounded-4 border-none outline-1 outline-solid outline-(--border-primary-hover) **:data-[slot='command-input-wrapper']:border-b-(--border-secondary)\">\r\n <Command>\r\n <CommandInput\r\n value={searchValue}\r\n onValueChange={(value) => {\r\n setSearchValue(value);\r\n setTimeout(() => {\r\n if (scrollAreaRef.current) {\r\n const viewportElement = scrollAreaRef.current.querySelector(\r\n \"[data-radix-scroll-area-viewport]\",\r\n );\r\n if (viewportElement) {\r\n viewportElement.scrollTop = 0;\r\n }\r\n }\r\n }, 0);\r\n }}\r\n placeholder=\"Search country...\"\r\n />\r\n <CommandList>\r\n <ScrollArea ref={scrollAreaRef} className=\"h-72\">\r\n <CommandEmpty>No country found.</CommandEmpty>\r\n <CommandGroup className={\"[&>div>div]:pl-4 [&>div>div]:pr-2 [&>div>div]:py-2 [&>div>div]:border-b [&>div>div]:border-b-(--border-secondary) [&>div>div]:cursor-pointer [&>div>div]:hover:bg-(--background-primary-hover) [&>div>div]:text-(--text-primary) [&>div>div]:hover:text-(--text-primary) p-0 pr-4\"}>\r\n {countryList.map(({ value, label }) =>\r\n value ? (\r\n <CountrySelectOption\r\n key={value}\r\n country={value}\r\n countryName={label}\r\n selectedCountry={selectedCountry}\r\n onChange={onChange}\r\n onSelectComplete={() => setIsOpen(false)}\r\n />\r\n ) : null,\r\n )}\r\n </CommandGroup>\r\n </ScrollArea>\r\n </CommandList>\r\n </Command>\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\ninterface CountrySelectOptionProps extends RPNInput.FlagProps {\r\n selectedCountry: RPNInput.Country;\r\n onChange: (country: RPNInput.Country) => void;\r\n onSelectComplete: () => void;\r\n}\r\n\r\nconst CountrySelectOption: React.FC<CountrySelectOptionProps> = (props) => {\r\n\r\n const {\r\n country,\r\n countryName,\r\n selectedCountry,\r\n onChange,\r\n onSelectComplete,\r\n } = props;\r\n\r\n\r\n const handleSelect = () => {\r\n onChange(country);\r\n onSelectComplete();\r\n };\r\n\r\n return (\r\n <CommandItem\r\n className=\"gap-2 data-[selected=true]:text-(--text-primary)\"\r\n onSelect={handleSelect}\r\n >\r\n <FlagComponent country={country} countryName={countryName} />\r\n <span className=\"flex-1 text-sm\">{countryName}</span>\r\n <span className=\"text-sm text-foreground/50\">{`+${RPNInput.getCountryCallingCode(country)}`}</span>\r\n <CheckIcon\r\n className={`ml-auto size-4 ${country === selectedCountry ? \"opacity-100\" : \"opacity-0\"}`}\r\n />\r\n </CommandItem>\r\n );\r\n};\r\n\r\nconst FlagComponent = ({ country, countryName }: RPNInput.FlagProps) => {\r\n const Flag = flags[country];\r\n\r\n return (\r\n <span className=\"flex h-4 w-6 overflow-hidden rounded-2 bg-foreground/20 [&_svg:not([class*='size-'])]:size-full\">\r\n {Flag && <Flag title={countryName} />}\r\n </span>\r\n );\r\n};\r\n\r\nexport { PhoneInput };","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-0 focus-visible:shadow-none aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive/90 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n \"icon-sm\": \"size-8\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { Command as CommandPrimitive } from \"cmdk\"\r\nimport { SearchIcon } from \"@bubo-squared/icons\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\nimport {\r\n Dialog,\r\n DialogContent,\r\n DialogDescription,\r\n DialogHeader,\r\n DialogTitle,\r\n} from \"@/components/ui/dialog\"\r\n\r\nfunction Command({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive>) {\r\n return (\r\n <CommandPrimitive\r\n data-slot=\"command\"\r\n className={cn(\r\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandDialog({\r\n title = \"Command Palette\",\r\n description = \"Search for a command to run...\",\r\n children,\r\n className,\r\n showCloseButton = true,\r\n ...props\r\n}: React.ComponentProps<typeof Dialog> & {\r\n title?: string\r\n description?: string\r\n className?: string\r\n showCloseButton?: boolean\r\n}) {\r\n return (\r\n <Dialog {...props}>\r\n <DialogHeader className=\"sr-only\">\r\n <DialogTitle>{title}</DialogTitle>\r\n <DialogDescription>{description}</DialogDescription>\r\n </DialogHeader>\r\n <DialogContent\r\n className={cn(\"overflow-hidden p-0\", className)}\r\n showCloseButton={showCloseButton}\r\n >\r\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\r\n {children}\r\n </Command>\r\n </DialogContent>\r\n </Dialog>\r\n )\r\n}\r\n\r\nfunction CommandInput({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\r\n return (\r\n <div\r\n data-slot=\"command-input-wrapper\"\r\n className=\"flex h-9 items-center gap-2 border-b px-3\"\r\n >\r\n <SearchIcon className=\"size-4 shrink-0 opacity-50 text-(--text-secondary)\" />\r\n <CommandPrimitive.Input\r\n data-slot=\"command-input\"\r\n className={cn(\r\n \"placeholder:text-(--text-secondary) text-(--text-primary) flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction CommandList({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\r\n return (\r\n <CommandPrimitive.List\r\n data-slot=\"command-list\"\r\n className={cn(\r\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandEmpty({\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\r\n return (\r\n <CommandPrimitive.Empty\r\n data-slot=\"command-empty\"\r\n className=\"py-6 text-center text-sm\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandGroup({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\r\n return (\r\n <CommandPrimitive.Group\r\n data-slot=\"command-group\"\r\n className={cn(\r\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandSeparator({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\r\n return (\r\n <CommandPrimitive.Separator\r\n data-slot=\"command-separator\"\r\n className={cn(\"bg-border -mx-1 h-px\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandItem({\r\n className,\r\n ...props\r\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\r\n return (\r\n <CommandPrimitive.Item\r\n data-slot=\"command-item\"\r\n className={cn(\r\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction CommandShortcut({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"span\">) {\r\n return (\r\n <span\r\n data-slot=\"command-shortcut\"\r\n className={cn(\r\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Command,\r\n CommandDialog,\r\n CommandInput,\r\n CommandList,\r\n CommandEmpty,\r\n CommandGroup,\r\n CommandItem,\r\n CommandShortcut,\r\n CommandSeparator,\r\n}\r\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n className={cn(\"relative\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className=\"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n // Base scrollbar track styling\n \"flex touch-none transition-colors select-none ml-1 pt-1 pb-1\",\n orientation === \"vertical\" &&\n \"h-full w-4\",\n orientation === \"horizontal\" &&\n \"h-4 flex-col\",\n className\n )}\n {...props}\n >\n {/* The draggable thumb/handle that indicates scroll position */}\n <ScrollAreaPrimitive.ScrollAreaThumb\n data-slot=\"scroll-area-thumb\"\n className=\"bg-(--background-secondary) relative flex-1 rounded mr-1 w-full ml-1\"\n />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\";\r\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\r\n\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type RadioGroupOrientation = \"vertical\" | \"horizontal\";\r\n\r\nexport interface RadioGroupOption {\r\n value: string;\r\n label: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface RadioGroupProps\r\n extends Omit<RadioGroupPrimitive.RadioGroupProps, \"children\" | \"orientation\" | \"onValueChange\"> {\r\n label?: string;\r\n hint?: string;\r\n orientation?: RadioGroupOrientation;\r\n options: RadioGroupOption[];\r\n disabled?: boolean;\r\n onValueChange?: (value: string) => void;\r\n}\r\n\r\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\r\n label,\r\n hint,\r\n options,\r\n orientation = \"vertical\",\r\n disabled = false,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n className,\r\n ...rootProps\r\n}) => {\r\n const groupId = React.useId();\r\n const hintId = hint ? `${groupId}-hint` : undefined;\r\n\r\n const handleValueChange = (next: string) => {\r\n onValueChange?.(next);\r\n };\r\n\r\n const isHorizontal = orientation === \"horizontal\";\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n {label && (\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n\r\n <RadioGroupPrimitive.Root\r\n {...rootProps}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={handleValueChange}\r\n aria-describedby={hintId}\r\n className={cn(\r\n \"flex\",\r\n isHorizontal ? \"flex-row gap-6\" : \"flex-col gap-2\",\r\n className\r\n )}\r\n >\r\n {options.map((option) => (\r\n <RadioGroupPrimitive.Item\r\n key={option.value}\r\n value={option.value}\r\n disabled={disabled || option.disabled}\r\n asChild\r\n >\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n \"group inline-flex items-center gap-2 outline-none\",\r\n \"data-[disabled]:pointer-events-none\",\r\n (disabled || option.disabled) ? \"cursor-default\" : \"cursor-pointer\",\r\n )}\r\n >\r\n {/* Visual radio */}\r\n <span\r\n className={cn(\r\n \"flex items-center justify-center shrink-0 h-5 w-5 rounded-full border bg-(--background-primary) transition-all\",\r\n\r\n // 1: enabled, unchecked, unfocused, unhovered\r\n \"group-data-[state=unchecked]:border-(--border-secondary)\",\r\n\r\n // 2: enabled, checked, unfocused, unhovered\r\n \"group-data-[state=checked]:border-(--border-brand)\",\r\n\r\n // 3: enabled, unchecked, hovered, unfocused\r\n \"group-data-[state=unchecked]:group-hover:border-(--border-secondary-hover)\",\r\n\r\n // 4: enabled, checked, hovered, unfocused\r\n \"group-data-[state=checked]:group-hover:border-(--border-brand-hover)\",\r\n \"group-data-[state=checked]:group-hover:shadow-[0_0_0_var(--focus-ring-spread)_var(--color-b-100)]\",\r\n\r\n // 5: enabled, unchecked, focused (override 1/3)\r\n \"group-data-[state=unchecked]:group-focus-visible:border-(--border-secondary-hover)\",\r\n\r\n // 6: enabled, checked, focused (override 2/4)\r\n \"group-data-[state=checked]:group-focus-visible:border-(--border-brand-focus)\",\r\n \"group-data-[state=checked]:group-focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n\r\n // 7: disabled, unchecked (override everything above)\r\n \"group-[&[data-disabled][data-state=unchecked]]:border-none\",\r\n \"group-[&[data-disabled][data-state=unchecked]]:bg-(--background-primary-disabled)\",\r\n\r\n // 8: disabled, checked (override everything above)\r\n \"group-[&[data-disabled][data-state=checked]]:border-(--border-primary-disabled)\",\r\n \"group-[&[data-disabled][data-state=checked]]:bg-(--background-primary-disabled)\"\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"h-4 w-4 rounded-full bg-(--background-brand) scale-0 transition-transform\",\r\n \"group-data-[state=checked]:scale-100\",\r\n \"group-data-[state=checked]:group-hover:bg-(--background-brand-hover)\",\r\n \"group-data-[state=checked]:group-focus-visible:bg-(--background-brand-hover)\",\r\n \"group-[&[data-disabled][data-state=checked]]:bg-(--background-brand-disabled)\",\r\n \"group-[&[data-disabled][data-state=unchecked]]:scale-0\",\r\n )}\r\n />\r\n </span>\r\n\r\n {/* Label */}\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n \"group-data-[disabled]:text-(--text-primary-disabled) whitespace-nowrap\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {option.label}\r\n </span>\r\n </button>\r\n </RadioGroupPrimitive.Item>\r\n ))}\r\n </RadioGroupPrimitive.Root>\r\n\r\n <p\r\n id={hintId}\r\n className={cn(\r\n \"caption text-(--text-secondary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint ?? \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { SearchIcon } from \"@bubo-squared/icons\";\r\nimport { Input } from \"../ui/input\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type SearchInputSize = \"large\" | \"extra-large\";\r\n\r\nexport interface SearchInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"disabled\"> {\r\n placeholder?: string;\r\n leadingIcon?: React.ReactNode;\r\n showLeadingIcon?: boolean;\r\n size?: SearchInputSize;\r\n disabled?: boolean;\r\n}\r\n\r\nconst searchTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\"flex items-center justify-center shrink-0 text-(--icon-primary)\", {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nexport const SearchInput: React.FC<SearchInputProps> = (props) => {\r\n const {\r\n placeholder = \"Search...\",\r\n size = \"large\",\r\n disabled,\r\n className,\r\n leadingIcon,\r\n showLeadingIcon = true,\r\n ...inputProps\r\n } = props;\r\n\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col gap-2 items-start min-w-[343px]\">\r\n <div className=\"relative w-full\">\r\n <InputShell\r\n size={size}\r\n status=\"default\"\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span className={cn(iconWrapperVariants({ size, disabled: !!disabled }))}>\r\n {leadingIcon ?? <SearchIcon />}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type=\"search\"\r\n placeholder={placeholder}\r\n disabled={disabled ?? undefined}\r\n variant=\"bare\"\r\n className={cn(\r\n searchTextVariants({ size })\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n </InputShell>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nSearchInput.displayName = \"SearchInput\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type SliderDisplay = \"flat\" | \"numeric\" | \"tooltip\";\r\nexport type SliderType = \"single\" | \"multi\";\r\nexport type SliderTooltipPlacement = \"top\" | \"bottom\";\r\n\r\nexport interface SliderProps {\r\n display?: SliderDisplay;\r\n type?: SliderType;\r\n tooltipPlacement?: SliderTooltipPlacement;\r\n /**\r\n * Custom formatter for tooltip / numeric / accessibility text.\r\n * Receives the current slider value and should return a display string.\r\n * If provided, it takes precedence over `showPercentage`.\r\n */\r\n tooltipFormatter?: (value: number) => string;\r\n /**\r\n * When true (default), values are rendered as percentages (e.g. \"30%\").\r\n * When false, raw numbers are shown instead.\r\n * Ignored when `tooltipFormatter` is provided.\r\n */\r\n showPercentage?: boolean;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n disabled?: boolean;\r\n /**\r\n * Current value(s). For `type=\"single\"`, use a single-element array, e.g. `[30]`.\r\n * For `type=\"multi\"`, use two values, e.g. `[0, 25]`.\r\n */\r\n value?: number[];\r\n /**\r\n * Initial value(s) for uncontrolled usage.\r\n */\r\n defaultValue?: number[];\r\n onValueChange?: (value: number[]) => void;\r\n className?: string;\r\n}\r\n\r\nexport const Slider: React.FC<SliderProps> = (props) => {\r\n const {\r\n display = \"flat\",\r\n type = \"single\",\r\n tooltipPlacement = \"top\",\r\n tooltipFormatter,\r\n showPercentage = true,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n disabled = false,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n className\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n\r\n const expectedLength = type === \"multi\" ? 2 : 1;\r\n\r\n const normalizeArray = React.useCallback(\r\n (arr: number[] | undefined, fallback: number[]): number[] => {\r\n if (!arr || arr.length === 0) return fallback;\r\n if (arr.length === expectedLength) return arr;\r\n if (arr.length > expectedLength) return arr.slice(0, expectedLength);\r\n if (arr.length === 1 && expectedLength === 2) {\r\n return [arr[0], max];\r\n }\r\n return fallback;\r\n },\r\n [expectedLength, max]\r\n );\r\n\r\n const defaultInternal = React.useMemo(() => {\r\n if (defaultValue) return normalizeArray(defaultValue, []);\r\n if (type === \"multi\") return [min, Math.min(min + (max - min) / 4, max)];\r\n return [min + (max - min) / 3];\r\n }, [defaultValue, min, max, type, normalizeArray]);\r\n\r\n const [internalValue, setInternalValue] = React.useState<number[]>(\r\n () => normalizeArray(isControlled ? value : defaultInternal, defaultInternal)\r\n );\r\n\r\n React.useEffect(() => {\r\n if (isControlled) {\r\n setInternalValue((current) =>\r\n normalizeArray(value, current.length ? current : defaultInternal)\r\n );\r\n }\r\n }, [isControlled, value, normalizeArray, defaultInternal]);\r\n\r\n const current = internalValue;\r\n\r\n const trackRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n const clamp = (val: number) => {\r\n if (val < min) return min;\r\n if (val > max) return max;\r\n return val;\r\n };\r\n\r\n // When min or max change in uncontrolled mode, keep values within the new bounds\r\n React.useEffect(() => {\r\n if (!isControlled) {\r\n setInternalValue((prev) => {\r\n const clamped = prev.map((v) => clamp(v));\r\n if (type === \"multi\" && clamped.length === 2 && step > 0) {\r\n return enforceMinGap(clamped, prev);\r\n }\r\n return clamped;\r\n });\r\n }\r\n }, [isControlled, min, max]);\r\n\r\n const snap = (val: number) => {\r\n const range = max - min;\r\n if (range <= 0 || step <= 0) return clamp(val);\r\n const stepsFromMin = Math.round((val - min) / step);\r\n return clamp(min + stepsFromMin * step);\r\n };\r\n\r\n const enforceMinGap = (next: number[], prev: number[]): number[] => {\r\n if (type !== \"multi\" || next.length !== 2 || step <= 0) return next;\r\n\r\n let [low, high] = next;\r\n const [prevLow, prevHigh] = prev.length === 2 ? prev : next;\r\n\r\n if (low > high) {\r\n [low, high] = [high, low];\r\n }\r\n\r\n const minGap = step;\r\n if (high - low < minGap) {\r\n const lowChanged = low !== prevLow;\r\n const highChanged = high !== prevHigh;\r\n\r\n if (lowChanged && !highChanged) {\r\n // Lower thumb moved: keep upper fixed, pull lower back\r\n low = clamp(high - minGap);\r\n } else if (highChanged && !lowChanged) {\r\n // Upper thumb moved: keep lower fixed, push upper forward\r\n high = clamp(low + minGap);\r\n } else {\r\n // Fallback: enforce gap relative to lower value\r\n high = clamp(low + minGap);\r\n }\r\n\r\n // Final safeguard to avoid inverted range after clamping\r\n if (high - low < minGap) {\r\n low = clamp(high - minGap);\r\n }\r\n }\r\n\r\n return [low, high];\r\n };\r\n\r\n const updateValue = (next: number[]) => {\r\n let normalized = normalizeArray(next, current);\r\n\r\n if (type === \"multi\" && normalized.length === 2) {\r\n normalized = enforceMinGap(normalized, current);\r\n }\r\n\r\n if (!isControlled) {\r\n setInternalValue(normalized);\r\n }\r\n onValueChange?.(normalized);\r\n };\r\n\r\n const getSnappedValueFromClientX = (clientX: number, track: HTMLDivElement) => {\r\n const rect = track.getBoundingClientRect();\r\n const offsetX = clientX - rect.left;\r\n const ratio = rect.width === 0 ? 0 : offsetX / rect.width;\r\n const rawValue = min + ratio * (max - min);\r\n return snap(rawValue);\r\n };\r\n\r\n const startDrag = (thumbIndex: number, clientX: number) => {\r\n if (disabled) return;\r\n const track = trackRef.current;\r\n if (!track) return;\r\n\r\n const handlePointerMove = (event: PointerEvent) => {\r\n if (disabled) return;\r\n const snapped = getSnappedValueFromClientX(event.clientX, track);\r\n\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n if (thumbIndex === 0) {\r\n updateValue([snapped, b]);\r\n } else {\r\n updateValue([a, snapped]);\r\n }\r\n } else {\r\n updateValue([snapped]);\r\n }\r\n };\r\n\r\n const handlePointerUp = () => {\r\n window.removeEventListener(\"pointermove\", handlePointerMove);\r\n window.removeEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n // Apply initial position\r\n const initialSnapped = getSnappedValueFromClientX(clientX, track);\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n if (thumbIndex === 0) {\r\n updateValue([initialSnapped, b]);\r\n } else {\r\n updateValue([a, initialSnapped]);\r\n }\r\n } else {\r\n updateValue([initialSnapped]);\r\n }\r\n\r\n window.addEventListener(\"pointermove\", handlePointerMove);\r\n window.addEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n const handleTrackPointerDown: React.PointerEventHandler<HTMLDivElement> = (event) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n const track = trackRef.current;\r\n if (!track) return;\r\n\r\n const snapped = getSnappedValueFromClientX(event.clientX, track);\r\n\r\n let thumbIndex = 0;\r\n if (type === \"multi\" && current.length === 2) {\r\n const [a, b] = current;\r\n const distToA = Math.abs(snapped - a);\r\n const distToB = Math.abs(snapped - b);\r\n thumbIndex = distToA <= distToB ? 0 : 1;\r\n }\r\n\r\n event.preventDefault();\r\n startDrag(thumbIndex, event.clientX);\r\n };\r\n\r\n const handleThumbKeyDown = (\r\n index: number,\r\n event: React.KeyboardEvent<HTMLButtonElement>\r\n ) => {\r\n if (disabled) return;\r\n\r\n const key = event.key;\r\n let delta = 0;\r\n\r\n if (key === \"ArrowRight\" || key === \"ArrowUp\") {\r\n delta = step;\r\n } else if (key === \"ArrowLeft\" || key === \"ArrowDown\") {\r\n delta = -step;\r\n } else if (key === \"Home\") {\r\n updateValue(\r\n current.map((v, i) => (i === index ? min : v))\r\n );\r\n event.preventDefault();\r\n return;\r\n } else if (key === \"End\") {\r\n updateValue(\r\n current.map((v, i) => (i === index ? max : v))\r\n );\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n if (delta !== 0) {\r\n const next = current.map((v, i) =>\r\n i === index ? snap(v + delta) : v\r\n );\r\n updateValue(next);\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n const [primary, secondary] =\r\n type === \"multi\" && current.length === 2\r\n ? [current[0], current[1]]\r\n : [current[0], undefined];\r\n\r\n const valueToPercent = (val: number | undefined) => {\r\n if (val === undefined) return 0;\r\n if (max === min) return 0;\r\n const clamped = clamp(val);\r\n return ((clamped - min) / (max - min)) * 100;\r\n };\r\n\r\n const primaryPercent = valueToPercent(primary);\r\n const secondaryPercent = valueToPercent(secondary);\r\n\r\n const showNumeric = display === \"numeric\";\r\n const showTooltip = display === \"tooltip\";\r\n const isTooltipAbove = tooltipPlacement === \"top\";\r\n\r\n const isDecimalDomain =\r\n !Number.isInteger(step) ||\r\n !Number.isInteger(min) ||\r\n !Number.isInteger(max);\r\n\r\n const formatNumber = (num: number): string => {\r\n if (!isDecimalDomain) {\r\n return `${Math.round(num)}`;\r\n }\r\n const rounded = Number(num.toFixed(2));\r\n if (Number.isInteger(rounded)) {\r\n return `${rounded}`;\r\n }\r\n return rounded.toFixed(2);\r\n };\r\n\r\n const formatDisplayValue = (val: number | undefined): string => {\r\n const value = val ?? min;\r\n if (tooltipFormatter) return tooltipFormatter(value);\r\n if (showPercentage) {\r\n const percent = valueToPercent(value);\r\n return `${formatNumber(percent)}%`;\r\n }\r\n return formatNumber(value);\r\n };\r\n\r\n const formatNumericLabel = () => {\r\n if (type === \"multi\" && secondary !== undefined) {\r\n // Special-case: numeric + percentage for range should show \"x-y\" (no % symbols)\r\n if (!tooltipFormatter && showPercentage && display === \"numeric\") {\r\n const first = formatNumber(valueToPercent(primary));\r\n const second = formatNumber(valueToPercent(secondary));\r\n return `${first} - ${second}`;\r\n }\r\n return `${formatDisplayValue(primary)} - ${formatDisplayValue(secondary)}`;\r\n }\r\n return formatDisplayValue(primary);\r\n };\r\n\r\n const trackHeight = 32;\r\n const thumbWidth = 18;\r\n const thumbRadius = thumbWidth / 2;\r\n\r\n const renderTooltipBubble = (\r\n key: string,\r\n percent: number,\r\n labelText: string\r\n ) => (\r\n <div\r\n key={key}\r\n className=\"absolute -translate-x-1/2 flex flex-col items-center\"\r\n style={{\r\n left: `${percent}%`,\r\n bottom: isTooltipAbove ? \"100%\" : undefined,\r\n top: isTooltipAbove ? undefined : \"100%\",\r\n marginBottom: isTooltipAbove ? 8 : undefined,\r\n marginTop: isTooltipAbove ? undefined : 8,\r\n }}\r\n >\r\n <div\r\n className={cn(\r\n \"relative rounded-4 shadow-card-md px-(--space-8) py-(--space-4)\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-neutral)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n <p\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {labelText}\r\n </p>\r\n <div\r\n className={cn(\r\n \"absolute left-1/2 -translate-x-1/2 w-2 h-2 rotate-45\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-neutral)\",\r\n isTooltipAbove ? \"-bottom-1\" : \"-top-1\"\r\n )}\r\n />\r\n </div>\r\n </div>\r\n );\r\n\r\n const renderHandle = (index: number, percent: number, ariaValueText: string) => {\r\n const val = index === 0 ? primary : secondary;\r\n\r\n return (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n role=\"slider\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={val}\r\n aria-valuetext={ariaValueText}\r\n aria-disabled={disabled || undefined}\r\n tabIndex={disabled ? -1 : 0}\r\n className={cn(\r\n \"absolute -translate-x-1/2 flex items-center justify-center\",\r\n \"h-8 w-[18px] rounded-4\",\r\n disabled\r\n ? \"bg-(--icon-primary-disabled) cursor-default\"\r\n : \"bg-(--icon-primary-hover) outline-none focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)] cursor-pointer\"\r\n )}\r\n style={{\r\n left: `${percent}%`,\r\n top: `calc(50% - ${trackHeight / 2}px)`,\r\n }}\r\n onPointerDown={(event) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n event.preventDefault();\r\n startDrag(index, event.clientX);\r\n }}\r\n onKeyDown={(event) => handleThumbKeyDown(index, event)}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n\r\n <div className={cn(\"w-[354px] flex flex-col gap-1\", className)}>\r\n <div className=\"relative w-full\">\r\n {showTooltip && primary !== undefined &&\r\n renderTooltipBubble(\"primary\", primaryPercent, formatDisplayValue(primary))}\r\n {showTooltip && type === \"multi\" && secondary !== undefined &&\r\n renderTooltipBubble(\"secondary\", secondaryPercent, formatDisplayValue(secondary))}\r\n\r\n <div\r\n className={cn(\r\n \"relative w-full flex items-center rounded-4\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled) cursor-default\"\r\n : \"bg-(--background-secondary) cursor-pointer\"\r\n )}\r\n style={{ height: `${trackHeight}px` }}\r\n ref={trackRef}\r\n onPointerDown={handleTrackPointerDown}\r\n >\r\n <div\r\n className={cn(\r\n \"absolute h-full rounded-4\",\r\n disabled\r\n ? \"bg-(--background-primary-disabled)\"\r\n : \"bg-(--background-secondary)\"\r\n )}\r\n style={{\r\n width: `calc(100% + ${thumbWidth}px)`,\r\n left: `-${thumbRadius}px`,\r\n }}\r\n />\r\n {renderHandle(0, primaryPercent, formatDisplayValue(primary))}\r\n {type === \"multi\" && secondary !== undefined &&\r\n renderHandle(1, secondaryPercent, formatDisplayValue(secondary))}\r\n </div>\r\n </div>\r\n\r\n {showNumeric && (\r\n <p\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {formatNumericLabel()}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nSlider.displayName = \"Slider\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport type { TextInputStatus } from \"./TextInput\";\r\nimport { MaximizeIcon } from \"@bubo-squared/icons\";\r\n\r\nconst wrapperBase = \"flex flex-col gap-2 items-start min-w-[343px]\";\r\n\r\nexport type TextAreaType = \"responsive\" | \"character-limit\";\r\n\r\nexport interface TextAreaProps\r\n extends Omit<\r\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\r\n \"disabled\"\r\n > {\r\n label?: string;\r\n hint?: string;\r\n status?: TextInputStatus;\r\n /**\r\n * Visual/behavioural variant.\r\n * - \"responsive\": regular textarea.\r\n * - \"character-limit\": shows character counter, expects maxLength.\r\n */\r\n type?: TextAreaType;\r\n /**\r\n * Maximum number of characters allowed. Used by \"character-limit\" variant\r\n * and passed through to the underlying <textarea> as maxLength.\r\n */\r\n maxLength?: number;\r\n /**\r\n * Optional trailing icon rendered in the top-right corner of the field.\r\n */\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TextArea: React.FC<TextAreaProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n status = \"default\",\r\n type = \"responsive\",\r\n maxLength,\r\n disabled,\r\n className,\r\n value,\r\n defaultValue,\r\n onChange,\r\n rows = 3,\r\n ...textareaProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue =\r\n (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n const hasValue = currentValue.length > 0;\r\n const currentLength = currentValue.length;\r\n const effectiveMaxLength = type === \"character-limit\" ? maxLength ?? 144 : undefined;\r\n\r\n const showCharacterLimit =\r\n type === \"character-limit\" && typeof effectiveMaxLength === \"number\";\r\n\r\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\r\n const containerRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n const [height, setHeight] = React.useState<number | undefined>(undefined);\r\n const [width, setWidth] = React.useState<number | undefined>(undefined);\r\n const minHeight = 80;\r\n const minWidth = 240;\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n textareaRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n\r\n const inputId = React.useId();\r\n const labelId = `${inputId}-label`;\r\n const hintId = `${inputId}-hint`;\r\n\r\n const statusBorderClass: Record<TextInputStatus, string> = {\r\n default: \"\",\r\n success: \"border-(--border-success)\",\r\n error: \"border-(--border-error)\",\r\n };\r\n\r\n const statusFocusClass: Record<TextInputStatus, string> = {\r\n default:\r\n \"focus-within:border-(--border-brand) focus-within:hover:border-(--border-brand) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n success:\r\n \"focus-within:border-(--border-success) focus-within:hover:border-(--border-success) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-success)]\",\r\n error:\r\n \"focus-within:border-(--border-error) focus-within:hover:border-(--border-error) focus-within:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-error)]\",\r\n };\r\n\r\n const hintColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-secondary)\";\r\n\r\n const counterColorClass = disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : status === \"success\"\r\n ? \"text-(--text-success)\"\r\n : status === \"error\"\r\n ? \"text-(--text-error)\"\r\n : \"text-(--text-primary)\";\r\n\r\n const handleResizePointerDown: React.PointerEventHandler<HTMLDivElement> = (\r\n event\r\n ) => {\r\n if (disabled) return;\r\n if (event.button !== 0) return;\r\n const container = containerRef.current;\r\n if (!container) return;\r\n\r\n event.preventDefault();\r\n\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const { height: startHeight, width: startWidth } =\r\n container.getBoundingClientRect();\r\n\r\n const handlePointerMove = (e: PointerEvent) => {\r\n const deltaX = e.clientX - startX;\r\n const deltaY = e.clientY - startY;\r\n\r\n const nextHeight = Math.max(minHeight, startHeight + deltaY);\r\n const nextWidth = Math.max(minWidth, startWidth + deltaX);\r\n\r\n setHeight(nextHeight);\r\n setWidth(nextWidth);\r\n };\r\n\r\n const handlePointerUp = () => {\r\n window.removeEventListener(\"pointermove\", handlePointerMove);\r\n window.removeEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n window.addEventListener(\"pointermove\", handlePointerMove);\r\n window.addEventListener(\"pointerup\", handlePointerUp);\r\n };\r\n\r\n return (\r\n <div className={wrapperBase}>\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n id={labelId}\r\n className={cn(\r\n \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div className=\"relative w-full\">\r\n <div\r\n className={cn(\r\n \"relative flex w-full rounded-4 border bg-(--background-primary) cursor-text transition-colors\",\r\n \"border-(--border-secondary) hover:border-(--border-secondary-hover) hover:bg-(--background-primary-hover)\",\r\n disabled &&\r\n \"bg-(--background-primary-disabled) border-(--border-secondary-disabled) cursor-default\",\r\n statusBorderClass[status],\r\n !disabled && statusFocusClass[status],\r\n className\r\n )}\r\n ref={containerRef}\r\n style={{\r\n ...(type === \"responsive\" && height !== undefined ? { height } : {}),\r\n ...(type === \"responsive\" && width !== undefined ? { width } : {}),\r\n }}\r\n onClick={handleContainerClick}\r\n aria-disabled={disabled || undefined}\r\n >\r\n <textarea\r\n id={inputId}\r\n ref={textareaRef}\r\n aria-labelledby={label ? labelId : undefined}\r\n aria-describedby={hint ? hintId : undefined}\r\n disabled={disabled ?? undefined}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n rows={rows}\r\n maxLength={effectiveMaxLength}\r\n className={cn(\r\n \"paragraph-m bg-transparent outline-none w-full h-full resize-none px-2 py-2 pr-8\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : hasValue\r\n ? \"text-(--text-primary)\"\r\n : \"text-(--text-secondary)\",\r\n showCharacterLimit && \"pr-16\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...textareaProps}\r\n />\r\n\r\n {showCharacterLimit && (\r\n <span\r\n className={cn(\r\n \"absolute bottom-1 right-1 footnote mb-0!\",\r\n counterColorClass\r\n )}\r\n >\r\n {currentLength}/{effectiveMaxLength}\r\n </span>\r\n )}\r\n\r\n\r\n {type === \"responsive\" && (\r\n <div\r\n className={\r\n \"absolute bottom-1 right-1 h-3 w-3 \" +\r\n (disabled ? \"cursor-auto\" : \"cursor-nwse-resize\")\r\n }\r\n onPointerDown={disabled ? undefined : handleResizePointerDown}\r\n >\r\n <span\r\n className={cn(\r\n \"absolute bottom-0 right-0 flex h-4 w-4 items-center justify-center text-(--icon-primary)\",\r\n disabled && \"text-(--icon-primary-disabled)\"\r\n )}\r\n >\r\n <MaximizeIcon />\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <p\r\n id={hint ? hintId : undefined}\r\n className={cn(\"caption\", hint ? hintColorClass : \"invisible\")}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {hint || \"\\u00A0\"}\r\n </p>\r\n </div>\r\n );\r\n};\r\n\r\nTextArea.displayName = \"TextArea\";\r\n","import * as React from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { Input } from \"../ui/input\";\r\nimport { Field } from \"./Field\";\r\nimport { InputShell } from \"./InputShell\";\r\n\r\nexport type TextInputSize = \"large\" | \"extra-large\";\r\nexport type TextInputStatus = \"default\" | \"success\" | \"error\";\r\n\r\nconst inputTextVariants = cva(\"truncate\", {\r\n variants: {\r\n size: {\r\n large: \"subtitle\",\r\n \"extra-large\": \"h6-title\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n});\r\n\r\nconst iconWrapperVariants = cva(\r\n \"flex items-center justify-center shrink-0 text-(--icon-primary)\",\r\n {\r\n variants: {\r\n size: {\r\n large: \"size-5 [&>svg]:size-5\",\r\n \"extra-large\": \"size-6 [&>svg]:size-6\",\r\n },\r\n disabled: {\r\n true: \"text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"large\",\r\n },\r\n }\r\n);\r\n\r\nexport interface TextInputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\" | \"disabled\"> {\r\n label?: string;\r\n hint?: string;\r\n placeholder?: string;\r\n status?: TextInputStatus;\r\n size?: TextInputSize;\r\n disabled?: boolean;\r\n leadingIcon?: React.ReactNode | null;\r\n trailingIcon?: React.ReactNode | null;\r\n}\r\n\r\nexport const TextInput: React.FC<TextInputProps> = (props) => {\r\n const {\r\n label,\r\n hint,\r\n placeholder = \"Placeholder text\",\r\n size = \"large\",\r\n status = \"default\",\r\n disabled = false,\r\n className,\r\n leadingIcon,\r\n trailingIcon,\r\n value,\r\n defaultValue,\r\n onChange,\r\n ...inputProps\r\n } = props;\r\n\r\n const isControlled = value !== undefined;\r\n const [internalValue, setInternalValue] = React.useState<string>(\r\n (defaultValue as string | undefined) ?? \"\"\r\n );\r\n\r\n const currentValue = (isControlled ? (value as string | undefined) : internalValue) ?? \"\";\r\n\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n\r\n const handleContainerClick = () => {\r\n if (disabled) return;\r\n inputRef.current?.focus();\r\n };\r\n\r\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setInternalValue(event.target.value);\r\n }\r\n onChange?.(event);\r\n };\r\n const showLeadingIcon = !!leadingIcon;\r\n const showTrailingIcon = !!trailingIcon;\r\n\r\n return (\r\n <Field\r\n label={label}\r\n hint={hint}\r\n status={status}\r\n disabled={disabled}\r\n >\r\n <InputShell\r\n size={size}\r\n status={status}\r\n disabled={disabled}\r\n className={className}\r\n onClick={handleContainerClick}\r\n >\r\n {showLeadingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled })\r\n )}\r\n >\r\n {leadingIcon}\r\n </span>\r\n )}\r\n\r\n <Input\r\n ref={inputRef}\r\n type=\"text\"\r\n disabled={disabled ?? undefined}\r\n placeholder={placeholder}\r\n value={isControlled ? value : currentValue}\r\n defaultValue={isControlled ? undefined : defaultValue}\r\n onChange={handleChange}\r\n variant=\"bare\"\r\n className={cn(\r\n inputTextVariants({ size }),\r\n \"bg-transparent outline-none w-full\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n {...inputProps}\r\n />\r\n\r\n {showTrailingIcon && (\r\n <span\r\n className={cn(\r\n iconWrapperVariants({ size, disabled: !!disabled })\r\n )}\r\n >\r\n {trailingIcon}\r\n </span>\r\n )}\r\n </InputShell>\r\n </Field>\r\n );\r\n};\r\n\r\nTextInput.displayName = \"TextInput\";\r\n","import * as React from \"react\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport interface ToggleProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\r\n label?: string;\r\n}\r\n\r\nexport const Toggle: React.FC<ToggleProps> = (props) => {\r\n const { label, className, disabled, ...inputProps } = props;\r\n\r\n return (\r\n <label\r\n className={cn(\r\n \"inline-flex items-center gap-2 select-none\",\r\n disabled ? \"cursor-default\" : \"cursor-pointer\"\r\n )}\r\n >\r\n <span className=\"relative inline-flex items-center\">\r\n {/* Hidden native checkbox drives checked/disabled/focus state */}\r\n <input\r\n type=\"checkbox\"\r\n disabled={disabled}\r\n className=\"peer sr-only\"\r\n {...inputProps}\r\n />\r\n\r\n {/* Slider (track + knob) */}\r\n <span\r\n className={cn(\r\n // Base track\r\n \"flex items-center w-9 h-5 rounded-24 border bg-(--background-primary) p-(--space-2) transition-all\",\r\n // Knob position\r\n \"justify-start peer-checked:justify-end\",\r\n // 1: enabled, unchecked, unhovered, unfocused\r\n \"border-(--border-secondary)\",\r\n // 3: enabled, unchecked, hovered, unfocused\r\n \"hover:border-(--border-secondary-hover)\",\r\n // 2: enabled, checked, unhovered, unfocused\r\n \"peer-checked:border-(--border-brand)\",\r\n // 4: enabled, checked, hovered, unfocused\r\n \"peer-checked:hover:border-(--border-brand-hover)\",\r\n \"peer-checked:hover:shadow-[0_0_0_var(--focus-ring-spread)_var(--color-b-100)]\",\r\n // 5: enabled, unchecked, unhovered, focused\r\n \"peer-focus-visible:border-(--border-brand-focus)\",\r\n // 6: enabled, checked, unhovered, focused\r\n \"peer-checked:peer-focus-visible:bg-(--background-brand-focus)\",\r\n \"peer-checked:peer-focus-visible:shadow-[0_0_0_var(--focus-ring-spread)_var(--focus-primary)]\",\r\n // 7: disabled, unchecked (override)\r\n \"peer-disabled:bg-(--background-primary-disabled)\",\r\n \"peer-disabled:border-none\",\r\n \"peer-disabled:shadow-none\",\r\n // 8: disabled, checked (override)\r\n \"peer-disabled:peer-checked:border-(--border-primary-disabled)\",\r\n // Disable hover when disabled\r\n \"peer-disabled:pointer-events-none\",\r\n\r\n // Knob on (enabled)\r\n \"peer-checked:[&>.knob]:bg-(--background-brand)\",\r\n // Hover / focus when on\r\n \"peer-checked:[&>.knob]:hover:bg-(--background-brand-hover)\",\r\n \"peer-checked:peer-focus-visible:[&>.knob]:bg-(--background-neutral)\",\r\n // Disabled knob (both off and on use disabled brand token)\r\n \"peer-disabled:[&>.knob]:bg-(--background-primary-hover)\",\r\n \"peer-disabled:[&>.knob]:peer-checked:bg-(--background-primary-hover)\",\r\n className\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n \"h-4 w-4 rounded-full transition-colors knob\",\r\n \"bg-b-100\",\r\n )}\r\n />\r\n </span>\r\n </span>\r\n\r\n {label && (\r\n <span\r\n className={cn(\r\n \"paragraph-s text-(--text-primary)\",\r\n disabled && \"text-(--text-primary-disabled)\"\r\n )}\r\n style={{ marginBottom: 0 }}\r\n >\r\n {label}\r\n </span>\r\n )}\r\n </label>\r\n );\r\n};\r\n\r\nToggle.displayName = \"Toggle\";\r\n\r\n","import * as React from \"react\";\r\nimport { TextInput, type TextInputProps } from \"./TextInput\";\r\nimport { cn } from \"@/lib/utils\";\r\n\r\nexport type WebsiteInputHierarchy = \"prefix\" | \"suffix\";\r\n\r\nexport interface WebsiteInputProps\r\n extends Omit<TextInputProps, \"leadingIcon\" | \"trailingIcon\"> {\r\n /**\r\n * Position of the protocol add-on (label + icon).\r\n * - \"prefix\": add-on on the left side of the field\r\n * - \"suffix\": add-on on the right side of the field\r\n */\r\n hierarchy?: WebsiteInputHierarchy;\r\n /**\r\n * Text shown inside the protocol add-on (e.g. \"http://\", \"https://\").\r\n */\r\n protocolLabel?: string;\r\n /**\r\n * Optional icon shown next to the protocol label\".\r\n */\r\n icon?: React.ReactNode | null;\r\n}\r\n\r\nexport const WebsiteInput: React.FC<WebsiteInputProps> = (props) => {\r\n const {\r\n hierarchy = \"prefix\",\r\n protocolLabel = \"http://\",\r\n icon,\r\n size = \"large\",\r\n disabled,\r\n className,\r\n ...rest\r\n } = props;\r\n\r\n const isPrefix = hierarchy === \"prefix\";\r\n\r\n const baseClass = cn(\r\n \"[&>span]:w-[unset] hover:bg-[unset]\",\r\n !disabled &&\r\n \"[&:not(:focus-within):hover]:shadow-[0_0_0_var(--focus-ring-spread)_var(--background-secondary-hover)]\",\r\n disabled &&\r\n \"bg-[unset] hover:shadow-none hover:border-(--border-secondary-disabled) border-(--border-secondary-disabled)\",\r\n size === \"extra-large\"\r\n ? \"[&>span]:h-14!\"\r\n : \"[&>span]:h-11!\",\r\n )\r\n\r\n const addonTextClass = cn(\r\n \"flex mb-0!\",\r\n size === \"extra-large\" ? \"paragraph-m\" : \"paragraph-s\",\r\n disabled\r\n ? \"text-(--text-primary-disabled)\"\r\n : \"text-(--text-primary) group-hover:text-(--text-primary-hover) group-focus-within:text-(--text-primary-focus)\"\r\n );\r\n\r\n const baseAddonClass = cn(\r\n \"flex items-center gap-2 px-2 h-full\", // layout + padding\r\n \"border-(--border-secondary)\", // divider color\r\n disabled &&\r\n \"border-(--border-secondary-disabled) hover:border-(--border-secondary-disabled)\",\r\n isPrefix ? \"border-r\" : \"border-l\"\r\n );\r\n\r\n const iconWrapperClass = cn(\r\n \"flex items-center justify-center shrink-0\",\r\n size === \"extra-large\"\r\n ? \"[&>svg]:w-6 [&>svg]:h-6\"\r\n : \"[&>svg]:w-5 [&>svg]:h-5\",\r\n disabled\r\n ? \"text-(--icon-primary-disabled)\"\r\n : \"text-(--icon-primary) group-hover:text-(--icon-primary-hover) group-focus-within:text-(--icon-primary-focus)\"\r\n );\r\n\r\n const prefixAddon = (\r\n <div className={baseAddonClass}>\r\n <div className={addonTextClass}>{protocolLabel}</div>\r\n {icon != null && <span className={iconWrapperClass}>{icon}</span>}\r\n </div>\r\n );\r\n\r\n const suffixAddon = (\r\n <div className={baseAddonClass}>\r\n {icon != null && <span className={iconWrapperClass}>{icon}</span>}\r\n <div className={addonTextClass}>{protocolLabel}</div>\r\n </div>\r\n );\r\n\r\n return (\r\n <TextInput\r\n {...rest}\r\n size={size}\r\n disabled={disabled}\r\n className={cn(baseClass, className)}\r\n leadingIcon={isPrefix ? prefixAddon : undefined}\r\n trailingIcon={!isPrefix ? suffixAddon : undefined}\r\n />\r\n );\r\n};\r\n\r\nWebsiteInput.displayName = \"WebsiteInput\";\r\n","import * as React from \"react\";\r\nimport { Popover as ShadPopover, PopoverContent, PopoverTrigger } from \"../ui/popover\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\nimport { Button, cn } from \"@/index\";\r\n\r\nconst PopoverArrow = PopoverPrimitive.Arrow;\r\n\r\ntype PopoverPlacement =\r\n | \"top\"\r\n | \"topLeft\"\r\n | \"topRight\"\r\n | \"bottom\"\r\n | \"bottomLeft\"\r\n | \"bottomRight\"\r\n | \"left\"\r\n | \"leftTop\"\r\n | \"leftBottom\"\r\n | \"right\"\r\n | \"rightTop\"\r\n | \"rightBottom\";\r\n\r\ninterface PopoverProps {\r\n children: React.ReactNode;\r\n strapline?: string;\r\n title: string;\r\n description?: string;\r\n onOk?: () => void;\r\n okText?: string;\r\n onCancel?: () => void;\r\n cancelText?: string;\r\n showArrow?: boolean;\r\n className?: string;\r\n /**\r\n * Controls where the popover appears relative to the trigger.\r\n * Examples: \"bottomRight\", \"top\", \"left\".\r\n */\r\n placement?: PopoverPlacement;\r\n /**\r\n * Distance between the trigger and the popover.\r\n * This is forwarded to Radix's `sideOffset`, useful when adjusting\r\n * the arrow size so the content clears the trigger.\r\n */\r\n offset?: number;\r\n}\r\n\r\nexport const Popover: React.FC<PopoverProps> = (props) => {\r\n\r\n const {\r\n strapline, title, description,\r\n onOk, okText, onCancel, cancelText,\r\n showArrow = true, className,\r\n placement = \"bottom\", offset = 10,\r\n children\r\n } = props;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleCancel = () => {\r\n onCancel?.();\r\n setOpen(false);\r\n };\r\n\r\n const handleOk = () => {\r\n onOk?.();\r\n setOpen(false);\r\n };\r\n\r\n const popoverClasses = \"bg-(--background-popover) fill-(--background-popover) popover w-80 shadow-card-md border-none [&_span]:scale-240 rounded-4\"\r\n\r\n const mapPlacementToSideAndAlign = (placement: PopoverPlacement): {\r\n side: PopoverPrimitive.PopoverContentProps[\"side\"];\r\n align: PopoverPrimitive.PopoverContentProps[\"align\"];\r\n } => {\r\n switch (placement) {\r\n case \"top\":\r\n return { side: \"top\", align: \"center\" };\r\n case \"topLeft\":\r\n return { side: \"top\", align: \"start\" };\r\n case \"topRight\":\r\n return { side: \"top\", align: \"end\" };\r\n case \"bottom\":\r\n return { side: \"bottom\", align: \"center\" };\r\n case \"bottomLeft\":\r\n return { side: \"bottom\", align: \"start\" };\r\n case \"bottomRight\":\r\n return { side: \"bottom\", align: \"end\" };\r\n case \"left\":\r\n return { side: \"left\", align: \"center\" };\r\n case \"leftTop\":\r\n return { side: \"left\", align: \"start\" };\r\n case \"leftBottom\":\r\n return { side: \"left\", align: \"end\" };\r\n case \"right\":\r\n return { side: \"right\", align: \"center\" };\r\n case \"rightTop\":\r\n return { side: \"right\", align: \"start\" };\r\n case \"rightBottom\":\r\n return { side: \"right\", align: \"end\" };\r\n default:\r\n return { side: \"bottom\", align: \"center\" };\r\n }\r\n };\r\n\r\n const arrowShadowClass = (side: \"top\" | \"bottom\" | \"left\" | \"right\" | undefined) => {\r\n switch (side) {\r\n case \"top\":\r\n return \"drop-shadow(0px 2px 1px var(--color-b-black-12))\"\r\n case \"bottom\":\r\n return \"drop-shadow(0px -1px 1px color-mix(in srgb, var(--color-b-black-10) 66%, transparent))\"\r\n case \"left\":\r\n case \"right\":\r\n return \"drop-shadow(0px 2px 1px var(--color-b-black-12))\"\r\n default:\r\n return \"\"\r\n }\r\n }\r\n\r\n const { side, align } = mapPlacementToSideAndAlign(placement);\r\n return (\r\n <ShadPopover open={open} onOpenChange={setOpen}>\r\n <PopoverTrigger asChild>\r\n {children}\r\n </PopoverTrigger>\r\n <PopoverContent\r\n side={side}\r\n align={align}\r\n sideOffset={offset}\r\n className={cn(popoverClasses, side === \"top\" ? \"[&_span]:bottom-1! \" : \"\", className)}\r\n >\r\n {showArrow && (\r\n <PopoverArrow\r\n style={{ filter: arrowShadowClass(side) }}\r\n />\r\n )}\r\n <div className=\"grid gap-4\">\r\n <div className=\"space-y-2\">\r\n <span className={\"caption text-secondary\"} style={{ marginBottom: 0 }}>{strapline}</span>\r\n <h4 className={\"subtitle-medium text-primary\"} style={{ marginBottom: 0 }}>{title}</h4>\r\n <p className={\"paragraph-s text-primary\"} style={{ marginBottom: 0 }}>{description}</p>\r\n </div>\r\n <div className=\"flex justify-start items-center gap-4\">\r\n <Button size={\"sm\"} variant={\"secondary\"} onClick={handleCancel}>{cancelText || \"Cancel\"}</Button>\r\n <Button size={\"sm\"} variant={\"primary\"} onClick={handleOk}>{okText || \"Ok\"}</Button>\r\n </div>\r\n </div>\r\n </PopoverContent>\r\n </ShadPopover>\r\n )\r\n}\r\n\r\nPopover.displayName = \"Popover\";","import * as React from \"react\";\r\nimport { Slot } from \"@radix-ui/react-slot\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { ChevronRightIcon } from \"@bubo-squared/icons\";\r\n\r\nconst breadcrumbBase =\r\n \"group inline-flex items-center gap-[var(--space-8)] pl-0 pr-[var(--space-8)] py-[6px] rounded-full transition-colors select-none disabled:cursor-default disabled:pointer-events-none\";\r\n\r\nconst breadcrumbIconVariants = cva(\r\n \"flex shrink-0 items-center justify-center w-5 h-5 *:w-5 *:h-5\",\r\n {\r\n variants: {\r\n variant: {\r\n colored:\r\n \"text-(--icon-brand) group-hover:text-(--icon-brand-hover) group-focus-visible:text-(--icon-brand-focus) group-disabled:text-(--icon-brand-disabled)\",\r\n flat:\r\n \"text-(--icon-primary) group-hover:text-(--icon-primary-hover) group-focus-visible:text-(--icon-primary-focus) group-disabled:text-(--icon-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"flat\",\r\n },\r\n }\r\n);\r\n\r\nconst breadcrumbTextVariants = cva(\r\n \"font-normal text-[length:var(--font-size-paragraph-l-18)] leading-[var(--font-line-height-28)] tracking-[var(--font-letter-spacing-02)] whitespace-nowrap\",\r\n {\r\n variants: {\r\n variant: {\r\n colored:\r\n \"text-(--text-brand) group-hover:text-(--text-brand-hover) group-focus-visible:text-(--text-brand-focus) group-disabled:text-(--text-brand-disabled)\",\r\n flat:\r\n \"text-(--text-primary) group-hover:text-(--text-primary-hover) group-focus-visible:text-(--text-primary-focus) group-disabled:text-(--text-primary-disabled)\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"flat\",\r\n },\r\n }\r\n);\r\n\r\nexport interface BreadcrumbProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"flat\" | \"colored\";\r\n asChild?: boolean;\r\n /** Label text shown in the breadcrumb item. */\r\n label?: string;\r\n /** Whether to render the leading chevron icon. */\r\n showIcon?: boolean;\r\n /** Optional custom icon to use instead of the default chevron. */\r\n icon?: React.ReactNode;\r\n /** Whether to render the label text. */\r\n showText?: boolean;\r\n}\r\n\r\nexport const Breadcrumb = React.forwardRef<HTMLButtonElement, BreadcrumbProps>((props, ref) => {\r\n const {\r\n asChild = false,\r\n variant = \"flat\",\r\n label = \"Header\",\r\n showIcon = true,\r\n showText = true,\r\n icon,\r\n className,\r\n children,\r\n ...rest\r\n } = props;\r\n\r\n const Comp = asChild ? Slot : \"button\";\r\n\r\n const content = showText ? (children ?? label) : null;\r\n\r\n return (\r\n <Comp\r\n type={asChild ? undefined : \"button\"}\r\n className={cn(breadcrumbBase, className)}\r\n ref={ref}\r\n {...rest}\r\n >\r\n {showIcon && (\r\n <span className={cn(breadcrumbIconVariants({ variant }))}>\r\n {icon ?? <ChevronRightIcon />}\r\n </span>\r\n )}\r\n {content && (\r\n <span className={cn(breadcrumbTextVariants({ variant }))}>\r\n {content}\r\n </span>\r\n )}\r\n </Comp>\r\n );\r\n});\r\n\r\nBreadcrumb.displayName = \"Breadcrumb\";\r\n","import type { FC } from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { LogoIconLIcon, LogoIconMIcon } from \"@bubo-squared/icons\";\r\nimport type { LogoIconProps } from \"./Logo.types\";\r\n\r\nconst logoIconVariants = cva(\r\n \"relative bg-linear-to-t from-gray-800 to-gray-950 overflow-hidden flex justify-center items-center\",\r\n {\r\n variants: {\r\n size: {\r\n xs: [\"size-8\", \"rounded-[5px]\"],\r\n sm: [\"size-14\", \"rounded-8\"],\r\n md: [\"size-32\", \"rounded-20\"],\r\n lg: [\"size-64\", \"rounded-40\"],\r\n xl: [\"size-128\", \"rounded-80\"],\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n },\r\n },\r\n);\r\n\r\nconst logoIconSizeClass: Record<NonNullable<LogoIconProps[\"size\"]>, string> = {\r\n xs: \"size-6\",\r\n sm: \"size-10\",\r\n md: \"size-24\",\r\n lg: \"size-44\",\r\n xl: \"size-96\",\r\n};\r\n\r\nexport const LogoIcon: FC<LogoIconProps> = ({ className, size = \"md\" }) => {\r\n const IconComponent = size === \"xl\" ? LogoIconLIcon : LogoIconMIcon;\r\n\r\n return (\r\n <div className={cn(logoIconVariants({ size }), className)}>\r\n <IconComponent className={logoIconSizeClass[size]} />\r\n </div>\r\n );\r\n};\r\n","import type { FC } from \"react\";\r\nimport { cva } from \"class-variance-authority\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\nimport type { LogoProps } from \"./Logo.types\";\r\n\r\nconst logoWrapperVariants = cva(\"inline-flex\", {\r\n variants: {\r\n variant: {\r\n inline: [\"w-44\", \"h-12\", \"justify-start\", \"items-center\", \"gap-4\"],\r\n inlineSmall: [\"w-32\", \"h-9\", \"justify-start\", \"items-center\", \"gap-3\"],\r\n multiline: [\"w-36\", \"flex-col\", \"justify-start\", \"items-start\", \"gap-2\"],\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nconst logoIconSizeVariants = cva(\"\", {\r\n variants: {\r\n variant: {\r\n inline: \"size-12\",\r\n inlineSmall: \"size-9\",\r\n multiline: \"size-12\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nconst logoTextSizeVariants = cva(\"\", {\r\n variants: {\r\n variant: {\r\n inline: \"h-8 w-27.5\",\r\n inlineSmall: \"h-6 w-20.75\",\r\n multiline: \"h-8 w-27.75\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"inline\",\r\n },\r\n});\r\n\r\nexport const Logo: FC<LogoProps> = ({ className, textColor, variant = \"inline\" }) => {\r\n const textColorClass =\r\n textColor === \"light\"\r\n ? \"text-(--color-b-white)\"\r\n : textColor === \"dark\"\r\n ? \"text-(--color-b-black)\"\r\n : \"text-(--text-primary)\";\r\n\r\n return (\r\n <div className={cn(logoWrapperVariants({ variant }), className)}>\r\n <LogoIconMIcon className={logoIconSizeVariants({ variant })} />\r\n <LogoTextMIcon\r\n className={cn(logoTextSizeVariants({ variant }), textColorClass)}\r\n />\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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","names":["jsx","cva","jsx","React","Slot","cva","jsx","cva","Slot","cva","jsx","React","Slot","cva","jsx","jsxs","cva","Slot","React","jsx","jsxs","React","Slot","cva","jsx","jsxs","cva","Slot","React","Slot","cva","jsx","jsxs","cva","Slot","React","cva","jsx","cva","cva","jsx","cva","React","jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","cva","jsx","jsxs","cva","React","Slot","cva","jsx","jsxs","CheckIcon","jsx","jsxs","CheckIcon","React","cva","jsx","jsxs","cva","React","jsx","jsxs","React","cva","React","jsx","React","cva","jsx","cva","jsx","jsxs","cva","React","CheckIcon","Slot","cva","jsx","buttonVariants","cva","Button","Slot","jsx","jsxs","jsx","jsxs","jsxs","jsx","jsx","jsx","jsx","jsxs","cva","jsx","jsxs","value","Button","CheckIcon","React","jsx","jsxs","React","cva","SearchIcon","jsx","jsxs","cva","iconWrapperVariants","SearchIcon","React","jsx","jsxs","wrapperBase","current","value","React","jsx","jsxs","wrapperBase","React","cva","jsx","jsxs","inputTextVariants","cva","iconWrapperVariants","jsx","jsxs","jsx","jsxs","React","PopoverPrimitive","jsx","jsxs","Popover","placement","side","React","Slot","cva","jsx","jsxs","cva","Slot","cva","jsx","cva","cva","LogoIconMIcon","jsx","jsxs","cva"]}
|