Number Field
cubby-ui/number-fieldFreeComponent
A number-field component.
Live preview
live · rendered by the registry
Rendered by cubby-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://cubby-ui.dev/r/number-field.jsonSource
1"use client";23import { cva, type VariantProps } from "class-variance-authority";4import { NumberField as BaseNumberField } from "@base-ui/react/number-field";5import { HugeiconsIcon } from "@hugeicons/react";6import { ArrowDown01Icon, ArrowUp01Icon } from "@hugeicons/core-free-icons";78import { cn } from "@/lib/utils";910const numberFieldGroupVariants = cva(11 [12 "flex rounded-lg",13 // Outline on the wrapper so focus/invalid rings wrap the full cluster, not just the input.14 "outline-0 outline-offset-0 outline-transparent transition-[outline-width,outline-offset,outline-color] duration-100 ease-out outline-solid",15 "has-[[data-slot=number-field-input]:focus-visible]:outline-ring/50 has-[[data-slot=number-field-input]:focus-visible]:outline-2 has-[[data-slot=number-field-input]:focus-visible]:outline-offset-2",16 "has-[[data-slot=number-field-input][aria-invalid=true]]:outline-destructive/50 has-[[data-slot=number-field-input][aria-invalid=true]]:outline-2 has-[[data-slot=number-field-input][aria-invalid=true]]:outline-offset-2",17 // With a stacked stepper (no decrement capping the left edge), the input18 // rounds and borders its own left side automatically.19 "has-[[data-slot=number-field-stepper]]:[&>[data-slot=number-field-input]]:rounded-l-lg has-[[data-slot=number-field-stepper]]:[&>[data-slot=number-field-input]]:border-l",20 ],21 {22 variants: {23 variant: {24 // Opaque base: --outline-hover is a -5% darken, giving a sharp hover delta.25 default:26 "[--number-field-bg:var(--input)] [--number-field-hover:var(--outline-hover)]",27 // Translucent base: --surface-hover is an alpha overlay, preserving translucency.28 elevated:29 "[--number-field-bg:var(--input-elevated)] [--number-field-hover:var(--surface-hover)]",30 },31 },32 defaultVariants: {33 variant: "default",34 },35 },36);3738function NumberField({ className, ...props }: BaseNumberField.Root.Props) {39 return (40 <BaseNumberField.Root41 data-slot="number-field"42 className={cn("flex flex-col items-start gap-1", className)}43 {...props}44 />45 );46}4748function NumberFieldGroup({49 className,50 variant,51 ...props52}: BaseNumberField.Group.Props &53 VariantProps<typeof numberFieldGroupVariants>) {54 return (55 <BaseNumberField.Group56 data-slot="number-field-group"57 className={cn(numberFieldGroupVariants({ variant }), className)}58// … truncated
What it pulls in
npm packages
Files it writes
More from cubby-ui
All 79 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | cubby-ui | Components | Free | 2 deps | |
| Alertalert | cubby-ui | Components | Free | 1 dep | |
| Alert-dialogalert-dialog | cubby-ui | Components | Free | 2 deps | |
| Aspect-ratioaspect-ratio | cubby-ui | Components | Free | no deps | |
| Autocompleteautocomplete | cubby-ui | Components | Free | 2 deps | |
| Avataravatar | cubby-ui | Components | Free | 1 dep | |
| Badgebadge | cubby-ui | Components | Free | 1 dep | |
| Base Drawerbase-drawer | cubby-ui | Components | Free | 2 deps |
