UNPKG

@mabi-ui/radio

Version:

Radio group and radio button components for Mabi-UI

1 lines 3.92 kB
{"version":3,"sources":["../src/RadioGroup.tsx"],"names":[],"mappings":";;;;;AAGA,SAAS,wBAAwB;AACjC,SAAS,kBAAkB;AAC3B,SAAS,UAAU;AACnB,OAAO;AAAA,EACL;AAAA,EACA;AAAA,OAGK;AACP,SAA8B,qBAAqB;AACnD,SAAS,0BAA0B;AAG5B,IAAM,eAAe,cAGlB,IAAI;AASP,IAAM,aAET;AAAA,EACF,CAAC,EAAE,OAAO,WAAW,GAAG,MAAM,GAAG,QAAQ;AACvC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,IAAI;AAEJ,UAAM,QAAQ,mBAAmB,KAAK;AACtC,UAAM,EAAE,iBAAiB,YAAY,kBAAkB,kBAAkB,IACvE,cAAc,OAAO,KAAK;AAE5B,WACE,oCAAC,wBACC,oCAAC,SAAK,GAAG,iBAAiB,aACvB,QAAQ,KAAK,MACX,OAAO,UAAU,WAChB;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,SAAQ;AAAA,QACR,WAAU;AAAA,QACT,GAAG;AAAA;AAAA,IACN,IAEA,QAEH,QAAQ,WAAW,MACjB,OAAO,gBAAgB,WACtB;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,SAAQ;AAAA,QACP,GAAG;AAAA,QACJ,WAAU;AAAA;AAAA,IACZ,IAEA,cAEJ,oCAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,OAAO,MAAM,KAC3C;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW;AAAA,UACT,WAAW,EAAE,YAAY,CAAC;AAAA,UAC1B;AAAA,QACF;AAAA;AAAA,MAEC;AAAA,IACH,CACF,GACC,QAAQ,YAAY,KACnB;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,SAAQ;AAAA,QACP,GAAG;AAAA,QACJ,WAAU;AAAA;AAAA,IACZ,CAEJ,CACF;AAAA,EAEJ;AACF","sourcesContent":["\"use client\";\n\nimport { CheckboxProps } from \"@mabi-ui/checkbox\";\nimport { PreflightWrapper } from \"@mabi-ui/preflight\";\nimport { Typography } from \"@mabi-ui/typography\";\nimport { cn } from \"@mabi-ui/utils\";\nimport React, {\n createContext,\n forwardRef,\n RefAttributes,\n type ReactNode,\n} from \"react\";\nimport { AriaRadioGroupProps, useRadioGroup } from \"react-aria\";\nimport { useRadioGroupState } from \"react-stately\";\nimport { radioGroup } from \"./styles\";\n\nexport const RadioContext = createContext<{\n state: ReturnType<typeof useRadioGroupState>;\n color: RadioGroupProps[\"color\"];\n} | null>(null);\n\nexport type RadioGroupProps = {\n children: ReactNode;\n className?: string;\n errorMessage?: string;\n} & Omit<AriaRadioGroupProps, \"errorMessage\"> &\n Pick<CheckboxProps, \"color\">;\n\nexport const RadioGroup: React.ForwardRefExoticComponent<\n RadioGroupProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, RadioGroupProps>(\n ({ color, className, ...props }, ref) => {\n const {\n children,\n label,\n description,\n errorMessage,\n orientation = \"vertical\",\n } = props;\n\n const state = useRadioGroupState(props);\n const { radioGroupProps, labelProps, descriptionProps, errorMessageProps } =\n useRadioGroup(props, state);\n\n return (\n <PreflightWrapper>\n <div {...radioGroupProps} className={className}>\n {Boolean(label) &&\n (typeof label === \"string\" ? (\n <Typography\n children={label}\n variant=\"subtitle2\"\n className=\"dark:text-white\"\n {...labelProps}\n />\n ) : (\n label\n ))}\n {Boolean(description) &&\n (typeof description === \"string\" ? (\n <Typography\n children={description}\n variant=\"caption\"\n {...descriptionProps}\n className=\"mt-1 text-black/70 dark:text-white/70\"\n />\n ) : (\n description\n ))}\n <RadioContext.Provider value={{ state, color }}>\n <div\n ref={ref}\n className={cn(\n radioGroup({ orientation }),\n \"RadioGroup-container\"\n )}\n >\n {children}\n </div>\n </RadioContext.Provider>\n {Boolean(errorMessage) && (\n <Typography\n children={errorMessage}\n variant=\"caption\"\n {...errorMessageProps}\n className=\"text-error\"\n />\n )}\n </div>\n </PreflightWrapper>\n );\n }\n);\n"]}