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.d.cts CHANGED
@@ -1,5 +1,152 @@
1
1
  import * as react from 'react';
2
- import { ComponentType, SyntheticEvent, SelectHTMLAttributes, ReactNode, ChangeEvent, InputHTMLAttributes, FormEvent } from 'react';
2
+ import { ReactNode, HTMLAttributes, InputHTMLAttributes, ChangeEvent, ComponentType, SyntheticEvent, TextareaHTMLAttributes, CSSProperties, FormEvent } from 'react';
3
+
4
+ type ControlSize = "sm" | "md" | "lg";
5
+ type ControlVariant = "outline" | "filled" | "flushed" | "unstyled";
6
+ type ControlRadius = "none" | "sm" | "md" | "lg" | "pill";
7
+ interface FieldBoxOwnProps {
8
+ size?: ControlSize;
9
+ variant?: ControlVariant;
10
+ radius?: ControlRadius;
11
+ disabled?: boolean;
12
+ invalid?: boolean;
13
+ /** Success / valid visual state. */
14
+ valid?: boolean;
15
+ /** Controlled focus ring. Omit to auto-track via focus-within. */
16
+ focused?: boolean;
17
+ /** Whether the floating label is raised (usually focused || has value). */
18
+ active?: boolean;
19
+ /** Rotates a chevron marked `.orynn-select__chevron`. */
20
+ open?: boolean;
21
+ /** Floating label node (usually a `<label class="orynn-box__label">`). */
22
+ floatingLabel?: ReactNode;
23
+ left?: ReactNode;
24
+ right?: ReactNode;
25
+ /** Adds `.orynn-box--textarea` sizing. */
26
+ textarea?: boolean;
27
+ }
28
+ interface FieldBoxProps extends FieldBoxOwnProps, Omit<HTMLAttributes<HTMLDivElement>, "children"> {
29
+ children: ReactNode;
30
+ }
31
+ declare const FieldBox: react.ForwardRefExoticComponent<FieldBoxProps & react.RefAttributes<HTMLDivElement>>;
32
+
33
+ /** One message, several messages, or nothing. */
34
+ type Feedback = string | string[] | undefined;
35
+ /**
36
+ * Props shared by every labelled control (Input, Textarea, NumberField,
37
+ * Dropdown, DatePicker, …). Individual controls add their own on top.
38
+ */
39
+ interface BaseControlProps {
40
+ label?: ReactNode;
41
+ /** Help text under the label. */
42
+ description?: ReactNode;
43
+ /** Error message(s). Presence puts the control in its invalid state. */
44
+ error?: Feedback;
45
+ /** Success state — `true`, or a confirmation message to show. */
46
+ success?: string | boolean;
47
+ required?: boolean;
48
+ disabled?: boolean;
49
+ readOnly?: boolean;
50
+ size?: ControlSize;
51
+ variant?: ControlVariant;
52
+ radius?: ControlRadius;
53
+ /** Render the label floating inside the control border. */
54
+ floatingLabel?: boolean;
55
+ /** Content before the field (icon, text). */
56
+ startContent?: ReactNode;
57
+ /** Content after the field (icon, text). */
58
+ endContent?: ReactNode;
59
+ /** Show an ✕ button to clear the value. */
60
+ clearable?: boolean;
61
+ onClear?: () => void;
62
+ /** Show a spinner in the end slot. */
63
+ loading?: boolean;
64
+ id?: string;
65
+ name?: string;
66
+ className?: string;
67
+ }
68
+
69
+ type NativeCheckbox = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "checked" | "defaultChecked" | "onChange" | "size" | "value">;
70
+ interface CheckboxProps extends NativeCheckbox {
71
+ label?: ReactNode;
72
+ description?: ReactNode;
73
+ checked?: boolean;
74
+ defaultChecked?: boolean;
75
+ indeterminate?: boolean;
76
+ onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
77
+ /** Value used when inside a `<CheckboxGroup>`. */
78
+ value?: string;
79
+ disabled?: boolean;
80
+ readOnly?: boolean;
81
+ required?: boolean;
82
+ invalid?: boolean;
83
+ size?: ControlSize;
84
+ /** `"filled"` (default) paints the box on check; `"outline"` keeps it hollow. */
85
+ variant?: "filled" | "outline";
86
+ /** Put the label before the box. */
87
+ labelPlacement?: "end" | "start";
88
+ /** Bordered selectable card. */
89
+ card?: boolean;
90
+ /** Custom checked / indeterminate glyphs. */
91
+ icon?: ReactNode;
92
+ indeterminateIcon?: ReactNode;
93
+ className?: string;
94
+ }
95
+ declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
96
+
97
+ interface CheckboxOption {
98
+ label: ReactNode;
99
+ value: string;
100
+ description?: ReactNode;
101
+ disabled?: boolean;
102
+ }
103
+ interface CheckboxGroupProps {
104
+ label?: ReactNode;
105
+ description?: ReactNode;
106
+ error?: Feedback;
107
+ success?: string | boolean;
108
+ required?: boolean;
109
+ disabled?: boolean;
110
+ name?: string;
111
+ size?: ControlSize;
112
+ value?: string[];
113
+ defaultValue?: string[];
114
+ onChange?: (value: string[]) => void;
115
+ orientation?: "vertical" | "horizontal";
116
+ /** Minimum selections (blocks unchecking below it). */
117
+ min?: number;
118
+ /** Maximum selections (blocks checking above it). */
119
+ max?: number;
120
+ /** Convenience: render items from data instead of children. */
121
+ options?: CheckboxOption[];
122
+ children?: ReactNode;
123
+ className?: string;
124
+ id?: string;
125
+ }
126
+ declare function CheckboxGroup(props: CheckboxGroupProps): react.JSX.Element;
127
+
128
+ interface DatePickerProps extends Omit<BaseControlProps, "startContent" | "endContent" | "loading"> {
129
+ value?: Date | string | null;
130
+ defaultValue?: Date | string | null;
131
+ onChange?: (value: Date | null) => void;
132
+ /** Display / parse pattern (`yyyy MM dd M d MMM MMMM`). Default `"yyyy-MM-dd"`. */
133
+ format?: string;
134
+ minDate?: Date;
135
+ maxDate?: Date;
136
+ disabledDates?: Date[] | ((date: Date) => boolean);
137
+ firstDayOfWeek?: number;
138
+ locale?: string;
139
+ showWeekNumbers?: boolean;
140
+ showToday?: boolean;
141
+ showClear?: boolean;
142
+ /** Render the calendar always, without a text field. */
143
+ inline?: boolean;
144
+ /** Allow typing a date into the field. Default true. */
145
+ allowInput?: boolean;
146
+ closeOnSelect?: boolean;
147
+ placeholder?: string;
148
+ }
149
+ declare const DatePicker: react.ForwardRefExoticComponent<DatePickerProps & react.RefAttributes<HTMLInputElement>>;
3
150
 
