import React, { createElement, forwardRef, useContext, useId } from 'react'
import { ExclamationCircleIcon } from '@heroicons/react/24/outline'
import { omit } from 'ramda'
import { Loader } from './loader'
import clsx from 'clsx'
const ControlContext = React.createContext({})
function ControlProvider({ children, ...props }) {
return (
{children}
)
}
function useControl(props) {
const field = useContext(ControlContext)
return { ...field, ...props }
}
export const Control = forwardRef(function Control(
{ as = 'div', children, ...props },
ref,
) {
const id = useId()
const props_ = omit(['id'], props)
return (
{React.createElement(as, { ref, ...props }, children)}
)
})
export function Button({
children,
as = 'button',
className,
isLoading = false,
...props
}) {
if (isLoading) {
props['disabled'] = isLoading
}
return createElement(
as,
{
className: clsx(
'font-medium text-green-primary rounded-lg bg-green-secondary hover:bg-green-support',
'h-12 px-4 relative',
'disabled:bg-green-secondary/50 disabled:pointer-events-none',
'transition',
className,
),
...props,
},
<>
{isLoading && (
)}
{children}
>,
)
}
export function Label({ children, className, ...props }) {
const { id, htmlFor, className: _, ...field } = useControl(props)
return (
)
}
export const Input = forwardRef(function Input(
{ as = 'input', size = 'base', className, children, ...props },
ref,
) {
const { className: _, ...field } = useControl(props)
const sizes = { base: 'h-12' }
return createElement(
as,
{
className: clsx(
'bg-white outline-none px-4 rounded-lg transition',
'border border-green-light dark:border-gray-700 dark:bg-gray-800',
'focus:ring-1 focus:border-green-secondary focus:ring-green-secondary focus:placeholder:text-transparent',
'aria-[invalid=true]:border-red-400 aria-[invalid=true]:ring-red-400',
'dark:aria-[invalid=true]:border-red-500 dark:aria-[invalid=true]:ring-red-500',
'disabled:text-gray-400 disabled:border-gray-300 disabled:bg-gray-200',
'dark:disabled:text-gray-500 dark:disabled:bg-gray-700',
sizes?.[size],
className,
),
ref,
...field,
},
children,
)
})
export const Checkbox = forwardRef(function Checkbox(
{ className, ...props },
ref,
) {
const { className: _, ...field } = useControl(props)
return (
)
})
export function Error({ children }) {
return (
)
}