@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.
- package/LICENSE +21 -0
- package/dist/SidebarLayout-fWQRvK0a.d.cts +26 -0
- package/dist/SidebarLayout-fWQRvK0a.d.ts +26 -0
- package/dist/admin.cjs +1583 -0
- package/dist/admin.cjs.map +1 -0
- package/dist/admin.d.cts +183 -0
- package/dist/admin.d.ts +183 -0
- package/dist/admin.js +9 -0
- package/dist/admin.js.map +1 -0
- package/dist/async.cjs +97 -0
- package/dist/async.cjs.map +1 -0
- package/dist/async.d.cts +57 -0
- package/dist/async.d.ts +57 -0
- package/dist/async.js +5 -0
- package/dist/async.js.map +1 -0
- package/dist/behaviors.cjs +569 -0
- package/dist/behaviors.cjs.map +1 -0
- package/dist/behaviors.d.cts +188 -0
- package/dist/behaviors.d.ts +188 -0
- package/dist/behaviors.js +4 -0
- package/dist/behaviors.js.map +1 -0
- package/dist/chunk-2TQSTINK.js +541 -0
- package/dist/chunk-2TQSTINK.js.map +1 -0
- package/dist/chunk-53KFLVIZ.js +68 -0
- package/dist/chunk-53KFLVIZ.js.map +1 -0
- package/dist/chunk-6BMFMCMQ.js +140 -0
- package/dist/chunk-6BMFMCMQ.js.map +1 -0
- package/dist/chunk-AUA5GBT6.js +143 -0
- package/dist/chunk-AUA5GBT6.js.map +1 -0
- package/dist/chunk-DE6V6NOI.js +122 -0
- package/dist/chunk-DE6V6NOI.js.map +1 -0
- package/dist/chunk-HEJGN6UI.js +78 -0
- package/dist/chunk-HEJGN6UI.js.map +1 -0
- package/dist/chunk-IDD35UJ6.js +83 -0
- package/dist/chunk-IDD35UJ6.js.map +1 -0
- package/dist/chunk-J5FB2UB2.js +166 -0
- package/dist/chunk-J5FB2UB2.js.map +1 -0
- package/dist/chunk-OMOTUHYI.js +66 -0
- package/dist/chunk-OMOTUHYI.js.map +1 -0
- package/dist/chunk-RZNYIFV2.js +34 -0
- package/dist/chunk-RZNYIFV2.js.map +1 -0
- package/dist/chunk-SJO74IB3.js +54 -0
- package/dist/chunk-SJO74IB3.js.map +1 -0
- package/dist/chunk-SORLRLS4.js +53 -0
- package/dist/chunk-SORLRLS4.js.map +1 -0
- package/dist/chunk-TO7YVSAI.js +64 -0
- package/dist/chunk-TO7YVSAI.js.map +1 -0
- package/dist/chunk-TQ33XJIK.js +22 -0
- package/dist/chunk-TQ33XJIK.js.map +1 -0
- package/dist/chunk-UWUUEZCD.js +950 -0
- package/dist/chunk-UWUUEZCD.js.map +1 -0
- package/dist/chunk-VWCJJRSC.js +1200 -0
- package/dist/chunk-VWCJJRSC.js.map +1 -0
- package/dist/chunk-WIHBIDVJ.js +54 -0
- package/dist/chunk-WIHBIDVJ.js.map +1 -0
- package/dist/chunk-XCK4RIXB.js +66 -0
- package/dist/chunk-XCK4RIXB.js.map +1 -0
- package/dist/chunk-YAHXR2CJ.js +48 -0
- package/dist/chunk-YAHXR2CJ.js.map +1 -0
- package/dist/chunk-YXIO5THG.js +4 -0
- package/dist/chunk-YXIO5THG.js.map +1 -0
- package/dist/chunk-ZKBDUWUD.js +156 -0
- package/dist/chunk-ZKBDUWUD.js.map +1 -0
- package/dist/data.cjs +112 -0
- package/dist/data.cjs.map +1 -0
- package/dist/data.d.cts +53 -0
- package/dist/data.d.ts +53 -0
- package/dist/data.js +5 -0
- package/dist/data.js.map +1 -0
- package/dist/error-boundary.cjs +106 -0
- package/dist/error-boundary.cjs.map +1 -0
- package/dist/error-boundary.d.cts +41 -0
- package/dist/error-boundary.d.ts +41 -0
- package/dist/error-boundary.js +6 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/floating.cjs +163 -0
- package/dist/floating.cjs.map +1 -0
- package/dist/floating.d.cts +92 -0
- package/dist/floating.d.ts +92 -0
- package/dist/floating.js +5 -0
- package/dist/floating.js.map +1 -0
- package/dist/form.cjs +159 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +120 -0
- package/dist/form.d.ts +120 -0
- package/dist/form.js +5 -0
- package/dist/form.js.map +1 -0
- package/dist/i18n.cjs +100 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +50 -0
- package/dist/i18n.d.ts +50 -0
- package/dist/i18n.js +5 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.cjs +16635 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2964 -0
- package/dist/index.d.ts +2964 -0
- package/dist/index.js +12217 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts.cjs +386 -0
- package/dist/layouts.cjs.map +1 -0
- package/dist/layouts.d.cts +92 -0
- package/dist/layouts.d.ts +92 -0
- package/dist/layouts.js +6 -0
- package/dist/layouts.js.map +1 -0
- package/dist/modal-utils.cjs +168 -0
- package/dist/modal-utils.cjs.map +1 -0
- package/dist/modal-utils.d.cts +43 -0
- package/dist/modal-utils.d.ts +43 -0
- package/dist/modal-utils.js +4 -0
- package/dist/modal-utils.js.map +1 -0
- package/dist/motion.cjs +104 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +41 -0
- package/dist/motion.d.ts +41 -0
- package/dist/motion.js +4 -0
- package/dist/motion.js.map +1 -0
- package/dist/provider.cjs +191 -0
- package/dist/provider.cjs.map +1 -0
- package/dist/provider.d.cts +62 -0
- package/dist/provider.d.ts +62 -0
- package/dist/provider.js +8 -0
- package/dist/provider.js.map +1 -0
- package/dist/resource.cjs +61 -0
- package/dist/resource.cjs.map +1 -0
- package/dist/resource.d.cts +21 -0
- package/dist/resource.d.ts +21 -0
- package/dist/resource.js +5 -0
- package/dist/resource.js.map +1 -0
- package/dist/skeletons.cjs +1304 -0
- package/dist/skeletons.cjs.map +1 -0
- package/dist/skeletons.d.cts +70 -0
- package/dist/skeletons.d.ts +70 -0
- package/dist/skeletons.js +8 -0
- package/dist/skeletons.js.map +1 -0
- package/dist/skins.cjs +134 -0
- package/dist/skins.cjs.map +1 -0
- package/dist/skins.d.cts +45 -0
- package/dist/skins.d.ts +45 -0
- package/dist/skins.js +5 -0
- package/dist/skins.js.map +1 -0
- package/dist/theme.cjs +100 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +71 -0
- package/dist/theme.d.ts +71 -0
- package/dist/theme.js +5 -0
- package/dist/theme.js.map +1 -0
- package/dist/undo.cjs +73 -0
- package/dist/undo.cjs.map +1 -0
- package/dist/undo.d.cts +47 -0
- package/dist/undo.d.ts +47 -0
- package/dist/undo.js +4 -0
- package/dist/undo.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/badge/Badge.tsx","../src/primitives/avatar/Avatar.tsx","../src/primitives/spinner/styles.ts","../src/primitives/spinner/Spinner.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/chip/Chip.tsx","../src/primitives/kbd/Kbd.tsx","../src/primitives/empty-state/EmptyState.tsx","../src/primitives/textarea/Textarea.tsx","../src/primitives/switch/Switch.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/tooltip/Tooltip.tsx","../src/primitives/popover/context.ts","../src/primitives/popover/Popover.tsx","../src/primitives/popover/PopoverTrigger.tsx","../src/primitives/popover/PopoverContent.tsx","../src/primitives/dialog/context.ts","../src/primitives/dialog/Dialog.tsx","../src/primitives/dialog/DialogTrigger.tsx","../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/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/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/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"],"names":["React","jsx","SIZE_MAP","resolveSize","React2","jsxs","CSS","installed","React3","TONE_TO_VAR","React4","React5","IrisTextarea","React6","IrisSwitch","React7","IrisNumberInput","React8","clamp","React9","React10","Fragment","React11","pad","React12","React13","prefersReducedMotion","React14","resolve","React15","React16","React17","React18","React19","createSelectionModel","React20","React21","React22","VALUE_FONT","React23","id","React24","React25","React26","React27","COLOR","React28","React29","React30","createKeyboardNav","React31","DIM_MAP","React32","IrisRadio","React33","React34","React35","React36","React37","IrisPopoverTrigger","React38","IrisPopoverContent","createPortal","React39","createFloatingMachine","React40","React41","IrisDialogTrigger","composeEventHandlers","React42","IrisDialogContent","IrisDialogTitle","IrisDialogDescription","IrisDialogClose","React43","React44","React45","IrisDrawerTrigger","React46","IrisDrawerContent","IrisDrawerTitle","IrisDrawerClose","React47","t","React48","React49","value","React50","IrisTabsList","React51","IrisTabsTrigger","horizontal","React52","IrisTabsContent","React53","React54","React55","IrisAccordionItem","React56","React57","React58","IrisStepperStep","React59","React60","React61","IrisToggleGroupItem","React62","React63","React64","React65","React66","React67","IrisVirtualScroll","error","saveFile","React69","React70","React71","React72","React73","React74","React75","React76","IrisMenuTrigger","React77","IrisMenuContent","React78","IrisMenuItem","IrisMenuSeparator","React79","React80","React81","formatDisplay","React82","decimalsOf","roundToStep","React83","React84","getDirection","React85","React86"],"mappings":"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","file":"index.js","sourcesContent":["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","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'\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 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 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 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'\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 { 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'\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'\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 { 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 { 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'\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"]}
|