4
151
  /**
5
152
  * Per-field validation config. V1 ships `required` / `minLength` / `maxLength`.
@@ -48,11 +195,17 @@ type ValidationResolver = (values: Record<string, unknown>, config: FieldsetConf
48
195
  */
49
196
  type RuleFn = (value: unknown, param: unknown, allValues: Record<string, unknown>) => string | null;
50
197
 
51
- /** A single selectable option in a {@link DropdownFieldConfig}. */
198
+ /** A single selectable option for `Dropdown` / a {@link DropdownFieldConfig}. */
52
199
  interface DropdownOption {
53
200
  label: string;
54
201
  value: string;
55
202
  disabled?: boolean;
203
+ /** Secondary line under the label. */
204
+ description?: ReactNode;
205
+ /** Leading icon / flag. */
206
+ icon?: ReactNode;
207
+ /** Group heading this option is listed under. */
208
+ group?: string;
56
209
  }
57
210
  /** Number of columns at each responsive breakpoint. */
58
211
  interface ColumnSpec {
@@ -118,6 +271,39 @@ interface FieldsetConfig {
118
271
  id?: string;
119
272
  }
120
273
 
274
+ interface OptionState {
275
+ selected: boolean;
276
+ active: boolean;
277
+ disabled: boolean;
278
+ /** Query the option matched, for highlighting. */
279
+ query: string;
280
+ }
281
+ interface DropdownProps extends Omit<BaseControlProps, "startContent" | "endContent"> {
282
+ options: DropdownOption[];
283
+ value?: string | string[] | null;
284
+ defaultValue?: string | string[] | null;
285
+ onChange?: (value: string | string[] | null) => void;
286
+ multiple?: boolean;
287
+ /** Type in the control to filter options. */
288
+ searchable?: boolean;
289
+ filterMode?: "contains" | "startsWith";
290
+ filterFn?: (option: DropdownOption, query: string) => boolean;
291
+ /** Bold the matched substring in option labels. Default true when searchable. */
292
+ highlightMatch?: boolean;
293
+ renderOption?: (option: DropdownOption, state: OptionState) => ReactNode;
294
+ renderValue?: (selected: DropdownOption[]) => ReactNode;
295
+ placeholder?: string;
296
+ emptyMessage?: ReactNode;
297
+ /** Close the panel after a pick. Default true for single, false for multiple. */
298
+ closeOnSelect?: boolean;
299
+ /** Cap the chips shown before "+N". */
300
+ maxSelectedLabels?: number;
301
+ /** Fall back to a native `<select>` (single, no search). */
302
+ native?: boolean;
303
+ startContent?: ReactNode;
304
+ }
305
+ declare const Dropdown: react.ForwardRefExoticComponent<DropdownProps & react.RefAttributes<HTMLInputElement>>;
306
+
121
307
  /**
122
308
  * The contract every control receives from `Fieldset`. This is the stability
123
309
  * boundary between the orchestrator and the controls: as long as this holds,
@@ -178,43 +364,30 @@ interface FieldRenderContext {
178
364
  /** Value for the control's `aria-describedby`, or `undefined`. */
179
365
  describedById: string | undefined;
180
366
  invalid: boolean;
367
+ valid: boolean;
181
368
  required: boolean | undefined;
182
369
  disabled: boolean | undefined;
183
370
  }
