{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "field",
  "title": "Field",
  "description": "Glass text inputs, fields, fieldsets and forms.",
  "dependencies": [
    "@base-ui/react@^1.8.0",
    "motion@^13.4.4"
  ],
  "registryDependencies": [
    "https://liquikit.dev/r/core.json",
    "https://liquikit.dev/r/glass.json"
  ],
  "files": [
    {
      "path": "src/field.tsx",
      "content": "\"use client\";\n\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport { Fieldset as BaseFieldset } from \"@base-ui/react/fieldset\";\nimport { Form as BaseForm } from \"@base-ui/react/form\";\nimport { Input as BaseInput } from \"@base-ui/react/input\";\nimport { animate, useMotionValue, useReducedMotion } from \"motion/react\";\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { CLOSE, GlassPane, type GlassRefraction, OPEN } from \"./glass\";\nimport { cx, type GlassOptions } from \"./types\";\nimport \"./liquikit.css\";\n\nconst FOCUSED = 0.35;\n\nexport function useFocusGlass() {\n\tconst reduceMotion = useReducedMotion() ?? false;\n\tconst press = useMotionValue(0);\n\tconst lift = (to: number) => {\n\t\tif (reduceMotion) press.set(to);\n\t\telse animate(press, to, to > press.get() ? OPEN : CLOSE);\n\t};\n\treturn {\n\t\tpress,\n\t\tonFocus: () => lift(FOCUSED),\n\t\tonBlur: () => lift(0),\n\t};\n}\n\nexport type InputProps = Omit<\n\tBaseInput.Props,\n\t\"className\" | \"style\" | \"render\"\n> &\n\tGlassOptions & {\n\t\trefraction?: GlassRefraction;\n\t\tleading?: ReactNode;\n\t\tclassName?: string;\n\t\tstyle?: CSSProperties;\n\t};\n\nexport function Input({\n\ttheme,\n\tlens,\n\tliquid,\n\trefraction,\n\tleading,\n\tclassName,\n\tstyle,\n\tonFocus,\n\tonBlur,\n\t...inputProps\n}: InputProps) {\n\tconst focus = useFocusGlass();\n\treturn (\n\t\t<div className={cx(\"glass-ui-input\", className)} style={style}>\n\t\t\t<GlassPane\n\t\t\t\tradius={14}\n\t\t\t\tstyle={{ display: \"block\" }}\n\t\t\t\tpress={focus.press}\n\t\t\t\ttheme={theme}\n\t\t\t\tlens={lens}\n\t\t\t\tliquid={liquid}\n\t\t\t\trefraction={refraction}\n\t\t\t>\n\t\t\t\t<span className=\"glass-ui-input__row\">\n\t\t\t\t\t{leading ? (\n\t\t\t\t\t\t<span className=\"glass-ui-input__leading\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t{leading}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<BaseInput\n\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\tclassName=\"glass-ui-input__control\"\n\t\t\t\t\t\tonFocus={(event) => {\n\t\t\t\t\t\t\tonFocus?.(event);\n\t\t\t\t\t\t\tfocus.onFocus();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonBlur={(event) => {\n\t\t\t\t\t\t\tonBlur?.(event);\n\t\t\t\t\t\t\tfocus.onBlur();\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</span>\n\t\t\t</GlassPane>\n\t\t</div>\n\t);\n}\n\ntype Classed<P> = Omit<P, \"className\"> & { className?: string };\n\nfunction Root({ className, ...props }: Classed<BaseField.Root.Props>) {\n\treturn (\n\t\t<BaseField.Root {...props} className={cx(\"glass-ui-field\", className)} />\n\t);\n}\n\nfunction Label({ className, ...props }: Classed<BaseField.Label.Props>) {\n\treturn (\n\t\t<BaseField.Label\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-field__label\", className)}\n\t\t/>\n\t);\n}\n\nfunction Description({\n\tclassName,\n\t...props\n}: Classed<BaseField.Description.Props>) {\n\treturn (\n\t\t<BaseField.Description\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-field__description\", className)}\n\t\t/>\n\t);\n}\n\nexport function FieldError({\n\tclassName,\n\t...props\n}: Classed<BaseField.Error.Props>) {\n\treturn (\n\t\t<BaseField.Error\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-field__error\", className)}\n\t\t/>\n\t);\n}\n\nfunction Item({ className, ...props }: Classed<BaseField.Item.Props>) {\n\treturn (\n\t\t<BaseField.Item\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-field__item\", className)}\n\t\t/>\n\t);\n}\n\nexport const Field = {\n\tRoot,\n\tLabel,\n\tDescription,\n\tError: FieldError,\n\tItem,\n\tValidity: BaseField.Validity,\n};\n\nexport function FieldsetRoot({\n\tclassName,\n\t...props\n}: Classed<BaseFieldset.Root.Props>) {\n\treturn (\n\t\t<BaseFieldset.Root\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-fieldset\", className)}\n\t\t/>\n\t);\n}\n\nfunction Legend({ className, ...props }: Classed<BaseFieldset.Legend.Props>) {\n\treturn (\n\t\t<BaseFieldset.Legend\n\t\t\t{...props}\n\t\t\tclassName={cx(\"glass-ui-fieldset__legend\", className)}\n\t\t/>\n\t);\n}\n\nexport const Fieldset = { Root: FieldsetRoot, Legend };\n\nexport type FormProps = Classed<BaseForm.Props>;\n\nexport function Form({ className, ...props }: FormProps) {\n\treturn <BaseForm {...props} className={cx(\"glass-ui-form\", className)} />;\n}\n\nexport const FieldRoot = Field.Root;\nexport const FieldLabel = Field.Label;\nexport const FieldDescription = Field.Description;\nexport const FieldItem = Field.Item;\nexport const FieldValidity = Field.Validity;\nexport const FieldsetLegend = Fieldset.Legend;\n",
      "type": "registry:ui",
      "target": "@components/liquikit/field.tsx"
    }
  ],
  "type": "registry:ui"
}