Default
import { PixelBareInput } from '@pxlkit/ui-kit';
export function Default() {
return <PixelBareInput placeholder="Type something" />;
}Unstyled <input> primitive, the native input itself, used as an escape hatch for fully custom field compositions.
<input> semantics — takes every native input attribute verbatim.<input>, for measurement, focus, or imperative APIs: a ref in React, $el in Vue, the input[pxlBareInput] element in Angular.import { PixelBareInput } from '@pxlkit/ui-kit';No props of its own.
Also takes the native attributes and event handlers of <input> (InputHTMLAttributes<HTMLInputElement>).
ref points to <input>.
WCAG target: 2.1 AA
textboxBecause this primitive is unstyled, callers MUST supply an accessible name via aria-label, aria-labelledby, or an associated <label> element. Visual focus styling is the consumer's responsibility.
| Key | Action | When |
|---|---|---|
| Tab | Moves focus into / out of the input. | — |
| Enter | Submits the surrounding form when present. | — |
import { PixelBareInput } from '@pxlkit/ui-kit';
export function Default() {
return <PixelBareInput placeholder="Type something" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Default() {
return <PixelBareInput placeholder="Type something" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Uncontrolled() {
return <PixelBareInput defaultValue="hello world" aria-label="uncontrolled-input" />;
}import * as React from 'react';
import { PixelBareInput } from '@pxlkit/ui-kit';
export function Controlled() {
const [value, setValue] = React.useState('');
return (
<PixelBareInput
value={value}
onChange={(e) => setValue(e.target.value)}
placeholder="Controlled"
aria-label="controlled-input"
/>
);
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Email() {
return <PixelBareInput type="email" placeholder="you@example.com" autoComplete="email" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Password() {
return <PixelBareInput type="password" placeholder="••••••••" autoComplete="current-password" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Number() {
return (
<PixelBareInput type="number" min={0} max={100} step={1} defaultValue={42} aria-label="number-input" />
);
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Disabled() {
return <PixelBareInput defaultValue="not editable" disabled aria-label="disabled-input" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function ReadOnly() {
return <PixelBareInput defaultValue="read only" readOnly aria-label="readonly-input" />;
}import { PixelBareInput } from '@pxlkit/ui-kit';
export function Required() {
return <PixelBareInput required placeholder="required field" aria-label="required-input" />;
}import * as React from 'react';
import { PixelButton, PixelBareInput } from '@pxlkit/ui-kit';
export function WithRef() {
const ref = React.useRef<HTMLInputElement>(null);
return (
<div className="flex items-center gap-2">
<PixelBareInput ref={ref} placeholder="Focus me via ref" />
<PixelButton size="sm" onClick={() => ref.current?.focus()}>
Focus
</PixelButton>
</div>
);
}