184
371
  /**
185
- * Low-level layout + a11y wrapper. Renders label, description and error region
186
- * and wires the ARIA relationships. `Input` and `Dropdown` are built on it, and
187
- * it is exported for custom control authors.
372
+ * Low-level layout + a11y wrapper. Renders label, description and an
373
+ * error / success region and wires the ARIA relationships. Every control is
374
+ * built on it, and it is exported for custom control authors.
188
375
  */
189
376
  interface FieldProps {
190
377
  label?: ReactNode;
191
378
  description?: ReactNode;
192
379
  error?: ErrorProp;
380
+ /** `true`, or a confirmation message, to show the success state. */
381
+ success?: string | boolean;
193
382
  required?: boolean;
194
383
  disabled?: boolean;
384
+ /** Skip rendering the `<label>` (e.g. the control floats its own). */
385
+ hideLabel?: boolean;
195
386
  /** Control id; generated with `useId` when omitted. */
196
387
  id?: string;
197
388
  className?: string;
198
389
  children: ReactNode | ((ctx: FieldRenderContext) => ReactNode);
199
390
  }
200
- /** Props shared by the standalone controls. */
201
- interface SharedControlProps {
202
- label?: ReactNode;
203
- description?: ReactNode;
204
- error?: ErrorProp;
205
- }
206
- interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "type">, SharedControlProps {
207
- value?: string;
208
- onChange?: (value: string, event?: ChangeEvent<HTMLInputElement>) => void;
209
- type?: "text" | "email" | "password" | "number" | "tel" | "url";
210
- }
211
- interface DropdownProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, "onChange" | "value">, SharedControlProps {
212
- options: DropdownOption[];
213
- value?: string;
214
- onChange?: (value: string, event?: ChangeEvent<HTMLSelectElement>) => void;
215
- /** Renders a non-selectable prompt option when the value is empty. */
216
- placeholder?: string;
217
- }
218
391
  interface FieldsetProps<TValues extends Record<string, unknown> = Record<string, unknown>> {
219
392
  config: FieldsetConfig;
220
393
  /** Controlled values. Omit and use `defaultValue` for uncontrolled. */
@@ -234,18 +407,10 @@ interface FieldsetProps<TValues extends Record<string, unknown> = Record<string,
234
407
  id?: string;
235
408
  }
236
409
 
