awa-ui 0.5.3

Web UI and JSON API for the Awa job queue
Documentation
"use client"

import { CameraIcon, FolderIcon, PaperClipIcon } from "@heroicons/react/24/outline"
import {
  FileTrigger as FileTriggerPrimitive,
  type FileTriggerProps as FileTriggerPrimitiveProps,
} from "react-aria-components"
import type { VariantProps } from "tailwind-variants"
import { Button, type buttonStyles } from "./button"
import { Loader } from "./loader"

export interface FileTriggerProps
  extends FileTriggerPrimitiveProps,
    VariantProps<typeof buttonStyles> {
  isDisabled?: boolean
  isPending?: boolean
  ref?: React.RefObject<HTMLInputElement>
  className?: string
}

export function FileTrigger({
  intent = "outline",
  size = "md",
  isCircle = false,
  ref,
  className,
  ...props
}: FileTriggerProps) {
  return (
    <FileTriggerPrimitive ref={ref} {...props}>
      <Button
        className={className}
        isDisabled={props.isDisabled}
        intent={intent}
        size={size}
        isCircle={isCircle}
      >
        {!props.isPending ? (
          props.defaultCamera ? (
            <CameraIcon />
          ) : props.acceptDirectory ? (
            <FolderIcon />
          ) : (
            <PaperClipIcon />
          )
        ) : (
          <Loader />
        )}
        {props.children
          ? props.children
          : ["sq-sm", "sq-xs", "sq-md", "sq-lg"].includes(size as string)
            ? null
            : `${props.allowsMultiple ? "Browse a files" : props.acceptDirectory ? "Browse" : "Browse a file"}...`}
      </Button>
    </FileTriggerPrimitive>
  )
}