seam-react 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/cx.ts","../src/Button.tsx","../src/Input.tsx","../src/motion.ts","../src/Switch.tsx","../src/Sidebar.tsx","../src/Tabs.tsx","../src/Dialog.tsx","../src/Tooltip.tsx"],"sourcesContent":["/**\n * 拼接 className,忽略 false / null / undefined。\n */\nexport function cx(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(\" \");\n}\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"danger\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** 视觉层级,默认 primary。 */\n variant?: ButtonVariant;\n /** 尺寸,默认 md。 */\n size?: ButtonSize;\n /** 展示加载指示器并禁用点击。 */\n loading?: boolean;\n /** 仅包含图标时使用方形内边距,需自行提供 aria-label。 */\n iconOnly?: boolean;\n children?: ReactNode;\n}\n\n/**\n * 基础按钮。\n *\n * 样式由 data-variant / data-size 驱动,所有原生 button 属性都会透传。\n * loading 时自动设置 disabled 与 aria-busy,避免重复提交。\n */\nexport const Button: ForwardRefExoticComponent<\n ButtonProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n iconOnly = false,\n type = \"button\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(\"uk-button\", className)}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? \"true\" : undefined}\n data-icon-only={iconOnly ? \"true\" : undefined}\n disabled={rest.disabled || loading}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span className=\"uk-button__spinner\" aria-hidden=\"true\" />\n ) : null}\n {children}\n </button>\n );\n});\n","import {\n forwardRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** 输入框尺寸,默认 md。原生 size 属性被该字段替代。 */\n inputSize?: InputSize;\n /** 标记校验失败状态,等同于 aria-invalid=\"true\"。 */\n invalid?: boolean;\n}\n\n/**\n * 文本输入框。\n *\n * 只负责样式与校验状态,label、提示文案与错误信息由调用方组合,\n * 这样表单结构可以完全自定义。\n */\nexport const Input: ForwardRefExoticComponent<\n InputProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n inputSize = \"md\",\n invalid = false,\n className,\n \"aria-invalid\": ariaInvalid,\n ...rest\n },\n ref,\n) {\n return (\n <input\n {...rest}\n ref={ref}\n className={cx(\"uk-input\", className)}\n data-size={inputSize}\n aria-invalid={invalid ? true : ariaInvalid}\n />\n );\n});\n","import type { Transition } from \"motion/react\";\n\nexport const EASE_OUT = [0.23, 1, 0.32, 1] as const;\nexport const EASE_IN_OUT = [0.77, 0, 0.175, 1] as const;\n\nexport const UI_SPRING: Transition = {\n type: \"spring\",\n bounce: 0,\n duration: 0.3,\n};\n\nexport const OVERLAY_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.04,\n duration: 0.38,\n};\n\nexport const INDICATOR_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.08,\n duration: 0.34,\n};\n\nexport const DISCLOSURE_TRANSITION: Transition = {\n duration: 0.2,\n ease: EASE_IN_OUT,\n};\n\n/** Frequent explanatory surface: near-immediate presence without spring settle. */\nexport const TOOLTIP_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n\n/**\n * Grouped tooltips move between nearby triggers. The short layout spring keeps\n * spatial continuity without delaying the content switch.\n */\nexport const TOOLTIP_GROUP_TRANSITION: Transition = {\n layout: { type: \"spring\", bounce: 0, duration: 0.22 },\n opacity: { duration: 0.12, ease: EASE_OUT },\n scale: { duration: 0.12, ease: EASE_OUT },\n};\n\nexport const REDUCED_MOTION_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n animate,\n motion,\n useMotionValue,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { UI_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> {\n /** 受控选中状态。传入即进入受控模式。 */\n checked?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultChecked?: boolean;\n /** 状态变化回调,受控与非受控都会触发。 */\n onCheckedChange?: (checked: boolean) => void;\n /** 显示在开关右侧的标签文本。 */\n children?: ReactNode;\n}\n\n/**\n * 开关。\n *\n * 底层是原生 checkbox(role=\"switch\"),所以表单提交、键盘操作和\n * 屏幕阅读器语义都是免费的;视觉部分由 track / thumb 两个 span 承担。\n */\nexport const Switch: ForwardRefExoticComponent<\n SwitchProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n children,\n id,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const reduceMotion = useReducedMotion() ?? false;\n const suppressClickRef = useRef(false);\n const dragRef = useRef<{\n pointerId: number;\n startX: number;\n startValue: number;\n moved: boolean;\n samples: Array<{ x: number; time: number }>;\n } | null>(null);\n\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n const thumbX = useMotionValue(current ? 16 : 0);\n\n useEffect(() => {\n if (dragRef.current) {\n return;\n }\n\n const controls = animate(\n thumbX,\n current ? 16 : 0,\n reduceMotion ? { duration: 0 } : UI_SPRING,\n );\n\n return () => controls.stop();\n }, [current, reduceMotion, thumbX]);\n\n const finishDrag = (event: ReactPointerEvent<HTMLSpanElement>) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n if (drag.moved) {\n const first = drag.samples[0];\n const last = drag.samples[drag.samples.length - 1];\n const elapsed = first && last ? Math.max(last.time - first.time, 1) : 1;\n const velocity =\n first && last ? ((last.x - first.x) / elapsed) * 1000 : 0;\n const next = Math.abs(velocity) > 220 ? velocity > 0 : thumbX.get() >= 8;\n\n suppressClickRef.current = true;\n dragRef.current = null;\n setCurrent(next);\n animate(\n thumbX,\n next ? 16 : 0,\n reduceMotion ? { duration: 0 } : { ...UI_SPRING, velocity },\n );\n window.setTimeout(() => {\n suppressClickRef.current = false;\n }, 0);\n } else {\n dragRef.current = null;\n }\n\n if (\n event.currentTarget.hasPointerCapture(event.pointerId) &&\n typeof event.currentTarget.releasePointerCapture === \"function\"\n ) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n return (\n <label\n className={cx(\"uk-switch\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n onClickCapture={(event) => {\n if (suppressClickRef.current) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"uk-switch__input\"\n checked={current}\n disabled={disabled}\n aria-checked={current}\n onChange={(event) => setCurrent(event.target.checked)}\n />\n <span\n className=\"uk-switch__track\"\n aria-hidden=\"true\"\n onPointerDown={(event) => {\n if (disabled) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startValue: thumbX.get(),\n moved: false,\n samples: [{ x: event.clientX, time: performance.now() }],\n };\n if (typeof event.currentTarget.setPointerCapture === \"function\") {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (Math.abs(delta) > 4) {\n drag.moved = true;\n }\n\n if (!drag.moved) {\n return;\n }\n\n event.preventDefault();\n thumbX.set(Math.max(0, Math.min(16, drag.startValue + delta)));\n drag.samples.push({ x: event.clientX, time: performance.now() });\n drag.samples = drag.samples.filter(\n (sample) => performance.now() - sample.time < 120,\n );\n }}\n onPointerUp={finishDrag}\n onPointerCancel={finishDrag}\n >\n <motion.span className=\"uk-switch__thumb\" style={{ x: thumbX }} />\n </span>\n {children ? <span className=\"uk-switch__label\">{children}</span> : null}\n </label>\n );\n});\n","import {\n cloneElement,\n createContext,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n AnimatePresence,\n LayoutGroup,\n motion,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { DISCLOSURE_TRANSITION, INDICATOR_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\ninterface SidebarContextValue {\n hoveredId: string | null;\n setHoveredId: (id: string | null) => void;\n indicatorBaseId: string;\n hoverPreview: boolean;\n hoverIndicator: SidebarHoverIndicator;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nfunction useSidebarContext(component: string): SidebarContextValue {\n const context = useContext(SidebarContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Sidebar>`);\n }\n\n return context;\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n /**\n * 鼠标悬停时是否显示会跟随指针移动的背景预览。\n *\n * @default true\n */\n hoverPreview?: boolean;\n /**\n * 鼠标预览的互斥呈现方式:轨道游标或整行背景。\n *\n * @default \"rail\"\n */\n hoverIndicator?: SidebarHoverIndicator;\n /**\n * 分组之间的垂直间距。数字按 px 处理,也可传入 CSS 长度字符串。\n *\n * @default \"1.5rem\"\n */\n groupGap?: number | string;\n}\n\nexport type SidebarHoverIndicator = \"rail\" | \"background\";\n\nfunction SidebarRoot({\n children,\n className,\n hoverPreview = true,\n hoverIndicator = \"rail\",\n groupGap,\n style,\n ...rest\n}: SidebarProps): ReactElement {\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const indicatorBaseId = useId().replace(/:/g, \"\");\n const context = useMemo<SidebarContextValue>(\n () => ({\n hoveredId,\n setHoveredId,\n indicatorBaseId,\n hoverPreview,\n hoverIndicator,\n }),\n [hoveredId, indicatorBaseId, hoverPreview, hoverIndicator],\n );\n const groupGapValue =\n typeof groupGap === \"number\" ? `${groupGap}px` : groupGap;\n const rootStyle = {\n ...style,\n ...(groupGapValue === undefined\n ? {}\n : { \"--uk-sidebar-group-gap\": groupGapValue }),\n } as CSSProperties;\n\n return (\n <SidebarContext.Provider value={context}>\n <LayoutGroup id={`sidebar-${indicatorBaseId}`}>\n <nav\n {...rest}\n className={cx(\"uk-sidebar\", className)}\n style={rootStyle}\n >\n {children}\n </nav>\n </LayoutGroup>\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarGroupProps extends Omit<\n HTMLAttributes<HTMLElement>,\n \"title\"\n> {\n /** 分类名称。 */\n title: ReactNode;\n /** 分类标题前的视觉图标,不作为额外可访问名称。 */\n icon?: ReactNode;\n /** 是否允许用户展开和收起该分组。默认保持展开且不显示触发器。 */\n collapsible?: boolean;\n /** 受控展开状态。 */\n open?: boolean;\n /** 非受控模式下是否默认展开。 */\n defaultOpen?: boolean;\n /** 展开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nfunction SidebarGroup({\n title,\n icon,\n collapsible = false,\n open,\n defaultOpen = true,\n onOpenChange,\n children,\n className,\n ...rest\n}: SidebarGroupProps): ReactElement {\n const titleId = useId();\n const contentId = useId();\n const triggerId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const context = useSidebarContext(\"Sidebar.Group\");\n const hasIcon = icon !== undefined && icon !== null;\n const reduceMotion = useReducedMotion() ?? false;\n const [expanded, setExpanded] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const isOpen = collapsible ? expanded : true;\n const triggerHovered = context.hoveredId === triggerId;\n\n useEffect(() => {\n if (!collapsible || isOpen) {\n return;\n }\n\n if (contentRef.current?.contains(document.activeElement)) {\n triggerRef.current?.focus();\n }\n }, [collapsible, isOpen]);\n\n const titleContent = (\n <>\n {hasIcon ? (\n <span className=\"uk-sidebar__group-icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"uk-sidebar__group-label\">{title}</span>\n {collapsible ? (\n <span className=\"uk-sidebar__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" fill=\"none\">\n <path\n d=\"m6 3.8 4.2 4.2L6 12.2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.35\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </>\n );\n\n return (\n <section\n {...rest}\n className={cx(\"uk-sidebar__group\", className)}\n aria-labelledby={rest[\"aria-labelledby\"] ?? titleId}\n data-collapsible={collapsible ? \"true\" : \"false\"}\n data-has-icon={hasIcon ? \"true\" : \"false\"}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n {collapsible ? (\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"uk-sidebar__group-title uk-sidebar__group-trigger\"\n id={titleId}\n aria-controls={contentId}\n aria-expanded={isOpen}\n data-preview={\n context.hoverIndicator === \"background\" && triggerHovered\n ? \"true\"\n : undefined\n }\n onClick={() => setExpanded((value) => !value)}\n onPointerEnter={(event) => {\n if (\n context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n event.pointerType === \"mouse\"\n ) {\n context.setHoveredId(triggerId);\n }\n }}\n onPointerLeave={() => {\n if (context.hoveredId === triggerId) {\n context.setHoveredId(null);\n }\n }}\n onPointerCancel={() => {\n if (context.hoveredId === triggerId) {\n context.setHoveredId(null);\n }\n }}\n >\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n triggerHovered ? (\n <motion.span\n className=\"uk-sidebar__group-surface\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-highlight\"\n layoutId={`${context.indicatorBaseId}-hover`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={reduceMotion ? { duration: 0 } : INDICATOR_SPRING}\n />\n ) : null}\n </AnimatePresence>\n {titleContent}\n </button>\n ) : (\n <div className=\"uk-sidebar__group-title\" id={titleId}>\n {titleContent}\n </div>\n )}\n <motion.div\n ref={contentRef}\n className=\"uk-sidebar__content\"\n id={contentId}\n data-state={isOpen ? \"open\" : \"closed\"}\n initial={false}\n animate={{\n height: isOpen ? \"auto\" : 0,\n opacity: isOpen ? 1 : 0,\n }}\n transition={reduceMotion ? { duration: 0 } : DISCLOSURE_TRANSITION}\n inert={collapsible && !isOpen}\n aria-hidden={collapsible && !isOpen ? true : undefined}\n >\n <ul className=\"uk-sidebar__list\">{children}</ul>\n </motion.div>\n </section>\n );\n}\n\nexport interface SidebarItemProps {\n /** 当前页面是否对应此链接。 */\n active?: boolean;\n /** 单个原生链接或路由链接元素。 */\n children: ReactElement;\n /** 追加到链接元素的类名。 */\n className?: string;\n}\n\ntype ClassNameValue =\n | string\n | ((args: {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n }) => string | undefined);\n\nfunction SidebarItem({\n active = false,\n children,\n className,\n}: SidebarItemProps): ReactElement {\n const context = useSidebarContext(\"Sidebar.Item\");\n const itemId = useId();\n const reduceMotion = useReducedMotion() ?? false;\n const indicatorTransition = reduceMotion ? { duration: 0 } : INDICATOR_SPRING;\n\n if (!isValidElement(children)) {\n throw new Error(\"<Sidebar.Item> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childClassName = childProps.className as ClassNameValue | undefined;\n const mergedClassName =\n typeof childClassName === \"function\"\n ? (args: {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n }) => cx(\"uk-sidebar__link\", childClassName(args), className)\n : cx(\"uk-sidebar__link\", childClassName, className);\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerCancel = childProps.onPointerCancel as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const hovered = context.hoveredId === itemId;\n\n const content = (\n <>\n <span className=\"uk-sidebar__rail\" aria-hidden=\"true\" />\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"rail\" &&\n hovered ? (\n <motion.span\n className=\"uk-sidebar__rail-indicator\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-rail-indicator\"\n layoutId={`${context.indicatorBaseId}-hover-rail`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverIndicator === \"rail\" && active ? (\n <motion.span\n className=\"uk-sidebar__rail-indicator\"\n data-kind=\"active\"\n data-slot=\"sidebar-active-rail-indicator\"\n layoutId={`${context.indicatorBaseId}-active-rail`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n hovered ? (\n <motion.span\n className=\"uk-sidebar__surface\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-highlight\"\n layoutId={`${context.indicatorBaseId}-hover`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverIndicator === \"background\" && active ? (\n <motion.span\n className=\"uk-sidebar__surface\"\n data-kind=\"active\"\n data-slot=\"sidebar-active-highlight\"\n layoutId={`${context.indicatorBaseId}-active`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <span className=\"uk-sidebar__label\">\n {childProps.children as ReactNode}\n </span>\n </>\n );\n\n return (\n <li className=\"uk-sidebar__item\">\n {cloneElement(\n child,\n {\n className: mergedClassName,\n \"data-active\": active ? \"true\" : \"false\",\n \"data-preview\": active || hovered ? \"true\" : \"false\",\n \"aria-current\":\n childProps[\"aria-current\"] ?? (active ? \"page\" : undefined),\n onPointerEnter: composeHandler(\n childPointerEnter,\n (event: ReactPointerEvent<HTMLElement>) => {\n if (context.hoverPreview && event.pointerType === \"mouse\") {\n context.setHoveredId(itemId);\n }\n },\n ),\n onPointerLeave: composeHandler(childPointerLeave, () => {\n if (context.hoveredId === itemId) {\n context.setHoveredId(null);\n }\n }),\n onPointerCancel: composeHandler(childPointerCancel, () => {\n if (context.hoveredId === itemId) {\n context.setHoveredId(null);\n }\n }),\n },\n content,\n )}\n </li>\n );\n}\n\n/**\n * 分组文档导航。\n *\n * 根节点保持原生 `<nav>`,Group 生成带名称的分组,Item 包装单个链接。\n * hoverIndicator 在轨道游标与共享布局背景之间二选一,hover 和当前项使用\n * 同一种反馈;Group 可按需展开和收起,同时保持链接的 Tab 顺序、焦点、\n * 原生事件和 aria-current 行为。\n */\nexport interface SidebarComponent {\n (props: SidebarProps): ReactElement;\n Group: typeof SidebarGroup;\n Item: typeof SidebarItem;\n}\n\nexport const Sidebar: SidebarComponent = Object.assign(SidebarRoot, {\n Group: SidebarGroup,\n Item: SidebarItem,\n});\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { INDICATOR_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n baseId: string;\n value: string;\n setValue: (value: string) => void;\n orientation: TabsOrientation;\n indicatorId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(component: string): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tabs>`);\n }\n\n return context;\n}\n\nfunction tabId(baseId: string, value: string) {\n return `${baseId}-tab-${encodeURIComponent(value)}`;\n}\n\nfunction panelId(baseId: string, value: string) {\n return `${baseId}-panel-${encodeURIComponent(value)}`;\n}\n\ninterface TabsBaseProps {\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n className?: string;\n children: ReactNode;\n}\n\nexport type TabsProps = TabsBaseProps &\n (\n | { value: string; defaultValue?: never }\n | { value?: never; defaultValue: string }\n );\n\nfunction TabsRoot({\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n className,\n children,\n}: TabsProps): ReactElement {\n const baseId = useId();\n const [current, setValue] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? \"\",\n onChange: onValueChange,\n });\n\n const context = useMemo<TabsContextValue>(\n () => ({\n baseId,\n value: current,\n setValue,\n orientation,\n indicatorId: `${baseId}-indicator`,\n }),\n [baseId, current, orientation, setValue],\n );\n\n return (\n <TabsContext.Provider value={context}>\n <div className={cx(\"uk-tabs\", className)} data-orientation={orientation}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nconst TabsList: ForwardRefExoticComponent<\n TabsListProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, onKeyDown, ...rest },\n ref,\n) {\n const { orientation } = useTabsContext(\"Tabs.List\");\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n tabIndex={-1}\n className={cx(\"uk-tabs__list\", className)}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest<HTMLElement>('[role=\"tab\"]');\n\n if (!trigger || trigger.hasAttribute(\"disabled\")) {\n return;\n }\n\n const triggers = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const index = triggers.indexOf(trigger);\n\n if (index === -1) {\n return;\n }\n\n const nextKey =\n orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\";\n const previousKey =\n orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\";\n\n let nextIndex = -1;\n\n switch (event.key) {\n case nextKey:\n nextIndex = (index + 1) % triggers.length;\n break;\n case previousKey:\n nextIndex = (index - 1 + triggers.length) % triggers.length;\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = triggers.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n const nextTrigger = triggers[nextIndex];\n\n if (nextTrigger) {\n nextTrigger.focus();\n nextTrigger.click();\n }\n }}\n />\n );\n});\n\nexport interface TabsTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsTrigger: ForwardRefExoticComponent<\n TabsTriggerProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, TabsTriggerProps>(function TabsTrigger(\n { value, type = \"button\", className, onClick, children, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Trigger\");\n const selected = context.value === value;\n const reduceMotion = useReducedMotion() ?? false;\n\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n role=\"tab\"\n id={tabId(context.baseId, value)}\n aria-selected={selected}\n aria-controls={panelId(context.baseId, value)}\n tabIndex={selected ? 0 : -1}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__trigger\", className)}\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) {\n context.setValue(value);\n }\n }}\n >\n {children}\n {selected ? (\n <motion.span\n className=\"uk-tabs__indicator\"\n layoutId={context.indicatorId}\n aria-hidden=\"true\"\n transition={reduceMotion ? { duration: 0 } : INDICATOR_SPRING}\n />\n ) : null}\n </button>\n );\n});\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsContent: ForwardRefExoticComponent<\n TabsContentProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsContentProps>(function TabsContent(\n { value, className, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Content\");\n const selected = context.value === value;\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tabpanel\"\n id={panelId(context.baseId, value)}\n aria-labelledby={tabId(context.baseId, value)}\n hidden={!selected}\n tabIndex={0}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__panel\", className)}\n />\n );\n});\n\n/**\n * 标签页。\n *\n * 组合式 API:Tabs / Tabs.List / Tabs.Trigger / Tabs.Content。\n * 实现 roving tabindex、方向键循环、Home/End 跳转,并自动生成\n * aria-controls / aria-labelledby 关联。\n */\nexport interface TabsComponent {\n (props: TabsProps): ReactElement;\n List: typeof TabsList;\n Trigger: typeof TabsTrigger;\n Content: typeof TabsContent;\n}\n\nexport const Tabs: TabsComponent = Object.assign(TabsRoot, {\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n type RefObject,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useControllableState,\n useEventCallback,\n useFocusTrap,\n useLockBodyScroll,\n} from \"seam-hooks\";\nimport { Button } from \"./Button\";\nimport { OVERLAY_SPRING, REDUCED_MOTION_TRANSITION } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface DialogProps {\n /** 是否打开。由调用方控制,配合 onOpenChange 使用。 */\n open: boolean;\n /** 打开状态变化时触发,用于同步外部 state。 */\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n /** 关闭按钮的无障碍名称,默认 Close。 */\n closeLabel?: string;\n showCloseButton?: boolean;\n /** 点击遮罩是否关闭,默认 true。 */\n closeOnBackdropClick?: boolean;\n /** 按 Esc 是否关闭,默认 true。 */\n closeOnEscape?: boolean;\n /** 打开后优先聚焦的元素;不传则聚焦第一个可聚焦元素。 */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** 关闭后恢复焦点的元素;默认恢复到打开前的活动元素。 */\n returnFocusRef?: RefObject<HTMLElement | null>;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport interface DialogRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerId: string;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n setHasTitle: (hasTitle: boolean) => void;\n hasDescription: boolean;\n setHasDescription: (hasDescription: boolean) => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = useContext(DialogContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Dialog.Root>`);\n }\n\n return context;\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Dialog 状态与语义 ID 的根节点。 */\nfunction DialogRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: DialogRootProps): ReactElement {\n const baseId = useId();\n const [hasTitle, setHasTitle] = useState(false);\n const [hasDescription, setHasDescription] = useState(false);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const value = useMemo<DialogContextValue>(\n () => ({\n open: current,\n setOpen,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n hasTitle,\n setHasTitle,\n hasDescription,\n setHasDescription,\n }),\n [baseId, current, hasDescription, hasTitle, setOpen],\n );\n\n return (\n <DialogContext.Provider value={value}>{children}</DialogContext.Provider>\n );\n}\n\nexport interface DialogTriggerProps {\n children: ReactElement;\n}\n\n/** 包装一个交互元素,同步 dialog 的状态与 ARIA 关联。 */\nfunction DialogTrigger({ children }: DialogTriggerProps): ReactElement {\n const context = useDialogContext(\"Dialog.Trigger\");\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n id: context.triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : undefined,\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(!context.open);\n }),\n });\n}\n\nexport interface DialogCloseProps {\n children?: ReactElement;\n label?: string;\n}\n\n/** 包装关闭触发器,或渲染一个默认关闭按钮。 */\nfunction DialogClose({\n children,\n label = \"Close\",\n}: DialogCloseProps): ReactElement {\n const context = useDialogContext(\"Dialog.Close\");\n\n if (isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(false);\n }),\n });\n }\n\n return (\n <Button variant=\"ghost\" onClick={() => context.setOpen(false)}>\n {label}\n </Button>\n );\n}\n\nexport type DialogHeaderProps = HTMLAttributes<HTMLElement>;\n\nconst DialogHeader: ForwardRefExoticComponent<\n DialogHeaderProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogHeaderProps>(function DialogHeader(\n { className, ...rest },\n ref,\n) {\n return (\n <header\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__header\", className)}\n />\n );\n});\n\nexport type DialogTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\nconst DialogTitle: ForwardRefExoticComponent<\n DialogTitleProps & RefAttributes<HTMLHeadingElement>\n> = forwardRef<HTMLHeadingElement, DialogTitleProps>(function DialogTitle(\n { className, children, ...rest },\n ref,\n) {\n const context = useDialogContext(\"Dialog.Title\");\n const setHasTitle = context.setHasTitle;\n\n useEffect(() => {\n setHasTitle(true);\n return () => setHasTitle(false);\n }, [setHasTitle]);\n\n return (\n <h2\n {...rest}\n ref={ref}\n id={context.titleId}\n className={cx(\"uk-dialog__title\", className)}\n >\n {children}\n </h2>\n );\n});\n\nexport type DialogDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nconst DialogDescription: ForwardRefExoticComponent<\n DialogDescriptionProps & RefAttributes<HTMLParagraphElement>\n> = forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n function DialogDescription({ className, ...rest }, ref) {\n const context = useDialogContext(\"Dialog.Description\");\n const setHasDescription = context.setHasDescription;\n\n useEffect(() => {\n setHasDescription(true);\n return () => setHasDescription(false);\n }, [setHasDescription]);\n\n return (\n <p\n {...rest}\n ref={ref}\n id={context.descriptionId}\n className={cx(\"uk-dialog__description\", className)}\n />\n );\n },\n);\n\nexport type DialogBodyProps = HTMLAttributes<HTMLDivElement>;\n\nconst DialogBody: ForwardRefExoticComponent<\n DialogBodyProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, DialogBodyProps>(function DialogBody(\n { className, ...rest },\n ref,\n) {\n return (\n <div {...rest} ref={ref} className={cx(\"uk-dialog__body\", className)} />\n );\n});\n\nexport type DialogFooterProps = HTMLAttributes<HTMLElement>;\n\nconst DialogFooter: ForwardRefExoticComponent<\n DialogFooterProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogFooterProps>(function DialogFooter(\n { className, ...rest },\n ref,\n) {\n return (\n <footer\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__footer\", className)}\n />\n );\n});\n\nexport interface DialogContentProps {\n children?: ReactNode;\n className?: string;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n initialFocusRef?: RefObject<HTMLElement | null>;\n returnFocusRef?: RefObject<HTMLElement | null>;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\ninterface DialogLayerProps extends DialogContentProps {\n requestClose: () => void;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n hasDescription: boolean;\n}\n\nfunction DialogLayer({\n requestClose,\n contentId,\n titleId,\n descriptionId,\n hasTitle,\n hasDescription,\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogLayerProps): ReactElement {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const openerRef = useRef<HTMLElement | null>(null);\n const isPresent = useIsPresent();\n const reduceMotion = useReducedMotion() ?? false;\n\n useLockBodyScroll(true);\n\n useLayoutEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n openerRef.current ??=\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n }, []);\n\n useFocusTrap({\n active: true,\n containerRef: dialogRef,\n initialFocusRef,\n returnFocusRef: returnFocusRef ?? openerRef,\n });\n\n useEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n const reopen = () => {\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n };\n const onClose = () => {\n if (!closeOnEscape) {\n reopen();\n return;\n }\n\n requestClose();\n };\n const onCancel = (event: Event) => {\n event.preventDefault();\n\n if (closeOnEscape) {\n requestClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (closeOnEscape || event.key !== \"Escape\" || event.defaultPrevented) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n };\n const onClick = (event: globalThis.MouseEvent) => {\n if (closeOnBackdropClick && event.target === dialog) {\n requestClose();\n }\n };\n\n dialog.addEventListener(\"close\", onClose);\n dialog.addEventListener(\"cancel\", onCancel);\n dialog.addEventListener(\"keydown\", onKeyDown, true);\n dialog.addEventListener(\"click\", onClick);\n\n return () => {\n dialog.removeEventListener(\"close\", onClose);\n dialog.removeEventListener(\"cancel\", onCancel);\n dialog.removeEventListener(\"keydown\", onKeyDown, true);\n dialog.removeEventListener(\"click\", onClick);\n };\n }, [closeOnBackdropClick, closeOnEscape, requestClose]);\n\n return (\n <dialog\n ref={dialogRef}\n id={contentId}\n className={cx(\"uk-dialog\", className)}\n closedby={closeOnEscape || closeOnBackdropClick ? \"any\" : \"none\"}\n data-state={isPresent ? \"open\" : \"closed\"}\n inert={!isPresent}\n aria-label={ariaLabel}\n aria-labelledby={\n ariaLabelledBy ??\n (ariaLabel ? undefined : hasTitle ? titleId : undefined)\n }\n aria-describedby={\n ariaDescribedBy ?? (hasDescription ? descriptionId : undefined)\n }\n >\n <motion.div\n className=\"uk-dialog__panel\"\n initial={\n reduceMotion\n ? { opacity: 0 }\n : {\n opacity: 0,\n transform: \"translateY(12px) scale(0.96)\",\n }\n }\n animate={{\n opacity: 1,\n transform: \"translateY(0px) scale(1)\",\n transition: reduceMotion\n ? REDUCED_MOTION_TRANSITION\n : { ...OVERLAY_SPRING, delay: 0.06 },\n }}\n exit={\n reduceMotion\n ? { opacity: 0, transition: REDUCED_MOTION_TRANSITION }\n : {\n opacity: 0,\n transform: \"translateY(8px) scale(0.97)\",\n transition: OVERLAY_SPRING,\n }\n }\n >\n {children}\n </motion.div>\n </dialog>\n );\n}\n\n/** Portal、原生 dialog、焦点与 presence 生命周期的语义层。 */\nfunction DialogContent({\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogContentProps): ReactElement | null {\n const context = useDialogContext(\"Dialog.Content\");\n const requestClose = useEventCallback(() => {\n context.setOpen(false);\n });\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n if (!isClient) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <DialogLayer\n key=\"uk-dialog\"\n requestClose={requestClose}\n contentId={context.contentId}\n titleId={context.titleId}\n descriptionId={context.descriptionId}\n hasTitle={context.hasTitle}\n hasDescription={context.hasDescription}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n className={className}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n >\n {children}\n </DialogLayer>\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n document.body,\n );\n}\n\n/** 保持既有 slot API 兼容的便捷封装。 */\nfunction LegacyDialog({\n open,\n onOpenChange,\n title,\n description,\n footer,\n children,\n closeLabel = \"Close\",\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n}: DialogProps): ReactElement {\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={className}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n aria-label={ariaLabel}\n >\n {title || description || showCloseButton ? (\n <DialogHeader>\n <div className=\"uk-dialog__heading\">\n {title ? <DialogTitle>{title}</DialogTitle> : null}\n {description ? (\n <DialogDescription>{description}</DialogDescription>\n ) : null}\n </div>\n {showCloseButton ? (\n <DialogClose>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label={closeLabel}\n className=\"uk-dialog__close\"\n >\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M5 5l10 10M15 5L5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Button>\n </DialogClose>\n ) : null}\n </DialogHeader>\n ) : null}\n\n <DialogBody>{children}</DialogBody>\n\n {footer ? <DialogFooter>{footer}</DialogFooter> : null}\n </DialogContent>\n </DialogRoot>\n );\n}\n\nexport interface DialogComponent {\n (props: DialogProps): ReactElement;\n Root: typeof DialogRoot;\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n}\n\n/**\n * 模态对话框。\n *\n * 组合式 API 由 Root / Trigger / Content 和各语义层组成;无子组件的调用\n * 保留既有 title / description / footer slot API。\n */\nexport const Dialog: DialogComponent = Object.assign(LegacyDialog, {\n Root: DialogRoot,\n Trigger: DialogTrigger,\n Content: DialogContent,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Body: DialogBody,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n","import {\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useControllableState, useEventCallback } from \"seam-hooks\";\nimport {\n REDUCED_MOTION_TRANSITION,\n TOOLTIP_GROUP_TRANSITION,\n TOOLTIP_TRANSITION,\n} from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type TooltipAlign = \"start\" | \"center\" | \"end\";\n\nexport interface TooltipRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始打开状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n /** 指针停留或聚焦多久后显示,默认 300ms。 */\n delayDuration?: number;\n /** 离开触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n}\n\ninterface TooltipContextValue {\n open: boolean;\n triggerElement: HTMLElement | null;\n setTriggerElement: (element: HTMLElement | null) => void;\n contentId: string;\n requestOpen: (immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useTooltipContext(component: string): TooltipContextValue {\n const context = useContext(TooltipContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Root>`);\n }\n\n return context;\n}\n\nfunction setRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as { current: T | null }).current = value;\n }\n}\n\nfunction appendDescription(existing: unknown, id: string): string {\n const ids =\n typeof existing === \"string\" ? existing.split(/\\s+/).filter(Boolean) : [];\n\n return Array.from(new Set([...ids, id])).join(\" \");\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Tooltip 的状态、计时器与语义 ID 根节点。 */\nfunction TooltipRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration = 300,\n closeDelay = 80,\n}: TooltipRootProps): ReactElement {\n const contentId = useId();\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const requestOpen = useEventCallback((immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (current) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!current) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n useEffect(() => {\n if (current) {\n clearCloseTimer();\n } else {\n clearOpenTimer();\n }\n }, [clearCloseTimer, clearOpenTimer, current]);\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipContextValue>(\n () => ({\n open: current,\n triggerElement,\n setTriggerElement,\n contentId,\n requestOpen,\n requestClose,\n dismiss,\n }),\n [contentId, current, dismiss, requestClose, requestOpen, triggerElement],\n );\n\n return (\n <TooltipContext.Provider value={context}>\n {children}\n </TooltipContext.Provider>\n );\n}\n\nexport interface TooltipTriggerProps {\n /** 单个可聚焦的交互元素;事件和 ref 会与调用方传入的值合并。 */\n children: ReactElement;\n}\n\n/** 为原生交互元素补充 hover、focus、Escape 与 aria-describedby。 */\nfunction TooltipTrigger({ children }: TooltipTriggerProps): ReactElement {\n const context = useTooltipContext(\"Tooltip.Trigger\");\n const { setTriggerElement } = context;\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Trigger> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": context.open\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.requestOpen(event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.requestOpen();\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && context.open) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipContentProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"id\" | \"role\"\n> {\n children?: ReactNode;\n /** 首选方向,空间不足时自动翻转。 */\n side?: TooltipSide;\n /** 沿首选方向与触发器的对齐方式。 */\n align?: TooltipAlign;\n /** 与触发器之间的间距,默认 8px。 */\n sideOffset?: number;\n /** 与视口边缘的最小间距,默认 8px。 */\n collisionPadding?: number;\n /** 是否根据视口空间翻转和避让,默认 true。 */\n avoidCollisions?: boolean;\n}\n\ninterface Rectangle {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface TooltipPosition {\n x: number;\n y: number;\n side: TooltipSide;\n arrowOffset: number;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction oppositeSide(side: TooltipSide): TooltipSide {\n switch (side) {\n case \"top\":\n return \"bottom\";\n case \"right\":\n return \"left\";\n case \"bottom\":\n return \"top\";\n case \"left\":\n return \"right\";\n }\n}\n\nfunction mainAxisRoom(\n trigger: Rectangle,\n side: TooltipSide,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n switch (side) {\n case \"top\":\n return trigger.top - padding;\n case \"right\":\n return viewportWidth - trigger.right - padding;\n case \"bottom\":\n return viewportHeight - trigger.bottom - padding;\n case \"left\":\n return trigger.left - padding;\n }\n}\n\nfunction fitsOnSide(\n trigger: Rectangle,\n tooltip: Rectangle,\n side: TooltipSide,\n offset: number,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n const room = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n padding,\n );\n\n return (\n room >=\n (side === \"top\" || side === \"bottom\" ? tooltip.height : tooltip.width) +\n offset\n );\n}\n\nexport function calculateTooltipPosition({\n trigger,\n tooltip,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth,\n viewportHeight,\n}: {\n trigger: Rectangle;\n tooltip: Rectangle;\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n viewportWidth: number;\n viewportHeight: number;\n}): TooltipPosition {\n let resolvedSide = side;\n\n if (\n avoidCollisions &&\n !fitsOnSide(\n trigger,\n tooltip,\n side,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n )\n ) {\n const opposite = oppositeSide(side);\n const oppositeFits = fitsOnSide(\n trigger,\n tooltip,\n opposite,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const preferredRoom = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const oppositeRoom = mainAxisRoom(\n trigger,\n opposite,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n\n if (oppositeFits || oppositeRoom > preferredRoom) {\n resolvedSide = opposite;\n }\n }\n\n const triggerCenterX = trigger.left + trigger.width / 2;\n const triggerCenterY = trigger.top + trigger.height / 2;\n let x = 0;\n let y = 0;\n\n switch (resolvedSide) {\n case \"top\":\n case \"bottom\":\n x =\n align === \"start\"\n ? trigger.left\n : align === \"end\"\n ? trigger.right - tooltip.width\n : triggerCenterX - tooltip.width / 2;\n y =\n resolvedSide === \"top\"\n ? trigger.top - tooltip.height - sideOffset\n : trigger.bottom + sideOffset;\n break;\n case \"left\":\n case \"right\":\n x =\n resolvedSide === \"left\"\n ? trigger.left - tooltip.width - sideOffset\n : trigger.right + sideOffset;\n y =\n align === \"start\"\n ? trigger.top\n : align === \"end\"\n ? trigger.bottom - tooltip.height\n : triggerCenterY - tooltip.height / 2;\n break;\n }\n\n if (avoidCollisions) {\n x = clamp(\n x,\n collisionPadding,\n viewportWidth - tooltip.width - collisionPadding,\n );\n y = clamp(\n y,\n collisionPadding,\n viewportHeight - tooltip.height - collisionPadding,\n );\n }\n\n const arrowMargin = 10;\n const arrowOffset =\n resolvedSide === \"top\" || resolvedSide === \"bottom\"\n ? clamp(\n triggerCenterX - x,\n arrowMargin,\n Math.max(arrowMargin, tooltip.width - arrowMargin),\n )\n : clamp(\n triggerCenterY - y,\n arrowMargin,\n Math.max(arrowMargin, tooltip.height - arrowMargin),\n );\n\n return { x, y, side: resolvedSide, arrowOffset };\n}\n\ninterface TooltipLayerProps extends TooltipContentProps {\n contentId: string;\n triggerElement: HTMLElement;\n dismiss: () => void;\n}\n\ninterface TooltipPositionOptions {\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n}\n\nfunction useTooltipPosition(\n triggerElement: HTMLElement | null,\n floatingRef: { current: HTMLDivElement | null },\n {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n }: TooltipPositionOptions,\n): TooltipPosition | null {\n const [position, setPosition] = useState<TooltipPosition | null>(null);\n\n useLayoutEffect(() => {\n const floating = floatingRef.current;\n\n if (!floating || !triggerElement) {\n return;\n }\n\n const updatePosition = () => {\n const triggerRect = triggerElement.getBoundingClientRect();\n const tooltipRect = floating.getBoundingClientRect();\n\n setPosition(\n calculateTooltipPosition({\n trigger: triggerRect,\n tooltip: tooltipRect,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth:\n window.innerWidth || document.documentElement.clientWidth,\n viewportHeight:\n window.innerHeight || document.documentElement.clientHeight,\n }),\n );\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(updatePosition);\n resizeObserver?.observe(triggerElement);\n resizeObserver?.observe(floating);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n resizeObserver?.disconnect();\n };\n }, [\n align,\n avoidCollisions,\n collisionPadding,\n floatingRef,\n side,\n sideOffset,\n triggerElement,\n ]);\n\n return position;\n}\n\nfunction useTooltipDismissBehavior(\n triggerElement: HTMLElement,\n floatingRef: { current: HTMLDivElement | null },\n dismiss: () => void,\n) {\n useEffect(() => {\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (\n triggerElement.contains(target) ||\n floatingRef.current?.contains(target)\n ) {\n return;\n }\n\n dismiss();\n };\n const onVisibilityChange = () => {\n if (document.visibilityState === \"hidden\") {\n dismiss();\n }\n };\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n const target = event.target;\n\n if (\n event.key !== \"Escape\" ||\n (target instanceof Node && triggerElement.contains(target))\n ) {\n return;\n }\n\n dismiss();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n document.addEventListener(\"keydown\", onKeyDown, true);\n window.addEventListener(\"blur\", dismiss);\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n window.removeEventListener(\"blur\", dismiss);\n };\n }, [dismiss, floatingRef, triggerElement]);\n}\n\nfunction transformOriginForSide(\n side: TooltipSide | undefined,\n): CSSProperties[\"transformOrigin\"] {\n switch (side) {\n case \"top\":\n return \"center bottom\";\n case \"bottom\":\n return \"center top\";\n case \"left\":\n return \"right center\";\n case \"right\":\n return \"left center\";\n default:\n return \"center\";\n }\n}\n\nfunction TooltipLayer({\n contentId,\n triggerElement,\n dismiss,\n children,\n className,\n style,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n ...rest\n}: TooltipLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const transformOrigin = transformOriginForSide(position?.side ?? side);\n const wrapperStyle = {\n ...style,\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <div\n {...rest}\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\"uk-tooltip\", className)}\n style={wrapperStyle}\n >\n <motion.div\n className=\"uk-tooltip__surface\"\n style={{ transformOrigin }}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n {children}\n </motion.div>\n </div>\n );\n}\n\n/** Portal 并管理 Tooltip 的测量、定位、presence 与退出生命周期。 */\nfunction TooltipContent(props: TooltipContentProps): ReactElement | null {\n const context = useTooltipContext(\"Tooltip.Content\");\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n const portalContainer =\n isClient && context.triggerElement\n ? (context.triggerElement.closest<HTMLElement>(\"dialog\") ?? document.body)\n : null;\n\n if (!portalContainer || !context.triggerElement) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <TooltipLayer\n key=\"uk-tooltip\"\n contentId={context.contentId}\n triggerElement={context.triggerElement}\n dismiss={context.dismiss}\n {...props}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n );\n}\n\ninterface RegisteredTooltipItem {\n triggerElement: HTMLElement;\n content: ReactNode;\n}\n\ninterface TooltipGroupContextValue {\n open: boolean;\n activeValue: string | null;\n contentId: string;\n activate: (value: string, immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n register: (\n value: string,\n triggerElement: HTMLElement,\n content: ReactNode,\n ) => void;\n unregister: (value: string) => void;\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(\n null,\n);\n\nfunction useTooltipGroupContext(component: string): TooltipGroupContextValue {\n const context = useContext(TooltipGroupContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Group>`);\n }\n\n return context;\n}\n\nexport interface TooltipGroupProps {\n children: ReactNode;\n /** 组内所有 Tooltip 共用的方向。 */\n side?: TooltipSide;\n /** 组内所有 Tooltip 共用的对齐方式。 */\n align?: TooltipAlign;\n sideOffset?: number;\n collisionPadding?: number;\n avoidCollisions?: boolean;\n /** 刚进入组时延迟多久显示,默认 180ms;组已经打开后切换立即生效。 */\n delayDuration?: number;\n /** 完全离开组内触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n contentClassName?: string;\n}\n\nexport interface TooltipItemProps {\n /** 组内唯一值,用于切换共享 Tooltip。 */\n value: string;\n /** 该项激活时显示在共享 Tooltip 中的内容。 */\n content: ReactNode;\n /** 单个可聚焦交互元素。 */\n children: ReactElement;\n}\n\ninterface TooltipGroupLayerProps extends TooltipPositionOptions {\n activeValue: string;\n content: ReactNode;\n contentClassName?: string;\n contentId: string;\n dismiss: () => void;\n triggerElement: HTMLElement;\n}\n\nfunction TooltipGroupLayer({\n activeValue,\n content,\n contentClassName,\n contentId,\n dismiss,\n triggerElement,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n}: TooltipGroupLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const floatingStyle = {\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n transformOrigin: transformOriginForSide(position?.side ?? side),\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <motion.div\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n layout={!reduceMotion}\n layoutDependency={activeValue}\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\n \"uk-tooltip\",\n \"uk-tooltip__surface\",\n \"uk-tooltip--group\",\n contentClassName,\n )}\n style={floatingStyle}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion\n ? { ...REDUCED_MOTION_TRANSITION, layout: { duration: 0 } }\n : TOOLTIP_GROUP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n <motion.div\n key={activeValue}\n className=\"uk-tooltip__content\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n {content}\n </motion.div>\n </motion.div>\n );\n}\n\n/**\n * 一组共享同一浮动表面的 Tooltip。\n *\n * 首次进入按 delayDuration 显示;已打开后在相邻 Item 间切换会立即更新内容,\n * 并由 Motion layout 连续移动到新触发器的位置。\n */\nfunction TooltipGroup({\n children,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n delayDuration = 180,\n closeDelay = 80,\n contentClassName,\n}: TooltipGroupProps): ReactElement {\n const contentId = useId();\n const [items, setItems] = useState<Map<string, RegisteredTooltipItem>>(\n () => new Map(),\n );\n const [open, setOpen] = useState(false);\n const [activeValue, setActiveValue] = useState<string | null>(null);\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const activate = useEventCallback((value: string, immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n setActiveValue(value);\n\n if (open) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!open) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n const register = useEventCallback(\n (value: string, triggerElement: HTMLElement, content: ReactNode) => {\n setItems((previous) => {\n const existing = previous.get(value);\n\n if (\n existing?.triggerElement === triggerElement &&\n Object.is(existing.content, content)\n ) {\n return previous;\n }\n\n const next = new Map(previous);\n next.set(value, { triggerElement, content });\n return next;\n });\n },\n );\n\n const unregister = useEventCallback((value: string) => {\n setItems((previous) => {\n if (!previous.has(value)) {\n return previous;\n }\n\n const next = new Map(previous);\n next.delete(value);\n return next;\n });\n });\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipGroupContextValue>(\n () => ({\n open,\n activeValue,\n contentId,\n activate,\n requestClose,\n dismiss,\n register,\n unregister,\n }),\n [\n activate,\n activeValue,\n contentId,\n dismiss,\n open,\n register,\n requestClose,\n unregister,\n ],\n );\n const activeItem = activeValue ? items.get(activeValue) : undefined;\n const isOpen = open && Boolean(activeItem);\n const portalContainer =\n isClient && activeItem\n ? (activeItem.triggerElement.closest<HTMLElement>(\"dialog\") ??\n document.body)\n : null;\n\n return (\n <TooltipGroupContext.Provider value={context}>\n {children}\n {portalContainer && activeItem\n ? createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {isOpen ? (\n <TooltipGroupLayer\n key=\"uk-tooltip-group\"\n activeValue={activeValue ?? \"\"}\n content={activeItem.content}\n contentClassName={contentClassName}\n contentId={contentId}\n dismiss={dismiss}\n triggerElement={activeItem.triggerElement}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n avoidCollisions={avoidCollisions}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n )\n : null}\n </TooltipGroupContext.Provider>\n );\n}\n\n/** 注册组内触发器与内容,但不改变触发器的 DOM 结构或交互语义。 */\nfunction TooltipItem({\n value,\n content,\n children,\n}: TooltipItemProps): ReactElement {\n const context = useTooltipGroupContext(\"Tooltip.Item\");\n const { register, unregister } = context;\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Item> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const active = context.open && context.activeValue === value;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n useLayoutEffect(() => {\n if (!triggerElement) {\n return;\n }\n\n register(value, triggerElement, content);\n return () => unregister(value);\n }, [content, register, triggerElement, unregister, value]);\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": active\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.activate(value, event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.activate(value);\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && active) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipComponent {\n Root: typeof TooltipRoot;\n Trigger: typeof TooltipTrigger;\n Content: typeof TooltipContent;\n Group: typeof TooltipGroup;\n Item: typeof TooltipItem;\n}\n\n/**\n * 简短说明性浮层。\n *\n * 组合式 API:单个 Tooltip 使用 Root / Trigger / Content;相邻说明使用\n * Group / Item 共享同一个浮动表面。触发器保留原生语义,Content 只承担\n * role=\"tooltip\";需要交互或较长内容时应使用可见说明或 Popover。\n */\nexport const Tooltip: TooltipComponent = {\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n Group: TooltipGroup,\n Item: TooltipItem,\n};\n"],"names":["cx","values","Button","forwardRef","variant","size","loading","iconOnly","type","className","children","rest","ref","jsxs","Input","inputSize","invalid","ariaInvalid","jsx","EASE_OUT","EASE_IN_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","DISCLOSURE_TRANSITION","TOOLTIP_TRANSITION","TOOLTIP_GROUP_TRANSITION","REDUCED_MOTION_TRANSITION","Switch","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","reduceMotion","useReducedMotion","suppressClickRef","useRef","dragRef","current","setCurrent","useControllableState","thumbX","useMotionValue","useEffect","controls","animate","finishDrag","event","drag","first","last","elapsed","velocity","next","delta","sample","motion","SidebarContext","createContext","useSidebarContext","component","context","useContext","composeHandler","childHandler","handler","SidebarRoot","hoverPreview","hoverIndicator","groupGap","style","hoveredId","setHoveredId","useState","indicatorBaseId","useMemo","groupGapValue","rootStyle","LayoutGroup","SidebarGroup","title","icon","collapsible","open","defaultOpen","onOpenChange","titleId","contentId","triggerId","triggerRef","contentRef","hasIcon","expanded","setExpanded","isOpen","triggerHovered","titleContent","Fragment","value","AnimatePresence","SidebarItem","active","itemId","indicatorTransition","isValidElement","child","childProps","childClassName","mergedClassName","args","childPointerEnter","childPointerLeave","childPointerCancel","hovered","content","cloneElement","Sidebar","TabsContext","useTabsContext","tabId","baseId","panelId","TabsRoot","defaultValue","onValueChange","orientation","setValue","TabsList","onKeyDown","trigger","triggers","index","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","selected","TabsContent","Tabs","DialogContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","useDialogContext","DialogRoot","hasTitle","setHasTitle","hasDescription","setHasDescription","setOpen","DialogTrigger","childOnClick","DialogClose","label","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","isPresent","useIsPresent","useLockBodyScroll","useLayoutEffect","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","useEventCallback","useSyncExternalStore","createPortal","MotionConfig","LegacyDialog","description","footer","closeLabel","showCloseButton","Dialog","TooltipContext","useTooltipContext","setRef","appendDescription","existing","ids","TooltipRoot","delayDuration","closeDelay","triggerElement","setTriggerElement","openTimerRef","closeTimerRef","clearOpenTimer","useCallback","clearCloseTimer","requestOpen","immediate","dismiss","TooltipTrigger","childRef","childFocus","childBlur","childKeyDown","setTriggerRef","element","clamp","min","max","oppositeSide","side","mainAxisRoom","viewportWidth","viewportHeight","padding","fitsOnSide","tooltip","offset","calculateTooltipPosition","align","sideOffset","collisionPadding","avoidCollisions","resolvedSide","opposite","oppositeFits","preferredRoom","oppositeRoom","triggerCenterX","triggerCenterY","x","y","arrowMargin","arrowOffset","useTooltipPosition","floatingRef","position","setPosition","floating","updatePosition","triggerRect","tooltipRect","resizeObserver","useTooltipDismissBehavior","onPointerDown","target","onVisibilityChange","transformOriginForSide","TooltipLayer","transformOrigin","wrapperStyle","TooltipContent","props","portalContainer","TooltipGroupContext","useTooltipGroupContext","TooltipGroupLayer","activeValue","contentClassName","floatingStyle","TooltipGroup","items","setItems","setActiveValue","isClient","activate","register","previous","unregister","activeItem","TooltipItem","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/cx.ts","../src/Button.tsx","../src/Input.tsx","../src/motion.ts","../src/Switch.tsx","../src/Sidebar.tsx","../src/Tabs.tsx","../src/Dialog.tsx","../src/Marquee.tsx","../src/Tooltip.tsx"],"sourcesContent":["/**\n * 拼接 className,忽略 false / null / undefined。\n */\nexport function cx(\n ...values: Array<string | false | null | undefined>\n): string {\n return values.filter(Boolean).join(\" \");\n}\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"outline\"\n | \"ghost\"\n | \"danger\";\n\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** 视觉层级,默认 primary。 */\n variant?: ButtonVariant;\n /** 尺寸,默认 md。 */\n size?: ButtonSize;\n /** 展示加载指示器并禁用点击。 */\n loading?: boolean;\n /** 仅包含图标时使用方形内边距,需自行提供 aria-label。 */\n iconOnly?: boolean;\n children?: ReactNode;\n}\n\n/**\n * 基础按钮。\n *\n * 样式由 data-variant / data-size 驱动,所有原生 button 属性都会透传。\n * loading 时自动设置 disabled 与 aria-busy,避免重复提交。\n */\nexport const Button: ForwardRefExoticComponent<\n ButtonProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n loading = false,\n iconOnly = false,\n type = \"button\",\n className,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n className={cx(\"uk-button\", className)}\n data-variant={variant}\n data-size={size}\n data-loading={loading ? \"true\" : undefined}\n data-icon-only={iconOnly ? \"true\" : undefined}\n disabled={rest.disabled || loading}\n aria-busy={loading || undefined}\n >\n {loading ? (\n <span className=\"uk-button__spinner\" aria-hidden=\"true\" />\n ) : null}\n {children}\n </button>\n );\n});\n","import {\n forwardRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"size\"\n> {\n /** 输入框尺寸,默认 md。原生 size 属性被该字段替代。 */\n inputSize?: InputSize;\n /** 标记校验失败状态,等同于 aria-invalid=\"true\"。 */\n invalid?: boolean;\n}\n\n/**\n * 文本输入框。\n *\n * 只负责样式与校验状态,label、提示文案与错误信息由调用方组合,\n * 这样表单结构可以完全自定义。\n */\nexport const Input: ForwardRefExoticComponent<\n InputProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n inputSize = \"md\",\n invalid = false,\n className,\n \"aria-invalid\": ariaInvalid,\n ...rest\n },\n ref,\n) {\n return (\n <input\n {...rest}\n ref={ref}\n className={cx(\"uk-input\", className)}\n data-size={inputSize}\n aria-invalid={invalid ? true : ariaInvalid}\n />\n );\n});\n","import type { Transition } from \"motion/react\";\n\nexport const EASE_OUT = [0.23, 1, 0.32, 1] as const;\nexport const EASE_IN_OUT = [0.77, 0, 0.175, 1] as const;\n\nexport const UI_SPRING: Transition = {\n type: \"spring\",\n bounce: 0,\n duration: 0.3,\n};\n\nexport const OVERLAY_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.04,\n duration: 0.38,\n};\n\nexport const INDICATOR_SPRING: Transition = {\n type: \"spring\",\n bounce: 0.08,\n duration: 0.34,\n};\n\nexport const DISCLOSURE_TRANSITION: Transition = {\n duration: 0.2,\n ease: EASE_IN_OUT,\n};\n\n/** Frequent explanatory surface: near-immediate presence without spring settle. */\nexport const TOOLTIP_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n\n/**\n * Grouped tooltips move between nearby triggers. The short layout spring keeps\n * spatial continuity without delaying the content switch.\n */\nexport const TOOLTIP_GROUP_TRANSITION: Transition = {\n layout: { type: \"spring\", bounce: 0, duration: 0.22 },\n opacity: { duration: 0.12, ease: EASE_OUT },\n scale: { duration: 0.12, ease: EASE_OUT },\n};\n\nexport const REDUCED_MOTION_TRANSITION: Transition = {\n duration: 0.12,\n ease: EASE_OUT,\n};\n","import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n animate,\n motion,\n useMotionValue,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { UI_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"size\" | \"checked\" | \"defaultChecked\" | \"onChange\"\n> {\n /** 受控选中状态。传入即进入受控模式。 */\n checked?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultChecked?: boolean;\n /** 状态变化回调,受控与非受控都会触发。 */\n onCheckedChange?: (checked: boolean) => void;\n /** 显示在开关右侧的标签文本。 */\n children?: ReactNode;\n}\n\n/**\n * 开关。\n *\n * 底层是原生 checkbox(role=\"switch\"),所以表单提交、键盘操作和\n * 屏幕阅读器语义都是免费的;视觉部分由 track / thumb 两个 span 承担。\n */\nexport const Switch: ForwardRefExoticComponent<\n SwitchProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n disabled,\n className,\n children,\n id,\n ...rest\n },\n ref,\n) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const reduceMotion = useReducedMotion() ?? false;\n const suppressClickRef = useRef(false);\n const dragRef = useRef<{\n pointerId: number;\n startX: number;\n startValue: number;\n moved: boolean;\n samples: Array<{ x: number; time: number }>;\n } | null>(null);\n\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n const thumbX = useMotionValue(current ? 16 : 0);\n\n useEffect(() => {\n if (dragRef.current) {\n return;\n }\n\n const controls = animate(\n thumbX,\n current ? 16 : 0,\n reduceMotion ? { duration: 0 } : UI_SPRING,\n );\n\n return () => controls.stop();\n }, [current, reduceMotion, thumbX]);\n\n const finishDrag = (event: ReactPointerEvent<HTMLSpanElement>) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n if (drag.moved) {\n const first = drag.samples[0];\n const last = drag.samples[drag.samples.length - 1];\n const elapsed = first && last ? Math.max(last.time - first.time, 1) : 1;\n const velocity =\n first && last ? ((last.x - first.x) / elapsed) * 1000 : 0;\n const next = Math.abs(velocity) > 220 ? velocity > 0 : thumbX.get() >= 8;\n\n suppressClickRef.current = true;\n dragRef.current = null;\n setCurrent(next);\n animate(\n thumbX,\n next ? 16 : 0,\n reduceMotion ? { duration: 0 } : { ...UI_SPRING, velocity },\n );\n window.setTimeout(() => {\n suppressClickRef.current = false;\n }, 0);\n } else {\n dragRef.current = null;\n }\n\n if (\n event.currentTarget.hasPointerCapture(event.pointerId) &&\n typeof event.currentTarget.releasePointerCapture === \"function\"\n ) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n };\n\n return (\n <label\n className={cx(\"uk-switch\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n onClickCapture={(event) => {\n if (suppressClickRef.current) {\n event.preventDefault();\n event.stopPropagation();\n }\n }}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n role=\"switch\"\n className=\"uk-switch__input\"\n checked={current}\n disabled={disabled}\n aria-checked={current}\n onChange={(event) => setCurrent(event.target.checked)}\n />\n <span\n className=\"uk-switch__track\"\n aria-hidden=\"true\"\n onPointerDown={(event) => {\n if (disabled) {\n return;\n }\n\n dragRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startValue: thumbX.get(),\n moved: false,\n samples: [{ x: event.clientX, time: performance.now() }],\n };\n if (typeof event.currentTarget.setPointerCapture === \"function\") {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n }}\n onPointerMove={(event) => {\n const drag = dragRef.current;\n\n if (!drag || drag.pointerId !== event.pointerId) {\n return;\n }\n\n const delta = event.clientX - drag.startX;\n if (Math.abs(delta) > 4) {\n drag.moved = true;\n }\n\n if (!drag.moved) {\n return;\n }\n\n event.preventDefault();\n thumbX.set(Math.max(0, Math.min(16, drag.startValue + delta)));\n drag.samples.push({ x: event.clientX, time: performance.now() });\n drag.samples = drag.samples.filter(\n (sample) => performance.now() - sample.time < 120,\n );\n }}\n onPointerUp={finishDrag}\n onPointerCancel={finishDrag}\n >\n <motion.span className=\"uk-switch__thumb\" style={{ x: thumbX }} />\n </span>\n {children ? <span className=\"uk-switch__label\">{children}</span> : null}\n </label>\n );\n});\n","import {\n cloneElement,\n createContext,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n AnimatePresence,\n LayoutGroup,\n motion,\n useReducedMotion,\n} from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { DISCLOSURE_TRANSITION, INDICATOR_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\ninterface SidebarContextValue {\n hoveredId: string | null;\n setHoveredId: (id: string | null) => void;\n indicatorBaseId: string;\n hoverPreview: boolean;\n hoverIndicator: SidebarHoverIndicator;\n}\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nfunction useSidebarContext(component: string): SidebarContextValue {\n const context = useContext(SidebarContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Sidebar>`);\n }\n\n return context;\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n /**\n * 鼠标悬停时是否显示会跟随指针移动的背景预览。\n *\n * @default true\n */\n hoverPreview?: boolean;\n /**\n * 鼠标预览的互斥呈现方式:轨道游标或整行背景。\n *\n * @default \"rail\"\n */\n hoverIndicator?: SidebarHoverIndicator;\n /**\n * 分组之间的垂直间距。数字按 px 处理,也可传入 CSS 长度字符串。\n *\n * @default \"1.5rem\"\n */\n groupGap?: number | string;\n}\n\nexport type SidebarHoverIndicator = \"rail\" | \"background\";\n\nfunction SidebarRoot({\n children,\n className,\n hoverPreview = true,\n hoverIndicator = \"rail\",\n groupGap,\n style,\n ...rest\n}: SidebarProps): ReactElement {\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const indicatorBaseId = useId().replace(/:/g, \"\");\n const context = useMemo<SidebarContextValue>(\n () => ({\n hoveredId,\n setHoveredId,\n indicatorBaseId,\n hoverPreview,\n hoverIndicator,\n }),\n [hoveredId, indicatorBaseId, hoverPreview, hoverIndicator],\n );\n const groupGapValue =\n typeof groupGap === \"number\" ? `${groupGap}px` : groupGap;\n const rootStyle = {\n ...style,\n ...(groupGapValue === undefined\n ? {}\n : { \"--uk-sidebar-group-gap\": groupGapValue }),\n } as CSSProperties;\n\n return (\n <SidebarContext.Provider value={context}>\n <LayoutGroup id={`sidebar-${indicatorBaseId}`}>\n <nav\n {...rest}\n className={cx(\"uk-sidebar\", className)}\n style={rootStyle}\n >\n {children}\n </nav>\n </LayoutGroup>\n </SidebarContext.Provider>\n );\n}\n\nexport interface SidebarGroupProps extends Omit<\n HTMLAttributes<HTMLElement>,\n \"title\"\n> {\n /** 分类名称。 */\n title: ReactNode;\n /** 分类标题前的视觉图标,不作为额外可访问名称。 */\n icon?: ReactNode;\n /** 是否允许用户展开和收起该分组。默认保持展开且不显示触发器。 */\n collapsible?: boolean;\n /** 受控展开状态。 */\n open?: boolean;\n /** 非受控模式下是否默认展开。 */\n defaultOpen?: boolean;\n /** 展开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nfunction SidebarGroup({\n title,\n icon,\n collapsible = false,\n open,\n defaultOpen = true,\n onOpenChange,\n children,\n className,\n ...rest\n}: SidebarGroupProps): ReactElement {\n const titleId = useId();\n const contentId = useId();\n const triggerId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const context = useSidebarContext(\"Sidebar.Group\");\n const hasIcon = icon !== undefined && icon !== null;\n const reduceMotion = useReducedMotion() ?? false;\n const [expanded, setExpanded] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const isOpen = collapsible ? expanded : true;\n const triggerHovered = context.hoveredId === triggerId;\n\n useEffect(() => {\n if (!collapsible || isOpen) {\n return;\n }\n\n if (contentRef.current?.contains(document.activeElement)) {\n triggerRef.current?.focus();\n }\n }, [collapsible, isOpen]);\n\n const titleContent = (\n <>\n {hasIcon ? (\n <span className=\"uk-sidebar__group-icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"uk-sidebar__group-label\">{title}</span>\n {collapsible ? (\n <span className=\"uk-sidebar__chevron\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" width=\"12\" height=\"12\" fill=\"none\">\n <path\n d=\"m6 3.8 4.2 4.2L6 12.2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.35\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : null}\n </>\n );\n\n return (\n <section\n {...rest}\n className={cx(\"uk-sidebar__group\", className)}\n aria-labelledby={rest[\"aria-labelledby\"] ?? titleId}\n data-collapsible={collapsible ? \"true\" : \"false\"}\n data-has-icon={hasIcon ? \"true\" : \"false\"}\n data-state={isOpen ? \"open\" : \"closed\"}\n >\n {collapsible ? (\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"uk-sidebar__group-title uk-sidebar__group-trigger\"\n id={titleId}\n aria-controls={contentId}\n aria-expanded={isOpen}\n data-preview={\n context.hoverIndicator === \"background\" && triggerHovered\n ? \"true\"\n : undefined\n }\n onClick={() => setExpanded((value) => !value)}\n onPointerEnter={(event) => {\n if (\n context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n event.pointerType === \"mouse\"\n ) {\n context.setHoveredId(triggerId);\n }\n }}\n onPointerLeave={() => {\n if (context.hoveredId === triggerId) {\n context.setHoveredId(null);\n }\n }}\n onPointerCancel={() => {\n if (context.hoveredId === triggerId) {\n context.setHoveredId(null);\n }\n }}\n >\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n triggerHovered ? (\n <motion.span\n className=\"uk-sidebar__group-surface\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-highlight\"\n layoutId={`${context.indicatorBaseId}-hover`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={reduceMotion ? { duration: 0 } : INDICATOR_SPRING}\n />\n ) : null}\n </AnimatePresence>\n {titleContent}\n </button>\n ) : (\n <div className=\"uk-sidebar__group-title\" id={titleId}>\n {titleContent}\n </div>\n )}\n <motion.div\n ref={contentRef}\n className=\"uk-sidebar__content\"\n id={contentId}\n data-state={isOpen ? \"open\" : \"closed\"}\n initial={false}\n animate={{\n height: isOpen ? \"auto\" : 0,\n opacity: isOpen ? 1 : 0,\n }}\n transition={reduceMotion ? { duration: 0 } : DISCLOSURE_TRANSITION}\n inert={collapsible && !isOpen}\n aria-hidden={collapsible && !isOpen ? true : undefined}\n >\n <ul className=\"uk-sidebar__list\">{children}</ul>\n </motion.div>\n </section>\n );\n}\n\nexport interface SidebarItemProps {\n /** 当前页面是否对应此链接。 */\n active?: boolean;\n /** 单个原生链接或路由链接元素。 */\n children: ReactElement;\n /** 追加到链接元素的类名。 */\n className?: string;\n}\n\ntype ClassNameValue =\n | string\n | ((args: {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n }) => string | undefined);\n\nfunction SidebarItem({\n active = false,\n children,\n className,\n}: SidebarItemProps): ReactElement {\n const context = useSidebarContext(\"Sidebar.Item\");\n const itemId = useId();\n const reduceMotion = useReducedMotion() ?? false;\n const indicatorTransition = reduceMotion ? { duration: 0 } : INDICATOR_SPRING;\n\n if (!isValidElement(children)) {\n throw new Error(\"<Sidebar.Item> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childClassName = childProps.className as ClassNameValue | undefined;\n const mergedClassName =\n typeof childClassName === \"function\"\n ? (args: {\n isActive: boolean;\n isPending: boolean;\n isTransitioning: boolean;\n }) => cx(\"uk-sidebar__link\", childClassName(args), className)\n : cx(\"uk-sidebar__link\", childClassName, className);\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerCancel = childProps.onPointerCancel as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const hovered = context.hoveredId === itemId;\n\n const content = (\n <>\n <span className=\"uk-sidebar__rail\" aria-hidden=\"true\" />\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"rail\" &&\n hovered ? (\n <motion.span\n className=\"uk-sidebar__rail-indicator\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-rail-indicator\"\n layoutId={`${context.indicatorBaseId}-hover-rail`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverIndicator === \"rail\" && active ? (\n <motion.span\n className=\"uk-sidebar__rail-indicator\"\n data-kind=\"active\"\n data-slot=\"sidebar-active-rail-indicator\"\n layoutId={`${context.indicatorBaseId}-active-rail`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverPreview &&\n context.hoverIndicator === \"background\" &&\n hovered ? (\n <motion.span\n className=\"uk-sidebar__surface\"\n data-kind=\"hover\"\n data-slot=\"sidebar-hover-highlight\"\n layoutId={`${context.indicatorBaseId}-hover`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <AnimatePresence initial={false}>\n {context.hoverIndicator === \"background\" && active ? (\n <motion.span\n className=\"uk-sidebar__surface\"\n data-kind=\"active\"\n data-slot=\"sidebar-active-highlight\"\n layoutId={`${context.indicatorBaseId}-active`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={indicatorTransition}\n />\n ) : null}\n </AnimatePresence>\n <span className=\"uk-sidebar__label\">\n {childProps.children as ReactNode}\n </span>\n </>\n );\n\n return (\n <li className=\"uk-sidebar__item\">\n {cloneElement(\n child,\n {\n className: mergedClassName,\n \"data-active\": active ? \"true\" : \"false\",\n \"data-preview\": active || hovered ? \"true\" : \"false\",\n \"aria-current\":\n childProps[\"aria-current\"] ?? (active ? \"page\" : undefined),\n onPointerEnter: composeHandler(\n childPointerEnter,\n (event: ReactPointerEvent<HTMLElement>) => {\n if (context.hoverPreview && event.pointerType === \"mouse\") {\n context.setHoveredId(itemId);\n }\n },\n ),\n onPointerLeave: composeHandler(childPointerLeave, () => {\n if (context.hoveredId === itemId) {\n context.setHoveredId(null);\n }\n }),\n onPointerCancel: composeHandler(childPointerCancel, () => {\n if (context.hoveredId === itemId) {\n context.setHoveredId(null);\n }\n }),\n },\n content,\n )}\n </li>\n );\n}\n\n/**\n * 分组文档导航。\n *\n * 根节点保持原生 `<nav>`,Group 生成带名称的分组,Item 包装单个链接。\n * hoverIndicator 在轨道游标与共享布局背景之间二选一,hover 和当前项使用\n * 同一种反馈;Group 可按需展开和收起,同时保持链接的 Tab 顺序、焦点、\n * 原生事件和 aria-current 行为。\n */\nexport interface SidebarComponent {\n (props: SidebarProps): ReactElement;\n Group: typeof SidebarGroup;\n Item: typeof SidebarItem;\n}\n\nexport const Sidebar: SidebarComponent = Object.assign(SidebarRoot, {\n Group: SidebarGroup,\n Item: SidebarItem,\n});\n","import {\n createContext,\n forwardRef,\n useContext,\n useId,\n useMemo,\n type ButtonHTMLAttributes,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { INDICATOR_SPRING } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TabsOrientation = \"horizontal\" | \"vertical\";\n\ninterface TabsContextValue {\n baseId: string;\n value: string;\n setValue: (value: string) => void;\n orientation: TabsOrientation;\n indicatorId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(component: string): TabsContextValue {\n const context = useContext(TabsContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tabs>`);\n }\n\n return context;\n}\n\nfunction tabId(baseId: string, value: string) {\n return `${baseId}-tab-${encodeURIComponent(value)}`;\n}\n\nfunction panelId(baseId: string, value: string) {\n return `${baseId}-panel-${encodeURIComponent(value)}`;\n}\n\ninterface TabsBaseProps {\n onValueChange?: (value: string) => void;\n orientation?: TabsOrientation;\n className?: string;\n children: ReactNode;\n}\n\nexport type TabsProps = TabsBaseProps &\n (\n | { value: string; defaultValue?: never }\n | { value?: never; defaultValue: string }\n );\n\nfunction TabsRoot({\n value,\n defaultValue,\n onValueChange,\n orientation = \"horizontal\",\n className,\n children,\n}: TabsProps): ReactElement {\n const baseId = useId();\n const [current, setValue] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? \"\",\n onChange: onValueChange,\n });\n\n const context = useMemo<TabsContextValue>(\n () => ({\n baseId,\n value: current,\n setValue,\n orientation,\n indicatorId: `${baseId}-indicator`,\n }),\n [baseId, current, orientation, setValue],\n );\n\n return (\n <TabsContext.Provider value={context}>\n <div className={cx(\"uk-tabs\", className)} data-orientation={orientation}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport interface TabsListProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nconst TabsList: ForwardRefExoticComponent<\n TabsListProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, onKeyDown, ...rest },\n ref,\n) {\n const { orientation } = useTabsContext(\"Tabs.List\");\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation}\n tabIndex={-1}\n className={cx(\"uk-tabs__list\", className)}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest<HTMLElement>('[role=\"tab\"]');\n\n if (!trigger || trigger.hasAttribute(\"disabled\")) {\n return;\n }\n\n const triggers = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([disabled])',\n ),\n );\n const index = triggers.indexOf(trigger);\n\n if (index === -1) {\n return;\n }\n\n const nextKey =\n orientation === \"horizontal\" ? \"ArrowRight\" : \"ArrowDown\";\n const previousKey =\n orientation === \"horizontal\" ? \"ArrowLeft\" : \"ArrowUp\";\n\n let nextIndex = -1;\n\n switch (event.key) {\n case nextKey:\n nextIndex = (index + 1) % triggers.length;\n break;\n case previousKey:\n nextIndex = (index - 1 + triggers.length) % triggers.length;\n break;\n case \"Home\":\n nextIndex = 0;\n break;\n case \"End\":\n nextIndex = triggers.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n const nextTrigger = triggers[nextIndex];\n\n if (nextTrigger) {\n nextTrigger.focus();\n nextTrigger.click();\n }\n }}\n />\n );\n});\n\nexport interface TabsTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsTrigger: ForwardRefExoticComponent<\n TabsTriggerProps & RefAttributes<HTMLButtonElement>\n> = forwardRef<HTMLButtonElement, TabsTriggerProps>(function TabsTrigger(\n { value, type = \"button\", className, onClick, children, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Trigger\");\n const selected = context.value === value;\n const reduceMotion = useReducedMotion() ?? false;\n\n return (\n <button\n {...rest}\n ref={ref}\n type={type}\n role=\"tab\"\n id={tabId(context.baseId, value)}\n aria-selected={selected}\n aria-controls={panelId(context.baseId, value)}\n tabIndex={selected ? 0 : -1}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__trigger\", className)}\n onClick={(event) => {\n onClick?.(event);\n\n if (!event.defaultPrevented) {\n context.setValue(value);\n }\n }}\n >\n {children}\n {selected ? (\n <motion.span\n className=\"uk-tabs__indicator\"\n layoutId={context.indicatorId}\n aria-hidden=\"true\"\n transition={reduceMotion ? { duration: 0 } : INDICATOR_SPRING}\n />\n ) : null}\n </button>\n );\n});\n\nexport interface TabsContentProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children?: ReactNode;\n}\n\nconst TabsContent: ForwardRefExoticComponent<\n TabsContentProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, TabsContentProps>(function TabsContent(\n { value, className, ...rest },\n ref,\n) {\n const context = useTabsContext(\"Tabs.Content\");\n const selected = context.value === value;\n\n return (\n <div\n {...rest}\n ref={ref}\n role=\"tabpanel\"\n id={panelId(context.baseId, value)}\n aria-labelledby={tabId(context.baseId, value)}\n hidden={!selected}\n tabIndex={0}\n data-state={selected ? \"active\" : \"inactive\"}\n className={cx(\"uk-tabs__panel\", className)}\n />\n );\n});\n\n/**\n * 标签页。\n *\n * 组合式 API:Tabs / Tabs.List / Tabs.Trigger / Tabs.Content。\n * 实现 roving tabindex、方向键循环、Home/End 跳转,并自动生成\n * aria-controls / aria-labelledby 关联。\n */\nexport interface TabsComponent {\n (props: TabsProps): ReactElement;\n List: typeof TabsList;\n Trigger: typeof TabsTrigger;\n Content: typeof TabsContent;\n}\n\nexport const Tabs: TabsComponent = Object.assign(TabsRoot, {\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n});\n","import {\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n type RefObject,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useControllableState,\n useEventCallback,\n useFocusTrap,\n useLockBodyScroll,\n} from \"seam-hooks\";\nimport { Button } from \"./Button\";\nimport { OVERLAY_SPRING, REDUCED_MOTION_TRANSITION } from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport interface DialogProps {\n /** 是否打开。由调用方控制,配合 onOpenChange 使用。 */\n open: boolean;\n /** 打开状态变化时触发,用于同步外部 state。 */\n onOpenChange: (open: boolean) => void;\n title?: ReactNode;\n description?: ReactNode;\n footer?: ReactNode;\n children?: ReactNode;\n /** 关闭按钮的无障碍名称,默认 Close。 */\n closeLabel?: string;\n showCloseButton?: boolean;\n /** 点击遮罩是否关闭,默认 true。 */\n closeOnBackdropClick?: boolean;\n /** 按 Esc 是否关闭,默认 true。 */\n closeOnEscape?: boolean;\n /** 打开后优先聚焦的元素;不传则聚焦第一个可聚焦元素。 */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** 关闭后恢复焦点的元素;默认恢复到打开前的活动元素。 */\n returnFocusRef?: RefObject<HTMLElement | null>;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport interface DialogRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n}\n\ninterface DialogContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerId: string;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n setHasTitle: (hasTitle: boolean) => void;\n hasDescription: boolean;\n setHasDescription: (hasDescription: boolean) => void;\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = useContext(DialogContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Dialog.Root>`);\n }\n\n return context;\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Dialog 状态与语义 ID 的根节点。 */\nfunction DialogRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n}: DialogRootProps): ReactElement {\n const baseId = useId();\n const [hasTitle, setHasTitle] = useState(false);\n const [hasDescription, setHasDescription] = useState(false);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const value = useMemo<DialogContextValue>(\n () => ({\n open: current,\n setOpen,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n titleId: `${baseId}-title`,\n descriptionId: `${baseId}-description`,\n hasTitle,\n setHasTitle,\n hasDescription,\n setHasDescription,\n }),\n [baseId, current, hasDescription, hasTitle, setOpen],\n );\n\n return (\n <DialogContext.Provider value={value}>{children}</DialogContext.Provider>\n );\n}\n\nexport interface DialogTriggerProps {\n children: ReactElement;\n}\n\n/** 包装一个交互元素,同步 dialog 的状态与 ARIA 关联。 */\nfunction DialogTrigger({ children }: DialogTriggerProps): ReactElement {\n const context = useDialogContext(\"Dialog.Trigger\");\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n id: context.triggerId,\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : undefined,\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(!context.open);\n }),\n });\n}\n\nexport interface DialogCloseProps {\n children?: ReactElement;\n label?: string;\n}\n\n/** 包装关闭触发器,或渲染一个默认关闭按钮。 */\nfunction DialogClose({\n children,\n label = \"Close\",\n}: DialogCloseProps): ReactElement {\n const context = useDialogContext(\"Dialog.Close\");\n\n if (isValidElement(children)) {\n const child = children as ReactElement<Record<string, unknown>>;\n const childOnClick = child.props.onClick as\n | ((event: MouseEvent<HTMLElement>) => void)\n | undefined;\n\n return cloneElement(child, {\n onClick: composeHandler(childOnClick, () => {\n context.setOpen(false);\n }),\n });\n }\n\n return (\n <Button variant=\"ghost\" onClick={() => context.setOpen(false)}>\n {label}\n </Button>\n );\n}\n\nexport type DialogHeaderProps = HTMLAttributes<HTMLElement>;\n\nconst DialogHeader: ForwardRefExoticComponent<\n DialogHeaderProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogHeaderProps>(function DialogHeader(\n { className, ...rest },\n ref,\n) {\n return (\n <header\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__header\", className)}\n />\n );\n});\n\nexport type DialogTitleProps = HTMLAttributes<HTMLHeadingElement>;\n\nconst DialogTitle: ForwardRefExoticComponent<\n DialogTitleProps & RefAttributes<HTMLHeadingElement>\n> = forwardRef<HTMLHeadingElement, DialogTitleProps>(function DialogTitle(\n { className, children, ...rest },\n ref,\n) {\n const context = useDialogContext(\"Dialog.Title\");\n const setHasTitle = context.setHasTitle;\n\n useEffect(() => {\n setHasTitle(true);\n return () => setHasTitle(false);\n }, [setHasTitle]);\n\n return (\n <h2\n {...rest}\n ref={ref}\n id={context.titleId}\n className={cx(\"uk-dialog__title\", className)}\n >\n {children}\n </h2>\n );\n});\n\nexport type DialogDescriptionProps = HTMLAttributes<HTMLParagraphElement>;\n\nconst DialogDescription: ForwardRefExoticComponent<\n DialogDescriptionProps & RefAttributes<HTMLParagraphElement>\n> = forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n function DialogDescription({ className, ...rest }, ref) {\n const context = useDialogContext(\"Dialog.Description\");\n const setHasDescription = context.setHasDescription;\n\n useEffect(() => {\n setHasDescription(true);\n return () => setHasDescription(false);\n }, [setHasDescription]);\n\n return (\n <p\n {...rest}\n ref={ref}\n id={context.descriptionId}\n className={cx(\"uk-dialog__description\", className)}\n />\n );\n },\n);\n\nexport type DialogBodyProps = HTMLAttributes<HTMLDivElement>;\n\nconst DialogBody: ForwardRefExoticComponent<\n DialogBodyProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, DialogBodyProps>(function DialogBody(\n { className, ...rest },\n ref,\n) {\n return (\n <div {...rest} ref={ref} className={cx(\"uk-dialog__body\", className)} />\n );\n});\n\nexport type DialogFooterProps = HTMLAttributes<HTMLElement>;\n\nconst DialogFooter: ForwardRefExoticComponent<\n DialogFooterProps & RefAttributes<HTMLElement>\n> = forwardRef<HTMLElement, DialogFooterProps>(function DialogFooter(\n { className, ...rest },\n ref,\n) {\n return (\n <footer\n {...rest}\n ref={ref}\n className={cx(\"uk-dialog__footer\", className)}\n />\n );\n});\n\nexport interface DialogContentProps {\n children?: ReactNode;\n className?: string;\n closeOnBackdropClick?: boolean;\n closeOnEscape?: boolean;\n initialFocusRef?: RefObject<HTMLElement | null>;\n returnFocusRef?: RefObject<HTMLElement | null>;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n}\n\ninterface DialogLayerProps extends DialogContentProps {\n requestClose: () => void;\n contentId: string;\n titleId: string;\n descriptionId: string;\n hasTitle: boolean;\n hasDescription: boolean;\n}\n\nfunction DialogLayer({\n requestClose,\n contentId,\n titleId,\n descriptionId,\n hasTitle,\n hasDescription,\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogLayerProps): ReactElement {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const openerRef = useRef<HTMLElement | null>(null);\n const isPresent = useIsPresent();\n const reduceMotion = useReducedMotion() ?? false;\n\n useLockBodyScroll(true);\n\n useLayoutEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n openerRef.current ??=\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n }, []);\n\n useFocusTrap({\n active: true,\n containerRef: dialogRef,\n initialFocusRef,\n returnFocusRef: returnFocusRef ?? openerRef,\n });\n\n useEffect(() => {\n const dialog = dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n const reopen = () => {\n if (dialog.open) {\n return;\n }\n\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n };\n const onClose = () => {\n if (!closeOnEscape) {\n reopen();\n return;\n }\n\n requestClose();\n };\n const onCancel = (event: Event) => {\n event.preventDefault();\n\n if (closeOnEscape) {\n requestClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (closeOnEscape || event.key !== \"Escape\" || event.defaultPrevented) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n };\n const onClick = (event: globalThis.MouseEvent) => {\n if (closeOnBackdropClick && event.target === dialog) {\n requestClose();\n }\n };\n\n dialog.addEventListener(\"close\", onClose);\n dialog.addEventListener(\"cancel\", onCancel);\n dialog.addEventListener(\"keydown\", onKeyDown, true);\n dialog.addEventListener(\"click\", onClick);\n\n return () => {\n dialog.removeEventListener(\"close\", onClose);\n dialog.removeEventListener(\"cancel\", onCancel);\n dialog.removeEventListener(\"keydown\", onKeyDown, true);\n dialog.removeEventListener(\"click\", onClick);\n };\n }, [closeOnBackdropClick, closeOnEscape, requestClose]);\n\n return (\n <dialog\n ref={dialogRef}\n id={contentId}\n className={cx(\"uk-dialog\", className)}\n closedby={closeOnEscape || closeOnBackdropClick ? \"any\" : \"none\"}\n data-state={isPresent ? \"open\" : \"closed\"}\n inert={!isPresent}\n aria-label={ariaLabel}\n aria-labelledby={\n ariaLabelledBy ??\n (ariaLabel ? undefined : hasTitle ? titleId : undefined)\n }\n aria-describedby={\n ariaDescribedBy ?? (hasDescription ? descriptionId : undefined)\n }\n >\n <motion.div\n className=\"uk-dialog__panel\"\n initial={\n reduceMotion\n ? { opacity: 0 }\n : {\n opacity: 0,\n transform: \"translateY(12px) scale(0.96)\",\n }\n }\n animate={{\n opacity: 1,\n transform: \"translateY(0px) scale(1)\",\n transition: reduceMotion\n ? REDUCED_MOTION_TRANSITION\n : { ...OVERLAY_SPRING, delay: 0.06 },\n }}\n exit={\n reduceMotion\n ? { opacity: 0, transition: REDUCED_MOTION_TRANSITION }\n : {\n opacity: 0,\n transform: \"translateY(8px) scale(0.97)\",\n transition: OVERLAY_SPRING,\n }\n }\n >\n {children}\n </motion.div>\n </dialog>\n );\n}\n\n/** Portal、原生 dialog、焦点与 presence 生命周期的语义层。 */\nfunction DialogContent({\n children,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n}: DialogContentProps): ReactElement | null {\n const context = useDialogContext(\"Dialog.Content\");\n const requestClose = useEventCallback(() => {\n context.setOpen(false);\n });\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n if (!isClient) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <DialogLayer\n key=\"uk-dialog\"\n requestClose={requestClose}\n contentId={context.contentId}\n titleId={context.titleId}\n descriptionId={context.descriptionId}\n hasTitle={context.hasTitle}\n hasDescription={context.hasDescription}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n className={className}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n >\n {children}\n </DialogLayer>\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n document.body,\n );\n}\n\n/** 保持既有 slot API 兼容的便捷封装。 */\nfunction LegacyDialog({\n open,\n onOpenChange,\n title,\n description,\n footer,\n children,\n closeLabel = \"Close\",\n showCloseButton = true,\n closeOnBackdropClick = true,\n closeOnEscape = true,\n initialFocusRef,\n returnFocusRef,\n className,\n \"aria-label\": ariaLabel,\n}: DialogProps): ReactElement {\n return (\n <DialogRoot open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={className}\n closeOnBackdropClick={closeOnBackdropClick}\n closeOnEscape={closeOnEscape}\n initialFocusRef={initialFocusRef}\n returnFocusRef={returnFocusRef}\n aria-label={ariaLabel}\n >\n {title || description || showCloseButton ? (\n <DialogHeader>\n <div className=\"uk-dialog__heading\">\n {title ? <DialogTitle>{title}</DialogTitle> : null}\n {description ? (\n <DialogDescription>{description}</DialogDescription>\n ) : null}\n </div>\n {showCloseButton ? (\n <DialogClose>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label={closeLabel}\n className=\"uk-dialog__close\"\n >\n <svg\n viewBox=\"0 0 20 20\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M5 5l10 10M15 5L5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </Button>\n </DialogClose>\n ) : null}\n </DialogHeader>\n ) : null}\n\n <DialogBody>{children}</DialogBody>\n\n {footer ? <DialogFooter>{footer}</DialogFooter> : null}\n </DialogContent>\n </DialogRoot>\n );\n}\n\nexport interface DialogComponent {\n (props: DialogProps): ReactElement;\n Root: typeof DialogRoot;\n Trigger: typeof DialogTrigger;\n Content: typeof DialogContent;\n Header: typeof DialogHeader;\n Title: typeof DialogTitle;\n Description: typeof DialogDescription;\n Body: typeof DialogBody;\n Footer: typeof DialogFooter;\n Close: typeof DialogClose;\n}\n\n/**\n * 模态对话框。\n *\n * 组合式 API 由 Root / Trigger / Content 和各语义层组成;无子组件的调用\n * 保留既有 title / description / footer slot API。\n */\nexport const Dialog: DialogComponent = Object.assign(LegacyDialog, {\n Root: DialogRoot,\n Trigger: DialogTrigger,\n Content: DialogContent,\n Header: DialogHeader,\n Title: DialogTitle,\n Description: DialogDescription,\n Body: DialogBody,\n Footer: DialogFooter,\n Close: DialogClose,\n});\n","import {\n Children,\n forwardRef,\n type ForwardRefExoticComponent,\n type HTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type MarqueeDirection = \"left\" | \"right\" | \"up\" | \"down\";\n\nexport interface MarqueeProps extends HTMLAttributes<HTMLDivElement> {\n direction?: MarqueeDirection;\n speed?: number;\n pauseOnHover?: boolean;\n gap?: string;\n fade?: boolean;\n}\n\nconst Marquee: ForwardRefExoticComponent<\n MarqueeProps & RefAttributes<HTMLDivElement>\n> = forwardRef<HTMLDivElement, MarqueeProps>(function Marquee(\n {\n children,\n className,\n direction = \"left\",\n speed = 30,\n pauseOnHover = true,\n gap = \"1rem\",\n fade = true,\n ...rest\n },\n ref,\n) {\n const items = Children.toArray(children);\n\n return (\n <div\n {...rest}\n ref={ref}\n className={cx(\"uk-marquee\", className)}\n data-direction={direction}\n data-fade={fade ? \"true\" : undefined}\n data-pause-on-hover={pauseOnHover ? \"true\" : undefined}\n style={{\n ...rest.style,\n [\"--uk-marquee-gap\" as string]: gap,\n [\"--uk-marquee-duration\" as string]: `${speed}s`,\n gap,\n }}\n >\n {[false, true].map((duplicate) => (\n <div\n key={duplicate ? \"duplicate\" : \"primary\"}\n aria-hidden={duplicate}\n className=\"uk-marquee__track\"\n data-duplicate={duplicate ? \"true\" : undefined}\n inert={duplicate}\n >\n {items.map((item, index) => (\n <div className=\"uk-marquee__item\" key={index}>\n {item}\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n});\n\nexport { Marquee };\n","import {\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport {\n AnimatePresence,\n motion,\n MotionConfig,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useControllableState, useEventCallback } from \"seam-hooks\";\nimport {\n REDUCED_MOTION_TRANSITION,\n TOOLTIP_GROUP_TRANSITION,\n TOOLTIP_TRANSITION,\n} from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type TooltipSide = \"top\" | \"right\" | \"bottom\" | \"left\";\nexport type TooltipAlign = \"start\" | \"center\" | \"end\";\n\nexport interface TooltipRootProps {\n children: ReactNode;\n /** 受控打开状态。 */\n open?: boolean;\n /** 非受控模式下的初始打开状态。 */\n defaultOpen?: boolean;\n /** 打开状态变化时触发。 */\n onOpenChange?: (open: boolean) => void;\n /** 指针停留或聚焦多久后显示,默认 300ms。 */\n delayDuration?: number;\n /** 离开触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n}\n\ninterface TooltipContextValue {\n open: boolean;\n triggerElement: HTMLElement | null;\n setTriggerElement: (element: HTMLElement | null) => void;\n contentId: string;\n requestOpen: (immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null);\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\n\nfunction useTooltipContext(component: string): TooltipContextValue {\n const context = useContext(TooltipContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Root>`);\n }\n\n return context;\n}\n\nfunction setRef<T>(ref: Ref<T> | undefined, value: T | null) {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n (ref as { current: T | null }).current = value;\n }\n}\n\nfunction appendDescription(existing: unknown, id: string): string {\n const ids =\n typeof existing === \"string\" ? existing.split(/\\s+/).filter(Boolean) : [];\n\n return Array.from(new Set([...ids, id])).join(\" \");\n}\n\nfunction composeHandler<T extends { defaultPrevented: boolean }>(\n childHandler: ((event: T) => void) | undefined,\n handler: (event: T) => void,\n) {\n return (event: T) => {\n childHandler?.(event);\n\n if (!event.defaultPrevented) {\n handler(event);\n }\n };\n}\n\n/** Tooltip 的状态、计时器与语义 ID 根节点。 */\nfunction TooltipRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration = 300,\n closeDelay = 80,\n}: TooltipRootProps): ReactElement {\n const contentId = useId();\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [current, setOpen] = useControllableState<boolean>({\n value: open,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const requestOpen = useEventCallback((immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (current) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!current) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n useEffect(() => {\n if (current) {\n clearCloseTimer();\n } else {\n clearOpenTimer();\n }\n }, [clearCloseTimer, clearOpenTimer, current]);\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipContextValue>(\n () => ({\n open: current,\n triggerElement,\n setTriggerElement,\n contentId,\n requestOpen,\n requestClose,\n dismiss,\n }),\n [contentId, current, dismiss, requestClose, requestOpen, triggerElement],\n );\n\n return (\n <TooltipContext.Provider value={context}>\n {children}\n </TooltipContext.Provider>\n );\n}\n\nexport interface TooltipTriggerProps {\n /** 单个可聚焦的交互元素;事件和 ref 会与调用方传入的值合并。 */\n children: ReactElement;\n}\n\n/** 为原生交互元素补充 hover、focus、Escape 与 aria-describedby。 */\nfunction TooltipTrigger({ children }: TooltipTriggerProps): ReactElement {\n const context = useTooltipContext(\"Tooltip.Trigger\");\n const { setTriggerElement } = context;\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Trigger> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": context.open\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.requestOpen(event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.requestOpen();\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && context.open) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipContentProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"id\" | \"role\"\n> {\n children?: ReactNode;\n /** 首选方向,空间不足时自动翻转。 */\n side?: TooltipSide;\n /** 沿首选方向与触发器的对齐方式。 */\n align?: TooltipAlign;\n /** 与触发器之间的间距,默认 8px。 */\n sideOffset?: number;\n /** 与视口边缘的最小间距,默认 8px。 */\n collisionPadding?: number;\n /** 是否根据视口空间翻转和避让,默认 true。 */\n avoidCollisions?: boolean;\n}\n\ninterface Rectangle {\n top: number;\n right: number;\n bottom: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface TooltipPosition {\n x: number;\n y: number;\n side: TooltipSide;\n arrowOffset: number;\n}\n\nfunction clamp(value: number, min: number, max: number) {\n if (max < min) {\n return min;\n }\n\n return Math.min(Math.max(value, min), max);\n}\n\nfunction oppositeSide(side: TooltipSide): TooltipSide {\n switch (side) {\n case \"top\":\n return \"bottom\";\n case \"right\":\n return \"left\";\n case \"bottom\":\n return \"top\";\n case \"left\":\n return \"right\";\n }\n}\n\nfunction mainAxisRoom(\n trigger: Rectangle,\n side: TooltipSide,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n switch (side) {\n case \"top\":\n return trigger.top - padding;\n case \"right\":\n return viewportWidth - trigger.right - padding;\n case \"bottom\":\n return viewportHeight - trigger.bottom - padding;\n case \"left\":\n return trigger.left - padding;\n }\n}\n\nfunction fitsOnSide(\n trigger: Rectangle,\n tooltip: Rectangle,\n side: TooltipSide,\n offset: number,\n viewportWidth: number,\n viewportHeight: number,\n padding: number,\n) {\n const room = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n padding,\n );\n\n return (\n room >=\n (side === \"top\" || side === \"bottom\" ? tooltip.height : tooltip.width) +\n offset\n );\n}\n\nexport function calculateTooltipPosition({\n trigger,\n tooltip,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth,\n viewportHeight,\n}: {\n trigger: Rectangle;\n tooltip: Rectangle;\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n viewportWidth: number;\n viewportHeight: number;\n}): TooltipPosition {\n let resolvedSide = side;\n\n if (\n avoidCollisions &&\n !fitsOnSide(\n trigger,\n tooltip,\n side,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n )\n ) {\n const opposite = oppositeSide(side);\n const oppositeFits = fitsOnSide(\n trigger,\n tooltip,\n opposite,\n sideOffset,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const preferredRoom = mainAxisRoom(\n trigger,\n side,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n const oppositeRoom = mainAxisRoom(\n trigger,\n opposite,\n viewportWidth,\n viewportHeight,\n collisionPadding,\n );\n\n if (oppositeFits || oppositeRoom > preferredRoom) {\n resolvedSide = opposite;\n }\n }\n\n const triggerCenterX = trigger.left + trigger.width / 2;\n const triggerCenterY = trigger.top + trigger.height / 2;\n let x = 0;\n let y = 0;\n\n switch (resolvedSide) {\n case \"top\":\n case \"bottom\":\n x =\n align === \"start\"\n ? trigger.left\n : align === \"end\"\n ? trigger.right - tooltip.width\n : triggerCenterX - tooltip.width / 2;\n y =\n resolvedSide === \"top\"\n ? trigger.top - tooltip.height - sideOffset\n : trigger.bottom + sideOffset;\n break;\n case \"left\":\n case \"right\":\n x =\n resolvedSide === \"left\"\n ? trigger.left - tooltip.width - sideOffset\n : trigger.right + sideOffset;\n y =\n align === \"start\"\n ? trigger.top\n : align === \"end\"\n ? trigger.bottom - tooltip.height\n : triggerCenterY - tooltip.height / 2;\n break;\n }\n\n if (avoidCollisions) {\n x = clamp(\n x,\n collisionPadding,\n viewportWidth - tooltip.width - collisionPadding,\n );\n y = clamp(\n y,\n collisionPadding,\n viewportHeight - tooltip.height - collisionPadding,\n );\n }\n\n const arrowMargin = 10;\n const arrowOffset =\n resolvedSide === \"top\" || resolvedSide === \"bottom\"\n ? clamp(\n triggerCenterX - x,\n arrowMargin,\n Math.max(arrowMargin, tooltip.width - arrowMargin),\n )\n : clamp(\n triggerCenterY - y,\n arrowMargin,\n Math.max(arrowMargin, tooltip.height - arrowMargin),\n );\n\n return { x, y, side: resolvedSide, arrowOffset };\n}\n\ninterface TooltipLayerProps extends TooltipContentProps {\n contentId: string;\n triggerElement: HTMLElement;\n dismiss: () => void;\n}\n\ninterface TooltipPositionOptions {\n side: TooltipSide;\n align: TooltipAlign;\n sideOffset: number;\n collisionPadding: number;\n avoidCollisions: boolean;\n}\n\nfunction useTooltipPosition(\n triggerElement: HTMLElement | null,\n floatingRef: { current: HTMLDivElement | null },\n {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n }: TooltipPositionOptions,\n): TooltipPosition | null {\n const [position, setPosition] = useState<TooltipPosition | null>(null);\n\n useLayoutEffect(() => {\n const floating = floatingRef.current;\n\n if (!floating || !triggerElement) {\n return;\n }\n\n const updatePosition = () => {\n const triggerRect = triggerElement.getBoundingClientRect();\n const tooltipRect = floating.getBoundingClientRect();\n\n setPosition(\n calculateTooltipPosition({\n trigger: triggerRect,\n tooltip: tooltipRect,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n viewportWidth:\n window.innerWidth || document.documentElement.clientWidth,\n viewportHeight:\n window.innerHeight || document.documentElement.clientHeight,\n }),\n );\n };\n\n updatePosition();\n window.addEventListener(\"resize\", updatePosition);\n window.addEventListener(\"scroll\", updatePosition, true);\n\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(updatePosition);\n resizeObserver?.observe(triggerElement);\n resizeObserver?.observe(floating);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n resizeObserver?.disconnect();\n };\n }, [\n align,\n avoidCollisions,\n collisionPadding,\n floatingRef,\n side,\n sideOffset,\n triggerElement,\n ]);\n\n return position;\n}\n\nfunction useTooltipDismissBehavior(\n triggerElement: HTMLElement,\n floatingRef: { current: HTMLDivElement | null },\n dismiss: () => void,\n) {\n useEffect(() => {\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n if (\n triggerElement.contains(target) ||\n floatingRef.current?.contains(target)\n ) {\n return;\n }\n\n dismiss();\n };\n const onVisibilityChange = () => {\n if (document.visibilityState === \"hidden\") {\n dismiss();\n }\n };\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n const target = event.target;\n\n if (\n event.key !== \"Escape\" ||\n (target instanceof Node && triggerElement.contains(target))\n ) {\n return;\n }\n\n dismiss();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n document.addEventListener(\"keydown\", onKeyDown, true);\n window.addEventListener(\"blur\", dismiss);\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n window.removeEventListener(\"blur\", dismiss);\n };\n }, [dismiss, floatingRef, triggerElement]);\n}\n\nfunction transformOriginForSide(\n side: TooltipSide | undefined,\n): CSSProperties[\"transformOrigin\"] {\n switch (side) {\n case \"top\":\n return \"center bottom\";\n case \"bottom\":\n return \"center top\";\n case \"left\":\n return \"right center\";\n case \"right\":\n return \"left center\";\n default:\n return \"center\";\n }\n}\n\nfunction TooltipLayer({\n contentId,\n triggerElement,\n dismiss,\n children,\n className,\n style,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n ...rest\n}: TooltipLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const transformOrigin = transformOriginForSide(position?.side ?? side);\n const wrapperStyle = {\n ...style,\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <div\n {...rest}\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\"uk-tooltip\", className)}\n style={wrapperStyle}\n >\n <motion.div\n className=\"uk-tooltip__surface\"\n style={{ transformOrigin }}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n {children}\n </motion.div>\n </div>\n );\n}\n\n/** Portal 并管理 Tooltip 的测量、定位、presence 与退出生命周期。 */\nfunction TooltipContent(props: TooltipContentProps): ReactElement | null {\n const context = useTooltipContext(\"Tooltip.Content\");\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n const portalContainer =\n isClient && context.triggerElement\n ? (context.triggerElement.closest<HTMLElement>(\"dialog\") ?? document.body)\n : null;\n\n if (!portalContainer || !context.triggerElement) {\n return null;\n }\n\n return createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {context.open ? (\n <TooltipLayer\n key=\"uk-tooltip\"\n contentId={context.contentId}\n triggerElement={context.triggerElement}\n dismiss={context.dismiss}\n {...props}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n );\n}\n\ninterface RegisteredTooltipItem {\n triggerElement: HTMLElement;\n content: ReactNode;\n}\n\ninterface TooltipGroupContextValue {\n open: boolean;\n activeValue: string | null;\n contentId: string;\n activate: (value: string, immediate?: boolean) => void;\n requestClose: () => void;\n dismiss: () => void;\n register: (\n value: string,\n triggerElement: HTMLElement,\n content: ReactNode,\n ) => void;\n unregister: (value: string) => void;\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(\n null,\n);\n\nfunction useTooltipGroupContext(component: string): TooltipGroupContextValue {\n const context = useContext(TooltipGroupContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Tooltip.Group>`);\n }\n\n return context;\n}\n\nexport interface TooltipGroupProps {\n children: ReactNode;\n /** 组内所有 Tooltip 共用的方向。 */\n side?: TooltipSide;\n /** 组内所有 Tooltip 共用的对齐方式。 */\n align?: TooltipAlign;\n sideOffset?: number;\n collisionPadding?: number;\n avoidCollisions?: boolean;\n /** 刚进入组时延迟多久显示,默认 180ms;组已经打开后切换立即生效。 */\n delayDuration?: number;\n /** 完全离开组内触发器后多久关闭,默认 80ms。 */\n closeDelay?: number;\n contentClassName?: string;\n}\n\nexport interface TooltipItemProps {\n /** 组内唯一值,用于切换共享 Tooltip。 */\n value: string;\n /** 该项激活时显示在共享 Tooltip 中的内容。 */\n content: ReactNode;\n /** 单个可聚焦交互元素。 */\n children: ReactElement;\n}\n\ninterface TooltipGroupLayerProps extends TooltipPositionOptions {\n activeValue: string;\n content: ReactNode;\n contentClassName?: string;\n contentId: string;\n dismiss: () => void;\n triggerElement: HTMLElement;\n}\n\nfunction TooltipGroupLayer({\n activeValue,\n content,\n contentClassName,\n contentId,\n dismiss,\n triggerElement,\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n}: TooltipGroupLayerProps): ReactElement {\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useTooltipPosition(triggerElement, floatingRef, {\n side,\n align,\n sideOffset,\n collisionPadding,\n avoidCollisions,\n });\n useTooltipDismissBehavior(triggerElement, floatingRef, dismiss);\n\n const floatingStyle = {\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n transformOrigin: transformOriginForSide(position?.side ?? side),\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties;\n\n return (\n <motion.div\n ref={floatingRef}\n id={contentId}\n role=\"tooltip\"\n layout={!reduceMotion}\n layoutDependency={activeValue}\n data-side={position?.side ?? side}\n data-align={align}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n className={cx(\n \"uk-tooltip\",\n \"uk-tooltip__surface\",\n \"uk-tooltip--group\",\n contentClassName,\n )}\n style={floatingStyle}\n initial={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.96 }}\n transition={\n reduceMotion\n ? { ...REDUCED_MOTION_TRANSITION, layout: { duration: 0 } }\n : TOOLTIP_GROUP_TRANSITION\n }\n >\n <span\n className=\"uk-tooltip__arrow\"\n aria-hidden=\"true\"\n style={\n {\n \"--uk-tooltip-arrow-offset\": `${position?.arrowOffset ?? 0}px`,\n } as CSSProperties\n }\n />\n <motion.div\n key={activeValue}\n className=\"uk-tooltip__content\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : TOOLTIP_TRANSITION\n }\n >\n {content}\n </motion.div>\n </motion.div>\n );\n}\n\n/**\n * 一组共享同一浮动表面的 Tooltip。\n *\n * 首次进入按 delayDuration 显示;已打开后在相邻 Item 间切换会立即更新内容,\n * 并由 Motion layout 连续移动到新触发器的位置。\n */\nfunction TooltipGroup({\n children,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n collisionPadding = 8,\n avoidCollisions = true,\n delayDuration = 180,\n closeDelay = 80,\n contentClassName,\n}: TooltipGroupProps): ReactElement {\n const contentId = useId();\n const [items, setItems] = useState<Map<string, RegisteredTooltipItem>>(\n () => new Map(),\n );\n const [open, setOpen] = useState(false);\n const [activeValue, setActiveValue] = useState<string | null>(null);\n const openTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n const clearOpenTimer = useCallback(() => {\n if (openTimerRef.current !== null) {\n clearTimeout(openTimerRef.current);\n openTimerRef.current = null;\n }\n }, []);\n\n const clearCloseTimer = useCallback(() => {\n if (closeTimerRef.current !== null) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n }, []);\n\n const activate = useEventCallback((value: string, immediate = false) => {\n clearOpenTimer();\n clearCloseTimer();\n setActiveValue(value);\n\n if (open) {\n return;\n }\n\n if (immediate || delayDuration <= 0) {\n setOpen(true);\n return;\n }\n\n openTimerRef.current = setTimeout(() => {\n openTimerRef.current = null;\n setOpen(true);\n }, delayDuration);\n });\n\n const requestClose = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n\n if (!open) {\n return;\n }\n\n if (closeDelay <= 0) {\n setOpen(false);\n return;\n }\n\n closeTimerRef.current = setTimeout(() => {\n closeTimerRef.current = null;\n setOpen(false);\n }, closeDelay);\n });\n\n const dismiss = useEventCallback(() => {\n clearOpenTimer();\n clearCloseTimer();\n setOpen(false);\n });\n\n const register = useEventCallback(\n (value: string, triggerElement: HTMLElement, content: ReactNode) => {\n setItems((previous) => {\n const existing = previous.get(value);\n\n if (\n existing?.triggerElement === triggerElement &&\n Object.is(existing.content, content)\n ) {\n return previous;\n }\n\n const next = new Map(previous);\n next.set(value, { triggerElement, content });\n return next;\n });\n },\n );\n\n const unregister = useEventCallback((value: string) => {\n setItems((previous) => {\n if (!previous.has(value)) {\n return previous;\n }\n\n const next = new Map(previous);\n next.delete(value);\n return next;\n });\n });\n\n useEffect(\n () => () => {\n clearOpenTimer();\n clearCloseTimer();\n },\n [clearCloseTimer, clearOpenTimer],\n );\n\n const context = useMemo<TooltipGroupContextValue>(\n () => ({\n open,\n activeValue,\n contentId,\n activate,\n requestClose,\n dismiss,\n register,\n unregister,\n }),\n [\n activate,\n activeValue,\n contentId,\n dismiss,\n open,\n register,\n requestClose,\n unregister,\n ],\n );\n const activeItem = activeValue ? items.get(activeValue) : undefined;\n const isOpen = open && Boolean(activeItem);\n const portalContainer =\n isClient && activeItem\n ? (activeItem.triggerElement.closest<HTMLElement>(\"dialog\") ??\n document.body)\n : null;\n\n return (\n <TooltipGroupContext.Provider value={context}>\n {children}\n {portalContainer && activeItem\n ? createPortal(\n <MotionConfig reducedMotion=\"user\">\n <AnimatePresence>\n {isOpen ? (\n <TooltipGroupLayer\n key=\"uk-tooltip-group\"\n activeValue={activeValue ?? \"\"}\n content={activeItem.content}\n contentClassName={contentClassName}\n contentId={contentId}\n dismiss={dismiss}\n triggerElement={activeItem.triggerElement}\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n avoidCollisions={avoidCollisions}\n />\n ) : null}\n </AnimatePresence>\n </MotionConfig>,\n portalContainer,\n )\n : null}\n </TooltipGroupContext.Provider>\n );\n}\n\n/** 注册组内触发器与内容,但不改变触发器的 DOM 结构或交互语义。 */\nfunction TooltipItem({\n value,\n content,\n children,\n}: TooltipItemProps): ReactElement {\n const context = useTooltipGroupContext(\"Tooltip.Item\");\n const { register, unregister } = context;\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\n null,\n );\n\n if (!isValidElement(children)) {\n throw new Error(\"<Tooltip.Item> expects a single valid React element\");\n }\n\n const child = children as ReactElement<Record<string, unknown>>;\n const childProps = child.props;\n const childRef =\n (childProps.ref as Ref<HTMLElement> | undefined) ??\n (child as unknown as { ref?: Ref<HTMLElement> }).ref;\n const childPointerEnter = childProps.onPointerEnter as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childPointerLeave = childProps.onPointerLeave as\n | ((event: ReactPointerEvent<HTMLElement>) => void)\n | undefined;\n const childFocus = childProps.onFocus as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childBlur = childProps.onBlur as\n | ((event: FocusEvent<HTMLElement>) => void)\n | undefined;\n const childKeyDown = childProps.onKeyDown as\n | ((event: KeyboardEvent<HTMLElement>) => void)\n | undefined;\n const active = context.open && context.activeValue === value;\n const setTriggerRef = useCallback(\n (element: HTMLElement | null) => {\n setRef(childRef, element);\n setTriggerElement(element);\n },\n [childRef, setTriggerElement],\n );\n\n useLayoutEffect(() => {\n if (!triggerElement) {\n return;\n }\n\n register(value, triggerElement, content);\n return () => unregister(value);\n }, [content, register, triggerElement, unregister, value]);\n\n return cloneElement(child, {\n ref: setTriggerRef,\n \"aria-describedby\": active\n ? appendDescription(childProps[\"aria-describedby\"], context.contentId)\n : childProps[\"aria-describedby\"],\n onPointerEnter: composeHandler(childPointerEnter, (event) => {\n context.activate(value, event.pointerType === \"touch\");\n }),\n onPointerLeave: composeHandler(childPointerLeave, (event) => {\n if (event.pointerType !== \"touch\") {\n context.requestClose();\n }\n }),\n onFocus: composeHandler(childFocus, () => {\n context.activate(value);\n }),\n onBlur: composeHandler(childBlur, () => {\n context.requestClose();\n }),\n onKeyDown: composeHandler(childKeyDown, (event) => {\n if (event.key === \"Escape\" && active) {\n event.preventDefault();\n event.stopPropagation();\n context.dismiss();\n }\n }),\n });\n}\n\nexport interface TooltipComponent {\n Root: typeof TooltipRoot;\n Trigger: typeof TooltipTrigger;\n Content: typeof TooltipContent;\n Group: typeof TooltipGroup;\n Item: typeof TooltipItem;\n}\n\n/**\n * 简短说明性浮层。\n *\n * 组合式 API:单个 Tooltip 使用 Root / Trigger / Content;相邻说明使用\n * Group / Item 共享同一个浮动表面。触发器保留原生语义,Content 只承担\n * role=\"tooltip\";需要交互或较长内容时应使用可见说明或 Popover。\n */\nexport const Tooltip: TooltipComponent = {\n Root: TooltipRoot,\n Trigger: TooltipTrigger,\n Content: TooltipContent,\n Group: TooltipGroup,\n Item: TooltipItem,\n};\n"],"names":["cx","values","Button","forwardRef","variant","size","loading","iconOnly","type","className","children","rest","ref","jsxs","Input","inputSize","invalid","ariaInvalid","jsx","EASE_OUT","EASE_IN_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","DISCLOSURE_TRANSITION","TOOLTIP_TRANSITION","TOOLTIP_GROUP_TRANSITION","REDUCED_MOTION_TRANSITION","Switch","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","reduceMotion","useReducedMotion","suppressClickRef","useRef","dragRef","current","setCurrent","useControllableState","thumbX","useMotionValue","useEffect","controls","animate","finishDrag","event","drag","first","last","elapsed","velocity","next","delta","sample","motion","SidebarContext","createContext","useSidebarContext","component","context","useContext","composeHandler","childHandler","handler","SidebarRoot","hoverPreview","hoverIndicator","groupGap","style","hoveredId","setHoveredId","useState","indicatorBaseId","useMemo","groupGapValue","rootStyle","LayoutGroup","SidebarGroup","title","icon","collapsible","open","defaultOpen","onOpenChange","titleId","contentId","triggerId","triggerRef","contentRef","hasIcon","expanded","setExpanded","isOpen","triggerHovered","titleContent","Fragment","value","AnimatePresence","SidebarItem","active","itemId","indicatorTransition","isValidElement","child","childProps","childClassName","mergedClassName","args","childPointerEnter","childPointerLeave","childPointerCancel","hovered","content","cloneElement","Sidebar","TabsContext","useTabsContext","tabId","baseId","panelId","TabsRoot","defaultValue","onValueChange","orientation","setValue","TabsList","onKeyDown","trigger","triggers","index","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","selected","TabsContent","Tabs","DialogContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","useDialogContext","DialogRoot","hasTitle","setHasTitle","hasDescription","setHasDescription","setOpen","DialogTrigger","childOnClick","DialogClose","label","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","isPresent","useIsPresent","useLockBodyScroll","useLayoutEffect","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","useEventCallback","useSyncExternalStore","createPortal","MotionConfig","LegacyDialog","description","footer","closeLabel","showCloseButton","Dialog","Marquee","direction","speed","pauseOnHover","gap","fade","items","Children","duplicate","item","TooltipContext","useTooltipContext","setRef","appendDescription","existing","ids","TooltipRoot","delayDuration","closeDelay","triggerElement","setTriggerElement","openTimerRef","closeTimerRef","clearOpenTimer","useCallback","clearCloseTimer","requestOpen","immediate","dismiss","TooltipTrigger","childRef","childFocus","childBlur","childKeyDown","setTriggerRef","element","clamp","min","max","oppositeSide","side","mainAxisRoom","viewportWidth","viewportHeight","padding","fitsOnSide","tooltip","offset","calculateTooltipPosition","align","sideOffset","collisionPadding","avoidCollisions","resolvedSide","opposite","oppositeFits","preferredRoom","oppositeRoom","triggerCenterX","triggerCenterY","x","y","arrowMargin","arrowOffset","useTooltipPosition","floatingRef","position","setPosition","floating","updatePosition","triggerRect","tooltipRect","resizeObserver","useTooltipDismissBehavior","onPointerDown","target","onVisibilityChange","transformOriginForSide","TooltipLayer","transformOrigin","wrapperStyle","TooltipContent","props","portalContainer","TooltipGroupContext","useTooltipGroupContext","TooltipGroupLayer","activeValue","contentClassName","floatingStyle","TooltipGroup","setItems","setActiveValue","isClient","activate","register","previous","unregister","activeItem","TooltipItem","Tooltip"],"mappings":"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"}