UNPKG

@mabi-ui/radio

Version:

Radio group and radio button components for Mabi-UI

1 lines 15.5 kB
{"version":3,"sources":["../src/RadioButton.tsx","../../checkbox/src/styles.ts"],"names":["cn"],"mappings":"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","sourcesContent":["'use client'\n\nimport { VariantProps } from \"class-variance-authority\";\nimport {\n\tAriaRadioProps,\n\tHoverProps,\n\tVisuallyHidden,\n\tmergeProps,\n\tuseFocusRing,\n\tuseHover,\n\tuseRadio,\n} from \"react-aria\";\nimport { checkbox } from \"../../checkbox/src/styles\";\nimport { FC, forwardRef, useContext } from \"react\";\nimport { RadioContext } from \"./RadioGroup\";\nimport { cn, useForwardedRef } from \"@mabi-ui/utils\";\nimport { SelectedIcon, UnselectedIcon } from \"./RadioIcons\";\nimport React from \"react\";\n\nexport type RadioButtonProps = {\n\tclassName?:\n\t\t| string\n\t\t| ((props: {\n\t\t\t\tisSelected: boolean;\n\t\t\t\tisDisabled: boolean;\n\t\t\t\tisPressed: boolean;\n\t\t\t\tisFocusVisible: boolean;\n\t\t\t\tisHovered: boolean;\n\t\t }) => string);\n\tselectedIcon?: React.ReactNode;\n\tunselectedIcon?: React.ReactNode;\n} & Omit<AriaRadioProps, \"children\"> &\n\tHoverProps &\n\t(\n\t\t| { label: string; \"aria-label\"?: never; children?: never }\n\t\t| { \"aria-label\": string; label?: never; children?: React.ReactNode }\n\t) &\n\tOmit<\n\t\tVariantProps<typeof checkbox>,\n\t\t\"isHovered\" | \"isPressed\" | \"isFocusVisible\" | \"isDisabled\" | \"color\"\n\t>;\n\nexport const RadioButton: FC<RadioButtonProps> = forwardRef<\n\tHTMLInputElement,\n\tRadioButtonProps\n>(({ className, selectedIcon, unselectedIcon, ...props }, ref) => {\n\tconst children = props.label ?? props.children;\n\tconst context = useContext(RadioContext);\n\tconst state = context?.state;\n\tconst color = context?.color ?? \"primary\";\n\tconst innerRef = useForwardedRef(ref);\n\n\tif (state == null) {\n\t\tthrow new Error(\"Radio must be used within a RadioGroup\");\n\t}\n\n\tconst { inputProps, isSelected, isDisabled, isPressed } = useRadio(\n\t\t{ ...props, children },\n\t\tstate,\n\t\tinnerRef\n\t);\n\n\tconst { isFocusVisible, focusProps } = useFocusRing();\n\tconst { hoverProps, isHovered } = useHover({\n\t\t...props,\n\t\tisDisabled: state.isDisabled,\n\t});\n\n\treturn (\n\t\t<label\n\t\t\tclassName={cn(\n\t\t\t\tcheckbox({\n\t\t\t\t\tisHovered,\n\t\t\t\t\tisPressed,\n\t\t\t\t\tisFocusVisible,\n\t\t\t\t\tisDisabled,\n\t\t\t\t\tcolor,\n\t\t\t\t}),\n\t\t\t\ttypeof className === \"string\"\n\t\t\t\t\t? className\n\t\t\t\t\t: className?.({\n\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\tisDisabled,\n\t\t\t\t\t\t\tisPressed,\n\t\t\t\t\t\t\tisFocusVisible,\n\t\t\t\t\t\t\tisHovered,\n\t\t\t\t\t })\n\t\t\t)}\n\t\t\t{...mergeProps(hoverProps)}\n\t\t>\n\t\t\t<VisuallyHidden>\n\t\t\t\t<input {...mergeProps(inputProps, focusProps)} ref={ref} />\n\t\t\t</VisuallyHidden>\n\t\t\t{isSelected\n\t\t\t\t? selectedIcon ?? (\n\t\t\t\t\t\t<SelectedIcon\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\tisDisabled={isDisabled}\n\t\t\t\t\t\t/>\n\t\t\t\t )\n\t\t\t\t: unselectedIcon ?? (\n\t\t\t\t\t\t<UnselectedIcon\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tcolor={color}\n\t\t\t\t\t\t\tisDisabled={isDisabled}\n\t\t\t\t\t\t/>\n\t\t\t\t )}\n\t\t\t{children}\n\t\t</label>\n\t);\n});\n\nRadioButton.displayName = \"RadioButton\";\n","import { typography } from \"@mabi-ui/typography\";\nimport { availableColors, cn } from \"@mabi-ui/utils\";\nimport { cva } from \"class-variance-authority\";\n\nexport type CvaConfig = {\n isHovered: {\n true: string;\n false: string;\n };\n isPressed: {\n true: string;\n false: string;\n };\n isFocusVisible: {\n true: string;\n false: string;\n };\n isDisabled: {\n true: string;\n };\n color: {\n [key in typeof availableColors[number]]: string;\n };\n};\n\nexport const checkbox: ReturnType<typeof cva<CvaConfig>> = cva(\n cn(\n \"flex gap-[10px] relative items-center cursor-pointer p-2 border-2 border-solid border-transparent rounded-lg w-fit select-none \",\n typography({ variant: \"body2\" }),\n \"dark:text-white\"\n ),\n {\n variants: {\n isHovered: {\n true: \"\",\n false: \"\",\n },\n isPressed: {\n true: \"\",\n false: \"\",\n },\n isFocusVisible: {\n true: \"\",\n false: \"\",\n },\n isDisabled: {\n true: \"opacity-[0.38] cursor-default\",\n },\n color: {\n primary: \"\",\n secondary: \"\",\n tertiary: \"\",\n success: \"\",\n warning: \"\",\n error: \"\",\n loading: \"\",\n black: \"\",\n white: \"\",\n grey: \"\",\n orange: \"\",\n lightblue: \"\",\n blue: \"\",\n indaco: \"\",\n purple: \"\",\n },\n },\n compoundVariants: [\n //! primary\n {\n isHovered: true,\n color: \"primary\",\n className: \"bg-primary/[0.06]\",\n },\n {\n isPressed: true,\n color: \"primary\",\n className: \"bg-primary/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"primary\",\n className: \"bg-primary/[0.12] border-primary\",\n },\n //! secondary\n {\n isHovered: true,\n color: \"secondary\",\n className: \"bg-secondary/[0.06]\",\n },\n {\n isPressed: true,\n color: \"secondary\",\n className: \"bg-secondary/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"secondary\",\n className: \"bg-secondary/[0.12] border-secondary\",\n },\n //! tertiary\n {\n isHovered: true,\n color: \"tertiary\",\n className: \"bg-tertiary/[0.06]\",\n },\n {\n isPressed: true,\n color: \"tertiary\",\n className: \"bg-tertiary/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"tertiary\",\n className: \"bg-tertiary/[0.12] border-tertiary\",\n },\n //! success\n {\n isHovered: true,\n color: \"success\",\n className: \"bg-success/[0.06]\",\n },\n {\n isPressed: true,\n color: \"success\",\n className: \"bg-success/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"success\",\n className: \"bg-success/[0.12] border-success\",\n },\n //! warning\n {\n isHovered: true,\n color: \"warning\",\n className: \"bg-warning/[0.06]\",\n },\n {\n isPressed: true,\n color: \"warning\",\n className: \"bg-warning/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"warning\",\n className: \"bg-warning/[0.12] border-warning\",\n },\n //! error\n {\n isHovered: true,\n color: \"error\",\n className: \"bg-error/[0.06]\",\n },\n {\n isPressed: true,\n color: \"error\",\n className: \"bg-error/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"error\",\n className: \"bg-error/[0.12] border-error\",\n },\n //! loading\n {\n isHovered: true,\n color: \"loading\",\n className: \"bg-loading/[0.06]\",\n },\n {\n isPressed: true,\n color: \"loading\",\n className: \"bg-loading/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"loading\",\n className: \"bg-loading/[0.12] border-loading\",\n },\n //! black\n {\n isHovered: true,\n color: \"black\",\n className: \"bg-black/[0.06]\",\n },\n {\n isPressed: true,\n color: \"black\",\n className: \"bg-black/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"black\",\n className: \"bg-black/[0.12] border-black\",\n },\n //! white\n {\n isHovered: true,\n color: \"white\",\n className: \"bg-white/[0.06]\",\n },\n {\n isPressed: true,\n color: \"white\",\n className: \"bg-white/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"white\",\n className: \"bg-white/[0.12] border-white\",\n },\n //! grey\n {\n isHovered: true,\n color: \"grey\",\n className: \"bg-grey/[0.06]\",\n },\n {\n isPressed: true,\n color: \"grey\",\n className: \"bg-grey/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"grey\",\n className: \"bg-grey/[0.12] border-grey\",\n },\n //! orange\n {\n isHovered: true,\n color: \"orange\",\n className: \"bg-orange/[0.06]\",\n },\n {\n isPressed: true,\n color: \"orange\",\n className: \"bg-orange/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"orange\",\n className: \"bg-orange/[0.12] border-orange\",\n },\n //! lightblue\n {\n isHovered: true,\n color: \"lightblue\",\n className: \"bg-lightblue/[0.06]\",\n },\n {\n isPressed: true,\n color: \"lightblue\",\n className: \"bg-lightblue/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"lightblue\",\n className: \"bg-lightblue/[0.12] border-lightblue\",\n },\n //! blue\n {\n isHovered: true,\n color: \"blue\",\n className: \"bg-blue/[0.06]\",\n },\n {\n isPressed: true,\n color: \"blue\",\n className: \"bg-blue/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"blue\",\n className: \"bg-blue/[0.12] border-blue\",\n },\n //! indaco\n {\n isHovered: true,\n color: \"indaco\",\n className: \"bg-indaco/[0.06]\",\n },\n {\n isPressed: true,\n color: \"indaco\",\n className: \"bg-indaco/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"indaco\",\n className: \"bg-indaco/[0.12] border-indaco\",\n },\n //! purple\n {\n isHovered: true,\n color: \"purple\",\n className: \"bg-purple/[0.06]\",\n },\n {\n isPressed: true,\n color: \"purple\",\n className: \"bg-purple/[0.12]\",\n },\n {\n isFocusVisible: true,\n color: \"purple\",\n className: \"bg-purple/[0.12] border-purple\",\n },\n ],\n defaultVariants: {\n color: \"primary\",\n },\n }\n);\n"]}