orynn 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/cx.ts","../src/controls/Field/Field.tsx","../src/controls/Dropdown/Dropdown.tsx","../src/controls/Input/Input.tsx","../src/internal/dev.ts","../src/core/registry/registry.ts","../src/layout/resolve-columns.ts","../src/core/config/normalize.ts","../src/core/validation/messages.ts","../src/core/validation/rules.ts","../src/core/validation/resolver.ts","../src/core/state/reducer.ts","../src/core/state/use-latest-ref.ts","../src/core/state/use-controllable-state.ts","../src/core/state/use-fieldset-state.ts","../src/layout/FieldGrid.tsx","../src/fieldset/FieldRenderer.tsx","../src/fieldset/register-builtins.tsx","../src/fieldset/Fieldset.tsx","../src/types/validation.ts"],"names":["Dropdown","jsx","jsxs","forwardRef","Input","useCallback","registry","useRef","defaultRegistry"],"mappings":"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","file":"index.js","sourcesContent":["/** Join truthy class names with a space. */\nexport function cx(...names: Array<string | false | null | undefined>): string {\n return names.filter(Boolean).join(\" \");\n}\n","import { useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport type { ErrorProp, FieldProps, FieldRenderContext } from \"../../types/props\";\n\nfunction toMessages(error: ErrorProp): string[] {\n if (error == null) return [];\n return (Array.isArray(error) ? error : [error]).filter((m): m is string => Boolean(m));\n}\n\nfunction joinIds(...ids: Array<string | undefined>): string | undefined {\n const list = ids.filter((id): id is string => Boolean(id));\n return list.length > 0 ? list.join(\" \") : undefined;\n}\n\n/**\n * Layout + accessibility wrapper for a single control. Renders the label,\n * optional description, and an error region, and wires the ARIA relationships\n * (`htmlFor`, `aria-describedby`, `aria-invalid`, `aria-required`).\n *\n * Pass a render function as `children` to receive the resolved ids:\n *\n * ```tsx\n * <Field label=\"Name\" error={error}>\n * {({ id, describedById, invalid }) => (\n * <input id={id} aria-describedby={describedById} aria-invalid={invalid} />\n * )}\n * </Field>\n * ```\n */\nexport function Field(props: FieldProps) {\n const { label, description, error, required, disabled, className, children } = props;\n\n const reactId = useId();\n const id = props.id ?? reactId;\n\n const messages = toMessages(error);\n const invalid = messages.length > 0;\n\n const descriptionId = description != null ? `${id}-description` : undefined;\n const errorId = invalid ? `${id}-error` : undefined;\n const describedById = joinIds(descriptionId, errorId);\n\n const ctx: FieldRenderContext = { id, describedById, invalid, required, disabled };\n\n return (\n <div\n className={cx(\"orynn-field\", className)}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n data-required={required || undefined}\n >\n {label != null && (\n <label className=\"orynn-field__label\" htmlFor={id}>\n {label}\n </label>\n )}\n\n {description != null && (\n <p className=\"orynn-field__description\" id={descriptionId}>\n {description}\n </p>\n )}\n\n <div className=\"orynn-field__control\">\n {typeof children === \"function\" ? children(ctx) : children}\n </div>\n\n {invalid && (\n <p className=\"orynn-field__error\" id={errorId} role=\"alert\">\n {messages.length === 1 ? messages[0] : messages.map((m) => <span key={m}>{m}</span>)}\n </p>\n )}\n </div>\n );\n}\n","import { type ChangeEvent, forwardRef, useCallback } from \"react\";\nimport type { DropdownProps } from \"../../types/props\";\nimport { Field } from \"../Field/Field\";\n\n/**\n * A labelled single-select built on the native `<select>` element (accessible\n * and keyboard-navigable out of the box). Works with or without `<Fieldset>`.\n */\nexport const Dropdown = /* @__PURE__ */ forwardRef<HTMLSelectElement, DropdownProps>(\n function Dropdown(props, ref) {\n const {\n label,\n description,\n error,\n className,\n options,\n value,\n onChange,\n placeholder,\n id,\n required,\n disabled,\n onBlur,\n onFocus,\n ...rest\n } = props;\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLSelectElement>) => onChange?.(event.target.value, event),\n [onChange],\n );\n\n const controlled = value !== undefined;\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {({ id: fieldId, describedById, invalid }) => (\n <select\n {...rest}\n ref={ref}\n id={fieldId}\n className=\"orynn-dropdown\"\n required={required}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n {...(controlled ? { value } : {})}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {placeholder != null && (\n <option value=\"\" disabled={required}>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n )}\n </Field>\n );\n },\n);\n","import { type ChangeEvent, forwardRef, useCallback } from \"react\";\nimport type { InputProps } from \"../../types/props\";\nimport { Field } from \"../Field/Field\";\n\n/**\n * A labelled text input. Controlled when `value` is passed, uncontrolled\n * otherwise (`defaultValue` flows through to the native element). Works with or\n * without `<Fieldset>`.\n */\nexport const Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputProps>(\n function Input(props, ref) {\n const {\n label,\n description,\n error,\n className,\n value,\n onChange,\n type = \"text\",\n id,\n required,\n disabled,\n readOnly,\n onBlur,\n onFocus,\n ...rest\n } = props;\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => onChange?.(event.target.value, event),\n [onChange],\n );\n\n const controlled = value !== undefined;\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {({ id: fieldId, describedById, invalid }) => (\n <input\n {...rest}\n ref={ref}\n id={fieldId}\n className=\"orynn-input\"\n type={type}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n {...(controlled ? { value } : {})}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n )}\n </Field>\n );\n },\n);\n","/**\n * Development-only helpers. `__DEV__` is statically replaceable by bundlers, so\n * `invariant` / `warnOnce` bodies tree-shake out of production builds.\n */\nexport const __DEV__: boolean =\n typeof process !== \"undefined\" && process.env?.NODE_ENV !== \"production\";\n\n/** Throws in development when `condition` is falsy. No-op in production. */\nexport function invariant(condition: unknown, message: string): asserts condition {\n if (condition) return;\n if (__DEV__) {\n throw new Error(`[orynn] ${message}`);\n }\n}\n\nconst warned = new Set<string>();\n\n/** Logs a warning once per unique message. Silent in production. */\nexport function warnOnce(message: string): void {\n if (!__DEV__ || warned.has(message)) return;\n warned.add(message);\n console.warn(`[orynn] ${message}`);\n}\n\n/** Test-only: clear the warn-once cache between cases. */\nexport function resetWarnings(): void {\n warned.clear();\n}\n","import { __DEV__, warnOnce } from \"../../internal/dev\";\nimport type { FieldRegistration, FieldRegistry } from \"../../types/control\";\n\nclass Registry implements FieldRegistry {\n #entries = new Map<string, FieldRegistration>();\n\n register(type: string, registration: FieldRegistration): void {\n if (__DEV__ && this.#entries.has(type)) {\n warnOnce(`Field type \"${type}\" is being re-registered; the previous definition is replaced.`);\n }\n this.#entries.set(type, registration);\n }\n\n get(type: string): FieldRegistration | undefined {\n return this.#entries.get(type);\n }\n\n has(type: string): boolean {\n return this.#entries.has(type);\n }\n\n types(): string[] {\n return [...this.#entries.keys()];\n }\n}\n\n/**\n * Create an isolated field registry. Use this to give a `<Fieldset>` its own set\n * of field types without touching the module-global {@link defaultRegistry}\n * (recommended on the server, where mutating a shared registry per request would\n * leak between requests).\n *\n * @experimental The registry API may change before 1.0.\n */\nexport function createRegistry(): FieldRegistry {\n return new Registry();\n}\n\n/**\n * The module-global registry used by `<Fieldset>` when no `registry` prop is\n * passed. Seeded with the built-in `input` and `dropdown` fields.\n *\n * @experimental\n */\nexport const defaultRegistry: FieldRegistry = /* @__PURE__ */ createRegistry();\n\n/**\n * Register a field type on the {@link defaultRegistry}. Call this once at\n * application start-up, not per render or per request.\n *\n * @experimental\n */\nexport function registerField(type: string, registration: FieldRegistration): void {\n defaultRegistry.register(type, registration);\n}\n","import type { ColumnSpec } from \"../types/config\";\n\n/** V1 default: 3 columns on desktop, 2 on tablet, 1 on mobile. */\nexport const DEFAULT_COLUMNS: ColumnSpec = { desktop: 3, tablet: 2, mobile: 1 };\n\nconst clampCount = (n: unknown, fallback: number): number =>\n typeof n === \"number\" && Number.isFinite(n) && n >= 1 ? Math.floor(n) : fallback;\n\n/** Merge a partial column spec onto the defaults. */\nexport function resolveColumns(partial?: Partial<ColumnSpec>): ColumnSpec {\n return {\n desktop: clampCount(partial?.desktop, DEFAULT_COLUMNS.desktop),\n tablet: clampCount(partial?.tablet, DEFAULT_COLUMNS.tablet),\n mobile: clampCount(partial?.mobile, DEFAULT_COLUMNS.mobile),\n };\n}\n\n/** Clamp a field's column span so it never exceeds the row's column count. */\nexport function clampSpan(span: unknown, columnCount: number): number {\n const n = clampCount(span, 1);\n return Math.min(n, Math.max(columnCount, 1));\n}\n","import { invariant } from \"../../internal/dev\";\nimport { resolveColumns } from \"../../layout/resolve-columns\";\nimport type { ColumnSpec, FieldConfig, FieldsetConfig } from \"../../types/config\";\nimport type { FieldRegistry } from \"../../types/control\";\n\n/** A validated `FieldsetConfig` with every default resolved. */\nexport interface NormalizedFieldsetConfig {\n fields: FieldConfig[];\n columns: ColumnSpec;\n /** CSS length for the grid gap, or `undefined` to use the token default. */\n gap: string | undefined;\n legend: string | undefined;\n id: string | undefined;\n}\n\nfunction normalizeGap(gap: FieldsetConfig[\"gap\"]): string | undefined {\n if (gap == null) return undefined;\n return typeof gap === \"number\" ? `${gap}px` : gap;\n}\n\n/**\n * Validate a `FieldsetConfig` and resolve its defaults. Structural problems\n * throw in development with an actionable message; in production the checks are\n * stripped and normalization is defensive.\n *\n * Pass `registry` (as `<Fieldset>` does) to also validate each field's `type`\n * and run type-specific config checks.\n */\nexport function normalizeConfig(\n config: FieldsetConfig,\n registry?: FieldRegistry,\n): NormalizedFieldsetConfig {\n invariant(\n config != null && typeof config === \"object\" && Array.isArray(config.fields),\n \"`config` must be an object with a `fields` array.\",\n );\n\n const seen = new Set<string>();\n\n for (const field of config.fields) {\n invariant(\n field != null && typeof field === \"object\",\n \"Every entry in `config.fields` must be an object.\",\n );\n invariant(\n typeof field.name === \"string\" && field.name.length > 0,\n \"Every field needs a non-empty string `name`.\",\n );\n invariant(!seen.has(field.name), `Duplicate field name \"${field.name}\" in config.fields.`);\n seen.add(field.name);\n invariant(\n typeof field.type === \"string\" && field.type.length > 0,\n `Field \"${field.name}\" is missing a \"type\".`,\n );\n\n if (registry) {\n invariant(\n registry.has(field.type),\n `Unknown field type \"${field.type}\" on field \"${field.name}\". ` +\n `Registered types: ${registry.types().join(\", \") || \"(none)\"}.`,\n );\n const typeError = registry.get(field.type)?.validateConfig?.(field);\n invariant(typeError == null, `Field \"${field.name}\" (${field.type}): ${typeError}`);\n }\n }\n\n return {\n fields: config.fields,\n columns: resolveColumns(config.columns),\n gap: normalizeGap(config.gap),\n legend: config.legend,\n id: config.id,\n };\n}\n","/** Formats the default message for a built-in rule token. */\ntype MessageFormatter = (ctx: { param: unknown; label: string }) => string;\n\nconst plural = (n: unknown, word: string) => `${n} ${word}${n === 1 ? \"\" : \"s\"}`;\n\n/** Default message templates for the built-in rules. */\nexport const defaultMessages: Record<string, MessageFormatter> = {\n required: ({ label }) => `${label} is required`,\n minLength: ({ param, label }) => `${label} must be at least ${plural(param, \"character\")}`,\n maxLength: ({ param, label }) => `${label} must be at most ${plural(param, \"character\")}`,\n};\n\nconst FALLBACK_LABEL = \"This field\";\n\n/**\n * Resolve the message for a failed rule.\n *\n * Precedence: a per-field override (`validation.messages[token]`) wins; otherwise\n * a built-in template is used; otherwise the token itself is the message (custom\n * rules return a ready-to-show string).\n */\nexport function resolveMessage(\n token: string,\n param: unknown,\n label: string | undefined,\n overrides: Partial<Record<string, string>> | undefined,\n): string {\n const override = overrides?.[token];\n if (override != null) return override;\n\n const formatter = defaultMessages[token];\n if (formatter) return formatter({ param, label: label ?? FALLBACK_LABEL });\n\n return token;\n}\n","import type { RuleFn } from \"../../types/validation\";\n\nconst isEmpty = (value: unknown): boolean =>\n value == null || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst asLength = (value: unknown): number =>\n typeof value === \"string\" || Array.isArray(value) ? value.length : String(value ?? \"\").length;\n\n/**\n * Built-in rules. Each returns a token (rule name) on failure or `null` on\n * success; the resolver turns the token into a user-facing message.\n *\n * `minLength` deliberately ignores empty values so `required` owns that error.\n */\nexport const builtInRules: { required: RuleFn; minLength: RuleFn; maxLength: RuleFn } = {\n required: (value, param) => {\n if (param === false) return null;\n return isEmpty(value) ? \"required\" : null;\n },\n minLength: (value, param) => {\n if (typeof param !== \"number\" || isEmpty(value)) return null;\n return asLength(value) < param ? \"minLength\" : null;\n },\n maxLength: (value, param) => {\n if (typeof param !== \"number\" || isEmpty(value)) return null;\n return asLength(value) > param ? \"maxLength\" : null;\n },\n};\n\nconst registry = new Map<string, RuleFn>(Object.entries(builtInRules));\n\n/**\n * Register a validation rule for the built-in resolver. A field opts in by\n * adding a key of the same name to its `validation` config.\n *\n * @experimental The rule API may change before 1.0.\n */\nexport function registerRule(name: string, fn: RuleFn): void {\n registry.set(name, fn);\n}\n\nexport function getRule(name: string): RuleFn | undefined {\n return registry.get(name);\n}\n\nexport function ruleNames(): string[] {\n return [...registry.keys()];\n}\n","import { __DEV__, warnOnce } from \"../../internal/dev\";\nimport type { FieldsetConfig } from \"../../types/config\";\nimport type {\n FieldError,\n ValidationContext,\n ValidationResolver,\n ValidationResult,\n} from \"../../types/validation\";\nimport { resolveMessage } from \"./messages\";\nimport { getRule } from \"./rules\";\n\n/** A synchronous resolver — the built-in resolver's precise return type. */\nexport type SyncResolver = (\n values: Record<string, unknown>,\n config: FieldsetConfig,\n context: ValidationContext,\n) => ValidationResult;\n\n/**\n * The default, rule-based {@link ValidationResolver}. For every field with a\n * `validation` block, each key (other than `messages`) is looked up in the rule\n * registry and run against the field's current value. All fields are validated\n * on every call; callers decide which errors to surface.\n *\n * Synchronous today. Async, schema-based, and cross-field resolvers plug in at\n * the same seam without an API change.\n */\nexport function createRuleResolver(): SyncResolver {\n return (values, config): ValidationResult => {\n const result: ValidationResult = {};\n\n for (const field of config.fields) {\n const validation = field.validation;\n if (!validation) continue;\n\n const value = values[field.name];\n const errors: FieldError[] = [];\n\n for (const key of Object.keys(validation)) {\n if (key === \"messages\") continue;\n\n const param = (validation as Record<string, unknown>)[key];\n if (param === undefined || param === false) continue;\n\n const rule = getRule(key);\n if (!rule) {\n if (__DEV__) {\n warnOnce(`No validator registered for rule \"${key}\" (field \"${field.name}\").`);\n }\n continue;\n }\n\n const token = rule(value, param, values);\n if (token == null) continue;\n\n errors.push({\n rule: key,\n message: resolveMessage(token, param, field.label, validation.messages),\n });\n }\n\n if (errors.length > 0) result[field.name] = errors;\n }\n\n return result;\n };\n}\n\n/** Shared default instance. */\nexport const defaultResolver: ValidationResolver = /* @__PURE__ */ createRuleResolver();\n","import type { FieldStatus } from \"../../types/state\";\nimport type { FieldError, ValidationResult } from \"../../types/validation\";\n\n/** Internal state: everything the fieldset tracks except `values`. */\nexport interface MetaState {\n touched: Record<string, boolean>;\n errors: ValidationResult;\n validating: boolean;\n /** True once any validation run has completed — distinguishes \"idle\" from \"valid\". */\n everValidated: boolean;\n}\n\nexport const initialMeta: MetaState = {\n touched: {},\n errors: {},\n validating: false,\n everValidated: false,\n};\n\nexport type MetaAction =\n | { type: \"touch\"; name: string }\n | { type: \"touchAll\"; names: string[] }\n | { type: \"validation:start\" }\n | { type: \"validation:field\"; name: string; errors: FieldError[] }\n | { type: \"validation:all\"; result: ValidationResult }\n | { type: \"reset\" };\n\nexport function metaReducer(state: MetaState, action: MetaAction): MetaState {\n switch (action.type) {\n case \"touch\": {\n if (state.touched[action.name]) return state;\n return { ...state, touched: { ...state.touched, [action.name]: true } };\n }\n case \"touchAll\": {\n const touched = { ...state.touched };\n for (const name of action.names) touched[name] = true;\n return { ...state, touched };\n }\n case \"validation:start\":\n return { ...state, validating: true };\n case \"validation:field\": {\n const errors = { ...state.errors };\n if (action.errors.length > 0) errors[action.name] = action.errors;\n else delete errors[action.name];\n return { ...state, errors, validating: false, everValidated: true };\n }\n case \"validation:all\":\n return { ...state, errors: action.result, validating: false, everValidated: true };\n case \"reset\":\n return { ...initialMeta };\n default:\n return state;\n }\n}\n\n/** Derive the form-level status roll-up. */\nexport function deriveStatus(meta: MetaState): FieldStatus {\n if (meta.validating) return \"validating\";\n if (!meta.everValidated) return \"idle\";\n return Object.keys(meta.errors).length > 0 ? \"invalid\" : \"valid\";\n}\n\n/** Shallow per-field dirty map: current value differs from initial. */\nexport function computeDirty(\n values: Record<string, unknown>,\n initial: Record<string, unknown>,\n): Record<string, boolean> {\n const dirty: Record<string, boolean> = {};\n for (const key of Object.keys(values)) {\n if (!Object.is(values[key], initial[key])) dirty[key] = true;\n }\n return dirty;\n}\n","import { useRef } from \"react\";\n\n/** A ref whose `.current` always holds the latest value passed on render. */\nexport function useLatestRef<T>(value: T) {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n}\n","import { useCallback, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * The single place the controlled / uncontrolled fork lives. When `value` is\n * provided the component is controlled and internal state is bypassed; otherwise\n * `defaultValue` seeds local state. `onChange` fires on every committed change in\n * both modes.\n */\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value: T | undefined;\n defaultValue: T;\n onChange: ((value: T) => void) | undefined;\n}): readonly [T, (next: T | ((prev: T) => T)) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n\n const current = isControlled ? (value as T) : uncontrolled;\n const currentRef = useLatestRef(current);\n const onChangeRef = useLatestRef(onChange);\n const isControlledRef = useLatestRef(isControlled);\n\n const setValue = useCallback((next: T | ((prev: T) => T)) => {\n const resolved =\n typeof next === \"function\" ? (next as (prev: T) => T)(currentRef.current) : next;\n if (Object.is(resolved, currentRef.current)) return;\n if (!isControlledRef.current) setUncontrolled(resolved);\n onChangeRef.current?.(resolved);\n }, []);\n\n return [current, setValue] as const;\n}\n","import { useCallback, useMemo, useReducer, useRef } from \"react\";\nimport type { FormEvent } from \"react\";\nimport type { FieldsetConfig } from \"../../types/config\";\nimport type { FieldRegistry } from \"../../types/control\";\nimport type { FieldStatus, FieldsetState } from \"../../types/state\";\nimport type {\n FieldError,\n ValidationResolver,\n ValidationResult,\n ValidationTrigger,\n} from \"../../types/validation\";\nimport { type NormalizedFieldsetConfig, normalizeConfig } from \"../config/normalize\";\nimport { defaultResolver } from \"../validation/resolver\";\nimport { computeDirty, deriveStatus, initialMeta, metaReducer } from \"./reducer\";\nimport { useControllableState } from \"./use-controllable-state\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\ntype Values = Record<string, unknown>;\n\n/** Shared empty errors array so unchanged field slices keep a stable identity. */\nconst NO_ERRORS: readonly FieldError[] = Object.freeze([]);\n\nexport interface UseFieldsetStateOptions<TValues extends Values = Values> {\n /** Controlled values. Omit and pass `defaultValue` for uncontrolled. */\n value?: TValues;\n defaultValue?: Partial<TValues>;\n onChange?: (values: TValues) => void;\n /** Called after a full validation pass (`validate()` / submit), not per blur. */\n onValidationChange?: (result: ValidationResult) => void;\n resolver?: ValidationResolver;\n registry?: FieldRegistry;\n /** `\"blur\"` (default) also always validates on submit. */\n validateOn?: ValidationTrigger;\n}\n\n/** Everything a renderer needs for one field. Handlers are referentially stable. */\nexport interface FieldSlice {\n name: string;\n value: unknown;\n errors: FieldError[];\n touched: boolean;\n dirty: boolean;\n setValue: (value: unknown) => void;\n markTouched: () => void;\n}\n\nexport interface UseFieldsetStateReturn<TValues extends Values = Values> {\n config: NormalizedFieldsetConfig;\n state: FieldsetState;\n values: TValues;\n errors: ValidationResult;\n touched: Record<string, boolean>;\n dirty: Record<string, boolean>;\n status: FieldStatus;\n isValid: boolean;\n setFieldValue: (name: string, value: unknown) => void;\n setValues: (values: TValues) => void;\n reset: (next?: Partial<TValues>) => void;\n validate: () => Promise<ValidationResult>;\n handleSubmit: (\n onValid: (values: TValues) => void,\n onInvalid?: (result: ValidationResult) => void,\n ) => (event?: FormEvent) => void;\n getFieldProps: (name: string) => FieldSlice;\n}\n\nfunction computeInitialValues(\n config: NormalizedFieldsetConfig,\n registry: FieldRegistry | undefined,\n provided: Values | undefined,\n): Values {\n const out: Values = {};\n for (const field of config.fields) {\n if (provided && Object.prototype.hasOwnProperty.call(provided, field.name)) {\n out[field.name] = provided[field.name];\n } else if (field.defaultValue !== undefined) {\n out[field.name] = field.defaultValue;\n } else {\n out[field.name] = registry?.get(field.type)?.defaultValue ?? \"\";\n }\n }\n return out;\n}\n\ninterface RunScope {\n field?: string;\n trigger: ValidationTrigger;\n values?: Values;\n}\n\n/**\n * The form engine behind `<Fieldset>`, usable directly when you want to own the\n * markup. Manages values (controlled or uncontrolled), touched/dirty tracking,\n * and validation through a pluggable resolver.\n */\nexport function useFieldsetState<TValues extends Values = Values>(\n config: FieldsetConfig,\n options: UseFieldsetStateOptions<TValues> = {},\n): UseFieldsetStateReturn<TValues> {\n const {\n value,\n defaultValue,\n onChange,\n onValidationChange,\n resolver = defaultResolver,\n registry,\n validateOn = \"blur\",\n } = options;\n\n const normalized = useMemo(() => normalizeConfig(config, registry), [config, registry]);\n\n const initialRef = useRef<Values | null>(null);\n if (initialRef.current === null) {\n initialRef.current = computeInitialValues(\n normalized,\n registry,\n (value ?? defaultValue) as Values | undefined,\n );\n }\n\n const [rawValues, setRawValues] = useControllableState<Values>({\n value: value as Values | undefined,\n defaultValue: initialRef.current,\n onChange: onChange as ((v: Values) => void) | undefined,\n });\n\n const values = useMemo(() => ({ ...initialRef.current, ...rawValues }) as TValues, [rawValues]);\n\n const [meta, dispatch] = useReducer(metaReducer, initialMeta);\n\n const valuesRef = useLatestRef<Values>(values);\n const resolverRef = useLatestRef(resolver);\n const configRef = useLatestRef(config);\n const normalizedRef = useLatestRef(normalized);\n const registryRef = useLatestRef(registry);\n const validateOnRef = useLatestRef(validateOn);\n const onValidationChangeRef = useLatestRef(onValidationChange);\n const runIdRef = useRef(0);\n\n const runValidation = useCallback(async (scope: RunScope): Promise<ValidationResult> => {\n const runId = ++runIdRef.current;\n const input = scope.values ?? valuesRef.current;\n dispatch({ type: \"validation:start\" });\n\n const result = await resolverRef.current(input, configRef.current, {\n trigger: scope.trigger,\n ...(scope.field ? { changedField: scope.field } : {}),\n });\n\n if (runId !== runIdRef.current) return result; // superseded\n\n if (scope.field) {\n dispatch({ type: \"validation:field\", name: scope.field, errors: result[scope.field] ?? [] });\n } else {\n dispatch({ type: \"validation:all\", result });\n onValidationChangeRef.current?.(result);\n }\n return result;\n // refs only — safe to keep stable\n }, []);\n\n const setFieldValue = useCallback(\n (name: string, next: unknown) => {\n setRawValues((prev) => ({ ...prev, [name]: next }));\n if (validateOnRef.current === \"change\") {\n void runValidation({\n field: name,\n trigger: \"change\",\n values: { ...valuesRef.current, [name]: next },\n });\n }\n },\n [setRawValues, runValidation],\n );\n\n const setValues = useCallback((next: TValues) => setRawValues(next as Values), [setRawValues]);\n\n const markTouched = useCallback(\n (name: string) => {\n dispatch({ type: \"touch\", name });\n if (validateOnRef.current === \"blur\") {\n void runValidation({ field: name, trigger: \"blur\" });\n }\n },\n [runValidation],\n );\n\n const validate = useCallback(() => runValidation({ trigger: \"submit\" }), [runValidation]);\n\n const handleSubmit = useCallback(\n (onValid: (values: TValues) => void, onInvalid?: (result: ValidationResult) => void) =>\n async (event?: FormEvent) => {\n event?.preventDefault?.();\n dispatch({\n type: \"touchAll\",\n names: normalizedRef.current.fields.map((f) => f.name),\n });\n const result = await runValidation({ trigger: \"submit\" });\n if (Object.keys(result).length === 0) onValid(valuesRef.current as TValues);\n else onInvalid?.(result);\n },\n [runValidation],\n );\n\n const reset = useCallback(\n (next?: Partial<TValues>) => {\n const fresh = computeInitialValues(\n normalizedRef.current,\n registryRef.current,\n next as Values | undefined,\n );\n initialRef.current = fresh;\n setRawValues(fresh);\n dispatch({ type: \"reset\" });\n runIdRef.current++;\n },\n [setRawValues],\n );\n\n // Stable per-field handler identities so memoized rows don't re-render.\n const handlerCacheRef = useRef(\n new Map<string, { setValue: (v: unknown) => void; markTouched: () => void }>(),\n );\n const getHandlers = useCallback(\n (name: string) => {\n const cache = handlerCacheRef.current;\n let entry = cache.get(name);\n if (!entry) {\n entry = {\n setValue: (v: unknown) => setFieldValue(name, v),\n markTouched: () => markTouched(name),\n };\n cache.set(name, entry);\n }\n return entry;\n },\n [setFieldValue, markTouched],\n );\n\n const dirty = useMemo(() => computeDirty(values, initialRef.current ?? {}), [values]);\n const status = deriveStatus(meta);\n const isValid = Object.keys(meta.errors).length === 0;\n\n const getFieldProps = useCallback(\n (name: string): FieldSlice => {\n const handlers = getHandlers(name);\n return {\n name,\n value: (values as Values)[name],\n errors: meta.errors[name] ?? (NO_ERRORS as FieldError[]),\n touched: meta.touched[name] ?? false,\n dirty: dirty[name] ?? false,\n setValue: handlers.setValue,\n markTouched: handlers.markTouched,\n };\n },\n [values, meta.errors, meta.touched, dirty, getHandlers],\n );\n\n const state: FieldsetState = useMemo(\n () => ({\n values: values as Values,\n touched: meta.touched,\n dirty,\n errors: meta.errors,\n status,\n }),\n [values, meta.touched, dirty, meta.errors, status],\n );\n\n return {\n config: normalized,\n state,\n values,\n errors: meta.errors,\n touched: meta.touched,\n dirty,\n status,\n isValid,\n setFieldValue,\n setValues,\n reset,\n validate,\n handleSubmit,\n getFieldProps,\n };\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { cx } from \"../internal/cx\";\nimport type { ColumnSpec } from \"../types/config\";\nimport { clampSpan } from \"./resolve-columns\";\n\n/** CSS custom properties are set inline; the stylesheet consumes them. */\ntype CssVars = CSSProperties & Record<`--${string}`, string | number>;\n\nexport interface FieldGridProps {\n columns: ColumnSpec;\n /** CSS length for the gap; falls back to the `--orynn-grid-gap` token. */\n gap?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\n/**\n * Responsive grid. Column counts per breakpoint are passed as CSS variables and\n * applied by the stylesheet through container queries, so the grid responds to\n * its own width rather than the viewport.\n */\nexport function FieldGrid({ columns, gap, className, children }: FieldGridProps) {\n const style: CssVars = {\n \"--orynn-cols-desktop\": columns.desktop,\n \"--orynn-cols-tablet\": columns.tablet,\n \"--orynn-cols-mobile\": columns.mobile,\n ...(gap ? { \"--orynn-grid-gap\": gap } : {}),\n };\n\n return (\n <div className={cx(\"orynn-grid\", className)} style={style}>\n <div className=\"orynn-grid__track\">{children}</div>\n </div>\n );\n}\n\nexport interface FieldGridItemProps {\n /** Per-breakpoint column span; missing breakpoints default to 1. */\n span?: Partial<ColumnSpec> | undefined;\n columns: ColumnSpec;\n children: ReactNode;\n}\n\n/** One cell of a {@link FieldGrid}, optionally spanning multiple columns. */\nexport function FieldGridItem({ span, columns, children }: FieldGridItemProps) {\n if (!span) return <>{children}</>;\n\n const style: CssVars = {\n \"--orynn-span-desktop\": clampSpan(span.desktop, columns.desktop),\n \"--orynn-span-tablet\": clampSpan(span.tablet, columns.tablet),\n \"--orynn-span-mobile\": clampSpan(span.mobile, columns.mobile),\n };\n\n return (\n <div className=\"orynn-grid__item\" style={style}>\n {children}\n </div>\n );\n}\n","import { memo } from \"react\";\nimport { Field } from \"../controls/Field/Field\";\nimport type { FieldSlice } from \"../core/state/use-fieldset-state\";\nimport { invariant } from \"../internal/dev\";\nimport type { FieldConfig } from \"../types/config\";\nimport type { FieldRegistry } from \"../types/control\";\n\nconst noop = () => {};\n\nexport interface FieldRendererProps {\n field: FieldConfig;\n registry: FieldRegistry;\n slice: FieldSlice;\n disabled?: boolean;\n}\n\nfunction FieldRendererImpl({ field, registry, slice, disabled }: FieldRendererProps) {\n const registration = registry.get(field.type);\n invariant(\n registration,\n `No control registered for field type \"${field.type}\" (field \"${field.name}\").`,\n );\n if (!registration) return null;\n\n const Control = registration.component;\n const required = field.validation?.required === true;\n const isDisabled = disabled === true || field.disabled === true;\n\n const value = registration.parseValue ? registration.parseValue(slice.value) : slice.value;\n // The hook decides *when* a field is validated (per `validateOn`); if it has\n // produced errors for this field, show them.\n const messages = slice.errors.map((e) => e.message);\n\n const handleChange = (next: unknown) => {\n slice.setValue(registration.formatValue ? registration.formatValue(next) : next);\n };\n\n return (\n <Field\n label={field.label}\n description={field.description}\n error={messages}\n required={required}\n disabled={isDisabled}\n >\n {({ id, describedById, invalid }) => (\n <Control\n id={id}\n name={field.name}\n value={value}\n onChange={handleChange}\n onBlur={slice.markTouched}\n onFocus={noop}\n disabled={isDisabled}\n readOnly={field.readOnly === true}\n required={required}\n invalid={invalid}\n describedById={describedById}\n config={field}\n />\n )}\n </Field>\n );\n}\n\n/**\n * Resolves a field config to its registered control and wraps it in `<Field>`.\n * Memoized on the parts of the slice that affect output so that changing one\n * field in a large fieldset does not re-render the others.\n */\nexport const FieldRenderer = /* @__PURE__ */ memo(\n FieldRendererImpl,\n (prev, next) =>\n prev.field === next.field &&\n prev.registry === next.registry &&\n prev.disabled === next.disabled &&\n prev.slice.value === next.slice.value &&\n prev.slice.touched === next.slice.touched &&\n prev.slice.errors === next.slice.errors &&\n prev.slice.setValue === next.slice.setValue &&\n prev.slice.markTouched === next.slice.markTouched,\n);\n","import type { DropdownFieldConfig, InputFieldConfig } from \"../types/config\";\nimport type { ControlComponent, FieldRegistry } from \"../types/control\";\n\nconst toStringValue = (value: unknown): string =>\n typeof value === \"string\" ? value : value == null ? \"\" : String(value);\n\n/** Raw `<input>` bound to the {@link ControlProps} contract. `<Field>` wraps it. */\nconst InputControl: ControlComponent<string> = ({\n id,\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readOnly,\n required,\n invalid,\n describedById,\n config,\n}) => {\n const field = config as InputFieldConfig;\n return (\n <input\n id={id}\n name={name}\n className=\"orynn-input\"\n type={field.inputType ?? \"text\"}\n value={toStringValue(value)}\n placeholder={field.placeholder}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={(event) => onChange(event.target.value, event)}\n onBlur={onBlur}\n onFocus={onFocus}\n {...field.props}\n />\n );\n};\n\n/** Raw `<select>` bound to the {@link ControlProps} contract. */\nconst DropdownControl: ControlComponent<string> = ({\n id,\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n required,\n invalid,\n describedById,\n config,\n}) => {\n const field = config as DropdownFieldConfig;\n return (\n <select\n id={id}\n name={name}\n className=\"orynn-dropdown\"\n value={toStringValue(value)}\n required={required}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={(event) => onChange(event.target.value, event)}\n onBlur={onBlur}\n onFocus={onFocus}\n {...field.props}\n >\n {field.placeholder != null && (\n <option value=\"\" disabled={required}>\n {field.placeholder}\n </option>\n )}\n {field.options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n );\n};\n\n/**\n * Seed a registry with the V1 built-in field types. Idempotent: existing\n * registrations (e.g. a consumer override) are left untouched.\n */\nexport function registerBuiltins(registry: FieldRegistry): void {\n if (!registry.has(\"input\")) {\n registry.register(\"input\", { component: InputControl, defaultValue: \"\" });\n }\n if (!registry.has(\"dropdown\")) {\n registry.register(\"dropdown\", {\n component: DropdownControl,\n defaultValue: \"\",\n validateConfig: (config) =>\n Array.isArray((config as Partial<DropdownFieldConfig>).options)\n ? null\n : \"a dropdown field requires an `options` array\",\n });\n }\n}\n\nlet seeded = false;\n\n/**\n * Register the built-ins on the module-global registry exactly once, lazily.\n * Called from `useFieldsetState` / `<Fieldset>` rather than at module load so\n * that importing a standalone control never pulls the built-ins (and the\n * validation engine) into the bundle.\n */\nexport function ensureBuiltins(defaultRegistry: FieldRegistry): void {\n if (seeded) return;\n seeded = true;\n registerBuiltins(defaultRegistry);\n}\n","import { defaultRegistry } from \"../core/registry/registry\";\nimport { type UseFieldsetStateOptions, useFieldsetState } from \"../core/state/use-fieldset-state\";\nimport { cx } from \"../internal/cx\";\nimport { FieldGrid, FieldGridItem } from \"../layout/FieldGrid\";\nimport type { FieldsetProps } from \"../types/props\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { ensureBuiltins } from \"./register-builtins\";\n\n/**\n * Renders a form (or a form section) from a `FieldsetConfig`. Controlled when\n * `value` is passed, uncontrolled otherwise. Renders a native `<fieldset>` — so\n * `disabled` cascades to every control — and does not render its own `<form>`;\n * wrap it in one and use `useFieldsetState().handleSubmit` for submission.\n */\nexport function Fieldset<TValues extends Record<string, unknown> = Record<string, unknown>>(\n props: FieldsetProps<TValues>,\n) {\n const {\n config,\n value,\n defaultValue,\n onChange,\n onValidationChange,\n resolver,\n registry,\n validateOn,\n disabled,\n className,\n id,\n } = props;\n\n ensureBuiltins(defaultRegistry);\n const activeRegistry = registry ?? defaultRegistry;\n\n const options: UseFieldsetStateOptions<TValues> = {\n registry: activeRegistry,\n ...(value !== undefined ? { value } : {}),\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(onChange ? { onChange } : {}),\n ...(onValidationChange ? { onValidationChange } : {}),\n ...(resolver ? { resolver } : {}),\n ...(validateOn ? { validateOn } : {}),\n };\n\n const fs = useFieldsetState<TValues>(config, options);\n const { columns, gap, legend, fields, id: configId } = fs.config;\n\n return (\n <fieldset\n className={cx(\"orynn-fieldset\", className)}\n id={id ?? configId}\n disabled={disabled || undefined}\n >\n {legend != null && <legend className=\"orynn-fieldset__legend\">{legend}</legend>}\n <FieldGrid columns={columns} gap={gap}>\n {fields.map((field) => (\n <FieldGridItem key={field.name} span={field.layout} columns={columns}>\n <FieldRenderer\n field={field}\n registry={activeRegistry}\n slice={fs.getFieldProps(field.name)}\n disabled={disabled === true}\n />\n </FieldGridItem>\n ))}\n </FieldGrid>\n </fieldset>\n );\n}\n","import type { FieldsetConfig } from \"./config\";\n\n/**\n * Per-field validation config. V1 ships `required` / `minLength` / `maxLength`.\n * Future rule keys (regex, email, min, max, validate, ...) are added here without\n * a breaking change.\n */\nexport interface FieldValidation {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n /** Per-rule message overrides, e.g. `{ required: \"Name is required\" }`. */\n messages?: Partial<Record<string, string>>;\n}\n\n/** A single validation failure. Shape is frozen — new fields must stay optional. */\nexport interface FieldError {\n /** Rule that failed: `\"required\"`, `\"minLength\"`, `\"custom\"`, `\"async\"`, ... */\n rule: string;\n message: string;\n /** Reserved for cross-field / nested errors. Unused in V1. */\n path?: string;\n}\n\n/**\n * Validation output. Key = field name. The reserved key `\"$form\"` holds\n * form-level / cross-field errors.\n */\nexport type ValidationResult = Record<string, FieldError[]>;\n\n/** Reserved key in {@link ValidationResult} for form-level errors. */\nexport const FORM_ERROR_KEY = \"$form\" as const;\n\n/** What triggered a validation run. */\nexport type ValidationTrigger = \"change\" | \"blur\" | \"submit\";\n\nexport interface ValidationContext {\n /** Field whose change/blur triggered this run, if any. */\n changedField?: string;\n trigger: ValidationTrigger;\n}\n\n/**\n * The single seam through which all validation flows. V1's default resolver is\n * rule-based and synchronous; the `Promise` return type keeps async, schema, and\n * cross-field validation additive.\n */\nexport type ValidationResolver = (\n values: Record<string, unknown>,\n config: FieldsetConfig,\n context: ValidationContext,\n) => ValidationResult | Promise<ValidationResult>;\n\n/**\n * A single rule implementation. Returns an error message string on failure, or\n * `null` on success. `allValues` is passed so cross-field rules need no\n * signature change later.\n */\nexport type RuleFn = (\n value: unknown,\n param: unknown,\n allValues: Record<string, unknown>,\n) => string | null;\n"]}
1
+ {"version":3,"sources":["../src/internal/cx.ts","../src/internal/icons.tsx","../src/controls/Checkbox/Checkbox.tsx","../src/core/state/use-latest-ref.ts","../src/core/state/use-controllable-state.ts","../src/controls/Field/Field.tsx","../src/controls/Checkbox/CheckboxGroup.tsx","../src/internal/FieldBox.tsx","../src/internal/Popover.tsx","../src/controls/DatePicker/date-utils.ts","../src/controls/DatePicker/Calendar.tsx","../src/controls/DatePicker/DatePicker.tsx","../src/controls/Dropdown/Dropdown.tsx","../src/controls/Input/Input.tsx","../src/controls/NumberField/NumberField.tsx","../src/controls/Radio/Radio.tsx","../src/controls/Textarea/Textarea.tsx","../src/internal/dev.ts","../src/core/registry/registry.ts","../src/layout/resolve-columns.ts","../src/core/config/normalize.ts","../src/core/validation/messages.ts","../src/core/validation/rules.ts","../src/core/validation/resolver.ts","../src/core/state/reducer.ts","../src/core/state/use-fieldset-state.ts","../src/layout/FieldGrid.tsx","../src/fieldset/FieldRenderer.tsx","../src/fieldset/register-builtins.tsx","../src/fieldset/Fieldset.tsx","../src/theme/theme.ts","../src/theme/OrynnProvider.tsx","../src/types/validation.ts"],"names":["Checkbox","jsxs","jsx","useRef","useId","useCallback","forwardRef","FieldBox","useState","useEffect","len","DatePicker","Fragment","Dropdown","useMemo","Input","NumberField","base","createContext","sizePx","Radio","useContext","Textarea","pad","useLayoutEffect","registry","defaultRegistry"],"mappings":"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","file":"index.js","sourcesContent":["/** Join truthy class names with a space. */\nexport function cx(...names: Array<string | false | null | undefined>): string {\n return names.filter(Boolean).join(\" \");\n}\n","import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst base = (props: IconProps): IconProps => ({\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\" as const,\n strokeLinejoin: \"round\" as const,\n \"aria-hidden\": true,\n focusable: false,\n ...props,\n});\n\nexport const CheckIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n);\n\nexport const MinusIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M5 12h14\" />\n </svg>\n);\n\nexport const PlusIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n);\n\nexport const ChevronDownIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nexport const ChevronLeftIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n);\n\nexport const ChevronRightIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\n\nexport const XIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M18 6 6 18M6 6l12 12\" />\n </svg>\n);\n\nexport const SearchIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n);\n\nexport const SpinnerIcon = (p: IconProps) => (\n <svg {...base({ className: \"orynn-spin\", ...p })}>\n <path d=\"M21 12a9 9 0 1 1-6.2-8.6\" />\n </svg>\n);\n\nexport const EyeIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n);\n\nexport const EyeOffIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <path d=\"M10.7 5.1A9.9 9.9 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-3.4 4.2M6.6 6.6A17 17 0 0 0 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6\" />\n <path d=\"M9.9 9.9a3 3 0 0 0 4.2 4.2M2 2l20 20\" />\n </svg>\n);\n\nexport const CalendarIcon = (p: IconProps) => (\n <svg {...base(p)}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" />\n <path d=\"M16 2v4M8 2v4M3 10h18\" />\n </svg>\n);\n\nexport const CircleIcon = (p: IconProps) => (\n <svg {...base({ strokeWidth: 0, fill: \"currentColor\", ...p })}>\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n);\n","import {\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useRef,\n} from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { CheckIcon, MinusIcon } from \"../../internal/icons\";\nimport type { ControlSize } from \"../../types/common\";\n\nexport interface CheckboxGroupContextValue {\n name?: string;\n value: string[];\n toggle: (value: string, next: boolean) => void;\n disabled?: boolean;\n size?: ControlSize;\n isDisabledToUncheck: (value: string) => boolean;\n isDisabledToCheck: (value: string) => boolean;\n}\n\nexport const CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null);\n\ntype NativeCheckbox = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"size\" | \"value\"\n>;\n\nexport interface CheckboxProps extends NativeCheckbox {\n label?: ReactNode;\n description?: ReactNode;\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;\n /** Value used when inside a `<CheckboxGroup>`. */\n value?: string;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n invalid?: boolean;\n size?: ControlSize;\n /** `\"filled\"` (default) paints the box on check; `\"outline\"` keeps it hollow. */\n variant?: \"filled\" | \"outline\";\n /** Put the label before the box. */\n labelPlacement?: \"end\" | \"start\";\n /** Bordered selectable card. */\n card?: boolean;\n /** Custom checked / indeterminate glyphs. */\n icon?: ReactNode;\n indeterminateIcon?: ReactNode;\n className?: string;\n}\n\nconst sizePx: Record<ControlSize, string> = {\n sm: \"0.95rem\",\n md: \"1.125rem\",\n lg: \"1.35rem\",\n};\n\nexport const Checkbox = /* @__PURE__ */ forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(props, ref) {\n const group = useContext(CheckboxGroupContext);\n const {\n label,\n description,\n checked: checkedProp,\n defaultChecked,\n indeterminate = false,\n onChange,\n value,\n disabled: disabledProp,\n readOnly,\n required,\n invalid,\n size: sizeProp,\n variant = \"filled\",\n labelPlacement = \"end\",\n card,\n icon,\n indeterminateIcon,\n className,\n id: idProp,\n name: nameProp,\n ...rest\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const innerRef = useRef<HTMLInputElement | null>(null);\n\n const inGroup = group != null && value != null;\n const groupChecked = inGroup ? group.value.includes(value) : undefined;\n const isControlled = checkedProp !== undefined || groupChecked !== undefined;\n const checked = checkedProp ?? groupChecked ?? undefined;\n\n const size = sizeProp ?? group?.size ?? \"md\";\n const disabled =\n disabledProp ||\n group?.disabled ||\n (inGroup && checked === true && group.isDisabledToUncheck(value)) ||\n (inGroup && checked !== true && group.isDisabledToCheck(value)) ||\n false;\n\n useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (readOnly) {\n e.preventDefault();\n return;\n }\n const next = e.target.checked;\n onChange?.(next, e);\n if (inGroup) group.toggle(value, next);\n };\n\n return (\n <label\n className={cx(\n \"orynn-choice\",\n card && \"orynn-choice--card\",\n variant === \"outline\" && \"orynn-choice--outline\",\n labelPlacement === \"start\" && \"orynn-choice--start\",\n className,\n )}\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n style={{ \"--orynn-check-size\": sizePx[size] } as React.CSSProperties}\n >\n <input\n {...rest}\n ref={(n) => {\n innerRef.current = n;\n if (typeof ref === \"function\") ref(n);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = n;\n }}\n type=\"checkbox\"\n className=\"orynn-choice__native\"\n id={id}\n name={nameProp ?? group?.name}\n value={value}\n checked={isControlled ? Boolean(checked) : undefined}\n defaultChecked={isControlled ? undefined : defaultChecked}\n disabled={disabled}\n required={required}\n aria-invalid={invalid || undefined}\n onChange={handleChange}\n />\n <span className=\"orynn-choice__control orynn-choice__control--checkbox\" aria-hidden=\"true\">\n <span className=\"orynn-choice__mark orynn-choice__mark--check\">\n {icon ?? <CheckIcon />}\n </span>\n <span className=\"orynn-choice__mark orynn-choice__mark--dash\">\n {indeterminateIcon ?? <MinusIcon />}\n </span>\n </span>\n {(label != null || description != null) && (\n <span className=\"orynn-choice__text\">\n {label != null && <span className=\"orynn-choice__label\">{label}</span>}\n {description != null && <span className=\"orynn-choice__desc\">{description}</span>}\n </span>\n )}\n </label>\n );\n },\n);\n","import { useRef } from \"react\";\n\n/** A ref whose `.current` always holds the latest value passed on render. */\nexport function useLatestRef<T>(value: T) {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n}\n","import { useCallback, useState } from \"react\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\n/**\n * The single place the controlled / uncontrolled fork lives. When `value` is\n * provided the component is controlled and internal state is bypassed; otherwise\n * `defaultValue` seeds local state. `onChange` fires on every committed change in\n * both modes.\n */\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value: T | undefined;\n defaultValue: T;\n onChange: ((value: T) => void) | undefined;\n}): readonly [T, (next: T | ((prev: T) => T)) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n\n const current = isControlled ? (value as T) : uncontrolled;\n const currentRef = useLatestRef(current);\n const onChangeRef = useLatestRef(onChange);\n const isControlledRef = useLatestRef(isControlled);\n\n const setValue = useCallback((next: T | ((prev: T) => T)) => {\n const resolved =\n typeof next === \"function\" ? (next as (prev: T) => T)(currentRef.current) : next;\n if (Object.is(resolved, currentRef.current)) return;\n if (!isControlledRef.current) setUncontrolled(resolved);\n onChangeRef.current?.(resolved);\n }, []);\n\n return [current, setValue] as const;\n}\n","import { useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport type { ErrorProp, FieldProps, FieldRenderContext } from \"../../types/props\";\n\nfunction toMessages(error: ErrorProp): string[] {\n if (error == null) return [];\n return (Array.isArray(error) ? error : [error]).filter((m): m is string => Boolean(m));\n}\n\nfunction joinIds(...ids: Array<string | undefined>): string | undefined {\n const list = ids.filter((id): id is string => Boolean(id));\n return list.length > 0 ? list.join(\" \") : undefined;\n}\n\n/**\n * Layout + accessibility wrapper for a single control. Renders the label,\n * optional description, and an error/success region, and wires the ARIA\n * relationships (`htmlFor`, `aria-describedby`, `aria-invalid`, `aria-required`).\n *\n * ```tsx\n * <Field label=\"Name\" error={error}>\n * {({ id, describedById, invalid }) => (\n * <input id={id} aria-describedby={describedById} aria-invalid={invalid} />\n * )}\n * </Field>\n * ```\n */\nexport function Field(props: FieldProps) {\n const { label, description, error, success, required, disabled, hideLabel, className, children } =\n props;\n\n const reactId = useId();\n const id = props.id ?? reactId;\n\n const messages = toMessages(error);\n const invalid = messages.length > 0;\n const successMsg = !invalid && typeof success === \"string\" && success ? success : undefined;\n const valid = !invalid && (success === true || Boolean(successMsg));\n\n const descriptionId = description != null ? `${id}-description` : undefined;\n const errorId = invalid ? `${id}-error` : undefined;\n const successId = successMsg ? `${id}-success` : undefined;\n const describedById = joinIds(descriptionId, errorId, successId);\n\n const ctx: FieldRenderContext = { id, describedById, invalid, valid, required, disabled };\n\n return (\n <div\n className={cx(\"orynn-field\", className)}\n data-invalid={invalid || undefined}\n data-valid={valid || undefined}\n data-disabled={disabled || undefined}\n data-required={required || undefined}\n >\n {label != null && !hideLabel && (\n <label className=\"orynn-field__label\" htmlFor={id} id={`${id}-label`}>\n {label}\n </label>\n )}\n\n {description != null && (\n <p className=\"orynn-field__description\" id={descriptionId}>\n {description}\n </p>\n )}\n\n <div className=\"orynn-field__control\">\n {typeof children === \"function\" ? children(ctx) : children}\n </div>\n\n {invalid && (\n <p className=\"orynn-field__error\" id={errorId} role=\"alert\">\n {messages.length === 1 ? messages[0] : messages.map((m) => <span key={m}>{m}</span>)}\n </p>\n )}\n {successMsg && (\n <p\n className=\"orynn-field__error\"\n id={successId}\n style={{ color: \"var(--orynn-color-success)\" }}\n >\n {successMsg}\n </p>\n )}\n </div>\n );\n}\n","import { type ReactNode, useCallback, useId, useMemo } from \"react\";\nimport { useControllableState } from \"../../core/state/use-controllable-state\";\nimport { cx } from \"../../internal/cx\";\nimport type { ControlSize, Feedback } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\nimport { Checkbox, CheckboxGroupContext, type CheckboxGroupContextValue } from \"./Checkbox\";\n\nexport interface CheckboxOption {\n label: ReactNode;\n value: string;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n label?: ReactNode;\n description?: ReactNode;\n error?: Feedback;\n success?: string | boolean;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n size?: ControlSize;\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n orientation?: \"vertical\" | \"horizontal\";\n /** Minimum selections (blocks unchecking below it). */\n min?: number;\n /** Maximum selections (blocks checking above it). */\n max?: number;\n /** Convenience: render items from data instead of children. */\n options?: CheckboxOption[];\n children?: ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function CheckboxGroup(props: CheckboxGroupProps) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n name: nameProp,\n size,\n value: valueProp,\n defaultValue,\n onChange,\n orientation = \"vertical\",\n min,\n max,\n options,\n children,\n className,\n id: idProp,\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const name = nameProp ?? id;\n const [value, setValue] = useControllableState<string[]>({\n value: valueProp,\n defaultValue: defaultValue ?? [],\n onChange: undefined,\n });\n\n const toggle = useCallback(\n (v: string, next: boolean) => {\n const set = new Set(value);\n if (next) set.add(v);\n else set.delete(v);\n const arr = [...set];\n setValue(arr);\n onChange?.(arr);\n },\n [value, setValue, onChange],\n );\n\n const ctx = useMemo<CheckboxGroupContextValue>(\n () => ({\n name,\n value,\n toggle,\n disabled,\n size,\n isDisabledToUncheck: () => min != null && value.length <= min,\n isDisabledToCheck: (v) => max != null && value.length >= max && !value.includes(v),\n }),\n [name, value, toggle, disabled, size, min, max],\n );\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {() => (\n <CheckboxGroupContext.Provider value={ctx}>\n <div\n role=\"group\"\n aria-labelledby={label != null ? `${id}-label` : undefined}\n className={cx(\"orynn-choice-group\")}\n data-orientation={orientation}\n >\n {options\n ? options.map((o) => (\n <Checkbox\n key={o.value}\n value={o.value}\n label={o.label}\n description={o.description}\n disabled={o.disabled}\n />\n ))\n : children}\n </div>\n </CheckboxGroupContext.Provider>\n )}\n </Field>\n );\n}\n","import { type FocusEvent, type HTMLAttributes, type ReactNode, forwardRef, useState } from \"react\";\nimport { cx } from \"./cx\";\n\nexport type ControlSize = \"sm\" | \"md\" | \"lg\";\nexport type ControlVariant = \"outline\" | \"filled\" | \"flushed\" | \"unstyled\";\nexport type ControlRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"pill\";\n\nexport interface FieldBoxOwnProps {\n size?: ControlSize;\n variant?: ControlVariant;\n radius?: ControlRadius;\n disabled?: boolean;\n invalid?: boolean;\n /** Success / valid visual state. */\n valid?: boolean;\n /** Controlled focus ring. Omit to auto-track via focus-within. */\n focused?: boolean;\n /** Whether the floating label is raised (usually focused || has value). */\n active?: boolean;\n /** Rotates a chevron marked `.orynn-select__chevron`. */\n open?: boolean;\n /** Floating label node (usually a `<label class=\"orynn-box__label\">`). */\n floatingLabel?: ReactNode;\n left?: ReactNode;\n right?: ReactNode;\n /** Adds `.orynn-box--textarea` sizing. */\n textarea?: boolean;\n}\n\nexport interface FieldBoxProps\n extends FieldBoxOwnProps,\n Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n children: ReactNode;\n}\n\nexport const FieldBox = /* @__PURE__ */ forwardRef<HTMLDivElement, FieldBoxProps>(\n function FieldBox(props, ref) {\n const {\n size = \"md\",\n variant = \"outline\",\n radius,\n disabled,\n invalid,\n valid,\n focused,\n active,\n open,\n floatingLabel,\n left,\n right,\n textarea,\n className,\n children,\n onFocus,\n onBlur,\n ...rest\n } = props;\n\n const [focusWithin, setFocusWithin] = useState(false);\n const isFocused = focused ?? focusWithin;\n\n const handleFocus = (e: FocusEvent<HTMLDivElement>) => {\n if (focused === undefined) setFocusWithin(true);\n onFocus?.(e);\n };\n const handleBlur = (e: FocusEvent<HTMLDivElement>) => {\n if (focused === undefined && !e.currentTarget.contains(e.relatedTarget as Node)) {\n setFocusWithin(false);\n }\n onBlur?.(e);\n };\n\n return (\n <div\n ref={ref}\n className={cx(\n \"orynn-box\",\n floatingLabel != null && \"orynn-box--floating\",\n textarea && \"orynn-box--textarea\",\n className,\n )}\n data-size={size}\n data-variant={variant}\n data-radius={radius}\n data-disabled={disabled || undefined}\n data-invalid={invalid || undefined}\n data-valid={valid || undefined}\n data-focused={isFocused || undefined}\n data-active={active || isFocused || undefined}\n data-open={open || undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...rest}\n >\n {left != null && <span className=\"orynn-box__adornment\">{left}</span>}\n {children}\n {floatingLabel}\n {right != null && <span className=\"orynn-box__adornment\">{right}</span>}\n </div>\n );\n },\n);\n","import {\n type ReactNode,\n type RefObject,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cx } from \"./cx\";\n\nconst useIsoLayoutEffect = typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nexport interface PopoverProps {\n open: boolean;\n /** The element the popover is anchored to (usually the control frame). */\n anchorRef: RefObject<HTMLElement | null>;\n onClose: () => void;\n children: ReactNode;\n /** Match the anchor's width. Default true. */\n matchWidth?: boolean;\n /** Gap between anchor and popover, px. Default 6. */\n offset?: number;\n /** Extra class on the `.orynn-popover` element. */\n className?: string;\n /** Ref forwarded to the popover element (for outside-click checks by the caller). */\n popoverRef?: { current: HTMLDivElement | null };\n /** Called on outside pointerdown / Escape (in addition to onClose). */\n role?: string;\n id?: string;\n}\n\ninterface Pos {\n left: number;\n top: number;\n width: number;\n placement: \"bottom\" | \"top\";\n maxHeight: number;\n}\n\nexport function Popover({\n open,\n anchorRef,\n onClose,\n children,\n matchWidth = true,\n offset = 6,\n className,\n popoverRef,\n role,\n id,\n}: PopoverProps) {\n const innerRef = useRef<HTMLDivElement | null>(null);\n const setRef = (el: HTMLDivElement | null) => {\n innerRef.current = el;\n if (popoverRef) popoverRef.current = el;\n };\n const [pos, setPos] = useState<Pos | null>(null);\n\n useIsoLayoutEffect(() => {\n if (!open) return;\n const anchor = anchorRef.current;\n if (!anchor) return;\n\n const update = () => {\n const r = anchor.getBoundingClientRect();\n const vh = window.innerHeight;\n const below = vh - r.bottom - offset;\n const above = r.top - offset;\n const wanted = innerRef.current?.scrollHeight ?? 280;\n const placeTop = below < Math.min(wanted, 240) && above > below;\n setPos({\n left: r.left,\n top: placeTop ? r.top - offset : r.bottom + offset,\n width: r.width,\n placement: placeTop ? \"top\" : \"bottom\",\n maxHeight: Math.max(140, (placeTop ? above : below) - 4),\n });\n };\n\n update();\n const ro = typeof ResizeObserver !== \"undefined\" ? new ResizeObserver(update) : undefined;\n ro?.observe(anchor);\n window.addEventListener(\"scroll\", update, true);\n window.addEventListener(\"resize\", update);\n return () => {\n ro?.disconnect();\n window.removeEventListener(\"scroll\", update, true);\n window.removeEventListener(\"resize\", update);\n };\n }, [open, anchorRef, offset]);\n\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (e: PointerEvent) => {\n const t = e.target as Node;\n if (innerRef.current?.contains(t) || anchorRef.current?.contains(t)) return;\n onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.stopPropagation();\n onClose();\n }\n };\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"keydown\", onKey, true);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKey, true);\n };\n }, [open, anchorRef, onClose]);\n\n if (!open || typeof document === \"undefined\" || !pos) return null;\n\n return createPortal(\n <div\n ref={setRef}\n id={id}\n role={role}\n className={cx(\"orynn-popover\", className)}\n style={{\n left: pos.left,\n top: pos.top,\n width: matchWidth ? pos.width : undefined,\n minWidth: pos.width,\n maxHeight: pos.maxHeight,\n transform: pos.placement === \"top\" ? \"translateY(-100%)\" : undefined,\n }}\n >\n {children}\n </div>,\n document.body,\n );\n}\n","export const startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\n\nexport const isSameDay = (a: Date | null, b: Date | null) =>\n !!a &&\n !!b &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n\nexport const addDays = (d: Date, n: number) => {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n};\n\nexport const addMonths = (d: Date, n: number) => {\n const r = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const day = Math.min(d.getDate(), daysInMonth(r.getFullYear(), r.getMonth()));\n r.setDate(day);\n return r;\n};\n\nexport const daysInMonth = (year: number, month: number) => new Date(year, month + 1, 0).getDate();\n\nexport const clampDate = (d: Date, min?: Date, max?: Date) => {\n if (min && d < startOfDay(min)) return startOfDay(min);\n if (max && d > startOfDay(max)) return startOfDay(max);\n return d;\n};\n\nconst pad = (n: number, len = 2) => String(n).padStart(len, \"0\");\n\n/** Formats with `yyyy MM M dd d MMMM MMM` tokens. */\nexport function formatDate(d: Date, fmt: string, locale?: string): string {\n const monthLong = new Intl.DateTimeFormat(locale, { month: \"long\" }).format(d);\n const monthShort = new Intl.DateTimeFormat(locale, { month: \"short\" }).format(d);\n return fmt\n .replace(/yyyy/g, String(d.getFullYear()))\n .replace(/MMMM/g, monthLong)\n .replace(/MMM/g, monthShort)\n .replace(/MM/g, pad(d.getMonth() + 1))\n .replace(/dd/g, pad(d.getDate()))\n .replace(/\\bM\\b/g, String(d.getMonth() + 1))\n .replace(/\\bd\\b/g, String(d.getDate()));\n}\n\n/** Lenient parse: pulls the first 1–2 / 4 digit groups in token order. */\nexport function parseDate(input: string, fmt: string): Date | null {\n const nums = input.match(/\\d+/g);\n if (!nums) return null;\n const order = (fmt.match(/yyyy|MM|dd|M|d/g) ?? [\"yyyy\", \"MM\", \"dd\"]).map((t) => t[0]);\n let y: number | undefined;\n let m: number | undefined;\n let dd: number | undefined;\n order.forEach((t, i) => {\n const n = Number(nums[i]);\n if (Number.isNaN(n)) return;\n if (t === \"y\") y = n < 100 ? 2000 + n : n;\n else if (t === \"M\") m = n - 1;\n else if (t === \"d\") dd = n;\n });\n if (y == null || m == null || dd == null) return null;\n const d = new Date(y, m, dd);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\nexport function toDate(v: Date | string | null | undefined): Date | null {\n if (v == null) return null;\n if (v instanceof Date) return Number.isNaN(v.getTime()) ? null : startOfDay(v);\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? null : startOfDay(d);\n}\n\n/** Grid of 6 weeks (42 cells) starting on `firstDayOfWeek`. */\nexport function monthMatrix(viewYear: number, viewMonth: number, firstDayOfWeek: number): Date[] {\n const first = new Date(viewYear, viewMonth, 1);\n const offset = (first.getDay() - firstDayOfWeek + 7) % 7;\n const start = addDays(first, -offset);\n return Array.from({ length: 42 }, (_, i) => addDays(start, i));\n}\n\nexport function weekdayLabels(firstDayOfWeek: number, locale?: string): string[] {\n const fmt = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n // 2023-01-01 is a Sunday\n return Array.from({ length: 7 }, (_, i) =>\n fmt.format(new Date(2023, 0, 1 + ((firstDayOfWeek + i) % 7))),\n );\n}\n\nexport function isoWeek(d: Date): number {\n const date = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n const dayNum = (date.getUTCDay() + 6) % 7;\n date.setUTCDate(date.getUTCDate() - dayNum + 3);\n const firstThursday = new Date(Date.UTC(date.getUTCFullYear(), 0, 4));\n const diff = date.getTime() - firstThursday.getTime();\n return 1 + Math.round(diff / (7 * 24 * 3600 * 1000));\n}\n","import { type KeyboardEvent, useEffect, useRef, useState } from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../../internal/icons\";\nimport {\n addDays,\n addMonths,\n clampDate,\n isSameDay,\n isoWeek,\n monthMatrix,\n startOfDay,\n weekdayLabels,\n} from \"./date-utils\";\n\nexport interface CalendarProps {\n value: Date | null;\n onSelect: (d: Date) => void;\n minDate?: Date;\n maxDate?: Date;\n isDisabled?: (d: Date) => boolean;\n firstDayOfWeek?: number;\n locale?: string;\n showWeekNumbers?: boolean;\n showToday?: boolean;\n showClear?: boolean;\n onClear?: () => void;\n /** Focus the grid on mount. */\n autoFocus?: boolean;\n}\n\nexport function Calendar({\n value,\n onSelect,\n minDate,\n maxDate,\n isDisabled,\n firstDayOfWeek = 0,\n locale,\n showWeekNumbers,\n showToday,\n showClear,\n onClear,\n autoFocus,\n}: CalendarProps) {\n const today = startOfDay(new Date());\n const initial = value ?? clampDate(today, minDate, maxDate);\n const [view, setView] = useState({ y: initial.getFullYear(), m: initial.getMonth() });\n const [focused, setFocused] = useState<Date>(initial);\n const gridRef = useRef<HTMLTableElement | null>(null);\n\n useEffect(() => {\n if (value) {\n setView({ y: value.getFullYear(), m: value.getMonth() });\n setFocused(value);\n }\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) {\n gridRef.current?.querySelector<HTMLButtonElement>('[data-focused=\"true\"]')?.focus();\n }\n }, [autoFocus]);\n\n const cells = monthMatrix(view.y, view.m, firstDayOfWeek);\n const weekdays = weekdayLabels(firstDayOfWeek, locale);\n const monthName = new Intl.DateTimeFormat(locale, { month: \"long\", year: \"numeric\" }).format(\n new Date(view.y, view.m, 1),\n );\n\n const outOfRange = (d: Date) =>\n (minDate != null && d < startOfDay(minDate)) ||\n (maxDate != null && d > startOfDay(maxDate)) ||\n Boolean(isDisabled?.(d));\n\n const goto = (d: Date) => {\n const c = clampDate(d, minDate, maxDate);\n setFocused(c);\n setView({ y: c.getFullYear(), m: c.getMonth() });\n requestAnimationFrame(() => {\n gridRef.current?.querySelector<HTMLButtonElement>('[data-focused=\"true\"]')?.focus();\n });\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const k = e.key;\n let next: Date | null = null;\n if (k === \"ArrowLeft\") next = addDays(focused, -1);\n else if (k === \"ArrowRight\") next = addDays(focused, 1);\n else if (k === \"ArrowUp\") next = addDays(focused, -7);\n else if (k === \"ArrowDown\") next = addDays(focused, 7);\n else if (k === \"Home\") next = addDays(focused, -((focused.getDay() - firstDayOfWeek + 7) % 7));\n else if (k === \"End\")\n next = addDays(focused, 6 - ((focused.getDay() - firstDayOfWeek + 7) % 7));\n else if (k === \"PageUp\") next = addMonths(focused, e.shiftKey ? -12 : -1);\n else if (k === \"PageDown\") next = addMonths(focused, e.shiftKey ? 12 : 1);\n else if (k === \"Enter\" || k === \" \") {\n e.preventDefault();\n if (!outOfRange(focused)) onSelect(focused);\n return;\n } else return;\n e.preventDefault();\n goto(next);\n };\n\n const years: number[] = [];\n const minY = minDate ? minDate.getFullYear() : view.y - 10;\n const maxY = maxDate ? maxDate.getFullYear() : view.y + 10;\n for (let y = minY; y <= maxY; y += 1) years.push(y);\n\n return (\n <div className=\"orynn-calendar\">\n <div className=\"orynn-calendar__header\">\n <button\n type=\"button\"\n className=\"orynn-calendar__nav\"\n aria-label=\"Previous month\"\n onClick={() => setView((v) => ({ y: v.m === 0 ? v.y - 1 : v.y, m: (v.m + 11) % 12 }))}\n >\n <ChevronLeftIcon />\n </button>\n <div className=\"orynn-calendar__title\">\n <select\n className=\"orynn-calendar__select\"\n aria-label=\"Month\"\n value={view.m}\n onChange={(e) => setView((v) => ({ ...v, m: Number(e.target.value) }))}\n >\n {Array.from({ length: 12 }, (_, i) => (\n <option key={i} value={i}>\n {new Intl.DateTimeFormat(locale, { month: \"long\" }).format(new Date(2023, i, 1))}\n </option>\n ))}\n </select>\n <select\n className=\"orynn-calendar__select\"\n aria-label=\"Year\"\n value={view.y}\n onChange={(e) => setView((v) => ({ ...v, y: Number(e.target.value) }))}\n >\n {years.map((y) => (\n <option key={y} value={y}>\n {y}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n className=\"orynn-calendar__nav\"\n aria-label=\"Next month\"\n onClick={() => setView((v) => ({ y: v.m === 11 ? v.y + 1 : v.y, m: (v.m + 1) % 12 }))}\n >\n <ChevronRightIcon />\n </button>\n </div>{\" \"}\n <table\n ref={gridRef}\n className=\"orynn-calendar__grid\"\n role=\"grid\"\n aria-label={monthName}\n onKeyDown={onKeyDown}\n >\n <thead>\n <tr>\n {showWeekNumbers && <th aria-hidden=\"true\" />}\n {weekdays.map((w) => (\n <th key={w} scope=\"col\">\n {w}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {Array.from({ length: 6 }, (_, week) => {\n const row = cells.slice(week * 7, week * 7 + 7);\n const firstOfRow = row[0] as Date;\n return (\n <tr key={firstOfRow.toISOString()}>\n {showWeekNumbers && (\n <td className=\"orynn-calendar__weeknum\">{isoWeek(firstOfRow)}</td>\n )}\n {row.map((d) => {\n const inMonth = d.getMonth() === view.m;\n const disabled = outOfRange(d);\n const selected = isSameDay(d, value);\n const isFocused = isSameDay(d, focused);\n return (\n <td key={d.toISOString()} role=\"gridcell\" aria-selected={selected}>\n <button\n type=\"button\"\n className=\"orynn-calendar__day\"\n tabIndex={isFocused ? 0 : -1}\n data-focused={isFocused || undefined}\n data-outside={!inMonth || undefined}\n data-today={isSameDay(d, today) || undefined}\n data-selected={selected || undefined}\n disabled={disabled}\n aria-label={new Intl.DateTimeFormat(locale, { dateStyle: \"full\" }).format(\n d,\n )}\n onClick={() => {\n setFocused(d);\n onSelect(d);\n }}\n >\n {d.getDate()}\n </button>\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n {(showToday || showClear) && (\n <div className=\"orynn-calendar__footer\">\n {showToday ? (\n <button\n type=\"button\"\n className=\"orynn-calendar__action\"\n disabled={outOfRange(today)}\n onClick={() => onSelect(today)}\n >\n Today\n </button>\n ) : (\n <span />\n )}\n {showClear && (\n <button type=\"button\" className=\"orynn-calendar__action\" onClick={onClear}>\n Clear\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { type KeyboardEvent, forwardRef, useEffect, useId, useRef, useState } from \"react\";\nimport { FieldBox } from \"../../internal/FieldBox\";\nimport { Popover } from \"../../internal/Popover\";\nimport { CalendarIcon, XIcon } from \"../../internal/icons\";\nimport type { BaseControlProps } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\nimport { Calendar } from \"./Calendar\";\nimport { formatDate, isSameDay, parseDate, startOfDay, toDate } from \"./date-utils\";\n\nexport interface DatePickerProps\n extends Omit<BaseControlProps, \"startContent\" | \"endContent\" | \"loading\"> {\n value?: Date | string | null;\n defaultValue?: Date | string | null;\n onChange?: (value: Date | null) => void;\n /** Display / parse pattern (`yyyy MM dd M d MMM MMMM`). Default `\"yyyy-MM-dd\"`. */\n format?: string;\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[] | ((date: Date) => boolean);\n firstDayOfWeek?: number;\n locale?: string;\n showWeekNumbers?: boolean;\n showToday?: boolean;\n showClear?: boolean;\n /** Render the calendar always, without a text field. */\n inline?: boolean;\n /** Allow typing a date into the field. Default true. */\n allowInput?: boolean;\n closeOnSelect?: boolean;\n placeholder?: string;\n}\n\nexport const DatePicker = /* @__PURE__ */ forwardRef<HTMLInputElement, DatePickerProps>(\n function DatePicker(props, ref) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n readOnly,\n size,\n variant,\n radius,\n floatingLabel,\n clearable,\n onClear,\n id: idProp,\n name,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n format = \"yyyy-MM-dd\",\n minDate,\n maxDate,\n disabledDates,\n firstDayOfWeek = 0,\n locale,\n showWeekNumbers,\n showToday = true,\n showClear,\n inline = false,\n allowInput = true,\n closeOnSelect = true,\n placeholder,\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const panelId = `${id}-cal`;\n\n const isControlled = valueProp !== undefined;\n const [inner, setInner] = useState<Date | null>(() => toDate(defaultValue));\n const value = isControlled ? toDate(valueProp) : inner;\n\n const [open, setOpen] = useState(false);\n const [gridFocus, setGridFocus] = useState(false);\n const [text, setText] = useState(() => (value ? formatDate(value, format, locale) : \"\"));\n const boxRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n setText(value ? formatDate(value, format, locale) : \"\");\n }, [value, format, locale]);\n\n const isDisabledDate = (d: Date) => {\n if (Array.isArray(disabledDates))\n return disabledDates.some((x) => isSameDay(startOfDay(x), d));\n return Boolean(disabledDates?.(d));\n };\n\n const commit = (d: Date | null) => {\n if (!isControlled) setInner(d);\n onChange?.(d);\n };\n\n const select = (d: Date) => {\n if (isDisabledDate(d)) return;\n commit(startOfDay(d));\n if (closeOnSelect) {\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setOpen(true);\n setGridFocus(true);\n } else if (e.key === \"Escape\" && open) {\n e.preventDefault();\n setOpen(false);\n } else if (e.key === \"Enter\") {\n const parsed = parseDate(text, format);\n if (parsed && !isDisabledDate(startOfDay(parsed))) select(parsed);\n }\n };\n\n const cal = (\n <Calendar\n value={value}\n onSelect={select}\n minDate={minDate}\n maxDate={maxDate}\n isDisabled={isDisabledDate}\n firstDayOfWeek={firstDayOfWeek}\n locale={locale}\n showWeekNumbers={showWeekNumbers}\n showToday={showToday}\n showClear={showClear}\n onClear={() => {\n commit(null);\n setOpen(false);\n }}\n autoFocus={(open && gridFocus) || inline}\n />\n );\n\n if (inline) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {() => (\n <div className=\"orynn-popover\" style={{ position: \"static\" }}>\n {cal}\n </div>\n )}\n </Field>\n );\n }\n\n const hasValue = value != null;\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n hideLabel={floatingLabel}\n id={id}\n className={className}\n >\n {({ describedById, invalid, valid }) => (\n <>\n <FieldBox\n ref={boxRef}\n size={size}\n variant={variant}\n radius={radius}\n disabled={disabled}\n invalid={invalid}\n valid={valid}\n open={open}\n active={hasValue || text.length > 0}\n floatingLabel={\n floatingLabel ? (\n <label className=\"orynn-box__label\" htmlFor={id}>\n {label}\n </label>\n ) : undefined\n }\n right={\n <>\n {clearable && hasValue && !disabled && !readOnly && (\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onClick={() => {\n commit(null);\n onClear?.();\n }}\n >\n <XIcon />\n </button>\n )}\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label=\"Open calendar\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n onClick={() => {\n if (disabled || readOnly) return;\n setGridFocus(true);\n setOpen((o) => !o);\n }}\n >\n <CalendarIcon />\n </button>\n </>\n }\n >\n <input\n ref={(n) => {\n inputRef.current = n;\n if (typeof ref === \"function\") ref(n);\n else if (ref)\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = n;\n }}\n id={id}\n name={name}\n className=\"orynn-box__field\"\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"off\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={panelId}\n aria-haspopup=\"dialog\"\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n value={text}\n disabled={disabled}\n readOnly={!allowInput || readOnly}\n required={required}\n placeholder={floatingLabel ? undefined : (placeholder ?? format.toLowerCase())}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={onKeyDown}\n onFocus={() => setOpen(true)}\n onBlur={() => {\n const parsed = parseDate(text, format);\n if (parsed && !isDisabledDate(startOfDay(parsed))) {\n commit(startOfDay(parsed));\n setText(formatDate(startOfDay(parsed), format, locale));\n } else {\n setText(value ? formatDate(value, format, locale) : \"\");\n }\n }}\n />\n </FieldBox>\n\n <Popover\n open={open}\n anchorRef={boxRef}\n onClose={() => {\n setOpen(false);\n setGridFocus(false);\n }}\n matchWidth={false}\n id={panelId}\n role=\"dialog\"\n >\n {cal}\n </Popover>\n </>\n )}\n </Field>\n );\n },\n);\n","import {\n type KeyboardEvent,\n type ReactNode,\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { FieldBox } from \"../../internal/FieldBox\";\nimport { Popover } from \"../../internal/Popover\";\nimport { CheckIcon, ChevronDownIcon, SpinnerIcon, XIcon } from \"../../internal/icons\";\nimport type { BaseControlProps } from \"../../types/common\";\nimport type { DropdownOption } from \"../../types/config\";\nimport { Field } from \"../Field/Field\";\n\nexport type { DropdownOption };\n\ninterface OptionState {\n selected: boolean;\n active: boolean;\n disabled: boolean;\n /** Query the option matched, for highlighting. */\n query: string;\n}\n\nexport interface DropdownProps extends Omit<BaseControlProps, \"startContent\" | \"endContent\"> {\n options: DropdownOption[];\n value?: string | string[] | null;\n defaultValue?: string | string[] | null;\n onChange?: (value: string | string[] | null) => void;\n multiple?: boolean;\n /** Type in the control to filter options. */\n searchable?: boolean;\n filterMode?: \"contains\" | \"startsWith\";\n filterFn?: (option: DropdownOption, query: string) => boolean;\n /** Bold the matched substring in option labels. Default true when searchable. */\n highlightMatch?: boolean;\n renderOption?: (option: DropdownOption, state: OptionState) => ReactNode;\n renderValue?: (selected: DropdownOption[]) => ReactNode;\n placeholder?: string;\n emptyMessage?: ReactNode;\n /** Close the panel after a pick. Default true for single, false for multiple. */\n closeOnSelect?: boolean;\n /** Cap the chips shown before \"+N\". */\n maxSelectedLabels?: number;\n /** Fall back to a native `<select>` (single, no search). */\n native?: boolean;\n startContent?: ReactNode;\n}\n\nconst toArray = (v: string | string[] | null | undefined): string[] =>\n v == null ? [] : Array.isArray(v) ? v : [v];\n\nfunction Highlight({ text, query }: { text: string; query: string }) {\n if (!query) return <>{text}</>;\n const i = text.toLowerCase().indexOf(query.toLowerCase());\n if (i < 0) return <>{text}</>;\n return (\n <>\n {text.slice(0, i)}\n <mark>{text.slice(i, i + query.length)}</mark>\n {text.slice(i + query.length)}\n </>\n );\n}\n\nexport const Dropdown = /* @__PURE__ */ forwardRef<HTMLInputElement, DropdownProps>(\n function Dropdown(props, ref) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n readOnly,\n size,\n variant,\n radius,\n floatingLabel,\n clearable,\n onClear,\n loading,\n id: idProp,\n name,\n className,\n options,\n value: valueProp,\n defaultValue,\n onChange,\n multiple = false,\n searchable = false,\n filterMode = \"contains\",\n filterFn,\n highlightMatch,\n renderOption,\n renderValue,\n placeholder,\n emptyMessage = \"No results\",\n closeOnSelect = !multiple,\n maxSelectedLabels,\n native = false,\n startContent,\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const listId = `${id}-listbox`;\n\n const isControlled = valueProp !== undefined;\n const [inner, setInner] = useState<string[]>(() => toArray(defaultValue));\n const selectedValues = isControlled ? toArray(valueProp) : inner;\n\n const commit = (next: string[]) => {\n if (!isControlled) setInner(next);\n onChange?.(multiple ? next : (next[0] ?? null));\n };\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [activeIndex, setActiveIndex] = useState(0);\n const boxRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n\n const byValue = useMemo(() => new Map(options.map((o) => [o.value, o])), [options]);\n const selectedOptions = selectedValues\n .map((v) => byValue.get(v))\n .filter(Boolean) as DropdownOption[];\n\n const filtered = useMemo(() => {\n if (!searchable || !query) return options;\n const q = query.toLowerCase();\n const match =\n filterFn ??\n ((o: DropdownOption) =>\n filterMode === \"startsWith\"\n ? o.label.toLowerCase().startsWith(q)\n : o.label.toLowerCase().includes(q));\n return options.filter((o) => match(o, query));\n }, [options, searchable, query, filterMode, filterFn]);\n\n // flatten with group headers for rendering + keep an index of selectable rows\n const rows = useMemo(() => {\n const out: Array<\n | { type: \"group\"; label: string }\n | { type: \"option\"; option: DropdownOption; optionIndex: number }\n > = [];\n let seenGroup: string | undefined;\n let optionIndex = 0;\n for (const o of filtered) {\n if (o.group && o.group !== seenGroup) {\n seenGroup = o.group;\n out.push({ type: \"group\", label: o.group });\n }\n out.push({ type: \"option\", option: o, optionIndex });\n optionIndex += 1;\n }\n return out;\n }, [filtered]);\n\n const selectableOptions = filtered;\n useEffect(() => {\n setActiveIndex((i) => Math.min(Math.max(0, i), Math.max(0, selectableOptions.length - 1)));\n }, [selectableOptions.length]);\n\n useEffect(() => {\n if (!open) setQuery(\"\");\n }, [open]);\n\n const firstRelevantIndex = () => {\n const sel = selectableOptions.findIndex((o) => selectedValues.includes(o.value));\n return sel >= 0 ? sel : 0;\n };\n\n useEffect(() => {\n if (!open) return;\n const el = listRef.current?.querySelector<HTMLElement>('[data-active=\"true\"]');\n el?.scrollIntoView?.({ block: \"nearest\" });\n }, [activeIndex, open]);\n\n const openPanel = () => {\n if (disabled || readOnly || open) return;\n setActiveIndex(firstRelevantIndex());\n setOpen(true);\n };\n\n const pick = (opt: DropdownOption) => {\n if (opt.disabled) return;\n if (multiple) {\n const has = selectedValues.includes(opt.value);\n commit(\n has ? selectedValues.filter((v) => v !== opt.value) : [...selectedValues, opt.value],\n );\n setQuery(\"\");\n } else {\n commit([opt.value]);\n }\n if (closeOnSelect) {\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n const clearAll = () => {\n commit([]);\n onClear?.();\n setQuery(\"\");\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!open) {\n openPanel();\n setActiveIndex(firstRelevantIndex());\n } else {\n setActiveIndex((i) => Math.min(selectableOptions.length - 1, i + 1));\n }\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!open) {\n openPanel();\n setActiveIndex(firstRelevantIndex());\n } else {\n setActiveIndex((i) => Math.max(0, i - 1));\n }\n break;\n case \"Home\":\n if (open) {\n e.preventDefault();\n setActiveIndex(0);\n }\n break;\n case \"End\":\n if (open) {\n e.preventDefault();\n setActiveIndex(selectableOptions.length - 1);\n }\n break;\n case \"Enter\":\n if (open && selectableOptions[activeIndex]) {\n e.preventDefault();\n pick(selectableOptions[activeIndex]);\n }\n break;\n case \"Escape\":\n if (open) {\n e.preventDefault();\n setOpen(false);\n }\n break;\n case \" \":\n if (!searchable) {\n e.preventDefault();\n if (!open) openPanel();\n else if (selectableOptions[activeIndex]) pick(selectableOptions[activeIndex]);\n }\n break;\n case \"Backspace\":\n if (multiple && query === \"\" && selectedValues.length > 0) {\n commit(selectedValues.slice(0, -1));\n }\n break;\n case \"Tab\":\n setOpen(false);\n break;\n }\n };\n\n const hasValue = selectedValues.length > 0;\n const doHighlight = highlightMatch ?? searchable;\n\n // -------- native fallback --------\n if (native && !multiple && !searchable) {\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {({ describedById, invalid }) => (\n <select\n id={id}\n name={name}\n className=\"orynn-dropdown\"\n value={selectedValues[0] ?? \"\"}\n disabled={disabled}\n required={required}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={(e) => commit(e.target.value ? [e.target.value] : [])}\n >\n {placeholder != null && (\n <option value=\"\" disabled={required}>\n {placeholder}\n </option>\n )}\n {options.map((o) => (\n <option key={o.value} value={o.value} disabled={o.disabled}>\n {o.label}\n </option>\n ))}\n </select>\n )}\n </Field>\n );\n }\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n hideLabel={floatingLabel}\n id={id}\n className={className}\n >\n {({ describedById, invalid, valid }) => (\n <>\n <FieldBox\n ref={boxRef}\n size={size}\n variant={variant}\n radius={radius}\n disabled={disabled}\n invalid={invalid}\n valid={valid}\n open={open}\n active={hasValue}\n onClick={() => {\n inputRef.current?.focus();\n openPanel();\n }}\n floatingLabel={\n floatingLabel ? (\n <label className=\"orynn-box__label\" htmlFor={id}>\n {label}\n </label>\n ) : undefined\n }\n right={\n <>\n {loading && <SpinnerIcon />}\n {clearable && hasValue && !disabled && !readOnly && (\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n clearAll();\n }}\n >\n <XIcon />\n </button>\n )}\n {valid && !loading && <CheckIcon className=\"orynn-icon-success\" />}\n <ChevronDownIcon className=\"orynn-select__chevron\" />\n </>\n }\n >\n <div className=\"orynn-select__value\">\n {startContent}\n {multiple && selectedOptions.length > 0 && (\n <span className=\"orynn-select__chips\">\n {(maxSelectedLabels\n ? selectedOptions.slice(0, maxSelectedLabels)\n : selectedOptions\n ).map((o) => (\n <span key={o.value} className=\"orynn-select__chip\">\n <span>{o.label}</span>\n <button\n type=\"button\"\n aria-label={`Remove ${o.label}`}\n tabIndex={-1}\n onClick={(e) => {\n e.stopPropagation();\n commit(selectedValues.filter((v) => v !== o.value));\n }}\n >\n <XIcon />\n </button>\n </span>\n ))}\n {maxSelectedLabels && selectedOptions.length > maxSelectedLabels && (\n <span className=\"orynn-select__chip\">\n <span>+{selectedOptions.length - maxSelectedLabels}</span>\n </span>\n )}\n </span>\n )}\n {!multiple && hasValue && query === \"\" && (\n <span className=\"orynn-select__single\">\n {renderValue ? renderValue(selectedOptions) : selectedOptions[0]?.label}\n </span>\n )}\n {!hasValue && !searchable && query === \"\" && (\n <span className=\"orynn-select__value--placeholder orynn-select__single\">\n {floatingLabel ? \"\" : placeholder}\n </span>\n )}\n <input\n {...(ref ? { ref: setRefs(ref, inputRef) } : { ref: inputRef })}\n id={id}\n name={name}\n className=\"orynn-select__search\"\n role=\"combobox\"\n aria-expanded={open}\n aria-controls={listId}\n aria-autocomplete={searchable ? \"list\" : \"none\"}\n aria-activedescendant={\n open && selectableOptions[activeIndex]\n ? `${id}-opt-${selectableOptions[activeIndex].value}`\n : undefined\n }\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n autoComplete=\"off\"\n readOnly={!searchable || readOnly}\n disabled={disabled}\n placeholder={\n !hasValue && (searchable || !floatingLabel) ? placeholder : undefined\n }\n value={query}\n size={1}\n onChange={(e) => {\n setQuery(e.target.value);\n if (!open) setOpen(true);\n }}\n onKeyDown={onKeyDown}\n onFocus={openPanel}\n />\n </div>\n </FieldBox>\n\n <Popover\n open={open}\n anchorRef={boxRef}\n onClose={() => setOpen(false)}\n popoverRef={listRef}\n >\n <div\n className=\"orynn-listbox\"\n id={listId}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {selectableOptions.length === 0 ? (\n <div className=\"orynn-listbox__empty\">{emptyMessage}</div>\n ) : (\n rows.map((row) =>\n row.type === \"group\" ? (\n <div key={`g-${row.label}`} className=\"orynn-listbox__group\">\n {row.label}\n </div>\n ) : (\n <div\n key={row.option.value}\n id={`${id}-opt-${row.option.value}`}\n role=\"option\"\n aria-selected={selectedValues.includes(row.option.value)}\n aria-disabled={row.option.disabled || undefined}\n className=\"orynn-option\"\n data-active={row.optionIndex === activeIndex || undefined}\n data-selected={selectedValues.includes(row.option.value) || undefined}\n data-disabled={row.option.disabled || undefined}\n onMouseEnter={() => setActiveIndex(row.optionIndex)}\n onClick={() => pick(row.option)}\n >\n {renderOption ? (\n renderOption(row.option, {\n selected: selectedValues.includes(row.option.value),\n active: row.optionIndex === activeIndex,\n disabled: Boolean(row.option.disabled),\n query,\n })\n ) : (\n <>\n {row.option.icon}\n <span className=\"orynn-option__body\">\n <span className=\"orynn-option__label\">\n {doHighlight ? (\n <Highlight text={row.option.label} query={query} />\n ) : (\n row.option.label\n )}\n </span>\n {row.option.description != null && (\n <span className=\"orynn-option__desc\">{row.option.description}</span>\n )}\n </span>\n {selectedValues.includes(row.option.value) && (\n <CheckIcon className=\"orynn-option__check\" />\n )}\n </>\n )}\n </div>\n ),\n )\n )}\n </div>\n </Popover>\n </>\n )}\n </Field>\n );\n },\n);\n\nfunction setRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return (node: T | null) => {\n for (const r of refs) {\n if (typeof r === \"function\") r(node);\n else if (r && typeof r === \"object\") (r as React.MutableRefObject<T | null>).current = node;\n }\n };\n}\n","import {\n type ChangeEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n forwardRef,\n useId,\n useState,\n} from \"react\";\nimport { useControllableState } from \"../../core/state/use-controllable-state\";\nimport { FieldBox } from \"../../internal/FieldBox\";\nimport { CheckIcon, EyeIcon, EyeOffIcon, SpinnerIcon, XIcon } from \"../../internal/icons\";\nimport type { BaseControlProps } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\n\ntype NativeInput = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\" | \"size\" | \"prefix\"\n>;\n\nexport interface InputProps extends BaseControlProps, NativeInput {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void;\n /** Fired on Enter. */\n onEnter?: (value: string) => void;\n type?: \"text\" | \"email\" | \"password\" | \"search\" | \"tel\" | \"url\";\n /** Static text glued to the start (e.g. `https://`). */\n prefix?: ReactNode;\n /** Static text glued to the end (e.g. `.com`). */\n suffix?: ReactNode;\n /** Show a show/hide toggle (implied for `type=\"password\"`). */\n passwordToggle?: boolean;\n /** Show a live character counter. Pairs well with `maxLength`. */\n showCount?: boolean;\n}\n\nexport const Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputProps>(\n function Input(props, ref) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n readOnly,\n size,\n variant,\n radius,\n floatingLabel,\n startContent,\n endContent,\n clearable,\n onClear,\n loading,\n id: idProp,\n name,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n onEnter,\n onKeyDown,\n type = \"text\",\n prefix,\n suffix,\n passwordToggle,\n showCount,\n maxLength,\n placeholder,\n ...rest\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue: defaultValue ?? \"\",\n onChange: undefined,\n });\n const [reveal, setReveal] = useState(false);\n\n const showToggle = (passwordToggle ?? type === \"password\") && !disabled && !readOnly;\n const effectiveType = type === \"password\" && reveal ? \"text\" : type;\n const hasValue = value.length > 0;\n const showClear = clearable && hasValue && !disabled && !readOnly;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value);\n onChange?.(e.target.value, e);\n };\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") onEnter?.(value);\n onKeyDown?.(e);\n };\n const clear = () => {\n setValue(\"\");\n onClear?.();\n };\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n hideLabel={floatingLabel}\n id={id}\n className={className}\n >\n {({ describedById, invalid, valid }) => (\n <FieldBox\n size={size}\n variant={variant}\n radius={radius}\n disabled={disabled}\n invalid={invalid}\n valid={valid}\n active={hasValue}\n left={\n startContent != null || prefix != null ? (\n <>\n {startContent}\n {prefix != null && <span className=\"orynn-box__adornment--affix\">{prefix}</span>}\n </>\n ) : undefined\n }\n right={\n <>\n {suffix != null && <span className=\"orynn-box__adornment--affix\">{suffix}</span>}\n {showCount && (\n <span className=\"orynn-box__adornment--affix\">\n {value.length}\n {maxLength ? `/${maxLength}` : \"\"}\n </span>\n )}\n {showClear && (\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onClick={clear}\n >\n <XIcon />\n </button>\n )}\n {showToggle && (\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label={reveal ? \"Hide\" : \"Show\"}\n aria-pressed={reveal}\n tabIndex={-1}\n onClick={() => setReveal((v) => !v)}\n >\n {reveal ? <EyeOffIcon /> : <EyeIcon />}\n </button>\n )}\n {loading && <SpinnerIcon />}\n {endContent}\n {valid && !loading && <CheckIcon className=\"orynn-icon-success\" />}\n </>\n }\n floatingLabel={\n floatingLabel ? (\n <label className=\"orynn-box__label\" htmlFor={id}>\n {label}\n </label>\n ) : undefined\n }\n >\n <input\n {...rest}\n ref={ref}\n id={id}\n name={name}\n className=\"orynn-box__field\"\n type={effectiveType}\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n maxLength={maxLength}\n placeholder={floatingLabel ? undefined : placeholder}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n />\n </FieldBox>\n )}\n </Field>\n );\n },\n);\n","import {\n type InputHTMLAttributes,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useControllableState } from \"../../core/state/use-controllable-state\";\nimport { FieldBox } from \"../../internal/FieldBox\";\nimport { MinusIcon, PlusIcon } from \"../../internal/icons\";\nimport type { BaseControlProps } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\n\ntype NativeNumberInput = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\" | \"min\" | \"max\" | \"step\" | \"size\" | \"prefix\"\n>;\n\nexport interface NumberFieldProps extends BaseControlProps, NativeNumberInput {\n value?: number | null;\n defaultValue?: number | null;\n onChange?: (value: number | null) => void;\n min?: number;\n max?: number;\n step?: number;\n /** Larger step for Shift+Arrow / PageUp-Down. Default `step * 10`. */\n shiftStep?: number;\n /** Decimal places to keep. */\n precision?: number;\n /** Stepper buttons. Default `\"stacked\"`. */\n buttons?: \"stacked\" | \"horizontal\" | false;\n /** Group thousands (`1,000`). */\n grouping?: boolean;\n /** BCP-47 locale for formatting. */\n locale?: string;\n /** ISO currency code — renders as currency. */\n currency?: string;\n /** Text before the number. */\n prefix?: string;\n /** Text after the number (e.g. `%`, `kg`). */\n suffix?: string;\n /** Clamp to `[min, max]` on blur. Default true. */\n clampOnBlur?: boolean;\n /** Step with the mouse wheel while focused. Default false. */\n allowMouseWheel?: boolean;\n}\n\nconst clamp = (n: number, min?: number, max?: number) =>\n Math.min(max ?? Number.POSITIVE_INFINITY, Math.max(min ?? Number.NEGATIVE_INFINITY, n));\n\nconst round = (n: number, p?: number) => (p == null ? n : Math.round(n * 10 ** p) / 10 ** p);\n\nexport const NumberField = /* @__PURE__ */ forwardRef<HTMLInputElement, NumberFieldProps>(\n function NumberField(props, ref) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n readOnly,\n size,\n variant,\n radius,\n floatingLabel,\n startContent,\n endContent,\n id: idProp,\n name,\n className,\n value: valueProp,\n defaultValue = null,\n onChange,\n min,\n max,\n step = 1,\n shiftStep,\n precision,\n buttons = \"stacked\",\n grouping,\n locale,\n currency,\n prefix,\n suffix,\n clampOnBlur = true,\n allowMouseWheel,\n placeholder,\n ...rest\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const [value, setValue] = useControllableState<number | null>({\n value: valueProp,\n defaultValue,\n onChange: undefined,\n });\n\n const fmt = useMemo(\n () =>\n new Intl.NumberFormat(locale, {\n ...(currency ? { style: \"currency\" as const, currency } : {}),\n useGrouping: grouping ?? Boolean(currency),\n maximumFractionDigits: precision ?? (currency ? 2 : 20),\n minimumFractionDigits: currency ? 2 : 0,\n }),\n [locale, currency, grouping, precision],\n );\n\n const seps = useMemo(() => {\n const parts = new Intl.NumberFormat(locale).formatToParts(11111.1);\n return {\n group: parts.find((p) => p.type === \"group\")?.value ?? \",\",\n decimal: parts.find((p) => p.type === \"decimal\")?.value ?? \".\",\n };\n }, [locale]);\n\n const display = useCallback(\n (n: number | null) =>\n n == null || Number.isNaN(n) ? \"\" : `${prefix ?? \"\"}${fmt.format(n)}${suffix ?? \"\"}`,\n [fmt, prefix, suffix],\n );\n\n const parse = useCallback(\n (raw: string): number | null => {\n let s = raw;\n if (prefix) s = s.split(prefix).join(\"\");\n if (suffix) s = s.split(suffix).join(\"\");\n s = s.split(seps.group).join(\"\").split(seps.decimal).join(\".\");\n s = s.replace(/[^\\d.\\-]/g, \"\");\n if (s === \"\" || s === \"-\" || s === \".\") return null;\n const first = s.indexOf(\".\");\n if (first !== -1) s = s.slice(0, first + 1) + s.slice(first + 1).replace(/\\./g, \"\");\n const n = Number(s);\n return Number.isNaN(n) ? null : n;\n },\n [prefix, suffix, seps],\n );\n\n const [text, setText] = useState(() => display(value));\n const [editing, setEditing] = useState(false);\n useEffect(() => {\n if (!editing) setText(display(value));\n }, [value, editing, display]);\n\n const commit = (n: number | null) => {\n setValue(n);\n onChange?.(n);\n };\n\n /** Commit AND reflect in the field text (steppers, wheel, blur). */\n const setNumber = (n: number | null) => {\n commit(n);\n setText(display(n));\n };\n\n const bump = (dir: 1 | -1, big = false) => {\n const delta = (big ? (shiftStep ?? step * 10) : step) * dir;\n const base = value ?? (dir > 0 ? (min ?? 0) : (max ?? 0));\n setNumber(round(clamp(base + delta, min, max), precision));\n };\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n useEffect(() => {\n const el = innerRef.current;\n if (!el || !allowMouseWheel) return;\n const onWheel = (e: WheelEvent) => {\n if (document.activeElement !== el) return;\n e.preventDefault();\n bump(e.deltaY < 0 ? 1 : -1, e.shiftKey);\n };\n el.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => el.removeEventListener(\"wheel\", onWheel);\n });\n\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n bump(1, e.shiftKey);\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n bump(-1, e.shiftKey);\n } else if (e.key === \"PageUp\") {\n e.preventDefault();\n bump(1, true);\n } else if (e.key === \"PageDown\") {\n e.preventDefault();\n bump(-1, true);\n } else if (e.key === \"Home\" && min != null) {\n e.preventDefault();\n setNumber(min);\n } else if (e.key === \"End\" && max != null) {\n e.preventDefault();\n setNumber(max);\n }\n };\n\n const holdTimer = useRef<ReturnType<typeof setInterval>>();\n const startHold = (dir: 1 | -1) => {\n bump(dir);\n let count = 0;\n holdTimer.current = setInterval(() => {\n count += 1;\n bump(dir, count > 6);\n }, 110);\n };\n const stopHold = () => clearInterval(holdTimer.current);\n useEffect(() => () => clearInterval(holdTimer.current), []);\n\n const StepButtons = buttons && (\n <div\n className={`orynn-number__buttons${buttons === \"horizontal\" ? \" orynn-number__buttons--horizontal\" : \"\"}`}\n >\n <button\n type=\"button\"\n className=\"orynn-number__btn\"\n aria-label=\"Increment\"\n tabIndex={-1}\n disabled={disabled || readOnly || (max != null && (value ?? 0) >= max)}\n onPointerDown={() => startHold(1)}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n >\n <PlusIcon />\n </button>\n <button\n type=\"button\"\n className=\"orynn-number__btn\"\n aria-label=\"Decrement\"\n tabIndex={-1}\n disabled={disabled || readOnly || (min != null && (value ?? 0) <= min)}\n onPointerDown={() => startHold(-1)}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n >\n <MinusIcon />\n </button>\n </div>\n );\n\n const hasValue = value != null;\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n hideLabel={floatingLabel}\n id={id}\n className={className}\n >\n {({ describedById, invalid, valid }) => (\n <FieldBox\n size={size}\n variant={variant}\n radius={radius}\n disabled={disabled}\n invalid={invalid}\n valid={valid}\n active={hasValue}\n left={startContent}\n right={\n <>\n {endContent}\n {StepButtons}\n </>\n }\n floatingLabel={\n floatingLabel ? (\n <label className=\"orynn-box__label\" htmlFor={id}>\n {label}\n </label>\n ) : undefined\n }\n >\n <input\n {...rest}\n ref={(n) => {\n innerRef.current = n;\n if (typeof ref === \"function\") ref(n);\n else if (ref) (ref as React.MutableRefObject<HTMLInputElement | null>).current = n;\n }}\n id={id}\n name={name}\n className=\"orynn-box__field\"\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuenow={value ?? undefined}\n aria-valuemin={min}\n aria-valuemax={max}\n value={text}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n placeholder={floatingLabel ? undefined : placeholder}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onFocus={() => setEditing(true)}\n onChange={(e) => {\n setText(e.target.value);\n commit(parse(e.target.value));\n }}\n onKeyDown={onKeyDown}\n onBlur={() => {\n setEditing(false);\n const parsed = parse(text);\n const final =\n parsed == null\n ? null\n : round(clampOnBlur ? clamp(parsed, min, max) : parsed, precision);\n if (final !== value) commit(final);\n setText(display(final));\n }}\n />\n </FieldBox>\n )}\n </Field>\n );\n },\n);\n","import {\n type ChangeEvent,\n type InputHTMLAttributes,\n type ReactNode,\n createContext,\n forwardRef,\n useContext,\n useId,\n} from \"react\";\nimport { useControllableState } from \"../../core/state/use-controllable-state\";\nimport { cx } from \"../../internal/cx\";\nimport type { ControlSize, Feedback } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\n\ninterface RadioGroupContextValue {\n name: string;\n value: string | null;\n select: (value: string) => void;\n disabled?: boolean;\n size?: ControlSize;\n variant?: \"default\" | \"card\";\n}\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nconst sizePx: Record<ControlSize, string> = { sm: \"0.95rem\", md: \"1.125rem\", lg: \"1.35rem\" };\n\ntype NativeRadio = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"size\" | \"value\"\n>;\n\nexport interface RadioProps extends NativeRadio {\n value: string;\n label?: ReactNode;\n description?: ReactNode;\n disabled?: boolean;\n size?: ControlSize;\n card?: boolean;\n labelPlacement?: \"end\" | \"start\";\n className?: string;\n}\n\nexport const Radio = /* @__PURE__ */ forwardRef<HTMLInputElement, RadioProps>(\n function Radio(props, ref) {\n const group = useContext(RadioGroupContext);\n const {\n value,\n label,\n description,\n disabled: disabledProp,\n size: sizeProp,\n card: cardProp,\n labelPlacement = \"end\",\n className,\n id: idProp,\n ...rest\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const checked = group ? group.value === value : undefined;\n const disabled = disabledProp || group?.disabled || false;\n const size = sizeProp ?? group?.size ?? \"md\";\n const card = cardProp ?? group?.variant === \"card\";\n\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.checked) group?.select(value);\n };\n\n return (\n <label\n className={cx(\n \"orynn-choice\",\n card && \"orynn-choice--card\",\n labelPlacement === \"start\" && \"orynn-choice--start\",\n className,\n )}\n data-disabled={disabled || undefined}\n style={{ \"--orynn-check-size\": sizePx[size] } as React.CSSProperties}\n >\n <input\n {...rest}\n ref={ref}\n type=\"radio\"\n className=\"orynn-choice__native\"\n id={id}\n name={group?.name}\n value={value}\n checked={group ? checked : undefined}\n disabled={disabled}\n onChange={onChange}\n />\n <span className=\"orynn-choice__control orynn-choice__control--radio\" aria-hidden=\"true\">\n <span className=\"orynn-choice__mark orynn-choice__mark--dot\" />\n </span>\n {(label != null || description != null) && (\n <span className=\"orynn-choice__text\">\n {label != null && <span className=\"orynn-choice__label\">{label}</span>}\n {description != null && <span className=\"orynn-choice__desc\">{description}</span>}\n </span>\n )}\n </label>\n );\n },\n);\n\nexport interface RadioOption {\n label: ReactNode;\n value: string;\n description?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps {\n label?: ReactNode;\n description?: ReactNode;\n error?: Feedback;\n success?: string | boolean;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n size?: ControlSize;\n variant?: \"default\" | \"card\";\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (value: string) => void;\n orientation?: \"vertical\" | \"horizontal\";\n options?: RadioOption[];\n children?: ReactNode;\n className?: string;\n id?: string;\n}\n\nexport function RadioGroup(props: RadioGroupProps) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n name: nameProp,\n size,\n variant = \"default\",\n value: valueProp,\n defaultValue = null,\n onChange,\n orientation = \"vertical\",\n options,\n children,\n className,\n id: idProp,\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const name = nameProp ?? id;\n const [value, setValue] = useControllableState<string | null>({\n value: valueProp,\n defaultValue,\n onChange: undefined,\n });\n\n const select = (v: string) => {\n setValue(v);\n onChange?.(v);\n };\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n id={id}\n className={className}\n >\n {() => (\n <RadioGroupContext.Provider value={{ name, value, select, disabled, size, variant }}>\n <div\n role=\"radiogroup\"\n aria-labelledby={label != null ? `${id}-label` : undefined}\n aria-required={required || undefined}\n className=\"orynn-choice-group\"\n data-orientation={orientation}\n >\n {options\n ? options.map((o) => (\n <Radio\n key={o.value}\n value={o.value}\n label={o.label}\n description={o.description}\n disabled={o.disabled}\n />\n ))\n : children}\n </div>\n </RadioGroupContext.Provider>\n )}\n </Field>\n );\n}\n","import {\n type ChangeEvent,\n type TextareaHTMLAttributes,\n forwardRef,\n useCallback,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n} from \"react\";\nimport { useControllableState } from \"../../core/state/use-controllable-state\";\nimport { FieldBox } from \"../../internal/FieldBox\";\nimport type { BaseControlProps } from \"../../types/common\";\nimport { Field } from \"../Field/Field\";\n\ntype NativeTextarea = Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"rows\" | \"cols\"\n>;\n\nexport interface TextareaProps\n extends Omit<BaseControlProps, \"startContent\" | \"endContent\" | \"loading\">,\n NativeTextarea {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string, event: ChangeEvent<HTMLTextAreaElement>) => void;\n /** Grow with content between `minRows` and `maxRows`. */\n autoResize?: boolean;\n minRows?: number;\n maxRows?: number;\n /** Native resize handle. Default `\"vertical\"` (`\"none\"` when `autoResize`). */\n resize?: \"none\" | \"vertical\" | \"both\";\n showCount?: boolean;\n}\n\nexport const Textarea = /* @__PURE__ */ forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(props, ref) {\n const {\n label,\n description,\n error,\n success,\n required,\n disabled,\n readOnly,\n size,\n variant,\n radius,\n floatingLabel,\n clearable,\n onClear,\n id: idProp,\n name,\n className,\n value: valueProp,\n defaultValue,\n onChange,\n autoResize,\n minRows = 3,\n maxRows = 10,\n resize,\n showCount,\n maxLength,\n placeholder,\n ...rest\n } = props;\n\n const reactId = useId();\n const id = idProp ?? reactId;\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue: defaultValue ?? \"\",\n onChange: undefined,\n });\n\n const innerRef = useRef<HTMLTextAreaElement | null>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLTextAreaElement);\n\n const resizeToFit = useCallback(() => {\n const el = innerRef.current;\n if (!el || !autoResize) return;\n el.style.height = \"auto\";\n const cs = getComputedStyle(el);\n const line = Number.parseFloat(cs.lineHeight) || 20;\n const pad = Number.parseFloat(cs.paddingTop) + Number.parseFloat(cs.paddingBottom);\n const min = line * minRows + pad;\n const max = line * maxRows + pad;\n el.style.height = `${Math.min(Math.max(el.scrollHeight, min), max)}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoResize, minRows, maxRows]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: re-fit when value changes\n useLayoutEffect(resizeToFit, [value, resizeToFit]);\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n onChange?.(e.target.value, e);\n };\n\n const hasValue = value.length > 0;\n\n return (\n <Field\n label={label}\n description={description}\n error={error}\n success={success}\n required={required}\n disabled={disabled}\n hideLabel={floatingLabel}\n id={id}\n className={className}\n >\n {({ describedById, invalid, valid }) => (\n <FieldBox\n textarea\n size={size}\n variant={variant}\n radius={radius}\n disabled={disabled}\n invalid={invalid}\n valid={valid}\n active={hasValue}\n floatingLabel={\n floatingLabel ? (\n <label className=\"orynn-box__label\" htmlFor={id}>\n {label}\n </label>\n ) : undefined\n }\n right={\n clearable && hasValue && !disabled && !readOnly ? (\n <button\n type=\"button\"\n className=\"orynn-box__iconbtn\"\n aria-label=\"Clear\"\n tabIndex={-1}\n onClick={() => {\n setValue(\"\");\n onClear?.();\n }}\n >\n ✕\n </button>\n ) : undefined\n }\n >\n <textarea\n {...rest}\n ref={innerRef}\n id={id}\n name={name}\n className=\"orynn-textarea\"\n data-resize={resize ?? (autoResize ? \"none\" : \"vertical\")}\n rows={minRows}\n value={value}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n maxLength={maxLength}\n placeholder={floatingLabel ? undefined : placeholder}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={handleChange}\n />\n {showCount && (\n <span className=\"orynn-box__footer\">\n {value.length}\n {maxLength ? `/${maxLength}` : \"\"}\n </span>\n )}\n </FieldBox>\n )}\n </Field>\n );\n },\n);\n","/**\n * Development-only helpers. `__DEV__` is statically replaceable by bundlers, so\n * `invariant` / `warnOnce` bodies tree-shake out of production builds.\n */\nexport const __DEV__: boolean =\n typeof process !== \"undefined\" && process.env?.NODE_ENV !== \"production\";\n\n/** Throws in development when `condition` is falsy. No-op in production. */\nexport function invariant(condition: unknown, message: string): asserts condition {\n if (condition) return;\n if (__DEV__) {\n throw new Error(`[orynn] ${message}`);\n }\n}\n\nconst warned = new Set<string>();\n\n/** Logs a warning once per unique message. Silent in production. */\nexport function warnOnce(message: string): void {\n if (!__DEV__ || warned.has(message)) return;\n warned.add(message);\n console.warn(`[orynn] ${message}`);\n}\n\n/** Test-only: clear the warn-once cache between cases. */\nexport function resetWarnings(): void {\n warned.clear();\n}\n","import { __DEV__, warnOnce } from \"../../internal/dev\";\nimport type { FieldRegistration, FieldRegistry } from \"../../types/control\";\n\nclass Registry implements FieldRegistry {\n #entries = new Map<string, FieldRegistration>();\n\n register(type: string, registration: FieldRegistration): void {\n if (__DEV__ && this.#entries.has(type)) {\n warnOnce(`Field type \"${type}\" is being re-registered; the previous definition is replaced.`);\n }\n this.#entries.set(type, registration);\n }\n\n get(type: string): FieldRegistration | undefined {\n return this.#entries.get(type);\n }\n\n has(type: string): boolean {\n return this.#entries.has(type);\n }\n\n types(): string[] {\n return [...this.#entries.keys()];\n }\n}\n\n/**\n * Create an isolated field registry. Use this to give a `<Fieldset>` its own set\n * of field types without touching the module-global {@link defaultRegistry}\n * (recommended on the server, where mutating a shared registry per request would\n * leak between requests).\n *\n * @experimental The registry API may change before 1.0.\n */\nexport function createRegistry(): FieldRegistry {\n return new Registry();\n}\n\n/**\n * The module-global registry used by `<Fieldset>` when no `registry` prop is\n * passed. Seeded with the built-in `input` and `dropdown` fields.\n *\n * @experimental\n */\nexport const defaultRegistry: FieldRegistry = /* @__PURE__ */ createRegistry();\n\n/**\n * Register a field type on the {@link defaultRegistry}. Call this once at\n * application start-up, not per render or per request.\n *\n * @experimental\n */\nexport function registerField(type: string, registration: FieldRegistration): void {\n defaultRegistry.register(type, registration);\n}\n","import type { ColumnSpec } from \"../types/config\";\n\n/** V1 default: 3 columns on desktop, 2 on tablet, 1 on mobile. */\nexport const DEFAULT_COLUMNS: ColumnSpec = { desktop: 3, tablet: 2, mobile: 1 };\n\nconst clampCount = (n: unknown, fallback: number): number =>\n typeof n === \"number\" && Number.isFinite(n) && n >= 1 ? Math.floor(n) : fallback;\n\n/** Merge a partial column spec onto the defaults. */\nexport function resolveColumns(partial?: Partial<ColumnSpec>): ColumnSpec {\n return {\n desktop: clampCount(partial?.desktop, DEFAULT_COLUMNS.desktop),\n tablet: clampCount(partial?.tablet, DEFAULT_COLUMNS.tablet),\n mobile: clampCount(partial?.mobile, DEFAULT_COLUMNS.mobile),\n };\n}\n\n/** Clamp a field's column span so it never exceeds the row's column count. */\nexport function clampSpan(span: unknown, columnCount: number): number {\n const n = clampCount(span, 1);\n return Math.min(n, Math.max(columnCount, 1));\n}\n","import { invariant } from \"../../internal/dev\";\nimport { resolveColumns } from \"../../layout/resolve-columns\";\nimport type { ColumnSpec, FieldConfig, FieldsetConfig } from \"../../types/config\";\nimport type { FieldRegistry } from \"../../types/control\";\n\n/** A validated `FieldsetConfig` with every default resolved. */\nexport interface NormalizedFieldsetConfig {\n fields: FieldConfig[];\n columns: ColumnSpec;\n /** CSS length for the grid gap, or `undefined` to use the token default. */\n gap: string | undefined;\n legend: string | undefined;\n id: string | undefined;\n}\n\nfunction normalizeGap(gap: FieldsetConfig[\"gap\"]): string | undefined {\n if (gap == null) return undefined;\n return typeof gap === \"number\" ? `${gap}px` : gap;\n}\n\n/**\n * Validate a `FieldsetConfig` and resolve its defaults. Structural problems\n * throw in development with an actionable message; in production the checks are\n * stripped and normalization is defensive.\n *\n * Pass `registry` (as `<Fieldset>` does) to also validate each field's `type`\n * and run type-specific config checks.\n */\nexport function normalizeConfig(\n config: FieldsetConfig,\n registry?: FieldRegistry,\n): NormalizedFieldsetConfig {\n invariant(\n config != null && typeof config === \"object\" && Array.isArray(config.fields),\n \"`config` must be an object with a `fields` array.\",\n );\n\n const seen = new Set<string>();\n\n for (const field of config.fields) {\n invariant(\n field != null && typeof field === \"object\",\n \"Every entry in `config.fields` must be an object.\",\n );\n invariant(\n typeof field.name === \"string\" && field.name.length > 0,\n \"Every field needs a non-empty string `name`.\",\n );\n invariant(!seen.has(field.name), `Duplicate field name \"${field.name}\" in config.fields.`);\n seen.add(field.name);\n invariant(\n typeof field.type === \"string\" && field.type.length > 0,\n `Field \"${field.name}\" is missing a \"type\".`,\n );\n\n if (registry) {\n invariant(\n registry.has(field.type),\n `Unknown field type \"${field.type}\" on field \"${field.name}\". ` +\n `Registered types: ${registry.types().join(\", \") || \"(none)\"}.`,\n );\n const typeError = registry.get(field.type)?.validateConfig?.(field);\n invariant(typeError == null, `Field \"${field.name}\" (${field.type}): ${typeError}`);\n }\n }\n\n return {\n fields: config.fields,\n columns: resolveColumns(config.columns),\n gap: normalizeGap(config.gap),\n legend: config.legend,\n id: config.id,\n };\n}\n","/** Formats the default message for a built-in rule token. */\ntype MessageFormatter = (ctx: { param: unknown; label: string }) => string;\n\nconst plural = (n: unknown, word: string) => `${n} ${word}${n === 1 ? \"\" : \"s\"}`;\n\n/** Default message templates for the built-in rules. */\nexport const defaultMessages: Record<string, MessageFormatter> = {\n required: ({ label }) => `${label} is required`,\n minLength: ({ param, label }) => `${label} must be at least ${plural(param, \"character\")}`,\n maxLength: ({ param, label }) => `${label} must be at most ${plural(param, \"character\")}`,\n};\n\nconst FALLBACK_LABEL = \"This field\";\n\n/**\n * Resolve the message for a failed rule.\n *\n * Precedence: a per-field override (`validation.messages[token]`) wins; otherwise\n * a built-in template is used; otherwise the token itself is the message (custom\n * rules return a ready-to-show string).\n */\nexport function resolveMessage(\n token: string,\n param: unknown,\n label: string | undefined,\n overrides: Partial<Record<string, string>> | undefined,\n): string {\n const override = overrides?.[token];\n if (override != null) return override;\n\n const formatter = defaultMessages[token];\n if (formatter) return formatter({ param, label: label ?? FALLBACK_LABEL });\n\n return token;\n}\n","import type { RuleFn } from \"../../types/validation\";\n\nconst isEmpty = (value: unknown): boolean =>\n value == null || value === \"\" || (Array.isArray(value) && value.length === 0);\n\nconst asLength = (value: unknown): number =>\n typeof value === \"string\" || Array.isArray(value) ? value.length : String(value ?? \"\").length;\n\n/**\n * Built-in rules. Each returns a token (rule name) on failure or `null` on\n * success; the resolver turns the token into a user-facing message.\n *\n * `minLength` deliberately ignores empty values so `required` owns that error.\n */\nexport const builtInRules: { required: RuleFn; minLength: RuleFn; maxLength: RuleFn } = {\n required: (value, param) => {\n if (param === false) return null;\n return isEmpty(value) ? \"required\" : null;\n },\n minLength: (value, param) => {\n if (typeof param !== \"number\" || isEmpty(value)) return null;\n return asLength(value) < param ? \"minLength\" : null;\n },\n maxLength: (value, param) => {\n if (typeof param !== \"number\" || isEmpty(value)) return null;\n return asLength(value) > param ? \"maxLength\" : null;\n },\n};\n\nconst registry = new Map<string, RuleFn>(Object.entries(builtInRules));\n\n/**\n * Register a validation rule for the built-in resolver. A field opts in by\n * adding a key of the same name to its `validation` config.\n *\n * @experimental The rule API may change before 1.0.\n */\nexport function registerRule(name: string, fn: RuleFn): void {\n registry.set(name, fn);\n}\n\nexport function getRule(name: string): RuleFn | undefined {\n return registry.get(name);\n}\n\nexport function ruleNames(): string[] {\n return [...registry.keys()];\n}\n","import { __DEV__, warnOnce } from \"../../internal/dev\";\nimport type { FieldsetConfig } from \"../../types/config\";\nimport type {\n FieldError,\n ValidationContext,\n ValidationResolver,\n ValidationResult,\n} from \"../../types/validation\";\nimport { resolveMessage } from \"./messages\";\nimport { getRule } from \"./rules\";\n\n/** A synchronous resolver — the built-in resolver's precise return type. */\nexport type SyncResolver = (\n values: Record<string, unknown>,\n config: FieldsetConfig,\n context: ValidationContext,\n) => ValidationResult;\n\n/**\n * The default, rule-based {@link ValidationResolver}. For every field with a\n * `validation` block, each key (other than `messages`) is looked up in the rule\n * registry and run against the field's current value. All fields are validated\n * on every call; callers decide which errors to surface.\n *\n * Synchronous today. Async, schema-based, and cross-field resolvers plug in at\n * the same seam without an API change.\n */\nexport function createRuleResolver(): SyncResolver {\n return (values, config): ValidationResult => {\n const result: ValidationResult = {};\n\n for (const field of config.fields) {\n const validation = field.validation;\n if (!validation) continue;\n\n const value = values[field.name];\n const errors: FieldError[] = [];\n\n for (const key of Object.keys(validation)) {\n if (key === \"messages\") continue;\n\n const param = (validation as Record<string, unknown>)[key];\n if (param === undefined || param === false) continue;\n\n const rule = getRule(key);\n if (!rule) {\n if (__DEV__) {\n warnOnce(`No validator registered for rule \"${key}\" (field \"${field.name}\").`);\n }\n continue;\n }\n\n const token = rule(value, param, values);\n if (token == null) continue;\n\n errors.push({\n rule: key,\n message: resolveMessage(token, param, field.label, validation.messages),\n });\n }\n\n if (errors.length > 0) result[field.name] = errors;\n }\n\n return result;\n };\n}\n\n/** Shared default instance. */\nexport const defaultResolver: ValidationResolver = /* @__PURE__ */ createRuleResolver();\n","import type { FieldStatus } from \"../../types/state\";\nimport type { FieldError, ValidationResult } from \"../../types/validation\";\n\n/** Internal state: everything the fieldset tracks except `values`. */\nexport interface MetaState {\n touched: Record<string, boolean>;\n errors: ValidationResult;\n validating: boolean;\n /** True once any validation run has completed — distinguishes \"idle\" from \"valid\". */\n everValidated: boolean;\n}\n\nexport const initialMeta: MetaState = {\n touched: {},\n errors: {},\n validating: false,\n everValidated: false,\n};\n\nexport type MetaAction =\n | { type: \"touch\"; name: string }\n | { type: \"touchAll\"; names: string[] }\n | { type: \"validation:start\" }\n | { type: \"validation:field\"; name: string; errors: FieldError[] }\n | { type: \"validation:all\"; result: ValidationResult }\n | { type: \"reset\" };\n\nexport function metaReducer(state: MetaState, action: MetaAction): MetaState {\n switch (action.type) {\n case \"touch\": {\n if (state.touched[action.name]) return state;\n return { ...state, touched: { ...state.touched, [action.name]: true } };\n }\n case \"touchAll\": {\n const touched = { ...state.touched };\n for (const name of action.names) touched[name] = true;\n return { ...state, touched };\n }\n case \"validation:start\":\n return { ...state, validating: true };\n case \"validation:field\": {\n const errors = { ...state.errors };\n if (action.errors.length > 0) errors[action.name] = action.errors;\n else delete errors[action.name];\n return { ...state, errors, validating: false, everValidated: true };\n }\n case \"validation:all\":\n return { ...state, errors: action.result, validating: false, everValidated: true };\n case \"reset\":\n return { ...initialMeta };\n default:\n return state;\n }\n}\n\n/** Derive the form-level status roll-up. */\nexport function deriveStatus(meta: MetaState): FieldStatus {\n if (meta.validating) return \"validating\";\n if (!meta.everValidated) return \"idle\";\n return Object.keys(meta.errors).length > 0 ? \"invalid\" : \"valid\";\n}\n\n/** Shallow per-field dirty map: current value differs from initial. */\nexport function computeDirty(\n values: Record<string, unknown>,\n initial: Record<string, unknown>,\n): Record<string, boolean> {\n const dirty: Record<string, boolean> = {};\n for (const key of Object.keys(values)) {\n if (!Object.is(values[key], initial[key])) dirty[key] = true;\n }\n return dirty;\n}\n","import { useCallback, useMemo, useReducer, useRef } from \"react\";\nimport type { FormEvent } from \"react\";\nimport type { FieldsetConfig } from \"../../types/config\";\nimport type { FieldRegistry } from \"../../types/control\";\nimport type { FieldStatus, FieldsetState } from \"../../types/state\";\nimport type {\n FieldError,\n ValidationResolver,\n ValidationResult,\n ValidationTrigger,\n} from \"../../types/validation\";\nimport { type NormalizedFieldsetConfig, normalizeConfig } from \"../config/normalize\";\nimport { defaultResolver } from \"../validation/resolver\";\nimport { computeDirty, deriveStatus, initialMeta, metaReducer } from \"./reducer\";\nimport { useControllableState } from \"./use-controllable-state\";\nimport { useLatestRef } from \"./use-latest-ref\";\n\ntype Values = Record<string, unknown>;\n\n/** Shared empty errors array so unchanged field slices keep a stable identity. */\nconst NO_ERRORS: readonly FieldError[] = Object.freeze([]);\n\nexport interface UseFieldsetStateOptions<TValues extends Values = Values> {\n /** Controlled values. Omit and pass `defaultValue` for uncontrolled. */\n value?: TValues;\n defaultValue?: Partial<TValues>;\n onChange?: (values: TValues) => void;\n /** Called after a full validation pass (`validate()` / submit), not per blur. */\n onValidationChange?: (result: ValidationResult) => void;\n resolver?: ValidationResolver;\n registry?: FieldRegistry;\n /** `\"blur\"` (default) also always validates on submit. */\n validateOn?: ValidationTrigger;\n}\n\n/** Everything a renderer needs for one field. Handlers are referentially stable. */\nexport interface FieldSlice {\n name: string;\n value: unknown;\n errors: FieldError[];\n touched: boolean;\n dirty: boolean;\n setValue: (value: unknown) => void;\n markTouched: () => void;\n}\n\nexport interface UseFieldsetStateReturn<TValues extends Values = Values> {\n config: NormalizedFieldsetConfig;\n state: FieldsetState;\n values: TValues;\n errors: ValidationResult;\n touched: Record<string, boolean>;\n dirty: Record<string, boolean>;\n status: FieldStatus;\n isValid: boolean;\n setFieldValue: (name: string, value: unknown) => void;\n setValues: (values: TValues) => void;\n reset: (next?: Partial<TValues>) => void;\n validate: () => Promise<ValidationResult>;\n handleSubmit: (\n onValid: (values: TValues) => void,\n onInvalid?: (result: ValidationResult) => void,\n ) => (event?: FormEvent) => void;\n getFieldProps: (name: string) => FieldSlice;\n}\n\nfunction computeInitialValues(\n config: NormalizedFieldsetConfig,\n registry: FieldRegistry | undefined,\n provided: Values | undefined,\n): Values {\n const out: Values = {};\n for (const field of config.fields) {\n if (provided && Object.prototype.hasOwnProperty.call(provided, field.name)) {\n out[field.name] = provided[field.name];\n } else if (field.defaultValue !== undefined) {\n out[field.name] = field.defaultValue;\n } else {\n out[field.name] = registry?.get(field.type)?.defaultValue ?? \"\";\n }\n }\n return out;\n}\n\ninterface RunScope {\n field?: string;\n trigger: ValidationTrigger;\n values?: Values;\n}\n\n/**\n * The form engine behind `<Fieldset>`, usable directly when you want to own the\n * markup. Manages values (controlled or uncontrolled), touched/dirty tracking,\n * and validation through a pluggable resolver.\n */\nexport function useFieldsetState<TValues extends Values = Values>(\n config: FieldsetConfig,\n options: UseFieldsetStateOptions<TValues> = {},\n): UseFieldsetStateReturn<TValues> {\n const {\n value,\n defaultValue,\n onChange,\n onValidationChange,\n resolver = defaultResolver,\n registry,\n validateOn = \"blur\",\n } = options;\n\n const normalized = useMemo(() => normalizeConfig(config, registry), [config, registry]);\n\n const initialRef = useRef<Values | null>(null);\n if (initialRef.current === null) {\n initialRef.current = computeInitialValues(\n normalized,\n registry,\n (value ?? defaultValue) as Values | undefined,\n );\n }\n\n const [rawValues, setRawValues] = useControllableState<Values>({\n value: value as Values | undefined,\n defaultValue: initialRef.current,\n onChange: onChange as ((v: Values) => void) | undefined,\n });\n\n const values = useMemo(() => ({ ...initialRef.current, ...rawValues }) as TValues, [rawValues]);\n\n const [meta, dispatch] = useReducer(metaReducer, initialMeta);\n\n const valuesRef = useLatestRef<Values>(values);\n const resolverRef = useLatestRef(resolver);\n const configRef = useLatestRef(config);\n const normalizedRef = useLatestRef(normalized);\n const registryRef = useLatestRef(registry);\n const validateOnRef = useLatestRef(validateOn);\n const onValidationChangeRef = useLatestRef(onValidationChange);\n const runIdRef = useRef(0);\n\n const runValidation = useCallback(async (scope: RunScope): Promise<ValidationResult> => {\n const runId = ++runIdRef.current;\n const input = scope.values ?? valuesRef.current;\n dispatch({ type: \"validation:start\" });\n\n const result = await resolverRef.current(input, configRef.current, {\n trigger: scope.trigger,\n ...(scope.field ? { changedField: scope.field } : {}),\n });\n\n if (runId !== runIdRef.current) return result; // superseded\n\n if (scope.field) {\n dispatch({ type: \"validation:field\", name: scope.field, errors: result[scope.field] ?? [] });\n } else {\n dispatch({ type: \"validation:all\", result });\n onValidationChangeRef.current?.(result);\n }\n return result;\n // refs only — safe to keep stable\n }, []);\n\n const setFieldValue = useCallback(\n (name: string, next: unknown) => {\n setRawValues((prev) => ({ ...prev, [name]: next }));\n if (validateOnRef.current === \"change\") {\n void runValidation({\n field: name,\n trigger: \"change\",\n values: { ...valuesRef.current, [name]: next },\n });\n }\n },\n [setRawValues, runValidation],\n );\n\n const setValues = useCallback((next: TValues) => setRawValues(next as Values), [setRawValues]);\n\n const markTouched = useCallback(\n (name: string) => {\n dispatch({ type: \"touch\", name });\n if (validateOnRef.current === \"blur\") {\n void runValidation({ field: name, trigger: \"blur\" });\n }\n },\n [runValidation],\n );\n\n const validate = useCallback(() => runValidation({ trigger: \"submit\" }), [runValidation]);\n\n const handleSubmit = useCallback(\n (onValid: (values: TValues) => void, onInvalid?: (result: ValidationResult) => void) =>\n async (event?: FormEvent) => {\n event?.preventDefault?.();\n dispatch({\n type: \"touchAll\",\n names: normalizedRef.current.fields.map((f) => f.name),\n });\n const result = await runValidation({ trigger: \"submit\" });\n if (Object.keys(result).length === 0) onValid(valuesRef.current as TValues);\n else onInvalid?.(result);\n },\n [runValidation],\n );\n\n const reset = useCallback(\n (next?: Partial<TValues>) => {\n const fresh = computeInitialValues(\n normalizedRef.current,\n registryRef.current,\n next as Values | undefined,\n );\n initialRef.current = fresh;\n setRawValues(fresh);\n dispatch({ type: \"reset\" });\n runIdRef.current++;\n },\n [setRawValues],\n );\n\n // Stable per-field handler identities so memoized rows don't re-render.\n const handlerCacheRef = useRef(\n new Map<string, { setValue: (v: unknown) => void; markTouched: () => void }>(),\n );\n const getHandlers = useCallback(\n (name: string) => {\n const cache = handlerCacheRef.current;\n let entry = cache.get(name);\n if (!entry) {\n entry = {\n setValue: (v: unknown) => setFieldValue(name, v),\n markTouched: () => markTouched(name),\n };\n cache.set(name, entry);\n }\n return entry;\n },\n [setFieldValue, markTouched],\n );\n\n const dirty = useMemo(() => computeDirty(values, initialRef.current ?? {}), [values]);\n const status = deriveStatus(meta);\n const isValid = Object.keys(meta.errors).length === 0;\n\n const getFieldProps = useCallback(\n (name: string): FieldSlice => {\n const handlers = getHandlers(name);\n return {\n name,\n value: (values as Values)[name],\n errors: meta.errors[name] ?? (NO_ERRORS as FieldError[]),\n touched: meta.touched[name] ?? false,\n dirty: dirty[name] ?? false,\n setValue: handlers.setValue,\n markTouched: handlers.markTouched,\n };\n },\n [values, meta.errors, meta.touched, dirty, getHandlers],\n );\n\n const state: FieldsetState = useMemo(\n () => ({\n values: values as Values,\n touched: meta.touched,\n dirty,\n errors: meta.errors,\n status,\n }),\n [values, meta.touched, dirty, meta.errors, status],\n );\n\n return {\n config: normalized,\n state,\n values,\n errors: meta.errors,\n touched: meta.touched,\n dirty,\n status,\n isValid,\n setFieldValue,\n setValues,\n reset,\n validate,\n handleSubmit,\n getFieldProps,\n };\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { cx } from \"../internal/cx\";\nimport type { ColumnSpec } from \"../types/config\";\nimport { clampSpan } from \"./resolve-columns\";\n\n/** CSS custom properties are set inline; the stylesheet consumes them. */\ntype CssVars = CSSProperties & Record<`--${string}`, string | number>;\n\nexport interface FieldGridProps {\n columns: ColumnSpec;\n /** CSS length for the gap; falls back to the `--orynn-grid-gap` token. */\n gap?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\n/**\n * Responsive grid. Column counts per breakpoint are passed as CSS variables and\n * applied by the stylesheet through container queries, so the grid responds to\n * its own width rather than the viewport.\n */\nexport function FieldGrid({ columns, gap, className, children }: FieldGridProps) {\n const style: CssVars = {\n \"--orynn-cols-desktop\": columns.desktop,\n \"--orynn-cols-tablet\": columns.tablet,\n \"--orynn-cols-mobile\": columns.mobile,\n ...(gap ? { \"--orynn-grid-gap\": gap } : {}),\n };\n\n return (\n <div className={cx(\"orynn-grid\", className)} style={style}>\n <div className=\"orynn-grid__track\">{children}</div>\n </div>\n );\n}\n\nexport interface FieldGridItemProps {\n /** Per-breakpoint column span; missing breakpoints default to 1. */\n span?: Partial<ColumnSpec> | undefined;\n columns: ColumnSpec;\n children: ReactNode;\n}\n\n/** One cell of a {@link FieldGrid}, optionally spanning multiple columns. */\nexport function FieldGridItem({ span, columns, children }: FieldGridItemProps) {\n if (!span) return <>{children}</>;\n\n const style: CssVars = {\n \"--orynn-span-desktop\": clampSpan(span.desktop, columns.desktop),\n \"--orynn-span-tablet\": clampSpan(span.tablet, columns.tablet),\n \"--orynn-span-mobile\": clampSpan(span.mobile, columns.mobile),\n };\n\n return (\n <div className=\"orynn-grid__item\" style={style}>\n {children}\n </div>\n );\n}\n","import { memo } from \"react\";\nimport { Field } from \"../controls/Field/Field\";\nimport type { FieldSlice } from \"../core/state/use-fieldset-state\";\nimport { invariant } from \"../internal/dev\";\nimport type { FieldConfig } from \"../types/config\";\nimport type { FieldRegistry } from \"../types/control\";\n\nconst noop = () => {};\n\nexport interface FieldRendererProps {\n field: FieldConfig;\n registry: FieldRegistry;\n slice: FieldSlice;\n disabled?: boolean;\n}\n\nfunction FieldRendererImpl({ field, registry, slice, disabled }: FieldRendererProps) {\n const registration = registry.get(field.type);\n invariant(\n registration,\n `No control registered for field type \"${field.type}\" (field \"${field.name}\").`,\n );\n if (!registration) return null;\n\n const Control = registration.component;\n const required = field.validation?.required === true;\n const isDisabled = disabled === true || field.disabled === true;\n\n const value = registration.parseValue ? registration.parseValue(slice.value) : slice.value;\n // The hook decides *when* a field is validated (per `validateOn`); if it has\n // produced errors for this field, show them.\n const messages = slice.errors.map((e) => e.message);\n\n const handleChange = (next: unknown) => {\n slice.setValue(registration.formatValue ? registration.formatValue(next) : next);\n };\n\n return (\n <Field\n label={field.label}\n description={field.description}\n error={messages}\n required={required}\n disabled={isDisabled}\n >\n {({ id, describedById, invalid }) => (\n <Control\n id={id}\n name={field.name}\n value={value}\n onChange={handleChange}\n onBlur={slice.markTouched}\n onFocus={noop}\n disabled={isDisabled}\n readOnly={field.readOnly === true}\n required={required}\n invalid={invalid}\n describedById={describedById}\n config={field}\n />\n )}\n </Field>\n );\n}\n\n/**\n * Resolves a field config to its registered control and wraps it in `<Field>`.\n * Memoized on the parts of the slice that affect output so that changing one\n * field in a large fieldset does not re-render the others.\n */\nexport const FieldRenderer = /* @__PURE__ */ memo(\n FieldRendererImpl,\n (prev, next) =>\n prev.field === next.field &&\n prev.registry === next.registry &&\n prev.disabled === next.disabled &&\n prev.slice.value === next.slice.value &&\n prev.slice.touched === next.slice.touched &&\n prev.slice.errors === next.slice.errors &&\n prev.slice.setValue === next.slice.setValue &&\n prev.slice.markTouched === next.slice.markTouched,\n);\n","import type { DropdownFieldConfig, InputFieldConfig } from \"../types/config\";\nimport type { ControlComponent, FieldRegistry } from \"../types/control\";\n\nconst toStringValue = (value: unknown): string =>\n typeof value === \"string\" ? value : value == null ? \"\" : String(value);\n\n/** Raw `<input>` bound to the {@link ControlProps} contract. `<Field>` wraps it. */\nconst InputControl: ControlComponent<string> = ({\n id,\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n readOnly,\n required,\n invalid,\n describedById,\n config,\n}) => {\n const field = config as InputFieldConfig;\n return (\n <input\n id={id}\n name={name}\n className=\"orynn-input\"\n type={field.inputType ?? \"text\"}\n value={toStringValue(value)}\n placeholder={field.placeholder}\n required={required}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={(event) => onChange(event.target.value, event)}\n onBlur={onBlur}\n onFocus={onFocus}\n {...field.props}\n />\n );\n};\n\n/** Raw `<select>` bound to the {@link ControlProps} contract. */\nconst DropdownControl: ControlComponent<string> = ({\n id,\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled,\n required,\n invalid,\n describedById,\n config,\n}) => {\n const field = config as DropdownFieldConfig;\n return (\n <select\n id={id}\n name={name}\n className=\"orynn-dropdown\"\n value={toStringValue(value)}\n required={required}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-describedby={describedById}\n onChange={(event) => onChange(event.target.value, event)}\n onBlur={onBlur}\n onFocus={onFocus}\n {...field.props}\n >\n {field.placeholder != null && (\n <option value=\"\" disabled={required}>\n {field.placeholder}\n </option>\n )}\n {field.options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n );\n};\n\n/**\n * Seed a registry with the V1 built-in field types. Idempotent: existing\n * registrations (e.g. a consumer override) are left untouched.\n */\nexport function registerBuiltins(registry: FieldRegistry): void {\n if (!registry.has(\"input\")) {\n registry.register(\"input\", { component: InputControl, defaultValue: \"\" });\n }\n if (!registry.has(\"dropdown\")) {\n registry.register(\"dropdown\", {\n component: DropdownControl,\n defaultValue: \"\",\n validateConfig: (config) =>\n Array.isArray((config as Partial<DropdownFieldConfig>).options)\n ? null\n : \"a dropdown field requires an `options` array\",\n });\n }\n}\n\nlet seeded = false;\n\n/**\n * Register the built-ins on the module-global registry exactly once, lazily.\n * Called from `useFieldsetState` / `<Fieldset>` rather than at module load so\n * that importing a standalone control never pulls the built-ins (and the\n * validation engine) into the bundle.\n */\nexport function ensureBuiltins(defaultRegistry: FieldRegistry): void {\n if (seeded) return;\n seeded = true;\n registerBuiltins(defaultRegistry);\n}\n","import { defaultRegistry } from \"../core/registry/registry\";\nimport { type UseFieldsetStateOptions, useFieldsetState } from \"../core/state/use-fieldset-state\";\nimport { cx } from \"../internal/cx\";\nimport { FieldGrid, FieldGridItem } from \"../layout/FieldGrid\";\nimport type { FieldsetProps } from \"../types/props\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { ensureBuiltins } from \"./register-builtins\";\n\n/**\n * Renders a form (or a form section) from a `FieldsetConfig`. Controlled when\n * `value` is passed, uncontrolled otherwise. Renders a native `<fieldset>` — so\n * `disabled` cascades to every control — and does not render its own `<form>`;\n * wrap it in one and use `useFieldsetState().handleSubmit` for submission.\n */\nexport function Fieldset<TValues extends Record<string, unknown> = Record<string, unknown>>(\n props: FieldsetProps<TValues>,\n) {\n const {\n config,\n value,\n defaultValue,\n onChange,\n onValidationChange,\n resolver,\n registry,\n validateOn,\n disabled,\n className,\n id,\n } = props;\n\n ensureBuiltins(defaultRegistry);\n const activeRegistry = registry ?? defaultRegistry;\n\n const options: UseFieldsetStateOptions<TValues> = {\n registry: activeRegistry,\n ...(value !== undefined ? { value } : {}),\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(onChange ? { onChange } : {}),\n ...(onValidationChange ? { onValidationChange } : {}),\n ...(resolver ? { resolver } : {}),\n ...(validateOn ? { validateOn } : {}),\n };\n\n const fs = useFieldsetState<TValues>(config, options);\n const { columns, gap, legend, fields, id: configId } = fs.config;\n\n return (\n <fieldset\n className={cx(\"orynn-fieldset\", className)}\n id={id ?? configId}\n disabled={disabled || undefined}\n >\n {legend != null && <legend className=\"orynn-fieldset__legend\">{legend}</legend>}\n <FieldGrid columns={columns} gap={gap}>\n {fields.map((field) => (\n <FieldGridItem key={field.name} span={field.layout} columns={columns}>\n <FieldRenderer\n field={field}\n registry={activeRegistry}\n slice={fs.getFieldProps(field.name)}\n disabled={disabled === true}\n />\n </FieldGridItem>\n ))}\n </FieldGrid>\n </fieldset>\n );\n}\n","import type { CSSProperties } from \"react\";\n\n/** Built-in colour presets. Each maps to `[data-orynn-theme=\"…\"]` in the stylesheet. */\nexport type OrynnPreset = \"default\" | \"slate\" | \"teal\" | \"violet\" | \"rose\" | \"emerald\";\n\n/** Vertical rhythm / sizing. Maps to `[data-orynn-density=\"…\"]`. */\nexport type OrynnDensity = \"compact\" | \"comfortable\" | \"spacious\";\n\nexport type OrynnRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"pill\" | (string & {}) | number;\n\n/** Any `--orynn-*` custom property. */\nexport type OrynnVarOverrides = Partial<Record<`--orynn-${string}`, string | number>>;\n\nexport interface OrynnThemeConfig {\n /** Colour preset. Defaults to `\"default\"` (indigo). */\n preset?: OrynnPreset;\n density?: OrynnDensity;\n /** Highlight / accent colour. Any CSS colour — overrides the preset's accent. */\n accent?: string;\n /** Foreground colour to pair with a custom `accent` (auto-picked from luminance if omitted). */\n accentContrast?: string;\n /** `--orynn-font-family`. */\n font?: string;\n /** Base font size, e.g. `\"15px\"` or `\"0.95rem\"`. */\n fontSize?: string | number;\n /** Corner radius applied to controls. Keyword, CSS length, or px number. */\n radius?: OrynnRadius;\n /** Default control width. `\"100%\"` by default; e.g. `\"20rem\"` or `320`. */\n controlWidth?: string | number;\n /** Focus-ring colour. */\n ring?: string;\n /** Escape hatch: any `--orynn-*` variables verbatim. */\n vars?: OrynnVarOverrides;\n}\n\n/** `theme` prop accepts a preset name shorthand or a full config. */\nexport type OrynnThemeInput = OrynnPreset | OrynnThemeConfig;\n\nconst RADIUS_KEYWORDS = new Set([\"none\", \"sm\", \"md\", \"lg\", \"pill\"]);\nconst len = (v: string | number) => (typeof v === \"number\" ? `${v}px` : v);\n\n/** Relative luminance → pick black/white text for a custom accent. */\nfunction contrastFor(color: string): string {\n const m = /^#?([\\da-f]{3}|[\\da-f]{6})$/i.exec(color.trim());\n if (!m?.[1]) return \"#ffffff\";\n const hex = m[1].length === 3 ? m[1].replace(/./g, \"$&$&\") : m[1];\n const n = Number.parseInt(hex, 16);\n const toLin = (v: number) => {\n const c = v / 255;\n return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n };\n const lum =\n 0.2126 * toLin((n >> 16) & 255) + 0.7152 * toLin((n >> 8) & 255) + 0.0722 * toLin(n & 255);\n return lum > 0.42 ? \"#0b0d12\" : \"#ffffff\";\n}\n\nexport function normalizeTheme(input: OrynnThemeInput | undefined): OrynnThemeConfig {\n return typeof input === \"string\" ? { preset: input } : (input ?? {});\n}\n\n/** Build the inline CSS-variable style object for a theme config. */\nexport function resolveThemeVars(config: OrynnThemeConfig): CSSProperties {\n const vars: Record<string, string> = {};\n\n if (config.accent) {\n vars[\"--orynn-color-accent\"] = config.accent;\n vars[\"--orynn-color-accent-hover\"] = `color-mix(in srgb, ${config.accent} 86%, #000)`;\n vars[\"--orynn-color-accent-contrast\"] = config.accentContrast ?? contrastFor(config.accent);\n }\n if (config.ring) vars[\"--orynn-color-focus-ring\"] = config.ring;\n if (config.font) vars[\"--orynn-font-family\"] = config.font;\n if (config.fontSize != null) vars[\"--orynn-font-size\"] = len(config.fontSize);\n if (config.controlWidth != null) vars[\"--orynn-control-width\"] = len(config.controlWidth);\n if (config.radius != null) {\n const r = config.radius;\n if (r === \"md\") vars[\"--orynn-radius\"] = \"10px\";\n else if (typeof r === \"string\" && RADIUS_KEYWORDS.has(r))\n vars[\"--orynn-radius\"] = `var(--orynn-radius-${r})`;\n else vars[\"--orynn-radius\"] = len(r as string | number);\n }\n\n Object.assign(vars, config.vars ?? {});\n return vars as CSSProperties;\n}\n","import { type ReactNode, createContext, useContext, useMemo } from \"react\";\nimport { cx } from \"../internal/cx\";\nimport {\n type OrynnDensity,\n type OrynnPreset,\n type OrynnThemeConfig,\n type OrynnThemeInput,\n normalizeTheme,\n resolveThemeVars,\n} from \"./theme\";\n\ninterface OrynnContextValue {\n preset: OrynnPreset;\n density: OrynnDensity;\n config: OrynnThemeConfig;\n}\n\nconst OrynnContext = createContext<OrynnContextValue>({\n preset: \"default\",\n density: \"comfortable\",\n config: {},\n});\n\nexport interface OrynnProviderProps {\n /** Preset name (`\"teal\"`) or a full config object. */\n theme?: OrynnThemeInput;\n /** Render a `<div>` (default) or a different element / no wrapper (`\"contents\"`). */\n as?: \"div\" | \"span\" | \"contents\";\n className?: string;\n children: ReactNode;\n}\n\n/**\n * Scopes an Orynn theme to its subtree by setting `data-orynn-theme`,\n * `data-orynn-density` and any custom `--orynn-*` variables on a wrapper element.\n * Purely CSS custom properties — no runtime styling engine. Nesting is supported;\n * an inner provider overrides only what it sets.\n */\nexport function OrynnProvider({ theme, as = \"div\", className, children }: OrynnProviderProps) {\n const config = useMemo(() => normalizeTheme(theme), [theme]);\n const preset = config.preset ?? \"default\";\n const density = config.density ?? \"comfortable\";\n const style = useMemo(() => resolveThemeVars(config), [config]);\n\n const ctx = useMemo<OrynnContextValue>(\n () => ({ preset, density, config }),\n [preset, density, config],\n );\n\n const dataProps = {\n \"data-orynn-theme\": preset === \"default\" ? undefined : preset,\n \"data-orynn-density\": density === \"comfortable\" ? undefined : density,\n };\n\n return (\n <OrynnContext.Provider value={ctx}>\n {as === \"contents\" ? (\n <div style={{ display: \"contents\" }} {...dataProps}>\n {children}\n </div>\n ) : as === \"span\" ? (\n <span className={cx(\"orynn-root\", className)} style={style} {...dataProps}>\n {children}\n </span>\n ) : (\n <div className={cx(\"orynn-root\", className)} style={style} {...dataProps}>\n {children}\n </div>\n )}\n </OrynnContext.Provider>\n );\n}\n\n/** Read the nearest Orynn theme config. */\nexport function useOrynnTheme(): OrynnContextValue {\n return useContext(OrynnContext);\n}\n","import type { FieldsetConfig } from \"./config\";\n\n/**\n * Per-field validation config. V1 ships `required` / `minLength` / `maxLength`.\n * Future rule keys (regex, email, min, max, validate, ...) are added here without\n * a breaking change.\n */\nexport interface FieldValidation {\n required?: boolean;\n minLength?: number;\n maxLength?: number;\n /** Per-rule message overrides, e.g. `{ required: \"Name is required\" }`. */\n messages?: Partial<Record<string, string>>;\n}\n\n/** A single validation failure. Shape is frozen — new fields must stay optional. */\nexport interface FieldError {\n /** Rule that failed: `\"required\"`, `\"minLength\"`, `\"custom\"`, `\"async\"`, ... */\n rule: string;\n message: string;\n /** Reserved for cross-field / nested errors. Unused in V1. */\n path?: string;\n}\n\n/**\n * Validation output. Key = field name. The reserved key `\"$form\"` holds\n * form-level / cross-field errors.\n */\nexport type ValidationResult = Record<string, FieldError[]>;\n\n/** Reserved key in {@link ValidationResult} for form-level errors. */\nexport const FORM_ERROR_KEY = \"$form\" as const;\n\n/** What triggered a validation run. */\nexport type ValidationTrigger = \"change\" | \"blur\" | \"submit\";\n\nexport interface ValidationContext {\n /** Field whose change/blur triggered this run, if any. */\n changedField?: string;\n trigger: ValidationTrigger;\n}\n\n/**\n * The single seam through which all validation flows. V1's default resolver is\n * rule-based and synchronous; the `Promise` return type keeps async, schema, and\n * cross-field validation additive.\n */\nexport type ValidationResolver = (\n values: Record<string, unknown>,\n config: FieldsetConfig,\n context: ValidationContext,\n) => ValidationResult | Promise<ValidationResult>;\n\n/**\n * A single rule implementation. Returns an error message string on failure, or\n * `null` on success. `allValues` is passed so cross-field rules need no\n * signature change later.\n */\nexport type RuleFn = (\n value: unknown,\n param: unknown,\n allValues: Record<string, unknown>,\n) => string | null;\n"]}