@iris-ui-kit/react 0.1.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.
Files changed (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/SidebarLayout-fWQRvK0a.d.cts +26 -0
  3. package/dist/SidebarLayout-fWQRvK0a.d.ts +26 -0
  4. package/dist/admin.cjs +1583 -0
  5. package/dist/admin.cjs.map +1 -0
  6. package/dist/admin.d.cts +183 -0
  7. package/dist/admin.d.ts +183 -0
  8. package/dist/admin.js +9 -0
  9. package/dist/admin.js.map +1 -0
  10. package/dist/async.cjs +97 -0
  11. package/dist/async.cjs.map +1 -0
  12. package/dist/async.d.cts +57 -0
  13. package/dist/async.d.ts +57 -0
  14. package/dist/async.js +5 -0
  15. package/dist/async.js.map +1 -0
  16. package/dist/behaviors.cjs +569 -0
  17. package/dist/behaviors.cjs.map +1 -0
  18. package/dist/behaviors.d.cts +188 -0
  19. package/dist/behaviors.d.ts +188 -0
  20. package/dist/behaviors.js +4 -0
  21. package/dist/behaviors.js.map +1 -0
  22. package/dist/chunk-2TQSTINK.js +541 -0
  23. package/dist/chunk-2TQSTINK.js.map +1 -0
  24. package/dist/chunk-53KFLVIZ.js +68 -0
  25. package/dist/chunk-53KFLVIZ.js.map +1 -0
  26. package/dist/chunk-6BMFMCMQ.js +140 -0
  27. package/dist/chunk-6BMFMCMQ.js.map +1 -0
  28. package/dist/chunk-AUA5GBT6.js +143 -0
  29. package/dist/chunk-AUA5GBT6.js.map +1 -0
  30. package/dist/chunk-DE6V6NOI.js +122 -0
  31. package/dist/chunk-DE6V6NOI.js.map +1 -0
  32. package/dist/chunk-HEJGN6UI.js +78 -0
  33. package/dist/chunk-HEJGN6UI.js.map +1 -0
  34. package/dist/chunk-IDD35UJ6.js +83 -0
  35. package/dist/chunk-IDD35UJ6.js.map +1 -0
  36. package/dist/chunk-J5FB2UB2.js +166 -0
  37. package/dist/chunk-J5FB2UB2.js.map +1 -0
  38. package/dist/chunk-OMOTUHYI.js +66 -0
  39. package/dist/chunk-OMOTUHYI.js.map +1 -0
  40. package/dist/chunk-RZNYIFV2.js +34 -0
  41. package/dist/chunk-RZNYIFV2.js.map +1 -0
  42. package/dist/chunk-SJO74IB3.js +54 -0
  43. package/dist/chunk-SJO74IB3.js.map +1 -0
  44. package/dist/chunk-SORLRLS4.js +53 -0
  45. package/dist/chunk-SORLRLS4.js.map +1 -0
  46. package/dist/chunk-TO7YVSAI.js +64 -0
  47. package/dist/chunk-TO7YVSAI.js.map +1 -0
  48. package/dist/chunk-TQ33XJIK.js +22 -0
  49. package/dist/chunk-TQ33XJIK.js.map +1 -0
  50. package/dist/chunk-UWUUEZCD.js +950 -0
  51. package/dist/chunk-UWUUEZCD.js.map +1 -0
  52. package/dist/chunk-VWCJJRSC.js +1200 -0
  53. package/dist/chunk-VWCJJRSC.js.map +1 -0
  54. package/dist/chunk-WIHBIDVJ.js +54 -0
  55. package/dist/chunk-WIHBIDVJ.js.map +1 -0
  56. package/dist/chunk-XCK4RIXB.js +66 -0
  57. package/dist/chunk-XCK4RIXB.js.map +1 -0
  58. package/dist/chunk-YAHXR2CJ.js +48 -0
  59. package/dist/chunk-YAHXR2CJ.js.map +1 -0
  60. package/dist/chunk-YXIO5THG.js +4 -0
  61. package/dist/chunk-YXIO5THG.js.map +1 -0
  62. package/dist/chunk-ZKBDUWUD.js +156 -0
  63. package/dist/chunk-ZKBDUWUD.js.map +1 -0
  64. package/dist/data.cjs +112 -0
  65. package/dist/data.cjs.map +1 -0
  66. package/dist/data.d.cts +53 -0
  67. package/dist/data.d.ts +53 -0
  68. package/dist/data.js +5 -0
  69. package/dist/data.js.map +1 -0
  70. package/dist/error-boundary.cjs +106 -0
  71. package/dist/error-boundary.cjs.map +1 -0
  72. package/dist/error-boundary.d.cts +41 -0
  73. package/dist/error-boundary.d.ts +41 -0
  74. package/dist/error-boundary.js +6 -0
  75. package/dist/error-boundary.js.map +1 -0
  76. package/dist/floating.cjs +163 -0
  77. package/dist/floating.cjs.map +1 -0
  78. package/dist/floating.d.cts +92 -0
  79. package/dist/floating.d.ts +92 -0
  80. package/dist/floating.js +5 -0
  81. package/dist/floating.js.map +1 -0
  82. package/dist/form.cjs +159 -0
  83. package/dist/form.cjs.map +1 -0
  84. package/dist/form.d.cts +120 -0
  85. package/dist/form.d.ts +120 -0
  86. package/dist/form.js +5 -0
  87. package/dist/form.js.map +1 -0
  88. package/dist/i18n.cjs +100 -0
  89. package/dist/i18n.cjs.map +1 -0
  90. package/dist/i18n.d.cts +50 -0
  91. package/dist/i18n.d.ts +50 -0
  92. package/dist/i18n.js +5 -0
  93. package/dist/i18n.js.map +1 -0
  94. package/dist/index.cjs +16635 -0
  95. package/dist/index.cjs.map +1 -0
  96. package/dist/index.d.cts +2964 -0
  97. package/dist/index.d.ts +2964 -0
  98. package/dist/index.js +12217 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/layouts.cjs +386 -0
  101. package/dist/layouts.cjs.map +1 -0
  102. package/dist/layouts.d.cts +92 -0
  103. package/dist/layouts.d.ts +92 -0
  104. package/dist/layouts.js +6 -0
  105. package/dist/layouts.js.map +1 -0
  106. package/dist/modal-utils.cjs +168 -0
  107. package/dist/modal-utils.cjs.map +1 -0
  108. package/dist/modal-utils.d.cts +43 -0
  109. package/dist/modal-utils.d.ts +43 -0
  110. package/dist/modal-utils.js +4 -0
  111. package/dist/modal-utils.js.map +1 -0
  112. package/dist/motion.cjs +104 -0
  113. package/dist/motion.cjs.map +1 -0
  114. package/dist/motion.d.cts +41 -0
  115. package/dist/motion.d.ts +41 -0
  116. package/dist/motion.js +4 -0
  117. package/dist/motion.js.map +1 -0
  118. package/dist/provider.cjs +191 -0
  119. package/dist/provider.cjs.map +1 -0
  120. package/dist/provider.d.cts +62 -0
  121. package/dist/provider.d.ts +62 -0
  122. package/dist/provider.js +8 -0
  123. package/dist/provider.js.map +1 -0
  124. package/dist/resource.cjs +61 -0
  125. package/dist/resource.cjs.map +1 -0
  126. package/dist/resource.d.cts +21 -0
  127. package/dist/resource.d.ts +21 -0
  128. package/dist/resource.js +5 -0
  129. package/dist/resource.js.map +1 -0
  130. package/dist/skeletons.cjs +1304 -0
  131. package/dist/skeletons.cjs.map +1 -0
  132. package/dist/skeletons.d.cts +70 -0
  133. package/dist/skeletons.d.ts +70 -0
  134. package/dist/skeletons.js +8 -0
  135. package/dist/skeletons.js.map +1 -0
  136. package/dist/skins.cjs +134 -0
  137. package/dist/skins.cjs.map +1 -0
  138. package/dist/skins.d.cts +45 -0
  139. package/dist/skins.d.ts +45 -0
  140. package/dist/skins.js +5 -0
  141. package/dist/skins.js.map +1 -0
  142. package/dist/theme.cjs +100 -0
  143. package/dist/theme.cjs.map +1 -0
  144. package/dist/theme.d.cts +71 -0
  145. package/dist/theme.d.ts +71 -0
  146. package/dist/theme.js +5 -0
  147. package/dist/theme.js.map +1 -0
  148. package/dist/undo.cjs +73 -0
  149. package/dist/undo.cjs.map +1 -0
  150. package/dist/undo.d.cts +47 -0
  151. package/dist/undo.d.ts +47 -0
  152. package/dist/undo.js +4 -0
  153. package/dist/undo.js.map +1 -0
  154. package/package.json +61 -0
@@ -0,0 +1,2964 @@
1
+ import { ReadonlyStore, Store, MachineEvent, Machine, MachineState, Variant, Size, Placement, SpreadsheetXmlOptions } from '@iris-ui-kit/core';
2
+ export { Align, DataSourceConfig, DataSourceController, DataSourceMode, DataSourceMutateOptions, DataSourceQuery, DataSourceState, DataViewColumn, FloatingEvent, FloatingMachine, FloatingState, GroupedViewConfig, GroupedViewState, GroupedViewStore, IrisHsva, PageItem as IrisPageItem, IrisRgba, Machine, MachineConfig, MachineEvent, MachineState, MutateOptions, NavNode, Placement, ResourceController, ResourceControllerConfig, ResourceQuery, ResourceState, RowMutateOptions, Side, Size, StateNode, Store, TabItem, TabsNav, TabsNavConfig, TabsNavState, Transition, Variant, addDays, addMonths, buildMonthMatrix, clamp01, clampDate, composeEventHandlers, createClientDataSource, createClientFetcher, createDataSource, createFloatingMachine, createGroupedView, createMachine, createResourceController, createStore, createTabsNav, endOfMonth, filterNavByAccess, findNavNode, findNavPath, firstLeaf, flattenNav, formatLocalISO, formatMonthYear, generateId, getPageRange, getWeekdayNames, hexToRgba, hsvToRgb, hsvaToRgba, isBranch, isClosable, isOutOfRange, isSameDay, isSameMonth, mergeProps, nodeAllowsRoles, rgbToHex, rgbToHsv, rgbaToHsva, startOfDay, startOfMonth, visibleNav } from '@iris-ui-kit/core';
3
+ export { ThemeProvider, ThemeProviderProps, UseThemeReturn, useColorScheme, useDirection, useTheme, useThemeContext, useThemeOptional } from './theme.cjs';
4
+ export { ApplySkinResult, LoadSkinOptions, ResolvedSkin, Skin, SkinBootScriptConfig, SkinCatalog, SkinCatalogConfig, SkinEngine, SkinEngineConfig, SkinError, SkinErrorCode, SkinLookup, SkinManifest, SkinManifestEntry, SkinMode, SkinPatch, SkinRegistry, SkinResolutionError, SkinStorage, SkinTokenOverrides, applySkin, builtinSkins, createSkinCatalog, createSkinEngine, createSkinRegistry, darkSkin, lightSkin, loadSkin, localStorageSkinStorage, memorySkinStorage, renderSkinStyle, resolveSkin, skinBootScript, skinError, skinToCssEntries, validateSkin } from '@iris-ui-kit/skins';
5
+ export { SkinProvider, SkinProviderProps, UseSkinReturn, useSkin, useSkinContext, useSkinOptional } from './skins.cjs';
6
+ import * as react_jsx_runtime from 'react/jsx-runtime';
7
+ import * as React from 'react';
8
+ import { ButtonHTMLAttributes, ReactNode, CSSProperties, MouseEventHandler } from 'react';
9
+ import { IrisIconRegistry } from '@iris-ui-kit/icons';
10
+ export { CreateIconRegistryOptions, IrisIconNode, IrisIconRegistry, IrisIconResolver, IrisIconSet, RenderIconOptions, ThemeIconConfig, createIconRegistry, defaultIconRegistry, defaultIcons, renderIconSvg, resolveIcon, resolveThemedIcon } from '@iris-ui-kit/icons';
11
+ export { FieldInputProps, FormContext, IrisForm, IrisFormProps, UseFieldArrayReturn, UseFieldReturn, UseFormReturn, useField, useFieldArray, useForm, useFormContext } from './form.cjs';
12
+ export { I18nContext, IrisI18nProvider, IrisI18nProviderProps, UseI18nReturn, useI18n } from './i18n.cjs';
13
+ export { UseAsyncResourceOptions, UseAsyncResourceReturn, UsePaginatedResourceOptions, UsePaginatedResourceReturn, useAsyncResource, usePaginatedResource } from './async.cjs';
14
+ export { UseResourceController, useResourceController } from './resource.cjs';
15
+ export { UseDataSource, UseGroupedView, useDataSource, useGroupedView } from './data.cjs';
16
+ export { DATA_STATE_CLASS, DataStateNodeProps, UseDataStateReturn, __resetDataStateStyles, installDataStateStyles, useDataState, usePrefersReducedMotion } from './motion.cjs';
17
+ export { IrisClickOutside, IrisClickOutsideProps, IrisHotkey, IrisHotkeyProps, IrisLongPress, IrisLongPressProps, IrisMovable, IrisMovableBounds, IrisMovablePosition, IrisMovableProps, IrisResizable, IrisResizableHandle, IrisResizableProps, IrisResizableSize, IrisSortable, IrisSortableProps, SORTABLE_ITEM_ATTR } from './behaviors.cjs';
18
+ export { UndoStackReactiveState, useUndoStack } from './undo.cjs';
19
+ export { UndoStack, UndoStackOptions, createUndoStack } from '@iris-ui-kit/core/undo';
20
+ export { IrisContainer, IrisContainerMaxWidth, IrisContainerProps, IrisDashboardCard, IrisDashboardCardProps, IrisDashboardGrid, IrisDashboardGridProps, IrisGrid, IrisGridColumns, IrisGridProps, IrisHeaderLayout, IrisHeaderLayoutProps, IrisStack, IrisStackAlign, IrisStackDirection, IrisStackJustify, IrisStackProps } from './layouts.cjs';
21
+ export { I as IrisSidebarLayout, a as IrisSidebarLayoutProps, b as IrisSidebarLayoutSidebarState } from './SidebarLayout-fWQRvK0a.cjs';
22
+ export { IrisAdminBreadcrumb, IrisAdminBreadcrumbProps, IrisAdminLayout, IrisAdminLayoutMode, IrisAdminLayoutProps, IrisAdminTabs, IrisAdminTabsProps, IrisNavMenu, IrisNavMenuProps, UseAdminShellConfig, UseAdminShellReturn, UseTabsNavReturn, useAdminShell, useTabsNav } from './admin.cjs';
23
+ export { IrisDashboardCardSpec, IrisDashboardNavItem, IrisDashboardTemplate, IrisDashboardTemplateProps, IrisLoginSubmitPayload, IrisLoginTemplate, IrisLoginTemplateProps } from './skeletons.cjs';
24
+ export { UseDismissOptions, UseFloatingOptions, UseFloatingReturn, useDismiss, useFloating } from './floating.cjs';
25
+ export { UseFocusTrapOptions, __getBodyScrollLockCount, __resetBodyScrollLock, useBodyScrollLock, useFocusTrap } from './modal-utils.cjs';
26
+ export { IrisProvider, IrisProviderProps, PluginStoreContext, PluginStoreContextValue, usePlugin, usePluginStore } from './provider.cjs';
27
+ export { IrisErrorBoundary, IrisErrorBoundaryFallbackProps, IrisErrorBoundaryProps } from './error-boundary.cjs';
28
+ export { ApplyThemeResult, ThemeStore, ThemeStoreConfig, applyTheme, createThemeStore, getCssVar, toCssVarName } from '@iris-ui-kit/theme';
29
+ export { ALL_TOKEN_NAMES, AnyToken, COLOR_TOKENS, ColorToken, IrisTheme, IrisThemeColors, IrisThemeRadii, IrisThemeSpacing, IrisThemeType, RADII_TOKENS, RadiusToken, SPACING_TOKENS, SpacingToken, darkTheme, lightTheme } from '@iris-ui-kit/tokens';
30
+ import '@floating-ui/dom';
31
+
32
+ /**
33
+ * Bridge a framework-agnostic `@iris-ui-kit/core` store into React reactivity.
34
+ * Uses React 18's `useSyncExternalStore` — the contract is identical to the
35
+ * one Vue uses via `ref + onMounted` and Solid uses via `createSignal`. The
36
+ * **same** store can power Button, Popover, Dialog, etc. on any framework.
37
+ */
38
+ declare function useStore<T>(store: ReadonlyStore<T>): T;
39
+ /**
40
+ * Subscribe to a DERIVED slice of a core store — the component re-renders only
41
+ * when `selector(state)` changes per `isEqual` (default `Object.is`), not on
42
+ * every store emission. Built on {@link Store.subscribeWith}. Inline closures
43
+ * for `selector`/`isEqual` are fine (captured via refs; the subscription is not
44
+ * re-created between renders).
45
+ */
46
+ declare function useStoreSelector<T, U>(store: Store<T>, selector: (state: T) => U, isEqual?: (a: U, b: U) => boolean): U;
47
+
48
+ /**
49
+ * Bridge a framework-agnostic `Machine` into React. Returns `[state, send]`
50
+ * — `state` is reactive (re-renders on transition) and `send` is stable
51
+ * across renders.
52
+ *
53
+ * Pass a **factory** (`() => createMachine(...)`) so each component instance
54
+ * gets its own machine. Internally memoised so re-renders don't re-create.
55
+ */
56
+ declare function useMachine<TState extends string, TContext, TEvent extends MachineEvent>(factory: () => Machine<TState, TContext, TEvent>): [MachineState<TState, TContext>, (event: TEvent) => void];
57
+
58
+ type IrisButtonVariant = Variant;
59
+ type IrisButtonSize = Size;
60
+ type IrisButtonType = 'button' | 'submit' | 'reset';
61
+
62
+ interface IrisButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'disabled' | 'onClick' | 'className' | 'style' | 'children'> {
63
+ variant?: IrisButtonVariant;
64
+ size?: IrisButtonSize;
65
+ disabled?: boolean;
66
+ loading?: boolean;
67
+ type?: IrisButtonType;
68
+ asChild?: boolean;
69
+ leading?: ReactNode;
70
+ children?: ReactNode;
71
+ className?: string;
72
+ style?: CSSProperties;
73
+ onClick?: MouseEventHandler<HTMLElement>;
74
+ }
75
+ /**
76
+ * React port of `IrisButton`. Same prop contract as `@iris-ui-kit/vue`'s
77
+ * version. **No business logic is duplicated** — the `composeEventHandlers`
78
+ * helper, variant token map, and singleton stylesheet are all from
79
+ * `@iris-ui-kit/core` / a near-identical CSS file.
80
+ *
81
+ * Validates the React-readiness promise: any future primitive can be ported
82
+ * by writing a thin .tsx wrapper around the same shared logic.
83
+ *
84
+ * @example
85
+ * <IrisButton variant="solid" onClick={() => save()}>
86
+ * Save
87
+ * </IrisButton>
88
+ */
89
+ declare function IrisButton({ variant, size, disabled, loading, type, asChild, leading, children, className, style, onClick, ...rest }: IrisButtonProps): react_jsx_runtime.JSX.Element | null;
90
+
91
+ type IrisBadgeVariant = 'solid' | 'outline' | 'subtle';
92
+ type IrisBadgeTone = 'primary' | 'success' | 'warning' | 'danger' | 'neutral';
93
+ type IrisBadgeSize = 'sm' | 'md';
94
+ interface IrisBadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
95
+ variant?: IrisBadgeVariant;
96
+ tone?: IrisBadgeTone;
97
+ size?: IrisBadgeSize;
98
+ children?: React.ReactNode;
99
+ }
100
+ /**
101
+ * React port of {@link import('@iris-ui-kit/vue').IrisBadge}. Same visual model.
102
+ *
103
+ * @example
104
+ * <IrisBadge tone="success" variant="subtle">Active</IrisBadge>
105
+ */
106
+ declare function IrisBadge({ variant, tone, size, style, children, ...rest }: IrisBadgeProps): React.ReactElement;
107
+
108
+ type IrisAvatarShape = 'circle' | 'square';
109
+ type IrisAvatarSize = 'sm' | 'md' | 'lg' | number;
110
+ interface IrisAvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
111
+ src?: string;
112
+ alt?: string;
113
+ /** Used to derive initials when no `fallback` slot is supplied. */
114
+ name?: string;
115
+ /** Explicit fallback string; wins over derived initials. */
116
+ fallback?: string;
117
+ /** Custom fallback content (React node). */
118
+ fallbackContent?: React.ReactNode;
119
+ size?: IrisAvatarSize;
120
+ shape?: IrisAvatarShape;
121
+ }
122
+ /**
123
+ * React port of {@link import('@iris-ui-kit/vue').IrisAvatar}.
124
+ *
125
+ * @example
126
+ * <IrisAvatar src="/me.png" name="Ada Lovelace" size="md" />
127
+ */
128
+ declare function IrisAvatar({ src, alt, name, fallback, fallbackContent, size, shape, style, ...rest }: IrisAvatarProps): React.ReactElement;
129
+
130
+ type IrisSpinnerSize = 'sm' | 'md' | 'lg' | number;
131
+ interface IrisSpinnerProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
132
+ size?: IrisSpinnerSize;
133
+ color?: string;
134
+ strokeWidth?: number;
135
+ label?: string;
136
+ }
137
+ /** React port of {@link import('@iris-ui-kit/vue').IrisSpinner}. */
138
+ declare function IrisSpinner({ size, color, strokeWidth, label, style, ...rest }: IrisSpinnerProps): React.ReactElement;
139
+
140
+ declare const __SPINNER_STYLE_ID = "iris-spinner-styles";
141
+ declare function __resetSpinnerStyles(): void;
142
+
143
+ interface IrisIconProps extends Omit<React.SVGAttributes<SVGSVGElement>, 'name' | 'children' | 'dangerouslySetInnerHTML' | 'fill'> {
144
+ /** Semantic icon name resolved via the registry (e.g. 'check', 'chevron-down'). */
145
+ name: string;
146
+ /** Width & height (number → px). Default 24. */
147
+ size?: number | string;
148
+ /** Stroke width for line icons. Default 2. */
149
+ strokeWidth?: number;
150
+ /** Render as a filled glyph instead of a stroked line icon. */
151
+ fill?: boolean;
152
+ /** Accessible title; sets `role="img"` + `aria-label`. Omit for decorative icons. */
153
+ title?: string;
154
+ /** Registry to resolve `name` against. Defaults to the built-in set. */
155
+ registry?: IrisIconRegistry;
156
+ }
157
+ /**
158
+ * Renders a registered icon as inline SVG. Resolves `name` through an
159
+ * `@iris-ui-kit/icons` registry and renders the icon's structured nodes as real
160
+ * SVG child elements (no raw-HTML injection). Colors follow `currentColor`, so
161
+ * the surrounding CSS `color` themes it. Renders nothing for an unresolved name.
162
+ */
163
+ declare function IrisIcon({ name, size, strokeWidth, fill, title, registry, style, ...rest }: IrisIconProps): React.ReactElement | null;
164
+
165
+ type IrisCardVariant = 'elevated' | 'outline' | 'subtle';
166
+ type IrisCardPadding = 'none' | 'sm' | 'md' | 'lg';
167
+ interface IrisCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
168
+ variant?: IrisCardVariant;
169
+ padding?: IrisCardPadding;
170
+ hover?: boolean;
171
+ header?: React.ReactNode;
172
+ footer?: React.ReactNode;
173
+ children?: React.ReactNode;
174
+ }
175
+ /**
176
+ * React port of {@link import('@iris-ui-kit/vue').IrisCard}.
177
+ *
178
+ * @example
179
+ * <IrisCard variant="elevated" header={<h3>Title</h3>}>
180
+ * Card body content.
181
+ * </IrisCard>
182
+ */
183
+ declare function IrisCard({ variant, padding, hover, header, footer, children, style, ...rest }: IrisCardProps): React.ReactElement;
184
+
185
+ type IrisSkeletonShape = 'rect' | 'circle' | 'text';
186
+ interface IrisSkeletonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
187
+ width?: string | number;
188
+ height?: string | number;
189
+ shape?: IrisSkeletonShape;
190
+ animated?: boolean;
191
+ }
192
+ /**
193
+ * A placeholder shape that pulses to indicate content is loading. Supports
194
+ * `rect`, `circle`, and `text` shapes with configurable dimensions. Its
195
+ * shimmer animation respects `prefers-reduced-motion`.
196
+ */
197
+ declare function IrisSkeleton({ width, height, shape, animated, style, ...rest }: IrisSkeletonProps): React.ReactElement;
198
+
199
+ declare const __SKELETON_STYLE_ID = "iris-skeleton-styles";
200
+ declare function __resetSkeletonStyles(): void;
201
+
202
+ type IrisProgressTone = 'primary' | 'success' | 'warning' | 'danger';
203
+ type IrisProgressSize = 'sm' | 'md';
204
+ interface IrisProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
205
+ value?: number | null;
206
+ max?: number;
207
+ indeterminate?: boolean;
208
+ tone?: IrisProgressTone;
209
+ size?: IrisProgressSize;
210
+ }
211
+ /**
212
+ * A horizontal progress bar. Supports determinate mode (controlled `value`)
213
+ * and indeterminate (indefinite animation) for ongoing operations. Customisable
214
+ * via `tone` and `size` props; renders `role="progressbar"`.
215
+ */
216
+ declare function IrisProgress({ value, max, indeterminate, tone, size, style, ...rest }: IrisProgressProps): React.ReactElement;
217
+
218
+ declare const __PROGRESS_STYLE_ID = "iris-progress-styles";
219
+ declare function __resetProgressStyles(): void;
220
+
221
+ type IrisAlertTone = 'info' | 'success' | 'warning' | 'danger';
222
+ interface IrisAlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
223
+ tone?: IrisAlertTone;
224
+ title?: React.ReactNode;
225
+ closable?: boolean;
226
+ open?: boolean;
227
+ onClose?: () => void;
228
+ icon?: React.ReactNode;
229
+ children?: React.ReactNode;
230
+ }
231
+ /**
232
+ * React port of {@link import('@iris-ui-kit/vue').IrisAlert}.
233
+ *
234
+ * @example
235
+ * <IrisAlert tone="warning" title="Heads up" closable onClose={dismiss}>
236
+ * Your session expires soon.
237
+ * </IrisAlert>
238
+ */
239
+ declare function IrisAlert({ tone, title, closable, open, onClose, icon, children, style, ...rest }: IrisAlertProps): React.ReactElement | null;
240
+
241
+ type IrisChipVariant = 'solid' | 'outline' | 'subtle';
242
+ type IrisChipTone = 'primary' | 'success' | 'warning' | 'danger' | 'neutral';
243
+ type IrisChipSize = 'sm' | 'md';
244
+ interface IrisChipProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick' | 'children'> {
245
+ variant?: IrisChipVariant;
246
+ tone?: IrisChipTone;
247
+ size?: IrisChipSize;
248
+ closable?: boolean;
249
+ clickable?: boolean;
250
+ disabled?: boolean;
251
+ onClose?: () => void;
252
+ onClick?: (event: React.MouseEvent<HTMLElement>) => void;
253
+ icon?: React.ReactNode;
254
+ children?: React.ReactNode;
255
+ }
256
+ /** React port of {@link import('@iris-ui-kit/vue').IrisChip}. */
257
+ declare function IrisChip({ variant, tone, size, closable, clickable, disabled, onClose, onClick, icon, children, style, ...rest }: IrisChipProps): React.ReactElement;
258
+
259
+ type IrisKbdSize = 'sm' | 'md';
260
+ interface IrisKbdProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
261
+ keys?: string | string[];
262
+ separator?: string;
263
+ size?: IrisKbdSize;
264
+ children?: React.ReactNode;
265
+ }
266
+ /** React port of {@link import('@iris-ui-kit/vue').IrisKbd}. */
267
+ declare function IrisKbd({ keys, separator, size, children, style, ...rest }: IrisKbdProps): React.ReactElement | null;
268
+
269
+ type IrisDividerOrientation = 'horizontal' | 'vertical';
270
+ type IrisDividerSpacing = 'sm' | 'md' | 'lg';
271
+ interface IrisDividerProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
272
+ orientation?: IrisDividerOrientation;
273
+ label?: React.ReactNode;
274
+ spacing?: IrisDividerSpacing;
275
+ children?: React.ReactNode;
276
+ }
277
+ /** React port of {@link import('@iris-ui-kit/vue').IrisDivider}. */
278
+ declare function IrisDivider({ orientation, label, spacing, children, style, ...rest }: IrisDividerProps): React.ReactElement;
279
+
280
+ interface IrisEmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'children'> {
281
+ title?: React.ReactNode;
282
+ description?: React.ReactNode;
283
+ icon?: React.ReactNode;
284
+ action?: React.ReactNode;
285
+ children?: React.ReactNode;
286
+ }
287
+ /** React port of {@link import('@iris-ui-kit/vue').IrisEmptyState}. */
288
+ declare function IrisEmptyState({ title, description, icon, action, children, style, ...rest }: IrisEmptyStateProps): React.ReactElement;
289
+
290
+ type IrisInputSize = 'sm' | 'md' | 'lg';
291
+ type IrisInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url';
292
+ interface IrisInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type' | 'prefix'> {
293
+ size?: IrisInputSize;
294
+ type?: IrisInputType;
295
+ invalid?: boolean;
296
+ /** Forwarded as aria-describedby. */
297
+ ariaDescribedby?: string;
298
+ prefix?: React.ReactNode;
299
+ suffix?: React.ReactNode;
300
+ }
301
+ /**
302
+ * Single-line text input with size variants, an `invalid` state, and optional
303
+ * `prefix`/`suffix` adornments. Forwards its ref to the native `<input>`.
304
+ *
305
+ * @example
306
+ * <IrisInput value={name} onChange={(e) => setName(e.target.value)} placeholder="Name" />
307
+ */
308
+ declare const IrisInput: React.ForwardRefExoticComponent<IrisInputProps & React.RefAttributes<HTMLInputElement>>;
309
+
310
+ type IrisTextareaSize = 'sm' | 'md' | 'lg';
311
+ interface IrisTextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
312
+ size?: IrisTextareaSize;
313
+ invalid?: boolean;
314
+ ariaDescribedby?: string;
315
+ autosize?: boolean;
316
+ maxRows?: number;
317
+ }
318
+ /**
319
+ * Multi-line text input with size variants and an `invalid` state. Optionally
320
+ * grows to fit its content when `autosize` is set, capped at `maxRows`.
321
+ *
322
+ * @example
323
+ * <IrisTextarea value={bio} onChange={(e) => setBio(e.target.value)} autosize maxRows={6} />
324
+ */
325
+ declare const IrisTextarea: React.ForwardRefExoticComponent<IrisTextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
326
+
327
+ type IrisSwitchSize = 'sm' | 'md' | 'lg';
328
+ interface IrisSwitchProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'value' | 'checked' | 'onChange'> {
329
+ checked?: boolean;
330
+ defaultChecked?: boolean;
331
+ onChange?: (next: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
332
+ size?: IrisSwitchSize;
333
+ invalid?: boolean;
334
+ ariaDescribedby?: string;
335
+ }
336
+ /**
337
+ * Toggle switch for an on/off boolean, in controlled (`checked`) or
338
+ * uncontrolled (`defaultChecked`) modes. Rendered with `role="switch"`.
339
+ *
340
+ * @example
341
+ * <IrisSwitch checked={enabled} onChange={(next) => setEnabled(next)} />
342
+ */
343
+ declare const IrisSwitch: React.ForwardRefExoticComponent<IrisSwitchProps & React.RefAttributes<HTMLInputElement>>;
344
+
345
+ type IrisCheckboxSize = 'sm' | 'md' | 'lg';
346
+ type IrisCheckboxValue = boolean | 'indeterminate';
347
+ interface IrisCheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'value' | 'checked' | 'defaultChecked' | 'onChange'> {
348
+ /** `true`, `false`, or `'indeterminate'`. */
349
+ checked?: IrisCheckboxValue;
350
+ defaultChecked?: IrisCheckboxValue;
351
+ onChange?: (next: boolean, event: React.ChangeEvent<HTMLInputElement>) => void;
352
+ size?: IrisCheckboxSize;
353
+ invalid?: boolean;
354
+ ariaDescribedby?: string;
355
+ /** Label content rendered next to the box. */
356
+ children?: React.ReactNode;
357
+ }
358
+ /**
359
+ * Tri-state checkbox supporting `true`, `false`, and `'indeterminate'`, in both
360
+ * controlled (`checked`) and uncontrolled (`defaultChecked`) modes.
361
+ *
362
+ * @example
363
+ * <IrisCheckbox checked={agreed} onChange={(next) => setAgreed(next)}>
364
+ * I agree to the terms
365
+ * </IrisCheckbox>
366
+ */
367
+ declare const IrisCheckbox: React.ForwardRefExoticComponent<IrisCheckboxProps & React.RefAttributes<HTMLInputElement>>;
368
+
369
+ interface IrisPasswordInputProps extends Omit<IrisInputProps, 'type' | 'prefix' | 'suffix' | 'children'> {
370
+ /** Allow toggling visibility. Default true. */
371
+ showToggle?: boolean;
372
+ /** Custom suffix slot (rendered before the toggle). */
373
+ suffix?: React.ReactNode;
374
+ /** Custom prefix slot. */
375
+ prefix?: React.ReactNode;
376
+ }
377
+ /** React port of {@link import('@iris-ui-kit/vue').IrisPasswordInput}. */
378
+ declare const IrisPasswordInput: React.ForwardRefExoticComponent<IrisPasswordInputProps & React.RefAttributes<HTMLInputElement>>;
379
+
380
+ type IrisNumberInputSize = 'sm' | 'md' | 'lg';
381
+ interface IrisNumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'> {
382
+ value?: number | null;
383
+ defaultValue?: number | null;
384
+ onChange?: (next: number | null) => void;
385
+ size?: IrisNumberInputSize;
386
+ min?: number;
387
+ max?: number;
388
+ step?: number;
389
+ invalid?: boolean;
390
+ showControls?: boolean;
391
+ ariaDescribedby?: string;
392
+ }
393
+ /** React port of {@link import('@iris-ui-kit/vue').IrisNumberInput}. */
394
+ declare const IrisNumberInput: React.ForwardRefExoticComponent<IrisNumberInputProps & React.RefAttributes<HTMLInputElement>>;
395
+
396
+ type IrisOtpInputSize = 'sm' | 'md' | 'lg';
397
+ type IrisOtpInputType = 'numeric' | 'alphanumeric';
398
+ interface IrisOtpInputProps {
399
+ /** Controlled value (the full code). */
400
+ value?: string;
401
+ /** Initial value when uncontrolled. */
402
+ defaultValue?: string;
403
+ onValueChange?: (value: string) => void;
404
+ /** Fired once the code fills every cell. */
405
+ onComplete?: (value: string) => void;
406
+ /** Number of cells. Default 6. */
407
+ length?: number;
408
+ /** Allowed characters: digits only, or digits + letters. */
409
+ type?: IrisOtpInputType;
410
+ /** Mask entered characters (renders password cells). */
411
+ mask?: boolean;
412
+ size?: IrisOtpInputSize;
413
+ disabled?: boolean;
414
+ invalid?: boolean;
415
+ autoFocus?: boolean;
416
+ /** Placeholder glyph shown in empty cells. */
417
+ placeholder?: string;
418
+ /** id forwarded to the first cell so `<label htmlFor>` focuses it. Set by `IrisFormField`. */
419
+ id?: string;
420
+ /** Applied as `aria-describedby` on every cell. Set by `IrisFormField`. */
421
+ ariaDescribedby?: string;
422
+ style?: React.CSSProperties;
423
+ className?: string;
424
+ }
425
+ /**
426
+ * One-time-code / PIN entry: a row of single-character cells with smart focus
427
+ * movement, paste-to-fill, and keyboard editing. The value is kept contiguous
428
+ * (no interior gaps), masked optionally, and surfaced via `onValueChange`;
429
+ * `onComplete` fires when every cell is filled. Drop it inside `IrisFormField`
430
+ * — the injected `id` lands on the first cell so the label focuses it.
431
+ *
432
+ * React port of {@link import('@iris-ui-kit/vue').IrisOtpInput}.
433
+ */
434
+ declare function IrisOtpInput({ value: valueProp, defaultValue, onValueChange, onComplete, length, type, mask, size, disabled, invalid, autoFocus, placeholder, id, ariaDescribedby, style, className, }: IrisOtpInputProps): React.ReactElement;
435
+
436
+ type IrisRatingSize = 'sm' | 'md' | 'lg';
437
+ interface IrisRatingProps {
438
+ /** Controlled rating (0..max, in 0.5 steps when `allowHalf`). */
439
+ value?: number;
440
+ /** Initial value when uncontrolled. */
441
+ defaultValue?: number;
442
+ onValueChange?: (value: number) => void;
443
+ /** Number of stars. Default 5. */
444
+ max?: number;
445
+ /** Allow half-star precision. */
446
+ allowHalf?: boolean;
447
+ /** Display-only — no interaction. */
448
+ readonly?: boolean;
449
+ disabled?: boolean;
450
+ /** Clicking the current value again resets to 0. Default true. */
451
+ clearable?: boolean;
452
+ size?: IrisRatingSize;
453
+ invalid?: boolean;
454
+ /** Accessible label for the slider. */
455
+ label?: string;
456
+ /** id forwarded to the slider. Set by `IrisFormField`. */
457
+ id?: string;
458
+ /** Applied as `aria-describedby`. Set by `IrisFormField`. */
459
+ ariaDescribedby?: string;
460
+ style?: React.CSSProperties;
461
+ className?: string;
462
+ }
463
+ /**
464
+ * Star rating with optional half-star precision, hover preview, keyboard
465
+ * support, and a `readonly` display mode. Uses the `slider` ARIA pattern
466
+ * (`aria-valuemin/now/max` + arrow keys) so it reads correctly to assistive
467
+ * tech; stars are decorative. RTL-safe via logical fill clipping.
468
+ *
469
+ * React port of {@link import('@iris-ui-kit/vue').IrisRating}.
470
+ */
471
+ declare function IrisRating({ value: valueProp, defaultValue, onValueChange, max, allowHalf, readonly, disabled, clearable, size, invalid, label, id, ariaDescribedby, style, className, }: IrisRatingProps): React.ReactElement;
472
+
473
+ type IrisComboboxSize = 'sm' | 'md' | 'lg';
474
+ interface IrisComboboxOption {
475
+ label: string;
476
+ value: string;
477
+ disabled?: boolean;
478
+ }
479
+ interface IrisComboboxProps {
480
+ /** Controlled selected option value ('' = none). */
481
+ value?: string;
482
+ defaultValue?: string;
483
+ onValueChange?: (value: string) => void;
484
+ options: IrisComboboxOption[];
485
+ placeholder?: string;
486
+ disabled?: boolean;
487
+ invalid?: boolean;
488
+ size?: IrisComboboxSize;
489
+ /** Text shown when no option matches the query. Defaults to the i18n value. */
490
+ emptyText?: string;
491
+ /** id forwarded to the input. Set by `IrisFormField`. */
492
+ id?: string;
493
+ /** Applied as `aria-describedby` on the input. Set by `IrisFormField`. */
494
+ ariaDescribedby?: string;
495
+ style?: React.CSSProperties;
496
+ className?: string;
497
+ }
498
+ /**
499
+ * Filterable single-select (searchable select): a text input that type-ahead
500
+ * filters a listbox of options. The displayed text is derived
501
+ * (`filtering ? query : selected label`) so controlled value changes stay in
502
+ * sync without an effect. Opens downward; follows the ARIA 1.2 combobox pattern.
503
+ *
504
+ * React port of {@link import('@iris-ui-kit/vue').IrisCombobox}.
505
+ */
506
+ declare function IrisCombobox({ value: valueProp, defaultValue, onValueChange, options, placeholder, disabled, invalid, size, emptyText, id, ariaDescribedby, style, className, }: IrisComboboxProps): React.ReactElement;
507
+
508
+ type IrisTimelineVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';
509
+ interface IrisTimelineItem {
510
+ /** Stable key; falls back to the index. */
511
+ key?: string | number;
512
+ title?: React.ReactNode;
513
+ description?: React.ReactNode;
514
+ /** Timestamp / meta line shown above the title. */
515
+ time?: React.ReactNode;
516
+ /** Dot variant (maps to a theme color). */
517
+ variant?: IrisTimelineVariant;
518
+ /** Explicit dot color, overriding `variant`. */
519
+ color?: string;
520
+ }
521
+ interface IrisTimelineProps {
522
+ items: IrisTimelineItem[];
523
+ /** Replace the default content (time/title/description) for every item. */
524
+ renderItem?: (item: IrisTimelineItem, index: number) => React.ReactNode;
525
+ style?: React.CSSProperties;
526
+ className?: string;
527
+ }
528
+ /**
529
+ * Vertical event timeline: an ordered list of items, each with a colored dot,
530
+ * a connector line (omitted on the last item), and time/title/description
531
+ * content (or a custom `renderItem`). Semantic `<ol>` for assistive tech;
532
+ * RTL-safe via logical properties.
533
+ *
534
+ * React port of {@link import('@iris-ui-kit/vue').IrisTimeline}.
535
+ */
536
+ declare function IrisTimeline({ items, renderItem, style, className, }: IrisTimelineProps): React.ReactElement;
537
+
538
+ interface IrisCarouselProps {
539
+ /** Each child is a slide. */
540
+ children: React.ReactNode;
541
+ /** Controlled active slide index. */
542
+ index?: number;
543
+ defaultIndex?: number;
544
+ onIndexChange?: (index: number) => void;
545
+ /** Wrap around at the ends (default true). */
546
+ loop?: boolean;
547
+ /** Auto-advance slides. Disabled when the user prefers reduced motion. */
548
+ autoplay?: boolean;
549
+ /** Autoplay interval in ms (default 4000). */
550
+ interval?: number;
551
+ /** Pause autoplay while hovered (default true). */
552
+ pauseOnHover?: boolean;
553
+ showArrows?: boolean;
554
+ showIndicators?: boolean;
555
+ /** Accessible name for the carousel region. */
556
+ ariaLabel?: string;
557
+ style?: React.CSSProperties;
558
+ className?: string;
559
+ }
560
+ /**
561
+ * Slide carousel: shows one child slide at a time with prev/next controls,
562
+ * indicator dots, and keyboard (←/→) navigation. Controlled or uncontrolled.
563
+ * a11y: region with `aria-roledescription="carousel"`, per-slide labelling,
564
+ * and a polite live region announcing the active slide.
565
+ *
566
+ * React port of {@link import('@iris-ui-kit/vue').IrisCarousel}.
567
+ */
568
+ declare function IrisCarousel({ children, index: indexProp, defaultIndex, onIndexChange, loop, autoplay, interval, pauseOnHover, showArrows, showIndicators, ariaLabel, style, className, }: IrisCarouselProps): React.ReactElement;
569
+
570
+ type IrisStatisticSize = 'sm' | 'md' | 'lg';
571
+ type IrisStatisticTrend = 'up' | 'down' | 'neutral';
572
+ interface IrisStatisticProps {
573
+ label?: React.ReactNode;
574
+ value: React.ReactNode;
575
+ /** Rendered before the value (e.g. a currency sign). */
576
+ prefix?: React.ReactNode;
577
+ /** Rendered after the value (e.g. a unit). */
578
+ suffix?: React.ReactNode;
579
+ description?: React.ReactNode;
580
+ /** Trend direction — colors the trend line and shows a ▲/▼ glyph. */
581
+ trend?: IrisStatisticTrend;
582
+ /** Trend magnitude text (e.g. "12%"). */
583
+ trendValue?: React.ReactNode;
584
+ size?: IrisStatisticSize;
585
+ style?: React.CSSProperties;
586
+ className?: string;
587
+ }
588
+ /**
589
+ * Compact statistic / KPI display: a label, a prominent value (with optional
590
+ * prefix/suffix), an optional colored trend line, and a description. Pure
591
+ * presentation; the trend glyph is decorative (aria-hidden) — the magnitude
592
+ * text carries the meaning.
593
+ *
594
+ * React port of {@link import('@iris-ui-kit/vue').IrisStatistic}.
595
+ */
596
+ declare function IrisStatistic({ label, value, prefix, suffix, description, trend, trendValue, size, style, className, }: IrisStatisticProps): React.ReactElement;
597
+
598
+ type IrisDescriptionsLayout = 'horizontal' | 'vertical';
599
+ interface IrisDescriptionsItem {
600
+ key?: string | number;
601
+ label: React.ReactNode;
602
+ value: React.ReactNode;
603
+ }
604
+ interface IrisDescriptionsProps {
605
+ items: IrisDescriptionsItem[];
606
+ /** Number of label/value pairs per row. Default 1. */
607
+ columns?: number;
608
+ /** `horizontal` = label beside value; `vertical` = label above value. */
609
+ layout?: IrisDescriptionsLayout;
610
+ /** Boxed style with cell separators. */
611
+ bordered?: boolean;
612
+ style?: React.CSSProperties;
613
+ className?: string;
614
+ }
615
+ /**
616
+ * Description list: a semantic `<dl>` rendering label/value pairs in a grid.
617
+ * `columns` controls pairs-per-row, `layout` places the label beside or above
618
+ * the value, and `bordered` draws a boxed style with separators. RTL-safe via
619
+ * logical properties.
620
+ *
621
+ * React port of {@link import('@iris-ui-kit/vue').IrisDescriptions}.
622
+ */
623
+ declare function IrisDescriptions({ items, columns, layout, bordered, style, className, }: IrisDescriptionsProps): React.ReactElement;
624
+
625
+ interface IrisTransferItem {
626
+ label: string;
627
+ value: string;
628
+ disabled?: boolean;
629
+ }
630
+ interface IrisTransferProps {
631
+ options: IrisTransferItem[];
632
+ /** Values currently in the target (selected) pane. */
633
+ value?: string[];
634
+ defaultValue?: string[];
635
+ onValueChange?: (values: string[]) => void;
636
+ /** Pane titles: [available, selected]. */
637
+ titles?: [React.ReactNode, React.ReactNode];
638
+ /** Show a search box per pane. */
639
+ searchable?: boolean;
640
+ disabled?: boolean;
641
+ style?: React.CSSProperties;
642
+ className?: string;
643
+ }
644
+ /**
645
+ * Dual-list transfer: move items between an "available" and a "selected" pane
646
+ * via per-item checkboxes and the ›/‹ buttons. Controlled or uncontrolled
647
+ * (`value` = the selected values), with optional per-pane search and a
648
+ * select-all header. Built on native checkboxes for accessibility.
649
+ *
650
+ * React port of {@link import('@iris-ui-kit/vue').IrisTransfer}.
651
+ */
652
+ declare function IrisTransfer({ options, value: valueProp, defaultValue, onValueChange, titles, searchable, disabled, style, className, }: IrisTransferProps): React.ReactElement;
653
+
654
+ interface IrisWatermarkProps {
655
+ /** Watermark text, tiled across the area. */
656
+ content: string;
657
+ /** Content the watermark overlays. */
658
+ children?: React.ReactNode;
659
+ /** Rotation of each tile in degrees. */
660
+ rotate?: number;
661
+ fontSize?: number;
662
+ color?: string;
663
+ /** Overlay opacity (0–1). */
664
+ opacity?: number;
665
+ /** Spacing between tiles in px. */
666
+ gap?: number;
667
+ style?: React.CSSProperties;
668
+ className?: string;
669
+ }
670
+ /**
671
+ * Watermark: overlays tiled, rotated text over its content — for confidential
672
+ * or branded surfaces. The overlay is `aria-hidden`, non-selectable, and
673
+ * `pointer-events: none`, so it never interferes with the underlying UI. Built
674
+ * from structured `<span>` nodes (no raw HTML / canvas / SVG-string injection).
675
+ *
676
+ * React port of {@link import('@iris-ui-kit/vue').IrisWatermark}.
677
+ */
678
+ declare function IrisWatermark({ content, children, rotate, fontSize, color, opacity, gap, style, className, }: IrisWatermarkProps): React.ReactElement;
679
+
680
+ interface IrisBackTopProps {
681
+ /** Scroll container resolver. Defaults to the window. */
682
+ target?: () => HTMLElement | Window | null;
683
+ /** Show the button once the scroll position passes this (px). */
684
+ visibilityHeight?: number;
685
+ /** Scroll behavior; forced to 'auto' under reduced motion. */
686
+ behavior?: ScrollBehavior;
687
+ onClick?: () => void;
688
+ ariaLabel?: string;
689
+ children?: React.ReactNode;
690
+ style?: React.CSSProperties;
691
+ className?: string;
692
+ }
693
+ /**
694
+ * Back-to-top button: appears once the scroll target passes `visibilityHeight`
695
+ * and scrolls it back to the top on click (honoring reduced motion). Defaults
696
+ * to the window; pass `target` for a scrollable container.
697
+ *
698
+ * React port of {@link import('@iris-ui-kit/vue').IrisBackTop}.
699
+ */
700
+ declare function IrisBackTop({ target, visibilityHeight, behavior, onClick, ariaLabel, children, style, className, }: IrisBackTopProps): React.ReactElement | null;
701
+
702
+ interface IrisAffixProps {
703
+ /** Pin this many px from the top once scrolled past. */
704
+ offsetTop?: number;
705
+ /** Pin this many px from the bottom (used when `offsetTop` is unset). */
706
+ offsetBottom?: number;
707
+ /** Scroll container resolver. Defaults to the window. */
708
+ target?: () => HTMLElement | Window | null;
709
+ onChange?: (affixed: boolean) => void;
710
+ children: React.ReactNode;
711
+ style?: React.CSSProperties;
712
+ className?: string;
713
+ }
714
+ /**
715
+ * Affix: pins its content to the viewport once the user scrolls past it.
716
+ * Top mode (`offsetTop`) or bottom mode (`offsetBottom`); the placeholder
717
+ * reserves the content's height so the page doesn't jump when it detaches.
718
+ * `onChange` fires only when the affixed state flips.
719
+ *
720
+ * React port of {@link import('@iris-ui-kit/vue').IrisAffix}.
721
+ */
722
+ declare function IrisAffix({ offsetTop, offsetBottom, target, onChange, children, style, className, }: IrisAffixProps): React.ReactElement;
723
+
724
+ type IrisResultStatus = 'success' | 'error' | 'info' | 'warning';
725
+ interface IrisResultProps {
726
+ status?: IrisResultStatus;
727
+ title?: React.ReactNode;
728
+ subtitle?: React.ReactNode;
729
+ /** Override the default status glyph/icon. */
730
+ icon?: React.ReactNode;
731
+ /** Action area (e.g. buttons) below the text. */
732
+ extra?: React.ReactNode;
733
+ /** Additional content (e.g. error details). */
734
+ children?: React.ReactNode;
735
+ style?: React.CSSProperties;
736
+ className?: string;
737
+ }
738
+ /**
739
+ * Result: a centered outcome page for an operation — a status icon, title,
740
+ * subtitle, action area, and optional content. Use for success / error / 404 /
741
+ * 403 / 500 screens. Pure presentation; the status glyph is decorative.
742
+ *
743
+ * React port of {@link import('@iris-ui-kit/vue').IrisResult}.
744
+ */
745
+ declare function IrisResult({ status, title, subtitle, icon, extra, children, style, className, }: IrisResultProps): React.ReactElement;
746
+
747
+ type IrisTreeSelectSize = 'sm' | 'md' | 'lg';
748
+ interface IrisTreeSelectNode {
749
+ label: string;
750
+ value: string;
751
+ disabled?: boolean;
752
+ children?: IrisTreeSelectNode[];
753
+ }
754
+ interface IrisTreeSelectProps {
755
+ options: IrisTreeSelectNode[];
756
+ value?: string;
757
+ defaultValue?: string;
758
+ onValueChange?: (value: string) => void;
759
+ /** Node values expanded by default. */
760
+ defaultExpanded?: string[];
761
+ placeholder?: string;
762
+ disabled?: boolean;
763
+ invalid?: boolean;
764
+ size?: IrisTreeSelectSize;
765
+ /** id forwarded to the trigger. Set by `IrisFormField`. */
766
+ id?: string;
767
+ ariaDescribedby?: string;
768
+ style?: React.CSSProperties;
769
+ className?: string;
770
+ }
771
+ /**
772
+ * Hierarchical single-select: a trigger that opens a `role="tree"` dropdown
773
+ * with expand/collapse toggles. Selecting a node sets the value and closes.
774
+ * Controlled or uncontrolled; closes on select, Escape, or outside click.
775
+ *
776
+ * React port of {@link import('@iris-ui-kit/vue').IrisTreeSelect}.
777
+ */
778
+ declare function IrisTreeSelect({ options, value, defaultValue, onValueChange, defaultExpanded, placeholder, disabled, invalid, size, id, ariaDescribedby, style, className, }: IrisTreeSelectProps): React.ReactElement;
779
+
780
+ interface IrisMentionOption {
781
+ label: string;
782
+ value: string;
783
+ }
784
+ interface IrisMentionsProps {
785
+ value?: string;
786
+ defaultValue?: string;
787
+ onValueChange?: (value: string) => void;
788
+ options: IrisMentionOption[];
789
+ /** Trigger character. Default '@'. */
790
+ prefix?: string;
791
+ placeholder?: string;
792
+ disabled?: boolean;
793
+ invalid?: boolean;
794
+ rows?: number;
795
+ /** id forwarded to the textarea. Set by `IrisFormField`. */
796
+ id?: string;
797
+ ariaDescribedby?: string;
798
+ style?: React.CSSProperties;
799
+ className?: string;
800
+ }
801
+ /**
802
+ * Mentions: a textarea that opens an autocomplete listbox when the user types
803
+ * the trigger character (default `@`). Selecting a suggestion replaces the
804
+ * `@query` token with the chosen label. Keyboard: ↑/↓ to move, Enter to pick,
805
+ * Esc to dismiss.
806
+ *
807
+ * React port of {@link import('@iris-ui-kit/vue').IrisMentions}.
808
+ */
809
+ declare function IrisMentions({ value, defaultValue, onValueChange, options, prefix, placeholder, disabled, invalid, rows, id, ariaDescribedby, style, className, }: IrisMentionsProps): React.ReactElement;
810
+
811
+ type IrisCascaderSize = 'sm' | 'md' | 'lg';
812
+ interface IrisCascaderNode {
813
+ label: string;
814
+ value: string;
815
+ disabled?: boolean;
816
+ children?: IrisCascaderNode[];
817
+ }
818
+ interface IrisCascaderProps {
819
+ options: IrisCascaderNode[];
820
+ /** Selected path of values. */
821
+ value?: string[];
822
+ defaultValue?: string[];
823
+ onValueChange?: (path: string[]) => void;
824
+ placeholder?: string;
825
+ disabled?: boolean;
826
+ invalid?: boolean;
827
+ /** Separator between path labels in the trigger. */
828
+ separator?: string;
829
+ size?: IrisCascaderSize;
830
+ id?: string;
831
+ ariaDescribedby?: string;
832
+ style?: React.CSSProperties;
833
+ className?: string;
834
+ }
835
+ /**
836
+ * Cascader: a hierarchical select that drills down through columns — choosing a
837
+ * branch reveals its children in the next column; choosing a leaf commits the
838
+ * full path. Controlled or uncontrolled; closes on leaf-select, Escape, or
839
+ * outside click.
840
+ *
841
+ * React port of {@link import('@iris-ui-kit/vue').IrisCascader}.
842
+ */
843
+ declare function IrisCascader({ options, value, defaultValue, onValueChange, placeholder, disabled, invalid, separator, size, id, ariaDescribedby, style, className, }: IrisCascaderProps): React.ReactElement;
844
+
845
+ type IrisSegmentedSize = 'sm' | 'md' | 'lg';
846
+ interface IrisSegmentedOption {
847
+ label: string;
848
+ value: string;
849
+ disabled?: boolean;
850
+ }
851
+ interface IrisSegmentedProps {
852
+ options: Array<IrisSegmentedOption | string>;
853
+ value?: string;
854
+ defaultValue?: string;
855
+ onValueChange?: (value: string) => void;
856
+ size?: IrisSegmentedSize;
857
+ disabled?: boolean;
858
+ /** Stretch to fill the container width. */
859
+ block?: boolean;
860
+ ariaLabel?: string;
861
+ style?: React.CSSProperties;
862
+ className?: string;
863
+ }
864
+ /**
865
+ * Segmented control: a connected row of single-select segments with the active
866
+ * one visually raised. Radiogroup semantics with roving tabindex and Arrow /
867
+ * Home / End keyboard navigation — single-sourced in `createKeyboardNav`.
868
+ */
869
+ declare function IrisSegmented({ options, value, defaultValue, onValueChange, size, disabled, block, ariaLabel, style, className, }: IrisSegmentedProps): React.ReactElement;
870
+
871
+ interface IrisImageProps {
872
+ src: string;
873
+ alt?: string;
874
+ width?: number | string;
875
+ height?: number | string;
876
+ /** Shown when the image fails to load. */
877
+ fallback?: string;
878
+ /** Enable the click-to-zoom preview overlay. Default true. */
879
+ preview?: boolean;
880
+ style?: React.CSSProperties;
881
+ className?: string;
882
+ }
883
+ /**
884
+ * Image with a graceful error `fallback` and an optional click-to-zoom preview
885
+ * overlay (a `role="dialog"` lightbox dismissed by backdrop, close button, or
886
+ * Escape). Lazy-loaded by default.
887
+ *
888
+ * React port of {@link import('@iris-ui-kit/vue').IrisImage}.
889
+ */
890
+ declare function IrisImage({ src, alt, width, height, fallback, preview, style, className, }: IrisImageProps): React.ReactElement;
891
+
892
+ type IrisFloatButtonShape = 'circle' | 'square';
893
+ interface IrisFloatButtonAction {
894
+ key: string;
895
+ icon?: React.ReactNode;
896
+ label?: string;
897
+ ariaLabel?: string;
898
+ onClick?: () => void;
899
+ }
900
+ interface IrisFloatButtonProps {
901
+ icon?: React.ReactNode;
902
+ children?: React.ReactNode;
903
+ ariaLabel?: string;
904
+ onClick?: () => void;
905
+ shape?: IrisFloatButtonShape;
906
+ /** Speed-dial actions; when present, the button toggles them instead of `onClick`. */
907
+ actions?: IrisFloatButtonAction[];
908
+ /** Corner offsets (logical: distance from block-end / inline-end). */
909
+ offset?: {
910
+ bottom?: number;
911
+ right?: number;
912
+ };
913
+ style?: React.CSSProperties;
914
+ className?: string;
915
+ }
916
+ /**
917
+ * Floating action button: a fixed-position FAB. With `actions` it becomes a
918
+ * speed-dial — click toggles a `role="menu"` stack of actions (dismissed by
919
+ * selection, Escape, or outside click). Otherwise click runs `onClick`.
920
+ *
921
+ * React port of {@link import('@iris-ui-kit/vue').IrisFloatButton}.
922
+ */
923
+ declare function IrisFloatButton({ icon, children, ariaLabel, onClick, shape, actions, offset, style, className, }: IrisFloatButtonProps): React.ReactElement;
924
+
925
+ interface IrisAnchorItem {
926
+ href: string;
927
+ title: string;
928
+ key?: string;
929
+ }
930
+ interface IrisAnchorProps {
931
+ items: IrisAnchorItem[];
932
+ /** Scroll container resolver. Defaults to the window. */
933
+ target?: () => HTMLElement | Window | null;
934
+ /** Top offset (px) for active detection + scroll target. */
935
+ offset?: number;
936
+ onChange?: (href: string) => void;
937
+ ariaLabel?: string;
938
+ style?: React.CSSProperties;
939
+ className?: string;
940
+ }
941
+ /**
942
+ * Anchor: in-page navigation that scroll-spies its `#id` sections — the active
943
+ * link is the last section whose top has passed `offset`. Clicking a link
944
+ * smooth-scrolls to its section (honoring reduced motion).
945
+ *
946
+ * React port of {@link import('@iris-ui-kit/vue').IrisAnchor}.
947
+ */
948
+ declare function IrisAnchor({ items, target, offset, onChange, ariaLabel, style, className, }: IrisAnchorProps): React.ReactElement;
949
+
950
+ type IrisCountdownSize = 'sm' | 'md' | 'lg';
951
+ interface IrisCountdownProps {
952
+ /** Target time as an epoch timestamp (ms). */
953
+ value: number;
954
+ /** Token format: DD / HH / mm / ss / SSS. */
955
+ format?: string;
956
+ title?: React.ReactNode;
957
+ prefix?: React.ReactNode;
958
+ suffix?: React.ReactNode;
959
+ /** Fired once when the countdown reaches zero. */
960
+ onFinish?: () => void;
961
+ size?: IrisCountdownSize;
962
+ style?: React.CSSProperties;
963
+ className?: string;
964
+ }
965
+ /** Render remaining milliseconds via DD/HH/mm/ss/SSS tokens. */
966
+ declare function formatRemaining(ms: number, format: string): string;
967
+ /**
968
+ * Live countdown to a target timestamp. Ticks every second (or every 100ms
969
+ * when the format shows milliseconds), formats the remaining time via tokens,
970
+ * and fires `onFinish` once at zero.
971
+ *
972
+ * React port of {@link import('@iris-ui-kit/vue').IrisCountdown}.
973
+ */
974
+ declare function IrisCountdown({ value, format, title, prefix, suffix, onFinish, size, style, className, }: IrisCountdownProps): React.ReactElement;
975
+
976
+ interface IrisTourStep {
977
+ /** Element to spotlight for this step. */
978
+ target?: () => HTMLElement | null;
979
+ title?: React.ReactNode;
980
+ description?: React.ReactNode;
981
+ }
982
+ interface IrisTourProps {
983
+ steps: IrisTourStep[];
984
+ open?: boolean;
985
+ defaultOpen?: boolean;
986
+ onChange?: (index: number) => void;
987
+ onClose?: () => void;
988
+ onFinish?: () => void;
989
+ style?: React.CSSProperties;
990
+ className?: string;
991
+ }
992
+ /**
993
+ * Guided tour: an overlay that walks the user through `steps`, spotlighting an
994
+ * optional target per step and showing a dialog card with prev/next/skip
995
+ * controls. Controlled (`open`) or uncontrolled (`defaultOpen`); the step index
996
+ * is managed internally and resets each time the tour opens.
997
+ *
998
+ * React port of {@link import('@iris-ui-kit/vue').IrisTour}.
999
+ */
1000
+ declare function IrisTour({ steps, open, defaultOpen, onChange, onClose, onFinish, style, className, }: IrisTourProps): React.ReactElement | null;
1001
+
1002
+ interface IrisTagInputProps {
1003
+ value?: string[];
1004
+ defaultValue?: string[];
1005
+ onValueChange?: (tags: string[]) => void;
1006
+ placeholder?: string;
1007
+ disabled?: boolean;
1008
+ invalid?: boolean;
1009
+ /** Max number of tags. 0 / undefined = unlimited. */
1010
+ max?: number;
1011
+ allowDuplicates?: boolean;
1012
+ /** id forwarded to the input. Set by `IrisFormField`. */
1013
+ id?: string;
1014
+ ariaDescribedby?: string;
1015
+ style?: React.CSSProperties;
1016
+ className?: string;
1017
+ }
1018
+ /**
1019
+ * Tag / token input: a field where typed text becomes removable chips. Commit
1020
+ * a tag with Enter or a comma (pasted comma lists split too); Backspace on an
1021
+ * empty input removes the last tag; each chip has a remove button.
1022
+ *
1023
+ * React port of {@link import('@iris-ui-kit/vue').IrisTagInput}.
1024
+ */
1025
+ declare function IrisTagInput({ value, defaultValue, onValueChange, placeholder, disabled, invalid, max, allowDuplicates, id, ariaDescribedby, style, className, }: IrisTagInputProps): React.ReactElement;
1026
+
1027
+ type IrisCopyButtonSize = 'sm' | 'md' | 'lg';
1028
+ interface IrisCopyButtonProps {
1029
+ /** Text to copy to the clipboard. */
1030
+ text: string;
1031
+ /** Idle button content (default: localized "Copy"). */
1032
+ children?: React.ReactNode;
1033
+ /** Content shown briefly after copying (default: localized "Copied"). */
1034
+ copiedLabel?: React.ReactNode;
1035
+ /** How long the copied state lasts (ms). */
1036
+ timeout?: number;
1037
+ onCopy?: (text: string) => void;
1038
+ disabled?: boolean;
1039
+ size?: IrisCopyButtonSize;
1040
+ style?: React.CSSProperties;
1041
+ className?: string;
1042
+ }
1043
+ /**
1044
+ * Copy-to-clipboard button: writes `text` to the clipboard and flips to a
1045
+ * "Copied" state for `timeout` ms. The clipboard write is best-effort (guarded
1046
+ * for unsupported environments) and the copied state still reflects intent.
1047
+ *
1048
+ * React port of {@link import('@iris-ui-kit/vue').IrisCopyButton}.
1049
+ */
1050
+ declare function IrisCopyButton({ text, children, copiedLabel, timeout, onCopy, disabled, size, style, className, }: IrisCopyButtonProps): React.ReactElement;
1051
+
1052
+ type IrisProgressCircleStatus = 'default' | 'success' | 'danger' | 'warning';
1053
+ interface IrisProgressCircleProps {
1054
+ value: number;
1055
+ max?: number;
1056
+ /** Diameter in px. */
1057
+ size?: number;
1058
+ strokeWidth?: number;
1059
+ status?: IrisProgressCircleStatus;
1060
+ showLabel?: boolean;
1061
+ /** Custom center label given the rounded percent. */
1062
+ format?: (percent: number) => React.ReactNode;
1063
+ ariaLabel?: string;
1064
+ style?: React.CSSProperties;
1065
+ className?: string;
1066
+ }
1067
+ /**
1068
+ * Circular (ring) progress indicator built from a structured SVG — a track
1069
+ * circle plus a value circle whose `stroke-dashoffset` encodes the ratio. An
1070
+ * optional centered percent label sits on top. Distinct from the linear
1071
+ * `IrisProgress`.
1072
+ *
1073
+ * React port of {@link import('@iris-ui-kit/vue').IrisProgressCircle}.
1074
+ */
1075
+ declare function IrisProgressCircle({ value, max, size, strokeWidth, status, showLabel, format, ariaLabel, style, className, }: IrisProgressCircleProps): React.ReactElement;
1076
+
1077
+ type IrisSplitButtonVariant = 'primary' | 'default';
1078
+ type IrisSplitButtonSize = 'sm' | 'md' | 'lg';
1079
+ interface IrisSplitButtonAction {
1080
+ key: string;
1081
+ label: string;
1082
+ disabled?: boolean;
1083
+ onClick?: () => void;
1084
+ }
1085
+ interface IrisSplitButtonProps {
1086
+ children?: React.ReactNode;
1087
+ onClick?: () => void;
1088
+ actions?: IrisSplitButtonAction[];
1089
+ variant?: IrisSplitButtonVariant;
1090
+ size?: IrisSplitButtonSize;
1091
+ disabled?: boolean;
1092
+ menuAriaLabel?: string;
1093
+ style?: React.CSSProperties;
1094
+ className?: string;
1095
+ }
1096
+ /**
1097
+ * Split button: a primary action joined to a caret that opens a `role="menu"`
1098
+ * of secondary actions (dismissed by selection, Escape, or outside click).
1099
+ *
1100
+ * React port of {@link import('@iris-ui-kit/vue').IrisSplitButton}.
1101
+ */
1102
+ declare function IrisSplitButton({ children, onClick, actions, variant, size, disabled, menuAriaLabel, style, className, }: IrisSplitButtonProps): React.ReactElement;
1103
+
1104
+ interface IrisAspectRatioProps {
1105
+ /** Width / height ratio. Default 16/9. */
1106
+ ratio?: number;
1107
+ children?: React.ReactNode;
1108
+ style?: React.CSSProperties;
1109
+ className?: string;
1110
+ }
1111
+ /**
1112
+ * Aspect-ratio box: constrains its content to a fixed width/height ratio (via
1113
+ * the CSS `aspect-ratio` property), with an absolutely-filled content layer —
1114
+ * handy for images, video, and iframe embeds.
1115
+ *
1116
+ * React port of {@link import('@iris-ui-kit/vue').IrisAspectRatio}.
1117
+ */
1118
+ declare function IrisAspectRatio({ ratio, children, style, className, }: IrisAspectRatioProps): React.ReactElement;
1119
+
1120
+ type IrisVisuallyHiddenProps = React.HTMLAttributes<HTMLSpanElement>;
1121
+ /**
1122
+ * Visually-hidden content: present in the accessibility tree (read by screen
1123
+ * readers) but clipped from view — for labels, live-region announcements, and
1124
+ * extra context. Forwards attributes like `aria-live` / `role`.
1125
+ *
1126
+ * React port of {@link import('@iris-ui-kit/vue').IrisVisuallyHidden}.
1127
+ */
1128
+ declare function IrisVisuallyHidden({ children, style, ...rest }: IrisVisuallyHiddenProps): React.ReactElement;
1129
+
1130
+ type IrisScrollAreaAxis = 'vertical' | 'horizontal' | 'both';
1131
+ interface IrisScrollAreaProps {
1132
+ maxHeight?: number | string;
1133
+ maxWidth?: number | string;
1134
+ axis?: IrisScrollAreaAxis;
1135
+ children?: React.ReactNode;
1136
+ style?: React.CSSProperties;
1137
+ className?: string;
1138
+ }
1139
+ /**
1140
+ * Scroll area: a keyboard-focusable scroll container that constrains its
1141
+ * content via `maxHeight` / `maxWidth` and scrolls on the chosen `axis`. A
1142
+ * lightweight alternative to ad-hoc overflow styling.
1143
+ *
1144
+ * React port of {@link import('@iris-ui-kit/vue').IrisScrollArea}.
1145
+ */
1146
+ declare function IrisScrollArea({ maxHeight, maxWidth, axis, children, style, className, }: IrisScrollAreaProps): React.ReactElement;
1147
+
1148
+ type IrisRibbonPlacement = 'start' | 'end';
1149
+ interface IrisRibbonProps {
1150
+ text: React.ReactNode;
1151
+ /** Corner: 'end' = top inline-end (default), 'start' = top inline-start. */
1152
+ placement?: IrisRibbonPlacement;
1153
+ /** Badge background (defaults to the primary color). */
1154
+ color?: string;
1155
+ children?: React.ReactNode;
1156
+ style?: React.CSSProperties;
1157
+ className?: string;
1158
+ }
1159
+ /**
1160
+ * Ribbon: a corner badge ("New", "Sale", …) anchored to the top corner of its
1161
+ * content. RTL-safe via logical insets/radii.
1162
+ *
1163
+ * React port of {@link import('@iris-ui-kit/vue').IrisRibbon}.
1164
+ */
1165
+ declare function IrisRibbon({ text, placement, color, children, style, className, }: IrisRibbonProps): React.ReactElement;
1166
+
1167
+ type IrisGaugeStatus = 'default' | 'success' | 'danger' | 'warning';
1168
+ interface IrisGaugeProps {
1169
+ value: number;
1170
+ min?: number;
1171
+ max?: number;
1172
+ /** Diameter in px. */
1173
+ size?: number;
1174
+ strokeWidth?: number;
1175
+ status?: IrisGaugeStatus;
1176
+ showValue?: boolean;
1177
+ /** Custom center label given the value and rounded percent. */
1178
+ format?: (value: number, percent: number) => React.ReactNode;
1179
+ ariaLabel?: string;
1180
+ style?: React.CSSProperties;
1181
+ className?: string;
1182
+ }
1183
+ /**
1184
+ * Semicircular arc gauge built from a structured SVG — a 180° track arc plus a
1185
+ * value arc whose `stroke-dashoffset` encodes `(value − min) / (max − min)`.
1186
+ * Distinct from the full-ring `IrisProgressCircle`.
1187
+ *
1188
+ * React port of {@link import('@iris-ui-kit/vue').IrisGauge}.
1189
+ */
1190
+ declare function IrisGauge({ value, min, max, size, strokeWidth, status, showValue, format, ariaLabel, style, className, }: IrisGaugeProps): React.ReactElement;
1191
+
1192
+ type IrisMarqueeDirection = 'left' | 'right';
1193
+ interface IrisMarqueeProps {
1194
+ children?: React.ReactNode;
1195
+ /** Seconds for one full loop. */
1196
+ duration?: number;
1197
+ direction?: IrisMarqueeDirection;
1198
+ pauseOnHover?: boolean;
1199
+ /** Gap between the repeated copies (px). */
1200
+ gap?: number;
1201
+ style?: React.CSSProperties;
1202
+ className?: string;
1203
+ }
1204
+ /**
1205
+ * Marquee: an accessible auto-scrolling ticker. The content is rendered twice
1206
+ * (the second copy `aria-hidden`) for a seamless loop and animated with the Web
1207
+ * Animations API (no `@keyframes` injection). Pauses on hover and is disabled
1208
+ * under `prefers-reduced-motion`.
1209
+ *
1210
+ * React port of {@link import('@iris-ui-kit/vue').IrisMarquee}.
1211
+ */
1212
+ declare function IrisMarquee({ children, duration, direction, pauseOnHover, gap, style, className, }: IrisMarqueeProps): React.ReactElement;
1213
+
1214
+ interface IrisMasonryProps {
1215
+ /** Number of columns. */
1216
+ columns?: number;
1217
+ /** Gap between items (px). */
1218
+ gap?: number;
1219
+ children?: React.ReactNode;
1220
+ style?: React.CSSProperties;
1221
+ className?: string;
1222
+ }
1223
+ /**
1224
+ * Masonry layout: flows children into balanced columns via CSS multi-column,
1225
+ * with each item kept from breaking across columns — for card grids and
1226
+ * galleries of varying heights.
1227
+ *
1228
+ * React port of {@link import('@iris-ui-kit/vue').IrisMasonry}.
1229
+ */
1230
+ declare function IrisMasonry({ columns, gap, children, style, className, }: IrisMasonryProps): React.ReactElement;
1231
+
1232
+ interface IrisFieldsetProps {
1233
+ legend?: React.ReactNode;
1234
+ /** Disables the whole group (native fieldset disabling propagates to controls). */
1235
+ disabled?: boolean;
1236
+ hint?: React.ReactNode;
1237
+ children?: React.ReactNode;
1238
+ style?: React.CSSProperties;
1239
+ className?: string;
1240
+ }
1241
+ /**
1242
+ * Fieldset: a semantic `<fieldset>` / `<legend>` form grouping. `disabled` uses
1243
+ * the native fieldset behavior that cascades to every nested form control —
1244
+ * accessible by construction.
1245
+ *
1246
+ * React port of {@link import('@iris-ui-kit/vue').IrisFieldset}.
1247
+ */
1248
+ declare function IrisFieldset({ legend, disabled, hint, children, style, className, }: IrisFieldsetProps): React.ReactElement;
1249
+
1250
+ type IrisToolbarOrientation = 'horizontal' | 'vertical';
1251
+ interface IrisToolbarProps {
1252
+ children?: React.ReactNode;
1253
+ orientation?: IrisToolbarOrientation;
1254
+ ariaLabel?: string;
1255
+ style?: React.CSSProperties;
1256
+ className?: string;
1257
+ }
1258
+ /**
1259
+ * Toolbar: a `role="toolbar"` grouping of actions with roving-tabindex keyboard
1260
+ * navigation — one item is in the tab order, and Arrow keys (per orientation)
1261
+ * plus Home/End move focus and the tab stop between the focusable children.
1262
+ *
1263
+ * React port of {@link import('@iris-ui-kit/vue').IrisToolbar}.
1264
+ *
1265
+ * Keyboard navigation is single-sourced in `createKeyboardNav` from the core
1266
+ * package — the controller handles orientation-aware Arrow keys, looping, and
1267
+ * Home/End; this component only owns the bridge to the DOM (tabindex + focus).
1268
+ */
1269
+ declare function IrisToolbar({ children, orientation, ariaLabel, style, className, }: IrisToolbarProps): React.ReactElement;
1270
+
1271
+ type IrisRadioSize = 'sm' | 'md' | 'lg';
1272
+ interface IrisRadioProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'value' | 'checked' | 'onChange' | 'defaultChecked'> {
1273
+ value: string;
1274
+ size?: IrisRadioSize;
1275
+ children?: React.ReactNode;
1276
+ }
1277
+ /** Single radio button. Must be used inside an `IrisRadioGroup`. */
1278
+ declare const IrisRadio: React.ForwardRefExoticComponent<IrisRadioProps & React.RefAttributes<HTMLInputElement>>;
1279
+
1280
+ interface IrisRadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
1281
+ /** Group name. Auto-generated if omitted. */
1282
+ name?: string;
1283
+ value?: string | null;
1284
+ defaultValue?: string | null;
1285
+ onChange?: (next: string) => void;
1286
+ disabled?: boolean;
1287
+ orientation?: 'horizontal' | 'vertical';
1288
+ children?: React.ReactNode;
1289
+ }
1290
+ /**
1291
+ * React port of {@link import('@iris-ui-kit/vue').IrisRadioGroup}.
1292
+ *
1293
+ * @example
1294
+ * <IrisRadioGroup value={plan} onChange={setPlan}>
1295
+ * <IrisRadio value="free">Free</IrisRadio>
1296
+ * <IrisRadio value="pro">Pro</IrisRadio>
1297
+ * </IrisRadioGroup>
1298
+ */
1299
+ declare function IrisRadioGroup({ name, value, defaultValue, onChange, disabled, orientation, style, children, ...rest }: IrisRadioGroupProps): React.ReactElement;
1300
+
1301
+ interface RadioGroupContextValue {
1302
+ name: string;
1303
+ value: string | null;
1304
+ setValue: (next: string) => void;
1305
+ disabled: boolean;
1306
+ }
1307
+ declare const RadioGroupContext: React.Context<RadioGroupContextValue | null>;
1308
+
1309
+ interface IrisSlotProps {
1310
+ children?: React.ReactNode;
1311
+ [key: string]: unknown;
1312
+ }
1313
+ /**
1314
+ * asChild composition primitive: clones the single React element child and
1315
+ * merges the Slot's own props into it. `style` shallow-merges, `className`
1316
+ * concatenates, event handlers compose (Slot's first, then child's), and any
1317
+ * other prop on the child wins over Slot's. Used as a building block for
1318
+ * trigger primitives that want to render-as the consumer's chosen element.
1319
+ */
1320
+ declare const IrisSlot: React.ForwardRefExoticComponent<Omit<IrisSlotProps, "ref"> & React.RefAttributes<unknown>>;
1321
+
1322
+ interface IrisFormFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1323
+ label?: string;
1324
+ hint?: string;
1325
+ error?: string;
1326
+ required?: boolean;
1327
+ /** Override the auto-generated control id. */
1328
+ labelFor?: string;
1329
+ /** Visual size of the label. */
1330
+ size?: 'sm' | 'md';
1331
+ children?: React.ReactNode;
1332
+ }
1333
+ /**
1334
+ * Form-field wrapper that handles the label / hint / error trio with the
1335
+ * right a11y plumbing. Non-invasive wrapper around any Iris input primitive
1336
+ * (`IrisInput`, `IrisTextarea`, `IrisNumberInput`, `IrisSwitch`, `IrisCheckbox`,
1337
+ * `IrisPasswordInput`, …): locates the first valid React element in `children`
1338
+ * and clones it with the generated `id`, `aria-describedby`, and `invalid`.
1339
+ *
1340
+ * ```tsx
1341
+ * <IrisFormField label="Email" error={errors.email} hint="We never share it.">
1342
+ * <IrisInput value={email} onChange={setEmail} />
1343
+ * </IrisFormField>
1344
+ * ```
1345
+ */
1346
+ declare const IrisFormField: React.ForwardRefExoticComponent<IrisFormFieldProps & React.RefAttributes<HTMLDivElement>>;
1347
+
1348
+ interface IrisTooltipProps {
1349
+ /** Plain-text tooltip content. */
1350
+ content?: React.ReactNode;
1351
+ /** Side relative to the trigger; may flip to stay in view. */
1352
+ placement?: Placement;
1353
+ /** Pixel offset between trigger and tooltip. */
1354
+ offset?: number;
1355
+ /** Hover/focus dwell before opening, in ms. */
1356
+ openDelay?: number;
1357
+ /** Hover/blur dwell before closing, in ms. */
1358
+ closeDelay?: number;
1359
+ /** Portal target. `false` renders in place; an HTMLElement renders inside it; default = `document.body`. */
1360
+ portalTarget?: HTMLElement | false;
1361
+ /** Disable the tooltip without removing the trigger. */
1362
+ disabled?: boolean;
1363
+ children?: React.ReactNode;
1364
+ }
1365
+ /**
1366
+ * Hover / focus triggered tooltip. Powered by `createHoverIntent` state machine.
1367
+ *
1368
+ * Zero-delay uses `hi.open()`/`hi.close()` (FORCE_OPEN/FORCE_CLOSE — single
1369
+ * machine transition) so React renders synchronously. Positive delays use
1370
+ * `hi.pointerEnter()`/`hi.pointerLeave()` with the machine's `after` timer.
1371
+ *
1372
+ * @example
1373
+ * <IrisTooltip content="Save changes">
1374
+ * <button>Save</button>
1375
+ * </IrisTooltip>
1376
+ */
1377
+ declare function IrisTooltip({ content, placement, offset, openDelay, closeDelay, portalTarget, disabled, children, }: IrisTooltipProps): React.ReactElement | null;
1378
+
1379
+ interface IrisPopoverProps {
1380
+ /** Controlled open value. Combine with `onOpenChange`. */
1381
+ open?: boolean;
1382
+ /** Initial open value in uncontrolled mode. */
1383
+ defaultOpen?: boolean;
1384
+ /** Called whenever the open state changes (controlled or uncontrolled). */
1385
+ onOpenChange?: (open: boolean) => void;
1386
+ /** Anchor placement; may be flipped by Floating UI to stay in view. */
1387
+ placement?: Placement;
1388
+ /** Distance in px between trigger and content. */
1389
+ offset?: number;
1390
+ children?: React.ReactNode;
1391
+ }
1392
+ /**
1393
+ * Root provider for a Popover surface. Wraps the trigger and the content,
1394
+ * threads a state machine + DOM refs + positioning options through context.
1395
+ * Supports controlled (`open` + `onOpenChange`) and uncontrolled (`defaultOpen`)
1396
+ * modes.
1397
+ *
1398
+ * @example
1399
+ * <IrisPopover defaultOpen={false} placement="bottom-start">
1400
+ * <IrisPopoverTrigger>Click me</IrisPopoverTrigger>
1401
+ * <IrisPopoverContent>Hello</IrisPopoverContent>
1402
+ * </IrisPopover>
1403
+ */
1404
+ declare function IrisPopover({ open: openProp, defaultOpen, onOpenChange, placement, offset, children, }: IrisPopoverProps): React.ReactElement;
1405
+
1406
+ interface IrisPopoverTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1407
+ /** Use the single child as the trigger instead of rendering a `<button>`. */
1408
+ asChild?: boolean;
1409
+ children?: React.ReactNode;
1410
+ }
1411
+ /**
1412
+ * The element the user interacts with to toggle the Popover. Renders a
1413
+ * `<button type="button">` by default; pass `asChild` to attach behavior to
1414
+ * any single element (e.g. `<IrisButton>` or `<a>`).
1415
+ *
1416
+ * a11y attributes wired automatically:
1417
+ * - `aria-haspopup="dialog"`
1418
+ * - `aria-expanded="true|false"` driven by the open state
1419
+ * - `aria-controls` pointing at the content's id
1420
+ */
1421
+ declare const IrisPopoverTrigger: React.ForwardRefExoticComponent<IrisPopoverTriggerProps & React.RefAttributes<HTMLElement>>;
1422
+
1423
+ interface IrisPopoverContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1424
+ /** Portal target. `false` renders in place; an HTMLElement renders inside it; default = `document.body`. */
1425
+ portalTarget?: HTMLElement | false;
1426
+ /** Move focus into the content on open (default: true). */
1427
+ autoFocus?: boolean;
1428
+ /** Restore focus to the trigger on close (default: true). */
1429
+ restoreFocus?: boolean;
1430
+ children?: React.ReactNode;
1431
+ }
1432
+ /**
1433
+ * The floating panel rendered when the Popover is open. Position is computed
1434
+ * by `useFloating` (Floating UI); dismissal is handled by document-level
1435
+ * pointerdown + Escape listeners. Focus moves into the content on open and
1436
+ * back to the trigger on close.
1437
+ *
1438
+ * The content is portaled to `document.body` by default to avoid stacking /
1439
+ * overflow / z-index foot-guns. Pass `portalTarget={false}` to render inline.
1440
+ */
1441
+ declare const IrisPopoverContent: React.ForwardRefExoticComponent<IrisPopoverContentProps & React.RefAttributes<HTMLDivElement>>;
1442
+
1443
+ interface PopoverContextValue {
1444
+ open: boolean;
1445
+ setOpen: (next: boolean) => void;
1446
+ triggerRef: React.MutableRefObject<HTMLElement | null>;
1447
+ contentRef: React.MutableRefObject<HTMLElement | null>;
1448
+ contentId: string;
1449
+ placement: Placement;
1450
+ offset: number;
1451
+ }
1452
+ declare const PopoverContext: React.Context<PopoverContextValue | null>;
1453
+ declare function usePopoverContext(componentName: string): PopoverContextValue;
1454
+
1455
+ interface IrisDialogProps {
1456
+ /** Controlled open value. Combine with `onOpenChange`. */
1457
+ open?: boolean;
1458
+ /** Initial open value in uncontrolled mode. */
1459
+ defaultOpen?: boolean;
1460
+ /** Emitted whenever the open state changes. */
1461
+ onOpenChange?: (open: boolean) => void;
1462
+ /** Close on backdrop click. Default `true`. */
1463
+ closeOnOutsideClick?: boolean;
1464
+ /** Close on Escape key. Default `true`. */
1465
+ closeOnEscape?: boolean;
1466
+ children?: React.ReactNode;
1467
+ }
1468
+ /**
1469
+ * Modal dialog root. Wraps a Trigger + Content (+ optional Title /
1470
+ * Description / Close) and threads a state machine + DOM refs + IDs through
1471
+ * React context. Supports controlled (`open` + `onOpenChange`) and
1472
+ * uncontrolled (`defaultOpen`) modes.
1473
+ *
1474
+ * Unlike `IrisPopover`, Dialog:
1475
+ * - centers content with no anchor positioning,
1476
+ * - locks body scroll while open,
1477
+ * - traps Tab focus inside the content,
1478
+ * - renders a backdrop overlay that dismisses on click.
1479
+ *
1480
+ * @example
1481
+ * <IrisDialog>
1482
+ * <IrisDialogTrigger>Open</IrisDialogTrigger>
1483
+ * <IrisDialogContent>
1484
+ * <IrisDialogTitle>Confirm</IrisDialogTitle>
1485
+ * <IrisDialogClose>Done</IrisDialogClose>
1486
+ * </IrisDialogContent>
1487
+ * </IrisDialog>
1488
+ */
1489
+ declare function IrisDialog({ open: openProp, defaultOpen, onOpenChange, closeOnOutsideClick, closeOnEscape, children, }: IrisDialogProps): React.ReactElement;
1490
+
1491
+ interface IrisDialogTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1492
+ /** Use the single child as the trigger instead of rendering a `<button>`. */
1493
+ asChild?: boolean;
1494
+ children?: React.ReactNode;
1495
+ }
1496
+ /**
1497
+ * The element the user clicks to open the dialog. Renders a
1498
+ * `<button type="button">` by default; pass `asChild` to attach behavior
1499
+ * to any single element.
1500
+ */
1501
+ declare const IrisDialogTrigger: React.ForwardRefExoticComponent<IrisDialogTriggerProps & React.RefAttributes<HTMLElement>>;
1502
+
1503
+ interface IrisDialogContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1504
+ /** Portal target. `false` renders in place; default = `document.body`. */
1505
+ portalTarget?: HTMLElement | false;
1506
+ children?: React.ReactNode;
1507
+ }
1508
+ /**
1509
+ * The modal surface (and its backdrop). Renders only while the dialog is
1510
+ * open. Behaviors enabled automatically:
1511
+ *
1512
+ * - **Body scroll lock** — reference-counted across stacked dialogs.
1513
+ * - **Focus trap** — Tab cycling within content; restores focus on close.
1514
+ * - **Escape to dismiss** — controlled by `Dialog.closeOnEscape`.
1515
+ * - **Backdrop click to dismiss** — controlled by `Dialog.closeOnOutsideClick`.
1516
+ * - **ARIA** — `role="dialog"`, `aria-modal="true"`, `aria-labelledby` /
1517
+ * `aria-describedby` wired automatically when `<IrisDialogTitle>` /
1518
+ * `<IrisDialogDescription>` are present.
1519
+ */
1520
+ declare const IrisDialogContent: React.ForwardRefExoticComponent<IrisDialogContentProps & React.RefAttributes<HTMLDivElement>>;
1521
+ interface IrisDialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
1522
+ as?: keyof React.JSX.IntrinsicElements;
1523
+ }
1524
+ /**
1525
+ * Sets `aria-labelledby` on the dialog content automatically. Renders an
1526
+ * `<h2>` by default.
1527
+ */
1528
+ declare const IrisDialogTitle: React.ForwardRefExoticComponent<IrisDialogTitleProps & React.RefAttributes<HTMLElement>>;
1529
+ interface IrisDialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {
1530
+ as?: keyof React.JSX.IntrinsicElements;
1531
+ }
1532
+ /**
1533
+ * Sets `aria-describedby` on the dialog content automatically. Renders a
1534
+ * `<p>` by default.
1535
+ */
1536
+ declare const IrisDialogDescription: React.ForwardRefExoticComponent<IrisDialogDescriptionProps & React.RefAttributes<HTMLElement>>;
1537
+ interface IrisDialogCloseProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1538
+ asChild?: boolean;
1539
+ children?: React.ReactNode;
1540
+ }
1541
+ /** Close button. Renders a `<button type="button">` or, with `asChild`, wraps the provided child. */
1542
+ declare const IrisDialogClose: React.ForwardRefExoticComponent<IrisDialogCloseProps & React.RefAttributes<HTMLElement>>;
1543
+
1544
+ interface DialogContextValue {
1545
+ open: boolean;
1546
+ setOpen: (next: boolean) => void;
1547
+ triggerRef: React.MutableRefObject<HTMLElement | null>;
1548
+ contentRef: React.MutableRefObject<HTMLElement | null>;
1549
+ contentId: string;
1550
+ titleId: string;
1551
+ descriptionId: string;
1552
+ hasTitle: boolean;
1553
+ hasDescription: boolean;
1554
+ registerTitle: () => () => void;
1555
+ registerDescription: () => () => void;
1556
+ closeOnOutsideClick: boolean;
1557
+ closeOnEscape: boolean;
1558
+ }
1559
+ declare const DialogContext: React.Context<DialogContextValue | null>;
1560
+ declare function useDialogContext(componentName: string): DialogContextValue;
1561
+
1562
+ type IrisDrawerSide = 'left' | 'right' | 'top' | 'bottom';
1563
+ interface DrawerContextValue {
1564
+ open: boolean;
1565
+ setOpen: (next: boolean) => void;
1566
+ triggerRef: React.MutableRefObject<HTMLElement | null>;
1567
+ contentRef: React.MutableRefObject<HTMLElement | null>;
1568
+ contentId: string;
1569
+ titleId: string;
1570
+ side: IrisDrawerSide;
1571
+ size: string;
1572
+ hasTitle: boolean;
1573
+ registerTitle: () => () => void;
1574
+ closeOnOutsideClick: boolean;
1575
+ closeOnEscape: boolean;
1576
+ }
1577
+ declare const DrawerContext: React.Context<DrawerContextValue | null>;
1578
+ declare function useDrawerContext(componentName: string): DrawerContextValue;
1579
+
1580
+ interface IrisDrawerProps {
1581
+ open?: boolean;
1582
+ defaultOpen?: boolean;
1583
+ onOpenChange?: (open: boolean) => void;
1584
+ side?: IrisDrawerSide;
1585
+ /** Width (for left/right) or height (for top/bottom). Any CSS length. */
1586
+ size?: string;
1587
+ closeOnOutsideClick?: boolean;
1588
+ closeOnEscape?: boolean;
1589
+ children?: React.ReactNode;
1590
+ }
1591
+ /**
1592
+ * Slide-in overlay. Mirrors `IrisDialog`'s composition but anchors to a
1593
+ * screen edge with a transform-based open animation. Defaults to the right.
1594
+ *
1595
+ * @example
1596
+ * <IrisDrawer>
1597
+ * <IrisDrawerTrigger>Open</IrisDrawerTrigger>
1598
+ * <IrisDrawerContent>
1599
+ * <IrisDrawerTitle>Settings</IrisDrawerTitle>
1600
+ * <p>…</p>
1601
+ * <IrisDrawerClose>Close</IrisDrawerClose>
1602
+ * </IrisDrawerContent>
1603
+ * </IrisDrawer>
1604
+ */
1605
+ declare function IrisDrawer({ open: openProp, defaultOpen, onOpenChange, side, size, closeOnOutsideClick, closeOnEscape, children, }: IrisDrawerProps): React.ReactElement;
1606
+
1607
+ interface IrisDrawerTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1608
+ asChild?: boolean;
1609
+ children?: React.ReactNode;
1610
+ }
1611
+ /**
1612
+ * The trigger that opens the drawer when clicked. Renders as a `<button>` (or
1613
+ * as custom children when `asChild`). Injects `aria-haspopup="dialog"` and
1614
+ * `aria-expanded` for screen-reader awareness.
1615
+ */
1616
+ declare const IrisDrawerTrigger: React.ForwardRefExoticComponent<IrisDrawerTriggerProps & React.RefAttributes<HTMLElement>>;
1617
+
1618
+ interface IrisDrawerContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1619
+ portalTarget?: HTMLElement | false;
1620
+ children?: React.ReactNode;
1621
+ }
1622
+ /**
1623
+ * The slide-in surface. Mounts when `open` becomes true and unmounts
1624
+ * `EXIT_DURATION_MS` after `open` becomes false so the slide-out transition
1625
+ * runs before removal. Provides backdrop, body scroll lock, focus trap, and
1626
+ * Escape / outside-click dismiss.
1627
+ */
1628
+ declare const IrisDrawerContent: React.ForwardRefExoticComponent<IrisDrawerContentProps & React.RefAttributes<HTMLDivElement>>;
1629
+ type IrisDrawerTitleProps = React.HTMLAttributes<HTMLHeadingElement>;
1630
+ /**
1631
+ * The drawer's header title, rendered as an `<h2>`. Automatically wired to
1632
+ * `aria-labelledby` on the content panel for accessible naming.
1633
+ */
1634
+ declare const IrisDrawerTitle: React.ForwardRefExoticComponent<IrisDrawerTitleProps & React.RefAttributes<HTMLHeadingElement>>;
1635
+ interface IrisDrawerCloseProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1636
+ asChild?: boolean;
1637
+ children?: React.ReactNode;
1638
+ }
1639
+ /**
1640
+ * A button that closes the drawer when clicked. Supports `asChild` for custom
1641
+ * trigger elements. Emits `onClick` then calls `setOpen(false)`.
1642
+ */
1643
+ declare const IrisDrawerClose: React.ForwardRefExoticComponent<IrisDrawerCloseProps & React.RefAttributes<HTMLElement>>;
1644
+
1645
+ interface IrisDropdownProps {
1646
+ open?: boolean;
1647
+ defaultOpen?: boolean;
1648
+ onOpenChange?: (open: boolean) => void;
1649
+ placement?: Placement;
1650
+ offset?: number;
1651
+ children?: React.ReactNode;
1652
+ }
1653
+ /**
1654
+ * Dropdown menu root. Composes `createFloatingMachine` (state) with
1655
+ * `useFloating` (positioning) used in `IrisDropdownMenu`. The dropdown
1656
+ * panel's semantics differ from a popover: it uses `role="menu"`, supports
1657
+ * arrow-key navigation, and items auto-close the menu on select.
1658
+ *
1659
+ * @example
1660
+ * <IrisDropdown placement="bottom-end">
1661
+ * <IrisDropdownTrigger>Actions</IrisDropdownTrigger>
1662
+ * <IrisDropdownMenu>
1663
+ * <IrisDropdownItem onSelect={onCopy}>Copy</IrisDropdownItem>
1664
+ * <IrisDropdownItem onSelect={onDelete}>Delete</IrisDropdownItem>
1665
+ * </IrisDropdownMenu>
1666
+ * </IrisDropdown>
1667
+ */
1668
+ declare function IrisDropdown({ open: openProp, defaultOpen, onOpenChange, placement, offset, children, }: IrisDropdownProps): React.ReactElement;
1669
+
1670
+ interface IrisDropdownTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
1671
+ asChild?: boolean;
1672
+ children?: React.ReactNode;
1673
+ }
1674
+ /**
1675
+ * The trigger element that toggles the dropdown open/closed on click or
1676
+ * ArrowDown/Enter/Space. Renders as a `<button>` (or custom element via
1677
+ * `asChild`) with `aria-haspopup="menu"` and `aria-expanded`.
1678
+ */
1679
+ declare const IrisDropdownTrigger: React.ForwardRefExoticComponent<IrisDropdownTriggerProps & React.RefAttributes<HTMLElement>>;
1680
+
1681
+ interface IrisDropdownMenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1682
+ portalTarget?: HTMLElement | false;
1683
+ children?: React.ReactNode;
1684
+ }
1685
+ /**
1686
+ * The menu surface. Renders `role="menu"` and handles ArrowUp/Down/Home/End
1687
+ * navigation across child `IrisDropdownItem`s. Closes on Escape, outside
1688
+ * pointerdown, and Tab.
1689
+ */
1690
+ declare const IrisDropdownMenu: React.ForwardRefExoticComponent<IrisDropdownMenuProps & React.RefAttributes<HTMLDivElement>>;
1691
+
1692
+ interface IrisDropdownItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
1693
+ disabled?: boolean;
1694
+ /** When true, selecting does NOT close the dropdown. */
1695
+ keepOpen?: boolean;
1696
+ /** Emitted on click or Enter/Space. */
1697
+ onSelect?: (event: React.SyntheticEvent) => void;
1698
+ }
1699
+ /**
1700
+ * A single selectable menu item. Calls `onSelect` and auto-closes the
1701
+ * parent dropdown after selection (unless `keepOpen`). Disabled items are
1702
+ * skipped by arrow-key navigation in the parent menu.
1703
+ */
1704
+ declare const IrisDropdownItem: React.ForwardRefExoticComponent<IrisDropdownItemProps & React.RefAttributes<HTMLDivElement>>;
1705
+ type IrisDropdownSeparatorProps = React.HTMLAttributes<HTMLDivElement>;
1706
+ /**
1707
+ * A visual separator (horizontal rule) within a dropdown menu. Renders a
1708
+ * `role="separator"` `<div>` styled with the theme's border colour.
1709
+ */
1710
+ declare const IrisDropdownSeparator: React.ForwardRefExoticComponent<IrisDropdownSeparatorProps & React.RefAttributes<HTMLDivElement>>;
1711
+
1712
+ interface DropdownContextValue {
1713
+ open: boolean;
1714
+ setOpen: (next: boolean) => void;
1715
+ triggerRef: React.MutableRefObject<HTMLElement | null>;
1716
+ contentRef: React.MutableRefObject<HTMLElement | null>;
1717
+ contentId: string;
1718
+ placement: Placement;
1719
+ offset: number;
1720
+ }
1721
+ declare const DropdownContext: React.Context<DropdownContextValue | null>;
1722
+ declare function useDropdownContext(componentName: string): DropdownContextValue;
1723
+
1724
+ type IrisToastVariant = 'default' | 'success' | 'danger' | 'warning' | 'info';
1725
+ interface IrisToastInput {
1726
+ /** Stable id; if reused, the existing toast is updated in place. */
1727
+ id?: string;
1728
+ title?: string;
1729
+ description?: string;
1730
+ variant?: IrisToastVariant;
1731
+ /** Auto-dismiss duration in ms. `0` or `Infinity` disables auto-dismiss. */
1732
+ duration?: number;
1733
+ /** Optional action label + handler. */
1734
+ action?: {
1735
+ label: string;
1736
+ onClick: () => void;
1737
+ };
1738
+ }
1739
+ interface IrisToast extends Required<Omit<IrisToastInput, 'action'>> {
1740
+ action: IrisToastInput['action'];
1741
+ createdAt: number;
1742
+ }
1743
+ /** Subscribe to changes. */
1744
+ declare const subscribeToasts: (listener: (toasts: IrisToast[]) => void) => () => void;
1745
+ /** Read current toasts. */
1746
+ declare const getToasts: () => IrisToast[];
1747
+ /**
1748
+ * Push a toast onto the queue. If an `id` is supplied and matches an existing
1749
+ * toast, the entry is replaced in place (and its timer reset).
1750
+ *
1751
+ * Returns the toast id so the caller can `dismissToast(id)` later.
1752
+ */
1753
+ declare function pushToast(input: IrisToastInput): string;
1754
+ /** Remove a toast by id. */
1755
+ declare function dismissToast(id: string): void;
1756
+ /** Remove all toasts. */
1757
+ declare function clearToasts(): void;
1758
+
1759
+ interface UseToastReturn {
1760
+ /** Push a new toast (or replace by id). Returns the toast id. */
1761
+ push: (input: IrisToastInput) => string;
1762
+ /** Convenience: push with variant pre-set. */
1763
+ success: (input: Omit<IrisToastInput, 'variant'>) => string;
1764
+ error: (input: Omit<IrisToastInput, 'variant'>) => string;
1765
+ warning: (input: Omit<IrisToastInput, 'variant'>) => string;
1766
+ info: (input: Omit<IrisToastInput, 'variant'>) => string;
1767
+ /** Remove a toast by id. */
1768
+ dismiss: (id: string) => void;
1769
+ /** Remove all toasts. */
1770
+ clear: () => void;
1771
+ }
1772
+ /**
1773
+ * Hook for the global toast queue. Backed by a module-level singleton
1774
+ * store, so it works **without** a surrounding provider — but the page
1775
+ * must mount exactly one `<IrisToastViewport>` somewhere for toasts to
1776
+ * actually be visible.
1777
+ *
1778
+ * @example
1779
+ * const toast = useToast()
1780
+ * toast.success({ title: 'Saved', description: 'Your changes are live.' })
1781
+ * toast.error({ title: 'Failed', duration: 6000 })
1782
+ */
1783
+ declare function useToast(): UseToastReturn;
1784
+
1785
+ type IrisToastPosition = 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center';
1786
+ interface IrisToastViewportProps extends React.HTMLAttributes<HTMLDivElement> {
1787
+ position?: IrisToastPosition;
1788
+ portalTarget?: HTMLElement | false;
1789
+ /** Maximum simultaneous toasts; older entries are evicted when exceeded. */
1790
+ max?: number;
1791
+ }
1792
+ /**
1793
+ * Renders the queued toasts. Mount exactly **one** of these per page. The
1794
+ * viewport subscribes to the module-level toast store; toasts pushed via
1795
+ * `useToast()` from any component appear here.
1796
+ *
1797
+ * Auto-dismiss timers are managed per toast (paused while the pointer is over
1798
+ * the viewport). Manual dismiss is via the close button.
1799
+ */
1800
+ declare function IrisToastViewport({ position, portalTarget, max, style, ...rest }: IrisToastViewportProps): React.ReactElement | null;
1801
+
1802
+ type IrisTabsOrientation = 'horizontal' | 'vertical';
1803
+ interface TabsContextValue {
1804
+ value: string | null;
1805
+ setValue: (next: string) => void;
1806
+ orientation: IrisTabsOrientation;
1807
+ disabled: boolean;
1808
+ lazy: boolean;
1809
+ /** Registers a trigger (mount). Returns an unregister function. */
1810
+ registerTrigger: (value: string, isDisabled: () => boolean) => () => void;
1811
+ moveFocus: (from: string, delta: 1 | -1 | 'home' | 'end') => void;
1812
+ listRef: React.MutableRefObject<HTMLElement | null>;
1813
+ }
1814
+ declare const TabsContext: React.Context<TabsContextValue | null>;
1815
+ declare function useTabsContext(componentName: string): TabsContextValue;
1816
+
1817
+ interface IrisTabsProps {
1818
+ /** Controlled active value. */
1819
+ value?: string;
1820
+ /** Initial active value in uncontrolled mode. */
1821
+ defaultValue?: string;
1822
+ onValueChange?: (next: string) => void;
1823
+ orientation?: IrisTabsOrientation;
1824
+ disabled?: boolean;
1825
+ /** When true (default), content panels are unmounted when not active. */
1826
+ lazy?: boolean;
1827
+ children?: React.ReactNode;
1828
+ }
1829
+ /**
1830
+ * Tabs root. Provides context for value, orientation, lazy mounting, and the
1831
+ * ordered set of registered triggers so arrow-key navigation can move focus
1832
+ * deterministically (skipping disabled triggers).
1833
+ *
1834
+ * @example
1835
+ * <IrisTabs defaultValue="a">
1836
+ * <IrisTabsList>
1837
+ * <IrisTabsTrigger value="a">First</IrisTabsTrigger>
1838
+ * <IrisTabsTrigger value="b">Second</IrisTabsTrigger>
1839
+ * </IrisTabsList>
1840
+ * <IrisTabsContent value="a">Panel A</IrisTabsContent>
1841
+ * <IrisTabsContent value="b">Panel B</IrisTabsContent>
1842
+ * </IrisTabs>
1843
+ */
1844
+ declare function IrisTabs({ value: valueProp, defaultValue, onValueChange, orientation, disabled, lazy, children, }: IrisTabsProps): React.ReactElement;
1845
+
1846
+ type IrisTabsListProps = React.HTMLAttributes<HTMLDivElement>;
1847
+ /** Container for `IrisTabsTrigger`s. Renders `<div role="tablist">`. */
1848
+ declare const IrisTabsList: React.ForwardRefExoticComponent<IrisTabsListProps & React.RefAttributes<HTMLDivElement>>;
1849
+
1850
+ interface IrisTabsTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'children'> {
1851
+ value: string;
1852
+ asChild?: boolean;
1853
+ children?: React.ReactNode;
1854
+ }
1855
+ /**
1856
+ * A single tab button. Registers with the parent `IrisTabs` so arrow keys
1857
+ * can navigate among triggers in registration order. Sets `aria-selected`
1858
+ * and `aria-controls`; uses roving tabindex.
1859
+ */
1860
+ declare const IrisTabsTrigger: React.ForwardRefExoticComponent<IrisTabsTriggerProps & React.RefAttributes<HTMLElement>>;
1861
+
1862
+ interface IrisTabsContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
1863
+ value: string;
1864
+ /** Render even when inactive; hidden via the `hidden` attribute. */
1865
+ forceMount?: boolean;
1866
+ children?: React.ReactNode;
1867
+ }
1868
+ /**
1869
+ * Panel paired with a `IrisTabsTrigger` by matching `value`. When `lazy` is
1870
+ * true on the parent (default), inactive panels are unmounted. Pass
1871
+ * `forceMount` to always render (e.g. for SEO or pre-warming).
1872
+ */
1873
+ declare const IrisTabsContent: React.ForwardRefExoticComponent<IrisTabsContentProps & React.RefAttributes<HTMLDivElement>>;
1874
+
1875
+ type IrisAccordionValue = string | string[] | null;
1876
+ interface IrisAccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
1877
+ value?: IrisAccordionValue;
1878
+ defaultValue?: IrisAccordionValue;
1879
+ onValueChange?: (next: IrisAccordionValue) => void;
1880
+ multiple?: boolean;
1881
+ /** In single mode, allow zero items open. */
1882
+ collapsible?: boolean;
1883
+ }
1884
+ /**
1885
+ * Container for collapsible sections.
1886
+ *
1887
+ * - `multiple=false` (default): zero or one item open at a time. The value
1888
+ * is `string | null`. Set `collapsible` to allow closing the active one.
1889
+ * - `multiple=true`: any number of items open. Value is `string[]`.
1890
+ */
1891
+ declare function IrisAccordion({ value: valueProp, defaultValue, onValueChange, multiple, collapsible, children, ...rest }: IrisAccordionProps): React.ReactElement;
1892
+
1893
+ interface IrisAccordionItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
1894
+ value: string;
1895
+ title?: React.ReactNode;
1896
+ disabled?: boolean;
1897
+ }
1898
+ /**
1899
+ * A single accordion section: a button-styled header + a collapsible body.
1900
+ * Wires `aria-expanded`, `aria-controls`, `role="region"`, `aria-labelledby`.
1901
+ */
1902
+ declare const IrisAccordionItem: React.ForwardRefExoticComponent<IrisAccordionItemProps & React.RefAttributes<HTMLDivElement>>;
1903
+
1904
+ interface AccordionContextValue {
1905
+ isOpen: (value: string) => boolean;
1906
+ toggle: (value: string) => void;
1907
+ rootId: string;
1908
+ collapsible: boolean;
1909
+ multiple: boolean;
1910
+ /** Current keyboard‑navigation active index. */
1911
+ activeIndex: number;
1912
+ /**
1913
+ * Register a trigger element for keyboard navigation.
1914
+ * Returns an unregister function for cleanup.
1915
+ */
1916
+ registerItem: (value: string, el: React.RefObject<HTMLButtonElement | null>) => () => void;
1917
+ /** Tell the nav controller to focus the item with the given value. */
1918
+ focusItem: (value: string) => void;
1919
+ }
1920
+ declare const AccordionContext: React.Context<AccordionContextValue | null>;
1921
+ declare function useAccordionContext(componentName: string): AccordionContextValue;
1922
+
1923
+ type IrisStepperOrientation = 'horizontal' | 'vertical';
1924
+ type IrisStepStatus = 'pending' | 'active' | 'completed' | 'error';
1925
+ interface StepperContextValue {
1926
+ current: number;
1927
+ total: number;
1928
+ orientation: IrisStepperOrientation;
1929
+ linear: boolean;
1930
+ /** Register a step at mount. Returns the assigned index and an unregister fn. */
1931
+ registerStep: () => {
1932
+ index: number;
1933
+ unregister: () => void;
1934
+ };
1935
+ goTo: (index: number) => void;
1936
+ computeStatus: (index: number) => IrisStepStatus;
1937
+ }
1938
+ declare const StepperContext: React.Context<StepperContextValue | null>;
1939
+ declare function useStepperContext(componentName: string): StepperContextValue;
1940
+
1941
+ interface IrisStepperProps extends Omit<React.HTMLAttributes<HTMLOListElement>, 'onChange'> {
1942
+ value?: number;
1943
+ defaultValue?: number;
1944
+ onValueChange?: (next: number) => void;
1945
+ orientation?: IrisStepperOrientation;
1946
+ /** When true (default), forward navigation is blocked beyond the current step. */
1947
+ linear?: boolean;
1948
+ }
1949
+ /**
1950
+ * Multi-step flow container. Children should be `IrisStepperStep`s; each
1951
+ * registers itself with the stepper's context and self-renders its indicator
1952
+ * + title.
1953
+ */
1954
+ declare function IrisStepper({ value: valueProp, defaultValue, onValueChange, orientation, linear, style, children, ...rest }: IrisStepperProps): React.ReactElement;
1955
+
1956
+ interface IrisStepperStepProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {
1957
+ title?: React.ReactNode;
1958
+ description?: React.ReactNode;
1959
+ /** Force a status; otherwise computed from position vs current. */
1960
+ status?: IrisStepStatus;
1961
+ disabled?: boolean;
1962
+ }
1963
+ /**
1964
+ * A single step in an {@link IrisStepper}. Auto-numbers based on its position
1965
+ * in the document order (registers on mount). Click forwards through `goTo`
1966
+ * which gates by `linear`.
1967
+ */
1968
+ declare const IrisStepperStep: React.ForwardRefExoticComponent<IrisStepperStepProps & React.RefAttributes<HTMLLIElement>>;
1969
+
1970
+ type IrisToggleGroupType = 'single' | 'multiple';
1971
+ type IrisToggleGroupOrientation = 'horizontal' | 'vertical';
1972
+ type IrisToggleGroupVariant = 'outline' | 'solid';
1973
+ type IrisToggleGroupSize = 'sm' | 'md' | 'lg';
1974
+ interface ToggleGroupContextValue {
1975
+ type: IrisToggleGroupType;
1976
+ orientation: IrisToggleGroupOrientation;
1977
+ size: IrisToggleGroupSize;
1978
+ variant: IrisToggleGroupVariant;
1979
+ disabled: boolean;
1980
+ isActive: (value: string) => boolean;
1981
+ toggle: (value: string) => void;
1982
+ registerItem: (value: string, el: {
1983
+ current: HTMLElement | null;
1984
+ }) => () => void;
1985
+ moveFocus: (from: string, delta: 1 | -1 | 'home' | 'end') => void;
1986
+ focusItem: (value: string) => void;
1987
+ }
1988
+ declare const ToggleGroupContext: React.Context<ToggleGroupContextValue | null>;
1989
+ declare function useToggleGroupContext(componentName: string): ToggleGroupContextValue;
1990
+
1991
+ type IrisToggleGroupValue = string | string[] | null;
1992
+ interface IrisToggleGroupSingleProps {
1993
+ type?: 'single';
1994
+ value?: string | null;
1995
+ defaultValue?: string | null;
1996
+ onValueChange?: (next: string | null) => void;
1997
+ }
1998
+ interface IrisToggleGroupMultipleProps {
1999
+ type: 'multiple';
2000
+ value?: string[];
2001
+ defaultValue?: string[];
2002
+ onValueChange?: (next: string[]) => void;
2003
+ }
2004
+ type IrisToggleGroupProps = (IrisToggleGroupSingleProps | IrisToggleGroupMultipleProps) & Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'type'> & {
2005
+ orientation?: IrisToggleGroupOrientation;
2006
+ size?: IrisToggleGroupSize;
2007
+ variant?: IrisToggleGroupVariant;
2008
+ disabled?: boolean;
2009
+ };
2010
+ /**
2011
+ * Segmented control. Two modes:
2012
+ * - `type="single"` — radio-like; value is `string | null`. Root gets
2013
+ * `role="radiogroup"`, items get `role="radio"` + `aria-checked`.
2014
+ * - `type="multiple"` — toggle-like; value is `string[]`. Root gets
2015
+ * `role="group"`, items get `aria-pressed`.
2016
+ */
2017
+ declare function IrisToggleGroup(props: IrisToggleGroupProps): React.ReactElement;
2018
+
2019
+ interface IrisToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'type'> {
2020
+ value: string;
2021
+ }
2022
+ /**
2023
+ * One toggle in an `IrisToggleGroup`. Renders a `<button>` with the correct
2024
+ * `role` / `aria-checked` / `aria-pressed` for the group's type.
2025
+ */
2026
+ declare const IrisToggleGroupItem: React.ForwardRefExoticComponent<IrisToggleGroupItemProps & React.RefAttributes<HTMLButtonElement>>;
2027
+
2028
+ type IrisPaginationSize = 'sm' | 'md';
2029
+ interface IrisPaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {
2030
+ /** Current page (1-indexed). Controlled. */
2031
+ value?: number;
2032
+ /** Initial page in uncontrolled mode. */
2033
+ defaultValue?: number;
2034
+ onValueChange?: (next: number) => void;
2035
+ /** Total number of items across all pages. */
2036
+ total: number;
2037
+ pageSize?: number;
2038
+ siblingCount?: number;
2039
+ showFirstLast?: boolean;
2040
+ size?: IrisPaginationSize;
2041
+ disabled?: boolean;
2042
+ }
2043
+ /**
2044
+ * Numeric page selector with prev/next + optional first/last buttons and
2045
+ * two-sided ellipsis. Stateless visual; the caller owns `value`.
2046
+ *
2047
+ * @example
2048
+ * <IrisPagination total={240} pageSize={20} value={page} onValueChange={setPage} />
2049
+ */
2050
+ declare function IrisPagination({ value: valueProp, defaultValue, onValueChange, total, pageSize, siblingCount, showFirstLast, size, disabled, style, ...rest }: IrisPaginationProps): React.ReactElement;
2051
+
2052
+ interface IrisBreadcrumbProps extends React.HTMLAttributes<HTMLElement> {
2053
+ /** String separator between crumbs. Default `/`. */
2054
+ separator?: React.ReactNode;
2055
+ children?: React.ReactNode;
2056
+ }
2057
+ /**
2058
+ * Container for breadcrumb navigation. Renders a `<nav>` with an `<ol>` per
2059
+ * WAI-ARIA. Inserts `separator` between items and tags the last child with
2060
+ * `isCurrent` so it renders as plain text + `aria-current="page"`.
2061
+ */
2062
+ declare const IrisBreadcrumb: React.ForwardRefExoticComponent<IrisBreadcrumbProps & React.RefAttributes<HTMLElement>>;
2063
+
2064
+ interface IrisBreadcrumbItemProps extends React.HTMLAttributes<HTMLElement> {
2065
+ href?: string;
2066
+ /** Internal: set by parent `IrisBreadcrumb` when this is the last item. */
2067
+ isCurrent?: boolean;
2068
+ children?: React.ReactNode;
2069
+ }
2070
+ /**
2071
+ * A single breadcrumb crumb. Renders an `<a>` when `href` is given and the
2072
+ * crumb is not the last one; otherwise a `<span>`. The `isCurrent` flag is
2073
+ * set automatically by the parent `IrisBreadcrumb` based on position.
2074
+ */
2075
+ declare const IrisBreadcrumbItem: React.ForwardRefExoticComponent<IrisBreadcrumbItemProps & React.RefAttributes<HTMLElement>>;
2076
+
2077
+ interface IrisDraggerPosition {
2078
+ x: number;
2079
+ y: number;
2080
+ }
2081
+ interface IrisDraggerBounds {
2082
+ minX?: number;
2083
+ maxX?: number;
2084
+ minY?: number;
2085
+ maxY?: number;
2086
+ }
2087
+ interface IrisDraggerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'onDragStart' | 'onDragEnd'> {
2088
+ value?: IrisDraggerPosition;
2089
+ defaultValue?: IrisDraggerPosition;
2090
+ onValueChange?: (next: IrisDraggerPosition) => void;
2091
+ onDragStart?: (start: IrisDraggerPosition) => void;
2092
+ onDragEnd?: (end: IrisDraggerPosition) => void;
2093
+ disabled?: boolean;
2094
+ /** Constrain the position to within these bounds (px from wrapper origin). */
2095
+ bounds?: IrisDraggerBounds;
2096
+ /** Optional drag handle (restricts the draggable region). */
2097
+ handle?: React.ReactNode;
2098
+ }
2099
+ /**
2100
+ * Make a child element positionable by drag. The wrapper is absolutely
2101
+ * positioned at its parent's top-left; the position is driven by `value` /
2102
+ * `defaultValue` (px). Drag uses pointer capture so the gesture survives
2103
+ * the pointer leaving the element.
2104
+ */
2105
+ declare function IrisDragger({ value: valueProp, defaultValue, onValueChange, onDragStart, onDragEnd, disabled, bounds, handle, style, children, ...rest }: IrisDraggerProps): React.ReactElement;
2106
+
2107
+ type IrisSplitterOrientation = 'horizontal' | 'vertical';
2108
+ interface IrisSplitterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
2109
+ orientation?: IrisSplitterOrientation;
2110
+ /** Split ratio in [0, 1]. */
2111
+ value?: number;
2112
+ defaultValue?: number;
2113
+ onValueChange?: (next: number) => void;
2114
+ /** Minimum size of the start pane in px. */
2115
+ minStart?: number;
2116
+ /** Minimum size of the end pane in px. */
2117
+ minEnd?: number;
2118
+ disabled?: boolean;
2119
+ /** Start pane content. */
2120
+ start?: React.ReactNode;
2121
+ /** End pane content. */
2122
+ end?: React.ReactNode;
2123
+ }
2124
+ /**
2125
+ * Two-pane splitter with a draggable divider. The split position is a number
2126
+ * in `[0, 1]`. Clamping respects `minStart` / `minEnd` (in px) so panes
2127
+ * cannot collapse below a usable size.
2128
+ */
2129
+ declare function IrisSplitter({ orientation, value: valueProp, defaultValue, onValueChange, minStart, minEnd, disabled, style, start, end, ...rest }: IrisSplitterProps): React.ReactElement;
2130
+
2131
+ type IrisResizerHandle = 'top' | 'right' | 'bottom' | 'left' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
2132
+ interface IrisResizerSize {
2133
+ width: number;
2134
+ height: number;
2135
+ }
2136
+ interface IrisResizerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
2137
+ value: IrisResizerSize;
2138
+ onValueChange: (next: IrisResizerSize) => void;
2139
+ onResizeStart?: (start: IrisResizerSize) => void;
2140
+ onResizeEnd?: (end: IrisResizerSize) => void;
2141
+ handles?: IrisResizerHandle[];
2142
+ minWidth?: number;
2143
+ minHeight?: number;
2144
+ maxWidth?: number;
2145
+ maxHeight?: number;
2146
+ disabled?: boolean;
2147
+ /** Maintain `width / height` ratio when dragging corner handles. */
2148
+ keepAspect?: boolean;
2149
+ }
2150
+ /**
2151
+ * 8-direction resizer wrapping a single child element. The child is rendered
2152
+ * inside a relatively positioned wrapper; handles overlay each side and
2153
+ * corner. Drag updates `value` ({ width, height } in px) clamped by min/max.
2154
+ */
2155
+ declare function IrisResizer({ value, onValueChange, onResizeStart, onResizeEnd, handles, minWidth, minHeight, maxWidth, maxHeight, disabled, keepAspect, style, children, ...rest }: IrisResizerProps): React.ReactElement;
2156
+
2157
+ interface DragState {
2158
+ /** Pointer x in client coordinates. */
2159
+ x: number;
2160
+ /** Pointer y in client coordinates. */
2161
+ y: number;
2162
+ /** Cumulative delta from pointerdown. */
2163
+ dx: number;
2164
+ /** Cumulative delta from pointerdown. */
2165
+ dy: number;
2166
+ /** The active pointer event. */
2167
+ event: PointerEvent;
2168
+ }
2169
+ interface UseDragOptions {
2170
+ /** The element the drag handle is bound to. */
2171
+ handle: React.RefObject<HTMLElement | null>;
2172
+ /** Drag is only initiated for these pointer buttons. Default `[0]`. */
2173
+ buttons?: number[];
2174
+ onStart?: (state: DragState) => boolean | void;
2175
+ onDrag?: (state: DragState) => void;
2176
+ onEnd?: (state: DragState) => void;
2177
+ disabled?: boolean;
2178
+ }
2179
+ /**
2180
+ * Bind pointer-driven drag handlers to an element. Uses `setPointerCapture`
2181
+ * so the drag continues even after the pointer leaves the element. Cancels
2182
+ * on `pointercancel`.
2183
+ *
2184
+ * Pure pointer events — works for mouse, touch, and pen.
2185
+ */
2186
+ declare function useDrag(options: UseDragOptions): void;
2187
+
2188
+ interface IrisSelectItem<T = unknown> {
2189
+ value: T;
2190
+ label?: string;
2191
+ disabled?: boolean;
2192
+ }
2193
+
2194
+ type IrisSelectSize = Size;
2195
+ interface IrisSelectProps<T = unknown> {
2196
+ items: IrisSelectItem<T>[];
2197
+ value?: T;
2198
+ defaultValue?: T;
2199
+ onValueChange?: (value: T) => void;
2200
+ placeholder?: string;
2201
+ size?: IrisSelectSize;
2202
+ disabled?: boolean;
2203
+ placement?: Placement;
2204
+ invalid?: boolean;
2205
+ /** id forwarded to the trigger button. Set by `IrisFormField`. */
2206
+ id?: string;
2207
+ /** Forwarded as `aria-describedby` on the trigger. Set by `IrisFormField`. */
2208
+ ariaDescribedby?: string;
2209
+ /** Custom render for the trigger button. Receives current label + open state. */
2210
+ renderTrigger?: (state: {
2211
+ value: T | undefined;
2212
+ label: string;
2213
+ open: boolean;
2214
+ }) => React.ReactNode;
2215
+ style?: React.CSSProperties;
2216
+ className?: string;
2217
+ }
2218
+ /**
2219
+ * Single-select dropdown. Composes Popover (positioning + dismiss) with an
2220
+ * inline listbox (keyboard nav + selection). Arrow-key, typeahead, Home/End, and
2221
+ * Enter/Space navigation are single-sourced in `createKeyboardNav` (core).
2222
+ *
2223
+ * @example
2224
+ * <IrisSelect
2225
+ * items={[{ value: 'a', label: 'Apple' }, { value: 'b', label: 'Banana' }]}
2226
+ * value={fruit}
2227
+ * onValueChange={setFruit}
2228
+ * placeholder="Pick a fruit"
2229
+ * />
2230
+ */
2231
+ declare function IrisSelect<T = unknown>({ items, value: valueProp, defaultValue, onValueChange, placeholder, size, disabled, placement, invalid, id, ariaDescribedby, renderTrigger, style, className, }: IrisSelectProps<T>): React.ReactElement;
2232
+
2233
+ type IrisTableSortDirection = 'asc' | 'desc';
2234
+ /** Map of column key → current width in px (after any resizing). */
2235
+ type IrisTableColumnWidths = Record<string, number>;
2236
+ type IrisTableEditor = 'text' | 'number';
2237
+ /** Aggregation op for a column's summary/footer cell. */
2238
+ type IrisTableAggregateOp = 'sum' | 'avg' | 'min' | 'max' | 'count';
2239
+ interface IrisTableVirtualOptions {
2240
+ /** Per-row height in px (uniform). */
2241
+ itemHeight: number;
2242
+ /** Viewport height. Number → px; string → CSS length. */
2243
+ height: number | string;
2244
+ /** Extra rows rendered above and below the viewport. */
2245
+ buffer?: number;
2246
+ }
2247
+ interface IrisTableSortState {
2248
+ key: string;
2249
+ direction: IrisTableSortDirection;
2250
+ }
2251
+ interface IrisTableColumn<Row = Record<string, unknown>> {
2252
+ key: string;
2253
+ title: string;
2254
+ /** Path inside the row to read the cell value from. Defaults to `key`. */
2255
+ dataIndex?: keyof Row | string;
2256
+ sortable?: boolean;
2257
+ width?: number | string;
2258
+ /** Minimum width (px) when resizing. Default 60. */
2259
+ minWidth?: number;
2260
+ /** Maximum width (px) when resizing. Default Infinity. */
2261
+ maxWidth?: number;
2262
+ align?: 'left' | 'center' | 'right';
2263
+ /** Freeze this column to an edge during horizontal scroll (position: sticky). */
2264
+ pinned?: 'left' | 'right';
2265
+ /** Allow double-click inline editing of this column's cells. */
2266
+ editable?: boolean;
2267
+ /** Editor kind. Default `'text'`. */
2268
+ editor?: IrisTableEditor;
2269
+ /**
2270
+ * Validate a draft value before it commits. Return an error message to
2271
+ * REJECT the edit (the editor stays open, shows the message, and is marked
2272
+ * `aria-invalid`); return `null`/`undefined` to accept. Receives the parsed
2273
+ * value (a number for the `'number'` editor) and the row being edited.
2274
+ */
2275
+ validate?: (value: unknown, row: Row) => string | null | undefined;
2276
+ /**
2277
+ * Aggregate this column in the table's summary/footer row. Any column with a
2278
+ * `summary` op makes the footer row appear; columns without one render blank.
2279
+ */
2280
+ summary?: IrisTableAggregateOp;
2281
+ /**
2282
+ * Format this column's summary value. Receives the aggregated number and the
2283
+ * rows it was computed over; defaults to the number's string form.
2284
+ */
2285
+ renderSummary?: (value: number, rows: Row[]) => React.ReactNode;
2286
+ /**
2287
+ * Child columns, making this a HEADER GROUP that spans them in a multi-level
2288
+ * header. A column with `children` is not a data column itself — its leaf
2289
+ * descendants render the body. Omit for a normal (leaf) column.
2290
+ */
2291
+ children?: IrisTableColumn<Row>[];
2292
+ /** Custom comparator for sorting; defaults to native `<`. */
2293
+ sorter?: (a: Row, b: Row) => number;
2294
+ /** Custom render for cell content. */
2295
+ render?: (value: unknown, row: Row, rowIndex: number) => React.ReactNode;
2296
+ }
2297
+ interface IrisTableCellEditEvent<Row = Record<string, unknown>> {
2298
+ row: Row;
2299
+ column: IrisTableColumn<Row>;
2300
+ oldValue: unknown;
2301
+ newValue: unknown;
2302
+ rowIndex: number;
2303
+ }
2304
+
2305
+ interface IrisTableProps<Row extends Record<string, unknown> = Record<string, unknown>> {
2306
+ columns: IrisTableColumn<Row>[];
2307
+ data: Row[];
2308
+ /** Field to use as the row key. */
2309
+ rowKey?: string;
2310
+ /** Selection mode. */
2311
+ selectable?: 'none' | 'single' | 'multi';
2312
+ selection?: Array<string | number>;
2313
+ defaultSelection?: Array<string | number>;
2314
+ onSelectionChange?: (next: Array<string | number>) => void;
2315
+ sort?: IrisTableSortState | null;
2316
+ defaultSort?: IrisTableSortState | null;
2317
+ onSortChange?: (next: IrisTableSortState | null) => void;
2318
+ striped?: boolean;
2319
+ bordered?: boolean;
2320
+ /** Enable column resizing (drag the header's trailing edge or focus + arrow keys). */
2321
+ resizableColumns?: boolean;
2322
+ /** Controlled per-column pixel widths, keyed by column `key`. */
2323
+ columnWidths?: IrisTableColumnWidths;
2324
+ defaultColumnWidths?: IrisTableColumnWidths;
2325
+ onColumnWidthsChange?: (next: IrisTableColumnWidths) => void;
2326
+ /** Called when an inline-editable cell is committed with a changed value. */
2327
+ onCellEdit?: (event: IrisTableCellEditEvent<Row>) => void;
2328
+ /**
2329
+ * Render an expandable detail panel beneath a row. Providing this adds a
2330
+ * leading expand-toggle column; clicking it reveals a full-width detail row.
2331
+ * (Not applied in the virtual-scroll path.)
2332
+ */
2333
+ renderDetail?: (row: Row, rowIndex: number) => React.ReactNode;
2334
+ /** Which rows can expand a detail panel. Defaults to all rows when `renderDetail` is set. */
2335
+ rowExpandable?: (row: Row, rowIndex: number) => boolean;
2336
+ /** Initially-expanded row keys (uncontrolled). Shared by detail rows + tree rows. */
2337
+ defaultExpandedRowKeys?: Array<string | number>;
2338
+ /** Notified with the expanded row keys whenever they change. */
2339
+ onExpandedRowsChange?: (keys: Array<string | number>) => void;
2340
+ /**
2341
+ * Read a row's child rows to render the table as a TREE. Providing this enables
2342
+ * tree mode: `data` is treated as the root rows, each row's first cell gains a
2343
+ * depth indent + an expand/collapse toggle (when it has children), and the
2344
+ * expand state reuses `defaultExpandedRowKeys`/`onExpandedRowsChange`. Column
2345
+ * sort reorders siblings hierarchically (each level sorted, structure kept),
2346
+ * and tree rows virtualize like flat rows when `virtualScroll` is set (unless
2347
+ * `renderDetail` is also used, since detail panels are variable-height).
2348
+ */
2349
+ getSubRows?: (row: Row) => Row[] | undefined;
2350
+ /**
2351
+ * Enable WAI-ARIA grid keyboard navigation: the table becomes `role="grid"`
2352
+ * and Arrow / Home / End / Page Up·Down move a roving cell focus across the
2353
+ * data cells. Off by default; opt-in and additive (no effect on mouse / Tab
2354
+ * behavior). Pairs best without virtualization (the focused cell must be
2355
+ * rendered) and does not hijack keystrokes while a cell is being edited.
2356
+ */
2357
+ keyboardNavigation?: boolean;
2358
+ /** Enable virtual scrolling for the body (renders only the visible window). */
2359
+ virtualScroll?: IrisTableVirtualOptions;
2360
+ /**
2361
+ * Render only the horizontally-visible columns (plus pinned + a small
2362
+ * overscan) for very wide tables. Needs numeric column widths; the table
2363
+ * becomes a horizontal scroll container. Off-screen grid tracks stay sized,
2364
+ * so alignment, resize, and pinned columns keep working.
2365
+ */
2366
+ columnVirtualization?: boolean;
2367
+ /**
2368
+ * Enable rectangular cell-range selection (Excel-style). Click starts a
2369
+ * range; Shift+Click or Shift+Arrow extends it; Escape clears it.
2370
+ * Cells within the range get `data-iris-cell-selected="true"`.
2371
+ */
2372
+ cellRange?: boolean;
2373
+ /** Empty state node (replaces the row body when `data` is empty). */
2374
+ emptyState?: React.ReactNode;
2375
+ /** Show the loading state instead of rows. */
2376
+ loading?: boolean;
2377
+ /** Show the error state instead of rows (takes precedence over loading). */
2378
+ error?: boolean;
2379
+ /** Custom loading-state node (defaults to the localized `table.loading`). */
2380
+ loadingState?: React.ReactNode;
2381
+ /** Custom error-state node (defaults to the localized `table.error`). */
2382
+ errorState?: React.ReactNode;
2383
+ style?: React.CSSProperties;
2384
+ className?: string;
2385
+ }
2386
+ /**
2387
+ * Data-driven table. Renders as a CSS-grid layout (no native `<table>`) so it
2388
+ * can support future virtual scroll / column resize uniformly. Wires ARIA
2389
+ * roles (`table` / `row` / `columnheader` / `cell`) for screen readers.
2390
+ *
2391
+ * Sortable columns cycle `none → asc → desc → none` on click.
2392
+ */
2393
+ declare function IrisTable<Row extends Record<string, unknown>>({ columns, data, rowKey, selectable, selection: selectionProp, defaultSelection, onSelectionChange, sort: sortProp, defaultSort, onSortChange, striped, bordered, resizableColumns, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnWidthsChange, onCellEdit, renderDetail, rowExpandable, defaultExpandedRowKeys, onExpandedRowsChange, getSubRows, keyboardNavigation, cellRange, virtualScroll, columnVirtualization, emptyState, loading, error, loadingState, errorState, style, className, }: IrisTableProps<Row>): React.ReactElement;
2394
+
2395
+ /**
2396
+ * Serialize rows as a CSV string per RFC 4180. Column order determines field
2397
+ * order; cell values are read via `dataIndex` (defaulting to the column key).
2398
+ * Returns a plain string without BOM.
2399
+ */
2400
+ declare function exportCsv<Row extends Record<string, unknown>>(rows: readonly Row[], columns: readonly IrisTableColumn<Row>[]): string;
2401
+ /**
2402
+ * Trigger a download of the given CSV string. A host `FileSaveHandler` (set via
2403
+ * `setFileSaveHandler`) intercepts it for native save in desktop/mobile shells;
2404
+ * otherwise falls back to the browser `<a download>`. SSR-safe.
2405
+ */
2406
+ declare function downloadCsv(filename: string, csv: string): Promise<void>;
2407
+
2408
+ /**
2409
+ * Serialize rows to a SpreadsheetML (Excel/LibreOffice-native) XML string —
2410
+ * the dependency-free counterpart to {@link exportCsv}. Column order sets field
2411
+ * order; values read via `dataIndex` (defaulting to `key`).
2412
+ */
2413
+ declare function exportExcel<Row extends Record<string, unknown>>(rows: readonly Row[], columns: readonly IrisTableColumn<Row>[], options?: SpreadsheetXmlOptions): string;
2414
+ /**
2415
+ * Trigger a download of the given SpreadsheetML string. A host `FileSaveHandler`
2416
+ * (set via `setFileSaveHandler`) intercepts it for native save in desktop/mobile
2417
+ * shells; otherwise falls back to the browser `<a download>`. SSR-safe.
2418
+ */
2419
+ declare function downloadExcel(filename: string, xml: string): Promise<void>;
2420
+
2421
+ type IrisVirtualScrollAlign = 'start' | 'center' | 'end';
2422
+ interface IrisVirtualScrollHandle {
2423
+ scrollToIndex: (index: number, align?: IrisVirtualScrollAlign) => void;
2424
+ /** Imperatively scroll to a pixel offset (clamped to the scrollable range). */
2425
+ scrollToOffset: (offset: number) => void;
2426
+ refresh: () => void;
2427
+ }
2428
+ interface IrisVirtualScrollProps<T = unknown> {
2429
+ items: readonly T[];
2430
+ /**
2431
+ * Per-item height in px. A number means every row shares that height; pass a
2432
+ * `(index) => px` function for known variable heights (memoize it); or
2433
+ * `'auto'` to measure rendered rows via `ResizeObserver` and cache them —
2434
+ * no need to know heights ahead of time (wrapped text, expandable rows).
2435
+ */
2436
+ itemHeight: number | ((index: number) => number) | 'auto';
2437
+ /** Initial row-height estimate used before measurement, when `itemHeight="auto"`. */
2438
+ estimatedItemHeight?: number;
2439
+ /** Viewport height. Number → px; string → CSS length passed through. */
2440
+ height?: number | string;
2441
+ /** Number of extra rows to render above and below the viewport. */
2442
+ buffer?: number;
2443
+ /** Stable key per item. Falls back to index. */
2444
+ keyOf?: (item: T, index: number) => string | number;
2445
+ /** Render a single item. */
2446
+ renderItem: (item: T, index: number) => React.ReactNode;
2447
+ onScroll?: (scrollTop: number) => void;
2448
+ onRangeChange?: (range: {
2449
+ start: number;
2450
+ end: number;
2451
+ }) => void;
2452
+ style?: React.CSSProperties;
2453
+ className?: string;
2454
+ }
2455
+ /**
2456
+ * Virtual scroller. Renders only the visible window of items plus a
2457
+ * configurable buffer above and below. Vertical-only. `itemHeight` may be a
2458
+ * fixed number, a `(index) => px` function for variable-height rows, or
2459
+ * `'auto'` to measure rendered rows.
2460
+ *
2461
+ * Internally driven by the stateful core {@link createVirtualizer}: a single
2462
+ * controller owns the measured-size cache (keyed by item, so a row's real
2463
+ * height survives scroll/reorder), the offset tree (O(log n) total/offset/
2464
+ * lower-bound — no O(n) rebuild per scroll), and `scrollToIndex`/`scrollToOffset`.
2465
+ * At a uniform `itemHeight` the visible window is identical to the bare math, so
2466
+ * the public props/output are unchanged.
2467
+ */
2468
+ declare const IrisVirtualScroll: <T>(props: IrisVirtualScrollProps<T> & {
2469
+ ref?: React.Ref<IrisVirtualScrollHandle>;
2470
+ }) => React.ReactElement;
2471
+
2472
+ interface IrisCalendarProps {
2473
+ value?: Date | null;
2474
+ defaultValue?: Date | null;
2475
+ onValueChange?: (next: Date | null) => void;
2476
+ /** Initial visible month (defaults to selected value or today). */
2477
+ defaultMonth?: Date;
2478
+ min?: Date;
2479
+ max?: Date;
2480
+ /** 0–6, 0 = Sunday. Default 0. */
2481
+ weekStartsOn?: number;
2482
+ locale?: string;
2483
+ disabled?: boolean;
2484
+ style?: React.CSSProperties;
2485
+ className?: string;
2486
+ }
2487
+ /**
2488
+ * Month-view calendar. Single-date selection only. Keyboard:
2489
+ * - Arrow keys move focus
2490
+ * - Home / End jump to start/end of week
2491
+ * - PageUp / PageDown move by month
2492
+ * - Enter / Space select
2493
+ */
2494
+ declare function IrisCalendar({ value: valueProp, defaultValue, onValueChange, defaultMonth, min, max, weekStartsOn, locale, disabled, style, className, }: IrisCalendarProps): React.ReactElement;
2495
+
2496
+ interface IrisDatePickerProps {
2497
+ value?: Date | null;
2498
+ defaultValue?: Date | null;
2499
+ onValueChange?: (next: Date | null) => void;
2500
+ min?: Date;
2501
+ max?: Date;
2502
+ weekStartsOn?: number;
2503
+ locale?: string;
2504
+ placeholder?: string;
2505
+ disabled?: boolean;
2506
+ invalid?: boolean;
2507
+ placement?: Placement;
2508
+ /** id forwarded to the trigger. Set by `IrisFormField`. */
2509
+ id?: string;
2510
+ /** Forwarded as `aria-describedby` on the trigger. Set by `IrisFormField`. */
2511
+ ariaDescribedby?: string;
2512
+ style?: React.CSSProperties;
2513
+ className?: string;
2514
+ }
2515
+ /**
2516
+ * Date picker: button-styled trigger + Popover + Calendar. On selection the
2517
+ * popover auto-closes. Use `IrisCalendar` directly when you want it inline.
2518
+ */
2519
+ declare function IrisDatePicker({ value: valueProp, defaultValue, onValueChange, min, max, weekStartsOn, locale, placeholder, disabled, invalid, placement, id, ariaDescribedby, style, className, }: IrisDatePickerProps): React.ReactElement;
2520
+
2521
+ interface IrisTreeNode {
2522
+ /** Stable unique identifier. */
2523
+ id: string;
2524
+ /** Display label. */
2525
+ label: string;
2526
+ /** Eagerly populated children. */
2527
+ children?: IrisTreeNode[];
2528
+ /** When true, this node is a leaf and the expand affordance is hidden. */
2529
+ isLeaf?: boolean;
2530
+ /** Disabled — non-selectable. */
2531
+ disabled?: boolean;
2532
+ /**
2533
+ * Lazy children loader. Called the first time the node is expanded.
2534
+ * Resolves to the children array; the tree caches the result so subsequent
2535
+ * expansions are instant. On rejection the node shows an error state and
2536
+ * collapses. (Parity with the Vue adapter's `IrisTreeNode`.)
2537
+ */
2538
+ loadChildren?: () => Promise<IrisTreeNode[]>;
2539
+ }
2540
+ type IrisTreeSelectionMode = 'none' | 'single' | 'multi';
2541
+
2542
+ interface IrisTreeProps {
2543
+ nodes: IrisTreeNode[];
2544
+ expanded?: string[];
2545
+ defaultExpanded?: string[];
2546
+ onExpandedChange?: (next: string[]) => void;
2547
+ selected?: string[];
2548
+ defaultSelected?: string[];
2549
+ onSelectedChange?: (next: string[]) => void;
2550
+ selectionMode?: IrisTreeSelectionMode;
2551
+ /**
2552
+ * Show a checkbox per node with parent/child cascade + indeterminate
2553
+ * (tri-state) propagation, independent of `selectionMode`. Driven by the
2554
+ * framework-agnostic `createTreeSelection`.
2555
+ */
2556
+ checkable?: boolean;
2557
+ /** Initially checked node ids (uncontrolled; reconciled through the cascade). */
2558
+ defaultChecked?: string[];
2559
+ /** Notified with the fully-reconciled checked node ids on every check change. */
2560
+ onCheckedChange?: (checked: string[]) => void;
2561
+ ariaLabel?: string;
2562
+ /** Show the loading state instead of nodes. */
2563
+ loading?: boolean;
2564
+ /** Show the error state instead of nodes (takes precedence over loading). */
2565
+ error?: boolean;
2566
+ /** Custom empty-state node (defaults to the localized `tree.empty`). */
2567
+ emptyState?: React.ReactNode;
2568
+ /** Custom loading-state node (defaults to the localized `tree.loading`). */
2569
+ loadingState?: React.ReactNode;
2570
+ /** Custom error-state node (defaults to the localized `tree.error`). */
2571
+ errorState?: React.ReactNode;
2572
+ style?: React.CSSProperties;
2573
+ className?: string;
2574
+ }
2575
+ /**
2576
+ * Tree control. Renders a hierarchy of `IrisTreeNode`s with expand/collapse,
2577
+ * single/multi selection, and optional lazy-loaded children. WAI-ARIA Tree
2578
+ * pattern: root `role="tree"`, each node `role="treeitem"`, roving tabindex.
2579
+ *
2580
+ * Keyboard:
2581
+ * - ↓/↑ : move active node
2582
+ * - → : expand (or move into first child)
2583
+ * - ← : collapse (or move to parent)
2584
+ * - Enter / Space : (de)select active node
2585
+ * - Home / End : first / last visible node
2586
+ *
2587
+ * Async lifecycle: pass `loading` / `error` (and empty `nodes`) to render the
2588
+ * animated loading / error / empty state in place of the tree. Per-node
2589
+ * `loadChildren` lazy loading is independent of this top-level state. Semantic
2590
+ * parity with the Vue adapter's `IrisTree`.
2591
+ */
2592
+ declare function IrisTree({ nodes, expanded: expandedProp, defaultExpanded, onExpandedChange, selected: selectedProp, defaultSelected, onSelectedChange, selectionMode, checkable, defaultChecked, onCheckedChange, ariaLabel, loading, error, emptyState, loadingState, errorState, style, className, }: IrisTreeProps): React.ReactElement;
2593
+
2594
+ interface IrisListItem<T = unknown> {
2595
+ value: T;
2596
+ label?: string;
2597
+ disabled?: boolean;
2598
+ }
2599
+ interface IrisListProps<T = unknown> {
2600
+ items: IrisListItem<T>[];
2601
+ /** Selected value(s). For multi mode, pass an array. */
2602
+ value?: T | T[] | null;
2603
+ defaultValue?: T | T[] | null;
2604
+ onValueChange?: (next: T | T[] | null) => void;
2605
+ onSelect?: (item: IrisListItem<T>) => void;
2606
+ multi?: boolean;
2607
+ /** Loop arrow nav at boundaries. Default true. */
2608
+ loop?: boolean;
2609
+ ariaLabel?: string;
2610
+ /** Show the loading state instead of items. */
2611
+ loading?: boolean;
2612
+ /** Show the error state instead of items (takes precedence over loading). */
2613
+ error?: boolean;
2614
+ /** Custom empty-state node (defaults to the localized `list.empty`). */
2615
+ emptyState?: React.ReactNode;
2616
+ /** Custom loading-state node (defaults to the localized `list.loading`). */
2617
+ loadingState?: React.ReactNode;
2618
+ /** Custom error-state node (defaults to the localized `list.error`). */
2619
+ errorState?: React.ReactNode;
2620
+ /** Custom render per item. */
2621
+ renderItem?: (item: IrisListItem<T>, state: {
2622
+ selected: boolean;
2623
+ active: boolean;
2624
+ index: number;
2625
+ }) => React.ReactNode;
2626
+ style?: React.CSSProperties;
2627
+ className?: string;
2628
+ }
2629
+ /**
2630
+ * Generic selectable list — foundation for `IrisSelect` content, dropdowns,
2631
+ * command palettes, etc. Implements the WAI-ARIA Listbox pattern:
2632
+ *
2633
+ * - `role="listbox"` (with `aria-multiselectable` when `multi`)
2634
+ * - Roving tabindex (one item has tabindex=0, others -1)
2635
+ * - Arrow keys / Home / End move focus via `createKeyboardNav` (core)
2636
+ * - Enter / Space (de)select
2637
+ *
2638
+ * Keyboard logic is single-sourced in `@iris-ui-kit/core` — this adapter only
2639
+ * bridges the returned actions to DOM focus and selection callbacks.
2640
+ *
2641
+ * Async lifecycle: pass `loading` / `error` (and an empty `items`) to render
2642
+ * the animated loading / error / empty state in place of options. State
2643
+ * precedence and entry animation come from {@link useDataState}.
2644
+ */
2645
+ declare function IrisList<T = unknown>({ items, value: valueProp, defaultValue, onValueChange, onSelect, multi, loop, ariaLabel, loading, error, emptyState, loadingState, errorState, renderItem, style, className, }: IrisListProps<T>): React.ReactElement;
2646
+
2647
+ interface IrisFileUploadFile {
2648
+ file: File;
2649
+ name: string;
2650
+ size: number;
2651
+ type: string;
2652
+ }
2653
+ declare function formatBytes(bytes: number): string;
2654
+ type IrisFileUploadRejectReason = 'size' | 'count' | 'type';
2655
+ interface IrisFileUploadRejection {
2656
+ file: IrisFileUploadFile;
2657
+ reason: IrisFileUploadRejectReason;
2658
+ }
2659
+ interface IrisFileUploadProps {
2660
+ value?: IrisFileUploadFile[];
2661
+ defaultValue?: IrisFileUploadFile[];
2662
+ onValueChange?: (files: IrisFileUploadFile[]) => void;
2663
+ onAccept?: (files: IrisFileUploadFile[]) => void;
2664
+ onReject?: (entries: IrisFileUploadRejection[]) => void;
2665
+ /** MIME type filter (forwarded + used to filter dropped files). */
2666
+ accept?: string;
2667
+ multiple?: boolean;
2668
+ /** Max file size in bytes. 0 = unlimited. */
2669
+ maxSize?: number;
2670
+ /** Max simultaneous files. 0 = unlimited. */
2671
+ maxFiles?: number;
2672
+ disabled?: boolean;
2673
+ /** Idle dropzone label. */
2674
+ label?: string;
2675
+ /** id forwarded to the hidden input. Set by `IrisFormField`. */
2676
+ id?: string;
2677
+ /** Custom render for the file list. Receives `{ files, remove }`. */
2678
+ renderList?: (state: {
2679
+ files: IrisFileUploadFile[];
2680
+ remove: (index: number) => void;
2681
+ }) => React.ReactNode;
2682
+ style?: React.CSSProperties;
2683
+ className?: string;
2684
+ }
2685
+ /**
2686
+ * File-upload dropzone. Wraps a hidden `<input type="file">` with a
2687
+ * click-to-browse + drag-and-drop surface. Validates via `accept`, `maxSize`,
2688
+ * `maxFiles`; rejected files surface via `onReject`.
2689
+ */
2690
+ declare function IrisFileUpload({ value: valueProp, defaultValue, onValueChange, onAccept, onReject, accept, multiple, maxSize, maxFiles, disabled, label, id, renderList, style, className, }: IrisFileUploadProps): React.ReactElement;
2691
+
2692
+ interface IrisMenuProps {
2693
+ open?: boolean;
2694
+ defaultOpen?: boolean;
2695
+ onOpenChange?: (next: boolean) => void;
2696
+ placement?: Placement;
2697
+ offset?: number;
2698
+ children?: React.ReactNode;
2699
+ }
2700
+ /**
2701
+ * Root of a (potentially nested) menu. Provides the "close everything"
2702
+ * channel so picking a leaf in a deeply nested branch closes the whole tree.
2703
+ *
2704
+ * Use `IrisMenuSub` inside the content to declare nested submenus.
2705
+ */
2706
+ declare function IrisMenu({ open: openProp, defaultOpen, onOpenChange, placement, offset, children, }: IrisMenuProps): React.ReactElement;
2707
+
2708
+ interface IrisMenuTriggerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {
2709
+ asChild?: boolean;
2710
+ children?: React.ReactNode;
2711
+ }
2712
+ /**
2713
+ * The trigger that toggles the menu open/closed. Renders as a `<button>` (or
2714
+ * custom via `asChild`) with `aria-haspopup="menu"`. Opens on click,
2715
+ * ArrowDown, Enter, or Space.
2716
+ */
2717
+ declare const IrisMenuTrigger: React.ForwardRefExoticComponent<IrisMenuTriggerProps & React.RefAttributes<HTMLElement>>;
2718
+
2719
+ interface IrisMenuContentProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
2720
+ portalTarget?: HTMLElement | false;
2721
+ children?: React.ReactNode;
2722
+ }
2723
+ /**
2724
+ * Menu surface (`role="menu"`). Handles ArrowUp/Down/Home/End nav across all
2725
+ * `[role="menuitem"]` descendants (including those inside submenu triggers).
2726
+ * Closes on outside click, Escape, and Tab.
2727
+ *
2728
+ * Keyboard navigation is single-sourced in `@iris-ui-kit/core`'s
2729
+ * {@link createKeyboardNav} — this adapter only bridges the returned actions
2730
+ * to DOM focus.
2731
+ */
2732
+ declare const IrisMenuContent: React.ForwardRefExoticComponent<IrisMenuContentProps & React.RefAttributes<HTMLDivElement>>;
2733
+
2734
+ interface IrisMenuItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
2735
+ disabled?: boolean;
2736
+ /** Skip closing the menu on select (e.g. for sub-actions). */
2737
+ keepOpen?: boolean;
2738
+ /** Triggered on click or Enter/Space. */
2739
+ onSelect?: (event: React.SyntheticEvent) => void;
2740
+ }
2741
+ /**
2742
+ * An individual selectable item in a menu. Renders as a `role="menuitem"` `<div>`.
2743
+ * Calls `onSelect`, then closes the root menu (unless `keepOpen`). Disabled
2744
+ * items are skipped by keyboard navigation.
2745
+ */
2746
+ declare const IrisMenuItem: React.ForwardRefExoticComponent<IrisMenuItemProps & React.RefAttributes<HTMLDivElement>>;
2747
+ type IrisMenuSeparatorProps = React.HTMLAttributes<HTMLDivElement>;
2748
+ /**
2749
+ * A visual separator within a menu — renders a `role="separator"` `<div>`.
2750
+ */
2751
+ declare const IrisMenuSeparator: React.ForwardRefExoticComponent<IrisMenuSeparatorProps & React.RefAttributes<HTMLDivElement>>;
2752
+
2753
+ interface IrisMenuSubProps {
2754
+ label?: React.ReactNode;
2755
+ portalTarget?: HTMLElement | false;
2756
+ children?: React.ReactNode;
2757
+ }
2758
+ /**
2759
+ * Nested submenu. Renders its own trigger (a `[role="menuitem"]` inside the
2760
+ * parent menu) and floating content panel. Opens on hover (with a short
2761
+ * delay) and on ArrowRight / Enter; closes on ArrowLeft.
2762
+ *
2763
+ * Inherits `closeRoot` from the surrounding `IrisMenu` so picking a leaf
2764
+ * collapses the whole tree.
2765
+ */
2766
+ declare function IrisMenuSub({ label, portalTarget, children, }: IrisMenuSubProps): React.ReactElement;
2767
+
2768
+ interface MenuContextValue {
2769
+ open: boolean;
2770
+ setOpen: (next: boolean) => void;
2771
+ triggerRef: React.MutableRefObject<HTMLElement | null>;
2772
+ contentRef: React.MutableRefObject<HTMLElement | null>;
2773
+ contentId: string;
2774
+ placement: Placement;
2775
+ offset: number;
2776
+ /** Close the *root* menu — propagates to nested submenus. */
2777
+ closeRoot: () => void;
2778
+ }
2779
+ declare const MenuContext: React.Context<MenuContextValue | null>;
2780
+ declare function useMenuContext(componentName: string): MenuContextValue;
2781
+
2782
+ type IrisBannerTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
2783
+ interface IrisBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
2784
+ tone?: IrisBannerTone;
2785
+ closable?: boolean;
2786
+ open?: boolean;
2787
+ defaultOpen?: boolean;
2788
+ onOpenChange?: (next: boolean) => void;
2789
+ /** Use `position: sticky; top: 0;`. */
2790
+ sticky?: boolean;
2791
+ /** Optional icon slot rendered before the content. */
2792
+ icon?: React.ReactNode;
2793
+ /** Optional actions slot rendered after the content. */
2794
+ actions?: React.ReactNode;
2795
+ children?: React.ReactNode;
2796
+ }
2797
+ /**
2798
+ * Edge-to-edge announcement bar — typically pinned to the top of the layout.
2799
+ * Distinct from `IrisAlert`:
2800
+ * 1. Edge-to-edge (full width) instead of a contained card
2801
+ * 2. Optional `sticky` positioning
2802
+ * 3. Tighter vertical padding
2803
+ */
2804
+ declare function IrisBanner({ tone, closable, open: openProp, defaultOpen, onOpenChange, sticky, icon, actions, style, children, ...rest }: IrisBannerProps): React.ReactElement | null;
2805
+
2806
+ type IrisTimePickerFormat = '12h' | '24h';
2807
+ interface IrisTimeValue {
2808
+ hours: number;
2809
+ minutes: number;
2810
+ }
2811
+ interface IrisTimePickerProps {
2812
+ value?: IrisTimeValue | null;
2813
+ defaultValue?: IrisTimeValue;
2814
+ onValueChange?: (value: IrisTimeValue) => void;
2815
+ format?: IrisTimePickerFormat;
2816
+ /** Step in minutes for the minute input (1, 5, 10, 15, 30). */
2817
+ minuteStep?: number;
2818
+ disabled?: boolean;
2819
+ invalid?: boolean;
2820
+ /** id forwarded to the hours input. Set by `IrisFormField`. */
2821
+ id?: string;
2822
+ /** Forwarded as `aria-describedby` on the hours input. Set by `IrisFormField`. */
2823
+ ariaDescribedby?: string;
2824
+ style?: React.CSSProperties;
2825
+ className?: string;
2826
+ }
2827
+ /**
2828
+ * Time picker rendered as two zero-padded number inputs (hours + minutes)
2829
+ * plus an optional AM/PM toggle for 12h format. Internal value is always
2830
+ * 24-hour `{ hours, minutes }`.
2831
+ */
2832
+ declare function IrisTimePicker({ value: valueProp, defaultValue, onValueChange, format, minuteStep, disabled, invalid, id, ariaDescribedby, style, className, }: IrisTimePickerProps): React.ReactElement;
2833
+
2834
+ interface IrisDateRange {
2835
+ start: Date | null;
2836
+ end: Date | null;
2837
+ }
2838
+ interface IrisDateRangePickerProps {
2839
+ value?: IrisDateRange | null;
2840
+ defaultValue?: IrisDateRange;
2841
+ onValueChange?: (next: IrisDateRange) => void;
2842
+ min?: Date;
2843
+ max?: Date;
2844
+ weekStartsOn?: number;
2845
+ locale?: string;
2846
+ placeholder?: string;
2847
+ disabled?: boolean;
2848
+ invalid?: boolean;
2849
+ placement?: Placement;
2850
+ id?: string;
2851
+ ariaDescribedby?: string;
2852
+ style?: React.CSSProperties;
2853
+ className?: string;
2854
+ }
2855
+ /**
2856
+ * Range date picker. Trigger displays `start → end`; popover contains two
2857
+ * month calendars (current + next).
2858
+ *
2859
+ * Click order: first click → sets `start`. Second click → sets `end`
2860
+ * (auto-swaps if before `start`). Popover closes on completion.
2861
+ */
2862
+ declare function IrisDateRangePicker({ value: valueProp, defaultValue, onValueChange, min, max, weekStartsOn, locale, placeholder, disabled, invalid, placement, id, ariaDescribedby, style, className, }: IrisDateRangePickerProps): React.ReactElement;
2863
+
2864
+ type IrisSliderOrientation = 'horizontal' | 'vertical';
2865
+ interface IrisSliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
2866
+ value?: number;
2867
+ defaultValue?: number;
2868
+ onChange?: (next: number) => void;
2869
+ min?: number;
2870
+ max?: number;
2871
+ step?: number;
2872
+ disabled?: boolean;
2873
+ orientation?: IrisSliderOrientation;
2874
+ /** Accessible label for screen readers. */
2875
+ label?: string;
2876
+ }
2877
+ /**
2878
+ * Numeric slider with keyboard + pointer support.
2879
+ *
2880
+ * Keyboard:
2881
+ * ←/↓ −step · →/↑ +step · Home min · End max · PgUp/PgDn ±step×10
2882
+ */
2883
+ declare function IrisSlider({ value: valueProp, defaultValue, onChange, min, max, step, disabled, orientation, label, style, ...rest }: IrisSliderProps): React.ReactElement;
2884
+
2885
+ type IrisRangeSliderValue = readonly [number, number];
2886
+ interface IrisRangeSliderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
2887
+ value?: IrisRangeSliderValue;
2888
+ defaultValue?: IrisRangeSliderValue;
2889
+ onChange?: (next: IrisRangeSliderValue) => void;
2890
+ min?: number;
2891
+ max?: number;
2892
+ step?: number;
2893
+ disabled?: boolean;
2894
+ labelStart?: string;
2895
+ labelEnd?: string;
2896
+ }
2897
+ /**
2898
+ * Two-handle numeric range slider. Value is `[start, end]` with `start <= end`;
2899
+ * the two handles never cross.
2900
+ */
2901
+ declare function IrisRangeSlider({ value: valueProp, defaultValue, onChange, min, max, step, disabled, labelStart, labelEnd, style, ...rest }: IrisRangeSliderProps): React.ReactElement;
2902
+
2903
+ interface IrisColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
2904
+ /** HEX string (`#rgb` / `#rrggbb` / `#rrggbbaa`). */
2905
+ value?: string;
2906
+ defaultValue?: string;
2907
+ onChange?: (next: string) => void;
2908
+ /** Include the alpha strip + alpha input. Default false. */
2909
+ showAlpha?: boolean;
2910
+ disabled?: boolean;
2911
+ }
2912
+ /**
2913
+ * Color picker: SV pad + hue strip (+ optional alpha) with HEX + R/G/B(/A) inputs.
2914
+ * Binds a HEX string (`#rgb` / `#rrggbb` / `#rrggbbaa`) via `value` / `onChange`.
2915
+ *
2916
+ * Internal state is HSVA so hue survives grayscale RGB (black/white) without resetting —
2917
+ * mirrors the Vue adapter; the math (`colorUtils`) is shared verbatim, framework-agnostic.
2918
+ */
2919
+ declare function IrisColorPicker({ value, defaultValue, onChange, showAlpha, disabled, style, ...rest }: IrisColorPickerProps): React.ReactElement;
2920
+
2921
+ interface IrisCommandItem {
2922
+ /** Stable unique id. */
2923
+ id: string;
2924
+ /** Display label. */
2925
+ label: string;
2926
+ /** Searchable extra terms (e.g. synonyms). */
2927
+ keywords?: string[];
2928
+ /** Optional grouping. Items with the same `group` cluster together. */
2929
+ group?: string;
2930
+ /** Icon prefix (string emoji or node). */
2931
+ icon?: string;
2932
+ /** Shortcut hint shown on the right of the row. */
2933
+ shortcut?: string;
2934
+ disabled?: boolean;
2935
+ /** Triggered on Enter / click. */
2936
+ action?: () => void;
2937
+ }
2938
+ /**
2939
+ * Default fuzzy match: a query matches an item when each query character
2940
+ * appears in order in the item label or keywords. Case-insensitive.
2941
+ * Returns a score (lower = better) or null if no match.
2942
+ */
2943
+ declare function defaultFilter(query: string, item: IrisCommandItem): number | null;
2944
+
2945
+ interface IrisCommandPaletteProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
2946
+ open?: boolean;
2947
+ onOpenChange?: (open: boolean) => void;
2948
+ items: IrisCommandItem[];
2949
+ placeholder?: string;
2950
+ /** Empty state text when no item matches. */
2951
+ emptyText?: string;
2952
+ /** Custom filter; default is a tolerant subsequence/fuzzy match. */
2953
+ filter?: (query: string, item: IrisCommandItem) => number | null;
2954
+ onSelect?: (item: IrisCommandItem) => void;
2955
+ }
2956
+ /**
2957
+ * Command palette: searchable, keyboard-driven action launcher. Built on the
2958
+ * modal-utils suite (scroll lock + focus trap). Pattern: open via shortcut
2959
+ * (consumer wires the listener), type to filter, ↑/↓ to navigate, Enter to
2960
+ * execute the focused item, Escape to dismiss.
2961
+ */
2962
+ declare function IrisCommandPalette({ open, onOpenChange, items, placeholder, emptyText, filter, onSelect, style, ...rest }: IrisCommandPaletteProps): React.ReactElement | null;
2963
+
2964
+ export { AccordionContext, type AccordionContextValue, DialogContext, type DialogContextValue, type DragState, DrawerContext, type DrawerContextValue, DropdownContext, type DropdownContextValue, IrisAccordion, IrisAccordionItem, type IrisAccordionItemProps, type IrisAccordionProps, type IrisAccordionValue, IrisAffix, type IrisAffixProps, IrisAlert, type IrisAlertProps, type IrisAlertTone, IrisAnchor, type IrisAnchorItem, type IrisAnchorProps, IrisAspectRatio, type IrisAspectRatioProps, IrisAvatar, type IrisAvatarProps, type IrisAvatarShape, type IrisAvatarSize, IrisBackTop, type IrisBackTopProps, IrisBadge, type IrisBadgeProps, type IrisBadgeSize, type IrisBadgeTone, type IrisBadgeVariant, IrisBanner, type IrisBannerProps, type IrisBannerTone, IrisBreadcrumb, IrisBreadcrumbItem, type IrisBreadcrumbItemProps, type IrisBreadcrumbProps, IrisButton, type IrisButtonProps, type IrisButtonSize, type IrisButtonType, type IrisButtonVariant, IrisCalendar, type IrisCalendarProps, IrisCard, type IrisCardPadding, type IrisCardProps, type IrisCardVariant, IrisCarousel, type IrisCarouselProps, IrisCascader, type IrisCascaderNode, type IrisCascaderProps, type IrisCascaderSize, IrisCheckbox, type IrisCheckboxProps, type IrisCheckboxSize, type IrisCheckboxValue, IrisChip, type IrisChipProps, type IrisChipSize, type IrisChipTone, type IrisChipVariant, IrisColorPicker, type IrisColorPickerProps, IrisCombobox, type IrisComboboxOption, type IrisComboboxProps, type IrisComboboxSize, type IrisCommandItem, IrisCommandPalette, type IrisCommandPaletteProps, IrisCopyButton, type IrisCopyButtonProps, type IrisCopyButtonSize, IrisCountdown, type IrisCountdownProps, type IrisCountdownSize, IrisDatePicker, type IrisDatePickerProps, type IrisDateRange, IrisDateRangePicker, type IrisDateRangePickerProps, IrisDescriptions, type IrisDescriptionsItem, type IrisDescriptionsLayout, type IrisDescriptionsProps, IrisDialog, IrisDialogClose, type IrisDialogCloseProps, IrisDialogContent, type IrisDialogContentProps, IrisDialogDescription, type IrisDialogDescriptionProps, type IrisDialogProps, IrisDialogTitle, type IrisDialogTitleProps, IrisDialogTrigger, type IrisDialogTriggerProps, IrisDivider, type IrisDividerOrientation, type IrisDividerProps, type IrisDividerSpacing, IrisDragger, type IrisDraggerBounds, type IrisDraggerPosition, type IrisDraggerProps, IrisDrawer, IrisDrawerClose, type IrisDrawerCloseProps, IrisDrawerContent, type IrisDrawerContentProps, type IrisDrawerProps, type IrisDrawerSide, IrisDrawerTitle, type IrisDrawerTitleProps, IrisDrawerTrigger, type IrisDrawerTriggerProps, IrisDropdown, IrisDropdownItem, type IrisDropdownItemProps, IrisDropdownMenu, type IrisDropdownMenuProps, type IrisDropdownProps, IrisDropdownSeparator, type IrisDropdownSeparatorProps, IrisDropdownTrigger, type IrisDropdownTriggerProps, IrisEmptyState, type IrisEmptyStateProps, IrisFieldset, type IrisFieldsetProps, IrisFileUpload, type IrisFileUploadFile, type IrisFileUploadProps, type IrisFileUploadRejectReason, type IrisFileUploadRejection, IrisFloatButton, type IrisFloatButtonAction, type IrisFloatButtonProps, type IrisFloatButtonShape, IrisFormField, type IrisFormFieldProps, IrisGauge, type IrisGaugeProps, type IrisGaugeStatus, IrisIcon, type IrisIconProps, IrisImage, type IrisImageProps, IrisInput, type IrisInputProps, type IrisInputSize, type IrisInputType, IrisKbd, type IrisKbdProps, type IrisKbdSize, IrisList, type IrisListItem, type IrisListProps, IrisMarquee, type IrisMarqueeDirection, type IrisMarqueeProps, IrisMasonry, type IrisMasonryProps, type IrisMentionOption, IrisMentions, type IrisMentionsProps, IrisMenu, IrisMenuContent, type IrisMenuContentProps, IrisMenuItem, type IrisMenuItemProps, type IrisMenuProps, IrisMenuSeparator, type IrisMenuSeparatorProps, IrisMenuSub, type IrisMenuSubProps, IrisMenuTrigger, type IrisMenuTriggerProps, IrisNumberInput, type IrisNumberInputProps, type IrisNumberInputSize, IrisOtpInput, type IrisOtpInputProps, type IrisOtpInputSize, type IrisOtpInputType, IrisPagination, type IrisPaginationProps, type IrisPaginationSize, IrisPasswordInput, type IrisPasswordInputProps, IrisPopover, IrisPopoverContent, type IrisPopoverContentProps, type IrisPopoverProps, IrisPopoverTrigger, type IrisPopoverTriggerProps, IrisProgress, IrisProgressCircle, type IrisProgressCircleProps, type IrisProgressCircleStatus, type IrisProgressProps, type IrisProgressSize, type IrisProgressTone, IrisRadio, IrisRadioGroup, type IrisRadioGroupProps, type IrisRadioProps, type IrisRadioSize, IrisRangeSlider, type IrisRangeSliderProps, type IrisRangeSliderValue, IrisRating, type IrisRatingProps, type IrisRatingSize, IrisResizer, type IrisResizerHandle, type IrisResizerProps, type IrisResizerSize, IrisResult, type IrisResultProps, type IrisResultStatus, IrisRibbon, type IrisRibbonPlacement, type IrisRibbonProps, IrisScrollArea, type IrisScrollAreaAxis, type IrisScrollAreaProps, IrisSegmented, type IrisSegmentedOption, type IrisSegmentedProps, type IrisSegmentedSize, IrisSelect, type IrisSelectItem, type IrisSelectProps, type IrisSelectSize, IrisSkeleton, type IrisSkeletonProps, type IrisSkeletonShape, IrisSlider, type IrisSliderOrientation, type IrisSliderProps, IrisSlot, type IrisSlotProps, IrisSpinner, type IrisSpinnerProps, type IrisSpinnerSize, IrisSplitButton, type IrisSplitButtonAction, type IrisSplitButtonProps, type IrisSplitButtonSize, type IrisSplitButtonVariant, IrisSplitter, type IrisSplitterOrientation, type IrisSplitterProps, IrisStatistic, type IrisStatisticProps, type IrisStatisticSize, type IrisStatisticTrend, type IrisStepStatus, IrisStepper, type IrisStepperOrientation, type IrisStepperProps, IrisStepperStep, type IrisStepperStepProps, IrisSwitch, type IrisSwitchProps, type IrisSwitchSize, IrisTable, type IrisTableCellEditEvent, type IrisTableColumn, type IrisTableColumnWidths, type IrisTableEditor, type IrisTableProps, type IrisTableSortDirection, type IrisTableSortState, type IrisTableVirtualOptions, IrisTabs, IrisTabsContent, type IrisTabsContentProps, IrisTabsList, type IrisTabsListProps, type IrisTabsOrientation, type IrisTabsProps, IrisTabsTrigger, type IrisTabsTriggerProps, IrisTagInput, type IrisTagInputProps, IrisTextarea, type IrisTextareaProps, type IrisTextareaSize, IrisTimePicker, type IrisTimePickerFormat, type IrisTimePickerProps, type IrisTimeValue, IrisTimeline, type IrisTimelineItem, type IrisTimelineProps, type IrisTimelineVariant, type IrisToast, type IrisToastInput, type IrisToastPosition, type IrisToastVariant, IrisToastViewport, type IrisToastViewportProps, IrisToggleGroup, IrisToggleGroupItem, type IrisToggleGroupItemProps, type IrisToggleGroupMultipleProps, type IrisToggleGroupOrientation, type IrisToggleGroupProps, type IrisToggleGroupSingleProps, type IrisToggleGroupSize, type IrisToggleGroupType, type IrisToggleGroupValue, type IrisToggleGroupVariant, IrisToolbar, type IrisToolbarOrientation, type IrisToolbarProps, IrisTooltip, type IrisTooltipProps, IrisTour, type IrisTourProps, type IrisTourStep, IrisTransfer, type IrisTransferItem, type IrisTransferProps, IrisTree, type IrisTreeNode, type IrisTreeProps, IrisTreeSelect, type IrisTreeSelectNode, type IrisTreeSelectProps, type IrisTreeSelectSize, type IrisTreeSelectionMode, IrisVirtualScroll, type IrisVirtualScrollAlign, type IrisVirtualScrollHandle, type IrisVirtualScrollProps, IrisVisuallyHidden, type IrisVisuallyHiddenProps, IrisWatermark, type IrisWatermarkProps, MenuContext, type MenuContextValue, PopoverContext, type PopoverContextValue, RadioGroupContext, type RadioGroupContextValue, StepperContext, type StepperContextValue, TabsContext, type TabsContextValue, ToggleGroupContext, type ToggleGroupContextValue, type UseDragOptions, type UseToastReturn, __PROGRESS_STYLE_ID, __SKELETON_STYLE_ID, __SPINNER_STYLE_ID, __resetProgressStyles, __resetSkeletonStyles, __resetSpinnerStyles, clearToasts, defaultFilter, dismissToast, downloadCsv, downloadExcel, exportCsv, exportExcel, formatBytes, formatRemaining, getToasts, pushToast, subscribeToasts, useAccordionContext, useDialogContext, useDrag, useDrawerContext, useDropdownContext, useMachine, useMenuContext, usePopoverContext, useStepperContext, useStore, useStoreSelector, useTabsContext, useToast, useToggleGroupContext };