237
- /**
238
- * A labelled single-select built on the native `<select>` element (accessible
239
- * and keyboard-navigable out of the box). Works with or without `<Fieldset>`.
240
- */
241
- declare const Dropdown: react.ForwardRefExoticComponent<DropdownProps & react.RefAttributes<HTMLSelectElement>>;
242
-
243
410
  /**
244
411
  * Layout + accessibility wrapper for a single control. Renders the label,
245
- * optional description, and an error region, and wires the ARIA relationships
246
- * (`htmlFor`, `aria-describedby`, `aria-invalid`, `aria-required`).
247
- *
248
- * Pass a render function as `children` to receive the resolved ids:
412
+ * optional description, and an error/success region, and wires the ARIA
413
+ * relationships (`htmlFor`, `aria-describedby`, `aria-invalid`, `aria-required`).
249
414
  *
250
415
  * ```tsx
251
416
  * <Field label="Name" error={error}>
@@ -257,13 +422,110 @@ declare const Dropdown: react.ForwardRefExoticComponent<DropdownProps & react.Re
257
422
  */
258
423
  declare function Field(props: FieldProps): react.JSX.Element;
259
424
 
260
- /**
261
- * A labelled text input. Controlled when `value` is passed, uncontrolled
262
- * otherwise (`defaultValue` flows through to the native element). Works with or
263
- * without `<Fieldset>`.
264
- */
425
+ type NativeInput = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "type" | "size" | "prefix">;
426
+ interface InputProps extends BaseControlProps, NativeInput {
427
+ value?: string;
428
+ defaultValue?: string;
429
+ onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void;
430
+ /** Fired on Enter. */
431
+ onEnter?: (value: string) => void;
432
+ type?: "text" | "email" | "password" | "search" | "tel" | "url";
433
+ /** Static text glued to the start (e.g. `https://`). */
434
+ prefix?: ReactNode;
435
+ /** Static text glued to the end (e.g. `.com`). */
436
+ suffix?: ReactNode;
437
+ /** Show a show/hide toggle (implied for `type="password"`). */
438
+ passwordToggle?: boolean;
439
+ /** Show a live character counter. Pairs well with `maxLength`. */
440
+ showCount?: boolean;
441
+ }
265
442
  declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttributes<HTMLInputElement>>;
266
443
 
444
+ type NativeNumberInput = Omit<InputHTMLAttributes<HTMLInputElement>, "value" | "defaultValue" | "onChange" | "type" | "min" | "max" | "step" | "size" | "prefix">;
445
+ interface NumberFieldProps extends BaseControlProps, NativeNumberInput {
446
+ value?: number | null;
447
+ defaultValue?: number | null;
448
+ onChange?: (value: number | null) => void;
449
+ min?: number;
450
+ max?: number;
451
+ step?: number;
452
+ /** Larger step for Shift+Arrow / PageUp-Down. Default `step * 10`. */
453
+ shiftStep?: number;
454
+ /** Decimal places to keep. */
455
+ precision?: number;
456
+ /** Stepper buttons. Default `"stacked"`. */
457
+ buttons?: "stacked" | "horizontal" | false;
458
+ /** Group thousands (`1,000`). */
459
+ grouping?: boolean;
460
+ /** BCP-47 locale for formatting. */
461
+ locale?: string;
462
+ /** ISO currency code — renders as currency. */
463
+ currency?: string;
464
+ /** Text before the number. */
465
+ prefix?: string;
466
+ /** Text after the number (e.g. `%`, `kg`). */
467
+ suffix?: string;
468
+ /** Clamp to `[min, max]` on blur. Default true. */
469
+ clampOnBlur?: boolean;
470
+ /** Step with the mouse wheel while focused. Default false. */
471
+ allowMouseWheel?: boolean;
472
+ }
473
+ declare const NumberField: react.ForwardRefExoticComponent<NumberFieldProps & react.RefAttributes<HTMLInputElement>>;
474
+
475
+ type NativeRadio = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "checked" | "defaultChecked" | "onChange" | "size" | "value">;
476
+ interface RadioProps extends NativeRadio {
477
+ value: string;
478
+ label?: ReactNode;
479
+ description?: ReactNode;
480
+ disabled?: boolean;
481
+ size?: ControlSize;
482
+ card?: boolean;
483
+ labelPlacement?: "end" | "start";
484
+ className?: string;
485
+ }
486
+ declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
487
+ interface RadioOption {
488
+ label: ReactNode;
489
+ value: string;
490
+ description?: ReactNode;
491
+ disabled?: boolean;
492
+ }
493
+ interface RadioGroupProps {
494
+ label?: ReactNode;
495
+ description?: ReactNode;
496
+ error?: Feedback;
497
+ success?: string | boolean;
498
+ required?: boolean;
499
+ disabled?: boolean;
500
+ name?: string;
501
+ size?: ControlSize;
502
+ variant?: "default" | "card";
503
+ value?: string | null;
504
+ defaultValue?: string | null;
505
+ onChange?: (value: string) => void;
506
+ orientation?: "vertical" | "horizontal";
507
+ options?: RadioOption[];
508
+ children?: ReactNode;
509
+ className?: string;
510
+ id?: string;
511
+ }
512
+ declare function RadioGroup(props: RadioGroupProps): react.JSX.Element;
513
+
514
+ type NativeTextarea = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "value" | "defaultValue" | "onChange" | "rows" | "cols">;
515
+ interface TextareaProps extends Omit<BaseControlProps, "startContent" | "endContent" | "loading">, NativeTextarea {
516
+ value?: string;
517
+ defaultValue?: string;
518
+ onChange?: (value: string, event: ChangeEvent<HTMLTextAreaElement>) => void;
519
+ /** Grow with content between `minRows` and `maxRows`. */
520
+ autoResize?: boolean;
521
+ minRows?: number;
522
+ maxRows?: number;
523
+ /** Native resize handle. Default `"vertical"` (`"none"` when `autoResize`). */
524
+ resize?: "none" | "vertical" | "both";
525
+ showCount?: boolean;
526
+ }
527
+ declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
528
+
267
529
  /**
268
530
  * Renders a form (or a form section) from a `FieldsetConfig`. Controlled when
269
531
  * `value` is passed, uncontrolled otherwise. Renders a native `<fieldset>` — so
@@ -272,6 +534,62 @@ declare const Input: react.ForwardRefExoticComponent<InputProps & react.RefAttri
272
534
  */
