seam-react 0.9.0 → 0.9.1

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/CheckBox.tsx","../src/motion.ts","../src/Select.tsx","../src/Input.tsx","../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 useId,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { cx } from \"./utils/cx\";\n\nexport interface CheckBoxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"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 的表单、键盘和读屏语义;方框内的对勾用 SVG 描边\n * 展示状态转换,按压时的轻微缩放提供即时的触觉反馈。\n */\nexport const CheckBox: ForwardRefExoticComponent<\n CheckBoxProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, CheckBoxProps>(function CheckBox(\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\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n\n return (\n <label\n className={cx(\"uk-checkbox\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className=\"uk-checkbox__input\"\n checked={current}\n disabled={disabled}\n onChange={(event) => {\n if (disabled) {\n return;\n }\n\n setCurrent(event.target.checked);\n }}\n />\n <span className=\"uk-checkbox__box\" aria-hidden=\"true\">\n <svg\n className=\"uk-checkbox__check\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3.2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 12.5 L9.5 18 L20 7\" pathLength={1} />\n </svg>\n </span>\n {children ? <span className=\"uk-checkbox__label\">{children}</span> : null}\n </label>\n );\n});\n\nCheckBox.displayName = \"CheckBox\";\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/**\n * Select tags are occasional state indicators. A short re-targeting move\n * keeps the selected queue readable without delaying repeated choices.\n */\nexport const TAG_TRANSITION: Transition = {\n layout: { duration: 0.16, ease: EASE_IN_OUT },\n opacity: { duration: 0.16, ease: EASE_OUT },\n x: { duration: 0.16, 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 createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n AnimatePresence,\n LayoutGroup,\n motion,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useControllableState, useEventCallback } from \"seam-hooks\";\nimport {\n DISCLOSURE_TRANSITION,\n INDICATOR_SPRING,\n REDUCED_MOTION_TRANSITION,\n TAG_TRANSITION,\n} from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectOption {\n /** 提交给 onValueChange 的稳定值。 */\n value: string;\n /** 展示内容;缺省时渲染 value。 */\n label?: ReactNode;\n /** 是否禁止选择该项。 */\n disabled?: boolean;\n}\n\ninterface SelectBaseProps extends Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"value\" | \"onChange\" | \"aria-expanded\" | \"defaultValue\"\n> {\n /** 可选项;label 用于展示,value 用于提交。 */\n options: Array<SelectOption>;\n /** 未选择时的展示文本。 */\n placeholder?: string;\n /** 控件尺寸。 */\n size?: SelectSize;\n /** 是否禁用整个控件。 */\n disabled?: boolean;\n /** 列表为空时的提示文本。 */\n emptyText?: string;\n /** 标记选择值无效,使用共享 invalid 样式。 */\n invalid?: boolean;\n /** 是否显示一键清空按钮。 */\n clear?: boolean;\n}\n\nexport interface SelectSingleProps extends SelectBaseProps {\n multiple?: false;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n}\n\nexport interface SelectMultipleProps extends SelectBaseProps {\n multiple: true;\n value?: ReadonlyArray<string>;\n defaultValue?: ReadonlyArray<string>;\n onValueChange?: (value: Array<string>) => void;\n}\n\nexport type SelectProps<Multiple extends boolean = false> = SelectBaseProps &\n (Multiple extends true\n ? {\n multiple: true;\n value?: ReadonlyArray<string>;\n defaultValue?: ReadonlyArray<string>;\n onValueChange?: (value: Array<string>) => void;\n }\n : {\n multiple?: false;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n });\n\ninterface SelectContextValue {\n values: Array<string>;\n multiple: boolean;\n activeIndex: number;\n open: boolean;\n setOpen: (open: boolean) => void;\n setActiveIndex: (index: number) => void;\n commit: (index: number) => void;\n removeValue: (value: string) => void;\n clearValues: () => void;\n triggerId: string;\n contentId: string;\n options: Array<SelectOption>;\n}\n\nconst SelectContext = createContext<SelectContextValue | null>(null);\n\nfunction useSelectContext(component: string): SelectContextValue {\n const context = useContext(SelectContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Select>`);\n }\n\n return context;\n}\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\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\ninterface SelectPosition {\n x: number;\n y: number;\n side: \"top\" | \"bottom\";\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 normalizeSelectValues(\n value: string | ReadonlyArray<string> | null | undefined,\n multiple: boolean,\n) {\n const rawValues = multiple ? (value ?? []) : value == null ? [] : [value];\n\n return Array.from(new Set(rawValues as ReadonlyArray<string>));\n}\n\nfunction transformOrigin(\n side: SelectPosition[\"side\"],\n): CSSProperties[\"transformOrigin\"] {\n return side === \"bottom\" ? \"center top\" : \"center bottom\";\n}\n\n/** Select 的状态、键盘语义与选项查找根节点。 */\nfunction SelectRoot({\n options,\n value,\n defaultValue = null,\n onValueChange,\n multiple = false,\n children,\n}: {\n options: Array<SelectOption>;\n value?: string | ReadonlyArray<string> | null;\n defaultValue?: string | ReadonlyArray<string> | null;\n onValueChange?: (value: string | Array<string>) => void;\n multiple?: boolean;\n children: ReactNode;\n}): ReactElement {\n const baseId = useId();\n const normalizedValue = normalizeSelectValues(value, multiple);\n const normalizedDefaultValue = normalizeSelectValues(defaultValue, multiple);\n const [values, setSelectedValues] = useControllableState<Array<string>>({\n value: value === undefined ? undefined : normalizedValue,\n defaultValue: normalizedDefaultValue,\n onChange: (next) => {\n onValueChange?.(multiple ? next : (next[0] ?? \"\"));\n },\n });\n const [open, setOpen] = useState(false);\n const selectedIndex = options.findIndex(\n (option) => option.value === values[0],\n );\n const [activeIndexOverride, setActiveIndexOverride] = useState<number | null>(\n null,\n );\n const activeIndex = activeIndexOverride ?? Math.max(selectedIndex, 0);\n const setActiveIndex = useCallback((index: number) => {\n setActiveIndexOverride(index);\n }, []);\n\n const commit = useEventCallback((index: number) => {\n const option = options[index];\n\n if (!option || option.disabled) {\n return;\n }\n\n setSelectedValues((previous) => {\n if (multiple) {\n return previous.includes(option.value)\n ? previous.filter((selectedValue) => selectedValue !== option.value)\n : [...previous, option.value];\n }\n\n if (previous[0] === option.value) {\n return previous;\n }\n\n return [option.value];\n });\n\n if (!multiple) {\n setOpen(false);\n setActiveIndexOverride(null);\n }\n });\n\n const removeValue = useEventCallback((removedValue: string) => {\n setSelectedValues((previous) =>\n previous.filter((selectedValue) => selectedValue !== removedValue),\n );\n });\n\n const clearValues = useEventCallback(() => {\n setSelectedValues([]);\n });\n\n const context = useMemo<SelectContextValue>(\n () => ({\n values,\n multiple,\n activeIndex,\n open,\n setOpen,\n setActiveIndex,\n commit,\n removeValue,\n clearValues,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n options,\n }),\n [\n activeIndex,\n baseId,\n commit,\n multiple,\n open,\n options,\n removeValue,\n clearValues,\n setActiveIndex,\n values,\n ],\n );\n\n return (\n <SelectContext.Provider value={context}>{children}</SelectContext.Provider>\n );\n}\n\nfunction moveActiveIndex(\n options: Array<SelectOption>,\n activeIndex: number,\n direction: 1 | -1,\n wrap = true,\n) {\n const total = options.length;\n\n if (total === 0) {\n return -1;\n }\n\n for (let step = 1; step <= total; step += 1) {\n const candidate = wrap\n ? (activeIndex + direction * step + total * step) % total\n : activeIndex + direction * step;\n\n if (candidate < 0 || candidate >= total) {\n break;\n }\n\n if (!options[candidate]?.disabled) {\n return candidate;\n }\n }\n\n return activeIndex;\n}\n\n/** 渲染触发器并合并调用方的事件、aria 与 ref。 */\nconst SelectTrigger = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement> & {\n placeholder?: string;\n size?: SelectSize;\n clear?: boolean;\n disabled?: boolean;\n }\n>(function SelectTrigger(\n {\n className,\n placeholder = \"请选择\",\n size = \"md\",\n clear = false,\n disabled,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n forwardedRef,\n) {\n const context = useSelectContext(\"Select.Trigger\");\n const reduceMotion = useReducedMotion() ?? false;\n const selectedOptions = context.values.map((value) => {\n const option = context.options.find((item) => item.value === value);\n\n return option ?? { value, label: value };\n });\n const selectedOption = selectedOptions[0];\n const typeaheadRef = useRef<{\n search: string;\n timer: ReturnType<typeof setTimeout> | null;\n }>({ search: \"\", timer: null });\n const clearTypeahead = useCallback(() => {\n if (typeaheadRef.current.timer) {\n clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.search = \"\";\n }, []);\n\n useEffect(() => clearTypeahead, [clearTypeahead]);\n\n const selectByTypeahead = useEventCallback((character: string) => {\n const state = typeaheadRef.current;\n\n if (state.timer) {\n clearTimeout(state.timer);\n }\n\n state.search += character.toLowerCase();\n state.timer = setTimeout(clearTypeahead, 500);\n\n const labels = context.options.map((option) => {\n const label = option.label;\n\n return (typeof label === \"string\" ? label : option.value).toLowerCase();\n });\n const startIndex =\n context.open && context.activeIndex >= 0 ? context.activeIndex + 1 : 0;\n const orderedIndexes = Array.from(\n { length: labels.length },\n (_, index) => (startIndex + index) % labels.length,\n );\n const exact = orderedIndexes.find(\n (index) =>\n !context.options[index]?.disabled &&\n labels[index]?.startsWith(state.search),\n );\n const fuzzy = orderedIndexes.find(\n (index) =>\n !context.options[index]?.disabled &&\n labels[index]?.includes(state.search),\n );\n const match = exact ?? fuzzy;\n\n if (match === undefined) {\n return;\n }\n\n if (context.open) {\n context.setActiveIndex(match);\n } else if (context.multiple) {\n context.setActiveIndex(match);\n context.setOpen(true);\n } else {\n context.commit(match);\n }\n });\n\n const handlePointerDown = useEventCallback(\n (_event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n\n context.setOpen(!context.open);\n },\n );\n\n const handleKeyDown = useEventCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n\n if (\n event.key.length === 1 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey\n ) {\n event.preventDefault();\n selectByTypeahead(event.key);\n return;\n }\n\n if (event.key === \"Backspace\" && context.multiple) {\n const lastValue = context.values[context.values.length - 1];\n\n if (lastValue) {\n event.preventDefault();\n context.removeValue(lastValue);\n }\n\n return;\n }\n\n if (!context.open) {\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n context.setOpen(true);\n context.setActiveIndex(\n context.activeIndex >= 0\n ? context.activeIndex\n : moveActiveIndex(context.options, -1, 1),\n );\n }\n\n return;\n }\n\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n context.setOpen(false);\n event.currentTarget.focus();\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n context.commit(context.activeIndex);\n event.currentTarget.focus();\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n context.setActiveIndex(\n moveActiveIndex(context.options, context.activeIndex, 1),\n );\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n context.setActiveIndex(\n moveActiveIndex(context.options, context.activeIndex, -1),\n );\n return;\n }\n\n if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const direction = event.key === \"Home\" ? 1 : -1;\n const start = event.key === \"Home\" ? -1 : context.options.length;\n context.setActiveIndex(\n moveActiveIndex(context.options, start, direction, false),\n );\n }\n },\n );\n\n return (\n <div\n {...rest}\n ref={forwardedRef}\n id={context.triggerId}\n role=\"combobox\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-expanded={context.open}\n aria-haspopup=\"listbox\"\n aria-controls={context.open ? context.contentId : undefined}\n aria-activedescendant={\n context.open && context.options[context.activeIndex]\n ? `${context.contentId}-option-${context.activeIndex}`\n : undefined\n }\n data-size={size}\n data-multiple={context.multiple || undefined}\n className={cx(\"uk-select__trigger\", className)}\n onPointerDown={composeHandler(onPointerDown, handlePointerDown)}\n onKeyDown={composeHandler(onKeyDown, handleKeyDown)}\n >\n {context.multiple ? (\n <span className=\"uk-select__tags\">\n <AnimatePresence initial={false}>\n {selectedOptions.map((option) => {\n const label = option.label ?? option.value;\n const accessibleLabel =\n typeof label === \"string\" ? label : option.value;\n\n return (\n <motion.span\n key={option.value}\n className=\"uk-select__tag\"\n data-slot=\"select-tag\"\n layout\n initial={\n reduceMotion ? { opacity: 0 } : { opacity: 0, x: 12 }\n }\n animate={reduceMotion ? { opacity: 1 } : { opacity: 1, x: 0 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, x: 4 }}\n transition={reduceMotion ? { duration: 0 } : TAG_TRANSITION}\n >\n <span className=\"uk-select__tag-label\">{label}</span>\n <button\n type=\"button\"\n className=\"uk-select__tag-remove\"\n disabled={disabled}\n aria-label={`移除 ${accessibleLabel}`}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if (event.key === \"Backspace\") {\n event.stopPropagation();\n }\n }}\n onClick={(event) => {\n event.stopPropagation();\n context.removeValue(option.value);\n }}\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5 5l6 6M11 5l-6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </motion.span>\n );\n })}\n </AnimatePresence>\n {selectedOptions.length === 0 ? (\n <span className=\"uk-select__placeholder\">{placeholder}</span>\n ) : null}\n </span>\n ) : (\n <span className=\"uk-select__value\">\n {selectedOption?.label ?? context.values[0] ?? placeholder}\n </span>\n )}\n <span className=\"uk-select__actions\">\n {clear && !disabled && context.values.length > 0 ? (\n <button\n type=\"button\"\n className=\"uk-select__clear\"\n aria-label=\"清空\"\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if ([\"Backspace\", \" \"].includes(event.key)) {\n event.stopPropagation();\n }\n }}\n onClick={(event) => {\n event.stopPropagation();\n document.getElementById(context.triggerId)?.focus();\n context.clearValues();\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n ) : null}\n <span aria-hidden=\"true\" className=\"uk-select__chevron\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"m4 6.2 4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </span>\n </div>\n );\n});\n\nfunction useSelectPosition(\n triggerElement: HTMLElement | null,\n floatingRef: { current: HTMLDivElement | null },\n): SelectPosition | null {\n const [position, setPosition] = useState<SelectPosition | null>(null);\n\n const updatePosition = useCallback(() => {\n const floating = floatingRef.current;\n\n if (!triggerElement || !floating) {\n return;\n }\n\n const trigger = triggerElement.getBoundingClientRect();\n const floatingRect = floating.getBoundingClientRect();\n const bottomRoom = window.innerHeight - trigger.bottom - 8;\n const topRoom = trigger.top - 8;\n const side: SelectPosition[\"side\"] =\n bottomRoom >= Math.min(floatingRect.height, 320) || bottomRoom >= topRoom\n ? \"bottom\"\n : \"top\";\n const y =\n side === \"bottom\"\n ? trigger.bottom + 6\n : trigger.top - floatingRect.height - 6;\n const x = clamp(\n trigger.left,\n 8,\n Math.max(8, window.innerWidth - trigger.width - 8),\n );\n\n setPosition({ x, y, side });\n }, [floatingRef, triggerElement]);\n\n useLayoutEffect(() => {\n if (!triggerElement) {\n return;\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(floatingRef.current ?? triggerElement);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n resizeObserver?.disconnect();\n };\n }, [floatingRef, triggerElement, updatePosition]);\n\n return position;\n}\n\nfunction SelectLayer({\n emptyText,\n}: {\n emptyText: string;\n}): ReactElement | null {\n const context = useSelectContext(\"Select.Content\");\n const triggerId = context.triggerId;\n const triggerElement = document.getElementById(\n triggerId,\n ) as HTMLElement | null;\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useSelectPosition(triggerElement, floatingRef);\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n\n useEffect(() => {\n if (!context.open) {\n return;\n }\n\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 context.setOpen(false);\n triggerElement?.focus();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n context.setOpen(false);\n triggerElement?.focus();\n }\n };\n const onBlur = () => {\n context.setOpen(false);\n };\n\n document.addEventListener(\"keydown\", onKeyDown, true);\n window.addEventListener(\"blur\", onBlur);\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [context, triggerElement]);\n\n if (!isClient) {\n return null;\n }\n\n const portalContainer =\n triggerElement?.closest<HTMLElement>(\"dialog\") ?? document.body;\n\n return createPortal(\n <div\n ref={floatingRef}\n className=\"uk-select\"\n data-side={position?.side ?? \"bottom\"}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n style={\n {\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n \"--uk-select-width\": `${triggerElement?.offsetWidth ?? 220}px`,\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties\n }\n >\n <motion.div\n className=\"uk-select__surface\"\n style={{ transformOrigin: transformOrigin(position?.side ?? \"bottom\") }}\n initial={\n reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97, y: -4 }\n }\n animate={reduceMotion ? { opacity: 1 } : { opacity: 1, scale: 1, y: 0 }}\n exit={\n reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97, y: -2 }\n }\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : DISCLOSURE_TRANSITION\n }\n >\n {context.options.length === 0 ? (\n <p className=\"uk-select__empty\">{emptyText}</p>\n ) : (\n <LayoutGroup id={`select-${context.contentId}`}>\n <ul\n id={context.contentId}\n className=\"uk-select__list\"\n role=\"listbox\"\n aria-labelledby={triggerId}\n >\n {context.options.map((option, index) => (\n <li\n key={option.value}\n id={`${context.contentId}-option-${index}`}\n role=\"option\"\n aria-disabled={option.disabled || undefined}\n aria-selected={context.values.includes(option.value)}\n data-disabled={option.disabled || undefined}\n data-selected={\n context.values.includes(option.value) || undefined\n }\n data-active={index === context.activeIndex || undefined}\n className=\"uk-select__option\"\n onPointerEnter={(event: ReactPointerEvent<HTMLLIElement>) => {\n if (event.pointerType === \"mouse\" && !option.disabled) {\n context.setActiveIndex(index);\n }\n }}\n onClick={(event: ReactMouseEvent<HTMLLIElement>) => {\n event.stopPropagation();\n context.commit(index);\n }}\n >\n <AnimatePresence initial={false}>\n {index === context.activeIndex ? (\n <motion.span\n className=\"uk-select__option-highlight\"\n data-slot=\"select-active-highlight\"\n layoutId={`${context.contentId}-active`}\n aria-hidden=\"true\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={\n reduceMotion ? { duration: 0 } : INDICATOR_SPRING\n }\n />\n ) : null}\n </AnimatePresence>\n <span className=\"uk-select__option-label\">\n {option.label ?? option.value}\n </span>\n <span aria-hidden=\"true\" className=\"uk-select__check\" />\n </li>\n ))}\n </ul>\n </LayoutGroup>\n )}\n </motion.div>\n </div>,\n portalContainer,\n );\n}\n\n/** Select 单控件:受控/非受控选择、键盘搜索语义由内部共享。 */\ntype SelectInternalProps = SelectBaseProps & {\n multiple?: boolean;\n value?: string | ReadonlyArray<string> | null;\n defaultValue?: string | ReadonlyArray<string> | null;\n onValueChange?: (value: string | Array<string>) => void;\n};\n\nconst Select = forwardRef<HTMLDivElement, SelectInternalProps>(function Select(\n {\n options,\n multiple,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n size = \"md\",\n clear,\n disabled,\n invalid,\n emptyText = \"暂无可选项\",\n className,\n ...rest\n },\n ref,\n) {\n return (\n <SelectRoot\n options={options}\n multiple={multiple}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n <SelectTrigger\n {...rest}\n ref={ref}\n placeholder={placeholder}\n size={size}\n clear={clear}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n data-size={size}\n className={className}\n />\n <SelectPresence emptyText={emptyText} />\n </SelectRoot>\n );\n}) as {\n (\n props: SelectSingleProps & RefAttributes<HTMLDivElement>,\n ): ReactElement | null;\n (\n props: SelectMultipleProps & RefAttributes<HTMLDivElement>,\n ): ReactElement | null;\n};\n\nfunction SelectPresence({ emptyText }: { emptyText: string }): ReactElement {\n const context = useSelectContext(\"Select.Content\");\n\n return (\n <AnimatePresence>\n {context.open ? (\n <SelectLayer key=\"select-layer\" emptyText={emptyText} />\n ) : null}\n </AnimatePresence>\n );\n}\n\nexport { Select };\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 {\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 isValidElement,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type HTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type MarqueeDirection = \"left\" | \"right\" | \"up\" | \"down\";\n\nexport type MarqueeItemClickEvent =\n | MouseEvent<HTMLDivElement>\n | KeyboardEvent<HTMLDivElement>;\n\nexport interface MarqueeItem<TData = unknown> {\n key: string;\n content: ReactNode;\n data?: TData;\n}\n\nexport interface MarqueeItemDetail<TData = unknown> {\n index: number;\n key: string | null;\n data: TData | undefined;\n}\n\nexport interface MarqueeProps<\n TData = unknown,\n> extends HTMLAttributes<HTMLDivElement> {\n direction?: MarqueeDirection;\n speed?: number;\n pauseOnHover?: boolean;\n gap?: string;\n fade?: boolean;\n paused?: boolean;\n items?: ReadonlyArray<MarqueeItem<TData>>;\n onItemClick?: (\n item: MarqueeItemDetail<TData>,\n event: MarqueeItemClickEvent,\n ) => void;\n}\n\ninterface MarqueeEntry<TData> {\n key: string | null;\n content: ReactNode;\n data: TData | undefined;\n}\n\nfunction isExternalInteractiveTarget(\n currentTarget: HTMLDivElement,\n target: EventTarget | null,\n): boolean {\n if (!(target instanceof Element)) {\n return false;\n }\n\n const interactive = target.closest(\n 'a, button, input, select, textarea, label, [contenteditable=\"true\"], [role=\"button\"]',\n );\n\n return interactive !== null && interactive !== currentTarget;\n}\n\nconst Marquee = forwardRef(function Marquee<TData>(\n {\n children,\n className,\n direction = \"left\",\n speed = 30,\n pauseOnHover = true,\n gap = \"1rem\",\n fade = true,\n paused = false,\n items,\n onItemClick,\n ...rest\n }: MarqueeProps<TData>,\n ref: Ref<HTMLDivElement>,\n) {\n const entries: Array<MarqueeEntry<TData>> = items\n ? items.map((item) => ({\n key: item.key,\n content: item.content,\n data: item.data,\n }))\n : Children.toArray(children).map((child, _index) => ({\n key: isValidElement(child) ? (child.key ?? null) : null,\n content: child,\n data: undefined,\n }));\n\n const handleItemClick = (\n entry: MarqueeEntry<TData>,\n index: number,\n event: MouseEvent<HTMLDivElement>,\n ) => {\n if (\n !onItemClick ||\n event.defaultPrevented ||\n isExternalInteractiveTarget(event.currentTarget, event.target)\n ) {\n return;\n }\n\n onItemClick({ index, key: entry.key, data: entry.data }, event);\n };\n\n const handleItemKeyDown = (\n entry: MarqueeEntry<TData>,\n index: number,\n event: KeyboardEvent<HTMLDivElement>,\n ) => {\n if (!onItemClick || event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onItemClick({ index, key: entry.key, data: entry.data }, event);\n }\n };\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 data-paused={paused ? \"true\" : \"false\"}\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 && !onItemClick}\n role={duplicate ? \"presentation\" : undefined}\n onFocusCapture={\n duplicate\n ? (event: FocusEvent<HTMLDivElement>) => {\n if (event.target instanceof HTMLElement) {\n event.target.blur();\n }\n }\n : undefined\n }\n >\n {entries.map((entry, index) => (\n <div\n className=\"uk-marquee__item\"\n key={duplicate ? `duplicate-${index}` : (entry.key ?? index)}\n data-clickable={onItemClick ? \"true\" : undefined}\n {...(onItemClick\n ? {\n role: duplicate ? undefined : \"button\",\n tabIndex: duplicate ? -1 : 0,\n onClick: (event: MouseEvent<HTMLDivElement>) =>\n handleItemClick(entry, index, event),\n onKeyDown: duplicate\n ? undefined\n : (event: KeyboardEvent<HTMLDivElement>) =>\n handleItemKeyDown(entry, index, event),\n }\n : {})}\n >\n {entry.content}\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n}) as <TData = unknown>(\n props: MarqueeProps<TData> & RefAttributes<HTMLDivElement>,\n) => ReactElement | null;\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","CheckBox","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","current","setCurrent","useControllableState","jsx","event","EASE_OUT","EASE_IN_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","DISCLOSURE_TRANSITION","TAG_TRANSITION","TOOLTIP_TRANSITION","TOOLTIP_GROUP_TRANSITION","REDUCED_MOTION_TRANSITION","SelectContext","createContext","useSelectContext","component","context","useContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","composeHandler","childHandler","handler","clamp","value","min","max","normalizeSelectValues","multiple","rawValues","transformOrigin","side","SelectRoot","options","defaultValue","onValueChange","baseId","normalizedValue","normalizedDefaultValue","setSelectedValues","next","open","setOpen","useState","selectedIndex","option","activeIndexOverride","setActiveIndexOverride","activeIndex","setActiveIndex","useCallback","index","commit","useEventCallback","previous","selectedValue","removeValue","removedValue","clearValues","useMemo","moveActiveIndex","direction","wrap","total","step","candidate","SelectTrigger","placeholder","clear","onPointerDown","onKeyDown","forwardedRef","reduceMotion","useReducedMotion","selectedOptions","item","selectedOption","typeaheadRef","useRef","clearTypeahead","useEffect","selectByTypeahead","character","state","labels","label","startIndex","orderedIndexes","_","exact","fuzzy","match","handlePointerDown","_event","handleKeyDown","lastValue","start","AnimatePresence","accessibleLabel","motion","useSelectPosition","triggerElement","floatingRef","position","setPosition","updatePosition","floating","trigger","floatingRect","bottomRoom","topRoom","y","x","useLayoutEffect","resizeObserver","SelectLayer","emptyText","triggerId","isPresent","useIsPresent","isClient","useSyncExternalStore","target","onBlur","portalContainer","createPortal","LayoutGroup","Select","invalid","SelectPresence","Input","inputSize","ariaInvalid","Switch","suppressClickRef","dragRef","thumbX","useMotionValue","controls","animate","finishDrag","drag","first","last","elapsed","velocity","delta","sample","SidebarContext","useSidebarContext","SidebarRoot","hoverPreview","hoverIndicator","groupGap","style","hoveredId","setHoveredId","indicatorBaseId","groupGapValue","rootStyle","SidebarGroup","title","icon","collapsible","defaultOpen","onOpenChange","titleId","contentId","triggerRef","contentRef","hasIcon","expanded","setExpanded","isOpen","triggerHovered","titleContent","Fragment","SidebarItem","active","itemId","indicatorTransition","isValidElement","child","childProps","childClassName","mergedClassName","args","childPointerEnter","childPointerLeave","childPointerCancel","hovered","content","cloneElement","Sidebar","TabsContext","useTabsContext","tabId","panelId","TabsRoot","orientation","setValue","TabsList","triggers","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","selected","TabsContent","Tabs","DialogContext","useDialogContext","DialogRoot","hasTitle","setHasTitle","hasDescription","setHasDescription","DialogTrigger","childOnClick","DialogClose","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","useLockBodyScroll","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","MotionConfig","LegacyDialog","description","footer","closeLabel","showCloseButton","Dialog","isExternalInteractiveTarget","currentTarget","interactive","Marquee","speed","pauseOnHover","gap","fade","paused","items","onItemClick","entries","Children","_index","handleItemClick","entry","handleItemKeyDown","duplicate","TooltipContext","useTooltipContext","setRef","appendDescription","existing","ids","TooltipRoot","delayDuration","closeDelay","setTriggerElement","openTimerRef","closeTimerRef","clearOpenTimer","clearCloseTimer","requestOpen","immediate","dismiss","TooltipTrigger","childRef","childFocus","childBlur","childKeyDown","setTriggerRef","element","oppositeSide","mainAxisRoom","viewportWidth","viewportHeight","padding","fitsOnSide","tooltip","offset","calculateTooltipPosition","align","sideOffset","collisionPadding","avoidCollisions","resolvedSide","opposite","oppositeFits","preferredRoom","oppositeRoom","triggerCenterX","triggerCenterY","arrowMargin","arrowOffset","useTooltipPosition","triggerRect","tooltipRect","useTooltipDismissBehavior","onVisibilityChange","transformOriginForSide","TooltipLayer","wrapperStyle","TooltipContent","props","TooltipGroupContext","useTooltipGroupContext","TooltipGroupLayer","activeValue","contentClassName","floatingStyle","TooltipGroup","setItems","setActiveValue","activate","register","unregister","activeItem","TooltipItem","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/cx.ts","../src/Button.tsx","../src/CheckBox.tsx","../src/motion.ts","../src/Select.tsx","../src/Input.tsx","../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 useId,\n type ForwardRefExoticComponent,\n type InputHTMLAttributes,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport { useControllableState } from \"seam-hooks\";\nimport { cx } from \"./utils/cx\";\n\nexport interface CheckBoxProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"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 的表单、键盘和读屏语义;方框内的对勾用 SVG 描边\n * 展示状态转换,按压时的轻微缩放提供即时的触觉反馈。\n */\nexport const CheckBox: ForwardRefExoticComponent<\n CheckBoxProps & RefAttributes<HTMLInputElement>\n> = forwardRef<HTMLInputElement, CheckBoxProps>(function CheckBox(\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\n const [current, setCurrent] = useControllableState<boolean>({\n value: checked,\n defaultValue: defaultChecked ?? false,\n onChange: onCheckedChange,\n });\n\n return (\n <label\n className={cx(\"uk-checkbox\", className)}\n data-disabled={disabled ? \"true\" : undefined}\n htmlFor={inputId}\n >\n <input\n {...rest}\n ref={ref}\n id={inputId}\n type=\"checkbox\"\n className=\"uk-checkbox__input\"\n checked={current}\n disabled={disabled}\n onChange={(event) => {\n if (disabled) {\n return;\n }\n\n setCurrent(event.target.checked);\n }}\n />\n <span className=\"uk-checkbox__box\" aria-hidden=\"true\">\n <svg\n className=\"uk-checkbox__check\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={3.2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 12.5 L9.5 18 L20 7\" pathLength={1} />\n </svg>\n </span>\n {children ? <span className=\"uk-checkbox__label\">{children}</span> : null}\n </label>\n );\n});\n\nCheckBox.displayName = \"CheckBox\";\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/**\n * Select submenus stay mounted while sibling parents are hovered. The short\n * layout transition keeps the shared panel moving with the pointer instead of\n * replacing one menu with another.\n */\nexport const SELECT_SUBMENU_TRANSITION: Transition = {\n layout: { type: \"spring\", bounce: 0.04, duration: 0.22 },\n opacity: { duration: 0.12, ease: EASE_OUT },\n x: { type: \"spring\", bounce: 0.08, duration: 0.26 },\n scaleX: { type: \"spring\", bounce: 0.08, duration: 0.26 },\n scaleY: { type: \"spring\", bounce: 0.08, duration: 0.26 },\n};\n\n/**\n * Select tags are occasional state indicators. A short re-targeting move\n * keeps the selected queue readable without delaying repeated choices.\n */\nexport const TAG_TRANSITION: Transition = {\n layout: { duration: 0.16, ease: EASE_IN_OUT },\n opacity: { duration: 0.16, ease: EASE_OUT },\n x: { duration: 0.16, 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 createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n} from \"react\";\nimport {\n AnimatePresence,\n LayoutGroup,\n motion,\n useIsPresent,\n useReducedMotion,\n} from \"motion/react\";\nimport { createPortal } from \"react-dom\";\nimport { useControllableState, useEventCallback } from \"seam-hooks\";\nimport {\n DISCLOSURE_TRANSITION,\n INDICATOR_SPRING,\n REDUCED_MOTION_TRANSITION,\n SELECT_SUBMENU_TRANSITION,\n TAG_TRANSITION,\n} from \"./motion\";\nimport { cx } from \"./utils/cx\";\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectOption {\n /** 提交给 onValueChange 的稳定值。 */\n value: string;\n /** 展示内容;缺省时渲染 value。 */\n label?: ReactNode;\n /** 是否禁止选择该项。 */\n disabled?: boolean;\n /** 子选项;提供 children 的节点只作为分组节点,不提交 value。 */\n children?: Array<SelectOption>;\n}\n\ninterface SelectBaseProps extends Omit<\n HTMLAttributes<HTMLElement>,\n \"children\" | \"value\" | \"onChange\" | \"aria-expanded\" | \"defaultValue\"\n> {\n /** 可选项;label 用于展示,value 用于提交。 */\n options: Array<SelectOption>;\n /** 未选择时的展示文本。 */\n placeholder?: string;\n /** 控件尺寸。 */\n size?: SelectSize;\n /** 是否禁用整个控件。 */\n disabled?: boolean;\n /** 列表为空时的提示文本。 */\n emptyText?: string;\n /** 标记选择值无效,使用共享 invalid 样式。 */\n invalid?: boolean;\n /** 标记选项数据正在加载;请求由调用方管理。 */\n loading?: boolean;\n /** loading 时的提示文本。 */\n loadingText?: string;\n /** 是否显示一键清空按钮。 */\n clear?: boolean;\n}\n\nexport interface SelectSingleProps extends SelectBaseProps {\n multiple?: false;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n}\n\nexport interface SelectMultipleProps extends SelectBaseProps {\n multiple: true;\n value?: ReadonlyArray<string>;\n defaultValue?: ReadonlyArray<string>;\n onValueChange?: (value: Array<string>) => void;\n}\n\nexport type SelectProps<Multiple extends boolean = false> = SelectBaseProps &\n (Multiple extends true\n ? {\n multiple: true;\n value?: ReadonlyArray<string>;\n defaultValue?: ReadonlyArray<string>;\n onValueChange?: (value: Array<string>) => void;\n }\n : {\n multiple?: false;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n });\n\ninterface SelectContextValue {\n values: Array<string>;\n multiple: boolean;\n activeIndex: number;\n open: boolean;\n setOpen: (open: boolean) => void;\n setActiveIndex: (index: number) => void;\n commit: (index: number) => void;\n removeValue: (value: string) => void;\n clearValues: () => void;\n triggerId: string;\n contentId: string;\n options: Array<SelectOption>;\n optionNodes: Array<SelectOptionNode>;\n loading: boolean;\n}\n\ninterface SelectOptionNode {\n option: SelectOption;\n index: number;\n parentIndex: number | null;\n depth: number;\n hasChildren: boolean;\n}\n\nconst SelectContext = createContext<SelectContextValue | null>(null);\n\nfunction useSelectContext(component: string): SelectContextValue {\n const context = useContext(SelectContext);\n\n if (!context) {\n throw new Error(`<${component}> must be rendered inside <Select>`);\n }\n\n return context;\n}\n\nconst subscribeToNothing = () => () => {};\nconst getClientSnapshot = () => true;\nconst getServerSnapshot = () => false;\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\ninterface SelectPosition {\n x: number;\n y: number;\n side: \"top\" | \"bottom\";\n}\n\ninterface SelectSubmenu {\n session: number;\n level: number;\n parentIndex: number;\n left: number;\n top: 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 normalizeSelectValues(\n value: string | ReadonlyArray<string> | null | undefined,\n multiple: boolean,\n) {\n const rawValues = multiple ? (value ?? []) : value == null ? [] : [value];\n\n return Array.from(new Set(rawValues as ReadonlyArray<string>));\n}\n\nfunction transformOrigin(\n side: SelectPosition[\"side\"],\n): CSSProperties[\"transformOrigin\"] {\n return side === \"bottom\" ? \"center top\" : \"center bottom\";\n}\n\nfunction flattenSelectOptions(\n options: Array<SelectOption>,\n parentIndex: number | null = null,\n depth = 0,\n): Array<SelectOptionNode> {\n let index = 0;\n\n function flatten(\n currentOptions: Array<SelectOption>,\n currentParentIndex: number | null,\n currentDepth: number,\n ): Array<SelectOptionNode> {\n return currentOptions.flatMap((option) => {\n const children = option.children ?? [];\n const node: SelectOptionNode = {\n option,\n index,\n parentIndex: currentParentIndex,\n depth: currentDepth,\n hasChildren: children.length > 0,\n };\n\n index += 1;\n\n return [node, ...flatten(children, node.index, currentDepth + 1)];\n });\n }\n\n return flatten(options, parentIndex, depth);\n}\n\nfunction findSelectOption(\n options: Array<SelectOption>,\n value: string,\n): SelectOption | null {\n for (const option of options) {\n if (option.value === value) {\n return option;\n }\n\n const child = findSelectOption(option.children ?? [], value);\n\n if (child) {\n return child;\n }\n }\n\n return null;\n}\n\nfunction hasSelectedDescendant(\n option: SelectOption,\n values: Array<string>,\n): boolean {\n return (option.children ?? []).some(\n (child) =>\n values.includes(child.value) || hasSelectedDescendant(child, values),\n );\n}\n\n/** Select 的状态、键盘语义与选项查找根节点。 */\nfunction SelectRoot({\n options,\n loading = false,\n value,\n defaultValue = null,\n onValueChange,\n multiple = false,\n children,\n}: {\n options: Array<SelectOption>;\n loading?: boolean;\n value?: string | ReadonlyArray<string> | null;\n defaultValue?: string | ReadonlyArray<string> | null;\n onValueChange?: (value: string | Array<string>) => void;\n multiple?: boolean;\n children: ReactNode;\n}): ReactElement {\n const baseId = useId();\n const normalizedValue = normalizeSelectValues(value, multiple);\n const normalizedDefaultValue = normalizeSelectValues(defaultValue, multiple);\n const [values, setSelectedValues] = useControllableState<Array<string>>({\n value: value === undefined ? undefined : normalizedValue,\n defaultValue: normalizedDefaultValue,\n onChange: (next) => {\n onValueChange?.(multiple ? next : (next[0] ?? \"\"));\n },\n });\n const [open, setOpen] = useState(false);\n const [previousLoading, setPreviousLoading] = useState(loading);\n\n if (previousLoading !== loading) {\n setPreviousLoading(loading);\n\n if (loading) {\n setOpen(false);\n }\n }\n const optionNodes = useMemo(() => flattenSelectOptions(options), [options]);\n const selectedNodeIndex = optionNodes.findIndex(\n (node) => node.option.value === values[0],\n );\n const [activeIndexOverride, setActiveIndexOverride] = useState<number | null>(\n null,\n );\n const activeIndex = activeIndexOverride ?? Math.max(selectedNodeIndex, 0);\n const setActiveIndex = useCallback((index: number) => {\n setActiveIndexOverride(index);\n }, []);\n\n const commit = useEventCallback((index: number) => {\n const node = optionNodes[index];\n const option = node?.option;\n\n if (loading || !option || option.disabled || node?.hasChildren) {\n return;\n }\n\n setSelectedValues((previous) => {\n if (multiple) {\n return previous.includes(option.value)\n ? previous.filter((selectedValue) => selectedValue !== option.value)\n : [...previous, option.value];\n }\n\n if (previous[0] === option.value) {\n return previous;\n }\n\n return [option.value];\n });\n\n if (!multiple) {\n setOpen(false);\n setActiveIndexOverride(null);\n }\n });\n\n const removeValue = useEventCallback((removedValue: string) => {\n setSelectedValues((previous) =>\n previous.filter((selectedValue) => selectedValue !== removedValue),\n );\n });\n\n const clearValues = useEventCallback(() => {\n setSelectedValues([]);\n });\n\n const context = useMemo<SelectContextValue>(\n () => ({\n values,\n multiple,\n activeIndex,\n open,\n setOpen,\n setActiveIndex,\n commit,\n removeValue,\n clearValues,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-content`,\n options,\n optionNodes,\n loading,\n }),\n [\n activeIndex,\n baseId,\n commit,\n multiple,\n open,\n options,\n optionNodes,\n loading,\n removeValue,\n clearValues,\n setActiveIndex,\n values,\n ],\n );\n\n return (\n <SelectContext.Provider value={context}>{children}</SelectContext.Provider>\n );\n}\n\nfunction moveActiveIndex(\n optionNodes: Array<SelectOptionNode>,\n activeIndex: number,\n direction: 1 | -1,\n wrap = true,\n) {\n const total = optionNodes.length;\n\n if (total === 0) {\n return -1;\n }\n\n for (let step = 1; step <= total; step += 1) {\n const candidate = wrap\n ? (activeIndex + direction * step + total * step) % total\n : activeIndex + direction * step;\n\n if (candidate < 0 || candidate >= total) {\n break;\n }\n\n if (!optionNodes[candidate]?.option.disabled) {\n return candidate;\n }\n }\n\n return activeIndex;\n}\n\nfunction firstChildNodeIndex(\n optionNodes: Array<SelectOptionNode>,\n parentIndex: number,\n) {\n const parentNode = optionNodes[parentIndex];\n\n if (!parentNode?.hasChildren) {\n return parentIndex;\n }\n\n for (\n let index = parentIndex + 1;\n index < optionNodes.length &&\n (optionNodes[index]?.depth ?? 0) > parentNode.depth;\n index += 1\n ) {\n if (\n optionNodes[index]?.depth === parentNode.depth + 1 &&\n !optionNodes[index]?.option.disabled\n ) {\n return index;\n }\n }\n\n return parentIndex;\n}\n\n/** 渲染触发器并合并调用方的事件、aria 与 ref。 */\nconst SelectTrigger = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement> & {\n placeholder?: string;\n size?: SelectSize;\n clear?: boolean;\n loadingText?: string;\n disabled?: boolean;\n }\n>(function SelectTrigger(\n {\n className,\n placeholder = \"请选择\",\n size = \"md\",\n clear = false,\n loadingText = \"加载中...\",\n disabled,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n forwardedRef,\n) {\n const context = useSelectContext(\"Select.Trigger\");\n const reduceMotion = useReducedMotion() ?? false;\n const selectedOptions = context.values.map((value) => {\n const option = findSelectOption(context.options, value);\n\n return option ?? { value, label: value };\n });\n const selectedOption = selectedOptions[0];\n const typeaheadRef = useRef<{\n search: string;\n timer: ReturnType<typeof setTimeout> | null;\n }>({ search: \"\", timer: null });\n const clearTypeahead = useCallback(() => {\n if (typeaheadRef.current.timer) {\n clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.search = \"\";\n }, []);\n\n useEffect(() => clearTypeahead, [clearTypeahead]);\n\n const selectByTypeahead = useEventCallback((character: string) => {\n if (context.loading) {\n return;\n }\n\n const state = typeaheadRef.current;\n\n if (state.timer) {\n clearTimeout(state.timer);\n }\n\n state.search += character.toLowerCase();\n state.timer = setTimeout(clearTypeahead, 500);\n\n const labels = context.optionNodes.map((node) => {\n const label = node.option.label;\n\n return (\n typeof label === \"string\" ? label : node.option.value\n ).toLowerCase();\n });\n const startIndex =\n context.open && context.activeIndex >= 0 ? context.activeIndex + 1 : 0;\n const orderedIndexes = Array.from(\n { length: labels.length },\n (_, index) => (startIndex + index) % labels.length,\n );\n const exact = orderedIndexes.find(\n (index) =>\n !context.optionNodes[index]?.option.disabled &&\n labels[index]?.startsWith(state.search),\n );\n const fuzzy = orderedIndexes.find(\n (index) =>\n !context.optionNodes[index]?.option.disabled &&\n labels[index]?.includes(state.search),\n );\n const match = exact ?? fuzzy;\n\n if (match === undefined) {\n return;\n }\n\n if (context.open) {\n context.setActiveIndex(match);\n } else if (context.multiple || context.optionNodes[match]?.hasChildren) {\n context.setActiveIndex(match);\n context.setOpen(true);\n } else {\n context.commit(match);\n }\n });\n\n const handlePointerDown = useEventCallback(\n (_event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || context.loading) {\n return;\n }\n\n context.setOpen(!context.open);\n },\n );\n\n const handleKeyDown = useEventCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled || context.loading) {\n return;\n }\n\n if (\n event.key.length === 1 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey\n ) {\n event.preventDefault();\n selectByTypeahead(event.key);\n return;\n }\n\n if (event.key === \"Backspace\" && context.multiple) {\n const lastValue = context.values[context.values.length - 1];\n\n if (lastValue) {\n event.preventDefault();\n context.removeValue(lastValue);\n }\n\n return;\n }\n\n if (!context.open) {\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n event.preventDefault();\n context.setOpen(true);\n if (!context.loading) {\n context.setActiveIndex(\n context.activeIndex >= 0\n ? context.activeIndex\n : moveActiveIndex(context.optionNodes, -1, 1),\n );\n }\n }\n\n return;\n }\n\n if (event.key === \"Escape\" || event.key === \"Tab\") {\n context.setOpen(false);\n event.currentTarget.focus();\n return;\n }\n\n const activeNode = context.optionNodes[context.activeIndex];\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (activeNode?.hasChildren) {\n context.setActiveIndex(\n firstChildNodeIndex(context.optionNodes, context.activeIndex),\n );\n event.currentTarget.focus();\n return;\n }\n\n context.commit(context.activeIndex);\n event.currentTarget.focus();\n return;\n }\n\n if (event.key === \"ArrowRight\" && activeNode?.hasChildren) {\n event.preventDefault();\n context.setActiveIndex(\n firstChildNodeIndex(context.optionNodes, context.activeIndex),\n );\n return;\n }\n\n if (event.key === \"ArrowLeft\" && activeNode?.parentIndex != null) {\n event.preventDefault();\n context.setActiveIndex(activeNode.parentIndex);\n return;\n }\n\n if (context.loading) {\n return;\n }\n\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n context.setActiveIndex(\n moveActiveIndex(context.optionNodes, context.activeIndex, 1),\n );\n return;\n }\n\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n context.setActiveIndex(\n moveActiveIndex(context.optionNodes, context.activeIndex, -1),\n );\n return;\n }\n\n if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n const direction = event.key === \"Home\" ? 1 : -1;\n const start = event.key === \"Home\" ? -1 : context.optionNodes.length;\n context.setActiveIndex(\n moveActiveIndex(context.optionNodes, start, direction, false),\n );\n }\n },\n );\n\n return (\n <div\n {...rest}\n ref={forwardedRef}\n id={context.triggerId}\n role=\"combobox\"\n tabIndex={disabled || context.loading ? -1 : 0}\n aria-disabled={disabled || context.loading || undefined}\n aria-expanded={context.open}\n aria-busy={context.loading || undefined}\n aria-haspopup=\"listbox\"\n aria-controls={context.open ? context.contentId : undefined}\n aria-activedescendant={\n context.open && context.optionNodes[context.activeIndex]\n ? `${context.contentId}-option-${context.activeIndex}`\n : undefined\n }\n data-size={size}\n data-multiple={context.multiple || undefined}\n data-loading={context.loading || undefined}\n className={cx(\"uk-select__trigger\", className)}\n onPointerDown={composeHandler(onPointerDown, handlePointerDown)}\n onKeyDown={composeHandler(onKeyDown, handleKeyDown)}\n >\n {context.multiple ? (\n <span className=\"uk-select__tags\">\n <AnimatePresence initial={false}>\n {selectedOptions.map((option) => {\n const label = option.label ?? option.value;\n const accessibleLabel =\n typeof label === \"string\" ? label : option.value;\n\n return (\n <motion.span\n key={option.value}\n className=\"uk-select__tag\"\n data-slot=\"select-tag\"\n layout\n initial={\n reduceMotion ? { opacity: 0 } : { opacity: 0, x: 12 }\n }\n animate={reduceMotion ? { opacity: 1 } : { opacity: 1, x: 0 }}\n exit={reduceMotion ? { opacity: 0 } : { opacity: 0, x: 4 }}\n transition={reduceMotion ? { duration: 0 } : TAG_TRANSITION}\n >\n <span className=\"uk-select__tag-label\">{label}</span>\n <button\n type=\"button\"\n className=\"uk-select__tag-remove\"\n disabled={disabled}\n aria-label={`移除 ${accessibleLabel}`}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if (event.key === \"Backspace\") {\n event.stopPropagation();\n }\n }}\n onClick={(event) => {\n event.stopPropagation();\n context.removeValue(option.value);\n }}\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M5 5l6 6M11 5l-6 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </motion.span>\n );\n })}\n </AnimatePresence>\n {selectedOptions.length === 0 ? (\n <span className=\"uk-select__placeholder\">{placeholder}</span>\n ) : null}\n </span>\n ) : (\n <span className=\"uk-select__value\">\n {selectedOption?.label ?? context.values[0] ?? placeholder}\n </span>\n )}\n <span className=\"uk-select__actions\">\n {clear && !disabled && !context.loading && context.values.length > 0 ? (\n <button\n type=\"button\"\n className=\"uk-select__clear\"\n aria-label=\"清空\"\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if ([\"Backspace\", \" \"].includes(event.key)) {\n event.stopPropagation();\n }\n }}\n onClick={(event) => {\n event.stopPropagation();\n document.getElementById(context.triggerId)?.focus();\n context.clearValues();\n }}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n </button>\n ) : null}\n <span\n aria-hidden=\"true\"\n className={cx(\n \"uk-select__chevron\",\n context.loading && \"uk-select__spinner\",\n )}\n >\n {context.loading ? null : (\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"m4 6.2 4 4 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n </span>\n {context.loading ? (\n <span\n className=\"uk-select__loading-status\"\n role=\"status\"\n aria-live=\"polite\"\n >\n {loadingText}\n </span>\n ) : null}\n </div>\n );\n});\n\nfunction useSelectPosition(\n triggerElement: HTMLElement | null,\n floatingRef: { current: HTMLDivElement | null },\n): SelectPosition | null {\n const [position, setPosition] = useState<SelectPosition | null>(null);\n\n const updatePosition = useCallback(() => {\n const floating = floatingRef.current;\n\n if (!triggerElement || !floating) {\n return;\n }\n\n const trigger = triggerElement.getBoundingClientRect();\n const floatingRect = floating.getBoundingClientRect();\n const bottomRoom = window.innerHeight - trigger.bottom - 8;\n const topRoom = trigger.top - 8;\n const side: SelectPosition[\"side\"] =\n bottomRoom >= Math.min(floatingRect.height, 320) || bottomRoom >= topRoom\n ? \"bottom\"\n : \"top\";\n const y =\n side === \"bottom\"\n ? trigger.bottom + 6\n : trigger.top - floatingRect.height - 6;\n const x = clamp(\n trigger.left,\n 8,\n Math.max(8, window.innerWidth - trigger.width - 8),\n );\n\n setPosition({ x, y, side });\n }, [floatingRef, triggerElement]);\n\n useLayoutEffect(() => {\n if (!triggerElement) {\n return;\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(floatingRef.current ?? triggerElement);\n\n return () => {\n window.removeEventListener(\"resize\", updatePosition);\n window.removeEventListener(\"scroll\", updatePosition, true);\n resizeObserver?.disconnect();\n };\n }, [floatingRef, triggerElement, updatePosition]);\n\n return position;\n}\n\nfunction SelectLayer({\n emptyText,\n}: {\n emptyText: string;\n}): ReactElement | null {\n const context = useSelectContext(\"Select.Content\");\n const triggerId = context.triggerId;\n const triggerElement = document.getElementById(\n triggerId,\n ) as HTMLElement | null;\n const floatingRef = useRef<HTMLDivElement>(null);\n const reduceMotion = useReducedMotion() ?? false;\n const isPresent = useIsPresent();\n const position = useSelectPosition(triggerElement, floatingRef);\n const isClient = useSyncExternalStore(\n subscribeToNothing,\n getClientSnapshot,\n getServerSnapshot,\n );\n const [submenus, setSubmenus] = useState<Array<SelectSubmenu>>([]);\n const [submenuSession, setSubmenuSession] = useState(0);\n const optionNodeRefs = useRef(new Map<number, HTMLLIElement>());\n const submenuRefs = useRef(new Map<number, HTMLDivElement>());\n const [renderedOpen, setRenderedOpen] = useState(context.open);\n const [surfaceSettled, setSurfaceSettled] = useState(false);\n\n if (renderedOpen !== context.open) {\n setRenderedOpen(context.open);\n setSurfaceSettled(false);\n\n if (!context.open) {\n setSubmenus([]);\n setSubmenuSession((session) => session + 1);\n }\n }\n\n useEffect(() => {\n if (!context.open || !position || !surfaceSettled) {\n return;\n }\n\n setSubmenus((previous) => {\n const node = context.optionNodes[context.activeIndex];\n\n if (!node) {\n return previous;\n }\n\n const keepLevel = node.hasChildren ? node.depth + 1 : node.depth;\n const next = previous.filter((submenu) => submenu.level <= keepLevel);\n\n if (!node.hasChildren) {\n return next.length === previous.length ? previous : next;\n }\n\n const parentElement = optionNodeRefs.current.get(node.index);\n\n if (!parentElement) {\n return next;\n }\n\n const parentRect = parentElement.getBoundingClientRect();\n const estimatedWidth = 224;\n const flipLeft =\n parentRect.right + estimatedWidth + 14 > window.innerWidth;\n const left = flipLeft\n ? parentRect.left - estimatedWidth - 6\n : parentRect.right + 6;\n const top = clamp(parentRect.top - 6, 8, window.innerHeight - 8);\n const existing = next.find((submenu) => submenu.level === keepLevel);\n\n if (existing?.parentIndex === node.index) {\n if (existing.left === left && existing.top === top) {\n return previous;\n }\n\n return [\n ...next.filter((submenu) => submenu.level !== keepLevel),\n { ...existing, left, top },\n ];\n }\n\n return [\n ...next.filter((submenu) => submenu.level !== keepLevel),\n {\n session: submenuSession,\n level: keepLevel,\n parentIndex: node.index,\n left,\n top,\n },\n ];\n });\n }, [\n context.activeIndex,\n context.open,\n context.optionNodes,\n submenuSession,\n position,\n surfaceSettled,\n setSubmenus,\n ]);\n\n useEffect(() => {\n if (!context.open) {\n return;\n }\n\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 Array.from(submenuRefs.current.values()).some((element) =>\n element.contains(target),\n )\n ) {\n return;\n }\n\n context.setOpen(false);\n triggerElement?.focus();\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n context.setOpen(false);\n triggerElement?.focus();\n }\n };\n const onBlur = () => {\n context.setOpen(false);\n };\n\n document.addEventListener(\"keydown\", onKeyDown, true);\n window.addEventListener(\"blur\", onBlur);\n\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n window.removeEventListener(\"blur\", onBlur);\n };\n }, [context, triggerElement]);\n\n if (!isClient) {\n return null;\n }\n\n const portalContainer =\n triggerElement?.closest<HTMLElement>(\"dialog\") ?? document.body;\n\n const setOptionNodeRef = useCallback(\n (index: number, element: HTMLLIElement | null) => {\n if (element) {\n optionNodeRefs.current.set(index, element);\n } else {\n optionNodeRefs.current.delete(index);\n }\n },\n [],\n );\n\n const renderOptionNode = (node: SelectOptionNode): ReactElement => {\n const option = node.option;\n const selected = context.values.includes(option.value);\n const active = node.index === context.activeIndex;\n\n return (\n <li\n key={option.value}\n ref={(element) => setOptionNodeRef(node.index, element)}\n id={`${context.contentId}-option-${node.index}`}\n role=\"option\"\n aria-disabled={option.disabled || undefined}\n aria-selected={selected}\n data-disabled={option.disabled || undefined}\n data-selected={\n selected || hasSelectedDescendant(option, context.values) || undefined\n }\n data-active={active || undefined}\n data-has-children={node.hasChildren || undefined}\n data-depth={node.depth}\n className=\"uk-select__option\"\n onPointerEnter={(event: ReactPointerEvent<HTMLLIElement>) => {\n if (event.pointerType === \"mouse\" && !option.disabled) {\n context.setActiveIndex(node.index);\n }\n }}\n onClick={(event: ReactMouseEvent<HTMLLIElement>) => {\n event.stopPropagation();\n\n if (node.hasChildren) {\n context.setActiveIndex(\n firstChildNodeIndex(context.optionNodes, node.index),\n );\n return;\n }\n\n context.commit(node.index);\n }}\n >\n <AnimatePresence initial={false}>\n {active ? (\n <motion.span\n className=\"uk-select__option-highlight\"\n data-slot=\"select-active-highlight\"\n layoutId={`${context.contentId}-active-${node.depth}`}\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 <span className=\"uk-select__option-label\">\n {option.label ?? option.value}\n </span>\n {node.hasChildren ? (\n <span aria-hidden=\"true\" className=\"uk-select__expand\">\n <svg viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"m6 4 4 4-4 4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n ) : (\n <span aria-hidden=\"true\" className=\"uk-select__check\" />\n )}\n </li>\n );\n };\n\n const visibleSubmenus = context.open ? submenus : [];\n\n return createPortal(\n <LayoutGroup id={`select-${context.contentId}`}>\n <div\n ref={floatingRef}\n className=\"uk-select\"\n data-side={position?.side ?? \"bottom\"}\n data-state={isPresent ? \"open\" : \"closed\"}\n aria-hidden={isPresent ? undefined : true}\n style={\n {\n left: position ? `${position.x}px` : 0,\n top: position ? `${position.y}px` : 0,\n \"--uk-select-width\": `${triggerElement?.offsetWidth ?? 220}px`,\n visibility: position ? \"visible\" : \"hidden\",\n } as CSSProperties\n }\n >\n <motion.div\n className=\"uk-select__surface\"\n style={{\n transformOrigin: transformOrigin(position?.side ?? \"bottom\"),\n }}\n initial={\n reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97, y: -4 }\n }\n animate={\n reduceMotion ? { opacity: 1 } : { opacity: 1, scale: 1, y: 0 }\n }\n exit={\n reduceMotion ? { opacity: 0 } : { opacity: 0, scale: 0.97, y: -2 }\n }\n transition={\n reduceMotion ? REDUCED_MOTION_TRANSITION : DISCLOSURE_TRANSITION\n }\n onAnimationComplete={() => {\n if (context.open) {\n setSurfaceSettled(true);\n }\n }}\n >\n {context.options.length === 0 ? (\n <p className=\"uk-select__empty\">{emptyText}</p>\n ) : (\n <ul\n id={context.contentId}\n className=\"uk-select__list\"\n role=\"listbox\"\n aria-labelledby={triggerId}\n aria-owns={\n visibleSubmenus\n .map(\n (submenu) =>\n `${context.contentId}-submenu-${submenu.level}`,\n )\n .join(\" \") || undefined\n }\n >\n {context.optionNodes\n .filter((node) => node.depth === 0)\n .map(renderOptionNode)}\n </ul>\n )}\n </motion.div>\n </div>\n {visibleSubmenus.map((submenu) => {\n const submenuOptions = context.optionNodes.filter(\n (node) => node.parentIndex === submenu.parentIndex,\n );\n\n return (\n <motion.div\n key={`${submenu.session}-${submenu.level}`}\n ref={(element) => {\n if (element) {\n submenuRefs.current.set(submenu.level, element);\n } else {\n submenuRefs.current.delete(submenu.level);\n }\n }}\n className=\"uk-select__submenu\"\n data-select-owner={context.contentId}\n data-state={isPresent ? \"open\" : \"closed\"}\n layout\n initial={{\n opacity: 0,\n x: -34,\n scaleX: 0.18,\n scaleY: 0.36,\n }}\n animate={{ opacity: 1, x: 0, scaleX: 1, scaleY: 1 }}\n exit={{ opacity: 0, x: -16, scaleX: 0.28, scaleY: 0.42 }}\n style={{\n left: submenu.left,\n top: submenu.top,\n transformOrigin: \"left center\",\n }}\n transition={\n reduceMotion\n ? REDUCED_MOTION_TRANSITION\n : SELECT_SUBMENU_TRANSITION\n }\n >\n <ul\n id={`${context.contentId}-submenu-${submenu.level}`}\n className=\"uk-select__list\"\n role=\"listbox\"\n aria-labelledby={triggerId}\n >\n {submenuOptions.map(renderOptionNode)}\n </ul>\n </motion.div>\n );\n })}\n </LayoutGroup>,\n portalContainer,\n );\n}\n\n/** Select 单控件:受控/非受控选择、键盘搜索语义由内部共享。 */\ntype SelectInternalProps = SelectBaseProps & {\n multiple?: boolean;\n value?: string | ReadonlyArray<string> | null;\n defaultValue?: string | ReadonlyArray<string> | null;\n onValueChange?: (value: string | Array<string>) => void;\n};\n\nconst Select = forwardRef<HTMLDivElement, SelectInternalProps>(function Select(\n {\n options,\n multiple,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n size = \"md\",\n clear,\n disabled,\n invalid,\n emptyText = \"暂无可选项\",\n loading = false,\n loadingText = \"加载中...\",\n className,\n ...rest\n },\n ref,\n) {\n return (\n <SelectRoot\n options={options}\n loading={loading}\n multiple={multiple}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n >\n <SelectTrigger\n {...rest}\n ref={ref}\n placeholder={placeholder}\n size={size}\n clear={clear}\n loadingText={loadingText}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n data-size={size}\n className={className}\n />\n <SelectPresence emptyText={emptyText} />\n </SelectRoot>\n );\n}) as {\n (\n props: SelectSingleProps & RefAttributes<HTMLDivElement>,\n ): ReactElement | null;\n (\n props: SelectMultipleProps & RefAttributes<HTMLDivElement>,\n ): ReactElement | null;\n};\n\nfunction SelectPresence({ emptyText }: { emptyText: string }): ReactElement {\n const context = useSelectContext(\"Select.Content\");\n\n return (\n <AnimatePresence>\n {context.open ? (\n <SelectLayer key=\"select-layer\" emptyText={emptyText} />\n ) : null}\n </AnimatePresence>\n );\n}\n\nexport { Select };\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 {\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 isValidElement,\n type FocusEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n type HTMLAttributes,\n type RefAttributes,\n} from \"react\";\nimport { cx } from \"./utils/cx\";\n\nexport type MarqueeDirection = \"left\" | \"right\" | \"up\" | \"down\";\n\nexport type MarqueeItemClickEvent =\n | MouseEvent<HTMLDivElement>\n | KeyboardEvent<HTMLDivElement>;\n\nexport interface MarqueeItem<TData = unknown> {\n key: string;\n content: ReactNode;\n data?: TData;\n}\n\nexport interface MarqueeItemDetail<TData = unknown> {\n index: number;\n key: string | null;\n data: TData | undefined;\n}\n\nexport interface MarqueeProps<\n TData = unknown,\n> extends HTMLAttributes<HTMLDivElement> {\n direction?: MarqueeDirection;\n speed?: number;\n pauseOnHover?: boolean;\n gap?: string;\n fade?: boolean;\n paused?: boolean;\n items?: ReadonlyArray<MarqueeItem<TData>>;\n onItemClick?: (\n item: MarqueeItemDetail<TData>,\n event: MarqueeItemClickEvent,\n ) => void;\n}\n\ninterface MarqueeEntry<TData> {\n key: string | null;\n content: ReactNode;\n data: TData | undefined;\n}\n\nfunction isExternalInteractiveTarget(\n currentTarget: HTMLDivElement,\n target: EventTarget | null,\n): boolean {\n if (!(target instanceof Element)) {\n return false;\n }\n\n const interactive = target.closest(\n 'a, button, input, select, textarea, label, [contenteditable=\"true\"], [role=\"button\"]',\n );\n\n return interactive !== null && interactive !== currentTarget;\n}\n\nconst Marquee = forwardRef(function Marquee<TData>(\n {\n children,\n className,\n direction = \"left\",\n speed = 30,\n pauseOnHover = true,\n gap = \"1rem\",\n fade = true,\n paused = false,\n items,\n onItemClick,\n ...rest\n }: MarqueeProps<TData>,\n ref: Ref<HTMLDivElement>,\n) {\n const entries: Array<MarqueeEntry<TData>> = items\n ? items.map((item) => ({\n key: item.key,\n content: item.content,\n data: item.data,\n }))\n : Children.toArray(children).map((child, _index) => ({\n key: isValidElement(child) ? (child.key ?? null) : null,\n content: child,\n data: undefined,\n }));\n\n const handleItemClick = (\n entry: MarqueeEntry<TData>,\n index: number,\n event: MouseEvent<HTMLDivElement>,\n ) => {\n if (\n !onItemClick ||\n event.defaultPrevented ||\n isExternalInteractiveTarget(event.currentTarget, event.target)\n ) {\n return;\n }\n\n onItemClick({ index, key: entry.key, data: entry.data }, event);\n };\n\n const handleItemKeyDown = (\n entry: MarqueeEntry<TData>,\n index: number,\n event: KeyboardEvent<HTMLDivElement>,\n ) => {\n if (!onItemClick || event.defaultPrevented) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onItemClick({ index, key: entry.key, data: entry.data }, event);\n }\n };\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 data-paused={paused ? \"true\" : \"false\"}\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 && !onItemClick}\n role={duplicate ? \"presentation\" : undefined}\n onFocusCapture={\n duplicate\n ? (event: FocusEvent<HTMLDivElement>) => {\n if (event.target instanceof HTMLElement) {\n event.target.blur();\n }\n }\n : undefined\n }\n >\n {entries.map((entry, index) => (\n <div\n className=\"uk-marquee__item\"\n key={duplicate ? `duplicate-${index}` : (entry.key ?? index)}\n data-clickable={onItemClick ? \"true\" : undefined}\n {...(onItemClick\n ? {\n role: duplicate ? undefined : \"button\",\n tabIndex: duplicate ? -1 : 0,\n onClick: (event: MouseEvent<HTMLDivElement>) =>\n handleItemClick(entry, index, event),\n onKeyDown: duplicate\n ? undefined\n : (event: KeyboardEvent<HTMLDivElement>) =>\n handleItemKeyDown(entry, index, event),\n }\n : {})}\n >\n {entry.content}\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n}) as <TData = unknown>(\n props: MarqueeProps<TData> & RefAttributes<HTMLDivElement>,\n) => ReactElement | null;\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","CheckBox","checked","defaultChecked","onCheckedChange","disabled","id","generatedId","useId","inputId","current","setCurrent","useControllableState","jsx","event","EASE_OUT","EASE_IN_OUT","UI_SPRING","OVERLAY_SPRING","INDICATOR_SPRING","DISCLOSURE_TRANSITION","SELECT_SUBMENU_TRANSITION","TAG_TRANSITION","TOOLTIP_TRANSITION","TOOLTIP_GROUP_TRANSITION","REDUCED_MOTION_TRANSITION","SelectContext","createContext","useSelectContext","component","context","useContext","subscribeToNothing","getClientSnapshot","getServerSnapshot","composeHandler","childHandler","handler","clamp","value","min","max","normalizeSelectValues","multiple","rawValues","transformOrigin","side","flattenSelectOptions","options","parentIndex","depth","index","flatten","currentOptions","currentParentIndex","currentDepth","option","node","findSelectOption","child","hasSelectedDescendant","SelectRoot","defaultValue","onValueChange","baseId","normalizedValue","normalizedDefaultValue","setSelectedValues","next","open","setOpen","useState","previousLoading","setPreviousLoading","optionNodes","useMemo","selectedNodeIndex","activeIndexOverride","setActiveIndexOverride","activeIndex","setActiveIndex","useCallback","commit","useEventCallback","previous","selectedValue","removeValue","removedValue","clearValues","moveActiveIndex","direction","wrap","total","step","candidate","firstChildNodeIndex","parentNode","SelectTrigger","placeholder","clear","loadingText","onPointerDown","onKeyDown","forwardedRef","reduceMotion","useReducedMotion","selectedOptions","selectedOption","typeaheadRef","useRef","clearTypeahead","useEffect","selectByTypeahead","character","state","labels","label","startIndex","orderedIndexes","_","exact","fuzzy","match","handlePointerDown","_event","handleKeyDown","lastValue","activeNode","start","AnimatePresence","accessibleLabel","motion","useSelectPosition","triggerElement","floatingRef","position","setPosition","updatePosition","floating","trigger","floatingRect","bottomRoom","topRoom","y","x","useLayoutEffect","resizeObserver","SelectLayer","emptyText","triggerId","isPresent","useIsPresent","isClient","useSyncExternalStore","submenus","setSubmenus","submenuSession","setSubmenuSession","optionNodeRefs","submenuRefs","renderedOpen","setRenderedOpen","surfaceSettled","setSurfaceSettled","session","keepLevel","submenu","parentElement","parentRect","estimatedWidth","left","top","existing","target","element","onBlur","portalContainer","setOptionNodeRef","renderOptionNode","selected","active","visibleSubmenus","createPortal","LayoutGroup","submenuOptions","Select","invalid","SelectPresence","Input","inputSize","ariaInvalid","Switch","suppressClickRef","dragRef","thumbX","useMotionValue","controls","animate","finishDrag","drag","first","last","elapsed","velocity","delta","sample","SidebarContext","useSidebarContext","SidebarRoot","hoverPreview","hoverIndicator","groupGap","style","hoveredId","setHoveredId","indicatorBaseId","groupGapValue","rootStyle","SidebarGroup","title","icon","collapsible","defaultOpen","onOpenChange","titleId","contentId","triggerRef","contentRef","hasIcon","expanded","setExpanded","isOpen","triggerHovered","titleContent","Fragment","SidebarItem","itemId","indicatorTransition","isValidElement","childProps","childClassName","mergedClassName","args","childPointerEnter","childPointerLeave","childPointerCancel","hovered","content","cloneElement","Sidebar","TabsContext","useTabsContext","tabId","panelId","TabsRoot","orientation","setValue","TabsList","triggers","nextKey","previousKey","nextIndex","nextTrigger","TabsTrigger","onClick","TabsContent","Tabs","DialogContext","useDialogContext","DialogRoot","hasTitle","setHasTitle","hasDescription","setHasDescription","DialogTrigger","childOnClick","DialogClose","DialogHeader","DialogTitle","DialogDescription","DialogBody","DialogFooter","DialogLayer","requestClose","descriptionId","closeOnBackdropClick","closeOnEscape","initialFocusRef","returnFocusRef","ariaLabel","ariaLabelledBy","ariaDescribedBy","dialogRef","openerRef","useLockBodyScroll","dialog","useFocusTrap","reopen","onClose","onCancel","DialogContent","MotionConfig","LegacyDialog","description","footer","closeLabel","showCloseButton","Dialog","isExternalInteractiveTarget","currentTarget","interactive","Marquee","speed","pauseOnHover","gap","fade","paused","items","onItemClick","entries","item","Children","_index","handleItemClick","entry","handleItemKeyDown","duplicate","TooltipContext","useTooltipContext","setRef","appendDescription","ids","TooltipRoot","delayDuration","closeDelay","setTriggerElement","openTimerRef","closeTimerRef","clearOpenTimer","clearCloseTimer","requestOpen","immediate","dismiss","TooltipTrigger","childRef","childFocus","childBlur","childKeyDown","setTriggerRef","oppositeSide","mainAxisRoom","viewportWidth","viewportHeight","padding","fitsOnSide","tooltip","offset","calculateTooltipPosition","align","sideOffset","collisionPadding","avoidCollisions","resolvedSide","opposite","oppositeFits","preferredRoom","oppositeRoom","triggerCenterX","triggerCenterY","arrowMargin","arrowOffset","useTooltipPosition","triggerRect","tooltipRect","useTooltipDismissBehavior","onVisibilityChange","transformOriginForSide","TooltipLayer","wrapperStyle","TooltipContent","props","TooltipGroupContext","useTooltipGroupContext","TooltipGroupLayer","activeValue","contentClassName","floatingStyle","TooltipGroup","setItems","setActiveValue","activate","register","unregister","activeItem","TooltipItem","Tooltip"],"mappings":"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"}