Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Components
Password Requirement
Pagination

A content navigation control that enables paging through large datasets or items.

Polymorphic Slot

A dynamic slot component for rendering flexible and customizable child elements.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

Password Requirement

Component for displaying live password validation feedback based on defined requirements, optionally with strength progress bars.

Usage

Basic usage example to quickly see how the PasswordRequirement works.

  • Minimum 10 characters and maximum 100 characters

  • Minimum one lowercase character

  • Minimum one uppercase character

  • Minimum one number

  • At least one special character, e.g, !@#?

"use client";
import { Input } from "@/ui/input";
import { Stack } from "@/ui/stack";
import { PasswordRequirement, PasswordRequirementProvider } from "@/ui/password-requirement";

export function PasswordRequirementDemo() {
  return (
    <PasswordRequirementProvider>
      <Stack>
        <Input.Password />
        <PasswordRequirement />
      </Stack>
    </PasswordRequirementProvider>
  );
}

Properties

Interactive configurator to explore customization options for the PasswordRequirement component.

Password requirements:Make sure the following requirements are met:
  • Minimum 10 characters and maximum 100 characters

  • Minimum one lowercase character

  • Minimum one uppercase character

  • Minimum one number

  • At least one special character, e.g, !@#?

"use client";
import React from "react";
import { Input } from "@/ui/input";
import { Stack } from "@/ui/stack";
import { twMerge } from "tailwind-merge";
import { PasswordRequirement, PasswordRequirementProvider } from "@/ui/password-requirement";

export function PasswordRequirementDemo() {
  const [visibility, setVisibility] = React.useState(false);
  return (
    <PasswordRequirementProvider>
      {({ meets }) => {
        const isMeets = meets().every(pass => pass.isPass() === true);
        return (
          <Stack>
            <Input.Password open={visibility} onOpenChange={setVisibility} />
            <Input.Password validating open={visibility} onOpenChange={setVisibility} />
            <div className="flex flex-col md:col-span-2">
              <span className={twMerge("overflow-hidden text-sm font-medium transition-[height]", isMeets && "h-0")}>Password requirements:</span>
              <span className={twMerge("text-muted-foreground mb-1 text-sm font-normal", isMeets && "text-blue-500 line-through")}>Make sure the following requirements are met:</span>
              <PasswordRequirement classNames={{ root: "ml-1.5 rtl:ml-0 rtl:mr-1.5", item: "text-muted-foreground data-[state=pass]:text-muted data-[state=pass]:line-through" }} />
            </div>
          </Stack>
        );
      }}
    </PasswordRequirementProvider>
  );
}

Managing State with Provider

When using the PasswordRequirementProvider to automatically manage value and onChange state, you must use the <Input.Password /> component.

export function PasswordRequirementDemo() {
  return (
    <PasswordRequirementProvider>
      <Stack>
        <Input.Password />
        <PasswordRequirement />
      </Stack>
    </PasswordRequirementProvider>
  );
}

Controlling State Manually

You can also manually control the input's value and pass it to the provider via value and onValueChange props.

export function PasswordRequirementDemo() {
  const [value, setValue] = React.useState<string>("");
  return (
    <PasswordRequirementProvider value={value} onValueChange={setValue}>
      <input value={value} onChange={e => setValue(e.currentTarget.value)} />
      <PasswordRequirement />
    </PasswordRequirementProvider>
  );
}

API References

Styles API

The classNames and styles props allow you to customize the appearance of the component parts.

type Selector = "root" | "item" | "icon" | "label" | "progressRoot" | "progressIndicator";
Styles APITypeDefaultAnnotation
classNames?Partial<Record<Selector, string>>undefined---
styles?Partial<Record<Selector, CSSProperties>>undefined---

Props API

Props APITypeDefaultAnnotation
value?stringundefined---
withProgressBars?booleanundefined---
requirements?Requirements[]undefined---
strength?{ min?: number; max?: number }undefined---

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

password-requirement.tsx