273
535
  declare function Fieldset<TValues extends Record<string, unknown> = Record<string, unknown>>(props: FieldsetProps<TValues>): react.JSX.Element;
274
536
 
537
+ /** Built-in colour presets. Each maps to `[data-orynn-theme="…"]` in the stylesheet. */
538
+ type OrynnPreset = "default" | "slate" | "teal" | "violet" | "rose" | "emerald";
539
+ /** Vertical rhythm / sizing. Maps to `[data-orynn-density="…"]`. */
540
+ type OrynnDensity = "compact" | "comfortable" | "spacious";
541
+ type OrynnRadius = "none" | "sm" | "md" | "lg" | "pill" | (string & {}) | number;
542
+ /** Any `--orynn-*` custom property. */
543
+ type OrynnVarOverrides = Partial<Record<`--orynn-${string}`, string | number>>;
544
+ interface OrynnThemeConfig {
545
+ /** Colour preset. Defaults to `"default"` (indigo). */
546
+ preset?: OrynnPreset;
547
+ density?: OrynnDensity;
548
+ /** Highlight / accent colour. Any CSS colour — overrides the preset's accent. */
549
+ accent?: string;
550
+ /** Foreground colour to pair with a custom `accent` (auto-picked from luminance if omitted). */
551
+ accentContrast?: string;
552
+ /** `--orynn-font-family`. */
553
+ font?: string;
554
+ /** Base font size, e.g. `"15px"` or `"0.95rem"`. */
555
+ fontSize?: string | number;
556
+ /** Corner radius applied to controls. Keyword, CSS length, or px number. */
557
+ radius?: OrynnRadius;
558
+ /** Default control width. `"100%"` by default; e.g. `"20rem"` or `320`. */
559
+ controlWidth?: string | number;
560
+ /** Focus-ring colour. */
561
+ ring?: string;
562
+ /** Escape hatch: any `--orynn-*` variables verbatim. */
563
+ vars?: OrynnVarOverrides;
564
+ }
565
+ /** `theme` prop accepts a preset name shorthand or a full config. */
566
+ type OrynnThemeInput = OrynnPreset | OrynnThemeConfig;
567
+ /** Build the inline CSS-variable style object for a theme config. */
568
+ declare function resolveThemeVars(config: OrynnThemeConfig): CSSProperties;
569
+
570
+ interface OrynnContextValue {
571
+ preset: OrynnPreset;
572
+ density: OrynnDensity;
573
+ config: OrynnThemeConfig;
574
+ }
575
+ interface OrynnProviderProps {
576
+ /** Preset name (`"teal"`) or a full config object. */
577
+ theme?: OrynnThemeInput;
578
+ /** Render a `<div>` (default) or a different element / no wrapper (`"contents"`). */
579
+ as?: "div" | "span" | "contents";
580
+ className?: string;
581
+ children: ReactNode;
582
+ }
583
+ /**
584
+ * Scopes an Orynn theme to its subtree by setting `data-orynn-theme`,
585
+ * `data-orynn-density` and any custom `--orynn-*` variables on a wrapper element.
586
+ * Purely CSS custom properties — no runtime styling engine. Nesting is supported;
587
+ * an inner provider overrides only what it sets.
588
+ */
589
+ declare function OrynnProvider({ theme, as, className, children }: OrynnProviderProps): react.JSX.Element;
590
+ /** Read the nearest Orynn theme config. */
591
+ declare function useOrynnTheme(): OrynnContextValue;
592
+
275
593
  /** Form-level validation roll-up. */
