Date Field

PreviousNext

React aria components DateField with shadcn characteristics.

Docs
ouiui

Preview

Loading preview…
registry/default/ui/oui-date-field.tsx
"use client";

import type { FieldStylesProps } from "@/registry/default/ui/oui-field";
import * as React from "react";
import { composeTailwindRenderProps } from "@/registry/default/ui/oui-base";
import { fieldStyles } from "@/registry/default/ui/oui-field";
import { inputStyles } from "@/registry/default/ui/oui-input";
import * as Rac from "react-aria-components";

/**
 * Derived from shadcn Field
 */
export function DateField({
  className,
  orientation = "vertical",
  ...props
}: React.ComponentProps<typeof Rac.DateField> & FieldStylesProps) {
  return (
    <Rac.DateField
      data-slot="date-field"
      data-slot-type="field"
      data-orientation={orientation}
      className={composeTailwindRenderProps(
        className,
        fieldStyles({ orientation }),
      )}
      {...props}
    />
  );
}

export function DateFieldInput({
  className,
  ...props
}: React.ComponentProps<typeof Rac.DateInput>) {
  return (
    <Rac.DateInput
      data-slot="date-field-input"
      className={composeTailwindRenderProps(className, [
        inputStyles,
        "flex items-center data-focus-within:border-ring data-focus-within:ring-[3px] data-focus-within:ring-ring/50",
      ])}
      {...props}
    />
  );
}

export function DateFieldSegment({
  className,
  ...props
}: React.ComponentProps<typeof Rac.DateSegment>) {
  return (
    <Rac.DateSegment
      data-slot="date-field-segment"
      className={composeTailwindRenderProps(className, [
        "inline rounded-xs p-0.5 text-foreground caret-transparent forced-color-adjust-none outline-none data-type-literal:px-0",
        "data-placeholder:text-muted-foreground",
        "data-focused:bg-primary data-focused:text-primary-foreground",
      ])}
      {...props}
    />
  );
}

Installation

npx shadcn@latest add @oui/oui-date-field

Usage

import { OuiDateField } from "@/components/ui/oui-date-field"
<OuiDateField />