@bubo-squared/ui-framework 0.1.2 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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/PasswordInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/Field.tsx","../src/components/Inputs/InputShell.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/Logo/LogoIconExtraLarge.tsx","../src/components/Logo/LogoIconExtraSmall.tsx","../src/components/Logo/LogoIconLarge.tsx","../src/components/Logo/LogoIconMedium.tsx","../src/components/Logo/LogoIconSmall.tsx","../src/components/Logo/LogoInline.tsx","../src/components/Logo/LogoInlineSmall.tsx","../src/components/Logo/LogoMultiline.tsx"],"sourcesContent":["// Buttons\r\nexport { Button } from './components/Buttons/Button';\r\nexport { ButtonGroup } from './components/Buttons/ButtonGroup';\r\nexport { IconButton } from './components/Buttons/IconButton';\r\nexport { IconButtonGroup } from './components/Buttons/IconButtonGroup';\r\nexport { LinkButton } from './components/Buttons/LinkButton';\r\nexport { MessageButton } from './components/Buttons/MessageButton';\r\n\r\n// Content\r\nexport { Avatar } from './components/Content/Avatar';\r\nexport { Badge } from './components/Content/Badge';\r\nexport { BadgeDigit } from './components/Content/BadgeDigit';\r\nexport { BadgeDot } from './components/Content/BadgeDot';\r\nexport { BadgeStatus } from './components/Content/BadgeStatus';\r\nexport { Divider } from './components/Content/Divider';\r\nexport { Progress } from './components/Content/Progress';\r\nexport { StatusAvatar } from './components/Content/StatusAvatar';\r\nexport { Tag } from './components/Content/Tag';\r\n\r\n// Inputs\r\nexport { Checkbox } from './components/Inputs/Checkbox';\r\nexport { Dropdown } from './components/Inputs/Dropdown';\r\nexport { PasswordInput } from './components/Inputs/PasswordInput';\r\nexport { RadioGroup } from './components/Inputs/RadioGroup';\r\nexport { SearchInput } from './components/Inputs/SearchInput';\r\nexport { Slider } from './components/Inputs/Slider';\r\nexport { TextArea } from './components/Inputs/TextArea';\r\nexport { TextInput } from './components/Inputs/TextInput';\r\nexport { Toggle } from './components/Inputs/Toggle';\r\nexport { WebsiteInput } from './components/Inputs/WebsiteInput';\r\n\r\n// Logo\r\nexport { default as LogoIconExtraLarge } from './components/Logo/LogoIconExtraLarge';\r\nexport { default as LogoIconExtraSmall } from './components/Logo/LogoIconExtraSmall';\r\nexport { default as LogoIconLarge } from './components/Logo/LogoIconLarge';\r\nexport { default as LogoIconMedium } from './components/Logo/LogoIconMedium';\r\nexport { default as LogoIconSmall } from './components/Logo/LogoIconSmall';\r\nexport { default as LogoInline } from './components/Logo/LogoInline';\r\nexport { default as LogoInlineSmall } from './components/Logo/LogoInlineSmall';\r\nexport { default as LogoMultiline } from './components/Logo/LogoMultiline';\r\n\r\n// Utils\r\nexport { cn } from './lib/utils';\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 buttonVariants = cva(\r\n 'inline-flex items-center justify-center whitespace-nowrap rounded 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: ['w-5', 'h-5', '*:w-5', '*:h-5'],\r\n md: ['w-6', 'h-6', '*:w-6', '*:h-6'],\r\n lg: ['w-6', 'h-6', '*:w-6', '*:h-6'],\r\n xl: ['w-8', 'h-8', '*:w-8', '*:h-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-80 min-w-80',\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 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]:w-5', '[&>.buttonIcon>svg]:h-5'],\r\n md: ['[&>.buttonIcon>svg]:w-6', '[&>.buttonIcon>svg]:h-6'],\r\n lg: ['[&>.buttonIcon>svg]:w-8', '[&>.buttonIcon>svg]:h-8'],\r\n xl: ['[&>.buttonIcon>svg]:w-9', '[&>.buttonIcon>svg]:h-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 [&>button:last-child]:rounded-r\";\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-[6px]\",\r\n\t\t\t\t\t\tindex === items.length - 1 && \"rounded-r-[6px]\",\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 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: ['w-5', 'h-5', '*:w-5', '*:h-5'],\r\n md: ['w-5', 'h-5', '*:w-5', '*:h-5'],\r\n lg: ['w-6', 'h-6', '*:w-6', '*:h-6'],\r\n xl: ['w-6', 'h-6', '*:w-6', '*:h-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 px-1.5 py-1 gap-1 text-sm transition-colors cursor-pointer ${statusClasses} ${className}`}\r\n >\r\n {props.icon && <div className={\"w-5 *:w-5 h-5 *:h-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\": \"w-3 h-3 [&>svg]:w-3 [&>svg]:h-3\",\r\n \"24\": \"w-3.5 h-3.5 [&>svg]:w-3.5 [&>svg]:h-3.5\",\r\n \"32\": \"w-4 h-4 [&>svg]:w-4 [&>svg]:h-4\",\r\n \"40\": \"w-5 h-5 [&>svg]:w-5 [&>svg]:h-5\",\r\n \"48\": \"w-6 h-6 [&>svg]:w-6 [&>svg]:h-6\",\r\n \"56\": \"w-7 h-7 [&>svg]:w-7 [&>svg]:h-7\",\r\n \"64\": \"w-8 h-8 [&>svg]:w-8 [&>svg]:h-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-[4px] 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-[2px] caption-medium\",\r\n md: \"px-2 py-[2px] rounded-[4px] 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-xl w-3 h-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 w-3 h-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-[16px]\",\r\n md: \"h-2 rounded-[8px]\",\r\n sm: \"h-1 rounded-[4px]\",\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-1\"\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 h-5 w-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, \"h-3.5 w-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=\"h-3 w-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"bookmark\" && (\r\n <BookmarkCheckIcon className=\"h-3 w-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"favorite\" && (\r\n <StarIcon className=\"h-3 w-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"add\" && (\r\n <PlusIcon className=\"h-3 w-3 text-(--text-button-white)\" />\r\n )}\r\n {iconVariant === \"remove\" && (\r\n <CrossIcon className=\"h-3 w-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-[6px] 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-xs 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 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-(--border-radius-4) border border-(--border-primary-hover) bg-(--background-neutral) shadow-card-md flex overflow-y-scroll dropdown-scrollbar max-h-[316px]\">\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 { 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: \"w-5 h-5 [&>svg]:w-5 [&>svg]:h-5\",\r\n \"extra-large\": \"w-6 h-6 [&>svg]:w-6 [&>svg]:h-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 { 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, 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 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 * 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: \"w-5 h-5 [&>svg]:w-5 [&>svg]:h-5\",\r\n \"extra-large\": \"w-6 h-6 [&>svg]:w-6 [&>svg]:h-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-(--border-radius-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-(--border-radius-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-(--border-radius-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\",\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 borderRadius: \"var(--border-radius-4)\",\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 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: \"w-5 h-5 [&>svg]:w-5 [&>svg]:h-5\",\r\n \"extra-large\": \"w-6 h-6 [&>svg]:w-6 [&>svg]:h-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-3xl 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 { LogoIconLIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconExtraLarge = () => {\r\n return (\r\n <div className={\"w-lg h-[512px] relative bg-linear-to-t from-gray-800 to-gray-950 rounded-[80px] overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconLIcon className={\"w-96 h-96\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconExtraLarge;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconExtraSmall = () => {\r\n return (\r\n <div className={\"w-8 h-8 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-[5px] overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"w-6 h-6\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconExtraSmall;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconLarge = () => {\r\n return (\r\n <div className={\"w-64 h-64 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-[40px] overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"w-44 h-44\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconLarge;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconMedium = () => {\r\n return (\r\n <div className={\"w-32 h-32 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-[20px] overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"w-24 h-24\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconMedium;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconSmall = () => {\r\n return (\r\n <div className={\"w-14 h-14 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-lg overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"w-10 h-10\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconSmall;","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoInline = () => {\r\n return (\r\n <div className={\"w-44 h-12 inline-flex justify-start items-center gap-4\"}>\r\n <LogoIconMIcon className={\"w-12 h-12\"} />\r\n <LogoTextMIcon className={\"h-8 w-[110px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoInline;","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoInline = () => {\r\n return (\r\n <div className={\"w-32 h-9 inline-flex justify-start items-center gap-3\"}>\r\n <LogoIconMIcon className={\"w-9 h-9\"} />\r\n <LogoTextMIcon className={\"h-6 w-[83px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoInline; ","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoMultiline = () => {\r\n return (\r\n <div className={\"w-36 inline-flex flex-col justify-start items-start gap-2\"}>\r\n <LogoIconMIcon className={\"w-12 h-12\"} />\r\n <LogoTextMIcon className={\"h-8 w-[111px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoMultiline;"],"mappings":"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","names":["import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_icons","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_icons","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","iconWrapperVariants","React","import_jsx_runtime","wrapperBase","current","value","React","import_icons","import_jsx_runtime","wrapperBase","React","import_class_variance_authority","import_jsx_runtime","iconWrapperVariants","React","import_jsx_runtime","React","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","LogoInline","import_icons","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../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/PasswordInput.tsx","../src/components/ui/input.tsx","../src/components/Inputs/Field.tsx","../src/components/Inputs/InputShell.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/Logo/LogoIconExtraLarge.tsx","../src/components/Logo/LogoIconExtraSmall.tsx","../src/components/Logo/LogoIconLarge.tsx","../src/components/Logo/LogoIconMedium.tsx","../src/components/Logo/LogoIconSmall.tsx","../src/components/Logo/LogoInline.tsx","../src/components/Logo/LogoInlineSmall.tsx","../src/components/Logo/LogoMultiline.tsx"],"sourcesContent":["// Buttons\r\nexport { Button } from './components/Buttons/Button';\r\nexport { ButtonGroup } from './components/Buttons/ButtonGroup';\r\nexport { IconButton } from './components/Buttons/IconButton';\r\nexport { IconButtonGroup } from './components/Buttons/IconButtonGroup';\r\nexport { LinkButton } from './components/Buttons/LinkButton';\r\nexport { MessageButton } from './components/Buttons/MessageButton';\r\n\r\n// Content\r\nexport { Avatar } from './components/Content/Avatar';\r\nexport { Badge } from './components/Content/Badge';\r\nexport { BadgeDigit } from './components/Content/BadgeDigit';\r\nexport { BadgeDot } from './components/Content/BadgeDot';\r\nexport { BadgeStatus } from './components/Content/BadgeStatus';\r\nexport { Divider } from './components/Content/Divider';\r\nexport { Progress } from './components/Content/Progress';\r\nexport { StatusAvatar } from './components/Content/StatusAvatar';\r\nexport { Tag } from './components/Content/Tag';\r\n\r\n// Inputs\r\nexport { Checkbox } from './components/Inputs/Checkbox';\r\nexport { Dropdown } from './components/Inputs/Dropdown';\r\nexport { PasswordInput } from './components/Inputs/PasswordInput';\r\nexport { RadioGroup } from './components/Inputs/RadioGroup';\r\nexport { SearchInput } from './components/Inputs/SearchInput';\r\nexport { Slider } from './components/Inputs/Slider';\r\nexport { TextArea } from './components/Inputs/TextArea';\r\nexport { TextInput } from './components/Inputs/TextInput';\r\nexport { Toggle } from './components/Inputs/Toggle';\r\nexport { WebsiteInput } from './components/Inputs/WebsiteInput';\r\n\r\n// Logo\r\nexport { default as LogoIconExtraLarge } from './components/Logo/LogoIconExtraLarge';\r\nexport { default as LogoIconExtraSmall } from './components/Logo/LogoIconExtraSmall';\r\nexport { default as LogoIconLarge } from './components/Logo/LogoIconLarge';\r\nexport { default as LogoIconMedium } from './components/Logo/LogoIconMedium';\r\nexport { default as LogoIconSmall } from './components/Logo/LogoIconSmall';\r\nexport { default as LogoInline } from './components/Logo/LogoInline';\r\nexport { default as LogoInlineSmall } from './components/Logo/LogoInlineSmall';\r\nexport { default as LogoMultiline } from './components/Logo/LogoMultiline';\r\n\r\n// Utils\r\nexport { cn } from './lib/utils';\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 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-80 min-w-80',\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-[316px]\">\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 { 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 { 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, 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 * 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 { LogoIconLIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconExtraLarge = () => {\r\n return (\r\n <div className={\"w-lg h-[512px] relative bg-linear-to-t from-gray-800 to-gray-950 rounded-80 overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconLIcon className={\"size-96\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconExtraLarge;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconExtraSmall = () => {\r\n return (\r\n <div className={\"size-8 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-[5px] overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"size-6\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconExtraSmall;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconLarge = () => {\r\n return (\r\n <div className={\"size-64 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-40 overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"size-44\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconLarge;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconMedium = () => {\r\n return (\r\n <div className={\"size-32 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-20 overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"size-24\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconMedium;","import { LogoIconMIcon } from \"@bubo-squared/icons\"\r\n\r\nconst LogoIconSmall = () => {\r\n return (\r\n <div className={\"size-14 relative bg-linear-to-t from-gray-800 to-gray-950 rounded-8 overflow-hidden flex justify-center items-center\"}>\r\n <LogoIconMIcon className={\"size-10\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoIconSmall;","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoInline = () => {\r\n return (\r\n <div className={\"w-44 h-12 inline-flex justify-start items-center gap-4\"}>\r\n <LogoIconMIcon className={\"size-12\"} />\r\n <LogoTextMIcon className={\"h-8 w-[110px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoInline;","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoInline = () => {\r\n return (\r\n <div className={\"w-32 h-9 inline-flex justify-start items-center gap-3\"}>\r\n <LogoIconMIcon className={\"size-9\"} />\r\n <LogoTextMIcon className={\"h-6 w-[83px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoInline; ","import { LogoIconMIcon, LogoTextMIcon } from \"@bubo-squared/icons\";\r\n\r\nconst LogoMultiline = () => {\r\n return (\r\n <div className={\"w-36 inline-flex flex-col justify-start items-start gap-2\"}>\r\n <LogoIconMIcon className={\"size-12\"} />\r\n <LogoTextMIcon className={\"h-8 w-[111px] text-(--text-primary)\"} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default LogoMultiline;"],"mappings":"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","names":["import_jsx_runtime","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","React","import_jsx_runtime","React","import_icons","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","React","import_icons","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","React","import_class_variance_authority","React","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_jsx_runtime","import_jsx_runtime","React","import_jsx_runtime","React","import_class_variance_authority","import_icons","import_jsx_runtime","iconWrapperVariants","React","import_jsx_runtime","wrapperBase","current","value","React","import_icons","import_jsx_runtime","wrapperBase","React","import_class_variance_authority","import_jsx_runtime","iconWrapperVariants","React","import_jsx_runtime","React","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","import_icons","import_jsx_runtime","LogoInline","import_icons","import_jsx_runtime"]}