276
594
  type FieldStatus = "idle" | "validating" | "valid" | "invalid";
277
595
  /** The complete state a fieldset tracks. New keys must be additive. */
@@ -397,4 +715,4 @@ declare const defaultResolver: ValidationResolver;
397
715
  */
398
716
  declare function registerRule(name: string, fn: RuleFn): void;
399
717
 
400
- export { type BaseFieldConfig, type ColumnSpec, type ControlComponent, type ControlProps, Dropdown, type DropdownFieldConfig, type DropdownOption, type DropdownProps, type ErrorProp, FORM_ERROR_KEY, Field, type FieldConfig, type FieldConfigRegistry, type FieldError, type FieldProps, type FieldRegistration, type FieldRegistry, type FieldRenderContext, type FieldSlice, type FieldStatus, type FieldType, type FieldValidation, Fieldset, type FieldsetConfig, type FieldsetProps, type FieldsetState, Input, type InputFieldConfig, type InputProps, type NormalizedFieldsetConfig, type RuleFn, type SyncResolver, type UseFieldsetStateOptions, type UseFieldsetStateReturn, type ValidationContext, type ValidationResolver, type ValidationResult, type ValidationTrigger, createRegistry, createRuleResolver, defaultRegistry, defaultResolver, normalizeConfig, registerField, registerRule, useFieldsetState };
718
+ export { type BaseControlProps, type BaseFieldConfig, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxOption, type CheckboxProps, type ColumnSpec, type ControlComponent, type ControlProps, type ControlRadius, type ControlSize, type ControlVariant, DatePicker, type DatePickerProps, Dropdown, type DropdownFieldConfig, type DropdownOption, type DropdownProps, type ErrorProp, FORM_ERROR_KEY, type Feedback, Field, FieldBox, type FieldBoxProps, type FieldConfig, type FieldConfigRegistry, type FieldError, type FieldProps, type FieldRegistration, type FieldRegistry, type FieldRenderContext, type FieldSlice, type FieldStatus, type FieldType, type FieldValidation, Fieldset, type FieldsetConfig, type FieldsetProps, type FieldsetState, Input, type InputFieldConfig, type InputProps, type NormalizedFieldsetConfig, NumberField, type NumberFieldProps, type OrynnDensity, type OrynnPreset, OrynnProvider, type OrynnProviderProps, type OrynnRadius, type OrynnThemeConfig, type OrynnThemeInput, type OrynnVarOverrides, Radio, RadioGroup, type RadioGroupProps, type RadioOption, type RadioProps, type RuleFn, Dropdown as Select, type SyncResolver, Textarea, type TextareaProps, type UseFieldsetStateOptions, type UseFieldsetStateReturn, type ValidationContext, type ValidationResolver, type ValidationResult, type ValidationTrigger, createRegistry, createRuleResolver, defaultRegistry, defaultResolver, normalizeConfig, registerField, registerRule, resolveThemeVars, useFieldsetState, useOrynnTheme };