{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "validation", "type": "registry:item", "title": "aesthetic Validation", "description": "Aesthetic Validation primitive, v0.25.0. Installs ae-err, ae-field-note, ae-icon, ae-input, ae-label without the full stylesheet.", "registryDependencies": [ "https://aesthetic.mistystep.io/r/aesthetic-base.json" ], "meta": { "version": "0.25.0", "tier": "primitive", "route": "validation", "classes": ["ae-err", "ae-field-note", "ae-icon", "ae-input", "ae-label"], "attributes": [], "tokens": [ "--ae-surface", "--ae-wash", "--ae-ink", "--ae-ink-faint", "--ae-accent", "--ae-surface-dark", "--ae-wash-dark", "--ae-ink-dark", "--ae-ink-faint-dark", "--ae-accent-dark", "--ae-font", "--ae-font-mono", "--ae-w-regular", "--ae-ease", "--ae-quick", "--ae-ink-muted", "--ae-line", "--ae-err", "--ae-ink-muted-dark", "--ae-line-dark", "--ae-err-dark", "--ae-w-medium", "--ae-radius", "--ae-space-0" ], "recipes": [] }, "files": [ { "path": "registry/validation/aesthetic.validation.css", "type": "registry:file", "target": "~/aesthetic.validation.css", "content": "/* aesthetic validation v0.25.0 — generated by scripts/build-registry.mjs. */\n@import './aesthetic.base.css';\n\n:root {\n --ae-ink-muted: #737373;\n --ae-line: #e9e9e9;\n --ae-err: #a84138;\n --ae-ink-muted-dark: #8f8f8f;\n --ae-line-dark: #262626;\n --ae-err-dark: #e58379;\n --ae-w-medium: 550;\n --ae-radius: 0;\n --ae-space-0: 0.1em;\n}\n\n@media (prefers-color-scheme: dark) {\n :root:not(.light):not([data-ae-mode='light']) {\n --ae-ink-muted: var(--ae-ink-muted-dark);\n --ae-line: var(--ae-line-dark);\n --ae-err: var(--ae-err-dark);\n }\n}\n\n.light,\n[data-ae-mode='light'] {\n color-scheme: light;\n}\n\n:root.dark,\n:root[data-ae-mode='dark'] {\n color-scheme: dark;\n --ae-ink-muted: var(--ae-ink-muted-dark);\n --ae-line: var(--ae-line-dark);\n --ae-err: var(--ae-err-dark);\n}\n\n.ae-icon {\nwidth: 1.2em;\n height: 1.2em;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n fill: none;\n vertical-align: -0.2em;\n}\n\n.ae-err {\ncolor: var(--ae-err);\n}\n\n.ae-label {\ndisplay: block;\n font-weight: var(--ae-w-medium);\n margin-bottom: var(--ae-space-0);\n}\n\n.ae-input {\ndisplay: block;\n width: 100%;\n box-sizing: border-box;\n background: transparent;\n color: var(--ae-ink);\n cursor: text;\n border: 0;\n border-bottom: 1px solid var(--ae-line);\n border-radius: var(--ae-radius);\n padding: 0.4em 0 calc(0.4em - 1px);\n transition: border-color var(--ae-quick) var(--ae-ease);\n}\n\n.ae-input::placeholder {\ncolor: var(--ae-ink-faint);\n}\n\n.ae-input:focus-visible {\noutline: none;\n border-bottom-width: 2px;\n border-bottom-color: var(--ae-ink);\n}\n\ntextarea.ae-input {\nresize: none;\n min-height: 5.5em;\n}\n\n.ae-input[aria-invalid='true'] {\nborder-bottom-color: var(--ae-err);\n}\n\n.ae-field-note {\ndisplay: flex;\n align-items: baseline;\n gap: 0.45em;\n font-size: 13px;\n color: var(--ae-ink-muted);\n margin-top: 0.4em;\n}\n\n[data-ae-anticipate] .ae-label {\ncolor: color-mix(\n in srgb,\n var(--ae-ink) calc(var(--ae-intent, 0) * 100%),\n var(--ae-ink-muted)\n );\n transition: color 120ms ease-out;\n}\n\n[data-ae-anticipate] .ae-input {\nborder-bottom-color: color-mix(\n in srgb,\n var(--ae-ink) calc(var(--ae-intent, 0) * 100%),\n var(--ae-line)\n );\n transition: border-color 120ms ease-out;\n}\n\n[data-ae-anticipate] .ae-label:has(+ .ae-input:focus-visible) {\ncolor: var(--ae-ink);\n}\n\n[data-ae-anticipate] .ae-input:focus-visible {\nborder-bottom-color: var(--ae-ink);\n}\n" } ] }