@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 @@
1
+ {"version":3,"sources":["../src/useStore.ts","../src/useMachine.ts","../src/theme/ThemeProvider.tsx","../src/theme/useTheme.ts","../src/theme/useColorScheme.ts","../src/skins/SkinProvider.tsx","../src/skins/useSkin.ts","../src/primitives/button/styles.ts","../src/primitives/button/Button.tsx","../src/primitives/badge/Badge.tsx","../src/primitives/avatar/Avatar.tsx","../src/i18n/context.ts","../src/i18n/I18nProvider.tsx","../src/i18n/useI18n.ts","../src/primitives/spinner/styles.ts","../src/primitives/spinner/Spinner.tsx","../src/primitives/icon/Icon.tsx","../src/primitives/card/Card.tsx","../src/primitives/skeleton/styles.ts","../src/primitives/skeleton/Skeleton.tsx","../src/primitives/progress/styles.ts","../src/primitives/progress/Progress.tsx","../src/primitives/alert/Alert.tsx","../src/primitives/chip/Chip.tsx","../src/primitives/kbd/Kbd.tsx","../src/primitives/divider/Divider.tsx","../src/primitives/empty-state/EmptyState.tsx","../src/primitives/input/Input.tsx","../src/primitives/textarea/Textarea.tsx","../src/primitives/switch/Switch.tsx","../src/primitives/checkbox/Checkbox.tsx","../src/primitives/password-input/PasswordInput.tsx","../src/primitives/number-input/NumberInput.tsx","../src/primitives/otp-input/OtpInput.tsx","../src/primitives/rating/Rating.tsx","../src/primitives/combobox/Combobox.tsx","../src/primitives/timeline/Timeline.tsx","../src/primitives/carousel/Carousel.tsx","../src/primitives/statistic/Statistic.tsx","../src/primitives/descriptions/Descriptions.tsx","../src/primitives/transfer/Transfer.tsx","../src/primitives/watermark/Watermark.tsx","../src/primitives/back-top/BackTop.tsx","../src/primitives/affix/Affix.tsx","../src/primitives/result/Result.tsx","../src/primitives/tree-select/TreeSelect.tsx","../src/primitives/mentions/Mentions.tsx","../src/primitives/cascader/Cascader.tsx","../src/primitives/segmented/Segmented.tsx","../src/primitives/image/Image.tsx","../src/primitives/float-button/FloatButton.tsx","../src/primitives/anchor/Anchor.tsx","../src/primitives/countdown/Countdown.tsx","../src/primitives/tour/Tour.tsx","../src/primitives/tag-input/TagInput.tsx","../src/primitives/copy-button/CopyButton.tsx","../src/primitives/progress-circle/ProgressCircle.tsx","../src/primitives/split-button/SplitButton.tsx","../src/primitives/aspect-ratio/AspectRatio.tsx","../src/primitives/visually-hidden/VisuallyHidden.tsx","../src/primitives/scroll-area/ScrollArea.tsx","../src/primitives/ribbon/Ribbon.tsx","../src/primitives/gauge/Gauge.tsx","../src/primitives/marquee/Marquee.tsx","../src/primitives/masonry/Masonry.tsx","../src/primitives/fieldset/Fieldset.tsx","../src/primitives/toolbar/Toolbar.tsx","../src/primitives/radio/context.ts","../src/primitives/radio/Radio.tsx","../src/primitives/radio/RadioGroup.tsx","../src/primitives/slot/Slot.tsx","../src/primitives/form-field/FormField.tsx","../src/floating/useFloating.ts","../src/primitives/tooltip/Tooltip.tsx","../src/primitives/popover/context.ts","../src/primitives/popover/Popover.tsx","../src/primitives/popover/PopoverTrigger.tsx","../src/floating/useDismiss.ts","../src/primitives/popover/PopoverContent.tsx","../src/primitives/dialog/context.ts","../src/primitives/dialog/Dialog.tsx","../src/primitives/dialog/DialogTrigger.tsx","../src/modal-utils/useBodyScrollLock.ts","../src/modal-utils/useFocusTrap.ts","../src/primitives/dialog/DialogContent.tsx","../src/primitives/drawer/context.ts","../src/primitives/drawer/Drawer.tsx","../src/primitives/drawer/DrawerTrigger.tsx","../src/primitives/drawer/DrawerContent.tsx","../src/primitives/dropdown/context.ts","../src/primitives/dropdown/Dropdown.tsx","../src/primitives/dropdown/DropdownTrigger.tsx","../src/primitives/dropdown/DropdownMenu.tsx","../src/primitives/dropdown/DropdownItem.tsx","../src/primitives/toast/toastStore.ts","../src/primitives/toast/useToast.ts","../src/primitives/toast/ToastViewport.tsx","../src/primitives/tabs/context.ts","../src/primitives/tabs/Tabs.tsx","../src/primitives/tabs/TabsList.tsx","../src/primitives/tabs/TabsTrigger.tsx","../src/primitives/tabs/TabsContent.tsx","../src/primitives/accordion/context.ts","../src/primitives/accordion/Accordion.tsx","../src/primitives/accordion/AccordionItem.tsx","../src/primitives/stepper/context.ts","../src/primitives/stepper/Stepper.tsx","../src/primitives/stepper/StepperStep.tsx","../src/primitives/toggle-group/context.ts","../src/primitives/toggle-group/ToggleGroup.tsx","../src/primitives/toggle-group/ToggleGroupItem.tsx","../src/primitives/pagination/Pagination.tsx","../src/primitives/breadcrumb/Breadcrumb.tsx","../src/primitives/breadcrumb/BreadcrumbItem.tsx","../src/primitives/drag/useDrag.ts","../src/primitives/dragger/Dragger.tsx","../src/primitives/splitter/Splitter.tsx","../src/primitives/resizer/Resizer.tsx","../src/primitives/select/Select.tsx","../src/primitives/virtual-scroll/VirtualScroll.tsx","../src/primitives/table/Table.tsx","../src/primitives/table/exportCsv.ts","../src/primitives/table/exportExcel.ts","../src/primitives/calendar/dateUtils.ts","../src/primitives/calendar/Calendar.tsx","../src/primitives/date-picker/DatePicker.tsx","../src/motion/usePrefersReducedMotion.ts","../src/motion/styles.ts","../src/motion/useDataState.ts","../src/primitives/tree/Tree.tsx","../src/primitives/list/List.tsx","../src/primitives/file-upload/FileUpload.tsx","../src/primitives/menu/context.ts","../src/primitives/menu/Menu.tsx","../src/primitives/menu/MenuTrigger.tsx","../src/primitives/menu/MenuContent.tsx","../src/primitives/menu/MenuItem.tsx","../src/primitives/menu/MenuSub.tsx","../src/primitives/banner/Banner.tsx","../src/primitives/time-picker/TimePicker.tsx","../src/primitives/date-range-picker/DateRangePicker.tsx","../src/primitives/slider/Slider.tsx","../src/primitives/range-slider/RangeSlider.tsx","../src/primitives/color-picker/ColorPicker.tsx","../src/primitives/command-palette/types.ts","../src/primitives/command-palette/CommandPalette.tsx","../src/form/context.ts","../src/form/Form.tsx","../src/form/useForm.ts","../src/form/useField.ts","../src/form/useFieldArray.ts","../src/async/useAsyncResource.ts","../src/async/usePaginatedResource.ts","../src/resource/useResourceController.ts","../src/data/useDataSource.ts","../src/data/useGroupedView.ts","../src/behaviors/Resizable.tsx","../src/behaviors/Movable.tsx","../src/behaviors/Hotkey.tsx","../src/behaviors/ClickOutside.tsx","../src/behaviors/Sortable.tsx","../src/behaviors/LongPress.tsx","../src/undo/useUndoStack.ts","../src/layouts/Stack.tsx","../src/layouts/Container.tsx","../src/layouts/Grid.tsx","../src/layouts/SidebarLayout.tsx","../src/layouts/HeaderLayout.tsx","../src/layouts/DashboardGrid.tsx","../src/admin/NavMenu.tsx","../src/admin/AdminBreadcrumb.tsx","../src/admin/useTabsNav.ts","../src/admin/AdminTabs.tsx","../src/admin/useAdminShell.ts","../src/admin/AdminLayout.tsx","../src/skeletons/LoginTemplate.tsx","../src/skeletons/DashboardTemplate.tsx","../src/provider/context.ts","../src/provider/IrisProvider.tsx","../src/error-boundary/ErrorBoundary.tsx"],"names":["store","useSyncExternalStore","React","read","useMemo","createContext","useRef","useEffect","injectGlobalStyles","applyTheme","applyDirection","jsx","useContext","React2","getColorScheme","watchColorScheme","applySkin","jsxs","Children","isValidElement","cloneElement","composeEventHandlers","React3","React4","React5","createI18n","localeDirection","React6","CSS","installed","SIZE_MAP","resolveSize","React7","defaultIconRegistry","resolveThemedIcon","React8","React9","TONE_TO_VAR","React10","React11","Fragment","React12","IrisInput","inputStyle","React13","IrisTextarea","React14","IrisSwitch","DIM_MAP","React15","IrisCheckbox","React16","IrisPasswordInput","React17","IrisNumberInput","React18","clamp","React19","React20","React21","pad","React22","React23","createSelectionModel","prefersReducedMotion","React24","resolve","React25","React26","React27","React28","React29","createKeyboardNav","React30","React31","React32","VALUE_FONT","React33","id","React34","React35","React36","copyText","React37","COLOR","React38","React39","React40","React41","React42","IrisRadio","React43","React44","IrisSlot","React45","IrisFormField","React46","offsetMiddleware","flipMiddleware","shiftMiddleware","sizeMiddleware","arrowMiddleware","computePosition","autoUpdate","React47","createHoverIntent","createPortal","React48","createFloatingMachine","React49","React50","IrisPopoverTrigger","React51","React52","IrisPopoverContent","React53","React54","React55","IrisDialogTrigger","React56","React57","active","React58","IrisDialogContent","IrisDialogTitle","IrisDialogDescription","IrisDialogClose","React59","React60","React61","IrisDrawerTrigger","React62","IrisDrawerContent","IrisDrawerTitle","IrisDrawerClose","React63","React64","React65","IrisDropdownTrigger","React66","IrisDropdownMenu","matchTypeahead","React67","IrisDropdownItem","IrisDropdownSeparator","createStore","generateId","React68","createAutoDismiss","t","React69","React70","value","nextEnabledIndex","React71","IrisTabsList","React72","IrisTabsTrigger","horizontal","React73","IrisTabsContent","React74","React75","React76","IrisAccordionItem","React77","React78","React79","IrisStepperStep","React80","React81","React82","IrisToggleGroupItem","React83","getPageRange","React84","IrisBreadcrumb","React85","IrisBreadcrumbItem","React86","React87","React88","React89","SIZE_STYLES","React90","React91","IrisVirtualScroll","createVirtualizer","React92","flattenLeafColumns","buildHeaderMatrix","createExpansion","error","compareValues","flattenTree","withSortedChildren","createCellRange","nextGridCell","computeVirtualRange","aggregate","saveFile","toSpreadsheetXml","React93","startOfMonth","clampDate","isSameMonth","buildMonthMatrix","getWeekdayNames","formatMonthYear","addDays","isOutOfRange","startOfDay","addMonths","endOfMonth","isSameDay","formatLocalISO","React94","React95","React96","resolveDataState","React97","createTreeSelection","React98","React99","React100","React101","React102","IrisMenuTrigger","React103","IrisMenuContent","React104","IrisMenuItem","IrisMenuSeparator","React105","React106","React107","formatDisplay","React108","decimalsOf","roundToStep","React109","getDirection","React110","React111","rgbaToHsva","hexToRgba","hsvaToRgba","rgbToHex","clamp01","React112","matches","React113","React114","React115","createFormStore","formatPath","getByPath","React116","createAsyncResource","React117","createPaginatedResource","React118","createResourceController","React119","createDataSource","React120","createGroupedView","ALL_HANDLES","HANDLE_CURSORS","handlePosition","React121","React122","React123","React124","React125","createSortable","React126","createLongPress","React127","createUndoStack","undo","React128","IrisStack","React129","IrisContainer","toCssSpacing","React130","IrisGrid","React131","asLen","React132","branchTrail","visibleNav","findNavPath","isBranch","firstLeaf","findNavNode","React133","isClosable","React134","createAdminShell","React135","React136","React137","theme","runPlugins","applyCssVars","React138"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as React from 'react'\nimport { useSyncExternalStore } from 'react'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into React reactivity.\n * Uses React 18's `useSyncExternalStore` — the contract is identical to the\n * one Vue uses via `ref + onMounted` and Solid uses via `createSignal`. The\n * **same** store can power Button, Popover, Dialog, etc. on any framework.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): T {\n return useSyncExternalStore(\n store.subscribe,\n store.getState,\n store.getState, // SSR fallback — same as client snapshot in our case.\n )\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the component re-renders only\n * when `selector(state)` changes per `isEqual` (default `Object.is`), not on\n * every store emission. Built on {@link Store.subscribeWith}. Inline closures\n * for `selector`/`isEqual` are fine (captured via refs; the subscription is not\n * re-created between renders).\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n isEqual?: (a: U, b: U) => boolean,\n): U {\n const [slice, setSlice] = React.useState(() => selector(store.getState()))\n const selRef = React.useRef(selector)\n selRef.current = selector\n const eqRef = React.useRef(isEqual)\n eqRef.current = isEqual\n React.useEffect(() => {\n const read = (s: T): U => selRef.current(s)\n const eq = (a: U, b: U): boolean => (eqRef.current ?? Object.is)(a, b)\n // Re-sync in case the store moved between render and this effect.\n setSlice((prev) => {\n const next = read(store.getState())\n return eq(prev, next) ? prev : next\n })\n return store.subscribeWith(read, setSlice, eq)\n }, [store])\n return slice\n}\n","import { useMemo } from 'react'\nimport type { Machine, MachineEvent, MachineState } from '@iris-ui-kit/core'\nimport { useStore } from './useStore'\n\n/**\n * Bridge a framework-agnostic `Machine` into React. Returns `[state, send]`\n * — `state` is reactive (re-renders on transition) and `send` is stable\n * across renders.\n *\n * Pass a **factory** (`() => createMachine(...)`) so each component instance\n * gets its own machine. Internally memoised so re-renders don't re-create.\n */\nexport function useMachine<TState extends string, TContext, TEvent extends MachineEvent>(\n factory: () => Machine<TState, TContext, TEvent>,\n): [MachineState<TState, TContext>, (event: TEvent) => void] {\n const machine = useMemo(factory, [])\n const state = useStore(machine.store)\n return [state, machine.send]\n}\n","import { createContext, useContext, useEffect, useRef, type ReactNode } from 'react'\nimport {\n applyDirection,\n applyTheme,\n injectGlobalStyles,\n type ApplyThemeResult,\n type Direction,\n type ThemeStore,\n} from '@iris-ui-kit/theme'\nimport type { IrisTheme } from '@iris-ui-kit/tokens'\nimport { useStore } from '../useStore'\n\ninterface IrisThemeContextValue {\n store: ThemeStore\n current: IrisTheme\n dir: Direction\n}\n\nconst IrisThemeContext = createContext<IrisThemeContextValue | null>(null)\n\nexport interface ThemeProviderProps {\n store: ThemeStore\n target?: HTMLElement | null\n /** Writing direction; sets `dir` on the target for RTL. Default `'ltr'`. */\n dir?: Direction\n /** CSP nonce for the injected global stylesheet. Pass the `nonce` from your\n * server-rendered CSP header when you use `style-src: 'nonce-...'`. */\n cspNonce?: string\n children?: ReactNode\n}\n\n/**\n * Renderless provider that mirrors `<IrisThemeProvider>` from `@iris-ui-kit/vue`:\n * subscribes to the theme store, applies CSS variables to `target` (or\n * `document.documentElement`), reverts on unmount.\n *\n * **Zero business logic** — `applyTheme` / `createThemeStore` come straight\n * from `@iris-ui-kit/theme`. This component is just a 30-line React adapter.\n */\nexport function ThemeProvider({\n store,\n target = null,\n dir = 'ltr',\n cspNonce,\n children,\n}: ThemeProviderProps) {\n const current = useStore(store.store)\n const appliedRef = useRef<ApplyThemeResult | null>(null)\n\n useEffect(() => {\n injectGlobalStyles(cspNonce)\n const el = target ?? document.documentElement\n appliedRef.current?.revert()\n appliedRef.current = applyTheme(current, el)\n const dirApplied = applyDirection(dir, el)\n return () => {\n appliedRef.current?.revert()\n appliedRef.current = null\n dirApplied.revert()\n }\n }, [current, target, dir])\n\n return (\n <IrisThemeContext.Provider value={{ store, current, dir }}>\n {children}\n </IrisThemeContext.Provider>\n )\n}\n\nexport function useThemeContext(): IrisThemeContextValue {\n const ctx = useContext(IrisThemeContext)\n if (!ctx) {\n throw new Error('[iris-ui] useTheme(): no <ThemeProvider> ancestor found')\n }\n return ctx\n}\n\n/**\n * Read the current theme without throwing when there is no `<ThemeProvider>`\n * ancestor. Returns `undefined` outside a provider. Used by theme-aware\n * primitives (e.g. `IrisIcon`) that must still render standalone.\n */\nexport function useThemeOptional(): IrisTheme | undefined {\n return useContext(IrisThemeContext)?.current\n}\n\n/**\n * Current writing direction (`'ltr'` / `'rtl'`) from the nearest\n * `<ThemeProvider>`, or `'ltr'` when there is none. For components that need to\n * branch on direction beyond what CSS logical properties already handle.\n */\nexport function useDirection(): Direction {\n return useContext(IrisThemeContext)?.dir ?? 'ltr'\n}\n","import type { IrisTheme } from '@iris-ui-kit/tokens'\nimport { useThemeContext } from './ThemeProvider'\n\nexport interface UseThemeReturn {\n theme: IrisTheme\n setTheme: (target: string | IrisTheme) => void\n availableThemes: Record<string, IrisTheme>\n}\n\n/**\n * Read and write the current theme from anywhere inside a `<ThemeProvider>`.\n *\n * @example\n * const { theme, setTheme } = useTheme()\n * setTheme('dark')\n */\nexport function useTheme(): UseThemeReturn {\n const ctx = useThemeContext()\n return {\n theme: ctx.current,\n setTheme: ctx.store.setTheme,\n availableThemes: ctx.store.availableThemes,\n }\n}\n","import * as React from 'react'\nimport { getColorScheme, watchColorScheme, type ColorScheme } from '@iris-ui-kit/theme'\n\n/**\n * Reactive system color scheme (`'light'` / `'dark'`) from\n * `prefers-color-scheme`. Re-renders the host when the OS preference flips.\n * SSR-safe (reports `'light'` until mounted). Wire it to a theme store to\n * auto-follow the system:\n *\n * ```tsx\n * const scheme = useColorScheme()\n * React.useEffect(() => store.setTheme(scheme === 'dark' ? 'dark' : 'light'), [scheme])\n * ```\n */\nexport function useColorScheme(): ColorScheme {\n const [scheme, setScheme] = React.useState<ColorScheme>(getColorScheme)\n React.useEffect(() => {\n // Re-sync in case the preference changed between render and effect.\n setScheme(getColorScheme())\n return watchColorScheme(setScheme)\n }, [])\n return scheme\n}\n","import { createContext, useContext, useEffect, useRef, type ReactNode } from 'react'\nimport { injectGlobalStyles } from '@iris-ui-kit/theme'\nimport {\n applySkin,\n type ApplySkinResult,\n type ResolvedSkin,\n type SkinEngine,\n} from '@iris-ui-kit/skins'\nimport { useStore } from '../useStore'\n\ninterface IrisSkinContextValue {\n engine: SkinEngine\n current: ResolvedSkin\n}\n\nconst IrisSkinContext = createContext<IrisSkinContextValue | null>(null)\n\nexport interface SkinProviderProps {\n engine: SkinEngine\n target?: HTMLElement | null\n /** CSP nonce for the injected global stylesheet. */\n cspNonce?: string\n children?: ReactNode\n}\n\n/**\n * Renderless provider mirroring `<ThemeProvider>`: subscribes to the skin\n * engine's store, applies the resolved skin's CSS vars to `target` (or\n * `document.documentElement`), reverts on unmount. Zero skin logic — all of it\n * lives in `@iris-ui-kit/skins`. Client boundary (tsup prepends `'use client'`).\n */\nexport function SkinProvider({ engine, target = null, cspNonce, children }: SkinProviderProps) {\n const current = useStore(engine.store)\n const appliedRef = useRef<ApplySkinResult | null>(null)\n\n useEffect(() => {\n injectGlobalStyles(cspNonce)\n const el = target ?? document.documentElement\n appliedRef.current?.revert()\n appliedRef.current = applySkin(current, el)\n return () => {\n appliedRef.current?.revert()\n appliedRef.current = null\n }\n }, [current, target])\n\n return <IrisSkinContext.Provider value={{ engine, current }}>{children}</IrisSkinContext.Provider>\n}\n\nexport function useSkinContext(): IrisSkinContextValue {\n const ctx = useContext(IrisSkinContext)\n if (!ctx) throw new Error('[iris-ui] useSkin(): no <SkinProvider> ancestor found')\n return ctx\n}\n\n/** Non-throwing read for skin-aware primitives that may render standalone. */\nexport function useSkinOptional(): ResolvedSkin | undefined {\n return useContext(IrisSkinContext)?.current\n}\n","import type { ResolvedSkin, Skin, SkinMode, SkinPatch, SkinError } from '@iris-ui-kit/skins'\nimport { useSkinContext } from './SkinProvider'\n\nexport interface UseSkinReturn {\n skin: ResolvedSkin\n setSkin: (id: string) => void\n loadSkin: (source: string | Skin) => Promise<ResolvedSkin>\n useFromCatalog: (id: string) => Promise<ResolvedSkin>\n patch: (overrides: SkinPatch) => void\n resetPatch: () => void\n setMode: (mode: SkinMode) => void\n getMode: () => SkinMode\n /** Logical selected id (pre system-variant remap) — e.g. 'auto' while following the system. */\n getActiveId: () => string\n availableSkins: () => Skin[]\n errors: () => SkinError[]\n}\n\n/** Read + control the active skin from anywhere inside a `<SkinProvider>`. */\nexport function useSkin(): UseSkinReturn {\n const { engine, current } = useSkinContext()\n return {\n skin: current,\n setSkin: engine.setSkin,\n loadSkin: engine.loadSkin,\n useFromCatalog: engine.useFromCatalog,\n patch: engine.patch,\n resetPatch: engine.resetPatch,\n setMode: engine.setMode,\n getMode: engine.getMode,\n getActiveId: engine.getActiveId,\n availableSkins: engine.availableSkins,\n errors: engine.errors,\n }\n}\n","/**\n * Singleton stylesheet for the React `IrisButton`. Functionally identical to\n * the one in `@iris-ui-kit/vue` — both adapters end up writing the same DOM with\n * the same selectors, so the same CSS works. (Were we to ship both adapters\n * on the same page, the second installation would no-op because the\n * `<style id>` is shared.)\n */\nconst STYLE_ID = 'iris-button-styles'\n\nconst CSS = `\n.iris-button {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--iris-gap-sm, 4px);\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n border-radius: var(--iris-radius-md, 6px);\n white-space: nowrap;\n user-select: none;\n position: relative;\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n filter 120ms ease;\n}\n.iris-button:focus-visible {\n outline: 2px solid var(--iris-primary);\n outline-offset: 2px;\n}\n.iris-button[disabled],\n.iris-button[aria-busy=\"true\"] {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.iris-button[data-iris-button-variant=\"solid\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n filter: brightness(1.08);\n}\n.iris-button[data-iris-button-variant=\"outline\"]:not([disabled]):not([aria-busy=\"true\"]):hover,\n.iris-button[data-iris-button-variant=\"ghost\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n background-color: var(--iris-surface-hover);\n}\n.iris-button[data-iris-button-variant=\"link\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n text-decoration: underline;\n}\n.iris-button-leading {\n display: inline-flex;\n align-items: center;\n}\n.iris-button-spinner {\n width: 1em;\n height: 1em;\n display: inline-block;\n animation: iris-button-spin 0.7s linear infinite;\n}\n@keyframes iris-button-spin {\n to { transform: rotate(360deg); }\n}\n`\n\nlet installed = false\n\nexport function installButtonStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only reset. */\nexport function __resetButtonStyles(): void {\n installed = false\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n}\n\nexport const __BUTTON_STYLE_ID = STYLE_ID\n","import {\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport type { IrisButtonSize, IrisButtonType, IrisButtonVariant } from './types'\nimport { installButtonStyles } from './styles'\n\ntype StyleMap = Record<string, string>\n\nconst SIZE_STYLES: Record<IrisButtonSize, StyleMap> = {\n sm: { padding: 'var(--iris-padding-sm) var(--iris-padding-md)', fontSize: '12px' },\n md: { padding: 'var(--iris-padding-sm) var(--iris-padding-lg)', fontSize: '14px' },\n lg: { padding: 'var(--iris-padding-md) var(--iris-padding-lg)', fontSize: '16px' },\n}\n\nconst VARIANT_STYLES: Record<IrisButtonVariant, StyleMap> = {\n solid: {\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground)',\n border: '1px solid var(--iris-primary)',\n },\n outline: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid var(--iris-border)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--iris-foreground)',\n border: '1px solid transparent',\n },\n link: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid transparent',\n textDecoration: 'none',\n },\n}\n\nfunction buildInlineStyle(variant: IrisButtonVariant, size: IrisButtonSize): CSSProperties {\n const base: StyleMap = { ...SIZE_STYLES[size], ...VARIANT_STYLES[variant] }\n if (variant === 'link') base.padding = '0'\n return base as CSSProperties\n}\n\nfunction Spinner() {\n return (\n <svg className=\"iris-button-spinner\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeOpacity=\"0.25\" strokeWidth=\"3\" />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\nexport interface IrisButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'type' | 'disabled' | 'onClick' | 'className' | 'style' | 'children'\n> {\n variant?: IrisButtonVariant\n size?: IrisButtonSize\n disabled?: boolean\n loading?: boolean\n type?: IrisButtonType\n asChild?: boolean\n leading?: ReactNode\n children?: ReactNode\n className?: string\n style?: CSSProperties\n onClick?: MouseEventHandler<HTMLElement>\n}\n\n/**\n * React port of `IrisButton`. Same prop contract as `@iris-ui-kit/vue`'s\n * version. **No business logic is duplicated** — the `composeEventHandlers`\n * helper, variant token map, and singleton stylesheet are all from\n * `@iris-ui-kit/core` / a near-identical CSS file.\n *\n * Validates the React-readiness promise: any future primitive can be ported\n * by writing a thin .tsx wrapper around the same shared logic.\n *\n * @example\n * <IrisButton variant=\"solid\" onClick={() => save()}>\n * Save\n * </IrisButton>\n */\nexport function IrisButton({\n variant = 'solid',\n size = 'md',\n disabled = false,\n loading = false,\n type = 'button',\n asChild = false,\n leading,\n children,\n className,\n style,\n onClick,\n ...rest\n}: IrisButtonProps) {\n useEffect(() => {\n installButtonStyles()\n }, [])\n\n const isInteractive = !disabled && !loading\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n if (!isInteractive) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n onClick?.(event)\n }\n\n const baseProps = {\n className: ['iris-button', className].filter(Boolean).join(' '),\n 'data-iris-button-variant': variant,\n 'data-iris-button-size': size,\n 'aria-disabled': disabled ? ('true' as const) : undefined,\n 'aria-busy': loading ? ('true' as const) : undefined,\n style: { ...buildInlineStyle(variant, size), ...(style ?? {}) },\n }\n\n if (asChild) {\n const only = Children.only(children) as ReactElement | undefined\n if (!only || !isValidElement(only)) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisButton: as-child requires a single React element child')\n }\n return null\n }\n const childProps = only.props as {\n className?: string\n style?: CSSProperties\n onClick?: MouseEventHandler<HTMLElement>\n }\n return cloneElement(only, {\n ...rest,\n ...baseProps,\n className: [baseProps.className, childProps.className].filter(Boolean).join(' '),\n style: { ...baseProps.style, ...(childProps.style ?? {}) },\n onClick: composeEventHandlers(\n handleClick as (e: ReactMouseEvent<HTMLElement>) => void,\n (childProps.onClick ?? (() => {})) as (e: ReactMouseEvent<HTMLElement>) => void,\n ),\n ...(isInteractive ? {} : { disabled: true }),\n } as Record<string, unknown>)\n }\n\n return (\n <button {...rest} type={type} disabled={!isInteractive} onClick={handleClick} {...baseProps}>\n {(loading || leading) && (\n <span className=\"iris-button-leading\">{loading ? <Spinner /> : leading}</span>\n )}\n {children}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport type IrisBadgeVariant = 'solid' | 'outline' | 'subtle'\nexport type IrisBadgeTone = 'primary' | 'success' | 'warning' | 'danger' | 'neutral'\nexport type IrisBadgeSize = 'sm' | 'md'\n\nconst TONE_TO_VAR: Record<IrisBadgeTone, string> = {\n primary: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n neutral: '--iris-muted',\n}\n\nfunction badgeStyle(\n variant: IrisBadgeVariant,\n tone: IrisBadgeTone,\n size: IrisBadgeSize,\n): React.CSSProperties {\n const v = `var(${TONE_TO_VAR[tone]})`\n const base: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n fontFamily: 'var(--iris-font-family, inherit)',\n fontWeight: 500,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n fontSize: size === 'sm' ? '11px' : '12px',\n padding: size === 'sm' ? '2px 6px' : '3px 8px',\n }\n switch (variant) {\n case 'solid':\n return {\n ...base,\n background: v,\n color: 'var(--iris-primary-foreground, #fff)',\n border: '1px solid transparent',\n }\n case 'outline':\n return { ...base, background: 'transparent', color: v, border: `1px solid ${v}` }\n case 'subtle':\n return {\n ...base,\n // Precomputed fallback first; color-mix shorthand overrides on modern engines.\n backgroundColor: `var(${TONE_TO_VAR[tone]}-subtle)`,\n background: `color-mix(in srgb, ${v} 12%, transparent)`,\n color: v,\n border: '1px solid transparent',\n }\n }\n}\n\nexport interface IrisBadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {\n variant?: IrisBadgeVariant\n tone?: IrisBadgeTone\n size?: IrisBadgeSize\n children?: React.ReactNode\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisBadge}. Same visual model.\n *\n * @example\n * <IrisBadge tone=\"success\" variant=\"subtle\">Active</IrisBadge>\n */\nexport function IrisBadge({\n variant = 'subtle',\n tone = 'primary',\n size = 'md',\n style,\n children,\n ...rest\n}: IrisBadgeProps): React.ReactElement {\n return (\n <span\n {...rest}\n data-iris-badge=\"\"\n data-iris-badge-variant={variant}\n data-iris-badge-tone={tone}\n data-iris-badge-size={size}\n style={{ ...badgeStyle(variant, tone, size), ...style }}\n >\n {children}\n </span>\n )\n}\n","import * as React from 'react'\n\nexport type IrisAvatarShape = 'circle' | 'square'\nexport type IrisAvatarSize = 'sm' | 'md' | 'lg' | number\n\nconst SIZE_MAP: Record<Exclude<IrisAvatarSize, number>, number> = {\n sm: 24,\n md: 32,\n lg: 48,\n}\n\nfunction resolveSize(size: IrisAvatarSize): number {\n return typeof size === 'number' ? size : SIZE_MAP[size]\n}\n\nfunction initialsFromName(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return ''\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase()\n return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase()\n}\n\nexport interface IrisAvatarProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {\n src?: string\n alt?: string\n /** Used to derive initials when no `fallback` slot is supplied. */\n name?: string\n /** Explicit fallback string; wins over derived initials. */\n fallback?: string\n /** Custom fallback content (React node). */\n fallbackContent?: React.ReactNode\n size?: IrisAvatarSize\n shape?: IrisAvatarShape\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisAvatar}.\n *\n * @example\n * <IrisAvatar src=\"/me.png\" name=\"Ada Lovelace\" size=\"md\" />\n */\nexport function IrisAvatar({\n src = '',\n alt = '',\n name = '',\n fallback = '',\n fallbackContent,\n size = 'md',\n shape = 'circle',\n style,\n ...rest\n}: IrisAvatarProps): React.ReactElement {\n const [failed, setFailed] = React.useState(false)\n\n // Reset failure when src changes.\n React.useEffect(() => {\n setFailed(false)\n }, [src])\n\n const px = resolveSize(size)\n const showImage = Boolean(src) && !failed\n const initials = fallback || (name ? initialsFromName(name) : '')\n\n const containerStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: px,\n height: px,\n borderRadius: shape === 'circle' ? '50%' : 'var(--iris-radius-sm, 4px)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n fontSize: Math.max(10, Math.round(px * 0.4)),\n fontWeight: 600,\n lineHeight: 1,\n overflow: 'hidden',\n userSelect: 'none',\n verticalAlign: 'middle',\n ...style,\n }\n\n return (\n <span\n {...rest}\n data-iris-avatar=\"\"\n data-iris-avatar-shape={shape}\n data-iris-avatar-state={showImage ? 'image' : 'fallback'}\n style={containerStyle}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt}\n data-iris-avatar-img=\"\"\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n onError={() => setFailed(true)}\n />\n ) : (\n (fallbackContent ?? initials)\n )}\n </span>\n )\n}\n","import * as React from 'react'\nimport type { I18n } from '@iris-ui-kit/core'\n\n/** Carries the active {@link I18n} instance to descendants via `useI18n`. */\nexport const I18nContext = React.createContext<I18n | null>(null)\n","import * as React from 'react'\nimport { createI18n, localeDirection, type I18n, type I18nMessages } from '@iris-ui-kit/core'\nimport { applyDirection } from '@iris-ui-kit/theme'\nimport { I18nContext } from './context'\n\nexport interface IrisI18nProviderProps {\n /** BCP-47 locale. Changes are synced to the live instance. */\n locale?: string\n /** Message overrides. Changes are merged into the live instance. */\n messages?: I18nMessages\n /** Provide a pre-created instance instead of `locale` / `messages`. */\n i18n?: I18n\n /**\n * When set, the locale's writing direction ({@link localeDirection}) is\n * applied to `directionTarget` (`dir` + `data-iris-dir`) and `<html lang>` is\n * set whenever `locale` changes — so \"set locale → flip direction + announce\n * language\" needs no manual wiring. Off by default so it never fights an\n * explicit `<ThemeProvider dir>`. Reverts on unmount.\n */\n autoDirection?: boolean\n /** Element to receive dir/lang when `autoDirection` is set. Defaults to `document.documentElement`. */\n directionTarget?: HTMLElement | null\n children?: React.ReactNode\n}\n\n/**\n * Makes a locale + message dictionary available to descendant components via\n * `useI18n`. Either pass `locale` / `messages` (an instance is created and\n * kept in sync) or a pre-built `i18n` instance you control externally.\n */\nexport function IrisI18nProvider({\n locale,\n messages,\n i18n,\n autoDirection,\n directionTarget,\n children,\n}: IrisI18nProviderProps) {\n const ref = React.useRef<I18n | null>(null)\n if (ref.current === null) {\n ref.current = i18n ?? createI18n({ locale, messages })\n }\n const instance = ref.current\n\n React.useEffect(() => {\n if (i18n || !locale) return\n instance.setLocale(locale)\n }, [locale, i18n, instance])\n\n React.useEffect(() => {\n if (i18n || !messages) return\n instance.setMessages(messages)\n }, [messages, i18n, instance])\n\n // Auto-apply writing direction + `lang` from the active locale (opt-in).\n React.useEffect(() => {\n if (!autoDirection || !locale || typeof document === 'undefined') return\n const el = directionTarget ?? document.documentElement\n const applied = applyDirection(localeDirection(locale), el)\n const prevLang = el.getAttribute('lang')\n el.setAttribute('lang', locale)\n return () => {\n applied.revert()\n if (prevLang === null) el.removeAttribute('lang')\n else el.setAttribute('lang', prevLang)\n }\n }, [autoDirection, locale, directionTarget])\n\n return <I18nContext.Provider value={instance}>{children}</I18nContext.Provider>\n}\n","import * as React from 'react'\nimport { createI18n, type I18n } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { I18nContext } from './context'\n\nexport interface UseI18nReturn {\n locale: string\n t: I18n['t']\n formatDate: I18n['formatDate']\n formatNumber: I18n['formatNumber']\n formatRelativeTime: I18n['formatRelativeTime']\n setLocale: I18n['setLocale']\n setMessages: I18n['setMessages']\n}\n\n// Shared fallback so components can call `useI18n()` without an enclosing\n// provider — they get English defaults rather than throwing.\nlet fallbackI18n: I18n | null = null\nfunction getFallback(): I18n {\n if (fallbackI18n === null) fallbackI18n = createI18n()\n return fallbackI18n\n}\n\n/**\n * Reactive access to the active locale + translation/formatting helpers.\n * Re-renders the host when the locale or messages change. Works with or\n * without an `<IrisI18nProvider>` (falls back to English defaults).\n */\nexport function useI18n(): UseI18nReturn {\n const ctx = React.useContext(I18nContext)\n const i18n = ctx ?? getFallback()\n const state = useStore(i18n.store)\n\n return {\n locale: state.locale,\n t: i18n.t,\n formatDate: i18n.formatDate,\n formatNumber: i18n.formatNumber,\n formatRelativeTime: i18n.formatRelativeTime,\n setLocale: i18n.setLocale,\n setMessages: i18n.setMessages,\n }\n}\n","export const __SPINNER_STYLE_ID = 'iris-spinner-styles'\n\nconst CSS = `\n@keyframes iris-spinner-rotate {\n to { transform: rotate(360deg); }\n}\n[data-iris-spinner] {\n display: inline-block;\n animation: iris-spinner-rotate 0.9s linear infinite;\n vertical-align: middle;\n}\n[data-iris-spinner] > circle {\n fill: none;\n stroke-linecap: round;\n stroke-dasharray: 60 200;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-iris-spinner] {\n animation: none;\n }\n [data-iris-spinner] > circle {\n stroke-dasharray: 0;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installSpinnerStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__SPINNER_STYLE_ID)) {\n installed = true\n return\n }\n const el = document.createElement('style')\n el.id = __SPINNER_STYLE_ID\n el.textContent = CSS\n document.head.appendChild(el)\n installed = true\n}\n\nexport function __resetSpinnerStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__SPINNER_STYLE_ID)?.remove()\n }\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\nimport { installSpinnerStyles } from './styles'\n\nexport type IrisSpinnerSize = 'sm' | 'md' | 'lg' | number\n\nconst SIZE_MAP: Record<Exclude<IrisSpinnerSize, number>, number> = {\n sm: 14,\n md: 18,\n lg: 24,\n}\n\nfunction resolveSize(size: IrisSpinnerSize): number {\n return typeof size === 'number' ? size : SIZE_MAP[size]\n}\n\nexport interface IrisSpinnerProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {\n size?: IrisSpinnerSize\n color?: string\n strokeWidth?: number\n label?: string\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisSpinner}. */\nexport function IrisSpinner({\n size = 'md',\n color = 'var(--iris-primary)',\n strokeWidth = 0,\n label,\n style,\n ...rest\n}: IrisSpinnerProps): React.ReactElement {\n const { t } = useI18n()\n React.useEffect(installSpinnerStyles, [])\n const px = resolveSize(size)\n const sw = strokeWidth || Math.max(1.5, Math.round(px * 0.12))\n const resolvedLabel = label ?? t('spinner.loading')\n\n return (\n <span\n {...rest}\n role=\"status\"\n aria-live=\"polite\"\n data-iris-spinner-wrap=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', ...style }}\n >\n <svg\n data-iris-spinner=\"\"\n width={px}\n height={px}\n viewBox=\"0 0 50 50\"\n aria-hidden=\"true\"\n focusable=\"false\"\n style={{ color }}\n >\n <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"currentColor\" strokeWidth={sw} />\n </svg>\n {resolvedLabel ? (\n <span\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n >\n {resolvedLabel}\n </span>\n ) : null}\n </span>\n )\n}\n","import * as React from 'react'\nimport { defaultIconRegistry, resolveThemedIcon, type IrisIconRegistry } from '@iris-ui-kit/icons'\nimport { useThemeOptional } from '../../theme'\n\nexport interface IrisIconProps extends Omit<\n React.SVGAttributes<SVGSVGElement>,\n 'name' | 'children' | 'dangerouslySetInnerHTML' | 'fill'\n> {\n /** Semantic icon name resolved via the registry (e.g. 'check', 'chevron-down'). */\n name: string\n /** Width & height (number → px). Default 24. */\n size?: number | string\n /** Stroke width for line icons. Default 2. */\n strokeWidth?: number\n /** Render as a filled glyph instead of a stroked line icon. */\n fill?: boolean\n /** Accessible title; sets `role=\"img\"` + `aria-label`. Omit for decorative icons. */\n title?: string\n /** Registry to resolve `name` against. Defaults to the built-in set. */\n registry?: IrisIconRegistry\n}\n\n/**\n * Renders a registered icon as inline SVG. Resolves `name` through an\n * `@iris-ui-kit/icons` registry and renders the icon's structured nodes as real\n * SVG child elements (no raw-HTML injection). Colors follow `currentColor`, so\n * the surrounding CSS `color` themes it. Renders nothing for an unresolved name.\n */\nexport function IrisIcon({\n name,\n size = 24,\n strokeWidth = 2,\n fill = false,\n title,\n registry = defaultIconRegistry,\n style,\n ...rest\n}: IrisIconProps): React.ReactElement | null {\n const theme = useThemeOptional()\n const icon = resolveThemedIcon(registry, name, theme)\n if (!icon) return null\n\n const paint: React.SVGAttributes<SVGSVGElement> = fill\n ? { fill: 'currentColor' }\n : {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n }\n\n return (\n <svg\n {...rest}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={icon.viewBox ?? '0 0 24 24'}\n width={size}\n height={size}\n {...paint}\n role={title ? 'img' : undefined}\n aria-label={title || undefined}\n aria-hidden={title ? undefined : true}\n data-iris-icon={name}\n style={{ display: 'inline-block', verticalAlign: 'middle', flexShrink: 0, ...style }}\n >\n {title ? <title>{title}</title> : null}\n {icon.nodes.map((node, i) => React.createElement(node.tag, { key: i, ...node.attrs }))}\n </svg>\n )\n}\n","import * as React from 'react'\n\nexport type IrisCardVariant = 'elevated' | 'outline' | 'subtle'\nexport type IrisCardPadding = 'none' | 'sm' | 'md' | 'lg'\n\nconst PADDING_MAP: Record<IrisCardPadding, string> = {\n none: '0',\n sm: '12px',\n md: 'var(--iris-padding-md, 16px)',\n lg: '24px',\n}\n\nfunction variantStyle(variant: IrisCardVariant): React.CSSProperties {\n const base: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n borderRadius: 'var(--iris-radius-md, 8px)',\n overflow: 'hidden',\n }\n switch (variant) {\n case 'elevated':\n return { ...base, boxShadow: '0 1px 2px rgba(0,0,0,.05), 0 4px 12px rgba(0,0,0,.06)' }\n case 'outline':\n return { ...base, border: '1px solid var(--iris-border)' }\n case 'subtle':\n return { ...base, background: 'var(--iris-surface)' }\n }\n}\n\nexport interface IrisCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n variant?: IrisCardVariant\n padding?: IrisCardPadding\n hover?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisCard}.\n *\n * @example\n * <IrisCard variant=\"elevated\" header={<h3>Title</h3>}>\n * Card body content.\n * </IrisCard>\n */\nexport function IrisCard({\n variant = 'elevated',\n padding = 'md',\n hover = false,\n header,\n footer,\n children,\n style,\n ...rest\n}: IrisCardProps): React.ReactElement {\n const sectionPadding = PADDING_MAP[padding]\n const containerStyle: React.CSSProperties = {\n ...variantStyle(variant),\n transition: hover ? 'transform 160ms ease, box-shadow 160ms ease' : 'none',\n ...style,\n }\n\n return (\n <div\n {...rest}\n data-iris-card=\"\"\n data-iris-card-variant={variant}\n data-iris-card-padding={padding}\n data-iris-card-hover={hover ? 'true' : undefined}\n style={containerStyle}\n >\n {header !== undefined && header !== null ? (\n <div\n data-iris-card-header=\"\"\n style={{\n padding: sectionPadding,\n borderBottom: '1px solid var(--iris-border)',\n fontWeight: 600,\n }}\n >\n {header}\n </div>\n ) : null}\n {children !== undefined && children !== null ? (\n <div data-iris-card-body=\"\" style={{ padding: sectionPadding, flex: 1 }}>\n {children}\n </div>\n ) : null}\n {footer !== undefined && footer !== null ? (\n <div\n data-iris-card-footer=\"\"\n style={{ padding: sectionPadding, borderTop: '1px solid var(--iris-border)' }}\n >\n {footer}\n </div>\n ) : null}\n </div>\n )\n}\n","export const __SKELETON_STYLE_ID = 'iris-skeleton-styles'\n\nconst CSS = `\n@keyframes iris-skeleton-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n[data-iris-skeleton] {\n display: block;\n background-color: var(--iris-surface);\n border-radius: var(--iris-radius-sm, 4px);\n}\n[data-iris-skeleton][data-iris-skeleton-animated=\"true\"] {\n /* Fallback shimmer (no color-mix) for engines without it; the color-mix\n gradient below overrides it on modern engines (same source-order cascade). */\n background-image: linear-gradient(\n 90deg,\n var(--iris-surface) 0%,\n var(--iris-muted-subtle) 50%,\n var(--iris-surface) 100%\n );\n background-image: linear-gradient(\n 90deg,\n var(--iris-surface) 0%,\n color-mix(in srgb, var(--iris-foreground) 8%, var(--iris-surface)) 50%,\n var(--iris-surface) 100%\n );\n background-size: 200% 100%;\n animation: iris-skeleton-shimmer 1.4s linear infinite;\n}\n[data-iris-skeleton-shape=\"circle\"] {\n border-radius: 50%;\n}\n[data-iris-skeleton-shape=\"text\"] {\n border-radius: 4px;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-iris-skeleton][data-iris-skeleton-animated=\"true\"] {\n animation: none;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installSkeletonStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__SKELETON_STYLE_ID)) {\n installed = true\n return\n }\n const el = document.createElement('style')\n el.id = __SKELETON_STYLE_ID\n el.textContent = CSS\n document.head.appendChild(el)\n installed = true\n}\n\nexport function __resetSkeletonStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__SKELETON_STYLE_ID)?.remove()\n }\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\nimport { installSkeletonStyles } from './styles'\n\nexport type IrisSkeletonShape = 'rect' | 'circle' | 'text'\n\nfunction defaultHeight(shape: IrisSkeletonShape, w: string | number | undefined): string {\n if (shape === 'text') return '1em'\n if (shape === 'circle') return typeof w === 'number' ? `${w}px` : (w ?? '40px')\n return 'auto'\n}\n\nfunction defaultWidth(shape: IrisSkeletonShape): string {\n if (shape === 'text') return '100%'\n if (shape === 'circle') return '40px'\n return '100%'\n}\n\nfunction toCss(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value\n}\n\nexport interface IrisSkeletonProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n width?: string | number\n height?: string | number\n shape?: IrisSkeletonShape\n animated?: boolean\n}\n\n/**\n * A placeholder shape that pulses to indicate content is loading. Supports\n * `rect`, `circle`, and `text` shapes with configurable dimensions. Its\n * shimmer animation respects `prefers-reduced-motion`.\n */\nexport function IrisSkeleton({\n width,\n height,\n shape = 'rect',\n animated = true,\n style,\n ...rest\n}: IrisSkeletonProps): React.ReactElement {\n const { t } = useI18n()\n React.useEffect(installSkeletonStyles, [])\n const w = width !== undefined ? toCss(width) : defaultWidth(shape)\n const h = height !== undefined ? toCss(height) : defaultHeight(shape, width)\n return (\n <div\n {...rest}\n data-iris-skeleton=\"\"\n data-iris-skeleton-shape={shape}\n data-iris-skeleton-animated={String(animated)}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={t('skeleton.loading')}\n style={{ width: w, height: h, ...style }}\n />\n )\n}\n","export const __PROGRESS_STYLE_ID = 'iris-progress-styles'\n\nconst CSS = `\n@keyframes iris-progress-indeterminate {\n 0% { left: -40%; right: 100%; }\n 60% { left: 100%; right: -20%; }\n 100% { left: 100%; right: -20%; }\n}\n[data-iris-progress] {\n position: relative;\n overflow: hidden;\n background: var(--iris-surface);\n border-radius: 9999px;\n}\n[data-iris-progress-bar] {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n border-radius: 9999px;\n transition: width 200ms ease;\n}\n[data-iris-progress][data-state=\"indeterminate\"] [data-iris-progress-bar] {\n width: auto;\n right: 100%;\n animation: iris-progress-indeterminate 1.2s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-iris-progress][data-state=\"indeterminate\"] [data-iris-progress-bar] {\n animation: none;\n right: 50%;\n left: 0;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installProgressStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__PROGRESS_STYLE_ID)) {\n installed = true\n return\n }\n const el = document.createElement('style')\n el.id = __PROGRESS_STYLE_ID\n el.textContent = CSS\n document.head.appendChild(el)\n installed = true\n}\n\nexport function __resetProgressStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__PROGRESS_STYLE_ID)?.remove()\n }\n}\n","import * as React from 'react'\nimport { installProgressStyles } from './styles'\n\nexport type IrisProgressTone = 'primary' | 'success' | 'warning' | 'danger'\nexport type IrisProgressSize = 'sm' | 'md'\n\nconst TONE_TO_VAR: Record<IrisProgressTone, string> = {\n primary: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n}\n\nconst HEIGHT_MAP: Record<IrisProgressSize, string> = {\n sm: '4px',\n md: '8px',\n}\n\nexport interface IrisProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n value?: number | null\n max?: number\n indeterminate?: boolean\n tone?: IrisProgressTone\n size?: IrisProgressSize\n}\n\n/**\n * A horizontal progress bar. Supports determinate mode (controlled `value`)\n * and indeterminate (indefinite animation) for ongoing operations. Customisable\n * via `tone` and `size` props; renders `role=\"progressbar\"`.\n */\nexport function IrisProgress({\n value = null,\n max = 100,\n indeterminate = false,\n tone = 'primary',\n size = 'md',\n style,\n ...rest\n}: IrisProgressProps): React.ReactElement {\n React.useEffect(installProgressStyles, [])\n const isIndeterminate = indeterminate || value === null || value === undefined\n const clamped = !isIndeterminate && value !== null ? Math.max(0, Math.min(max, value)) : 0\n const percent = isIndeterminate ? 0 : (clamped / Math.max(1, max)) * 100\n\n return (\n <div\n {...rest}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={isIndeterminate ? undefined : clamped}\n data-iris-progress=\"\"\n data-state={isIndeterminate ? 'indeterminate' : 'determinate'}\n data-iris-progress-tone={tone}\n data-iris-progress-size={size}\n style={{ width: '100%', height: HEIGHT_MAP[size], ...style }}\n >\n <div\n data-iris-progress-bar=\"\"\n style={{\n background: `var(${TONE_TO_VAR[tone]})`,\n width: isIndeterminate ? 'auto' : `${percent}%`,\n }}\n />\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisAlertTone = 'info' | 'success' | 'warning' | 'danger'\n\nconst TONE_TO_VAR: Record<IrisAlertTone, string> = {\n info: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n}\n\nexport interface IrisAlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: IrisAlertTone\n title?: React.ReactNode\n closable?: boolean\n open?: boolean\n onClose?: () => void\n icon?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisAlert}.\n *\n * @example\n * <IrisAlert tone=\"warning\" title=\"Heads up\" closable onClose={dismiss}>\n * Your session expires soon.\n * </IrisAlert>\n */\nexport function IrisAlert({\n tone = 'info',\n title,\n closable = false,\n open,\n onClose,\n icon,\n children,\n style,\n ...rest\n}: IrisAlertProps): React.ReactElement | null {\n const { t } = useI18n()\n const [internalOpen, setInternalOpen] = React.useState(true)\n React.useEffect(() => {\n if (open !== undefined) setInternalOpen(open)\n }, [open])\n\n const isOpen = open !== undefined ? open : internalOpen\n if (!isOpen) return null\n\n const tonalVar = `var(${TONE_TO_VAR[tone]})`\n\n const handleClose = () => {\n if (open === undefined) setInternalOpen(false)\n onClose?.()\n }\n\n return (\n <div\n {...rest}\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'status'}\n data-iris-alert=\"\"\n data-iris-alert-tone={tone}\n style={{\n display: 'flex',\n gap: 'var(--iris-gap-md, 12px)',\n padding: 'var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${tonalVar}`,\n // `backgroundColor` is the precomputed fallback under color-mix (engines\n // without it); the `background` shorthand overrides with the exact mix.\n backgroundColor: `var(${TONE_TO_VAR[tone]}-subtle)`,\n background: `color-mix(in srgb, ${tonalVar} 10%, var(--iris-background))`,\n color: 'var(--iris-foreground)',\n alignItems: 'flex-start',\n ...style,\n }}\n >\n {icon ? (\n <span\n data-iris-alert-icon=\"\"\n style={{ color: tonalVar, flexShrink: 0, display: 'inline-flex' }}\n >\n {icon}\n </span>\n ) : null}\n <div data-iris-alert-body=\"\" style={{ flex: 1, minWidth: 0 }}>\n {title ? (\n <div\n data-iris-alert-title=\"\"\n style={{ fontWeight: 600, marginBottom: 4, color: tonalVar }}\n >\n {title}\n </div>\n ) : null}\n <div data-iris-alert-content=\"\">{children}</div>\n </div>\n {closable ? (\n <button\n type=\"button\"\n data-iris-alert-close=\"\"\n aria-label={t('alert.close')}\n onClick={handleClose}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n fontSize: 16,\n padding: 0,\n lineHeight: 1,\n flexShrink: 0,\n }}\n >\n ✕\n </button>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisChipVariant = 'solid' | 'outline' | 'subtle'\nexport type IrisChipTone = 'primary' | 'success' | 'warning' | 'danger' | 'neutral'\nexport type IrisChipSize = 'sm' | 'md'\n\nconst TONE_TO_VAR: Record<IrisChipTone, string> = {\n primary: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n neutral: '--iris-muted',\n}\n\nfunction chipStyle(\n variant: IrisChipVariant,\n tone: IrisChipTone,\n size: IrisChipSize,\n clickable: boolean,\n disabled: boolean,\n): React.CSSProperties {\n const v = `var(${TONE_TO_VAR[tone]})`\n const base: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n borderRadius: 9999,\n fontFamily: 'var(--iris-font-family, inherit)',\n fontWeight: 500,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : 'default',\n opacity: disabled ? 0.6 : 1,\n transition: 'background-color 120ms ease, box-shadow 120ms ease',\n fontSize: size === 'sm' ? 11 : 12,\n padding: size === 'sm' ? '3px 8px' : '4px 10px',\n userSelect: 'none',\n }\n switch (variant) {\n case 'solid':\n return {\n ...base,\n background: v,\n color: 'var(--iris-primary-foreground, #fff)',\n border: '1px solid transparent',\n }\n case 'outline':\n return { ...base, background: 'transparent', color: v, border: `1px solid ${v}` }\n case 'subtle':\n return {\n ...base,\n // Precomputed fallback first; color-mix shorthand overrides on modern engines.\n backgroundColor: `var(${TONE_TO_VAR[tone]}-subtle)`,\n background: `color-mix(in srgb, ${v} 14%, transparent)`,\n color: v,\n border: '1px solid transparent',\n }\n }\n}\n\nexport interface IrisChipProps extends Omit<\n React.HTMLAttributes<HTMLElement>,\n 'onClick' | 'children'\n> {\n variant?: IrisChipVariant\n tone?: IrisChipTone\n size?: IrisChipSize\n closable?: boolean\n clickable?: boolean\n disabled?: boolean\n onClose?: () => void\n onClick?: (event: React.MouseEvent<HTMLElement>) => void\n icon?: React.ReactNode\n children?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisChip}. */\nexport function IrisChip({\n variant = 'subtle',\n tone = 'neutral',\n size = 'md',\n closable = false,\n clickable = false,\n disabled = false,\n onClose,\n onClick,\n icon,\n children,\n style,\n ...rest\n}: IrisChipProps): React.ReactElement {\n const { t } = useI18n()\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n if (disabled) return\n onClick?.(event)\n }\n const handleCloseClick = (event: React.MouseEvent) => {\n if (disabled) return\n event.stopPropagation()\n onClose?.()\n }\n\n const sharedProps = {\n ...rest,\n 'data-iris-chip': '',\n 'data-iris-chip-variant': variant,\n 'data-iris-chip-tone': tone,\n 'data-iris-chip-size': size,\n style: { ...chipStyle(variant, tone, size, clickable, disabled), ...style },\n }\n\n const content = (\n <>\n {icon ? (\n <span\n data-iris-chip-icon=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', flexShrink: 0 }}\n >\n {icon}\n </span>\n ) : null}\n <span data-iris-chip-label=\"\">{children}</span>\n {closable ? (\n <button\n type=\"button\"\n data-iris-chip-close=\"\"\n aria-label={t('chip.remove')}\n disabled={disabled}\n onClick={handleCloseClick}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: 'inherit',\n padding: 0,\n marginInlineStart: 2,\n fontSize: 12,\n lineHeight: 1,\n flexShrink: 0,\n opacity: 0.7,\n }}\n >\n ✕\n </button>\n ) : null}\n </>\n )\n\n if (clickable) {\n return (\n <button type=\"button\" {...sharedProps} disabled={disabled} onClick={handleClick}>\n {content}\n </button>\n )\n }\n return <span {...sharedProps}>{content}</span>\n}\n","import * as React from 'react'\n\nexport type IrisKbdSize = 'sm' | 'md'\n\nconst SIZE_MAP: Record<IrisKbdSize, { fontSize: string; padding: string }> = {\n sm: { fontSize: '10px', padding: '2px 5px' },\n md: { fontSize: '12px', padding: '3px 6px' },\n}\n\nexport interface IrisKbdProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n keys?: string | string[]\n separator?: string\n size?: IrisKbdSize\n children?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisKbd}. */\nexport function IrisKbd({\n keys = [],\n separator = '+',\n size = 'md',\n children,\n style,\n ...rest\n}: IrisKbdProps): React.ReactElement | null {\n const baseStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 3,\n fontFamily: 'var(--iris-font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace)',\n fontSize: SIZE_MAP[size].fontSize,\n verticalAlign: 'middle',\n ...style,\n }\n const keyStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: SIZE_MAP[size].padding,\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 4,\n boxShadow: '0 1px 0 var(--iris-border)',\n lineHeight: 1,\n fontWeight: 500,\n }\n\n if (children !== undefined && children !== null) {\n return (\n <kbd {...rest} data-iris-kbd=\"\" data-iris-kbd-size={size} style={baseStyle}>\n {children}\n </kbd>\n )\n }\n\n const list = typeof keys === 'string' ? (keys ? [keys] : []) : keys\n if (list.length === 0) return null\n\n const items: React.ReactNode[] = []\n list.forEach((k, i) => {\n items.push(\n <kbd key={`k-${i}`} data-iris-kbd-key=\"\" style={keyStyle}>\n {k}\n </kbd>,\n )\n if (i < list.length - 1) {\n items.push(\n <span\n key={`s-${i}`}\n data-iris-kbd-separator=\"\"\n aria-hidden=\"true\"\n style={{ color: 'var(--iris-muted)' }}\n >\n {separator}\n </span>,\n )\n }\n })\n\n return (\n <span {...rest} data-iris-kbd=\"\" data-iris-kbd-size={size} style={baseStyle}>\n {items}\n </span>\n )\n}\n","import * as React from 'react'\n\nexport type IrisDividerOrientation = 'horizontal' | 'vertical'\nexport type IrisDividerSpacing = 'sm' | 'md' | 'lg'\n\nconst SPACING_MAP: Record<IrisDividerSpacing, string> = {\n sm: '8px',\n md: '16px',\n lg: '24px',\n}\n\nexport interface IrisDividerProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n orientation?: IrisDividerOrientation\n label?: React.ReactNode\n spacing?: IrisDividerSpacing\n children?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisDivider}. */\nexport function IrisDivider({\n orientation = 'horizontal',\n label,\n spacing = 'md',\n children,\n style,\n ...rest\n}: IrisDividerProps): React.ReactElement {\n const isHorizontal = orientation === 'horizontal'\n const hasLabel = Boolean(label || children)\n\n if (isHorizontal && !hasLabel) {\n return (\n <hr\n {...rest}\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"horizontal\"\n style={{\n border: 'none',\n borderTop: '1px solid var(--iris-border)',\n margin: `${SPACING_MAP[spacing]} 0`,\n width: '100%',\n ...style,\n }}\n />\n )\n }\n\n if (!isHorizontal) {\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation=\"vertical\"\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"vertical\"\n style={{\n display: 'inline-block',\n width: 1,\n alignSelf: 'stretch',\n background: 'var(--iris-border)',\n margin: `0 ${SPACING_MAP[spacing]}`,\n ...style,\n }}\n />\n )\n }\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"horizontal\"\n data-iris-divider-has-label=\"true\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n margin: `${SPACING_MAP[spacing]} 0`,\n color: 'var(--iris-muted)',\n fontSize: 12,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n ...style,\n }}\n >\n <span data-iris-divider-line=\"before\" style={lineStyle} />\n <span data-iris-divider-label=\"\">{children ?? label}</span>\n <span data-iris-divider-line=\"after\" style={lineStyle} />\n </div>\n )\n}\n\nconst lineStyle: React.CSSProperties = {\n flex: 1,\n height: 1,\n background: 'var(--iris-border)',\n}\n","import * as React from 'react'\n\nexport interface IrisEmptyStateProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'title' | 'children'\n> {\n title?: React.ReactNode\n description?: React.ReactNode\n icon?: React.ReactNode\n action?: React.ReactNode\n children?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisEmptyState}. */\nexport function IrisEmptyState({\n title,\n description,\n icon,\n action,\n children,\n style,\n ...rest\n}: IrisEmptyStateProps): React.ReactElement {\n return (\n <div\n {...rest}\n role=\"status\"\n data-iris-empty-state=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 12,\n padding: '32px 16px',\n textAlign: 'center',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n {icon ? (\n <div\n data-iris-empty-state-icon=\"\"\n style={{ color: 'var(--iris-muted)', fontSize: 32, lineHeight: 1 }}\n >\n {icon}\n </div>\n ) : null}\n {title ? (\n <div data-iris-empty-state-title=\"\" style={{ fontWeight: 600, fontSize: 16 }}>\n {title}\n </div>\n ) : null}\n {description || children ? (\n <div\n data-iris-empty-state-description=\"\"\n style={{ color: 'var(--iris-muted)', fontSize: 14, maxWidth: 380 }}\n >\n {description ?? children}\n </div>\n ) : null}\n {action ? (\n <div data-iris-empty-state-action=\"\" style={{ marginTop: 4 }}>\n {action}\n </div>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisInputSize = 'sm' | 'md' | 'lg'\nexport type IrisInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url'\n\nconst SIZE_MAP: Record<IrisInputSize, { padding: string; fontSize: string; minHeight: string }> = {\n sm: { padding: '4px 8px', fontSize: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '16px', minHeight: '40px' },\n}\n\nexport interface IrisInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type' | 'prefix'\n> {\n size?: IrisInputSize\n type?: IrisInputType\n invalid?: boolean\n /** Forwarded as aria-describedby. */\n ariaDescribedby?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\n/**\n * Single-line text input with size variants, an `invalid` state, and optional\n * `prefix`/`suffix` adornments. Forwards its ref to the native `<input>`.\n *\n * @example\n * <IrisInput value={name} onChange={(e) => setName(e.target.value)} placeholder=\"Name\" />\n */\nexport const IrisInput = React.forwardRef<HTMLInputElement, IrisInputProps>(function IrisInput(\n {\n size = 'md',\n type = 'text',\n invalid = false,\n ariaDescribedby,\n prefix,\n suffix,\n style,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = React.useState(false)\n const sizeStyles = SIZE_MAP[size]\n\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const boxShadow = focused\n ? `0 0 0 3px ${invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none'\n\n const wrapperStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: rest.disabled ? 'not-allowed' : 'text',\n opacity: rest.disabled ? 0.6 : 1,\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n boxShadow,\n padding: sizeStyles.padding,\n minHeight: sizeStyles.minHeight,\n fontSize: sizeStyles.fontSize,\n ...style,\n }\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n padding: 0,\n }\n\n return (\n <label\n data-iris-input=\"\"\n data-iris-input-size={size}\n data-state={invalid ? 'invalid' : focused ? 'focused' : 'idle'}\n style={wrapperStyle}\n >\n {prefix ? (\n <span\n data-iris-input-prefix=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' }}\n >\n {prefix}\n </span>\n ) : null}\n <input\n {...rest}\n ref={ref}\n type={type}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n style={inputStyle}\n onFocus={(e) => {\n setFocused(true)\n onFocus?.(e)\n }}\n onBlur={(e) => {\n setFocused(false)\n onBlur?.(e)\n }}\n />\n {suffix ? (\n <span\n data-iris-input-suffix=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' }}\n >\n {suffix}\n </span>\n ) : null}\n </label>\n )\n})\n","import * as React from 'react'\n\nexport type IrisTextareaSize = 'sm' | 'md' | 'lg'\n\nconst SIZE_MAP: Record<IrisTextareaSize, { padding: string; fontSize: string }> = {\n sm: { padding: '6px 8px', fontSize: '12px' },\n md: { padding: '8px 12px', fontSize: '14px' },\n lg: { padding: '10px 12px', fontSize: '16px' },\n}\n\nexport interface IrisTextareaProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size'\n> {\n size?: IrisTextareaSize\n invalid?: boolean\n ariaDescribedby?: string\n autosize?: boolean\n maxRows?: number\n}\n\n/**\n * Multi-line text input with size variants and an `invalid` state. Optionally\n * grows to fit its content when `autosize` is set, capped at `maxRows`.\n *\n * @example\n * <IrisTextarea value={bio} onChange={(e) => setBio(e.target.value)} autosize maxRows={6} />\n */\nexport const IrisTextarea = React.forwardRef<HTMLTextAreaElement, IrisTextareaProps>(\n function IrisTextarea(\n {\n size = 'md',\n invalid = false,\n ariaDescribedby,\n autosize = false,\n maxRows = 8,\n rows = 3,\n style,\n onFocus,\n onBlur,\n onChange,\n value,\n defaultValue,\n ...rest\n },\n ref,\n ) {\n const [focused, setFocused] = React.useState(false)\n const innerRef = React.useRef<HTMLTextAreaElement | null>(null)\n\n // Combine forwarded ref + internal ref.\n React.useImperativeHandle(ref, () => innerRef.current as HTMLTextAreaElement, [])\n\n const resize = React.useCallback(() => {\n const el = innerRef.current\n if (!el || !autosize) return\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight || '0') || 20\n el.style.height = 'auto'\n const maxPx = maxRows > 0 ? lineHeight * maxRows : Infinity\n el.style.height = `${Math.min(maxPx, el.scrollHeight)}px`\n }, [autosize, maxRows])\n\n React.useEffect(() => {\n if (autosize) resize()\n }, [autosize, resize, value])\n\n const sizeStyles = SIZE_MAP[size]\n\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const boxShadow = focused\n ? `0 0 0 3px ${invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none'\n\n const wrapperStyle: React.CSSProperties = {\n display: 'flex',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n opacity: rest.disabled ? 0.6 : 1,\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n boxShadow,\n padding: sizeStyles.padding,\n fontSize: sizeStyles.fontSize,\n lineHeight: 1.5,\n ...style,\n }\n\n return (\n <div\n data-iris-textarea=\"\"\n data-iris-textarea-size={size}\n data-state={invalid ? 'invalid' : focused ? 'focused' : 'idle'}\n style={wrapperStyle}\n >\n <textarea\n {...rest}\n ref={innerRef}\n rows={rows}\n value={value}\n defaultValue={defaultValue}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n style={{\n width: '100%',\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n padding: 0,\n resize: 'vertical',\n }}\n onFocus={(e) => {\n setFocused(true)\n onFocus?.(e)\n }}\n onBlur={(e) => {\n setFocused(false)\n onBlur?.(e)\n }}\n onChange={(e) => {\n onChange?.(e)\n if (autosize) resize()\n }}\n />\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisSwitchSize = 'sm' | 'md' | 'lg'\n\nconst DIM_MAP: Record<IrisSwitchSize, { width: string; height: string; thumb: string }> = {\n sm: { width: '28px', height: '16px', thumb: '12px' },\n md: { width: '36px', height: '20px', thumb: '16px' },\n lg: { width: '44px', height: '24px', thumb: '20px' },\n}\n\nexport interface IrisSwitchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'checked' | 'onChange'\n> {\n checked?: boolean\n defaultChecked?: boolean\n onChange?: (next: boolean, event: React.ChangeEvent<HTMLInputElement>) => void\n size?: IrisSwitchSize\n invalid?: boolean\n ariaDescribedby?: string\n}\n\n/**\n * Toggle switch for an on/off boolean, in controlled (`checked`) or\n * uncontrolled (`defaultChecked`) modes. Rendered with `role=\"switch\"`.\n *\n * @example\n * <IrisSwitch checked={enabled} onChange={(next) => setEnabled(next)} />\n */\nexport const IrisSwitch = React.forwardRef<HTMLInputElement, IrisSwitchProps>(function IrisSwitch(\n {\n checked,\n defaultChecked,\n onChange,\n size = 'md',\n disabled = false,\n invalid = false,\n ariaDescribedby,\n style,\n ...rest\n },\n ref,\n) {\n const [internalChecked, setInternalChecked] = React.useState(Boolean(defaultChecked))\n const isControlled = checked !== undefined\n const value = isControlled ? Boolean(checked) : internalChecked\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n const next = e.target.checked\n if (!isControlled) setInternalChecked(next)\n onChange?.(next, e)\n }\n\n const dim = DIM_MAP[size]\n\n const trackStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-block',\n width: dim.width,\n height: dim.height,\n background: value ? 'var(--iris-primary)' : 'var(--iris-border)',\n borderRadius: 999,\n transition: 'background-color 120ms ease',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n verticalAlign: 'middle',\n }\n const thumbOffset = value ? `calc(${dim.width} - ${dim.thumb} - 2px)` : '2px'\n\n const thumbStyle: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n left: thumbOffset,\n width: dim.thumb,\n height: dim.thumb,\n background: 'var(--iris-background)',\n borderRadius: 999,\n transition: 'left 140ms ease',\n boxShadow: '0 1px 3px rgba(0,0,0,0.18)',\n }\n\n return (\n <label\n data-iris-switch=\"\"\n data-iris-switch-size={size}\n data-state={value ? 'checked' : 'unchecked'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...style,\n }}\n >\n <input\n {...rest}\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n checked={value}\n disabled={disabled}\n aria-checked={value ? 'true' : 'false'}\n aria-describedby={ariaDescribedby}\n aria-invalid={invalid ? 'true' : undefined}\n onChange={handleChange}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n pointerEvents: 'none',\n }}\n />\n <span aria-hidden=\"true\" style={trackStyle}>\n <span style={thumbStyle} />\n </span>\n </label>\n )\n})\n","import * as React from 'react'\n\nexport type IrisCheckboxSize = 'sm' | 'md' | 'lg'\nexport type IrisCheckboxValue = boolean | 'indeterminate'\n\nconst DIM_MAP: Record<IrisCheckboxSize, string> = {\n sm: '14px',\n md: '18px',\n lg: '22px',\n}\n\nexport interface IrisCheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'checked' | 'defaultChecked' | 'onChange'\n> {\n /** `true`, `false`, or `'indeterminate'`. */\n checked?: IrisCheckboxValue\n defaultChecked?: IrisCheckboxValue\n onChange?: (next: boolean, event: React.ChangeEvent<HTMLInputElement>) => void\n size?: IrisCheckboxSize\n invalid?: boolean\n ariaDescribedby?: string\n /** Label content rendered next to the box. */\n children?: React.ReactNode\n}\n\n/**\n * Tri-state checkbox supporting `true`, `false`, and `'indeterminate'`, in both\n * controlled (`checked`) and uncontrolled (`defaultChecked`) modes.\n *\n * @example\n * <IrisCheckbox checked={agreed} onChange={(next) => setAgreed(next)}>\n * I agree to the terms\n * </IrisCheckbox>\n */\nexport const IrisCheckbox = React.forwardRef<HTMLInputElement, IrisCheckboxProps>(\n function IrisCheckbox(\n {\n checked,\n defaultChecked = false,\n onChange,\n size = 'md',\n disabled = false,\n invalid = false,\n ariaDescribedby,\n children,\n style,\n ...rest\n },\n ref,\n ) {\n const [internalChecked, setInternalChecked] = React.useState<IrisCheckboxValue>(defaultChecked)\n const isControlled = checked !== undefined\n const value: IrisCheckboxValue = isControlled ? (checked as IrisCheckboxValue) : internalChecked\n\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, [])\n\n // Sync `indeterminate` (it's a DOM-only attribute, not a JSX prop).\n React.useEffect(() => {\n const el = innerRef.current\n if (el) el.indeterminate = value === 'indeterminate'\n }, [value])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n const next = e.target.checked\n if (!isControlled) setInternalChecked(next)\n onChange?.(next, e)\n }\n\n const state: 'checked' | 'unchecked' | 'indeterminate' =\n value === 'indeterminate' ? 'indeterminate' : value ? 'checked' : 'unchecked'\n\n const dim = DIM_MAP[size]\n\n const boxStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: dim,\n height: dim,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n border: `1px solid ${state === 'unchecked' ? 'var(--iris-border)' : 'var(--iris-primary)'}`,\n background: state === 'unchecked' ? 'var(--iris-background)' : 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'background-color 120ms ease, border-color 120ms ease',\n flexShrink: 0,\n }\n\n const indicator = state === 'checked' ? '✓' : state === 'indeterminate' ? '—' : null\n\n return (\n <label\n data-iris-checkbox=\"\"\n data-iris-checkbox-size={size}\n data-state={state}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...style,\n }}\n >\n <input\n {...rest}\n ref={innerRef}\n type=\"checkbox\"\n checked={value === true}\n disabled={disabled}\n aria-checked={\n state === 'indeterminate' ? 'mixed' : state === 'checked' ? 'true' : 'false'\n }\n aria-describedby={ariaDescribedby}\n aria-invalid={invalid ? 'true' : undefined}\n onChange={handleChange}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n pointerEvents: 'none',\n }}\n />\n <span aria-hidden=\"true\" style={boxStyle}>\n {indicator}\n </span>\n {children}\n </label>\n )\n },\n)\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\nimport { IrisInput, type IrisInputProps } from '../input/Input'\n\nexport interface IrisPasswordInputProps extends Omit<\n IrisInputProps,\n 'type' | 'prefix' | 'suffix' | 'children'\n> {\n /** Allow toggling visibility. Default true. */\n showToggle?: boolean\n /** Custom suffix slot (rendered before the toggle). */\n suffix?: React.ReactNode\n /** Custom prefix slot. */\n prefix?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisPasswordInput}. */\nexport const IrisPasswordInput = React.forwardRef<HTMLInputElement, IrisPasswordInputProps>(\n function IrisPasswordInput(\n { showToggle = true, suffix, prefix, disabled, readOnly, ...rest },\n ref,\n ) {\n const { t } = useI18n()\n const [visible, setVisible] = React.useState(false)\n const toggle = () => {\n if (disabled || readOnly) return\n setVisible((v) => !v)\n }\n\n const toggleBtn = showToggle ? (\n <button\n type=\"button\"\n data-iris-password-input-toggle=\"\"\n aria-label={visible ? t('passwordInput.hide') : t('passwordInput.show')}\n aria-pressed={visible ? 'true' : 'false'}\n onClick={toggle}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: 'var(--iris-muted)',\n padding: '0 2px',\n fontSize: 13,\n lineHeight: 1,\n }}\n >\n {visible ? '🙈' : '👁'}\n </button>\n ) : null\n\n return (\n <IrisInput\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n disabled={disabled}\n readOnly={readOnly}\n prefix={prefix}\n suffix={\n <>\n {suffix}\n {toggleBtn}\n </>\n }\n data-iris-password-input=\"\"\n />\n )\n },\n)\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisNumberInputSize = 'sm' | 'md' | 'lg'\n\nconst SIZE_MAP: Record<\n IrisNumberInputSize,\n { padding: string; fontSize: string; minHeight: string }\n> = {\n sm: { padding: '4px 8px', fontSize: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '16px', minHeight: '40px' },\n}\n\nfunction decimalsOf(step: number): number {\n if (!Number.isFinite(step)) return 0\n const s = step.toString()\n const dot = s.indexOf('.')\n return dot < 0 ? 0 : s.length - dot - 1\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction roundToStep(value: number, step: number): number {\n const places = decimalsOf(step)\n return Number(value.toFixed(places))\n}\n\nexport interface IrisNumberInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'step'\n> {\n value?: number | null\n defaultValue?: number | null\n onChange?: (next: number | null) => void\n size?: IrisNumberInputSize\n min?: number\n max?: number\n step?: number\n invalid?: boolean\n showControls?: boolean\n ariaDescribedby?: string\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisNumberInput}. */\nexport const IrisNumberInput = React.forwardRef<HTMLInputElement, IrisNumberInputProps>(\n function IrisNumberInput(\n {\n value,\n defaultValue = null,\n onChange,\n size = 'md',\n min = -Infinity,\n max = Infinity,\n step = 1,\n disabled = false,\n readOnly = false,\n invalid = false,\n showControls = true,\n ariaDescribedby,\n style,\n ...rest\n },\n ref,\n ) {\n const { t } = useI18n()\n const isControlled = value !== undefined\n const [internal, setInternal] = React.useState<number | null>(defaultValue ?? null)\n const current = isControlled ? (value as number | null) : internal\n\n const [rawText, setRawText] = React.useState<string>(\n current === null || current === undefined ? '' : String(current),\n )\n\n React.useEffect(() => {\n if (current === null || current === undefined) {\n setRawText('')\n } else {\n setRawText(String(current))\n }\n }, [current])\n\n const [focused, setFocused] = React.useState(false)\n\n const setValue = (next: number | null) => {\n if (next === null) {\n if (!isControlled) setInternal(null)\n onChange?.(null)\n return\n }\n const clamped = clamp(next, min, max)\n const rounded = roundToStep(clamped, step)\n if (!isControlled) setInternal(rounded)\n onChange?.(rounded)\n }\n\n const startValue = Number.isFinite(min) && min !== -Infinity ? min : 0\n\n const increment = (factor: 1 | -1) => {\n if (disabled || readOnly) return\n const base = current === null || current === undefined ? startValue : current\n setValue(base + factor * step)\n }\n\n const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const text = e.target.value\n setRawText(text)\n if (text === '' || text === '-') {\n onChange?.(null)\n if (!isControlled) setInternal(null)\n return\n }\n const parsed = Number(text)\n if (Number.isNaN(parsed)) {\n onChange?.(null)\n if (!isControlled) setInternal(null)\n return\n }\n if (!isControlled) setInternal(parsed)\n onChange?.(parsed)\n }\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n if (current !== null && current !== undefined) {\n const clamped = clamp(current, min, max)\n const rounded = roundToStep(clamped, step)\n if (rounded !== current) setValue(rounded)\n else setRawText(String(rounded))\n }\n rest.onBlur?.(e)\n }\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n rest.onFocus?.(e)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n increment(1)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n increment(-1)\n }\n }\n\n const sizeStyles = SIZE_MAP[size]\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const boxShadow = focused\n ? `0 0 0 3px ${invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none'\n\n const atMin = current !== null && current !== undefined && current <= min\n const atMax = current !== null && current !== undefined && current >= max\n\n const ctrlBtnStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n background: 'transparent',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n lineHeight: 1,\n flexShrink: 0,\n }\n\n return (\n <div\n data-iris-number-input=\"\"\n data-iris-number-input-size={size}\n data-state={invalid ? 'invalid' : focused ? 'focused' : 'idle'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n opacity: disabled ? 0.6 : 1,\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n boxShadow,\n padding: sizeStyles.padding,\n minHeight: sizeStyles.minHeight,\n fontSize: sizeStyles.fontSize,\n ...style,\n }}\n >\n {showControls ? (\n <button\n type=\"button\"\n data-iris-number-input-dec=\"\"\n aria-label={t('numberInput.decrement')}\n disabled={disabled || atMin}\n onClick={() => increment(-1)}\n style={{ ...ctrlBtnStyle, marginInlineEnd: 4 }}\n >\n −\n </button>\n ) : null}\n <input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n value={rawText}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n aria-valuenow={current === null || current === undefined ? undefined : current}\n aria-valuemin={Number.isFinite(min) ? min : undefined}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n onChange={handleInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n style={{\n flex: 1,\n minWidth: 40,\n width: '4ch',\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n padding: 0,\n textAlign: 'end',\n }}\n />\n {showControls ? (\n <button\n type=\"button\"\n data-iris-number-input-inc=\"\"\n aria-label={t('numberInput.increment')}\n disabled={disabled || atMax}\n onClick={() => increment(1)}\n style={{ ...ctrlBtnStyle, marginInlineStart: 4 }}\n >\n +\n </button>\n ) : null}\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisOtpInputSize = 'sm' | 'md' | 'lg'\nexport type IrisOtpInputType = 'numeric' | 'alphanumeric'\n\nexport interface IrisOtpInputProps {\n /** Controlled value (the full code). */\n value?: string\n /** Initial value when uncontrolled. */\n defaultValue?: string\n onValueChange?: (value: string) => void\n /** Fired once the code fills every cell. */\n onComplete?: (value: string) => void\n /** Number of cells. Default 6. */\n length?: number\n /** Allowed characters: digits only, or digits + letters. */\n type?: IrisOtpInputType\n /** Mask entered characters (renders password cells). */\n mask?: boolean\n size?: IrisOtpInputSize\n disabled?: boolean\n invalid?: boolean\n autoFocus?: boolean\n /** Placeholder glyph shown in empty cells. */\n placeholder?: string\n /** id forwarded to the first cell so `<label htmlFor>` focuses it. Set by `IrisFormField`. */\n id?: string\n /** Applied as `aria-describedby` on every cell. Set by `IrisFormField`. */\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisOtpInputSize, { box: number; height: number; fontSize: number }> = {\n sm: { box: 32, height: 36, fontSize: 14 },\n md: { box: 38, height: 44, fontSize: 18 },\n lg: { box: 44, height: 52, fontSize: 20 },\n}\n\nconst PATTERNS: Record<IrisOtpInputType, RegExp> = {\n numeric: /[0-9]/,\n alphanumeric: /[0-9a-zA-Z]/,\n}\n\n/** Keep only characters allowed by `type`. */\nfunction sanitize(str: string, type: IrisOtpInputType): string {\n const re = PATTERNS[type]\n let out = ''\n for (const ch of str) if (re.test(ch)) out += ch\n return out\n}\n\n/**\n * One-time-code / PIN entry: a row of single-character cells with smart focus\n * movement, paste-to-fill, and keyboard editing. The value is kept contiguous\n * (no interior gaps), masked optionally, and surfaced via `onValueChange`;\n * `onComplete` fires when every cell is filled. Drop it inside `IrisFormField`\n * — the injected `id` lands on the first cell so the label focuses it.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisOtpInput}.\n */\nexport function IrisOtpInput({\n value: valueProp,\n defaultValue = '',\n onValueChange,\n onComplete,\n length = 6,\n type = 'numeric',\n mask = false,\n size = 'md',\n disabled = false,\n invalid = false,\n autoFocus = false,\n placeholder = '',\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisOtpInputProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<string>(() =>\n sanitize(defaultValue, type).slice(0, length),\n )\n const value = sanitize(isControlled ? (valueProp as string) : internal, type).slice(0, length)\n\n const cellsRef = React.useRef<(HTMLInputElement | null)[]>([])\n const [focusedIndex, setFocusedIndex] = React.useState(-1)\n\n const focusCell = (i: number) => {\n const el = cellsRef.current[Math.max(0, Math.min(length - 1, i))]\n if (el) {\n el.focus()\n el.select()\n }\n }\n\n const commit = (next: string) => {\n const v = sanitize(next, type).slice(0, length)\n if (v === value) return\n if (!isControlled) setInternal(v)\n onValueChange?.(v)\n if (v.length === length) onComplete?.(v)\n }\n\n // Overwrite from `startIndex`, clamped to ≤ current length so no interior gap\n // can form. Used by both typing (one char) and paste (many).\n const writeFrom = (startIndex: number, chars: string) => {\n const clean = sanitize(chars, type)\n if (!clean) return\n const start = Math.min(startIndex, value.length)\n const arr = value.split('')\n for (let k = 0; k < clean.length && start + k < length; k++) arr[start + k] = clean.charAt(k)\n commit(arr.join('').slice(0, length))\n focusCell(start + clean.length)\n }\n\n const handleChange = (i: number, e: React.ChangeEvent<HTMLInputElement>) => {\n // maxLength=1 keeps typing to one char; a longer value means OTP autofill —\n // distribute it across the cells either way.\n const clean = sanitize(e.target.value, type)\n if (clean) writeFrom(i, clean)\n }\n\n const handleKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n const { key } = e\n if (key === 'Backspace') {\n e.preventDefault()\n if (value[i]) {\n commit(value.slice(0, i) + value.slice(i + 1))\n focusCell(i - 1)\n } else if (i > 0) {\n commit(value.slice(0, i - 1) + value.slice(i))\n focusCell(i - 1)\n }\n } else if (key === 'Delete') {\n e.preventDefault()\n if (value[i]) commit(value.slice(0, i) + value.slice(i + 1))\n } else if (key === 'ArrowLeft') {\n e.preventDefault()\n focusCell(i - 1)\n } else if (key === 'ArrowRight') {\n e.preventDefault()\n focusCell(i + 1)\n } else if (key === 'Home') {\n e.preventDefault()\n focusCell(0)\n } else if (key === 'End') {\n e.preventDefault()\n focusCell(value.length)\n } else if (key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n // Block disallowed printable keys so they never reach the cell.\n if (!PATTERNS[type].test(key)) e.preventDefault()\n }\n }\n\n const handlePaste = (i: number, e: React.ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n if (disabled) return\n writeFrom(i, e.clipboardData.getData('text'))\n }\n\n React.useEffect(() => {\n if (autoFocus) cellsRef.current[0]?.focus()\n }, [autoFocus])\n\n const sz = SIZE_MAP[size]\n\n return (\n <div\n data-iris-otp-input=\"\"\n data-iris-otp-input-size={size}\n data-state={invalid ? 'invalid' : 'idle'}\n role=\"group\"\n aria-disabled={disabled ? 'true' : undefined}\n className={className}\n style={{ display: 'inline-flex', gap: 8, direction: 'inherit', ...style }}\n >\n {Array.from({ length }, (_, i) => {\n const char = value.charAt(i)\n const focused = focusedIndex === i\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n return (\n <input\n key={i}\n ref={(el) => {\n cellsRef.current[i] = el\n }}\n id={i === 0 ? id : undefined}\n type={mask ? 'password' : 'text'}\n inputMode={type === 'numeric' ? 'numeric' : 'text'}\n autoComplete={i === 0 ? 'one-time-code' : 'off'}\n maxLength={1}\n value={char}\n placeholder={placeholder || undefined}\n disabled={disabled}\n aria-label={t('otpInput.cell', { index: i + 1, total: length })}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n data-iris-otp-input-cell=\"\"\n data-filled={char ? 'true' : undefined}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={(e) => handlePaste(i, e)}\n onFocus={(e) => {\n setFocusedIndex(i)\n e.currentTarget.select()\n }}\n onBlur={() => setFocusedIndex(-1)}\n style={{\n width: sz.box,\n height: sz.height,\n textAlign: 'center',\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n fontVariantNumeric: 'tabular-nums',\n color: 'var(--iris-foreground)',\n background: 'var(--iris-background)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n outline: 'none',\n opacity: disabled ? 0.6 : 1,\n boxShadow: focused\n ? `0 0 0 3px ${invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none',\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n }}\n />\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisRatingSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisRatingProps {\n /** Controlled rating (0..max, in 0.5 steps when `allowHalf`). */\n value?: number\n /** Initial value when uncontrolled. */\n defaultValue?: number\n onValueChange?: (value: number) => void\n /** Number of stars. Default 5. */\n max?: number\n /** Allow half-star precision. */\n allowHalf?: boolean\n /** Display-only — no interaction. */\n readonly?: boolean\n disabled?: boolean\n /** Clicking the current value again resets to 0. Default true. */\n clearable?: boolean\n size?: IrisRatingSize\n invalid?: boolean\n /** Accessible label for the slider. */\n label?: string\n /** id forwarded to the slider. Set by `IrisFormField`. */\n id?: string\n /** Applied as `aria-describedby`. Set by `IrisFormField`. */\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisRatingSize, number> = { sm: 16, md: 22, lg: 28 }\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\n/** Snap to the nearest allowed step (1, or 0.5 when half is enabled). */\nfunction snap(value: number, step: number): number {\n return Math.round(value / step) * step\n}\n\n/**\n * Star rating with optional half-star precision, hover preview, keyboard\n * support, and a `readonly` display mode. Uses the `slider` ARIA pattern\n * (`aria-valuemin/now/max` + arrow keys) so it reads correctly to assistive\n * tech; stars are decorative. RTL-safe via logical fill clipping.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisRating}.\n */\nexport function IrisRating({\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n max = 5,\n allowHalf = false,\n readonly = false,\n disabled = false,\n clearable = true,\n size = 'md',\n invalid = false,\n label,\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisRatingProps): React.ReactElement {\n const { t } = useI18n()\n const step = allowHalf ? 0.5 : 1\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const value = clamp(isControlled ? (valueProp as number) : internal, 0, max)\n const [hover, setHover] = React.useState<number | null>(null)\n const interactive = !readonly && !disabled\n const display = hover ?? value\n\n const setValue = (next: number) => {\n const v = clamp(snap(next, step), 0, max)\n if (v === value) return\n if (!isControlled) setInternal(v)\n onValueChange?.(v)\n }\n\n /** Star index `i` (0-based) → value the pointer is over, honoring half. */\n const valueAt = (i: number, e: React.MouseEvent<HTMLElement>): number => {\n if (!allowHalf) return i + 1\n const rect = e.currentTarget.getBoundingClientRect()\n const past = e.clientX - rect.left\n return past < rect.width / 2 ? i + 0.5 : i + 1\n }\n\n const handleClick = (i: number, e: React.MouseEvent<HTMLElement>) => {\n if (!interactive) return\n let next = valueAt(i, e)\n if (clearable && next === value) next = 0\n setValue(next)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!interactive) return\n let next = value\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = value + step\n break\n case 'ArrowLeft':\n case 'ArrowDown':\n next = value - step\n break\n case 'Home':\n next = 0\n break\n case 'End':\n next = max\n break\n default:\n return\n }\n e.preventDefault()\n setValue(next)\n }\n\n const px = SIZE_MAP[size]\n const fillColor = invalid ? 'var(--iris-danger)' : 'var(--iris-warning, #f59e0b)'\n\n return (\n <div\n data-iris-rating=\"\"\n data-iris-rating-size={size}\n data-state={invalid ? 'invalid' : 'idle'}\n role=\"slider\"\n id={id}\n tabIndex={interactive ? 0 : -1}\n aria-label={label ?? t('rating.label')}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={t('rating.value', { value, max })}\n aria-readonly={readonly ? 'true' : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n className={className}\n onKeyDown={handleKeyDown}\n onMouseLeave={() => setHover(null)}\n style={{\n display: 'inline-flex',\n gap: Math.round(px * 0.18),\n lineHeight: 1,\n color: 'var(--iris-border)',\n cursor: interactive ? 'pointer' : 'default',\n opacity: disabled ? 0.6 : 1,\n outline: 'none',\n direction: 'inherit',\n ...style,\n }}\n >\n {Array.from({ length: max }, (_, i) => {\n const fill = clamp(display - i, 0, 1) * 100\n return (\n <span\n key={i}\n data-iris-rating-star=\"\"\n data-filled={fill >= 100 ? 'true' : fill > 0 ? 'half' : undefined}\n onClick={(e) => handleClick(i, e)}\n onMouseMove={interactive ? (e) => setHover(valueAt(i, e)) : undefined}\n style={{\n position: 'relative',\n display: 'inline-block',\n width: px,\n height: px,\n fontSize: px,\n }}\n >\n <span aria-hidden=\"true\">★</span>\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineStart: 0,\n overflow: 'hidden',\n width: `${fill}%`,\n color: fillColor,\n whiteSpace: 'nowrap',\n }}\n >\n ★\n </span>\n </span>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisComboboxSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisComboboxOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface IrisComboboxProps {\n /** Controlled selected option value ('' = none). */\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n options: IrisComboboxOption[]\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n size?: IrisComboboxSize\n /** Text shown when no option matches the query. Defaults to the i18n value. */\n emptyText?: string\n /** id forwarded to the input. Set by `IrisFormField`. */\n id?: string\n /** Applied as `aria-describedby` on the input. Set by `IrisFormField`. */\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisComboboxSize, { padding: string; fontSize: string; minHeight: string }> =\n {\n sm: { padding: '4px 8px', fontSize: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '16px', minHeight: '40px' },\n }\n\n/**\n * Filterable single-select (searchable select): a text input that type-ahead\n * filters a listbox of options. The displayed text is derived\n * (`filtering ? query : selected label`) so controlled value changes stay in\n * sync without an effect. Opens downward; follows the ARIA 1.2 combobox pattern.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisCombobox}.\n */\nexport function IrisCombobox({\n value: valueProp,\n defaultValue = '',\n onValueChange,\n options,\n placeholder,\n disabled = false,\n invalid = false,\n size = 'md',\n emptyText,\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisComboboxProps): React.ReactElement {\n const { t } = useI18n()\n const reactId = React.useId()\n const listboxId = `${reactId}-listbox`\n const optionId = (i: number) => `${reactId}-opt-${i}`\n\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const currentValue = isControlled ? (valueProp as string) : internal\n\n const [query, setQuery] = React.useState('')\n const [filtering, setFiltering] = React.useState(false)\n const [open, setOpen] = React.useState(false)\n const [activeIndex, setActiveIndex] = React.useState(-1)\n const [focused, setFocused] = React.useState(false)\n\n const selected = options.find((o) => o.value === currentValue)\n const display = filtering ? query : (selected?.label ?? '')\n const needle = query.trim().toLowerCase()\n const filtered =\n filtering && needle ? options.filter((o) => o.label.toLowerCase().startsWith(needle)) : options\n\n const close = () => {\n setOpen(false)\n setFiltering(false)\n setActiveIndex(-1)\n }\n\n const selectOption = (opt: IrisComboboxOption) => {\n if (opt.disabled) return\n if (!isControlled) setInternal(opt.value)\n onValueChange?.(opt.value)\n setQuery('')\n close()\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value)\n setFiltering(true)\n setOpen(true)\n setActiveIndex(0)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n setFiltering(false)\n setActiveIndex(0)\n return\n }\n setActiveIndex((i) => Math.min(filtered.length - 1, i + 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (open) setActiveIndex((i) => Math.max(0, i - 1))\n } else if (e.key === 'Enter') {\n if (open && activeIndex >= 0 && filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n } else if (e.key === 'Escape') {\n if (open) {\n e.preventDefault()\n close()\n }\n } else if (e.key === 'Home') {\n if (open) {\n e.preventDefault()\n setActiveIndex(0)\n }\n } else if (e.key === 'End') {\n if (open) {\n e.preventDefault()\n setActiveIndex(filtered.length - 1)\n }\n }\n }\n\n const sz = SIZE_MAP[size]\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const activeId =\n open && activeIndex >= 0 && filtered[activeIndex] ? optionId(activeIndex) : undefined\n const resolvedEmpty = emptyText ?? t('combobox.empty')\n\n return (\n <div\n data-iris-combobox=\"\"\n data-iris-combobox-size={size}\n data-state={open ? 'open' : 'closed'}\n className={className}\n style={{ position: 'relative', display: 'inline-block', minWidth: 200, ...style }}\n >\n <input\n id={id}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n spellCheck={false}\n value={display}\n placeholder={placeholder}\n disabled={disabled}\n aria-expanded={open}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeId}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n data-iris-combobox-input=\"\"\n onChange={onInputChange}\n onKeyDown={onKeyDown}\n onFocus={() => {\n if (disabled) return\n setFocused(true)\n setOpen(true)\n setFiltering(false)\n }}\n onBlur={() => {\n setFocused(false)\n close()\n }}\n style={{\n boxSizing: 'border-box',\n width: '100%',\n padding: sz.padding,\n minHeight: sz.minHeight,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n color: 'var(--iris-foreground)',\n background: 'var(--iris-background)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n outline: 'none',\n opacity: disabled ? 0.6 : 1,\n boxShadow: focused\n ? `0 0 0 3px ${invalid ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none',\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n }}\n />\n {open && (\n <ul\n id={listboxId}\n role=\"listbox\"\n data-iris-combobox-listbox=\"\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n top: '100%',\n marginBlockStart: 4,\n maxHeight: 240,\n overflowY: 'auto',\n listStyle: 'none',\n margin: 0,\n padding: 4,\n zIndex: 50,\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}\n >\n {filtered.length === 0 ? (\n <li\n data-iris-combobox-empty=\"\"\n aria-disabled=\"true\"\n style={{ padding: '6px 10px', color: 'var(--iris-muted)', fontSize: sz.fontSize }}\n >\n {resolvedEmpty}\n </li>\n ) : (\n filtered.map((opt, i) => {\n const isActive = i === activeIndex\n const isSelected = opt.value === currentValue\n return (\n <li\n key={opt.value}\n id={optionId(i)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled ? 'true' : undefined}\n data-iris-combobox-option=\"\"\n data-active={isActive ? 'true' : undefined}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => selectOption(opt)}\n style={{\n padding: '6px 10px',\n fontSize: sz.fontSize,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: opt.disabled ? 'not-allowed' : 'pointer',\n color: opt.disabled ? 'var(--iris-muted)' : 'var(--iris-foreground)',\n background: isActive\n ? 'var(--iris-surface-hover, rgba(99,102,241,0.1))'\n : 'transparent',\n fontWeight: isSelected ? 600 : 400,\n }}\n >\n {opt.label}\n </li>\n )\n })\n )}\n </ul>\n )}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisTimelineVariant = 'default' | 'success' | 'warning' | 'danger' | 'info'\n\nexport interface IrisTimelineItem {\n /** Stable key; falls back to the index. */\n key?: string | number\n title?: React.ReactNode\n description?: React.ReactNode\n /** Timestamp / meta line shown above the title. */\n time?: React.ReactNode\n /** Dot variant (maps to a theme color). */\n variant?: IrisTimelineVariant\n /** Explicit dot color, overriding `variant`. */\n color?: string\n}\n\nexport interface IrisTimelineProps {\n items: IrisTimelineItem[]\n /** Replace the default content (time/title/description) for every item. */\n renderItem?: (item: IrisTimelineItem, index: number) => React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst VARIANT_COLOR: Record<IrisTimelineVariant, string> = {\n default: 'var(--iris-primary)',\n success: 'var(--iris-success, #16a34a)',\n warning: 'var(--iris-warning, #f59e0b)',\n danger: 'var(--iris-danger)',\n info: 'var(--iris-info, #0ea5e9)',\n}\n\n/**\n * Vertical event timeline: an ordered list of items, each with a colored dot,\n * a connector line (omitted on the last item), and time/title/description\n * content (or a custom `renderItem`). Semantic `<ol>` for assistive tech;\n * RTL-safe via logical properties.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisTimeline}.\n */\nexport function IrisTimeline({\n items,\n renderItem,\n style,\n className,\n}: IrisTimelineProps): React.ReactElement {\n return (\n <ol\n data-iris-timeline=\"\"\n className={className}\n style={{ listStyle: 'none', margin: 0, padding: 0, ...style }}\n >\n {items.map((item, i) => {\n const isLast = i === items.length - 1\n const variant = item.variant ?? 'default'\n const dotColor = item.color ?? VARIANT_COLOR[variant]\n return (\n <li\n key={item.key ?? i}\n data-iris-timeline-item=\"\"\n data-variant={variant}\n style={{ display: 'flex', gap: 12, position: 'relative' }}\n >\n <div\n data-iris-timeline-marker=\"\"\n aria-hidden=\"true\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n alignSelf: 'stretch',\n }}\n >\n <span\n data-iris-timeline-dot=\"\"\n style={{\n width: 12,\n height: 12,\n borderRadius: '50%',\n background: dotColor,\n flexShrink: 0,\n marginBlockStart: 4,\n boxShadow: '0 0 0 3px var(--iris-background)',\n }}\n />\n {!isLast ? (\n <span\n data-iris-timeline-line=\"\"\n style={{\n flex: 1,\n width: 2,\n background: 'var(--iris-border)',\n marginBlockStart: 4,\n }}\n />\n ) : null}\n </div>\n <div\n data-iris-timeline-content=\"\"\n style={{ paddingBlockEnd: isLast ? 0 : 16, minWidth: 0 }}\n >\n {renderItem ? (\n renderItem(item, i)\n ) : (\n <>\n {item.time != null ? (\n <div\n data-iris-timeline-time=\"\"\n style={{ fontSize: 12, color: 'var(--iris-muted)' }}\n >\n {item.time}\n </div>\n ) : null}\n {item.title != null ? (\n <div\n data-iris-timeline-title=\"\"\n style={{ fontWeight: 600, color: 'var(--iris-foreground)' }}\n >\n {item.title}\n </div>\n ) : null}\n {item.description != null ? (\n <div\n data-iris-timeline-desc=\"\"\n style={{ fontSize: 14, color: 'var(--iris-foreground)' }}\n >\n {item.description}\n </div>\n ) : null}\n </>\n )}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisCarouselProps {\n /** Each child is a slide. */\n children: React.ReactNode\n /** Controlled active slide index. */\n index?: number\n defaultIndex?: number\n onIndexChange?: (index: number) => void\n /** Wrap around at the ends (default true). */\n loop?: boolean\n /** Auto-advance slides. Disabled when the user prefers reduced motion. */\n autoplay?: boolean\n /** Autoplay interval in ms (default 4000). */\n interval?: number\n /** Pause autoplay while hovered (default true). */\n pauseOnHover?: boolean\n showArrows?: boolean\n showIndicators?: boolean\n /** Accessible name for the carousel region. */\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst ARROW_BTN: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n zIndex: 2,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: '50%',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n fontSize: 18,\n lineHeight: 1,\n}\n\n/** True when the user has asked for reduced motion (SSR / jsdom safe). */\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n )\n}\n\n/**\n * Slide carousel: shows one child slide at a time with prev/next controls,\n * indicator dots, and keyboard (←/→) navigation. Controlled or uncontrolled.\n * a11y: region with `aria-roledescription=\"carousel\"`, per-slide labelling,\n * and a polite live region announcing the active slide.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisCarousel}.\n */\nexport function IrisCarousel({\n children,\n index: indexProp,\n defaultIndex = 0,\n onIndexChange,\n loop = true,\n autoplay = false,\n interval = 4000,\n pauseOnHover = true,\n showArrows = true,\n showIndicators = true,\n ariaLabel,\n style,\n className,\n}: IrisCarouselProps): React.ReactElement {\n const { t } = useI18n()\n const slides = React.Children.toArray(children)\n const count = slides.length\n const isControlled = indexProp !== undefined\n const [internal, setInternal] = React.useState(defaultIndex)\n const current = Math.min(\n Math.max(0, isControlled ? (indexProp as number) : internal),\n Math.max(0, count - 1),\n )\n\n const goTo = (i: number) => {\n if (count === 0) return\n const next = loop ? ((i % count) + count) % count : Math.min(count - 1, Math.max(0, i))\n if (next === current) return\n if (!isControlled) setInternal(next)\n onIndexChange?.(next)\n }\n\n // Autoplay: a self-rescheduling timeout (resets on manual nav since `current`\n // is a dep). Paused on hover/focus and when the user prefers reduced motion.\n const onIndexChangeRef = React.useRef(onIndexChange)\n onIndexChangeRef.current = onIndexChange\n const [hovered, setHovered] = React.useState(false)\n const [focusedWithin, setFocusedWithin] = React.useState(false)\n const paused = (pauseOnHover && hovered) || focusedWithin\n\n React.useEffect(() => {\n if (!autoplay || paused || count <= 1 || prefersReducedMotion()) return\n const id = setTimeout(() => {\n const target = (current + 1) % count\n if (!isControlled) setInternal(target)\n onIndexChangeRef.current?.(target)\n }, interval)\n return () => clearTimeout(id)\n }, [autoplay, paused, interval, current, count, isControlled])\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n goTo(current - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n goTo(current + 1)\n }\n }\n\n return (\n <div\n data-iris-carousel=\"\"\n role=\"group\"\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel ?? t('carousel.label')}\n tabIndex={0}\n className={className}\n onKeyDown={onKeyDown}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => setFocusedWithin(true)}\n onBlur={() => setFocusedWithin(false)}\n style={{ position: 'relative', outline: 'none', ...style }}\n >\n <div\n data-iris-carousel-viewport=\"\"\n style={{\n overflow: 'hidden',\n position: 'relative',\n borderRadius: 'var(--iris-radius-md, 6px)',\n }}\n >\n <div\n data-iris-carousel-track=\"\"\n style={{\n display: 'flex',\n transform: `translateX(-${current * 100}%)`,\n transition: 'transform 300ms ease',\n }}\n >\n {slides.map((slide, i) => (\n <div\n key={i}\n data-iris-carousel-slide=\"\"\n data-active={i === current ? 'true' : undefined}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={t('carousel.slide', { index: i + 1, total: count })}\n aria-hidden={i !== current ? 'true' : undefined}\n style={{ flex: '0 0 100%', width: '100%', minWidth: 0 }}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {showArrows && count > 1 ? (\n <>\n <button\n type=\"button\"\n data-iris-carousel-prev=\"\"\n aria-label={t('carousel.previous')}\n onClick={() => goTo(current - 1)}\n disabled={!loop && current === 0}\n style={{ ...ARROW_BTN, insetInlineStart: 8 }}\n >\n ‹\n </button>\n <button\n type=\"button\"\n data-iris-carousel-next=\"\"\n aria-label={t('carousel.next')}\n onClick={() => goTo(current + 1)}\n disabled={!loop && current === count - 1}\n style={{ ...ARROW_BTN, insetInlineEnd: 8 }}\n >\n ›\n </button>\n </>\n ) : null}\n\n {showIndicators && count > 1 ? (\n <div\n data-iris-carousel-indicators=\"\"\n style={{\n display: 'flex',\n justifyContent: 'center',\n gap: 6,\n marginBlockStart: 8,\n }}\n >\n {slides.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n data-iris-carousel-indicator=\"\"\n data-active={i === current ? 'true' : undefined}\n aria-label={t('carousel.slide', { index: i + 1, total: count })}\n aria-current={i === current ? 'true' : undefined}\n onClick={() => goTo(i)}\n style={{\n width: 8,\n height: 8,\n padding: 0,\n borderRadius: '50%',\n border: 'none',\n cursor: 'pointer',\n background: i === current ? 'var(--iris-primary)' : 'var(--iris-border)',\n }}\n />\n ))}\n </div>\n ) : null}\n\n <div\n data-iris-carousel-live=\"\"\n aria-live=\"polite\"\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n }}\n >\n {t('carousel.slide', { index: current + 1, total: count })}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisStatisticSize = 'sm' | 'md' | 'lg'\nexport type IrisStatisticTrend = 'up' | 'down' | 'neutral'\n\nexport interface IrisStatisticProps {\n label?: React.ReactNode\n value: React.ReactNode\n /** Rendered before the value (e.g. a currency sign). */\n prefix?: React.ReactNode\n /** Rendered after the value (e.g. a unit). */\n suffix?: React.ReactNode\n description?: React.ReactNode\n /** Trend direction — colors the trend line and shows a ▲/▼ glyph. */\n trend?: IrisStatisticTrend\n /** Trend magnitude text (e.g. \"12%\"). */\n trendValue?: React.ReactNode\n size?: IrisStatisticSize\n style?: React.CSSProperties\n className?: string\n}\n\nconst VALUE_FONT: Record<IrisStatisticSize, number> = { sm: 20, md: 28, lg: 36 }\nconst TREND_COLOR: Record<IrisStatisticTrend, string> = {\n up: 'var(--iris-success, #16a34a)',\n down: 'var(--iris-danger)',\n neutral: 'var(--iris-muted)',\n}\nconst TREND_ARROW: Record<IrisStatisticTrend, string> = { up: '▲', down: '▼', neutral: '' }\n\n/**\n * Compact statistic / KPI display: a label, a prominent value (with optional\n * prefix/suffix), an optional colored trend line, and a description. Pure\n * presentation; the trend glyph is decorative (aria-hidden) — the magnitude\n * text carries the meaning.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisStatistic}.\n */\nexport function IrisStatistic({\n label,\n value,\n prefix,\n suffix,\n description,\n trend,\n trendValue,\n size = 'md',\n style,\n className,\n}: IrisStatisticProps): React.ReactElement {\n const affix: React.CSSProperties = { fontSize: '0.6em', color: 'var(--iris-muted)' }\n return (\n <div\n data-iris-statistic=\"\"\n data-trend={trend}\n className={className}\n style={{ display: 'flex', flexDirection: 'column', gap: 4, ...style }}\n >\n {label != null ? (\n <div data-iris-statistic-label=\"\" style={{ fontSize: 13, color: 'var(--iris-muted)' }}>\n {label}\n </div>\n ) : null}\n <div\n data-iris-statistic-value=\"\"\n style={{\n display: 'inline-flex',\n alignItems: 'baseline',\n gap: 4,\n fontSize: VALUE_FONT[size],\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {prefix != null ? (\n <span data-iris-statistic-prefix=\"\" style={affix}>\n {prefix}\n </span>\n ) : null}\n <span data-iris-statistic-number=\"\">{value}</span>\n {suffix != null ? (\n <span data-iris-statistic-suffix=\"\" style={affix}>\n {suffix}\n </span>\n ) : null}\n </div>\n {trend != null || trendValue != null ? (\n <div\n data-iris-statistic-trend=\"\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n fontSize: 13,\n color: trend ? TREND_COLOR[trend] : 'var(--iris-muted)',\n }}\n >\n {trend && TREND_ARROW[trend] ? (\n <span aria-hidden=\"true\">{TREND_ARROW[trend]}</span>\n ) : null}\n {trendValue != null ? <span data-iris-statistic-trend-value=\"\">{trendValue}</span> : null}\n </div>\n ) : null}\n {description != null ? (\n <div data-iris-statistic-desc=\"\" style={{ fontSize: 12, color: 'var(--iris-muted)' }}>\n {description}\n </div>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisDescriptionsLayout = 'horizontal' | 'vertical'\n\nexport interface IrisDescriptionsItem {\n key?: string | number\n label: React.ReactNode\n value: React.ReactNode\n}\n\nexport interface IrisDescriptionsProps {\n items: IrisDescriptionsItem[]\n /** Number of label/value pairs per row. Default 1. */\n columns?: number\n /** `horizontal` = label beside value; `vertical` = label above value. */\n layout?: IrisDescriptionsLayout\n /** Boxed style with cell separators. */\n bordered?: boolean\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Description list: a semantic `<dl>` rendering label/value pairs in a grid.\n * `columns` controls pairs-per-row, `layout` places the label beside or above\n * the value, and `bordered` draws a boxed style with separators. RTL-safe via\n * logical properties.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisDescriptions}.\n */\nexport function IrisDescriptions({\n items,\n columns = 1,\n layout = 'horizontal',\n bordered = false,\n style,\n className,\n}: IrisDescriptionsProps): React.ReactElement {\n const horizontal = layout === 'horizontal'\n const pad = bordered ? '8px 12px' : undefined\n\n const labelStyle: React.CSSProperties = {\n margin: 0,\n fontSize: 13,\n fontWeight: 500,\n color: 'var(--iris-muted)',\n padding: pad,\n ...(bordered ? { background: 'var(--iris-surface)' } : null),\n }\n const valueStyle: React.CSSProperties = {\n margin: 0,\n fontSize: 14,\n color: 'var(--iris-foreground)',\n padding: pad,\n }\n\n return (\n <dl\n data-iris-descriptions=\"\"\n data-layout={layout}\n className={className}\n style={{\n display: 'grid',\n gridTemplateColumns: horizontal\n ? `repeat(${columns}, max-content 1fr)`\n : `repeat(${columns}, 1fr)`,\n gap: bordered ? 0 : horizontal ? '8px 16px' : 12,\n margin: 0,\n ...(bordered\n ? {\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n overflow: 'hidden',\n }\n : null),\n ...style,\n }}\n >\n {items.map((item, i) => {\n const rowBorder = bordered && i >= columns ? '1px solid var(--iris-border)' : undefined\n if (horizontal) {\n return (\n <React.Fragment key={item.key ?? i}>\n <dt\n data-iris-descriptions-label=\"\"\n style={{\n ...labelStyle,\n borderBlockStart: rowBorder,\n borderInlineEnd: bordered ? '1px solid var(--iris-border)' : undefined,\n }}\n >\n {item.label}\n </dt>\n <dd\n data-iris-descriptions-value=\"\"\n style={{ ...valueStyle, borderBlockStart: rowBorder }}\n >\n {item.value}\n </dd>\n </React.Fragment>\n )\n }\n return (\n <div\n key={item.key ?? i}\n data-iris-descriptions-item=\"\"\n style={{\n borderBlockStart: rowBorder,\n borderInlineStart:\n bordered && i % columns !== 0 ? '1px solid var(--iris-border)' : undefined,\n }}\n >\n <dt data-iris-descriptions-label=\"\" style={labelStyle}>\n {item.label}\n </dt>\n <dd data-iris-descriptions-value=\"\" style={valueStyle}>\n {item.value}\n </dd>\n </div>\n )\n })}\n </dl>\n )\n}\n","import * as React from 'react'\nimport { createSelectionModel, type SelectionModel } from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisTransferItem {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface IrisTransferProps {\n options: IrisTransferItem[]\n /** Values currently in the target (selected) pane. */\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (values: string[]) => void\n /** Pane titles: [available, selected]. */\n titles?: [React.ReactNode, React.ReactNode]\n /** Show a search box per pane. */\n searchable?: boolean\n disabled?: boolean\n style?: React.CSSProperties\n className?: string\n}\n\ntype Side = 'source' | 'target'\n\n/**\n * Dual-list transfer: move items between an \"available\" and a \"selected\" pane\n * via per-item checkboxes and the ›/‹ buttons. Controlled or uncontrolled\n * (`value` = the selected values), with optional per-pane search and a\n * select-all header. Built on native checkboxes for accessibility.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisTransfer}.\n */\nexport function IrisTransfer({\n options,\n value: valueProp,\n defaultValue = [],\n onValueChange,\n titles,\n searchable = false,\n disabled = false,\n style,\n className,\n}: IrisTransferProps): React.ReactElement {\n const safeOptions = options ?? []\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<string[]>(defaultValue)\n const value = isControlled ? (valueProp as string[]) : internal\n const valueSet = new Set(value)\n\n // Each pane's tentative \"checked\" set is a multi-select set; the per-item\n // toggle + dedup is single-sourced in the core model (one per pane). These\n // sets are purely internal (never controlled). Select-all REPLACES the set\n // with the visible-enabled items (or clears it), so it uses `model.set`\n // rather than the model's add/remove `toggleAll`.\n const sourceModelRef = React.useRef<SelectionModel<string> | null>(null)\n if (sourceModelRef.current === null) {\n sourceModelRef.current = createSelectionModel<string>({ mode: 'multiple' })\n }\n const targetModelRef = React.useRef<SelectionModel<string> | null>(null)\n if (targetModelRef.current === null) {\n targetModelRef.current = createSelectionModel<string>({ mode: 'multiple' })\n }\n const sourceModel = sourceModelRef.current\n const targetModel = targetModelRef.current\n const sourceChecked = useStore(sourceModel.store)\n const targetChecked = useStore(targetModel.store)\n const [sourceQuery, setSourceQuery] = React.useState('')\n const [targetQuery, setTargetQuery] = React.useState('')\n\n const setValue = (next: string[]) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const sourceItems = safeOptions.filter((o) => !valueSet.has(o.value))\n const targetItems = safeOptions.filter((o) => valueSet.has(o.value))\n\n const moveToTarget = () => {\n if (disabled) return\n const moving = sourceItems.filter((o) => !o.disabled && sourceChecked.includes(o.value))\n if (moving.length === 0) return\n setValue([...value, ...moving.map((o) => o.value)])\n sourceModel.clear()\n }\n const moveToSource = () => {\n if (disabled) return\n const removing = new Set(\n targetItems.filter((o) => !o.disabled && targetChecked.includes(o.value)).map((o) => o.value),\n )\n if (removing.size === 0) return\n setValue(value.filter((v) => !removing.has(v)))\n targetModel.clear()\n }\n\n const paneStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n width: 220,\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'var(--iris-background)',\n overflow: 'hidden',\n }\n const moveBtnStyle: React.CSSProperties = {\n width: 32,\n height: 28,\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n fontSize: 16,\n lineHeight: 1,\n }\n\n const renderPane = (side: Side) => {\n const items = side === 'source' ? sourceItems : targetItems\n const model = side === 'source' ? sourceModel : targetModel\n const checked = side === 'source' ? sourceChecked : targetChecked\n const query = side === 'source' ? sourceQuery : targetQuery\n const setQuery = side === 'source' ? setSourceQuery : setTargetQuery\n const visible = query\n ? items.filter((o) => o.label.toLowerCase().includes(query.toLowerCase()))\n : items\n const selectable = visible.filter((o) => !o.disabled)\n const allChecked = selectable.length > 0 && selectable.every((o) => checked.includes(o.value))\n const someChecked = selectable.some((o) => checked.includes(o.value))\n const checkedCount = items.filter((o) => checked.includes(o.value)).length\n\n const toggle = (v: string) => model.toggle(v)\n const toggleAll = () => {\n model.set(allChecked ? [] : selectable.map((o) => o.value))\n }\n\n return (\n <div data-iris-transfer-pane=\"\" data-side={side} style={paneStyle}>\n <div\n data-iris-transfer-header=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: '6px 10px',\n borderBlockEnd: '1px solid var(--iris-border)',\n fontSize: 13,\n fontWeight: 500,\n }}\n >\n <label style={{ display: 'inline-flex', alignItems: 'center', gap: 6, minWidth: 0 }}>\n <input\n type=\"checkbox\"\n data-iris-transfer-select-all=\"\"\n checked={allChecked}\n disabled={disabled || selectable.length === 0}\n ref={(el) => {\n if (el) el.indeterminate = someChecked && !allChecked\n }}\n onChange={toggleAll}\n />\n <span>{titles?.[side === 'source' ? 0 : 1]}</span>\n </label>\n <span data-iris-transfer-count=\"\" style={{ color: 'var(--iris-muted)', fontSize: 12 }}>\n {checkedCount}/{items.length}\n </span>\n </div>\n {searchable ? (\n <input\n type=\"search\"\n data-iris-transfer-search=\"\"\n aria-label={t('transfer.search')}\n placeholder={t('transfer.search')}\n value={query}\n disabled={disabled}\n onChange={(e) => setQuery(e.target.value)}\n style={{\n margin: 8,\n padding: '4px 8px',\n fontSize: 13,\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n outline: 'none',\n }}\n />\n ) : null}\n <ul\n data-iris-transfer-list=\"\"\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 4,\n maxHeight: 200,\n overflowY: 'auto',\n flex: 1,\n }}\n >\n {visible.length === 0 ? (\n <li\n data-iris-transfer-empty=\"\"\n style={{\n padding: '8px 10px',\n color: 'var(--iris-muted)',\n fontSize: 13,\n textAlign: 'center',\n }}\n >\n {t('transfer.empty')}\n </li>\n ) : (\n visible.map((o) => (\n <li key={o.value} data-iris-transfer-item=\"\" data-value={o.value}>\n <label\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '4px 8px',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: o.disabled ? 'not-allowed' : 'pointer',\n opacity: o.disabled ? 0.5 : 1,\n fontSize: 14,\n }}\n >\n <input\n type=\"checkbox\"\n checked={checked.includes(o.value)}\n disabled={disabled || o.disabled}\n onChange={() => toggle(o.value)}\n />\n <span>{o.label}</span>\n </label>\n </li>\n ))\n )}\n </ul>\n </div>\n )\n }\n\n const canToTarget =\n !disabled && sourceItems.some((o) => !o.disabled && sourceChecked.includes(o.value))\n const canToSource =\n !disabled && targetItems.some((o) => !o.disabled && targetChecked.includes(o.value))\n\n return (\n <div\n data-iris-transfer=\"\"\n data-disabled={disabled ? 'true' : undefined}\n className={className}\n style={{ display: 'inline-flex', alignItems: 'stretch', gap: 12, ...style }}\n >\n {renderPane('source')}\n <div\n data-iris-transfer-controls=\"\"\n style={{ display: 'flex', flexDirection: 'column', justifyContent: 'center', gap: 8 }}\n >\n <button\n type=\"button\"\n data-iris-transfer-to-target=\"\"\n aria-label={t('transfer.toTarget')}\n disabled={!canToTarget}\n onClick={moveToTarget}\n style={moveBtnStyle}\n >\n ›\n </button>\n <button\n type=\"button\"\n data-iris-transfer-to-source=\"\"\n aria-label={t('transfer.toSource')}\n disabled={!canToSource}\n onClick={moveToSource}\n style={moveBtnStyle}\n >\n ‹\n </button>\n </div>\n {renderPane('target')}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisWatermarkProps {\n /** Watermark text, tiled across the area. */\n content: string\n /** Content the watermark overlays. */\n children?: React.ReactNode\n /** Rotation of each tile in degrees. */\n rotate?: number\n fontSize?: number\n color?: string\n /** Overlay opacity (0–1). */\n opacity?: number\n /** Spacing between tiles in px. */\n gap?: number\n style?: React.CSSProperties\n className?: string\n}\n\n/** Number of tiles rendered; clipped by the overlay's overflow. */\nconst TILE_COUNT = 72\n\n/**\n * Watermark: overlays tiled, rotated text over its content — for confidential\n * or branded surfaces. The overlay is `aria-hidden`, non-selectable, and\n * `pointer-events: none`, so it never interferes with the underlying UI. Built\n * from structured `<span>` nodes (no raw HTML / canvas / SVG-string injection).\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisWatermark}.\n */\nexport function IrisWatermark({\n content,\n children,\n rotate = -22,\n fontSize = 16,\n color = 'var(--iris-muted)',\n opacity = 0.15,\n gap = 24,\n style,\n className,\n}: IrisWatermarkProps): React.ReactElement {\n return (\n <div data-iris-watermark=\"\" className={className} style={{ position: 'relative', ...style }}>\n {children}\n <div\n data-iris-watermark-overlay=\"\"\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n inset: 0,\n overflow: 'hidden',\n pointerEvents: 'none',\n userSelect: 'none',\n display: 'flex',\n flexWrap: 'wrap',\n alignContent: 'flex-start',\n gap,\n opacity,\n }}\n >\n {Array.from({ length: TILE_COUNT }, (_, i) => (\n <span\n key={i}\n data-iris-watermark-tile=\"\"\n style={{\n transform: `rotate(${rotate}deg)`,\n fontSize,\n color,\n whiteSpace: 'nowrap',\n lineHeight: 1,\n }}\n >\n {content}\n </span>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisBackTopProps {\n /** Scroll container resolver. Defaults to the window. */\n target?: () => HTMLElement | Window | null\n /** Show the button once the scroll position passes this (px). */\n visibilityHeight?: number\n /** Scroll behavior; forced to 'auto' under reduced motion. */\n behavior?: ScrollBehavior\n onClick?: () => void\n ariaLabel?: string\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n )\n}\n\nconst resolve = (target?: () => HTMLElement | Window | null): HTMLElement | Window =>\n (target ? target() : window) ?? window\n\n/**\n * Back-to-top button: appears once the scroll target passes `visibilityHeight`\n * and scrolls it back to the top on click (honoring reduced motion). Defaults\n * to the window; pass `target` for a scrollable container.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisBackTop}.\n */\nexport function IrisBackTop({\n target,\n visibilityHeight = 400,\n behavior = 'smooth',\n onClick,\n ariaLabel,\n children,\n style,\n className,\n}: IrisBackTopProps): React.ReactElement | null {\n const { t } = useI18n()\n const [visible, setVisible] = React.useState(false)\n const targetRef = React.useRef(target)\n targetRef.current = target\n\n React.useEffect(() => {\n const el = resolve(targetRef.current)\n const onScroll = () => {\n const top = el === window ? (window.scrollY ?? 0) : (el as HTMLElement).scrollTop\n setVisible(top >= visibilityHeight)\n }\n el.addEventListener('scroll', onScroll)\n onScroll()\n return () => el.removeEventListener('scroll', onScroll)\n }, [visibilityHeight])\n\n if (!visible) return null\n\n const scrollToTop = () => {\n const el = resolve(targetRef.current)\n const b: ScrollBehavior = prefersReducedMotion() ? 'auto' : behavior\n if (typeof (el as { scrollTo?: unknown }).scrollTo === 'function') {\n ;(el as Window | HTMLElement).scrollTo({ top: 0, behavior: b })\n } else {\n ;(el as HTMLElement).scrollTop = 0\n }\n onClick?.()\n }\n\n return (\n <button\n type=\"button\"\n data-iris-back-top=\"\"\n aria-label={ariaLabel ?? t('backTop.label')}\n onClick={scrollToTop}\n className={className}\n style={{\n position: 'fixed',\n insetInlineEnd: 24,\n insetBlockEnd: 24,\n zIndex: 100,\n width: 40,\n height: 40,\n borderRadius: '50%',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-surface, var(--iris-background))',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 18,\n ...style,\n }}\n >\n {children ?? '↑'}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisAffixProps {\n /** Pin this many px from the top once scrolled past. */\n offsetTop?: number\n /** Pin this many px from the bottom (used when `offsetTop` is unset). */\n offsetBottom?: number\n /** Scroll container resolver. Defaults to the window. */\n target?: () => HTMLElement | Window | null\n onChange?: (affixed: boolean) => void\n children: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst resolve = (target?: () => HTMLElement | Window | null): HTMLElement | Window =>\n (target ? target() : window) ?? window\n\n/**\n * Affix: pins its content to the viewport once the user scrolls past it.\n * Top mode (`offsetTop`) or bottom mode (`offsetBottom`); the placeholder\n * reserves the content's height so the page doesn't jump when it detaches.\n * `onChange` fires only when the affixed state flips.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisAffix}.\n */\nexport function IrisAffix({\n offsetTop,\n offsetBottom,\n target,\n onChange,\n children,\n style,\n className,\n}: IrisAffixProps): React.ReactElement {\n const placeholderRef = React.useRef<HTMLDivElement | null>(null)\n const contentRef = React.useRef<HTMLDivElement | null>(null)\n const [affixed, setAffixed] = React.useState(false)\n const [fixedStyle, setFixedStyle] = React.useState<React.CSSProperties | undefined>(undefined)\n const [reserve, setReserve] = React.useState<number | undefined>(undefined)\n const onChangeRef = React.useRef(onChange)\n onChangeRef.current = onChange\n const targetRef = React.useRef(target)\n targetRef.current = target\n const affixedRef = React.useRef(false)\n\n React.useEffect(() => {\n const el = resolve(targetRef.current)\n const useTop = offsetTop != null || offsetBottom == null\n const ot = offsetTop ?? 0\n const ob = offsetBottom ?? 0\n\n const update = () => {\n const ph = placeholderRef.current\n if (!ph) return\n const rect = ph.getBoundingClientRect()\n const vh = window.innerHeight || 0\n const next = useTop ? rect.top <= ot : rect.bottom >= vh - ob\n if (next === affixedRef.current) return\n affixedRef.current = next\n const width = ph.offsetWidth\n setFixedStyle(\n next\n ? {\n position: 'fixed',\n insetInlineStart: rect.left,\n width,\n zIndex: 10,\n ...(useTop ? { top: ot } : { bottom: ob }),\n }\n : undefined,\n )\n setReserve(next ? (contentRef.current?.offsetHeight ?? 0) : undefined)\n setAffixed(next)\n onChangeRef.current?.(next)\n }\n\n el.addEventListener('scroll', update, { passive: true })\n window.addEventListener('resize', update)\n update()\n return () => {\n el.removeEventListener('scroll', update)\n window.removeEventListener('resize', update)\n }\n }, [offsetTop, offsetBottom])\n\n return (\n <div\n ref={placeholderRef}\n data-iris-affix=\"\"\n data-affixed={affixed ? 'true' : undefined}\n className={className}\n style={{ ...(affixed && reserve ? { height: reserve } : null), ...style }}\n >\n <div ref={contentRef} data-iris-affix-content=\"\" style={affixed ? fixedStyle : undefined}>\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisResultStatus = 'success' | 'error' | 'info' | 'warning'\n\nexport interface IrisResultProps {\n status?: IrisResultStatus\n title?: React.ReactNode\n subtitle?: React.ReactNode\n /** Override the default status glyph/icon. */\n icon?: React.ReactNode\n /** Action area (e.g. buttons) below the text. */\n extra?: React.ReactNode\n /** Additional content (e.g. error details). */\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst STATUS: Record<IrisResultStatus, { color: string; glyph: string }> = {\n success: { color: 'var(--iris-success, #16a34a)', glyph: '✓' },\n error: { color: 'var(--iris-danger)', glyph: '✕' },\n info: { color: 'var(--iris-info, #0ea5e9)', glyph: 'i' },\n warning: { color: 'var(--iris-warning, #f59e0b)', glyph: '!' },\n}\n\n/**\n * Result: a centered outcome page for an operation — a status icon, title,\n * subtitle, action area, and optional content. Use for success / error / 404 /\n * 403 / 500 screens. Pure presentation; the status glyph is decorative.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisResult}.\n */\nexport function IrisResult({\n status = 'info',\n title,\n subtitle,\n icon,\n extra,\n children,\n style,\n className,\n}: IrisResultProps): React.ReactElement {\n const s = STATUS[status]\n return (\n <div\n data-iris-result=\"\"\n data-status={status}\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n gap: 8,\n padding: '32px 16px',\n ...style,\n }}\n >\n <div\n data-iris-result-icon=\"\"\n aria-hidden=\"true\"\n style={{\n width: 56,\n height: 56,\n borderRadius: '50%',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 30,\n fontWeight: 700,\n color: '#fff',\n background: s.color,\n marginBlockEnd: 8,\n }}\n >\n {icon ?? s.glyph}\n </div>\n {title != null ? (\n <div\n data-iris-result-title=\"\"\n style={{ fontSize: 20, fontWeight: 600, color: 'var(--iris-foreground)' }}\n >\n {title}\n </div>\n ) : null}\n {subtitle != null ? (\n <div\n data-iris-result-subtitle=\"\"\n style={{ fontSize: 14, color: 'var(--iris-muted)', maxWidth: 480 }}\n >\n {subtitle}\n </div>\n ) : null}\n {children != null ? (\n <div data-iris-result-content=\"\" style={{ marginBlockStart: 8, width: '100%' }}>\n {children}\n </div>\n ) : null}\n {extra != null ? (\n <div\n data-iris-result-extra=\"\"\n style={{\n marginBlockStart: 8,\n display: 'inline-flex',\n gap: 8,\n flexWrap: 'wrap',\n justifyContent: 'center',\n }}\n >\n {extra}\n </div>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisTreeSelectSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisTreeSelectNode {\n label: string\n value: string\n disabled?: boolean\n children?: IrisTreeSelectNode[]\n}\n\nexport interface IrisTreeSelectProps {\n options: IrisTreeSelectNode[]\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n /** Node values expanded by default. */\n defaultExpanded?: string[]\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n size?: IrisTreeSelectSize\n /** id forwarded to the trigger. Set by `IrisFormField`. */\n id?: string\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<\n IrisTreeSelectSize,\n { padding: string; fontSize: string; minHeight: string }\n> = {\n sm: { padding: '4px 8px', fontSize: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '16px', minHeight: '40px' },\n}\n\nfunction findNode(nodes: IrisTreeSelectNode[], value: string): IrisTreeSelectNode | undefined {\n for (const n of nodes) {\n if (n.value === value) return n\n if (n.children) {\n const found = findNode(n.children, value)\n if (found) return found\n }\n }\n return undefined\n}\n\n/**\n * Hierarchical single-select: a trigger that opens a `role=\"tree\"` dropdown\n * with expand/collapse toggles. Selecting a node sets the value and closes.\n * Controlled or uncontrolled; closes on select, Escape, or outside click.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisTreeSelect}.\n */\nexport function IrisTreeSelect({\n options,\n value,\n defaultValue = '',\n onValueChange,\n defaultExpanded,\n placeholder,\n disabled = false,\n invalid = false,\n size = 'md',\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisTreeSelectProps): React.ReactElement {\n const { t } = useI18n()\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const isControlled = value !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const currentValue = isControlled ? (value as string) : internal\n const [open, setOpen] = React.useState(false)\n const [expanded, setExpanded] = React.useState<Set<string>>(() => new Set(defaultExpanded ?? []))\n const [focused, setFocused] = React.useState(false)\n\n const selected = currentValue ? findNode(options, currentValue) : undefined\n\n const selectNode = (node: IrisTreeSelectNode) => {\n if (node.disabled) return\n if (!isControlled) setInternal(node.value)\n onValueChange?.(node.value)\n setOpen(false)\n }\n const toggleExpand = (v: string) =>\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(v)) next.delete(v)\n else next.add(v)\n return next\n })\n\n React.useEffect(() => {\n if (!open) return\n const onDown = (e: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', onDown)\n return () => document.removeEventListener('mousedown', onDown)\n }, [open])\n\n const sz = SIZE_MAP[size]\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused || open\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n\n const renderNodes = (nodes: IrisTreeSelectNode[], depth: number): React.ReactNode =>\n nodes.map((node) => {\n const hasChildren = !!node.children && node.children.length > 0\n const isExpanded = expanded.has(node.value)\n const isSelected = node.value === currentValue\n return (\n <li\n key={node.value}\n role=\"treeitem\"\n aria-selected={isSelected}\n aria-expanded={hasChildren ? isExpanded : undefined}\n data-iris-tree-select-node=\"\"\n data-value={node.value}\n style={{ listStyle: 'none' }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n paddingInlineStart: depth * 16 + 6,\n paddingInlineEnd: 6,\n paddingBlock: 4,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background: isSelected\n ? 'var(--iris-surface-hover, rgba(99,102,241,0.1))'\n : 'transparent',\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n data-iris-tree-select-toggle=\"\"\n aria-label={isExpanded ? t('treeSelect.collapse') : t('treeSelect.expand')}\n onClick={() => toggleExpand(node.value)}\n style={{\n width: 16,\n padding: 0,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n fontSize: 10,\n }}\n >\n {isExpanded ? '▾' : '▸'}\n </button>\n ) : (\n <span style={{ width: 16, display: 'inline-block' }} />\n )}\n <span\n data-iris-tree-select-label=\"\"\n onClick={() => selectNode(node)}\n style={{\n flex: 1,\n cursor: node.disabled ? 'not-allowed' : 'pointer',\n color: node.disabled ? 'var(--iris-muted)' : 'var(--iris-foreground)',\n fontWeight: isSelected ? 600 : 400,\n fontSize: sz.fontSize,\n }}\n >\n {node.label}\n </span>\n </div>\n {hasChildren && isExpanded ? (\n <ul role=\"group\" style={{ margin: 0, padding: 0 }}>\n {renderNodes(node.children!, depth + 1)}\n </ul>\n ) : null}\n </li>\n )\n })\n\n return (\n <div\n ref={rootRef}\n data-iris-tree-select=\"\"\n data-state={open ? 'open' : 'closed'}\n className={className}\n style={{ position: 'relative', display: 'inline-block', minWidth: 220, ...style }}\n >\n <button\n type=\"button\"\n id={id}\n data-iris-tree-select-trigger=\"\"\n aria-haspopup=\"tree\"\n aria-expanded={open}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onKeyDown={(e) => {\n if (e.key === 'Escape' && open) {\n e.preventDefault()\n setOpen(false)\n } else if ((e.key === 'ArrowDown' || e.key === 'Enter') && !open) {\n e.preventDefault()\n setOpen(true)\n }\n }}\n style={{\n boxSizing: 'border-box',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: sz.padding,\n minHeight: sz.minHeight,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n textAlign: 'start',\n color: selected ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n background: 'var(--iris-background)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n outline: 'none',\n }}\n >\n <span data-iris-tree-select-value=\"\">\n {selected ? selected.label : (placeholder ?? t('select.placeholder'))}\n </span>\n <span aria-hidden=\"true\" style={{ color: 'var(--iris-muted)', fontSize: 10 }}>\n ▾\n </span>\n </button>\n {open ? (\n <ul\n role=\"tree\"\n data-iris-tree-select-tree=\"\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n top: '100%',\n marginBlockStart: 4,\n maxHeight: 280,\n overflowY: 'auto',\n margin: 0,\n padding: 4,\n zIndex: 50,\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}\n >\n {renderNodes(options, 0)}\n </ul>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisMentionOption {\n label: string\n value: string\n}\n\nexport interface IrisMentionsProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n options: IrisMentionOption[]\n /** Trigger character. Default '@'. */\n prefix?: string\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n rows?: number\n /** id forwarded to the textarea. Set by `IrisFormField`. */\n id?: string\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\ninterface Active {\n start: number\n query: string\n}\n\n/** Find an active mention token (prefix at start/after-space, no inner spaces). */\nfunction detect(text: string, caret: number, prefix: string): Active | null {\n let i = caret - 1\n while (i >= 0 && text[i] !== prefix) {\n if (/\\s/.test(text[i] as string)) return null\n i--\n }\n if (i < 0) return null\n if (i === 0 || /\\s/.test(text[i - 1] as string)) {\n return { start: i, query: text.slice(i + 1, caret) }\n }\n return null\n}\n\n/**\n * Mentions: a textarea that opens an autocomplete listbox when the user types\n * the trigger character (default `@`). Selecting a suggestion replaces the\n * `@query` token with the chosen label. Keyboard: ↑/↓ to move, Enter to pick,\n * Esc to dismiss.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisMentions}.\n */\nexport function IrisMentions({\n value,\n defaultValue = '',\n onValueChange,\n options,\n prefix = '@',\n placeholder,\n disabled = false,\n invalid = false,\n rows = 3,\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisMentionsProps): React.ReactElement {\n const reactId = React.useId()\n const listboxId = `${reactId}-listbox`\n const isControlled = value !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const text = isControlled ? (value as string) : internal\n\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null)\n const startRef = React.useRef(0)\n const caretRef = React.useRef(0)\n const pendingCaret = React.useRef<number | null>(null)\n const [active, setActive] = React.useState<Active | null>(null)\n const [activeIndex, setActiveIndex] = React.useState(0)\n\n const filtered = active\n ? options.filter((o) => o.label.toLowerCase().includes(active.query.toLowerCase()))\n : []\n const open = active !== null && filtered.length > 0\n\n const setText = (next: string) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value\n const caret = e.target.selectionStart ?? val.length\n setText(val)\n const found = detect(val, caret, prefix)\n if (found) {\n startRef.current = found.start\n caretRef.current = caret\n setActive(found)\n setActiveIndex(0)\n } else {\n setActive(null)\n }\n }\n\n const insert = (opt: IrisMentionOption) => {\n const before = text.slice(0, startRef.current)\n const after = text.slice(caretRef.current)\n const inserted = `${prefix}${opt.label} `\n const next = before + inserted + after\n pendingCaret.current = (before + inserted).length\n setText(next)\n setActive(null)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!open) return\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex((i) => Math.min(filtered.length - 1, i + 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((i) => Math.max(0, i - 1))\n } else if (e.key === 'Enter') {\n if (filtered[activeIndex]) {\n e.preventDefault()\n insert(filtered[activeIndex])\n }\n } else if (e.key === 'Escape') {\n e.preventDefault()\n setActive(null)\n }\n }\n\n React.useEffect(() => {\n if (pendingCaret.current != null && textareaRef.current) {\n const pos = pendingCaret.current\n textareaRef.current.focus()\n textareaRef.current.setSelectionRange(pos, pos)\n pendingCaret.current = null\n }\n })\n\n const activeId = open ? `${reactId}-opt-${activeIndex}` : undefined\n\n return (\n <div\n data-iris-mentions=\"\"\n className={className}\n style={{ position: 'relative', display: 'inline-block', minWidth: 240, ...style }}\n >\n <textarea\n ref={textareaRef}\n id={id}\n rows={rows}\n value={text}\n placeholder={placeholder}\n disabled={disabled}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-activedescendant={activeId}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n data-iris-mentions-input=\"\"\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n style={{\n boxSizing: 'border-box',\n width: '100%',\n padding: '8px 12px',\n fontSize: 14,\n fontFamily: 'inherit',\n color: 'var(--iris-foreground)',\n background: 'var(--iris-background)',\n border: `1px solid ${invalid ? 'var(--iris-danger)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n outline: 'none',\n resize: 'vertical',\n }}\n />\n {open ? (\n <ul\n id={listboxId}\n role=\"listbox\"\n data-iris-mentions-listbox=\"\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n top: '100%',\n marginBlockStart: 4,\n maxHeight: 200,\n overflowY: 'auto',\n minWidth: 160,\n margin: 0,\n padding: 4,\n zIndex: 50,\n listStyle: 'none',\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}\n >\n {filtered.map((opt, i) => (\n <li\n key={opt.value}\n id={`${reactId}-opt-${i}`}\n role=\"option\"\n aria-selected={i === activeIndex}\n data-iris-mentions-option=\"\"\n data-value={opt.value}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => insert(opt)}\n style={{\n padding: '6px 10px',\n fontSize: 14,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n background:\n i === activeIndex\n ? 'var(--iris-surface-hover, rgba(99,102,241,0.1))'\n : 'transparent',\n }}\n >\n {opt.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisCascaderSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisCascaderNode {\n label: string\n value: string\n disabled?: boolean\n children?: IrisCascaderNode[]\n}\n\nexport interface IrisCascaderProps {\n options: IrisCascaderNode[]\n /** Selected path of values. */\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (path: string[]) => void\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n /** Separator between path labels in the trigger. */\n separator?: string\n size?: IrisCascaderSize\n id?: string\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisCascaderSize, { padding: string; fontSize: string; minHeight: string }> =\n {\n sm: { padding: '4px 8px', fontSize: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '16px', minHeight: '40px' },\n }\n\n/** Labels along a value path (stops at the first missing node). */\nfunction pathLabels(options: IrisCascaderNode[], path: string[]): string[] {\n const labels: string[] = []\n let level = options\n for (const v of path) {\n const node = level.find((n) => n.value === v)\n if (!node) break\n labels.push(node.label)\n level = node.children ?? []\n }\n return labels\n}\n\n/** The columns of nodes to render for the active navigation path. */\nfunction buildColumns(options: IrisCascaderNode[], activePath: string[]): IrisCascaderNode[][] {\n const cols: IrisCascaderNode[][] = [options]\n let level = options\n for (const v of activePath) {\n const node = level.find((n) => n.value === v)\n if (!node || !node.children || node.children.length === 0) break\n level = node.children\n cols.push(level)\n }\n return cols\n}\n\n/**\n * Cascader: a hierarchical select that drills down through columns — choosing a\n * branch reveals its children in the next column; choosing a leaf commits the\n * full path. Controlled or uncontrolled; closes on leaf-select, Escape, or\n * outside click.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisCascader}.\n */\nexport function IrisCascader({\n options,\n value,\n defaultValue = [],\n onValueChange,\n placeholder,\n disabled = false,\n invalid = false,\n separator = ' / ',\n size = 'md',\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisCascaderProps): React.ReactElement {\n const { t } = useI18n()\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const isControlled = value !== undefined\n const [internal, setInternal] = React.useState<string[]>(defaultValue)\n const currentValue = isControlled ? (value as string[]) : internal\n const [open, setOpen] = React.useState(false)\n const [activePath, setActivePath] = React.useState<string[]>(defaultValue)\n const [focused, setFocused] = React.useState(false)\n\n const columns = buildColumns(options, activePath)\n const labels = pathLabels(options, currentValue)\n\n const toggleOpen = () => {\n if (disabled) return\n setOpen((o) => {\n if (!o) setActivePath(currentValue)\n return !o\n })\n }\n\n const selectOption = (colIndex: number, node: IrisCascaderNode) => {\n if (node.disabled) return\n const nextPath = [...activePath.slice(0, colIndex), node.value]\n setActivePath(nextPath)\n const hasChildren = !!node.children && node.children.length > 0\n if (!hasChildren) {\n if (!isControlled) setInternal(nextPath)\n onValueChange?.(nextPath)\n setOpen(false)\n }\n }\n\n React.useEffect(() => {\n if (!open) return\n const onDown = (e: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', onDown)\n return () => document.removeEventListener('mousedown', onDown)\n }, [open])\n\n const sz = SIZE_MAP[size]\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused || open\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n\n return (\n <div\n ref={rootRef}\n data-iris-cascader=\"\"\n data-state={open ? 'open' : 'closed'}\n className={className}\n style={{ position: 'relative', display: 'inline-block', minWidth: 240, ...style }}\n >\n <button\n type=\"button\"\n id={id}\n data-iris-cascader-trigger=\"\"\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n disabled={disabled}\n onClick={toggleOpen}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onKeyDown={(e) => {\n if (e.key === 'Escape' && open) {\n e.preventDefault()\n setOpen(false)\n } else if ((e.key === 'ArrowDown' || e.key === 'Enter') && !open) {\n e.preventDefault()\n toggleOpen()\n }\n }}\n style={{\n boxSizing: 'border-box',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: sz.padding,\n minHeight: sz.minHeight,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n textAlign: 'start',\n color: labels.length ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n background: 'var(--iris-background)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n outline: 'none',\n }}\n >\n <span data-iris-cascader-value=\"\">\n {labels.length ? labels.join(separator) : (placeholder ?? t('select.placeholder'))}\n </span>\n <span aria-hidden=\"true\" style={{ color: 'var(--iris-muted)', fontSize: 10 }}>\n ▾\n </span>\n </button>\n {open ? (\n <div\n data-iris-cascader-panel=\"\"\n style={{\n position: 'absolute',\n insetInlineStart: 0,\n top: '100%',\n marginBlockStart: 4,\n display: 'flex',\n zIndex: 50,\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n overflow: 'hidden',\n }}\n >\n {columns.map((col, ci) => (\n <ul\n key={ci}\n role=\"listbox\"\n data-iris-cascader-column=\"\"\n data-level={ci}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 4,\n minWidth: 140,\n maxHeight: 240,\n overflowY: 'auto',\n borderInlineStart: ci > 0 ? '1px solid var(--iris-border)' : undefined,\n }}\n >\n {col.map((node) => {\n const isActive = activePath[ci] === node.value\n const hasChildren = !!node.children && node.children.length > 0\n return (\n <li\n key={node.value}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={node.disabled ? 'true' : undefined}\n data-iris-cascader-option=\"\"\n data-value={node.value}\n onClick={() => selectOption(ci, node)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: '6px 10px',\n fontSize: sz.fontSize,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: node.disabled ? 'not-allowed' : 'pointer',\n color: node.disabled ? 'var(--iris-muted)' : 'var(--iris-foreground)',\n background: isActive\n ? 'var(--iris-surface-hover, rgba(99,102,241,0.1))'\n : 'transparent',\n }}\n >\n <span>{node.label}</span>\n {hasChildren ? (\n <span aria-hidden=\"true\" style={{ color: 'var(--iris-muted)', fontSize: 10 }}>\n ›\n </span>\n ) : null}\n </li>\n )\n })}\n </ul>\n ))}\n </div>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport {\n createSelectionModel,\n createKeyboardNav,\n type KeyboardNavController,\n type KeyboardNavAction,\n type SelectionModel,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\n\nexport type IrisSegmentedSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisSegmentedOption {\n label: string\n value: string\n disabled?: boolean\n}\n\nexport interface IrisSegmentedProps {\n options: Array<IrisSegmentedOption | string>\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n size?: IrisSegmentedSize\n disabled?: boolean\n /** Stretch to fill the container width. */\n block?: boolean\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisSegmentedSize, { padding: string; fontSize: number; height: number }> = {\n sm: { padding: '2px 8px', fontSize: 12, height: 24 },\n md: { padding: '4px 12px', fontSize: 14, height: 30 },\n lg: { padding: '6px 16px', fontSize: 16, height: 36 },\n}\n\nconst normalize = (options: Array<IrisSegmentedOption | string>): IrisSegmentedOption[] =>\n options.map((o) => (typeof o === 'string' ? { label: o, value: o } : o))\n\n/**\n * Segmented control: a connected row of single-select segments with the active\n * one visually raised. Radiogroup semantics with roving tabindex and Arrow /\n * Home / End keyboard navigation — single-sourced in `createKeyboardNav`.\n */\nexport function IrisSegmented({\n options,\n value,\n defaultValue,\n onValueChange,\n size = 'md',\n disabled = false,\n block = false,\n ariaLabel,\n style,\n className,\n}: IrisSegmentedProps): React.ReactElement {\n const safeOptions = options ?? []\n const norm = normalize(safeOptions)\n const isControlled = value !== undefined\n const refs = React.useRef<(HTMLButtonElement | null)[]>([])\n\n // Single-selection logic (controlled/uncontrolled) lives in the core model;\n const toKeys = (v: string | undefined): string[] => (v ? [v] : [])\n const modelRef = React.useRef<SelectionModel<string> | null>(null)\n if (modelRef.current === null) {\n modelRef.current = createSelectionModel<string>({\n mode: 'single',\n defaultSelected: toKeys(isControlled ? value : defaultValue),\n onChange: (keys) => onValueChange?.(keys[0] ?? ''),\n })\n }\n const model = modelRef.current\n const currentValue = useStore(model.store)[0] ?? ''\n\n React.useEffect(() => {\n if (isControlled) model.sync(toKeys(value))\n }, [value, isControlled, model])\n\n const displayValue = isControlled ? (toKeys(value)[0] ?? '') : currentValue\n const rebaseToProp = (): void => {\n if (isControlled) model.sync(toKeys(value))\n }\n\n const isOptionEnabled = React.useCallback((i: number) => !norm[i]?.disabled, [norm])\n const selectedIndex = norm.findIndex((o) => o.value === displayValue)\n\n // Keyboard navigation (single-sourced in core controller)\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({\n count: norm.length,\n loop: true,\n orientation: 'horizontal',\n isEnabled: isOptionEnabled,\n initialIndex: selectedIndex >= 0 ? selectedIndex : undefined,\n })\n }\n const nav = navRef.current\n\n React.useEffect(() => {\n nav.reset(norm.length)\n })\n\n const rovingIndex = nav.index\n\n const select = (i: number) => {\n const opt = norm[i]\n if (!opt || opt.disabled || disabled) return\n rebaseToProp()\n model.set([opt.value])\n refs.current[i]?.focus()\n }\n\n const sz = SIZE_MAP[size]\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={ariaLabel}\n data-iris-segmented=\"\"\n data-iris-segmented-size={size}\n data-disabled={disabled ? 'true' : undefined}\n className={className}\n onKeyDown={(e) => {\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n if (action.type === 'focus' || action.type === 'typeahead') {\n select(action.target)\n }\n }}\n style={{\n display: block ? 'flex' : 'inline-flex',\n width: block ? '100%' : undefined,\n gap: 2,\n padding: 2,\n background: 'var(--iris-surface)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n opacity: disabled ? 0.6 : 1,\n ...style,\n }}\n >\n {norm.map((opt, i) => {\n const selected = opt.value === displayValue\n return (\n <button\n key={opt.value}\n ref={(el) => {\n refs.current[i] = el\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled || opt.disabled}\n tabIndex={i === rovingIndex ? 0 : -1}\n data-iris-segmented-item=\"\"\n data-value={opt.value}\n data-selected={selected ? 'true' : undefined}\n onClick={() => select(i)}\n onFocus={() => nav.focus(i)}\n style={{\n flex: block ? 1 : undefined,\n padding: sz.padding,\n minHeight: sz.height,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: disabled || opt.disabled ? 'not-allowed' : 'pointer',\n background: selected ? 'var(--iris-background)' : 'transparent',\n color: selected ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n boxShadow: selected ? '0 1px 3px rgba(0,0,0,0.12)' : 'none',\n fontWeight: selected ? 600 : 400,\n transition: 'background-color 120ms ease, color 120ms ease',\n whiteSpace: 'nowrap',\n }}\n >\n {opt.label}\n </button>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisImageProps {\n src: string\n alt?: string\n width?: number | string\n height?: number | string\n /** Shown when the image fails to load. */\n fallback?: string\n /** Enable the click-to-zoom preview overlay. Default true. */\n preview?: boolean\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Image with a graceful error `fallback` and an optional click-to-zoom preview\n * overlay (a `role=\"dialog\"` lightbox dismissed by backdrop, close button, or\n * Escape). Lazy-loaded by default.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisImage}.\n */\nexport function IrisImage({\n src,\n alt = '',\n width,\n height,\n fallback,\n preview = true,\n style,\n className,\n}: IrisImageProps): React.ReactElement {\n const { t } = useI18n()\n const [errored, setErrored] = React.useState(false)\n const [open, setOpen] = React.useState(false)\n\n React.useEffect(() => {\n setErrored(false)\n }, [src])\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open])\n\n const shownSrc = errored && fallback ? fallback : src\n const canPreview = preview && !errored\n\n return (\n <>\n <img\n data-iris-image=\"\"\n data-errored={errored ? 'true' : undefined}\n src={shownSrc}\n alt={alt}\n width={width}\n height={height}\n loading=\"lazy\"\n className={className}\n onError={() => {\n if (!errored) setErrored(true)\n }}\n onClick={() => {\n if (canPreview) setOpen(true)\n }}\n style={{\n display: 'inline-block',\n objectFit: 'cover',\n cursor: canPreview ? 'zoom-in' : undefined,\n ...style,\n }}\n />\n {open ? (\n <div\n data-iris-image-preview=\"\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={alt || t('image.preview')}\n onClick={() => setOpen(false)}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 1000,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(0,0,0,0.7)',\n cursor: 'zoom-out',\n }}\n >\n <img\n data-iris-image-preview-img=\"\"\n src={shownSrc}\n alt={alt}\n style={{ maxWidth: '90vw', maxHeight: '90vh', objectFit: 'contain' }}\n />\n <button\n type=\"button\"\n data-iris-image-preview-close=\"\"\n aria-label={t('dialog.close')}\n onClick={(e) => {\n e.stopPropagation()\n setOpen(false)\n }}\n style={{\n position: 'absolute',\n insetBlockStart: 16,\n insetInlineEnd: 16,\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: 'none',\n background: 'rgba(0,0,0,0.5)',\n color: '#fff',\n fontSize: 22,\n lineHeight: 1,\n cursor: 'pointer',\n }}\n >\n ×\n </button>\n </div>\n ) : null}\n </>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisFloatButtonShape = 'circle' | 'square'\n\nexport interface IrisFloatButtonAction {\n key: string\n icon?: React.ReactNode\n label?: string\n ariaLabel?: string\n onClick?: () => void\n}\n\nexport interface IrisFloatButtonProps {\n icon?: React.ReactNode\n children?: React.ReactNode\n ariaLabel?: string\n onClick?: () => void\n shape?: IrisFloatButtonShape\n /** Speed-dial actions; when present, the button toggles them instead of `onClick`. */\n actions?: IrisFloatButtonAction[]\n /** Corner offsets (logical: distance from block-end / inline-end). */\n offset?: { bottom?: number; right?: number }\n style?: React.CSSProperties\n className?: string\n}\n\nconst fab = (size: number, primary: boolean): React.CSSProperties => ({\n width: size,\n height: size,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: primary ? 'none' : '1px solid var(--iris-border)',\n background: primary ? 'var(--iris-primary)' : 'var(--iris-background)',\n color: primary ? '#fff' : 'var(--iris-foreground)',\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0,0,0,0.18)',\n fontSize: size > 44 ? 22 : 16,\n lineHeight: 1,\n})\n\n/**\n * Floating action button: a fixed-position FAB. With `actions` it becomes a\n * speed-dial — click toggles a `role=\"menu\"` stack of actions (dismissed by\n * selection, Escape, or outside click). Otherwise click runs `onClick`.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisFloatButton}.\n */\nexport function IrisFloatButton({\n icon,\n children,\n ariaLabel,\n onClick,\n shape = 'circle',\n actions,\n offset,\n style,\n className,\n}: IrisFloatButtonProps): React.ReactElement {\n const { t } = useI18n()\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const [open, setOpen] = React.useState(false)\n const hasActions = !!actions && actions.length > 0\n const content = children ?? icon ?? '+'\n const radius = shape === 'circle' ? '50%' : 'var(--iris-radius-md, 6px)'\n\n React.useEffect(() => {\n if (!open) return\n const onDown = (e: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('mousedown', onDown)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('mousedown', onDown)\n document.removeEventListener('keydown', onKey)\n }\n }, [open])\n\n return (\n <div\n ref={rootRef}\n data-iris-float-button-root=\"\"\n className={className}\n style={{\n position: 'fixed',\n insetBlockEnd: offset?.bottom ?? 24,\n insetInlineEnd: offset?.right ?? 24,\n zIndex: 1000,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 12,\n ...style,\n }}\n >\n {hasActions && open ? (\n <div\n data-iris-float-button-actions=\"\"\n role=\"menu\"\n style={{\n display: 'flex',\n flexDirection: 'column-reverse',\n gap: 12,\n alignItems: 'center',\n }}\n >\n {actions!.map((a) => (\n <button\n key={a.key}\n type=\"button\"\n role=\"menuitem\"\n data-iris-float-button-action=\"\"\n data-key={a.key}\n aria-label={a.ariaLabel ?? a.label}\n onClick={() => {\n a.onClick?.()\n setOpen(false)\n }}\n style={{ ...fab(40, false), borderRadius: radius }}\n >\n {a.icon ?? a.label}\n </button>\n ))}\n </div>\n ) : null}\n <button\n type=\"button\"\n data-iris-float-button=\"\"\n aria-label={ariaLabel ?? (hasActions ? t('floatButton.actions') : undefined)}\n aria-haspopup={hasActions ? 'menu' : undefined}\n aria-expanded={hasActions ? open : undefined}\n onClick={() => {\n if (hasActions) setOpen((o) => !o)\n else onClick?.()\n }}\n style={{ ...fab(48, true), borderRadius: radius }}\n >\n {content}\n </button>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisAnchorItem {\n href: string\n title: string\n key?: string\n}\n\nexport interface IrisAnchorProps {\n items: IrisAnchorItem[]\n /** Scroll container resolver. Defaults to the window. */\n target?: () => HTMLElement | Window | null\n /** Top offset (px) for active detection + scroll target. */\n offset?: number\n onChange?: (href: string) => void\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n )\n}\n\nconst resolve = (target?: () => HTMLElement | Window | null): HTMLElement | Window =>\n (target ? target() : window) ?? window\n\n/**\n * Anchor: in-page navigation that scroll-spies its `#id` sections — the active\n * link is the last section whose top has passed `offset`. Clicking a link\n * smooth-scrolls to its section (honoring reduced motion).\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisAnchor}.\n */\nexport function IrisAnchor({\n items,\n target,\n offset = 0,\n onChange,\n ariaLabel,\n style,\n className,\n}: IrisAnchorProps): React.ReactElement {\n const [active, setActive] = React.useState('')\n const activeRef = React.useRef('')\n const itemsRef = React.useRef(items)\n itemsRef.current = items\n const offsetRef = React.useRef(offset)\n offsetRef.current = offset\n const onChangeRef = React.useRef(onChange)\n onChangeRef.current = onChange\n const targetRef = React.useRef(target)\n targetRef.current = target\n\n React.useEffect(() => {\n const el = resolve(targetRef.current)\n const compute = () => {\n let current = ''\n for (const item of itemsRef.current) {\n const node = document.getElementById(item.href.replace(/^#/, ''))\n if (node && node.getBoundingClientRect().top - offsetRef.current <= 1) current = item.href\n }\n if (current !== activeRef.current) {\n activeRef.current = current\n setActive(current)\n onChangeRef.current?.(current)\n }\n }\n el.addEventListener('scroll', compute, { passive: true })\n compute()\n return () => el.removeEventListener('scroll', compute)\n }, [])\n\n const onLinkClick = (e: React.MouseEvent<HTMLAnchorElement>, href: string) => {\n e.preventDefault()\n const node = document.getElementById(href.replace(/^#/, ''))\n if (!node) return\n if (typeof node.scrollIntoView === 'function') {\n node.scrollIntoView({ behavior: prefersReducedMotion() ? 'auto' : 'smooth', block: 'start' })\n }\n activeRef.current = href\n setActive(href)\n onChange?.(href)\n }\n\n return (\n <nav data-iris-anchor=\"\" aria-label={ariaLabel} className={className} style={style}>\n <ul\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n borderInlineStart: '2px solid var(--iris-border)',\n }}\n >\n {items.map((item) => {\n const isActive = active === item.href\n return (\n <li key={item.key ?? item.href} data-iris-anchor-item=\"\">\n <a\n href={item.href}\n data-iris-anchor-link=\"\"\n data-active={isActive ? 'true' : undefined}\n aria-current={isActive ? 'true' : undefined}\n onClick={(e) => onLinkClick(e, item.href)}\n style={{\n display: 'block',\n padding: '4px 12px',\n marginInlineStart: -2,\n borderInlineStart: `2px solid ${isActive ? 'var(--iris-primary)' : 'transparent'}`,\n color: isActive ? 'var(--iris-primary)' : 'var(--iris-foreground)',\n fontWeight: isActive ? 600 : 400,\n textDecoration: 'none',\n fontSize: 14,\n }}\n >\n {item.title}\n </a>\n </li>\n )\n })}\n </ul>\n </nav>\n )\n}\n","import * as React from 'react'\n\nexport type IrisCountdownSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisCountdownProps {\n /** Target time as an epoch timestamp (ms). */\n value: number\n /** Token format: DD / HH / mm / ss / SSS. */\n format?: string\n title?: React.ReactNode\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n /** Fired once when the countdown reaches zero. */\n onFinish?: () => void\n size?: IrisCountdownSize\n style?: React.CSSProperties\n className?: string\n}\n\nconst VALUE_FONT: Record<IrisCountdownSize, number> = { sm: 18, md: 24, lg: 30 }\n\nconst pad = (n: number, len: number) => String(n).padStart(len, '0')\n\n/** Render remaining milliseconds via DD/HH/mm/ss/SSS tokens. */\nexport function formatRemaining(ms: number, format: string): string {\n const total = Math.max(0, ms)\n const days = Math.floor(total / 86400000)\n const hours = Math.floor((total % 86400000) / 3600000)\n const minutes = Math.floor((total % 3600000) / 60000)\n const seconds = Math.floor((total % 60000) / 1000)\n const millis = Math.floor(total % 1000)\n return format\n .replace(/DD/g, pad(days, 2))\n .replace(/HH/g, pad(hours, 2))\n .replace(/mm/g, pad(minutes, 2))\n .replace(/ss/g, pad(seconds, 2))\n .replace(/SSS/g, pad(millis, 3))\n}\n\n/**\n * Live countdown to a target timestamp. Ticks every second (or every 100ms\n * when the format shows milliseconds), formats the remaining time via tokens,\n * and fires `onFinish` once at zero.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisCountdown}.\n */\nexport function IrisCountdown({\n value,\n format = 'HH:mm:ss',\n title,\n prefix,\n suffix,\n onFinish,\n size = 'md',\n style,\n className,\n}: IrisCountdownProps): React.ReactElement {\n const [now, setNow] = React.useState(() => Date.now())\n const onFinishRef = React.useRef(onFinish)\n onFinishRef.current = onFinish\n const finishedRef = React.useRef(false)\n\n React.useEffect(() => {\n finishedRef.current = false\n const tick = format.includes('SSS') ? 100 : 1000\n const finishIfDue = (n: number, id?: ReturnType<typeof setInterval>) => {\n if (value - n <= 0 && !finishedRef.current) {\n finishedRef.current = true\n onFinishRef.current?.()\n if (id) clearInterval(id)\n }\n }\n setNow(Date.now())\n const id = setInterval(() => {\n const n = Date.now()\n setNow(n)\n finishIfDue(n, id)\n }, tick)\n finishIfDue(Date.now(), id)\n return () => clearInterval(id)\n }, [value, format])\n\n const remaining = Math.max(0, value - now)\n const finished = remaining <= 0\n const affix: React.CSSProperties = { fontSize: '0.6em', color: 'var(--iris-muted)' }\n\n return (\n <div\n data-iris-countdown=\"\"\n data-finished={finished ? 'true' : undefined}\n className={className}\n style={{ display: 'flex', flexDirection: 'column', gap: 4, ...style }}\n >\n {title != null ? (\n <div data-iris-countdown-title=\"\" style={{ fontSize: 13, color: 'var(--iris-muted)' }}>\n {title}\n </div>\n ) : null}\n <div\n data-iris-countdown-value=\"\"\n style={{\n display: 'inline-flex',\n alignItems: 'baseline',\n gap: 4,\n fontSize: VALUE_FONT[size],\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {prefix != null ? <span style={affix}>{prefix}</span> : null}\n <span data-iris-countdown-time=\"\">{formatRemaining(remaining, format)}</span>\n {suffix != null ? <span style={affix}>{suffix}</span> : null}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisTourStep {\n /** Element to spotlight for this step. */\n target?: () => HTMLElement | null\n title?: React.ReactNode\n description?: React.ReactNode\n}\n\nexport interface IrisTourProps {\n steps: IrisTourStep[]\n open?: boolean\n defaultOpen?: boolean\n onChange?: (index: number) => void\n onClose?: () => void\n onFinish?: () => void\n style?: React.CSSProperties\n className?: string\n}\n\ninterface Rect {\n top: number\n left: number\n width: number\n height: number\n}\n\nconst btnBase: React.CSSProperties = {\n padding: '4px 12px',\n fontSize: 13,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n}\nconst btnGhost: React.CSSProperties = {\n ...btnBase,\n border: '1px solid var(--iris-border)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n}\nconst btnPrimary: React.CSSProperties = {\n ...btnBase,\n border: 'none',\n background: 'var(--iris-primary)',\n color: '#fff',\n}\n\n/**\n * Guided tour: an overlay that walks the user through `steps`, spotlighting an\n * optional target per step and showing a dialog card with prev/next/skip\n * controls. Controlled (`open`) or uncontrolled (`defaultOpen`); the step index\n * is managed internally and resets each time the tour opens.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisTour}.\n */\nexport function IrisTour({\n steps,\n open,\n defaultOpen = false,\n onChange,\n onClose,\n onFinish,\n style,\n className,\n}: IrisTourProps): React.ReactElement | null {\n const { t } = useI18n()\n const isControlled = open !== undefined\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const isOpen = isControlled ? (open as boolean) : internalOpen\n const [step, setStep] = React.useState(0)\n const [spotlight, setSpotlight] = React.useState<Rect | null>(null)\n const wasOpen = React.useRef(false)\n\n const total = steps.length\n const current = Math.min(step, Math.max(0, total - 1))\n const stepData = steps[current]\n\n React.useEffect(() => {\n if (isOpen && !wasOpen.current) setStep(0)\n wasOpen.current = isOpen\n }, [isOpen])\n\n React.useEffect(() => {\n if (!isOpen || !stepData) return\n const el = stepData.target?.()\n if (el) {\n const r = el.getBoundingClientRect()\n setSpotlight({ top: r.top, left: r.left, width: r.width, height: r.height })\n } else {\n setSpotlight(null)\n }\n }, [isOpen, current, stepData])\n\n const close = () => {\n if (!isControlled) setInternalOpen(false)\n onClose?.()\n }\n\n React.useEffect(() => {\n if (!isOpen) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close()\n }\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [isOpen])\n\n if (!isOpen || total === 0 || !stepData) return null\n\n const isLast = current === total - 1\n const next = () => {\n if (!isLast) {\n setStep(current + 1)\n onChange?.(current + 1)\n } else {\n onFinish?.()\n close()\n }\n }\n const prev = () => {\n if (current > 0) {\n setStep(current - 1)\n onChange?.(current - 1)\n }\n }\n\n const spotlit = spotlight && spotlight.width > 0\n const cardPos: React.CSSProperties = spotlit\n ? { top: spotlight.top + spotlight.height + 12, insetInlineStart: spotlight.left }\n : { top: '50%', insetInlineStart: '50%', transform: 'translate(-50%, -50%)' }\n const dialogLabel =\n typeof stepData.title === 'string'\n ? stepData.title\n : t('tour.step', { current: current + 1, total })\n\n return (\n <div data-iris-tour=\"\" className={className} style={style}>\n <div\n data-iris-tour-backdrop=\"\"\n onClick={close}\n style={{ position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.45)', zIndex: 1000 }}\n />\n {spotlit ? (\n <div\n data-iris-tour-spotlight=\"\"\n style={{\n position: 'fixed',\n top: spotlight.top - 4,\n insetInlineStart: spotlight.left - 4,\n width: spotlight.width + 8,\n height: spotlight.height + 8,\n border: '2px solid var(--iris-primary)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n boxShadow: '0 0 0 9999px rgba(0,0,0,0.45)',\n zIndex: 1001,\n pointerEvents: 'none',\n }}\n />\n ) : null}\n <div\n data-iris-tour-card=\"\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={dialogLabel}\n style={{\n position: 'fixed',\n zIndex: 1002,\n maxWidth: 320,\n padding: 16,\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.18)',\n ...cardPos,\n }}\n >\n {stepData.title != null ? (\n <div data-iris-tour-title=\"\" style={{ fontWeight: 600, marginBlockEnd: 6 }}>\n {stepData.title}\n </div>\n ) : null}\n {stepData.description != null ? (\n <div\n data-iris-tour-description=\"\"\n style={{ fontSize: 14, color: 'var(--iris-foreground)', marginBlockEnd: 12 }}\n >\n {stepData.description}\n </div>\n ) : null}\n <div\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}\n >\n <span data-iris-tour-indicator=\"\" style={{ fontSize: 12, color: 'var(--iris-muted)' }}>\n {t('tour.step', { current: current + 1, total })}\n </span>\n <div style={{ display: 'flex', gap: 8 }}>\n <button type=\"button\" data-iris-tour-skip=\"\" onClick={close} style={btnGhost}>\n {t('tour.skip')}\n </button>\n {current > 0 ? (\n <button type=\"button\" data-iris-tour-prev=\"\" onClick={prev} style={btnGhost}>\n {t('tour.prev')}\n </button>\n ) : null}\n <button type=\"button\" data-iris-tour-next=\"\" onClick={next} style={btnPrimary}>\n {isLast ? t('tour.finish') : t('tour.next')}\n </button>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisTagInputProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (tags: string[]) => void\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n /** Max number of tags. 0 / undefined = unlimited. */\n max?: number\n allowDuplicates?: boolean\n /** id forwarded to the input. Set by `IrisFormField`. */\n id?: string\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Tag / token input: a field where typed text becomes removable chips. Commit\n * a tag with Enter or a comma (pasted comma lists split too); Backspace on an\n * empty input removes the last tag; each chip has a remove button.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisTagInput}.\n */\nexport function IrisTagInput({\n value,\n defaultValue = [],\n onValueChange,\n placeholder,\n disabled = false,\n invalid = false,\n max,\n allowDuplicates = false,\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisTagInputProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = value !== undefined\n const [internal, setInternal] = React.useState<string[]>(defaultValue)\n const tags = isControlled ? (value as string[]) : internal\n const [input, setInput] = React.useState('')\n const [focused, setFocused] = React.useState(false)\n\n const setTags = (next: string[]) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const canAdd = (txt: string, list: string[]) =>\n !!txt && (allowDuplicates || !list.includes(txt)) && (!max || list.length < max)\n\n const addTag = () => {\n const txt = input.trim()\n if (txt && canAdd(txt, tags)) setTags([...tags, txt])\n setInput('')\n }\n\n const removeAt = (i: number) => {\n if (disabled) return\n setTags(tags.filter((_, k) => k !== i))\n }\n\n const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n if (raw.includes(',')) {\n const parts = raw.split(',')\n const last = parts.pop() ?? ''\n let next = tags\n for (const p of parts) {\n const txt = p.trim()\n if (canAdd(txt, next)) next = [...next, txt]\n }\n if (next !== tags) setTags(next)\n setInput(last)\n } else {\n setInput(raw)\n }\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n addTag()\n } else if (e.key === 'Backspace' && input === '' && tags.length > 0) {\n e.preventDefault()\n removeAt(tags.length - 1)\n }\n }\n\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n\n return (\n <div\n data-iris-tag-input=\"\"\n data-state={invalid ? 'invalid' : focused ? 'focused' : 'idle'}\n className={className}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 6,\n padding: '4px 8px',\n minHeight: 34,\n background: 'var(--iris-background)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n opacity: disabled ? 0.6 : 1,\n boxShadow: focused ? `0 0 0 3px rgba(99, 102, 241, 0.18)` : 'none',\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n ...style,\n }}\n >\n {tags.map((tag, i) => (\n <span\n key={`${tag}-${i}`}\n data-iris-tag-input-tag=\"\"\n data-value={tag}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '2px 6px',\n fontSize: 13,\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n color: 'var(--iris-foreground)',\n }}\n >\n {tag}\n <button\n type=\"button\"\n data-iris-tag-input-remove=\"\"\n aria-label={t('tagInput.remove', { tag })}\n disabled={disabled}\n onClick={() => removeAt(i)}\n style={{\n border: 'none',\n background: 'transparent',\n color: 'var(--iris-muted)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 14,\n lineHeight: 1,\n padding: 0,\n }}\n >\n ×\n </button>\n </span>\n ))}\n <input\n id={id}\n type=\"text\"\n data-iris-tag-input-field=\"\"\n value={input}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n flex: 1,\n minWidth: 80,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n fontFamily: 'inherit',\n fontSize: 14,\n padding: '2px 0',\n }}\n />\n </div>\n )\n}\n","import * as React from 'react'\nimport { copyText } from '@iris-ui-kit/core'\nimport { useI18n } from '../../i18n'\n\nexport type IrisCopyButtonSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisCopyButtonProps {\n /** Text to copy to the clipboard. */\n text: string\n /** Idle button content (default: localized \"Copy\"). */\n children?: React.ReactNode\n /** Content shown briefly after copying (default: localized \"Copied\"). */\n copiedLabel?: React.ReactNode\n /** How long the copied state lasts (ms). */\n timeout?: number\n onCopy?: (text: string) => void\n disabled?: boolean\n size?: IrisCopyButtonSize\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisCopyButtonSize, { padding: string; fontSize: number }> = {\n sm: { padding: '4px 8px', fontSize: 12 },\n md: { padding: '6px 12px', fontSize: 14 },\n lg: { padding: '8px 16px', fontSize: 16 },\n}\n\n/**\n * Copy-to-clipboard button: writes `text` to the clipboard and flips to a\n * \"Copied\" state for `timeout` ms. The clipboard write is best-effort (guarded\n * for unsupported environments) and the copied state still reflects intent.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisCopyButton}.\n */\nexport function IrisCopyButton({\n text,\n children,\n copiedLabel,\n timeout = 2000,\n onCopy,\n disabled = false,\n size = 'md',\n style,\n className,\n}: IrisCopyButtonProps): React.ReactElement {\n const { t } = useI18n()\n const [copied, setCopied] = React.useState(false)\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n const copy = async () => {\n if (disabled) return\n try {\n // A host clipboard handler (setClipboardHandler) wins — needed where\n // navigator.clipboard is unavailable (Cordova file://, custom protocols).\n if (!(await copyText(text))) {\n // writeText returns a Promise; swallow async rejection (permission denied).\n void navigator.clipboard?.writeText?.(text)?.catch(() => {})\n }\n } catch {\n /* host handler / clipboard unavailable — still surface the copied state */\n }\n setCopied(true)\n onCopy?.(text)\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setCopied(false), timeout)\n }\n\n React.useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n },\n [],\n )\n\n const sz = SIZE_MAP[size]\n\n return (\n <button\n type=\"button\"\n data-iris-copy-button=\"\"\n data-copied={copied ? 'true' : undefined}\n disabled={disabled}\n onClick={copy}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: sz.padding,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: copied ? 'var(--iris-success, #16a34a)' : 'var(--iris-surface)',\n color: copied ? '#fff' : 'var(--iris-foreground)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'background-color 120ms ease, color 120ms ease',\n ...style,\n }}\n >\n {copied ? (copiedLabel ?? t('copyButton.copied')) : (children ?? t('copyButton.copy'))}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport type IrisProgressCircleStatus = 'default' | 'success' | 'danger' | 'warning'\n\nexport interface IrisProgressCircleProps {\n value: number\n max?: number\n /** Diameter in px. */\n size?: number\n strokeWidth?: number\n status?: IrisProgressCircleStatus\n showLabel?: boolean\n /** Custom center label given the rounded percent. */\n format?: (percent: number) => React.ReactNode\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst COLOR: Record<IrisProgressCircleStatus, string> = {\n default: 'var(--iris-primary)',\n success: 'var(--iris-success, #16a34a)',\n danger: 'var(--iris-danger)',\n warning: 'var(--iris-warning, #f59e0b)',\n}\n\n/**\n * Circular (ring) progress indicator built from a structured SVG — a track\n * circle plus a value circle whose `stroke-dashoffset` encodes the ratio. An\n * optional centered percent label sits on top. Distinct from the linear\n * `IrisProgress`.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisProgressCircle}.\n */\nexport function IrisProgressCircle({\n value,\n max = 100,\n size = 80,\n strokeWidth = 6,\n status = 'default',\n showLabel = true,\n format,\n ariaLabel,\n style,\n className,\n}: IrisProgressCircleProps): React.ReactElement {\n const ratio = Math.max(0, Math.min(1, max > 0 ? value / max : 0))\n const percent = Math.round(ratio * 100)\n const center = size / 2\n const r = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * r\n const offset = circumference * (1 - ratio)\n\n return (\n <div\n data-iris-progress-circle=\"\"\n data-status={status}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuetext={`${percent}%`}\n aria-label={ariaLabel}\n className={className}\n style={{ position: 'relative', display: 'inline-flex', width: size, height: size, ...style }}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden=\"true\">\n <circle\n cx={center}\n cy={center}\n r={r}\n fill=\"none\"\n stroke=\"var(--iris-border)\"\n strokeWidth={strokeWidth}\n />\n <circle\n data-iris-progress-circle-value=\"\"\n cx={center}\n cy={center}\n r={r}\n fill=\"none\"\n stroke={COLOR[status]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n transform={`rotate(-90 ${center} ${center})`}\n style={{ transition: 'stroke-dashoffset 200ms ease' }}\n />\n </svg>\n {showLabel ? (\n <span\n data-iris-progress-circle-label=\"\"\n style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: Math.round(size * 0.25),\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {format ? format(percent) : `${percent}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisSplitButtonVariant = 'primary' | 'default'\nexport type IrisSplitButtonSize = 'sm' | 'md' | 'lg'\n\nexport interface IrisSplitButtonAction {\n key: string\n label: string\n disabled?: boolean\n onClick?: () => void\n}\n\nexport interface IrisSplitButtonProps {\n children?: React.ReactNode\n onClick?: () => void\n actions?: IrisSplitButtonAction[]\n variant?: IrisSplitButtonVariant\n size?: IrisSplitButtonSize\n disabled?: boolean\n menuAriaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SIZE_MAP: Record<IrisSplitButtonSize, { padding: string; fontSize: number; height: number }> =\n {\n sm: { padding: '4px 10px', fontSize: 12, height: 28 },\n md: { padding: '6px 14px', fontSize: 14, height: 34 },\n lg: { padding: '8px 18px', fontSize: 16, height: 40 },\n }\n\n/**\n * Split button: a primary action joined to a caret that opens a `role=\"menu\"`\n * of secondary actions (dismissed by selection, Escape, or outside click).\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisSplitButton}.\n */\nexport function IrisSplitButton({\n children,\n onClick,\n actions,\n variant = 'primary',\n size = 'md',\n disabled = false,\n menuAriaLabel,\n style,\n className,\n}: IrisSplitButtonProps): React.ReactElement {\n const { t } = useI18n()\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const [open, setOpen] = React.useState(false)\n const hasActions = !!actions && actions.length > 0\n\n React.useEffect(() => {\n if (!open) return\n const onDown = (e: MouseEvent) => {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setOpen(false)\n }\n document.addEventListener('mousedown', onDown)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('mousedown', onDown)\n document.removeEventListener('keydown', onKey)\n }\n }, [open])\n\n const sz = SIZE_MAP[size]\n const colors: React.CSSProperties =\n variant === 'primary'\n ? {\n background: 'var(--iris-primary)',\n color: '#fff',\n border: '1px solid var(--iris-primary)',\n }\n : {\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n }\n const label = menuAriaLabel ?? t('splitButton.more')\n\n const select = (a: IrisSplitButtonAction) => {\n if (a.disabled) return\n a.onClick?.()\n setOpen(false)\n }\n\n return (\n <div\n ref={rootRef}\n data-iris-split-button=\"\"\n data-state={open ? 'open' : 'closed'}\n className={className}\n style={{ position: 'relative', display: 'inline-flex', ...style }}\n >\n <button\n type=\"button\"\n data-iris-split-button-main=\"\"\n disabled={disabled}\n onClick={() => !disabled && onClick?.()}\n style={{\n ...colors,\n padding: sz.padding,\n minHeight: sz.height,\n fontSize: sz.fontSize,\n fontFamily: 'inherit',\n borderStartStartRadius: 'var(--iris-radius-md, 6px)',\n borderEndStartRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n }}\n >\n {children}\n </button>\n {hasActions ? (\n <button\n type=\"button\"\n data-iris-split-button-trigger=\"\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-label={label}\n disabled={disabled}\n onClick={() => !disabled && setOpen((o) => !o)}\n style={{\n ...colors,\n borderInlineStart:\n variant === 'primary'\n ? '1px solid rgba(255,255,255,0.3)'\n : '1px solid var(--iris-border)',\n padding: '0 8px',\n minHeight: sz.height,\n fontSize: 10,\n borderStartEndRadius: 'var(--iris-radius-md, 6px)',\n borderEndEndRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n display: 'inline-flex',\n alignItems: 'center',\n }}\n >\n ▾\n </button>\n ) : null}\n {open && hasActions ? (\n <ul\n role=\"menu\"\n aria-label={label}\n data-iris-split-button-menu=\"\"\n style={{\n position: 'absolute',\n insetInlineEnd: 0,\n top: '100%',\n marginBlockStart: 4,\n minWidth: 140,\n listStyle: 'none',\n margin: 0,\n padding: 4,\n zIndex: 50,\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n }}\n >\n {actions!.map((a) => (\n <li\n key={a.key}\n role=\"menuitem\"\n aria-disabled={a.disabled ? 'true' : undefined}\n data-iris-split-button-item=\"\"\n data-key={a.key}\n onClick={() => select(a)}\n style={{\n padding: '6px 10px',\n fontSize: 14,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: a.disabled ? 'not-allowed' : 'pointer',\n color: a.disabled ? 'var(--iris-muted)' : 'var(--iris-foreground)',\n }}\n >\n {a.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisAspectRatioProps {\n /** Width / height ratio. Default 16/9. */\n ratio?: number\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Aspect-ratio box: constrains its content to a fixed width/height ratio (via\n * the CSS `aspect-ratio` property), with an absolutely-filled content layer —\n * handy for images, video, and iframe embeds.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisAspectRatio}.\n */\nexport function IrisAspectRatio({\n ratio = 16 / 9,\n children,\n style,\n className,\n}: IrisAspectRatioProps): React.ReactElement {\n return (\n <div\n data-iris-aspect-ratio=\"\"\n data-ratio={ratio}\n className={className}\n style={{ position: 'relative', width: '100%', aspectRatio: String(ratio), ...style }}\n >\n <div\n data-iris-aspect-ratio-content=\"\"\n style={{ position: 'absolute', inset: 0, width: '100%', height: '100%' }}\n >\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisVisuallyHiddenProps = React.HTMLAttributes<HTMLSpanElement>\n\nconst SR_ONLY: React.CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n}\n\n/**\n * Visually-hidden content: present in the accessibility tree (read by screen\n * readers) but clipped from view — for labels, live-region announcements, and\n * extra context. Forwards attributes like `aria-live` / `role`.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisVisuallyHidden}.\n */\nexport function IrisVisuallyHidden({\n children,\n style,\n ...rest\n}: IrisVisuallyHiddenProps): React.ReactElement {\n return (\n <span data-iris-visually-hidden=\"\" {...rest} style={{ ...SR_ONLY, ...style }}>\n {children}\n </span>\n )\n}\n","import * as React from 'react'\n\nexport type IrisScrollAreaAxis = 'vertical' | 'horizontal' | 'both'\n\nexport interface IrisScrollAreaProps {\n maxHeight?: number | string\n maxWidth?: number | string\n axis?: IrisScrollAreaAxis\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst OVERFLOW: Record<IrisScrollAreaAxis, React.CSSProperties> = {\n vertical: { overflowY: 'auto', overflowX: 'hidden' },\n horizontal: { overflowX: 'auto', overflowY: 'hidden' },\n both: { overflow: 'auto' },\n}\n\n/**\n * Scroll area: a keyboard-focusable scroll container that constrains its\n * content via `maxHeight` / `maxWidth` and scrolls on the chosen `axis`. A\n * lightweight alternative to ad-hoc overflow styling.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisScrollArea}.\n */\nexport function IrisScrollArea({\n maxHeight,\n maxWidth,\n axis = 'vertical',\n children,\n style,\n className,\n}: IrisScrollAreaProps): React.ReactElement {\n return (\n <div\n data-iris-scroll-area=\"\"\n data-axis={axis}\n tabIndex={0}\n className={className}\n style={{ ...OVERFLOW[axis], maxHeight, maxWidth, outline: 'none', ...style }}\n >\n {children}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisRibbonPlacement = 'start' | 'end'\n\nexport interface IrisRibbonProps {\n text: React.ReactNode\n /** Corner: 'end' = top inline-end (default), 'start' = top inline-start. */\n placement?: IrisRibbonPlacement\n /** Badge background (defaults to the primary color). */\n color?: string\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Ribbon: a corner badge (\"New\", \"Sale\", …) anchored to the top corner of its\n * content. RTL-safe via logical insets/radii.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisRibbon}.\n */\nexport function IrisRibbon({\n text,\n placement = 'end',\n color,\n children,\n style,\n className,\n}: IrisRibbonProps): React.ReactElement {\n const side: React.CSSProperties =\n placement === 'end'\n ? {\n insetInlineEnd: 0,\n borderStartStartRadius: 'var(--iris-radius-sm, 4px)',\n borderEndStartRadius: 'var(--iris-radius-sm, 4px)',\n }\n : {\n insetInlineStart: 0,\n borderStartEndRadius: 'var(--iris-radius-sm, 4px)',\n borderEndEndRadius: 'var(--iris-radius-sm, 4px)',\n }\n\n return (\n <div\n data-iris-ribbon=\"\"\n data-placement={placement}\n className={className}\n style={{ position: 'relative', display: 'inline-block', ...style }}\n >\n {children}\n <span\n data-iris-ribbon-badge=\"\"\n style={{\n position: 'absolute',\n insetBlockStart: 8,\n background: color ?? 'var(--iris-primary)',\n color: '#fff',\n padding: '2px 10px',\n fontSize: 12,\n fontWeight: 600,\n boxShadow: '0 2px 5px rgba(0,0,0,0.2)',\n whiteSpace: 'nowrap',\n ...side,\n }}\n >\n {text}\n </span>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisGaugeStatus = 'default' | 'success' | 'danger' | 'warning'\n\nexport interface IrisGaugeProps {\n value: number\n min?: number\n max?: number\n /** Diameter in px. */\n size?: number\n strokeWidth?: number\n status?: IrisGaugeStatus\n showValue?: boolean\n /** Custom center label given the value and rounded percent. */\n format?: (value: number, percent: number) => React.ReactNode\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst COLOR: Record<IrisGaugeStatus, string> = {\n default: 'var(--iris-primary)',\n success: 'var(--iris-success, #16a34a)',\n danger: 'var(--iris-danger)',\n warning: 'var(--iris-warning, #f59e0b)',\n}\n\n/**\n * Semicircular arc gauge built from a structured SVG — a 180° track arc plus a\n * value arc whose `stroke-dashoffset` encodes `(value − min) / (max − min)`.\n * Distinct from the full-ring `IrisProgressCircle`.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisGauge}.\n */\nexport function IrisGauge({\n value,\n min = 0,\n max = 100,\n size = 120,\n strokeWidth = 10,\n status = 'default',\n showValue = true,\n format,\n ariaLabel,\n style,\n className,\n}: IrisGaugeProps): React.ReactElement {\n const span = max - min\n const ratio = Math.max(0, Math.min(1, span > 0 ? (value - min) / span : 0))\n const percent = Math.round(ratio * 100)\n const mid = size / 2\n const r = (size - strokeWidth) / 2\n const arc = Math.PI * r\n const offset = arc * (1 - ratio)\n const d = `M ${strokeWidth / 2} ${mid} A ${r} ${r} 0 0 1 ${size - strokeWidth / 2} ${mid}`\n const height = size / 2 + strokeWidth / 2\n\n return (\n <div\n data-iris-gauge=\"\"\n data-status={status}\n role=\"meter\"\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={`${percent}%`}\n aria-label={ariaLabel}\n className={className}\n style={{ position: 'relative', display: 'inline-block', width: size, ...style }}\n >\n <svg width={size} height={height} viewBox={`0 0 ${size} ${height}`} aria-hidden=\"true\">\n <path\n d={d}\n fill=\"none\"\n stroke=\"var(--iris-border)\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n />\n <path\n data-iris-gauge-value=\"\"\n d={d}\n fill=\"none\"\n stroke={COLOR[status]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={arc}\n strokeDashoffset={offset}\n style={{ transition: 'stroke-dashoffset 200ms ease' }}\n />\n </svg>\n {showValue ? (\n <div\n data-iris-gauge-label=\"\"\n style={{\n position: 'absolute',\n insetBlockEnd: 0,\n insetInlineStart: 0,\n width: '100%',\n textAlign: 'center',\n fontSize: Math.round(size * 0.18),\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {format ? format(value, percent) : `${percent}%`}\n </div>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisMarqueeDirection = 'left' | 'right'\n\nexport interface IrisMarqueeProps {\n children?: React.ReactNode\n /** Seconds for one full loop. */\n duration?: number\n direction?: IrisMarqueeDirection\n pauseOnHover?: boolean\n /** Gap between the repeated copies (px). */\n gap?: number\n style?: React.CSSProperties\n className?: string\n}\n\nfunction prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches\n )\n}\n\n/**\n * Marquee: an accessible auto-scrolling ticker. The content is rendered twice\n * (the second copy `aria-hidden`) for a seamless loop and animated with the Web\n * Animations API (no `@keyframes` injection). Pauses on hover and is disabled\n * under `prefers-reduced-motion`.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisMarquee}.\n */\nexport function IrisMarquee({\n children,\n duration = 10,\n direction = 'left',\n pauseOnHover = true,\n gap = 40,\n style,\n className,\n}: IrisMarqueeProps): React.ReactElement {\n const trackRef = React.useRef<HTMLDivElement | null>(null)\n const animRef = React.useRef<Animation | null>(null)\n\n React.useEffect(() => {\n const el = trackRef.current\n if (!el || typeof el.animate !== 'function' || prefersReducedMotion()) return\n const frames =\n direction === 'left'\n ? [{ transform: 'translateX(0%)' }, { transform: 'translateX(-50%)' }]\n : [{ transform: 'translateX(-50%)' }, { transform: 'translateX(0%)' }]\n const anim = el.animate(frames, {\n duration: Math.max(1, duration) * 1000,\n iterations: Infinity,\n })\n animRef.current = anim\n return () => {\n anim.cancel()\n animRef.current = null\n }\n }, [duration, direction])\n\n const copy = (hidden: boolean) => (\n <div\n data-iris-marquee-content=\"\"\n aria-hidden={hidden ? 'true' : undefined}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap,\n flexShrink: 0,\n paddingInlineEnd: gap,\n }}\n >\n {children}\n </div>\n )\n\n return (\n <div\n data-iris-marquee=\"\"\n className={className}\n onMouseEnter={() => {\n if (pauseOnHover) animRef.current?.pause()\n }}\n onMouseLeave={() => {\n if (pauseOnHover) animRef.current?.play()\n }}\n style={{ display: 'flex', overflow: 'hidden', ...style }}\n >\n <div\n ref={trackRef}\n data-iris-marquee-track=\"\"\n style={{ display: 'inline-flex', flexShrink: 0, willChange: 'transform' }}\n >\n {copy(false)}\n {copy(true)}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisMasonryProps {\n /** Number of columns. */\n columns?: number\n /** Gap between items (px). */\n gap?: number\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Masonry layout: flows children into balanced columns via CSS multi-column,\n * with each item kept from breaking across columns — for card grids and\n * galleries of varying heights.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisMasonry}.\n */\nexport function IrisMasonry({\n columns = 3,\n gap = 16,\n children,\n style,\n className,\n}: IrisMasonryProps): React.ReactElement {\n return (\n <div\n data-iris-masonry=\"\"\n data-columns={columns}\n className={className}\n style={{ columnCount: columns, columnGap: gap, ...style }}\n >\n {React.Children.map(children, (child) => (\n <div data-iris-masonry-item=\"\" style={{ breakInside: 'avoid', marginBlockEnd: gap }}>\n {child}\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisFieldsetProps {\n legend?: React.ReactNode\n /** Disables the whole group (native fieldset disabling propagates to controls). */\n disabled?: boolean\n hint?: React.ReactNode\n children?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Fieldset: a semantic `<fieldset>` / `<legend>` form grouping. `disabled` uses\n * the native fieldset behavior that cascades to every nested form control —\n * accessible by construction.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisFieldset}.\n */\nexport function IrisFieldset({\n legend,\n disabled = false,\n hint,\n children,\n style,\n className,\n}: IrisFieldsetProps): React.ReactElement {\n return (\n <fieldset\n data-iris-fieldset=\"\"\n disabled={disabled}\n className={className}\n style={{\n minInlineSize: 0,\n margin: 0,\n padding: 16,\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n opacity: disabled ? 0.6 : 1,\n ...style,\n }}\n >\n {legend != null ? (\n <legend\n data-iris-fieldset-legend=\"\"\n style={{\n padding: '0 6px',\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n }}\n >\n {legend}\n </legend>\n ) : null}\n {hint != null ? (\n <div\n data-iris-fieldset-hint=\"\"\n style={{ fontSize: 12, color: 'var(--iris-muted)', marginBlockEnd: 8 }}\n >\n {hint}\n </div>\n ) : null}\n {children}\n </fieldset>\n )\n}\n","import * as React from 'react'\nimport {\n createKeyboardNav,\n type KeyboardNavAction,\n type KeyboardNavController,\n} from '@iris-ui-kit/core'\n\nexport type IrisToolbarOrientation = 'horizontal' | 'vertical'\n\nexport interface IrisToolbarProps {\n children?: React.ReactNode\n orientation?: IrisToolbarOrientation\n ariaLabel?: string\n style?: React.CSSProperties\n className?: string\n}\n\nconst SELECTOR = 'button, [href], input, select, textarea, [tabindex]'\n\n/**\n * Toolbar: a `role=\"toolbar\"` grouping of actions with roving-tabindex keyboard\n * navigation — one item is in the tab order, and Arrow keys (per orientation)\n * plus Home/End move focus and the tab stop between the focusable children.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisToolbar}.\n *\n * Keyboard navigation is single-sourced in `createKeyboardNav` from the core\n * package — the controller handles orientation-aware Arrow keys, looping, and\n * Home/End; this component only owns the bridge to the DOM (tabindex + focus).\n */\nexport function IrisToolbar({\n children,\n orientation = 'horizontal',\n ariaLabel,\n style,\n className,\n}: IrisToolbarProps): React.ReactElement {\n const ref = React.useRef<HTMLDivElement | null>(null)\n\n const items = React.useCallback((): HTMLElement[] => {\n const root = ref.current\n if (!root) return []\n return (Array.from(root.querySelectorAll(SELECTOR)) as HTMLElement[]).filter(\n (el) => !el.hasAttribute('disabled'),\n )\n }, [])\n\n // ── Keyboard navigation (single-sourced in core controller) ────────────\n\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({\n count: 0,\n loop: true,\n orientation,\n isEnabled: () => true,\n })\n }\n const nav = navRef.current\n\n // Keep the controller's item count in sync whenever children re-render.\n React.useEffect(() => {\n nav.reset(items().length)\n })\n\n // Initial roving tabindex: the first (enabled) item is reachable via Tab,\n // the rest are only reachable via arrow keys.\n React.useEffect(() => {\n items().forEach((el, i) => {\n el.tabIndex = i === 0 ? 0 : -1\n })\n }, [items])\n\n const updateTabIndexes = (target: number, list: HTMLElement[]): void => {\n list.forEach((el, i) => {\n el.tabIndex = i === target ? 0 : -1\n })\n }\n\n // Keep the nav index in sync when focus moves to a child by any means\n // (click, Tab, programmatic focus) — the nav controller's internal index\n // must match the actual focused element for correct wrapping behaviour.\n const onFocusCapture = (e: React.FocusEvent<HTMLDivElement>): void => {\n const list = items()\n const idx = list.indexOf(e.target as HTMLElement)\n if (idx >= 0) nav.focus(idx)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n const list = items()\n if (list.length === 0) return\n\n // Only route navigation keys through the controller — let Enter / Space\n // activate native button behaviour unhindered.\n const navKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End']\n if (!navKeys.includes(e.key)) return\n\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n\n if (action.type === 'focus') {\n updateTabIndexes(action.target, list)\n list[action.target]?.focus()\n }\n // 'previous' / 'next' are cross-orientation arrows (e.g. ArrowUp in\n // horizontal mode) — the toolbar ignores them.\n // 'noop' — the key had no effect, nothing to do.\n }\n\n return (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-orientation={orientation}\n aria-label={ariaLabel}\n data-iris-toolbar=\"\"\n data-orientation={orientation}\n className={className}\n onFocusCapture={onFocusCapture}\n onKeyDown={onKeyDown}\n style={{\n display: 'inline-flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n alignItems: 'center',\n gap: 4,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface RadioGroupContextValue {\n name: string\n value: string | null\n setValue: (next: string) => void\n disabled: boolean\n}\n\nexport const RadioGroupContext = React.createContext<RadioGroupContextValue | null>(null)\n","import * as React from 'react'\nimport { RadioGroupContext } from './context'\n\nexport type IrisRadioSize = 'sm' | 'md' | 'lg'\n\nconst DIM_MAP: Record<IrisRadioSize, string> = {\n sm: '14px',\n md: '18px',\n lg: '22px',\n}\n\nexport interface IrisRadioProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'checked' | 'onChange' | 'defaultChecked'\n> {\n value: string\n size?: IrisRadioSize\n children?: React.ReactNode\n}\n\n/** Single radio button. Must be used inside an `IrisRadioGroup`. */\nexport const IrisRadio = React.forwardRef<HTMLInputElement, IrisRadioProps>(function IrisRadio(\n { value, size = 'md', disabled, children, style, ...rest },\n ref,\n) {\n const ctx = React.useContext(RadioGroupContext)\n if (!ctx) throw new Error('IrisRadio must be used inside <IrisRadioGroup>')\n\n const isDisabled = disabled || ctx.disabled\n const isChecked = ctx.value === value\n\n const handleChange = () => {\n if (isDisabled) return\n ctx.setValue(value)\n }\n\n const dim = DIM_MAP[size]\n\n const boxStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: dim,\n height: dim,\n borderRadius: '50%',\n border: `1px solid ${isChecked ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n background: 'var(--iris-background)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.6 : 1,\n transition: 'border-color 120ms ease',\n flexShrink: 0,\n }\n\n const innerDot: React.CSSProperties = {\n width: `calc(${dim} - 8px)`,\n height: `calc(${dim} - 8px)`,\n borderRadius: '50%',\n background: 'var(--iris-primary)',\n transform: isChecked ? 'scale(1)' : 'scale(0)',\n transition: 'transform 120ms ease',\n }\n\n return (\n <label\n data-iris-radio=\"\"\n data-iris-radio-size={size}\n data-state={isChecked ? 'checked' : 'unchecked'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...style,\n }}\n >\n <input\n {...rest}\n ref={ref}\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={handleChange}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n pointerEvents: 'none',\n }}\n />\n <span aria-hidden=\"true\" style={boxStyle}>\n <span style={innerDot} />\n </span>\n {children}\n </label>\n )\n})\n","import * as React from 'react'\nimport { createSelectionModel, type SelectionModel } from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\nimport { RadioGroupContext } from './context'\n\nexport interface IrisRadioGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /** Group name. Auto-generated if omitted. */\n name?: string\n value?: string | null\n defaultValue?: string | null\n onChange?: (next: string) => void\n disabled?: boolean\n orientation?: 'horizontal' | 'vertical'\n children?: React.ReactNode\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisRadioGroup}.\n *\n * @example\n * <IrisRadioGroup value={plan} onChange={setPlan}>\n * <IrisRadio value=\"free\">Free</IrisRadio>\n * <IrisRadio value=\"pro\">Pro</IrisRadio>\n * </IrisRadioGroup>\n */\nexport function IrisRadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n disabled = false,\n orientation = 'vertical',\n style,\n children,\n ...rest\n}: IrisRadioGroupProps): React.ReactElement {\n // Single-selection logic (controlled/uncontrolled) lives in the core model;\n // this group only maps its `string | null` value ⇄ the model's flat key\n // array. A radio never toggles off, so `setValue` uses `model.set`.\n const isControlled = value !== undefined\n const toKeys = (v: string | null | undefined): string[] => (v == null ? [] : [v])\n const modelRef = React.useRef<SelectionModel<string> | null>(null)\n if (modelRef.current === null) {\n modelRef.current = createSelectionModel<string>({\n mode: 'single',\n defaultSelected: toKeys(isControlled ? value : defaultValue),\n onChange: (keys) => onChange?.(keys[0] ?? ''),\n })\n }\n const model = modelRef.current\n const current = useStore(model.store)[0] ?? null\n\n // Controlled: mirror the prop into the model without re-emitting onChange.\n React.useEffect(() => {\n if (isControlled) model.sync(toKeys(value))\n }, [value, isControlled, model])\n\n // Auto-generate via the framework-native, SSR-stable `useId` so the radio\n // group `name` is identical on the server and on client hydration. A\n // module-level counter (the previous approach) increments once per process,\n // so it drifted (`iris-radio-1` server vs `iris-radio-2` client) and broke\n // hydration on the `name` attribute.\n const autoName = React.useId()\n const groupName = name ?? `iris-radio-${autoName}`\n\n const setValue = (next: string) => {\n if (disabled) return\n model.set([next])\n }\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value: current, setValue, disabled }}>\n <div\n {...rest}\n role=\"radiogroup\"\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-radio-group=\"\"\n data-iris-radio-group-orientation={orientation}\n style={{\n display: 'flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n gap: 8,\n ...style,\n }}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n )\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\n\ntype AnyProps = Record<string, unknown>\n\nexport interface IrisSlotProps {\n children?: React.ReactNode\n [key: string]: unknown\n}\n\nfunction mergeRefs<T>(...refs: Array<React.Ref<T> | undefined | null>): React.RefCallback<T> {\n return (value: T | null) => {\n for (const ref of refs) {\n if (!ref) continue\n if (typeof ref === 'function') ref(value)\n else (ref as React.MutableRefObject<T | null>).current = value\n }\n }\n}\n\nfunction isEventHandlerName(key: string): boolean {\n return /^on[A-Z]/.test(key)\n}\n\nfunction mergeSlotProps(slot: AnyProps, child: AnyProps): AnyProps {\n const merged: AnyProps = { ...slot }\n for (const key of Object.keys(child)) {\n const slotValue = slot[key]\n const childValue = child[key]\n if (key === 'style') {\n merged.style = {\n ...((slotValue as React.CSSProperties | undefined) ?? {}),\n ...((childValue as React.CSSProperties | undefined) ?? {}),\n }\n } else if (key === 'className') {\n merged.className = [slotValue, childValue].filter(Boolean).join(' ').trim() || undefined\n } else if (\n isEventHandlerName(key) &&\n typeof slotValue === 'function' &&\n typeof childValue === 'function'\n ) {\n merged[key] = composeEventHandlers(\n slotValue as (e: React.SyntheticEvent) => void,\n childValue as (e: React.SyntheticEvent) => void,\n )\n } else if (childValue !== undefined) {\n merged[key] = childValue\n }\n }\n return merged\n}\n\n/**\n * asChild composition primitive: clones the single React element child and\n * merges the Slot's own props into it. `style` shallow-merges, `className`\n * concatenates, event handlers compose (Slot's first, then child's), and any\n * other prop on the child wins over Slot's. Used as a building block for\n * trigger primitives that want to render-as the consumer's chosen element.\n */\nexport const IrisSlot = React.forwardRef<unknown, IrisSlotProps>(function IrisSlot(\n { children, ...slotProps },\n forwardedRef,\n) {\n if (!React.isValidElement(children)) return null\n const child = children as React.ReactElement<AnyProps>\n const childProps = (child.props ?? {}) as AnyProps\n const merged = mergeSlotProps(slotProps as AnyProps, childProps)\n\n const childRef = (child as unknown as { ref?: React.Ref<unknown> }).ref ?? null\n if (forwardedRef || childRef) {\n ;(merged as { ref?: React.Ref<unknown> }).ref = mergeRefs(\n forwardedRef as React.Ref<unknown>,\n childRef,\n )\n }\n\n return React.cloneElement(child, merged as Partial<AnyProps> & React.Attributes)\n})\n","import * as React from 'react'\n\nexport interface IrisFormFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n label?: string\n hint?: string\n error?: string\n required?: boolean\n /** Override the auto-generated control id. */\n labelFor?: string\n /** Visual size of the label. */\n size?: 'sm' | 'md'\n children?: React.ReactNode\n}\n\ntype InjectableProps = {\n id?: string\n invalid?: boolean\n ariaDescribedby?: string\n}\n\n/**\n * Form-field wrapper that handles the label / hint / error trio with the\n * right a11y plumbing. Non-invasive wrapper around any Iris input primitive\n * (`IrisInput`, `IrisTextarea`, `IrisNumberInput`, `IrisSwitch`, `IrisCheckbox`,\n * `IrisPasswordInput`, …): locates the first valid React element in `children`\n * and clones it with the generated `id`, `aria-describedby`, and `invalid`.\n *\n * ```tsx\n * <IrisFormField label=\"Email\" error={errors.email} hint=\"We never share it.\">\n * <IrisInput value={email} onChange={setEmail} />\n * </IrisFormField>\n * ```\n */\nexport const IrisFormField = React.forwardRef<HTMLDivElement, IrisFormFieldProps>(\n function IrisFormField(\n { label, hint, error, required = false, labelFor, size = 'md', style, children, ...rest },\n ref,\n ) {\n const generated = React.useId()\n const controlId = labelFor || `${generated}-control`\n const hintId = `${generated}-hint`\n const errorId = `${generated}-error`\n\n const describedBy = React.useMemo(() => {\n const ids: string[] = []\n if (hint && !error) ids.push(hintId)\n if (error) ids.push(errorId)\n return ids.length > 0 ? ids.join(' ') : undefined\n }, [hint, error, hintId, errorId])\n\n let injected = false\n const decorated = React.Children.map(children, (child) => {\n if (!injected && React.isValidElement(child)) {\n injected = true\n const injectedProps: InjectableProps = {\n id: controlId,\n invalid: error ? true : undefined,\n ariaDescribedby: describedBy,\n }\n return React.cloneElement(child, injectedProps as Partial<unknown> as React.Attributes)\n }\n return child\n })\n\n const labelStyle: React.CSSProperties = {\n fontSize: size === 'sm' ? '12px' : '14px',\n fontWeight: 500,\n color: error ? 'var(--iris-danger)' : 'var(--iris-foreground)',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }\n\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-form-field=\"\"\n data-iris-form-field-state={error ? 'invalid' : 'valid'}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n ...style,\n }}\n >\n {label ? (\n <label htmlFor={controlId} data-iris-form-field-label=\"\" style={labelStyle}>\n {label}\n {required ? (\n <span\n aria-hidden=\"true\"\n data-iris-form-field-required=\"\"\n style={{ color: 'var(--iris-danger)' }}\n >\n *\n </span>\n ) : null}\n </label>\n ) : null}\n {decorated}\n {hint && !error ? (\n <div\n id={hintId}\n data-iris-form-field-hint=\"\"\n style={{ fontSize: 12, color: 'var(--iris-muted)' }}\n >\n {hint}\n </div>\n ) : null}\n {error ? (\n <div\n id={errorId}\n data-iris-form-field-error=\"\"\n role=\"alert\"\n style={{ fontSize: 12, color: 'var(--iris-danger)' }}\n >\n {error}\n </div>\n ) : null}\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport {\n autoUpdate,\n computePosition,\n arrow as arrowMiddleware,\n flip as flipMiddleware,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n size as sizeMiddleware,\n type Middleware,\n type Placement,\n type Strategy,\n} from '@floating-ui/dom'\n\nexport interface UseFloatingOptions {\n /** Element the floating panel is positioned relative to. */\n anchor: React.RefObject<HTMLElement | null>\n /** The floating element itself. */\n floating: React.RefObject<HTMLElement | null>\n /** Whether the floating element is visible. Controls `autoUpdate` lifecycle. */\n open: boolean\n /** Default placement. Floating UI may flip it if `flip` is true. */\n placement?: Placement\n /** CSS position strategy. */\n strategy?: Strategy\n /** Pixel offset between anchor and floating element. */\n offset?: number\n /** Flip to the opposite side when the requested side overflows. Default `true`. */\n flip?: boolean\n /** Shift along the cross-axis to stay in view. Default `true`. */\n shift?: boolean\n /**\n * Constrain the floating element to the available viewport space — sets\n * `maxWidth`/`maxHeight` (minus 8px padding) on it so a long dropdown/popover\n * never overflows the screen (pair with `overflow:auto` for scroll). Off by\n * default. Pass a number to override the viewport padding.\n */\n size?: boolean | number\n /** Extra Floating UI middleware to append. */\n middleware?: Middleware[]\n /**\n * Optional ref to an arrow element inside the floating panel. When provided,\n * `arrowX`, `arrowY`, and `arrowSide` in the return value are populated by the\n * `@floating-ui/dom` arrow middleware so you can position the caret CSS.\n */\n arrow?: React.RefObject<HTMLElement | null>\n}\n\nexport interface UseFloatingReturn {\n x: number\n y: number\n strategy: Strategy\n finalPlacement: Placement\n /** Ready-to-bind inline style object for the floating element. */\n floatingStyles: React.CSSProperties\n /** Trigger a manual recompute. Usually not needed — `autoUpdate` handles scroll/resize. */\n update: () => Promise<void>\n /** Arrow x offset (px from floating start edge). Present when `arrow` option is set. */\n arrowX: number | undefined\n /** Arrow y offset (px from floating start edge). Present when `arrow` option is set. */\n arrowY: number | undefined\n /**\n * The side of the floating element the arrow is on — use as the CSS property\n * to apply `bottom: 0` / `top: 0` etc. to the arrow element.\n * E.g. `'bottom'` placement → arrow is on `'top'` of the floating element.\n */\n arrowSide: 'top' | 'right' | 'bottom' | 'left' | undefined\n}\n\n/**\n * Reactive Floating UI integration for React. Subscribes `autoUpdate`\n * whenever `open === true` and both refs are populated; tears it down on\n * close, unmount, or ref clearing.\n *\n * Pure positioning — does NOT render anything, does NOT manage focus,\n * does NOT handle dismiss behavior. Those concerns live in the consuming\n * primitive (Popover, Tooltip, Dialog, Menu, …).\n */\nexport function useFloating(options: UseFloatingOptions): UseFloatingReturn {\n const {\n anchor,\n floating,\n open,\n placement = 'bottom',\n strategy = 'absolute',\n offset,\n flip = true,\n shift = true,\n size = false,\n middleware: extraMiddleware,\n arrow,\n } = options\n\n const [x, setX] = React.useState(0)\n const [y, setY] = React.useState(0)\n const [finalPlacement, setFinalPlacement] = React.useState<Placement>(placement)\n const [arrowX, setArrowX] = React.useState<number | undefined>()\n const [arrowY, setArrowY] = React.useState<number | undefined>()\n\n const middleware = React.useMemo<Middleware[]>(() => {\n const mw: Middleware[] = []\n if (offset !== undefined) mw.push(offsetMiddleware(offset))\n if (flip) mw.push(flipMiddleware())\n if (shift) mw.push(shiftMiddleware({ padding: 8 }))\n if (size) {\n const padding = typeof size === 'number' ? size : 8\n mw.push(\n sizeMiddleware({\n padding,\n apply({ availableWidth, availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxWidth: `${Math.max(0, Math.floor(availableWidth))}px`,\n maxHeight: `${Math.max(0, Math.floor(availableHeight))}px`,\n })\n },\n }),\n )\n }\n if (arrow?.current) mw.push(arrowMiddleware({ element: arrow.current }))\n if (extraMiddleware) mw.push(...extraMiddleware)\n return mw\n }, [offset, flip, shift, size, extraMiddleware, arrow])\n\n // Hold the latest middleware in a ref so `update` always sees current value\n // without being re-created (which would churn the autoUpdate subscription).\n const middlewareRef = React.useRef(middleware)\n middlewareRef.current = middleware\n\n // Monotonic token bumped on every new positioning cycle and on teardown.\n // `computePosition` is async; without this guard a result that resolves\n // after the panel closed/unmounted (or after a newer update started) would\n // apply stale coordinates and call setState on an unmounted component.\n const epochRef = React.useRef(0)\n\n const update = React.useCallback(async () => {\n const a = anchor.current\n const f = floating.current\n if (!a || !f) return\n const token = ++epochRef.current\n const result = await computePosition(a, f, {\n placement,\n strategy,\n middleware: middlewareRef.current,\n })\n // A newer update() started, or the effect tore down, while awaiting — drop.\n if (token !== epochRef.current) return\n setX(result.x)\n setY(result.y)\n setFinalPlacement(result.placement)\n const arrowData = result.middlewareData.arrow as { x?: number; y?: number } | undefined\n setArrowX(arrowData?.x)\n setArrowY(arrowData?.y)\n }, [anchor, floating, placement, strategy])\n\n React.useEffect(() => {\n if (!open) return\n const a = anchor.current\n const f = floating.current\n if (!a || !f) return\n const cleanup = autoUpdate(a, f, () => {\n void update()\n })\n return () => {\n // Invalidate any in-flight update() so its late result never lands.\n epochRef.current++\n cleanup()\n }\n }, [open, anchor, floating, update])\n\n const floatingStyles = React.useMemo<React.CSSProperties>(\n () => ({\n position: strategy,\n top: 0,\n left: 0,\n transform: `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`,\n width: 'max-content',\n }),\n [strategy, x, y],\n )\n\n const OPPOSITE: Record<string, 'top' | 'right' | 'bottom' | 'left'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n }\n const arrowSide = OPPOSITE[finalPlacement.split('-')[0]] as\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | undefined\n\n return { x, y, strategy, finalPlacement, floatingStyles, update, arrowX, arrowY, arrowSide }\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { createHoverIntent, type Placement } from '@iris-ui-kit/core'\nimport { useFloating } from '../../floating/useFloating'\nimport { IrisSlot } from '../slot/Slot'\n\nexport interface IrisTooltipProps {\n /** Plain-text tooltip content. */\n content?: React.ReactNode\n /** Side relative to the trigger; may flip to stay in view. */\n placement?: Placement\n /** Pixel offset between trigger and tooltip. */\n offset?: number\n /** Hover/focus dwell before opening, in ms. */\n openDelay?: number\n /** Hover/blur dwell before closing, in ms. */\n closeDelay?: number\n /** Portal target. `false` renders in place; an HTMLElement renders inside it; default = `document.body`. */\n portalTarget?: HTMLElement | false\n /** Disable the tooltip without removing the trigger. */\n disabled?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Hover / focus triggered tooltip. Powered by `createHoverIntent` state machine.\n *\n * Zero-delay uses `hi.open()`/`hi.close()` (FORCE_OPEN/FORCE_CLOSE — single\n * machine transition) so React renders synchronously. Positive delays use\n * `hi.pointerEnter()`/`hi.pointerLeave()` with the machine's `after` timer.\n *\n * @example\n * <IrisTooltip content=\"Save changes\">\n * <button>Save</button>\n * </IrisTooltip>\n */\nexport function IrisTooltip({\n content,\n placement = 'top',\n offset = 6,\n openDelay = 600,\n closeDelay = 0,\n portalTarget,\n disabled = false,\n children,\n}: IrisTooltipProps): React.ReactElement | null {\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const floatingRef = React.useRef<HTMLElement | null>(null)\n const tooltipId = React.useId()\n\n const [open, setOpen] = React.useState(false)\n\n // createHoverIntent keyed on delays; onChange syncs React state.\n // setOpen from useState is stable across renders so useMemo dep is clean.\n const hi = React.useMemo(\n () => createHoverIntent({ openDelay, closeDelay, onChange: setOpen }),\n [openDelay, closeDelay],\n )\n\n // Cleanup on unmount or when delays change.\n React.useEffect(() => () => hi.stop(), [hi])\n\n // Escape immediately closes (skips closeDelay).\n React.useEffect(() => {\n if (!open) return\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') hi.close()\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [open, hi])\n\n // If `disabled` flips while open, close immediately.\n React.useEffect(() => {\n if (disabled && open) hi.close()\n }, [disabled, open, hi])\n\n const { floatingStyles } = useFloating({\n anchor: triggerRef,\n floating: floatingRef,\n open,\n placement,\n offset,\n })\n\n const captureTriggerRef = React.useCallback((el: HTMLElement | null) => {\n triggerRef.current = el\n }, [])\n\n const captureFloatingRef = React.useCallback((el: HTMLElement | null) => {\n floatingRef.current = el\n }, [])\n\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisTooltip requires a single React element child as trigger')\n }\n return null\n }\n\n // 0-delay → FORCE_OPEN/COSE (single machine transition, sync React render).\n // Positive delay → pointerEnter/Leave (machine after-timer).\n const handleEnter = React.useCallback(\n () => (openDelay > 0 ? hi.pointerEnter() : hi.open()),\n [openDelay, hi],\n )\n const handleLeave = React.useCallback(\n () => (closeDelay > 0 ? hi.pointerLeave() : hi.close()),\n [closeDelay, hi],\n )\n\n const tooltipNode = open ? (\n <div\n ref={captureFloatingRef as React.Ref<HTMLDivElement>}\n id={tooltipId}\n role=\"tooltip\"\n data-state=\"open\"\n data-placement={placement}\n style={{\n ...floatingStyles,\n background: 'var(--iris-foreground)',\n color: 'var(--iris-background)',\n padding: '4px 8px',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n fontSize: '12px',\n lineHeight: 1.4,\n maxWidth: '240px',\n pointerEvents: 'none',\n zIndex: 1100,\n }}\n >\n {content}\n </div>\n ) : null\n\n const portaled =\n tooltipNode && portalTarget !== false\n ? createPortal(tooltipNode, portalTarget ?? document.body)\n : tooltipNode\n\n return (\n <>\n <IrisSlot\n ref={captureTriggerRef as React.Ref<unknown>}\n onPointerEnter={handleEnter}\n onPointerLeave={handleLeave}\n onFocus={() => hi.open()}\n onBlur={() => hi.close()}\n aria-describedby={open ? tooltipId : undefined}\n >\n {children}\n </IrisSlot>\n {portaled}\n </>\n )\n}\n","import * as React from 'react'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface PopoverContextValue {\n open: boolean\n setOpen: (next: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n}\n\nexport const PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\nexport function usePopoverContext(componentName: string): PopoverContextValue {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be a descendant of <IrisPopover>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../useMachine'\nimport { PopoverContext } from './context'\n\nexport interface IrisPopoverProps {\n /** Controlled open value. Combine with `onOpenChange`. */\n open?: boolean\n /** Initial open value in uncontrolled mode. */\n defaultOpen?: boolean\n /** Called whenever the open state changes (controlled or uncontrolled). */\n onOpenChange?: (open: boolean) => void\n /** Anchor placement; may be flipped by Floating UI to stay in view. */\n placement?: Placement\n /** Distance in px between trigger and content. */\n offset?: number\n children?: React.ReactNode\n}\n\n/**\n * Root provider for a Popover surface. Wraps the trigger and the content,\n * threads a state machine + DOM refs + positioning options through context.\n * Supports controlled (`open` + `onOpenChange`) and uncontrolled (`defaultOpen`)\n * modes.\n *\n * @example\n * <IrisPopover defaultOpen={false} placement=\"bottom-start\">\n * <IrisPopoverTrigger>Click me</IrisPopoverTrigger>\n * <IrisPopoverContent>Hello</IrisPopoverContent>\n * </IrisPopover>\n */\nexport function IrisPopover({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 8,\n children,\n}: IrisPopoverProps): React.ReactElement {\n const isControlled = openProp !== undefined\n\n const [state, send] = useMachine(() => createFloatingMachine(defaultOpen ? 'open' : 'closed'))\n const internalOpen = state.value === 'open'\n\n // Sync controlled prop → machine.\n React.useEffect(() => {\n if (!isControlled) return\n const target = openProp ? 'open' : 'closed'\n if (state.value !== target) {\n send({ type: openProp ? 'OPEN' : 'CLOSE' })\n }\n }, [isControlled, openProp, state.value, send])\n\n const open = isControlled ? Boolean(openProp) : internalOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n send({ type: next ? 'OPEN' : 'CLOSE' })\n }\n onOpenChange?.(next)\n },\n [isControlled, send, onOpenChange],\n )\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const contentId = React.useId()\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId,\n placement,\n offset,\n }),\n [open, setOpen, contentId, placement, offset],\n )\n\n return <PopoverContext.Provider value={value}>{children}</PopoverContext.Provider>\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { usePopoverContext } from './context'\n\nexport interface IrisPopoverTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Use the single child as the trigger instead of rendering a `<button>`. */\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The element the user interacts with to toggle the Popover. Renders a\n * `<button type=\"button\">` by default; pass `asChild` to attach behavior to\n * any single element (e.g. `<IrisButton>` or `<a>`).\n *\n * a11y attributes wired automatically:\n * - `aria-haspopup=\"dialog\"`\n * - `aria-expanded=\"true|false\"` driven by the open state\n * - `aria-controls` pointing at the content's id\n */\nexport const IrisPopoverTrigger = React.forwardRef<HTMLElement, IrisPopoverTriggerProps>(\n function IrisPopoverTrigger({ asChild = false, onClick, children, ...rest }, forwardedRef) {\n const ctx = usePopoverContext('IrisPopoverTrigger')\n\n const captureRef = React.useCallback(\n (el: HTMLElement | null) => {\n ctx.triggerRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(!ctx.open),\n )\n\n const triggerProps = {\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open ? 'open' : 'closed',\n onClick: handleClick,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisPopoverTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={captureRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={captureRef as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\n\nexport interface UseDismissOptions {\n /** While true, the dismiss listeners are active. */\n enabled: boolean\n /** Elements that, if clicked, should NOT trigger dismiss (typically trigger + content). */\n exclude: Array<React.RefObject<HTMLElement | null>>\n /** Called when the user attempts to dismiss the surface. */\n onDismiss: () => void\n /** Close on Escape key. Default `true`. */\n escape?: boolean\n /** Close on pointerdown outside the excluded elements. Default `true`. */\n outsidePointerDown?: boolean\n}\n\n/**\n * Listen for the universal \"dismiss\" gestures: Escape key and outside\n * pointer-down. Used by Popover / Menu / Dropdown. Tooltip does NOT use this —\n * it dismisses on mouseleave/blur instead.\n *\n * Listeners attach to `document` (pointerdown in the capture phase, mirroring\n * the Vue adapter) only while `enabled` is true, and detach on disable /\n * unmount. SSR-safe (no-op without `document`). The latest `onDismiss` /\n * `exclude` are read through refs so toggling them never re-subscribes.\n */\nexport function useDismiss(options: UseDismissOptions): void {\n const { enabled, escape = true, outsidePointerDown = true } = options\n\n const onDismissRef = React.useRef(options.onDismiss)\n const excludeRef = React.useRef(options.exclude)\n React.useEffect(() => {\n onDismissRef.current = options.onDismiss\n excludeRef.current = options.exclude\n })\n\n React.useEffect(() => {\n if (!enabled || typeof document === 'undefined') return\n\n const isExcluded = (target: EventTarget | null): boolean => {\n if (!target || !(target instanceof Node)) return false\n for (const r of excludeRef.current) {\n const el = r.current\n if (el && (el === target || el.contains(target))) return true\n }\n return false\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (isExcluded(event.target)) return\n onDismissRef.current()\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation()\n onDismissRef.current()\n }\n }\n\n if (outsidePointerDown) document.addEventListener('pointerdown', onPointerDown, true)\n if (escape) document.addEventListener('keydown', onKeyDown)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [enabled, escape, outsidePointerDown])\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useFloating } from '../../floating/useFloating'\nimport { useDismiss } from '../../floating/useDismiss'\nimport { usePopoverContext } from './context'\n\nexport interface IrisPopoverContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Portal target. `false` renders in place; an HTMLElement renders inside it; default = `document.body`. */\n portalTarget?: HTMLElement | false\n /** Move focus into the content on open (default: true). */\n autoFocus?: boolean\n /** Restore focus to the trigger on close (default: true). */\n restoreFocus?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The floating panel rendered when the Popover is open. Position is computed\n * by `useFloating` (Floating UI); dismissal is handled by document-level\n * pointerdown + Escape listeners. Focus moves into the content on open and\n * back to the trigger on close.\n *\n * The content is portaled to `document.body` by default to avoid stacking /\n * overflow / z-index foot-guns. Pass `portalTarget={false}` to render inline.\n */\nexport const IrisPopoverContent = React.forwardRef<HTMLDivElement, IrisPopoverContentProps>(\n function IrisPopoverContent(\n { portalTarget, autoFocus = true, restoreFocus = true, style, children, ...rest },\n forwardedRef,\n ) {\n const ctx = usePopoverContext('IrisPopoverContent')\n\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n innerRef.current = el\n ctx.contentRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n // Outside-pointerdown + Escape dismiss (shared floating hook).\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, ctx.contentRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus management.\n const lastFocusedRef = React.useRef<HTMLElement | null>(null)\n const wasOpenRef = React.useRef(false)\n React.useEffect(() => {\n if (ctx.open && !wasOpenRef.current) {\n lastFocusedRef.current =\n (document.activeElement as HTMLElement | null) ?? ctx.triggerRef.current\n if (autoFocus) {\n // Defer to next microtask so the content is mounted/painted.\n queueMicrotask(() => {\n innerRef.current?.focus()\n })\n }\n } else if (!ctx.open && wasOpenRef.current) {\n if (restoreFocus) {\n const target = ctx.triggerRef.current ?? lastFocusedRef.current\n target?.focus()\n }\n }\n wasOpenRef.current = ctx.open\n }, [ctx.open, autoFocus, restoreFocus, ctx.triggerRef])\n\n if (!ctx.open) return null\n\n const node = (\n <div\n {...rest}\n ref={captureRef}\n id={ctx.contentId}\n role=\"dialog\"\n tabIndex={-1}\n data-state=\"open\"\n data-placement={ctx.placement}\n style={{\n ...floatingStyles,\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: 'var(--iris-padding-md, 12px)',\n boxShadow: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\n fontSize: 14,\n zIndex: 1000,\n outline: 'none',\n ...style,\n }}\n >\n {children}\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n },\n)\n","import * as React from 'react'\n\nexport interface DialogContextValue {\n open: boolean\n setOpen: (next: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n titleId: string\n descriptionId: string\n hasTitle: boolean\n hasDescription: boolean\n registerTitle: () => () => void\n registerDescription: () => () => void\n closeOnOutsideClick: boolean\n closeOnEscape: boolean\n}\n\nexport const DialogContext = React.createContext<DialogContextValue | null>(null)\n\nexport function useDialogContext(componentName: string): DialogContextValue {\n const ctx = React.useContext(DialogContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be a descendant of <IrisDialog>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createFloatingMachine } from '@iris-ui-kit/core'\nimport { useMachine } from '../../useMachine'\nimport { DialogContext } from './context'\n\nexport interface IrisDialogProps {\n /** Controlled open value. Combine with `onOpenChange`. */\n open?: boolean\n /** Initial open value in uncontrolled mode. */\n defaultOpen?: boolean\n /** Emitted whenever the open state changes. */\n onOpenChange?: (open: boolean) => void\n /** Close on backdrop click. Default `true`. */\n closeOnOutsideClick?: boolean\n /** Close on Escape key. Default `true`. */\n closeOnEscape?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Modal dialog root. Wraps a Trigger + Content (+ optional Title /\n * Description / Close) and threads a state machine + DOM refs + IDs through\n * React context. Supports controlled (`open` + `onOpenChange`) and\n * uncontrolled (`defaultOpen`) modes.\n *\n * Unlike `IrisPopover`, Dialog:\n * - centers content with no anchor positioning,\n * - locks body scroll while open,\n * - traps Tab focus inside the content,\n * - renders a backdrop overlay that dismisses on click.\n *\n * @example\n * <IrisDialog>\n * <IrisDialogTrigger>Open</IrisDialogTrigger>\n * <IrisDialogContent>\n * <IrisDialogTitle>Confirm</IrisDialogTitle>\n * <IrisDialogClose>Done</IrisDialogClose>\n * </IrisDialogContent>\n * </IrisDialog>\n */\nexport function IrisDialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n closeOnOutsideClick = true,\n closeOnEscape = true,\n children,\n}: IrisDialogProps): React.ReactElement {\n const isControlled = openProp !== undefined\n\n const [state, send] = useMachine(() => createFloatingMachine(defaultOpen ? 'open' : 'closed'))\n const internalOpen = state.value === 'open'\n\n React.useEffect(() => {\n if (!isControlled) return\n const target = openProp ? 'open' : 'closed'\n if (state.value !== target) {\n send({ type: openProp ? 'OPEN' : 'CLOSE' })\n }\n }, [isControlled, openProp, state.value, send])\n\n const open = isControlled ? Boolean(openProp) : internalOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n send({ type: next ? 'OPEN' : 'CLOSE' })\n }\n onOpenChange?.(next)\n },\n [isControlled, send, onOpenChange],\n )\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const contentId = React.useId()\n const titleId = React.useId()\n const descriptionId = React.useId()\n\n // Title/Description registration via refcount — multiple children possible\n // (rare, but allowed); aria-labelledby is wired iff at least one is mounted.\n const titleCountRef = React.useRef(0)\n const descCountRef = React.useRef(0)\n const [hasTitle, setHasTitle] = React.useState(false)\n const [hasDescription, setHasDescription] = React.useState(false)\n\n const registerTitle = React.useCallback(() => {\n titleCountRef.current += 1\n setHasTitle(true)\n return () => {\n titleCountRef.current -= 1\n if (titleCountRef.current <= 0) setHasTitle(false)\n }\n }, [])\n const registerDescription = React.useCallback(() => {\n descCountRef.current += 1\n setHasDescription(true)\n return () => {\n descCountRef.current -= 1\n if (descCountRef.current <= 0) setHasDescription(false)\n }\n }, [])\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId,\n titleId,\n descriptionId,\n hasTitle,\n hasDescription,\n registerTitle,\n registerDescription,\n closeOnOutsideClick,\n closeOnEscape,\n }),\n [\n open,\n setOpen,\n contentId,\n titleId,\n descriptionId,\n hasTitle,\n hasDescription,\n registerTitle,\n registerDescription,\n closeOnOutsideClick,\n closeOnEscape,\n ],\n )\n\n return <DialogContext.Provider value={value}>{children}</DialogContext.Provider>\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { useDialogContext } from './context'\n\nexport interface IrisDialogTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n /** Use the single child as the trigger instead of rendering a `<button>`. */\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The element the user clicks to open the dialog. Renders a\n * `<button type=\"button\">` by default; pass `asChild` to attach behavior\n * to any single element.\n */\nexport const IrisDialogTrigger = React.forwardRef<HTMLElement, IrisDialogTriggerProps>(\n function IrisDialogTrigger({ asChild = false, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext('IrisDialogTrigger')\n\n const captureRef = React.useCallback(\n (el: HTMLElement | null) => {\n ctx.triggerRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(true),\n )\n\n const triggerProps = {\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open ? 'open' : 'closed',\n onClick: handleClick,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDialogTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={captureRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={captureRef as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\n\nlet lockCount = 0\nlet savedOverflow: string | null = null\nlet savedPaddingRight: string | null = null\n// What we actually wrote, so unlock can detect a host mutation made while\n// locked and avoid clobbering it.\nlet appliedOverflow: string | null = null\nlet appliedPaddingRight: string | null = null\n\nfunction lock(): void {\n if (typeof document === 'undefined') return\n lockCount += 1\n if (lockCount > 1) return\n const body = document.body\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n savedOverflow = body.style.overflow\n savedPaddingRight = body.style.paddingRight\n body.style.overflow = 'hidden'\n appliedOverflow = 'hidden'\n if (scrollbarWidth > 0) {\n const currentPadding = parseFloat(getComputedStyle(body).paddingRight || '0')\n appliedPaddingRight = `${currentPadding + scrollbarWidth}px`\n body.style.paddingRight = appliedPaddingRight\n } else {\n appliedPaddingRight = null\n }\n}\n\nfunction unlock(): void {\n if (typeof document === 'undefined') return\n lockCount = Math.max(0, lockCount - 1)\n if (lockCount > 0) return\n const body = document.body\n // Only restore if our locked value is still in place; if a host changed body\n // overflow / padding-right while locked, respect that rather than clobber it.\n if (body.style.overflow === appliedOverflow) {\n body.style.overflow = savedOverflow ?? ''\n }\n if (appliedPaddingRight !== null && body.style.paddingRight === appliedPaddingRight) {\n body.style.paddingRight = savedPaddingRight ?? ''\n }\n savedOverflow = null\n savedPaddingRight = null\n appliedOverflow = null\n appliedPaddingRight = null\n}\n\n/**\n * Lock the document body's scroll while `active` is true. Reference-counted\n * so multiple stacked overlays cooperate. Restores prior `overflow` and\n * `padding-right` (to compensate for the scrollbar gap) when the last lock\n * releases. SSR-safe.\n */\nexport function useBodyScrollLock(active: boolean): void {\n React.useEffect(() => {\n if (!active) return\n lock()\n return () => {\n unlock()\n }\n }, [active])\n}\n\n/** Test-only: read the current lock count. */\nexport function __getBodyScrollLockCount(): number {\n return lockCount\n}\n\n/** Test-only: hard-reset the module-level lock state. */\nexport function __resetBodyScrollLock(): void {\n lockCount = 0\n savedOverflow = null\n savedPaddingRight = null\n appliedOverflow = null\n appliedPaddingRight = null\n if (typeof document !== 'undefined') {\n document.body.style.overflow = ''\n document.body.style.paddingRight = ''\n }\n}\n","import * as React from 'react'\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n 'audio[controls]',\n 'video[controls]',\n 'iframe',\n 'object',\n 'embed',\n].join(',')\n\nfunction getFocusable(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => !el.hasAttribute('disabled') && el.tabIndex !== -1,\n )\n}\n\nexport interface UseFocusTrapOptions {\n /** Element whose Tab key cycle is being trapped. */\n container: React.RefObject<HTMLElement | null>\n /** Whether the trap is currently active. */\n active: boolean\n /** Element to restore focus to when the trap deactivates. */\n returnFocusTo?: React.RefObject<HTMLElement | null | undefined>\n /** Whether to focus the first focusable element on activation. Default `true`. */\n initialFocus?: boolean\n}\n\n/**\n * Constrain Tab / Shift+Tab focus traversal to descendants of `container`.\n *\n * Behavior on activation:\n * - Records the currently focused element.\n * - If `initialFocus !== false`, focuses the first focusable descendant\n * (or the container itself if there are none).\n *\n * Behavior while active:\n * - Tab on the last focusable element wraps to the first; Shift+Tab on\n * the first wraps to the last.\n *\n * Behavior on deactivation:\n * - Restores focus to `returnFocusTo?.current` if provided, else to the\n * element that was focused when the trap activated.\n */\nexport function useFocusTrap(options: UseFocusTrapOptions): void {\n const { container, active, returnFocusTo, initialFocus = true } = options\n const previouslyFocusedRef = React.useRef<HTMLElement | null>(null)\n\n React.useEffect(() => {\n if (!active) return\n if (typeof document === 'undefined') return\n\n previouslyFocusedRef.current = (document.activeElement as HTMLElement | null) ?? null\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return\n const root = container.current\n if (!root) return\n const focusables = getFocusable(root)\n if (focusables.length === 0) {\n event.preventDefault()\n root.focus()\n return\n }\n const first = focusables[0]!\n const last = focusables[focusables.length - 1]!\n const active = document.activeElement as HTMLElement | null\n\n if (event.shiftKey) {\n if (active === first || !root.contains(active)) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (active === last || !root.contains(active)) {\n event.preventDefault()\n first.focus()\n }\n }\n }\n document.addEventListener('keydown', onKeyDown)\n\n let raf: number | undefined\n if (initialFocus) {\n raf = requestAnimationFrame(() => {\n const root = container.current\n if (!root) return\n const focusables = getFocusable(root)\n ;(focusables[0] ?? root).focus()\n })\n }\n\n return () => {\n document.removeEventListener('keydown', onKeyDown)\n if (raf !== undefined) cancelAnimationFrame(raf)\n const target = returnFocusTo?.current ?? previouslyFocusedRef.current\n requestAnimationFrame(() => {\n // The element that had focus when the trap opened may have been\n // unmounted while it was open; focusing a detached node silently drops\n // focus to <body>. Only restore if it is still in the document.\n if (target && target.isConnected) target.focus?.()\n })\n previouslyFocusedRef.current = null\n }\n }, [active, container, returnFocusTo, initialFocus])\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { useBodyScrollLock } from '../../modal-utils/useBodyScrollLock'\nimport { useFocusTrap } from '../../modal-utils/useFocusTrap'\nimport { IrisSlot } from '../slot/Slot'\nimport { useDialogContext } from './context'\n\nexport interface IrisDialogContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Portal target. `false` renders in place; default = `document.body`. */\n portalTarget?: HTMLElement | false\n children?: React.ReactNode\n}\n\n/**\n * The modal surface (and its backdrop). Renders only while the dialog is\n * open. Behaviors enabled automatically:\n *\n * - **Body scroll lock** — reference-counted across stacked dialogs.\n * - **Focus trap** — Tab cycling within content; restores focus on close.\n * - **Escape to dismiss** — controlled by `Dialog.closeOnEscape`.\n * - **Backdrop click to dismiss** — controlled by `Dialog.closeOnOutsideClick`.\n * - **ARIA** — `role=\"dialog\"`, `aria-modal=\"true\"`, `aria-labelledby` /\n * `aria-describedby` wired automatically when `<IrisDialogTitle>` /\n * `<IrisDialogDescription>` are present.\n */\nexport const IrisDialogContent = React.forwardRef<HTMLDivElement, IrisDialogContentProps>(\n function IrisDialogContent(\n { portalTarget, style, onPointerDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDialogContext('IrisDialogContent')\n\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n innerRef.current = el\n ctx.contentRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n useBodyScrollLock(ctx.open)\n useFocusTrap({\n container: innerRef,\n active: ctx.open,\n returnFocusTo: ctx.triggerRef,\n })\n\n React.useEffect(() => {\n if (!ctx.open || !ctx.closeOnEscape) return\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation()\n ctx.setOpen(false)\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [ctx])\n\n if (!ctx.open) return null\n\n const handleBackdropPointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n if (!ctx.closeOnOutsideClick) return\n if (e.target === e.currentTarget) ctx.setOpen(false)\n }\n\n const handleContentPointerDown = composeEventHandlers(\n onPointerDown as ((e: React.PointerEvent<HTMLDivElement>) => void) | undefined,\n (e: React.PointerEvent<HTMLDivElement>) => e.stopPropagation(),\n )\n\n const node = (\n <div\n data-iris-dialog-backdrop=\"\"\n onPointerDown={handleBackdropPointerDown}\n style={{\n position: 'fixed',\n inset: 0,\n background: 'rgba(0, 0, 0, 0.5)',\n zIndex: 1200,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n }}\n >\n <div\n {...rest}\n ref={captureRef}\n id={ctx.contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.hasTitle ? ctx.titleId : undefined}\n aria-describedby={ctx.hasDescription ? ctx.descriptionId : undefined}\n tabIndex={-1}\n data-state=\"open\"\n onPointerDown={handleContentPointerDown}\n style={{\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-lg, 8px)',\n padding: 'var(--iris-padding-lg, 20px)',\n boxShadow: '0 24px 48px -16px rgba(0,0,0,0.32), 0 8px 16px -4px rgba(0,0,0,0.16)',\n maxWidth: '90vw',\n maxHeight: '85vh',\n overflow: 'auto',\n outline: 'none',\n ...style,\n }}\n >\n {children}\n </div>\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n },\n)\n\nexport interface IrisDialogTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: keyof React.JSX.IntrinsicElements\n}\n\n/**\n * Sets `aria-labelledby` on the dialog content automatically. Renders an\n * `<h2>` by default.\n */\nexport const IrisDialogTitle = React.forwardRef<HTMLElement, IrisDialogTitleProps>(\n function IrisDialogTitle({ as = 'h2', style, children, ...rest }, ref) {\n const ctx = useDialogContext('IrisDialogTitle')\n React.useEffect(() => ctx.registerTitle(), [ctx.registerTitle])\n return React.createElement(\n as,\n {\n ...rest,\n ref,\n id: ctx.titleId,\n style: {\n margin: '0 0 var(--iris-gap-md, 12px) 0',\n fontSize: '18px',\n fontWeight: 600,\n ...style,\n },\n },\n children,\n )\n },\n)\n\nexport interface IrisDialogDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {\n as?: keyof React.JSX.IntrinsicElements\n}\n\n/**\n * Sets `aria-describedby` on the dialog content automatically. Renders a\n * `<p>` by default.\n */\nexport const IrisDialogDescription = React.forwardRef<HTMLElement, IrisDialogDescriptionProps>(\n function IrisDialogDescription({ as = 'p', style, children, ...rest }, ref) {\n const ctx = useDialogContext('IrisDialogDescription')\n React.useEffect(() => ctx.registerDescription(), [ctx.registerDescription])\n return React.createElement(\n as,\n {\n ...rest,\n ref,\n id: ctx.descriptionId,\n style: {\n margin: '0 0 var(--iris-gap-lg, 16px) 0',\n color: 'var(--iris-muted)',\n fontSize: '14px',\n ...style,\n },\n },\n children,\n )\n },\n)\n\nexport interface IrisDialogCloseProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/** Close button. Renders a `<button type=\"button\">` or, with `asChild`, wraps the provided child. */\nexport const IrisDialogClose = React.forwardRef<HTMLElement, IrisDialogCloseProps>(\n function IrisDialogClose({ asChild = false, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDialogContext('IrisDialogClose')\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(false),\n )\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDialogClose asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={forwardedRef as React.Ref<unknown>} {...rest} onClick={handleClick}>\n {children}\n </IrisSlot>\n )\n }\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n ref={forwardedRef as React.Ref<HTMLButtonElement>}\n onClick={handleClick}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisDrawerSide = 'left' | 'right' | 'top' | 'bottom'\n\nexport interface DrawerContextValue {\n open: boolean\n setOpen: (next: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n titleId: string\n side: IrisDrawerSide\n size: string\n hasTitle: boolean\n registerTitle: () => () => void\n closeOnOutsideClick: boolean\n closeOnEscape: boolean\n}\n\nexport const DrawerContext = React.createContext<DrawerContextValue | null>(null)\n\nexport function useDrawerContext(componentName: string): DrawerContextValue {\n const ctx = React.useContext(DrawerContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be a descendant of <IrisDrawer>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createFloatingMachine } from '@iris-ui-kit/core'\nimport { useMachine } from '../../useMachine'\nimport { DrawerContext, type IrisDrawerSide } from './context'\n\nexport interface IrisDrawerProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n side?: IrisDrawerSide\n /** Width (for left/right) or height (for top/bottom). Any CSS length. */\n size?: string\n closeOnOutsideClick?: boolean\n closeOnEscape?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Slide-in overlay. Mirrors `IrisDialog`'s composition but anchors to a\n * screen edge with a transform-based open animation. Defaults to the right.\n *\n * @example\n * <IrisDrawer>\n * <IrisDrawerTrigger>Open</IrisDrawerTrigger>\n * <IrisDrawerContent>\n * <IrisDrawerTitle>Settings</IrisDrawerTitle>\n * <p>…</p>\n * <IrisDrawerClose>Close</IrisDrawerClose>\n * </IrisDrawerContent>\n * </IrisDrawer>\n */\nexport function IrisDrawer({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'right',\n size = '320px',\n closeOnOutsideClick = true,\n closeOnEscape = true,\n children,\n}: IrisDrawerProps): React.ReactElement {\n const isControlled = openProp !== undefined\n\n const [state, send] = useMachine(() => createFloatingMachine(defaultOpen ? 'open' : 'closed'))\n const internalOpen = state.value === 'open'\n\n React.useEffect(() => {\n if (!isControlled) return\n const target = openProp ? 'open' : 'closed'\n if (state.value !== target) {\n send({ type: openProp ? 'OPEN' : 'CLOSE' })\n }\n }, [isControlled, openProp, state.value, send])\n\n const open = isControlled ? Boolean(openProp) : internalOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) {\n send({ type: next ? 'OPEN' : 'CLOSE' })\n }\n onOpenChange?.(next)\n },\n [isControlled, send, onOpenChange],\n )\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const id = React.useId()\n const contentId = `${id}-content`\n const titleId = `${id}-title`\n\n const titleCountRef = React.useRef(0)\n const [hasTitle, setHasTitle] = React.useState(false)\n const registerTitle = React.useCallback(() => {\n titleCountRef.current += 1\n setHasTitle(true)\n return () => {\n titleCountRef.current -= 1\n if (titleCountRef.current <= 0) setHasTitle(false)\n }\n }, [])\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId,\n titleId,\n side,\n size,\n hasTitle,\n registerTitle,\n closeOnOutsideClick,\n closeOnEscape,\n }),\n [\n open,\n setOpen,\n contentId,\n titleId,\n side,\n size,\n hasTitle,\n registerTitle,\n closeOnOutsideClick,\n closeOnEscape,\n ],\n )\n\n return <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { useDrawerContext } from './context'\n\nexport interface IrisDrawerTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The trigger that opens the drawer when clicked. Renders as a `<button>` (or\n * as custom children when `asChild`). Injects `aria-haspopup=\"dialog\"` and\n * `aria-expanded` for screen-reader awareness.\n */\nexport const IrisDrawerTrigger = React.forwardRef<HTMLElement, IrisDrawerTriggerProps>(\n function IrisDrawerTrigger({ asChild = false, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext('IrisDrawerTrigger')\n\n const captureRef = React.useCallback(\n (el: HTMLElement | null) => {\n ctx.triggerRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(true),\n )\n\n const triggerProps = {\n 'aria-haspopup': 'dialog' as const,\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open ? 'open' : 'closed',\n onClick: handleClick,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDrawerTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={captureRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={captureRef as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { useBodyScrollLock } from '../../modal-utils/useBodyScrollLock'\nimport { useFocusTrap } from '../../modal-utils/useFocusTrap'\nimport { IrisSlot } from '../slot/Slot'\nimport { useDrawerContext, type IrisDrawerSide } from './context'\n\nconst SIDE_TO_TRANSFORM: Record<IrisDrawerSide, string> = {\n left: 'translateX(-100%)',\n right: 'translateX(100%)',\n top: 'translateY(-100%)',\n bottom: 'translateY(100%)',\n}\n\n/**\n * Safe-area padding for the screen edges the panel actually touches, so its\n * content clears the notch / home indicator on mobile webviews (Cordova). The\n * insets resolve to 0 on devices/orientations without a cutout, and the whole\n * declaration is simply ignored on engines without env() support.\n * (Host must set <meta name=\"viewport\" content=\"...,viewport-fit=cover\">.)\n */\nfunction safeAreaPadding(side: IrisDrawerSide): React.CSSProperties {\n const top = 'max(0px, env(safe-area-inset-top))'\n const right = 'max(0px, env(safe-area-inset-right))'\n const bottom = 'max(0px, env(safe-area-inset-bottom))'\n const left = 'max(0px, env(safe-area-inset-left))'\n switch (side) {\n case 'left':\n return { paddingTop: top, paddingBottom: bottom, paddingLeft: left }\n case 'right':\n return { paddingTop: top, paddingBottom: bottom, paddingRight: right }\n case 'top':\n return { paddingTop: top, paddingLeft: left, paddingRight: right }\n case 'bottom':\n return { paddingBottom: bottom, paddingLeft: left, paddingRight: right }\n }\n}\n\nfunction panelPositionStyle(side: IrisDrawerSide, size: string): React.CSSProperties {\n const base: React.CSSProperties = {\n position: 'fixed',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n boxShadow: 'var(--iris-shadow-md, 0 8px 24px rgba(0,0,0,.18))',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'auto',\n transition: 'transform 220ms ease',\n willChange: 'transform',\n ...safeAreaPadding(side),\n }\n // `100vh` is the fallback; `maxHeight: 100dvh` clamps full-height side panels to\n // the DYNAMIC viewport so they don't overflow under mobile browser chrome\n // (dvh ≤ vh). A separate property, so it's simply ignored where dvh is\n // unsupported, leaving the 100vh fallback.\n switch (side) {\n case 'left':\n return {\n ...base,\n top: 0,\n bottom: 0,\n left: 0,\n width: size,\n height: '100vh',\n maxHeight: '100dvh',\n }\n case 'right':\n return {\n ...base,\n top: 0,\n bottom: 0,\n right: 0,\n width: size,\n height: '100vh',\n maxHeight: '100dvh',\n }\n case 'top':\n return { ...base, top: 0, left: 0, right: 0, width: '100vw', height: size }\n case 'bottom':\n return { ...base, bottom: 0, left: 0, right: 0, width: '100vw', height: size }\n }\n}\n\nconst EXIT_DURATION_MS = 220\n\nexport interface IrisDrawerContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n portalTarget?: HTMLElement | false\n children?: React.ReactNode\n}\n\n/**\n * The slide-in surface. Mounts when `open` becomes true and unmounts\n * `EXIT_DURATION_MS` after `open` becomes false so the slide-out transition\n * runs before removal. Provides backdrop, body scroll lock, focus trap, and\n * Escape / outside-click dismiss.\n */\nexport const IrisDrawerContent = React.forwardRef<HTMLDivElement, IrisDrawerContentProps>(\n function IrisDrawerContent({ portalTarget, style, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext('IrisDrawerContent')\n\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n innerRef.current = el\n ctx.contentRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n // 2-stage mount: mounted (in DOM) + visible (transform applied).\n const [mounted, setMounted] = React.useState(ctx.open)\n const [visible, setVisible] = React.useState(ctx.open)\n\n React.useEffect(() => {\n if (ctx.open) {\n setMounted(true)\n // RAF so initial off-screen transform commits before flipping to on-screen.\n const raf = requestAnimationFrame(() => setVisible(true))\n return () => cancelAnimationFrame(raf)\n } else {\n setVisible(false)\n const timer = setTimeout(() => setMounted(false), EXIT_DURATION_MS)\n return () => clearTimeout(timer)\n }\n }, [ctx.open])\n\n useBodyScrollLock(ctx.open)\n useFocusTrap({\n container: innerRef,\n active: ctx.open,\n returnFocusTo: ctx.triggerRef,\n })\n\n React.useEffect(() => {\n if (!ctx.open || !ctx.closeOnEscape) return\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault()\n ctx.setOpen(false)\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [ctx])\n\n if (!mounted) return null\n\n const onBackdropClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if (!ctx.closeOnOutsideClick) return\n if (e.target !== e.currentTarget) return\n ctx.setOpen(false)\n }\n\n const onContentPointerDown = composeEventHandlers(\n rest.onPointerDown as ((e: React.PointerEvent<HTMLDivElement>) => void) | undefined,\n (e: React.PointerEvent<HTMLDivElement>) => e.stopPropagation(),\n )\n\n const offScreen = SIDE_TO_TRANSFORM[ctx.side]\n const panelStyle = panelPositionStyle(ctx.side, ctx.size)\n\n const node = (\n <div\n data-iris-drawer-backdrop=\"\"\n data-state={visible ? 'open' : 'closed'}\n style={{\n position: 'fixed',\n inset: 0,\n background: 'rgba(0,0,0,0.4)',\n opacity: visible ? 1 : 0,\n transition: `opacity ${EXIT_DURATION_MS}ms ease`,\n zIndex: 1200,\n }}\n onClick={onBackdropClick}\n >\n <div\n {...rest}\n ref={captureRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={ctx.hasTitle ? ctx.titleId : undefined}\n id={ctx.contentId}\n data-iris-drawer-content=\"\"\n data-iris-drawer-side={ctx.side}\n data-state={visible ? 'open' : 'closed'}\n tabIndex={-1}\n onPointerDown={onContentPointerDown}\n style={{\n ...panelStyle,\n transform: visible ? 'translate(0,0)' : offScreen,\n ...style,\n }}\n >\n {children}\n </div>\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n },\n)\n\nexport type IrisDrawerTitleProps = React.HTMLAttributes<HTMLHeadingElement>\n\n/**\n * The drawer's header title, rendered as an `<h2>`. Automatically wired to\n * `aria-labelledby` on the content panel for accessible naming.\n */\nexport const IrisDrawerTitle = React.forwardRef<HTMLHeadingElement, IrisDrawerTitleProps>(\n function IrisDrawerTitle({ style, children, ...rest }, ref) {\n const ctx = useDrawerContext('IrisDrawerTitle')\n React.useEffect(() => ctx.registerTitle(), [ctx.registerTitle])\n return (\n <h2\n {...rest}\n ref={ref}\n id={ctx.titleId}\n data-iris-drawer-title=\"\"\n style={{\n margin: 0,\n padding: 'var(--iris-padding-md, 12px)',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n fontWeight: 600,\n borderBottom: '1px solid var(--iris-border)',\n ...style,\n }}\n >\n {children}\n </h2>\n )\n },\n)\n\nexport interface IrisDrawerCloseProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * A button that closes the drawer when clicked. Supports `asChild` for custom\n * trigger elements. Emits `onClick` then calls `setOpen(false)`.\n */\nexport const IrisDrawerClose = React.forwardRef<HTMLElement, IrisDrawerCloseProps>(\n function IrisDrawerClose({ asChild = false, onClick, children, ...rest }, forwardedRef) {\n const ctx = useDrawerContext('IrisDrawerClose')\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(false),\n )\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDrawerClose asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot\n ref={forwardedRef as React.Ref<unknown>}\n {...rest}\n data-iris-drawer-close=\"\"\n onClick={handleClick}\n >\n {children}\n </IrisSlot>\n )\n }\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n ref={forwardedRef as React.Ref<HTMLButtonElement>}\n data-iris-drawer-close=\"\"\n onClick={handleClick}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface DropdownContextValue {\n open: boolean\n setOpen: (next: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n}\n\nexport const DropdownContext = React.createContext<DropdownContextValue | null>(null)\n\nexport function useDropdownContext(componentName: string): DropdownContextValue {\n const ctx = React.useContext(DropdownContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be a descendant of <IrisDropdown>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../useMachine'\nimport { DropdownContext } from './context'\n\nexport interface IrisDropdownProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n placement?: Placement\n offset?: number\n children?: React.ReactNode\n}\n\n/**\n * Dropdown menu root. Composes `createFloatingMachine` (state) with\n * `useFloating` (positioning) used in `IrisDropdownMenu`. The dropdown\n * panel's semantics differ from a popover: it uses `role=\"menu\"`, supports\n * arrow-key navigation, and items auto-close the menu on select.\n *\n * @example\n * <IrisDropdown placement=\"bottom-end\">\n * <IrisDropdownTrigger>Actions</IrisDropdownTrigger>\n * <IrisDropdownMenu>\n * <IrisDropdownItem onSelect={onCopy}>Copy</IrisDropdownItem>\n * <IrisDropdownItem onSelect={onDelete}>Delete</IrisDropdownItem>\n * </IrisDropdownMenu>\n * </IrisDropdown>\n */\nexport function IrisDropdown({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 6,\n children,\n}: IrisDropdownProps): React.ReactElement {\n const isControlled = openProp !== undefined\n\n const [state, send] = useMachine(() => createFloatingMachine(defaultOpen ? 'open' : 'closed'))\n const internalOpen = state.value === 'open'\n\n React.useEffect(() => {\n if (!isControlled) return\n const target = openProp ? 'open' : 'closed'\n if (state.value !== target) {\n send({ type: openProp ? 'OPEN' : 'CLOSE' })\n }\n }, [isControlled, openProp, state.value, send])\n\n const open = isControlled ? Boolean(openProp) : internalOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) send({ type: next ? 'OPEN' : 'CLOSE' })\n onOpenChange?.(next)\n },\n [isControlled, send, onOpenChange],\n )\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const contentId = React.useId()\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId,\n placement,\n offset,\n }),\n [open, setOpen, contentId, placement, offset],\n )\n\n return <DropdownContext.Provider value={value}>{children}</DropdownContext.Provider>\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { useDropdownContext } from './context'\n\nexport interface IrisDropdownTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The trigger element that toggles the dropdown open/closed on click or\n * ArrowDown/Enter/Space. Renders as a `<button>` (or custom element via\n * `asChild`) with `aria-haspopup=\"menu\"` and `aria-expanded`.\n */\nexport const IrisDropdownTrigger = React.forwardRef<HTMLElement, IrisDropdownTriggerProps>(\n function IrisDropdownTrigger(\n { asChild = false, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useDropdownContext('IrisDropdownTrigger')\n\n const captureRef = React.useCallback(\n (el: HTMLElement | null) => {\n ctx.triggerRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(!ctx.open),\n )\n\n // ArrowDown/Enter/Space open the menu (which then focuses its first item),\n // matching the Vue dropdown trigger + the WAI-ARIA menu-button pattern.\n const handleKeyDown = composeEventHandlers(\n onKeyDown as ((e: React.KeyboardEvent<HTMLElement>) => void) | undefined,\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n ctx.setOpen(true)\n }\n },\n )\n\n const triggerProps = {\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open ? 'open' : 'closed',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDropdownTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={captureRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={captureRef as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { matchTypeahead } from '@iris-ui-kit/core'\nimport { useFloating } from '../../floating/useFloating'\nimport { useDismiss } from '../../floating/useDismiss'\nimport { useDropdownContext } from './context'\n\nexport interface IrisDropdownMenuProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n portalTarget?: HTMLElement | false\n children?: React.ReactNode\n}\n\n/**\n * The menu surface. Renders `role=\"menu\"` and handles ArrowUp/Down/Home/End\n * navigation across child `IrisDropdownItem`s. Closes on Escape, outside\n * pointerdown, and Tab.\n */\nexport const IrisDropdownMenu = React.forwardRef<HTMLDivElement, IrisDropdownMenuProps>(\n function IrisDropdownMenu({ portalTarget, style, onKeyDown, children, ...rest }, forwardedRef) {\n const ctx = useDropdownContext('IrisDropdownMenu')\n\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n innerRef.current = el\n ctx.contentRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n // Outside-pointerdown + Escape dismiss (shared floating hook).\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, ctx.contentRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus first item on open; restore focus to trigger on close.\n const wasOpenRef = React.useRef(false)\n React.useEffect(() => {\n if (ctx.open && !wasOpenRef.current) {\n queueMicrotask(() => {\n const items = innerRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')\n items?.[0]?.focus()\n })\n } else if (!ctx.open && wasOpenRef.current) {\n ctx.triggerRef.current?.focus?.()\n }\n wasOpenRef.current = ctx.open\n }, [ctx.open, ctx.triggerRef])\n\n // Typeahead buffer: accumulated printable chars, reset after a ~500ms pause.\n const typeaheadRef = React.useRef<{\n buffer: string\n timer: ReturnType<typeof setTimeout> | null\n }>({ buffer: '', timer: null })\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e)\n if (!ctx.open) return\n const items = Array.from(\n innerRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n const current = document.activeElement as HTMLElement | null\n const index = current ? items.indexOf(current) : -1\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n const next = index < 0 ? 0 : (index + 1) % items.length\n items[next]?.focus()\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n const next = index <= 0 ? items.length - 1 : index - 1\n items[next]?.focus()\n break\n }\n case 'Home':\n e.preventDefault()\n items[0]?.focus()\n break\n case 'End':\n e.preventDefault()\n items[items.length - 1]?.focus()\n break\n case 'Tab':\n // Tab closes the menu and lets focus continue out.\n ctx.setOpen(false)\n break\n default: {\n // Typeahead: a single printable char jumps to (and repeated chars\n // cycle through) items whose label matches the accumulated buffer.\n if (e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const ta = typeaheadRef.current\n ta.buffer += e.key\n if (ta.timer) clearTimeout(ta.timer)\n ta.timer = setTimeout(() => {\n ta.buffer = ''\n }, 500)\n const match = matchTypeahead(\n items.map((it) => it.textContent ?? ''),\n ta.buffer,\n index,\n )\n if (match >= 0) {\n e.preventDefault()\n items[match]?.focus()\n }\n }\n }\n }\n }\n\n if (!ctx.open) return null\n\n const node = (\n <div\n {...rest}\n ref={captureRef}\n id={ctx.contentId}\n role=\"menu\"\n tabIndex={-1}\n data-iris-dropdown-menu=\"\"\n data-state=\"open\"\n onKeyDown={handleKeyDown}\n style={{\n ...floatingStyles,\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: 'var(--iris-padding-sm, 4px)',\n boxShadow: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\n minWidth: 160,\n outline: 'none',\n zIndex: 1000,\n ...style,\n }}\n >\n {children}\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n },\n)\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { useDropdownContext } from './context'\n\nexport interface IrisDropdownItemProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onSelect'\n> {\n disabled?: boolean\n /** When true, selecting does NOT close the dropdown. */\n keepOpen?: boolean\n /** Emitted on click or Enter/Space. */\n onSelect?: (event: React.SyntheticEvent) => void\n}\n\n/**\n * A single selectable menu item. Calls `onSelect` and auto-closes the\n * parent dropdown after selection (unless `keepOpen`). Disabled items are\n * skipped by arrow-key navigation in the parent menu.\n */\nexport const IrisDropdownItem = React.forwardRef<HTMLDivElement, IrisDropdownItemProps>(\n function IrisDropdownItem(\n { disabled = false, keepOpen = false, onSelect, onClick, onKeyDown, style, children, ...rest },\n ref,\n ) {\n const ctx = useDropdownContext('IrisDropdownItem')\n const [hovered, setHovered] = React.useState(false)\n\n const fire = (event: React.SyntheticEvent) => {\n if (disabled) return\n onSelect?.(event)\n if (!keepOpen) ctx.setOpen(false)\n }\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLDivElement>) => void) | undefined,\n (e: React.MouseEvent<HTMLDivElement>) => fire(e),\n )\n const handleKeyDown = composeEventHandlers(\n onKeyDown as ((e: React.KeyboardEvent<HTMLDivElement>) => void) | undefined,\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n fire(e)\n }\n },\n )\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-dropdown-item=\"\"\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n onFocus={() => setHovered(true)}\n onBlur={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm, 6px)',\n padding: '6px var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n background: hovered && !disabled ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n outline: 'none',\n fontSize: 14,\n transition: 'background-color 80ms ease',\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n\nexport type IrisDropdownSeparatorProps = React.HTMLAttributes<HTMLDivElement>\n\n/**\n * A visual separator (horizontal rule) within a dropdown menu. Renders a\n * `role=\"separator\"` `<div>` styled with the theme's border colour.\n */\nexport const IrisDropdownSeparator = React.forwardRef<HTMLDivElement, IrisDropdownSeparatorProps>(\n function IrisDropdownSeparator({ style, ...rest }, ref) {\n return (\n <div\n {...rest}\n ref={ref}\n role=\"separator\"\n data-iris-dropdown-separator=\"\"\n style={{\n height: 1,\n background: 'var(--iris-border)',\n margin: '4px 0',\n ...style,\n }}\n />\n )\n },\n)\n","import { createStore, generateId } from '@iris-ui-kit/core'\n\nexport type IrisToastVariant = 'default' | 'success' | 'danger' | 'warning' | 'info'\n\nexport interface IrisToastInput {\n /** Stable id; if reused, the existing toast is updated in place. */\n id?: string\n title?: string\n description?: string\n variant?: IrisToastVariant\n /** Auto-dismiss duration in ms. `0` or `Infinity` disables auto-dismiss. */\n duration?: number\n /** Optional action label + handler. */\n action?: { label: string; onClick: () => void }\n}\n\nexport interface IrisToast extends Required<Omit<IrisToastInput, 'action'>> {\n action: IrisToastInput['action']\n createdAt: number\n}\n\nconst DEFAULT_DURATION = 4000\n\n/**\n * Module-level singleton toast store. The store is intentionally global so\n * that `useToast()` from any component reaches the same queue — calls do\n * not require a context provider.\n */\nconst store = createStore<IrisToast[]>([])\n\n/** Subscribe to changes. */\nexport const subscribeToasts = (listener: (toasts: IrisToast[]) => void) =>\n store.subscribe(listener)\n\n/** Read current toasts. */\nexport const getToasts = (): IrisToast[] => store.getState()\n\n/**\n * Push a toast onto the queue. If an `id` is supplied and matches an existing\n * toast, the entry is replaced in place (and its timer reset).\n *\n * Returns the toast id so the caller can `dismissToast(id)` later.\n */\nexport function pushToast(input: IrisToastInput): string {\n const id = input.id ?? generateId('iris-toast')\n const next: IrisToast = {\n id,\n title: input.title ?? '',\n description: input.description ?? '',\n variant: input.variant ?? 'default',\n duration: input.duration ?? DEFAULT_DURATION,\n action: input.action,\n createdAt: Date.now(),\n }\n store.setState((prev) => {\n const idx = prev.findIndex((t) => t.id === id)\n if (idx >= 0) {\n const copy = [...prev]\n copy[idx] = next\n return copy\n }\n return [...prev, next]\n })\n return id\n}\n\n/** Remove a toast by id. */\nexport function dismissToast(id: string): void {\n store.setState((prev) => prev.filter((t) => t.id !== id))\n}\n\n/** Remove all toasts. */\nexport function clearToasts(): void {\n store.setState([])\n}\n","import { clearToasts, dismissToast, pushToast, type IrisToastInput } from './toastStore'\n\nexport interface UseToastReturn {\n /** Push a new toast (or replace by id). Returns the toast id. */\n push: (input: IrisToastInput) => string\n /** Convenience: push with variant pre-set. */\n success: (input: Omit<IrisToastInput, 'variant'>) => string\n error: (input: Omit<IrisToastInput, 'variant'>) => string\n warning: (input: Omit<IrisToastInput, 'variant'>) => string\n info: (input: Omit<IrisToastInput, 'variant'>) => string\n /** Remove a toast by id. */\n dismiss: (id: string) => void\n /** Remove all toasts. */\n clear: () => void\n}\n\n/**\n * Hook for the global toast queue. Backed by a module-level singleton\n * store, so it works **without** a surrounding provider — but the page\n * must mount exactly one `<IrisToastViewport>` somewhere for toasts to\n * actually be visible.\n *\n * @example\n * const toast = useToast()\n * toast.success({ title: 'Saved', description: 'Your changes are live.' })\n * toast.error({ title: 'Failed', duration: 6000 })\n */\nexport function useToast(): UseToastReturn {\n return {\n push: pushToast,\n success: (input) => pushToast({ ...input, variant: 'success' }),\n error: (input) => pushToast({ ...input, variant: 'danger' }),\n warning: (input) => pushToast({ ...input, variant: 'warning' }),\n info: (input) => pushToast({ ...input, variant: 'info' }),\n dismiss: dismissToast,\n clear: clearToasts,\n }\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { createAutoDismiss, type AutoDismiss } from '@iris-ui-kit/core'\nimport {\n dismissToast,\n getToasts,\n subscribeToasts,\n type IrisToast,\n type IrisToastVariant,\n} from './toastStore'\nimport { useI18n } from '../../i18n'\n\nexport type IrisToastPosition =\n | 'top-left'\n | 'top-right'\n | 'top-center'\n | 'bottom-left'\n | 'bottom-right'\n | 'bottom-center'\n\nconst VARIANT_BORDER: Record<IrisToastVariant, string> = {\n default: 'var(--iris-border)',\n success: 'var(--iris-success)',\n danger: 'var(--iris-danger)',\n warning: 'var(--iris-warning)',\n info: 'var(--iris-primary)',\n}\n\nconst VARIANT_ACCENT: Record<IrisToastVariant, string> = {\n default: 'var(--iris-muted)',\n success: 'var(--iris-success)',\n danger: 'var(--iris-danger)',\n warning: 'var(--iris-warning)',\n info: 'var(--iris-primary)',\n}\n\nfunction positionStyle(position: IrisToastPosition): React.CSSProperties {\n const base: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1400,\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--iris-gap-md, 12px)',\n // `padding` is the fallback; the per-side longhands add safe-area insets so\n // toasts clear the notch / home indicator on mobile webviews (Cordova). On\n // engines without env() the longhands are invalid and the shorthand applies.\n // (Host must set <meta name=\"viewport\" content=\"...,viewport-fit=cover\">.)\n padding: 16,\n paddingTop: 'max(16px, env(safe-area-inset-top))',\n paddingRight: 'max(16px, env(safe-area-inset-right))',\n paddingBottom: 'max(16px, env(safe-area-inset-bottom))',\n paddingLeft: 'max(16px, env(safe-area-inset-left))',\n maxWidth: 420,\n width: '100%',\n pointerEvents: 'none',\n }\n const top = position.startsWith('top')\n const bottom = position.startsWith('bottom')\n const left = position.endsWith('-left')\n const right = position.endsWith('-right')\n const center = position.endsWith('-center')\n if (top) base.top = 0\n if (bottom) base.bottom = 0\n if (left) base.left = 0\n if (right) base.right = 0\n if (center) {\n base.left = '50%'\n base.transform = 'translateX(-50%)'\n }\n return base\n}\n\nexport interface IrisToastViewportProps extends React.HTMLAttributes<HTMLDivElement> {\n position?: IrisToastPosition\n portalTarget?: HTMLElement | false\n /** Maximum simultaneous toasts; older entries are evicted when exceeded. */\n max?: number\n}\n\n/**\n * Renders the queued toasts. Mount exactly **one** of these per page. The\n * viewport subscribes to the module-level toast store; toasts pushed via\n * `useToast()` from any component appear here.\n *\n * Auto-dismiss timers are managed per toast (paused while the pointer is over\n * the viewport). Manual dismiss is via the close button.\n */\nexport function IrisToastViewport({\n position = 'top-right',\n portalTarget,\n max = 5,\n style,\n ...rest\n}: IrisToastViewportProps): React.ReactElement | null {\n const { t } = useI18n()\n const allToasts = React.useSyncExternalStore(subscribeToasts, getToasts, () => [] as IrisToast[])\n\n const toasts = React.useMemo(\n () => (allToasts.length > max ? allToasts.slice(-max) : allToasts),\n [allToasts, max],\n )\n\n const [hovered, setHovered] = React.useState(false)\n // One core `createAutoDismiss` per live toast keyed by id — the after-machine\n // primitive replaces the hand-rolled setTimeout Map. start() on add, pause()\n // all on hover, resume() on un-hover, cancel() on remove/unmount.\n const dismissersRef = React.useRef(new Map<string, AutoDismiss>())\n\n // Swipe-to-dismiss: one toast is dragged at a time; past the threshold on\n // release it dismisses, otherwise it snaps back. The decision logic reads the\n // ref (synchronous — survives event batching); state drives the visual offset.\n const SWIPE_DISMISS_PX = 80\n const [drag, setDrag] = React.useState<{ id: string; dx: number } | null>(null)\n const dragRef = React.useRef<{ id: string; startX: number; dx: number } | null>(null)\n\n const cancelDismisser = React.useCallback((id: string) => {\n const d = dismissersRef.current.get(id)\n if (d) {\n d.cancel()\n dismissersRef.current.delete(id)\n }\n }, [])\n\n // Create + arm an auto-dismiss for a toast. The remaining time accounts for\n // any wall-clock already elapsed since `createdAt` (preserving the exact\n // observable timing the setTimeout Map had). duration 0/Infinity = persistent.\n const armDismisser = React.useCallback((toast: IrisToast) => {\n if (!toast.duration || toast.duration === Infinity) return\n const remaining = Math.max(0, toast.createdAt + toast.duration - Date.now())\n const dismisser = createAutoDismiss({\n duration: remaining,\n onDismiss: () => {\n dismissersRef.current.delete(toast.id)\n dismissToast(toast.id)\n },\n })\n dismissersRef.current.set(toast.id, dismisser)\n dismisser.start()\n }, [])\n\n // Add dismissers for new toasts, cancel them for removed ones. While hovered,\n // newly-added toasts are created paused (started then paused) so they don't\n // tick until the pointer leaves.\n React.useEffect(() => {\n const liveIds = new Set(toasts.map((t) => t.id))\n for (const id of Array.from(dismissersRef.current.keys())) {\n if (!liveIds.has(id)) cancelDismisser(id)\n }\n for (const toast of toasts) {\n if (!dismissersRef.current.has(toast.id)) {\n armDismisser(toast)\n if (hovered) dismissersRef.current.get(toast.id)?.pause()\n }\n }\n }, [toasts, hovered, armDismisser, cancelDismisser])\n\n // When hover toggles, pause/resume every live dismisser wholesale.\n React.useEffect(() => {\n if (hovered) {\n for (const d of dismissersRef.current.values()) d.pause()\n } else {\n for (const d of dismissersRef.current.values()) d.resume()\n }\n }, [hovered])\n\n // Tear down on unmount.\n React.useEffect(() => {\n const dismissers = dismissersRef.current\n return () => {\n for (const d of dismissers.values()) d.cancel()\n dismissers.clear()\n }\n }, [])\n\n const node = (\n <div\n {...rest}\n data-iris-toast-viewport=\"\"\n data-position={position}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n style={{ ...positionStyle(position), ...style }}\n >\n {toasts.map((toast) => {\n const isDragging = drag?.id === toast.id\n const dx = isDragging ? (drag?.dx ?? 0) : 0\n return (\n <div\n key={toast.id}\n role={toast.variant === 'danger' ? 'alert' : 'status'}\n aria-live={toast.variant === 'danger' ? 'assertive' : 'polite'}\n data-iris-toast=\"\"\n data-variant={toast.variant}\n onPointerDown={(e) => {\n dragRef.current = { id: toast.id, startX: e.clientX, dx: 0 }\n // Pointer capture keeps move/up on this element; unsupported in jsdom.\n try {\n e.currentTarget.setPointerCapture?.(e.pointerId)\n } catch {\n /* no-op */\n }\n setDrag({ id: toast.id, dx: 0 })\n }}\n onPointerMove={(e) => {\n const d = dragRef.current\n if (d && d.id === toast.id) {\n d.dx = e.clientX - d.startX\n setDrag({ id: toast.id, dx: d.dx })\n }\n }}\n onPointerUp={() => {\n const d = dragRef.current\n if (d && d.id === toast.id) {\n if (Math.abs(d.dx) > SWIPE_DISMISS_PX) dismissToast(toast.id)\n dragRef.current = null\n setDrag(null)\n }\n }}\n style={{\n pointerEvents: 'auto',\n transform: dx ? `translateX(${dx}px)` : undefined,\n opacity: isDragging ? Math.max(0.3, 1 - Math.abs(dx) / 250) : undefined,\n transition: isDragging ? 'none' : 'transform 150ms ease, opacity 150ms ease',\n touchAction: 'pan-y',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'flex-start',\n gap: 'var(--iris-gap-md, 12px)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${VARIANT_BORDER[toast.variant]}`,\n borderInlineStart: `4px solid ${VARIANT_ACCENT[toast.variant]}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: 'var(--iris-padding-md, 12px)',\n boxShadow: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\n minWidth: 280,\n fontSize: 14,\n }}\n >\n <div style={{ flex: 1, minWidth: 0 }}>\n {toast.title ? <div style={{ fontWeight: 600 }}>{toast.title}</div> : null}\n {toast.description ? (\n <div\n style={{\n color: 'var(--iris-muted)',\n fontSize: 13,\n marginTop: 2,\n }}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.action ? (\n <button\n type=\"button\"\n onClick={() => {\n toast.action!.onClick()\n dismissToast(toast.id)\n }}\n style={{\n background: 'transparent',\n border: 'none',\n color: VARIANT_ACCENT[toast.variant],\n fontWeight: 600,\n cursor: 'pointer',\n padding: '4px 8px',\n fontSize: 13,\n fontFamily: 'inherit',\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label={t('toast.dismiss')}\n onClick={() => dismissToast(toast.id)}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 4,\n color: 'var(--iris-muted)',\n lineHeight: 1,\n fontFamily: 'inherit',\n fontSize: 16,\n }}\n >\n ×\n </button>\n </div>\n )\n })}\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n}\n","import * as React from 'react'\n\nexport type IrisTabsOrientation = 'horizontal' | 'vertical'\n\nexport interface TabsContextValue {\n value: string | null\n setValue: (next: string) => void\n orientation: IrisTabsOrientation\n disabled: boolean\n lazy: boolean\n /** Registers a trigger (mount). Returns an unregister function. */\n registerTrigger: (value: string, isDisabled: () => boolean) => () => void\n moveFocus: (from: string, delta: 1 | -1 | 'home' | 'end') => void\n listRef: React.MutableRefObject<HTMLElement | null>\n}\n\nexport const TabsContext = React.createContext<TabsContextValue | null>(null)\n\nexport function useTabsContext(componentName: string): TabsContextValue {\n const ctx = React.useContext(TabsContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be inside an <IrisTabs>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { nextEnabledIndex } from '@iris-ui-kit/core'\nimport { TabsContext, type IrisTabsOrientation } from './context'\n\nexport interface IrisTabsProps {\n /** Controlled active value. */\n value?: string\n /** Initial active value in uncontrolled mode. */\n defaultValue?: string\n onValueChange?: (next: string) => void\n orientation?: IrisTabsOrientation\n disabled?: boolean\n /** When true (default), content panels are unmounted when not active. */\n lazy?: boolean\n children?: React.ReactNode\n}\n\ninterface TriggerRegistration {\n value: string\n isDisabled: () => boolean\n}\n\n/**\n * Tabs root. Provides context for value, orientation, lazy mounting, and the\n * ordered set of registered triggers so arrow-key navigation can move focus\n * deterministically (skipping disabled triggers).\n *\n * @example\n * <IrisTabs defaultValue=\"a\">\n * <IrisTabsList>\n * <IrisTabsTrigger value=\"a\">First</IrisTabsTrigger>\n * <IrisTabsTrigger value=\"b\">Second</IrisTabsTrigger>\n * </IrisTabsList>\n * <IrisTabsContent value=\"a\">Panel A</IrisTabsContent>\n * <IrisTabsContent value=\"b\">Panel B</IrisTabsContent>\n * </IrisTabs>\n */\nexport function IrisTabs({\n value: valueProp,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n disabled = false,\n lazy = true,\n children,\n}: IrisTabsProps): React.ReactElement {\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = React.useState<string | null>(defaultValue ?? null)\n\n const effectiveValue = isControlled ? valueProp : internalValue\n\n const setValue = React.useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange],\n )\n\n // Ordered trigger registry, kept in a ref so registration doesn't churn\n // the render. Reads happen at event time (moveFocus), not render time.\n const triggersRef = React.useRef<TriggerRegistration[]>([])\n const listRef = React.useRef<HTMLElement | null>(null)\n\n const focusTriggerByValue = React.useCallback((value: string) => {\n const root = listRef.current\n if (!root) return\n const el = root.querySelector<HTMLElement>(`[data-iris-tabs-trigger][data-value=\"${value}\"]`)\n el?.focus()\n }, [])\n\n const registerTrigger = React.useCallback(\n (value: string, isDisabled: () => boolean) => {\n if (triggersRef.current.some((t) => t.value === value)) {\n // Already registered; return a no-op unregister.\n return () => {}\n }\n triggersRef.current = [...triggersRef.current, { value, isDisabled }]\n // First registered trigger becomes default focus target if none set.\n if (!isControlled) {\n setInternalValue((cur) => {\n if (cur === null && !isDisabled()) return value\n return cur\n })\n }\n return () => {\n triggersRef.current = triggersRef.current.filter((t) => t.value !== value)\n }\n },\n [isControlled],\n )\n\n const moveFocus = React.useCallback(\n (from: string, delta: 1 | -1 | 'home' | 'end') => {\n const enabled = triggersRef.current.filter((t) => !t.isDisabled())\n if (enabled.length === 0) return\n const fromIndex = enabled.findIndex((t) => t.value === from)\n let nextIndex: number\n if (delta === 'home') nextIndex = 0\n else if (delta === 'end') nextIndex = enabled.length - 1\n // Step ±1 over the already-enabled list (wrap) via the shared core helper.\n else nextIndex = nextEnabledIndex(fromIndex, delta, enabled.length)\n const next = enabled[nextIndex]\n if (next) {\n setValue(next.value)\n focusTriggerByValue(next.value)\n }\n },\n [setValue, focusTriggerByValue],\n )\n\n const value = React.useMemo(\n () => ({\n value: effectiveValue,\n setValue,\n orientation,\n disabled,\n lazy,\n registerTrigger,\n moveFocus,\n listRef,\n }),\n [effectiveValue, setValue, orientation, disabled, lazy, registerTrigger, moveFocus],\n )\n\n return <TabsContext.Provider value={value}>{children}</TabsContext.Provider>\n}\n","import * as React from 'react'\nimport { useTabsContext } from './context'\n\nexport type IrisTabsListProps = React.HTMLAttributes<HTMLDivElement>\n\n/** Container for `IrisTabsTrigger`s. Renders `<div role=\"tablist\">`. */\nexport const IrisTabsList = React.forwardRef<HTMLDivElement, IrisTabsListProps>(\n function IrisTabsList({ style, children, ...rest }, forwardedRef) {\n const ctx = useTabsContext('IrisTabsList')\n\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n ctx.listRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n return (\n <div\n {...rest}\n ref={captureRef}\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n data-iris-tabs-list=\"\"\n data-orientation={ctx.orientation}\n style={{\n display: 'flex',\n flexDirection: ctx.orientation === 'horizontal' ? 'row' : 'column',\n gap: 2,\n borderBottom: ctx.orientation === 'horizontal' ? '1px solid var(--iris-border)' : 'none',\n borderInlineEnd: ctx.orientation === 'vertical' ? '1px solid var(--iris-border)' : 'none',\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { useTabsContext } from './context'\n\nexport interface IrisTabsTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'value' | 'children'\n> {\n value: string\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * A single tab button. Registers with the parent `IrisTabs` so arrow keys\n * can navigate among triggers in registration order. Sets `aria-selected`\n * and `aria-controls`; uses roving tabindex.\n */\nexport const IrisTabsTrigger = React.forwardRef<HTMLElement, IrisTabsTriggerProps>(\n function IrisTabsTrigger(\n { value, asChild = false, disabled, onClick, onKeyDown, style, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useTabsContext('IrisTabsTrigger')\n\n const isDisabled = Boolean(disabled) || ctx.disabled\n const isActive = ctx.value === value\n\n // Hold isDisabled in a ref so the registry's predicate sees the latest value\n // without forcing a re-register on every disabled-flip.\n const isDisabledRef = React.useRef(isDisabled)\n isDisabledRef.current = isDisabled\n\n const register = ctx.registerTrigger\n React.useEffect(() => {\n return register(value, () => isDisabledRef.current)\n }, [register, value])\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => {\n if (isDisabled) return\n ctx.setValue(value)\n },\n )\n\n const handleKeyDown = composeEventHandlers(\n onKeyDown as ((e: React.KeyboardEvent<HTMLElement>) => void) | undefined,\n (e: React.KeyboardEvent<HTMLElement>) => {\n const horizontal = ctx.orientation === 'horizontal'\n switch (e.key) {\n case horizontal ? 'ArrowRight' : 'ArrowDown':\n e.preventDefault()\n ctx.moveFocus(value, 1)\n break\n case horizontal ? 'ArrowLeft' : 'ArrowUp':\n e.preventDefault()\n ctx.moveFocus(value, -1)\n break\n case 'Home':\n e.preventDefault()\n ctx.moveFocus(value, 'home')\n break\n case 'End':\n e.preventDefault()\n ctx.moveFocus(value, 'end')\n break\n }\n },\n )\n\n const triggerProps = {\n role: 'tab' as const,\n 'aria-selected': isActive,\n 'aria-controls': `iris-tabs-content-${value}`,\n id: `iris-tabs-trigger-${value}`,\n tabIndex: isActive ? 0 : -1,\n 'data-iris-tabs-trigger': '',\n 'data-value': value,\n 'data-state': isActive ? 'active' : 'inactive',\n 'data-orientation': ctx.orientation,\n 'data-disabled': isDisabled ? '' : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisTabsTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={forwardedRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n const horizontal = ctx.orientation === 'horizontal'\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={forwardedRef as React.Ref<HTMLButtonElement>}\n disabled={isDisabled ? true : undefined}\n style={{\n padding: '8px var(--iris-padding-md, 12px)',\n fontSize: 14,\n fontWeight: 500,\n fontFamily: 'inherit',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: isActive ? 'var(--iris-primary)' : 'var(--iris-muted)',\n marginBottom: horizontal ? -1 : undefined,\n marginInlineEnd: horizontal ? undefined : -1,\n borderBottom: horizontal\n ? `2px solid ${isActive ? 'var(--iris-primary)' : 'transparent'}`\n : undefined,\n borderInlineEnd: !horizontal\n ? `2px solid ${isActive ? 'var(--iris-primary)' : 'transparent'}`\n : undefined,\n transition: 'color 120ms ease, border-color 120ms ease',\n ...style,\n }}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport { useTabsContext } from './context'\n\nexport interface IrisTabsContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n value: string\n /** Render even when inactive; hidden via the `hidden` attribute. */\n forceMount?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Panel paired with a `IrisTabsTrigger` by matching `value`. When `lazy` is\n * true on the parent (default), inactive panels are unmounted. Pass\n * `forceMount` to always render (e.g. for SEO or pre-warming).\n */\nexport const IrisTabsContent = React.forwardRef<HTMLDivElement, IrisTabsContentProps>(\n function IrisTabsContent({ value, forceMount = false, style, children, ...rest }, ref) {\n const ctx = useTabsContext('IrisTabsContent')\n const isActive = ctx.value === value\n if (!isActive && ctx.lazy && !forceMount) return null\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tabpanel\"\n id={`iris-tabs-content-${value}`}\n aria-labelledby={`iris-tabs-trigger-${value}`}\n data-iris-tabs-content=\"\"\n data-state={isActive ? 'active' : 'inactive'}\n hidden={!isActive || undefined}\n tabIndex={0}\n style={{\n padding: 'var(--iris-padding-md, 12px) 0',\n outline: 'none',\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport interface AccordionContextValue {\n isOpen: (value: string) => boolean\n toggle: (value: string) => void\n rootId: string\n collapsible: boolean\n multiple: boolean\n /** Current keyboard‑navigation active index. */\n activeIndex: number\n /**\n * Register a trigger element for keyboard navigation.\n * Returns an unregister function for cleanup.\n */\n registerItem: (value: string, el: React.RefObject<HTMLButtonElement | null>) => () => void\n /** Tell the nav controller to focus the item with the given value. */\n focusItem: (value: string) => void\n}\n\nexport const AccordionContext = React.createContext<AccordionContextValue | null>(null)\n\nexport function useAccordionContext(componentName: string): AccordionContextValue {\n const ctx = React.useContext(AccordionContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be inside an <IrisAccordion>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport {\n createKeyboardNav,\n type KeyboardNavAction,\n type KeyboardNavController,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\nimport { AccordionContext } from './context'\n\nexport type IrisAccordionValue = string | string[] | null\n\nexport interface IrisAccordionProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n value?: IrisAccordionValue\n defaultValue?: IrisAccordionValue\n onValueChange?: (next: IrisAccordionValue) => void\n multiple?: boolean\n /** In single mode, allow zero items open. */\n collapsible?: boolean\n}\n\n/**\n * Container for collapsible sections.\n *\n * - `multiple=false` (default): zero or one item open at a time. The value\n * is `string | null`. Set `collapsible` to allow closing the active one.\n * - `multiple=true`: any number of items open. Value is `string[]`.\n */\nexport function IrisAccordion({\n value: valueProp,\n defaultValue,\n onValueChange,\n multiple = false,\n collapsible = false,\n children,\n ...rest\n}: IrisAccordionProps): React.ReactElement {\n const isControlled = valueProp !== undefined\n const initial: IrisAccordionValue =\n defaultValue !== undefined ? defaultValue : multiple ? [] : null\n const [internal, setInternal] = React.useState<IrisAccordionValue>(initial)\n\n const current = isControlled ? (valueProp as IrisAccordionValue) : internal\n\n const isOpen = React.useCallback(\n (v: string): boolean => {\n const c = current\n if (c === null || c === undefined) return false\n if (Array.isArray(c)) return c.includes(v)\n return c === v\n },\n [current],\n )\n\n // Hold the latest controlled value in a ref so toggle() always sees the\n // up-to-date source of truth even within a batched update.\n const controlledRef = React.useRef(valueProp)\n controlledRef.current = valueProp\n\n const toggle = React.useCallback(\n (v: string) => {\n const compute = (prev: IrisAccordionValue): IrisAccordionValue => {\n if (multiple) {\n const arr = Array.isArray(prev) ? prev : []\n const idx = arr.indexOf(v)\n return idx >= 0 ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (prev === v) return collapsible ? null : prev\n return v\n }\n if (isControlled) {\n const next = compute(controlledRef.current as IrisAccordionValue)\n onValueChange?.(next)\n return\n }\n setInternal((prev) => {\n const next = compute(prev)\n if (next !== prev) onValueChange?.(next)\n return next\n })\n },\n [multiple, collapsible, isControlled, onValueChange],\n )\n\n const rootId = React.useId()\n\n // ── Keyboard navigation (single-sourced in core controller) ──────────\n interface RegisteredItem {\n value: string\n el: React.RefObject<HTMLButtonElement | null>\n }\n const itemsRef = React.useRef<RegisteredItem[]>([])\n\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({\n count: itemsRef.current.length,\n loop: true,\n orientation: 'vertical',\n })\n }\n const nav = navRef.current\n\n // Reset nav when item count changes (items register via effects)\n React.useEffect(() => {\n nav.reset(itemsRef.current.length)\n })\n\n const activeIndex = useStore(nav.store)\n\n const registerItem = React.useCallback(\n (value: string, el: React.RefObject<HTMLButtonElement | null>): (() => void) => {\n if (!itemsRef.current.find((it) => it.value === value)) {\n itemsRef.current = [...itemsRef.current, { value, el }]\n }\n return () => {\n itemsRef.current = itemsRef.current.filter((it) => it.value !== value)\n }\n },\n [],\n )\n\n const focusItem = React.useCallback(\n (value: string) => {\n const idx = itemsRef.current.findIndex((it) => it.value === value)\n if (idx >= 0) nav.focus(idx)\n },\n [nav],\n )\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n if (action.type === 'focus') {\n const items = itemsRef.current\n items[action.target]?.el.current?.focus()\n }\n }\n\n const ctx = React.useMemo(\n () => ({ isOpen, toggle, rootId, collapsible, multiple, activeIndex, registerItem, focusItem }),\n [isOpen, toggle, rootId, collapsible, multiple, activeIndex, registerItem, focusItem],\n )\n\n return (\n <AccordionContext.Provider value={ctx}>\n <div\n {...rest}\n data-iris-accordion=\"\"\n data-iris-accordion-multiple={multiple ? 'true' : undefined}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n )\n}\n","import * as React from 'react'\nimport { useAccordionContext } from './context'\n\nexport interface IrisAccordionItemProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n value: string\n title?: React.ReactNode\n disabled?: boolean\n}\n\n/**\n * A single accordion section: a button-styled header + a collapsible body.\n * Wires `aria-expanded`, `aria-controls`, `role=\"region\"`, `aria-labelledby`.\n */\nexport const IrisAccordionItem = React.forwardRef<HTMLDivElement, IrisAccordionItemProps>(\n function IrisAccordionItem({ value, title, disabled = false, style, children, ...rest }, ref) {\n const ctx = useAccordionContext('IrisAccordionItem')\n const open = ctx.isOpen(value)\n const headerId = `${ctx.rootId}-h-${value}`\n const contentId = `${ctx.rootId}-c-${value}`\n\n // Register this item's trigger element for keyboard navigation\n const triggerRef = React.useRef<HTMLButtonElement | null>(null)\n React.useEffect(() => {\n return ctx.registerItem(value, triggerRef)\n }, [ctx.registerItem, value])\n\n const onTrigger = () => {\n if (disabled) return\n ctx.toggle(value)\n }\n const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n ctx.toggle(value)\n }\n }\n const onFocus = () => {\n if (!disabled) ctx.focusItem(value)\n }\n\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-accordion-item=\"\"\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled ? 'true' : undefined}\n style={{\n borderBottom: '1px solid var(--iris-border)',\n ...style,\n }}\n >\n <button\n type=\"button\"\n id={headerId}\n data-iris-accordion-trigger=\"\"\n aria-expanded={open}\n aria-controls={contentId}\n disabled={disabled || undefined}\n onClick={onTrigger}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n ref={triggerRef}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n padding: 'var(--iris-padding-md, 12px)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n font: 'inherit',\n textAlign: 'start',\n }}\n >\n <span data-iris-accordion-title=\"\" style={{ flex: 1, minWidth: 0 }}>\n {title}\n </span>\n <span\n aria-hidden=\"true\"\n data-iris-accordion-chevron=\"\"\n style={{\n transition: 'transform 160ms ease',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n color: 'var(--iris-muted)',\n }}\n >\n ⌄\n </span>\n </button>\n {open ? (\n <div\n role=\"region\"\n id={contentId}\n aria-labelledby={headerId}\n data-iris-accordion-content=\"\"\n style={{ padding: '0 var(--iris-padding-md, 12px) var(--iris-padding-md, 12px)' }}\n >\n {children}\n </div>\n ) : null}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisStepperOrientation = 'horizontal' | 'vertical'\nexport type IrisStepStatus = 'pending' | 'active' | 'completed' | 'error'\n\nexport interface StepperContextValue {\n current: number\n total: number\n orientation: IrisStepperOrientation\n linear: boolean\n /** Register a step at mount. Returns the assigned index and an unregister fn. */\n registerStep: () => { index: number; unregister: () => void }\n goTo: (index: number) => void\n computeStatus: (index: number) => IrisStepStatus\n}\n\nexport const StepperContext = React.createContext<StepperContextValue | null>(null)\n\nexport function useStepperContext(componentName: string): StepperContextValue {\n const ctx = React.useContext(StepperContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be inside an <IrisStepper>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { StepperContext, type IrisStepperOrientation, type IrisStepStatus } from './context'\n\nexport interface IrisStepperProps extends Omit<React.HTMLAttributes<HTMLOListElement>, 'onChange'> {\n value?: number\n defaultValue?: number\n onValueChange?: (next: number) => void\n orientation?: IrisStepperOrientation\n /** When true (default), forward navigation is blocked beyond the current step. */\n linear?: boolean\n}\n\n/**\n * Multi-step flow container. Children should be `IrisStepperStep`s; each\n * registers itself with the stepper's context and self-renders its indicator\n * + title.\n */\nexport function IrisStepper({\n value: valueProp,\n defaultValue = 0,\n onValueChange,\n orientation = 'horizontal',\n linear = true,\n style,\n children,\n ...rest\n}: IrisStepperProps): React.ReactElement {\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const [total, setTotal] = React.useState(0)\n\n const rawValue = isControlled ? (valueProp as number) : internal\n const current = Math.max(0, Math.min(total - 1, rawValue))\n\n const setValue = React.useCallback(\n (next: number) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange],\n )\n\n const nextIndexRef = React.useRef(0)\n const registerStep = React.useCallback(() => {\n const index = nextIndexRef.current\n nextIndexRef.current += 1\n setTotal((t) => Math.max(t, index + 1))\n return {\n index,\n unregister: () => {\n // No-op — indices are stable across step lifetimes; total only grows.\n },\n }\n }, [])\n\n const goTo = React.useCallback(\n (index: number) => {\n if (index < 0 || index >= total) return\n if (linear && index > current) return\n if (index === current) return\n setValue(index)\n },\n [total, linear, current, setValue],\n )\n\n const computeStatus = React.useCallback(\n (index: number): IrisStepStatus => {\n if (index < current) return 'completed'\n if (index === current) return 'active'\n return 'pending'\n },\n [current],\n )\n\n const ctx = React.useMemo(\n () => ({\n current,\n total,\n orientation,\n linear,\n registerStep,\n goTo,\n computeStatus,\n }),\n [current, total, orientation, linear, registerStep, goTo, computeStatus],\n )\n\n return (\n <StepperContext.Provider value={ctx}>\n <ol\n {...rest}\n data-iris-stepper=\"\"\n data-iris-stepper-orientation={orientation}\n role=\"list\"\n style={{\n display: 'flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n gap: 0,\n margin: 0,\n padding: 0,\n listStyle: 'none',\n ...style,\n }}\n >\n {children}\n </ol>\n </StepperContext.Provider>\n )\n}\n","import * as React from 'react'\nimport { useStepperContext, type IrisStepStatus } from './context'\n\nconst STATUS_COLOR: Record<IrisStepStatus, string> = {\n pending: 'var(--iris-muted)',\n active: 'var(--iris-primary)',\n completed: 'var(--iris-success)',\n error: 'var(--iris-danger)',\n}\n\nexport interface IrisStepperStepProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {\n title?: React.ReactNode\n description?: React.ReactNode\n /** Force a status; otherwise computed from position vs current. */\n status?: IrisStepStatus\n disabled?: boolean\n}\n\n/**\n * A single step in an {@link IrisStepper}. Auto-numbers based on its position\n * in the document order (registers on mount). Click forwards through `goTo`\n * which gates by `linear`.\n */\nexport const IrisStepperStep = React.forwardRef<HTMLLIElement, IrisStepperStepProps>(\n function IrisStepperStep({ title, description, status, disabled = false, style, ...rest }, ref) {\n const ctx = useStepperContext('IrisStepperStep')\n const [index, setIndex] = React.useState(-1)\n\n const register = ctx.registerStep\n React.useEffect(() => {\n const { index: i, unregister } = register()\n setIndex(i)\n return unregister\n }, [register])\n\n const effectiveStatus: IrisStepStatus =\n status ?? (index >= 0 ? ctx.computeStatus(index) : 'pending')\n\n const onClick = () => {\n if (disabled || index < 0) return\n ctx.goTo(index)\n }\n\n const isHorizontal = ctx.orientation === 'horizontal'\n const s = effectiveStatus\n const color = STATUS_COLOR[s]\n const isLast = index === ctx.total - 1\n const clickable = !disabled && (!ctx.linear || index <= ctx.current)\n\n const indicator = (\n <span\n data-iris-stepper-indicator=\"\"\n data-iris-stepper-status={s}\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n minWidth: 28,\n borderRadius: '50%',\n background: s === 'completed' ? color : 'var(--iris-background)',\n color: s === 'completed' ? 'var(--iris-primary-foreground, #fff)' : color,\n border: `2px solid ${color}`,\n fontSize: 13,\n fontWeight: 600,\n lineHeight: 1,\n transition: 'background-color 120ms ease, color 120ms ease, border-color 120ms ease',\n }}\n >\n {s === 'completed' ? '✓' : s === 'error' ? '!' : String(index + 1)}\n </span>\n )\n\n const titleNode = title ? (\n <div\n data-iris-stepper-title=\"\"\n style={{\n fontSize: 13,\n fontWeight: s === 'active' ? 600 : 500,\n color: s === 'pending' ? 'var(--iris-muted)' : 'var(--iris-foreground)',\n }}\n >\n {title}\n </div>\n ) : null\n\n const descNode = description ? (\n <div data-iris-stepper-description=\"\" style={{ fontSize: 12, color: 'var(--iris-muted)' }}>\n {description}\n </div>\n ) : null\n\n const connector = !isLast ? (\n <span\n data-iris-stepper-connector=\"\"\n aria-hidden=\"true\"\n style={\n isHorizontal\n ? {\n flex: 1,\n height: 1,\n background: index < ctx.current ? STATUS_COLOR.completed : 'var(--iris-border)',\n margin: '0 8px',\n alignSelf: 'center',\n }\n : {\n width: 1,\n minHeight: 24,\n background: index < ctx.current ? STATUS_COLOR.completed : 'var(--iris-border)',\n marginInlineStart: 13,\n marginTop: 4,\n marginBottom: 4,\n }\n }\n />\n ) : null\n\n return (\n <li\n {...rest}\n ref={ref}\n data-iris-stepper-step=\"\"\n data-iris-stepper-step-status={s}\n data-iris-stepper-step-disabled={disabled ? 'true' : undefined}\n aria-current={s === 'active' ? 'step' : undefined}\n style={\n isHorizontal\n ? {\n display: 'flex',\n alignItems: 'flex-start',\n flex: isLast ? '0 0 auto' : '1 1 0',\n gap: 8,\n minWidth: 0,\n ...style,\n }\n : {\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n ...style,\n }\n }\n >\n <button\n type=\"button\"\n disabled={!clickable || undefined}\n data-iris-stepper-step-trigger=\"\"\n onClick={onClick}\n style={{\n display: 'inline-flex',\n alignItems: isHorizontal ? 'center' : 'flex-start',\n gap: 8,\n background: 'transparent',\n border: 'none',\n padding: 0,\n cursor: clickable ? 'pointer' : 'default',\n color: 'inherit',\n font: 'inherit',\n textAlign: 'start',\n }}\n >\n {indicator}\n <div>\n {titleNode}\n {descNode}\n </div>\n </button>\n {connector}\n </li>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisToggleGroupType = 'single' | 'multiple'\nexport type IrisToggleGroupOrientation = 'horizontal' | 'vertical'\nexport type IrisToggleGroupVariant = 'outline' | 'solid'\nexport type IrisToggleGroupSize = 'sm' | 'md' | 'lg'\n\nexport interface ToggleGroupContextValue {\n type: IrisToggleGroupType\n orientation: IrisToggleGroupOrientation\n size: IrisToggleGroupSize\n variant: IrisToggleGroupVariant\n disabled: boolean\n isActive: (value: string) => boolean\n toggle: (value: string) => void\n registerItem: (value: string, el: { current: HTMLElement | null }) => () => void\n moveFocus: (from: string, delta: 1 | -1 | 'home' | 'end') => void\n focusItem: (value: string) => void\n}\n\nexport const ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null)\n\nexport function useToggleGroupContext(componentName: string): ToggleGroupContextValue {\n const ctx = React.useContext(ToggleGroupContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be inside an <IrisToggleGroup>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createSelectionModel, type SelectionModel } from '@iris-ui-kit/core'\nimport {\n createKeyboardNav,\n type KeyboardNavAction,\n type KeyboardNavController,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\nimport {\n ToggleGroupContext,\n type IrisToggleGroupOrientation,\n type IrisToggleGroupSize,\n type IrisToggleGroupType,\n type IrisToggleGroupVariant,\n} from './context'\n\nexport type IrisToggleGroupValue = string | string[] | null\n\nexport interface IrisToggleGroupSingleProps {\n type?: 'single'\n value?: string | null\n defaultValue?: string | null\n onValueChange?: (next: string | null) => void\n}\nexport interface IrisToggleGroupMultipleProps {\n type: 'multiple'\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (next: string[]) => void\n}\n\nexport type IrisToggleGroupProps = (IrisToggleGroupSingleProps | IrisToggleGroupMultipleProps) &\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'type'> & {\n orientation?: IrisToggleGroupOrientation\n size?: IrisToggleGroupSize\n variant?: IrisToggleGroupVariant\n disabled?: boolean\n }\n\ninterface RegisteredItem {\n value: string\n el: { current: HTMLElement | null }\n}\n\n/**\n * Segmented control. Two modes:\n * - `type=\"single\"` — radio-like; value is `string | null`. Root gets\n * `role=\"radiogroup\"`, items get `role=\"radio\"` + `aria-checked`.\n * - `type=\"multiple\"` — toggle-like; value is `string[]`. Root gets\n * `role=\"group\"`, items get `aria-pressed`.\n */\nexport function IrisToggleGroup(props: IrisToggleGroupProps): React.ReactElement {\n const {\n type = 'single',\n orientation = 'horizontal',\n size = 'md',\n variant = 'outline',\n disabled = false,\n value: valueProp,\n defaultValue,\n onValueChange,\n style,\n children,\n ...rest\n } = props as IrisToggleGroupProps & {\n type?: IrisToggleGroupType\n value?: IrisToggleGroupValue\n defaultValue?: IrisToggleGroupValue\n onValueChange?: (next: IrisToggleGroupValue) => void\n }\n\n const isMultiple = type === 'multiple'\n const isControlled = valueProp !== undefined\n\n // Selection logic (single/multiple toggle, dedup) lives in the core model;\n // this component only maps its union value shape (string | string[] | null)\n // to/from the model's flat key array.\n const toKeys = (v: IrisToggleGroupValue): string[] =>\n v == null ? [] : Array.isArray(v) ? v : [v]\n const fromKeys = (keys: string[]): IrisToggleGroupValue => (isMultiple ? keys : (keys[0] ?? null))\n\n const modelRef = React.useRef<SelectionModel<string> | null>(null)\n if (modelRef.current === null) {\n const initial: IrisToggleGroupValue =\n defaultValue !== undefined ? defaultValue : isMultiple ? [] : null\n modelRef.current = createSelectionModel<string>({\n mode: isMultiple ? 'multiple' : 'single',\n defaultSelected: toKeys(valueProp !== undefined ? valueProp : initial),\n onChange: (keys) =>\n (onValueChange as ((next: IrisToggleGroupValue) => void) | undefined)?.(fromKeys(keys)),\n })\n }\n const model = modelRef.current\n const selected = useStore(model.store)\n\n // Controlled: mirror the prop into the model without re-emitting onChange.\n React.useEffect(() => {\n if (isControlled) model.sync(toKeys(valueProp))\n }, [valueProp, isControlled, model])\n\n // Controlled groups RENDER from the prop (true controlled semantics): a press\n // emits onChange but the active items only change when the parent writes\n // `value` back; uncontrolled renders from the model store.\n const displaySelected = isControlled ? toKeys(valueProp) : selected\n\n const isActive = React.useCallback(\n (v: string): boolean => displaySelected.includes(v),\n [displaySelected],\n )\n\n const toggle = React.useCallback(\n (v: string) => {\n if (disabled) return\n // Re-base on the prop so the emitted next value is computed against what\n // the parent holds (not a prior, possibly-rejected, optimistic value).\n if (isControlled) model.sync(toKeys(valueProp))\n model.toggle(v)\n },\n [disabled, model, isControlled, valueProp],\n )\n\n // Registry kept in a ref; reads happen at event time.\n const itemsRef = React.useRef<RegisteredItem[]>([])\n\n // Keyboard navigation (single-sourced in core controller)\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({\n count: itemsRef.current.length,\n loop: true,\n orientation,\n })\n }\n const nav = navRef.current\n\n // Reset nav when item count changes\n React.useEffect(() => {\n nav.reset(itemsRef.current.length)\n })\n\n const registerItem = React.useCallback((value: string, el: { current: HTMLElement | null }) => {\n if (!itemsRef.current.find((it) => it.value === value)) {\n itemsRef.current = [...itemsRef.current, { value, el }]\n }\n return () => {\n itemsRef.current = itemsRef.current.filter((it) => it.value !== value)\n }\n }, [])\n\n const moveFocus = React.useCallback((from: string, delta: 1 | -1 | 'home' | 'end') => {\n const items = itemsRef.current\n if (items.length === 0) return\n const idx = items.findIndex((it) => it.value === from)\n let nextIdx: number\n if (delta === 'home') nextIdx = 0\n else if (delta === 'end') nextIdx = items.length - 1\n else nextIdx = (idx + delta + items.length) % items.length\n items[nextIdx]?.el.current?.focus()\n }, [])\n\n const focusItem = React.useCallback(\n (value: string) => {\n const idx = itemsRef.current.findIndex((it) => it.value === value)\n if (idx >= 0) nav.focus(idx)\n },\n [nav],\n )\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n if (action.type === 'focus') {\n const items = itemsRef.current\n items[action.target]?.el.current?.focus()\n } else if (action.type === 'select') {\n const items = itemsRef.current\n const item = items[action.target]\n if (item && !disabled) {\n toggle(item.value)\n }\n }\n }\n\n const ctx = React.useMemo(\n () => ({\n type: type as IrisToggleGroupType,\n orientation,\n size,\n variant,\n disabled,\n isActive,\n toggle,\n registerItem,\n moveFocus,\n focusItem,\n }),\n [\n type,\n orientation,\n size,\n variant,\n disabled,\n isActive,\n toggle,\n registerItem,\n moveFocus,\n focusItem,\n ],\n )\n\n return (\n <ToggleGroupContext.Provider value={ctx}>\n <div\n {...rest}\n role={isMultiple ? 'group' : 'radiogroup'}\n aria-orientation={orientation}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-toggle-group=\"\"\n data-iris-toggle-group-type={type}\n data-iris-toggle-group-orientation={orientation}\n data-iris-toggle-group-size={size}\n onKeyDown={handleKeyDown}\n style={{\n display: 'inline-flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n borderRadius: 'var(--iris-radius-md, 6px)',\n overflow: 'hidden',\n background: variant === 'outline' ? 'transparent' : 'var(--iris-surface)',\n border: variant === 'outline' ? '1px solid var(--iris-border)' : '1px solid transparent',\n ...style,\n }}\n >\n {children}\n </div>\n </ToggleGroupContext.Provider>\n )\n}\n","import * as React from 'react'\nimport { useToggleGroupContext } from './context'\n\nconst SIZE_PADDING: Record<'sm' | 'md' | 'lg', string> = {\n sm: '4px 10px',\n md: '6px 14px',\n lg: '8px 18px',\n}\nconst SIZE_FONT: Record<'sm' | 'md' | 'lg', string> = {\n sm: '12px',\n md: '13px',\n lg: '14px',\n}\n\nexport interface IrisToggleGroupItemProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'value' | 'type'\n> {\n value: string\n}\n\n/**\n * One toggle in an `IrisToggleGroup`. Renders a `<button>` with the correct\n * `role` / `aria-checked` / `aria-pressed` for the group's type.\n */\nexport const IrisToggleGroupItem = React.forwardRef<HTMLButtonElement, IrisToggleGroupItemProps>(\n function IrisToggleGroupItem(\n { value, disabled, onClick, onKeyDown, onFocus, style, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useToggleGroupContext('IrisToggleGroupItem')\n const elRef = React.useRef<HTMLButtonElement | null>(null)\n\n const captureRef = React.useCallback(\n (el: HTMLButtonElement | null) => {\n elRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLButtonElement | null>).current = el\n },\n [forwardedRef],\n )\n\n const register = ctx.registerItem\n React.useEffect(() => {\n return register(value, elRef)\n }, [register, value])\n\n const active = ctx.isActive(value)\n const isDisabled = Boolean(disabled) || ctx.disabled\n const isSingle = ctx.type === 'single'\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e)\n if (isDisabled) return\n ctx.toggle(value)\n }\n\n // Keyboard navigation (Arrow keys, Home, End, Space, Enter) is handled at\n // the IrisToggleGroup container level via createKeyboardNav.\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e)\n }\n\n const handleFocus = (e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e)\n ctx.focusItem(value)\n }\n\n return (\n <button\n {...rest}\n ref={captureRef}\n type=\"button\"\n role={isSingle ? 'radio' : undefined}\n aria-checked={isSingle ? active : undefined}\n aria-pressed={isSingle ? undefined : active}\n aria-disabled={isDisabled ? 'true' : undefined}\n disabled={isDisabled || undefined}\n tabIndex={active ? 0 : -1}\n data-iris-toggle-group-item=\"\"\n data-state={active ? 'on' : 'off'}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n padding: SIZE_PADDING[ctx.size],\n fontSize: SIZE_FONT[ctx.size],\n fontFamily: 'inherit',\n fontWeight: 500,\n lineHeight: 1,\n background: active ? 'var(--iris-primary)' : 'transparent',\n color: active ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n border: 'none',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: 'background-color 120ms ease, color 120ms ease',\n ...style,\n }}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport { getPageRange } from './types'\nimport { useI18n } from '../../i18n'\n\nexport type IrisPaginationSize = 'sm' | 'md'\n\nexport interface IrisPaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Current page (1-indexed). Controlled. */\n value?: number\n /** Initial page in uncontrolled mode. */\n defaultValue?: number\n onValueChange?: (next: number) => void\n /** Total number of items across all pages. */\n total: number\n pageSize?: number\n siblingCount?: number\n showFirstLast?: boolean\n size?: IrisPaginationSize\n disabled?: boolean\n}\n\n/**\n * Numeric page selector with prev/next + optional first/last buttons and\n * two-sided ellipsis. Stateless visual; the caller owns `value`.\n *\n * @example\n * <IrisPagination total={240} pageSize={20} value={page} onValueChange={setPage} />\n */\nexport function IrisPagination({\n value: valueProp,\n defaultValue = 1,\n onValueChange,\n total,\n pageSize = 10,\n siblingCount = 1,\n showFirstLast = false,\n size = 'md',\n disabled = false,\n style,\n ...rest\n}: IrisPaginationProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const totalPages = Math.max(1, Math.ceil(total / Math.max(1, pageSize)))\n const raw = isControlled ? (valueProp as number) : internal\n const current = Math.min(totalPages, Math.max(1, raw))\n const items = getPageRange(current, totalPages, siblingCount)\n\n const go = (page: number) => {\n if (disabled) return\n const next = Math.min(totalPages, Math.max(1, page))\n if (next === current) return\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const btnSize = size === 'sm' ? 28 : 32\n const fontSize = size === 'sm' ? 12 : 14\n\n const baseBtnStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: btnSize,\n height: btnSize,\n padding: '0 8px',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: 'pointer',\n fontSize,\n fontFamily: 'inherit',\n lineHeight: 1,\n }\n\n const renderBtn = (\n page: number | null,\n label: string,\n opts: { kind: string; disabled?: boolean; active?: boolean; key?: React.Key },\n ): React.ReactElement => {\n const isDisabled = opts.disabled || disabled\n const isActive = opts.active === true\n return (\n <button\n key={opts.key}\n type=\"button\"\n data-iris-pagination-item={opts.kind}\n data-iris-pagination-active={isActive ? 'true' : undefined}\n aria-label={label}\n aria-current={isActive ? 'page' : undefined}\n disabled={isDisabled || undefined}\n onClick={() => {\n if (page !== null) go(page)\n }}\n style={{\n ...baseBtnStyle,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n ...(isActive\n ? {\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n borderColor: 'var(--iris-primary)',\n }\n : {}),\n }}\n >\n {opts.kind === 'page' ? String(page) : label}\n </button>\n )\n }\n\n const renderEllipsis = (side: 'left' | 'right') => (\n <span\n key={`ellipsis-${side}`}\n data-iris-pagination-ellipsis={side}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: btnSize,\n height: btnSize,\n color: 'var(--iris-muted)',\n fontSize,\n }}\n >\n …\n </span>\n )\n\n return (\n <nav\n {...rest}\n aria-label={t('pagination.label')}\n data-iris-pagination=\"\"\n data-iris-pagination-size={size}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n ...style,\n }}\n >\n {showFirstLast\n ? renderBtn(1, t('pagination.first'), {\n kind: 'first',\n disabled: current <= 1,\n key: 'first',\n })\n : null}\n {renderBtn(current - 1, t('pagination.previous'), {\n kind: 'prev',\n disabled: current <= 1,\n key: 'prev',\n })}\n {items.map((item) => {\n if (item === 'ellipsis-left') return renderEllipsis('left')\n if (item === 'ellipsis-right') return renderEllipsis('right')\n return renderBtn(item, t('pagination.page', { page: item }), {\n kind: 'page',\n active: item === current,\n key: `page-${item}`,\n })\n })}\n {renderBtn(current + 1, t('pagination.next'), {\n kind: 'next',\n disabled: current >= totalPages,\n key: 'next',\n })}\n {showFirstLast\n ? renderBtn(totalPages, t('pagination.last'), {\n kind: 'last',\n disabled: current >= totalPages,\n key: 'last',\n })\n : null}\n </nav>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisBreadcrumbProps extends React.HTMLAttributes<HTMLElement> {\n /** String separator between crumbs. Default `/`. */\n separator?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Container for breadcrumb navigation. Renders a `<nav>` with an `<ol>` per\n * WAI-ARIA. Inserts `separator` between items and tags the last child with\n * `isCurrent` so it renders as plain text + `aria-current=\"page\"`.\n */\nexport const IrisBreadcrumb = React.forwardRef<HTMLElement, IrisBreadcrumbProps>(\n function IrisBreadcrumb({ separator = '/', children, ...rest }, ref) {\n const { t } = useI18n()\n const flat = React.Children.toArray(children).filter((c) =>\n React.isValidElement(c),\n ) as React.ReactElement[]\n const total = flat.length\n\n return (\n <nav\n {...rest}\n ref={ref as React.Ref<HTMLElement>}\n aria-label={t('breadcrumb.label')}\n data-iris-breadcrumb=\"\"\n >\n <ol\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n margin: 0,\n padding: 0,\n listStyle: 'none',\n fontSize: 14,\n }}\n >\n {flat.map((child, i) => {\n const isLast = i === total - 1\n const itemNode = (\n <li\n key={`item-${i}`}\n data-iris-breadcrumb-item=\"\"\n data-iris-breadcrumb-last={isLast ? 'true' : undefined}\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n {React.cloneElement(child, {\n isCurrent: isLast,\n } as Partial<unknown> as React.Attributes)}\n </li>\n )\n const sepNode = !isLast ? (\n <li\n key={`sep-${i}`}\n data-iris-breadcrumb-separator=\"\"\n aria-hidden=\"true\"\n style={{ color: 'var(--iris-muted)', display: 'inline-flex', alignItems: 'center' }}\n >\n {separator}\n </li>\n ) : null\n return (\n <React.Fragment key={`pair-${i}`}>\n {itemNode}\n {sepNode}\n </React.Fragment>\n )\n })}\n </ol>\n </nav>\n )\n },\n)\n","import * as React from 'react'\n\nexport interface IrisBreadcrumbItemProps extends React.HTMLAttributes<HTMLElement> {\n href?: string\n /** Internal: set by parent `IrisBreadcrumb` when this is the last item. */\n isCurrent?: boolean\n children?: React.ReactNode\n}\n\n/**\n * A single breadcrumb crumb. Renders an `<a>` when `href` is given and the\n * crumb is not the last one; otherwise a `<span>`. The `isCurrent` flag is\n * set automatically by the parent `IrisBreadcrumb` based on position.\n */\nexport const IrisBreadcrumbItem = React.forwardRef<HTMLElement, IrisBreadcrumbItemProps>(\n function IrisBreadcrumbItem({ href, isCurrent = false, style, children, ...rest }, ref) {\n const baseStyle: React.CSSProperties = {\n color: isCurrent ? 'var(--iris-muted)' : 'var(--iris-primary)',\n textDecoration: 'none',\n cursor: isCurrent ? 'default' : href ? 'pointer' : 'default',\n }\n\n const common = {\n ...rest,\n 'aria-current': isCurrent ? ('page' as const) : undefined,\n 'data-iris-breadcrumb-crumb': '',\n style: { ...baseStyle, ...style },\n }\n\n if (href && !isCurrent) {\n return (\n <a {...common} ref={ref as React.Ref<HTMLAnchorElement>} href={href}>\n {children}\n </a>\n )\n }\n return (\n <span {...common} ref={ref as React.Ref<HTMLSpanElement>}>\n {children}\n </span>\n )\n },\n)\n","import * as React from 'react'\n\nexport interface DragState {\n /** Pointer x in client coordinates. */\n x: number\n /** Pointer y in client coordinates. */\n y: number\n /** Cumulative delta from pointerdown. */\n dx: number\n /** Cumulative delta from pointerdown. */\n dy: number\n /** The active pointer event. */\n event: PointerEvent\n}\n\nexport interface UseDragOptions {\n /** The element the drag handle is bound to. */\n handle: React.RefObject<HTMLElement | null>\n /** Drag is only initiated for these pointer buttons. Default `[0]`. */\n buttons?: number[]\n onStart?: (state: DragState) => boolean | void\n onDrag?: (state: DragState) => void\n onEnd?: (state: DragState) => void\n disabled?: boolean\n}\n\n/**\n * Bind pointer-driven drag handlers to an element. Uses `setPointerCapture`\n * so the drag continues even after the pointer leaves the element. Cancels\n * on `pointercancel`.\n *\n * Pure pointer events — works for mouse, touch, and pen.\n */\nexport function useDrag(options: UseDragOptions): void {\n const { handle, buttons = [0], onStart, onDrag, onEnd, disabled = false } = options\n\n // Pin all callbacks/options into a ref so the effect can stay mounted across\n // re-renders without re-wiring listeners on every prop change.\n const latest = React.useRef({ onStart, onDrag, onEnd, disabled, buttons })\n latest.current = { onStart, onDrag, onEnd, disabled, buttons }\n\n React.useEffect(() => {\n const el = handle.current\n if (!el) return\n\n let active: PointerEvent | null = null\n let startX = 0\n let startY = 0\n\n const onPointerDown = (event: PointerEvent) => {\n if (latest.current.disabled) return\n if (!latest.current.buttons.includes(event.button)) return\n startX = event.clientX\n startY = event.clientY\n const state: DragState = {\n x: event.clientX,\n y: event.clientY,\n dx: 0,\n dy: 0,\n event,\n }\n const result = latest.current.onStart?.(state)\n if (result === false) return\n active = event\n el.setPointerCapture?.(event.pointerId)\n el.style.touchAction = 'none'\n event.preventDefault()\n }\n\n const onPointerMove = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n latest.current.onDrag?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n }\n\n const onPointerEnd = (event: PointerEvent) => {\n if (!active || active.pointerId !== event.pointerId) return\n el.releasePointerCapture?.(event.pointerId)\n el.style.touchAction = ''\n latest.current.onEnd?.({\n x: event.clientX,\n y: event.clientY,\n dx: event.clientX - startX,\n dy: event.clientY - startY,\n event,\n })\n active = null\n }\n\n el.addEventListener('pointerdown', onPointerDown)\n el.addEventListener('pointermove', onPointerMove)\n el.addEventListener('pointerup', onPointerEnd)\n el.addEventListener('pointercancel', onPointerEnd)\n return () => {\n el.removeEventListener('pointerdown', onPointerDown)\n el.removeEventListener('pointermove', onPointerMove)\n el.removeEventListener('pointerup', onPointerEnd)\n el.removeEventListener('pointercancel', onPointerEnd)\n }\n }, [handle])\n}\n","import * as React from 'react'\nimport { useDrag } from '../drag/useDrag'\n\nexport interface IrisDraggerPosition {\n x: number\n y: number\n}\n\nexport interface IrisDraggerBounds {\n minX?: number\n maxX?: number\n minY?: number\n maxY?: number\n}\n\nexport interface IrisDraggerProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'onDragStart' | 'onDragEnd'\n> {\n value?: IrisDraggerPosition\n defaultValue?: IrisDraggerPosition\n onValueChange?: (next: IrisDraggerPosition) => void\n onDragStart?: (start: IrisDraggerPosition) => void\n onDragEnd?: (end: IrisDraggerPosition) => void\n disabled?: boolean\n /** Constrain the position to within these bounds (px from wrapper origin). */\n bounds?: IrisDraggerBounds\n /** Optional drag handle (restricts the draggable region). */\n handle?: React.ReactNode\n}\n\n/**\n * Make a child element positionable by drag. The wrapper is absolutely\n * positioned at its parent's top-left; the position is driven by `value` /\n * `defaultValue` (px). Drag uses pointer capture so the gesture survives\n * the pointer leaving the element.\n */\nexport function IrisDragger({\n value: valueProp,\n defaultValue = { x: 0, y: 0 },\n onValueChange,\n onDragStart,\n onDragEnd,\n disabled = false,\n bounds = {},\n handle,\n style,\n children,\n ...rest\n}: IrisDraggerProps): React.ReactElement {\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<IrisDraggerPosition>(defaultValue)\n const position = isControlled ? (valueProp as IrisDraggerPosition) : internal\n\n const positionRef = React.useRef(position)\n positionRef.current = position\n\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const handleRef = React.useRef<HTMLDivElement | null>(null)\n const dragHandleRef = handle ? handleRef : rootRef\n\n const [dragging, setDragging] = React.useState(false)\n const startPosRef = React.useRef<IrisDraggerPosition>({ x: 0, y: 0 })\n\n const clamp = (p: IrisDraggerPosition): IrisDraggerPosition => ({\n x: Math.max(bounds.minX ?? -Infinity, Math.min(bounds.maxX ?? Infinity, p.x)),\n y: Math.max(bounds.minY ?? -Infinity, Math.min(bounds.maxY ?? Infinity, p.y)),\n })\n\n useDrag({\n handle: dragHandleRef,\n disabled,\n onStart: () => {\n startPosRef.current = positionRef.current\n setDragging(true)\n onDragStart?.(positionRef.current)\n },\n onDrag: ({ dx, dy }) => {\n const next = clamp({\n x: startPosRef.current.x + dx,\n y: startPosRef.current.y + dy,\n })\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n },\n onEnd: () => {\n setDragging(false)\n onDragEnd?.(positionRef.current)\n },\n })\n\n return (\n <div\n {...rest}\n ref={rootRef}\n data-iris-dragger=\"\"\n data-state={dragging ? 'dragging' : 'idle'}\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n transform: `translate3d(${position.x}px, ${position.y}px, 0)`,\n cursor: handle ? 'default' : disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n ...style,\n }}\n >\n {handle ? (\n <div\n ref={handleRef}\n data-iris-dragger-handle=\"\"\n style={{\n cursor: disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n }}\n >\n {handle}\n </div>\n ) : null}\n {children}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useDrag } from '../drag/useDrag'\n\nexport type IrisSplitterOrientation = 'horizontal' | 'vertical'\n\nexport interface IrisSplitterProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n orientation?: IrisSplitterOrientation\n /** Split ratio in [0, 1]. */\n value?: number\n defaultValue?: number\n onValueChange?: (next: number) => void\n /** Minimum size of the start pane in px. */\n minStart?: number\n /** Minimum size of the end pane in px. */\n minEnd?: number\n disabled?: boolean\n /** Start pane content. */\n start?: React.ReactNode\n /** End pane content. */\n end?: React.ReactNode\n}\n\n/**\n * Two-pane splitter with a draggable divider. The split position is a number\n * in `[0, 1]`. Clamping respects `minStart` / `minEnd` (in px) so panes\n * cannot collapse below a usable size.\n */\nexport function IrisSplitter({\n orientation = 'horizontal',\n value: valueProp,\n defaultValue = 0.5,\n onValueChange,\n minStart = 80,\n minEnd = 80,\n disabled = false,\n style,\n start,\n end,\n ...rest\n}: IrisSplitterProps): React.ReactElement {\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const ratio = isControlled ? (valueProp as number) : internal\n const ratioRef = React.useRef(ratio)\n ratioRef.current = ratio\n\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const handleRef = React.useRef<HTMLDivElement | null>(null)\n const [dragging, setDragging] = React.useState(false)\n\n const isHorizontal = orientation === 'horizontal'\n const startRatioRef = React.useRef(0)\n const totalSizeRef = React.useRef(0)\n\n const setRatio = (next: number) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n useDrag({\n handle: handleRef,\n disabled,\n onStart: () => {\n const container = containerRef.current\n if (!container) return false\n const rect = container.getBoundingClientRect()\n totalSizeRef.current = isHorizontal ? rect.width : rect.height\n if (totalSizeRef.current <= 0) return false\n startRatioRef.current = ratioRef.current\n setDragging(true)\n return undefined\n },\n onDrag: ({ dx, dy }) => {\n const total = totalSizeRef.current\n if (total <= 0) return\n const delta = isHorizontal ? dx : dy\n const nextRatio = startRatioRef.current + delta / total\n const minStartRatio = minStart / total\n const maxRatio = 1 - minEnd / total\n const clamped = Math.max(minStartRatio, Math.min(maxRatio, nextRatio))\n setRatio(clamped)\n },\n onEnd: () => {\n setDragging(false)\n },\n })\n\n return (\n <div\n {...rest}\n ref={containerRef}\n data-iris-splitter=\"\"\n data-iris-splitter-orientation={orientation}\n data-state={dragging ? 'dragging' : 'idle'}\n style={{\n display: 'flex',\n flexDirection: isHorizontal ? 'row' : 'column',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n ...style,\n }}\n >\n <div\n data-iris-splitter-pane=\"start\"\n style={{ flex: `${ratio} 1 0`, minWidth: 0, minHeight: 0, overflow: 'auto' }}\n >\n {start}\n </div>\n <div\n ref={handleRef}\n data-iris-splitter-handle=\"\"\n role=\"separator\"\n aria-orientation={orientation}\n aria-valuenow={Math.round(ratio * 100)}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={disabled ? -1 : 0}\n style={{\n flex: '0 0 4px',\n background: dragging ? 'var(--iris-primary)' : 'var(--iris-border)',\n cursor: disabled ? 'not-allowed' : isHorizontal ? 'col-resize' : 'row-resize',\n transition: 'background-color 120ms ease',\n position: 'relative',\n touchAction: 'none',\n }}\n />\n <div\n data-iris-splitter-pane=\"end\"\n style={{\n flex: `${1 - ratio} 1 0`,\n minWidth: 0,\n minHeight: 0,\n overflow: 'auto',\n }}\n >\n {end}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { useDrag } from '../drag/useDrag'\n\nexport type IrisResizerHandle =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport interface IrisResizerSize {\n width: number\n height: number\n}\n\nconst ALL_HANDLES: IrisResizerHandle[] = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n]\n\nconst HANDLE_CURSORS: Record<IrisResizerHandle, string> = {\n top: 'ns-resize',\n right: 'ew-resize',\n bottom: 'ns-resize',\n left: 'ew-resize',\n 'top-left': 'nwse-resize',\n 'top-right': 'nesw-resize',\n 'bottom-left': 'nesw-resize',\n 'bottom-right': 'nwse-resize',\n}\n\nfunction handlePosition(handle: IrisResizerHandle): React.CSSProperties {\n const s: React.CSSProperties = { position: 'absolute' }\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n\n if (t) s.top = -4\n if (b) s.bottom = -4\n if (l) s.left = -4\n if (r) s.right = -4\n\n const isCorner = (t || b) && (l || r)\n if (isCorner) {\n s.width = 12\n s.height = 12\n } else if (t || b) {\n s.left = 0\n s.right = 0\n s.height = 8\n } else {\n s.top = 0\n s.bottom = 0\n s.width = 8\n }\n s.cursor = HANDLE_CURSORS[handle]\n return s\n}\n\ninterface HandleRenderProps {\n handle: IrisResizerHandle\n disabled: boolean\n keepAspect: boolean\n sizeRef: React.MutableRefObject<IrisResizerSize>\n minWidth: number\n minHeight: number\n maxWidth: number\n maxHeight: number\n onUpdate: (next: IrisResizerSize) => void\n onResizeStart?: (start: IrisResizerSize) => void\n onResizeEnd?: (end: IrisResizerSize) => void\n}\n\nfunction ResizerHandle(props: HandleRenderProps): React.ReactElement {\n const handleRef = React.useRef<HTMLDivElement | null>(null)\n const startSizeRef = React.useRef<IrisResizerSize>({ width: 0, height: 0 })\n const aspectRef = React.useRef(1)\n\n useDrag({\n handle: handleRef,\n disabled: props.disabled,\n onStart: () => {\n startSizeRef.current = { ...props.sizeRef.current }\n aspectRef.current = startSizeRef.current.width / Math.max(1, startSizeRef.current.height)\n props.onResizeStart?.(startSizeRef.current)\n },\n onDrag: ({ dx, dy }) => {\n const { handle } = props\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n\n let nextW = startSizeRef.current.width\n let nextH = startSizeRef.current.height\n if (r) nextW = startSizeRef.current.width + dx\n if (l) nextW = startSizeRef.current.width - dx\n if (b) nextH = startSizeRef.current.height + dy\n if (t) nextH = startSizeRef.current.height - dy\n\n if (props.keepAspect && (t || b) && (l || r)) {\n nextH = nextW / aspectRef.current\n }\n\n nextW = Math.max(props.minWidth, Math.min(props.maxWidth, nextW))\n nextH = Math.max(props.minHeight, Math.min(props.maxHeight, nextH))\n props.onUpdate({ width: nextW, height: nextH })\n },\n onEnd: () => {\n props.onResizeEnd?.(props.sizeRef.current)\n },\n })\n\n return (\n <div\n ref={handleRef}\n data-iris-resizer-handle={props.handle}\n style={{\n ...handlePosition(props.handle),\n touchAction: 'none',\n background: 'transparent',\n zIndex: 1,\n }}\n />\n )\n}\n\nexport interface IrisResizerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value: IrisResizerSize\n onValueChange: (next: IrisResizerSize) => void\n onResizeStart?: (start: IrisResizerSize) => void\n onResizeEnd?: (end: IrisResizerSize) => void\n handles?: IrisResizerHandle[]\n minWidth?: number\n minHeight?: number\n maxWidth?: number\n maxHeight?: number\n disabled?: boolean\n /** Maintain `width / height` ratio when dragging corner handles. */\n keepAspect?: boolean\n}\n\n/**\n * 8-direction resizer wrapping a single child element. The child is rendered\n * inside a relatively positioned wrapper; handles overlay each side and\n * corner. Drag updates `value` ({ width, height } in px) clamped by min/max.\n */\nexport function IrisResizer({\n value,\n onValueChange,\n onResizeStart,\n onResizeEnd,\n handles = ALL_HANDLES,\n minWidth = 40,\n minHeight = 40,\n maxWidth = Infinity,\n maxHeight = Infinity,\n disabled = false,\n keepAspect = false,\n style,\n children,\n ...rest\n}: IrisResizerProps): React.ReactElement {\n const sizeRef = React.useRef(value)\n sizeRef.current = value\n\n return (\n <div\n {...rest}\n data-iris-resizer=\"\"\n data-state={disabled ? 'disabled' : 'idle'}\n style={{\n position: 'relative',\n display: 'inline-block',\n width: value.width,\n height: value.height,\n ...style,\n }}\n >\n {children}\n {handles.map((h) => (\n <ResizerHandle\n key={h}\n handle={h}\n disabled={disabled}\n keepAspect={keepAspect}\n sizeRef={sizeRef}\n minWidth={minWidth}\n minHeight={minHeight}\n maxWidth={maxWidth}\n maxHeight={maxHeight}\n onUpdate={onValueChange}\n onResizeStart={onResizeStart}\n onResizeEnd={onResizeEnd}\n />\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport {\n createKeyboardNav,\n type KeyboardNavController,\n type KeyboardNavAction,\n type Placement,\n type Size,\n} from '@iris-ui-kit/core'\nimport { useI18n } from '../../i18n'\nimport { useStore } from '../../useStore'\nimport { IrisPopover } from '../popover/Popover'\nimport { IrisPopoverTrigger } from '../popover/PopoverTrigger'\nimport { IrisPopoverContent } from '../popover/PopoverContent'\nimport type { IrisSelectItem } from './types'\n\nexport type IrisSelectSize = Size\n\nconst SIZE_STYLES: Record<\n IrisSelectSize,\n { padding: string; fontSize: number; minHeight: number }\n> = {\n sm: { padding: '4px 24px 4px 8px', fontSize: 12, minHeight: 28 },\n md: { padding: '6px 28px 6px 12px', fontSize: 14, minHeight: 34 },\n lg: { padding: '8px 32px 8px 12px', fontSize: 16, minHeight: 40 },\n}\n\nexport interface IrisSelectProps<T = unknown> {\n items: IrisSelectItem<T>[]\n value?: T\n defaultValue?: T\n onValueChange?: (value: T) => void\n placeholder?: string\n size?: IrisSelectSize\n disabled?: boolean\n placement?: Placement\n invalid?: boolean\n /** id forwarded to the trigger button. Set by `IrisFormField`. */\n id?: string\n /** Forwarded as `aria-describedby` on the trigger. Set by `IrisFormField`. */\n ariaDescribedby?: string\n /** Custom render for the trigger button. Receives current label + open state. */\n renderTrigger?: (state: { value: T | undefined; label: string; open: boolean }) => React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Single-select dropdown. Composes Popover (positioning + dismiss) with an\n * inline listbox (keyboard nav + selection). Arrow-key, typeahead, Home/End, and\n * Enter/Space navigation are single-sourced in `createKeyboardNav` (core).\n *\n * @example\n * <IrisSelect\n * items={[{ value: 'a', label: 'Apple' }, { value: 'b', label: 'Banana' }]}\n * value={fruit}\n * onValueChange={setFruit}\n * placeholder=\"Pick a fruit\"\n * />\n */\nexport function IrisSelect<T = unknown>({\n items,\n value: valueProp,\n defaultValue,\n onValueChange,\n placeholder,\n size = 'md',\n disabled = false,\n placement = 'bottom-start',\n invalid = false,\n id,\n ariaDescribedby,\n renderTrigger,\n style,\n className,\n}: IrisSelectProps<T>): React.ReactElement {\n const { t } = useI18n()\n const safeItems = items ?? []\n const resolvedPlaceholder = placeholder ?? t('select.placeholder')\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<T | undefined>(defaultValue)\n const value = isControlled ? valueProp : internal\n const [open, setOpen] = React.useState(false)\n\n const selectedItem = safeItems.find((it) => it.value === value) ?? null\n const label = selectedItem\n ? (selectedItem.label ?? String(selectedItem.value))\n : resolvedPlaceholder\n\n const setValue = (next: T) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n // ── Keyboard navigation (single-sourced in core controller) ────────────\n const isEnabled = React.useCallback((i: number) => !safeItems[i]?.disabled, [safeItems])\n const labels = React.useMemo(\n () => safeItems.map((it) => it.label ?? String(it.value)),\n [safeItems],\n )\n\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n // Initial active index: selected item, or first enabled\n const selIdx = safeItems.findIndex((it) => it.value === value)\n const initial = selIdx >= 0 && !safeItems[selIdx]?.disabled ? selIdx : undefined\n navRef.current = createKeyboardNav({\n count: safeItems.length,\n loop: true,\n isEnabled,\n labels,\n initialIndex: initial,\n })\n }\n const nav = navRef.current\n\n // Re-center on the selected item when items change\n React.useEffect(() => {\n nav.reset(safeItems.length)\n })\n\n // Reset active index when opening so focus starts at the selected (or first enabled) item.\n React.useEffect(() => {\n if (open) {\n const selIdx = safeItems.findIndex((it) => it.value === value)\n if (selIdx >= 0 && !safeItems[selIdx]?.disabled) {\n nav.focus(selIdx)\n } else {\n nav.goFirst()\n }\n }\n }, [open, safeItems, value, nav])\n\n const activeIndex = useStore(nav.store)\n\n const listRef = React.useRef<HTMLUListElement | null>(null)\n\n // When activeIndex changes while open, focus that option.\n React.useEffect(() => {\n if (!open || activeIndex < 0) return\n const el = listRef.current?.querySelector<HTMLElement>(\n `[data-iris-select-option-index=\"${activeIndex}\"]`,\n )\n el?.focus()\n }, [open, activeIndex])\n\n const selectItem = (item: IrisSelectItem<T>) => {\n if (item.disabled) return\n setValue(item.value)\n setOpen(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n if (action.type === 'select') {\n const item = safeItems[action.target]\n if (item) selectItem(item)\n }\n // Escape is implicitly handled by Popover's dismiss\n }\n\n const sizeStyles = SIZE_STYLES[size]\n const triggerStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm, 6px)',\n background: 'var(--iris-background)',\n color: selectedItem ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n border: `1px solid ${invalid ? 'var(--iris-danger)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n textAlign: 'start',\n fontFamily: 'inherit',\n position: 'relative',\n width: 'auto',\n minWidth: 140,\n padding: sizeStyles.padding,\n fontSize: sizeStyles.fontSize,\n minHeight: sizeStyles.minHeight,\n ...style,\n }\n\n const triggerNode = renderTrigger ? (\n renderTrigger({ value, label, open })\n ) : (\n <button\n type=\"button\"\n id={id}\n className={className}\n disabled={disabled || undefined}\n data-iris-select-trigger=\"\"\n data-iris-select-size={size}\n data-state={open ? 'open' : 'closed'}\n // A select opens a listbox, not a generic dialog — override the popover\n // trigger's default aria-haspopup=\"dialog\" (child props win in IrisSlot).\n aria-haspopup=\"listbox\"\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n style={triggerStyle}\n >\n <span style={{ flex: 1, minWidth: 0 }}>{label}</span>\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 16 16\"\n width=\"14\"\n height=\"14\"\n style={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n color: 'var(--iris-muted)',\n pointerEvents: 'none',\n }}\n >\n <path\n d=\"M4 6l4 4 4-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n )\n\n return (\n <IrisPopover open={open} onOpenChange={setOpen} placement={placement}>\n <IrisPopoverTrigger asChild>{triggerNode as React.ReactElement}</IrisPopoverTrigger>\n <IrisPopoverContent\n autoFocus={false}\n style={{ padding: 'var(--iris-padding-sm, 4px)', minWidth: 180 }}\n >\n <ul\n ref={listRef}\n role=\"listbox\"\n aria-label={t('select.options')}\n data-iris-select-listbox=\"\"\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n outline: 'none',\n }}\n >\n {safeItems.map((item, index) => {\n const isSelected = item.value === value\n const isActive = index === activeIndex\n return (\n <li\n key={String(item.value ?? index)}\n role=\"option\"\n tabIndex={isActive ? 0 : -1}\n aria-selected={isSelected}\n aria-disabled={item.disabled ? 'true' : undefined}\n data-iris-select-option=\"\"\n data-iris-select-option-index={index}\n data-state={isSelected ? 'selected' : isActive ? 'active' : 'idle'}\n onClick={item.disabled ? undefined : () => selectItem(item)}\n onFocus={() => nav.focus(index)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm, 6px)',\n padding: '6px var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.5 : 1,\n fontSize: 14,\n background: isSelected\n ? 'var(--iris-primary)'\n : isActive\n ? 'var(--iris-surface-hover)'\n : 'transparent',\n color: isSelected\n ? 'var(--iris-primary-foreground, #fff)'\n : 'var(--iris-foreground)',\n outline: 'none',\n }}\n >\n {item.label ?? String(item.value)}\n </li>\n )\n })}\n </ul>\n </IrisPopoverContent>\n </IrisPopover>\n )\n}\n","import * as React from 'react'\nimport { createVirtualizer, type Virtualizer } from '@iris-ui-kit/core'\n\nexport type IrisVirtualScrollAlign = 'start' | 'center' | 'end'\n\nexport interface IrisVirtualScrollHandle {\n scrollToIndex: (index: number, align?: IrisVirtualScrollAlign) => void\n /** Imperatively scroll to a pixel offset (clamped to the scrollable range). */\n scrollToOffset: (offset: number) => void\n refresh: () => void\n}\n\nexport interface IrisVirtualScrollProps<T = unknown> {\n items: readonly T[]\n /**\n * Per-item height in px. A number means every row shares that height; pass a\n * `(index) => px` function for known variable heights (memoize it); or\n * `'auto'` to measure rendered rows via `ResizeObserver` and cache them —\n * no need to know heights ahead of time (wrapped text, expandable rows).\n */\n itemHeight: number | ((index: number) => number) | 'auto'\n /** Initial row-height estimate used before measurement, when `itemHeight=\"auto\"`. */\n estimatedItemHeight?: number\n /** Viewport height. Number → px; string → CSS length passed through. */\n height?: number | string\n /** Number of extra rows to render above and below the viewport. */\n buffer?: number\n /** Stable key per item. Falls back to index. */\n keyOf?: (item: T, index: number) => string | number\n /** Render a single item. */\n renderItem: (item: T, index: number) => React.ReactNode\n onScroll?: (scrollTop: number) => void\n onRangeChange?: (range: { start: number; end: number }) => void\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Virtual scroller. Renders only the visible window of items plus a\n * configurable buffer above and below. Vertical-only. `itemHeight` may be a\n * fixed number, a `(index) => px` function for variable-height rows, or\n * `'auto'` to measure rendered rows.\n *\n * Internally driven by the stateful core {@link createVirtualizer}: a single\n * controller owns the measured-size cache (keyed by item, so a row's real\n * height survives scroll/reorder), the offset tree (O(log n) total/offset/\n * lower-bound — no O(n) rebuild per scroll), and `scrollToIndex`/`scrollToOffset`.\n * At a uniform `itemHeight` the visible window is identical to the bare math, so\n * the public props/output are unchanged.\n */\nexport const IrisVirtualScroll = React.forwardRef(function IrisVirtualScroll<T>(\n {\n items,\n itemHeight,\n estimatedItemHeight = 40,\n height = 400,\n buffer = 4,\n keyOf,\n renderItem,\n onScroll,\n onRangeChange,\n style,\n className,\n }: IrisVirtualScrollProps<T>,\n forwardedRef: React.Ref<IrisVirtualScrollHandle>,\n): React.ReactElement {\n const viewportRef = React.useRef<HTMLDivElement | null>(null)\n const [scrollTop, setScrollTop] = React.useState(0)\n const [viewportHeight, setViewportHeight] = React.useState(\n typeof height === 'number' ? height : 0,\n )\n const rafRef = React.useRef<number | null>(null)\n\n const auto = itemHeight === 'auto'\n const userFn = typeof itemHeight === 'function' ? itemHeight : null\n const fixedHeight = typeof itemHeight === 'number' ? itemHeight : 0\n // Variable when sizing comes from a user fn or `auto` measurement; for a\n // plain number the window uses the closed-form fixed formula below.\n const variable = userFn !== null || auto\n\n // Auto mode: measured row heights cached by index. `measureVersion` bumps to\n // recompute offsets when a measurement changes (keeps the existing semantics;\n // the virtualizer's keyed cache is fed from this).\n const measuredRef = React.useRef<Map<number, number>>(new Map())\n const [measureVersion, setMeasureVersion] = React.useState(0)\n\n // Items are keyed by position so we can pass a stable getItemKey to the\n // virtualizer (its measured cache survives reorder); `keyOf` is read through\n // a ref to avoid re-creating the controller when an inline closure changes.\n const itemsRef = React.useRef(items)\n itemsRef.current = items\n const keyOfRef = React.useRef(keyOf)\n keyOfRef.current = keyOf\n\n // estimateSize source of truth, read by the virtualizer per index.\n const estimateSize = React.useCallback(\n (index: number): number => {\n if (userFn) return userFn(index)\n if (auto) return measuredRef.current.get(index) ?? estimatedItemHeight\n return fixedHeight\n },\n [userFn, auto, estimatedItemHeight, fixedHeight],\n )\n const estimateRef = React.useRef(estimateSize)\n estimateRef.current = estimateSize\n\n // One stateful controller, rebuilt only when count or sizing MODE changes.\n // Sizing CHANGES within a mode (a new user fn / a measurement) are pushed via\n // remeasure below — recreating on every render would drop scroll state.\n const virtualizer = React.useMemo<Virtualizer>(\n () =>\n createVirtualizer({\n count: items.length,\n estimateSize: (index: number) => estimateRef.current(index),\n getItemKey: (index: number) => {\n const fn = keyOfRef.current\n const it = itemsRef.current[index]\n return fn && it !== undefined ? fn(it, index) : index\n },\n buffer,\n viewportSize: typeof height === 'number' ? height : 0,\n }),\n // Keyed on count / buffer / sizing-mode only: sizing CHANGES within a mode\n // are pushed via remeasure below so scroll state survives. `estimateSize` /\n // `getItemKey` / `height` are read live through refs, hence intentionally\n // not deps (recreating would reset the controller's scroll + cache).\n [items.length, buffer, variable],\n )\n\n // Push sizing changes (new user fn, a fresh measurement, or estimate change)\n // into the controller without recreating it: drop the cache + rebuild the\n // tree from the current `estimateSize`. Cheap; runs only when sizing changes.\n React.useLayoutEffect(() => {\n if (variable) virtualizer.remeasure()\n }, [virtualizer, userFn, measureVersion, estimatedItemHeight, variable])\n\n // Drive the controller's scroll + viewport from local state so its window,\n // total size, and offsets reflect the live scroll position. Done in a layout\n // effect (not render) so the external store mutation doesn't tear with\n // useSyncExternalStore; a no-op when unchanged.\n React.useLayoutEffect(() => {\n virtualizer.setViewportSize(viewportHeight)\n virtualizer.setScroll(scrollTop)\n }, [virtualizer, viewportHeight, scrollTop])\n\n const vstate = React.useSyncExternalStore(virtualizer.subscribe, virtualizer.getState)\n\n const totalHeight = vstate.totalSize\n // Offset/size of a single index, sourced from the controller's windowed\n // items (the render loop only ever asks for in-window indices). For the\n // common fixed case this is the same `i * height` arithmetic.\n const itemInState = (i: number) => vstate.items.find((it) => it.index === i)\n const offsetOf = (i: number): number =>\n variable ? (itemInState(i)?.start ?? i * estimateRef.current(i)) : i * fixedHeight\n const heightOf = (i: number): number =>\n variable ? (itemInState(i)?.size ?? estimateRef.current(i)) : fixedHeight\n\n // Render window. Fixed: closed-form (preserves the exact uniform-height\n // window). Variable/auto: the controller's measured window (offset-tree walk).\n const range = React.useMemo(() => {\n if (variable) return { start: vstate.startIndex, end: vstate.endIndex + 1 }\n const startRaw = Math.floor(scrollTop / Math.max(1, fixedHeight))\n const visibleCount = fixedHeight <= 0 ? 0 : Math.ceil(viewportHeight / fixedHeight)\n const start = Math.max(0, startRaw - buffer)\n const end = Math.min(items.length, startRaw + visibleCount + buffer)\n return { start, end }\n }, [variable, vstate, scrollTop, viewportHeight, fixedHeight, buffer, items.length])\n\n // Emit range change without firing onScroll's effect prematurely.\n const rangeRef = React.useRef(range)\n React.useEffect(() => {\n if (rangeRef.current.start !== range.start || rangeRef.current.end !== range.end) {\n rangeRef.current = range\n onRangeChange?.(range)\n }\n }, [range, onRangeChange])\n\n const handleScroll = () => {\n if (rafRef.current !== null) return\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null\n const el = viewportRef.current\n if (!el) return\n const next = el.scrollTop\n setScrollTop((prev) => {\n if (prev === next) return prev\n onScroll?.(next)\n return next\n })\n })\n }\n\n const measureViewport = React.useCallback(() => {\n const el = viewportRef.current\n if (!el) return\n setViewportHeight(el.clientHeight)\n }, [])\n\n React.useEffect(() => {\n measureViewport()\n if (typeof ResizeObserver === 'undefined') return\n const el = viewportRef.current\n if (!el) return\n const ro = new ResizeObserver(measureViewport)\n ro.observe(el)\n return () => ro.disconnect()\n }, [measureViewport])\n\n React.useEffect(() => {\n return () => {\n if (rafRef.current !== null) cancelAnimationFrame(rafRef.current)\n }\n }, [])\n\n // Auto-measurement: one ResizeObserver watches the rendered rows; each row's\n // measured height is cached by index and feeds the offset table.\n const rowObserverRef = React.useRef<ResizeObserver | null>(null)\n const indexByEl = React.useRef<WeakMap<Element, number>>(new WeakMap())\n const elByIndex = React.useRef<Map<number, HTMLElement>>(new Map())\n\n React.useEffect(() => {\n if (!auto || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver((entries) => {\n let changed = false\n for (const entry of entries) {\n const idx = indexByEl.current.get(entry.target)\n if (idx === undefined) continue\n const h = (entry.target as HTMLElement).offsetHeight\n if (h > 0 && measuredRef.current.get(idx) !== h) {\n measuredRef.current.set(idx, h)\n changed = true\n }\n }\n if (changed) setMeasureVersion((v) => v + 1)\n })\n rowObserverRef.current = ro\n // Row ref-callbacks run during commit, before this passive effect — so the\n // first window of rows is already registered but not yet observed.\n for (const el of elByIndex.current.values()) ro.observe(el)\n return () => {\n ro.disconnect()\n rowObserverRef.current = null\n }\n }, [auto])\n\n // Ref callback per rendered row (auto mode): (un)observe + track its index.\n const measureRef = (index: number) => (el: HTMLElement | null) => {\n const ro = rowObserverRef.current\n const prev = elByIndex.current.get(index)\n if (prev && prev !== el) {\n ro?.unobserve(prev)\n indexByEl.current.delete(prev)\n elByIndex.current.delete(index)\n }\n if (el) {\n elByIndex.current.set(index, el)\n indexByEl.current.set(el, index)\n ro?.observe(el)\n }\n }\n\n // Re-clamp scroll if items shrink past the visible region.\n React.useEffect(() => {\n const el = viewportRef.current\n if (!el) return\n const max = Math.max(0, totalHeight - viewportHeight)\n if (el.scrollTop > max) el.scrollTop = max\n }, [items.length, totalHeight, viewportHeight])\n\n const scrollToIndex = React.useCallback(\n (index: number, align: IrisVirtualScrollAlign = 'start') => {\n const el = viewportRef.current\n if (!el) return\n // The controller computes (and clamps to the scrollable range) the target\n // pixel offset; the host scroll element applies it.\n const target = virtualizer.scrollToIndex(index, align)\n el.scrollTop = target\n },\n [virtualizer],\n )\n\n const scrollToOffset = React.useCallback(\n (offset: number) => {\n const el = viewportRef.current\n if (!el) return\n el.scrollTop = virtualizer.scrollToOffset(offset)\n },\n [virtualizer],\n )\n\n const refresh = React.useCallback(() => {\n measureViewport()\n handleScroll()\n }, [measureViewport])\n\n React.useImperativeHandle(forwardedRef, () => ({ scrollToIndex, scrollToOffset, refresh }), [\n scrollToIndex,\n scrollToOffset,\n refresh,\n ])\n\n const containerStyle: React.CSSProperties = {\n position: 'relative',\n overflow: 'auto',\n height: typeof height === 'number' ? `${height}px` : height,\n width: '100%',\n ...style,\n }\n\n const visible: React.ReactElement[] = []\n for (let i = range.start; i < range.end; i += 1) {\n const item = items[i]\n if (item === undefined) continue\n const key = keyOf ? keyOf(item, i) : i\n visible.push(\n <div\n key={key}\n ref={auto ? measureRef(i) : undefined}\n data-iris-virtual-item=\"\"\n data-iris-virtual-index={i}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n // Auto mode: let content determine height so it can be measured.\n height: auto ? undefined : heightOf(i),\n transform: `translateY(${offsetOf(i)}px)`,\n }}\n >\n {renderItem(item, i)}\n </div>,\n )\n }\n\n return (\n <div\n ref={viewportRef}\n data-iris-virtual-scroll=\"\"\n className={className}\n onScroll={handleScroll}\n style={containerStyle}\n >\n <div\n data-iris-virtual-spacer=\"\"\n style={{ position: 'relative', height: totalHeight, width: '100%' }}\n >\n {visible}\n </div>\n </div>\n )\n}) as <T>(\n props: IrisVirtualScrollProps<T> & { ref?: React.Ref<IrisVirtualScrollHandle> },\n) => React.ReactElement\n","import * as React from 'react'\nimport {\n aggregate,\n buildHeaderMatrix,\n compareValues,\n computeVirtualRange,\n createCellRange,\n createExpansion,\n createSelectionModel,\n flattenLeafColumns,\n flattenTree,\n withSortedChildren,\n nextGridCell,\n type CellRangeController,\n type ExpansionModel,\n type GridNavKey,\n type SelectionModel,\n type TreeRow,\n} from '@iris-ui-kit/core'\nimport { IrisCheckbox } from '../checkbox/Checkbox'\nimport { useStore } from '../../useStore'\nimport { useI18n } from '../../i18n'\nimport { useDrag } from '../drag/useDrag'\nimport { IrisVirtualScroll } from '../virtual-scroll/VirtualScroll'\nimport type {\n IrisTableCellEditEvent,\n IrisTableColumn,\n IrisTableColumnWidths,\n IrisTableSortDirection,\n IrisTableSortState,\n IrisTableVirtualOptions,\n} from './types'\n\nconst RESIZE_STEP = 16\nconst SELECTION_COL_WIDTH = 40\nconst EXPAND_COL_WIDTH = 40\nconst DEFAULT_PINNED_WIDTH = 140\n\n/** Shared style for the full-width empty / loading / error state rows. */\nconst STATE_ROW_STYLE: React.CSSProperties = {\n padding: '32px 12px',\n textAlign: 'center',\n color: 'var(--iris-muted)',\n}\n\n/**\n * Focusable resize grip at a column header's trailing edge. Pointer drag (via\n * `useDrag`) or Arrow-Left/Right adjusts the column's pixel width. `role=\n * \"separator\"` + `aria-orientation` follow the WAI-ARIA window-splitter pattern.\n */\nfunction ColumnResizeHandle({\n colKey,\n label,\n width,\n minWidth,\n maxWidth,\n onResize,\n}: {\n colKey: string\n label: string\n width: number | undefined\n minWidth: number\n maxWidth: number\n onResize: (key: string, width: number) => void\n}): React.ReactElement {\n const ref = React.useRef<HTMLSpanElement | null>(null)\n const startRef = React.useRef(0)\n const clamp = (w: number): number => Math.max(minWidth, Math.min(maxWidth, Math.round(w)))\n // Prefer the explicit override; fall back to the rendered header width.\n const measure = (): number =>\n width ?? ref.current?.parentElement?.getBoundingClientRect().width ?? minWidth\n\n useDrag({\n handle: ref,\n onStart: () => {\n startRef.current = measure()\n },\n onDrag: ({ dx }) => onResize(colKey, clamp(startRef.current + dx)),\n })\n\n return (\n <span\n ref={ref}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={`Resize ${label}`}\n tabIndex={0}\n data-iris-table-resize-handle=\"\"\n data-column-key={colKey}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n e.stopPropagation()\n onResize(colKey, clamp(measure() - RESIZE_STEP))\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n e.stopPropagation()\n onResize(colKey, clamp(measure() + RESIZE_STEP))\n }\n }}\n style={{\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n width: 8,\n cursor: 'col-resize',\n touchAction: 'none',\n userSelect: 'none',\n }}\n />\n )\n}\n\nfunction getCellValue<Row extends Record<string, unknown>>(\n row: Row,\n column: IrisTableColumn<Row>,\n): unknown {\n const key = (column.dataIndex ?? column.key) as keyof Row\n return row[key]\n}\n\nexport interface IrisTableProps<Row extends Record<string, unknown> = Record<string, unknown>> {\n columns: IrisTableColumn<Row>[]\n data: Row[]\n /** Field to use as the row key. */\n rowKey?: string\n /** Selection mode. */\n selectable?: 'none' | 'single' | 'multi'\n selection?: Array<string | number>\n defaultSelection?: Array<string | number>\n onSelectionChange?: (next: Array<string | number>) => void\n sort?: IrisTableSortState | null\n defaultSort?: IrisTableSortState | null\n onSortChange?: (next: IrisTableSortState | null) => void\n striped?: boolean\n bordered?: boolean\n /** Enable column resizing (drag the header's trailing edge or focus + arrow keys). */\n resizableColumns?: boolean\n /** Controlled per-column pixel widths, keyed by column `key`. */\n columnWidths?: IrisTableColumnWidths\n defaultColumnWidths?: IrisTableColumnWidths\n onColumnWidthsChange?: (next: IrisTableColumnWidths) => void\n /** Called when an inline-editable cell is committed with a changed value. */\n onCellEdit?: (event: IrisTableCellEditEvent<Row>) => void\n /**\n * Render an expandable detail panel beneath a row. Providing this adds a\n * leading expand-toggle column; clicking it reveals a full-width detail row.\n * (Not applied in the virtual-scroll path.)\n */\n renderDetail?: (row: Row, rowIndex: number) => React.ReactNode\n /** Which rows can expand a detail panel. Defaults to all rows when `renderDetail` is set. */\n rowExpandable?: (row: Row, rowIndex: number) => boolean\n /** Initially-expanded row keys (uncontrolled). Shared by detail rows + tree rows. */\n defaultExpandedRowKeys?: Array<string | number>\n /** Notified with the expanded row keys whenever they change. */\n onExpandedRowsChange?: (keys: Array<string | number>) => void\n /**\n * Read a row's child rows to render the table as a TREE. Providing this enables\n * tree mode: `data` is treated as the root rows, each row's first cell gains a\n * depth indent + an expand/collapse toggle (when it has children), and the\n * expand state reuses `defaultExpandedRowKeys`/`onExpandedRowsChange`. Column\n * sort reorders siblings hierarchically (each level sorted, structure kept),\n * and tree rows virtualize like flat rows when `virtualScroll` is set (unless\n * `renderDetail` is also used, since detail panels are variable-height).\n */\n getSubRows?: (row: Row) => Row[] | undefined\n /**\n * Enable WAI-ARIA grid keyboard navigation: the table becomes `role=\"grid\"`\n * and Arrow / Home / End / Page Up·Down move a roving cell focus across the\n * data cells. Off by default; opt-in and additive (no effect on mouse / Tab\n * behavior). Pairs best without virtualization (the focused cell must be\n * rendered) and does not hijack keystrokes while a cell is being edited.\n */\n keyboardNavigation?: boolean\n /** Enable virtual scrolling for the body (renders only the visible window). */\n virtualScroll?: IrisTableVirtualOptions\n /**\n * Render only the horizontally-visible columns (plus pinned + a small\n * overscan) for very wide tables. Needs numeric column widths; the table\n * becomes a horizontal scroll container. Off-screen grid tracks stay sized,\n * so alignment, resize, and pinned columns keep working.\n */\n columnVirtualization?: boolean\n /**\n * Enable rectangular cell-range selection (Excel-style). Click starts a\n * range; Shift+Click or Shift+Arrow extends it; Escape clears it.\n * Cells within the range get `data-iris-cell-selected=\"true\"`.\n */\n cellRange?: boolean\n /** Empty state node (replaces the row body when `data` is empty). */\n emptyState?: React.ReactNode\n /** Show the loading state instead of rows. */\n loading?: boolean\n /** Show the error state instead of rows (takes precedence over loading). */\n error?: boolean\n /** Custom loading-state node (defaults to the localized `table.loading`). */\n loadingState?: React.ReactNode\n /** Custom error-state node (defaults to the localized `table.error`). */\n errorState?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Data-driven table. Renders as a CSS-grid layout (no native `<table>`) so it\n * can support future virtual scroll / column resize uniformly. Wires ARIA\n * roles (`table` / `row` / `columnheader` / `cell`) for screen readers.\n *\n * Sortable columns cycle `none → asc → desc → none` on click.\n */\nexport function IrisTable<Row extends Record<string, unknown>>({\n columns,\n data,\n rowKey = 'id',\n selectable = 'none',\n selection: selectionProp,\n defaultSelection,\n onSelectionChange,\n sort: sortProp,\n defaultSort,\n onSortChange,\n striped = false,\n bordered = true,\n resizableColumns = false,\n columnWidths: columnWidthsProp,\n defaultColumnWidths,\n onColumnWidthsChange,\n onCellEdit,\n renderDetail,\n rowExpandable,\n defaultExpandedRowKeys,\n onExpandedRowsChange,\n getSubRows,\n keyboardNavigation = false,\n cellRange = false,\n virtualScroll,\n columnVirtualization = false,\n emptyState,\n loading = false,\n error = false,\n loadingState,\n errorState,\n style,\n className,\n}: IrisTableProps<Row>): React.ReactElement {\n const { t } = useI18n()\n // Defensive: null/undefined columns → empty array\n const safeColumns = React.useMemo(() => columns ?? [], [columns])\n\n // Multi-level (grouped) headers: a column with `children` forms a header group. The BODY always renders the leaf columns; only the header gains extra rows.\n\n // When nothing is grouped, `leafColumns` is the original `safeColumns` (same\n // reference) so the flat path is byte-identical.\n const grouped = React.useMemo(\n () => safeColumns.some((c) => c.children && c.children.length > 0),\n [safeColumns],\n )\n const leafColumns = React.useMemo(\n () => (grouped ? flattenLeafColumns(safeColumns) : safeColumns),\n [grouped, safeColumns],\n )\n const headerMatrix = React.useMemo(\n () => (grouped ? buildHeaderMatrix(safeColumns) : null),\n [grouped, safeColumns],\n )\n\n // Controlled / uncontrolled state.\n const sortControlled = sortProp !== undefined\n const [sortInternal, setSortInternal] = React.useState<IrisTableSortState | null>(\n defaultSort ?? null,\n )\n const sort = sortControlled ? (sortProp as IrisTableSortState | null) : sortInternal\n\n // Row-selection logic (single/multiple toggle, dedup, select-all,\n // controlled/uncontrolled) is single-sourced in the core model; keys are the\n // string|number row keys. The sort / edit / resize / virtual logic below is\n // untouched. Mode is fixed at creation from `selectable` (as ToggleGroup\n // fixes its mode from `type`).\n const selControlled = selectionProp !== undefined\n const selModelRef = React.useRef<SelectionModel<string | number> | null>(null)\n if (selModelRef.current === null) {\n selModelRef.current = createSelectionModel<string | number>({\n mode: selectable === 'single' ? 'single' : 'multiple',\n defaultSelected: selControlled\n ? (selectionProp as Array<string | number>)\n : (defaultSelection ?? []),\n onChange: (next) => onSelectionChange?.(next),\n })\n }\n const selModel = selModelRef.current\n const selection = useStore(selModel.store)\n\n // Controlled: mirror the prop into the model without re-emitting onChange.\n React.useEffect(() => {\n if (selControlled) selModel.sync(selectionProp as Array<string | number>)\n }, [selectionProp, selControlled, selModel])\n\n // Controlled tables RENDER from the prop (true controlled semantics): a local\n // toggle emits onSelectionChange, but the displayed selection only changes when\n // the parent writes `selection` back — so a parent that validates/rejects a\n // change no longer sees the row flip optimistically. Uncontrolled renders from\n // the model store as before.\n const displaySelection = selControlled ? (selectionProp as Array<string | number>) : selection\n // Re-base the model on the controlled prop before a toggle so the emitted next\n // value is computed against what the parent actually holds (not a prior,\n // possibly-rejected, optimistic value).\n const rebaseToProp = (): void => {\n if (selControlled) selModel.sync(selectionProp as Array<string | number>)\n }\n\n // Expandable detail rows: a leading toggle column + a full-width detail panel,\n // driven by the framework-agnostic createExpansion (multiple-open).\n const hasDetail = renderDetail !== undefined\n const expansionRef = React.useRef<ExpansionModel | null>(null)\n if (expansionRef.current === null) {\n expansionRef.current = createExpansion({\n mode: 'multiple',\n defaultExpanded: (defaultExpandedRowKeys ?? []).map(String),\n onChange: (keys) => onExpandedRowsChange?.(keys),\n })\n }\n const expansion = expansionRef.current\n const expandedKeys = useStore(expansion.store)\n const isRowExpandable = (row: Row, idx: number): boolean =>\n hasDetail && (rowExpandable ? rowExpandable(row, idx) : true)\n\n const widthsControlled = columnWidthsProp !== undefined\n const [widthsInternal, setWidthsInternal] = React.useState<IrisTableColumnWidths>(\n defaultColumnWidths ?? {},\n )\n const columnWidths = widthsControlled\n ? (columnWidthsProp as IrisTableColumnWidths)\n : widthsInternal\n const setColumnWidth = (key: string, width: number) => {\n const next = { ...columnWidths, [key]: width }\n if (!widthsControlled) setWidthsInternal(next)\n onColumnWidthsChange?.(next)\n }\n\n // Inline editing: one cell at a time, keyed by `${rowKey}::${colKey}`. The\n // draft is mirrored into a ref so a commit reads the latest value even when\n // the change + Enter events are processed in the same React batch.\n const [editingCellId, setEditingCellId] = React.useState<string | null>(null)\n const [editingDraft, setEditingDraft] = React.useState('')\n const [editError, setEditError] = React.useState<string | null>(null)\n const draftRef = React.useRef('')\n const editorRef = React.useRef<HTMLInputElement | null>(null)\n const cellId = (rowIdent: string | number, colKey: string): string => `${rowIdent}::${colKey}`\n\n React.useEffect(() => {\n if (editingCellId !== null) editorRef.current?.focus()\n }, [editingCellId])\n\n const setDraft = (value: string) => {\n draftRef.current = value\n setEditingDraft(value)\n }\n const beginEdit = (row: Row, col: IrisTableColumn<Row>, rowIdent: string | number) => {\n if (!col.editable) return\n const current = getCellValue(row, col)\n setDraft(current == null ? '' : String(current))\n setEditError(null)\n setEditingCellId(cellId(rowIdent, col.key))\n }\n const cancelEdit = () => {\n setEditError(null)\n setEditingCellId(null)\n }\n const commitEdit = (row: Row, col: IrisTableColumn<Row>, rowIndex: number) => {\n if (editingCellId === null) return\n const oldValue = getCellValue(row, col)\n const draft = draftRef.current\n const newValue =\n col.editor === 'number'\n ? draft === '' || Number.isNaN(Number(draft))\n ? oldValue\n : Number(draft)\n : draft\n // A column validator can reject the draft: keep the editor open, surface the\n // message, and skip the commit until the value is valid (or the user cancels).\n if (col.validate) {\n const error = col.validate(newValue, row)\n if (error) {\n setEditError(error)\n return\n }\n }\n setEditError(null)\n setEditingCellId(null)\n if (newValue !== oldValue) {\n onCellEdit?.({ row, column: col, oldValue, newValue, rowIndex })\n }\n }\n\n // Sorted data.\n // The active sort comparator (or null). Shared by the root-row sort AND the\n // tree-mode child sort so a sortable tree reorders siblings at every depth.\n const sortComparator = React.useMemo<((a: Row, b: Row) => number) | null>(() => {\n if (!sort) return null\n const col = leafColumns.find((c) => c.key === sort.key)\n if (!col) return null\n const dir = sort.direction === 'asc' ? 1 : -1\n const sorter =\n col.sorter ?? ((a: Row, b: Row) => compareValues(getCellValue(a, col), getCellValue(b, col)))\n return (a, b) => sorter(a, b) * dir\n }, [leafColumns, sort])\n\n const sortedData = React.useMemo(() => {\n if (!sortComparator) return data ?? []\n return [...(data ?? [])].sort(sortComparator)\n }, [data, sortComparator])\n\n const setSort = (next: IrisTableSortState | null) => {\n if (!sortControlled) setSortInternal(next)\n onSortChange?.(next)\n }\n\n const cycleSort = (col: IrisTableColumn<Row>) => {\n if (!col.sortable) return\n if (!sort || sort.key !== col.key) {\n setSort({ key: col.key, direction: 'asc' })\n return\n }\n if (sort.direction === 'asc') {\n setSort({ key: col.key, direction: 'desc' })\n return\n }\n setSort(null)\n }\n\n const onHeaderKeyDown = (e: React.KeyboardEvent<HTMLDivElement>, col: IrisTableColumn<Row>) => {\n if (!col.sortable) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n cycleSort(col)\n }\n }\n\n const rowKeyOf = (row: Row): string | number => {\n return (row as Record<string, unknown>)[rowKey] as string | number\n }\n\n // Single mode toggles off / replaces, multiple toggles inclusion — both are\n // the model's `toggle` semantics for the row's key.\n const toggleRow = (row: Row) => {\n if (selectable === 'none') return\n rebaseToProp()\n selModel.toggle(rowKeyOf(row))\n }\n\n // Tree mode (opt-in via getSubRows): flatten the data into the visible rows\n // honoring the (shared) expansion model. `bodyData` is the row list the body,\n // selection, and summary all operate on — identical to `sortedData` in flat\n // mode, so non-tree behavior is unchanged.\n const treeMode = getSubRows !== undefined\n const flatTree = React.useMemo<Array<TreeRow<Row>> | null>(\n () =>\n treeMode\n ? flattenTree<Row>(sortedData, {\n getKey: (r) => String(rowKeyOf(r)),\n // With an active sort, sort each level's children by the same\n // comparator so the whole tree reorders hierarchically.\n getChildren: sortComparator\n ? withSortedChildren((r) => getSubRows!(r), sortComparator)\n : (r) => getSubRows!(r),\n isExpanded: (k) => expandedKeys.includes(k),\n })\n : null,\n // Recompute on data / expansion / accessor / sort change (rowKeyOf reads `rowKey`).\n [treeMode, sortedData, getSubRows, expandedKeys, rowKey, sortComparator],\n )\n const bodyData = flatTree ? flatTree.map((t) => t.row) : sortedData\n\n const toggleAll = () => {\n if (selectable !== 'multi') return\n rebaseToProp()\n selModel.toggleAll(bodyData.map(rowKeyOf))\n }\n\n const allKeys = bodyData.map(rowKeyOf)\n const allSelected =\n selectable === 'multi' &&\n (selControlled\n ? allKeys.length > 0 && allKeys.every((k) => displaySelection.includes(k))\n : selModel.isAllSelected(allKeys))\n const someSelected =\n selectable === 'multi' && allKeys.some((k) => displaySelection.includes(k)) && !allSelected\n\n const gridTemplateColumns = React.useMemo(() => {\n const widths: string[] = []\n if (hasDetail) widths.push(`${EXPAND_COL_WIDTH}px`)\n if (selectable !== 'none') widths.push('40px')\n for (const col of leafColumns) {\n const override = columnWidths[col.key]\n if (override != null) widths.push(`${override}px`)\n else if (typeof col.width === 'number') widths.push(`${col.width}px`)\n else if (typeof col.width === 'string') widths.push(col.width)\n else widths.push('minmax(0, 1fr)')\n }\n return widths.join(' ')\n }, [leafColumns, selectable, columnWidths, hasDetail])\n\n // Sticky offsets for pinned columns: each accumulates the resolved widths of\n // the pinned columns between it and its edge (plus the selection column on\n // the left). Requires a numeric width; falls back to a default.\n const pinnedOffsets = React.useMemo(() => {\n const map: Record<string, { side: 'left' | 'right'; offset: number }> = {}\n const widthOf = (col: IrisTableColumn<Row>): number =>\n columnWidths[col.key] ?? (typeof col.width === 'number' ? col.width : DEFAULT_PINNED_WIDTH)\n let left =\n (hasDetail ? EXPAND_COL_WIDTH : 0) + (selectable !== 'none' ? SELECTION_COL_WIDTH : 0)\n for (const col of leafColumns) {\n if (col.pinned === 'left') {\n map[col.key] = { side: 'left', offset: left }\n left += widthOf(col)\n }\n }\n let right = 0\n for (let i = leafColumns.length - 1; i >= 0; i -= 1) {\n const col = leafColumns[i]\n if (col?.pinned === 'right') {\n map[col.key] = { side: 'right', offset: right }\n right += widthOf(col)\n }\n }\n return map\n }, [leafColumns, columnWidths, selectable])\n\n const pinnedStyle = (key: string): React.CSSProperties | null => {\n const p = pinnedOffsets[key]\n if (!p) return null\n return {\n position: 'sticky',\n [p.side]: p.offset,\n zIndex: 1,\n background: 'var(--iris-background)',\n }\n }\n\n // -------- Column virtualization (opt-in) --------\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const [scrollLeft, setScrollLeft] = React.useState(0)\n const [viewportWidth, setViewportWidth] = React.useState(0)\n\n // Cell-range selection (opt-in via `cellRange`). The controller lives in a\n // ref so it is never re-created; we bridge it to React via\n // useSyncExternalStore through the controller's getState/subscribe API.\n const cellRangeRef = React.useRef<CellRangeController | null>(null)\n if (cellRangeRef.current === null) {\n cellRangeRef.current = createCellRange()\n }\n const cellRangeCtrl = cellRangeRef.current\n // Subscribe React to the range store — re-renders whenever anchor/active changes.\n // `cellRangeState` drives re-renders; `isInRange` reads fresh state at render time.\n const cellRangeState = React.useSyncExternalStore(\n cellRangeCtrl.subscribe,\n cellRangeCtrl.getState,\n cellRangeCtrl.getState,\n )\n // Derive a stable isInRange function from the subscribed snapshot so that\n // TypeScript treats `cellRangeState` as consumed and every cell reads the\n // current range (computed from anchor/active in the snapshot, not a closure).\n const isInRange = React.useCallback(\n (row: number, col: number): boolean => {\n const { anchor, active } = cellRangeState\n if (!anchor || !active) return false\n const minRow = Math.min(anchor.row, active.row)\n const maxRow = Math.max(anchor.row, active.row)\n const minCol = Math.min(anchor.col, active.col)\n const maxCol = Math.max(anchor.col, active.col)\n return row >= minRow && row <= maxRow && col >= minCol && col <= maxCol\n },\n [cellRangeState],\n )\n\n // Grid keyboard navigation (opt-in): roving cell focus over the data cells.\n const [focusedCell, setFocusedCell] = React.useState<{ row: number; col: number } | null>(null)\n const GRID_NAV_KEYS = new Set([\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n ])\n const handleGridKey = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (!keyboardNavigation || !GRID_NAV_KEYS.has(e.key)) return\n // Only navigate from a grid cell — never hijack arrows inside an editing\n // cell's <input> (which carries no data-grid-row).\n const target = e.target as HTMLElement\n if (target.dataset.gridRow === undefined) return\n e.preventDefault()\n const current = focusedCell ?? { row: 0, col: 0 }\n const next = nextGridCell(current, e.key as GridNavKey, {\n rowCount: bodyData.length,\n colCount: leafColumns.length,\n pageSize: 10,\n })\n setFocusedCell(next)\n const cell = rootRef.current?.querySelector<HTMLElement>(\n `[data-grid-row=\"${next.row}\"][data-grid-col=\"${next.col}\"]`,\n )\n cell?.focus()\n }\n\n // Cell-range keyboard handler: Shift+Arrow extends the range, Escape clears it.\n const CELL_RANGE_ARROW_KEYS = new Set(['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'])\n const handleCellRangeKey = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (!cellRange) return\n if (e.key === 'Escape') {\n cellRangeCtrl.clearRange()\n return\n }\n if (!e.shiftKey || !CELL_RANGE_ARROW_KEYS.has(e.key)) return\n const target = e.target as HTMLElement\n const rowAttr = target.dataset.irisCellRow\n const colAttr = target.dataset.irisCellCol\n if (rowAttr === undefined || colAttr === undefined) return\n e.preventDefault()\n const row = Number(rowAttr)\n const col = Number(colAttr)\n const anchor = cellRangeCtrl.getState().anchor\n const active = anchor ? (cellRangeCtrl.getState().active ?? { row, col }) : { row, col }\n let nextRow = active.row\n let nextCol = active.col\n if (e.key === 'ArrowUp') nextRow = Math.max(0, nextRow - 1)\n else if (e.key === 'ArrowDown') nextRow = Math.min(bodyData.length - 1, nextRow + 1)\n else if (e.key === 'ArrowLeft') nextCol = Math.max(0, nextCol - 1)\n else nextCol = Math.min(leafColumns.length - 1, nextCol + 1)\n cellRangeCtrl.extendRange(nextRow, nextCol)\n }\n\n const resolvedColWidths = React.useMemo(\n () =>\n leafColumns.map(\n (col) =>\n columnWidths[col.key] ??\n (typeof col.width === 'number' ? col.width : DEFAULT_PINNED_WIDTH),\n ),\n [leafColumns, columnWidths],\n )\n\n React.useEffect(() => {\n if (!columnVirtualization) return\n const el = rootRef.current\n if (!el) return\n const measure = () => setViewportWidth(el.clientWidth)\n measure()\n if (typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n return () => ro.disconnect()\n }, [columnVirtualization])\n\n // Set of column indices to render: the visible window + overscan, always\n // unioned with pinned columns. `null` ⇒ render every column (feature off).\n const visibleColSet = React.useMemo(() => {\n if (!columnVirtualization) return null\n const w = computeVirtualRange({\n itemCount: leafColumns.length,\n scrollTop: scrollLeft,\n viewportSize: viewportWidth,\n itemSize: (i) => resolvedColWidths[i] ?? DEFAULT_PINNED_WIDTH,\n buffer: 2,\n })\n const set = new Set<number>()\n for (let i = w.startIndex; i <= w.endIndex; i += 1) set.add(i)\n leafColumns.forEach((col, i) => {\n if (col.pinned) set.add(i)\n })\n return set\n }, [columnVirtualization, leafColumns, scrollLeft, viewportWidth, resolvedColWidths])\n\n // 1-based grid track for a column (after the optional selection track), so a\n // rendered cell lands in the right place even when earlier cells are skipped.\n const colTrack = (i: number): number => (hasDetail ? 1 : 0) + (selectable !== 'none' ? 2 : 1) + i\n\n const baseCellStyle: React.CSSProperties = {\n padding: '8px 12px',\n display: 'flex',\n alignItems: 'center',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }\n const borderStyle = bordered ? '1px solid var(--iris-border)' : 'none'\n\n // Each row is its own CSS grid (sharing `gridTemplateColumns`) rather than the\n // root being one grid — this keeps columns aligned while letting the virtual\n // scroller absolutely-position rows. `extraStyle` lets the virtual window set\n // a row's height to fill its slot.\n const renderRow = (\n row: Row,\n idx: number,\n extraStyle?: React.CSSProperties,\n treeMeta?: TreeRow<Row>,\n ): React.ReactElement => {\n const k = rowKeyOf(row)\n const selected = displaySelection.includes(k)\n return (\n <div\n key={String(k ?? idx)}\n role=\"row\"\n aria-selected={selectable !== 'none' ? selected : undefined}\n // Tree depth/position for screen readers (1-based); the toggle button\n // carries aria-expanded for the control itself.\n aria-level={treeMeta ? treeMeta.depth + 1 : undefined}\n aria-setsize={treeMeta ? treeMeta.setSize : undefined}\n aria-posinset={treeMeta ? treeMeta.posInset : undefined}\n data-iris-table-row={String(k ?? idx)}\n data-iris-table-row-selected={selected ? 'true' : undefined}\n style={{ display: 'grid', gridTemplateColumns, ...extraStyle }}\n >\n {hasDetail ? (\n <div\n role=\"cell\"\n data-iris-table-cell=\"__expand\"\n style={{\n ...baseCellStyle,\n justifyContent: 'center',\n background: striped && idx % 2 === 1 ? 'var(--iris-surface)' : 'transparent',\n borderBottom: borderStyle,\n }}\n >\n {isRowExpandable(row, idx) ? (\n <button\n type=\"button\"\n data-iris-table-expand-toggle=\"\"\n aria-expanded={expandedKeys.includes(String(k))}\n aria-label={t(\n expandedKeys.includes(String(k)) ? 'treeSelect.collapse' : 'treeSelect.expand',\n )}\n onClick={(e) => {\n e.stopPropagation()\n expansion.toggle(String(k))\n }}\n style={{\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n padding: 0,\n font: 'inherit',\n color: 'var(--iris-foreground)',\n transform: expandedKeys.includes(String(k)) ? 'rotate(90deg)' : 'none',\n transition: 'transform 150ms',\n }}\n >\n ▶\n </button>\n ) : null}\n </div>\n ) : null}\n {selectable !== 'none' ? (\n <div\n role=\"cell\"\n data-iris-table-cell=\"__selection\"\n style={{\n ...baseCellStyle,\n justifyContent: 'center',\n background: striped && idx % 2 === 1 ? 'var(--iris-surface)' : 'transparent',\n borderBottom: borderStyle,\n }}\n >\n <IrisCheckbox\n checked={selected}\n onChange={() => toggleRow(row)}\n aria-label={t('table.selectRow', { key: String(k ?? idx) })}\n />\n </div>\n ) : null}\n {leafColumns.map((col, ci) => {\n if (visibleColSet && !visibleColSet.has(ci)) return null\n const raw = getCellValue(row, col)\n const editing = editingCellId === cellId(k, col.key)\n return (\n <div\n key={col.key}\n role=\"cell\"\n data-iris-table-cell={col.key}\n data-iris-table-pinned={col.pinned}\n data-editable={col.editable ? '' : undefined}\n data-editing={editing ? '' : undefined}\n {...(keyboardNavigation\n ? {\n 'data-grid-row': idx,\n 'data-grid-col': ci,\n tabIndex: (\n focusedCell\n ? focusedCell.row === idx && focusedCell.col === ci\n : idx === 0 && ci === 0\n )\n ? 0\n : -1,\n onFocus: () => setFocusedCell({ row: idx, col: ci }),\n }\n : null)}\n {...(cellRange\n ? {\n 'data-iris-cell-row': idx,\n 'data-iris-cell-col': ci,\n 'data-iris-cell-selected': isInRange(idx, ci) ? 'true' : undefined,\n onClick: (e: React.MouseEvent) => {\n if (e.shiftKey) {\n cellRangeCtrl.extendRange(idx, ci)\n } else {\n cellRangeCtrl.startRange(idx, ci)\n }\n },\n }\n : null)}\n onDoubleClick={col.editable ? () => beginEdit(row, col, k) : undefined}\n style={{\n ...baseCellStyle,\n ...(visibleColSet ? { gridColumnStart: colTrack(ci) } : null),\n justifyContent:\n col.align === 'right'\n ? 'flex-end'\n : col.align === 'center'\n ? 'center'\n : 'flex-start',\n background:\n cellRange && isInRange(idx, ci)\n ? 'var(--iris-surface-selected, rgba(99,102,241,0.12))'\n : striped && idx % 2 === 1\n ? 'var(--iris-surface)'\n : 'transparent',\n borderBottom: borderStyle,\n cursor: col.editable ? 'cell' : cellRange ? 'default' : undefined,\n ...(editing ? { padding: '4px 8px' } : null),\n ...pinnedStyle(col.key),\n }}\n >\n {treeMeta && ci === 0 ? (\n <span\n data-iris-table-tree-indent=\"\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n flex: 'none',\n paddingLeft: treeMeta.depth * 16,\n }}\n >\n {treeMeta.hasChildren ? (\n <button\n type=\"button\"\n data-iris-table-tree-toggle=\"\"\n aria-expanded={treeMeta.expanded}\n aria-label={t(\n treeMeta.expanded ? 'treeSelect.collapse' : 'treeSelect.expand',\n )}\n onClick={(e) => {\n e.stopPropagation()\n expansion.toggle(treeMeta.key)\n }}\n style={{\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n padding: 0,\n marginRight: 4,\n font: 'inherit',\n color: 'var(--iris-foreground)',\n transform: treeMeta.expanded ? 'rotate(90deg)' : 'none',\n transition: 'transform 150ms',\n }}\n >\n ▶\n </button>\n ) : (\n <span style={{ display: 'inline-block', width: 16 }} aria-hidden=\"true\" />\n )}\n </span>\n ) : null}\n {editing ? (\n <>\n <input\n ref={editorRef}\n type={col.editor === 'number' ? 'number' : 'text'}\n value={editingDraft}\n data-iris-table-editor=\"\"\n aria-invalid={editError ? 'true' : undefined}\n aria-describedby={editError ? `${cellId(k, col.key)}-error` : undefined}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commitEdit(row, col, idx)\n } else if (e.key === 'Escape') {\n e.preventDefault()\n cancelEdit()\n }\n }}\n onBlur={() => commitEdit(row, col, idx)}\n onClick={(e) => e.stopPropagation()}\n style={{\n width: '100%',\n border: `1px solid ${editError ? 'var(--iris-danger)' : 'var(--iris-primary)'}`,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n padding: '4px 6px',\n font: 'inherit',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n outline: 'none',\n }}\n />\n {editError ? (\n <div\n id={`${cellId(k, col.key)}-error`}\n role=\"alert\"\n data-iris-table-editor-error=\"\"\n style={{ marginTop: 2, fontSize: 12, color: 'var(--iris-danger)' }}\n >\n {editError}\n </div>\n ) : null}\n </>\n ) : col.render ? (\n col.render(raw, row, idx)\n ) : (\n (raw as React.ReactNode)\n )}\n </div>\n )\n })}\n </div>\n )\n }\n\n return (\n <div\n ref={rootRef}\n // A keyboard-navigable hierarchical table is a `treegrid`; otherwise the\n // grid/table role as before (treegrid implies managed cell focus).\n role={keyboardNavigation ? (treeMode ? 'treegrid' : 'grid') : 'table'}\n data-iris-table=\"\"\n data-bordered={bordered ? 'true' : undefined}\n data-striped={striped ? 'true' : undefined}\n data-column-virtualized={columnVirtualization ? 'true' : undefined}\n className={className}\n onKeyDown={\n keyboardNavigation || cellRange\n ? (e) => {\n if (keyboardNavigation) handleGridKey(e)\n if (cellRange) handleCellRangeKey(e)\n }\n : undefined\n }\n onScroll={\n columnVirtualization\n ? (e) => setScrollLeft((e.currentTarget as HTMLDivElement).scrollLeft)\n : undefined\n }\n style={{\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n fontSize: 14,\n border: borderStyle,\n borderRadius: 'var(--iris-radius-md, 6px)',\n // Column virtualization turns the table into a horizontal scroll container.\n overflow: columnVirtualization ? 'auto' : 'hidden',\n ...style,\n }}\n >\n {/* Multi-level (grouped) header: a CSS grid of `headerMatrix.length` rows;\n each cell placed by its leaf-column span (colStart/colSpan) and row span. */}\n {grouped && headerMatrix ? (\n <div\n role=\"row\"\n data-iris-table-row=\"header\"\n data-iris-table-header-grouped=\"\"\n style={{\n display: 'grid',\n gridTemplateColumns,\n gridTemplateRows: `repeat(${headerMatrix.length}, auto)`,\n }}\n >\n {hasDetail ? (\n <div role=\"columnheader\" style={{ gridColumn: '1', gridRow: '1 / -1' }} />\n ) : null}\n {selectable !== 'none' ? (\n <div\n role=\"columnheader\"\n data-iris-table-header=\"\"\n style={{\n gridColumn: hasDetail ? '2' : '1',\n gridRow: '1 / -1',\n ...baseCellStyle,\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n justifyContent: 'center',\n }}\n >\n {selectable === 'multi' ? (\n <IrisCheckbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onChange={toggleAll}\n aria-label={t('table.selectAll')}\n />\n ) : null}\n </div>\n ) : null}\n {headerMatrix.flatMap((cells) =>\n cells.map((cell) => {\n const col = cell.column\n const isLeaf = !col.children || col.children.length === 0\n const sortable = isLeaf && col.sortable\n const isSortKey = sortable && sort?.key === col.key\n const dir: IrisTableSortDirection | undefined = isSortKey\n ? sort?.direction\n : undefined\n const lead = (hasDetail ? 1 : 0) + (selectable !== 'none' ? 1 : 0)\n return (\n <div\n key={`${col.key}-${cell.level}`}\n role=\"columnheader\"\n data-iris-table-header={col.key}\n data-iris-table-header-group={isLeaf ? undefined : ''}\n aria-colspan={cell.colSpan}\n aria-sort={\n isSortKey\n ? dir === 'asc'\n ? 'ascending'\n : 'descending'\n : sortable\n ? 'none'\n : undefined\n }\n tabIndex={sortable ? 0 : undefined}\n onClick={sortable ? () => cycleSort(col) : undefined}\n onKeyDown={sortable ? (e) => onHeaderKeyDown(e, col) : undefined}\n style={{\n gridColumn: `${lead + cell.colStart} / span ${cell.colSpan}`,\n gridRow: `${cell.level + 1} / span ${cell.rowSpan}`,\n ...baseCellStyle,\n justifyContent: isLeaf ? 'flex-start' : 'center',\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n borderInlineEnd: isLeaf ? 'none' : borderStyle,\n cursor: sortable ? 'pointer' : 'default',\n fontWeight: 600,\n userSelect: sortable ? 'none' : 'auto',\n }}\n >\n <span>{col.title}</span>\n {sortable ? (\n <span\n aria-hidden=\"true\"\n data-iris-table-sort-indicator=\"\"\n style={{\n marginInlineStart: 6,\n fontSize: 11,\n color: dir ? 'var(--iris-primary)' : 'var(--iris-muted)',\n }}\n >\n {dir === 'asc' ? '↑' : dir === 'desc' ? '↓' : '↕'}\n </span>\n ) : null}\n </div>\n )\n }),\n )}\n </div>\n ) : (\n /* Header row (flat) */\n <div\n role=\"row\"\n data-iris-table-row=\"header\"\n style={{ display: 'grid', gridTemplateColumns }}\n >\n {hasDetail ? (\n <div\n role=\"columnheader\"\n data-iris-table-header=\"__expand\"\n style={{\n ...baseCellStyle,\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n }}\n />\n ) : null}\n {selectable === 'multi' ? (\n <div\n role=\"columnheader\"\n data-iris-table-header=\"\"\n style={{\n ...baseCellStyle,\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n justifyContent: 'center',\n }}\n >\n <IrisCheckbox\n checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n onChange={toggleAll}\n aria-label={t('table.selectAll')}\n />\n </div>\n ) : selectable === 'single' ? (\n <div\n role=\"columnheader\"\n data-iris-table-header=\"\"\n style={{\n ...baseCellStyle,\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n }}\n />\n ) : null}\n {safeColumns.map((col, ci) => {\n if (visibleColSet && !visibleColSet.has(ci)) return null\n const isSortKey = sort?.key === col.key\n const dir: IrisTableSortDirection | undefined = isSortKey ? sort?.direction : undefined\n return (\n <div\n key={col.key}\n role=\"columnheader\"\n aria-sort={\n isSortKey\n ? dir === 'asc'\n ? 'ascending'\n : 'descending'\n : col.sortable\n ? 'none'\n : undefined\n }\n tabIndex={col.sortable ? 0 : undefined}\n onClick={col.sortable ? () => cycleSort(col) : undefined}\n onKeyDown={col.sortable ? (e) => onHeaderKeyDown(e, col) : undefined}\n data-iris-table-header={col.key}\n data-iris-table-pinned={col.pinned}\n data-sortable={col.sortable ? 'true' : undefined}\n data-sort-direction={dir}\n style={{\n ...baseCellStyle,\n ...(visibleColSet ? { gridColumnStart: colTrack(ci) } : null),\n justifyContent:\n col.align === 'right'\n ? 'flex-end'\n : col.align === 'center'\n ? 'center'\n : 'flex-start',\n background: 'var(--iris-surface)',\n borderBottom: borderStyle,\n cursor: col.sortable ? 'pointer' : 'default',\n fontWeight: 600,\n userSelect: col.sortable ? 'none' : 'auto',\n position: 'relative',\n // Pinned header keeps a solid surface bg + sticky position\n // (overrides position: relative above for the sticky edge).\n ...(pinnedStyle(col.key)\n ? { ...pinnedStyle(col.key), background: 'var(--iris-surface)' }\n : null),\n }}\n >\n <span>{col.title}</span>\n {col.sortable ? (\n <span\n aria-hidden=\"true\"\n data-iris-table-sort-indicator=\"\"\n style={{\n marginInlineStart: 6,\n fontSize: 11,\n color: dir ? 'var(--iris-primary)' : 'var(--iris-muted)',\n }}\n >\n {dir === 'asc' ? '↑' : dir === 'desc' ? '↓' : '↕'}\n </span>\n ) : null}\n {resizableColumns ? (\n <ColumnResizeHandle\n colKey={col.key}\n label={col.title}\n width={columnWidths[col.key]}\n minWidth={col.minWidth ?? 60}\n maxWidth={col.maxWidth ?? Infinity}\n onResize={setColumnWidth}\n />\n ) : null}\n </div>\n )\n })}\n </div>\n )}\n\n {/* Body — state precedence: error → loading → empty → rows. */}\n {error ? (\n <div role=\"row\" data-iris-table-row=\"error\" style={STATE_ROW_STYLE}>\n {errorState ?? t('table.error')}\n </div>\n ) : loading ? (\n <div role=\"row\" aria-busy=\"true\" data-iris-table-row=\"loading\" style={STATE_ROW_STYLE}>\n {loadingState ?? t('table.loading')}\n </div>\n ) : bodyData.length === 0 ? (\n <div role=\"row\" data-iris-table-row=\"empty\" style={STATE_ROW_STYLE}>\n {emptyState ?? t('table.empty')}\n </div>\n ) : virtualScroll && (!treeMode || !hasDetail) ? (\n // Virtualize flat mode, and tree mode too — tree rows are uniform height,\n // so the only thing that bars it is variable-height detail panels, hence\n // the `!hasDetail` guard. `bodyData` is the flattened visible rows (=\n // `sortedData` in flat mode); `flatTree?.[idx]` supplies each row's tree\n // meta (depth + toggle), with `idx` the absolute row index from the scroller.\n <IrisVirtualScroll\n items={bodyData}\n itemHeight={virtualScroll.itemHeight}\n height={virtualScroll.height}\n buffer={virtualScroll.buffer}\n keyOf={(row) => rowKeyOf(row)}\n renderItem={(row, idx) => renderRow(row, idx, { height: '100%' }, flatTree?.[idx])}\n />\n ) : (\n bodyData.map((row, idx) => {\n const main = renderRow(row, idx, undefined, flatTree?.[idx])\n if (\n !hasDetail ||\n !isRowExpandable(row, idx) ||\n !expandedKeys.includes(String(rowKeyOf(row)))\n )\n return main\n // Full-width detail panel beneath the row (spans all grid tracks).\n return (\n <React.Fragment key={`${String(rowKeyOf(row) ?? idx)}::wrap`}>\n {main}\n <div\n role=\"row\"\n data-iris-table-row-detail={String(rowKeyOf(row) ?? idx)}\n style={{ display: 'grid', gridTemplateColumns }}\n >\n <div\n role=\"cell\"\n data-iris-table-detail-cell=\"\"\n style={{ gridColumn: '1 / -1', padding: '8px 12px', borderBottom: borderStyle }}\n >\n {renderDetail!(row, idx)}\n </div>\n </div>\n </React.Fragment>\n )\n })\n )}\n\n {/* Summary / footer row: each column with a `summary` op aggregates over\n the full sorted dataset (the core `aggregate` material). */}\n {!error && !loading && bodyData.length > 0 && leafColumns.some((c) => c.summary) ? (\n <div\n role=\"row\"\n data-iris-table-row=\"summary\"\n style={{\n display: 'grid',\n gridTemplateColumns,\n fontWeight: 600,\n borderTop: '2px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {selectable !== 'none' ? (\n <div role=\"cell\" data-iris-table-cell=\"__selection\" style={baseCellStyle} />\n ) : null}\n {leafColumns.map((col, ci) => {\n if (visibleColSet && !visibleColSet.has(ci)) return null\n const op = col.summary\n const value = op ? aggregate(bodyData, (r) => getCellValue(r, col), op) : null\n return (\n <div\n key={col.key}\n role=\"cell\"\n data-iris-table-cell={col.key}\n data-iris-table-summary-cell={op ? '' : undefined}\n style={{ ...baseCellStyle, ...pinnedStyle(col.key) }}\n >\n {op != null && value != null\n ? col.renderSummary\n ? col.renderSummary(value, bodyData)\n : String(value)\n : null}\n </div>\n )\n })}\n </div>\n ) : null}\n </div>\n )\n}\n","import { saveFile } from '@iris-ui-kit/core'\nimport type { IrisTableColumn } from './types'\n\n/**\n * OWASP CSV-injection mitigation: a cell whose text a spreadsheet could parse\n * as a formula (leading `=`, `+`, `-`, `@`, or a tab/CR that shifts the first\n * significant character) is prefixed with a single quote so it imports as\n * literal text instead of executing (DDE, `=HYPERLINK`, `=cmd|…`). Numbers\n * (typed at the call site, not string-ish) never carry a formula payload.\n */\nconst FORMULA_LEAD = /^[=+\\-@\\t\\r]/\nfunction neutralizeFormula(text: string): string {\n return FORMULA_LEAD.test(text) ? `'${text}` : text\n}\n\nfunction csvCell(value: unknown): string {\n if (value == null) return ''\n const isNumber = typeof value === 'number' && Number.isFinite(value)\n const s = isNumber ? String(value) : neutralizeFormula(String(value))\n if (/[\",\\r\\n]/.test(s)) {\n return `\"${s.replace(/\"/g, '\"\"')}\"`\n }\n return s\n}\n\n/**\n * Serialize rows as a CSV string per RFC 4180. Column order determines field\n * order; cell values are read via `dataIndex` (defaulting to the column key).\n * Returns a plain string without BOM.\n */\nexport function exportCsv<Row extends Record<string, unknown>>(\n rows: readonly Row[],\n columns: readonly IrisTableColumn<Row>[],\n): string {\n const header = columns.map((c) => csvCell(c.title)).join(',')\n const body = rows\n .map((row) =>\n columns\n .map((col) => {\n const key = (col.dataIndex ?? col.key) as keyof Row\n return csvCell(row[key])\n })\n .join(','),\n )\n .join('\\n')\n return body.length > 0 ? `${header}\\n${body}` : header\n}\n\n/**\n * Trigger a download of the given CSV string. A host `FileSaveHandler` (set via\n * `setFileSaveHandler`) intercepts it for native save in desktop/mobile shells;\n * otherwise falls back to the browser `<a download>`. SSR-safe.\n */\nexport async function downloadCsv(filename: string, csv: string): Promise<void> {\n const BOM = String.fromCharCode(0xfeff)\n const content = BOM + csv\n if (await saveFile({ filename, content, mimeType: 'text/csv;charset=utf-8;' })) return\n if (typeof document === 'undefined') return\n const blob = new Blob([content], { type: 'text/csv;charset=utf-8;' })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = filename\n anchor.style.display = 'none'\n document.body.appendChild(anchor)\n anchor.click()\n document.body.removeChild(anchor)\n setTimeout(() => URL.revokeObjectURL(url), 0)\n}\n","import { saveFile, toSpreadsheetXml, type SpreadsheetXmlOptions } from '@iris-ui-kit/core'\nimport type { IrisTableColumn } from './types'\n\n/**\n * Serialize rows to a SpreadsheetML (Excel/LibreOffice-native) XML string —\n * the dependency-free counterpart to {@link exportCsv}. Column order sets field\n * order; values read via `dataIndex` (defaulting to `key`).\n */\nexport function exportExcel<Row extends Record<string, unknown>>(\n rows: readonly Row[],\n columns: readonly IrisTableColumn<Row>[],\n options?: SpreadsheetXmlOptions,\n): string {\n return toSpreadsheetXml(\n rows as readonly Record<string, unknown>[],\n columns.map((c) => ({\n key: c.key,\n title: c.title,\n dataIndex: typeof c.dataIndex === 'string' ? c.dataIndex : undefined,\n })),\n options,\n )\n}\n\n/**\n * Trigger a download of the given SpreadsheetML string. A host `FileSaveHandler`\n * (set via `setFileSaveHandler`) intercepts it for native save in desktop/mobile\n * shells; otherwise falls back to the browser `<a download>`. SSR-safe.\n */\nexport async function downloadExcel(filename: string, xml: string): Promise<void> {\n if (await saveFile({ filename, content: xml, mimeType: 'application/vnd.ms-excel' })) {\n return\n }\n if (typeof document === 'undefined') return\n const blob = new Blob([xml], { type: 'application/vnd.ms-excel' })\n const url = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = filename\n anchor.style.display = 'none'\n document.body.appendChild(anchor)\n anchor.click()\n document.body.removeChild(anchor)\n setTimeout(() => URL.revokeObjectURL(url), 0)\n}\n","// Date helpers now live in @iris-ui-kit/core (single source across all four\n// frameworks). Re-exported so existing `./dateUtils` imports keep working.\nexport {\n startOfDay,\n isSameDay,\n isSameMonth,\n addDays,\n addMonths,\n startOfMonth,\n endOfMonth,\n buildMonthMatrix,\n formatMonthYear,\n getWeekdayNames,\n formatLocalISO,\n clampDate,\n isOutOfRange,\n} from '@iris-ui-kit/core'\n\n/**\n * A locale tag safe to hand to `Intl.DateTimeFormat`. A malformed BCP-47 tag\n * (e.g. `'en_US'`, `'bad locale!'`) would otherwise throw a `RangeError` and\n * crash the calendar. `undefined` passes through so the runtime default locale\n * is used; a malformed tag also falls back to that default.\n */\nexport function safeLocale(locale: string | undefined): string | undefined {\n if (locale === undefined) return undefined\n try {\n return Intl.getCanonicalLocales(locale)[0] ?? undefined\n } catch {\n return undefined\n }\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\nimport {\n addDays,\n addMonths,\n buildMonthMatrix,\n clampDate,\n endOfMonth,\n formatLocalISO,\n formatMonthYear,\n getWeekdayNames,\n isOutOfRange,\n isSameDay,\n isSameMonth,\n safeLocale,\n startOfDay,\n startOfMonth,\n} from './dateUtils'\n\nexport interface IrisCalendarProps {\n value?: Date | null\n defaultValue?: Date | null\n onValueChange?: (next: Date | null) => void\n /** Initial visible month (defaults to selected value or today). */\n defaultMonth?: Date\n min?: Date\n max?: Date\n /** 0–6, 0 = Sunday. Default 0. */\n weekStartsOn?: number\n locale?: string\n disabled?: boolean\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Month-view calendar. Single-date selection only. Keyboard:\n * - Arrow keys move focus\n * - Home / End jump to start/end of week\n * - PageUp / PageDown move by month\n * - Enter / Space select\n */\nexport function IrisCalendar({\n value: valueProp,\n defaultValue,\n onValueChange,\n defaultMonth,\n min,\n max,\n weekStartsOn = 0,\n locale,\n disabled = false,\n style,\n className,\n}: IrisCalendarProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<Date | null>(defaultValue ?? null)\n const selectedValue = isControlled ? (valueProp as Date | null) : internal\n\n const initialMonth = defaultMonth ?? selectedValue ?? new Date()\n const [visibleMonth, setVisibleMonth] = React.useState<Date>(startOfMonth(initialMonth))\n const [focusDate, setFocusDate] = React.useState<Date>(\n clampDate(selectedValue ?? new Date(), min, max),\n )\n\n // Sync visible month if value moves to a different month.\n React.useEffect(() => {\n if (selectedValue && !isSameMonth(selectedValue, visibleMonth)) {\n setVisibleMonth(startOfMonth(selectedValue))\n setFocusDate(clampDate(selectedValue, min, max))\n }\n }, [selectedValue, visibleMonth, min, max])\n\n const matrix = React.useMemo(\n () => buildMonthMatrix(visibleMonth, weekStartsOn),\n [visibleMonth, weekStartsOn],\n )\n const weekdays = React.useMemo(\n () => getWeekdayNames(weekStartsOn, locale),\n [weekStartsOn, locale],\n )\n const title = React.useMemo(() => formatMonthYear(visibleMonth, locale), [visibleMonth, locale])\n // One memoized formatter for the full-date cell label (e.g. \"Monday, June 9,\n // 2026\") so screen readers announce the whole date, not just the day number.\n const dayLabelFmt = React.useMemo(\n () =>\n new Intl.DateTimeFormat(safeLocale(locale), {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }),\n [locale],\n )\n\n const setValue = (next: Date | null) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const moveFocus = (delta: number) => {\n const next = clampDate(addDays(focusDate, delta), min, max)\n setFocusDate(next)\n if (!isSameMonth(next, visibleMonth)) {\n setVisibleMonth(startOfMonth(next))\n }\n }\n\n const selectDate = (date: Date) => {\n if (disabled) return\n if (isOutOfRange(date, min, max)) return\n setValue(startOfDay(date))\n }\n\n const onGridKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault()\n moveFocus(-1)\n break\n case 'ArrowRight':\n event.preventDefault()\n moveFocus(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n moveFocus(-7)\n break\n case 'ArrowDown':\n event.preventDefault()\n moveFocus(7)\n break\n case 'Home': {\n event.preventDefault()\n const offset = (focusDate.getDay() - weekStartsOn + 7) % 7\n moveFocus(-offset)\n break\n }\n case 'End': {\n event.preventDefault()\n const offset = (focusDate.getDay() - weekStartsOn + 7) % 7\n moveFocus(6 - offset)\n break\n }\n case 'PageUp':\n event.preventDefault()\n setVisibleMonth((m) => addMonths(m, -1))\n setFocusDate((d) => clampDate(addMonths(d, -1), min, max))\n break\n case 'PageDown':\n event.preventDefault()\n setVisibleMonth((m) => addMonths(m, 1))\n setFocusDate((d) => clampDate(addMonths(d, 1), min, max))\n break\n case 'Enter':\n case ' ':\n event.preventDefault()\n selectDate(focusDate)\n break\n }\n }\n\n const today = startOfDay(new Date())\n const prevDisabled = min ? startOfMonth(visibleMonth) <= startOfMonth(min) : false\n const nextDisabled = max ? startOfMonth(endOfMonth(visibleMonth)) >= startOfMonth(max) : false\n\n const navButtonStyle: React.CSSProperties = {\n width: 28,\n height: 28,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 'none',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n font: 'inherit',\n }\n\n return (\n <div\n className={className}\n data-iris-calendar=\"\"\n data-disabled={disabled ? '' : undefined}\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: 8,\n padding: 'var(--iris-padding-md, 12px)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n minWidth: 260,\n ...style,\n }}\n >\n <div\n data-iris-calendar-header=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 4,\n }}\n >\n <button\n type=\"button\"\n aria-label={t('calendar.previousMonth')}\n data-iris-calendar-prev=\"\"\n disabled={prevDisabled || undefined}\n onClick={() => setVisibleMonth((m) => addMonths(m, -1))}\n style={{\n ...navButtonStyle,\n opacity: prevDisabled ? 0.4 : 1,\n cursor: prevDisabled ? 'not-allowed' : 'pointer',\n }}\n >\n ‹\n </button>\n <div\n data-iris-calendar-title=\"\"\n aria-live=\"polite\"\n style={{ fontWeight: 600, fontSize: 14 }}\n >\n {title}\n </div>\n <button\n type=\"button\"\n aria-label={t('calendar.nextMonth')}\n data-iris-calendar-next=\"\"\n disabled={nextDisabled || undefined}\n onClick={() => setVisibleMonth((m) => addMonths(m, 1))}\n style={{\n ...navButtonStyle,\n opacity: nextDisabled ? 0.4 : 1,\n cursor: nextDisabled ? 'not-allowed' : 'pointer',\n }}\n >\n ›\n </button>\n </div>\n <div\n data-iris-calendar-weekdays=\"\"\n role=\"row\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',\n gap: 2,\n fontSize: 12,\n color: 'var(--iris-muted)',\n textAlign: 'center',\n }}\n >\n {weekdays.map((name) => (\n <div key={name} role=\"columnheader\" style={{ padding: '2px 0' }}>\n {name}\n </div>\n ))}\n </div>\n <div\n data-iris-calendar-grid=\"\"\n role=\"grid\"\n aria-label={title}\n onKeyDown={onGridKeyDown}\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',\n gap: 2,\n }}\n >\n {matrix.map((week, wi) => (\n <div\n key={`week-${wi}`}\n role=\"row\"\n // `display: contents` keeps the row in the accessibility tree (a\n // valid grid → row → gridcell structure) while letting its day cells\n // participate directly in the parent's 7-column CSS grid layout.\n style={{ display: 'contents' }}\n >\n {week.map((date) => {\n const inMonth = isSameMonth(date, visibleMonth)\n const selected = selectedValue ? isSameDay(date, selectedValue) : false\n const focused = isSameDay(date, focusDate)\n const isToday = isSameDay(date, today)\n const oof = isOutOfRange(date, min, max)\n const isDisabled = disabled || oof\n return (\n <button\n key={formatLocalISO(date)}\n type=\"button\"\n role=\"gridcell\"\n aria-label={dayLabelFmt.format(date)}\n tabIndex={focused ? 0 : -1}\n aria-selected={selected}\n aria-disabled={isDisabled ? 'true' : undefined}\n aria-current={isToday ? 'date' : undefined}\n data-iris-calendar-day=\"\"\n data-iris-calendar-day-iso={formatLocalISO(date)}\n data-state={\n selected ? 'selected' : focused ? 'focused' : isToday ? 'today' : 'idle'\n }\n data-outside-month={!inMonth ? 'true' : undefined}\n disabled={isDisabled || undefined}\n onClick={() => {\n setFocusDate(date)\n selectDate(date)\n }}\n onFocus={() => setFocusDate(date)}\n style={{\n height: 32,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: selected\n ? 'var(--iris-primary)'\n : isToday\n ? 'var(--iris-surface-hover)'\n : 'transparent',\n color: selected\n ? 'var(--iris-primary-foreground, #fff)'\n : inMonth\n ? 'var(--iris-foreground)'\n : 'var(--iris-muted)',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.45 : 1,\n fontSize: 13,\n fontFamily: 'inherit',\n outline: 'none',\n }}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport type { Placement } from '@iris-ui-kit/core'\nimport { useI18n } from '../../i18n'\nimport { IrisPopover } from '../popover/Popover'\nimport { IrisPopoverTrigger } from '../popover/PopoverTrigger'\nimport { IrisPopoverContent } from '../popover/PopoverContent'\nimport { IrisCalendar } from '../calendar/Calendar'\nimport { formatLocalISO, safeLocale } from '../calendar/dateUtils'\n\nfunction formatDisplay(date: Date | null, locale?: string): string {\n if (!date) return ''\n return new Intl.DateTimeFormat(safeLocale(locale), { dateStyle: 'medium' }).format(date)\n}\n\nexport interface IrisDatePickerProps {\n value?: Date | null\n defaultValue?: Date | null\n onValueChange?: (next: Date | null) => void\n min?: Date\n max?: Date\n weekStartsOn?: number\n locale?: string\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n placement?: Placement\n /** id forwarded to the trigger. Set by `IrisFormField`. */\n id?: string\n /** Forwarded as `aria-describedby` on the trigger. Set by `IrisFormField`. */\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Date picker: button-styled trigger + Popover + Calendar. On selection the\n * popover auto-closes. Use `IrisCalendar` directly when you want it inline.\n */\nexport function IrisDatePicker({\n value: valueProp,\n defaultValue,\n onValueChange,\n min,\n max,\n weekStartsOn = 0,\n locale,\n placeholder,\n disabled = false,\n invalid = false,\n placement = 'bottom-start',\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisDatePickerProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<Date | null>(defaultValue ?? null)\n const value = isControlled ? (valueProp as Date | null) : internal\n const [open, setOpen] = React.useState(false)\n const display = formatDisplay(value, locale)\n\n const handleSelect = (next: Date | null) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n if (next) setOpen(false)\n }\n\n return (\n <IrisPopover open={open} onOpenChange={setOpen} placement={placement}>\n <IrisPopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n className={className}\n disabled={disabled || undefined}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n data-iris-date-picker-trigger=\"\"\n data-iris-date-picker-iso={value ? formatLocalISO(value) : undefined}\n data-state={open ? 'open' : 'closed'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 12px',\n background: 'var(--iris-background)',\n color: value ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n border: `1px solid ${invalid ? 'var(--iris-danger)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n fontSize: 14,\n fontFamily: 'inherit',\n minHeight: 34,\n minWidth: 180,\n textAlign: 'start',\n ...style,\n }}\n >\n {display || (placeholder ?? t('datePicker.placeholder'))}\n </button>\n </IrisPopoverTrigger>\n <IrisPopoverContent autoFocus={false} style={{ padding: 0 }}>\n <IrisCalendar\n value={value}\n min={min}\n max={max}\n weekStartsOn={weekStartsOn}\n locale={locale}\n disabled={disabled}\n onValueChange={handleSelect}\n style={{ border: 'none', background: 'transparent' }}\n />\n </IrisPopoverContent>\n </IrisPopover>\n )\n}\n","import * as React from 'react'\n\nconst QUERY = '(prefers-reduced-motion: reduce)'\n\nfunction read(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false\n return window.matchMedia(QUERY).matches\n}\n\n/**\n * Reactive `prefers-reduced-motion` flag. Returns `false` where `matchMedia`\n * is unavailable (SSR / older jsdom) so animation is the safe default only when\n * the user has not asked to reduce it.\n */\nexport function usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = React.useState(read)\n\n React.useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return\n const mq = window.matchMedia(QUERY)\n const onChange = () => setReduced(mq.matches)\n onChange()\n mq.addEventListener?.('change', onChange)\n return () => mq.removeEventListener?.('change', onChange)\n }, [])\n\n return reduced\n}\n","export const __DATA_STATE_STYLE_ID = 'iris-data-state-styles'\n\n/** Class applied to a state node so its entry cross-fades in. */\nexport const DATA_STATE_CLASS = 'iris-data-state-enter'\n\nconst CSS = `\n@keyframes iris-data-state-enter {\n from { opacity: 0; transform: translateY(4px); }\n to { opacity: 1; transform: none; }\n}\n.${DATA_STATE_CLASS} {\n animation: iris-data-state-enter var(--iris-duration-md, 200ms) ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .${DATA_STATE_CLASS} { animation: none; }\n}\n`.trim()\n\nlet installed = false\n\n/** Idempotently inject the data-state enter keyframes (SSR-safe no-op). */\nexport function installDataStateStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__DATA_STATE_STYLE_ID)) {\n installed = true\n return\n }\n const el = document.createElement('style')\n el.id = __DATA_STATE_STYLE_ID\n el.textContent = CSS\n document.head.appendChild(el)\n installed = true\n}\n\nexport function __resetDataStateStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__DATA_STATE_STYLE_ID)?.remove()\n }\n}\n","import * as React from 'react'\nimport { resolveDataState, type DataState, type DataStateInput } from '@iris-ui-kit/core'\nimport { DATA_STATE_CLASS, installDataStateStyles } from './styles'\nimport { usePrefersReducedMotion } from './usePrefersReducedMotion'\n\nexport interface DataStateNodeProps {\n className: string\n 'data-iris-state': DataState\n}\n\nexport interface UseDataStateReturn {\n /** Resolved state (`error → loading → empty → content` precedence). */\n state: DataState\n /** `true` when the host should render its real content. */\n isContent: boolean\n /** Use as the React `key` of the state node so the enter animation replays on each transition. */\n stateKey: DataState\n /** Spread onto the rendered loading/error/empty node. */\n stateProps: DataStateNodeProps\n}\n\n/**\n * State-transition + entry-animation hook for data components. Resolves the\n * active {@link DataState} from `{ loading, error, empty }`, and returns props\n * for the state node that (a) re-key on every transition so the cross-fade\n * replays and (b) drop the animation class when the user prefers reduced motion.\n *\n * The framework-agnostic precedence lives in `@iris-ui-kit/core`'s\n * {@link resolveDataState}; this hook is the thin React animation bridge.\n */\nexport function useDataState(input: DataStateInput): UseDataStateReturn {\n React.useEffect(installDataStateStyles, [])\n const reduced = usePrefersReducedMotion()\n const state = resolveDataState(input)\n return {\n state,\n isContent: state === 'content',\n stateKey: state,\n stateProps: {\n className: reduced ? '' : DATA_STATE_CLASS,\n 'data-iris-state': state,\n },\n }\n}\n","import * as React from 'react'\nimport { createTreeSelection, type TreeSelectionNode } from '@iris-ui-kit/core'\nimport { useI18n } from '../../i18n'\nimport { useDataState } from '../../motion'\nimport type { IrisTreeNode, IrisTreeSelectionMode } from './types'\n\ninterface FlatNode {\n node: IrisTreeNode\n depth: number\n parentId: string | null\n hasChildren: boolean\n}\n\nexport interface IrisTreeProps {\n nodes: IrisTreeNode[]\n expanded?: string[]\n defaultExpanded?: string[]\n onExpandedChange?: (next: string[]) => void\n selected?: string[]\n defaultSelected?: string[]\n onSelectedChange?: (next: string[]) => void\n selectionMode?: IrisTreeSelectionMode\n /**\n * Show a checkbox per node with parent/child cascade + indeterminate\n * (tri-state) propagation, independent of `selectionMode`. Driven by the\n * framework-agnostic `createTreeSelection`.\n */\n checkable?: boolean\n /** Initially checked node ids (uncontrolled; reconciled through the cascade). */\n defaultChecked?: string[]\n /** Notified with the fully-reconciled checked node ids on every check change. */\n onCheckedChange?: (checked: string[]) => void\n ariaLabel?: string\n /** Show the loading state instead of nodes. */\n loading?: boolean\n /** Show the error state instead of nodes (takes precedence over loading). */\n error?: boolean\n /** Custom empty-state node (defaults to the localized `tree.empty`). */\n emptyState?: React.ReactNode\n /** Custom loading-state node (defaults to the localized `tree.loading`). */\n loadingState?: React.ReactNode\n /** Custom error-state node (defaults to the localized `tree.error`). */\n errorState?: React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst TREE_STATE_STYLE: React.CSSProperties = {\n padding: '12px',\n textAlign: 'center',\n color: 'var(--iris-muted)',\n fontSize: 14,\n}\n\n/**\n * Tree control. Renders a hierarchy of `IrisTreeNode`s with expand/collapse,\n * single/multi selection, and optional lazy-loaded children. WAI-ARIA Tree\n * pattern: root `role=\"tree\"`, each node `role=\"treeitem\"`, roving tabindex.\n *\n * Keyboard:\n * - ↓/↑ : move active node\n * - → : expand (or move into first child)\n * - ← : collapse (or move to parent)\n * - Enter / Space : (de)select active node\n * - Home / End : first / last visible node\n *\n * Async lifecycle: pass `loading` / `error` (and empty `nodes`) to render the\n * animated loading / error / empty state in place of the tree. Per-node\n * `loadChildren` lazy loading is independent of this top-level state. Semantic\n * parity with the Vue adapter's `IrisTree`.\n */\nexport function IrisTree({\n nodes,\n expanded: expandedProp,\n defaultExpanded = [],\n onExpandedChange,\n selected: selectedProp,\n defaultSelected = [],\n onSelectedChange,\n selectionMode = 'single',\n checkable = false,\n defaultChecked,\n onCheckedChange,\n ariaLabel,\n loading = false,\n error = false,\n emptyState,\n loadingState,\n errorState,\n style,\n className,\n}: IrisTreeProps): React.ReactElement {\n const safeNodes = nodes ?? []\n const expControlled = expandedProp !== undefined\n const selControlled = selectedProp !== undefined\n const [expInternal, setExpInternal] = React.useState<string[]>(defaultExpanded)\n const [selInternal, setSelInternal] = React.useState<string[]>(defaultSelected)\n const expanded = expControlled ? (expandedProp as string[]) : expInternal\n const selected = selControlled ? (selectedProp as string[]) : selInternal\n\n const { t } = useI18n()\n const { state, isContent, stateKey, stateProps } = useDataState({\n loading,\n error,\n empty: safeNodes.length === 0,\n })\n\n // Lazily-loaded children cache + per-node loading/error state (parity with\n // the Vue adapter, which supports `node.loadChildren`).\n const [lazyCache, setLazyCache] = React.useState<Map<string, IrisTreeNode[]>>(new Map())\n const [loadingIds, setLoadingIds] = React.useState<Set<string>>(new Set())\n const [errorIds, setErrorIds] = React.useState<Set<string>>(new Set())\n\n const expandedSet = React.useMemo(() => new Set(expanded), [expanded])\n const selectedSet = React.useMemo(() => new Set(selected), [selected])\n\n const childrenOf = React.useCallback(\n (node: IrisTreeNode): IrisTreeNode[] | null => {\n if (node.children && node.children.length > 0) return node.children\n return lazyCache.get(node.id) ?? null\n },\n [lazyCache],\n )\n\n const hasChildrenFn = React.useCallback(\n (node: IrisTreeNode): boolean => {\n if (node.isLeaf) return false\n if (node.children && node.children.length > 0) return true\n if (lazyCache.has(node.id)) return (lazyCache.get(node.id)?.length ?? 0) > 0\n return Boolean(node.loadChildren)\n },\n [lazyCache],\n )\n\n const flat = React.useMemo(() => {\n const out: FlatNode[] = []\n const walk = (ns: IrisTreeNode[], depth: number, parentId: string | null) => {\n for (const node of ns) {\n const hasChildren = hasChildrenFn(node)\n out.push({ node, depth, parentId, hasChildren })\n if (hasChildren && expandedSet.has(node.id)) {\n const kids = childrenOf(node)\n if (kids) walk(kids, depth + 1, node.id)\n }\n }\n }\n walk(safeNodes, 0, null)\n return out\n }, [safeNodes, expandedSet, childrenOf, hasChildrenFn])\n\n // Checkable mode: flatten the FULL tree (every node, not just the visible\n // ones) into `{ key, parentKey, disabled }` so the cascade is correct even\n // for collapsed branches, and drive it with the core `createTreeSelection`.\n const checkNodes = React.useMemo<TreeSelectionNode[]>(() => {\n const out: TreeSelectionNode[] = []\n const walk = (ns: IrisTreeNode[], parentKey: string | undefined) => {\n for (const node of ns) {\n out.push({ key: node.id, parentKey, disabled: node.disabled })\n const kids = node.children ?? lazyCache.get(node.id)\n if (kids && kids.length > 0) walk(kids, node.id)\n }\n }\n walk(safeNodes, undefined)\n return out\n }, [safeNodes, lazyCache])\n\n const onCheckedRef = React.useRef(onCheckedChange)\n onCheckedRef.current = onCheckedChange\n // Rebuild when the tree shape changes; defaultChecked re-seeds then.\n const checkModel = React.useMemo(\n () =>\n createTreeSelection({\n nodes: checkNodes,\n defaultChecked,\n onChange: (keys) => onCheckedRef.current?.(keys),\n }),\n [checkNodes, defaultChecked],\n )\n // Re-render when the checked set changes.\n React.useSyncExternalStore(\n checkModel.selection.store.subscribe,\n checkModel.selection.get,\n checkModel.selection.get,\n )\n\n const [activeId, setActiveId] = React.useState<string | null>(flat[0]?.node.id ?? null)\n\n // Keep activeId valid as the visible set changes.\n React.useEffect(() => {\n if (!activeId || !flat.some((f) => f.node.id === activeId)) {\n setActiveId(flat[0]?.node.id ?? null)\n }\n }, [flat, activeId])\n\n // Always-current expanded list so the async error handler collapses against\n // the latest state rather than a stale render closure.\n const expandedRef = React.useRef(expanded)\n expandedRef.current = expanded\n\n const setExpanded = (next: string[]) => {\n if (!expControlled) setExpInternal(next)\n onExpandedChange?.(next)\n }\n const setSelected = (next: string[]) => {\n if (!selControlled) setSelInternal(next)\n onSelectedChange?.(next)\n }\n\n const expandNode = async (node: IrisTreeNode) => {\n if (!hasChildrenFn(node)) return\n if (!expandedSet.has(node.id)) setExpanded([...expanded, node.id])\n // Trigger lazy load on first expansion of a loader-backed node.\n if (\n node.loadChildren &&\n !lazyCache.has(node.id) &&\n !(node.children && node.children.length > 0)\n ) {\n setLoadingIds((prev) => new Set(prev).add(node.id))\n try {\n const kids = await node.loadChildren()\n setLazyCache((prev) => new Map(prev).set(node.id, kids))\n } catch {\n setErrorIds((prev) => new Set(prev).add(node.id))\n // Collapse on failure (against the latest expanded state).\n setExpanded(expandedRef.current.filter((x) => x !== node.id))\n } finally {\n setLoadingIds((prev) => {\n const n = new Set(prev)\n n.delete(node.id)\n return n\n })\n }\n }\n }\n\n const collapseNode = (id: string) => {\n setExpanded(expanded.filter((x) => x !== id))\n }\n\n const toggleExpand = (node: IrisTreeNode) => {\n if (expandedSet.has(node.id)) collapseNode(node.id)\n else void expandNode(node)\n }\n\n const selectNode = (id: string) => {\n if (selectionMode === 'none') return\n const node = flat.find((f) => f.node.id === id)?.node\n if (!node || node.disabled) return\n if (selectionMode === 'multi') {\n setSelected(selectedSet.has(id) ? selected.filter((x) => x !== id) : [...selected, id])\n return\n }\n setSelected([id])\n }\n\n const moveActive = (delta: 1 | -1) => {\n if (flat.length === 0) return\n const idx = activeId ? flat.findIndex((f) => f.node.id === activeId) : -1\n let next = idx + delta\n if (next < 0) next = 0\n if (next >= flat.length) next = flat.length - 1\n setActiveId(flat[next]!.node.id)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!isContent || !activeId) return\n const current = flat.find((f) => f.node.id === activeId)\n if (!current) return\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n moveActive(1)\n break\n case 'ArrowUp':\n e.preventDefault()\n moveActive(-1)\n break\n case 'ArrowRight':\n e.preventDefault()\n if (current.hasChildren) {\n if (expandedSet.has(activeId)) moveActive(1)\n else void expandNode(current.node)\n }\n break\n case 'ArrowLeft':\n e.preventDefault()\n if (current.hasChildren && expandedSet.has(activeId)) {\n collapseNode(activeId)\n } else if (current.parentId) {\n setActiveId(current.parentId)\n }\n break\n case 'Home':\n e.preventDefault()\n setActiveId(flat[0]!.node.id)\n break\n case 'End':\n e.preventDefault()\n setActiveId(flat[flat.length - 1]!.node.id)\n break\n case 'Enter':\n case ' ':\n e.preventDefault()\n selectNode(activeId)\n break\n }\n }\n\n const stateNode =\n state === 'error'\n ? (errorState ?? t('tree.error'))\n : state === 'loading'\n ? (loadingState ?? t('tree.loading'))\n : (emptyState ?? t('tree.empty'))\n\n return (\n <div\n role=\"tree\"\n aria-label={ariaLabel ?? t('tree.label')}\n aria-busy={state === 'loading' ? true : undefined}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n className={className}\n data-iris-tree=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--iris-padding-sm, 4px)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n fontSize: 14,\n ...style,\n }}\n >\n {isContent ? (\n flat.map(({ node, depth, hasChildren }) => {\n const isExpanded = expandedSet.has(node.id)\n const isSelected = selectedSet.has(node.id)\n const isActive = node.id === activeId\n const isLoading = loadingIds.has(node.id)\n const isError = errorIds.has(node.id)\n const disabled = Boolean(node.disabled)\n return (\n <div\n key={node.id}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={selectionMode !== 'none' ? isSelected : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n aria-level={depth + 1}\n tabIndex={isActive ? 0 : -1}\n data-iris-tree-node={node.id}\n data-state={isSelected ? 'selected' : isActive ? 'active' : 'idle'}\n data-loading={isLoading ? '' : undefined}\n data-error={isError ? '' : undefined}\n onClick={() => {\n setActiveId(node.id)\n selectNode(node.id)\n }}\n onFocus={() => setActiveId(node.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n paddingInlineStart: 6 + depth * 16,\n paddingTop: 4,\n paddingBottom: 4,\n paddingInlineEnd: 8,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n background: isSelected\n ? 'var(--iris-primary)'\n : isActive\n ? 'var(--iris-surface-hover)'\n : 'transparent',\n color: isSelected ? 'var(--iris-primary-foreground, #fff)' : 'inherit',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n outline: 'none',\n userSelect: 'none',\n }}\n >\n {hasChildren ? (\n <button\n type=\"button\"\n aria-label={isExpanded ? 'Collapse' : 'Expand'}\n data-iris-tree-toggle=\"\"\n onClick={(e) => {\n e.stopPropagation()\n toggleExpand(node)\n }}\n style={{\n width: 16,\n height: 16,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 'none',\n color: 'inherit',\n cursor: 'pointer',\n padding: 0,\n fontSize: 11,\n fontFamily: 'inherit',\n transition: 'transform 120ms ease',\n transform: isLoading ? 'none' : isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n }}\n >\n {isLoading ? (\n <svg\n className=\"iris-button-spinner\"\n viewBox=\"0 0 24 24\"\n width={12}\n height={12}\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx={12}\n cy={12}\n r={10}\n stroke=\"currentColor\"\n strokeOpacity={0.25}\n strokeWidth={3}\n />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n />\n </svg>\n ) : (\n '▸'\n )}\n </button>\n ) : (\n <span style={{ width: 16, display: 'inline-block' }} />\n )}\n {checkable && (\n <input\n type=\"checkbox\"\n data-iris-tree-checkbox=\"\"\n checked={checkModel.isChecked(node.id)}\n aria-checked={\n checkModel.isIndeterminate(node.id) ? 'mixed' : checkModel.isChecked(node.id)\n }\n aria-label={node.label}\n disabled={disabled}\n ref={(el) => {\n if (el) el.indeterminate = checkModel.isIndeterminate(node.id)\n }}\n onClick={(e) => e.stopPropagation()}\n onChange={() => checkModel.toggle(node.id)}\n style={{ cursor: disabled ? 'not-allowed' : 'pointer' }}\n />\n )}\n <span data-iris-tree-label=\"\" style={{ flex: 1, minWidth: 0 }}>\n {node.label}\n </span>\n </div>\n )\n })\n ) : (\n <div\n key={stateKey}\n role=\"presentation\"\n data-iris-tree-state={state}\n aria-live=\"polite\"\n {...stateProps}\n style={TREE_STATE_STYLE}\n >\n {stateNode}\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport {\n createSelectionModel,\n createKeyboardNav,\n type SelectionKey,\n type SelectionModel,\n type KeyboardNavController,\n type KeyboardNavAction,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../../useStore'\nimport { useI18n } from '../../i18n'\nimport { useDataState } from '../../motion'\n\nexport interface IrisListItem<T = unknown> {\n value: T\n label?: string\n disabled?: boolean\n}\n\nexport interface IrisListProps<T = unknown> {\n items: IrisListItem<T>[]\n /** Selected value(s). For multi mode, pass an array. */\n value?: T | T[] | null\n defaultValue?: T | T[] | null\n onValueChange?: (next: T | T[] | null) => void\n onSelect?: (item: IrisListItem<T>) => void\n multi?: boolean\n /** Loop arrow nav at boundaries. Default true. */\n loop?: boolean\n ariaLabel?: string\n /** Show the loading state instead of items. */\n loading?: boolean\n /** Show the error state instead of items (takes precedence over loading). */\n error?: boolean\n /** Custom empty-state node (defaults to the localized `list.empty`). */\n emptyState?: React.ReactNode\n /** Custom loading-state node (defaults to the localized `list.loading`). */\n loadingState?: React.ReactNode\n /** Custom error-state node (defaults to the localized `list.error`). */\n errorState?: React.ReactNode\n /** Custom render per item. */\n renderItem?: (\n item: IrisListItem<T>,\n state: { selected: boolean; active: boolean; index: number },\n ) => React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\nconst LIST_STATE_STYLE: React.CSSProperties = {\n listStyle: 'none',\n padding: '12px',\n textAlign: 'center',\n color: 'var(--iris-muted)',\n fontSize: 14,\n}\n\n/**\n * Generic selectable list — foundation for `IrisSelect` content, dropdowns,\n * command palettes, etc. Implements the WAI-ARIA Listbox pattern:\n *\n * - `role=\"listbox\"` (with `aria-multiselectable` when `multi`)\n * - Roving tabindex (one item has tabindex=0, others -1)\n * - Arrow keys / Home / End move focus via `createKeyboardNav` (core)\n * - Enter / Space (de)select\n *\n * Keyboard logic is single-sourced in `@iris-ui-kit/core` — this adapter only\n * bridges the returned actions to DOM focus and selection callbacks.\n *\n * Async lifecycle: pass `loading` / `error` (and an empty `items`) to render\n * the animated loading / error / empty state in place of options. State\n * precedence and entry animation come from {@link useDataState}.\n */\nexport function IrisList<T = unknown>({\n items,\n value: valueProp,\n defaultValue,\n onValueChange,\n onSelect,\n multi = false,\n loop = true,\n ariaLabel,\n loading = false,\n error = false,\n emptyState,\n loadingState,\n errorState,\n renderItem,\n style,\n className,\n}: IrisListProps<T>): React.ReactElement {\n const safeItems = items ?? []\n // Item-selection logic (single set / multiple toggle, dedup,\n // controlled/uncontrolled) is single-sourced in the core model. List values\n // are generic `T`, while the model is keyed by string|number and only ever\n // compares keys by identity (Set/includes) — exactly the previous hand-rolled\n // behavior — so we bridge `T ⇄ key` at this edge (the cast is purely\n // structural; runtime is identical). Single mode never toggles off, so\n // `select` uses `model.set`, not `model.toggle`.\n const isControlled = valueProp !== undefined\n const asKey = (v: T): SelectionKey => v as unknown as SelectionKey\n const toKeys = (v: T | T[] | null | undefined): SelectionKey[] =>\n v == null ? [] : Array.isArray(v) ? (v as T[]).map(asKey) : [asKey(v as T)]\n const fromKeys = (keys: SelectionKey[]): T | T[] | null =>\n multi ? (keys as unknown as T[]) : ((keys[0] ?? null) as unknown as T | null)\n const modelRef = React.useRef<SelectionModel<SelectionKey> | null>(null)\n if (modelRef.current === null) {\n const initial: T | T[] | null = defaultValue !== undefined ? defaultValue : multi ? [] : null\n modelRef.current = createSelectionModel<SelectionKey>({\n mode: multi ? 'multiple' : 'single',\n defaultSelected: toKeys(isControlled ? valueProp : initial),\n onChange: (keys) => onValueChange?.(fromKeys(keys)),\n })\n }\n const model = modelRef.current\n const selectedKeys = useStore(model.store)\n\n // Controlled: mirror the prop into the model without re-emitting onChange.\n React.useEffect(() => {\n if (isControlled) model.sync(toKeys(valueProp))\n }, [valueProp, isControlled, model])\n\n // Controlled lists RENDER from the prop (true controlled semantics): a click\n // emits onChange but the highlighted selection only changes when the parent\n // writes `value` back; uncontrolled renders from the model store.\n const displaySelectedKeys = isControlled ? toKeys(valueProp) : selectedKeys\n const rebaseToProp = (): void => {\n if (isControlled) model.sync(toKeys(valueProp))\n }\n\n const { t } = useI18n()\n const { state, isContent, stateKey, stateProps } = useDataState({\n loading,\n error,\n empty: safeItems.length === 0,\n })\n\n const isSelected = React.useCallback(\n (v: T): boolean => displaySelectedKeys.includes(v as unknown as SelectionKey),\n [displaySelectedKeys],\n )\n\n // ── Keyboard navigation (single-sourced in core controller) ────────────\n const isEnabled = React.useCallback((i: number) => !safeItems[i]?.disabled, [safeItems])\n\n // Stable ref to capture the latest items/select for the controller's action handler\n const ctxRef = React.useRef({\n items: safeItems,\n multi,\n loop,\n isControlled,\n valueProp,\n model,\n onSelect,\n asKey,\n })\n\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({\n count: safeItems.length,\n loop,\n isEnabled,\n })\n }\n const nav = navRef.current\n\n // Reset nav when item count or enabled state changes\n React.useEffect(() => {\n nav.reset(safeItems.length)\n })\n\n // Keep the context ref current for the action handler below\n ctxRef.current = {\n items: safeItems,\n multi,\n loop,\n isControlled,\n valueProp,\n model,\n onSelect,\n asKey,\n }\n\n const activeIndex = useStore(nav.store)\n const listRef = React.useRef<HTMLUListElement | null>(null)\n\n const focusAt = (index: number) => {\n const el = listRef.current?.querySelector<HTMLElement>(`[data-iris-list-index=\"${index}\"]`)\n el?.focus()\n }\n\n const select = (item: IrisListItem<T>) => {\n if (item.disabled) return\n rebaseToProp()\n if (multi) model.toggle(ctxRef.current.asKey(item.value))\n else model.set([ctxRef.current.asKey(item.value)])\n onSelect?.(item)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n if (!isContent) return\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n switch (action.type) {\n case 'focus':\n focusAt(action.target)\n break\n case 'select': {\n const item = safeItems[action.target]\n if (item) select(item)\n break\n }\n }\n }\n\n const stateNode =\n state === 'error'\n ? (errorState ?? t('list.error'))\n : state === 'loading'\n ? (loadingState ?? t('list.loading'))\n : (emptyState ?? t('list.empty'))\n\n return (\n <ul\n ref={listRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-multiselectable={multi ? true : undefined}\n aria-busy={state === 'loading' ? true : undefined}\n data-iris-list=\"\"\n className={className}\n onKeyDown={onKeyDown}\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 'var(--iris-padding-sm, 4px)',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n outline: 'none',\n ...style,\n }}\n >\n {isContent ? (\n safeItems.map((item, index) => {\n const selected = isSelected(item.value)\n const active = index === activeIndex\n const baseStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm, 6px)',\n padding: '6px var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.5 : 1,\n fontSize: 14,\n background: selected\n ? 'var(--iris-primary)'\n : active\n ? 'var(--iris-surface-hover)'\n : 'transparent',\n color: selected ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n outline: 'none',\n }\n return (\n <li\n key={String(item.value ?? index)}\n role=\"option\"\n tabIndex={active ? 0 : -1}\n aria-selected={selected}\n aria-disabled={item.disabled ? 'true' : undefined}\n data-iris-list-index={index}\n data-iris-list-item=\"\"\n data-state={selected ? 'selected' : active ? 'active' : 'idle'}\n onClick={item.disabled ? undefined : () => select(item)}\n onFocus={() => nav.focus(index)}\n style={baseStyle}\n >\n {renderItem\n ? renderItem(item, { selected, active, index })\n : (item.label ?? String(item.value))}\n </li>\n )\n })\n ) : (\n <li\n key={stateKey}\n role=\"presentation\"\n data-iris-list-state={state}\n aria-live=\"polite\"\n {...stateProps}\n style={LIST_STATE_STYLE}\n >\n {stateNode}\n </li>\n )}\n </ul>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisFileUploadFile {\n file: File\n name: string\n size: number\n type: string\n}\n\nfunction wrapFile(file: File): IrisFileUploadFile {\n return { file, name: file.name, size: file.size, type: file.type }\n}\n\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`\n}\n\nexport type IrisFileUploadRejectReason = 'size' | 'count' | 'type'\n\nexport interface IrisFileUploadRejection {\n file: IrisFileUploadFile\n reason: IrisFileUploadRejectReason\n}\n\nexport interface IrisFileUploadProps {\n value?: IrisFileUploadFile[]\n defaultValue?: IrisFileUploadFile[]\n onValueChange?: (files: IrisFileUploadFile[]) => void\n onAccept?: (files: IrisFileUploadFile[]) => void\n onReject?: (entries: IrisFileUploadRejection[]) => void\n /** MIME type filter (forwarded + used to filter dropped files). */\n accept?: string\n multiple?: boolean\n /** Max file size in bytes. 0 = unlimited. */\n maxSize?: number\n /** Max simultaneous files. 0 = unlimited. */\n maxFiles?: number\n disabled?: boolean\n /** Idle dropzone label. */\n label?: string\n /** id forwarded to the hidden input. Set by `IrisFormField`. */\n id?: string\n /** Custom render for the file list. Receives `{ files, remove }`. */\n renderList?: (state: {\n files: IrisFileUploadFile[]\n remove: (index: number) => void\n }) => React.ReactNode\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * File-upload dropzone. Wraps a hidden `<input type=\"file\">` with a\n * click-to-browse + drag-and-drop surface. Validates via `accept`, `maxSize`,\n * `maxFiles`; rejected files surface via `onReject`.\n */\nexport function IrisFileUpload({\n value: valueProp,\n defaultValue = [],\n onValueChange,\n onAccept,\n onReject,\n accept = '',\n multiple = false,\n maxSize = 0,\n maxFiles = 0,\n disabled = false,\n label,\n id,\n renderList,\n style,\n className,\n}: IrisFileUploadProps): React.ReactElement {\n const { t } = useI18n()\n const resolvedLabel = label ?? t('fileUpload.label')\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<IrisFileUploadFile[]>(defaultValue)\n const files = isControlled ? (valueProp as IrisFileUploadFile[]) : internal\n\n const inputRef = React.useRef<HTMLInputElement | null>(null)\n const dragCountRef = React.useRef(0)\n const [dragOver, setDragOver] = React.useState(false)\n\n const acceptMatches = (file: File): boolean => {\n if (!accept) return true\n const tokens = accept\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n if (tokens.length === 0) return true\n return tokens.some((token) => {\n if (token.startsWith('.')) {\n return file.name.toLowerCase().endsWith(token.toLowerCase())\n }\n if (token.endsWith('/*')) {\n return file.type.startsWith(token.slice(0, -2) + '/')\n }\n return file.type === token\n })\n }\n\n const validate = (incoming: File[]) => {\n const accepted: IrisFileUploadFile[] = []\n const rejected: IrisFileUploadRejection[] = []\n const existing = files.length\n let acceptedCount = 0\n for (const f of incoming) {\n const wrapped = wrapFile(f)\n if (!acceptMatches(f)) {\n rejected.push({ file: wrapped, reason: 'type' })\n continue\n }\n if (maxSize > 0 && f.size > maxSize) {\n rejected.push({ file: wrapped, reason: 'size' })\n continue\n }\n if (maxFiles > 0 && (multiple ? existing + acceptedCount + 1 > maxFiles : false)) {\n rejected.push({ file: wrapped, reason: 'count' })\n continue\n }\n accepted.push(wrapped)\n acceptedCount += 1\n }\n return { accepted, rejected }\n }\n\n const applyFiles = (incoming: File[]) => {\n if (disabled) return\n const { accepted, rejected } = validate(incoming)\n const next = multiple ? [...files, ...accepted] : accepted.slice(0, 1)\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n if (accepted.length > 0) onAccept?.(accepted)\n if (rejected.length > 0) onReject?.(rejected)\n }\n\n const onInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target\n const incoming = input.files ? Array.from(input.files) : []\n applyFiles(incoming)\n input.value = ''\n }\n\n const openPicker = () => {\n if (disabled) return\n inputRef.current?.click()\n }\n\n const onKeyDownZone = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openPicker()\n }\n }\n\n const onDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n if (disabled) return\n e.preventDefault()\n dragCountRef.current += 1\n setDragOver(true)\n }\n const onDragLeave = () => {\n if (disabled) return\n dragCountRef.current = Math.max(0, dragCountRef.current - 1)\n if (dragCountRef.current === 0) setDragOver(false)\n }\n const onDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n if (disabled) return\n e.preventDefault()\n }\n const onDrop = (e: React.DragEvent<HTMLDivElement>) => {\n if (disabled) return\n e.preventDefault()\n dragCountRef.current = 0\n setDragOver(false)\n const incoming = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : []\n applyFiles(incoming)\n }\n\n const removeAt = (index: number) => {\n const next = [...files]\n next.splice(index, 1)\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const zoneStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n padding: 'var(--iris-padding-lg, 20px)',\n border: `2px dashed ${dragOver ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: dragOver ? 'var(--iris-surface-hover)' : 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'border-color 120ms ease, background-color 120ms ease',\n outline: 'none',\n }\n\n return (\n <div\n data-iris-file-upload=\"\"\n data-drag-over={dragOver ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n className={className}\n style={style}\n >\n <input\n ref={inputRef}\n id={id}\n type=\"file\"\n accept={accept || undefined}\n multiple={multiple || undefined}\n disabled={disabled || undefined}\n data-iris-file-upload-input=\"\"\n onChange={onInputChange}\n style={{\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0,0,0,0)',\n whiteSpace: 'nowrap',\n border: 0,\n }}\n />\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-file-upload-zone=\"\"\n onClick={openPicker}\n onKeyDown={onKeyDownZone}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n style={zoneStyle}\n >\n <div data-iris-file-upload-label=\"\" style={{ fontSize: 14, fontWeight: 500 }}>\n {resolvedLabel}\n </div>\n {accept ? <div style={{ fontSize: 12, color: 'var(--iris-muted)' }}>{accept}</div> : null}\n </div>\n {renderList ? (\n renderList({ files, remove: removeAt })\n ) : files.length > 0 ? (\n <ul\n data-iris-file-upload-list=\"\"\n style={{\n listStyle: 'none',\n margin: '8px 0 0 0',\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 4,\n }}\n >\n {files.map((item, idx) => (\n <li\n key={`${item.name}-${idx}`}\n data-iris-file-upload-item=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '6px 10px',\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n fontSize: 13,\n }}\n >\n <span style={{ flex: 1, minWidth: 0 }}>{item.name}</span>\n <span style={{ color: 'var(--iris-muted)', fontSize: 12 }}>\n {formatBytes(item.size)}\n </span>\n <button\n type=\"button\"\n aria-label={t('fileUpload.remove', { name: item.name })}\n disabled={disabled || undefined}\n onClick={(e) => {\n e.stopPropagation()\n removeAt(idx)\n }}\n style={{\n background: 'transparent',\n border: 'none',\n color: 'var(--iris-muted)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 16,\n lineHeight: 1,\n padding: '0 4px',\n }}\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface MenuContextValue {\n open: boolean\n setOpen: (next: boolean) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n /** Close the *root* menu — propagates to nested submenus. */\n closeRoot: () => void\n}\n\nexport const MenuContext = React.createContext<MenuContextValue | null>(null)\n\nexport function useMenuContext(componentName: string): MenuContextValue {\n const ctx = React.useContext(MenuContext)\n if (!ctx) {\n throw new Error(`[iris-ui] ${componentName} must be a descendant of <IrisMenu>`)\n }\n return ctx\n}\n","import * as React from 'react'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../useMachine'\nimport { MenuContext } from './context'\n\nexport interface IrisMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (next: boolean) => void\n placement?: Placement\n offset?: number\n children?: React.ReactNode\n}\n\n/**\n * Root of a (potentially nested) menu. Provides the \"close everything\"\n * channel so picking a leaf in a deeply nested branch closes the whole tree.\n *\n * Use `IrisMenuSub` inside the content to declare nested submenus.\n */\nexport function IrisMenu({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n offset = 6,\n children,\n}: IrisMenuProps): React.ReactElement {\n const isControlled = openProp !== undefined\n const [state, send] = useMachine(() => createFloatingMachine(defaultOpen ? 'open' : 'closed'))\n const internalOpen = state.value === 'open'\n\n React.useEffect(() => {\n if (!isControlled) return\n const target = openProp ? 'open' : 'closed'\n if (state.value !== target) {\n send({ type: openProp ? 'OPEN' : 'CLOSE' })\n }\n }, [isControlled, openProp, state.value, send])\n\n const open = isControlled ? Boolean(openProp) : internalOpen\n\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (!isControlled) send({ type: next ? 'OPEN' : 'CLOSE' })\n onOpenChange?.(next)\n },\n [isControlled, send, onOpenChange],\n )\n\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const contentId = React.useId()\n\n const closeRoot = React.useCallback(() => setOpen(false), [setOpen])\n\n const value = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId,\n placement,\n offset,\n closeRoot,\n }),\n [open, setOpen, contentId, placement, offset, closeRoot],\n )\n\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>\n}\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { IrisSlot } from '../slot/Slot'\nimport { useMenuContext } from './context'\n\nexport interface IrisMenuTriggerProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> {\n asChild?: boolean\n children?: React.ReactNode\n}\n\n/**\n * The trigger that toggles the menu open/closed. Renders as a `<button>` (or\n * custom via `asChild`) with `aria-haspopup=\"menu\"`. Opens on click,\n * ArrowDown, Enter, or Space.\n */\nexport const IrisMenuTrigger = React.forwardRef<HTMLElement, IrisMenuTriggerProps>(\n function IrisMenuTrigger(\n { asChild = false, onClick, onKeyDown, children, ...rest },\n forwardedRef,\n ) {\n const ctx = useMenuContext('IrisMenuTrigger')\n\n const captureRef = React.useCallback(\n (el: HTMLElement | null) => {\n ctx.triggerRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLElement>) => void) | undefined,\n () => ctx.setOpen(!ctx.open),\n )\n\n // Keyboard open: ArrowDown/Enter/Space open the menu (which then focuses\n // its first item). Matches the Vue/Solid/Svelte triggers.\n const handleKeyDown = composeEventHandlers(\n onKeyDown as ((e: React.KeyboardEvent<HTMLElement>) => void) | undefined,\n (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n ctx.setOpen(true)\n }\n },\n )\n\n const triggerProps = {\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': ctx.open,\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open ? 'open' : 'closed',\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisMenuTrigger asChild requires a single React element')\n }\n return null\n }\n return (\n <IrisSlot ref={captureRef as React.Ref<unknown>} {...rest} {...triggerProps}>\n {children}\n </IrisSlot>\n )\n }\n\n return (\n <button\n type=\"button\"\n {...(rest as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n {...triggerProps}\n ref={captureRef as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n },\n)\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n createKeyboardNav,\n type KeyboardNavController,\n type KeyboardNavAction,\n} from '@iris-ui-kit/core'\nimport { useFloating } from '../../floating/useFloating'\nimport { useDismiss } from '../../floating/useDismiss'\nimport { useMenuContext } from './context'\n\nexport interface IrisMenuContentProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n portalTarget?: HTMLElement | false\n children?: React.ReactNode\n}\n\n/**\n * Menu surface (`role=\"menu\"`). Handles ArrowUp/Down/Home/End nav across all\n * `[role=\"menuitem\"]` descendants (including those inside submenu triggers).\n * Closes on outside click, Escape, and Tab.\n *\n * Keyboard navigation is single-sourced in `@iris-ui-kit/core`'s\n * {@link createKeyboardNav} — this adapter only bridges the returned actions\n * to DOM focus.\n */\nexport const IrisMenuContent = React.forwardRef<HTMLDivElement, IrisMenuContentProps>(\n function IrisMenuContent({ portalTarget, style, onKeyDown, children, ...rest }, forwardedRef) {\n const ctx = useMenuContext('IrisMenuContent')\n\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const captureRef = React.useCallback(\n (el: HTMLDivElement | null) => {\n innerRef.current = el\n ctx.contentRef.current = el\n if (typeof forwardedRef === 'function') forwardedRef(el)\n else if (forwardedRef)\n (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n },\n [ctx, forwardedRef],\n )\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n // Outside-pointerdown + Escape dismiss (shared floating hook).\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, ctx.contentRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus first item on open; restore focus to trigger on close.\n const wasOpenRef = React.useRef(false)\n React.useEffect(() => {\n if (ctx.open && !wasOpenRef.current) {\n queueMicrotask(() => {\n const items = innerRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')\n items?.[0]?.focus()\n })\n } else if (!ctx.open && wasOpenRef.current) {\n ctx.triggerRef.current?.focus?.()\n }\n wasOpenRef.current = ctx.open\n }, [ctx.open, ctx.triggerRef])\n\n // ── Keyboard navigation (single-sourced in core controller) ──────────\n const navRef = React.useRef<KeyboardNavController | null>(null)\n if (navRef.current === null) {\n navRef.current = createKeyboardNav({ count: 0, loop: true })\n }\n const nav = navRef.current\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e)\n if (!ctx.open) return\n const items = Array.from(\n innerRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n\n // Tab always closes the root menu.\n if (e.key === 'Tab') {\n ctx.closeRoot()\n return\n }\n\n // Sync nav state to the currently focused element.\n nav.reset(items.length)\n const current = document.activeElement as HTMLElement | null\n const curIndex = current ? items.indexOf(current) : -1\n if (curIndex >= 0) nav.focus(curIndex)\n\n const action: KeyboardNavAction = nav.handleKeyDown({\n key: e.key,\n preventDefault: () => e.preventDefault(),\n })\n\n if (action.type === 'focus') {\n items[action.target]?.focus()\n }\n }\n\n if (!ctx.open) return null\n\n const node = (\n <div\n {...rest}\n ref={captureRef}\n id={ctx.contentId}\n role=\"menu\"\n tabIndex={-1}\n data-iris-menu=\"\"\n data-state=\"open\"\n onKeyDown={handleKeyDown}\n style={{\n ...floatingStyles,\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: 'var(--iris-padding-sm, 4px)',\n boxShadow: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\n minWidth: 180,\n outline: 'none',\n zIndex: 1000,\n ...style,\n }}\n >\n {children}\n </div>\n )\n\n if (portalTarget === false) return node\n if (typeof document === 'undefined') return null\n return createPortal(node, portalTarget ?? document.body)\n },\n)\n","import * as React from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport { useMenuContext } from './context'\n\nexport interface IrisMenuItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n disabled?: boolean\n /** Skip closing the menu on select (e.g. for sub-actions). */\n keepOpen?: boolean\n /** Triggered on click or Enter/Space. */\n onSelect?: (event: React.SyntheticEvent) => void\n}\n\n/**\n * An individual selectable item in a menu. Renders as a `role=\"menuitem\"` `<div>`.\n * Calls `onSelect`, then closes the root menu (unless `keepOpen`). Disabled\n * items are skipped by keyboard navigation.\n */\nexport const IrisMenuItem = React.forwardRef<HTMLDivElement, IrisMenuItemProps>(\n function IrisMenuItem(\n { disabled = false, keepOpen = false, onSelect, onClick, onKeyDown, style, children, ...rest },\n ref,\n ) {\n const ctx = useMenuContext('IrisMenuItem')\n const [hovered, setHovered] = React.useState(false)\n\n const fire = (event: React.SyntheticEvent) => {\n if (disabled) return\n onSelect?.(event)\n if (!keepOpen) ctx.closeRoot()\n }\n\n const handleClick = composeEventHandlers(\n onClick as ((e: React.MouseEvent<HTMLDivElement>) => void) | undefined,\n (e: React.MouseEvent<HTMLDivElement>) => fire(e),\n )\n const handleKeyDown = composeEventHandlers(\n onKeyDown as ((e: React.KeyboardEvent<HTMLDivElement>) => void) | undefined,\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n fire(e)\n }\n },\n )\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-menu-item=\"\"\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n onFocus={() => setHovered(true)}\n onBlur={() => setHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm, 6px)',\n padding: '6px var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n background: hovered && !disabled ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n outline: 'none',\n fontSize: 14,\n transition: 'background-color 80ms ease',\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n\nexport type IrisMenuSeparatorProps = React.HTMLAttributes<HTMLDivElement>\n\n/**\n * A visual separator within a menu — renders a `role=\"separator\"` `<div>`.\n */\nexport const IrisMenuSeparator = React.forwardRef<HTMLDivElement, IrisMenuSeparatorProps>(\n function IrisMenuSeparator({ style, ...rest }, ref) {\n return (\n <div\n {...rest}\n ref={ref}\n role=\"separator\"\n data-iris-menu-separator=\"\"\n style={{ height: 1, background: 'var(--iris-border)', margin: '4px 0', ...style }}\n />\n )\n },\n)\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useFloating } from '../../floating/useFloating'\nimport { MenuContext, useMenuContext } from './context'\n\nconst HOVER_OPEN_DELAY = 100\n\nexport interface IrisMenuSubProps {\n label?: React.ReactNode\n portalTarget?: HTMLElement | false\n children?: React.ReactNode\n}\n\n/**\n * Nested submenu. Renders its own trigger (a `[role=\"menuitem\"]` inside the\n * parent menu) and floating content panel. Opens on hover (with a short\n * delay) and on ArrowRight / Enter; closes on ArrowLeft.\n *\n * Inherits `closeRoot` from the surrounding `IrisMenu` so picking a leaf\n * collapses the whole tree.\n */\nexport function IrisMenuSub({\n label,\n portalTarget,\n children,\n}: IrisMenuSubProps): React.ReactElement {\n const parentCtx = useMenuContext('IrisMenuSub')\n\n const [open, setOpenState] = React.useState(false)\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const contentRef = React.useRef<HTMLElement | null>(null)\n const openTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const clearTimer = React.useCallback(() => {\n if (openTimerRef.current) {\n clearTimeout(openTimerRef.current)\n openTimerRef.current = null\n }\n }, [])\n\n const scheduleOpen = () => {\n clearTimer()\n openTimerRef.current = setTimeout(() => {\n setOpenState(true)\n openTimerRef.current = null\n }, HOVER_OPEN_DELAY)\n }\n\n React.useEffect(() => clearTimer, [clearTimer])\n\n const { floatingStyles } = useFloating({\n anchor: triggerRef,\n floating: contentRef,\n open,\n placement: 'right-start',\n offset: -4,\n })\n\n const setOpen = React.useCallback((v: boolean) => setOpenState(v), [])\n\n // Focus management on open/close.\n const wasOpenRef = React.useRef(false)\n React.useEffect(() => {\n if (open && !wasOpenRef.current) {\n queueMicrotask(() => {\n const first = contentRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')\n first?.focus()\n })\n } else if (!open && wasOpenRef.current) {\n triggerRef.current?.focus?.()\n }\n wasOpenRef.current = open\n }, [open])\n\n const onTriggerClick = (e: React.MouseEvent) => {\n if (e.defaultPrevented) return\n clearTimer()\n setOpenState((prev) => !prev)\n }\n const onTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowRight' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setOpenState(true)\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n setOpenState(false)\n }\n }\n\n const onContentKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n const items = Array.from(\n contentRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n const index = items.indexOf(document.activeElement as HTMLElement)\n const next =\n e.key === 'ArrowDown'\n ? index < 0\n ? 0\n : (index + 1) % items.length\n : index <= 0\n ? items.length - 1\n : index - 1\n items[next]?.focus()\n } else if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setOpenState(false)\n } else if (e.key === 'Tab') {\n parentCtx.closeRoot()\n }\n }\n\n const ctxValue = React.useMemo(\n () => ({\n open,\n setOpen,\n triggerRef,\n contentRef,\n contentId: '',\n placement: 'right-start' as const,\n offset: 0,\n closeRoot: parentCtx.closeRoot,\n }),\n [open, setOpen, parentCtx.closeRoot],\n )\n\n const trigger = (\n <div\n ref={(el) => {\n triggerRef.current = el\n }}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n tabIndex={0}\n data-iris-menu-sub-trigger=\"\"\n data-state={open ? 'open' : 'closed'}\n onPointerEnter={scheduleOpen}\n onPointerLeave={clearTimer}\n onClick={onTriggerClick}\n onKeyDown={onTriggerKeyDown}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 'var(--iris-gap-sm, 6px)',\n padding: '6px var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n outline: 'none',\n fontSize: 14,\n background: open ? 'var(--iris-surface-hover)' : 'transparent',\n }}\n >\n <span>{label}</span>\n <svg aria-hidden=\"true\" viewBox=\"0 0 16 16\" width=\"12\" height=\"12\">\n <path\n d=\"M6 4l4 4-4 4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n )\n\n const content = open ? (\n <div\n ref={(el) => {\n contentRef.current = el\n }}\n role=\"menu\"\n tabIndex={-1}\n data-iris-menu-sub=\"\"\n data-state=\"open\"\n onKeyDown={onContentKeyDown}\n onPointerEnter={clearTimer}\n style={{\n ...floatingStyles,\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: 'var(--iris-padding-sm, 4px)',\n boxShadow: '0 8px 24px -8px rgba(0, 0, 0, 0.16), 0 4px 8px -2px rgba(0, 0, 0, 0.08)',\n minWidth: 180,\n outline: 'none',\n zIndex: 1001,\n }}\n >\n <MenuContext.Provider value={ctxValue}>{children}</MenuContext.Provider>\n </div>\n ) : null\n\n const portaled =\n content && portalTarget !== false && typeof document !== 'undefined'\n ? createPortal(content, portalTarget ?? document.body)\n : content\n\n return (\n <>\n {trigger}\n {portaled}\n </>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisBannerTone = 'info' | 'success' | 'warning' | 'danger' | 'neutral'\n\nconst TONE_TO_VAR: Record<IrisBannerTone, string> = {\n info: '--iris-primary',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n neutral: '--iris-muted',\n}\n\nexport interface IrisBannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n tone?: IrisBannerTone\n closable?: boolean\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (next: boolean) => void\n /** Use `position: sticky; top: 0;`. */\n sticky?: boolean\n /** Optional icon slot rendered before the content. */\n icon?: React.ReactNode\n /** Optional actions slot rendered after the content. */\n actions?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * Edge-to-edge announcement bar — typically pinned to the top of the layout.\n * Distinct from `IrisAlert`:\n * 1. Edge-to-edge (full width) instead of a contained card\n * 2. Optional `sticky` positioning\n * 3. Tighter vertical padding\n */\nexport function IrisBanner({\n tone = 'info',\n closable = false,\n open: openProp,\n defaultOpen = true,\n onOpenChange,\n sticky = false,\n icon,\n actions,\n style,\n children,\n ...rest\n}: IrisBannerProps): React.ReactElement | null {\n const { t } = useI18n()\n const isControlled = openProp !== undefined\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n const isOpen = isControlled ? Boolean(openProp) : internalOpen\n\n const handleClose = () => {\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }\n\n if (!isOpen) return null\n\n const tonalVar = `var(${TONE_TO_VAR[tone]})`\n\n return (\n <div\n {...rest}\n role=\"status\"\n data-iris-banner=\"\"\n data-iris-banner-tone={tone}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-md, 12px)',\n padding: '8px var(--iris-padding-md, 16px)',\n width: '100%',\n // Tonal surface: `backgroundColor` is the precomputed fallback (used on\n // engines without color-mix); the `background` shorthand (later in source\n // order) overrides it with the exact color-mix on modern engines.\n backgroundColor: `var(${TONE_TO_VAR[tone]}-subtle)`,\n background: `color-mix(in srgb, ${tonalVar} 14%, var(--iris-background))`,\n color: 'var(--iris-foreground)',\n // Border: shorthand carries width/style + a solid fallback color; the\n // `borderBottomColor` longhand (later) refines it to the color-mix.\n borderBottom: `1px solid ${tonalVar}`,\n borderBottomColor: `color-mix(in srgb, ${tonalVar} 50%, transparent)`,\n ...(sticky ? { position: 'sticky', top: 0, zIndex: 40 } : {}),\n ...style,\n }}\n >\n {icon ? (\n <span\n data-iris-banner-icon=\"\"\n style={{ color: tonalVar, display: 'inline-flex', flexShrink: 0 }}\n >\n {icon}\n </span>\n ) : null}\n <div data-iris-banner-content=\"\" style={{ flex: 1, minWidth: 0 }}>\n {children}\n </div>\n {actions ? (\n <div data-iris-banner-actions=\"\" style={{ display: 'inline-flex', gap: 8, flexShrink: 0 }}>\n {actions}\n </div>\n ) : null}\n {closable ? (\n <button\n type=\"button\"\n data-iris-banner-close=\"\"\n aria-label={t('banner.close')}\n onClick={handleClose}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n fontSize: 16,\n padding: '0 4px',\n lineHeight: 1,\n flexShrink: 0,\n }}\n >\n ✕\n </button>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisTimePickerFormat = '12h' | '24h'\n\nexport interface IrisTimeValue {\n hours: number\n minutes: number\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n))\n}\nfunction pad2(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport interface IrisTimePickerProps {\n value?: IrisTimeValue | null\n defaultValue?: IrisTimeValue\n onValueChange?: (value: IrisTimeValue) => void\n format?: IrisTimePickerFormat\n /** Step in minutes for the minute input (1, 5, 10, 15, 30). */\n minuteStep?: number\n disabled?: boolean\n invalid?: boolean\n /** id forwarded to the hours input. Set by `IrisFormField`. */\n id?: string\n /** Forwarded as `aria-describedby` on the hours input. Set by `IrisFormField`. */\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Time picker rendered as two zero-padded number inputs (hours + minutes)\n * plus an optional AM/PM toggle for 12h format. Internal value is always\n * 24-hour `{ hours, minutes }`.\n */\nexport function IrisTimePicker({\n value: valueProp,\n defaultValue = { hours: 0, minutes: 0 },\n onValueChange,\n format = '24h',\n minuteStep = 1,\n disabled = false,\n invalid = false,\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisTimePickerProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<IrisTimeValue>(defaultValue)\n const value = isControlled ? (valueProp ?? defaultValue) : internal\n\n const setValue = (next: IrisTimeValue) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const meridiem = value.hours >= 12 ? 'PM' : 'AM'\n const displayH = format === '24h' ? value.hours : value.hours % 12 === 0 ? 12 : value.hours % 12\n\n const setHours24 = (h24: number) => {\n setValue({ hours: clamp(h24, 0, 23), minutes: value.minutes })\n }\n const setMinutes = (m: number) => {\n setValue({\n hours: value.hours,\n minutes: clamp(Math.round(m / minuteStep) * minuteStep, 0, 59),\n })\n }\n const toggleMeridiem = () => {\n const h12 = value.hours % 12\n const newH24 = meridiem === 'PM' ? h12 : h12 + 12\n setValue({ hours: newH24, minutes: value.minutes })\n }\n\n const onHoursInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = parseInt(e.target.value || '0', 10)\n if (Number.isNaN(v)) return\n if (format === '12h') {\n const h12 = clamp(v, 1, 12)\n const wrap = h12 === 12 ? 0 : h12\n const newH24 = meridiem === 'PM' ? wrap + 12 : wrap\n setHours24(newH24)\n } else {\n setHours24(v)\n }\n }\n const onMinutesInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = parseInt(e.target.value || '0', 10)\n if (Number.isNaN(v)) return\n setMinutes(v)\n }\n\n const stepHours = (delta: number) => {\n const max = format === '12h' ? 12 : 23\n const min = format === '12h' ? 1 : 0\n let next = displayH + delta\n if (next < min) next = max\n if (next > max) next = min\n if (format === '12h') {\n const wrap = next === 12 ? 0 : next\n setHours24(meridiem === 'PM' ? wrap + 12 : wrap)\n } else {\n setHours24(next)\n }\n }\n const stepMinutes = (delta: number) => {\n let next = value.minutes + delta * minuteStep\n if (next < 0) next = 60 - minuteStep\n if (next >= 60) next = 0\n setMinutes(next)\n }\n\n const onHoursKey = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n stepHours(1)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n stepHours(-1)\n }\n }\n const onMinutesKey = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n stepMinutes(1)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n stepMinutes(-1)\n }\n }\n\n const fieldStyle: React.CSSProperties = {\n width: 48,\n height: 34,\n padding: '4px 6px',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${invalid ? 'var(--iris-danger)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n fontSize: 15,\n fontFamily: 'inherit',\n textAlign: 'center',\n outline: 'none',\n }\n\n return (\n <div\n data-iris-time-picker=\"\"\n data-disabled={disabled ? 'true' : undefined}\n className={className}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n ...style,\n }}\n >\n <input\n id={id}\n type=\"number\"\n inputMode=\"numeric\"\n min={format === '12h' ? 1 : 0}\n max={format === '12h' ? 12 : 23}\n value={pad2(displayH)}\n disabled={disabled || undefined}\n aria-label={t('timePicker.hours')}\n aria-describedby={ariaDescribedby}\n aria-invalid={invalid ? 'true' : undefined}\n data-iris-time-picker-hours=\"\"\n onChange={onHoursInput}\n onKeyDown={onHoursKey}\n style={fieldStyle}\n />\n <span aria-hidden=\"true\" style={{ color: 'var(--iris-muted)', fontSize: 15 }}>\n :\n </span>\n <input\n type=\"number\"\n inputMode=\"numeric\"\n min={0}\n max={59}\n step={minuteStep}\n value={pad2(value.minutes)}\n disabled={disabled || undefined}\n aria-label={t('timePicker.minutes')}\n data-iris-time-picker-minutes=\"\"\n onChange={onMinutesInput}\n onKeyDown={onMinutesKey}\n style={fieldStyle}\n />\n {format === '12h' ? (\n <button\n type=\"button\"\n disabled={disabled || undefined}\n aria-label={t('timePicker.togglePeriod')}\n data-iris-time-picker-meridiem={meridiem}\n onClick={toggleMeridiem}\n style={{\n height: 34,\n padding: '4px 8px',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n fontSize: 13,\n fontFamily: 'inherit',\n fontWeight: 600,\n }}\n >\n {meridiem}\n </button>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\nimport type { Placement } from '@iris-ui-kit/core'\nimport { useI18n } from '../../i18n'\nimport { IrisPopover } from '../popover/Popover'\nimport { IrisPopoverTrigger } from '../popover/PopoverTrigger'\nimport { IrisPopoverContent } from '../popover/PopoverContent'\nimport { IrisCalendar } from '../calendar/Calendar'\nimport { addMonths, safeLocale, startOfDay, startOfMonth } from '../calendar/dateUtils'\n\nexport interface IrisDateRange {\n start: Date | null\n end: Date | null\n}\n\nfunction formatDisplay(d: Date | null, locale?: string): string {\n if (!d) return ''\n return new Intl.DateTimeFormat(safeLocale(locale), { dateStyle: 'medium' }).format(d)\n}\n\nexport interface IrisDateRangePickerProps {\n value?: IrisDateRange | null\n defaultValue?: IrisDateRange\n onValueChange?: (next: IrisDateRange) => void\n min?: Date\n max?: Date\n weekStartsOn?: number\n locale?: string\n placeholder?: string\n disabled?: boolean\n invalid?: boolean\n placement?: Placement\n id?: string\n ariaDescribedby?: string\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Range date picker. Trigger displays `start → end`; popover contains two\n * month calendars (current + next).\n *\n * Click order: first click → sets `start`. Second click → sets `end`\n * (auto-swaps if before `start`). Popover closes on completion.\n */\nexport function IrisDateRangePicker({\n value: valueProp,\n defaultValue = { start: null, end: null },\n onValueChange,\n min,\n max,\n weekStartsOn = 0,\n locale,\n placeholder,\n disabled = false,\n invalid = false,\n placement = 'bottom-start',\n id,\n ariaDescribedby,\n style,\n className,\n}: IrisDateRangePickerProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<IrisDateRange>(defaultValue)\n const value = isControlled ? (valueProp ?? { start: null, end: null }) : internal\n const [open, setOpen] = React.useState(false)\n\n const leftMonth = React.useMemo(\n () => (value.start ? startOfMonth(value.start) : startOfMonth(new Date())),\n [value.start],\n )\n\n const display = React.useMemo(() => {\n const s = formatDisplay(value.start, locale)\n const e = formatDisplay(value.end, locale)\n if (s && e) return `${s} → ${e}`\n if (s) return `${s} → …`\n return ''\n }, [value.start, value.end, locale])\n\n const setRange = (next: IrisDateRange) => {\n if (!isControlled) setInternal(next)\n onValueChange?.(next)\n }\n\n const handleSelect = (next: Date | null) => {\n if (!next) return\n const d = startOfDay(next)\n if (!value.start || (value.start && value.end)) {\n setRange({ start: d, end: null })\n return\n }\n let s = value.start\n let e = d\n if (e < s) [s, e] = [e, s]\n setRange({ start: s, end: e })\n setOpen(false)\n }\n\n const previewSelected = value.end ?? value.start\n\n return (\n <IrisPopover open={open} onOpenChange={setOpen} placement={placement}>\n <IrisPopoverTrigger asChild>\n <button\n type=\"button\"\n id={id}\n className={className}\n disabled={disabled || undefined}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n data-iris-date-range-picker-trigger=\"\"\n data-state={open ? 'open' : 'closed'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '6px 12px',\n background: 'var(--iris-background)',\n color: display ? 'var(--iris-foreground)' : 'var(--iris-muted)',\n border: `1px solid ${invalid ? 'var(--iris-danger)' : 'var(--iris-border)'}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n fontSize: 14,\n fontFamily: 'inherit',\n minHeight: 34,\n minWidth: 260,\n textAlign: 'start',\n ...style,\n }}\n >\n {display || (placeholder ?? t('dateRangePicker.placeholder'))}\n </button>\n </IrisPopoverTrigger>\n <IrisPopoverContent autoFocus={false} style={{ padding: 0 }}>\n <div data-iris-date-range-picker-pane=\"\" style={{ display: 'flex', gap: 8 }}>\n <IrisCalendar\n value={previewSelected}\n defaultMonth={leftMonth}\n min={min}\n max={max}\n weekStartsOn={weekStartsOn}\n locale={locale}\n disabled={disabled}\n onValueChange={handleSelect}\n style={{ border: 'none' }}\n />\n <IrisCalendar\n value={previewSelected}\n defaultMonth={addMonths(leftMonth, 1)}\n min={min}\n max={max}\n weekStartsOn={weekStartsOn}\n locale={locale}\n disabled={disabled}\n onValueChange={handleSelect}\n style={{ border: 'none' }}\n />\n </div>\n </IrisPopoverContent>\n </IrisPopover>\n )\n}\n","import * as React from 'react'\nimport { getDirection } from '@iris-ui-kit/theme'\nimport { useI18n } from '../../i18n'\nimport { useDrag } from '../drag/useDrag'\n\nexport type IrisSliderOrientation = 'horizontal' | 'vertical'\n\nfunction decimalsOf(step: number): number {\n if (!Number.isFinite(step)) return 0\n const s = step.toString()\n const dot = s.indexOf('.')\n return dot < 0 ? 0 : s.length - dot - 1\n}\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\nfunction roundToStep(value: number, step: number, min: number): number {\n if (step <= 0) return value\n const places = decimalsOf(step)\n return Number((Math.round((value - min) / step) * step + min).toFixed(places))\n}\n\nexport interface IrisSliderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n value?: number\n defaultValue?: number\n onChange?: (next: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n orientation?: IrisSliderOrientation\n /** Accessible label for screen readers. */\n label?: string\n}\n\n/**\n * Numeric slider with keyboard + pointer support.\n *\n * Keyboard:\n * ←/↓ −step · →/↑ +step · Home min · End max · PgUp/PgDn ±step×10\n */\nexport function IrisSlider({\n value: valueProp,\n defaultValue = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n orientation = 'horizontal',\n label,\n style,\n ...rest\n}: IrisSliderProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState(defaultValue)\n const raw = isControlled ? (valueProp as number) : internal\n const value = clamp(roundToStep(raw, step, min), min, max)\n const valueRef = React.useRef(value)\n valueRef.current = value\n\n const trackRef = React.useRef<HTMLDivElement | null>(null)\n const thumbRef = React.useRef<HTMLDivElement | null>(null)\n const [dragging, setDragging] = React.useState(false)\n\n const isHorizontal = orientation === 'horizontal'\n\n const setValue = (next: number) => {\n const clamped = clamp(roundToStep(next, step, min), min, max)\n if (clamped === value) return\n if (!isControlled) setInternal(clamped)\n onChange?.(clamped)\n }\n\n const percent = ((value - min) / Math.max(1e-9, max - min)) * 100\n\n const pointerValue = (clientX: number, clientY: number): number => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n // In RTL the horizontal value axis runs right-to-left, so measure from the\n // right edge. Direction is read from the nearest dir-bearing ancestor.\n const rtl = getDirection(track.closest<HTMLElement>('[data-iris-dir],[dir]')) === 'rtl'\n const rel = isHorizontal\n ? (rtl ? rect.right - clientX : clientX - rect.left) / Math.max(1, rect.width)\n : 1 - (clientY - rect.top) / Math.max(1, rect.height)\n return min + Math.max(0, Math.min(1, rel)) * (max - min)\n }\n\n useDrag({\n handle: thumbRef,\n disabled,\n onStart: () => setDragging(true),\n onDrag: ({ x, y }) => setValue(pointerValue(x, y)),\n onEnd: () => setDragging(false),\n })\n\n const onTrackPointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return\n setValue(pointerValue(e.clientX, e.clientY))\n thumbRef.current?.focus()\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n let next = value\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n next = value - step\n break\n case 'ArrowRight':\n case 'ArrowUp':\n next = value + step\n break\n case 'Home':\n next = min\n break\n case 'End':\n next = max\n break\n case 'PageDown':\n next = value - step * 10\n break\n case 'PageUp':\n next = value + step * 10\n break\n default:\n return\n }\n e.preventDefault()\n setValue(next)\n }\n\n return (\n <div\n {...rest}\n data-iris-slider=\"\"\n data-iris-slider-orientation={orientation}\n data-disabled={disabled ? 'true' : undefined}\n data-state={dragging ? 'dragging' : 'idle'}\n style={{\n position: 'relative',\n width: isHorizontal ? '100%' : 'auto',\n height: isHorizontal ? 'auto' : '160px',\n padding: isHorizontal ? '14px 8px' : '8px 14px',\n ...style,\n }}\n >\n <div\n ref={trackRef}\n data-iris-slider-track=\"\"\n onPointerDown={onTrackPointerDown}\n style={{\n position: 'relative',\n width: isHorizontal ? '100%' : '4px',\n height: isHorizontal ? '4px' : '100%',\n background: 'var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n <div\n data-iris-slider-fill=\"\"\n style={{\n position: 'absolute',\n top: 0,\n // Logical inset so the fill anchors to the inline-start edge and\n // flips automatically under `dir=\"rtl\"`.\n insetInlineStart: 0,\n ...(isHorizontal\n ? { height: '100%', width: `${percent}%` }\n : { width: '100%', height: `${percent}%`, top: 'auto', bottom: 0 }),\n background: disabled ? 'var(--iris-muted)' : 'var(--iris-primary)',\n borderRadius: 'inherit',\n }}\n />\n <div\n ref={thumbRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label ?? t('slider.label')}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled ? 'true' : undefined}\n aria-orientation={orientation}\n data-iris-slider-thumb=\"\"\n onKeyDown={onKeyDown}\n style={{\n position: 'absolute',\n ...(isHorizontal\n ? { top: '50%', insetInlineStart: `${percent}%`, transform: 'translate(-50%, -50%)' }\n : { left: '50%', bottom: `${percent}%`, transform: 'translate(-50%, 50%)' }),\n width: 16,\n height: 16,\n borderRadius: '50%',\n background: 'var(--iris-background)',\n border: `2px solid ${disabled ? 'var(--iris-muted)' : 'var(--iris-primary)'}`,\n cursor: disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n outline: 'none',\n }}\n />\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { getDirection } from '@iris-ui-kit/theme'\nimport { useI18n } from '../../i18n'\nimport { useDrag } from '../drag/useDrag'\n\nexport type IrisRangeSliderValue = readonly [number, number]\n\nfunction decimalsOf(step: number): number {\n if (!Number.isFinite(step)) return 0\n const s = step.toString()\n const dot = s.indexOf('.')\n return dot < 0 ? 0 : s.length - dot - 1\n}\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\nfunction roundToStep(value: number, step: number, min: number): number {\n if (step <= 0) return value\n const places = decimalsOf(step)\n return Number((Math.round((value - min) / step) * step + min).toFixed(places))\n}\n\nexport interface IrisRangeSliderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n value?: IrisRangeSliderValue\n defaultValue?: IrisRangeSliderValue\n onChange?: (next: IrisRangeSliderValue) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n labelStart?: string\n labelEnd?: string\n}\n\n/**\n * Two-handle numeric range slider. Value is `[start, end]` with `start <= end`;\n * the two handles never cross.\n */\nexport function IrisRangeSlider({\n value: valueProp,\n defaultValue = [0, 100] as IrisRangeSliderValue,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n labelStart,\n labelEnd,\n style,\n ...rest\n}: IrisRangeSliderProps): React.ReactElement {\n const { t } = useI18n()\n const isControlled = valueProp !== undefined\n const [internal, setInternal] = React.useState<IrisRangeSliderValue>(defaultValue)\n const raw = isControlled ? (valueProp as IrisRangeSliderValue) : internal\n\n const startVal = clamp(roundToStep(raw[0] ?? min, step, min), min, max)\n const endVal = clamp(roundToStep(raw[1] ?? max, step, min), min, max)\n\n const trackRef = React.useRef<HTMLDivElement | null>(null)\n const startRef = React.useRef<HTMLDivElement | null>(null)\n const endRef = React.useRef<HTMLDivElement | null>(null)\n const [dragging, setDragging] = React.useState<'start' | 'end' | null>(null)\n\n const percent = (v: number): number => ((v - min) / Math.max(1e-9, max - min)) * 100\n\n const setRange = React.useCallback(\n (next: IrisRangeSliderValue) => {\n if (!isControlled) setInternal(next)\n onChange?.(next)\n },\n [isControlled, onChange],\n )\n\n const updateAt = (handle: 'start' | 'end', nextRaw: number) => {\n const clamped = clamp(roundToStep(nextRaw, step, min), min, max)\n let s = startVal\n let e = endVal\n if (handle === 'start') {\n s = Math.min(clamped, e)\n } else {\n e = Math.max(clamped, s)\n }\n if (s === startVal && e === endVal) return\n setRange([s, e] as IrisRangeSliderValue)\n }\n\n const pointerValue = (clientX: number): number => {\n const track = trackRef.current\n if (!track) return startVal\n const rect = track.getBoundingClientRect()\n // RTL: the value axis runs right-to-left, so measure from the right edge.\n const rtl = getDirection(track.closest<HTMLElement>('[data-iris-dir],[dir]')) === 'rtl'\n const rel = (rtl ? rect.right - clientX : clientX - rect.left) / Math.max(1, rect.width)\n return min + Math.max(0, Math.min(1, rel)) * (max - min)\n }\n\n useDrag({\n handle: startRef,\n disabled,\n onStart: () => setDragging('start'),\n onDrag: ({ x }) => updateAt('start', pointerValue(x)),\n onEnd: () => setDragging(null),\n })\n useDrag({\n handle: endRef,\n disabled,\n onStart: () => setDragging('end'),\n onDrag: ({ x }) => updateAt('end', pointerValue(x)),\n onEnd: () => setDragging(null),\n })\n\n const keyHandler = (handle: 'start' | 'end') => (e: React.KeyboardEvent) => {\n if (disabled) return\n const v = handle === 'start' ? startVal : endVal\n let next = v\n switch (e.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n next = v - step\n break\n case 'ArrowRight':\n case 'ArrowUp':\n next = v + step\n break\n case 'Home':\n next = handle === 'start' ? min : startVal\n break\n case 'End':\n next = handle === 'end' ? max : endVal\n break\n case 'PageDown':\n next = v - step * 10\n break\n case 'PageUp':\n next = v + step * 10\n break\n default:\n return\n }\n e.preventDefault()\n updateAt(handle, next)\n }\n\n const sPct = percent(startVal)\n const ePct = percent(endVal)\n\n return (\n <div\n {...rest}\n data-iris-range-slider=\"\"\n data-disabled={disabled ? '' : undefined}\n style={{\n position: 'relative',\n width: '100%',\n padding: '14px 8px',\n ...style,\n }}\n >\n <div\n ref={trackRef}\n data-iris-range-slider-track=\"\"\n style={{\n position: 'relative',\n height: 4,\n background: 'var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n }}\n >\n <div\n data-iris-range-slider-range=\"\"\n style={{\n position: 'absolute',\n top: 0,\n bottom: 0,\n // Logical inset so the range bar flips under `dir=\"rtl\"`.\n insetInlineStart: `${sPct}%`,\n width: `${ePct - sPct}%`,\n background: disabled ? 'var(--iris-muted)' : 'var(--iris-primary)',\n borderRadius: 'inherit',\n }}\n />\n <div\n ref={startRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={labelStart ?? t('rangeSlider.start')}\n aria-valuemin={min}\n aria-valuemax={endVal}\n aria-valuenow={startVal}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-range-slider-thumb=\"start\"\n data-dragging={dragging === 'start' ? 'true' : undefined}\n onKeyDown={keyHandler('start')}\n style={{\n position: 'absolute',\n top: '50%',\n insetInlineStart: `${sPct}%`,\n transform: 'translate(-50%, -50%)',\n width: 16,\n height: 16,\n borderRadius: '50%',\n background: 'var(--iris-background)',\n border: `2px solid ${disabled ? 'var(--iris-muted)' : 'var(--iris-primary)'}`,\n cursor: disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n outline: 'none',\n }}\n />\n <div\n ref={endRef}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={labelEnd ?? t('rangeSlider.end')}\n aria-valuemin={startVal}\n aria-valuemax={max}\n aria-valuenow={endVal}\n aria-disabled={disabled ? 'true' : undefined}\n data-iris-range-slider-thumb=\"end\"\n data-dragging={dragging === 'end' ? 'true' : undefined}\n onKeyDown={keyHandler('end')}\n style={{\n position: 'absolute',\n top: '50%',\n insetInlineStart: `${ePct}%`,\n transform: 'translate(-50%, -50%)',\n width: 16,\n height: 16,\n borderRadius: '50%',\n background: 'var(--iris-background)',\n border: `2px solid ${disabled ? 'var(--iris-muted)' : 'var(--iris-primary)'}`,\n cursor: disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n outline: 'none',\n }}\n />\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { clamp01, hexToRgba, hsvaToRgba, rgbToHex, rgbaToHsva, type IrisHsva } from './colorUtils'\nimport { useI18n } from '../../i18n'\n\nexport interface IrisColorPickerProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /** HEX string (`#rgb` / `#rrggbb` / `#rrggbbaa`). */\n value?: string\n defaultValue?: string\n onChange?: (next: string) => void\n /** Include the alpha strip + alpha input. Default false. */\n showAlpha?: boolean\n disabled?: boolean\n}\n\nconst inputStyle: React.CSSProperties = {\n width: 48,\n height: 24,\n padding: '2px 4px',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n fontSize: 12,\n fontFamily: 'inherit',\n textAlign: 'center',\n}\n\n/**\n * Color picker: SV pad + hue strip (+ optional alpha) with HEX + R/G/B(/A) inputs.\n * Binds a HEX string (`#rgb` / `#rrggbb` / `#rrggbbaa`) via `value` / `onChange`.\n *\n * Internal state is HSVA so hue survives grayscale RGB (black/white) without resetting —\n * mirrors the Vue adapter; the math (`colorUtils`) is shared verbatim, framework-agnostic.\n */\nexport function IrisColorPicker({\n value,\n defaultValue,\n onChange,\n showAlpha = false,\n disabled = false,\n style,\n ...rest\n}: IrisColorPickerProps): React.ReactElement {\n const { t } = useI18n()\n const initialHex = value ?? defaultValue ?? '#000000'\n const [hsva, setHsva] = React.useState<IrisHsva>(() =>\n rgbaToHsva(hexToRgba(initialHex) ?? { r: 0, g: 0, b: 0, a: 1 }),\n )\n const [hexDraft, setHexDraft] = React.useState<string | null>(null)\n\n const padRef = React.useRef<HTMLDivElement | null>(null)\n const hueRef = React.useRef<HTMLDivElement | null>(null)\n const alphaRef = React.useRef<HTMLDivElement | null>(null)\n\n // Re-sync internal HSVA when a controlled `value` changes from outside. Only\n // touch fields that meaningfully differ, and keep hue when the incoming color\n // is grayscale. Returning `prev` unchanged keeps the same reference, so React\n // skips the update and no render loop forms.\n React.useEffect(() => {\n if (value === undefined) return\n const parsed = hexToRgba(value)\n if (!parsed) return\n const next = rgbaToHsva(parsed)\n setHsva((prev) => {\n let changed = false\n const merged = { ...prev }\n if (Math.abs(next.s - prev.s) > 0.001) {\n merged.s = next.s\n changed = true\n }\n if (Math.abs(next.v - prev.v) > 0.001) {\n merged.v = next.v\n changed = true\n }\n if (Math.abs(next.a - prev.a) > 0.001) {\n merged.a = next.a\n changed = true\n }\n if (next.s > 0 && Math.abs(next.h - prev.h) > 0.5) {\n merged.h = next.h\n changed = true\n }\n return changed ? merged : prev\n })\n }, [value])\n\n const rgba = hsvaToRgba(hsva)\n const hex = rgbToHex(rgba)\n\n const commit = (nextHsva: IrisHsva) => {\n setHsva(nextHsva)\n onChange?.(rgbToHex(hsvaToRgba(nextHsva)))\n }\n const updateHsva = (patch: Partial<IrisHsva>) => commit({ ...hsva, ...patch })\n const setRgbChannel = (key: 'r' | 'g' | 'b', n: number) => {\n const next = { ...rgba, [key]: Math.max(0, Math.min(255, Math.round(n || 0))) }\n commit(rgbaToHsva(next))\n }\n const setHex = (raw: string) => {\n const parsed = hexToRgba(raw)\n if (!parsed) return\n commit(rgbaToHsva(parsed))\n }\n\n const fromPad = (e: React.PointerEvent) => {\n const el = padRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n const x = clamp01((e.clientX - rect.left) / Math.max(1, rect.width))\n const y = clamp01((e.clientY - rect.top) / Math.max(1, rect.height))\n updateHsva({ s: x, v: 1 - y })\n }\n const fromHue = (e: React.PointerEvent) => {\n const el = hueRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n const y = clamp01((e.clientY - rect.top) / Math.max(1, rect.height))\n updateHsva({ h: y * 360 })\n }\n const fromAlpha = (e: React.PointerEvent) => {\n const el = alphaRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n const y = clamp01((e.clientY - rect.top) / Math.max(1, rect.height))\n updateHsva({ a: y })\n }\n const down = (fn: (e: React.PointerEvent) => void) => (e: React.PointerEvent) => {\n if (disabled) return\n e.currentTarget.setPointerCapture?.(e.pointerId)\n fn(e)\n }\n const move = (fn: (e: React.PointerEvent) => void) => (e: React.PointerEvent) => {\n if (disabled || e.buttons !== 1) return\n fn(e)\n }\n\n const hueRgb = hsvaToRgba({ h: hsva.h, s: 1, v: 1, a: 1 })\n const cursorX = hsva.s * 100\n const cursorY = (1 - hsva.v) * 100\n const hueY = (hsva.h / 360) * 100\n const alphaY = (1 - hsva.a) * 100\n\n return (\n <div\n {...rest}\n data-iris-color-picker=\"\"\n data-disabled={disabled ? 'true' : undefined}\n style={{\n display: 'inline-flex',\n flexDirection: 'column',\n gap: 8,\n padding: 'var(--iris-padding-md, 12px)',\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n color: 'var(--iris-foreground)',\n width: 240,\n ...style,\n }}\n >\n <div style={{ display: 'flex', gap: 8 }}>\n <div\n ref={padRef}\n data-iris-color-picker-pad=\"\"\n onPointerDown={down(fromPad)}\n onPointerMove={move(fromPad)}\n style={{\n position: 'relative',\n flex: 1,\n height: 160,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, rgb(${hueRgb.r}, ${hueRgb.g}, ${hueRgb.b}))`,\n cursor: disabled ? 'not-allowed' : 'crosshair',\n touchAction: 'none',\n }}\n >\n <div\n data-iris-color-picker-pad-cursor=\"\"\n style={{\n position: 'absolute',\n left: `${cursorX}%`,\n top: `${cursorY}%`,\n width: 10,\n height: 10,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n border: '2px solid #fff',\n boxShadow: '0 0 0 1px rgba(0,0,0,.4)',\n pointerEvents: 'none',\n }}\n />\n </div>\n <div\n ref={hueRef}\n data-iris-color-picker-hue=\"\"\n onPointerDown={down(fromHue)}\n onPointerMove={move(fromHue)}\n style={{\n position: 'relative',\n width: 16,\n height: 160,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background:\n 'linear-gradient(to bottom, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)',\n cursor: disabled ? 'not-allowed' : 'crosshair',\n touchAction: 'none',\n }}\n >\n <div\n data-iris-color-picker-hue-cursor=\"\"\n style={{\n position: 'absolute',\n top: `${hueY}%`,\n left: -2,\n right: -2,\n height: 4,\n transform: 'translateY(-50%)',\n border: '2px solid #fff',\n borderRadius: 2,\n boxShadow: '0 0 0 1px rgba(0,0,0,.4)',\n pointerEvents: 'none',\n }}\n />\n </div>\n {showAlpha ? (\n <div\n ref={alphaRef}\n data-iris-color-picker-alpha=\"\"\n onPointerDown={down(fromAlpha)}\n onPointerMove={move(fromAlpha)}\n style={{\n position: 'relative',\n width: 16,\n height: 160,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n background: `linear-gradient(to bottom, rgba(${rgba.r},${rgba.g},${rgba.b},1) 0%, rgba(${rgba.r},${rgba.g},${rgba.b},0) 100%)`,\n cursor: disabled ? 'not-allowed' : 'crosshair',\n touchAction: 'none',\n }}\n >\n <div\n style={{\n position: 'absolute',\n top: `${alphaY}%`,\n left: -2,\n right: -2,\n height: 4,\n transform: 'translateY(-50%)',\n border: '2px solid #fff',\n borderRadius: 2,\n boxShadow: '0 0 0 1px rgba(0,0,0,.4)',\n pointerEvents: 'none',\n }}\n />\n </div>\n ) : null}\n </div>\n\n <div style={{ display: 'flex', gap: 6, alignItems: 'center', fontSize: 12 }}>\n <input\n data-iris-color-picker-hex=\"\"\n aria-label={t('colorPicker.hex')}\n disabled={disabled}\n value={hexDraft ?? hex}\n onChange={(e) => setHexDraft(e.target.value)}\n onBlur={() => {\n if (hexDraft != null) {\n setHex(hexDraft)\n setHexDraft(null)\n }\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && hexDraft != null) {\n setHex(hexDraft)\n setHexDraft(null)\n }\n }}\n style={{ ...inputStyle, width: 90 }}\n />\n <input\n type=\"number\"\n data-iris-color-picker-r=\"\"\n aria-label={t('colorPicker.red')}\n min={0}\n max={255}\n disabled={disabled}\n value={rgba.r}\n onChange={(e) => setRgbChannel('r', Number(e.target.value))}\n style={inputStyle}\n />\n <input\n type=\"number\"\n data-iris-color-picker-g=\"\"\n aria-label={t('colorPicker.green')}\n min={0}\n max={255}\n disabled={disabled}\n value={rgba.g}\n onChange={(e) => setRgbChannel('g', Number(e.target.value))}\n style={inputStyle}\n />\n <input\n type=\"number\"\n data-iris-color-picker-b=\"\"\n aria-label={t('colorPicker.blue')}\n min={0}\n max={255}\n disabled={disabled}\n value={rgba.b}\n onChange={(e) => setRgbChannel('b', Number(e.target.value))}\n style={inputStyle}\n />\n {showAlpha ? (\n <input\n type=\"number\"\n data-iris-color-picker-a=\"\"\n aria-label={t('colorPicker.alpha')}\n min={0}\n max={1}\n step={0.01}\n disabled={disabled}\n value={Number(hsva.a.toFixed(2))}\n onChange={(e) => updateHsva({ a: clamp01(Number(e.target.value)) })}\n style={inputStyle}\n />\n ) : null}\n </div>\n </div>\n )\n}\n","export interface IrisCommandItem {\n /** Stable unique id. */\n id: string\n /** Display label. */\n label: string\n /** Searchable extra terms (e.g. synonyms). */\n keywords?: string[]\n /** Optional grouping. Items with the same `group` cluster together. */\n group?: string\n /** Icon prefix (string emoji or node). */\n icon?: string\n /** Shortcut hint shown on the right of the row. */\n shortcut?: string\n disabled?: boolean\n /** Triggered on Enter / click. */\n action?: () => void\n}\n\n/**\n * Default fuzzy match: a query matches an item when each query character\n * appears in order in the item label or keywords. Case-insensitive.\n * Returns a score (lower = better) or null if no match.\n */\nexport function defaultFilter(query: string, item: IrisCommandItem): number | null {\n const q = query.trim().toLowerCase()\n if (!q) return 0\n const haystacks: string[] = [item.label, ...(item.keywords ?? [])].map((s) => s.toLowerCase())\n let best: number | null = null\n for (const h of haystacks) {\n let qi = 0\n let lastIdx = -1\n let score = 0\n for (let i = 0; i < h.length && qi < q.length; i += 1) {\n if (h[i] === q[qi]) {\n score += lastIdx === -1 ? i : i - lastIdx - 1\n lastIdx = i\n qi += 1\n }\n }\n if (qi === q.length) {\n if (best === null || score < best) best = score\n }\n }\n return best\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useI18n } from '../../i18n'\nimport { useBodyScrollLock } from '../../modal-utils/useBodyScrollLock'\nimport { useFocusTrap } from '../../modal-utils/useFocusTrap'\nimport { defaultFilter, type IrisCommandItem } from './types'\n\nexport interface IrisCommandPaletteProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onSelect'\n> {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n items: IrisCommandItem[]\n placeholder?: string\n /** Empty state text when no item matches. */\n emptyText?: string\n /** Custom filter; default is a tolerant subsequence/fuzzy match. */\n filter?: (query: string, item: IrisCommandItem) => number | null\n onSelect?: (item: IrisCommandItem) => void\n}\n\ntype Row = { kind: 'header'; label: string } | { kind: 'item'; item: IrisCommandItem }\n\n/**\n * Command palette: searchable, keyboard-driven action launcher. Built on the\n * modal-utils suite (scroll lock + focus trap). Pattern: open via shortcut\n * (consumer wires the listener), type to filter, ↑/↓ to navigate, Enter to\n * execute the focused item, Escape to dismiss.\n */\nexport function IrisCommandPalette({\n open = false,\n onOpenChange,\n items,\n placeholder,\n emptyText,\n filter = defaultFilter,\n onSelect,\n style,\n ...rest\n}: IrisCommandPaletteProps): React.ReactElement | null {\n const { t } = useI18n()\n const resolvedPlaceholder = placeholder ?? t('commandPalette.placeholder')\n const resolvedEmptyText = emptyText ?? t('commandPalette.empty')\n const [query, setQuery] = React.useState('')\n const [activeIndex, setActiveIndex] = React.useState(0)\n const surfaceRef = React.useRef<HTMLDivElement | null>(null)\n\n const matches = React.useMemo(() => {\n const result: { item: IrisCommandItem; score: number }[] = []\n for (const item of items) {\n const score = filter(query, item)\n if (score !== null) result.push({ item, score })\n }\n result.sort((a, b) => a.score - b.score)\n return result\n }, [items, query, filter])\n\n // Preserve sort order but inject a header row when the group changes.\n const groupedFlat = React.useMemo<Row[]>(() => {\n const out: Row[] = []\n let currentGroup: string | undefined\n for (const m of matches) {\n const g = m.item.group\n if (g !== currentGroup) {\n if (g) out.push({ kind: 'header', label: g })\n currentGroup = g\n }\n out.push({ kind: 'item', item: m.item })\n }\n return out\n }, [matches])\n\n // Enabled (navigable) item rows, paired with their index in groupedFlat.\n const itemRows = React.useMemo(() => {\n const out: { item: IrisCommandItem; flat: number }[] = []\n groupedFlat.forEach((row, i) => {\n if (row.kind === 'item' && !row.item.disabled) out.push({ item: row.item, flat: i })\n })\n return out\n }, [groupedFlat])\n\n // Reset filter + active row whenever (re)opened.\n React.useEffect(() => {\n if (!open) return\n setQuery('')\n setActiveIndex(0)\n }, [open])\n\n // Any query change resets the active row to the top match.\n React.useEffect(() => {\n setActiveIndex(0)\n }, [query])\n\n useBodyScrollLock(open)\n useFocusTrap({ container: surfaceRef, active: open })\n\n const close = () => onOpenChange?.(false)\n\n const runItem = (item: IrisCommandItem) => {\n if (item.disabled) return\n item.action?.()\n onSelect?.(item)\n close()\n }\n\n const move = (delta: 1 | -1) => {\n const total = itemRows.length\n if (total === 0) return\n setActiveIndex((prev) => (prev + delta + total) % total)\n }\n\n // Document-level key handling while open — robust for portaled content and\n // lets Escape work even if focus drifts. A ref carries the latest closures so\n // the listener (bound once per open) always sees current activeIndex/itemRows.\n const keyHandlerRef = React.useRef<(e: KeyboardEvent) => void>(() => {})\n keyHandlerRef.current = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n move(1)\n break\n case 'ArrowUp':\n event.preventDefault()\n move(-1)\n break\n case 'Enter': {\n event.preventDefault()\n const target = itemRows[activeIndex]\n if (target) runItem(target.item)\n break\n }\n case 'Escape':\n event.preventDefault()\n close()\n break\n }\n }\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => keyHandlerRef.current(e)\n document.addEventListener('keydown', onKey)\n return () => document.removeEventListener('keydown', onKey)\n }, [open])\n\n if (!open) return null\n if (typeof document === 'undefined') return null\n\n const node = (\n <div\n data-iris-command-palette-backdrop=\"\"\n onPointerDown={(e) => {\n if (e.target === e.currentTarget) close()\n }}\n style={{\n position: 'fixed',\n inset: 0,\n background: 'rgba(0,0,0,0.4)',\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'center',\n paddingTop: '15vh',\n zIndex: 1300,\n }}\n >\n <div\n {...rest}\n ref={surfaceRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={t('commandPalette.label')}\n data-iris-command-palette=\"\"\n tabIndex={-1}\n style={{\n width: 'min(640px, 92vw)',\n maxHeight: '70vh',\n display: 'flex',\n flexDirection: 'column',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-lg, 8px)',\n boxShadow: '0 20px 40px -12px rgba(0,0,0,0.25)',\n overflow: 'hidden',\n ...style,\n }}\n >\n <div style={{ padding: '12px 16px', borderBottom: '1px solid var(--iris-border)' }}>\n <input\n type=\"text\"\n value={query}\n placeholder={resolvedPlaceholder}\n data-iris-command-palette-input=\"\"\n aria-label={t('commandPalette.search')}\n onChange={(e) => setQuery(e.target.value)}\n style={{\n width: '100%',\n padding: '8px 10px',\n background: 'transparent',\n border: 'none',\n outline: 'none',\n fontSize: 16,\n fontFamily: 'inherit',\n color: 'inherit',\n }}\n />\n </div>\n <ul\n role=\"listbox\"\n aria-label={t('commandPalette.commands')}\n data-iris-command-palette-list=\"\"\n style={{ listStyle: 'none', margin: 0, padding: 4, overflow: 'auto', flex: 1 }}\n >\n {groupedFlat.length === 0 ? (\n <li\n data-iris-command-palette-empty=\"\"\n style={{ padding: 20, textAlign: 'center', color: 'var(--iris-muted)', fontSize: 13 }}\n >\n {resolvedEmptyText}\n </li>\n ) : (\n groupedFlat.map((row, i) => {\n if (row.kind === 'header') {\n return (\n <li\n key={`g-${row.label}-${i}`}\n data-iris-command-palette-group=\"\"\n style={{\n padding: '6px 12px',\n fontSize: 11,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n color: 'var(--iris-muted)',\n }}\n >\n {row.label}\n </li>\n )\n }\n const item = row.item\n const enabledIdx = itemRows.findIndex((r) => r.flat === i)\n const isActive = enabledIdx === activeIndex\n return (\n <li\n key={item.id}\n role=\"option\"\n aria-selected={isActive ? 'true' : 'false'}\n aria-disabled={item.disabled ? 'true' : undefined}\n data-iris-command-palette-item={item.id}\n data-state={isActive ? 'active' : item.disabled ? 'disabled' : 'idle'}\n onClick={() => {\n if (item.disabled) return\n setActiveIndex(enabledIdx)\n runItem(item)\n }}\n onMouseEnter={() => {\n if (!item.disabled) setActiveIndex(enabledIdx)\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: '8px 12px',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.5 : 1,\n background: isActive ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n fontSize: 14,\n }}\n >\n {item.icon ? (\n <span aria-hidden=\"true\" style={{ width: 20, textAlign: 'center' }}>\n {item.icon}\n </span>\n ) : null}\n <span style={{ flex: 1, minWidth: 0 }}>{item.label}</span>\n {item.shortcut ? (\n <span\n data-iris-command-palette-shortcut=\"\"\n style={{\n fontSize: 11,\n padding: '2px 6px',\n background: 'var(--iris-background)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n color: 'var(--iris-muted)',\n fontFamily: 'monospace',\n }}\n >\n {item.shortcut}\n </span>\n ) : null}\n </li>\n )\n })\n )}\n </ul>\n </div>\n </div>\n )\n\n return createPortal(node, document.body)\n}\n","import * as React from 'react'\nimport type { FormStore, FormValues } from '@iris-ui-kit/core'\n\n/**\n * Carries the active form's {@link FormStore} down to descendant fields so\n * `useField` can bind without prop drilling. The generic is erased at the\n * context boundary; `useField<T>` re-applies the value type at the call site.\n */\nexport const FormContext = React.createContext<FormStore<FormValues> | null>(null)\n\nexport function useFormContext(): FormStore<FormValues> {\n const ctx = React.useContext(FormContext)\n if (!ctx) {\n throw new Error('useField / useFormContext must be used within an <IrisForm>')\n }\n return ctx\n}\n","import * as React from 'react'\nimport type { FormStore, FormValues } from '@iris-ui-kit/core'\nimport { FormContext } from './context'\n\n/** Focus (and best-effort scroll to) the first errored named control in DOM order. */\nfunction focusFirstError(\n formEl: HTMLFormElement | null,\n errors: Record<string, string | undefined>,\n): void {\n if (!formEl) return\n const keys = Object.keys(errors)\n if (keys.length === 0) return\n const controls = formEl.querySelectorAll<HTMLElement>(\n 'input[name], select[name], textarea[name], [data-iris-field]',\n )\n for (const el of Array.from(controls)) {\n const name = el.getAttribute('name') ?? el.getAttribute('data-iris-field')\n if (name && keys.includes(name)) {\n el.focus()\n try {\n el.scrollIntoView({ block: 'center' })\n } catch {\n /* scrollIntoView is unavailable in jsdom — focus is the contract */\n }\n return\n }\n }\n}\n\nexport interface IrisFormProps<V extends FormValues> extends Omit<\n React.FormHTMLAttributes<HTMLFormElement>,\n 'onSubmit'\n> {\n /** The store from `useForm(...).form`. */\n form: FormStore<V>\n children?: React.ReactNode\n}\n\n/**\n * Provides the form store to descendant `useField` calls and wires the native\n * `<form>` submit to `handleSubmit` (with `preventDefault`).\n *\n * @example\n * const f = useForm({ initialValues: { email: '' }, onSubmit })\n * <IrisForm form={f.form}>\n * <IrisFormField label=\"Email\"><EmailField /></IrisFormField>\n * <IrisButton type=\"submit\" disabled={f.isSubmitting}>Save</IrisButton>\n * </IrisForm>\n */\nexport function IrisForm<V extends FormValues>({ form, children, ...rest }: IrisFormProps<V>) {\n const formRef = React.useRef<HTMLFormElement | null>(null)\n return (\n <FormContext.Provider value={form as unknown as FormStore<FormValues>}>\n <form\n {...rest}\n ref={formRef}\n data-iris-form=\"\"\n onSubmit={(event) => {\n event.preventDefault()\n // On a failed submit, move focus to the first errored field (a11y).\n void form\n .handleSubmit()\n .then(() => focusFirstError(formRef.current, form.getState().errors))\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n )\n}\n","import * as React from 'react'\nimport {\n createFormStore,\n type FormConfig,\n type FormState,\n type FormStore,\n type FormValues,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseFormReturn<V extends FormValues> extends FormState<V> {\n /** Underlying subscribable store. */\n store: FormStore<V>['store']\n /** The form store itself — pass to `<IrisForm form={...}>`. */\n form: FormStore<V>\n isValid: boolean\n setFieldValue: FormStore<V>['setFieldValue']\n setValues: FormStore<V>['setValues']\n setFieldTouched: FormStore<V>['setFieldTouched']\n setFieldError: FormStore<V>['setFieldError']\n setErrors: FormStore<V>['setErrors']\n validateField: FormStore<V>['validateField']\n validateForm: FormStore<V>['validateForm']\n handleSubmit: FormStore<V>['handleSubmit']\n reset: FormStore<V>['reset']\n}\n\n/**\n * React binding for the framework-agnostic form engine. Instantiates the store\n * once (like `useState`'s lazy initializer) and bridges it into React via\n * `useSyncExternalStore`. `initialValues` / `validators` / timing are captured\n * on first render; `onSubmit` and `validate` are read through a ref each render\n * so they always see the latest closures (no stale-callback footgun).\n */\nexport function useForm<V extends FormValues>(config: FormConfig<V>): UseFormReturn<V> {\n const latest = React.useRef(config)\n latest.current = config\n\n const ref = React.useRef<FormStore<V> | null>(null)\n if (ref.current === null) {\n ref.current = createFormStore<V>({\n initialValues: config.initialValues,\n validators: config.validators,\n validateOnChange: config.validateOnChange,\n validateOnBlur: config.validateOnBlur,\n validate: (values) => latest.current.validate?.(values) ?? {},\n onSubmit: (values) => latest.current.onSubmit?.(values),\n })\n }\n const form = ref.current\n const state = useStore(form.store)\n\n return {\n ...state,\n store: form.store,\n form,\n isValid: Object.keys(state.errors).length === 0,\n setFieldValue: form.setFieldValue,\n setValues: form.setValues,\n setFieldTouched: form.setFieldTouched,\n setFieldError: form.setFieldError,\n setErrors: form.setErrors,\n validateField: form.validateField,\n validateForm: form.validateForm,\n handleSubmit: form.handleSubmit,\n reset: form.reset,\n }\n}\n","import * as React from 'react'\nimport { formatPath, getByPath } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { useFormContext } from './context'\n\nexport interface FieldInputProps {\n name: string\n value: string\n onChange: (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void\n onBlur: () => void\n}\n\nexport interface UseFieldReturn<T> {\n name: string\n value: T\n error: string | undefined\n touched: boolean\n dirty: boolean\n setValue: (value: T) => void\n setTouched: (touched?: boolean) => void\n /**\n * Convenience bundle for a native text input / textarea. Spread onto\n * `IrisInput` / `IrisTextarea`. Non-text controls (checkbox, select,\n * number, custom) should wire `value` + `setValue` directly.\n */\n inputProps: FieldInputProps\n}\n\n/**\n * Binds a single field to the surrounding `<IrisForm>`. Re-renders only its\n * host component when the form store changes. `T` is the value type at the\n * call site (the context erases the form's generic).\n *\n * `name` may be a flat top-level key (`'email'`) OR a nested PATH\n * (`'address.city'`, `'items[2].sku'`) — the form keys its per-field state by\n * the canonical path, so a flat key is just a 1-segment path and stays 100%\n * back-compatible (v3 R19).\n */\nexport function useField<T = unknown>(name: string): UseFieldReturn<T> {\n const form = useFormContext()\n const state = useStore(form.store)\n // Canonical key for per-field state lookups (a flat key maps to itself).\n const key = formatPath(name)\n const value = getByPath(state.values, name) as T\n\n return {\n name,\n value,\n error: state.errors[key],\n touched: Boolean(state.touched[key]),\n dirty: Boolean(state.dirty[key]),\n setValue: (next) => form.setFieldValue(name, next as never),\n setTouched: (touched = true) => form.setFieldTouched(name, touched),\n inputProps: {\n name,\n value: (value ?? '') as string,\n onChange: (event) => form.setFieldValue(name, event.target.value as never),\n onBlur: () => form.setFieldTouched(name, true),\n },\n }\n}\n","import { useStore } from '../useStore'\nimport { useFormContext } from './context'\n\nexport interface UseFieldArrayReturn<T> {\n name: string\n /** Current array value (reactive). */\n fields: T[]\n /** Append an item. */\n push: (item: T) => void\n /** Remove the item at `index`. */\n remove: (index: number) => void\n /** Insert `item` at `index` (shifting the rest right). */\n insert: (index: number, item: T) => void\n /** Move the item from `from` to `to`. */\n move: (from: number, to: number) => void\n /** Replace the whole array. */\n replace: (items: T[]) => void\n}\n\n/**\n * Manage a dynamic array field (repeatable rows) inside an `<IrisForm>`. Mutators\n * delegate to the core {@link FormStore} array helpers (`arrayPush`/`arrayInsert`/\n * `arrayRemove`/`arrayMove`), which RE-KEY each element's error/touched/dirty/\n * validating state across the mutation — so a row's per-element validation state\n * FOLLOWS the row when rows are removed or reordered (removing `items[0]` shifts\n * `items[2]`'s error down to `items[1]`). `replace` swaps the whole array.\n *\n * ```tsx\n * const items = useFieldArray<{ sku: string }>('items')\n * items.fields.map((_, i) => <SkuRow key={i} index={i} />)\n * <button onClick={() => items.push({ sku: '' })}>Add</button>\n * ```\n */\nexport function useFieldArray<T = unknown>(name: string): UseFieldArrayReturn<T> {\n const form = useFormContext()\n const state = useStore(form.store)\n const fields = (Array.isArray(state.values[name]) ? state.values[name] : []) as T[]\n\n return {\n name,\n fields,\n push: (item) => form.arrayPush(name as never, item as never),\n remove: (index) => form.arrayRemove(name as never, index),\n insert: (index, item) => form.arrayInsert(name as never, index, item as never),\n move: (from, to) => form.arrayMove(name as never, from, to),\n replace: (items) => form.setFieldValue(name, items as never),\n }\n}\n","import * as React from 'react'\nimport {\n createAsyncResource,\n type AsyncResource,\n type AsyncResourceConfig,\n type AsyncState,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseAsyncResourceOptions<T> extends AsyncResourceConfig<T> {\n /** Run `load()` (no params) once on mount. Default `false`. */\n immediate?: boolean\n}\n\nexport interface UseAsyncResourceReturn<T, P extends unknown[]> extends AsyncState<T> {\n isLoading: boolean\n isError: boolean\n load: AsyncResource<T, P>['load']\n reload: AsyncResource<T, P>['reload']\n mutate: AsyncResource<T, P>['mutate']\n cancel: AsyncResource<T, P>['cancel']\n reset: AsyncResource<T, P>['reset']\n}\n\n/**\n * React binding for the framework-agnostic async resource. Instantiates the\n * resource once and bridges it via `useSyncExternalStore`. The fetcher is read\n * through a ref each render so it never goes stale, while seeding/immediacy are\n * captured on first render.\n *\n * ```tsx\n * const users = useAsyncResource(() => api.listUsers(), { immediate: true })\n * <IrisTable data={users.data ?? []} loading={users.isLoading} error={users.isError} />\n * ```\n */\nexport function useAsyncResource<T, P extends unknown[] = []>(\n fetcher: (...params: P) => Promise<T>,\n options: UseAsyncResourceOptions<T> = {},\n): UseAsyncResourceReturn<T, P> {\n const latest = React.useRef(fetcher)\n latest.current = fetcher\n\n const ref = React.useRef<AsyncResource<T, P> | null>(null)\n if (ref.current === null) {\n const config: AsyncResourceConfig<T> =\n 'initialData' in options ? { initialData: options.initialData } : {}\n ref.current = createAsyncResource<T, P>((...params) => latest.current(...params), config)\n }\n const resource = ref.current\n const state = useStore(resource.store)\n\n const immediate = React.useRef(options.immediate ?? false)\n React.useEffect(() => {\n if (immediate.current) void resource.load(...([] as unknown as P))\n // Abort any in-flight request on unmount so it can't write back into an\n // unmounted component (the token guard already prevents the state write;\n // this also cancels the underlying request when the fetcher honors signal).\n return () => resource.cancel()\n }, [resource])\n\n return {\n ...state,\n isLoading: state.status === 'loading',\n isError: state.status === 'error',\n load: resource.load,\n reload: resource.reload,\n mutate: resource.mutate,\n cancel: resource.cancel,\n reset: resource.reset,\n }\n}\n","import * as React from 'react'\nimport {\n createPaginatedResource,\n type PageQuery,\n type PageResult,\n type PaginatedResource,\n type PaginatedState,\n type PaginationMode,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UsePaginatedResourceOptions {\n pageSize?: number\n mode?: PaginationMode\n /** Load the first page on mount (page 1, or `loadMore` in infinite mode). */\n immediate?: boolean\n}\n\nexport interface UsePaginatedResourceReturn<T> extends PaginatedState<T> {\n isLoading: boolean\n isError: boolean\n hasMore: boolean\n goToPage: PaginatedResource<T>['goToPage']\n loadMore: PaginatedResource<T>['loadMore']\n refresh: PaginatedResource<T>['refresh']\n setPageSize: PaginatedResource<T>['setPageSize']\n}\n\n/**\n * React binding for the server-side pagination resource. Instantiates once and\n * bridges via `useSyncExternalStore`; the fetcher is read through a ref so it\n * never goes stale.\n *\n * ```tsx\n * const p = usePaginatedResource((q) => api.rows(q), { pageSize: 25, immediate: true })\n * <IrisTable data={p.items} loading={p.isLoading} error={p.isError} />\n * <IrisPagination total={p.total ?? 0} value={p.page} onValueChange={p.goToPage} />\n * ```\n */\nexport function usePaginatedResource<T>(\n fetcher: (query: PageQuery) => Promise<PageResult<T>>,\n options: UsePaginatedResourceOptions = {},\n): UsePaginatedResourceReturn<T> {\n const latest = React.useRef(fetcher)\n latest.current = fetcher\n\n const ref = React.useRef<PaginatedResource<T> | null>(null)\n if (ref.current === null) {\n ref.current = createPaginatedResource<T>((query) => latest.current(query), {\n pageSize: options.pageSize,\n mode: options.mode,\n })\n }\n const resource = ref.current\n const state = useStore(resource.store)\n\n const initial = React.useRef({ immediate: options.immediate ?? false, mode: options.mode })\n React.useEffect(() => {\n if (!initial.current.immediate) return\n void (initial.current.mode === 'infinite' ? resource.loadMore() : resource.goToPage(1))\n }, [resource])\n\n return {\n ...state,\n isLoading: state.status === 'loading',\n isError: state.status === 'error',\n // `state` drives the re-render; hasMore() then reads the fresh batch state.\n hasMore: resource.hasMore(),\n goToPage: resource.goToPage,\n loadMore: resource.loadMore,\n refresh: resource.refresh,\n setPageSize: resource.setPageSize,\n }\n}\n","import * as React from 'react'\nimport {\n createResourceController,\n type ResourceController,\n type ResourceControllerConfig,\n type ResourceState,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseResourceController<T> extends ResourceController<T> {\n /** The live resource state (rows, total, page, loading, selectedKeys). */\n state: ResourceState<T>\n}\n\n/**\n * React bridge over the framework-agnostic {@link createResourceController} (L4\n * CRUD list composite). Creates the controller once, subscribes to its store,\n * and returns the controller plus its live `state`. A thin bridge — all logic\n * lives in `@iris-ui-kit/core`.\n *\n * The controller is constructed with `immediate: false` so no fetch fires during\n * React's (side-effect-free) render phase; the initial load is kicked from an\n * effect instead, and the controller is torn down on unmount so an in-flight\n * request never writes back to an unmounted component.\n */\nexport function useResourceController<T>(\n config: ResourceControllerConfig<T>,\n): UseResourceController<T> {\n const ref = React.useRef<ResourceController<T> | null>(null)\n if (ref.current === null) ref.current = createResourceController({ ...config, immediate: false })\n const controller = ref.current\n const immediate = config.immediate !== false\n\n // Construct-once controller: load on mount (when immediate) + tear down on\n // unmount. `immediate` is captured at mount; it is not a reactive dependency.\n React.useEffect(() => {\n if (immediate) void controller.load()\n return () => controller.destroy()\n }, [controller, immediate])\n\n const state = useStore(controller.store)\n return React.useMemo(() => ({ ...controller, state }), [controller, state])\n}\n","import * as React from 'react'\nimport {\n createDataSource,\n type DataSourceController,\n type DataSourceConfig,\n type DataSourceState,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseDataSource<T> extends DataSourceController<T> {\n /**\n * The live data-source state: rows, total, page/pageSize, sort/multiSort,\n * filters/filterRules, loading/loadingMore, hasMore, selectedKeys, and the\n * per-row pendingRows/rowErrors.\n */\n state: DataSourceState<T>\n}\n\n/**\n * React bridge over the framework-agnostic {@link createDataSource} — the unified\n * data engine (paged/infinite + multi-sort + typed filters + selection +\n * per-row + optimistic mutate). Creates the controller once, subscribes to its\n * store, and returns the controller plus its live `state`. A thin bridge — all\n * logic lives in `@iris-ui-kit/core`.\n *\n * Constructed with `immediate: false` so no fetch fires during render; the\n * initial load is kicked from an effect and the controller is torn down on\n * unmount (aborting any in-flight request) so a late response never writes back.\n */\nexport function useDataSource<T>(config: DataSourceConfig<T>): UseDataSource<T> {\n const ref = React.useRef<DataSourceController<T> | null>(null)\n if (ref.current === null) ref.current = createDataSource({ ...config, immediate: false })\n const controller = ref.current\n const immediate = config.immediate !== false\n\n React.useEffect(() => {\n if (immediate) void controller.load()\n return () => controller.destroy()\n }, [controller, immediate])\n\n const state = useStore(controller.store)\n return React.useMemo(() => ({ ...controller, state }), [controller, state])\n}\n","import * as React from 'react'\nimport { createGroupedView, type GroupedViewConfig, type GroupedViewState } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseGroupedView<Row, K = string> {\n /** Subscribable store with the full grouped state. */\n store: ReturnType<typeof createGroupedView<Row, K>>['store']\n /** Set the source rows (re-computes groups and aggregates). */\n setRows: (\n rows: readonly Row[],\n columns?: readonly import('@iris-ui-kit/core').DataViewColumn<Row>[],\n ) => void\n /** Toggle a group's expanded state. */\n toggleGroup: (key: K) => void\n /** Expand a specific group. */\n expandGroup: (key: K) => void\n /** Collapse a specific group. */\n collapseGroup: (key: K) => void\n /** Expand all groups. */\n expandAll: () => void\n /** Collapse all groups. */\n collapseAll: () => void\n /** The live grouped-view state snapshot. */\n state: GroupedViewState<Row, K>\n /** Update config. */\n setConfig: (partial: Partial<GroupedViewConfig<Row, K>>) => void\n}\n\n/**\n * React bridge over the framework-agnostic {@link createGroupedView}.\n * Creates the controller once (ref), subscribes to its store, and returns\n * the controller plus its live `state`.\n */\nexport function useGroupedView<Row, K = string>(\n config: GroupedViewConfig<Row, K>,\n): UseGroupedView<Row, K> {\n const ref = React.useRef<ReturnType<typeof createGroupedView<Row, K>> | null>(null)\n if (ref.current === null) ref.current = createGroupedView<Row, K>(config)\n const controller = ref.current\n\n const storeState = useStore(controller.store)\n const state: GroupedViewState<Row, K> = storeState.state\n\n const setRows = React.useCallback(\n (\n rows: readonly Row[],\n columns?: readonly import('@iris-ui-kit/core').DataViewColumn<Row>[],\n ) => {\n controller.setRows(rows, columns)\n },\n [controller],\n )\n\n const toggleGroup = React.useCallback((key: K) => controller.toggleGroup(key), [controller])\n const expandGroup = React.useCallback((key: K) => controller.expandGroup(key), [controller])\n const collapseGroup = React.useCallback((key: K) => controller.collapseGroup(key), [controller])\n const expandAll = React.useCallback(() => controller.expandAll(), [controller])\n const collapseAll = React.useCallback(() => controller.collapseAll(), [controller])\n const setConfig = React.useCallback(\n (partial: Partial<GroupedViewConfig<Row, K>>) => controller.setConfig(partial),\n [controller],\n )\n\n return React.useMemo(\n () => ({\n store: controller.store,\n setRows,\n toggleGroup,\n expandGroup,\n collapseGroup,\n expandAll,\n collapseAll,\n state,\n setConfig,\n }),\n [\n controller,\n setRows,\n toggleGroup,\n expandGroup,\n collapseGroup,\n expandAll,\n collapseAll,\n state,\n setConfig,\n ],\n )\n}\n","import * as React from 'react'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport type IrisResizableHandle =\n | 'top'\n | 'right'\n | 'bottom'\n | 'left'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport interface IrisResizableSize {\n width: number\n height: number\n}\n\nconst ALL_HANDLES: IrisResizableHandle[] = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n]\n\nconst HANDLE_CURSORS: Record<IrisResizableHandle, string> = {\n top: 'ns-resize',\n right: 'ew-resize',\n bottom: 'ns-resize',\n left: 'ew-resize',\n 'top-left': 'nwse-resize',\n 'top-right': 'nesw-resize',\n 'bottom-left': 'nesw-resize',\n 'bottom-right': 'nwse-resize',\n}\n\nfunction handlePosition(handle: IrisResizableHandle): React.CSSProperties {\n const s: React.CSSProperties = { position: 'absolute' }\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n if (t) s.top = -4\n if (b) s.bottom = -4\n if (l) s.left = -4\n if (r) s.right = -4\n const isCorner = (t || b) && (l || r)\n if (isCorner) {\n s.width = 12\n s.height = 12\n } else if (t || b) {\n s.left = 0\n s.right = 0\n s.height = 8\n } else {\n s.top = 0\n s.bottom = 0\n s.width = 8\n }\n s.cursor = HANDLE_CURSORS[handle]\n return s\n}\n\ninterface HandleProps {\n handle: IrisResizableHandle\n disabled: boolean\n keepAspect: boolean\n sizeRef: React.MutableRefObject<IrisResizableSize>\n minWidth: number\n minHeight: number\n maxWidth: number\n maxHeight: number\n onUpdate: (next: IrisResizableSize) => void\n onResizeStart?: (start: IrisResizableSize) => void\n onResizeEnd?: (end: IrisResizableSize) => void\n}\n\nfunction Handle(props: HandleProps): React.ReactElement {\n const handleRef = React.useRef<HTMLDivElement | null>(null)\n const startRef = React.useRef<IrisResizableSize>({ width: 0, height: 0 })\n const aspectRef = React.useRef(1)\n\n useDrag({\n handle: handleRef,\n disabled: props.disabled,\n onStart: () => {\n startRef.current = { ...props.sizeRef.current }\n aspectRef.current = startRef.current.width / Math.max(1, startRef.current.height)\n props.onResizeStart?.(startRef.current)\n },\n onDrag: ({ dx, dy }) => {\n const { handle } = props\n const t = handle.includes('top')\n const b = handle.includes('bottom')\n const l = handle.includes('left')\n const r = handle.includes('right')\n let nextW = startRef.current.width\n let nextH = startRef.current.height\n if (r) nextW = startRef.current.width + dx\n if (l) nextW = startRef.current.width - dx\n if (b) nextH = startRef.current.height + dy\n if (t) nextH = startRef.current.height - dy\n if (props.keepAspect && (t || b) && (l || r)) {\n nextH = nextW / aspectRef.current\n }\n nextW = Math.max(props.minWidth, Math.min(props.maxWidth, nextW))\n nextH = Math.max(props.minHeight, Math.min(props.maxHeight, nextH))\n props.onUpdate({ width: nextW, height: nextH })\n },\n onEnd: () => {\n props.onResizeEnd?.(props.sizeRef.current)\n },\n })\n\n return (\n <div\n ref={handleRef}\n data-iris-resizable-handle={props.handle}\n style={{\n ...handlePosition(props.handle),\n touchAction: 'none',\n background: 'transparent',\n zIndex: 1,\n }}\n />\n )\n}\n\nexport interface IrisResizableProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue'\n> {\n /** Controlled size. */\n size?: IrisResizableSize\n defaultSize?: IrisResizableSize\n onSizeChange?: (next: IrisResizableSize) => void\n onResizeStart?: (start: IrisResizableSize) => void\n onResizeEnd?: (end: IrisResizableSize) => void\n handles?: IrisResizableHandle[]\n minWidth?: number\n minHeight?: number\n maxWidth?: number\n maxHeight?: number\n keepAspect?: boolean\n disabled?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Behavior wrapper: makes its child resizable via 8-direction handles. The\n * wrapper itself is `display: inline-block; position: relative` so the child\n * can be ANY element (no need for the child to know it's wrapped). Handles\n * are absolutely positioned over the wrapper's edges.\n *\n * Composable: stack with `IrisMovable` / `IrisHotkey` / `IrisClickOutside`\n * for richer interactions on the same wrapped UI.\n *\n * @example\n * <IrisResizable defaultSize={{ width: 400, height: 300 }}>\n * <IrisList items={items} />\n * </IrisResizable>\n */\nexport function IrisResizable({\n size: sizeProp,\n defaultSize = { width: 200, height: 200 },\n onSizeChange,\n onResizeStart,\n onResizeEnd,\n handles = ALL_HANDLES,\n minWidth = 40,\n minHeight = 40,\n maxWidth = Infinity,\n maxHeight = Infinity,\n keepAspect = false,\n disabled = false,\n style,\n children,\n ...rest\n}: IrisResizableProps): React.ReactElement {\n const isControlled = sizeProp !== undefined\n const [internal, setInternal] = React.useState(defaultSize)\n const size = isControlled ? (sizeProp as IrisResizableSize) : internal\n const sizeRef = React.useRef(size)\n sizeRef.current = size\n\n const setSize = React.useCallback(\n (next: IrisResizableSize) => {\n if (!isControlled) setInternal(next)\n onSizeChange?.(next)\n },\n [isControlled, onSizeChange],\n )\n\n return (\n <div\n {...rest}\n data-iris-resizable=\"\"\n data-state={disabled ? 'disabled' : 'idle'}\n style={{\n position: 'relative',\n display: 'inline-block',\n width: size.width,\n height: size.height,\n ...style,\n }}\n >\n {children}\n {handles.map((h) => (\n <Handle\n key={h}\n handle={h}\n disabled={disabled}\n keepAspect={keepAspect}\n sizeRef={sizeRef}\n minWidth={minWidth}\n minHeight={minHeight}\n maxWidth={maxWidth}\n maxHeight={maxHeight}\n onUpdate={setSize}\n onResizeStart={onResizeStart}\n onResizeEnd={onResizeEnd}\n />\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { useDrag } from '../primitives/drag/useDrag'\n\nexport interface IrisMovablePosition {\n x: number\n y: number\n}\n\nexport interface IrisMovableBounds {\n minX?: number\n maxX?: number\n minY?: number\n maxY?: number\n}\n\nexport interface IrisMovableProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange' | 'defaultValue' | 'onDragStart' | 'onDragEnd'\n> {\n position?: IrisMovablePosition\n defaultPosition?: IrisMovablePosition\n onPositionChange?: (next: IrisMovablePosition) => void\n onDragStart?: (start: IrisMovablePosition) => void\n onDragEnd?: (end: IrisMovablePosition) => void\n bounds?: IrisMovableBounds\n /** Restrict drag origination to a child element marked `data-iris-movable-handle`. */\n byHandle?: boolean\n disabled?: boolean\n children?: React.ReactNode\n}\n\n/**\n * Behavior wrapper: makes its child draggable. Position is `transform`-based\n * (no layout thrash). The whole wrapper drags by default; pass `byHandle`\n * and put `data-iris-movable-handle=\"\"` on a descendant (e.g. a title bar)\n * to restrict the drag origin.\n *\n * The wrapper renders `position: absolute` at its parent's top-left — wrap\n * inside a `position: relative` container for predictable layout.\n *\n * @example\n * <div style={{ position: 'relative', height: 500 }}>\n * <IrisMovable defaultPosition={{ x: 20, y: 20 }} byHandle>\n * <div>\n * <div data-iris-movable-handle>Drag me by this title bar</div>\n * <IrisList items={items} />\n * </div>\n * </IrisMovable>\n * </div>\n */\nexport function IrisMovable({\n position: positionProp,\n defaultPosition = { x: 0, y: 0 },\n onPositionChange,\n onDragStart,\n onDragEnd,\n bounds = {},\n byHandle = false,\n disabled = false,\n style,\n children,\n ...rest\n}: IrisMovableProps): React.ReactElement {\n const isControlled = positionProp !== undefined\n const [internal, setInternal] = React.useState<IrisMovablePosition>(defaultPosition)\n const position = isControlled ? (positionProp as IrisMovablePosition) : internal\n const positionRef = React.useRef(position)\n positionRef.current = position\n\n const rootRef = React.useRef<HTMLDivElement | null>(null)\n const handleRef = React.useRef<HTMLElement | null>(null)\n const [dragging, setDragging] = React.useState(false)\n const startRef = React.useRef<IrisMovablePosition>({ x: 0, y: 0 })\n\n // If byHandle, locate `[data-iris-movable-handle]` inside the wrapper.\n React.useEffect(() => {\n if (!byHandle) return\n handleRef.current =\n rootRef.current?.querySelector<HTMLElement>('[data-iris-movable-handle]') ?? null\n })\n\n const dragTargetRef = byHandle\n ? (handleRef as React.MutableRefObject<HTMLElement | null>)\n : (rootRef as React.MutableRefObject<HTMLElement | null>)\n\n const clamp = (p: IrisMovablePosition): IrisMovablePosition => ({\n x: Math.max(bounds.minX ?? -Infinity, Math.min(bounds.maxX ?? Infinity, p.x)),\n y: Math.max(bounds.minY ?? -Infinity, Math.min(bounds.maxY ?? Infinity, p.y)),\n })\n\n const setPosition = (next: IrisMovablePosition) => {\n if (!isControlled) setInternal(next)\n onPositionChange?.(next)\n }\n\n useDrag({\n handle: dragTargetRef,\n disabled,\n onStart: () => {\n startRef.current = positionRef.current\n setDragging(true)\n onDragStart?.(positionRef.current)\n },\n onDrag: ({ dx, dy }) => {\n setPosition(clamp({ x: startRef.current.x + dx, y: startRef.current.y + dy }))\n },\n onEnd: () => {\n setDragging(false)\n onDragEnd?.(positionRef.current)\n },\n })\n\n return (\n <div\n {...rest}\n ref={rootRef}\n data-iris-movable=\"\"\n data-state={dragging ? 'dragging' : 'idle'}\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n transform: `translate3d(${position.x}px, ${position.y}px, 0)`,\n cursor: byHandle ? 'default' : disabled ? 'not-allowed' : 'grab',\n touchAction: 'none',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisHotkeyProps {\n /**\n * Shortcut or list of shortcuts. Format: `'Escape'`, `'Enter'`, `'Mod+s'`,\n * `'Shift+/'`. `Mod` matches Ctrl on Win/Linux and Cmd on macOS.\n */\n shortcut: string | string[]\n onTrigger: (event: KeyboardEvent) => void\n /** Disable the binding (no-op if true). */\n disabled?: boolean\n /**\n * Allow the hotkey to fire even when focus is inside an input / textarea /\n * contentEditable element. Default false (most apps want hotkeys to skip\n * while typing).\n */\n allowInInputs?: boolean\n /** Scope: 'document' (default) or 'window'. */\n scope?: 'document' | 'window'\n children?: React.ReactNode\n}\n\nfunction parseShortcut(spec: string): {\n key: string\n shift: boolean\n alt: boolean\n ctrlOrMeta: boolean\n ctrl: boolean\n meta: boolean\n} {\n const parts = spec.split('+').map((p) => p.trim())\n const key = parts[parts.length - 1]!.toLowerCase()\n const mods = new Set(parts.slice(0, -1).map((p) => p.toLowerCase()))\n return {\n key,\n shift: mods.has('shift'),\n alt: mods.has('alt') || mods.has('option'),\n ctrl: mods.has('ctrl') || mods.has('control'),\n meta: mods.has('meta') || mods.has('cmd') || mods.has('command'),\n ctrlOrMeta: mods.has('mod'),\n }\n}\n\nfunction isInputTarget(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null\n if (!el) return false\n const tag = el.tagName\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (el.isContentEditable) return true\n return false\n}\n\nfunction matches(event: KeyboardEvent, parsed: ReturnType<typeof parseShortcut>): boolean {\n if (event.key.toLowerCase() !== parsed.key) return false\n if (parsed.shift !== event.shiftKey) return false\n if (parsed.alt !== event.altKey) return false\n if (parsed.ctrlOrMeta) {\n // Mod modifier matches ctrl OR meta — at least one must be down.\n if (!event.ctrlKey && !event.metaKey) return false\n } else {\n if (parsed.ctrl !== event.ctrlKey) return false\n if (parsed.meta !== event.metaKey) return false\n }\n return true\n}\n\n/**\n * Behavior wrapper: binds a global keyboard shortcut while children are\n * mounted. Renderless — returns children verbatim (no extra DOM).\n *\n * @example\n * <IrisHotkey shortcut=\"Escape\" onTrigger={close}>\n * <IrisDialog>…</IrisDialog>\n * </IrisHotkey>\n *\n * <IrisHotkey shortcut={['Mod+s', 'Mod+Shift+s']} onTrigger={save}>\n * <IrisForm>…</IrisForm>\n * </IrisHotkey>\n */\nexport function IrisHotkey({\n shortcut,\n onTrigger,\n disabled = false,\n allowInInputs = false,\n scope = 'document',\n children,\n}: IrisHotkeyProps): React.ReactElement {\n // Pin handler in a ref so re-renders don't re-bind the listener.\n const handlerRef = React.useRef(onTrigger)\n handlerRef.current = onTrigger\n const allowRef = React.useRef(allowInInputs)\n allowRef.current = allowInInputs\n\n React.useEffect(() => {\n if (disabled) return\n const specs = Array.isArray(shortcut) ? shortcut : [shortcut]\n const parsed = specs.map(parseShortcut)\n const target: EventTarget = scope === 'window' ? window : document\n\n const onKey = (event: Event) => {\n const e = event as KeyboardEvent\n if (!allowRef.current && isInputTarget(e.target)) return\n for (const p of parsed) {\n if (matches(e, p)) {\n handlerRef.current(e)\n return\n }\n }\n }\n target.addEventListener('keydown', onKey)\n return () => {\n target.removeEventListener('keydown', onKey)\n }\n }, [disabled, scope, ...(Array.isArray(shortcut) ? shortcut : [shortcut])])\n\n return <>{children}</>\n}\n","import * as React from 'react'\n\nexport interface IrisClickOutsideProps {\n onOutside: (event: PointerEvent) => void\n /** Disable detection (no-op if true). */\n disabled?: boolean\n /**\n * Additional refs whose elements are also treated as \"inside\" (clicks\n * against them won't fire `onOutside`). Useful for trigger buttons that\n * live outside the wrapper but should still keep it open.\n */\n ignore?: Array<React.RefObject<HTMLElement | null>>\n children?: React.ReactNode\n}\n\n/**\n * Behavior wrapper: fires `onOutside` when a pointerdown happens outside\n * the wrapped child tree. Renders a thin `<span style=\"display:contents\">`\n * to capture the child's bounding box without disrupting layout.\n *\n * @example\n * <IrisClickOutside onOutside={() => setOpen(false)}>\n * <IrisPopoverContent>…</IrisPopoverContent>\n * </IrisClickOutside>\n */\nexport function IrisClickOutside({\n onOutside,\n disabled = false,\n ignore = [],\n children,\n}: IrisClickOutsideProps): React.ReactElement {\n const wrapperRef = React.useRef<HTMLSpanElement | null>(null)\n // Pin callback in ref so re-renders don't churn the listener.\n const onOutsideRef = React.useRef(onOutside)\n onOutsideRef.current = onOutside\n\n React.useEffect(() => {\n if (disabled) return\n const handler = (event: PointerEvent) => {\n const target = event.target as Node | null\n if (!target) return\n const wrapper = wrapperRef.current\n // wrapper is display:contents, so itself doesn't contain anything;\n // walk via Element.contains on the first interactive ancestor.\n // Easiest: check against the bounding tree by re-querying children.\n if (wrapper) {\n let node: Node | null = target\n while (node) {\n if (node === wrapper) return\n // Check if `node` is one of the wrapper's *rendered* children. We\n // approximate by checking parent chain against wrapper.\n if ((node as HTMLElement).parentNode === wrapper) return\n node = node.parentNode\n }\n }\n // Also \"ignore\" listed refs.\n for (const ref of ignore) {\n const el = ref.current\n if (el && el.contains(target)) return\n }\n onOutsideRef.current(event)\n }\n document.addEventListener('pointerdown', handler)\n return () => {\n document.removeEventListener('pointerdown', handler)\n }\n }, [disabled, ignore])\n\n return (\n <span ref={wrapperRef} data-iris-click-outside=\"\" style={{ display: 'contents' }}>\n {children}\n </span>\n )\n}\n","/**\n * Behavior wrapper: makes a list of items sortable via drag-and-drop.\n * Uses `createSortable` from `@iris-ui-kit/core` for the drag-and-drop controller.\n *\n * @example\n * const [items, setItems] = React.useState(['A', 'B', 'C'])\n * <IrisSortable items={items} onReorder={setItems}>\n * {items.map((label) => <div key={label}>{label}</div>)}\n * </IrisSortable>\n */\nimport * as React from 'react'\nimport { createSortable, type SortableState } from '@iris-ui-kit/core'\n\nexport interface IrisSortableProps<T = string> {\n items: readonly T[]\n onReorder: (next: T[]) => void\n getKey?: (item: T, index: number) => string\n children?: React.ReactNode\n className?: string\n style?: React.CSSProperties\n disabled?: boolean\n}\n\nexport const SORTABLE_ITEM_ATTR = 'data-iris-sortable-item'\n\nexport function IrisSortable<T>({\n items,\n onReorder,\n getKey = (_item, index) => String(index),\n disabled = false,\n style,\n className,\n children,\n ...rest\n}: IrisSortableProps<T> &\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>): React.ReactElement {\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const ctrlRef = React.useRef<ReturnType<typeof createSortable> | null>(null)\n if (ctrlRef.current === null) ctrlRef.current = createSortable()\n const ctrl = ctrlRef.current\n\n const [state, setState] = React.useState<SortableState>({ activeId: null, overId: null })\n React.useEffect(() => ctrl.subscribe(setState), [ctrl])\n\n const dragging = state.activeId\n\n const indexByKey = (key: string): number =>\n Array.from(containerRef.current?.querySelectorAll(`[${SORTABLE_ITEM_ATTR}]`) ?? []).findIndex(\n (el) => el.getAttribute(SORTABLE_ITEM_ATTR) === key,\n )\n\n const onPointerDown = (e: React.PointerEvent<HTMLElement>): void => {\n if (disabled) return\n const target = (e.target as HTMLElement).closest(`[${SORTABLE_ITEM_ATTR}]`)\n if (!target) return\n const key = target.getAttribute(SORTABLE_ITEM_ATTR) ?? ''\n if (!key) return\n ctrl.press(key, e.clientX, e.clientY)\n }\n\n const onPointerMove = (e: React.PointerEvent<HTMLElement>): void => {\n if (!ctrl.getState().activeId) {\n // Pending press — promote if past threshold\n if (!ctrl.tryStart(e.clientX, e.clientY)) return\n }\n const els = containerRef.current?.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`)\n const rects = Array.from(els ?? []).map((el) => ({\n id: el.getAttribute(SORTABLE_ITEM_ATTR) ?? '',\n ...el.getBoundingClientRect(),\n }))\n ctrl.moveOver({ x: e.clientX, y: e.clientY }, rects)\n }\n\n const onPointerUp = (): void => {\n const result = ctrl.end()\n if (result.activeId && result.overId && result.activeId !== result.overId) {\n const from = indexByKey(result.activeId)\n const to = indexByKey(result.overId)\n if (from >= 0 && to >= 0 && from !== to) {\n const next = [...items]\n const [moved] = next.splice(from, 1)\n next.splice(to, 0, moved!)\n onReorder(next)\n }\n }\n }\n\n return (\n <div\n {...rest}\n ref={containerRef}\n data-iris-sortable=\"\"\n data-state={dragging ? 'dragging' : 'idle'}\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--iris-gap-sm, 4px)',\n opacity: disabled ? 0.6 : 1,\n userSelect: dragging ? 'none' : undefined,\n ...style,\n }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerLeave={onPointerUp}\n >\n {React.Children.map(children, (child, index) => {\n if (!React.isValidElement(child)) return child\n const key = getKey(items[index]!, index)\n const isDragging = key === dragging\n return (\n <div\n key={key}\n data-iris-sortable-item={key}\n data-iris-sortable-dragging={isDragging ? '' : undefined}\n style={{\n transition: isDragging ? 'none' : 'transform 150ms ease',\n opacity: isDragging ? 0.4 : 1,\n position: 'relative',\n zIndex: isDragging ? 100 : undefined,\n }}\n >\n {child}\n </div>\n )\n })}\n </div>\n )\n}\n","/**\n * Behavior wrapper: detects a press-and-hold gesture on the wrapped element.\n * Fires `onLongPress` when the pointer is held down for `holdDelay` ms.\n * Wraps children in a `display: contents` span so event bubbling works.\n *\n * Composable: stack with `IrisMovable` / `IrisResizable` / `IrisSortable` /\n * `IrisHotkey` for richer interactions.\n *\n * @example\n * <IrisLongPress holdDelay={500} onLongPress={() => setOpen(true)}>\n * <img src=\"thumbnail.jpg\" alt=\"Hold to preview\" />\n * </IrisLongPress>\n */\nimport * as React from 'react'\nimport { createLongPress } from '@iris-ui-kit/core'\n\nexport interface IrisLongPressProps {\n /** Time in ms the pointer must be held before `onLongPress` fires. */\n holdDelay?: number\n /** Called once when the hold reaches `holdDelay`. */\n onLongPress: () => void\n disabled?: boolean\n children?: React.ReactNode\n}\n\nexport function IrisLongPress({\n holdDelay = 500,\n onLongPress,\n disabled = false,\n children,\n}: IrisLongPressProps): React.ReactElement {\n const handlerRef = React.useRef(onLongPress)\n handlerRef.current = onLongPress\n\n const ctrl = React.useMemo(\n () =>\n createLongPress({\n holdDelay,\n onLongPress: () => handlerRef.current(),\n }),\n [holdDelay],\n )\n\n const onPointerDown_ = (_e: React.PointerEvent) => {\n if (disabled) return\n ctrl.press()\n }\n\n const onPointerUp_ = () => {\n ctrl.release()\n }\n\n const onPointerLeave_ = () => {\n ctrl.cancel()\n }\n\n return (\n <span\n data-iris-long-press=\"\"\n onPointerDown={onPointerDown_}\n onPointerUp={onPointerUp_}\n onPointerLeave={onPointerLeave_}\n style={{ display: 'contents' }}\n >\n {children}\n </span>\n )\n}\n","import * as React from 'react'\nimport { createUndoStack, type UndoStack, type UndoStackOptions } from '@iris-ui-kit/core/undo'\n\n/**\n * Reactive snapshot metadata for the UndoStack: convenience booleans that\n * update on every push/undo/redo/clear for use in UI bindings (enable/disable\n * undo/redo buttons).\n */\nexport interface UndoStackReactiveState {\n canUndo: boolean\n canRedo: boolean\n depth: number\n index: number\n}\n\n/**\n * React bridge over the framework-agnostic {@link createUndoStack}.\n * Creates the stack once (via a factory memo) and returns a stable controller\n * plus a reactive `state` that tracks `canUndo`/`canRedo`/`depth`/`index` for\n * easy UI binding. Re-renders only when those metadata change.\n *\n * The returned `push`/`undo`/`redo`/`clear` are stable refs that automatically\n * update the reactive state — no manual `setState` needed.\n *\n * @example\n * const { push, undo, redo, state } = useUndoStack({ initial: formValues })\n * // After mutation:\n * push(currentValues)\n * // In UI:\n * <button disabled={!state.canUndo} onClick={undo}>Undo</button>\n * <button disabled={!state.canRedo} onClick={redo}>Redo</button>\n */\nexport function useUndoStack<T>(options?: UndoStackOptions<T>): {\n /** Push a new snapshot onto the stack. Returns the stored value. */\n push: (snapshot: T) => T\n /** Undo: returns the previous snapshot, or undefined if nothing to undo. */\n undo: () => T | undefined\n /** Redo: returns the next snapshot, or undefined if nothing to redo. */\n redo: () => T | undefined\n /** Clear all history. */\n clear: () => void\n /** The raw undo stack (stable reference, same across renders). */\n stack: UndoStack<T>\n /** Reactive metadata: canUndo, canRedo, depth, index. */\n state: UndoStackReactiveState\n} {\n // Create the stack once via factory — stable across renders.\n const stackRef = React.useRef<UndoStack<T> | null>(null)\n if (stackRef.current === null) {\n stackRef.current = createUndoStack<T>(options)\n }\n const stack = stackRef.current\n\n // Key to trigger re-render when undo/redo/push state changes.\n // Incremented on every mutation so canUndo/canRedo/depth/index are\n // always fresh in the returned `state`.\n const [, setTick] = React.useState(0)\n const bump = React.useCallback(() => setTick((n) => n + 1), [])\n\n // Stable wrappers that bump the tick after each operation.\n const push = React.useCallback(\n (snapshot: T): T => {\n const result = stack.push(snapshot)\n bump()\n return result\n },\n [stack, bump],\n )\n\n const undo = React.useCallback((): T | undefined => {\n const result = stack.undo()\n if (result !== undefined) bump()\n return result\n }, [stack, bump])\n\n const redo = React.useCallback((): T | undefined => {\n const result = stack.redo()\n if (result !== undefined) bump()\n return result\n }, [stack, bump])\n\n const clear = React.useCallback(() => {\n stack.clear()\n bump()\n }, [stack, bump])\n\n // Compute reactive state. `canUndo`/`canRedo` are methods on the interface,\n // so we call them each render to get current values.\n const state: UndoStackReactiveState = {\n canUndo: stack.canUndo(),\n canRedo: stack.canRedo(),\n depth: stack.depth,\n index: stack.index,\n }\n\n return { push, undo, redo, clear, stack, state }\n}\n","import * as React from 'react'\n\nexport type IrisStackDirection = 'row' | 'column'\nexport type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch'\nexport type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around'\n\nconst ALIGN_MAP: Record<IrisStackAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n}\n\nconst JUSTIFY_MAP: Record<IrisStackJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: IrisStackDirection\n spacing?: string | number\n align?: IrisStackAlign\n justify?: IrisStackJustify\n wrap?: boolean\n /** When true, renders as `inline-flex`. */\n inline?: boolean\n}\n\n/**\n * Flex container with token-driven spacing. The lightest possible layout\n * primitive — saves hand-writing `display: flex` everywhere.\n */\nexport const IrisStack = React.forwardRef<HTMLDivElement, IrisStackProps>(function IrisStack(\n {\n direction = 'column',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-stack=\"\"\n data-iris-stack-direction={direction}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: toCssSpacing(spacing),\n alignItems: ALIGN_MAP[align],\n justifyContent: JUSTIFY_MAP[justify],\n flexWrap: wrap ? 'wrap' : 'nowrap',\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string\n\nconst WIDTH_MAP: Record<'sm' | 'md' | 'lg' | 'xl' | 'full', string> = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n full: '100%',\n}\n\nfunction resolveMaxWidth(input: IrisContainerMaxWidth): string {\n if (input === 'sm' || input === 'md' || input === 'lg' || input === 'xl' || input === 'full') {\n return WIDTH_MAP[input]\n }\n return input\n}\n\nfunction resolvePadding(input: string | number): string {\n if (typeof input === 'number') return `${input}px`\n if (input === 'sm' || input === 'md' || input === 'lg') {\n return `var(--iris-padding-${input})`\n }\n return input\n}\n\nexport interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n maxWidth?: IrisContainerMaxWidth\n padding?: string | number\n center?: boolean\n}\n\n/**\n * Centered max-width wrapper. Use to bound content width on large screens\n * without rewriting flex/grid plumbing.\n */\nexport const IrisContainer = React.forwardRef<HTMLDivElement, IrisContainerProps>(\n function IrisContainer(\n { maxWidth = 'lg', padding = 'md', center = true, style, children, ...rest },\n ref,\n ) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-container=\"\"\n data-iris-container-max-width={maxWidth}\n style={{\n width: '100%',\n maxWidth: resolveMaxWidth(maxWidth),\n padding: `0 ${resolvePadding(padding)}`,\n ...(center ? { marginInlineStart: 'auto', marginInlineEnd: 'auto' } : {}),\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisGridColumns =\n | number\n | 'auto-fit'\n | 'auto-fill'\n | string /* raw grid-template-columns value */\n\nfunction resolveColumns(columns: IrisGridColumns, minColWidth: string): string {\n if (typeof columns === 'number') return `repeat(${columns}, minmax(0, 1fr))`\n if (columns === 'auto-fit') return `repeat(auto-fit, minmax(${minColWidth}, 1fr))`\n if (columns === 'auto-fill') return `repeat(auto-fill, minmax(${minColWidth}, 1fr))`\n return columns\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: IrisGridColumns\n /** Min width per column for `auto-fit` / `auto-fill`. */\n minColWidth?: string\n rowGap?: string | number\n columnGap?: string | number\n /** Shorthand for both row + column gap. Overridden if rowGap/columnGap given. */\n gap?: string | number\n inline?: boolean\n}\n\n/**\n * Two-dimensional grid layout primitive. Three column modes:\n * - Fixed integer (`columns={3}`)\n * - Responsive auto-fit (`columns=\"auto-fit\"` + `minColWidth`)\n * - Raw CSS (`columns=\"100px 1fr 100px\"`)\n */\nexport const IrisGrid = React.forwardRef<HTMLDivElement, IrisGridProps>(function IrisGrid(\n {\n columns = 'auto-fit',\n minColWidth = '200px',\n rowGap,\n columnGap,\n gap = 'md',\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const colTemplate = resolveColumns(columns, minColWidth)\n const resolvedRowGap = rowGap !== undefined ? toCssSpacing(rowGap) : toCssSpacing(gap)\n const resolvedColGap = columnGap !== undefined ? toCssSpacing(columnGap) : toCssSpacing(gap)\n\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-grid=\"\"\n data-iris-grid-columns={String(columns)}\n style={{\n display: inline ? 'inline-grid' : 'grid',\n gridTemplateColumns: colTemplate,\n rowGap: resolvedRowGap,\n columnGap: resolvedColGap,\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport interface IrisSidebarLayoutSidebarState {\n collapsed: boolean\n setCollapsed: (next: boolean) => void\n}\n\nexport interface IrisSidebarLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Sidebar width when expanded (px or CSS length). */\n width?: number | string\n /** Sidebar width when collapsed. */\n collapsedWidth?: number | string\n side?: 'left' | 'right'\n /** Sidebar content. May be a render function that receives `{ collapsed, setCollapsed }`. */\n sidebar?: React.ReactNode | ((state: IrisSidebarLayoutSidebarState) => React.ReactNode)\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two-column layout with a collapsible sidebar. The sidebar is kept mounted\n * across collapses (only its width animates) so component state survives.\n */\nexport function IrisSidebarLayout({\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 240,\n collapsedWidth = 60,\n side = 'left',\n sidebar,\n style,\n children,\n ...rest\n}: IrisSidebarLayoutProps): React.ReactElement {\n const isControlled = collapsedProp !== undefined\n const [internal, setInternal] = React.useState(defaultCollapsed)\n const collapsed = isControlled ? Boolean(collapsedProp) : internal\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternal(next)\n onCollapsedChange?.(next)\n },\n [isControlled, onCollapsedChange],\n )\n\n const sidebarContent =\n typeof sidebar === 'function'\n ? (sidebar as (s: IrisSidebarLayoutSidebarState) => React.ReactNode)({\n collapsed,\n setCollapsed,\n })\n : sidebar\n\n const sidebarStyle: React.CSSProperties = {\n width: collapsed ? asLen(collapsedWidth) : asLen(width),\n flexShrink: 0,\n background: 'var(--iris-surface)',\n borderRight: side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n\n return (\n <div\n {...rest}\n data-iris-sidebar-layout=\"\"\n data-collapsed={collapsed ? '' : undefined}\n data-side={side}\n style={{\n display: 'flex',\n flexDirection: side === 'right' ? 'row-reverse' : 'row',\n width: '100%',\n height: '100%',\n minHeight: 0,\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <aside\n role=\"complementary\"\n data-iris-sidebar=\"\"\n data-collapsed={collapsed ? '' : undefined}\n style={sidebarStyle}\n >\n {sidebarContent}\n </aside>\n <div\n data-iris-sidebar-main=\"\"\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'auto',\n background: 'var(--iris-background)',\n }}\n >\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisHeaderLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight?: number | string\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight?: number | string\n /** Header sticks via `position: sticky` instead of static. Default true. */\n sticky?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two- (or three-) region vertical layout: a sticky header on top, a\n * scrollable main region, and an optional footer.\n */\nexport function IrisHeaderLayout({\n headerHeight = 'auto',\n footerHeight = 'auto',\n sticky = true,\n header,\n footer,\n style,\n children,\n ...rest\n}: IrisHeaderLayoutProps): React.ReactElement {\n return (\n <div\n {...rest}\n data-iris-header-layout=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: 0,\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n {header ? (\n <header\n role=\"banner\"\n data-iris-header=\"\"\n style={{\n flexShrink: 0,\n height: asLen(headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: sticky ? 'sticky' : 'static',\n top: 0,\n zIndex: 50,\n }}\n >\n {header}\n </header>\n ) : null}\n <main\n role=\"main\"\n data-iris-header-main=\"\"\n style={{ flex: 1, minHeight: 0, overflow: 'auto' }}\n >\n {children}\n </main>\n {footer ? (\n <footer\n role=\"contentinfo\"\n data-iris-footer=\"\"\n style={{\n flexShrink: 0,\n height: asLen(footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {footer}\n </footer>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: number\n gap?: number | string\n /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */\n minColWidth?: number | string\n}\n\n/**\n * 12-column responsive grid for dashboard composition. Each child controls\n * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.\n */\nexport function IrisDashboardGrid({\n columns = 12,\n gap = 16,\n minColWidth,\n style,\n children,\n ...rest\n}: IrisDashboardGridProps): React.ReactElement {\n const gapCss = typeof gap === 'number' ? `${gap}px` : gap\n const gridTemplateColumns = minColWidth\n ? `repeat(auto-fill, minmax(${\n typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth\n }, 1fr))`\n : `repeat(${columns}, 1fr)`\n\n return (\n <div\n {...rest}\n data-iris-dashboard-grid=\"\"\n style={{\n display: 'grid',\n gap: gapCss,\n gridTemplateColumns,\n width: '100%',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {\n colSpan?: number | 'full'\n rowSpan?: number\n /** Show the styled card surface (background + border). Default true. */\n surface?: boolean\n}\n\n/**\n * A single dashboard grid cell. `colSpan='full'` makes it fill the row.\n */\nexport function IrisDashboardCard({\n colSpan = 1,\n rowSpan = 1,\n surface = true,\n style,\n children,\n ...rest\n}: IrisDashboardCardProps): React.ReactElement {\n const gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\n const gridRow = rowSpan > 1 ? `span ${rowSpan}` : undefined\n\n return (\n <div\n {...rest}\n data-iris-dashboard-card=\"\"\n style={{\n gridColumn,\n gridRow,\n background: surface ? 'var(--iris-surface)' : 'transparent',\n border: surface ? '1px solid var(--iris-border)' : 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: surface ? 'var(--iris-padding-lg, 20px)' : 0,\n minWidth: 0,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","import * as React from 'react'\nimport {\n branchTrail,\n createExpansion,\n findNavNode,\n findNavPath,\n firstLeaf,\n isBranch,\n visibleNav,\n type ExpansionModel,\n type NavNode,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\n\nexport interface IrisNavMenuProps {\n /** Normalized nav tree. */\n items: NavNode[]\n /** Key of the active leaf. */\n activeKey?: string\n /** Controlled expanded branch keys. */\n expandedKeys?: string[]\n /** Initial expanded keys when uncontrolled (else the active trail expands). */\n defaultExpandedKeys?: string[]\n /** Icon-only rail (top-level items only). */\n collapsed?: boolean\n ariaLabel?: string\n onSelect?: (key: string, node: NavNode) => void\n onExpandedKeysChange?: (keys: string[]) => void\n}\n\n/**\n * Data-driven nested navigation menu — the sidebar nav of the admin shell.\n * Renders a normalized `NavNode[]` tree as an accordion of expandable branches\n * and selectable leaves; the active leaf and its ancestor branches are\n * highlighted, and the active branch trail auto-expands. Router-agnostic: takes\n * `activeKey`, calls `onSelect(key, node)`; the host owns navigation.\n *\n * `collapsed` switches to an icon-only rail (top-level only); a branch click\n * then jumps to its first leaf. React port of the Vue `IrisNavMenu`.\n */\nexport function IrisNavMenu({\n items,\n activeKey,\n expandedKeys,\n defaultExpandedKeys,\n collapsed = false,\n ariaLabel,\n onSelect,\n onExpandedKeysChange,\n}: IrisNavMenuProps): React.ReactElement {\n const { t } = useI18n()\n // Expand/collapse state lives in the core expansion model — the open-set algebra\n // and the active-trail union (`merge`) are byte-identical across every adapter, so\n // they live in @iris-ui-kit/core. This component keeps only the controlled/uncontrolled\n // wiring: uncontrolled reads + writes the model store; controlled mirrors the\n // `expandedKeys` prop and just notifies. `branchTrail` is the shared selector.\n const trailOf = React.useCallback(\n (key: string | undefined): string[] => (key ? branchTrail(items, key) : []),\n [items],\n )\n\n const isControlled = expandedKeys !== undefined\n const modelRef = React.useRef<ExpansionModel | null>(null)\n if (modelRef.current === null) {\n modelRef.current = createExpansion({\n mode: 'multiple',\n defaultExpanded: defaultExpandedKeys ?? trailOf(activeKey),\n })\n }\n const model = modelRef.current\n const internalExpanded = useStore(model.store)\n const expanded = isControlled ? (expandedKeys as string[]) : internalExpanded\n\n // Auto-open the active branch trail as the active leaf changes (uncontrolled).\n // `merge` unions without removals and is a no-op when the trail is already open,\n // and the model has no `onChange` wired, so this never emits onExpandedKeysChange.\n React.useEffect(() => {\n if (isControlled) return\n model.merge(trailOf(activeKey))\n }, [activeKey, isControlled, model, trailOf])\n\n const setExpanded = (keys: string[]): void => {\n if (!isControlled) model.set(keys)\n onExpandedKeysChange?.(keys)\n }\n const toggle = (key: string): void =>\n setExpanded(expanded.includes(key) ? expanded.filter((k) => k !== key) : [...expanded, key])\n\n const select = (node: NavNode): void => {\n if (node.disabled) return\n onSelect?.(node.key, node)\n }\n\n const [hovered, setHovered] = React.useState<string | null>(null)\n const tree = visibleNav(items)\n const activePath = activeKey ? findNavPath(items, activeKey).map((n) => n.key) : []\n\n const itemStyle = (opts: {\n depth: number\n active: boolean\n trail: boolean\n disabled: boolean\n hovered: boolean\n }): React.CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n width: '100%',\n boxSizing: 'border-box',\n border: 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: opts.active\n ? 'var(--iris-primary)'\n : opts.hovered && !opts.disabled\n ? 'var(--iris-surface)'\n : 'transparent',\n color: opts.active\n ? 'var(--iris-primary-foreground, #fff)'\n : opts.trail\n ? 'var(--iris-primary)'\n : 'var(--iris-foreground)',\n font: 'inherit',\n fontSize: 14,\n fontWeight: opts.active || opts.trail ? 600 : 400,\n textAlign: 'start',\n cursor: opts.disabled ? 'not-allowed' : 'pointer',\n opacity: opts.disabled ? 0.5 : 1,\n padding: collapsed ? 10 : `8px 10px 8px ${12 + opts.depth * 16}px`,\n justifyContent: collapsed ? 'center' : 'flex-start',\n })\n\n const iconNode = (node: NavNode, size = 18): React.ReactElement | null =>\n node.icon ? <IrisIcon name={node.icon} size={size} /> : null\n\n const badgeNode = (node: NavNode): React.ReactElement | null =>\n node.badge !== undefined && node.badge !== '' && !collapsed ? (\n <span\n data-iris-nav-badge=\"\"\n style={{\n marginInlineStart: 'auto',\n fontSize: 11,\n lineHeight: 1,\n padding: '2px 6px',\n borderRadius: 999,\n background: 'var(--iris-danger, #e5484d)',\n color: '#fff',\n }}\n >\n {String(node.badge)}\n </span>\n ) : null\n\n const hoverProps = (key: string) => ({\n onMouseEnter: () => setHovered(key),\n onMouseLeave: () => setHovered((h) => (h === key ? null : h)),\n })\n\n // Collapsed rail: top-level items only, icon + native tooltip; branch → first leaf.\n const renderCollapsed = (node: NavNode): React.ReactElement => {\n const branch = isBranch(node)\n const active = branch ? activePath.includes(node.key) : node.key === activeKey\n return (\n <button\n key={node.key}\n type=\"button\"\n data-iris-nav-item=\"\"\n data-key={node.key}\n data-active={active ? 'true' : undefined}\n data-branch={branch ? 'true' : undefined}\n disabled={node.disabled}\n title={node.title}\n aria-label={branch ? `${node.title} (section)` : node.title}\n aria-current={active && !branch ? 'page' : undefined}\n style={itemStyle({\n depth: 0,\n active,\n trail: false,\n disabled: !!node.disabled,\n hovered: hovered === node.key,\n })}\n {...hoverProps(node.key)}\n onClick={() => select(branch ? firstLeaf(node) : node)}\n >\n {iconNode(node, 20) ?? <span style={{ fontWeight: 700 }}>{node.title.charAt(0)}</span>}\n </button>\n )\n }\n\n const renderItem = (node: NavNode, depth: number): React.ReactElement => {\n const branch = isBranch(node)\n const open = expanded.includes(node.key)\n const active = node.key === activeKey\n const trail = branch && activePath.includes(node.key)\n\n const row = (\n <button\n type=\"button\"\n data-iris-nav-item=\"\"\n data-key={node.key}\n data-branch={branch ? 'true' : undefined}\n data-active={active ? 'true' : undefined}\n data-open={branch && open ? 'true' : undefined}\n data-depth={String(depth)}\n disabled={node.disabled}\n aria-expanded={branch ? (open ? 'true' : 'false') : undefined}\n aria-current={active ? 'page' : undefined}\n style={itemStyle({\n depth,\n active,\n trail,\n disabled: !!node.disabled,\n hovered: hovered === node.key,\n })}\n {...hoverProps(node.key)}\n onClick={() => (branch ? toggle(node.key) : select(node))}\n >\n {iconNode(node)}\n <span\n style={{\n flex: branch ? 1 : '0 1 auto',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {node.title}\n </span>\n {badgeNode(node)}\n {branch ? (\n <IrisIcon\n name={open ? 'chevron-down' : 'chevron-right'}\n size={16}\n style={{ marginInlineStart: node.badge ? 6 : 'auto', opacity: 0.6 }}\n />\n ) : null}\n </button>\n )\n\n if (!branch || !open) {\n return (\n <div key={node.key} data-iris-nav-group={branch ? '' : undefined}>\n {row}\n </div>\n )\n }\n return (\n <div key={node.key} data-iris-nav-group=\"\" data-open=\"true\">\n {row}\n <div data-iris-nav-children=\"\" role=\"group\">\n {(node.children ?? []).map((child) => renderItem(child, depth + 1))}\n </div>\n </div>\n )\n }\n\n // Arrow-key navigation over the visible items (Tab still works as a fallback).\n const onKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n const root = e.currentTarget\n const buttons = Array.from(root.querySelectorAll<HTMLElement>('[data-iris-nav-item]'))\n if (buttons.length === 0) return\n const idx = buttons.indexOf(document.activeElement as HTMLElement)\n const focusAt = (i: number): void => buttons[(i + buttons.length) % buttons.length]?.focus()\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n return focusAt(idx < 0 ? 0 : idx + 1)\n case 'ArrowUp':\n e.preventDefault()\n return focusAt(idx < 0 ? buttons.length - 1 : idx - 1)\n case 'Home':\n e.preventDefault()\n return void buttons[0]?.focus()\n case 'End':\n e.preventDefault()\n return void buttons[buttons.length - 1]?.focus()\n }\n\n if (collapsed || idx < 0) return\n const key = buttons[idx]?.getAttribute('data-key')\n if (!key) return\n const node = findNavNode(items, key)\n\n if (e.key === 'ArrowRight' && node && isBranch(node)) {\n e.preventDefault()\n if (!expanded.includes(key)) toggle(key)\n else focusAt(idx + 1)\n } else if (e.key === 'ArrowLeft') {\n if (node && isBranch(node) && expanded.includes(key)) {\n e.preventDefault()\n toggle(key)\n } else {\n const parentKey = findNavPath(items, key).at(-2)?.key\n if (parentKey) {\n e.preventDefault()\n buttons.find((b) => b.getAttribute('data-key') === parentKey)?.focus()\n }\n }\n }\n }\n\n return (\n <nav\n data-iris-nav-menu=\"\"\n data-collapsed={collapsed ? 'true' : undefined}\n aria-label={ariaLabel ?? t('admin.nav')}\n onKeyDown={onKeyDown}\n style={{ display: 'flex', flexDirection: 'column', gap: 2 }}\n >\n {collapsed\n ? tree.map((node) => renderCollapsed(node))\n : tree.map((node) => renderItem(node, 0))}\n </nav>\n )\n}\n","import * as React from 'react'\nimport type { NavNode } from '@iris-ui-kit/core'\nimport { IrisBreadcrumb } from '../primitives/breadcrumb/Breadcrumb'\nimport { IrisBreadcrumbItem } from '../primitives/breadcrumb/BreadcrumbItem'\nimport { IrisIcon } from '../primitives/icon/Icon'\n\nexport interface IrisAdminBreadcrumbProps {\n /** Root→current ancestor chain (typically `findNavPath(menus, activeKey)`). */\n trail: NavNode[]\n /** Show each node's icon before its title. */\n showIcon?: boolean\n /** Hide the breadcrumb when the trail has a single crumb. */\n hideSingle?: boolean\n separator?: string\n onSelect?: (key: string, node: NavNode) => void\n}\n\n/**\n * Breadcrumb trail for the admin header, driven by a `NavNode[]` ancestor chain.\n * The last crumb is the current page (auto-marked `aria-current` by\n * IrisBreadcrumb); earlier crumbs are clickable and call `onSelect(key, node)`.\n * React port of the Vue `IrisAdminBreadcrumb`.\n */\nexport function IrisAdminBreadcrumb({\n trail,\n showIcon = true,\n hideSingle = false,\n separator = '/',\n onSelect,\n}: IrisAdminBreadcrumbProps): React.ReactElement | null {\n if (trail.length === 0 || (hideSingle && trail.length === 1)) return null\n\n return (\n <IrisBreadcrumb separator={separator}>\n {trail.map((node, i) => {\n const last = i === trail.length - 1\n return (\n <IrisBreadcrumbItem\n key={node.key}\n data-iris-admin-crumb=\"\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n cursor: last ? 'default' : 'pointer',\n }}\n onClick={last ? undefined : () => onSelect?.(node.key, node)}\n >\n {showIcon && node.icon ? (\n <IrisIcon name={node.icon} size={14} style={{ marginInlineEnd: 4 }} />\n ) : null}\n <span>{node.title}</span>\n </IrisBreadcrumbItem>\n )\n })}\n </IrisBreadcrumb>\n )\n}\n","import { useStore } from '../useStore'\nimport type { TabsNav, TabItem } from '@iris-ui-kit/core'\n\nexport interface UseTabsNavReturn {\n tabs: TabItem[]\n activeKey: string | undefined\n /** Keep-alive include-set (composite cache keys of all open tabs). */\n cacheKeys: string[]\n open: TabsNav['open']\n activate: TabsNav['activate']\n close: TabsNav['close']\n closeOthers: TabsNav['closeOthers']\n closeAll: TabsNav['closeAll']\n closeLeft: TabsNav['closeLeft']\n closeRight: TabsNav['closeRight']\n refresh: TabsNav['refresh']\n setPinned: TabsNav['setPinned']\n cacheKey: TabsNav['cacheKey']\n}\n\n/**\n * React binding for a framework-agnostic {@link TabsNav} store. Pass a shared\n * `createTabsNav()` instance (the host owns it so the tab bar and the keep-alive\n * content read the same state) and get the reactive `tabs` / `activeKey` /\n * `cacheKeys` plus the store's mutators — bridged via `useStore`\n * (`useSyncExternalStore`), mirroring the Vue adapter.\n *\n * ```tsx\n * const nav = createTabsNav({ tabs: [{ key: 'home', title: 'Home', pinned: true }] })\n * const { tabs, activeKey, open, close } = useTabsNav(nav)\n * ```\n */\nexport function useTabsNav(nav: TabsNav): UseTabsNavReturn {\n const state = useStore(nav.store)\n return {\n tabs: state.tabs,\n activeKey: state.activeKey,\n cacheKeys: state.tabs.map((t) => nav.cacheKey(t.key)),\n open: nav.open,\n activate: nav.activate,\n close: nav.close,\n closeOthers: nav.closeOthers,\n closeAll: nav.closeAll,\n closeLeft: nav.closeLeft,\n closeRight: nav.closeRight,\n refresh: nav.refresh,\n setPinned: nav.setPinned,\n cacheKey: nav.cacheKey,\n }\n}\n","import * as React from 'react'\nimport { isClosable, type TabsNav, type TabItem } from '@iris-ui-kit/core'\nimport { useTabsNav } from './useTabsNav'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { IrisDropdown } from '../primitives/dropdown/Dropdown'\nimport { IrisDropdownTrigger } from '../primitives/dropdown/DropdownTrigger'\nimport { IrisDropdownMenu } from '../primitives/dropdown/DropdownMenu'\nimport { IrisDropdownItem, IrisDropdownSeparator } from '../primitives/dropdown/DropdownItem'\nimport { useI18n } from '../i18n'\n\nexport interface IrisAdminTabsProps {\n /** Shared tabs store (from `createTabsNav`). */\n nav: TabsNav\n onChange?: (key: string) => void\n onClose?: (key: string) => void\n onRefresh?: (key: string) => void\n}\n\n/**\n * Vben-style multi-tab bar over a shared {@link TabsNav} store. Each open page is\n * a closable chip; clicking activates (`onChange`), the × closes, and a trailing\n * actions dropdown runs Refresh / Close / Close-others / Close-all on the active\n * tab. The store owns the tab list + active key; the host watches it to sync\n * routing + keep-alive.\n *\n * Keyboard (WAI-ARIA tablist, automatic activation): ←/→ move + activate, Home/\n * End jump, Delete/Backspace closes the focused tab. Roving tabindex keeps a\n * single tab stop. React port of the Vue `IrisAdminTabs`.\n */\nexport function IrisAdminTabs({\n nav,\n onChange,\n onClose,\n onRefresh,\n}: IrisAdminTabsProps): React.ReactElement {\n const t = useTabsNav(nav)\n const { t: translate } = useI18n()\n const tablistRef = React.useRef<HTMLDivElement>(null)\n const pendingFocus = React.useRef<string | null>(null)\n\n React.useEffect(() => {\n if (!pendingFocus.current) return\n const key = pendingFocus.current\n pendingFocus.current = null\n tablistRef.current?.querySelectorAll<HTMLElement>('[data-iris-tab-label]').forEach((el) => {\n if (el.getAttribute('data-key') === key) el.focus()\n })\n })\n\n const activate = (key: string): void => {\n nav.activate(key)\n onChange?.(key)\n }\n const close = (key: string): void => {\n nav.close(key)\n onClose?.(key)\n }\n const refresh = (key: string): void => {\n nav.refresh(key)\n onRefresh?.(key)\n }\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n const tabs = t.tabs\n const idx = tabs.findIndex((x) => x.key === t.activeKey)\n if (idx < 0 || tabs.length === 0) return\n\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const cur = tabs[idx]\n if (cur && isClosable(cur)) {\n e.preventDefault()\n close(cur.key)\n pendingFocus.current = nav.getState().activeKey ?? null\n }\n return\n }\n\n let target = -1\n if (e.key === 'ArrowRight') target = (idx + 1) % tabs.length\n else if (e.key === 'ArrowLeft') target = (idx - 1 + tabs.length) % tabs.length\n else if (e.key === 'Home') target = 0\n else if (e.key === 'End') target = tabs.length - 1\n else return\n\n e.preventDefault()\n const key = tabs[target]?.key\n if (!key) return\n activate(key)\n pendingFocus.current = key\n }\n\n const chip = (tab: TabItem): React.ReactElement => {\n const active = tab.key === t.activeKey\n const closable = isClosable(tab)\n\n const label = (\n <button\n type=\"button\"\n role=\"tab\"\n data-iris-tab-label=\"\"\n data-key={tab.key}\n aria-selected={active ? 'true' : 'false'}\n aria-current={active ? 'page' : undefined}\n tabIndex={active ? 0 : -1}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n fontSize: 13,\n cursor: 'pointer',\n padding: 0,\n }}\n onClick={() => activate(tab.key)}\n >\n {tab.icon ? <IrisIcon name={tab.icon} size={14} /> : null}\n <span style={{ whiteSpace: 'nowrap' }}>{tab.title}</span>\n </button>\n )\n\n const closeBtn = closable ? (\n <button\n type=\"button\"\n tabIndex={-1}\n data-iris-tab-close=\"\"\n aria-label={translate('admin.closeTab', { title: tab.title })}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 16,\n height: 16,\n border: 'none',\n borderRadius: 4,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: 0,\n opacity: 0.6,\n }}\n onClick={(e) => {\n e.stopPropagation()\n close(tab.key)\n }}\n >\n <IrisIcon name=\"x\" size={12} />\n </button>\n ) : tab.pinned ? (\n <IrisIcon name=\"check-circle\" size={12} style={{ opacity: 0.5 }} />\n ) : null\n\n return (\n <div\n key={tab.key}\n data-iris-tab=\"\"\n data-active={active ? 'true' : undefined}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '5px 8px 5px 10px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${active ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n background: active ? 'var(--iris-primary)' : 'var(--iris-surface)',\n color: active ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n flex: '0 0 auto',\n }}\n >\n {label}\n {closeBtn}\n </div>\n )\n }\n\n const activeKey = t.activeKey\n return (\n <div\n data-iris-admin-tabs=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 10px',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n }}\n >\n <div\n ref={tablistRef}\n data-iris-tabs-scroll=\"\"\n role=\"tablist\"\n aria-label={translate('admin.openPages')}\n onKeyDown={onKeyDown}\n style={{ display: 'flex', alignItems: 'center', gap: 6, overflowX: 'auto', flex: 1 }}\n >\n {t.tabs.map((tab) => chip(tab))}\n </div>\n\n <IrisDropdown>\n <IrisDropdownTrigger\n aria-label={translate('admin.tabActions')}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n }}\n >\n <IrisIcon name=\"more-horizontal\" size={16} />\n </IrisDropdownTrigger>\n <IrisDropdownMenu>\n {activeKey ? (\n <>\n <IrisDropdownItem onSelect={() => refresh(activeKey)}>\n {translate('admin.refresh')}\n </IrisDropdownItem>\n <IrisDropdownItem onSelect={() => close(activeKey)}>\n {translate('admin.close')}\n </IrisDropdownItem>\n <IrisDropdownSeparator />\n <IrisDropdownItem onSelect={() => nav.closeOthers(activeKey)}>\n {translate('admin.closeOthers')}\n </IrisDropdownItem>\n <IrisDropdownItem onSelect={() => nav.closeAll()}>\n {translate('admin.closeAll')}\n </IrisDropdownItem>\n </>\n ) : (\n <IrisDropdownItem disabled>No active tab</IrisDropdownItem>\n )}\n </IrisDropdownMenu>\n </IrisDropdown>\n </div>\n )\n}\n","import * as React from 'react'\nimport {\n createAdminShell,\n findNavPath,\n type AdminShell,\n type NavNode,\n type TabsNav,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseAdminShellConfig {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: NavNode[]\n /** Active page key (controlled); undefined = uncontrolled. */\n activeKey?: string\n defaultActiveKey?: string\n onActiveKeyChange?: (key: string) => void\n /** Fired whenever a nav node / tab becomes active, with the resolved leaf node. */\n onSelect?: (key: string, node: NavNode) => void\n /** Optional shared tabs store; the shell opens/reconciles tabs through it. */\n tabs?: TabsNav\n}\n\nexport interface UseAdminShellReturn {\n /** Current active leaf key ('' when none). */\n activeKey: string\n /** Select a nav node: a branch redirects to its first leaf, opens its tab. */\n navigate: (node: NavNode) => void\n /** Reconcile when the active TAB changed (e.g. a close picked a neighbor). */\n syncFromTab: (key: string) => void\n /** Ancestor→node breadcrumb trail of the active key. */\n breadcrumb: NavNode[]\n}\n\n/**\n * React binding for the framework-agnostic {@link createAdminShell} controller —\n * the menu→tab→active-key wiring that every AdminLayout used to re-implement\n * byte-for-byte. The hook owns the controlled/uncontrolled `activeKey`\n * reconciliation (idiomatic to React) and delegates navigate / syncFromTab /\n * branch-resolution / breadcrumb to the shared core shell.\n *\n * Controlled mode renders from the prop directly (no flicker); an effect keeps\n * the shell's guard-base synced to the prop so the active-change callback fires\n * with the same semantics as before.\n */\nexport function useAdminShell(config: UseAdminShellConfig): UseAdminShellReturn {\n const { menus, activeKey, defaultActiveKey, onActiveKeyChange, onSelect, tabs } = config\n const activeControlled = activeKey !== undefined\n\n // Latest callbacks read without re-creating the (stable) shell instance.\n const latest = React.useRef({ onActiveKeyChange, onSelect })\n latest.current = { onActiveKeyChange, onSelect }\n\n const shellRef = React.useRef<AdminShell | null>(null)\n if (shellRef.current === null) {\n shellRef.current = createAdminShell({\n menus,\n defaultActiveKey: activeKey ?? defaultActiveKey,\n tabs,\n onActiveChange: (key, node) => {\n latest.current.onActiveKeyChange?.(key)\n if (node) latest.current.onSelect?.(key, node)\n },\n })\n }\n const shell = shellRef.current\n const state = useStore(shell.store)\n\n // Keep the shell reconciling against the live menu tree.\n React.useEffect(() => {\n shell.setMenus(menus)\n }, [shell, menus])\n\n // Controlled: keep the shell's guard-base aligned with the prop (silent — no\n // callback), so navigate fires the active-change callback exactly as before\n // even when a controlled parent does not write the new key back.\n React.useEffect(() => {\n if (activeControlled && shell.getActiveKey() !== (activeKey ?? null)) {\n shell.store.setState({ activeKey: activeKey ?? null })\n }\n })\n\n const current = activeControlled ? (activeKey ?? '') : (state.activeKey ?? '')\n\n return {\n activeKey: current,\n navigate: shell.navigate,\n syncFromTab: shell.syncFromTab,\n breadcrumb: current ? findNavPath(menus, current) : [],\n }\n}\n","import * as React from 'react'\nimport type { NavNode, TabsNav } from '@iris-ui-kit/core'\nimport { IrisSidebarLayout } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { useStore } from '../useStore'\nimport { IrisNavMenu } from './NavMenu'\nimport { IrisAdminBreadcrumb } from './AdminBreadcrumb'\nimport { IrisAdminTabs } from './AdminTabs'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { useAdminShell } from './useAdminShell'\n\nexport type IrisAdminLayoutMode = 'sidebar' | 'full-content'\n\ntype LogoRenderer = React.ReactNode | ((state: { collapsed: boolean }) => React.ReactNode)\ntype ContentRenderer = React.ReactNode | ((state: { activeKey: string }) => React.ReactNode)\n\nexport interface IrisAdminLayoutProps {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: NavNode[]\n /** Active page key (controlled). */\n activeKey?: string\n defaultActiveKey?: string\n onActiveKeyChange?: (key: string) => void\n /** Sidebar collapsed (controlled); undefined = uncontrolled. */\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n mode?: IrisAdminLayoutMode\n appTitle?: string\n /** Optional shared tabs store; when present the tab bar is rendered. */\n tabs?: TabsNav\n showBreadcrumb?: boolean\n sidebarWidth?: number | string\n collapsedWidth?: number | string\n /** Brand region; render-prop receives `{ collapsed }`. */\n logo?: LogoRenderer\n /** Header end region (theme switch, user menu, …). */\n toolbar?: React.ReactNode\n footer?: React.ReactNode\n onSelect?: (key: string, node: NavNode) => void\n /** Page content; render-prop receives `{ activeKey }`. */\n children?: ContentRenderer\n}\n\n/** Mirrors tab-store activation (incl. close→neighbor) into the layout's active key. */\nfunction TabsSync({\n nav,\n activeKey,\n onActivate,\n}: {\n nav: TabsNav\n activeKey: string\n onActivate: (key: string) => void\n}): null {\n const state = useStore(nav.store)\n React.useEffect(() => {\n if (state.activeKey && state.activeKey !== activeKey) onActivate(state.activeKey)\n }, [state.activeKey, activeKey, onActivate])\n return null\n}\n\n/**\n * The CMS / admin shell — a Vben-style, router-agnostic, data-driven layout that\n * composes IrisSidebarLayout + IrisHeaderLayout with the admin nav pieces. One\n * `menus` tree drives the collapsible sidebar nav, the header breadcrumb, and\n * (when a `tabs` store is passed) the multi-tab bar; `activeKey` is the current\n * page. The host owns routing: react to `onSelect` / `onActiveKeyChange` and\n * render the page via the children render-prop (wrap it in keep-alive keyed by\n * `tabs.cacheKey` for Vben-style tab caching).\n *\n * Modes: `sidebar` (default) and `full-content` (chrome hidden). React port of\n * the Vue `IrisAdminLayout`.\n */\nexport function IrisAdminLayout({\n menus,\n activeKey,\n defaultActiveKey,\n onActiveKeyChange,\n collapsed,\n defaultCollapsed = false,\n onCollapsedChange,\n mode = 'sidebar',\n appTitle = 'Iris Admin',\n tabs,\n showBreadcrumb = true,\n sidebarWidth = 240,\n collapsedWidth = 64,\n logo,\n toolbar,\n footer,\n onSelect,\n children,\n}: IrisAdminLayoutProps): React.ReactElement {\n const { t } = useI18n()\n const {\n activeKey: currentActive,\n navigate,\n syncFromTab,\n breadcrumb: trail,\n } = useAdminShell({ menus, activeKey, defaultActiveKey, onActiveKeyChange, onSelect, tabs })\n\n const collapseControlled = collapsed !== undefined\n const [internalCollapsed, setInternalCollapsed] = React.useState(defaultCollapsed)\n const currentCollapsed = collapseControlled ? (collapsed as boolean) : internalCollapsed\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!collapseControlled) setInternalCollapsed(next)\n onCollapsedChange?.(next)\n },\n [collapseControlled, onCollapsedChange],\n )\n\n const handleSelect = (_key: string, node: NavNode): void => navigate(node)\n\n const renderContent = (): React.ReactNode =>\n typeof children === 'function' ? children({ activeKey: currentActive }) : children\n\n if (mode === 'full-content') {\n return (\n <div data-iris-admin-layout=\"\" data-mode=\"full-content\" style={{ height: '100%' }}>\n {renderContent()}\n </div>\n )\n }\n\n const defaultLogo = (state: { collapsed: boolean }): React.ReactElement => (\n <div\n data-iris-admin-logo=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n height: 52,\n padding: '0 16px',\n color: 'var(--iris-foreground)',\n fontWeight: 700,\n fontSize: 16,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n flexShrink: 0,\n }}\n >\n <IrisIcon name=\"menu\" size={18} />\n </span>\n {state.collapsed ? null : <span>{appTitle}</span>}\n </div>\n )\n const renderLogo = (state: { collapsed: boolean }): React.ReactNode =>\n typeof logo === 'function' ? logo(state) : (logo ?? defaultLogo(state))\n\n const collapseToggle = (\n <button\n type=\"button\"\n data-iris-admin-collapse=\"\"\n aria-label={currentCollapsed ? t('admin.expandSidebar') : t('admin.collapseSidebar')}\n aria-pressed={currentCollapsed ? 'true' : 'false'}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n border: 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n onClick={() => setCollapsed(!currentCollapsed)}\n >\n <IrisIcon name={currentCollapsed ? 'chevron-right' : 'menu'} size={18} />\n </button>\n )\n\n const headerBar = (\n <div\n data-iris-admin-headerbar=\"\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n height: 52,\n padding: '0 16px',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n }}\n >\n {collapseToggle}\n {showBreadcrumb ? <IrisAdminBreadcrumb trail={trail} onSelect={handleSelect} /> : null}\n <div style={{ flex: 1 }} />\n {toolbar ? (\n <div data-iris-admin-toolbar=\"\" style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n {toolbar}\n </div>\n ) : null}\n </div>\n )\n\n return (\n <IrisSidebarLayout\n data-iris-admin-layout=\"\"\n data-mode=\"sidebar\"\n collapsed={currentCollapsed}\n onCollapsedChange={setCollapsed}\n width={sidebarWidth}\n collapsedWidth={collapsedWidth}\n style={{ height: '100vh' }}\n sidebar={(state) => (\n <div\n data-iris-admin-sidebar=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n borderInlineEnd: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {renderLogo(state)}\n <div style={{ flex: 1, overflowY: 'auto', overflowX: 'hidden', padding: 8 }}>\n <IrisNavMenu\n items={menus}\n activeKey={currentActive}\n collapsed={state.collapsed}\n onSelect={handleSelect}\n />\n </div>\n </div>\n )}\n >\n {tabs ? <TabsSync nav={tabs} activeKey={currentActive} onActivate={syncFromTab} /> : null}\n <IrisHeaderLayout\n sticky\n header={\n <div data-iris-admin-header=\"\">\n {headerBar}\n {tabs ? <IrisAdminTabs nav={tabs} /> : null}\n </div>\n }\n footer={footer}\n >\n <div data-iris-admin-content=\"\" style={{ padding: 16 }}>\n {renderContent()}\n </div>\n </IrisHeaderLayout>\n </IrisSidebarLayout>\n )\n}\n","import * as React from 'react'\nimport { IrisStack } from '../layouts/Stack'\nimport { IrisContainer } from '../layouts/Container'\nimport { IrisInput } from '../primitives/input/Input'\nimport { IrisPasswordInput } from '../primitives/password-input/PasswordInput'\nimport { IrisCheckbox } from '../primitives/checkbox/Checkbox'\nimport { IrisButton } from '../primitives/button/Button'\nimport { IrisFormField } from '../primitives/form-field/FormField'\nimport { IrisAlert } from '../primitives/alert/Alert'\nimport { IrisDivider } from '../primitives/divider/Divider'\n\nexport interface IrisLoginSubmitPayload {\n email: string\n password: string\n remember: boolean\n}\n\nexport interface IrisLoginTemplateProps {\n title?: string\n description?: string\n showRemember?: boolean\n error?: string\n submitLabel?: string\n loading?: boolean\n /** Custom header replaces title/description block. */\n header?: React.ReactNode\n /** Slot for \"Forgot password?\" link (rendered next to Remember checkbox). */\n forgot?: React.ReactNode\n /** Content rendered below the form (separated by a divider). */\n footer?: React.ReactNode\n onSubmit?: (payload: IrisLoginSubmitPayload) => void\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Layer 4 system skeleton: centered login page composed from Iris primitives.\n */\nexport function IrisLoginTemplate({\n title = 'Sign in',\n description = '',\n showRemember = true,\n error = '',\n submitLabel = 'Sign in',\n loading = false,\n header,\n forgot,\n footer,\n onSubmit,\n style,\n className,\n}: IrisLoginTemplateProps): React.ReactElement {\n const [email, setEmail] = React.useState('')\n const [password, setPassword] = React.useState('')\n const [remember, setRemember] = React.useState(false)\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onSubmit?.({ email, password, remember })\n }\n\n return (\n <div\n data-iris-login-template=\"\"\n className={className}\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n padding: 24,\n ...style,\n }}\n >\n <IrisContainer maxWidth=\"420px\" padding={0}>\n <form\n onSubmit={handleSubmit}\n data-iris-login-form=\"\"\n style={{\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-lg, 8px)',\n padding: 32,\n boxShadow: '0 6px 20px -8px rgba(0, 0, 0, 0.16)',\n }}\n >\n <IrisStack spacing=\"lg\">\n {header ?? (\n <div style={{ textAlign: 'center' }}>\n <h1 style={{ margin: '0 0 4px 0', fontSize: 22, fontWeight: 700 }}>{title}</h1>\n {description ? (\n <p\n style={{\n margin: 0,\n color: 'var(--iris-muted)',\n fontSize: 14,\n }}\n >\n {description}\n </p>\n ) : null}\n </div>\n )}\n {error ? <IrisAlert tone=\"danger\" title={error} /> : null}\n <IrisFormField label=\"Email\" required>\n <IrisInput\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n disabled={loading}\n autoComplete=\"email\"\n />\n </IrisFormField>\n <IrisFormField label=\"Password\" required>\n <IrisPasswordInput\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter your password\"\n disabled={loading}\n autoComplete=\"current-password\"\n />\n </IrisFormField>\n {showRemember ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <IrisCheckbox\n checked={remember}\n onChange={(next) => setRemember(next)}\n disabled={loading}\n >\n Remember me\n </IrisCheckbox>\n {forgot ?? null}\n </div>\n ) : null}\n <IrisButton type=\"submit\" variant=\"solid\" loading={loading} style={{ width: '100%' }}>\n {submitLabel}\n </IrisButton>\n {footer ? (\n <div>\n <IrisDivider spacing=\"md\" label=\"or\" />\n {footer}\n </div>\n ) : null}\n </IrisStack>\n </form>\n </IrisContainer>\n </div>\n )\n}\n","import * as React from 'react'\nimport { IrisSidebarLayout, type IrisSidebarLayoutSidebarState } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisDashboardGrid, IrisDashboardCard } from '../layouts/DashboardGrid'\nimport { IrisStack } from '../layouts/Stack'\n\nexport interface IrisDashboardNavItem {\n id: string\n label: string\n icon?: React.ReactNode\n}\n\nexport interface IrisDashboardCardSpec {\n id: string\n title: string\n colSpan?: number | 'full'\n rowSpan?: number\n body?: React.ReactNode\n}\n\nexport interface IrisDashboardTemplateProps {\n title?: string\n sidebarTitle?: string\n nav?: IrisDashboardNavItem[]\n activeId?: string\n onActiveIdChange?: (id: string) => void\n cards?: IrisDashboardCardSpec[]\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Custom header content (replaces default title). */\n header?: React.ReactNode\n /** Custom sidebar header. Receives `{ collapsed, setCollapsed }`. */\n sidebarHeader?: (state: IrisSidebarLayoutSidebarState) => React.ReactNode\n /** Custom main body content (replaces default grid). */\n children?: React.ReactNode\n /** Per-card body override, keyed by card id. */\n cardSlots?: Record<string, React.ReactNode>\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Layer 4 system skeleton: 3-region dashboard shell — sidebar + header +\n * main grid. Built from `IrisSidebarLayout` + `IrisHeaderLayout` +\n * `IrisDashboardGrid`.\n */\nexport function IrisDashboardTemplate({\n title = 'Dashboard',\n sidebarTitle = '',\n nav = [],\n activeId = '',\n onActiveIdChange,\n cards = [],\n defaultCollapsed = false,\n onCollapsedChange,\n header,\n sidebarHeader,\n children,\n cardSlots,\n style,\n className,\n}: IrisDashboardTemplateProps): React.ReactElement {\n const [collapsed, setCollapsed] = React.useState(defaultCollapsed)\n\n const handleCollapsed = (next: boolean) => {\n setCollapsed(next)\n onCollapsedChange?.(next)\n }\n\n return (\n <div\n data-iris-dashboard-template=\"\"\n className={className}\n style={{\n width: '100%',\n height: '100vh',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <IrisSidebarLayout\n collapsed={collapsed}\n onCollapsedChange={handleCollapsed}\n width={240}\n collapsedWidth={64}\n sidebar={(state) => (\n <IrisStack spacing=\"sm\" style={{ padding: 12 }}>\n {sidebarHeader ? (\n sidebarHeader(state)\n ) : sidebarTitle ? (\n <div\n style={{\n padding: '8px 12px',\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n }}\n >\n {sidebarTitle}\n </div>\n ) : null}\n <nav aria-label=\"Primary\" style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {nav.map((item) => {\n const isActive = item.id === activeId\n return (\n <button\n key={item.id}\n type=\"button\"\n data-iris-dashboard-nav-item={item.id}\n data-iris-dashboard-nav-active={isActive ? 'true' : undefined}\n onClick={() => onActiveIdChange?.(item.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: '8px 12px',\n background: isActive ? 'var(--iris-primary)' : 'transparent',\n color: isActive\n ? 'var(--iris-primary-foreground, #fff)'\n : 'var(--iris-foreground)',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n fontSize: 14,\n fontFamily: 'inherit',\n textAlign: 'start',\n outline: 'none',\n }}\n >\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n style={{ width: 16, display: 'inline-flex', justifyContent: 'center' }}\n >\n {item.icon}\n </span>\n ) : null}\n <span\n style={{\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </span>\n </button>\n )\n })}\n </nav>\n </IrisStack>\n )}\n >\n <IrisHeaderLayout\n header={\n header ?? (\n <div style={{ padding: '12px 20px', fontSize: 16, fontWeight: 600 }}>{title}</div>\n )\n }\n >\n {children ?? (\n <div style={{ padding: 20 }}>\n <IrisDashboardGrid columns={12} gap={16}>\n {cards.map((card) => (\n <IrisDashboardCard\n key={card.id}\n colSpan={card.colSpan ?? 4}\n rowSpan={card.rowSpan ?? 1}\n data-iris-dashboard-card-id={card.id}\n >\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: 14,\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n }}\n >\n {card.title}\n </h3>\n {cardSlots?.[card.id] !== undefined ? (\n cardSlots[card.id]\n ) : card.body ? (\n <div style={{ fontSize: 13, color: 'var(--iris-muted)' }}>{card.body}</div>\n ) : null}\n </IrisDashboardCard>\n ))}\n </IrisDashboardGrid>\n </div>\n )}\n </IrisHeaderLayout>\n </IrisSidebarLayout>\n </div>\n )\n}\n","import { createContext } from 'react'\n\n/**\n * What `<IrisProvider>` hands to descendants: the eagerly-built plugin stores\n * (keyed by registration name) plus the set of installed plugin names.\n *\n * Named `*Context` so the manifest's discover step EXCLUDES it — only\n * `Iris*`-prefixed, non-`Context` exports become manifest components.\n */\nexport interface PluginStoreContextValue {\n stores: Map<string, unknown>\n installed: Set<string>\n}\n\nexport const PluginStoreContext = createContext<PluginStoreContextValue | null>(null)\n","import { useContext, useEffect, useMemo, useRef, type ReactNode } from 'react'\nimport { runPlugins, type IrisPlugin } from '@iris-ui-kit/core'\nimport {\n applyCssVars,\n type ApplyCssVarsResult,\n type Direction,\n type ThemeStore,\n} from '@iris-ui-kit/theme'\nimport type { SkinEngine } from '@iris-ui-kit/skins'\nimport { ThemeProvider } from '../theme'\nimport { SkinProvider } from '../skins'\nimport { IrisI18nProvider } from '../i18n'\nimport { PluginStoreContext } from './context'\n\nexport interface IrisProviderProps {\n /** Active theme store. When passed, wraps children in `<ThemeProvider>`. */\n theme?: ThemeStore\n /** Active skin engine. When passed, wraps children in `<SkinProvider>`. */\n skin?: SkinEngine\n /** Writing direction; forwarded to `<ThemeProvider>`. Default `'ltr'`. */\n dir?: Direction\n /** BCP-47 locale; selects which plugin message slice is applied. */\n locale?: string\n /** User message overrides — these WIN over plugin-registered messages. */\n messages?: Record<string, string>\n /** Plugins to install. Their tokens / messages / stores are collected once. */\n plugins?: IrisPlugin[]\n /** Element to receive plugin tokens. Defaults to `document.documentElement`. */\n target?: HTMLElement | null\n children?: ReactNode\n}\n\n/**\n * The single unified entry point. Runs the plugins, applies their additive\n * token layer over the active theme, merges their messages under the user's,\n * and exposes their stores via `PluginStoreContext`. The existing\n * Theme / Skin / I18n providers are composed in around it.\n *\n * **Zero business logic** — `runPlugins` / `applyCssVars` do the work; this is a\n * thin React bridge. Client boundary (tsup prepends `'use client'`).\n */\nexport function IrisProvider({\n theme,\n skin,\n dir = 'ltr',\n locale,\n messages,\n plugins,\n target = null,\n children,\n}: IrisProviderProps) {\n const collected = useMemo(() => runPlugins(plugins ?? []), [plugins])\n const appliedRef = useRef<ApplyCssVarsResult | null>(null)\n\n useEffect(() => {\n if (typeof document === 'undefined') return\n const el = target ?? document.documentElement\n appliedRef.current?.revert()\n appliedRef.current = applyCssVars(Object.entries(collected.tokens), el)\n return () => {\n appliedRef.current?.revert()\n appliedRef.current = null\n }\n }, [collected, target])\n\n // Run plugin teardowns when the plugins set is swapped (a new `collected`) or\n // on unmount, so eager stores / subscriptions / timers don't leak.\n useEffect(() => () => collected.teardown(), [collected])\n\n const value = useMemo(\n () => ({ stores: collected.stores, installed: new Set((plugins ?? []).map((p) => p.name)) }),\n [collected, plugins],\n )\n\n // Plugin messages are the BASE; user-supplied messages win.\n const merged = { ...collected.messages[locale ?? 'en-US'], ...(messages ?? {}) }\n\n // Order (innermost-out): Theme → Skin → I18n → PluginContext → children.\n let tree: ReactNode = (\n <IrisI18nProvider locale={locale} messages={merged}>\n <PluginStoreContext.Provider value={value}>{children}</PluginStoreContext.Provider>\n </IrisI18nProvider>\n )\n if (skin) {\n tree = (\n <SkinProvider engine={skin} target={target}>\n {tree}\n </SkinProvider>\n )\n }\n if (theme) {\n tree = (\n <ThemeProvider store={theme} dir={dir} target={target}>\n {tree}\n </ThemeProvider>\n )\n }\n return tree\n}\n\n/** Whether a plugin with `name` is installed under the nearest `<IrisProvider>`. */\nexport function usePlugin(name: string): boolean {\n return useContext(PluginStoreContext)?.installed.has(name) ?? false\n}\n\n// Tracks ambiguous store key warnings to avoid spamming the console.\n// Hoisted BEFORE overload signatures (TS requires overloads immediately before implementation).\nconst warnedKeys = new Map<string, boolean>()\n\n/**\n * Read a plugin-registered store by `key` (backward-compatible single-arg form).\n * Falls back to `{namespace}::{key}` lookup if bare key not found.\n * Throws a clear error when there is no `<IrisProvider>` ancestor.\n * Plugins export typed wrappers narrowing `T`.\n */\nexport function usePluginStore<T>(key: string): T\n\n/**\n * Read a plugin-registered store by `namespace` + `key`.\n * Equivalent to `usePluginStore('{namespace}::{key}')`.\n */\nexport function usePluginStore<T>(namespace: string, key: string): T\n\nexport function usePluginStore<T>(nsOrKey: string, key?: string): T {\n const ctx = useContext(PluginStoreContext)\n if (!ctx) {\n const displayKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n throw new Error(`[iris-ui] usePluginStore(\"${displayKey}\"): no <IrisProvider> ancestor found`)\n }\n\n const fullKey = key !== undefined ? `${nsOrKey}::${key}` : nsOrKey\n\n // 1. Direct lookup using the constructed key\n let store = ctx.stores.get(fullKey) as T | undefined\n if (store !== undefined) return store\n\n // 2. Single-arg: try without namespace first (backward compat for unnamespaced plugins)\n if (key === undefined) {\n // Try the key as a bare key (for plugins without namespace)\n store = ctx.stores.get(nsOrKey) as T | undefined\n if (store !== undefined) return store\n\n // Try as {namespace}::{key} where namespace may equal the key segment\n // e.g. usePluginStore('settings') → try 'default::settings', 'editor::settings', etc.\n // This handles plugins where namespace === name (the common case).\n for (const k of ctx.stores.keys()) {\n if (typeof k === 'string' && k.endsWith(`::${nsOrKey}`)) {\n // Warn at most once per ambiguous key.\n if (!warnedKeys.has(nsOrKey)) {\n warnedKeys.set(nsOrKey, true)\n console.warn(\n `[iris-ui] Ambiguous plugin store key \"${nsOrKey}\". ` +\n `Found \"${k}\". Use the namespaced form for clarity: ` +\n `usePluginStore(\"${k}\").`,\n )\n }\n return ctx.stores.get(k) as T\n }\n }\n }\n\n throw new Error(\n `[iris-ui] Plugin store \"${fullKey}\" not found. ` +\n `Ensure the plugin is installed in IrisProvider and the key is correct.`,\n )\n}\n","import * as React from 'react'\nimport { useI18n } from '../i18n'\n\nexport interface IrisErrorBoundaryFallbackProps {\n /** The caught error. */\n error: Error\n /** Clears the error and re-attempts rendering the children. */\n reset: () => void\n}\n\nexport interface IrisErrorBoundaryProps {\n /** The guarded subtree. */\n children?: React.ReactNode\n /**\n * Custom fallback UI. Receives `{ error, reset }`. When omitted, the\n * default themed, accessible fallback is rendered.\n */\n fallback?: (props: IrisErrorBoundaryFallbackProps) => React.ReactNode\n /** Invoked with the caught error (and React error info) for logging. */\n onError?: (error: Error, info: React.ErrorInfo) => void\n}\n\ninterface IrisErrorBoundaryState {\n error: Error | null\n}\n\n/**\n * Default themed, accessible fallback. A function sub-component so it can call\n * `useI18n()` — the class boundary can't use hooks. Falls back to English\n * without a provider.\n */\nfunction DefaultErrorFallback({\n error,\n reset,\n}: IrisErrorBoundaryFallbackProps): React.ReactElement {\n const { t } = useI18n()\n return (\n <div\n data-iris-error-boundary=\"\"\n role=\"alert\"\n style={{\n padding: 16,\n border: '1px solid var(--iris-danger)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n color: 'var(--iris-danger)',\n }}\n >\n <div data-iris-error-boundary-message=\"\">{error.message || t('errorBoundary.message')}</div>\n <button type=\"button\" data-iris-error-boundary-retry=\"\" onClick={reset}>\n {t('errorBoundary.retry')}\n </button>\n </div>\n )\n}\n\n/**\n * Catches errors thrown while rendering its subtree and switches to a fallback\n * UI instead of crashing the whole React tree. Exposes `reset()` (passed to the\n * fallback) that clears the error and re-attempts rendering the children.\n *\n * Standalone component — it does NOT wrap `IrisProvider`'s children, so error\n * semantics for existing consumers are unchanged.\n *\n * React port of {@link import('@iris-ui-kit/vue').IrisErrorBoundary}.\n */\nexport class IrisErrorBoundary extends React.Component<\n IrisErrorBoundaryProps,\n IrisErrorBoundaryState\n> {\n override state: IrisErrorBoundaryState = { error: null }\n\n static getDerivedStateFromError(error: Error): IrisErrorBoundaryState {\n return { error }\n }\n\n override componentDidCatch(error: Error, info: React.ErrorInfo): void {\n this.props.onError?.(error, info)\n }\n\n reset = (): void => {\n this.setState({ error: null })\n }\n\n override render(): React.ReactNode {\n const { error } = this.state\n if (error !== null) {\n const { fallback } = this.props\n if (fallback) return fallback({ error, reset: this.reset })\n return <DefaultErrorFallback error={error} reset={this.reset} />\n }\n return this.props.children\n }\n}\n"]}